public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: rcampbell@tropicnetworks.com
To: gcc-gnats@gcc.gnu.org
Cc: Endlisnis@mailc.net
Subject: c++/10527: Internal error during template compile
Date: Mon, 28 Apr 2003 21:46:00 -0000	[thread overview]
Message-ID: <20030428213804.13069.qmail@sources.redhat.com> (raw)


>Number:         10527
>Category:       c++
>Synopsis:       Internal error during template compile
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Apr 28 21:46:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     rcampbell@tropicnetworks.com
>Release:        3.2
>Organization:
>Environment:
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs
Configured with: /netrel/src/gcc-3.2-3/configure --enable-languages=c,c++,f77,java --enable-libgcj --enable-threads=posix --with-system-zlib --enable-nls --without-included-gettext --enable-interpreter --disable-sjlj-exceptions --disable-version-specific-runtime-libs --enable-shared --build=i686-pc-linux --host=i686-pc-cygwin --target=i686-pc-cygwin --enable-haifa --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --includedir=/nonexistent/include --libexecdir=/usr/sbin
Thread model: posix
gcc version 3.2 20020927 (prerelease)
>Description:
Internal error while compiling some (fairly) complicated template code.
>How-To-Repeat:
g++ -save-temps -W -Wall a.cc -o a.exe
>Fix:

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

IyAxICJhLmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAiYS5j
YyIKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2lvc3RyZWFtIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYt
cGMtY3lnd2luL2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0NSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL29zdHJlYW0iIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAzCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2lvcyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDEgMwojIDQzICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
cmluZ2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4K
ICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8
Y2hhcj47CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRv
cjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNo
YXI+IHN0cmluZzsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMg
NDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9mcG9zLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zw
b3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2Mr
K2lvLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRz
L2MrK2lvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDEgMwojIDQ4ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAzCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDE0OSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjAzICIvdXNyL2xpYi9nY2MtbGliL2k2
ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19h
bnNpLmgiIDEgMwojIDE1ICIvdXNyL2luY2x1ZGUvX2Fuc2kuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9uZXdsaWIuaCIgMSAzCiMgMTYgIi91c3IvaW5jbHVkZS9fYW5zaS5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWFjaGluZS9p
ZWVlZnAuaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL3N5cy9jb25maWcuaCIgMiAzCiMgMTcgIi91
c3IvaW5jbHVkZS9fYW5zaS5oIiAyIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDQgIi91
c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlw
ZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAzOCAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDEgMwoj
IDkgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9fdHlwZXMuaCIgMSAzCiMgMTIgIi91c3IvaW5jbHVkZS9zeXMvX3R5cGVz
LmgiIDMKdHlwZWRlZiBsb25nIF9vZmZfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9u
ZyBfb2ZmNjRfdDsKCgp0eXBlZGVmIGludCBfc3NpemVfdDsKCgoKCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyMyAiL3Vz
ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvX3R5cGVzLmgi
IDIgMwoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdp
bnRfdCBfX3djaDsKICAgIHVuc2lnbmVkIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBf
bWJzdGF0ZV90OwoKdHlwZWRlZiBpbnQgX2Zsb2NrX3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9zeXMv
cmVlbnQuaCIgMiAzCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19VTG9uZzsKIyA0MCAiL3Vz
ci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzCnN0cnVjdCBfQmlnaW50CnsKICBzdHJ1Y3QgX0JpZ2lu
dCAqX25leHQ7CiAgaW50IF9rLCBfbWF4d2RzLCBfc2lnbiwgX3dkczsKICBfX1VMb25nIF94WzFd
Owp9OwoKCnN0cnVjdCBfX3RtCnsKICBpbnQgX190bV9zZWM7CiAgaW50IF9fdG1fbWluOwogIGlu
dCBfX3RtX2hvdXI7CiAgaW50IF9fdG1fbWRheTsKICBpbnQgX190bV9tb247CiAgaW50IF9fdG1f
eWVhcjsKICBpbnQgX190bV93ZGF5OwogIGludCBfX3RtX3lkYXk7CiAgaW50IF9fdG1faXNkc3Q7
Cn07CiMgNjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX2F0ZXhpdCB7CiAg
ICAgICAgc3RydWN0IF9hdGV4aXQgKl9uZXh0OwogICAgICAgIGludCBfaW5kOwogICAgICAgIHZv
aWQgKCpfZm5zWzMyXSkodm9pZCk7CiAgICAgICAgdm9pZCAqX2ZuYXJnc1szMl07CiAgICAgICAg
X19VTG9uZyBfZm50eXBlczsKfTsKIyA5MSAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzCnN0
cnVjdCBfX3NidWYgewogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9iYXNlOwogICAgICAgIGludCBf
c2l6ZTsKfTsKCgoKCgoKdHlwZWRlZiBsb25nIF9mcG9zX3Q7CgoKCnR5cGVkZWYgX29mZjY0X3Qg
X2Zwb3M2NF90OwojIDE1NiAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzCnN0cnVjdCBfX3NG
SUxFIHsKICB1bnNpZ25lZCBjaGFyICpfcDsKICBpbnQgX3I7CiAgaW50IF93OwogIHNob3J0IF9m
bGFnczsKICBzaG9ydCBfZmlsZTsKICBzdHJ1Y3QgX19zYnVmIF9iZjsKICBpbnQgX2xiZnNpemU7
CgoKCgoKCiAgdm9pZCAqIF9jb29raWU7CgogIF9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpICgqX3JlYWQpICh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKTsKICBf
c3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl93cml0ZSkgKHZvaWQgKiBfY29v
a2llLCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pOwoKICBfZnBvc190IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBfb2Zmc2V0LCBp
bnQgX3doZW5jZSk7CiAgaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgqX2Nsb3NlKSAo
dm9pZCAqIF9jb29raWUpOwoKCiAgc3RydWN0IF9fc2J1ZiBfdWI7CiAgdW5zaWduZWQgY2hhciAq
X3VwOwogIGludCBfdXI7CgoKICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwogIHVuc2lnbmVkIGNo
YXIgX25idWZbMV07CgoKICBzdHJ1Y3QgX19zYnVmIF9sYjsKCgogIGludCBfYmxrc2l6ZTsKICBp
bnQgX29mZnNldDsKCgogIHN0cnVjdCBfcmVlbnQgKl9kYXRhOwoKCgogIF9mbG9ja190IF9sb2Nr
OwoKfTsKCgpzdHJ1Y3QgX19zRklMRTY0IHsKICB1bnNpZ25lZCBjaGFyICpfcDsKICBpbnQgX3I7
CiAgaW50IF93OwogIHNob3J0IF9mbGFnczsKICBzaG9ydCBfZmlsZTsKICBzdHJ1Y3QgX19zYnVm
IF9iZjsKICBpbnQgX2xiZnNpemU7CgogIHN0cnVjdCBfcmVlbnQgKl9kYXRhOwoKCiAgdm9pZCAq
IF9jb29raWU7CgogIF9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgqX3JlYWQp
ICh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKTsKICBfc3NpemVfdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSAoKl93cml0ZSkgKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFy
ICpfYnVmLCBpbnQgX24pOwoKICBfZnBvc190IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgq
X3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBfb2Zmc2V0LCBpbnQgX3doZW5jZSk7CiAg
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgqX2Nsb3NlKSAodm9pZCAqIF9jb29raWUp
OwoKCiAgc3RydWN0IF9fc2J1ZiBfdWI7CiAgdW5zaWduZWQgY2hhciAqX3VwOwogIGludCBfdXI7
CgoKICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwogIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CgoK
ICBzdHJ1Y3QgX19zYnVmIF9sYjsKCgogIGludCBfYmxrc2l6ZTsKICBpbnQgX2ZsYWdzMjsKCiAg
X29mZjY0X3QgX29mZnNldDsKICBfZnBvczY0X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
KCpfc2VlazY0KSAodm9pZCAqIF9jb29raWUsIF9mcG9zNjRfdCBfb2Zmc2V0LCBpbnQgX3doZW5j
ZSk7CgoKICBfZmxvY2tfdCBfbG9jazsKCn07CnR5cGVkZWYgc3RydWN0IF9fc0ZJTEU2NCBfX0ZJ
TEU7CgoKCgpzdHJ1Y3QgX2dsdWUKewogIHN0cnVjdCBfZ2x1ZSAqX25leHQ7CiAgaW50IF9uaW9i
czsKICBfX0ZJTEUgKl9pb2JzOwp9OwojIDI4MCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAz
CnN0cnVjdCBfcmFuZDQ4IHsKICB1bnNpZ25lZCBzaG9ydCBfc2VlZFszXTsKICB1bnNpZ25lZCBz
aG9ydCBfbXVsdFszXTsKICB1bnNpZ25lZCBzaG9ydCBfYWRkOwoKCgoKfTsKIyA1MzAgIi91c3Iv
aW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX3JlZW50CnsKICBpbnQgX2Vycm5vOwoKCgoK
ICBfX0ZJTEUgKl9zdGRpbiwgKl9zdGRvdXQsICpfc3RkZXJyOwoKICBpbnQgX2luYzsKICBjaGFy
IF9lbWVyZ2VuY3lbMjVdOwoKICBpbnQgX2N1cnJlbnRfY2F0ZWdvcnk7CiAgY29uc3QgY2hhciAq
X2N1cnJlbnRfbG9jYWxlOwoKICBpbnQgX19zZGlkaW5pdDsKCiAgdm9pZCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSAoKl9fY2xlYW51cCkgKHN0cnVjdCBfcmVlbnQgKik7CgoKICBzdHJ1Y3Qg
X0JpZ2ludCAqX3Jlc3VsdDsKICBpbnQgX3Jlc3VsdF9rOwogIHN0cnVjdCBfQmlnaW50ICpfcDVz
OwogIHN0cnVjdCBfQmlnaW50ICoqX2ZyZWVsaXN0OwoKCiAgaW50IF9jdnRsZW47CiAgY2hhciAq
X2N2dGJ1ZjsKCiAgdW5pb24KICAgIHsKICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAg
dW5zaWduZWQgaW50IF91bnVzZWRfcmFuZDsKICAgICAgICAgIGNoYXIgKiBfc3RydG9rX2xhc3Q7
CiAgICAgICAgICBjaGFyIF9hc2N0aW1lX2J1ZlsyNl07CiAgICAgICAgICBzdHJ1Y3QgX190bSBf
bG9jYWx0aW1lX2J1ZjsKICAgICAgICAgIGludCBfZ2FtbWFfc2lnbmdhbTsKICAgICAgICAgIF9f
ZXh0ZW5zaW9uX18gdW5zaWduZWQgbG9uZyBsb25nIF9yYW5kX25leHQ7CiAgICAgICAgICBzdHJ1
Y3QgX3JhbmQ0OCBfcjQ4OwogICAgICAgICAgX21ic3RhdGVfdCBfbWJsZW5fc3RhdGU7CiAgICAg
ICAgICBfbWJzdGF0ZV90IF9tYnRvd2Nfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3Rv
bWJfc3RhdGU7CiAgICAgICAgICBjaGFyIF9sNjRhX2J1Zls4XTsKICAgICAgICAgIGNoYXIgX3Np
Z25hbF9idWZbMjRdOwogICAgICAgICAgaW50IF9nZXRkYXRlX2VycjsKICAgICAgICAgIF9tYnN0
YXRlX3QgX21icmxlbl9zdGF0ZTsKICAgICAgICAgIF9tYnN0YXRlX3QgX21icnRvd2Nfc3RhdGU7
CiAgICAgICAgICBfbWJzdGF0ZV90IF9tYnNydG93Y3Nfc3RhdGU7CiAgICAgICAgICBfbWJzdGF0
ZV90IF93Y3J0b21iX3N0YXRlOwogICAgICAgICAgX21ic3RhdGVfdCBfd2NzcnRvbWJzX3N0YXRl
OwogICAgICAgIH0gX3JlZW50OwoKCgogICAgICBzdHJ1Y3QKICAgICAgICB7CgogICAgICAgICAg
dW5zaWduZWQgY2hhciAqIF9uZXh0ZlszMF07CiAgICAgICAgICB1bnNpZ25lZCBpbnQgX25tYWxs
b2NbMzBdOwogICAgICAgIH0gX3VudXNlZDsKICAgIH0gX25ldzsKCgogIHN0cnVjdCBfYXRleGl0
ICpfYXRleGl0OwogIHN0cnVjdCBfYXRleGl0IF9hdGV4aXQwOwoKCiAgdm9pZCAoKiooX3NpZ19m
dW5jKSkoaW50KTsKCgoKCiAgc3RydWN0IF9nbHVlIF9fc2dsdWU7CiAgX19GSUxFIF9fc2ZbM107
Cn07CiMgNzI2ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBfcmVl
bnQgKl9pbXB1cmVfcHRyIDsKCnZvaWQgX3JlY2xhaW1fcmVlbnQgKHN0cnVjdCBfcmVlbnQgKik7
CiMgNzQ0ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKfQojIDQ2ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNCAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgc2hvcnQgaW50IF9faW50MTZfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKCgoKCgp0eXBlZGVmIGludCBfX2lu
dDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgoKCgoKCl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBsb25nIGxvbmcgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5z
aWduZWQgbG9uZyBsb25nIF9fdWludDY0X3Q7CiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDU2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvbWFjaGluZS90
eXBlcy5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsK
Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fbG9mZl90OwojIDU3ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDc4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1
X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IHVfbG9uZzsKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVpbnQ7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBjbG9ja190OwoKCgoKdHlwZWRl
ZiBsb25nIHRpbWVfdDsKCgoKCnN0cnVjdCB0aW1lc3BlYyB7CiAgdGltZV90IHR2X3NlYzsKICBs
b25nIHR2X25zZWM7Cn07CgpzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAgc3RydWN0IHRpbWVzcGVjIGl0
X2ludGVydmFsOwogIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfTsKCgp0eXBlZGVmIGxvbmcg
ZGFkZHJfdDsKdHlwZWRlZiBjaGFyICogY2FkZHJfdDsKIyAxNjYgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMwp0eXBlZGVmIGludCBwaWRfdDsKdHlwZWRlZiBsb25nIGtleV90Owp0eXBlZGVm
IF9zc2l6ZV90IHNzaXplX3Q7CiMgMTg3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBubGlua190OwojIDIwOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzCnR5cGVkZWYgbG9uZyBmZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3R5cGVz
X2ZkX3NldCB7CiAgICAgICAgZmRfbWFzayBmZHNfYml0c1soKCg2NCkrKCgoc2l6ZW9mIChmZF9t
YXNrKSAqIDgpKS0xKSkvKChzaXplb2YgKGZkX21hc2spICogOCkpKV07Cn0gX3R5cGVzX2ZkX3Nl
dDsKIyAyNDUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgY2xvY2tpZF90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRpbWVyX3Q7CgoKCgp0eXBl
ZGVmIGxvbmcgdXNlY29uZHNfdDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCIg
MSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCIgMwpleHRlcm4gIkMiIHsKIyA5
MyAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAzCn0KIyAyNTkgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMiAzCiMgMzYzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvY3lnd2luL3R5cGVzLmgiIDEgMwojIDEzICIvdXNyL2luY2x1ZGUvY3lnd2lu
L3R5cGVzLmgiIDMKZXh0ZXJuICJDIgp7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21h
Y3Jvcy5oIiAxIDMKIyAyMSAiL3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAyIDMKCgoKdHlw
ZWRlZiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHRpbWVz
cGVjIHRpbWVzdHJ1Y190OwoKCgoKdHlwZWRlZiBsb25nIF9fb2ZmMzJfdDsKdHlwZWRlZiBsb25n
IGxvbmcgX19vZmY2NF90OwoKCgp0eXBlZGVmIF9fb2ZmMzJfdCBvZmZfdDsKCgoKCgp0eXBlZGVm
IHNob3J0IF9fZGV2MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZGV2MzJfdDsKCgoKdHlw
ZWRlZiBfX2RldjE2X3QgZGV2X3Q7CgoKCgoKdHlwZWRlZiBsb25nIGJsa3NpemVfdDsKCgoKCnR5
cGVkZWYgbG9uZyBfX2Jsa2NudDMyX3Q7CnR5cGVkZWYgbG9uZyBsb25nIF9fYmxrY250NjRfdDsK
CgoKdHlwZWRlZiBfX2Jsa2NudDMyX3QgYmxrY250X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBfX3VpZDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpZDMyX3Q7CgoKCnR5cGVk
ZWYgX191aWQxNl90IHVpZF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19naWQxNl90
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19naWQzMl90OwoKCgp0eXBlZGVmIF9fZ2lkMTZfdCBn
aWRfdDsKIyA5NyAiL3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbm9fdDsKIyAxMDYgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMwp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgdm1fb2Zmc2V0X3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
dm1fc2l6ZV90OwoKCgoKdHlwZWRlZiBjaGFyIGludDhfdDsKCgoKdHlwZWRlZiBfX2ludDE2X3Qg
aW50MTZfdDsKCgoKdHlwZWRlZiBfX2ludDMyX3QgaW50MzJfdDsKCgoKdHlwZWRlZiBfX2ludDY0
X3QgaW50NjRfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwoKCgp0eXBlZGVm
IF9fdWludDE2X3QgdWludDE2X3Q7CgoKCnR5cGVkZWYgX191aW50MzJfdCB1aW50MzJfdDsKCgoK
dHlwZWRlZiBfX3VpbnQ2NF90IHVpbnQ2NF90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVf
aW50OF90OwoKCgp0eXBlZGVmIF9fdWludDE2X3QgdV9pbnQxNl90OwoKCgp0eXBlZGVmIF9fdWlu
dDMyX3QgdV9pbnQzMl90OwoKCgp0eXBlZGVmIF9fdWludDY0X3QgdV9pbnQ2NF90OwoKCgoKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnRwdHJfdDsK
CgoKCnR5cGVkZWYgX19pbnQzMl90IHJlZ2lzdGVyX3Q7CgoKCgp0eXBlZGVmIGNoYXIgKmFkZHJf
dDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbW9kZV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRo
cmVhZF90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF90Owp0eXBlZGVmIHN0cnVjdCBfX3B0aHJl
YWRfbXV0ZXhfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYgc3Ry
dWN0IF9fcHRocmVhZF9rZXlfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfa2V5X3Q7CnR5cGVk
ZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX2F0dHJf
dDsKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX211dGV4YXR0cl90IHtjaGFyIF9fZHVtbXk7fSAq
cHRocmVhZF9tdXRleGF0dHJfdDsKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2NvbmRhdHRyX3Qg
e2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX2NvbmRhdHRyX3Q7CnR5cGVkZWYgc3RydWN0IF9fcHRo
cmVhZF9jb25kX3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX2NvbmRfdDsKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgcHRocmVhZF9tdXRleF90IG11dGV4OwogIGludCBzdGF0ZTsKfQpwdGhyZWFkX29u
Y2VfdDsKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX3J3bG9ja190IHtjaGFyIF9fZHVtbXk7fSAq
cHRocmVhZF9yd2xvY2tfdDsKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX3J3bG9ja2F0dHJfdCB7
Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfcndsb2NrYXR0cl90OwojIDIzMyAiL3Vzci9pbmNsdWRl
L2N5Z3dpbi90eXBlcy5oIiAzCn0KIyAzNjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
CiMgNDcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBf
X0ZJTEUgRklMRTsKCgoKCgp0eXBlZGVmIF9mcG9zX3QgZnBvc190OwojIDY1ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RkaW8uaCIgMSAzCiMgNjYgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyAxNzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCkZJ
TEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0bXBmaWxlICh2b2lkKTsKY2hhciAqIF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRtcG5hbSAoY2hhciAqKTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGZjbG9zZSAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGZmbHVzaCAoRklMRSAqKTsKRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IGZyZW9wZW4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwp2b2lkIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGJ1ZiAoRklMRSAqLCBjaGFyICopOwppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0dmJ1ZiAoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZwcmludGYgKEZJTEUgKiwgY29uc3Qg
Y2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNjYW5mIChGSUxF
ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHBy
aW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
c2NhbmYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IHNzY2FuZiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSB2ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192
YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZwcmludGYgKGNvbnN0IGNo
YXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNw
cmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBmZ2V0YyAoRklMRSAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIGZnZXRzIChjaGFyICosIGludCwgRklMRSAqKTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGZwdXRjIChpbnQsIEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBmcHV0cyAoY29uc3QgY2hhciAqLCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgZ2V0YyAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIGdldGNoYXIgKHZvaWQpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0
cyAoY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dGMgKGludCwgRklM
RSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dGNoYXIgKGludCk7CmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRzIChjb25zdCBjaGFyICopOwppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgdW5nZXRjIChpbnQsIEZJTEUgKik7CnNpemVfdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBmcmVhZCAodm9pZCAqLCBzaXplX3QgX3NpemUsIHNpemVfdCBf
biwgRklMRSAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ3cml0ZSAoY29u
c3Qgdm9pZCAqICwgc2l6ZV90IF9zaXplLCBzaXplX3QgX24sIEZJTEUgKik7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBmZ2V0cG9zIChGSUxFICosIGZwb3NfdCAqKTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGZzZWVrIChGSUxFICosIGxvbmcsIGludCk7CmludCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc2V0cG9zIChGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsK
bG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdGVsbCAoIEZJTEUgKik7CnZvaWQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmV3aW5kIChGSUxFICopOwp2b2lkIF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGNsZWFyZXJyIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgZmVvZiAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZl
cnJvciAoRklMRSAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwZXJyb3IgKGNv
bnN0IGNoYXIgKik7CgpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZm9wZW4gKGNv
bnN0IGNoYXIgKl9uYW1lLCBjb25zdCBjaGFyICpfdHlwZSk7CmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHJlbW92ZSAoY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHJlbmFtZSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoK
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhc3ByaW50ZiAoY2hhciAqKiwgY29uc3Qg
Y2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNlZWtvIChGSUxF
ICosIG9mZl90LCBpbnQpOwpvZmZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdGVsbG8g
KCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdmZpcHJpbnRmIChGSUxF
ICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgaXByaW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgZmlwcmludGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2lwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAu
Li4pOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdGVtcG5hbSAoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdmFzcHJp
bnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHZzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIg
KiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdmZzY2Fu
ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIHZzY2FuZiAoY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7Cmlu
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2c3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IGZjbG9zZWFsbCAodm9pZCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzbnByaW50
ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKIyAyMzkgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAzCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZG9wZW4gKGlu
dCwgY29uc3QgY2hhciAqKTsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmaWxlbm8g
KEZJTEUgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXR3IChGSUxFICopOwpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcGNsb3NlIChGSUxFICopOwpGSUxFICogX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcG9wZW4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dHcgKGludCwgRklMRSAqKTsKdm9p
ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRidWZmZXIgKEZJTEUgKiwgY2hhciAqLCBp
bnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0bGluZWJ1ZiAoRklMRSAqKTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGNfdW5sb2NrZWQgKEZJTEUgKik7Cmlu
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRjaGFyX3VubG9ja2VkICh2b2lkKTsKdm9p
ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmbG9ja2ZpbGUgKEZJTEUgKik7CmludCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdHJ5bG9ja2ZpbGUgKEZJTEUgKik7CnZvaWQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgZnVubG9ja2ZpbGUgKEZJTEUgKik7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBwdXRjX3VubG9ja2VkIChpbnQsIEZJTEUgKik7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjaGFyX3VubG9ja2VkIChpbnQpOwoKCgoKCgppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2FzcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hh
ciAqKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
X2ZjbG9zZWFsbF9yIChzdHJ1Y3QgX3JlZW50ICopOwpGSUxFICogX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgX2Zkb3Blbl9yIChzdHJ1Y3QgX3JlZW50ICosIGludCwgY29uc3QgY2hhciAqKTsK
RklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9mb3Blbl9yIChzdHJ1Y3QgX3JlZW50
ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIF9mc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwg
Li4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9nZXRjaGFyX3IgKHN0cnVjdCBf
cmVlbnQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0c19yIChzdHJ1
Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfaXBy
aW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIF9ta3N0ZW1wX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsK
Y2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ta3RlbXBfciAoc3RydWN0IF9yZWVu
dCAqLCBjaGFyICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wZXJyb3JfciAo
c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgX3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRjaGFyX3IgKHN0cnVjdCBfcmVlbnQgKiwg
aW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRzX3IgKHN0cnVjdCBfcmVl
bnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9yZW1v
dmVfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgX3JlbmFtZV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9vbGQs
IGNvbnN0IGNoYXIgKl9uZXcpOwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zY2Fu
Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIF9zcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBjb25z
dCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc25wcmludGZf
ciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NzY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICos
IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpjaGFyICogX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgX3RlbXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG1wZmlsZV9y
IChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3Rt
cG5hbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBfdmFzcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29uc3QgY2hh
ciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdmZw
cmludGZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3Zh
X2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZwcmludGZfciAoc3RydWN0
IF9yZWVudCAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIF92c3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgY29u
c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfdnNucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNvbnN0IGNo
YXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3Zm
c2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3Zh
X2xpc3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZzY2FuZl9yIChzdHJ1Y3Qg
X3JlZW50ICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfX2dldGRlbGltIChjaGFyICoqLCBzaXplX3QgKiwgaW50LCBGSUxFICopOwpz
c2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0bGluZSAoY2hhciAqKiwgc2l6
ZV90ICosIEZJTEUgKik7CiMgMzE5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgX19zcmdldCAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIF9fc3didWYgKGludCwgRklMRSAqKTsKCgoKCgoKRklMRSAqX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgZnVub3BlbiAoY29uc3Qgdm9pZCAqIF9jb29raWUsIGludCAoKnJl
YWRmbikodm9pZCAqIF9jb29raWUsIGNoYXIgKl9idWYsIGludCBfbiksIGludCAoKndyaXRlZm4p
KHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pLCBmcG9zX3QgKCpzZWVr
Zm4pKHZvaWQgKiBfY29va2llLCBmcG9zX3QgX29mZiwgaW50IF93aGVuY2UpLCBpbnQgKCpjbG9z
ZWZuKSh2b2lkICogX2Nvb2tpZSkpOwojIDM0NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKc3Rh
dGljIF9faW5saW5lX18gaW50IF9fc2dldGMoRklMRSAqX19wKQogIHsKICAgIGludCBfX2MgPSAo
LS0oX19wKS0+X3IgPCAwID8gX19zcmdldChfX3ApIDogKGludCkoKihfX3ApLT5fcCsrKSk7CiAg
ICBpZiAoKF9fcC0+X2ZsYWdzICYgMHg0MDAwKSAmJiAoX19jID09ICdccicpKQogICAgICB7CiAg
ICAgIGludCBfX2MyID0gKC0tKF9fcCktPl9yIDwgMCA/IF9fc3JnZXQoX19wKSA6IChpbnQpKCoo
X19wKS0+X3ArKykpOwogICAgICBpZiAoX19jMiA9PSAnXG4nKQogICAgICAgIF9fYyA9IF9fYzI7
CiAgICAgIGVsc2UKICAgICAgICB1bmdldGMoX19jMiwgX19wKTsKICAgICAgfQogICAgcmV0dXJu
IF9fYzsKICB9CiMgNDI2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp9CiMgNTMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRp
byIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7Cgog
IHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVz
aW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcg
OjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZw
cmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7
CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAg
dXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNp
bmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpw
ZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hh
cjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAg
dXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2lu
ZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5n
IDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6
OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMzYg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvYysraW8uaCIgMiAzCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci5oIiAxIDMK
IyAxMDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLXNpbmds
ZS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9n
dGhyLXNpbmdsZS5oIiAzCnR5cGVkZWYgaW50IF9fZ3RocmVhZF9tdXRleF90OwojIDIxMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLXNpbmdsZS5oIiAzCnN0
YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiAwOwp9
CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4
X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4
X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7
CiAgcmV0dXJuIDA7Cn0KIyAxMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2lu
L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3
aW4vYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3Ry
ZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoKCiAgdHlwZWRlZiBmcG9z
X3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsK
CgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAg
IHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMg
PSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgw
MDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNh
c2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9
IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFp
bGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAz
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9jdGltZSIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDE4
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvdGltZS5o
IiAxIDMKIyAxOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCmV4dGVybiAi
QyIgewoKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hv
dXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1f
d2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7Cn07CgpjbG9ja190IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGNsb2NrICh2b2lkKTsKZG91YmxlIF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIGRpZmZ0aW1lICh0aW1lX3QgX3RpbWUyLCB0aW1lX3QgX3RpbWUxKTsKdGltZV90
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rdGltZSAoc3RydWN0IHRtICpfdGltZXB0cik7
CnRpbWVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0aW1lICh0aW1lX3QgKl90aW1lcik7
CgpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhc2N0aW1lIChjb25zdCBzdHJ1Y3Qg
dG0gKl90YmxvY2spOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjdGltZSAoY29u
c3QgdGltZV90ICpfdGltZSk7CnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
Z210aW1lIChjb25zdCB0aW1lX3QgKl90aW1lcik7CnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgbG9jYWx0aW1lIChjb25zdCB0aW1lX3QgKl90aW1lcik7CgpzaXplX3QgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyZnRpbWUgKGNoYXIgKl9zLCBzaXplX3QgX21heHNp
emUsIGNvbnN0IGNoYXIgKl9mbXQsIGNvbnN0IHN0cnVjdCB0bSAqX3QpOwoKY2hhciAqX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgYXNjdGltZV9yIChjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAq
KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY3RpbWVfciAoY29uc3QgdGltZV90
ICosIGNoYXIgKik7CnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ210aW1l
X3IgKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7CnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgbG9jYWx0aW1lX3IgKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7
Cgp9CgoKZXh0ZXJuICJDIiB7CgoKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0
cnB0aW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwp2b2lkIF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHR6c2V0ICh2b2lkKTsKdm9pZCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBfdHpzZXRfciAoc3RydWN0IF9yZWVudCAqKTsKIyA5OCAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdGltZV90IF90
aW1lem9uZTsKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBfZGF5bGlnaHQ7
CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBjaGFyICpfdHpuYW1lWzJdOwojIDEx
NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSB0aW1lem9uZSAodm9pZCk7CgoKCgoKfQojIDE2OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpl
eHRlcm4gIkMiIHsKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBuYW5vc2xlZXAgKGNv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqcnF0cCwgc3RydWN0IHRpbWVzcGVjICpybXRwKTsKCn0KCgoK
CgpleHRlcm4gIkMiIHsKIyAyNDcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKfQojIDUyICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0
aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVf
dDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAg
dXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2lu
ZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5n
IDo6c3RyZnRpbWU7Cn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMzQgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAzCmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIF9tYnN0YXRlX3QgbWJzdGF0ZV90
OwoKCndpbnRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBidG93YyAoaW50KTsKaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjdG9iICh3aW50X3QpOwpzaXplX3QgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgbWJybGVuIChjb25zdCBjaGFyICogLCBzaXplX3QsIG1ic3RhdGVf
dCAqKTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1icnRvd2MgKHdjaGFyX3Qg
KiAsIGNvbnN0IGNoYXIgKiAsIHNpemVfdCwgbWJzdGF0ZV90ICopOwppbnQgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgbWJzaW5pdCAoY29uc3QgbWJzdGF0ZV90ICopOwpzaXplX3QgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgbWJzcnRvd2NzICh3Y2hhcl90ICogLCBjb25zdCBjaGFyICoq
ICwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSB3Y3J0b21iIChjaGFyICogLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CnNpemVfdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NydG9tYnMgKGNoYXIgKiAsIGNvbnN0IHdjaGFyX3QgKiog
LCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgd2NzY2F0ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICopOwp3Y2hhcl90ICpfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7Cmlu
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjbXAgKGNvbnN0IHdjaGFyX3QgKiwgY29u
c3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzY3B5
ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgd2NzY3NwbiAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpzaXpl
X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzbGNhdCAod2NoYXJfdCAqLCBjb25zdCB3
Y2hhcl90ICosIHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3Ns
Y3B5ICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKc2l6ZV90IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHdjc2xlbiAoY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzbmNhdCAod2NoYXJfdCAqICwgY29uc3Qgd2NoYXJf
dCAqICwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc25jbXAgKGNv
bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwp3Y2hhcl90ICpfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NuY3B5ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICog
LCBzaXplX3QpOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NwYnJrIChj
b25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKl9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIHdjc3JjaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CnNpemVfdCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NzcG4gKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qg
d2NoYXJfdCAqKTsKd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2Nzc3RyIChj
b25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKl9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIHdtZW1jaHIgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdtZW1jbXAgKGNvbnN0IHdjaGFyX3QgKiwg
Y29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSB3bWVtY3B5ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpOwp3Y2hh
cl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3bWVtbW92ZSAod2NoYXJfdCAqLCBjb25z
dCB3Y2hhcl90ICosIHNpemVfdCk7CndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IHdtZW1zZXQgKHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsKCn0KIyA1NSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKIyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFy
IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgNDYgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0
cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAg
ICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9Cgog
ICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsg
fQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlw
ZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9
IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoK
ICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAg
ICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19v
ZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1v
ZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MK
ICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190
KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAg
fQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAg
ICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1
cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYg
X19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAg
ICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAg
eyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAg
IF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAg
IF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsK
CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCgoKfQojIDQ3ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgi
IDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
Y2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlk
X2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Ro
cm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvaW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFt
ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAg
ICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
ICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0
eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hh
cj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJl
YW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5n
YnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlm
c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFy
X3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsK
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2No
YXJfdD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJp
bmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2lj
X2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdj
aGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJl
YW07Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNl
cHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4
Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmly
dHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0
KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMg
ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoK
CiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2
b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVk
X2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5h
dGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVu
ZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0
aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2Ug
X19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIgMwogIHZv
aWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3Ry
YWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5o
IiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAx
IDMKIyAxNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Njg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMiAzCgoKCgoKZXh0ZXJuICJDIiB7Cgp2b2lkICogX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgbWVtY2hyIChjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICos
IHNpemVfdCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1jcHkgKHZvaWQg
KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgbWVtbW92ZSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKiBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBtZW1zZXQgKHZvaWQgKiwgaW50LCBzaXplX3QpOwpjaGFyICpf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjYXQgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY2hyIChjb25zdCBjaGFyICosIGlu
dCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjbXAgKGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNvbGwgKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgc3RyY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzdHJjc3BuIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKl9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmVycm9yIChpbnQpOwpzaXplX3QgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgc3RybGVuIChjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBzdHJuY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cm5jbXAgKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJu
Y3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgc3RycGJyayAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJyY2hyIChjb25zdCBjaGFyICosIGludCk7CnNp
emVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJzcG4gKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ryc3RyIChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgc3RydG9rIChjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKc2l6ZV90IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIHN0cnhmcm0gKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCmNo
YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRva19yIChjaGFyICosIGNvbnN0IGNo
YXIgKiwgY2hhciAqKik7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYmNtcCAoY29u
c3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgYmNvcHkgKGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwp2b2lkIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGJ6ZXJvICh2b2lkICosIHNpemVfdCk7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBmZnMgKGludCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGluZGV4IChjb25zdCBjaGFyICosIGludCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBtZW1jY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwp2
b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtcGNweSAodm9pZCAqLCBjb25zdCB2
b2lkICosIHNpemVfdCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJpbmRleCAo
Y29uc3QgY2hhciAqLCBpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY2Fz
ZWNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzdHJkdXAgKGNvbnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIF9zdHJkdXBfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwpjaGFy
ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuZHVwIChjb25zdCBjaGFyICosIHNpemVf
dCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJuZHVwX3IgKHN0cnVjdCBf
cmVlbnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBzdHJlcnJvcl9yIChpbnQsIGNoYXIgKiwgc2l6ZV90KTsKc2l6ZV90IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHN0cmxjYXQgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
OwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybGNweSAoY2hhciAqLCBjb25z
dCBjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2Fz
ZWNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBzdHJubGVuIChjb25zdCBjaGFyICosIHNpemVfdCk7CmNoYXIg
Kl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnNlcCAoY2hhciAqKiwgY29uc3QgY2hhciAq
KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybHdyIChjaGFyICopOwpjaGFy
ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ1cHIgKGNoYXIgKik7CgoKY29uc3QgY2hh
ciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ryc2lnbmFsIChpbnQgX19zaWdubyk7Cgpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9zaWdubyAoY29uc3QgY2hhciAqX19u
YW1lKTsKIyA5OCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA1MiAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvY3N0cmluZyIgMiAzCiMgNzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmci
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwog
IHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1
c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNp
bmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNp
bmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5n
IDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5n
IDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBz
aXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3Ap
LCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNo
cihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3Rf
Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBp
bmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyBy
ZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f
czIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFy
KiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8
Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUg
Y2hhcioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBf
X2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9
CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgoKbmFt
ZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJf
dHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5
cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3Rh
dGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlw
ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAg
IGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAg
IHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90
eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5
cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0
aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcyk7CgogICAgICBzdGF0
aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXpl
X3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgog
ICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg
X19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3Mx
LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUg
X19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGlu
dF90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNv
bnN0IGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBl
KGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMik7CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgZW9mKCk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90
X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3Nf
dHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJz
dGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90
eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0K
CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3Qg
Y2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0
YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBl
JiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAog
ICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3My
LCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoK
ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAg
ICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBl
KgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFy
X3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4o
bWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg
bW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3My
LCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUq
IF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAg
ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBf
X24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+
KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAg
dG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9f
aW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3Rh
dGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGlu
dF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRp
YyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0x
KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBl
JiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CiMg
MjQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJh
aXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90cmFpdHNfbWF0
Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9vbAogICAgICBv
cGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjplcShfTV9jLCBf
X2EpOyB9CiAgICB9Owp9CiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCgojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytsb2NhbGUuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j
bG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjQgIi91c3IvaW5j
bHVkZS9sb2NhbGUuaCIgMwpleHRlcm4gIkMiIHsKCnN0cnVjdCBsY29udgp7CiAgY2hhciAqZGVj
aW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwogIGNoYXIgKmdyb3VwaW5nOwogIGNo
YXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9u
X2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hhciAqbW9uX2dy
b3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICBj
aGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwogIGNoYXIgcF9jc19wcmVj
ZWRlczsKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwogIGNoYXIgbl9jc19wcmVjZWRlczsKICBjaGFy
IG5fc2VwX2J5X3NwYWNlOwogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsK
fTsKCgpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRsb2NhbGUgKGludCBjYXRl
Z29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsKc3RydWN0IGxjb252ICpfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBsb2NhbGVjb252ICh2b2lkKTsKCgpzdHJ1Y3QgX3JlZW50OwpjaGFyICpfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2V0bG9jYWxlX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50
IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOwpzdHJ1Y3QgbGNvbnYgKl9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIF9sb2NhbGVjb252X3IgKHN0cnVjdCBfcmVlbnQgKik7Cgp9CiMgNTAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252
Owp9CiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvYysrbG9j
YWxlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7Cn0K
IyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvY2xpbWl0cyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2NsaW1pdHMiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5j
bHVkZS9saW1pdHMuaCIgMSAzCiMgMTEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4v
My4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3ln
d2luLzMuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzIgIi91c3Iv
bGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj
LWN5Z3dpbi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9p
Njg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGli
L2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDUwICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBl
IiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMSAzCgoKCgoKZXh0ZXJuICJDIiB7CgppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgaXNhbG51bSAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBpc2FscGhhIChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlz
Y250cmwgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNkaWdpdCAo
aW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2dyYXBoIChpbnQgX19j
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzbG93ZXIgKGludCBfX2MpOwppbnQg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNwcmludCAoaW50IF9fYyk7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBpc3B1bmN0IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIGlzc3BhY2UgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgaXN1cHBlciAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBp
c3hkaWdpdCAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0b2xvd2Vy
IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRvdXBwZXIgKGludCBf
X2MpOwoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2JsYW5rIChpbnQgX19jKTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzYXNjaWkgKGludCBfX2MpOwppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG9hc2NpaSAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBfdG9sb3dlciAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfdG91cHBlciAoaW50IF9fYyk7CiMgMzkgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAzCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBjb25zdCBjaGFyIF9jdHlwZV9b
XTsKIyA2OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2lu
ZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2lu
ZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2lu
ZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNp
bmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJp
bmciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDMKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
bWVtb3J5IiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAx
NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj
LWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvbWFjaGluZS9zdGRsaWIuaCIgMSAzCiMgMTgg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIg
MSAzCiMgMjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKZXh0ZXJuICJDIiB7Cgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IHF1b3Q7CiAgaW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3Ry
dWN0CnsKICBsb25nIHF1b3Q7CiAgbG9uZyByZW07Cn0gbGRpdl90OwojIDQ1ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBfX21i
X2N1cl9tYXg7CgoKCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYWJvcnQgKHZvaWQp
IF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgYWJzIChpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRleGl0ICh2b2lk
ICgqX19mdW5jKSh2b2lkKSk7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9m
IChjb25zdCBjaGFyICpfX25wdHIpOwoKZmxvYXQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
YXRvZmYgKGNvbnN0IGNoYXIgKl9fbnB0cik7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgYXRvaSAoY29uc3QgY2hhciAqX19ucHRyKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBhdG9sIChjb25zdCBjaGFyICpfX25wdHIpOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgYnNlYXJjaCAoY29uc3Qgdm9pZCAqIF9fa2V5LCBjb25zdCB2b2lkICogX19iYXNl
LCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50ICgqIF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIF9jb21wYXIpIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKCgoKdm9p
ZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNp
emVfdCBfX3NpemUpOwpkaXZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkaXYgKGludCBf
X251bWVyLCBpbnQgX19kZW5vbSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhp
dCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKdm9pZCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBmcmVlICh2b2lkICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgZ2V0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7CmNoYXIgKiBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0ZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hh
ciAqX19zdHJpbmcpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRlbnYg
KGNvbnN0IGNoYXIgKiwgaW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
X2ZpbmRlbnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGludCAqKTsKbG9uZyBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsYWJzIChsb25nKTsKbGRpdl90IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGxkaXYgKGxvbmcgX19udW1lciwgbG9uZyBfX2Rlbm9tKTsKdm9pZCAq
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSk7CmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOwpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21ibGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwg
Y29uc3QgY2hhciAqLCBzaXplX3QsIF9tYnN0YXRlX3QgKik7CmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBtYnRvd2MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21idG93Y19yIChzdHJ1Y3QgX3JlZW50ICosIHdj
aGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIF9tYnN0YXRlX3QgKik7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3RvbWIgKGNoYXIgKiwgd2NoYXJfdCk7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfd2N0b21iX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCB3
Y2hhcl90LCBfbWJzdGF0ZV90ICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
bWJzdG93Y3MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpzaXplX3QgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgX21ic3Rvd2NzX3IgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJf
dCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgX21ic3RhdGVfdCAqKTsKc2l6ZV90IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHdjc3RvbWJzIChjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6
ZV90KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF93Y3N0b21ic19yIChzdHJ1
Y3QgX3JlZW50ICosIGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QsIF9tYnN0YXRlX3Qg
Kik7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rc3RlbXAgKGNoYXIgKik7CmNo
YXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3RlbXAgKGNoYXIgKik7CgoKdm9pZCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBxc29ydCAodm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9f
bm1lbWIsIHNpemVfdCBfX3NpemUsIGludCgqX2NvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2
b2lkICopKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJhbmQgKHZvaWQpOwp2b2lk
ICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmVhbGxvYyAodm9pZCAqIF9fciwgc2l6ZV90
IF9fc2l6ZSk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3JhbmQgKHVuc2lnbmVk
IF9fc2VlZCk7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2QgKGNvbnN0
IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBfc3RydG9kX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIg
KipfX2VuZF9QVFIpOwpmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2YgKGNv
bnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7CgoKCgoKCmxvbmcgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgc3RydG9sIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIs
IGludCBfX2Jhc2UpOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJ0b2xfciAo
c3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9f
YmFzZSk7CnVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG91bCAo
Y29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQg
bG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RydG91bF9yIChzdHJ1Y3QgX3JlZW50
ICosY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKCmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzeXN0ZW0gKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsK
Cgpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGE2NGwgKGNvbnN0IGNoYXIgKl9faW5w
dXQpOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbDY0YSAobG9uZyBfX2lucHV0
KTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9sNjRhX3IgKHN0cnVjdCBfcmVl
bnQgKixsb25nIF9faW5wdXQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgb25fZXhp
dCAodm9pZCAoKl9fZnVuYykoaW50LCB2b2lkICopLHZvaWQgKiBfX2FyZyk7CnZvaWQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgX0V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAo
KG5vcmV0dXJuKSk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRlbnYgKGNvbnN0
IGNoYXIgKl9fc3RyaW5nKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRlbnZf
ciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX3N0cmluZyk7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBzZXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFy
ICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgX3NldGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25z
dCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpOwoKY2hhciAqIF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIGdjdnQgKGRvdWJsZSxpbnQsY2hhciAqKTsKY2hhciAqIF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGdjdnRmIChmbG9hdCxpbnQsY2hhciAqKTsKY2hhciAqIF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGZjdnQgKGRvdWJsZSxpbnQsaW50ICosaW50ICopOwpjaGFyICog
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dGYgKGZsb2F0LGludCxpbnQgKixpbnQgKik7
CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0IChkb3VibGUsaW50LGludCAq
LGludCAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGVjdnRidWYgKGRvdWJs
ZSwgaW50LCBpbnQqLCBpbnQqLCBjaGFyICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgZmN2dGJ1ZiAoZG91YmxlLCBpbnQsIGludCosIGludCosIGNoYXIgKik7CmNoYXIgKiBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsK
Y2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGR0b2EgKGRvdWJsZSwgaW50LCBpbnQs
IGludCAqLCBpbnQqLCBjaGFyKiopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFu
ZF9yICh1bnNpZ25lZCAqX19zZWVkKTsKCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBkcmFuZDQ4ICh2b2lkKTsKZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9kcmFu
ZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7CmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgX2VyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10p
Owpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGpyYW5kNDggKHVuc2lnbmVkIHNob3J0
IFszXSk7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2pyYW5kNDhfciAoc3RydWN0
IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IFs3XSk7CnZvaWQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgX2xjb25nNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBb
N10pOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxyYW5kNDggKHZvaWQpOwpsb25n
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9scmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7
CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbXJhbmQ0OCAodm9pZCk7CmxvbmcgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21yYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsKbG9u
ZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10p
Owpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ucmFuZDQ4X3IgKHN0cnVjdCBfcmVl
bnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKTsKdW5zaWduZWQgc2hvcnQgKgogICAgICAgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOwp1bnNpZ25l
ZCBzaG9ydCAqCiAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2VlZDQ4X3IgKHN0
cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzcmFuZDQ4IChsb25nKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfc3JhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIGxvbmcpOwpsb25nIGxvbmcgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgc3RydG9sbCAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRf
UFRSLCBpbnQgX19iYXNlKTsKbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9z
dHJ0b2xsX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRf
UFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHN0cnRvdWxsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBf
X2Jhc2UpOwp1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0
cnRvdWxsX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRf
UFRSLCBpbnQgX19iYXNlKTsKCgoKCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBy
ZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHVuc2V0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7CnZvaWQgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgX3Vuc2V0ZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAq
X19zdHJpbmcpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZG9tICh2b2lkKTsK
bG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzcmFuZG9tICh1bnNpZ25lZCBfX3NlZWQp
OwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHRzbmFtZSAoaW50KTsKaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdyYW50cHQgKGludCk7CmludCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSB1bmxvY2twdCAoaW50KTsKCgoKCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50ICosIGRvdWJsZSwgaW50LCBpbnQsIGlu
dCAqLCBpbnQqLCBjaGFyKiopOwoKCgoKCgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IF9zeXN0ZW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOwoKdm9pZCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiMgMjEzICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAyIDMKIyA4NCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRp
dl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwog
IHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcg
OjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRp
djsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVz
aW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjpt
YmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNv
cnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwog
IHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1
c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBp
bmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGlu
ZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19q
KTsgfQp9CiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9uZXciIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3Mg
YmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2Mo
KSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07Cgog
IHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsK
CgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3
X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA3OSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk
X2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJh
ZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl
X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10o
c3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlu
bGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7
IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2
b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVyYXRvciBk
ZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwoKfQojIDcwICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBf
VDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBwYWlyKCkg
OiBmaXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBf
VDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNz
IF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJz
dChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3Qg
PT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZp
cnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYg
X194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1
cm4gX195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBf
X3kpOwp9CiMgMTQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtl
X3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gs
IF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMK
IyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5
cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1i
ZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90
cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNo
YXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGlu
dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25n
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2lu
dGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNp
Z25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAg
dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
aW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFz
cyBfX25vcm1hbF9pdGVyYXRvcjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4Ojpf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODAgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBp
bnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoK
ICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFn
IHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6
IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJk
aWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVm
ZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRvciB7CgogICAgICB0eXBlZGVmIF9DYXRl
Z29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7Cgog
ICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIF9Q
b2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwogICAg
fTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0ZXJh
dG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9j
YXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0
b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0
b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0
ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
ICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJh
aXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IF9U
cCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CnRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3Jf
dGFnKQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAgICByZXR1cm4gX19uOwogIH0KCnRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog
IF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykK
ICB7CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAxMTEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgZGlzdGFuY2UoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogIHsKCiAgICByZXR1cm4gX19kaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0K
CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxp
bmUgdm9pZAogIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0
X2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgfQoKdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl
PgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg
X0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAg
ewoKICAgCgogICAgaWYgKF9fbiA+IDApCiAgICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgICBl
bHNlCiAgICAgIHdoaWxlIChfX24rKykgLS1fX2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBf
X2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAg
ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgX19pICs9IF9f
bjsKICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl
X2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9E
aXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rp
c3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNl
X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
IF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3Ig
aXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVy
ZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigp
IHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90
eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7
IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0
ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJy
ZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkg
Y29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3Bl
cmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7
CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAg
ICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAg
ICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAg
LS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZl
cnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJz
ZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1
cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAg
ICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytj
dXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAg
ICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAg
IHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikK
ICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJl
bmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJl
bnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
LT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwog
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAg
b3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsg
X19uKTsgfQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAg
ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7
IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0
dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwg
X195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5h
bWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIG9wZXJh
dG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9f
eS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K
ICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9wZXJhdG9yKyh0eXBl
bmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAg
ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCiAgICB7
IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0K
IyAzMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IK
ICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZv
aWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5l
cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7
CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg
X194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAg
ICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9p
dGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMg
Mzg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPgogICAgYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVy
biBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgMzk3ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMg
aXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAg
IHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBs
aWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigm
X194KSB7IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUg
X0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250
YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9
CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy
biAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAg
IG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q29udGFpbmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgog
ICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gZnJvbnRfaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzAgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy
PgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRf
aXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVk
OgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6
Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNv
bnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gs
IHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9f
eCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0
eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAg
ICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0
ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07
CiMgNTQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194
LCBfSXRlcmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+KF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNwYWNlIF9fZ251
X2N4eAp7CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVzaW5nIHN0ZDo6
aXRlcmF0b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgogICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAog
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OwoK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9p
bnRlciBwb2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0
ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29u
c3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQoKCiAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICAgICAgOiBfTV9jdXJy
ZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gX19u
b3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAg
ICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9y
bWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3Bl
cmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4g
X01fY3VycmVudFtfX25dOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9jdXJyZW50ICs9IF9f
bjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRv
cisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9y
bWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRv
ciYKICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBf
TV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRv
cgogICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogICAgICBj
b25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9
CiAgICB9OwojIDY0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFz
ZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0
b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK
ICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg
b3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz
KQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg
b3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+
JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s
CiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5i
YXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBvcGVy
YXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRv
cisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsK
IyA5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBp
bmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIy
IF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7
CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAg
ewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBf
X2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1Rw
JgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgog
ICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVy
biBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwg
X19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAm
IF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChf
X2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIyMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ
dGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsr
X19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZv
ciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsr
X19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3Qg
X1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAg
ICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19m
aXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog
ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl
cgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg
cmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1Rw
KgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAg
ICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZp
YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29u
c3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlw
ZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0
SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBf
X2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAg
ICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9U
cml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJp
dmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICBy
ZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQs
IF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog
ICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1h
bCgpKTsKICAgIH0KIyAzMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg
CgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVy
Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAg
aW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRl
cgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
CiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsg
X19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJl
dHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBl
bmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7
CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90
eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJz
dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25z
dCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jl
c3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJu
IF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBf
X3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAq
IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAg
ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlw
ZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGlu
ZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
IF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZp
YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1Ry
aXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp
bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihf
X2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0K
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ
MgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0
LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2Fy
ZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJk
X2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVf
dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9C
STI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1
dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19O
b3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkky
PgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0
b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3Jt
YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9C
STEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgY29weV9iYWNrd2FyZChfQkkx
IF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+
OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25v
cm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1
MDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192
YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9P
dXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIK
ICAgIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192
YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmly
c3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAg
IH0KCgoKICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWdu
ZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWdu
ZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0g
X19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3Qs
IHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2ln
bmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lk
CiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7
CiAgICBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2ln
bmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQog
ICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVy
biBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlu
bGluZSBzaWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv
bnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCAr
IF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJz
dCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwg
X19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMg
NjA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxf
SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJ
dGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy
eV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9J
bnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2Njgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9v
bAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK
CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
aW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlm
ICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21w
YXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQog
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s
CiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytfX2Zp
cnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJz
dDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIs
ICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJu
IF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAgaW5s
aW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBf
X2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQgY2hh
ciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmly
c3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAgIGNv
bnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEs
IF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xl
bjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJl
KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQog
IHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFy
KikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9Cgp9CiMgNTUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0
NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMwoKCgoKCmV4dGVybiAiQyIgewojIDI1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDMKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX2Fzc2VydCAoY29uc3QgY2hhciAq
LCBpbnQsIGNvbnN0IGNoYXIgKik7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNz
ZXJ0IiAyIDMKIyA4NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAog
IF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxv
Yyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190
aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3Jh
bmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hh
ciogX19zKTsKfQojIDg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBf
UkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRf
bXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24p
IDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1w
ID0gMDsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZv
aWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVm
X2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4
X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNy
KCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK
ICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhy
ZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7
CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RocmVhZHMu
aCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0
CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2FwX2xvY2s7IH07CgogIHRlbXBs
YXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFkX211dGV4X3QKICAgIF9Td2FwX2xvY2tfc3Ry
dWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSAwOwoKCgogIGlubGluZSB1bnNpZ25lZCBsb25n
CiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19xKQog
IHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dh
cF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9IF9f
cTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19z
d2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KIyAxNTEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7
CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5p
dGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJl
YWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgog
ICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAg
X01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygm
X01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawogIHsKICAgIF9TVExfbXV0ZXhf
bG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9j
aykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQoK
ICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKICBw
cml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICAgIF9T
VExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgfTsKCn0KIyA4NyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5
OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3
X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90
IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9p
ZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxl
dGUoX19wKTsgfQogIH07CiMgMTIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv
Yy5oIiAzCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxs
b2Moc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXpl
X3QpOwogICAgICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsK
CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19u
KQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBp
ZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9j
YXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBmcmVlKF9fcCk7IH0KCiAgICAgIHN0YXRp
YyB2b2lkKgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3
X3N6KQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdf
c3opOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9j
KF9fcCwgX19uZXdfc3opOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAg
c3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAg
ICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxl
cjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1
cm4oX19vbGQpOwogICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2
b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29v
bV9oYW5kbGVyKSgpID0gMDsKCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19u
KQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQq
IF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxv
Y19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoMCA9
PSBfX215X21hbGxvY19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9j
KCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3Vs
dCA9IG1hbGxvYyhfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1
cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAg
ICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxs
b2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9j
X2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAg
ICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKQogICAgICAgICAg
ICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgICAg
aWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAg
IH0KCgoKCgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsKIyAyMTkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBwdWJsaWM6CiAg
ICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gMCA9PSBfX24g
PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAg
IHN0YXRpYyBfVHAqIGFsbG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9j
YXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19w
LCBzaXplX3QgX19uKQogICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As
IF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCog
X19wKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgfTsK
IyAyNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVidWdfYWxsb2MKICB7CiAgcHJpdmF0ZToKICAg
IGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxv
Yzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1
bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgfQoK
ICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewog
ICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAg
KCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/ICh2b2lkKTAgOiBfX2Fzc2VydCgiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgIiooc2l6ZV90KilfX3JlYWxf
cCA9PSBfX24iKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGlu
dCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAgIGNoYXIqIF9f
cmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoKCooc2l6ZV90Kilf
X3JlYWxfcCA9PSBfX29sZF9zeikgPyAodm9pZCkwIDogX19hc3NlcnQoIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzcsICIqKHNpemVfdCopX19yZWFsX3AgPT0gX19v
bGRfc3oiKSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6
cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwog
ICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0
ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CiAgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlCiAgewogIHByaXZhdGU6CiAgICBlbnVt
IHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05G
UkVFTElTVFMgPSBfTUFYX0JZVEVTIC8gX0FMSUdOfTsKCiAgICB1bmlvbiBfT2JqCiAgICB7CiAg
ICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICBjaGFyIF9NX2NsaWVudF9k
YXRhWzFdOwogICAgfTsKCiAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19O
RlJFRUxJU1RTXTsKCgogICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICBzdGF0aWMg
Y2hhciogX1NfZW5kX2ZyZWU7CiAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICBz
dGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgc3RhdGlj
IHNpemVfdAogICAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChf
X2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9
CgogICAgc3RhdGljIHNpemVfdAogICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMp
CiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FM
SUdOIC0gMSk7IH0KCgoKICAgIHN0YXRpYyB2b2lkKgogICAgX1NfcmVmaWxsKHNpemVfdCBfX24p
OwoKCgogICAgc3RhdGljIGNoYXIqCiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBp
bnQmIF9fbm9ianMpOwoKCgogICAgY2xhc3MgX0xvY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAg
X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWly
ZV9sb2NrKCk7IH0KICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9j
YXRvcl9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CiAgICB9IF9fYXR0cmlidXRlX18gKChfX3Vu
dXNlZF9fKSk7CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7CgogIHB1YmxpYzoKCiAgICBzdGF0aWMg
dm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQqIF9fcmV0ID0g
MDsKCiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fcmV0ID0g
X19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAg
ICAgICAgICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9j
a19pbnN0YW5jZTsKICAgICAgICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215
X2ZyZWVfbGlzdDsKICAgICAgICAgIGlmIChfX3Jlc3VsdCA9PSAwKQogICAgICAgICAgICBfX3Jl
dCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVf
bGlzdF9saW5rOwogICAgICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH07CgoKICAgIHN0YXRpYyB2b2lkCiAg
ICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgaWYgKF9fbiA+
IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19tZW1faW50ZXJmYWNlOjpkZWFsbG9jYXRl
KF9fcCwgX19uKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxl
KiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7CiAgICAgICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgogICAgICAg
ICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwog
ICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgdm9pZCoKICAgIHJlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7CiAgfTsKCgogIHRlbXBsYXRlPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50
IF9faW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJu
IGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAg
IGNoYXIqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQogICAgewog
ICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUg
KiBfX25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19z
dGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAg
ICB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2Zy
ZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICB9CiAg
ICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAg
X19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9i
eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy
ZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICBy
ZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsg
X1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5dGVzX2xl
ZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlf
ZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkg
LT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19i
eXRlc190b19nZXQpOwogICAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRp
bGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAg
ICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBf
TUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAg
ICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGlu
azsKICAgICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAg
ICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcykp
OwoKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9f
bWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0K
ICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJu
KF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgICAgIH0KICAgIH0KCgoKCgog
IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3Qg
X19uKQogICAgewogICAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0g
X1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlf
ZnJlZV9saXN0OwogICAgICBfT2JqKiBfX3Jlc3VsdDsKICAgICAgX09iaiogX19jdXJyZW50X29i
ajsKICAgICAgX09iaiogX19uZXh0X29iajsKICAgICAgaW50IF9faTsKCiAgICAgIGlmICgxID09
IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoq
KV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9f
Y2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1
cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hh
ciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewog
ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAg
ICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9m
cmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVy
bihfX3Jlc3VsdCk7CiAgICB9CgoKICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0Pgog
ICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVh
bGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKICAgIHsK
ICAgICAgdm9pZCogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgICBpZiAo
X19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01B
WF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAg
fQogICAgICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6
KSkgcmV0dXJuKF9fcCk7CiAgICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAg
ICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Owog
ICAgICBtZW1jcHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShf
X3AsIF9fb2xkX3N6KTsKICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgX1NUTF9tdXRleF9sb2NrCiAgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9j
awogID0geyAwIH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNo
YXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0
X2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjaGFy
KiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJl
ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHNpemVfdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUg
PSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICB0eXBlbmFtZSBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGls
ZQogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZyZWVf
bGlzdFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRy
dWUsIDA+IF9fYWxsb2M7CiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2Us
IDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2MTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yCnsK
ICB0eXBlZGVmIF9fYWxsb2MgX0FsbG9jOwpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90
eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9U
cCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJp
bmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxsb2NhdG9y
KCkgdGhyb3coKSB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAg
dGVtcGxhdGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0
aHJvdygpIHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJl
ZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJl
c3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogIF9UcCog
YWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19u
ICE9IDAgPyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihf
VHApKSkKICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBv
aW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBf
X24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3co
KQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3Ry
dWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7
IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBs
YXRlPD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJp
bmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxs
b2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZh
bHNlOwp9CiMgNjk1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yCnsKICBf
QWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZl
cmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAg
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxv
Y2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkg
dGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykg
e30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRv
cjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBw
b2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNv
bnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm
X194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkg
ewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVy
bHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9
CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9f
dW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9Cgog
IHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgt
MSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3Qg
X1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50
ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFz
cyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3Vu
ZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2Fs
bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5
aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8
aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICBy
ZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA4NDAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxf
VHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVm
IGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0
YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBs
ZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlw
ZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8
X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxf
VHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFs
bG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wg
X190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVf
YWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAg
ICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9j
PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190
eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBh
bGxvY2F0b3JfdHlwZTsKfTsKCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsKCgoKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+OwoK
fQojIDU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1
Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2
b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+
CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0
aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m
aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMg
MTEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJv
eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAg
ICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9E
ZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFs
dWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAg
ICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3Io
KSk7CiAgICB9Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5
X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBf
X3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0
KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg
IHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsK
ICAgICAgICB9CiAgICB9CiMgMTA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0
dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
SXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29u
c3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7
CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJl
dHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90
KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hh
cl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsK
ICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3Qg
LSBfX2ZpcnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAg
fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBf
X3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgog
ICAgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9
IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsr
X19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAg
Y2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsK
ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRf
ZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAg
ICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwg
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVk
X2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAg
ICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9G
b3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9f
Zmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1
cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19j
dXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95
KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBl
Pjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQojIDIyNyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9j
b3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAg
Y2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7
CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5s
aW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6
ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJu
IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAg
ICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlk
KTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIg
X19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7
CiAgICAgIHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0Miwg
X194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ry
b3koX19maXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9
CiMgNTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQK
ewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNs
YXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl
cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgog
ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNp
dAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9p
dGVyKF9feCkge30KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo
KSB7IHJldHVybiAqdGhpczsgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3Qo
JipfTV9pdGVyLCBfX2VsZW1lbnQpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAg
ICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3Bl
cmF0b3IrKygpCiAgICAgIHsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBf
VHA+CiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRl
cmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01f
aXRlcjsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxf
VHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBf
VHAqKQp7CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkp
CiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19s
ZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8
X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJl
dHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAxMDYgIi91c3IvaW5j
bHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBh
aXI8X1RwKixwdHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVu
KQogIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7
CiAgfQojIDEyMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgewog
ICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5
IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9U
cDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApCiAgIDog
X01fcHRyKF9fcCkge30KfTsKIyAxNzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0b19wdHIKewpwcml2YXRlOgogIF9UcCog
X01fcHRyOwoKcHVibGljOgoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoKCgoKCgogIGV4
cGxpY2l0CiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgOiBfTV9w
dHIoX19wKSB7IH0KIyAyMDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9f
cHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0K
IyAyMTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9N
X3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9y
eSIgMwogIGF1dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICB7
CiAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMg
MjQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X1RwMT4KICAgIGF1dG9fcHRyJgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRo
cm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIH5hdXRvX3B0
cigpIHsgZGVsZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5
IiAzCiAgZWxlbWVudF90eXBlJgogIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4g
Kl9NX3B0cjsgfQoKCgoKCgoKICBlbGVtZW50X3R5cGUqCiAgb3BlcmF0b3ItPigpIGNvbnN0IHRo
cm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1v
cnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9w
dHI7IH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlw
ZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0g
X01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiMgMzI0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB2b2lkCiAgcmVzZXQoZWxlbWVudF90
eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3AgIT0gX01fcHRyKQogICAg
ICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3A7CiAg
ICAgICAgfQogICAgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0
b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAgIDogX01f
cHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImCiAgb3BlcmF0b3I9KGF1dG9fcHRyX3Jl
ZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3JlZi5fTV9w
dHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIF9NX3B0cjsKICAg
ICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRy
X3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRo
aXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9y
IGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0
aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJp
bmciIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgi
IDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5h
bWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rp
b24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5
X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1
bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9Bcmcy
LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9Bcmcx
IGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlw
ZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAxNzMgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29s
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy
biBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVh
bF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNh
bF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0
ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0
ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNh
dGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h
bWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9N
X3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1
bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsK
ICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1By
ZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBf
UHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAgICAg
ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm
IF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0
ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5k
ZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNv
bmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmlu
ZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUg
X09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZh
bHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9y
KCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVy
YXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNv
bmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7
CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUg
YmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29u
c3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt
ZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4s
IF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3Mg
YmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6
Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgog
IGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVu
YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194
KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3Bl
cmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6
Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1
ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxp
bmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwg
Y29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9h
cmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihf
X2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgpj
bGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9B
cmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJs
aWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90
b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQog
IF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50
ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194
KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1
bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQg
KCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1
bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1
bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1
bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4g
X01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz
IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248
X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIp
KSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1
bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0
cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf
UGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv
cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0
IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q
YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBl
JiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwog
IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg
X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25z
dCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVt
X2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyBy
ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNv
bnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f
cmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAg
X1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90
KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4x
X3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gp
OyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3Qp
IDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBf
X3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S
ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9y
ZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Jl
Zl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25z
dCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJn
IF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQg
KF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz
IG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01f
ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv
cGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZh
dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z
dCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1Rw
PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01f
ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9B
cmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9p
ZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcs
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6Oipf
X3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0
IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZv
aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19w
ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAo
X1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0
LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf
bWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1Rw
OjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90
PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1
cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNz
IF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAs
X0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4x
X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVt
X2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m
dW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1l
bV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVm
X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29u
c3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgp9CiMgNTMgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4v
Yml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
Y3lnd2luL2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3Rh
dGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4
Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkK
ewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVf
XyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKF9f
cmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpfX21l
bSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2F0
b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIF9f
YXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAg
ICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9CiMgNDYg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZl
cmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7
CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNp
Y19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRl
cmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAg
ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVy
c2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3
X2J5dGVzX2FsbG9jOwojIDE0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJp
bmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9N
X2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193
b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wK
ICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5j
ZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7
IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJh
YmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAg
ICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRv
cltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19f
c107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2Fs
bG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
KCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKICAgICAgICAgICAgICAg
ICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAgICAg
ICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7
CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAg
ICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0x
KSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2
b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBf
Q2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBf
X2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRh
dGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBf
QWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0Fs
bG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBf
X2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2Rh
dCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAg
ICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
LTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1
czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9m
KF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihz
aXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShf
Q2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9Cgog
ICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWludGVy
cHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgog
ICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9Cgog
ICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01f
ZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAg
ICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01f
bGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVf
dHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUo
KSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNr
Iik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBp
dGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBj
b25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUo
KSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2Zm
IDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9f
cG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRv
cj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As
IF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBmb3Ig
KDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf
U19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQog
ICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9p
dGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMo
X19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikK
ICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAg
ICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0No
YXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHko
X19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAg
ICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9T
X2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1Nf
ZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAg
IGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0
IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAg
ICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w
b3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7
CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAg
ICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFz
aWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygp
KTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B
bGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVy
YXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs
b2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9z
ZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9w
ZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24o
X19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hh
clQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBf
X2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01f
bGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAg
ICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0
X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAg
IHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgp
ICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5k
KCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+
c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7
IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigp
KTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAg
IHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01f
cmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBt
YXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lk
CiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAg
ICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAo
KS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19y
ZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhp
cy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJh
dG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19f
cG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9z
KQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19w
b3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1
cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXpl
X3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBf
X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWso
KTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1
cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVy
YXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJu
IHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQo
X19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFz
dCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhp
cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5
cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6
ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIp
OwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwog
ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJz
aXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkg
KyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh
c3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBp
ZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y
KCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hh
cmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAg
ICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3Mp
KQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVuZCgp
LCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBpZiAo
X19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEoKSwg
X19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykKICAgICAgICAgICAgICB0cmFp
dHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgX01fcmVwKCkt
Pl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpfU190
ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAg
eyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
YykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBf
X24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJl
Z2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBp
bnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRo
aXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJ
dGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBs
YWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg
ICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNp
emVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0g
X19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgICBf
X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBjb25z
dCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczI7
CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9f
cG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl
cnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAg
ICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXpl
KCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpp
bnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29u
c3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBf
Q2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9y
ZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVs
c2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19z
IC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAg
ICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9fcCA9
IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAg
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19uKTsKICAgICAgICAgICAg
ZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3As
IF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwg
X19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl
cnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhp
cy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bv
cyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAg
ICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAg
IHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAg
ICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVn
aW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNp
emVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24p
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAg
ICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAg
ICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAg
ICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgp
LCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAg
cmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBl
cmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBz
aXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxh
Y2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVw
KCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAg
ICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4g
dGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBz
aXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJU
KiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9f
c2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxh
Y2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9z
OwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9f
c2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9z
aXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmlu
Zzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVz
czxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNv
bnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJu
IF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsg
X19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAgICAgICAgIF9NX3JlcGxhY2UoX01f
aWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2Nh
dGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0
aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19u
MSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLl9NX2RhdGEoKSwgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9y
IF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9f
aTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywgX19uKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0
IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9D
aGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9f
azIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAog
ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRl
cmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl
KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2sy
KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2ky
IC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sx
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19p
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhp
cy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwog
ICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRl
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9N
X3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJh
dG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fazIpOwoKCgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAg
ICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf
QWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAg
ICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6
aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19i
ZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgo
X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
X1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAg
ICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0No
YXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJu
IF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAg
ICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJU
KgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
OwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJU
KgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNv
bnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
Zyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9f
cmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlw
ZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAg
ICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNp
emUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpf
U190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29u
c3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAg
ICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01f
ZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBf
X3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAg
ICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0
ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
cmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9f
cywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAg
ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf
Zmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m
aXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hh
clQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m
aW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0
ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9f
cywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz
aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0
X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmly
c3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29m
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bv
cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFz
dF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRz
X3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9u
b3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBi
YXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBf
X24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgp
KQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7
CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0K
CiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0
CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAg
IHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xl
biA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6
OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9f
cikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsK
ICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAg
ICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBf
X24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBj
b25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAg
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu
ZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9j
KCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAg
ICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9y
KyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7
CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMp
OwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAg
IG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5
cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhz
KTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xo
cywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhz
LmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv
bXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0
dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh
cmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo
X19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25z
dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhz
KSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAg
ICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg
X19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
cywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5l
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwp9CiMgNTQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9hbGdv
cml0aG0iIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDMKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2NCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2
b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9U
cCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg
LSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2Zp
cnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFy
ZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAg
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNo
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAg
ICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9f
Zmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5
cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAg
ICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBf
X3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAg
ICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2
b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVh
cChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFu
Y2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBf
X2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is
IHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3Rf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4
LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewog
ICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2Ug
X19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29u
ZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkg
PCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hp
bGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3Nl
Y29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAg
X19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlm
IChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k
ZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5k
ZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0
LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv
aWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz
dGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9f
Zmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVl
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg
aW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAt
IDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg
X19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9f
aG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVl
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19o
b2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4
ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChf
X2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENo
aWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3Qg
KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hv
bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19z
ZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVu
KSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vj
b25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsK
ICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRl
eCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAg
ICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0
IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5
cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
Pjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFz
dCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xh
c3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikv
MjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
X3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAg
ICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoK
CiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBl
IF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAg
ICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAg
aWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQK
ICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9
CiMgNjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7
CgogCgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBf
VHAqIF9NX2J1ZmZlcjsKCgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3Jp
Z2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4g
KHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0
NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9N
X2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAo
X01fYnVmZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9Cgog
IHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAg
dm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7
CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9Cgpw
dWJsaWM6CgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0
cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsg
fQoKICBfVHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyBy
ZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAg
aWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9U
cml2aWFsKCkpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgZnJlZShfTV9i
dWZmZXIpOwogICAgICAgIF9NX2J1ZmZlciA9IDA7CiAgICAgICAgX01fbGVuID0gMDsKICAgICAg
ICB0aHJvdzsKICAgICAgfQogIH0KCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgX0Rlc3Ry
b3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwog
IH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVy
Jikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07Cgp9
CiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVz
cGFjZSBzdGQKewojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7Cgog
ICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAg
ICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVy
biBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAo
X19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykK
ICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0K
IyAxMTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgog
ICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9f
YywgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAgaWYgKF9fY29tcChfX2EsIF9f
YikpCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgICByZXR1cm4gX19iOwog
ICAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgICByZXR1cm4gX19jOwog
ICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChf
X2EsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwg
X19jKSkKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsK
ICAgIH0KIyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5j
dGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
X0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19mOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9f
Zmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJz
dCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50
KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAg
IHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg
Y2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAg
ICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAg
ICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7Cgog
ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f
Zmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg
ICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBf
X2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAg
ICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICBy
ZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAg
ICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUg
X19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3Qs
IF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAz
MjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0
ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICBy
ZXR1cm4gX19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmlu
YXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2Fy
ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7
CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICBy
ZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgog
ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9U
cCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0
ID09IF9fdmFsdWUpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0
MTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f
bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAg
KytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3
YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9y
d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg
PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVy
MiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xh
c3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoK
CgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0Mjsg
KytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9f
Zmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAg
ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFz
dDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQg
PT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJl
dHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAg
ICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAg
ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
MSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9y
d2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2Zp
cnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09
IF9fbGFzdDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVk
aWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICByZXR1cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBf
X3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEg
X19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkg
ewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgICBpZiAoX19w
cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJu
IF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJz
dDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoK
ICAgICAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgICAg
IGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAg
ICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fbGFz
dDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICAgIHJldHVybiBf
X2ZpcnN0MTsKICAgIH0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIs
IHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2Nv
dW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBp
ZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAg
ICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGls
ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQg
LSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19f
aTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0g
X192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAg
fQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFs
KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY0MyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAg
ICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9J
bnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJl
ZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3VudCA8
PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0
LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAg
IH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2Vy
IF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7
CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAh
PSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19pOwog
ICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAg
ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hp
bGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19p
LCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19faTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAgICAg
IH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMgogICAgc3dh
cF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0
ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFy
eV9vcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29w
KCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAg
ICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5z
Zm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19m
aXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAg
CgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
ICAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICAgICAqX19maXJzdCA9IF9f
bmV3X3ZhbHVlOwogICAgfQojIDgyNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGlj
YXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9
CiMgODU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1Rw
PgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdf
dmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHA+CiAgICBf
T3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFs
dWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19wcmVk
KCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KIyA5MTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAg
IHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigp
OwogICAgfQojIDk0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
R2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAg
Zm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19n
ZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJl
bW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoK
ICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVt
b3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1
cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAg
fQojIDEwNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3
YXJkSXRlcgogICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAg
ICAKCgogICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBf
X2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9j
b3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9CgoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091
dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0Owog
ICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgICAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1
ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0K
ICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAg
X191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAg
ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKCpfX3Jlc3VsdCA9
PSAqX19maXJzdCkpCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1
cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRl
clR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAg
ICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJU
eXBlKCkpOwogICAgfQojIDExNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
LCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3Rh
ZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9f
dmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19i
aW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19m
aXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJl
dHVybiArK19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgog
ICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFy
eV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAg
ICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0
cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
Cl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoK
ICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
ICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0K
IyAxMjkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7
CgogICAgIAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBf
X2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAg
ICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBf
X2ZpcnN0ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKICAg
IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk
CiAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICAgICAg
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJzZShfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAg
IAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg
ICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsK
ICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9FdWNsaWRlYW5SaW5nRWxl
bWVudD4KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19nY2QoX0V1Y2xpZGVhblJpbmdF
bGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKICAgIHsKICAgICAgd2hpbGUg
KF9fbiAhPSAwKSB7CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9f
bjsKICAgICAgICBfX20gPSBfX247CiAgICAgICAgX19uID0gX190OwogICAgICB9CiAgICAgIHJl
dHVybiBfX207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgdm9pZAogICAgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoKF9fZmly
c3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsK
CiAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiAgICAg
ICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0g
X19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICB9IHdoaWxlIChf
X2ZpcnN0MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgICAgIHdo
aWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2Zp
cnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlk
ZGxlID0gX19maXJzdDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAg
ICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYg
KChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICBy
ZXR1cm47CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRs
ZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19s
YXN0KTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICAgICAgX19yZXZlcnNl
KF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9
CiAgICAgIGVsc2UgewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmly
c3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsK
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog
ICAgICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9f
ayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsK
CiAgICAgIGlmIChfX2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19t
aWRkbGUsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9EaXN0YW5j
ZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBf
X2kgPCBfX2Q7IF9faSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0Owog
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgICAgIGlmIChfX2sg
PCBfX2wpIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7
IF9faisrKSB7CiAgICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAg
ICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgICAgICBfX3AgLT0gX19sOwogICAg
ICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICBf
X3AgKz0gX19rOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAg
ICAgICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICAgICAqX19wID0g
KihfX3AgKyBfX2spOwogICAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgICAgICBfX3AgLT0gX19sOwog
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9fdG1wOwogICAgICAgICsrX19m
aXJzdDsKICAgICAgfQogICAgfQojIDE1NjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSB2
b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRl
clR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9JdGVyVHlw
ZSgpKTsKICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJu
IGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQp
KTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBf
X3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCgoKICAgICAgcmV0dXJuIHJhbmQo
KSAlIF9fbjsKCiAgICB9CiMgMTYzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUg
dm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0
ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz
dCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAg
ICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2Vu
ZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAx
OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsg
X19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVy
CiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICBpZiAo
KytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2FyZEl0ZXIg
X19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAg
ICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4
dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBl
bmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRpdGlvbihf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hp
bGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAg
ICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAg
ICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmICgh
X19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
ICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgcGFydGl0aW9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gX19wYXJ0
aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg
X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBpZiAoX19sZW4gPT0gMSkKICAgICAg
ICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgICAgIF9Gb3J3
YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVu
IC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0
aXRpb24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9f
ZW5kKTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsK
ICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fc3RhYmxlX3Bh
cnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rp
c3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZl
cl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Qb2ludGVyIF9fcmVz
dWx0MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19f
Zmlyc3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgICAqX19y
ZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwogICAgICAgICAgfQog
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAg
ICAgICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShfX2J1ZmZlciwgX19y
ZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgICAgIH0KICAg
ICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2Jl
Z2luID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9G
b3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSggX19taWRkbGUs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICAg
IGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgICAgcmV0
dXJuIF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAg
ewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCiAg
ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1Zihf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgICAgICAg
cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
VHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAgICAgICBl
bHNlCiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0KICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1Rw
PgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJzdDsKICAg
ICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgICAg
ICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg
ICsrX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRv
bUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgICAgICsr
X19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3Qs
ICpfX2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9f
bGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJz
dCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xk
ID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwg
Kl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9f
bmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAg
LS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAg
Kl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19u
ZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQog
ICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQog
ICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3Qp
IHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAg
ICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAg
IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChf
X3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwg
X19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29t
cCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5l
YXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog
ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBl
KCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlm
IChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRl
ZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9f
Zmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGlu
ZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAg
Zm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9f
azsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog
ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlm
IChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBf
X2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19k
ZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBf
X3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0
IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19j
dXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAg
IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRf
bG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDAp
IHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21w
KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0Owog
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8y
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo
X19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRy
b3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAg
IF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK
CiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19p
bnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAy
KTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
IH0KICAgIH0KIyAyMTk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3Qg
LSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxl
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwog
ICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f
aW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgICAgcmV0dXJuOwogICAg
ICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3Qg
LSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xh
c3QsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3Ao
X1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5j
ZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19z
dGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7
CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3Qg
KyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgICAg
IF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4o
X0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xh
c3QsCiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVy
Z2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVz
dWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9z
aXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAg
ICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190
d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAg
IH0KICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBf
X3N0ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUs
CiAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBf
X3Jlc3VsdCwKICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3Np
emUgPSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9
IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19p
bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3Np
emUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
Pj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19z
aXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAg
IF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAo
X19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3Qs
IF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAy
OwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2Zp
cnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50
ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVm
ZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFu
Y2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0
ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2No
dW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
X3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7
CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19z
dGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21l
cmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3Np
emUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5
cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVy
X3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsg
MSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xl
bjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3Nv
cnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK
ICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3Nv
cnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9
CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3Rh
bmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5
cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK
ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl
ciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9f
bGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl
ID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAg
ICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog
ICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dp
dGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAg
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl
KF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9f
bGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAg
IGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1Rl
bXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlw
ZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9t
QWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChi
dWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBf
X2xhc3QsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIG1ha2VfaGVhcChfX2Zp
cnN0LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRk
bGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAg
ICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19p
KSk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICB9CiMgMjU0MCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlh
bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
Zmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFs
dWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUs
IF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVU
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp
c3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgaWYgKF9fcmVzdWx0
X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAg
d2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0
X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAg
KytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1h
a2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2Zp
cnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlw
ZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFs
X2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZh
bHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHJldHVybiBf
X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0
ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9J
bnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCgogICAgICBp
ZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2Zp
cnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3Qg
IT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJz
dDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9f
Y29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmIChfX2Nv
bXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29y
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgICAg
IHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0
aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9W
YWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
bGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmly
c3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAg
fQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMgMjcyOCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgbnRo
X2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAg
ICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCAr
IChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAg
ICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1
dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w
KTsKICAgIH0KIyAyNzY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3
YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBf
RGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rp
c3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdo
aWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9f
bWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg
ICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxl
OwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAt
IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAg
ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4MTYgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAK
CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoK
ICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg
ICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFs
Zik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19m
aXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBf
X2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVu
ID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9i
b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv
cndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl
VHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg
ICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fbWlk
ZGxlKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICB9CiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBf
X2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19o
YWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAw
KSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21w
KF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAg
ICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFu
Z2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg
X192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5
cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9f
bGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYg
KCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xl
biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9f
bGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0
LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8
X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMw
MDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rp
c3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0
YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19y
aWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+
PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxl
LCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAg
ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9f
bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2Nv
bXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBl
bHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAg
ICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2Nv
bXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
bGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3
YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0KIyAzMDUyICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2go
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBf
Rm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAg
ICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgz
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBi
b29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0g
bG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJu
IF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7
CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2NiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5
cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoK
CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
IHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJl
dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAgewogICAgICBpZiAoX19sZW4xID09
IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19s
ZW4yID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgICAgICAg
ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0K
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2Ug
X19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVu
MSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFu
Y2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2Jv
dW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgX19sZW4yMiA9IGRp
c3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf
X2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk
ZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwg
X19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs
IF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBf
X2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxl
LCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBf
X2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4x
LCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAg
ICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmIChf
X2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmly
c3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
c2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAg
IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg
ICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xh
c3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4y
MiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwog
ICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3Nl
Y29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBf
X3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19m
aXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwg
X19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19m
aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjExLCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3
X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yICYm
IF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShf
X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZm
ZXJfZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZm
ZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAg
ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2xhc3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFz
dCkpOwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGly
ZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkKICAg
IHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgICAgICot
LV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK
ICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19y
ZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg
ICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0g
X19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19s
YXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBf
X21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAg
ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAg
ICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1f
X2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIs
ICpfX2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAg
IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy
ZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsK
ICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29w
eV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9f
bGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVy
PgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAg
ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7
CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6
ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9l
bmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19i
dWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAg
IF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9l
bmQsIF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFu
Y2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAg
ICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0g
X19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4x
MSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxl
LCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0
YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAg
ICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAg
X19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1
dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3
X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0
LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2Vf
YWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9j
dXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICB9
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBl
bmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAg
ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgICAgIGlm
IChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAg
ICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUs
IF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYg
KF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21l
cmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4x
MSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYg
KF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8g
MjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAg
ICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3Qs
ICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAg
ICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBf
X2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0
LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwg
X19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2Zp
cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBf
X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu
MTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlk
ZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwgX19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3Rh
bmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8
IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBl
IF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlw
ZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3Jhcnlf
YnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19s
YXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAg
ICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigp
LCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVf
dHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBf
RGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlk
ZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFu
Y2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1w
b3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJz
dCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4y
LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf
X21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIp
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEs
ICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx
KSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKF9fY29tcCgqX19maXJz
dDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAg
ICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19s
YXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9J
bnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRf
dW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAg
ICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
IH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1
bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9u
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIs
ICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHko
X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy
MiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2Vj
dGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpf
X2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytf
X2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf
SW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq
X19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNl
IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7
CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRw
dXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpf
X2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9
CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZm
ZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgq
X19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg
ICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFz
dDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091
dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgog
ICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg
ICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVz
dWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJl
dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2Zp
cnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fcmVz
dWx0IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0
OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpf
X3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jl
c3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0Zvcndh
cmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsK
ICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwg
Kl9fcmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAg
ICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz
dCwgKl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXI+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kg
PT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAg
ICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lp
ID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19pIDwgKl9faWkpIHsKICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgq
X19pIDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9f
aik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZl
cnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQog
ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19s
YXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9f
aTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19p
OwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFf
X2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChf
X2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAg
ICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cj4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9
PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAg
IC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg
PSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCot
LV9faiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19q
KTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVy
c2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg
ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19p
OwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7
CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9f
Y29tcCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9f
aSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAg
IHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICB9CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1
dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0
MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9
IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQog
ICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29m
KF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAg
IAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0
MSkKICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9
IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0
ZXIpKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwog
ICAgfQojIDQyMDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAg
ICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G
b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9y
d2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAg
ICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJz
dDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1
bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2Zp
cnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
MSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9f
Zmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
cjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp
CiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRl
cjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9y
d2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19uZXdfcmVz
dWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19m
aXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9
CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGlyZWN0aW9u
YWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJl
Y3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf
QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEo
X19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2
SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3Js
YXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBf
X2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0
ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2Uo
X19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0
aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9f
Zmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0
ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgICAgIGlm
IChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVs
c2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFz
ZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0
MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxp
bmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAg
cmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zv
cndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh
cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAg
ICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0
MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAyIDMKIyA1
NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u
c3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6
Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0g
MSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9D
aGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9y
ZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNp
emVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBz
aXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9f
YnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAg
ICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3It
Pl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAg
Zm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9f
ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQq
IF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAg
ICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBp
ZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAg
ICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAg
ICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7
CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBf
X2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAg
ICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19s
ZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAg
ICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh
dGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBf
SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRp
Y19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAo
X19idWlsdGluX2V4cGVjdChfX2JlZyA9PSBfSW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJv
d19sb2dpY19lcnJvcigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVy
Iik7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAg
ICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCog
X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAg
IHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAg
ICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1Nf
dGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9j
JiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAg
ICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3Ig
PSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0
YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg
ICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0g
X1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh
c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhf
X3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwK
ICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVf
dHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBf
TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkp
LCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBf
QWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNr
KF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19w
b3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1Nf
Y29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhj
b25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6IDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0
cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDog
X01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2Jl
ZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsK
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAg
ICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0
ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsK
ICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0
eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFs
bG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9N
X2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAg
ICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp
OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19v
bGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9N
X2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVj
aCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hl
YWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g
c2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7
CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9f
cGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19z
aXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFp
dHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAg
ICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2Uo
Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5f
TV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4x
ICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0
YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAg
IF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9
IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1p
bmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9f
cmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAg
ICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAg
X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAg
IGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXpl
KCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAg
ICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlz
LT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAg
IF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAg
ICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCkt
Pl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQo
KSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhp
cy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAg
ICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9N
X2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCks
IF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcg
X190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190
bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVh
dGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5
cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Ro
cm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNp
emVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yo
X1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2Mi
IDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXpl
X3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRl
cl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9j
X2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f
ZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVh
ZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAg
ICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19z
aXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwog
ICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0g
KChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAg
ICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8g
c2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6
ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3Bs
YWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBf
UmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBf
X2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xl
bmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9u
ZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxv
Y19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8g
c2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2Nh
cCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAg
ICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNp
dHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9N
X2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2Ny
ZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3It
Pl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRj
aCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxv
Yyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9f
ci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlm
IChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
dHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUs
IF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShf
X24pOwoKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4K
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogICAgICAgIGJh
c2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm
ZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAgICAgICAgc2l6ZV90
eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlz
LT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBz
aXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9f
b2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1Nf
Y29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y
KQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9IF9f
bjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMiA9
IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5f
TV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAg
IHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlz
LT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4g
X01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0
aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5k
KCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJl
c2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVu
ID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAg
b3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlw
ZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAg
ICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMu
c2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAg
X19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hh
clQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl
OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAg
IF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9f
bGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAg
ICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBp
dGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEg
LSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19u
MSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpy
ZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlm
IChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBf
X24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYgKF9f
cG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z
dHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAg
ICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9k
YXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykKICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9fbikg
PT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBv
czsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6
ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6Zmlu
ZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAg
ICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0
ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Rh
dGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkK
ICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgd2hp
bGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBy
ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewog
ICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9z
ID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytf
X3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9N
X2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAg
ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAg
ICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsK
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s
IF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJu
IF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykK
ICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19z
aXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAg
ICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9f
cG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAg
ICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAg
ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9m
aXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAg
ICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXpl
KCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hw
b3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1f
X3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9f
biwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAg
ICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBf
X3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0s
IF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAg
ICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg
aWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z
dHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0g
X19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
LCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19y
c2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
CiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUg
X19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3Bv
czIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9z
MSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3My
LCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsK
ICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9z
MiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3Np
emU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCog
X19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6
ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBi
YXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3Mg
PiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t
cGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg
X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4p
OwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAg
cmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBj
b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBp
ZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19z
aXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwg
X19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkg
KyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNp
emUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJp
bmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0
ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6
ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6
ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUo
KTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEp
OwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAg
ICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0
cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYp
OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFy
PiYsIHN0cmluZyYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxj
aGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh
bTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJl
YW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25z
dCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+
JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3Qp
OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxp
bmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKfQojIDU4ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7
CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19s
b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5k
ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFp
bHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
bG9jYWxlZndkLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hh
clQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0
IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog
ICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBo
YShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xv
d2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNz
IGN0eXBlPGNoYXI+OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0
eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICBjbGFzcyBfX2VuY190cmFpdHM7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dDsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8
Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlz
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVu
Y3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0
ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsK
CgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9n
ZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9
IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xh
c3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBt
ZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19i
eW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWdu
ZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xh
c3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBs
OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
dCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYp
IHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0
aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVn
b3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUg
PSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAg
c3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25z
dCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg
YWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAgICBs
b2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93
KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2Fs
ZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7
CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBj
YXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2Nh
bGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRo
cm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19v
dGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2Fs
ZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmlu
ZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxl
JiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRo
aXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVy
YXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwK
ICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9j
YWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0
ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoK
CiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9T
X251bV9jYXRlZ29yaWVzID0gNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhy
b3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewog
ICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRp
YyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lk
CiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2Fk
ZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBw
dWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6
OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0
IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxv
Y2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5j
ZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsKICAg
IGNvbnN0IGNoYXIqIF9NX25hbWVzW19TX251bV9jYXRlZ29yaWVzXTsKICAgIHN0YXRpYyBjb25z
dCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs
ZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6Omlk
KiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29u
c3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lk
X21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVz
c2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFj
ZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkg
dGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5s
aW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlm
IChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRj
aCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBf
SW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBs
KGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBs
KGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7Cgog
ICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wg
X19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgX19yZXQgJiYgaSA8IF9TX251
bV9jYXRlZ29yaWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNb
aV0sIF9NX25hbWVzW2kgKyAxXSkgPT0gMCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAg
ICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7
CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxv
Y2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBf
SW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0
KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl
dD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQp
CiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2Nh
bGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBs
KCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZf
RmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1f
Y2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIqIjsK
ICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBj
bGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWlj
X3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2Fs
ZSBfU19jX2xvY2FsZTsKCiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDAp
IHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCk7CgogICAgc3RhdGljIHZvaWQKICAg
IF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywK
ICAgICAgICAgICAgICAgICAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gMCk7CgogICAgc3RhdGlj
IF9fY19sb2NhbGUKICAgIF9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7Cgog
ICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9j
KTsKCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOwoK
ICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIGZhY2V0KGNv
bnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7CiAgfTsK
CgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9j
YWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25z
dCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJv
b2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoKCgoKICAgIG11dGFi
bGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3YXRl
cjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25zdCBpZCYp
OwoKICBwdWJsaWM6CgoKICAgIGlkKCk7CgogICAgaW5saW5lIHNpemVfdAogICAgX01faWQoKSBj
b25zdAogICAgewogICAgICBpZiAoIV9NX2luZGV4KQogICAgICAgIF9NX2luZGV4ID0gMSArIF9f
ZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGlnaHdhdGVyLCAxKTsKICAgICAgcmV0dXJuIF9NX2luZGV4
IC0gMTsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBf
RmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9j
KSB0aHJvdygpOwp9CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBlbnVt
IF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5s
aW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10
ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2Ep
ICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w
ZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4g
X0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3Mg
X19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19j
YXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf
Rm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz
CiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh
dG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBf
X2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lv
c19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50
PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9
IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3NfT3Bl
bm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0
YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l
IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1v
ZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwg
c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh
dG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lv
c19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBf
X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBp
bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9z
X09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9k
ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5t
b2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1v
ZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01f
aW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9w
ZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9J
b3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwg
X0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50
PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRl
CiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1
cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4o
X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRl
JiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9Cgog
IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z
X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lv
c19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f
YikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+c3Rh
dGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVr
ZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoK
ICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoK
ICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygp
OwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToK
ICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1
ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZt
dGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xl
ZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmlj
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQp
OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7
CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf
U19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lv
c19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBp
b3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRl
IGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1v
ZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6
Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3Nf
ZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1v
ZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91
dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5t
b2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRl
ZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNl
ZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAg
c3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMjYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBl
cmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07
CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBp
bnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4s
IGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9u
OwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9z
dGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKICAg
IHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25l
eHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2lu
ZGV4OwogICAgICBfQXRvbWljX3dvcmQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlz
dChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAg
ICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9N
X2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2
b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291bnQs
IDEpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBf
X2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0KICAgIH07CgogICAgIF9DYWxs
YmFja19saXN0KiBfTV9jYWxsYmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3Mo
ZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2
b2lkKTsKCgogICAgc3RydWN0IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAg
ICAgbG9uZyBfTV9pd29yZDsKICAgICAgX1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQo
MCkgeyB9CiAgICB9OwoKCiAgICBfV29yZHMgX01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMgY29u
c3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtf
U19sb2NhbF93b3JkX3NpemVdOwoKCiAgICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBf
TV93b3JkOwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAg
ICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1Ymxp
YzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7
CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2
b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQK
ICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9T
X2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwog
ICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9N
X2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZs
KQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9
IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MK
ICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBf
TV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwog
ICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRm
bGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAg
IF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNr
KTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYo
Zm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3Ry
ZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9Cgog
ICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAg
IHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lz
aW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVh
bXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUg
c3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVh
bXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJl
dHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJv
b2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBf
X2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01f
aW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAg
IGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193
b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01f
d29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01f
aXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7
CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAg
ICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAg
IHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90
ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBp
b3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7
CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0
dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAg
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBp
b3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNl
ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3Nf
YmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6
Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlu
bGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpm
bG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDUwICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMSAz
CiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwoKCgoKCgoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
c3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5
cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBl
IHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBv
ZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90
eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBl
LCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0
ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUK
ICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlw
ZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKICAg
ICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplOwoKCiAgICAg
IHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoK
CgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1
cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2Jl
ZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9l
bmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9N
X2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKCgoKCiAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tfc2l6ZSA9IDE7CiAgICAgIGNoYXJfdHlwZSBf
TV9wYmFja1tfU19wYmFja19zaXplXTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2
ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFj
a19pbml0OwoKCiAgICAgIGZwb3M8X19zdGF0ZV90eXBlPiBfTV9wb3M7CgoKCgogICAgICB2b2lk
CiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2lu
aXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNpemVfdCBfX2Rpc3QgPSBfTV9pbl9lbmQgLSBf
TV9pbl9jdXI7CiAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfU19wYmFja19zaXplLCBf
X2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3Vy
LCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAg
ICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+
c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBf
TV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAog
ICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0
KQogICAgICAgICAgewoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAt
IF9NX3BiYWNrOwoKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOwogICAgICAgICAg
ICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAg
c2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAg
ICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQg
PSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1
ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAg
X01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJf
c2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAg
ICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgog
ICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAg
ICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19u
OwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9v
dXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFt
YnVmIiAzCiAgICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAg
ICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9j
dXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAg
ICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5k
KQogICAgICAgICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAg
ICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAg
ICAgICAgfQogICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUo
KQogICAgICB7CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRf
Y3VyKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQog
ICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1
cjsKCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBf
TV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICBw
dWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKICAg
ICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0gMDsKICAg
ICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Bl
bm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAgICAgIH0KCgog
ICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykKICAgICAgewog
ICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAgdGhpcy0+aW1idWUo
X19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgbG9jYWxlCiAgICAg
IGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQog
ICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0
dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVi
c2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhp
cy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihv
ZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9Cgog
ICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAg
ICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAg
c3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9f
cmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAg
ICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01f
cGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9p
bl9jdXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9f
cGJhY2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
IF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAg
ICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVy
biBfX3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewog
ICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVy
biAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikKICAgICAg
ICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5
cGUKICAgICAgc2J1bXBjKCk7CgogICAgICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsK
ICAgICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1
ciA8IF9NX2luX2VuZCkKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KCoodGhpcy0+Z3B0cigpKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51
bmRlcmZsb3coKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNp
emUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJl
dHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1
dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoK
CiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFt
c2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXpl
KDApLCBfTV9idWZfc2l6ZV9vcHQoMTAyNCksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwg
X01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwKICAgICAgX01fb3V0X2Jl
ZygwKSwgX01fb3V0X2N1cigwKSwgX01fb3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShpb3NfYmFz
ZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xv
Y2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZl
KDApLAogICAgICBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5
cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFy
X3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNo
YXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAg
IHZvaWQKICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2
b2lkCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hh
cl90eXBlKiBfX2dlbmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAg
ICAgX01faW5fY3VyID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAg
ICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYg
X19nZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAg
IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0
X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01f
b3V0X2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJu
IF9NX291dF9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRf
Y3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBj
aGFyX3R5cGUqIF9fcGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3Vy
ID0gX19wYmVnOwogICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01f
bW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9t
b2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2
b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9i
dWZfbG9jYWxlX2luaXQgPSB0cnVlOwogICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9j
KQogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVh
bCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90
eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBw
b3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0
KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFs
IHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4g
cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygp
IHsgcmV0dXJuIDA7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnlj
KCkgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQog
ICAgICB1bmRlcmZsb3coKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAg
ICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5
cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+dW5kZXJmbG93KCksIF9fcmV0KTsKICAgICAg
ICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5k
OwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBlbmRpbmcpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwog
ICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgaWYgKF9NX2J1Zl91bmlmaWVkICYm
IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgICsrX01fb3V0X2N1cjsKICAg
ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGlu
dF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAg
ICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1z
aXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoK
ICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190
eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgNDg1ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2lj
X3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1i
dWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVy
biAqdGhpczsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVh
bWJ1Zi50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNvbnN0IHNpemVfdAogICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz46Ol9TX3BiYWNrX3NpemU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9p
bl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqKHRoaXMtPmdwdHIoKSk7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsK
ICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw
ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNo
YXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVz
dHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190
ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVst
MV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBi
YWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkK
ICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5f
YmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsK
ICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAg
ICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIg
PSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRy
YWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24p
CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2lu
X2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6
ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRy
YWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19y
ZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9N
X2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8
IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVm
bG93KCk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0
cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2Mp
KTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAo
X19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01f
b3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAg
ICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAg
ICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwog
ICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlw
ZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOwog
ICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5
cGU6OmVvZigpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3JldDsK
ICAgICAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiBfX3JldDsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkKICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CgogICAgICBzdHJlYW1z
aXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFtc2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2
YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdDsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBf
X3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgdHJ5CiAgICAgICAgewogICAg
ICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9f
YnVmc2l6ZSk7CiAgICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICBf
X3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOwogICAgICAgICAgICAgIGlmIChfX3h0cmN0
ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9U
cmFpdHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dldGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3Ni
aW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgIHsKICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFt
YnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0
cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAg
ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiopOwoKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAg
c3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFz
aWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh
bWJ1Zjx3Y2hhcl90PiopOwp9CiMgNDk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYi
IDIgMwojIDUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Ry
ZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRv
cgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0No
YXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKCgoKCgoK
CiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGludF90eXBlIF9N
X2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQogICAg
ICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVm
KF9fcy5yZGJ1ZigpKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVh
bWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1
ZihfX3MpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgoKICAgICAgY2hhcl90eXBlCiAg
ICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcisrKCkKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAg
ICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAg
ICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IgX19vbGQgPSAqdGhpczsKICAgICAgICBpZiAoX01f
c2J1ZgogICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fb2xkLl9NX2Mg
PSBfTV9zYnVmLT5zYnVtcGMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAg
ICBfTV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKCgogICAgICBi
b29sCiAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImIF9fYikgY29uc3QKICAg
ICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgIGJvb2wgX190aGlzZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2dldCgp
LCBfX2VvZik7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19iLl9NX2dldCgpLCBfX2VvZik7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9m
IHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCiAgICBwcml2YXRlOgogICAg
ICBpbnRfdHlwZQogICAgICBfTV9nZXQoKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50
X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaW50X3R5cGUgX19yZXQg
PSBfX2VvZjsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYg
KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2YpKQogICAgICAgICAgICAgIF9f
cmV0ID0gX01fYzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMoKSksIF9fZW9mKSkKICAgICAg
ICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK
ICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gX19hLmVxdWFs
KF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2Ip
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNs
YXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVy
YXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJl
YW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
b3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVm
OwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGluZQogICAgICBv
c3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQogICAgICA6IF9N
X3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVh
bWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAgICA6IF9NX3Ni
dWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgYm9vbAog
ICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
aW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAgIG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7
CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9pbnRfdHlwZShf
TV9zYnVmLT5zcHV0YyhfX2MpLCBfVHJhaXRzOjplb2YoKSkpCiAgICAgICAgX01fZmFpbGVkID0g
dHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9CiMgNDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
bG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDEgMwoj
IDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS93Y3R5cGUuaCIgMSAzCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3
aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MiAzCgoKCgoKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgaW50IHdjdHlwZV90OwoKCgoKdHlwZWRl
ZiBpbnQgd2N0cmFuc190OwoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3dhbHBo
YSAod2ludF90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2FsbnVtICh3aW50
X3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXN3YmxhbmsgKHdpbnRfdCk7Cmlu
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3djbnRybCAod2ludF90KTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2N0eXBlICh3aW50X3QsIHdjdHlwZV90KTsKaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2RpZ2l0ICh3aW50X3QpOwppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgaXN3Z3JhcGggKHdpbnRfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBpc3dsb3dlciAod2ludF90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIGlzd3ByaW50ICh3aW50X3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXN3
cHVuY3QgKHdpbnRfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3dzcGFjZSAo
d2ludF90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd3VwcGVyICh3aW50X3Qp
OwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXN3eGRpZ2l0ICh3aW50X3QpOwp3aW50
X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93Y3RyYW5zICh3aW50X3QsIHdjdHJhbnNf
dCk7CndpbnRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0b3d1cHBlciAod2ludF90KTsK
d2ludF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRvd2xvd2VyICh3aW50X3QpOwp3Y3Ry
YW5zX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2N0cmFucyAoY29uc3QgY2hhciAqKTsK
d2N0eXBlX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2N0eXBlIChjb25zdCBjaGFyICop
OwoKfQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAyIDMKIyA0NyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jdHlwZV9iYXNlLmgiIDEgMwoj
IDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2N0eXBlX2Jhc2Uu
aCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3Rv
X3R5cGU7CgoKCiAgICB0eXBlZGVmIGNoYXIgbWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVw
cGVyID0gMDE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IDAyOwogICAgc3RhdGljIGNv
bnN0IG1hc2sgYWxwaGEgPSAwMSB8IDAyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAw
NDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IDAxMDAgfCAwNDsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIHNwYWNlID0gMDEwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAwMjAg
fCAwMSB8IDAyIHwgMDQgfCAwMjAwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSAwMjAg
fCAwMSB8IDAyIHwgMDQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDA0MDsKICAgIHN0
YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gMDIwOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0g
PSAwMSB8IDAyIHwgMDQ7CiAgfTsKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg
X19jdHlwZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlw
ZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CgogICAgICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9faGks
IG1hc2sgKl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hp
LCBfX3ZlYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9pcyhtYXNrIF9f
bSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAg
Y29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0
b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBw
ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVyKGNoYXJfdHlw
ZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG9sb3dl
cihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9f
Yyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
dG9sb3dlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIg
X19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CgogICAgICBj
b25zdCBjaGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp
LCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9f
bG8sIF9faGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19j
LCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19j
LCBfX2RmYXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFycm93KGNvbnN0
IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgIGNo
YXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25h
cnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IGV4cGxpY2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY3R5cGVf
YWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg
X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksCiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Qg
PSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xv
d2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29u
c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAgY2hhcl90eXBl
KiBfX2Rlc3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3co
Y2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9f
ZGVzdCkgY29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlw
ZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0KCiAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyht
YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lk
ZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193
aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVz
dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwg
Y2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
LAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0No
YXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6IHB1YmxpYyBf
X2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgX19jX2xvY2FsZSBfTV9j
X2xvY2FsZV9jdHlwZTsKICAgICAgYm9vbCBfTV9kZWw7CiAgICAgIF9fdG9fdHlwZSBfTV90b3Vw
cGVyOwogICAgICBfX3RvX3R5cGUgX01fdG9sb3dlcjsKICAgICAgY29uc3QgbWFzayogX01fdGFi
bGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUgPSAw
LCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwg
Ym9vbCBfX2RlbCA9IGZhbHNlLAogICAgICAgICAgICBzaXplX3QgX19yZWZzID0gMCk7CgogICAg
ICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAgICAg
aW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq
IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAg
ICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj
b25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwg
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVjdGVk
OgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAgICAgeyBy
ZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBtYXNrKgogICAgICBjbGFzc2lj
X3RhYmxlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2
aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25z
dCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJf
dHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91
cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hh
cl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv
dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVz
dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTxjaGFyPiYKICAg
IHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwojIDQwMCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jdHlwZV9pbmxpbmUuaCIg
MwogIGJvb2wKICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAog
IHsgcmV0dXJuIF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19t
OyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93
LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChf
X2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigqX19sb3crKyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNo
YXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93
LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdo
ICYmICF0aGlzLT5pcyhfX20sICpfX2xvdykpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19s
b3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9f
bSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3
aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgdGhpcy0+aXMoX19tLCAqX19sb3cpICE9IDApCiAgICAg
ICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9Owog
ICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1l
KGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFt
ZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7
CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWws
CiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAg
IGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNv
ZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5f
dHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBf
U3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBf
X3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg
ICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg
ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhp
cy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAg
fQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJu
X3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChf
X3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBp
bihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAg
ICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21f
bmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4
dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdh
eXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNf
bm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAg
ICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4
X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVj
dnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsg
fQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg
ICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1
bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190
bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7Cgog
ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkg
PSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm
LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50
CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3Rh
dGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jh
c2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVy
blQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19y
ZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7
IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRl
LCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg
ICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQK
ICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywK
ICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0
LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAog
ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJv
b2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFs
IGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBl
KiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf
dCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkg
Y29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl
bmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxf
SW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz
IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fi
c3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5
cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMg
PSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9f
ZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBl
eHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg
ZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAg
ICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg
ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAg
ICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21h
eCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3Qg
dGhyb3coKTsKICB9OwojIDMxOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb2RlY3Z0Lmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9J
bnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGlj
aXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQog
ICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsgfQog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQog
ICAgfTsKIyA0MjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAy
IDMKCgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNv
bnN0IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAg
IF9NX2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9N
X3NpemUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zs
b2F0KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAg
ICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAg
X1NfZm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9f
bW9kLCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
IHByaXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5
cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01f
ZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlh
bGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9j
YWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAg
ICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUK
ICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2lt
YWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmlu
ZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5n
KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFs
c2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0K
CiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f
dHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmly
dHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0
ZW1wbGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K
ICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19s
b2NhbGUgX19jbG9jKTsKIyA1NTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3Rf
YnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUg
X01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAg
ewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsK
ICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAg
ICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1l
KCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
Y2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6
ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f
aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p
biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p
biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdl
dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo
X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91
YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl
IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAg
ICBzdHJpbmcmIF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFj
dF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm
LAogICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgZG91Ymxl
JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg
ICAgICAgdm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjppZDsKIyA3MjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNz
IG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jhc2UKICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9f
ZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBs
b25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0
ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBl
IF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f
cywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcg
ZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBf
X2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9f
dikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAg
ICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9mbG9hdChpdGVyX3R5cGUsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
bHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2ludChpdGVyX3R5cGUs
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICBpdGVy
X3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGVu
KSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9pbnQoaXRlcl90eXBlLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAg
ICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01faW5zZXJ0
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3MsIGludCBfX2xlbikgY29uc3Q7CgogICAgICB2aXJ0
dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl
IF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25n
IGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZyBsb25n
KSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy
X3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs
LCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29s
bGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2Nh
bGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
ICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY19sb2Nh
bGU7IH0KCgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2NhbGUgX19jbG9jLCBz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBf
TV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgfQoKICAgICAg
aW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hp
MSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGky
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19s
bzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9D
aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25z
dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAgICBfTV9jb21wYXJl
KGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAgc2l6ZV90CiAgICAg
IF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0OwoKICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAgICB7CiAgICAgICAg
aWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0
cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOwogICAgICB9CgogICAgICB2aXJ0dWFs
IGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCog
X19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJU
KiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RyYW5z
Zm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D
aGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQK
ICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBj
b25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFu
c2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0OwojIDkxNyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4K
ICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgaWYgKF9NX2Nf
bG9jYWxlX2NvbGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9j
YWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOwogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9jb2xsYXRlLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIHRpbWVfYmFz
ZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwg
eW1kLCB5ZG0gfTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBf
X3RpbWVwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBfX2NoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgoKICAg
ICAgc3RhdGljIGNvbnN0IF9DaGFyVCogX1NfdGltZXpvbmVzWzE0XTsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfdGltZXB1bmN0OwogICAgICBjb25zdCBjaGFy
KiBfTV9uYW1lX3RpbWVwdW5jdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2Zvcm1hdDsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fdGltZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fdGltZV9lcmFfZm9ybWF0
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW07
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fcG07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fYW1fcG1f
Zm9ybWF0OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MTsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXkyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTM7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5NDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk1OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2RheTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NzsKCgogICAgICBjb25zdCBf
Q2hhclQqIF9NX2RheV9hMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTI7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fZGF5X2EzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNDsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E2
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNzsKCgogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMjsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aDAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDQ7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGgwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA2Owog
ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGgwODsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA5OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX21vbnRoMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aDEyOwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAxOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aF9hMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA0OwogICAgICBjb25zdCBf
Q2hhclQqIF9NX21vbnRoX2EwNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDY7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA3OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoX2EwODsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDk7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMTsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTI7CgogICAgcHVibGljOgogICAgICBleHBsaWNp
dAogICAgICBfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcyksIF9NX25hbWVfdGltZXB1bmN0KCJDIikKICAgICAgeyBfTV9pbml0aWFsaXpl
X3RpbWVwdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBfX3RpbWVwdW5jdChfX2NfbG9j
YWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25hbWVfdGltZXB1bmN0KF9fcykKICAgICAgeyBfTV9p
bml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dChf
Q2hhclQqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBfQ2hhclQqIF9fZm9ybWF0LAogICAg
ICAgICAgICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBfTV9kYXRl
X2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kYXRlKSBjb25zdAogICAgICB7CgogICAgICAgIF9f
ZGF0ZVswXSA9IF9NX2RhdGVfZm9ybWF0OwogICAgICAgIF9fZGF0ZVsxXSA9IF9NX2RhdGVfZXJh
X2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV90aW1lX2Zvcm1hdHMoY29uc3Qg
X0NoYXJUKiogX190aW1lKSBjb25zdAogICAgICB7CgogICAgICAgIF9fdGltZVswXSA9IF9NX3Rp
bWVfZm9ybWF0OwogICAgICAgIF9fdGltZVsxXSA9IF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QK
ICAgICAgewogICAgICAgIF9fYW1wbVswXSA9IF9NX2FtOwogICAgICAgIF9fYW1wbVsxXSA9IF9N
X3BtOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfdGltZV9mb3JtYXRzKGNvbnN0
IF9DaGFyVCoqIF9fZHQpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kdFswXSA9IF9NX2RhdGVf
dGltZV9mb3JtYXQ7CiAgICAgICAgX19kdFsxXSA9IF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0Owog
ICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXMoY29uc3QgX0NoYXJUKiogX19kYXlzKSBj
b25zdAogICAgICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5MTsKICAgICAgICBfX2RheXNb
MV0gPSBfTV9kYXkyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheTM7CiAgICAgICAgX19kYXlz
WzNdID0gX01fZGF5NDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXk1OwogICAgICAgIF9fZGF5
c1s1XSA9IF9NX2RheTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5NzsKICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBfTV9kYXlzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykg
Y29uc3QKICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheV9hMTsKICAgICAgICBfX2Rh
eXNbMV0gPSBfTV9kYXlfYTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5X2EzOwogICAgICAg
IF9fZGF5c1szXSA9IF9NX2RheV9hNDsKICAgICAgICBfX2RheXNbNF0gPSBfTV9kYXlfYTU7CiAg
ICAgICAgX19kYXlzWzVdID0gX01fZGF5X2E2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheV9h
NzsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJUKiogX19t
b250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoMDE7CiAg
ICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aDAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01f
bW9udGgwMzsKICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoMDQ7CiAgICAgICAgX19tb250
aHNbNF0gPSBfTV9tb250aDA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGgwNjsKICAg
ICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9t
b250aDA4OwogICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGgwOTsKICAgICAgICBfX21vbnRo
c1s5XSA9IF9NX21vbnRoMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGgxMTsKICAg
ICAgICBfX21vbnRoc1sxMV0gPSBfTV9tb250aDEyOwogICAgICB9CgogICAgICB2b2lkCiAgICAg
IF9NX21vbnRoc19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAg
ICAgewogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGhfYTAxOwogICAgICAgIF9fbW9udGhz
WzFdID0gX01fbW9udGhfYTAyOwogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGhfYTAzOwog
ICAgICAgIF9fbW9udGhzWzNdID0gX01fbW9udGhfYTA0OwogICAgICAgIF9fbW9udGhzWzRdID0g
X01fbW9udGhfYTA1OwogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2OwogICAgICAg
IF9fbW9udGhzWzZdID0gX01fbW9udGhfYTA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9u
dGhfYTA4OwogICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGhfYTA5OwogICAgICAgIF9fbW9u
dGhzWzldID0gX01fbW9udGhfYTEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoX2Ex
MTsKICAgICAgICBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7CiAgICAgIH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfl9fdGltZXB1bmN0KCk7CgoKICAgICAgdm9pZAog
ICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9j
YWxlKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQg
X190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3RpbWVwdW5jdDxj
aGFyPjo6fl9fdGltZXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAgICBf
X3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9p
ZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2Nh
bGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46
Ol9NX3B1dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsKIyAx
MTY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNvbnN0IF9DaGFyVCogX190aW1lcHVuY3Q8X0NoYXJU
Pjo6X1NfdGltZXpvbmVzWzE0XTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAg
IGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29yZGVyKCk7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF90
aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfZGF0ZShfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0p
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRf
eWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9y
ZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0
bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfZGF0
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9f
dG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBlJiBf
X2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoKICAgICAgdm9pZAogICAgICBfTV9leHRy
YWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJl
ciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBf
X2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
KSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5
cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdDsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxv
Y2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6
IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5
cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNp
emVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZz
KSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0X2J5bmFt
ZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0
aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxl
OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNv
bnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJU
KiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9f
dG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21vZCk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0KCkKICAgICAgeyB9
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAg
ICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1
dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBl
eHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciogLCBzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPihfX3JlZnMpCiAgICAgIHsg
fTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgp
IHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBw
YXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0
ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZh
dWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRl
cm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRs
ID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAg
IGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2lu
dDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fcG9zaXRpdmVfc2ln
bjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01f
ZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBf
TV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5j
dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9p
bml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5j
dChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5
cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2lu
dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAg
ICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmlu
Z190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Y3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAg
c3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0
dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9z
X2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAg
ICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3Bv
aW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBz
dHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGlu
ZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0cmlu
Z190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9w
b3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25lZ2F0
aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9zX2Zv
cm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZpcnR1
YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
bmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjppZCBtb25leXB1bmN0
PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J
bnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0
ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpOwoKICB0
ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKTsKCiAg
dGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlh
bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8Pgog
ICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlw
dW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CiMgMTUwNSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0
PF9DaGFyVCwgX0ludGw+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlw
dW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Rf
YnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlw
dW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19s
b2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXpl
X21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19k
ZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVu
Y3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxl
OjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9f
ZXJyLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19z
LCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2Vy
ciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25l
eV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNv
bnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9w
dXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGws
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5n
X3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf
X2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNo
YXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29s
IF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBj
b25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAg
dHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBjbGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNf
YmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3Rl
Y3RlZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21lc3NhZ2VzOwoKCiAgICAgIGNv
bnN0IGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7CgoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZz
ID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25hbWVfbWVzc2FnZXMoIkMi
KQogICAgICB7IF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY19sb2NhbGU7IH0KCgogICAgICBl
eHBsaWNpdAogICAgICBtZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19u
YW1lLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg
ICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX25hbWU7CiAgICAgICAgX01fY19sb2Nh
bGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwogICAgICB9CgogICAgICBj
YXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxv
Y2FsZSYgX19sb2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xv
Yyk7IH0KCgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+
JiwgY29uc3QgbG9jYWxlJiwgY29uc3QgY2hhciopIGNvbnN0OwoKICAgICAgc3RyaW5nX3R5cGUK
ICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJp
bmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBfX3Nl
dCwgX19tc2dpZCwgX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKQogICAgICAgewogICAgICAgICBpZiAo
X01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICAgX1NfZGVzdHJv
eV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICB9CgogICAgICB2aXJ0dWFs
IGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBs
b2NhbGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZ2V0KGNh
dGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCB2b2lkCiAgICAgIGRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0OwoKCiAgICAgIGNo
YXIqCiAgICAgIF9NX2NvbnZlcnRfdG9fY2hhcihjb25zdCBzdHJpbmdfdHlwZSYgX19tc2cpIGNv
bnN0CiAgICAgIHsKCiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0
X2Nhc3Q8X0NoYXJUKj4oX19tc2cuY19zdHIoKSkpOwogICAgICB9CgoKICAgICAgc3RyaW5nX3R5
cGUKICAgICAgX01fY29udmVydF9mcm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0CiAgICAgIHsK
CiAgICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChfX21zZykg
LSAxOwojIDE3MzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAz
CiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7CiAgICAgIH0KICAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoK
CiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFs
b2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsKCgojIDEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9tZXNzYWdlc19tZW1iZXJz
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxf
Q2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0
cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKikgY29uc3QKICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19z
LCBfX2xvYyk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1l
c3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29u
c3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QKICAgIHsgcmV0dXJu
IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8
X0NoYXJUPjo6c3RyaW5nX3R5cGUKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9n
LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw
ZSYgX19kZmF1bHQpIGNvbnN0CiAgICB7IHJldHVybiBfX2RmYXVsdDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShj
YXRhbG9nKSBjb25zdAogICAgeyB9CiMgMTc0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9s
b2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl
c19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtZXNz
YWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBf
X3M7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQogICAg
ICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICAg
X1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgICB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAg
ICB7IH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNw
YWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
CiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVy
biB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwg
X19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBw
ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9j
YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
LmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo
Y3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93
ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxf
Q2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxf
Q2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlz
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAg
ICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5
cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUg
Ym9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9mY3R5cGU7Cgog
ICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3QgX19udW1n
ZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNf
aW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIHZvaWQKICAg
ICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lkCiAgICAgIHNl
dHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRl
KCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29u
c3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAg
ICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUo
KSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBiYWQoKSBj
b25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9Cgog
ICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9l
eGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0
KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+
Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAg
IGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3Nf
YmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+
YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kgog
ICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAg
ICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVm
OyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYo
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9z
JgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgY2hhcl90eXBl
CiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxsX2luaXQpCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICAg
ICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfTV9m
aWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkK
ICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBf
TV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2Nh
bGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5h
cnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlw
ZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFz
aWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAg
X01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiAg
ICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0
IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz
aWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkp
CiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQogICAgICAg
ICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYgKCh0aGlz
LT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3dfaW9zX2Zh
aWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsK
ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFt
YnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAg
ICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsK
CgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9j
YWxfd29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNbX19yaHMu
X01fd29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2Nh
bGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgp
OwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3Jk
ICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7
CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJh
Y2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAw
OyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9
IF9fcmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkK
ICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQg
PSAwOwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfc2l6
ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkp
OwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9u
KF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAg
dGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5l
eGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5h
cnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAgICBjaGFy
IF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQog
ICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4o
Y2hhciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgp
OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9N
X2ZjdHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsK
ICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVl
KF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJk
YnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAg
IHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQo
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3Nf
YmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAg
ICAgIF9NX3RpZSA9IDA7CiMgMTU5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lv
cy50Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBm
YWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9
IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBl
PihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9f
bG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2Zh
Y2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNl
dDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0g
MDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01f
Zm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAg
ICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90
PjsKfQojIDIwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMg
NTIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysv
My4yL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFs
IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog
ICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5
cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg
fmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBj
bGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9f
b3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19w
ZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJv
b2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9f
bikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpv
Y3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVs
c2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9f
bikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNp
Z25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19m
bXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19m
bXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJl
dHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24p
KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9y
PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlz
LT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5
cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3Nf
dHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19i
YXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz
ZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRy
eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkK
ICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYm
ICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9v
cy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAg
ICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoK
ICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy
IF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2Fz
dDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8
IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg
X0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9f
b3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChf
X29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVy
biBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1
c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19v
cy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJl
YW0udGNjIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEgMwojIDQzICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9sb2NhbGUiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDEgMwoj
IDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Vy
cm5vLmgiIDEgMwoKCgp0eXBlZGVmIGludCBlcnJvcl90OwoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2Vycm5vLmgiIDEgMwoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgKl9fZXJy
bm8gKHZvaWQpOwoKCgoKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGNvbnN0IGNo
YXIgKiBjb25zdCBfc3lzX2Vycmxpc3RbXTsKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9y
dCkpIGludCBfc3lzX25lcnI7CgpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY29u
c3QgY2hhciAqIGNvbnN0IHN5c19lcnJsaXN0W107CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxp
bXBvcnQpKSBpbnQgc3lzX25lcnI7CiMgMTU4ICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDMK
fQojIDcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMSAzCiMgNDgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmgiIDEgMwojIDgg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCgoKCgp1bmlvbiBfX2Rt
YXRoCnsKICBfX1VMb25nIGlbMl07CiAgZG91YmxlIGQ7Cn07CgoKCgpleHRlcm4gX19hdHRyaWJ1
dGVfXygoZGxsaW1wb3J0KSkgY29uc3QgdW5pb24gX19kbWF0aCBfX2luZmluaXR5W107CiMgMzUg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUpOwpleHRl
cm4gZG91YmxlIGNvcyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgdGFuIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgZnJleHAgKGRvdWJsZSwgaW50ICopOwpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJs
ZSwgZG91YmxlICopOwpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUg
ZmFicyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlKTsKCgoKCgoKZXh0ZXJu
IGRvdWJsZSBhY29zIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgYXRhbjIgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3Vi
bGUpOwpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZXhwIChkb3Vi
bGUpOwpleHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUsIGludCk7CmV4dGVybiBkb3VibGUgbG9n
IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHBv
dyAoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSk7CmV4dGVybiBk
b3VibGUgZm1vZCAoZG91YmxlLCBkb3VibGUpOwojIDcyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz
CnR5cGVkZWYgZmxvYXQgZmxvYXRfdDsKdHlwZWRlZiBkb3VibGUgZG91YmxlX3Q7CiMgODIgIi91
c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCB4KTsK
ZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlkIChkb3VibGUgeCk7CiMgMTIxICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzCmV4dGVybiBkb3VibGUgaW5maW5pdHkgKHZvaWQpOwpleHRlcm4gZG91YmxlIG5h
biAodm9pZCk7CmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSk7CmV4dGVybiBpbnQgaXNpbmYgKGRv
dWJsZSk7CmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGNvcHlzaWdu
IChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSk7CgpleHRlcm4gZG91
YmxlIGFzaW5oIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSk7CmV4dGVybiBk
b3VibGUgbmV4dGFmdGVyIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgcmludCAoZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSwgaW50KTsKCmV4dGVybiBkb3VibGUg
ZXhwMiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUsIGxvbmcgaW50KTsK
ZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChk
b3VibGUpOwpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgcm91
bmQgKGRvdWJsZSk7CmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgdHJ1bmMgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUsIGRvdWJsZSwg
aW50ICopOwpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBk
b3VibGUgZmRpbSAoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSwg
ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgZm1hIChkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIHZvaWQgc2luY29zIChkb3Vi
bGUsIGRvdWJsZSAqLCBkb3VibGUgKik7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlKTsK
ZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlKTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSByZW1haW5k
ZXIgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKTsKZXh0ZXJu
IGRvdWJsZSBnYW1tYV9yIChkb3VibGUsIGludCAqKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRv
dWJsZSk7CmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICopOwpleHRlcm4gZG91
YmxlIGVyZiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpOwpleHRlcm4gZG91
YmxlIHkwIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpOwpleHRlcm4gZG91Ymxl
IHluIChpbnQsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgajAgKGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgajEgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKTsKCgoKZXh0ZXJu
IGRvdWJsZSBoeXBvdCAoZG91YmxlLCBkb3VibGUpOwoKCmV4dGVybiBkb3VibGUgY2FicygpOwpl
eHRlcm4gZG91YmxlIGRyZW0gKGRvdWJsZSwgZG91YmxlKTsKIyAxODkgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDMKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCk7CmV4dGVybiBmbG9hdCBjb3NmIChm
bG9hdCk7CmV4dGVybiBmbG9hdCBzaW5mIChmbG9hdCk7CmV4dGVybiBmbG9hdCB0YW5mIChmbG9h
dCk7CmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9h
dCwgaW50ICopOwpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsKZXh0ZXJuIGZs
b2F0IGNlaWxmIChmbG9hdCk7CmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQpOwpleHRlcm4gZmxv
YXQgZmxvb3JmIChmbG9hdCk7CgoKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCk7CmV4dGVybiBm
bG9hdCBhc2luZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCwgZmxvYXQpOwpl
eHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCk7CmV4
dGVybiBmbG9hdCBleHBmIChmbG9hdCk7CmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0LCBpbnQp
OwpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCk7
CmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCwgZmxvYXQpOwpleHRlcm4gZmxvYXQgc3FydGYgKGZs
b2F0KTsKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCwgZmxvYXQpOwojIDIyMSAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMwpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHNj
YWxibG5mIChmbG9hdCwgbG9uZyBpbnQpOwpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpOwpl
eHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQpOwpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChm
bG9hdCk7CmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0KTsKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu
ZGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgcmVt
cXVvZiAoZmxvYXQsIGZsb2F0LCBpbnQgKik7CmV4dGVybiBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0
LCBmbG9hdCk7CmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0
IGZtYXhmIChmbG9hdCwgZmxvYXQpOwpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0LCBmbG9hdCk7
CmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCwgZmxvYXQsIGZsb2F0KTsKCmV4dGVybiBmbG9hdCBp
bmZpbml0eWYgKHZvaWQpOwpleHRlcm4gZmxvYXQgbmFuZiAodm9pZCk7CmV4dGVybiBpbnQgaXNu
YW5mIChmbG9hdCk7CmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCk7CmV4dGVybiBpbnQgZmluaXRl
ZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCwgZmxvYXQpOwpleHRlcm4g
aW50IGlsb2diZiAoZmxvYXQpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQpOwpleHRlcm4g
ZmxvYXQgY2JydGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0LCBmbG9h
dCk7CmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxv
YXQsIGludCk7CmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGV4cG0x
ZiAoZmxvYXQpOwpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCwgZmxvYXQgKiwgZmxvYXQgKik7
CgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9h
dCk7CmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCwgZmxvYXQpOwpleHRlcm4gZmxvYXQg
Z2FtbWFmIChmbG9hdCk7CmV4dGVybiBmbG9hdCBnYW1tYWZfciAoZmxvYXQsIGludCAqKTsKZXh0
ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQs
IGludCAqKTsKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChm
bG9hdCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQp
OwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQp
OwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCk7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQp
OwoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxvYXQsIGZsb2F0KTsKCmV4dGVybiBmbG9hdCBjYWJz
ZigpOwpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0LCBmbG9hdCk7CgoKCgoKCmV4dGVybiBpbnQg
Kl9fc2lnbmdhbSAodm9pZCk7CgoKCgoKCgpzdHJ1Y3QgX19leGNlcHRpb24KCgoKewogIGludCB0
eXBlOwogIGNoYXIgKm5hbWU7CiAgZG91YmxlIGFyZzE7CiAgZG91YmxlIGFyZzI7CiAgZG91Ymxl
IHJldHZhbDsKICBpbnQgZXJyOwp9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj
ZXB0aW9uICplKTsKIyAzNDUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bSBfX2ZkbGlibV92
ZXJzaW9uCnsKICBfX2ZkbGlibV9pZWVlID0gLTEsCiAgX19mZGxpYm1fc3ZpZCwKICBfX2ZkbGli
bV94b3BlbiwKICBfX2ZkbGlibV9wb3NpeAp9OwoKCgoKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRs
bGltcG9ydCkpIGNvbnN0IGVudW0gX19mZGxpYm1fdmVyc2lvbiBfX2ZkbGliX3ZlcnNpb247CiMg
MzY1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDIgMwojIDc5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1
bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1
cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7
IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9f
eCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGFj
b3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3Moc3RhdGljX2Nhc3Q8ZG91YmxlPihf
X3gpKTsgfQoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBf
X3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQojIDEyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjphc2luKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6YXRh
bjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9f
eCk7IH0KIyAxNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbihzdGF0aWNfY2Fz
dDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmF0YW4yOwoKCiAgaW5saW5lIGZsb2F0CiAg
YXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbjJmKF9feSwgX194KTsg
fQojIDE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiA6
OmF0YW4yKHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gp
KTsgfQoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQojIDE4NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21h
dGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1
cm4gOjpjZWlsKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6Y29zOwoK
ICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3Nm
KF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zKGxvbmcgZG91YmxlIF9feCkKICB7
IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CgogIHVzaW5nIDo6Y29zaDsKCgogIGlubGlu
ZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2hmKF9feCk7IH0KIyAyMTMg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29z
aChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaChzdGF0aWNfY2FzdDxkb3VibGU+KF9f
eCkpOyB9CgoKICB1c2luZyA6OmV4cDsKCgogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CiMgMjMxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0
aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6ZXhwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6ZmFiczsKCiAg
aW5saW5lIGZsb2F0CiAgZmFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNm
KF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAg
eyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlu
bGluZSBmbG9hdAogIGZsb29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYoX194KTsgfQoj
IDI1OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3Ioc3RhdGljX2Nhc3Q8ZG91
YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KIyAyNzgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZm1v
ZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKICB7IHJldHVybiA6OmZtb2Qoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9CgoKICB1
c2luZyA6OmZyZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9f
ZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQojIDI5NyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJs
ZSBfX3gsIGludCogX19leHApCiAgeyByZXR1cm4gOjpmcmV4cChzdGF0aWNfY2FzdDxkb3VibGU+
KF9feCksIF9fZXhwKTsgfQoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxk
ZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsg
fQojIDMxNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkKICB7IHJldHVybiA6OmxkZXhw
KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgX19leHApOyB9CgoKICB1c2luZyA6OmxvZzsKCgog
IGlubGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CiMg
MzM2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQog
IGxvZyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nKHN0YXRpY19jYXN0PGRvdWJsZT4o
X194KSk7IH0KCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9h
dCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KIyAzNTQgIi91c3IvaW5jbHVkZS9jKysv
My4yL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nMTAobG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OmxvZzEwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5n
IDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRy
KSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3OCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUqIF9faXB0cikKICB7CiAgICBkb3VibGUgX190bXA7CiAgICBkb3VibGUg
X19yZXMgPSA6Om1vZGYoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCAmX190bXApOwogICAgKiBf
X2lwdHIgPSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX190bXApOwogICAgcmV0dXJuIF9fcmVz
OwogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fcG93
X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAogICAg
ICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0aF9w
b3dlcihfX3gsIF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKCiAgaW5saW5lIGZsb2F0CiAg
cG93KGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CiMg
NDEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQog
IHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKICB7IHJldHVybiA6OnBvdyhz
dGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSk7IH0KCgog
IGlubGluZSBkb3VibGUKICBwb3coZG91YmxlIF9feCwgaW50IF9faSkKICB7IHJldHVybiBfX3Bv
d19oZWxwZXIoX194LCBfX2kpOyB9CgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGlu
dCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93
X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgdXNpbmcgOjpzaW47CgogIGlubGluZSBmbG9hdAogIHNp
bihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmYoX194KTsgfQoKICBpbmxpbmUg
bG9uZyBkb3VibGUKICBzaW4obG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z
aW5sKF9feCk7IH0KCiAgdXNpbmcgOjpzaW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgc2luaChmbG9h
dCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQojIDQ1MyAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkg
eyByZXR1cm4gOjpzaW5oKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6
c3FydDsKCiAgaW5saW5lIGZsb2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWls
dGluX3NxcnRmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJs
ZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47
CgoKICBpbmxpbmUgZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsg
fQojIDQ4MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbihzdGF0aWNfY2FzdDxkb3Vi
bGU+KF9feCkpOyB9CgoKICB1c2luZyA6OnRhbmg7CgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZs
b2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihfX3gpOyB9CiMgNDk5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194
KSB7IHJldHVybiA6OnRhbmgoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKfQojIDY1NCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgu
dGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAog
ICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBf
VHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAg
ICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQog
ICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsK
ICAgIH0KfQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDQyICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGlt
aXRzIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvY3B1
X2xpbWl0cy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAyIDMKIyA4
ODcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVt
IGZsb2F0X3JvdW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAg
cm91bmRfdG93YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3Vu
ZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMK
ICB9OwoKICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWlu
YXRlID0gLTEsCiAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQog
IH07CgoKCgogIHN0cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAg
c3RhdGljIGNvbnN0IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0
c19iYXNlCiAgICB7CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5k
X2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0
YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21p
bigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wg
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBi
b29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRp
YyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2ln
bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGlj
IGJvb2wgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gZmFsc2U7CgoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAg
ICAgICAgICAgfHwgdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls
ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAoY2hhcikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFy
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln
bmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3co
KQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBj
aGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+
KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CiMgMTA3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTEyNyAtIDEpOyB9
CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEy
NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFy
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNo
YXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i
ZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5k
X3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDExMjggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1
bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBj
aGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gKHdjaGFyX3QpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyB3
Y2hhcl90IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHdjaGFyX3QpMjE0NzQ4MzY0N0w7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgc3RhdGljIHdjaGFyX3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgd2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsg
fQogICAgICBzdGF0aWMgd2NoYXJfdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI0
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRy
dWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMg
MTI5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgzMjc2NyAqIDIgKyAxKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNjsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNo
b3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50PgogICAg
ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz
dGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkoLTIxNDc0ODM2NDdM
IC0gMSk7IH0KICAgICAgc3RhdGljIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChp
bnQpMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAg
ICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTQxMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGlt
aXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGlu
dD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAodW5zaWduZWQpKDIxNDc0ODM2NDdMICogMlUgKyAxKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcg
ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBy
b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAg
ICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE1MjIg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3
NTgwN0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxv
bmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRp
YyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0K
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+
KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1
ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs
b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Zmxv
YXQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0
MzVlLTM4RjsgfQogICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy
biAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRpYyBm
bG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDEyODsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl
bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxv
YXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBz
dGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CiMgMTc2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGRvdWJsZSBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3MjAxNGUtMzA4OyB9CiAg
ICAgIHN0YXRpYyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjc5NzY5MzEz
NDg2MjMxNTdlKzMwODsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZG91YmxlIGVwc2lsb24oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0KICAgICAgc3Rh
dGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIxOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAxMDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMzA4OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAgICAgICAgICBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsg
fQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE4NDQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAg
c3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0
OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
NjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91Ymxl
IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFl
LTE5TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gLTE2MzgxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PQogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7
CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBk
b3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKIyAxOTI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKfQojIDQ0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewog
IGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5
cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJs
aWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9p
bmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlw
ZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVj
dGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24p
IHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QKICAgIHsgcmV0
dXJuIF9fbmFtZTsgfQoKCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBj
b25zdDsKCgoKICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25z
dDsKIyAxMDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCiAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRv
cj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJf
cCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoK
CgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5
cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9f
Y3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoKCgogIGNsYXNzIGJhZF9j
YXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93
KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsKICB9OwoKCiAgY2xhc3Mg
YmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVp
ZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlwZWlkKCkgdGhyb3coKTsKICB9
Owp9Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9j
YWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAg
ewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3Rt
cC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAg
cmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpv
cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
czEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxh
dGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9f
Y29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4g
KF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3Ro
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0
YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2Fs
ZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgaWYg
KCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkp
CiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3co
KQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2Nh
bGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJl
dHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19p
XSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh
Y3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0
cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0
c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBj
b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVt
cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0g
X19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5
cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9
ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190
cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5k
KQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIo
KSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRv
bXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICB3aGls
ZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgIHsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICBfX2ZvdW5kX3plcm8g
PSB0cnVlOwogICAgICAgIH0KICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICB7CiAgICAg
ICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICArK19fcG9zOwogICAg
ICAgIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfTV9FIC0gX01femVybyArIDE7CiAg
ICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRv
bXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9
IGZhbHNlOwogICAgICBib29sIF9fZm91bmRfc2NpID0gZmFsc2U7CiAgICAgIGNvbnN0IGNoYXJf
dHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKICAgICAgc3RyaW5nIF9fZm91bmRf
Z3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygp
OwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAg
aW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhv
dXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCiAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRv
bXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShf
X2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9zOwog
ICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAg
ICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkK
ICAgICAgICAgICAgICAgICAgICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNo
YXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAg
ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg
X19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgIGlm
IChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBp
bmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICArK19fcG9z
OwogICAgICAgICAgICAgIF9feHRyYyArPSAnLic7CiAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX2VdKQog
ICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01f
RV0pKQogICAgICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9zKQogICAgICAg
ICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9f
Y3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcp
OwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKQogICAg
ICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAgICBf
X3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fZm91bmRf
c2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dy
b3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5kX2RlYykKICAg
ICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3Mp
OwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dy
b3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAg
fQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9pbnQoX0lu
SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFz
ZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRz
X3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv
bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1w
dW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2Vm
aWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2Jh
c2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7CiAgICAgIGVsc2Ug
aWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19iYXNlID0gMTY7CiAg
ICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAxMDsKCgogICAgICBpbnQgX19wb3MgPSAwOwogICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19wbHVzID0g
X19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5
cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMp
IHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAh
PSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19j
LCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVu
KF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9feCA9IF9fY3R5cGUu
d2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5cGUud2lkZW4oJ1gn
KTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkKICAgICAgICB7CiAgICAgICAgICBib29sIF9fZm91
bmRfemVybyA9IGZhbHNlOwogICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg
X196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAg
ICAgICAgfQogICAgICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9z
OwogICAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KQogICAgICAg
ICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAg
ICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7
CiAgICAgICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2OwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICB7CiAgICAgICAgICBpZiAoX190cmFp
dHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAg
ICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBp
ZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190eXBlOjplcShfX2Ms
IF9fWCkpCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy
KCkpOwogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX2MgPSAq
KCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKCgog
ICAgICBzaXplX3QgX19sZW47CiAgICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgX19sZW4g
PSBfTV9zaXplOwogICAgICBlbHNlCiAgICAgICAgX19sZW4gPSBfX2Jhc2U7CgoKICAgICAgY2hh
cl90eXBlIF9fd2F0b21zW19NX3NpemVdOwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBf
U19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5n
OwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAg
Ym9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3Nl
cF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19z
ZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4s
IF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hh
cl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9t
c1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAr
K19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKSAmJiBfX2No
ZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9z
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9
IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3Bv
cyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3Vu
ZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcg
Kz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlf
Z3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigp
OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv
ZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYg
X192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJv
b2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAgICBzdHJpbmcgX194dHJjOwogICAgICAgICAg
aW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5k
LCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
X191bDsKICAgICAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2Vy
ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
OjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgICAgICAgIF9fdiA9IF9fdWw7CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0K
CgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hh
clQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK
ICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVu
Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX190cnVl
ID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX2ZhbHNl
ID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190cnVlcyA9
IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlcyA9IF9f
ZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVuID0gX190cnVlLnNp
emUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4gPSBfX2ZhbHNlLnNpemUo
KSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19iZWcgIT0gX19lbmQ7ICsr
X19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZysr
OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2ZhbHNlbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2ZhbHNlc1tfX25d
KSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fdHJ1
ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6
ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX24gPT0gX19mYWxzZW4pCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19u
ID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRy
Yy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJu
IF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVn
ID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh
c2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRy
Yy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICgh
KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg
aW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAg
ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2Fs
ZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAg
ICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkpCiAgICAg
ICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBz
dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf
aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19j
b252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jh
c2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9u
ZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNl
OwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9f
diwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAg
ICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0
cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAg
ICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUs
IF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxv
YXQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJl
c2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCks
IF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAg
ICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJj
OwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9h
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9f
dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAg
IHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBf
X2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
KTsKCgoKCgogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vyciwg
X1NfY19sb2NhbGUpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFn
cyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGZt
dGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZp
ZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwg
aW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8
IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcgX194
dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lvLmZsYWdz
KF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3Yo
X194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAg
aWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiAgICAgICAgX192ID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDYyNCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgog
ICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01f
Y29udmVydF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxs
LCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdAog
ICAgICB7CgoKICAgICAgICBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8
X1ZhbHVlVD46OmRpZ2l0czEwICsgMTsKICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8u
cHJlY2lzaW9uKCk7CgogICAgICAgIGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXpl
PihfX21heF9kaWdpdHMpKQogICAgICAgICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX19tYXhfZGlnaXRzKTsKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAgIGlu
dCBfX2xlbjsKIyA2NzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDMKICAgICAgICBjb25zdCBib29sIF9fZml4ZWQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFz
ZTo6Zml4ZWQ7CiAgICAgICAgY29uc3QgaW50IF9fbWF4X2V4cCA9IG51bWVyaWNfbGltaXRzPF9W
YWx1ZVQ+OjptYXhfZXhwb25lbnQxMDsKCgoKCgogICAgICAgIGNvbnN0IGludCBfX2NzX3NpemUg
PSBfX2ZpeGVkID8gX19tYXhfZXhwICsgX19tYXhfZGlnaXRzICsgNAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogX19tYXhfZGlnaXRzICogMzsKICAgICAgICBjaGFyKiBf
X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7Cgog
ICAgICAgIGlmIChfU19mb3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKSkK
ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCAwLCBfX2ZidWYsIF9fdiwg
X1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2Nv
bnZlcnRfZnJvbV92KF9fY3MsIDAsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgogICAgICAg
IHJldHVybiBfTV93aWRlbl9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwog
ICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBp
b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAg
ICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAgICAgICAg
Y2hhciBfX2ZidWZbMTZdOwogICAgICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21v
ZCwgX19tb2RsKTsKIyA3MTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0
cy50Y2MiIDMKICAgICAgICBjaGFyIF9fY3NbMTI4XTsKICAgICAgICBpbnQgX19sZW4gPSBfX2Nv
bnZlcnRfZnJvbV92KF9fY3MsIDAsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgogICAgICAg
IHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAg
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxv
YXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19j
cywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl
ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxl
IF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw
ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3Mg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9f
Y3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hh
clQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxu
dW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6
ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkKICAgICAgICBfX3dzW19fcCAt
IF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19n
cm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFz
ZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9f
Z3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX19wMjsKICAgICAg
ICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAtIF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9f
cDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7
CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7CgoKICAgICAgICAgIGlmIChf
X3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIs
IF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAgICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4g
LSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAg
ICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAgIH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQo
X19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNl
JiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgIGludCBf
X2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv
YygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAg
X0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBf
X2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAg
PSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5n
IF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRm
bGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg
ICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgoKCiAgICAgICAgICBzdHJlYW1z
aXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hv
d2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAgICAgICpf
X3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNl
ZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBf
X29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICAg
ICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIF9D
aGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwg
X19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dy
b3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5n
LmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0gX19wIC0g
X193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9N
X2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBp
b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAg
ICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxf
Q2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgo
KTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19j
YXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQs
IF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVl
KTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9f
d3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAo
aW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9f
d3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRm
bGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFz
ZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191
diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxs
LCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICAg
ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0
PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYgKF9fdikKICAgICAgICAg
ICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9fcywg
X19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46
OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19p
bywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy
X3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgeyBy
ZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3Yp
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3Yp
IGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcs
ICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252
ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJs
ZSBfX3YpIGNvbnN0CiAgICB7CgoKCgogICAgICByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3Ms
IF9faW8sIF9fZmlsbCwgJ0wnLCBfX3YpOwoKICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy
X3R5cGUgX19maWxsLAogICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz
ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBw
ZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYg
X19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkK
ICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls
bCwgJ3UnLCBjaGFyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdz
KTsKICAgICAgICB9CiAgICAgIGNhdGNoICguLi4pCiAgICAgICAgewogICAgICAgICAgX19pby5m
bGFncyhfX2ZsYWdzKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
czsKICAgIH0KIyA5ODMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRz
KSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcgPSB0aGlz
LT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7CgogICAg
ICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsK
ICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
bikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25z
dCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAgICBfX2N0
eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCksIF9fY3Mp
OwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19sb2NhbGUp
OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wg
X19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBtb25l
eXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1vbmV5cHVu
Y3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlwZWRlZiBtb25leV9iYXNl
OjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog
ICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9fbW9uZXlfdHJ1ZT4o
X19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9IHVzZV9mYWNldDxfX21v
bmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNvbnN0IG1vbmV5X2Jhc2U6
OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnX2Zvcm1hdCgpOwoKICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVf
c2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm
LnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdfc2lnbiA9X19p
bnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAgICAgY29uc3QgY2hhcl90
eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgpOwogICAgICBjb25zdCBj
aGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwoKICAg
ICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91cGluZygpIDog
X19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CgogICAgICBzdHJp
bmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0gMDsKCiAgICAgIGJvb2wg
X190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9IGZhbHNlOwoK
CiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAq
X19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oY2hh
cl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2Jl
ZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19faSkKICAgICAgICB7CiAg
ICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbX19pXSk7
CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYgKF9faW8u
ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAgICAgICAgICAgfHwgX19p
IDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAgICAgICAgfHwgKChzdGF0
aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAgICAgICAgICAgIHsKCgoK
CgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2lu
dGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNpemUoKTsKICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19qIDwg
X19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAg
ICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl
OjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3Bv
c19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAgICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25bMF0pCiAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fbmVnX3NpZ25b
MF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2ln
biA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX2MgPT0gX19w
b3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBf
X3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fbmVn
X3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAg
ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVl
OgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAhX190ZXN0ZGVjZm91bmQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fc2VwKSkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fZCkKICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmdf
dG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3RkZWNm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBp
bmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
X190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAgICAgICArK19fc2VwX3Bv
czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgX19jID0g
KigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICAgICAgICAgICAgICAg
IGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAgIGlmIChfX2kgIT0gMykK
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAg
ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoX19zaWduLnNpemUoKSA+
IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWduLnNpemUoKTsK
ICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9yICg7IF9fYyAhPSBfX2Vv
ZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu
ZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsK
CiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZh
bHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBdID09IF9fY3R5cGUu
d2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190ZW1wX3VuaXRzLmJlZ2lu
KCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09IF9fbmVnX3NpZ24pCiAg
ICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwgX19jdHlwZS53
aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19ncm91cGluZ190
bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19n
cm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNl
OwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8fCAhX190ZW1wX3VuaXRz
LnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgZWxzZQoK
ICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KIyAxMjM2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNj
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBjb25zdCBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiMgMTI2MSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogICAgICBjb25zdCBpbnQg
X19jc19zaXplID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXhfZXhwb25lbnQxMCAr
IDU7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j
YShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCAw
LCAiJS4wMUxmIiwgX191bml0cywgX1NfY19sb2NhbGUpOwoKICAgICAgX0NoYXJUKiBfX3dzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
Y3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7
CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICByZXR1cm4gdGhpcy0+ZG9f
cHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBi
b29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAg
Y29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1v
bmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0
bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90
eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRy
dWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+
IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFj
ZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBm
ID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0No
YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jh
c2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19i
ZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50
bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9f
c2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2ln
bigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50
bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9f
c2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2ln
bigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBl
LnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAg
ICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg
X19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAg
ICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsK
ICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50
KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBf
X2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5i
ZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAg
ICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAg
ICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAg
ICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJv
KTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2Qp
OwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdy
b3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAg
PSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6
ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICog
MjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
bikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmco
X193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAg
IF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgw
LCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZp
ZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24u
c2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93
YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0g
X19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAg
IGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwog
ICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19p
by5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVz
ICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXpl
KCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAg
ICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAg
ICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5
cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAg
ICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMg
Kz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAo
X19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2ln
bi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5z
aXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jl
cy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAg
ICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVu
LCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0K
CgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCAr
K19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lv
LndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAg
IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyBy
ZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUm
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2Vf
ZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0No
YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBz
aXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAg
ICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYg
IV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19f
aV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAg
ICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAg
ICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8
fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9
IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQg
X193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5
c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1l
KF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAg
ICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5
LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAg
ICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
bW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVk
KF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19l
bmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMy
WzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBf
X21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBf
X3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAg
X19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0
KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl
ZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShf
X2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251
bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQog
ICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAg
ICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAg
ICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwog
ICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193
Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9z
ZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBf
X2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6
CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcp
CiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2Nz
ID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2Nz
ICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRl
c1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19k
YXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn
WCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAg
ICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAw
LCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIp
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAg
ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCks
IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAg
ICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95
ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFz
ZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9f
YmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9f
dG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lk
ZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53
aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt
cCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAg
ICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAg
ICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0
X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAog
ICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQg
PSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcg
IT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVf
YmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlw
ZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAr
K19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAg
ICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9f
bWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIg
PSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNl
OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAg
IGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAg
ICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
dm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUo
aXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwK
ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7
CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBp
bnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAg
c2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAg
ICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAg
ICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25t
YXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsK
CiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9f
aTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9
IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8
IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
KytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kz
XV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAg
ICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBi
cmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAg
ICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBz
aXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdo
aWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0g
Kl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xl
biA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkK
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107
CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr
IDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog
ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hh
clQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUg
X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBl
ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4o
X19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vl
a2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z
dAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsK
ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0No
YXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2Mp
OwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2Fi
YnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3Rf
bmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgog
ICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJh
aXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2Rh
eXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19f
dG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAg
ICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19i
ZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19i
ZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChf
X2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50
bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFt
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0
CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwog
ICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hh
clQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRo
c19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0
cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoK
CgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3Mg
PSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9f
dHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1l
ID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9f
YmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9f
dHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8
IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtf
X3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAg
ICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAg
ICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z
dAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBj
dHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7
CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAg
ICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2Vu
ZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAg
ICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAq
KCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIg
fHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2Nv
bnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAg
ICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4
MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDog
X19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50
PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog
ICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9D
aGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5
cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVn
ICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3co
Kl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAg
Y2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAg
ICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19i
ZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAg
IF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAg
KytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19z
LCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1l
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zv
cm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBf
X3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNv
bnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAg
ICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5
cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBf
X2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7
CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFy
X3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsx
XSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10
WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9f
bWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8
Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19p
IDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAg
cmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQK
ICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hh
clQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBj
b25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2Nv
bXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAg
IHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29u
c3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBh
cmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAg
Y29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNv
bnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkg
LSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNp
emVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChf
X3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0
aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVz
ICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFz
aChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAg
ICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytf
X2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAg
ICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdp
dHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihj
b25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAg
ICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAx
MCk7CiMgMjA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihj
aGFyKiBfX291dCwgY29uc3QgaW50LCBjb25zdCBjaGFyKiBfX2ZtdCwgX1R2IF9fdiwKICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSkKICAgIHsK
ICAgICAgaW50IF9fcmV0OwogICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoMCwg
X19udWxsKSk7CiAgICAgIHNldGxvY2FsZSgwLCAiQyIpOwogICAgICBpZiAoX19wcmVjID49IDAp
CiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX19wcmVjLCBfX3YpOwogICAg
ICBlbHNlCiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX192KTsKICAgICAg
c2V0bG9jYWxlKDAsIF9fb2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KIyAyMDk0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
c3RydWN0IF9fcGFkCiAgICB7CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFz
ZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAgICAg
IGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAg
X19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m
aWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBj
b25zdCBfQ2hhclQqIF9fb2xkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAg
ICAgIHNpemVfdCBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRs
ZW4pOwogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWdu
KF9fcGFkcywgX19wbGVuLCBfX2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0No
YXJUKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVu
OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3Nf
YmFzZTo6YWRqdXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQp
CiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMp
OwogICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRz
OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFs
ICYmIF9fbnVtKQogICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0
bG9jKCk7CiAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19taW51cyA9
IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0
eXBlLndpZGVuKCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfVHJhaXRzOjplcShf
X29sZHNbMF0sIF9fbWludXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRz
OjplcShfX29sZHNbMF0sIF9fcGx1cyk7CgogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfVHJh
aXRzOjplcShfX2N0eXBlLndpZGVuKCcwJyksIF9fb2xkc1swXSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRl
bignWCcpLCBfX29sZHNbMV0pKTsKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19u
ZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAg
ICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAg
ICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9D
aGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAo
X190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9UcmFpdHM6OmVxKChfX25l
d3NbMF0gPSBfX29sZHNbMF0pLCBfX3BsdXMpID8gX19wbHVzIDogX19taW51czsKICAgICAgICAg
ICAgICArK19fbW9kOwogICAgICAgICAgICAgICsrX19uZXdzOwogICAgICAgICAgICAgIF9fYmVn
ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAg
IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9f
cGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2Vu
ZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAg
IF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+
KF9fb2xkcyk7CiAgICAgICAgfQogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cywgX19iZWcsIF9f
YmVnbGVuKTsKICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAg
IH0KIyAyMTg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBp
bmcoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAg
ICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAg
IGludCBfX2kgPSAwOwogICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0g
X19ncm91cGluZy5zaXplKCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5z
aXplKCk7CiAgICAgIGJvb2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3Qg
JiYgX19pIDwgX19uIC0gMSkKICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBf
X2xlbiAmJiBfX2kgPCBfX24gLSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBf
X2dyb3VwaW5nW19fal0gPT0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAg
X19qID09IF9fbGVuID8gX19qID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdb
X19qXSA+PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVz
dDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAg
ICBfX2FkZF9ncm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAg
ewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAg
ICAgX19zID0gX19hZGRfZ3JvdXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChfX2diZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAq
X19nYmVnKTsKICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAg
Kl9fcysrID0gX19zZXA7CiAgICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2Zp
cnN0Kys7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7
CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNl
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBt
b25leV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJf
dCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRy
dWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBm
YWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3Qs
IHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5
bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtcHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFt
ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGlt
ZXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBt
ZXNzYWdlczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNo
YXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBjdHlwZV9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBl
X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8
Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9i
eW5hbWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
Y29sbGF0ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGNvbnN0IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxj
b2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1w
dW5jdDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFj
ZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IG51bV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwg
dHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+
JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNlX2Zh
Y2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5j
dDxjaGFyPiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNlX2Zh
Y2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgdGltZV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxjaGFy
PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYK
ICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUg
Y29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+Jgog
ICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1w
dW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv
bnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1
c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAg
dXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2Zh
Y2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8
d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBf
X3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdj
aGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2Vf
ZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3
Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAg
ICBoYXNfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxu
dW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v
bAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v
bmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0
aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVy
biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVj
dnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1
bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v
bAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt
b25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGlt
ZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKfQoj
IDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDIgMwojIDM4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAg
ewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1
c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZiko
X19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigq
dGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYp
KF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhp
cyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3Nf
YmFzZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19j
b3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2Jp
bikKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PDwobG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
IGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAg
ICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVk
KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24p
LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo
aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19i
YXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10
ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAg
ICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQo
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbiku
ZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg
ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls
bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25n
IGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9N
X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkK
ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1
ZigpLT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X3B1dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBz
dHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAg
ICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNo
KCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVi
c3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwog
ICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1
YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICgh
dGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlz
LT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAg
aWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIg
X19kKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAg
IHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEp
KSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0No
YXJUIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg
X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo
KTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAg
ICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAg
ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwo
KSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9f
dzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9f
bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0
LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5
IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
KCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp
bHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4g
X19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9U
cmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNl
KTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQu
d2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBl
OjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
dyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9U
cmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9T
X3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAg
ICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsK
ICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0
LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAg
ICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5h
bWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJi
ICYmIF9fcykKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlw
ZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hh
clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAg
ICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAg
ICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQq
IF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBf
Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+Ojpf
U19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAg
ICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf
X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9f
bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAg
ICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7
CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1f
dHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6
ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVh
bXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19z
KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu
ZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0g
X19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291
dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFt
ZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAg
ICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQq
IF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D
aGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz
dHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFk
KF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAg
X19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAg
ICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xl
bik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xl
bikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfb3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3Ry
ZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVy
biB0ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z
dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxh
dGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0
ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0
ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwg
Y29uc3Qgc2lnbmVkIGNoYXIqKTsKIyA3MTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvb3N0
cmVhbS50Y2MiIDMKfQojIDI3NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCiMg
NDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIg
MwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVm
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsK
ICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0
X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgcHJv
dGVjdGVkOgoKICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGljOgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAg
ICB7CiAgICAgICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1z
aXplKDApOwogICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkKICAg
ICAgeyBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5Owog
ICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko
X19pb3NfdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlv
c19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcj4+KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I+PihzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPj4oaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
Pj4odW5zaWduZWQgaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4obG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KHVuc2lnbmVkIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4obG9uZyBsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGluZSBzdHJlYW1zaXpl
CiAgICAgIGdjb3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0KCiAg
ICAgIGludF90eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBnZXQoY2hhcl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAg
IGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fcywgX19uLCB0aGlzLT53aWRlbign
XG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlw
ZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBl
JgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gdGhpcy0+
Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k
ZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXRsaW5lKF9f
cywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg
ICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5
cGU6OmVvZigpKTsKCiAgICAgIGludF90eXBlCiAgICAgIHBlZWsodm9pZCk7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoK
ICAgICAgc3RyZWFtc2l6ZQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2soY2hhcl90eXBlIF9f
Yyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgdW5nZXQodm9pZCk7CgogICAgICBpbnQK
ICAgICAgc3luYyh2b2lkKTsKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxnKHZvaWQpOwoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKHBvc190eXBlKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9faW50X3R5cGU7CgogICAg
ICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CgogICAgICBvcGVyYXRvciBib29sKCkgeyBy
ZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAgICBib29sIF9NX29rOwogICAgfTsKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp
Y19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7
IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNo
YXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9f
YykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPGNs
YXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciogX19z
KQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0K
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCBzaWdu
ZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4KICAgIHsKICAgIHB1YmxpYzoKCgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CgoKCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lv
c3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgICA6IF9f
aXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1fdHlwZShfX3NiKQogICAgICB7IH0KCiAgICAg
IHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFtKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lz
KTsKfQoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pc3RyZWFtLnRjYyIgMSAz
CiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDMKCgoKCm5hbWVz
cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAg
IHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRp
ZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25v
c2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsK
ICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAg
ICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICAgICAgICAgICAg
ICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAg
ICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6
dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMo
KTsKCgoKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l
b2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAg
ICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgX01f
b2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBmYWxzZTsK
ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFt
X3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp
CiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAg
IF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp
b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg
X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg
X19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls
Yml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8
PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxzaG9y
dD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp
b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0
KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRz
PGludD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0
ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp
cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f
ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZsb2F0JiBf
X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdv
b2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAg
ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
OwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0
YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewogICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2VyYikKICAgICAgICAg
ewogICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBzdHJlYW1zaXpl
IF9feHRyY3QgPSAwOwogICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5y
ZGJ1ZigpOwogICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0
aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
aWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9IF9fZW9m
OwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAg
ICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg
ICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewogICAgICBf
TV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAg
ICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAg
ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYnVmdmFsLCBfX2VvZikpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAg
ICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwg
Y2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVs
aW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29u
c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5
cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCAr
IDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg
ICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUg
X19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9f
YyA9IF9fdGhpc19zYi0+c2dldGMoKTsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jMiA9IHRy
YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAgICAgICAgICAgd2hpbGUgKCF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYg
IXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAgICAgICAgICAgICAg
ICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMoX19jMiksIF9fZW9m
KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAg
ICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAg
IF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICgh
X01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0
IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg
ICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdo
aWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIXRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2Mp
OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAg
ICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0
c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2Ms
IF9faWRlbGltKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBf
X3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAq
X19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg
ICAgIGludF90eXBlIF9fYzsKCiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19s
aW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50
IDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19jID0gX19zYi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
cGVlayh2b2lkKQogICAgewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9f
YyA9IHRoaXMtPnJkYnVmKCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2djb3VudCA9IHRo
aXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAgICAgICAgICAgICBpZiAoX01fZ2NvdW50
ICE9IF9fbikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg
fCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0aGlzLT5y
ZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA+IDApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAg
ICAgICAgICAgICAgICBpZiAoX19udW0pCiAgICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0g
dGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv
ZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2soY2hhcl90eXBl
IF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp
ZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
c2ItPnNwdXRiYWNrYyhfX2MpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2
b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1
ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3VuZ2V0YygpLCBfX2VvZikpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAg
ICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo
aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKF9fc2IpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIGlmIChfX3NiLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBv
c190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9p
ZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2dj
b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICBf
X3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh
c2U6OmluKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUg
X19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCkt
PnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19l
cnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
c2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2Zm
LCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3Nf
dHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
biwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6
c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5nZXQoX19jKTsgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUo
aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5
cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID09
IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+Ojpt
YXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2Zh
Y2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgICAgICAgICAgY29uc3QgaW50
X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9f
c2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbnVtIC0g
MQogICAgICAgICAgICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5
cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9z
X2Jhc2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwoKICAg
ICAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0
cz4mIF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CgogICAgICBj
b25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2lu
LmdldGxvYygpKTsKICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp
OwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICBfX2lu
dF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICB3aGlsZSAoX19jICE9IF9fZW9mICYm
IF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgX19jID0gX19zYi0+
c25leHRjKCk7CiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBf
X2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5
cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQg
PSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwg
ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNl
KCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgIF9f
c2l6ZV90eXBlIF9fbjsKICAgICAgICAgIF9fbiA9IF9fdyA+IDAgPyBzdGF0aWNfY2FzdDxfX3Np
emVfdHlwZT4oX193KSA6IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgY29uc3QgX19jdHlw
ZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7
CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19p
bnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3Rl
ZCA8IF9fbgogICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAhX19jdHlwZS5pcyhj
dHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3Ry
ICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0
ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgIH0KCgogICAgICBp
ZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWlsYml0
KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBl
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNp
emVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsK
ICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uID0g
X19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0
czo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMo
KTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAg
ICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSk7
CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9IF9fbgogICAgICAgICAgICAgICAgICYm
ICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICYmICFf
X3Rlc3RkZWxpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6
OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAg
ICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBf
VHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJh
Y3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9D
aGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYg
X19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicp
KTsgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBp
c3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlz
dHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0
cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1w
bGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOwogIGV4dGVy
biB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7
CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBj
aGFyKik7CgoKCgoKCgp9CiMgMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAyIDMK
IyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiAgZXh0ZXJuIGlzdHJlYW0gY2luOwogIGV4dGVybiBvc3RyZWFtIGNvdXQ7CiAgZXh0ZXJuIG9z
dHJlYW0gY2VycjsKICBleHRlcm4gb3N0cmVhbSBjbG9nOwojIDYyICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pb3N0cmVhbSIgMwogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKfQojIDIg
ImEuY2MiIDIKCiMgMSAidHlwZS5oaCIgMQoKCgp0eXBlZGVmIGVudW0KewogIEhjMTJNc2dPYmpO
dWxsID0gMHgwMCwKICBIYzEyTXNnT2JqQ2xlYXJTdGF0c0JpbiA9IDB4MWUsCiAgSGMxMk1zZ09i
alJvbGxTdGF0c0JpbiA9IDB4MWYsCiAgSGMxMk1zZ09ialN0YXRpc3RpY3MgPSAweDIwLAogIEhj
MTJNc2dPYmpDcGxkQWxhcm1zID0gMHgyMSwKICBIYzEyTXNnT2JqUHJvZ3JhbUNwbGQgPSAweDIy
LAogIEhjMTJNc2dPYmpPYzQ4VHVuYWJsZUxhc2VyID0gMHgyMywKICBIYzEyTXNnT2JqT2M0OFJl
ZmVyZW5jZUNsb2NrID0gMHgyNCwKICBIYzEyTXNnT2JqV3REZWNvZGVUYXAgPSAweDI1LAogIEhj
MTJNc2dPYmpXdERlY29kZURjUG93ZXIgPSAweDI2LAogIEhjMTJNc2dPYmpQcHNBdXRvU2V0U3dp
dGNoID0gMHgyNywKICBIYzEyTXNnT2JqVGFwQWxhcm1zID0gMHgyOCwKICBIYzEyTXNnT2JqUHBz
U3dpdGNoUG9zaXRpb24gPSAweDI5LAogIEhjMTJNc2dPYmpQcHNTb2Z0d2FyZU92ZXJyaWRlID0g
MHgyYSwKICBIYzEyTXNnT2JqUHBzUG93ZXJJbiA9IDB4MmIsCiAgSGMxMk1zZ09ialBwc1Bvd2Vy
VGhyZXNob2xkcyA9IDB4MmMsCiAgSGMxMk1zZ09ialBwc0FsYXJtcyA9IDB4MmQsCiAgSGMxMk1z
Z09ialBwc1N0YXR1cyA9IDB4MmUsCiAgSGMxMk1zZ09ialNlZXBUYWcgPSAweDJmLAogIEhjMTJN
c2dPYmpSdHQgPSAweDMwLAogIEhjMTJNc2dPYmpEaXNjb25uZWN0ZWQgPSAweDMxLAogIEhjMTJN
c2dPYmpRdWVyeSA9IDB4MzIsCiAgSGMxMk1zZ09iakNhcmRJbmZvID0gMHgzMywKICBIYzEyTXNn
T2JqQ2FyZFR5cGUgPSAweDM0LAogIEhjMTJNc2dPYmpCYW5kVG9uZXMgPSAweDM1LAogIEhjMTJN
c2dPYmpXYXZla2V5VGhyZXNob2xkID0gMHgzNiwKICBIYzEyTXNnT2JqVGFwTG9sQ2xlYXJEZWxh
eSA9IDB4MzcsCiAgSGMxMk1zZ09ialdhbGxDbG9ja1RpbWUgPSAweDM4LAogIEhjMTJNc2dPYmpM
ZWRTdGF0ZSA9IDB4MzksCiAgSGMxMk1zZ09iakJhbmROdW1iZXIgPSAweDNhLAogIEhjMTJNc2dP
YmpBbXBBdXRvRW5hYmxlID0gMHgzYiwKICBIYzEyTXNnT2JqRmxhc2ggPSAweDNjLAogIEhjMTJN
c2dPYmpTZWVwID0gMHgzZCwKICBIYzEyTXNnT2JqRmFuU3BlZWQgPSAweDNlLAogIEhjMTJNc2dP
YmpSZXNldCA9IDB4M2YsCiAgSGMxMk1zZ09iak1lc3NhZ2UgPSAweDQwLAogIEhjMTJNc2dPYmpE
c3BWZXJzaW9uID0gMHg0MSwKICBIYzEyTXNnT2JqT2M0OFBvcnRSeFBvd2VyID0gMHg0MiwKICBI
YzEyTXNnT2JqRmFuUG93ZXJMZXZlbCA9IDB4NDMsCiAgSGMxMk1zZ09iakNvbmZpZ1N0YXRlID0g
MHg0NCwKICBIYzEyTXNnT2JqRmFuSW5mbyA9IDB4NDUsCiAgSGMxMk1zZ09ialRhcFBvd2VyVGhy
ZXNob2xkcyA9IDB4NDYsCiAgSGMxMk1zZ09iakFtcE1vZGUgPSAweDQ3LAogIEhjMTJNc2dPYmpU
YXBQb3dlciA9IDB4NDgsCiAgSGMxMk1zZ09ialB1bXBUZW1wZXJhdHVyZSA9IDB4NDksCiAgSGMx
Mk1zZ09iakZvcmNlUXVlcnkgPSAweDRhLAogIEhjMTJNc2dPYmpDaGFuRmlsdGVyUG93ZXJUb25l
cyA9IDB4NGIsCiAgSGMxMk1zZ09ialVwVGltZSA9IDB4NGMsCiAgSGMxMk1zZ09iakNoYW5GaWx0
ZXJQb3dlciA9IDB4NGQsCiAgSGMxMk1zZ09iakZhblRyYXlBbGFybXMgPSAweDRlLAogIEhjMTJN
c2dPYmpPYzQ4TGFzZXIgPSAweDRmLAogIEhjMTJNc2dPYmpPYzQ4VGltaW5nID0gMHg1MCwKICBI
YzEyTXNnT2JqT2M0OFdhdmVsZW5ndGggPSAweDUxLAogIEhjMTJNc2dPYmpPYzQ4RGVidWcgPSAw
eDUyLAogIEhjMTJNc2dPYmpDaGFuRmlsdGVyQ2FsaWJyYXRpb24gPSAweDUzLAogIEhjMTJNc2dP
YmpBbXBQdW1wQ3VycmVudCA9IDB4NTQsCiAgSGMxMk1zZ09iakJhbmRFeHBlY3RlZFRvbmVzID0g
MHg1NSwKICBIYzEyTXNnT2JqQmFuZFVuZXhwZWN0ZWRUb25lVGhyZXNob2xkcz0gMHg1NiwKICBI
YzEyTXNnT2JqRXRhID0gMHg1NywKICBIYzEyTXNnT2JqSW5pdFN0YXR1cyA9IDB4NTgsCiAgSGMx
Mk1zZ09iak1lbW9yeSA9IDB4NTksCiAgSGMxMk1zZ09iakNwdVVzYWdlID0gMHg1YSwKICBIYzEy
TXNnT2JqRHNwQWxhcm1zID0gMHg1YiwKICBIYzEyTXNnT2JqQW1wQWxhcm1zID0gMHg1YywKICBI
YzEyTXNnT2JqQmFuZERjUG93ZXJBbGFybSA9IDB4NWQsCiAgSGMxMk1zZ09iakJhbmREY1Bvd2Vy
VGhyZXNoID0gMHg1ZSwKICBIYzEyTXNnT2JqQ2lkRW5jb2RlRXZvYVJhbmdlID0gMHg1ZiwKICBI
YzEyTXNnT2JqV3RFbmNvZGVWZXJzaW9uID0gMHg2MCwKICBIYzEyTXNnT2JqV3RFbmNvZGVUYXBB
bGFybXMgPSAweDYxLAogIEhjMTJNc2dPYmpDaGFuRmlsdGVyTW9kZSA9IDB4NjIsCiAgSGMxMk1z
Z09iakNoYW5GaWx0ZXJEQUMgPSAweDYzLAogIEhjMTJNc2dPYmpDaGFuRmlsdGVyQTJEID0gMHg2
NCwKICBIYzEyTXNnT2JqVGVtcE91dE9mUmFuZ2UgPSAweDY1LAogIEhjMTJNc2dPYmpDYXJkVGVt
cGVyYXR1cmUgPSAweDY2LAogIEhjMTJNc2dPYmpDYXJkVGVtcGVyYXR1cmVUaHJlc2hvbGRzID0g
MHg2NywKICBIYzEyTXNnT2JqUG9ydFN0YXRlID0gMHg2OCwKICBIYzEyTXNnT2JqU3RhY2tVc2Fn
ZSA9IDB4NjksCiAgSGMxMk1zZ09iakZsYXNoQmFua1NlbGVjdCA9IDB4NmEsCiAgSGMxMk1zZ09i
akZsYXNoRXJhc2UgPSAweDZiLAogIEhjMTJNc2dPYmpPYzQ4TWFudWZhY3R1cmVyID0gMHg2YywK
ICBIYzEyTXNnT2JqT2M0OE1vZHVsZVZhcmlhbnQgPSAweDZkLAogIEhjMTJNc2dPYmpPYzQ4RGlh
Z0xvb3BiYWNrID0gMHg2ZSwKICBIYzEyTXNnT2JqT2M0OExpbmVMb29wYmFjayA9IDB4NmYsCiAg
SGMxMk1zZ09iak9jNDhMaW5lUmF0ZSA9IDB4NzAsCiAgSGMxMk1zZ09iak9jNDhBbGFybXMgPSAw
eDcxLAogIEhjMTJNc2dPYmpPYzQ4T3B0aWNhbFBvd2VyID0gMHg3MiwKICBIYzEyTXNnT2JqT2M0
OENoYW5uZWwgPSAweDczLAogIEhjMTJNc2dPYmpGbGFzaEdlbmVyaWNzID0gMHg3NCwKICBIYzEy
TXNnT2JqUHVtcFRlbXBlcmF0dXJlVGhyZXNob2xkcyA9IDB4NzUsCiAgSGMxMk1zZ09iakFtcFB1
bXBFbmFibGUgPSAweDc2LAogIEhjMTJNc2dPYmpQdW1wVGVtcE91dE9mUmFuZ2UgPSAweDc3LAog
IEhjMTJNc2dPYmpDaGFuVG9uZU9uT2ZmID0gMHg3OCwKICBIYzEyTXNnT2JqRHNwTG9zdENvbW1z
ID0gMHg3OSwKICBIYzEyTXNnT2JqTWVtb3J5UmVhZHkgPSAweDdhLAogIEhjMTJNc2dPYmpDTUxl
bmd0aCA9IDB4N2IsCiAgSGMxMk1zZ09iakJhY2twbGFuZVRlbGVtZXRyeSA9IDB4N2MsCiAgSGMx
Mk1zZ09iakN0cmxDYXJkQWN0aXZpdHkgPSAweDdkLAogIEhjMTJNc2dPYmo0UG9ydE9wdGljYWxM
b3NzID0gMHg3ZSwKICBIYzEyTXNnT2JqV3RFbmNvZGVUYXAgPSAweDdmLAogIEhjMTJNc2dPYmpQ
bGRWZXJzaW9uID0gMHg4MCwKCiAgSGMxMk1zZ09iak9jMTkyTGFzZXIgPSAweDgxLAogIEhjMTJN
c2dPYmpPYzE5MkRlYnVnID0gMHg4MiwKICBIYzEyTXNnT2JqT2MxOTJEaWFnTG9vcGJhY2sgPSAw
eDgzLAogIEhjMTJNc2dPYmpPYzE5MkxpbmVMb29wYmFjayA9IDB4ODQsCiAgSGMxMk1zZ09iak9j
MTkyTGluZVJhdGUgPSAweDg1LAogIEhjMTJNc2dPYmpPYzE5MlRpbWluZyA9IDB4ODYsCiAgSGMx
Mk1zZ09iak9jMTkyV2F2ZWxlbmd0aCA9IDB4ODcsCiAgSGMxMk1zZ09iak9jMTkyQWxhcm1zID0g
MHg4OCwKICBIYzEyTXNnT2JqT2M0OEtpbGxDbGtPbkxPUCA9IDB4ODksCiAgSGMxMk1zZ09ialN3
ZXJyID0gMHg4QSwKICBIYzEyTXNnT2JqT2MxOTJDaGFubmVsID0gMHg4QiwKICBIYzEyTXNnT2Jq
T2MxOTJMYXRjaCA9IDB4OEMsCiAgSGMxMk1zZ09iakZsYXNoQXN5bmNFcmFzZSA9IDB4OEQsCgoK
ICBIYzEyTXNnT2JqTGFzdAp9IGVIYzEyTXNnT2JqZWN0OwojIDQgImEuY2MiIDIKCnVzaW5nIG5h
bWVzcGFjZSBzdGQ7Cgp2b2lkIFNXRVJSKGNvbnN0IGNoYXIqIHN0dWZmLCBpbnQgYSwgaW50IGIp
CnsKICBwcmludGYoIlNXRVJSOiAlcyAoJWksICVpKVxuIiwgc3R1ZmYsIGEsIGIpOwp9CgojIDEg
IkRpc3BhdGNoLmNjIiAxCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAxIDMKIyA2NSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX3RyZWUuaCIgMSAzCiMgOTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Ry
ZWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIF9SYl90cmVlX2NvbG9yIHsgX01fcmVkID0g
ZmFsc2UsIF9NX2JsYWNrID0gdHJ1ZSB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCiAg
ewogICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgICBfUmJfdHJl
ZV9jb2xvciBfTV9jb2xvcjsKICAgIF9CYXNlX3B0ciBfTV9wYXJlbnQ7CiAgICBfQmFzZV9wdHIg
X01fbGVmdDsKICAgIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAg
ICBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX2xl
ZnQgIT0gMCkgX194ID0gX194LT5fTV9sZWZ0OwogICAgICByZXR1cm4gX194OwogICAgfQoKICAg
IHN0YXRpYyBfQmFzZV9wdHIKICAgIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAg
ICAgd2hpbGUgKF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgICAg
cmV0dXJuIF9feDsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgc3Ry
dWN0IF9SYl90cmVlX25vZGUgOiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCiAgICB7CiAgICAg
IHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKICAgICAgX1ZhbCBfTV92
YWx1ZV9maWVsZDsKICAgIH07CgogIHN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgewog
ICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgICB0
eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgIF9CYXNlX3B0ciBfTV9ub2Rl
OwoKICAgIHZvaWQKICAgIF9NX2luY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5f
TV9yaWdodCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9y
aWdodDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAg
IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgICAg
ICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsK
ICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAg
ICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZAogICAgX01f
ZGVjcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9NX3JlZAog
ICAgICAgICAgJiYgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAg
ICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgIGVsc2UgaWYgKF9NX25vZGUt
Pl9NX2xlZnQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9k
ZS0+X01fbGVmdDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgICAg
ICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl
LT5fTV9wYXJlbnQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX2xlZnQpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9f
eSA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9ub2RlID0gX195
OwogICAgICAgIH0KICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVi
bGljIF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKICAgIHsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVl
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1B0ciBw
b2ludGVyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFs
Kj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3Qg
X1ZhbCYsIGNvbnN0IF9WYWwqPgogICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBf
UmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiBfU2VsZjsKICAgICAgdHlwZWRlZiBf
UmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwoKICAgICAgX1JiX3RyZWVfaXRlcmF0b3Io
KSB7fQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0g
X194OyB9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9N
X25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiBfTGlua190eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoK
ICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRv
ciooKSk7IH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAg
IF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgX1Nl
bGYKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAg
fQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyByZXR1
cm4gKnRoaXM7IH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAg
ICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9kZWNyZW1lbnQoKTsKICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAg
ICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJl
ZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAg
ICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJl
ZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRy
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVm
LCBfUHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9
KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4m
IF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYs
IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9
KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAg
ICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0
IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0K
CiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9ub2RlX2Jhc2Uq
IF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25vZGVf
YmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICAgIF9feC0+X01fcmlnaHQgPSBfX3ktPl9NX2xl
ZnQ7CiAgICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgICAgX195LT5fTV9sZWZ0LT5fTV9wYXJl
bnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChf
X3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194
LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195
OwogICAgZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3kt
Pl9NX2xlZnQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGluZSB2
b2lkCiAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJf
dHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kg
PSBfX3gtPl9NX2xlZnQ7CiAgICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogICAgaWYg
KF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194
OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBpZiAoX194ID09IF9f
cm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFy
ZW50LT5fTV9yaWdodCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAg
ZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIF9feS0+X01fcmln
aHQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGluZSB2b2lkCiAg
X1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2Rl
X2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX194LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgIHdoaWxl
IChfX3ggIT0gX19yb290CiAgICAgICAgICAgJiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID09
IF9NX3JlZCkKICAgICAgewogICAgICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJl
ZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0Owog
ICAgICAgICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNr
OwogICAgICAgICAgICAgICAgX195LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAg
ICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAg
ICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChfX3gg
PT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAg
ICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAg
ICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgIHsKICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICBpZiAoX195ICYmIF9feS0+X01f
Y29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9feC0+X01f
cGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195LT5fTV9jb2xv
ciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+
X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVu
dDsKICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3Qp
OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01f
Y29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xl
ZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAg
ICAgICAgICB9CiAgICAgIH0KICAgIF9fcm9vdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICB9Cgog
IGlubGluZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCiAgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFz
ZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKICB7CiAgICBfUmJf
dHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0g
MDsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgICBpZiAoX195LT5f
TV9sZWZ0ID09IDApCiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICBlbHNlCiAgICAgIGlm
IChfX3ktPl9NX3JpZ2h0ID09IDApCiAgICAgICAgX194ID0gX195LT5fTV9sZWZ0OwogICAgICBl
bHNlCiAgICAgICAgewoKICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICB3
aGlsZSAoX195LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsK
ICAgICAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgaWYgKF9feSAhPSBf
X3opCiAgICAgIHsKCiAgICAgICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAg
ICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0OwogICAgICAgIGlmIChfX3kgIT0gX196LT5f
TV9yaWdodCkKICAgICAgICAgIHsKICAgICAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFy
ZW50OwogICAgICAgICAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50
OwogICAgICAgICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgICAg
X195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgICAgICAgIF9fei0+X01fcmlnaHQt
Pl9NX3BhcmVudCA9IF9feTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3hf
cGFyZW50ID0gX195OwogICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290
ID0gX195OwogICAgICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikK
ICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgICAgIGVsc2UKICAg
ICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgICAgICBfX3ktPl9NX3Bh
cmVudCA9IF9fei0+X01fcGFyZW50OwogICAgICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9yLCBf
X3otPl9NX2NvbG9yKTsKICAgICAgICBfX3kgPSBfX3o7CgogICAgICB9CiAgICBlbHNlCiAgICAg
IHsKICAgICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgaWYgKF9feCkK
ICAgICAgICAgIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgaWYgKF9f
cm9vdCA9PSBfX3opCiAgICAgICAgICBfX3Jvb3QgPSBfX3g7CiAgICAgICAgZWxzZQogICAgICAg
ICAgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICAgICAgX196LT5f
TV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fei0+
X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAgICAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3op
CiAgICAgICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAwKQogICAgICAgICAgICBfX2xlZnRtb3N0
ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2xlZnRtb3N0
ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7CiAgICAgICAgaWYgKF9fcmln
aHRtb3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAgICAg
ICAgX19yaWdodG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAg
ICAgIH0KICAgIGlmIChfX3ktPl9NX2NvbG9yICE9IF9NX3JlZCkKICAgICAgewogICAgICAgIHdo
aWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9NX2Js
YWNrKSkKICAgICAgICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+
X01fcmlnaHQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7
CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAg
ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAg
ICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAg
ICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAg
ICAgICAoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3Jp
Z2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9f
eF9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9w
YXJlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAwCiAgICAgICAgICAg
ICAgICAgICAgICB8fCBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBf
X3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgICAgICBf
X3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90
YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9w
YXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
X193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgICAgICAgICBf
X3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBpZiAoX193
LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9
IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFy
ZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAg
IF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAg
ICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAg
X194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBfX3cg
PSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlm
ICgoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0
LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAgICAgKF9fdy0+X01fbGVm
dCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9N
X2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xv
ciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAg
ICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fCBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9N
X2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChf
X3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAg
ICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAg
ICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAg
ICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAg
ICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAg
ICAgICAgIGlmIChfX3ctPl9NX2xlZnQpCiAgICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0
LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVf
cmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICBpZiAoX194KSBfX3gtPl9NX2NvbG9y
ID0gX01fYmxhY2s7CiAgICAgIH0KICAgIHJldHVybiBfX3k7CiAgfQoKCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgYm9vbCBfU19pbnN0YW5jZWxlc3M+CiAg
ICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2Nf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9NX25vZGVfYWxsb2NhdG9y
KF9fYSksIF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAg
ICAgIF9NX25vZGVfYWxsb2NhdG9yOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFk
ZXI7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2RlKCkgeyByZXR1
cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01f
cHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX01fbm9kZV9hbGxvY2F0
b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0Fs
bG9jLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICAg
IGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3Jf
dHlwZSgpOyB9CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JikgOiBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9SYl90cmVlX25vZGU8
X1RwPiogX01faGVhZGVyOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9S
Yl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgX0FsbG9jX3R5cGU7
CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2RlKCkgeyByZXR1cm4g
X0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dF9ub2Rl
KF9SYl90cmVlX25vZGU8X1RwPiogX19wKSB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwg
MSk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgc3RydWN0IF9SYl90cmVlX2Jhc2UgOiBwdWJsaWMgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAs
IF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICB7CiAgICAgIHR5cGVkZWYgX1JiX3Ry
ZWVfYWxsb2NfYmFzZTxfVHAsCiAgICAgICAgX0FsbG9jLCBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs
bG9jPjo6X1NfaW5zdGFuY2VsZXNzPiBfQmFzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz
ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBfUmJfdHJlZV9iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9
IF9NX2dldF9ub2RlKCk7IH0KICAgICAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1dF9ub2RlKF9N
X2hlYWRlcik7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBf
VmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwg
dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWw+ID4KICAgIGNsYXNzIF9SYl90cmVlIDog
cHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVm
IF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPiBfQmFzZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CiAgICAgIHR5cGVkZWYgX1Ji
X3RyZWVfbm9kZTxfVmFsPiBfUmJfdHJlZV9ub2RlOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfS2V5IGtleV90eXBlOwogICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKICAgICAgdHlw
ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq
IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAg
ICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRl
ZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9h
bGxvY2F0b3IoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9u
b2RlOwogICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpf
TV9oZWFkZXI7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZh
bHVlX3R5cGUmIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRf
bm9kZSgpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfQ29uc3RydWN0KCZfX3RtcC0+X01fdmFs
dWVfZmllbGQsIF9feCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAg
ICBfTV9wdXRfbm9kZShfX3RtcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY2xvbmVf
bm9kZShfTGlua190eXBlIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX190bXAgPSBf
TV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfX3RtcC0+X01fY29s
b3IgPSBfX3gtPl9NX2NvbG9yOwogICAgICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgICAgICBf
X3RtcC0+X01fcmlnaHQgPSAwOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAg
dm9pZAogICAgICBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgICAgIHsKICAgICAgICBf
RGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX01fcHV0X25vZGUoX19wKTsK
ICAgICAgfQoKICAgICAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7CiAgICAgIF9Db21wYXJlIF9N
X2tleV9jb21wYXJlOwoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcm9vdCgpIGNvbnN0IHsg
cmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KCiAgICAgIF9MaW5r
X3R5cGUmCiAgICAgIF9NX2xlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBf
TV9oZWFkZXItPl9NX2xlZnQ7IH0KCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX3JpZ2h0bW9z
dCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9yaWdodDsgfQoK
ICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpIHsg
cmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGljIF9MaW5r
X3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlw
ZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1Nf
cGFyZW50KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFy
ZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfTGlua190eXBl
IF9feCkgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3RhdGljIGNvbnN0
IF9LZXkmCiAgICAgIF9TX2tleShfTGlua190eXBlIF9feCkgeyByZXR1cm4gX0tleU9mVmFsdWUo
KShfU192YWx1ZShfX3gpKTsgfQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9yJgogICAgICBf
U19jb2xvcihfTGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV9jb2xvcjsgfQoKICAgICAg
c3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4g
KF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYK
ICAgICAgX1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gt
Pl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3BhcmVudChf
QmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQoK
ICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfQmFzZV9wdHIgX194KSB7IHJl
dHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBfS2V5JgogICAgICBfU19rZXkoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gX0tleU9mVmFs
dWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CgogICAgICBzdGF0aWMgX1JiX3RyZWVf
Y29sb3ImCiAgICAgIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBl
KF9feCktPl9NX2NvbG9yKTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAgICAgX1NfbWlu
aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVl
X25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZQog
ICAgICBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJlbmNlLCBwb2lu
dGVyPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBl
LCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwoK
ICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJl
dmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKICAgICAgaXRlcmF0b3IKICAgICAgX01faW5z
ZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7
CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5
cGUgX19wKTsKCiAgICAgIHZvaWQKICAgICAgX01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpOwoKICAg
IHB1YmxpYzoKCiAgICAgIF9SYl90cmVlKCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBl
KCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICAgIHsgX01fZW1wdHlf
aW5pdGlhbGl6ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQog
ICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tl
eV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAg
IF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EpCiAgICAgICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFy
ZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAgICBfUmJfdHJl
ZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194KQogICAgICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksIF9NX25vZGVfY291bnQo
MCksCiAgICAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9jb21wYXJlKQog
ICAgICB7CiAgICAgICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgICAgIF9NX2VtcHR5
X2luaXRpYWxpemUoKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9TX2Nv
bG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7CiAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHko
X194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9T
X21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhp
bXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICB9CiAgICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5f
TV9ub2RlX2NvdW50OwogICAgICB9CgogICAgICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7IH0KCiAg
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogICAg
ICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIF9feCk7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBfTV9lbXB0eV9pbml0aWFs
aXplKCkKICAgICAgewogICAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7CgogICAg
ICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAg
ICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgfQoKICAgIHB1YmxpYzoKCiAg
ICAgIF9Db21wYXJlCiAgICAgIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5X2NvbXBh
cmU7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkgeyByZXR1cm4gX01fbGVmdG1vc3Qo
KTsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBf
TV9sZWZ0bW9zdCgpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKSB7IHJldHVybiBfTV9o
ZWFkZXI7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IF9NX2hlYWRlcjsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcgogICAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgeyByZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdp
bigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVf
Y291bnQgPT0gMDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVy
biBfTV9ub2RlX2NvdW50OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25z
dCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICB2b2lkCiAgICAgIHN3YXAoX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkKICAgICAgewog
ICAgICAgIHN0ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgICAgIHN0ZDo6
c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICAgICAgc3RkOjpzd2Fw
KF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogICAgICB9CgoKICAgICAgcGFp
cjxpdGVyYXRvcixib29sPgogICAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYg
X194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3Np
dGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2Vy
dF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZvaWQKICAgICAgaW5z
ZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp
OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZvaWQKICAg
ICAgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgdm9p
ZAogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoKICAgICAg
dm9pZAogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSogX19maXJzdCwgY29uc3Qga2V5X3R5cGUq
IF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkKICAgICAgewogICAgICAgIGlmIChf
TV9ub2RlX2NvdW50ICE9IDApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2VyYXNlKF9NX3Jv
b3QoKSk7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAg
IF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwog
ICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIH0KICAgICAgfQoKCiAgICAg
IGl0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBjb25zdF9p
dGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgaXRl
cmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBjb25z
dF9pdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsK
CiAgICAgIGl0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoK
ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3Q7CgogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgogICAgICBlcXVhbF9yYW5n
ZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0
X2l0ZXJhdG9yPgogICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsK
CgogICAgICBib29sCiAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJu
IF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBf
X3guZW5kKCksIF9feS5iZWdpbigpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg
dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwo
Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX194ID09IF9f
eSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg
X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAg
eyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feCA8IF9feSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9feSk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogICAgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgb3BlcmF0b3I9KGNv
bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gp
CiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZfX3gpCiAgICAgICAgewoKICAgICAgICAgIGNsZWFy
KCk7CiAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIF9NX2tleV9jb21wYXJl
ID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgICAgICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgICAgICAg
X01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9
IF9NX2hlYWRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIp
OwogICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAg
ICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAg
ICAgICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9NX2luc2Vy
dChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsK
ICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsKICAgICAgX0xpbmtfdHlw
ZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195XzsKICAgICAgX0xpbmtfdHlwZSBfX3o7CgogICAgICBp
ZiAoX195ID09IF9NX2hlYWRlciB8fCBfX3ggIT0gMCB8fAogICAgICAgICAgX01fa2V5X2NvbXBh
cmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpCiAgICAgICAgewogICAgICAgICAg
X196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAgIF9TX2xlZnQoX195KSA9IF9fejsK
CiAgICAgICAgICBpZiAoX195ID09IF9NX2hlYWRlcikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsK
ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX195ID09IF9NX2xlZnRtb3N0KCkpCiAg
ICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAgIF9TX3Jp
Z2h0KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAg
ICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBfU19wYXJlbnQo
X196KSA9IF9feTsKICAgICAgX1NfbGVmdChfX3opID0gMDsKICAgICAgX1NfcmlnaHQoX196KSA9
IDA7CiAgICAgIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFyZW50KTsK
ICAgICAgKytfTV9ub2RlX2NvdW50OwogICAgICByZXR1cm4gaXRlcmF0b3IoX196KTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m
VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OgogICAgaW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAgX0xp
bmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp
OwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0gX194Owog
ICAgICAgICAgX194ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXko
X194KSkgPwogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAg
IH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHBhaXI8dHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0
ZXJhdG9yLAogICAgYm9vbD4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoY29uc3QgX1ZhbCYgX192KQogICAgewog
ICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBf
TV9yb290KCk7CiAgICAgIGJvb2wgX19jb21wID0gdHJ1ZTsKICAgICAgd2hpbGUgKF9feCAhPSAw
KQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9feDsKICAgICAgICAgIF9fY29tcCA9IF9NX2tl
eV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgICAgICAgX194
ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAgICAgICB9CiAgICAg
IGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIGlmIChfX2NvbXApCiAgICAgICAg
aWYgKF9faiA9PSBiZWdpbigpKQogICAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4o
X01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgICBlbHNlCiAgICAgICAgICAt
LV9fajsKICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2ouX01fbm9kZSksIF9LZXlP
ZlZhbHVlKCkoX192KSkpCiAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5z
ZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9v
bD4oX19qLCBmYWxzZSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tl
eU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSwg
X1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUo
aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBpZiAoX19w
b3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7CgogICAgICAg
ICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZW
YWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgICAgICAgcmV0
dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192
KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdiku
Zmlyc3Q7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01f
aGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9N
X3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgcmV0dXJuIF9N
X2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAg
ICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2Jl
Zm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAgICAgICAgICYmIF9NX2tl
eV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSxfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9k
ZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01f
bm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gX01f
aW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1
ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg
dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X2VxdWFsKGl0
ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAgaWYgKF9fcG9z
aXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoKICAgICAgICAg
IGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgIV9NX2tleV9jb21wYXJlKF9TX2tleShf
X3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICByZXR1
cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Yp
OwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwog
ICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikK
ICAgICAgICB7CgogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f
diksIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0
KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1
cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgICAgICAgLS1fX2JlZm9y
ZTsKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19r
ZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgICAgICAgJiYgIV9NX2tleV9jb21wYXJlKF9T
X2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9T
X3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX01f
aW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRp
b24uX01fbm9kZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0
eXBlbmFtZSBfQ21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CiAg
ICAgIHZvaWQKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAg
ICAgaW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgICB7CiAgICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAgaW5zZXJ0X2Vx
dWFsKCpfX2ZpcnN0KTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKF9JSSBfX2ZpcnN0
LCBfSUkgX19sYXN0KQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9p
ZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmVy
YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0KICAg
ICAgICAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfX3Bvc2l0aW9u
Ll9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcmlnaHQpOwogICAg
ICBkZXN0cm95X25vZGUoX195KTsKICAgICAgLS1fTV9ub2RlX2NvdW50OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVf
dHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKICAgIHsKICAgICAgcGFpcjxpdGVyYXRvcixpdGVyYXRv
cj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNl
KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29u
ZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1Ys
IF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tv
VixfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5
cGUgX19wKQogICAgewoKICAgICAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25lX25vZGUoX194
KTsKICAgICAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgIHRyeQogICAgICAgIHsKICAg
ICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICBfX3RvcC0+X01fcmlnaHQgPSBf
TV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgICAgICAgIF9fcCA9IF9fdG9wOwogICAg
ICAgICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgICAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fY2xvbmVfbm9kZShf
X3gpOwogICAgICAgICAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAgICAgICAgICAgICBfX3kt
Pl9NX3BhcmVudCA9IF9fcDsKICAgICAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAg
ICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9feSk7CiAg
ICAgICAgICAgICAgX19wID0gX195OwogICAgICAgICAgICAgIF9feCA9IF9TX2xlZnQoX194KTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAg
ICAgIF9NX2VyYXNlKF9fdG9wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fdG9wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQogICAgewoKICAgICAg
d2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9f
eCkpOwogICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAgICAgICAgICBk
ZXN0cm95X25vZGUoX194KTsKICAgICAgICAgIF9feCA9IF9feTsKICAgICAgICB9CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh
bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2
b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAg
IGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQogICAgICAgIGNsZWFy
KCk7CiAgICAgIGVsc2UKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVyYXNlKF9f
Zmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws
IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcmFzZShjb25zdCBfS2V5KiBfX2ZpcnN0LCBjb25zdCBf
S2V5KiBfX2xhc3QpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAg
ICBlcmFzZSgqX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKQog
ICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9r
ZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0g
X1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICByZXR1cm4gKF9faiA9
PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAg
ICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0tl
eSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAg
ICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgIHdoaWxlIChfX3ggIT0gMCkKICAg
ICAgIHsKICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAg
ICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgICAgICB9CiAgICAgY29uc3RfaXRlcmF0b3Ig
X19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICAgICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBf
TV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAgICBlbmQoKSA6
IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGNvdW50KGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAg
IHsKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFs
X3JhbmdlKF9fayk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX3AuZmlyc3QsIF9f
cC5zZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dlcl9ib3Vu
ZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy
OwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0g
MCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAg
ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAg
X194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6CiAgICBsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgICB7
CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9
IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9j
b21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19s
ZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAg
ICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9i
b3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVh
ZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAg
ICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAg
ICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlP
ZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAg
IHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194
ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmIChfTV9rZXlf
Y29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1Nf
bGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7Cgog
ICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZQogICAgcGFpcjx0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcXVhbF9yYW5nZShjb25zdCBfS2V5JiBf
X2spCiAgICB7IHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19r
KSwgdXBwZXJfYm91bmQoX19rKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogIGlubGluZQogIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1Zh
bCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0
ZXJhdG9yPgogIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+CiAg
OjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgewogICAgcmV0dXJuIHBhaXI8
Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoX19rKSk7
CiAgfQoKICBpbmxpbmUgaW50CiAgX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
bm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCiAgewogICAgaWYgKF9fbm9kZSA9PSAw
KQogICAgICByZXR1cm4gMDsKICAgIGludCBfX3N1bSA9IDA7CiAgICBkbwogICAgICB7CiAgICAg
ICAgaWYgKF9fbm9kZS0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICArK19fc3VtOwog
ICAgICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgX19u
b2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgIHdoaWxlICgxKTsKICAgIHJldHVy
biBfX3N1bTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5
cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBib29sCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAogICAgewogICAgaWYgKF9NX25vZGVf
Y291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgICByZXR1cm4gX01fbm9kZV9jb3Vu
dCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQg
PT0gX01faGVhZGVyICYmIF9NX2hlYWRlci0+X01fcmlnaHQgPT0gX01faGVhZGVyOwoKICAgIGlu
dCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsKICAgIGZv
ciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkK
ICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9faXQuX01fbm9k
ZTsKICAgICAgICBfTGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKICAgICAgICBfTGlua190
eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgICAgIGlmIChfX3gtPl9NX2NvbG9yID09IF9N
X3JlZCkKICAgICAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX01fcmVkKQogICAg
ICAgICAgICAgIHx8IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfTV9yZWQpKQogICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChfX0wgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9feCksIF9TX2tleShfX0wpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAo
X19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3Vu
dChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
IH0KCiAgICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmlt
dW0oX01fcm9vdCgpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9NX3JpZ2h0bW9zdCgp
ICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290KCkpKQogICAgICByZXR1
cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQojIDY3ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9tYXAiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAx
IDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKbmFtZXNwYWNl
IHN0ZAp7CiMgNzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwK
ICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXksIF9UcD4g
PiA+CmNsYXNzIG1hcAp7CgogCiAgOwoKcHVibGljOgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7
CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5
cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFy
ZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3Mg
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIF9Db21wYXJl
IGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICBw
dWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2
YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3ku
Zmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUs
IHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LCBr
ZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5h
bWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBz
aXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0
b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAg
ICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkK
ICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp
CiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNl
cnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5z
ZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNvbnN0IG1hcDxfS2V5LF9UcCxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30KCiAgbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21w
YXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0
aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
a2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJu
IHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBlIGdldF9h
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKCgoKCiAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoK
CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKCgoK
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQo
KTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQoKICBz
aXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgogIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQojIDIyMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBfVHAmIG9wZXJhdG9yW10oY29u
c3Qga2V5X3R5cGUmIF9faykgewogICAgaXRlcmF0b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsK
CiAgICBpZiAoX19pID09IGVuZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQog
ICAgICBfX2kgPSBpbnNlcnQoX19pLCB2YWx1ZV90eXBlKF9faywgX1RwKCkpKTsKICAgIHJldHVy
biAoKl9faSkuc2Vjb25kOwogIH0KCiAgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0NCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChj
b25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194
KTsgfQojIDI2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBpdGVy
YXRvciBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAg
IHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQoKCgoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlx
dWUoX19maXJzdCwgX19sYXN0KTsKICB9CiMgMjg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9tYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVy
YXNlKF9fcG9zaXRpb24pOyB9CiMgMjk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9t
YXAuaCIgMwogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBf
TV90LmVyYXNlKF9feCk7IH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21h
cC5oIiAzCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg
ICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7
IF9NX3QuY2xlYXIoKTsgfQojIDMzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFw
LmgiIDMKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
ZmluZChfX3gpOyB9CiMgMzQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIg
MwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1
cm4gX01fdC5maW5kKF9feCk7IH0KIyAzNTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X21hcC5oIiAzCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQojIDM2
OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBpdGVyYXRvciBsb3dl
cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194
KTsgfQojIDM4MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBjb25z
dF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KIyAzOTMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA0MDMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91
bmQoX194KTsKICB9CiMgNDIzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIg
MwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBf
X3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDQ0MyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNv
bnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9L
MSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJh
dG9yPCAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7
CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9tYXAiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgi
IDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCm5h
bWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKICAgICAgICAg
IGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFs
bG9jYXRvcjxwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CmNsYXNzIG11bHRpbWFwOwoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
OwojIDkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmNsYXNzIG11bHRpbWFwCnsKCiAKICA7CgpwdWJsaWM6CgoKCiAgdHlwZWRlZiBfS2V5IGtleV90
eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsK
ICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv
bXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3Mg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBwcm90ZWN0ZWQ6CiAgICBfQ29t
cGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9
CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29u
c3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5maXJzdCwg
X195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90
eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+
LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlw
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG11bHRpbWFwKCkgOiBfTV90KF9Db21wYXJlKCks
IGFsbG9jYXRvcl90eXBlKCkpIHsgfQogIGV4cGxpY2l0IG11bHRpbWFwKGNvbnN0IF9Db21wYXJl
JiBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRv
cl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFy
ZSYgX19jb21wLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9f
Zmlyc3QsIF9fbGFzdCk7IH0KICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkgeyB9CgogIG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0dXJu
ICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKCgoK
CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgoKICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0K
CgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoK
CgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
cmVuZCgpOyB9CgoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9
CgoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICBz
aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KCiAg
dm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90
LnN3YXAoX194Ll9NX3QpOyB9CiMgMjQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9t
dWx0aW1hcC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyBy
ZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQojIDI1OSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmluc2VydF9l
cXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KIyAyNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX211bHRpbWFwLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KIyAyODQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0
ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHNpemVfdHlwZSBlcmFz
ZShjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyAzMDkg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICB2b2lkIGVyYXNl
KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2Zp
cnN0LCBfX2xhc3QpOyB9CgoKCgoKCiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CiMg
MzMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRlcmF0
b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoj
IDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGNvbnN0
X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5m
aW5kKF9feCk7IH0KCgoKCgoKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkg
Y29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiMgMzY1ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qg
a2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KIyAzNzggIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBjb25zdF9pdGVyYXRv
ciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f
dC5sb3dlcl9ib3VuZChfX3gpOwogIH0KCgoKCgoKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQoKCgoKCgoK
ICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7
CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KIyA0MTMgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9y
PiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVh
bF9yYW5nZShfX3gpOwogIH0KIyA0MzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211
bHRpbWFwLmgiIDMKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9y
YW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9y
YW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBf
QzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aW1hcDxf
SzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0
aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3Mg
X1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0
IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9f
eDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwg
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194
IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9tYXAiIDIgMwojIDIgIkRpc3BhdGNoLmNjIiAyCgp0ZW1wbGF0ZSA8Y2xh
c3MgS2V5X3R5cGU+CmNsYXNzIERpc3BhdGNoZXI7CgpjbGFzcyBRdWVyeVZhbGl0YWRlckJhc2Ug
ewpwdWJsaWM6CiAgdmlydHVhbCBib29sIG9wZXJhdG9yKCkoY29uc3Qgdm9pZCogZGF0YSwgaW50
IGxlbikgPSAwOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEtleV90eXBlPgpjbGFzcyBRdWVyeUhhbmRs
ZXJCYXNlIHsKcHVibGljOgogIFF1ZXJ5VmFsaXRhZGVyQmFzZSogaVZhbGlkYXRlOwogIFF1ZXJ5
SGFuZGxlckJhc2UoS2V5X3R5cGUga2V5LCBRdWVyeVZhbGl0YWRlckJhc2UqIHZhbGlkYXRlID0g
X19udWxsKTsKICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3IoKSAoY29uc3Qgdm9pZCopID0gMDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBEYXRhX3N0cnVjdD4KY2xhc3MgUXVlcnlWYWxpdGFkZXIgOiBwdWJs
aWMgUXVlcnlWYWxpdGFkZXJCYXNlIHsKcHVibGljOgogIHZpcnR1YWwgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IHZvaWQqICwgaW50IGxlbikKICB7CiAgICByZXR1cm4gbGVuID09IHNpemVvZihEYXRh
X3N0cnVjdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEtleV90eXBlPgpjbGFzcyBEaXNwYXRj
aGVyIHsKICBtYXA8S2V5X3R5cGUsIFF1ZXJ5SGFuZGxlckJhc2U8S2V5X3R5cGU+Kj4gY2xpZW50
OwpwdWJsaWM6CiAgRGlzcGF0Y2hlcigpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5zdGFuY2VfY2xh
c3MsIGNsYXNzIERhdGFfc3RydWN0PgogIHZvaWQgbWFrZVF1ZXJ5SGFuZGxlcihLZXlfdHlwZSBr
ZXksCiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlX2NsYXNzKiBpbnN0YW5jZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCAoSW5zdGFuY2VfY2xhc3M6OipmdW5jKShjb25zdCBE
YXRhX3N0cnVjdCopLAogICAgICAgICAgICAgICAgICAgICAgICBRdWVyeVZhbGl0YWRlckJhc2Uq
IHZhbCA9IF9fbnVsbCk7CgogIGJvb2wgb3BlcmF0b3IoKShLZXlfdHlwZSBrZXksIGNvbnN0IHZv
aWQqIGRhdGEsIGludCBsZW4pOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEtleV90eXBlPgpRdWVyeUhh
bmRsZXJCYXNlPEtleV90eXBlPjo6UXVlcnlIYW5kbGVyQmFzZShLZXlfdHlwZSBrZXksIFF1ZXJ5
VmFsaXRhZGVyQmFzZSogdmFsKQogIDogaVZhbGlkYXRlKF9fbnVsbCkKewp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgS2V5X3R5cGU+CkRpc3BhdGNoZXI8S2V5X3R5cGU+OjpEaXNwYXRjaGVyKCkKewp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgS2V5X3R5cGU+CmJvb2wgRGlzcGF0Y2hlcjxLZXlfdHlwZT46Om9wZXJh
dG9yKCkoS2V5X3R5cGUga2V5LCBjb25zdCB2b2lkKiBkYXRhLCBpbnQgbGVuKQp7CiAgaWYoIWNs
aWVudC5jb3VudChrZXkpKSB7CiAgICBTV0VSUigiVW5oYW5kbGVkIFF1ZXJ5Iiwga2V5LCAwKTsK
ICAgIHJldHVybiBmYWxzZTsKICB9CgogIFF1ZXJ5SGFuZGxlckJhc2U8S2V5X3R5cGU+KiB0ID0g
Y2xpZW50W2tleV07CiAgaWYoISgqdC0+aVZhbGlkYXRlKShkYXRhLCBsZW4pKSB7CiAgICBTV0VS
UigiUXVlcnkgZGF0YSB2YWxpZGF0ZSBmYWlsZWQiLCBrZXksIGxlbik7CiAgICByZXR1cm4gZmFs
c2U7CiAgfQogIHJldHVybiAoKmNsaWVudFtrZXldKShkYXRhKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IEtleV90eXBlLCBjbGFzcyBJbnN0YW5jZV9jbGFzcywgY2xhc3MgRGF0YV9zdHJ1Y3Q+CmNsYXNz
IFF1ZXJ5SGFuZGxlciA6IHB1YmxpYyBRdWVyeUhhbmRsZXJCYXNlPEtleV90eXBlPiB7CiAgYm9v
bCBpTXVzdERlc3RydWN0VmFsaWRhdGVyOwogIEluc3RhbmNlX2NsYXNzKiBpSW5zdGFuY2U7CiAg
Ym9vbCAoSW5zdGFuY2VfY2xhc3M6OippZnVuYykoY29uc3QgRGF0YV9zdHJ1Y3QqKTsKcHVibGlj
OgogIFF1ZXJ5SGFuZGxlcihJbnN0YW5jZV9jbGFzcyogaW5zdGFuY2UsCiAgICAgICAgICAgICAg
Ym9vbCAoSW5zdGFuY2VfY2xhc3M6OipmdW5jKShjb25zdCBEYXRhX3N0cnVjdCopLAogICAgICAg
ICAgICAgIERpc3BhdGNoZXI8S2V5X3R5cGU+JiByZWcsCiAgICAgICAgICAgICAgS2V5X3R5cGUg
a2V5LAogICAgICAgICAgICAgIFF1ZXJ5VmFsaXRhZGVyQmFzZSogdmFsID0gX19udWxsKQogICAg
OiBRdWVyeUhhbmRsZXJCYXNlPEtleV90eXBlPihyZWcsIGtleSwgdmFsKSwKICAgICAgaU11c3RE
ZXN0cnVjdFZhbGlkYXRlcihmYWxzZSksCiAgICAgIGlJbnN0YW5jZShpbnN0YW5jZSksCiAgICAg
IGlmdW5jKGZ1bmMpCiAgewogICAgaWYodmFsID09IF9fbnVsbCkgewogICAgICBpVmFsaWRhdGUg
PSBuZXcgUXVlcnlWYWxpdGFkZXI8RGF0YV9zdHJ1Y3Q+KCk7CiAgICAgIGlNdXN0RGVzdHJ1Y3RW
YWxpZGF0ZXIgPSB0cnVlOwogICAgfQogIH0KICB+UXVlcnlIYW5kbGVyKCkKICB7CiAgICBpZihp
TXVzdERlc3RydWN0VmFsaWRhdGVyKSB7CiAgICAgIGRlbGV0ZSBpVmFsaWRhdGU7CiAgICB9CiAg
fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2b2lkKiB2YWwpCiAgewogICAgcmV0dXJuIChpSW5z
dGFuY2UtPippZnVuYykoc3RhdGljX2Nhc3Q8Y29uc3QgRGF0YV9zdHJ1Y3QqPih2YWwpKTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5X3R5cGUsIGNsYXNzIEluc3RhbmNlX2NsYXNzLCBjbGFz
cyBEYXRhX3N0cnVjdD4Kdm9pZCBEaXNwYXRjaGVyPEtleV90eXBlPjo6bWFrZVF1ZXJ5SGFuZGxl
cihLZXlfdHlwZSBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5zdGFuY2VfY2xhc3MqIGluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgKEluc3RhbmNlX2NsYXNzOjoqZnVuYykoY29uc3QgRGF0YV9z
dHJ1Y3QqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNw
YXRjaGVyPEtleV90eXBlPiYgZGlzcGF0Y2hlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBRdWVyeVZhbGl0YWRlckJhc2UqIHZhbCA9IG5ldyBRdWVyeVZhbGl0
YWRlcjxEYXRhX3N0cnVjdD4oKSkKewogIFF1ZXJ5SGFuZGxlcjxLZXlfdHlwZSwgSW5zdGFuY2Vf
Y2xhc3MsIERhdGFfc3RydWN0PiogaG9vayA9CiAgICBuZXcgUXVlcnlIYW5kbGVyPEtleV90eXBl
LCBJbnN0YW5jZV9jbGFzcywgRGF0YV9zdHJ1Y3Q+KGluc3RhbmNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGhp
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWwpOwogIGNsaWVudFtrZXldID0gaG9vazsKfQojIDEzICJhLmNjIiAy
CgpjbGFzcyBEcml2ZXIgewpwdWJsaWM6CiAgRHJpdmVyKERpc3BhdGNoZXI8ZUhjMTJNc2dPYmpl
Y3Q+JiByZWcpOwogIGJvb2wgcHJvY2Vzcyhjb25zdCBpbnQqIGRhdGEpOwp9OwoKRHJpdmVyOjpE
cml2ZXIoRGlzcGF0Y2hlcjxlSGMxMk1zZ09iamVjdD4mIHJlZykKewogIHJlZy5tYWtlUXVlcnlI
YW5kbGVyKEhjMTJNc2dPYmpSdHQsIHRoaXMsICZEcml2ZXI6OnByb2Nlc3MpCn0KCmJvb2wgRHJp
dmVyOjpwcm9jZXNzKGNvbnN0IGludCogZGF0YSkKewogIGNvdXQgPDwgKmRhdGEgPDwgZW5kbDsK
ICByZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7CiAgRGlzcGF0Y2hlcjxlSGMxMk1zZ09iamVj
dD4gcmVnOwogIERyaXZlciBhKHJlZyk7CiAgKHZvaWQpYTsKICBpbnQgaiA9IDU7CiAgY291dCA8
PCByZWcoSGMxMk1zZ09ialJ0dCwgJmosIHNpemVvZihqKSkgPDwgZW5kbDsKICBjaGFyIGwgPSA1
OwogIGNvdXQgPDwgcmVnKEhjMTJNc2dPYmpSdHQsICZsLCBzaXplb2YobCkpIDw8IGVuZGw7Cn0K


             reply	other threads:[~2003-04-28 21:46 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-28 21:46 rcampbell [this message]
2003-04-29 10:46 Giovanni Bajo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030428213804.13069.qmail@sources.redhat.com \
    --to=rcampbell@tropicnetworks.com \
    --cc=Endlisnis@mailc.net \
    --cc=gcc-gnats@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).