target/10851: [m32r] ICE in extract_insn, at recog.c:2175

[email protected]
Newsgroups gmane.comp.gcc.prs,gmane.spam.detected
Message-ID <[email protected]>
>Number:         10851
>Category:       target
>Synopsis:       [m32r] ICE in extract_insn, at recog.c:2175
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon May 19 05:56:03 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Kazuhiro Inaoka
>Release:        gcc version 3.3
>Organization:
>Environment:
Linux t1pc-m32rsvr 2.4.18-24.7.x #1 Fri Jan 31 07:06:03 EST 2003 i686 unknown
>Description:
ice20030519.c: In function `FontSize':
ice20030519.c:17370: error: unrecognizable insn:
(insn 595 604 596 11 (nil) (set (reg:SI 17 cbit)
        (const_int 0 [0x0])) -1 (nil)
    (expr_list:REG_EQUAL (const_int 0 [0x0])
        (nil)))
ice20030519.c:17370: internal compiler error: in extract_insn, at recog.c:2175
Please submit a full bug report,
with preprocessed source if appropriate.

following is one of the bug patterns.
void func()
{
  int i;
  for (i=0; i<5; i++)
    if (i=0)
      break;
}
>How-To-Repeat:
compile with Optimize options (-O, -O2, -O3)
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="ice20030519.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ice20030519.c"

c3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICIkSGVhZGVyOiAvcHJvamVjdC9tMzJyLWxpbnV4
L3RhcmdldF9zcmMvcmVwb3NpdG9yeS9sZXNzdGlmMS9zcmMvbGliL1htL1RleHRGLmMsdiAxLjEu
MS4xIDIwMDMvMDUvMTYgMDM6NTY6MDMgdGFrYXRhIEV4cCAkIjsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90Owp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog
IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CmV4dGVy
biBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgpleHRlcm4gZG91Ymxl
IGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs
b25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIDsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkKICAgICA7CmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4
dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCmV4dGVy
biBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19z
dHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICA7CgoKCgoKCgpleHRl
cm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJu
YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0
b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk
IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9f
c3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu
c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy
biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25w
dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jh
c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7
Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJl
dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K
ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAg
cmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3Qg
Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9p
ZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVy
biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGlu
dCBfX3F1YWRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9f
aW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18g
dHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90
ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50
IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5v
X3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsK
dHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBl
ZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcg
X19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQg
X19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf
dDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBl
ZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3Ymxr
X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRf
dDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBp
bnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYg
X19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2Zz
ZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9f
dV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVk
ZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91
c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3NvY2tsZW5fdDsKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9w
cmlvcml0eTsKICB9OwoKCgp0eXBlZGVmIGludCBfX2F0b21pY19sb2NrX3Q7CgoKc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBfX2F0b21pY19sb2NrX3Qg
X19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAq
X3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAg
aW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRf
cGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsK
ICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0
YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJl
YWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNl
cnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQg
X19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRf
bXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFk
X211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBwdGhyZWFkX3Q7CnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVm
IF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xv
bmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVf
cXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9m
Zl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoK
CnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoK
dHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoK
Cgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVk
ZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVk
ZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlw
ZWRlZiBfX2tleV90IGtleV90Owp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKdHlwZWRlZiBfX2Ns
b2NraWRfdCBjbG9ja2lkX3Q7CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fd29yZF9fKSkpOwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNp
emVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKdHlwZWRlZiBfX3Np
Z3NldF90IHNpZ3NldF90OwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7
CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1l
X3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CgoKCgp0eXBlZGVmIF9f
c3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7
CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRz
WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5
cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9f
bmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZk
X3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpf
X3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwg
Kl9fcmVzdHJpY3QgX190aW1lb3V0KSA7Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoK
CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90
IGZzZmlsY250X3Q7CgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZv
aWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0
c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0
ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAg
aW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAg
IGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBp
bnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9t
X2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9f
cmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQg
X19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0
ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBp
bnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCmV4
dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBf
X3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7CgoK
CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBscmFu
ZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBs
b25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVy
biB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hv
cnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJu
IHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1
Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9u
ZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxv
bmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgOwoK
ZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4dGVy
biBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CmV4dGVybiB2b2lk
ICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl
eHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2
b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
CmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2
b2lkICpfX3B0cikgOwoKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7
CgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5j
KSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf
X3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZv
aWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CmV4
dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKZXh0ZXJuIGlu
dCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSA7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAg
ICAgOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoK
CmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAq
X190ZW1wbGF0ZSkgOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRl
KSA7CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4g
aW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKZXh0ZXJuIGNoYXIgKnJlYWxw
YXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9f
Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwpleHRlcm4gdm9p
ZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21w
YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNp
emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJf
Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu
dCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZf
dCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQg
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4g
Y2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3Ig
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAog
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmlj
dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGludCBx
ZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7
CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAog
ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNp
emVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh
cikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj
cywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2Nv
bnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19s
b2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZv
aWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZv
aWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXpl
X3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs
IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBj
aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRl
cm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpl
eHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgOwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIg
KnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2Nl
cHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJy
ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpf
X3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19y
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s
CiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwpl
eHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRl
cm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
YnVmbGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p
IDsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVz
dCwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBf
X24pIDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lk
ICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMg
KGludCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGludCBzdHJjYXNl
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3Qg
X19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSkgOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbMl07IH0gX19T
VFJJTkcyX0NPUFlfQVJSMiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0
IHsgdW5zaWduZWQgY2hhciBfX2FyclszXTsgfSBfX1NUUklORzJfQ09QWV9BUlIzIF9fYXR0cmli
dXRlX18gKChwYWNrZWQpKTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzRd
OyB9IF9fU1RSSU5HMl9DT1BZX0FSUjQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVm
IHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbNV07IH0gX19TVFJJTkcyX0NPUFlfQVJSNSBf
X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBf
X2Fycls2XTsgfSBfX1NUUklORzJfQ09QWV9BUlI2IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsK
dHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzddOyB9IF9fU1RSSU5HMl9DT1BZ
X0FSUjcgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVk
IGNoYXIgX19hcnJbOF07IH0gX19TVFJJTkcyX0NPUFlfQVJSOCBfX2F0dHJpYnV0ZV9fICgocGFj
a2VkKSk7CmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j
KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs
dCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9
IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBf
X2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq
ZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIp
OwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1
bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAh
PSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICAr
K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf
X3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9fcmVqZWN0Myk7
CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQgX19yZWplY3Qz
KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0
XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tf
X3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQogICAg
KytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf
X3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lu
bGluZSBzaXplX3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQp
CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0
XSA9PSBfX2FjY2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRl
cm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0
Mik7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz
dWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jl
c3VsdF0gPT0gX19hY2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h
Y2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9j
MyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBf
X2FjY2VwdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19z
W19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAg
ICAgICAgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJl
dHVybiBfX3Jlc3VsdDsKfQpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2Nv
bnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJy
a19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsK
CiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9f
YWNjZXB0MikKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6
IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJy
a19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJu
IF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h
Y2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAg
d2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNj
ZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19zOwogIHJldHVybiAq
X19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQpleHRl
cm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBj
aGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0b2tfcl8xYyAoY2hh
ciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIgKl9fcmVzdWx0Owog
IGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9f
cyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7CiAgaWYgKCpf
X3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAgICAgd2hpbGUgKCpf
X3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAgICAgICAgewogICAg
ICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAg
ICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQpleHRlcm4gY2hh
ciAqX19zdHJzZXBfZyAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsK
ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVq
ZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hh
ciBfX3JlamVjdCkKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19y
ZXR2YWwgIT0gKCh2b2lkICopMCkgJiYgKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGlu
X2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBf
X3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVq
ZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9f
cmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3Ms
IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoK
X19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikK
ewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2
b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAg
ICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19j
cCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1ww
JzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwog
ICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9Cgpl
eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl
Y3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIg
KipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsK
ICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9p
ZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAg
IHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3Ag
PT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0MykKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9
CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICBy
ZXR1cm4gX19yZXR2YWw7Cn0KZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRlcm4gY2hhciAqX19zdHJu
ZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7Cgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYgc3RydWN0
IF9JT19GSUxFIF9fRklMRTsKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90Owp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
Y291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsK
ICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90
OwpzdHJ1Y3QgdG07CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX3NyYykgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd2Nz
Y2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSA7CgpleHRlcm4gd2NoYXJfdCAqd2Nz
bmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoK
CmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2Nz
bmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBpbnQgd2NzY29s
bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIDsKCgoKZXh0
ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p
IDsKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJf
dCBfX3djKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdj
aGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193
Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3Rh
Y2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZWxp
bSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIDsK
CgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90
ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
czIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19u
KSA7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNl
dCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgOwpleHRlcm4gd2ludF90
IGJ0b3djIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIDsKCgoK
ZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w
KSA7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf
dCBfX3djLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz
KSA7CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIDsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVz
dHJpY3QgX19wcykgOwoKCgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKQp7IHJldHVybiAoX19wcyAhPSAoKHZv
aWQgKikwKQogICAgICAgICAgPyBtYnJ0b3djICgoKHZvaWQgKikwKSwgX19zLCBfX24sIF9fcHMp
IDogX19tYnJsZW4gKF9fcywgX19uLCAoKHZvaWQgKikwKSkpOyB9CgoKCgpleHRlcm4gc2l6ZV90
IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSA7CgoKCmV4
dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f
cHMpIDsKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
cikgOwpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog
ICAgIDsKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0
IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50
ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgOwoKCmV4
dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193
Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n
IGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy
biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2No
YXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgoK
CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVybmFsIChfX25wdHIs
IF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGlu
dCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz
ZSwgMCk7IH0KZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB3aW50X3QgZ2V0d2No
YXIgKHZvaWQpIDsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF
ICpfX3N0cmVhbSkgOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAq
X19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIDsKCgoK
CmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7
CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog
ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCmV4dGVy
biB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz
dHJpY3QgX190cCkgOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKCgoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIE1hc2s7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBBdG9tOwoKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKdHlwZWRl
ZiBYSUQgV2luZG93Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKCgp0eXBlZGVmIFhJRCBGb250OwoK
dHlwZWRlZiBYSUQgUGl4bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9y
bWFwOwp0eXBlZGVmIFhJRCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIEtleUNvZGU7CnR5cGVkZWYgY2hhciAqWFBvaW50ZXI7CnR5cGVkZWYgc3Ry
dWN0IF9YRXh0RGF0YSB7CiAgICAgICAgaW50IG51bWJlcjsKICAgICAgICBzdHJ1Y3QgX1hFeHRE
YXRhICpuZXh0OwogICAgICAgIGludCAoKmZyZWVfcHJpdmF0ZSkoCgogICAgICAgIHN0cnVjdCBf
WEV4dERhdGEgKmV4dGVuc2lvbgoKICAgICAgICApOwogICAgICAgIFhQb2ludGVyIHByaXZhdGVf
ZGF0YTsKfSBYRXh0RGF0YTsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgZXh0ZW5z
aW9uOwogICAgICAgIGludCBtYWpvcl9vcGNvZGU7CiAgICAgICAgaW50IGZpcnN0X2V2ZW50Owog
ICAgICAgIGludCBmaXJzdF9lcnJvcjsKfSBYRXh0Q29kZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IGRlcHRoOwogICAgaW50IGJpdHNfcGVyX3BpeGVsOwogICAgaW50IHNjYW5saW5l
X3BhZDsKfSBYUGl4bWFwRm9ybWF0VmFsdWVzOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICBpbnQgZnVuY3Rpb247CiAgICAgICAgdW5zaWduZWQgbG9uZyBwbGFuZV9tYXNrOwogICAgICAg
IHVuc2lnbmVkIGxvbmcgZm9yZWdyb3VuZDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJhY2tncm91
bmQ7CiAgICAgICAgaW50IGxpbmVfd2lkdGg7CiAgICAgICAgaW50IGxpbmVfc3R5bGU7CiAgICAg
ICAgaW50IGNhcF9zdHlsZTsKCiAgICAgICAgaW50IGpvaW5fc3R5bGU7CiAgICAgICAgaW50IGZp
bGxfc3R5bGU7CgogICAgICAgIGludCBmaWxsX3J1bGU7CiAgICAgICAgaW50IGFyY19tb2RlOwog
ICAgICAgIFBpeG1hcCB0aWxlOwogICAgICAgIFBpeG1hcCBzdGlwcGxlOwogICAgICAgIGludCB0
c194X29yaWdpbjsKICAgICAgICBpbnQgdHNfeV9vcmlnaW47CiAgICAgICAgRm9udCBmb250Owog
ICAgICAgIGludCBzdWJ3aW5kb3dfbW9kZTsKICAgICAgICBpbnQgZ3JhcGhpY3NfZXhwb3N1cmVz
OwogICAgICAgIGludCBjbGlwX3hfb3JpZ2luOwogICAgICAgIGludCBjbGlwX3lfb3JpZ2luOwog
ICAgICAgIFBpeG1hcCBjbGlwX21hc2s7CiAgICAgICAgaW50IGRhc2hfb2Zmc2V0OwogICAgICAg
IGNoYXIgZGFzaGVzOwp9IFhHQ1ZhbHVlczsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hHQwoKCgoK
CgoKKkdDOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsK
ICAgICAgICBWaXN1YWxJRCB2aXN1YWxpZDsKCgoKICAgICAgICBpbnQgY2xhc3M7CgogICAgICAg
IHVuc2lnbmVkIGxvbmcgcmVkX21hc2ssIGdyZWVuX21hc2ssIGJsdWVfbWFzazsKICAgICAgICBp
bnQgYml0c19wZXJfcmdiOwogICAgICAgIGludCBtYXBfZW50cmllczsKfSBWaXN1YWw7CgoKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGRlcHRoOwogICAgICAgIGludCBudmlzdWFsczsK
ICAgICAgICBWaXN1YWwgKnZpc3VhbHM7Cn0gRGVwdGg7CgoKCgoKCgpzdHJ1Y3QgX1hEaXNwbGF5
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBz
dHJ1Y3QgX1hEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIGlu
dCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBtd2lkdGgsIG1oZWlnaHQ7CiAgICAgICAgaW50
IG5kZXB0aHM7CiAgICAgICAgRGVwdGggKmRlcHRoczsKICAgICAgICBpbnQgcm9vdF9kZXB0aDsK
ICAgICAgICBWaXN1YWwgKnJvb3RfdmlzdWFsOwogICAgICAgIEdDIGRlZmF1bHRfZ2M7CiAgICAg
ICAgQ29sb3JtYXAgY21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHdoaXRlX3BpeGVsOwogICAg
ICAgIHVuc2lnbmVkIGxvbmcgYmxhY2tfcGl4ZWw7CiAgICAgICAgaW50IG1heF9tYXBzLCBtaW5f
bWFwczsKICAgICAgICBpbnQgYmFja2luZ19zdG9yZTsKICAgICAgICBpbnQgc2F2ZV91bmRlcnM7
CiAgICAgICAgbG9uZyByb290X2lucHV0X21hc2s7Cn0gU2NyZWVuOwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBpbnQgZGVwdGg7CiAgICAg
ICAgaW50IGJpdHNfcGVyX3BpeGVsOwogICAgICAgIGludCBzY2FubGluZV9wYWQ7Cn0gU2NyZWVu
Rm9ybWF0OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4bWFwIGJhY2tncm91bmRfcGl4bWFw
OwogICAgdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kX3BpeGVsOwogICAgUGl4bWFwIGJvcmRlcl9w
aXhtYXA7CiAgICB1bnNpZ25lZCBsb25nIGJvcmRlcl9waXhlbDsKICAgIGludCBiaXRfZ3Jhdml0
eTsKICAgIGludCB3aW5fZ3Jhdml0eTsKICAgIGludCBiYWNraW5nX3N0b3JlOwogICAgdW5zaWdu
ZWQgbG9uZyBiYWNraW5nX3BsYW5lczsKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19waXhlbDsK
ICAgIGludCBzYXZlX3VuZGVyOwogICAgbG9uZyBldmVudF9tYXNrOwogICAgbG9uZyBkb19ub3Rf
cHJvcGFnYXRlX21hc2s7CiAgICBpbnQgb3ZlcnJpZGVfcmVkaXJlY3Q7CiAgICBDb2xvcm1hcCBj
b2xvcm1hcDsKICAgIEN1cnNvciBjdXJzb3I7Cn0gWFNldFdpbmRvd0F0dHJpYnV0ZXM7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgaW50
IGJvcmRlcl93aWR0aDsKICAgIGludCBkZXB0aDsKICAgIFZpc3VhbCAqdmlzdWFsOwogICAgV2lu
ZG93IHJvb3Q7CgoKCiAgICBpbnQgY2xhc3M7CgogICAgaW50IGJpdF9ncmF2aXR5OwogICAgaW50
IHdpbl9ncmF2aXR5OwogICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICB1bnNpZ25lZCBsb25nIGJh
Y2tpbmdfcGxhbmVzOwogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVsOwogICAgaW50IHNh
dmVfdW5kZXI7CiAgICBDb2xvcm1hcCBjb2xvcm1hcDsKICAgIGludCBtYXBfaW5zdGFsbGVkOwog
ICAgaW50IG1hcF9zdGF0ZTsKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwogICAgbG9uZyB5b3Vy
X2V2ZW50X21hc2s7CiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsKICAgIGludCBvdmVy
cmlkZV9yZWRpcmVjdDsKICAgIFNjcmVlbiAqc2NyZWVuOwp9IFhXaW5kb3dBdHRyaWJ1dGVzOwoK
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBpbnQgbGVu
Z3RoOwogICAgICAgIGNoYXIgKmFkZHJlc3M7Cn0gWEhvc3RBZGRyZXNzOwoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX1hJbWFnZSB7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGludCB4b2Zmc2V0Owog
ICAgaW50IGZvcm1hdDsKICAgIGNoYXIgKmRhdGE7CiAgICBpbnQgYnl0ZV9vcmRlcjsKICAgIGlu
dCBiaXRtYXBfdW5pdDsKICAgIGludCBiaXRtYXBfYml0X29yZGVyOwogICAgaW50IGJpdG1hcF9w
YWQ7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CiAgICBpbnQgYml0c19w
ZXJfcGl4ZWw7CiAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBn
cmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgICBYUG9pbnRlciBvYmRh
dGE7CiAgICBzdHJ1Y3QgZnVuY3MgewoKICAgICAgICBzdHJ1Y3QgX1hJbWFnZSAqKCpjcmVhdGVf
aW1hZ2UpKAogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlzcGxheSogLAogICAgICAgICAgICAg
ICAgVmlzdWFsKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAg
ICAgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBjaGFyKiAsCiAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBpbnQgKTsKICAgICAgICBp
bnQgKCpkZXN0cm95X2ltYWdlKSAoc3RydWN0IF9YSW1hZ2UgKik7CiAgICAgICAgdW5zaWduZWQg
bG9uZyAoKmdldF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50KTsKICAgICAgICBp
bnQgKCpwdXRfcGl4ZWwpIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9u
Zyk7CiAgICAgICAgc3RydWN0IF9YSW1hZ2UgKigqc3ViX2ltYWdlKShzdHJ1Y3QgX1hJbWFnZSAq
LCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogICAgICAgIGludCAoKmFk
ZF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGxvbmcpOwogICAgICAgIH0gZjsKfSBYSW1hZ2U7
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0
OwogICAgaW50IGJvcmRlcl93aWR0aDsKICAgIFdpbmRvdyBzaWJsaW5nOwogICAgaW50IHN0YWNr
X21vZGU7Cn0gWFdpbmRvd0NoYW5nZXM7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBwaXhlbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWQsIGdyZWVuLCBibHVl
OwogICAgICAgIGNoYXIgZmxhZ3M7CiAgICAgICAgY2hhciBwYWQ7Cn0gWENvbG9yOwoKCgoKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4MSwgeTEsIHgyLCB5MjsKfSBYU2VnbWVudDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7Cn0gWFBvaW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVkIHNob3J0IHdpZHRoLCBoZWlnaHQ7Cn0gWFJl
Y3RhbmdsZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7CiAgICB1bnNpZ25lZCBz
aG9ydCB3aWR0aCwgaGVpZ2h0OwogICAgc2hvcnQgYW5nbGUxLCBhbmdsZTI7Cn0gWEFyYzsKCgoK
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQga2V5X2NsaWNrX3BlcmNlbnQ7CiAgICAgICAg
aW50IGJlbGxfcGVyY2VudDsKICAgICAgICBpbnQgYmVsbF9waXRjaDsKICAgICAgICBpbnQgYmVs
bF9kdXJhdGlvbjsKICAgICAgICBpbnQgbGVkOwogICAgICAgIGludCBsZWRfbW9kZTsKICAgICAg
ICBpbnQga2V5OwogICAgICAgIGludCBhdXRvX3JlcGVhdF9tb2RlOwp9IFhLZXlib2FyZENvbnRy
b2w7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQga2V5X2NsaWNrX3BlcmNlbnQ7CiAg
ICAgICAgaW50IGJlbGxfcGVyY2VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgYmVsbF9waXRjaCwg
YmVsbF9kdXJhdGlvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGxlZF9tYXNrOwogICAgICAgIGlu
dCBnbG9iYWxfYXV0b19yZXBlYXQ7CiAgICAgICAgY2hhciBhdXRvX3JlcGVhdHNbMzJdOwp9IFhL
ZXlib2FyZFN0YXRlOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgVGltZSB0aW1lOwogICAg
ICAgIHNob3J0IHgsIHk7Cn0gWFRpbWVDb29yZDsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGludCBtYXhfa2V5cGVybW9kOwogICAgICAgIEtleUNvZGUgKm1vZGlmaWVybWFwOwp9IFhNb2Rp
ZmllcktleW1hcDsKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CgoKc3RydWN0IF9Y
UHJpdmF0ZTsKc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QKCgoKewog
ICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBzdHJ1Y3QgX1hQcml2YXRlICpwcml2
YXRlMTsKICAgICAgICBpbnQgZmQ7CiAgICAgICAgaW50IHByaXZhdGUyOwogICAgICAgIGludCBw
cm90b19tYWpvcl92ZXJzaW9uOwogICAgICAgIGludCBwcm90b19taW5vcl92ZXJzaW9uOwogICAg
ICAgIGNoYXIgKnZlbmRvcjsKICAgICAgICBYSUQgcHJpdmF0ZTM7CiAgICAgICAgWElEIHByaXZh
dGU0OwogICAgICAgIFhJRCBwcml2YXRlNTsKICAgICAgICBpbnQgcHJpdmF0ZTY7CiAgICAgICAg
WElEICgqcmVzb3VyY2VfYWxsb2MpKAoKICAgICAgICAgICAgICAgIHN0cnVjdCBfWERpc3BsYXkq
CgogICAgICAgICk7CiAgICAgICAgaW50IGJ5dGVfb3JkZXI7CiAgICAgICAgaW50IGJpdG1hcF91
bml0OwogICAgICAgIGludCBiaXRtYXBfcGFkOwogICAgICAgIGludCBiaXRtYXBfYml0X29yZGVy
OwogICAgICAgIGludCBuZm9ybWF0czsKICAgICAgICBTY3JlZW5Gb3JtYXQgKnBpeG1hcF9mb3Jt
YXQ7CiAgICAgICAgaW50IHByaXZhdGU4OwogICAgICAgIGludCByZWxlYXNlOwogICAgICAgIHN0
cnVjdCBfWFByaXZhdGUgKnByaXZhdGU5LCAqcHJpdmF0ZTEwOwogICAgICAgIGludCBxbGVuOwog
ICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9yZXF1ZXN0X3JlYWQ7CiAgICAgICAgdW5zaWduZWQg
bG9uZyByZXF1ZXN0OwogICAgICAgIFhQb2ludGVyIHByaXZhdGUxMTsKICAgICAgICBYUG9pbnRl
ciBwcml2YXRlMTI7CiAgICAgICAgWFBvaW50ZXIgcHJpdmF0ZTEzOwogICAgICAgIFhQb2ludGVy
IHByaXZhdGUxNDsKICAgICAgICB1bnNpZ25lZCBtYXhfcmVxdWVzdF9zaXplOwogICAgICAgIHN0
cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqZGI7CiAgICAgICAgaW50ICgqcHJpdmF0ZTE1KSgKCiAg
ICAgICAgICAgICAgICBzdHJ1Y3QgX1hEaXNwbGF5KgoKICAgICAgICAgICAgICAgICk7CiAgICAg
ICAgY2hhciAqZGlzcGxheV9uYW1lOwogICAgICAgIGludCBkZWZhdWx0X3NjcmVlbjsKICAgICAg
ICBpbnQgbnNjcmVlbnM7CiAgICAgICAgU2NyZWVuICpzY3JlZW5zOwogICAgICAgIHVuc2lnbmVk
IGxvbmcgbW90aW9uX2J1ZmZlcjsKICAgICAgICB1bnNpZ25lZCBsb25nIHByaXZhdGUxNjsKICAg
ICAgICBpbnQgbWluX2tleWNvZGU7CiAgICAgICAgaW50IG1heF9rZXljb2RlOwogICAgICAgIFhQ
b2ludGVyIHByaXZhdGUxNzsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTg7CiAgICAgICAgaW50
IHByaXZhdGUxOTsKICAgICAgICBjaGFyICp4ZGVmYXVsdHM7Cgp9CgoKCipfWFByaXZEaXNwbGF5
Owp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh
eTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIFdp
bmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwogICAgICAgIGludCB4LCB5OwogICAg
ICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAg
ICAgdW5zaWduZWQgaW50IGtleWNvZGU7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhLZXlF
dmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlwZWRlZiBYS2V5RXZl
bnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdp
bmRvdyByb290OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwog
ICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNp
Z25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGJ1dHRvbjsKICAgICAgICBpbnQg
c2FtZV9zY3JlZW47Cn0gWEJ1dHRvbkV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9u
UHJlc3NlZEV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9uUmVsZWFzZWRFdmVudDsK
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25n
IHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5
OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgV2luZG93IHJvb3Q7CiAgICAgICAgV2lu
ZG93IHN1YndpbmRvdzsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgaW50IHgsIHk7CiAgICAg
ICAgaW50IHhfcm9vdCwgeV9yb290OwogICAgICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKICAgICAg
ICBjaGFyIGlzX2hpbnQ7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhNb3Rpb25FdmVudDsK
dHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg
IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93
IHdpbmRvdzsKICAgICAgICBXaW5kb3cgcm9vdDsKICAgICAgICBXaW5kb3cgc3Vid2luZG93Owog
ICAgICAgIFRpbWUgdGltZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBpbnQgeF9yb290LCB5
X3Jvb3Q7CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGRldGFpbDsKCgoKCiAgICAgICAg
aW50IHNhbWVfc2NyZWVuOwogICAgICAgIGludCBmb2N1czsKICAgICAgICB1bnNpZ25lZCBpbnQg
c3RhdGU7Cn0gWENyb3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2lu
ZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp
YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg
ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBtb2RlOwogICAgICAgIGludCBkZXRhaWw7
CgoKCgoKfSBYRm9jdXNDaGFuZ2VFdmVudDsKdHlwZWRlZiBYRm9jdXNDaGFuZ2VFdmVudCBYRm9j
dXNJbkV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1c091dEV2ZW50OwoKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl
cmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5Owog
ICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgY2hhciBrZXlfdmVjdG9yWzMyXTsKfSBYS2V5
bWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh
eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCB4LCB5OwogICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBjb3VudDsKfSBYRXhwb3NlRXZlbnQ7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh
eTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBp
bnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAgaW50IG1ham9yX2Nv
ZGU7CiAgICAgICAgaW50IG1pbm9yX2NvZGU7Cn0gWEdyYXBoaWNzRXhwb3NlRXZlbnQ7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp
YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg
ICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgbWFqb3JfY29kZTsKICAgICAgICBp
bnQgbWlub3JfY29kZTsKfSBYTm9FeHBvc2VFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2Vu
ZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7
CiAgICAgICAgaW50IHN0YXRlOwp9IFhWaXNpYmlsaXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAg
aW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cg
cGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg
aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAgICBpbnQg
b3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg
IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93
IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWERlc3Ryb3lXaW5kb3dFdmVudDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl
cmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5Owog
ICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBm
cm9tX2NvbmZpZ3VyZTsKfSBYVW5tYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp
bnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9l
dmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAg
ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBvdmVycmlkZV9yZWRpcmVjdDsKfSBYTWFw
RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu
ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq
ZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0g
WE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAg
ICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAg
ICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cg
d2luZG93OwogICAgICAgIFdpbmRvdyBwYXJlbnQ7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg
aW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhSZXBhcmVudEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg
IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93
IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg
aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAgICBXaW5k
b3cgYWJvdmU7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhDb25maWd1cmVFdmVu
dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBs
b25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNw
bGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAg
IGludCB4LCB5Owp9IFhHcmF2aXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50
IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZl
bnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0
cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAg
ICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBX
aW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAg
ICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAg
ICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IGRldGFpbDsKICAgICAgICB1bnNpZ25lZCBsb25n
IHZhbHVlX21hc2s7Cn0gWENvbmZpZ3VyZVJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBp
bnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBl
dmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBwbGFjZTsKfSBYQ2lyY3Vs
YXRlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh
eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7
CiAgICAgICAgaW50IHBsYWNlOwp9IFhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0
cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAg
ICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBX
aW5kb3cgd2luZG93OwogICAgICAgIEF0b20gYXRvbTsKICAgICAgICBUaW1lIHRpbWU7CiAgICAg
ICAgaW50IHN0YXRlOwp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5k
X2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsK
ICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkNs
ZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh
eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgb3duZXI7CiAgICAgICAgV2luZG93IHJlcXVlc3Rv
cjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdldDsKICAgICAgICBB
dG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxv
bmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3Bs
YXk7CiAgICAgICAgV2luZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAg
ICAgICBBdG9tIHRhcmdldDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGlt
ZTsKfSBYU2VsZWN0aW9uRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIENv
bG9ybWFwIGNvbG9ybWFwOwoKCgogICAgICAgIGludCBuZXc7CgogICAgICAgIGludCBzdGF0ZTsK
fSBYQ29sb3JtYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAg
ICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAg
ICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgQXRvbSBt
ZXNzYWdlX3R5cGU7CiAgICAgICAgaW50IGZvcm1hdDsKICAgICAgICB1bmlvbiB7CiAgICAgICAg
ICAgICAgICBjaGFyIGJbMjBdOwogICAgICAgICAgICAgICAgc2hvcnQgc1sxMF07CiAgICAgICAg
ICAgICAgICBsb25nIGxbNV07CiAgICAgICAgICAgICAgICB9IGRhdGE7Cn0gWENsaWVudE1lc3Nh
Z2VFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp
Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5
ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHJlcXVlc3Q7Cgog
ICAgICAgIGludCBmaXJzdF9rZXljb2RlOwogICAgICAgIGludCBjb3VudDsKfSBYTWFwcGluZ0V2
ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIERpc3BsYXkg
KmRpc3BsYXk7CiAgICAgICAgWElEIHJlc291cmNlaWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz
ZXJpYWw7CiAgICAgICAgdW5zaWduZWQgY2hhciBlcnJvcl9jb2RlOwogICAgICAgIHVuc2lnbmVk
IGNoYXIgcmVxdWVzdF9jb2RlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbWlub3JfY29kZTsKfSBY
RXJyb3JFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1
bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNw
bGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWEFueUV2ZW50OwoKCgoKCnR5
cGVkZWYgdW5pb24gX1hFdmVudCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgWEFueUV2ZW50
IHhhbnk7CiAgICAgICAgWEtleUV2ZW50IHhrZXk7CiAgICAgICAgWEJ1dHRvbkV2ZW50IHhidXR0
b247CiAgICAgICAgWE1vdGlvbkV2ZW50IHhtb3Rpb247CiAgICAgICAgWENyb3NzaW5nRXZlbnQg
eGNyb3NzaW5nOwogICAgICAgIFhGb2N1c0NoYW5nZUV2ZW50IHhmb2N1czsKICAgICAgICBYRXhw
b3NlRXZlbnQgeGV4cG9zZTsKICAgICAgICBYR3JhcGhpY3NFeHBvc2VFdmVudCB4Z3JhcGhpY3Nl
eHBvc2U7CiAgICAgICAgWE5vRXhwb3NlRXZlbnQgeG5vZXhwb3NlOwogICAgICAgIFhWaXNpYmls
aXR5RXZlbnQgeHZpc2liaWxpdHk7CiAgICAgICAgWENyZWF0ZVdpbmRvd0V2ZW50IHhjcmVhdGV3
aW5kb3c7CiAgICAgICAgWERlc3Ryb3lXaW5kb3dFdmVudCB4ZGVzdHJveXdpbmRvdzsKICAgICAg
ICBYVW5tYXBFdmVudCB4dW5tYXA7CiAgICAgICAgWE1hcEV2ZW50IHhtYXA7CiAgICAgICAgWE1h
cFJlcXVlc3RFdmVudCB4bWFwcmVxdWVzdDsKICAgICAgICBYUmVwYXJlbnRFdmVudCB4cmVwYXJl
bnQ7CiAgICAgICAgWENvbmZpZ3VyZUV2ZW50IHhjb25maWd1cmU7CiAgICAgICAgWEdyYXZpdHlF
dmVudCB4Z3Jhdml0eTsKICAgICAgICBYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0
OwogICAgICAgIFhDb25maWd1cmVSZXF1ZXN0RXZlbnQgeGNvbmZpZ3VyZXJlcXVlc3Q7CiAgICAg
ICAgWENpcmN1bGF0ZUV2ZW50IHhjaXJjdWxhdGU7CiAgICAgICAgWENpcmN1bGF0ZVJlcXVlc3RF
dmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsKICAgICAgICBYUHJvcGVydHlFdmVudCB4cHJvcGVydHk7
CiAgICAgICAgWFNlbGVjdGlvbkNsZWFyRXZlbnQgeHNlbGVjdGlvbmNsZWFyOwogICAgICAgIFhT
ZWxlY3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CiAgICAgICAgWFNlbGVjdGlv
bkV2ZW50IHhzZWxlY3Rpb247CiAgICAgICAgWENvbG9ybWFwRXZlbnQgeGNvbG9ybWFwOwogICAg
ICAgIFhDbGllbnRNZXNzYWdlRXZlbnQgeGNsaWVudDsKICAgICAgICBYTWFwcGluZ0V2ZW50IHht
YXBwaW5nOwogICAgICAgIFhFcnJvckV2ZW50IHhlcnJvcjsKICAgICAgICBYS2V5bWFwRXZlbnQg
eGtleW1hcDsKICAgICAgICBsb25nIHBhZFsyNF07Cn0gWEV2ZW50OwoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgc2hvcnQgbGJlYXJpbmc7CiAgICBzaG9ydCByYmVhcmluZzsKICAgIHNob3J0
IHdpZHRoOwogICAgc2hvcnQgYXNjZW50OwogICAgc2hvcnQgZGVzY2VudDsKICAgIHVuc2lnbmVk
IHNob3J0IGF0dHJpYnV0ZXM7Cn0gWENoYXJTdHJ1Y3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgQXRvbSBuYW1lOwogICAgdW5zaWduZWQgbG9uZyBjYXJkMzI7Cn0gWEZvbnRQcm9wOwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgWEV4dERhdGEgKmV4dF9kYXRhOwogICAgRm9udCBmaWQ7CiAgICB1
bnNpZ25lZCBkaXJlY3Rpb247CiAgICB1bnNpZ25lZCBtaW5fY2hhcl9vcl9ieXRlMjsKICAgIHVu
c2lnbmVkIG1heF9jaGFyX29yX2J5dGUyOwogICAgdW5zaWduZWQgbWluX2J5dGUxOwogICAgdW5z
aWduZWQgbWF4X2J5dGUxOwogICAgaW50IGFsbF9jaGFyc19leGlzdDsKICAgIHVuc2lnbmVkIGRl
ZmF1bHRfY2hhcjsKICAgIGludCBuX3Byb3BlcnRpZXM7CiAgICBYRm9udFByb3AgKnByb3BlcnRp
ZXM7CiAgICBYQ2hhclN0cnVjdCBtaW5fYm91bmRzOwogICAgWENoYXJTdHJ1Y3QgbWF4X2JvdW5k
czsKICAgIFhDaGFyU3RydWN0ICpwZXJfY2hhcjsKICAgIGludCBhc2NlbnQ7CiAgICBpbnQgZGVz
Y2VudDsKfSBYRm9udFN0cnVjdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgKmNoYXJz
OwogICAgaW50IG5jaGFyczsKICAgIGludCBkZWx0YTsKICAgIEZvbnQgZm9udDsKfSBYVGV4dEl0
ZW07Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUxOwogICAgdW5zaWdu
ZWQgY2hhciBieXRlMjsKfSBYQ2hhcjJiOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWENoYXIyYiAq
Y2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAgaW50IGRlbHRhOwogICAgRm9udCBmb250Owp9IFhU
ZXh0SXRlbTE2OwoKCnR5cGVkZWYgdW5pb24geyBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgICAg
ICAgICAgR0MgZ2M7CiAgICAgICAgICAgICAgICBWaXN1YWwgKnZpc3VhbDsKICAgICAgICAgICAg
ICAgIFNjcmVlbiAqc2NyZWVuOwogICAgICAgICAgICAgICAgU2NyZWVuRm9ybWF0ICpwaXhtYXBf
Zm9ybWF0OwogICAgICAgICAgICAgICAgWEZvbnRTdHJ1Y3QgKmZvbnQ7IH0gWEVEYXRhT2JqZWN0
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWFJlY3RhbmdsZSBtYXhfaW5rX2V4dGVudDsKICAgIFhS
ZWN0YW5nbGUgbWF4X2xvZ2ljYWxfZXh0ZW50Owp9IFhGb250U2V0RXh0ZW50czsKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfWE9NICpYT007CnR5cGVkZWYgc3RydWN0IF9YT0MgKlhPQywgKlhGb250U2V0
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAg
aW50IGRlbHRhOwogICAgWEZvbnRTZXQgZm9udF9zZXQ7Cn0gWG1iVGV4dEl0ZW07Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgICB3Y2hhcl90ICpjaGFyczsKICAgIGludCBuY2hhcnM7CiAgICBpbnQgZGVs
dGE7CiAgICBYRm9udFNldCBmb250X3NldDsKfSBYd2NUZXh0SXRlbTsKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IGNoYXJzZXRfY291bnQ7CiAgICBjaGFyICoqY2hhcnNldF9saXN0Owp9IFhPTUNo
YXJTZXRMaXN0OwoKdHlwZWRlZiBlbnVtIHsKICAgIFhPTU9yaWVudGF0aW9uX0xUUl9UVEIsCiAg
ICBYT01PcmllbnRhdGlvbl9SVExfVFRCLAogICAgWE9NT3JpZW50YXRpb25fVFRCX0xUUiwKICAg
IFhPTU9yaWVudGF0aW9uX1RUQl9SVEwsCiAgICBYT01PcmllbnRhdGlvbl9Db250ZXh0Cn0gWE9y
aWVudGF0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IG51bV9vcmllbnRhdGlvbjsKICAg
IFhPcmllbnRhdGlvbiAqb3JpZW50YXRpb247Cn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0
cnVjdCB7CiAgICBpbnQgbnVtX2ZvbnQ7CiAgICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xp
c3Q7CiAgICBjaGFyICoqZm9udF9uYW1lX2xpc3Q7Cn0gWE9NRm9udEluZm87Cgp0eXBlZGVmIHN0
cnVjdCBfWElNICpYSU07CnR5cGVkZWYgc3RydWN0IF9YSUMgKlhJQzsKCnR5cGVkZWYgdm9pZCAo
KlhJTVByb2MpKAoKICAgIFhJTSwKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIKCik7Cgp0eXBl
ZGVmIGludCAoKlhJQ1Byb2MpKAoKICAgIFhJQywKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpYSURQcm9jKSgKCiAgICBEaXNwbGF5KiwKICAgIFhQb2ludGVy
LAogICAgWFBvaW50ZXIKCik7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNU3R5bGU7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBzaG9ydCBjb3VudF9zdHlsZXM7CiAgICBYSU1TdHls
ZSAqc3VwcG9ydGVkX3N0eWxlczsKfSBYSU1TdHlsZXM7CnR5cGVkZWYgdm9pZCAqWFZhTmVzdGVk
TGlzdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQb2ludGVyIGNsaWVudF9kYXRhOwogICAg
WElNUHJvYyBjYWxsYmFjazsKfSBYSU1DYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQ
b2ludGVyIGNsaWVudF9kYXRhOwogICAgWElDUHJvYyBjYWxsYmFjazsKfSBYSUNDYWxsYmFjazsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1GZWVkYmFjazsKdHlwZWRlZiBzdHJ1Y3QgX1hJTVRl
eHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNRmVlZGJhY2sgKmZlZWRiYWNr
OwogICAgaW50IGVuY29kaW5nX2lzX3djaGFyOwogICAgdW5pb24gewogICAgICAgIGNoYXIgKm11
bHRpX2J5dGU7CiAgICAgICAgd2NoYXJfdCAqd2lkZV9jaGFyOwogICAgfSBzdHJpbmc7Cn0gWElN
VGV4dDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1QcmVlZGl0U3RhdGU7CgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX1hJTVByZWVkaXRTdGF0ZU5vdGlmeUNhbGxiYWNrU3RydWN0IHsKICAgIFhJTVBy
ZWVkaXRTdGF0ZSBzdGF0ZTsKfSBYSU1QcmVlZGl0U3RhdGVOb3RpZnlDYWxsYmFja1N0cnVjdDsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1SZXNldFN0YXRlOwoKCgoKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIFhJTVN0cmluZ0NvbnZlcnNpb25GZWVkYmFjazsKdHlwZWRlZiBzdHJ1Y3QgX1hJTVN0
cmluZ0NvbnZlcnNpb25UZXh0IHsKICAgIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsKICAgIFhJTVN0
cmluZ0NvbnZlcnNpb25GZWVkYmFjayAqZmVlZGJhY2s7CiAgICBpbnQgZW5jb2RpbmdfaXNfd2No
YXI7CiAgICB1bmlvbiB7CiAgICAgICAgY2hhciAqbWJzOwogICAgICAgIHdjaGFyX3QgKndjczsK
ICAgIH0gc3RyaW5nOwp9IFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0OwoKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBYSU1TdHJpbmdDb252ZXJzaW9uUG9zaXRpb247Cgp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IFhJTVN0cmluZ0NvbnZlcnNpb25UeXBlOwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IFhJTVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb247CgoKCgp0eXBlZGVmIGVudW0gewogICAgWElN
Rm9yd2FyZENoYXIsIFhJTUJhY2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBYSU1CYWNr
d2FyZFdvcmQsCiAgICBYSU1DYXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0TGluZSwg
WElNUHJldmlvdXNMaW5lLAogICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLAogICAgWElNQWJz
b2x1dGVQb3NpdGlvbiwKICAgIFhJTURvbnRDaGFuZ2UKfSBYSU1DYXJldERpcmVjdGlvbjsKCnR5
cGVkZWYgc3RydWN0IF9YSU1TdHJpbmdDb252ZXJzaW9uQ2FsbGJhY2tTdHJ1Y3QgewogICAgWElN
U3RyaW5nQ29udmVyc2lvblBvc2l0aW9uIHBvc2l0aW9uOwogICAgWElNQ2FyZXREaXJlY3Rpb24g
ZGlyZWN0aW9uOwogICAgWElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbiBvcGVyYXRpb247CiAg
ICB1bnNpZ25lZCBzaG9ydCBmYWN0b3I7CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uVGV4dCAqdGV4
dDsKfSBYSU1TdHJpbmdDb252ZXJzaW9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCBf
WElNUHJlZWRpdERyYXdDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgY2FyZXQ7CiAgICBpbnQgY2hn
X2ZpcnN0OwogICAgaW50IGNoZ19sZW5ndGg7CiAgICBYSU1UZXh0ICp0ZXh0Owp9IFhJTVByZWVk
aXREcmF3Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIGVudW0gewogICAgWElNSXNJbnZpc2libGUs
CiAgICBYSU1Jc1ByaW1hcnksCiAgICBYSU1Jc1NlY29uZGFyeQp9IFhJTUNhcmV0U3R5bGU7Cgp0
eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IHBv
c2l0aW9uOwogICAgWElNQ2FyZXREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgWElNQ2FyZXRTdHls
ZSBzdHlsZTsKfSBYSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7
CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJpdG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRhVHlwZTsK
CnR5cGVkZWYgc3RydWN0IF9YSU1TdGF0dXNEcmF3Q2FsbGJhY2tTdHJ1Y3QgewogICAgWElNU3Rh
dHVzRGF0YVR5cGUgdHlwZTsKICAgIHVuaW9uIHsKICAgICAgICBYSU1UZXh0ICp0ZXh0OwogICAg
ICAgIFBpeG1hcCBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3RhdHVzRHJhd0NhbGxiYWNrU3Ry
dWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIgewogICAgS2V5U3ltIGtleXN5
bTsKICAgIGludCBtb2RpZmllcjsKICAgIGludCBtb2RpZmllcl9tYXNrOwp9IFhJTUhvdEtleVRy
aWdnZXI7Cgp0eXBlZGVmIHN0cnVjdCBfWElNSG90S2V5VHJpZ2dlcnMgewogICAgaW50IG51bV9o
b3Rfa2V5OwogICAgWElNSG90S2V5VHJpZ2dlciAqa2V5Owp9IFhJTUhvdEtleVRyaWdnZXJzOwoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTUhvdEtleVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFsdWVzOwogICAgY2hhciAqKnN1cHBvcnRlZF92
YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCgoKCgoKCmV4dGVybiBpbnQgX1hkZWJ1ZzsKCmV4dGVy
biBYRm9udFN0cnVjdCAqWExvYWRRdWVyeUZvbnQoCgogICAgRGlzcGxheSogLAogICAgY29uc3Qg
Y2hhcioKCik7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVyeUZvbnQoCgogICAgRGlzcGxheSog
LAogICAgWElECgopOwoKCmV4dGVybiBYVGltZUNvb3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBUaW1lICwKICAgIFRpbWUgLAogICAgaW50KgoK
KTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhEZWxldGVNb2RpZmllcm1hcEVudHJ5KAoKICAg
IFhNb2RpZmllcktleW1hcCogLAoKICAgIHVuc2lnbmVkIGludCAsCgoKCiAgICBpbnQKCik7Cgpl
eHRlcm4gWE1vZGlmaWVyS2V5bWFwICpYR2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkq
CgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWEluc2VydE1vZGlmaWVybWFwRW50cnkoCgog
ICAgWE1vZGlmaWVyS2V5bWFwKiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAgIGludAoKKTsK
CmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2RpZmllcm1hcCgKCiAgICBpbnQKCik7Cgpl
eHRlcm4gWEltYWdlICpYQ3JlYXRlSW1hZ2UoCgogICAgRGlzcGxheSogLAogICAgVmlzdWFsKiAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjaGFyKiAsCiAgICB1
bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CmV4
dGVybiBpbnQgWEluaXRJbWFnZSgKCiAgICBYSW1hZ2UqCgopOwpleHRlcm4gWEltYWdlICpYR2V0
SW1hZ2UoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgaW50ICwKICAgIGludCAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcg
LAogICAgaW50CgopOwpleHRlcm4gWEltYWdlICpYR2V0U3ViSW1hZ2UoCgogICAgRGlzcGxheSog
LAogICAgRHJhd2FibGUgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAog
ICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIFhJbWFn
ZSogLAogICAgaW50ICwKICAgIGludAoKKTsKCgoKCmV4dGVybiBEaXNwbGF5ICpYT3BlbkRpc3Bs
YXkoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYcm1Jbml0aWFsaXplKAoKICAg
IHZvaWQKCik7CgpleHRlcm4gY2hhciAqWEZldGNoQnl0ZXMoCgogICAgRGlzcGxheSogLAogICAg
aW50KgoKKTsKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQqICwKICAgIGludAoKKTsKZXh0ZXJuIGNoYXIgKlhHZXRBdG9tTmFtZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBBdG9tCgopOwpleHRlcm4gaW50IFhHZXRBdG9tTmFtZXMoCgogICAgRGlzcGxheSog
LAogICAgQXRvbSogLAogICAgaW50ICwKICAgIGNoYXIqKgoKKTsKZXh0ZXJuIGNoYXIgKlhHZXRE
ZWZhdWx0KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIq
CgopOwpleHRlcm4gY2hhciAqWERpc3BsYXlOYW1lKAoKICAgIGNvbnN0IGNoYXIqCgopOwpleHRl
cm4gY2hhciAqWEtleXN5bVRvU3RyaW5nKAoKICAgIEtleVN5bQoKKTsKCmV4dGVybiBpbnQgKCpY
U3luY2hyb25pemUoCgogICAgRGlzcGxheSogLAogICAgaW50CgopKSgKCiAgICBEaXNwbGF5KgoK
KTsKZXh0ZXJuIGludCAoKlhTZXRBZnRlckZ1bmN0aW9uKAoKICAgIERpc3BsYXkqICwKICAgIGlu
dCAoKikgKAoKICAgICAgICAgICAgIERpc3BsYXkqCgogICAgICAgICAgICApCgopKSgKCiAgICBE
aXNwbGF5KgoKKTsKZXh0ZXJuIEF0b20gWEludGVybkF0b20oCgogICAgRGlzcGxheSogLAogICAg
Y29uc3QgY2hhciogLAogICAgaW50CgopOwpleHRlcm4gaW50IFhJbnRlcm5BdG9tcygKCiAgICBE
aXNwbGF5KiAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIGludCAsCiAgICBBdG9tKgoKKTsK
ZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIERpc3BsYXkqICwKICAg
IENvbG9ybWFwCgopOwpleHRlcm4gQ29sb3JtYXAgWENyZWF0ZUNvbG9ybWFwKAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdyAsCiAgICBWaXN1YWwqICwKICAgIGludAoKKTsKZXh0ZXJuIEN1cnNv
ciBYQ3JlYXRlUGl4bWFwQ3Vyc29yKAoKICAgIERpc3BsYXkqICwKICAgIFBpeG1hcCAsCiAgICBQ
aXhtYXAgLAogICAgWENvbG9yKiAsCiAgICBYQ29sb3IqICwKICAgIHVuc2lnbmVkIGludCAsCiAg
ICB1bnNpZ25lZCBpbnQKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZUdseXBoQ3Vyc29yKAoKICAg
IERpc3BsYXkqICwKICAgIEZvbnQgLAogICAgRm9udCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIFhDb2xvciBjb25zdCAqICwKICAgIFhDb2xvciBjb25zdCAqCgop
OwpleHRlcm4gQ3Vyc29yIFhDcmVhdGVGb250Q3Vyc29yKAoKICAgIERpc3BsYXkqICwKICAgIHVu
c2lnbmVkIGludAoKKTsKZXh0ZXJuIEZvbnQgWExvYWRGb250KAoKICAgIERpc3BsYXkqICwKICAg
IGNvbnN0IGNoYXIqCgopOwpleHRlcm4gR0MgWENyZWF0ZUdDKAoKICAgIERpc3BsYXkqICwKICAg
IERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWEdDVmFsdWVzKgoKKTsKZXh0ZXJu
IEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwoKKTsKZXh0ZXJuIHZvaWQgWEZsdXNo
R0MoCgogICAgRGlzcGxheSogLAogICAgR0MKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZVBpeG1h
cCgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIFBpeG1hcCBYQ3JlYXRl
Qml0bWFwRnJvbURhdGEoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgY29uc3Qg
Y2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIFBp
eG1hcCBYQ3JlYXRlUGl4bWFwRnJvbUJpdG1hcERhdGEoCgogICAgRGlzcGxheSogLAogICAgRHJh
d2FibGUgLAogICAgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBsb25nICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgdW5zaWduZWQgaW50
CgopOwpleHRlcm4gV2luZG93IFhDcmVhdGVTaW1wbGVXaW5kb3coCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu
c2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICB1
bnNpZ25lZCBsb25nCgopOwpleHRlcm4gV2luZG93IFhHZXRTZWxlY3Rpb25Pd25lcigKCiAgICBE
aXNwbGF5KiAsCiAgICBBdG9tCgopOwpleHRlcm4gV2luZG93IFhDcmVhdGVXaW5kb3coCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg
aW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAg
IHVuc2lnbmVkIGludCAsCiAgICBWaXN1YWwqICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWFNl
dFdpbmRvd0F0dHJpYnV0ZXMqCgopOwpleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29s
b3JtYXBzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQqCgopOwpleHRlcm4g
Y2hhciAqKlhMaXN0Rm9udHMoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAg
aW50ICwKICAgIGludCoKCik7CmV4dGVybiBjaGFyICoqWExpc3RGb250c1dpdGhJbmZvKAoKICAg
IERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIFhG
b250U3RydWN0KioKCik7CmV4dGVybiBjaGFyICoqWEdldEZvbnRQYXRoKAoKICAgIERpc3BsYXkq
ICwKICAgIGludCoKCik7CmV4dGVybiBjaGFyICoqWExpc3RFeHRlbnNpb25zKAoKICAgIERpc3Bs
YXkqICwKICAgIGludCoKCik7CmV4dGVybiBBdG9tICpYTGlzdFByb3BlcnRpZXMoCgogICAgRGlz
cGxheSogLAogICAgV2luZG93ICwKICAgIGludCoKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhM
aXN0SG9zdHMoCgogICAgRGlzcGxheSogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwpleHRlcm4g
S2V5U3ltIFhLZXljb2RlVG9LZXlzeW0oCgogICAgRGlzcGxheSogLAoKICAgIHVuc2lnbmVkIGlu
dCAsCgoKCiAgICBpbnQKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5
RXZlbnQqICwKICAgIGludAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFwcGluZygK
CiAgICBEaXNwbGF5KiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAgIGludCAsCiAgICBpbnQq
CgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBjb25zdCBjaGFyKgoKKTsK
ZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gbG9u
ZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIg
KlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBjaGFyICpY
U2NyZWVuUmVzb3VyY2VTdHJpbmcoCgogICAgICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25l
ZCBsb25nIFhEaXNwbGF5TW90aW9uQnVmZmVyU2l6ZSgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJu
IFZpc3VhbElEIFhWaXN1YWxJREZyb21WaXN1YWwoCgogICAgVmlzdWFsKgoKKTsKCgoKZXh0ZXJu
IGludCBYSW5pdFRocmVhZHMoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFhMb2NrRGlzcGxh
eSgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiB2b2lkIFhVbmxvY2tEaXNwbGF5KAoKICAgIERp
c3BsYXkqCgopOwoKCgpleHRlcm4gWEV4dENvZGVzICpYSW5pdEV4dGVuc2lvbigKCiAgICBEaXNw
bGF5KiAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBYRXh0Q29kZXMgKlhBZGRFeHRlbnNp
b24oCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBYRXh0RGF0YSAqWEZpbmRPbkV4dGVuc2lvbkxp
c3QoCgogICAgWEV4dERhdGEqKiAsCiAgICBpbnQKCik7CmV4dGVybiBYRXh0RGF0YSAqKlhFSGVh
ZE9mRXh0ZW5zaW9uTGlzdCgKCiAgICBYRURhdGFPYmplY3QKCik7CgoKZXh0ZXJuIFdpbmRvdyBY
Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBXaW5kb3cgWERl
ZmF1bHRSb290V2luZG93KAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gV2luZG93IFhSb290V2lu
ZG93T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIFZpc3VhbCAqWERlZmF1bHRWaXN1
YWwoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gVmlzdWFsICpYRGVmYXVsdFZp
c3VhbE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CmV4dGVybiBHQyBYRGVmYXVsdEdDKAoKICAg
IERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIEdDIFhEZWZhdWx0R0NPZlNjcmVlbigKCiAg
ICBTY3JlZW4qCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYQmxhY2tQaXhlbCgKCiAgICBEaXNw
bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhXaGl0ZVBpeGVsKAoKICAg
IERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEFsbFBsYW5lcygK
CiAgICB2b2lkCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYQmxhY2tQaXhlbE9mU2NyZWVuKAoK
ICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhXaGl0ZVBpeGVsT2ZTY3JlZW4o
CgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWE5leHRSZXF1ZXN0KAoKICAg
IERpc3BsYXkqCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYTGFzdEtub3duUmVxdWVzdFByb2Nl
c3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIgKlhTZXJ2ZXJWZW5kb3IoCgogICAg
RGlzcGxheSoKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheVN0cmluZygKCiAgICBEaXNwbGF5KgoK
KTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXAoCgogICAgRGlzcGxheSogLAogICAg
aW50CgopOwpleHRlcm4gQ29sb3JtYXAgWERlZmF1bHRDb2xvcm1hcE9mU2NyZWVuKAoKICAgIFNj
cmVlbioKCik7CmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mU2NyZWVuKAoKICAgIFNjcmVlbioK
Cik7CmV4dGVybiBTY3JlZW4gKlhTY3JlZW5PZkRpc3BsYXkoCgogICAgRGlzcGxheSogLAogICAg
aW50CgopOwpleHRlcm4gU2NyZWVuICpYRGVmYXVsdFNjcmVlbk9mRGlzcGxheSgKCiAgICBEaXNw
bGF5KgoKKTsKZXh0ZXJuIGxvbmcgWEV2ZW50TWFza09mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7
CgpleHRlcm4gaW50IFhTY3JlZW5OdW1iZXJPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKdHlw
ZWRlZiBpbnQgKCpYRXJyb3JIYW5kbGVyKSAoCgogICAgRGlzcGxheSogLAogICAgWEVycm9yRXZl
bnQqCgopOwoKZXh0ZXJuIFhFcnJvckhhbmRsZXIgWFNldEVycm9ySGFuZGxlciAoCgogICAgWEVy
cm9ySGFuZGxlcgoKKTsKCgp0eXBlZGVmIGludCAoKlhJT0Vycm9ySGFuZGxlcikgKAoKICAgIERp
c3BsYXkqCgopOwoKZXh0ZXJuIFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoK
ICAgIFhJT0Vycm9ySGFuZGxlcgoKKTsKCgpleHRlcm4gWFBpeG1hcEZvcm1hdFZhbHVlcyAqWExp
c3RQaXhtYXBGb3JtYXRzKAoKICAgIERpc3BsYXkqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQg
KlhMaXN0RGVwdGhzKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQqCgopOwoKCgpl
eHRlcm4gaW50IFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRv
dyAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFhXaW5kb3dDaGFuZ2VzKgoKKTsK
CmV4dGVybiBpbnQgWEdldFdNUHJvdG9jb2xzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs
CiAgICBBdG9tKiogLAogICAgaW50KgoKKTsKZXh0ZXJuIGludCBYU2V0V01Qcm90b2NvbHMoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIEF0b20qICwKICAgIGludAoKKTsKZXh0ZXJu
IGludCBYSWNvbmlmeVdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50
CgopOwpleHRlcm4gaW50IFhXaXRoZHJhd1dpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgaW50CgopOwpleHRlcm4gaW50IFhHZXRDb21tYW5kKAoKICAgIERpc3BsYXkqICwK
ICAgIFdpbmRvdyAsCiAgICBjaGFyKioqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQgWEdldFdN
Q29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cq
KiAsCiAgICBpbnQqCgopOwpleHRlcm4gaW50IFhTZXRXTUNvbG9ybWFwV2luZG93cygKCiAgICBE
aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KiAsCiAgICBpbnQKCik7CmV4dGVybiB2
b2lkIFhGcmVlU3RyaW5nTGlzdCgKCiAgICBjaGFyKioKCik7CmV4dGVybiBpbnQgWFNldFRyYW5z
aWVudEZvckhpbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdwoKKTsK
CgoKZXh0ZXJuIGludCBYQWN0aXZhdGVTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWEFkZEhvc3QoCgogICAgRGlzcGxheSogLAogICAgWEhvc3RBZGRyZXNzKgoKKTsK
CmV4dGVybiBpbnQgWEFkZEhvc3RzKAoKICAgIERpc3BsYXkqICwKICAgIFhIb3N0QWRkcmVzcyog
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQWRkVG9FeHRlbnNpb25MaXN0KAoKICAgIHN0cnVj
dCBfWEV4dERhdGEqKiAsCiAgICBYRXh0RGF0YSoKCik7CgpleHRlcm4gaW50IFhBZGRUb1NhdmVT
ZXQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQWxsb2NDb2xv
cigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqCgopOwoKZXh0ZXJu
IGludCBYQWxsb2NDb2xvckNlbGxzKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAg
IGludCAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWdu
ZWQgbG9uZyogLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYQWxsb2NDb2xvclBs
YW5lcygKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgbG9uZyogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVu
c2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGxvbmcqCgop
OwoKZXh0ZXJuIGludCBYQWxsb2NOYW1lZENvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9y
bWFwICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsKCmV4
dGVybiBpbnQgWEFsbG93RXZlbnRzKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBUaW1l
CgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9mZigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVy
biBpbnQgWEF1dG9SZXBlYXRPbigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJlbGwo
CgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIo
CgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoK
Cik7CgpleHRlcm4gaW50IFhCaXRtYXBVbml0KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGlu
dCBYQ2VsbHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0
aXZlUG9pbnRlckdyYWIoCgogICAgRGlzcGxheSogLAogICAgdW5zaWduZWQgaW50ICwKICAgIEN1
cnNvciAsCiAgICBUaW1lCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlR0MoCgogICAgRGlzcGxheSog
LAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBYR0NWYWx1ZXMqCgopOwoKZXh0ZXJu
IGludCBYQ2hhbmdlS2V5Ym9hcmRDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVk
IGxvbmcgLAogICAgWEtleWJvYXJkQ29udHJvbCoKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXli
b2FyZE1hcHBpbmcoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGludCAsCiAgICBLZXlT
eW0qICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVBvaW50ZXJDb250cm9sKAoKICAg
IERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cgLAogICAgQXRvbSAsCiAgICBBdG9tICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29u
c3QgdW5zaWduZWQgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlU2F2ZVNl
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY
Q2hhbmdlV2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
dW5zaWduZWQgbG9uZyAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyoKCik7CgpleHRlcm4gaW50
IFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KiAsCiAgICBpbnQgKCop
ICgKCiAgICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAgICAgICAgWEV2ZW50KiAsCiAg
ICAgICAgICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAsCiAgICBYUG9pbnRlcgoKKTsK
CmV4dGVybiBpbnQgWENoZWNrTWFza0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIGxvbmcgLAog
ICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrVHlwZWRFdmVudCgKCiAgICBEaXNwbGF5
KiAsCiAgICBpbnQgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrVHlwZWRXaW5k
b3dFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIFhFdmVu
dCoKCik7CgpleHRlcm4gaW50IFhDaGVja1dpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAg
IFdpbmRvdyAsCiAgICBsb25nICwKICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhDaXJjdWxh
dGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzRG93bigKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cKCik7CgpleHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzVXAoCgogICAgRGlzcGxh
eSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAg
ICB1bnNpZ25lZCBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJXaW5kb3coCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNwbGF5KAoK
ICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWFdpbmRvd0NoYW5nZXMq
CgopOwoKZXh0ZXJuIGludCBYQ29ubmVjdGlvbk51bWJlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWENvbnZlcnRTZWxlY3Rpb24oCgogICAgRGlzcGxheSogLAogICAgQXRvbSAsCiAg
ICBBdG9tICwKICAgIEF0b20gLAogICAgV2luZG93ICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50
IFhDb3B5QXJlYSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBEcmF3YWJsZSAs
CiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygKCiAg
ICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIEdDCgopOwoKZXh0
ZXJuIGludCBYQ29weVBsYW5lKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIERy
YXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwK
ICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcK
Cik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGgoCgogICAgRGlzcGxheSogLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYRGVmYXVsdERlcHRoT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4
dGVybiBpbnQgWERlZmF1bHRTY3JlZW4oCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhE
ZWZpbmVDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIEN1cnNvcgoKKTsK
CmV4dGVybiBpbnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs
CiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVdpbmRvdygKCiAgICBEaXNwbGF5KiAs
CiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93cygKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhEb2VzQmFja2luZ1N0b3JlKAoKICAg
IFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhEb2VzU2F2ZVVuZGVycygKCiAgICBTY3JlZW4qCgop
OwoKZXh0ZXJuIGludCBYRGlzYWJsZUFjY2Vzc0NvbnRyb2woCgogICAgRGlzcGxheSoKCik7CgoK
ZXh0ZXJuIGludCBYRGlzcGxheUNlbGxzKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWERpc3BsYXlIZWlnaHQoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0
ZXJuIGludCBYRGlzcGxheUhlaWdodE1NKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWERpc3BsYXlLZXljb2RlcygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQqICwKICAg
IGludCoKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5UGxhbmVzKAoKICAgIERpc3BsYXkqICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aCgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5V2lkdGhNTSgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhEcmF3QXJjKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxl
ICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu
c2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3Mo
CgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWEFyYyogLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAg
IERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciog
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0ltYWdlU3RyaW5nMTYoCgogICAgRGlzcGxh
eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25z
dCBYQ2hhcjJiKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZSgKCiAgICBEaXNw
bGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGlu
dCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZXMoCgogICAgRGlzcGxheSogLAog
ICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFBvaW50KiAsCiAgICBpbnQgLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwK
ICAgIEdDICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3UG9pbnRzKAoK
ICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhQb2ludCogLAogICAg
aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxh
eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1JlY3Rhbmds
ZXMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFJlY3Rhbmds
ZSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1NlZ21lbnRzKAoKICAgIERpc3BsYXkq
ICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhTZWdtZW50KiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAg
IEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoK
ZXh0ZXJuIGludCBYRHJhd1N0cmluZzE2KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwK
ICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgWENoYXIyYiogLAogICAgaW50
CgopOwoKZXh0ZXJuIGludCBYRHJhd1RleHQoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg
LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYVGV4dEl0ZW0qICwKICAgIGludAoK
KTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg
LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYVGV4dEl0ZW0xNiogLAogICAgaW50
CgopOwoKZXh0ZXJuIGludCBYRW5hYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgoKKTsK
CmV4dGVybiBpbnQgWEV2ZW50c1F1ZXVlZCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhGZXRjaE5hbWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNo
YXIqKgoKKTsKCmV4dGVybiBpbnQgWEZpbGxBcmMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsQXJj
cygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYQXJjKiAsCiAg
ICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUG9seWdvbigKCiAgICBEaXNwbGF5KiAsCiAgICBE
cmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUG9pbnQqICwKICAgIGludCAsCiAgICBpbnQgLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYRmlsbFJlY3RhbmdsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBE
cmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlcygKCiAgICBE
aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhGbHVzaCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQg
WEZvcmNlU2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGlu
dCBYRnJlZSgKCiAgICB2b2lkKgoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcm1hcCgKCiAgICBE
aXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAg
RGlzcGxheSogLAogICAgQ29sb3JtYXAgLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhGcmVlQ3Vyc29yKAoKICAgIERpc3Bs
YXkqICwKICAgIEN1cnNvcgoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0KAoKICAg
IGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250KAoKICAgIERpc3BsYXkqICwKICAgIFhG
b250U3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250SW5mbygKCiAgICBjaGFyKiogLAog
ICAgWEZvbnRTdHJ1Y3QqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250TmFtZXMo
CgogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRQYXRoKAoKICAgIGNoYXIqKgoK
KTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAgICBEaXNwbGF5KiAsCiAgICBHQwoKKTsKCmV4dGVy
biBpbnQgWEZyZWVNb2RpZmllcm1hcCgKCiAgICBYTW9kaWZpZXJLZXltYXAqCgopOwoKZXh0ZXJu
IGludCBYRnJlZVBpeG1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBQaXhtYXAKCik7CgpleHRlcm4g
aW50IFhHZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciog
LAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGlu
dCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JEYXRhYmFz
ZVRleHQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciog
LAogICAgY29uc3QgY2hhciogLAogICAgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY
R2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBjaGFyKiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhHZXRGb250UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqICwK
ICAgIEF0b20gLAogICAgdW5zaWduZWQgbG9uZyoKCik7CgpleHRlcm4gaW50IFhHZXRHQ1ZhbHVl
cygKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhHQ1Zh
bHVlcyoKCik7CgpleHRlcm4gaW50IFhHZXRHZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBE
cmF3YWJsZSAsCiAgICBXaW5kb3cqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICB1bnNpZ25l
ZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNp
Z25lZCBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0SWNvbk5hbWUoCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEdldElucHV0Rm9jdXMoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0
S2V5Ym9hcmRDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIFhLZXlib2FyZFN0YXRlKgoKKTsK
CmV4dGVybiBpbnQgWEdldFBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIGludCog
LAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlck1hcHBpbmco
CgogICAgRGlzcGxheSogLAogICAgdW5zaWduZWQgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJu
IGludCBYR2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSogLAogICAgaW50KiAsCiAgICBpbnQq
ICwKICAgIGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWEdldFRyYW5zaWVudEZvckhp
bnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyoKCik7CgpleHRlcm4g
aW50IFhHZXRXaW5kb3dQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
QXRvbSAsCiAgICBsb25nICwKICAgIGxvbmcgLAogICAgaW50ICwKICAgIEF0b20gLAogICAgQXRv
bSogLAogICAgaW50KiAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBsb25nKiAs
CiAgICB1bnNpZ25lZCBjaGFyKioKCik7CgpleHRlcm4gaW50IFhHZXRXaW5kb3dBdHRyaWJ1dGVz
KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYV2luZG93QXR0cmlidXRlcyoKCik7
CgpleHRlcm4gaW50IFhHcmFiQnV0dG9uKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVkIGlu
dCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICB1bnNpZ25l
ZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBXaW5kb3cgLAogICAgQ3Vyc29yCgopOwoK
ZXh0ZXJuIGludCBYR3JhYktleSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWEdyYWJLZXlib2FyZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
aW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVybiBpbnQgWEdyYWJQ
b2ludGVyKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgV2luZG93ICwKICAgIEN1cnNvciAsCiAg
ICBUaW1lCgopOwoKZXh0ZXJuIGludCBYR3JhYlNlcnZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWEhlaWdodE1NT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQg
WEhlaWdodE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhJZkV2ZW50KAoK
ICAgIERpc3BsYXkqICwKICAgIFhFdmVudCogLAogICAgaW50ICgqKSAoCgogICAgICAgICAgICAg
ICBEaXNwbGF5KiAsCiAgICAgICAgICAgICAgIFhFdmVudCogLAogICAgICAgICAgICAgICBYUG9p
bnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50ZXIKCik7CgpleHRlcm4gaW50IFhJbWFn
ZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEluc3RhbGxDb2xvcm1h
cCgKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBLZXlDb2RlIFhLZXlz
eW1Ub0tleWNvZGUoCgogICAgRGlzcGxheSogLAogICAgS2V5U3ltCgopOwoKZXh0ZXJuIGludCBY
S2lsbENsaWVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSUQKCik7CgpleHRlcm4gaW50IFhMb29r
dXBDb2xvcigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBjb25zdCBjaGFyKiAs
CiAgICBYQ29sb3IqICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhMb3dlcldpbmRvdygK
CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBSYWlzZWQoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYTWFwU3Vid2luZG93cygK
CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBXaW5kb3coCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYTWFza0V2ZW50KAoKICAg
IERpc3BsYXkqICwKICAgIGxvbmcgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWE1heENt
YXBzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWE1pbkNtYXBzT2ZTY3Jl
ZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWE1vdmVSZXNpemVXaW5kb3coCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg
aW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBpbnQgWE1vdmVXaW5kb3coCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50
IFhOZXh0RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQg
WE5vT3AoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhQYXJzZUNvbG9yKAoKICAgIERp
c3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhDb2xvcioKCik7
CgpleHRlcm4gaW50IFhQYXJzZUdlb21ldHJ5KAoKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCog
LAogICAgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCoKCik7Cgpl
eHRlcm4gaW50IFhQZWVrRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KgoKKTsKCmV4
dGVybiBpbnQgWFBlZWtJZkV2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIFhFdmVudCogLAogICAg
aW50ICgqKSAoCgogICAgICAgICAgICAgICBEaXNwbGF5KiAsCiAgICAgICAgICAgICAgIFhFdmVu
dCogLAogICAgICAgICAgICAgICBYUG9pbnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50
ZXIKCik7CgpleHRlcm4gaW50IFhQZW5kaW5nKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGlu
dCBYUGxhbmVzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKCik7CgpleHRlcm4gaW50IFhQcm90b2Nv
bFJldmlzaW9uKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYUHJvdG9jb2xWZXJzaW9u
KAoKICAgIERpc3BsYXkqCgopOwoKCmV4dGVybiBpbnQgWFB1dEJhY2tFdmVudCgKCiAgICBEaXNw
bGF5KiAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYUHV0SW1hZ2UoCgogICAgRGlzcGxh
eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWEltYWdlKiAsCiAgICBpbnQgLAogICAg
aW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk
IGludAoKKTsKCmV4dGVybiBpbnQgWFFMZW5ndGgoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4g
aW50IFhRdWVyeUJlc3RDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAg
IHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhRdWVyeUJlc3RTaXplKAoKICAgIERpc3Bs
YXkqICwKICAgIGludCAsCiAgICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4
dGVybiBpbnQgWFF1ZXJ5QmVzdFN0aXBwbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg
LAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQq
ICwKICAgIHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhRdWVyeUJlc3RUaWxlKAoKICAg
IERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25l
ZCBpbnQgLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqCgopOwoKZXh0ZXJu
IGludCBYUXVlcnlDb2xvcigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29s
b3IqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlDb2xvcnMoCgogICAgRGlzcGxheSogLAogICAgQ29s
b3JtYXAgLAogICAgWENvbG9yKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhRdWVyeUV4dGVu
c2lvbigKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQqICwKICAgIGlu
dCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5S2V5bWFwKAoKICAgIERpc3BsYXkq
ICwKICAgIGNoYXIgWzMyXQoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5UG9pbnRlcigKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqICwKICAgIGludCog
LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsK
CmV4dGVybiBpbnQgWFF1ZXJ5VGV4dEV4dGVudHMoCgogICAgRGlzcGxheSogLAogICAgWElEICwK
ICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50
KiAsCiAgICBYQ2hhclN0cnVjdCoKCik7CgpleHRlcm4gaW50IFhRdWVyeVRleHRFeHRlbnRzMTYo
CgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGludCAs
CiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBYQ2hhclN0cnVjdCoKCik7Cgpl
eHRlcm4gaW50IFhRdWVyeVRyZWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdp
bmRvdyogLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqKiAsCiAgICB1bnNpZ25lZCBpbnQqCgop
OwoKZXh0ZXJuIGludCBYUmFpc2VXaW5kb3coCgogICAgRGlzcGxheSogLAogICAgV2luZG93Cgop
OwoKZXh0ZXJuIGludCBYUmVhZEJpdG1hcEZpbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBp
bnQqICwKICAgIFBpeG1hcCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBY
UmVhZEJpdG1hcEZpbGVEYXRhKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIHVuc2lnbmVkIGludCog
LAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBjaGFyKiogLAogICAgaW50KiAsCiAg
ICBpbnQqCgopOwoKZXh0ZXJuIGludCBYUmViaW5kS2V5c3ltKAoKICAgIERpc3BsYXkqICwKICAg
IEtleVN5bSAsCiAgICBLZXlTeW0qICwKICAgIGludCAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhSZWNvbG9yQ3Vyc29yKAoKICAgIERpc3BsYXkq
ICwKICAgIEN1cnNvciAsCiAgICBYQ29sb3IqICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50
IFhSZWZyZXNoS2V5Ym9hcmRNYXBwaW5nKAoKICAgIFhNYXBwaW5nRXZlbnQqCgopOwoKZXh0ZXJu
IGludCBYUmVtb3ZlRnJvbVNhdmVTZXQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoK
ZXh0ZXJuIGludCBYUmVtb3ZlSG9zdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSG9zdEFkZHJlc3Mq
CgopOwoKZXh0ZXJuIGludCBYUmVtb3ZlSG9zdHMoCgogICAgRGlzcGxheSogLAogICAgWEhvc3RB
ZGRyZXNzKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhSZXBhcmVudFdpbmRvdygKCiAgICBE
aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQKCik7
CgpleHRlcm4gaW50IFhSZXNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJu
IGludCBYUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYUmVzdGFja1dpbmRv
d3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50
IFhSb3RhdGVCdWZmZXJzKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFJvdGF0ZVdpbmRvd1Byb3BlcnRpZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg
IEF0b20qICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTY3JlZW5Db3VudCgK
CiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFNlbGVjdElucHV0KAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBsb25nCgopOwoKZXh0ZXJuIGludCBYU2VuZEV2ZW50KAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgbG9uZyAsCiAgICBYRXZlbnQq
CgopOwoKZXh0ZXJuIGludCBYU2V0QWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhTZXRBcmNNb2RlKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK
ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEJhY2tncm91bmQoCgogICAgRGlzcGxheSogLAog
ICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldENsaXBNYXNrKAoK
ICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldENs
aXBPcmlnaW4oCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsK
CmV4dGVybiBpbnQgWFNldENsaXBSZWN0YW5nbGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK
ICAgIGludCAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgaW50ICwKICAgIGludAoK
KTsKCmV4dGVybiBpbnQgWFNldENsb3NlRG93bk1vZGUoCgogICAgRGlzcGxheSogLAogICAgaW50
CgopOwoKZXh0ZXJuIGludCBYU2V0Q29tbWFuZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg
LAogICAgY2hhcioqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldERhc2hlcygKCiAgICBE
aXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYU2V0RmlsbFJ1bGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFN0eWxlKAoKICAgIERpc3BsYXkqICwKICAgIEdD
ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnQoCgogICAgRGlzcGxheSogLAogICAg
R0MgLAogICAgRm9udAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnRQYXRoKAoKICAgIERpc3BsYXkq
ICwKICAgIGNoYXIqKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGb3JlZ3JvdW5kKAoK
ICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50
IFhTZXRGdW5jdGlvbigKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQKCik7CgpleHRl
cm4gaW50IFhTZXRHcmFwaGljc0V4cG9zdXJlcygKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAg
ICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRJY29uTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cgLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gaW50IFhTZXRJbnB1dEZvY3VzKAoK
ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVy
biBpbnQgWFNldExpbmVBdHRyaWJ1dGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVu
c2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFNldE1vZGlmaWVyTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICBYTW9kaWZpZXJLZXltYXAq
CgopOwoKZXh0ZXJuIGludCBYU2V0UGxhbmVNYXNrKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK
ICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRQb2ludGVyTWFwcGluZygKCiAg
ICBEaXNwbGF5KiAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRl
cm4gaW50IFhTZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRTZWxlY3Rpb25Pd25lcigK
CiAgICBEaXNwbGF5KiAsCiAgICBBdG9tICwKICAgIFdpbmRvdyAsCiAgICBUaW1lCgopOwoKZXh0
ZXJuIGludCBYU2V0U3RhdGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgdW5zaWduZWQg
bG9uZyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBsb25nCgop
OwoKZXh0ZXJuIGludCBYU2V0U3RpcHBsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBQ
aXhtYXAKCik7CgpleHRlcm4gaW50IFhTZXRTdWJ3aW5kb3dNb2RlKAoKICAgIERpc3BsYXkqICwK
ICAgIEdDICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFRTT3JpZ2luKAoKICAgIERpc3Bs
YXkqICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRUaWxl
KAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNl
dFdpbmRvd0JhY2tncm91bmQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2ln
bmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBQaXhtYXAKCik7CgpleHRlcm4gaW50IFhTZXRX
aW5kb3dCb3JkZXIoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2lnbmVkIGxv
bmcKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXJQaXhtYXAoCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JvcmRl
cldpZHRoKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNpZ25lZCBpbnQKCik7
CgpleHRlcm4gaW50IFhTZXRXaW5kb3dDb2xvcm1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgQ29sb3JtYXAKCik7CgpleHRlcm4gaW50IFhTdG9yZUJ1ZmZlcigKCiAgICBEaXNw
bGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGlu
dCBYU3RvcmVCeXRlcygKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQK
Cik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFw
ICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9ycygKCiAgICBEaXNwbGF5
KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFN0b3JlTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhcioK
Cik7CgpleHRlcm4gaW50IFhTdG9yZU5hbWVkQ29sb3IoCgogICAgRGlzcGxheSogLAogICAgQ29s
b3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7
CgpleHRlcm4gaW50IFhTeW5jKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWFRleHRFeHRlbnRzKAoKICAgIFhGb250U3RydWN0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBpbnQgLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgWENoYXJTdHJ1Y3Qq
CgopOwoKZXh0ZXJuIGludCBYVGV4dEV4dGVudHMxNigKCiAgICBYRm9udFN0cnVjdCogLAogICAg
Y29uc3QgWENoYXIyYiogLAogICAgaW50ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQq
ICwKICAgIFhDaGFyU3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aCgKCiAgICBYRm9u
dFN0cnVjdCogLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYVGV4
dFdpZHRoMTYoCgogICAgWEZvbnRTdHJ1Y3QqICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGlu
dAoKKTsKCmV4dGVybiBpbnQgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKAoKICAgIERpc3BsYXkqICwK
ICAgIFdpbmRvdyAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQqICwK
ICAgIGludCogLAogICAgV2luZG93KgoKKTsKCmV4dGVybiBpbnQgWFVuZGVmaW5lQ3Vyc29yKAoK
ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYkJ1dHRvbigK
CiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAg
IFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYktleSgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3Jh
YktleWJvYXJkKAoKICAgIERpc3BsYXkqICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhVbmdy
YWJQb2ludGVyKAoKICAgIERpc3BsYXkqICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhVbmdy
YWJTZXJ2ZXIoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhVbmluc3RhbGxDb2xvcm1h
cCgKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWFVubG9hZEZv
bnQoCgogICAgRGlzcGxheSogLAogICAgRm9udAoKKTsKCmV4dGVybiBpbnQgWFVubWFwU3Vid2lu
ZG93cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhVbm1hcFdp
bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhWZW5kb3JS
ZWxlYXNlKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYV2FycFBvaW50ZXIoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoK
KTsKCmV4dGVybiBpbnQgWFdpZHRoTU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJu
IGludCBYV2lkdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYV2luZG93
RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcgLAogICAgWEV2ZW50
KgoKKTsKCmV4dGVybiBpbnQgWFdyaXRlQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBQaXhtYXAgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk
IGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU3VwcG9ydHNMb2NhbGUg
KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKlhTZXRMb2NhbGVNb2RpZmllcnMoCiAgICBjb25zdCBjaGFy
KgopOwoKZXh0ZXJuIFhPTSBYT3Blbk9NKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJt
SGFzaEJ1Y2tldFJlYyogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioKCik7Cgpl
eHRlcm4gaW50IFhDbG9zZU9NKAoKICAgIFhPTQoKKTsKCmV4dGVybiBjaGFyICpYU2V0T01WYWx1
ZXMoCgogICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0T01WYWx1ZXMoCgog
ICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mT00oCgogICAg
WE9NCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZk9NKAoKICAgIFhPTQoKKTsKCmV4dGVybiBY
T0MgWENyZWF0ZU9DKAoKICAgIFhPTSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJv
eU9DKAoKICAgIFhPQwoKKTsKCmV4dGVybiBYT00gWE9NT2ZPQygKCiAgICBYT0MKCik7CgpleHRl
cm4gY2hhciAqWFNldE9DVmFsdWVzKAoKICAgIFhPQyAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hh
ciAqWEdldE9DVmFsdWVzKAoKICAgIFhPQyAsCiAgICAuLi4KCik7CgpleHRlcm4gWEZvbnRTZXQg
WENyZWF0ZUZvbnRTZXQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgY2hh
cioqKiAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiB2b2lkIFhGcmVlRm9udFNl
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRm9udFNldAoKKTsKCmV4dGVybiBpbnQgWEZvbnRzT2ZG
b250U2V0KAoKICAgIFhGb250U2V0ICwKICAgIFhGb250U3RydWN0KioqICwKICAgIGNoYXIqKioK
Cik7CgpleHRlcm4gY2hhciAqWEJhc2VGb250TmFtZUxpc3RPZkZvbnRTZXQoCgogICAgWEZvbnRT
ZXQKCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mRm9udFNldCgKCiAgICBYRm9udFNldAoKKTsK
CmV4dGVybiBpbnQgWENvbnRleHREZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0CgopOwoK
ZXh0ZXJuIGludCBYRGlyZWN0aW9uYWxEZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0Cgop
OwoKZXh0ZXJuIGludCBYQ29udGV4dHVhbERyYXdpbmcoCgogICAgWEZvbnRTZXQKCik7CgpleHRl
cm4gWEZvbnRTZXRFeHRlbnRzICpYRXh0ZW50c09mRm9udFNldCgKCiAgICBYRm9udFNldAoKKTsK
CmV4dGVybiBpbnQgWG1iVGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQgLAogICAgY29uc3Qg
Y2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYd2NUZXh0RXNjYXBlbWVudCgKCiAgICBY
Rm9udFNldCAsCiAgICBjb25zdCB3Y2hhcl90KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFh1
dGY4VGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQgLAogICAgY29uc3QgY2hhciogLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoK
Cik7CgpleHRlcm4gaW50IFh3Y1RleHRFeHRlbnRzKAoKICAgIFhGb250U2V0ICwKICAgIGNvbnN0
IHdjaGFyX3QqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBYUmVjdGFuZ2xlKgoK
KTsKCmV4dGVybiBpbnQgWHV0ZjhUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBjb25z
dCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoKCik7
CgpleHRlcm4gaW50IFhtYlRleHRQZXJDaGFyRXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSog
LAogICAgaW50ICwKICAgIGludCogLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoK
Cik7CgpleHRlcm4gaW50IFh3Y1RleHRQZXJDaGFyRXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAg
ICBjb25zdCB3Y2hhcl90KiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3Rh
bmdsZSogLAogICAgaW50ICwKICAgIGludCogLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3Rh
bmdsZSoKCik7CgpleHRlcm4gaW50IFh1dGY4VGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250
U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiB2b2lkIFhtYkRyYXdUZXh0KAoKICAgIERpc3BsYXkqICwK
ICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgWG1iVGV4dEl0
ZW0qICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdUZXh0KAoKICAgIERpc3BsYXkq
ICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgWHdjVGV4
dEl0ZW0qICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJhd1RleHQoCgogICAgRGlz
cGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBY
bWJUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1N0cmluZygKCiAg
ICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBp
bnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lk
IFh3Y0RyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgWEZvbnRT
ZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCB3Y2hhcl90KiAsCiAg
ICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdXRmOERyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAog
ICAgRHJhd2FibGUgLAogICAgWEZvbnRTZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAs
CiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3SW1hZ2VT
dHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgWEZvbnRTZXQgLAogICAg
R0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gdm9pZCBYd2NEcmF3SW1hZ2VTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgWEZvbnRTZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25z
dCB3Y2hhcl90KiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdXRmOERyYXdJbWFnZVN0cmlu
ZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAs
CiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVy
biBYSU0gWE9wZW5JTSgKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRS
ZWMqICwKICAgIGNoYXIqICwKICAgIGNoYXIqCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VJTSgKCiAg
ICBYSU0KCik7CgpleHRlcm4gY2hhciAqWEdldElNVmFsdWVzKAoKICAgIFhJTSAsIC4uLgoKKTsK
CmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mSU0oCgogICAgWElNCgopOwoKZXh0ZXJuIGNoYXIg
KlhMb2NhbGVPZklNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBYSUMgWENyZWF0ZUlDKAoKICAgIFhJ
TSAsIC4uLgoKKTsKCmV4dGVybiB2b2lkIFhEZXN0cm95SUMoCgogICAgWElDCgopOwoKZXh0ZXJu
IHZvaWQgWFNldElDRm9jdXMoCgogICAgWElDCgopOwoKZXh0ZXJuIHZvaWQgWFVuc2V0SUNGb2N1
cygKCiAgICBYSUMKCik7CgpleHRlcm4gd2NoYXJfdCAqWHdjUmVzZXRJQygKCiAgICBYSUMKCik7
CgpleHRlcm4gY2hhciAqWG1iUmVzZXRJQygKCiAgICBYSUMKCik7CgpleHRlcm4gY2hhciAqWHV0
ZjhSZXNldElDKAoKICAgIFhJQwoKKTsKCmV4dGVybiBjaGFyICpYU2V0SUNWYWx1ZXMoCgogICAg
WElDICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJQ1ZhbHVlcygKCiAgICBYSUMgLCAuLi4K
Cik7CgpleHRlcm4gWElNIFhJTU9mSUMoCgogICAgWElDCgopOwoKZXh0ZXJuIGludCBYRmlsdGVy
RXZlbnQoCgogICAgWEV2ZW50KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhtYkxvb2t1
cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgY2hhciogLAog
ICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWHdjTG9va3Vw
U3RyaW5nKAoKICAgIFhJQyAsCiAgICBYS2V5UHJlc3NlZEV2ZW50KiAsCiAgICB3Y2hhcl90KiAs
CiAgICBpbnQgLAogICAgS2V5U3ltKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYdXRmOExv
b2t1cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgY2hhciog
LAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBYVmFOZXN0ZWRM
aXN0IFhWYUNyZWF0ZU5lc3RlZExpc3QoCgogICAgaW50ICwgLi4uCgopOwoKCgpleHRlcm4gaW50
IFhSZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1
Y3QgX1hybUhhc2hCdWNrZXRSZWMqICwKICAgIGNoYXIqICwKICAgIGNoYXIqICwKICAgIFhJRFBy
b2MgLAogICAgWFBvaW50ZXIKCik7CgpleHRlcm4gaW50IFhVbnJlZ2lzdGVySU1JbnN0YW50aWF0
ZUNhbGxiYWNrKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyog
LAogICAgY2hhciogLAogICAgY2hhciogLAogICAgWElEUHJvYyAsCiAgICBYUG9pbnRlcgoKKTsK
CnR5cGVkZWYgdm9pZCAoKlhDb25uZWN0aW9uV2F0Y2hQcm9jKSgKCiAgICBEaXNwbGF5KiAsCiAg
ICBYUG9pbnRlciAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhQb2ludGVyKgoKKTsKCgpleHRl
cm4gaW50IFhJbnRlcm5hbENvbm5lY3Rpb25OdW1iZXJzKAoKICAgIERpc3BsYXkqICwKICAgIGlu
dCoqICwKICAgIGludCoKCik7CgpleHRlcm4gdm9pZCBYUHJvY2Vzc0ludGVybmFsQ29ubmVjdGlv
bigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhBZGRDb25uZWN0aW9u
V2F0Y2goCgogICAgRGlzcGxheSogLAogICAgWENvbm5lY3Rpb25XYXRjaFByb2MgLAogICAgWFBv
aW50ZXIKCik7CgpleHRlcm4gdm9pZCBYUmVtb3ZlQ29ubmVjdGlvbldhdGNoKAoKICAgIERpc3Bs
YXkqICwKICAgIFhDb25uZWN0aW9uV2F0Y2hQcm9jICwKICAgIFhQb2ludGVyCgopOwoKZXh0ZXJu
IHZvaWQgWFNldEF1dGhvcml6YXRpb24oCgogICAgY2hhciAqICwKICAgIGludCAsCiAgICBjaGFy
ICogLAogICAgaW50CgopOwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGZsYWdzOwog
ICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBt
aW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAgICAgICAgaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsK
ICAgICAgICBpbnQgd2lkdGhfaW5jLCBoZWlnaHRfaW5jOwogICAgICAgIHN0cnVjdCB7CiAgICAg
ICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgICAgIGludCB5OwogICAgICAgIH0gbWluX2Fz
cGVjdCwgbWF4X2FzcGVjdDsKICAgICAgICBpbnQgYmFzZV93aWR0aCwgYmFzZV9oZWlnaHQ7CiAg
ICAgICAgaW50IHdpbl9ncmF2aXR5Owp9IFhTaXplSGludHM7CnR5cGVkZWYgc3RydWN0IHsKICAg
ICAgICBsb25nIGZsYWdzOwogICAgICAgIGludCBpbnB1dDsKCiAgICAgICAgaW50IGluaXRpYWxf
c3RhdGU7CiAgICAgICAgUGl4bWFwIGljb25fcGl4bWFwOwogICAgICAgIFdpbmRvdyBpY29uX3dp
bmRvdzsKICAgICAgICBpbnQgaWNvbl94LCBpY29uX3k7CiAgICAgICAgUGl4bWFwIGljb25fbWFz
azsKICAgICAgICBYSUQgd2luZG93X2dyb3VwOwoKfSBYV01IaW50czsKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgdW5zaWduZWQgY2hhciAqdmFsdWU7CiAgICBBdG9tIGVuY29kaW5nOwogICAgaW50IGZv
cm1hdDsKICAgIHVuc2lnbmVkIGxvbmcgbml0ZW1zOwp9IFhUZXh0UHJvcGVydHk7CgoKCgoKdHlw
ZWRlZiBlbnVtIHsKICAgIFhTdHJpbmdTdHlsZSwKICAgIFhDb21wb3VuZFRleHRTdHlsZSwKICAg
IFhUZXh0U3R5bGUsCiAgICBYU3RkSUNDVGV4dFN0eWxlLAoKICAgIFhVVEY4U3RyaW5nU3R5bGUK
fSBYSUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgbWluX3dp
ZHRoLCBtaW5faGVpZ2h0OwogICAgICAgIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAg
ICAgaW50IHdpZHRoX2luYywgaGVpZ2h0X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICAgICAgY2hhciAqcmVzX25hbWU7CiAgICAgICAgY2hhciAqcmVzX2NsYXNzOwp9IFhD
bGFzc0hpbnQ7CnR5cGVkZWYgc3RydWN0IF9YQ29tcG9zZVN0YXR1cyB7CiAgICBYUG9pbnRlciBj
b21wb3NlX3B0cjsKICAgIGludCBjaGFyc19tYXRjaGVkOwp9IFhDb21wb3NlU3RhdHVzOwp0eXBl
ZGVmIHN0cnVjdCBfWFJlZ2lvbiAqUmVnaW9uOwp0eXBlZGVmIHN0cnVjdCB7CiAgVmlzdWFsICp2
aXN1YWw7CiAgVmlzdWFsSUQgdmlzdWFsaWQ7CiAgaW50IHNjcmVlbjsKICBpbnQgZGVwdGg7CgoK
CiAgaW50IGNsYXNzOwoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcg
Z3JlZW5fbWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6
ZTsKICBpbnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwp0eXBlZGVmIHN0cnVjdCB7CiAg
ICAgICAgQ29sb3JtYXAgY29sb3JtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWRfbWF4Owog
ICAgICAgIHVuc2lnbmVkIGxvbmcgcmVkX211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVl
bl9tYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVlbl9tdWx0OwogICAgICAgIHVuc2lnbmVk
IGxvbmcgYmx1ZV9tYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBibHVlX211bHQ7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBiYXNlX3BpeGVsOwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwogICAg
ICAgIFhJRCBraWxsaWQ7Cn0gWFN0YW5kYXJkQ29sb3JtYXA7CnR5cGVkZWYgaW50IFhDb250ZXh0
OwoKCgoKCgoKCmV4dGVybiBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQK
Cik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4
dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4g
WFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7
CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4g
aW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbiAsCiAgICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBS
ZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKlhE
ZWZhdWx0U3RyaW5nICh2b2lkKTsKCmV4dGVybiBpbnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlz
cGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0CgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJl
Z2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdp
b24KCik7CgpleHRlcm4gaW50IFhFcXVhbFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9u
CgopOwoKZXh0ZXJuIGludCBYRmluZENvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwK
ICAgIFhDb250ZXh0ICwKICAgIFhQb2ludGVyKgoKKTsKCmV4dGVybiBpbnQgWEdldENsYXNzSGlu
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWENsYXNzSGludCoKCik7CgpleHRl
cm4gaW50IFhHZXRJY29uU2l6ZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhJ
Y29uU2l6ZSoqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXROb3JtYWxIaW50cygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gaW50
IFhHZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTdGFu
ZGFyZENvbG9ybWFwKiogLAogICAgaW50KiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0
U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAs
CiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqICwKICAgIEF0b20KCik7
CgpleHRlcm4gaW50IFhHZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSogLAogICAgV2luZG93
ICwKICAgIFhUZXh0UHJvcGVydHkqICwKICAgIEF0b20KCik7CgpleHRlcm4gWFZpc3VhbEluZm8g
KlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwKICAgIGxvbmcgLAogICAgWFZpc3VhbElu
Zm8qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIFhX
TUhpbnRzICpYR2V0V01IaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRl
cm4gaW50IFhHZXRXTUljb25OYW1lKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBY
VGV4dFByb3BlcnR5KgoKKTsKCmV4dGVybiBpbnQgWEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAs
CiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSoKCik7CgpleHRlcm4gaW50IFhHZXRXTU5v
cm1hbEhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAs
CiAgICBsb25nKgoKKTsKCmV4dGVybiBpbnQgWEdldFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBsb25nKiAsCiAgICBBdG9tCgop
OwoKZXh0ZXJuIGludCBYR2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs
CiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBS
ZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVybiB2b2lkIFhDb252ZXJ0
Q2FzZSgKCiAgICBLZXlTeW0gLAogICAgS2V5U3ltKiAsCiAgICBLZXlTeW0qCgopOwoKZXh0ZXJu
IGludCBYTG9va3VwU3RyaW5nKAoKICAgIFhLZXlFdmVudCogLAogICAgY2hhciogLAogICAgaW50
ICwKICAgIEtleVN5bSogLAogICAgWENvbXBvc2VTdGF0dXMqCgopOwoKZXh0ZXJuIGludCBYTWF0
Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIFhWaXN1YWxJbmZvKgoKKTsKCmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBS
ZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFBvaW50SW5SZWdpb24o
CgogICAgUmVnaW9uICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gUmVnaW9uIFhQb2x5
Z29uUmVnaW9uKAoKICAgIFhQb2ludCogLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWFJlY3RJblJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludCAsCiAgICB1
bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRl
eHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0ICwKICAgIGNvbnN0IGNo
YXIqCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xhc3NIaW50KAoKICAgIERpc3BsYXkqICwKICAgIFdp
bmRvdyAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4dGVybiBpbnQgWFNldEljb25TaXplcygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWEljb25TaXplKiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhTZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAog
ICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERp
c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCogLAogICAgaW50ICwK
ICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRTaXplSGludHMoCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhT
ZXRTdGFuZGFyZFByb3BlcnRpZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFBpeG1hcCAsCiAgICBjaGFyKiogLAog
ICAgaW50ICwKICAgIFhTaXplSGludHMqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFRleHRQcm9wZXJ0
eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSogLAogICAg
QXRvbQoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIGludCBYU2V0V01I
aW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFdNSGludHMqCgopOwoKZXh0
ZXJuIHZvaWQgWFNldFdNSWNvbk5hbWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg
IFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNTmFtZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSoKCik7CgpleHRlcm4gdm9pZCBYU2V0
V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50
cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqICwKICAg
IFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBj
aGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGludHMqICwKICAgIFhXTUhpbnRzKiAsCiAgICBY
Q2xhc3NIaW50KgoKKTsKCmV4dGVybiB2b2lkIFhtYlNldFdNUHJvcGVydGllcygKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog
ICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAog
ICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9pZCBYdXRmOFNldFdNUHJvcGVydGllcygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hh
ciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50
cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01TaXplSGludHMoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwKICAgIEF0b20KCik7
CgpleHRlcm4gaW50IFhTZXRSZWdpb24oCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUmVn
aW9uCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiAsCiAgICBBdG9tCgopOwoKZXh0
ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBY
U2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWFNocmlua1JlZ2lvbigKCiAgICBSZWdpb24gLAog
ICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0
eSgKCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJu
IGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVnaW9uICwKICAgIFJlZ2lvbiAsCiAgICBSZWdp
b24KCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5
KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2Rp
bmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4
dGVybiBpbnQgWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKICAgIERpc3BsYXkqIGRpc3BsYXks
CiAgICB3Y2hhcl90KiogbGlzdCwKICAgIGludCBjb3VudCwKICAgIFhJQ0NFbmNvZGluZ1N0eWxl
IHN0eWxlLAogICAgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wX3JldHVybgopOwoKZXh0ZXJuIGlu
dCBYdXRmOFRleHRMaXN0VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAg
Y2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwK
ICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4dGVybiB2b2lkIFh3Y0Zy
ZWVTdHJpbmdMaXN0KAogICAgd2NoYXJfdCoqIGxpc3QKKTsKCmV4dGVybiBpbnQgWFRleHRQcm9w
ZXJ0eVRvU3RyaW5nTGlzdCgKCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBjaGFyKioqICwKICAg
IGludCoKCik7CgpleHRlcm4gaW50IFhtYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNw
bGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAgY2hh
cioqKiBsaXN0X3JldHVybiwKICAgIGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh3
Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3Qg
WFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAgd2NoYXJfdCoqKiBsaXN0X3JldHVybiwKICAg
IGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh1dGY4VGV4dFByb3BlcnR5VG9UZXh0
TGlzdCgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAgICBjb25zdCBYVGV4dFByb3BlcnR5KiB0ZXh0
X3Byb3AsCiAgICBjaGFyKioqIGxpc3RfcmV0dXJuLAogICAgaW50KiBjb3VudF9yZXR1cm4KKTsK
CmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAgWFJlY3RhbmdsZSogLAogICAg
UmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVnaW9uKAoKICAgIFJl
Z2lvbiAsCiAgICBSZWdpb24gLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIGludCBYV01HZW9tZXRy
eSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3Qg
Y2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIFhTaXplSGludHMqICwKICAgIGludCogLAog
ICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQg
WFhvclJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCgoK
CgoKCgoKCmV4dGVybiBjaGFyICpYcGVybWFsbG9jKAoKICAgIHVuc2lnbmVkIGludAoKKTsKCgoK
CgoKCnR5cGVkZWYgaW50IFhybVF1YXJrLCAqWHJtUXVhcmtMaXN0OwoKCnR5cGVkZWYgY2hhciAq
WHJtU3RyaW5nOwoKCgpleHRlcm4gWHJtUXVhcmsgWHJtU3RyaW5nVG9RdWFyaygKCiAgICBjb25z
dCBjaGFyKgoKKTsKCmV4dGVybiBYcm1RdWFyayBYcm1QZXJtU3RyaW5nVG9RdWFyaygKCiAgICBj
b25zdCBjaGFyKgoKKTsKCgpleHRlcm4gWHJtU3RyaW5nIFhybVF1YXJrVG9TdHJpbmcoCgogICAg
WHJtUXVhcmsKCik7CgpleHRlcm4gWHJtUXVhcmsgWHJtVW5pcXVlUXVhcmsoCgogICAgdm9pZAoK
KTsKdHlwZWRlZiBlbnVtIHtYcm1CaW5kVGlnaHRseSwgWHJtQmluZExvb3NlbHl9IFhybUJpbmRp
bmcsICpYcm1CaW5kaW5nTGlzdDsKCmV4dGVybiB2b2lkIFhybVN0cmluZ1RvUXVhcmtMaXN0KAoK
ICAgIGNvbnN0IGNoYXIqICwKICAgIFhybVF1YXJrTGlzdAoKKTsKCmV4dGVybiB2b2lkIFhybVN0
cmluZ1RvQmluZGluZ1F1YXJrTGlzdCgKCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1CaW5kaW5n
TGlzdCAsCiAgICBYcm1RdWFya0xpc3QKCik7CgoKCgoKCgp0eXBlZGVmIFhybVF1YXJrIFhybU5h
bWU7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybU5hbWVMaXN0OwoKCgoKdHlwZWRlZiBYcm1RdWFy
ayBYcm1DbGFzczsKdHlwZWRlZiBYcm1RdWFya0xpc3QgWHJtQ2xhc3NMaXN0Owp0eXBlZGVmIFhy
bVF1YXJrIFhybVJlcHJlc2VudGF0aW9uOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25l
ZCBpbnQgc2l6ZTsKICAgIFhQb2ludGVyIGFkZHI7Cn0gWHJtVmFsdWUsICpYcm1WYWx1ZVB0cjsK
dHlwZWRlZiBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKlhybUhhc2hCdWNrZXQ7CnR5cGVkZWYg
WHJtSGFzaEJ1Y2tldCAqWHJtSGFzaFRhYmxlOwp0eXBlZGVmIFhybUhhc2hUYWJsZSBYcm1TZWFy
Y2hMaXN0W107CnR5cGVkZWYgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjICpYcm1EYXRhYmFzZTsK
CgpleHRlcm4gdm9pZCBYcm1EZXN0cm95RGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UKCik7Cgpl
eHRlcm4gdm9pZCBYcm1RUHV0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqICwKICAgIFhybUJp
bmRpbmdMaXN0ICwKICAgIFhybVF1YXJrTGlzdCAsCiAgICBYcm1SZXByZXNlbnRhdGlvbiAsCiAg
ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRh
YmFzZSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtVmFsdWUq
CgopOwoKZXh0ZXJuIHZvaWQgWHJtUVB1dFN0cmluZ1Jlc291cmNlKAoKICAgIFhybURhdGFiYXNl
KiAsCiAgICBYcm1CaW5kaW5nTGlzdCAsCiAgICBYcm1RdWFya0xpc3QgLAogICAgY29uc3QgY2hh
cioKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRTdHJpbmdSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFz
ZSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBY
cm1QdXRMaW5lUmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqICwKICAgIGNvbnN0IGNoYXIqCgop
OwoKZXh0ZXJuIGludCBYcm1RR2V0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgWHJt
TmFtZUxpc3QgLAogICAgWHJtQ2xhc3NMaXN0ICwKICAgIFhybVJlcHJlc2VudGF0aW9uKiAsCiAg
ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gaW50IFhybUdldFJlc291cmNlKAoKICAgIFhybURhdGFi
YXNlICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNoYXIqKiAsCiAg
ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gaW50IFhybVFHZXRTZWFyY2hMaXN0KAoKICAgIFhybURh
dGFiYXNlICwKICAgIFhybU5hbWVMaXN0ICwKICAgIFhybUNsYXNzTGlzdCAsCiAgICBYcm1TZWFy
Y2hMaXN0ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWHJtUUdldFNlYXJjaFJlc291cmNlKAoK
ICAgIFhybVNlYXJjaExpc3QgLAogICAgWHJtTmFtZSAsCiAgICBYcm1DbGFzcyAsCiAgICBYcm1S
ZXByZXNlbnRhdGlvbiogLAogICAgWHJtVmFsdWUqCgopOwoKCgoKCgoKZXh0ZXJuIHZvaWQgWHJt
U2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSogLAogICAgWHJtRGF0YWJhc2UKCik7CgpleHRlcm4g
WHJtRGF0YWJhc2UgWHJtR2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gWHJt
RGF0YWJhc2UgWHJtR2V0RmlsZURhdGFiYXNlKAoKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJu
IGludCBYcm1Db21iaW5lRmlsZURhdGFiYXNlKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybURh
dGFiYXNlKiAsCiAgICBpbnQKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0U3RyaW5nRGF0
YWJhc2UoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRGaWxlRGF0YWJh
c2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBY
cm1NZXJnZURhdGFiYXNlcygKCiAgICBYcm1EYXRhYmFzZSAsCiAgICBYcm1EYXRhYmFzZSoKCik7
CgpleHRlcm4gdm9pZCBYcm1Db21iaW5lRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAg
WHJtRGF0YWJhc2UqICwKICAgIGludAoKKTsKCgoKCmV4dGVybiBpbnQgWHJtRW51bWVyYXRlRGF0
YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgWHJtTmFtZUxpc3QgLAogICAgWHJtQ2xhc3NM
aXN0ICwKICAgIGludCAsCiAgICBpbnQgKCopKAoKICAgICAgICAgICAgIFhybURhdGFiYXNlKiAs
CiAgICAgICAgICAgICBYcm1CaW5kaW5nTGlzdCAsCiAgICAgICAgICAgICBYcm1RdWFya0xpc3Qg
LAogICAgICAgICAgICAgWHJtUmVwcmVzZW50YXRpb24qICwKICAgICAgICAgICAgIFhybVZhbHVl
KiAsCiAgICAgICAgICAgICBYUG9pbnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50ZXIK
Cik7CgpleHRlcm4gY29uc3QgY2hhciAqWHJtTG9jYWxlT2ZEYXRhYmFzZSgKCiAgICBYcm1EYXRh
YmFzZQoKKTsKdHlwZWRlZiBlbnVtIHsKICAgIFhybW9wdGlvbk5vQXJnLAogICAgWHJtb3B0aW9u
SXNBcmcsCiAgICBYcm1vcHRpb25TdGlja3lBcmcsCiAgICBYcm1vcHRpb25TZXBBcmcsCiAgICBY
cm1vcHRpb25SZXNBcmcsCiAgICBYcm1vcHRpb25Ta2lwQXJnLAogICAgWHJtb3B0aW9uU2tpcExp
bmUsCiAgICBYcm1vcHRpb25Ta2lwTkFyZ3MKCn0gWHJtT3B0aW9uS2luZDsKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIGNoYXIgKm9wdGlvbjsKICAgIGNoYXIgKnNwZWNpZmllcjsKICAgIFhybU9wdGlv
bktpbmQgYXJnS2luZDsKICAgIFhQb2ludGVyIHZhbHVlOwp9IFhybU9wdGlvbkRlc2NSZWMsICpY
cm1PcHRpb25EZXNjTGlzdDsKCgpleHRlcm4gdm9pZCBYcm1QYXJzZUNvbW1hbmQoCgogICAgWHJt
RGF0YWJhc2UqICwKICAgIFhybU9wdGlvbkRlc2NMaXN0ICwKICAgIGludCAsCiAgICBjb25zdCBj
aGFyKiAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCgp0eXBlZGVmIGNoYXIgKlN0cmluZzsK
dHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJlYyAqV2lkZ2V0Owp0eXBlZGVmIFdpZGdldCAqV2lkZ2V0
TGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpXaWRnZXRDbGFzczsKdHlwZWRl
ZiBzdHJ1Y3QgX0NvbXBvc2l0ZVJlYyAqQ29tcG9zaXRlV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBf
WHRBY3Rpb25zUmVjICpYdEFjdGlvbkxpc3Q7CnR5cGVkZWYgc3RydWN0IF9YdEV2ZW50UmVjICpY
dEV2ZW50VGFibGU7Cgp0eXBlZGVmIHN0cnVjdCBfWHRBcHBTdHJ1Y3QgKlh0QXBwQ29udGV4dDsK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIFh0VmFsdWVNYXNrOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
WHRJbnRlcnZhbElkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWHRJbnB1dElkOwp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgWHRXb3JrUHJvY0lkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWHRTaWduYWxJ
ZDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgWHRHZW9tZXRyeU1hc2s7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBYdEdDTWFzazsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeGVsOwp0eXBlZGVmIGludCBY
dENhY2hlVHlwZTsKdHlwZWRlZiBjaGFyIEJvb2xlYW47CnR5cGVkZWYgbG9uZyBYdEFyZ1ZhbDsK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFh0RW51bTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBDYXJk
aW5hbDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBEaW1lbnNpb247CnR5cGVkZWYgc2hvcnQgUG9z
aXRpb247CgoKdHlwZWRlZiB2b2lkKiBYdFBvaW50ZXI7CgoKCgoKCnR5cGVkZWYgWHRQb2ludGVy
IE9wYXF1ZTsKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpDb3JlV2lkZ2V0Q2xhc3M7
CnR5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgKkNvcmVXaWRnZXQ7CmV4dGVybiBXaWRnZXRDbGFz
cyBjb3JlV2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuIFdpZGdldENsYXNzIHdpZGdldENsYXNzOwp0eXBl
ZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMgKkNvbXBvc2l0ZVdpZGdldENsYXNzOwoKdHlw
ZWRlZiBDYXJkaW5hbCAoKlh0T3JkZXJQcm9jKSgKCiAgICBXaWRnZXQKCik7CgoKCmV4dGVybiB2
b2lkIFh0TWFuYWdlQ2hpbGRyZW4oCgogICAgV2lkZ2V0TGlzdCAsCiAgICBDYXJkaW5hbAoKKTsK
CmV4dGVybiB2b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZvaWQg
WHRVbm1hbmFnZUNoaWxkcmVuKAoKICAgIFdpZGdldExpc3QgLAogICAgQ2FyZGluYWwKCik7Cgpl
eHRlcm4gdm9pZCBYdFVubWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0CgopOwoKdHlwZWRlZiB2b2lk
ICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXRMaXN0ICwKICAgIENh
cmRpbmFsICogLAogICAgV2lkZ2V0TGlzdCAsCiAgICBDYXJkaW5hbCAqICwKICAgIFh0UG9pbnRl
cgoKKTsKCmV4dGVybiB2b2lkIFh0Q2hhbmdlTWFuYWdlZFNldCgKCiAgICBXaWRnZXRMaXN0ICwK
ICAgIENhcmRpbmFsICwKICAgIFh0RG9DaGFuZ2VQcm9jICwKICAgIFh0UG9pbnRlciAsCiAgICBX
aWRnZXRMaXN0ICwKICAgIENhcmRpbmFsCgopOwoKCgoKZXh0ZXJuIFdpZGdldENsYXNzIGNvbXBv
c2l0ZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUmVjICpDb25z
dHJhaW50V2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuIFdpZGdldENsYXNzIGNvbnN0cmFpbnRXaWRnZXRD
bGFzczsKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdFJlYyAqT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBf
T2JqZWN0Q2xhc3NSZWMgKk9iamVjdENsYXNzOwoKCmV4dGVybiBXaWRnZXRDbGFzcyBvYmplY3RD
bGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpSZWMgKlJlY3RPYmo7CnR5cGVkZWYgc3RydWN0
IF9SZWN0T2JqQ2xhc3NSZWMgKlJlY3RPYmpDbGFzczsKCgpleHRlcm4gV2lkZ2V0Q2xhc3MgcmVj
dE9iakNsYXNzOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1RyYW5zbGF0aW9uRGF0YSAqWHRUcmFuc2xh
dGlvbnM7CnR5cGVkZWYgc3RydWN0IF9UcmFuc2xhdGlvbkRhdGEgKlh0QWNjZWxlcmF0b3JzOwp0
eXBlZGVmIHVuc2lnbmVkIGludCBNb2RpZmllcnM7Cgp0eXBlZGVmIHZvaWQgKCpYdEFjdGlvblBy
b2MpKAoKICAgIFdpZGdldCAsCiAgICBYRXZlbnQqICwKICAgIFN0cmluZyogLAogICAgQ2FyZGlu
YWwqCgopOwoKdHlwZWRlZiBYdEFjdGlvblByb2MqIFh0Qm91bmRBY3Rpb25zOwoKdHlwZWRlZiBz
dHJ1Y3QgX1h0QWN0aW9uc1JlY3sKICAgIFN0cmluZyBzdHJpbmc7CiAgICBYdEFjdGlvblByb2Mg
cHJvYzsKfSBYdEFjdGlvbnNSZWM7Cgp0eXBlZGVmIGVudW0gewoKCiAgICBYdEFkZHJlc3MsCiAg
ICBYdEJhc2VPZmZzZXQsCiAgICBYdEltbWVkaWF0ZSwKICAgIFh0UmVzb3VyY2VTdHJpbmcsCiAg
ICBYdFJlc291cmNlUXVhcmssCiAgICBYdFdpZGdldEJhc2VPZmZzZXQsCiAgICBYdFByb2NlZHVy
ZUFyZwp9IFh0QWRkcmVzc01vZGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdEFkZHJlc3NNb2Rl
IGFkZHJlc3NfbW9kZTsKICAgIFh0UG9pbnRlciBhZGRyZXNzX2lkOwogICAgQ2FyZGluYWwgc2l6
ZTsKfSBYdENvbnZlcnRBcmdSZWMsICpYdENvbnZlcnRBcmdMaXN0OwoKdHlwZWRlZiB2b2lkICgq
WHRDb252ZXJ0QXJnUHJvYykoCgogICAgV2lkZ2V0ICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1W
YWx1ZSoKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdEdlb21ldHJ5TWFzayByZXF1ZXN0X21v
ZGU7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgRGltZW5zaW9uIHdpZHRoLCBoZWlnaHQsIGJvcmRl
cl93aWR0aDsKICAgIFdpZGdldCBzaWJsaW5nOwogICAgaW50IHN0YWNrX21vZGU7Cn0gWHRXaWRn
ZXRHZW9tZXRyeTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoKlh0Q29udmVydGVyKSgKCiAgICBYcm1W
YWx1ZSogLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlKiAsCiAgICBYcm1WYWx1ZSoKCik7
Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFR5cGVDb252ZXJ0ZXIpKAoKICAgIERpc3BsYXkqICwKICAg
IFhybVZhbHVlKiAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWUqICwKICAgIFhybVZhbHVl
KiAsCiAgICBYdFBvaW50ZXIqCgopOwoKdHlwZWRlZiB2b2lkICgqWHREZXN0cnVjdG9yKSgKCiAg
ICBYdEFwcENvbnRleHQgLAogICAgWHJtVmFsdWUqICwKICAgIFh0UG9pbnRlciAsCiAgICBYcm1W
YWx1ZSogLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiBPcGFxdWUgWHRDYWNoZVJlZjsKCnR5
cGVkZWYgT3BhcXVlIFh0QWN0aW9uSG9va0lkOwoKdHlwZWRlZiB2b2lkICgqWHRBY3Rpb25Ib29r
UHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBTdHJpbmcgLAogICAgWEV2
ZW50KiAsCiAgICBTdHJpbmcqICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBYdEJsb2NrSG9va0lkOwoKdHlwZWRlZiB2b2lkICgqWHRCbG9ja0hvb2tQcm9jKSgKCiAg
ICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEtleVByb2MpKAoKICAgIERpc3BsYXkq
ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBNb2RpZmllcnMgLAogICAgTW9kaWZpZXJzKiAsCiAg
ICBLZXlTeW0qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDYXNlUHJvYykoCgogICAgRGlzcGxheSog
LAogICAgS2V5U3ltICwKICAgIEtleVN5bSogLAogICAgS2V5U3ltKgoKKTsKCnR5cGVkZWYgdm9p
ZCAoKlh0RXZlbnRIYW5kbGVyKSgKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFhF
dmVudCogLAogICAgQm9vbGVhbioKCik7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBFdmVudE1hc2s7
Cgp0eXBlZGVmIGVudW0ge1h0TGlzdEhlYWQsIFh0TGlzdFRhaWwgfSBYdExpc3RQb3NpdGlvbjsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdElucHV0TWFzazsKCgoKCgp0eXBlZGVmIHZvaWQgKCpY
dFRpbWVyQ2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgLAogICAgWHRJbnRlcnZhbElkKgoK
KTsKCnR5cGVkZWYgdm9pZCAoKlh0SW5wdXRDYWxsYmFja1Byb2MpKAoKICAgIFh0UG9pbnRlciAs
CiAgICBpbnQqICwKICAgIFh0SW5wdXRJZCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNpZ25hbENh
bGxiYWNrUHJvYykoCgogICAgWHRQb2ludGVyICwKICAgIFh0U2lnbmFsSWQqCgopOwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgU3RyaW5nIG5hbWU7CiAgICBYdEFyZ1ZhbCB2YWx1ZTsKfSBBcmcsICpB
cmdMaXN0OwoKdHlwZWRlZiBYdFBvaW50ZXIgWHRWYXJBcmdzTGlzdDsKCnR5cGVkZWYgdm9pZCAo
Klh0Q2FsbGJhY2tQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFh0UG9p
bnRlcgoKKTsKCnR5cGVkZWYgc3RydWN0IF9YdENhbGxiYWNrUmVjIHsKICAgIFh0Q2FsbGJhY2tQ
cm9jIGNhbGxiYWNrOwogICAgWHRQb2ludGVyIGNsb3N1cmU7Cn0gWHRDYWxsYmFja1JlYywgKlh0
Q2FsbGJhY2tMaXN0OwoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBYdENhbGxiYWNrTm9MaXN0LAog
ICAgICAgIFh0Q2FsbGJhY2tIYXNOb25lLAogICAgICAgIFh0Q2FsbGJhY2tIYXNTb21lCn0gWHRD
YWxsYmFja1N0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBYdEdlb21ldHJ5WWVzLAogICAgWHRH
ZW9tZXRyeU5vLAogICAgWHRHZW9tZXRyeUFsbW9zdCwKICAgIFh0R2VvbWV0cnlEb25lCn0gWHRH
ZW9tZXRyeVJlc3VsdDsKCnR5cGVkZWYgZW51bSB7WHRHcmFiTm9uZSwgWHRHcmFiTm9uZXhjbHVz
aXZlLCBYdEdyYWJFeGNsdXNpdmV9IFh0R3JhYktpbmQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBX
aWRnZXQgc2hlbGxfd2lkZ2V0OwogICAgV2lkZ2V0IGVuYWJsZV93aWRnZXQ7Cn0gWHRQb3Bkb3du
SURSZWMsICpYdFBvcGRvd25JRDsKCnR5cGVkZWYgc3RydWN0IF9YdFJlc291cmNlIHsKICAgIFN0
cmluZyByZXNvdXJjZV9uYW1lOwogICAgU3RyaW5nIHJlc291cmNlX2NsYXNzOwogICAgU3RyaW5n
IHJlc291cmNlX3R5cGU7CiAgICBDYXJkaW5hbCByZXNvdXJjZV9zaXplOwogICAgQ2FyZGluYWwg
cmVzb3VyY2Vfb2Zmc2V0OwogICAgU3RyaW5nIGRlZmF1bHRfdHlwZTsKICAgIFh0UG9pbnRlciBk
ZWZhdWx0X2FkZHI7Cn0gWHRSZXNvdXJjZSwgKlh0UmVzb3VyY2VMaXN0OwoKdHlwZWRlZiB2b2lk
ICgqWHRSZXNvdXJjZURlZmF1bHRQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIFhy
bVZhbHVlKgoKKTsKCnR5cGVkZWYgU3RyaW5nICgqWHRMYW5ndWFnZVByb2MpKAoKICAgIERpc3Bs
YXkqICwKICAgIFN0cmluZyAsCiAgICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEVy
cm9yTXNnSGFuZGxlcikoCgogICAgU3RyaW5nICwKICAgIFN0cmluZyAsCiAgICBTdHJpbmcgLAog
ICAgU3RyaW5nICwKICAgIFN0cmluZyogLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiB2b2lk
ICgqWHRFcnJvckhhbmRsZXIpKAoKICBTdHJpbmcKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENyZWF0
ZVBvcHVwQ2hpbGRQcm9jKSgKCiAgICBXaWRnZXQKCik7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFdv
cmtQcm9jKSgKCiAgICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyIG1h
dGNoOwogICAgU3RyaW5nIHN1YnN0aXR1dGlvbjsKfSBTdWJzdGl0dXRpb25SZWMsICpTdWJzdGl0
dXRpb247Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdEZpbGVQcmVkaWNhdGUpKAoKICAgU3RyaW5nCgop
OwoKdHlwZWRlZiBYdFBvaW50ZXIgWHRSZXF1ZXN0SWQ7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdENv
bnZlcnRTZWxlY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAgQXRvbSog
LAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICBp
bnQqCgopOwoKdHlwZWRlZiB2b2lkICgqWHRMb3NlU2VsZWN0aW9uUHJvYykoCgogICAgV2lkZ2V0
ICwKICAgIEF0b20qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRTZWxlY3Rpb25Eb25lUHJvYykoCgog
ICAgV2lkZ2V0ICwKICAgIEF0b20qICwKICAgIEF0b20qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRT
ZWxlY3Rpb25DYWxsYmFja1Byb2MpKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAogICAg
QXRvbSogLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyICwKICAgIHVuc2lnbmVkIGxvbmcqICwK
ICAgIGludCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxlY3Rpb25JbmNyUHJvYykoCgog
ICAgV2lkZ2V0ICwKICAgIEF0b20qICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAo
Klh0U2VsZWN0aW9uRG9uZUluY3JQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAg
QXRvbSogLAogICAgWHRSZXF1ZXN0SWQqICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgQm9v
bGVhbiAoKlh0Q29udmVydFNlbGVjdGlvbkluY3JQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRv
bSogLAogICAgQXRvbSogLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1bnNpZ25l
ZCBsb25nKiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIFh0UG9pbnRlciAs
CiAgICBYdFJlcXVlc3RJZCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENhbmNlbENvbnZlcnRTZWxl
Y3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAgQXRvbSogLAogICAgWHRS
ZXF1ZXN0SWQqICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0RXZlbnRE
aXNwYXRjaFByb2MpKAoKICAgIFhFdmVudCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEV4dGVuc2lv
blNlbGVjdFByb2MpKAoKICAgIFdpZGdldCAsCiAgICBpbnQqICwKICAgIFh0UG9pbnRlciogLAog
ICAgaW50ICwKICAgIFh0UG9pbnRlcgoKKTsKCgoKCgoKCgoKZXh0ZXJuIEJvb2xlYW4gWHRDb252
ZXJ0QW5kU3RvcmUoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybVZhbHVl
KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gQm9vbGVhbiBY
dENhbGxDb252ZXJ0ZXIoCgogICAgRGlzcGxheSogLAogICAgWHRUeXBlQ29udmVydGVyICwKICAg
IFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh
bHVlKiAsCiAgICBYdENhY2hlUmVmKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVu
dCgKCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDYWxsQWNjZXB0Rm9jdXMoCgog
ICAgV2lkZ2V0ICwKICAgIFRpbWUqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRQZWVrRXZlbnQoCgog
ICAgWEV2ZW50KgoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwUGVla0V2ZW50KAoKICAgIFh0QXBw
Q29udGV4dCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1N1YmNsYXNzKAoK
ICAgIFdpZGdldCAsCiAgICBXaWRnZXRDbGFzcwoKKTsKCmV4dGVybiBCb29sZWFuIFh0SXNPYmpl
Y3QoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIEJvb2xlYW4gX1h0Q2hlY2tTdWJjbGFzc0ZsYWco
CgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBCb29sZWFuIF9YdElz
U3ViY2xhc3NPZigKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0Q2xh
c3MgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc01hbmFnZWQoCgog
ICAgV2lkZ2V0CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1JlYWxpemVkKAoKICAgIFdpZGdldAoK
KTsKCmV4dGVybiBCb29sZWFuIFh0SXNTZW5zaXRpdmUoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRPd25TZWxlY3Rpb24oCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAgVGlt
ZSAsCiAgICBYdENvbnZlcnRTZWxlY3Rpb25Qcm9jICwKICAgIFh0TG9zZVNlbGVjdGlvblByb2Mg
LAogICAgWHRTZWxlY3Rpb25Eb25lUHJvYwoKKTsKCmV4dGVybiBCb29sZWFuIFh0T3duU2VsZWN0
aW9uSW5jcmVtZW50YWwoCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAgVGltZSAsCiAgICBY
dENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYyAsCiAgICBYdExvc2VTZWxlY3Rpb25JbmNyUHJvYyAs
CiAgICBYdFNlbGVjdGlvbkRvbmVJbmNyUHJvYyAsCiAgICBYdENhbmNlbENvbnZlcnRTZWxlY3Rp
b25Qcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiBYdEdlb21ldHJ5UmVzdWx0IFh0TWFr
ZVJlc2l6ZVJlcXVlc3QoCgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgRGltZW5zaW9uKiAsCiAgICBEaW1lbnNpb24qCgopOwoKZXh0ZXJuIHZv
aWQgWHRUcmFuc2xhdGVDb29yZHMoCgogICAgV2lkZ2V0ICwKICAgIGludCAsCiAgICBpbnQgLAog
ICAgUG9zaXRpb24qICwKICAgIFBvc2l0aW9uKgoKKTsKCmV4dGVybiBLZXlTeW0qIFh0R2V0S2V5
c3ltVGFibGUoCgogICAgRGlzcGxheSogLAogICAgS2V5Q29kZSogLAogICAgaW50KgoKKTsKCmV4
dGVybiB2b2lkIFh0S2V5c3ltVG9LZXljb2RlTGlzdCgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlT
eW0gLAogICAgS2V5Q29kZSoqICwKICAgIENhcmRpbmFsKgoKKTsKCmV4dGVybiB2b2lkIFh0U3Ry
aW5nQ29udmVyc2lvbldhcm5pbmcoCgogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioK
Cik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlTdHJpbmdDb252ZXJzaW9uV2FybmluZygKCiAgICBE
aXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKgoKKTsKCgpleHRlcm4g
WHRDb252ZXJ0QXJnUmVjIGNvbnN0IGNvbG9yQ29udmVydEFyZ3NbXTsKZXh0ZXJuIFh0Q29udmVy
dEFyZ1JlYyBjb25zdCBzY3JlZW5Db252ZXJ0QXJnW107CgoKCgoKZXh0ZXJuIHZvaWQgWHRBcHBB
ZGRDb252ZXJ0ZXIoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIFh0Q29udmVydGVyICwKICAgIFh0Q29udmVydEFyZ0xpc3QgLAogICAg
Q2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdEFkZENvbnZlcnRlcigKCiAgICBjb25zdCBjaGFy
KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYdENvbnZlcnRlciAsCiAgICBYdENvbnZlcnRBcmdM
aXN0ICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRUeXBlQ29udmVydGVyKAoK
ICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0VHlwZUNvbnZlcnRlciAs
CiAgICBYdENvbnZlcnRBcmdMaXN0ICwKICAgIENhcmRpbmFsICwKICAgIFh0Q2FjaGVUeXBlICwK
ICAgIFh0RGVzdHJ1Y3RvcgoKKTsKCmV4dGVybiB2b2lkIFh0QXBwU2V0VHlwZUNvbnZlcnRlcigK
CiAgICBYdEFwcENvbnRleHQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog
ICAgWHRUeXBlQ29udmVydGVyICwKICAgIFh0Q29udmVydEFyZ0xpc3QgLAogICAgQ2FyZGluYWwg
LAogICAgWHRDYWNoZVR5cGUgLAogICAgWHREZXN0cnVjdG9yCgopOwoKZXh0ZXJuIHZvaWQgWHRD
b252ZXJ0KAoKICAgIFdpZGdldCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1WYWx1ZSogLAog
ICAgY29uc3QgY2hhciogLAogICAgWHJtVmFsdWUqCgopOwoKZXh0ZXJuIHZvaWQgWHREaXJlY3RD
b252ZXJ0KAoKICAgIFh0Q29udmVydGVyICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs
ICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlKgoKKTsKCgoKCgoKCmV4dGVybiBYdFRy
YW5zbGF0aW9ucyBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSgKCiAgICBjb25zdCBjaGFyKgoKKTsK
CmV4dGVybiBYdEFjY2VsZXJhdG9ycyBYdFBhcnNlQWNjZWxlcmF0b3JUYWJsZSgKCiAgICBjb25z
dCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFh0T3ZlcnJpZGVUcmFuc2xhdGlvbnMoCgogICAgV2lk
Z2V0ICwKICAgIFh0VHJhbnNsYXRpb25zCgopOwoKZXh0ZXJuIHZvaWQgWHRBdWdtZW50VHJhbnNs
YXRpb25zKAoKICAgIFdpZGdldCAsCiAgICBYdFRyYW5zbGF0aW9ucwoKKTsKCmV4dGVybiB2b2lk
IFh0SW5zdGFsbEFjY2VsZXJhdG9ycygKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0CgopOwoKZXh0
ZXJuIHZvaWQgWHRJbnN0YWxsQWxsQWNjZWxlcmF0b3JzKAoKICAgIFdpZGdldCAsCiAgICBXaWRn
ZXQKCik7CgpleHRlcm4gdm9pZCBYdFVuaW5zdGFsbFRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQK
Cik7CgpleHRlcm4gdm9pZCBYdEFwcEFkZEFjdGlvbnMoCgogICAgWHRBcHBDb250ZXh0ICwKICAg
IFh0QWN0aW9uTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVybiB2b2lkIFh0QWRkQWN0aW9u
cygKCiAgICBYdEFjdGlvbkxpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gWHRBY3Rpb25I
b29rSWQgWHRBcHBBZGRBY3Rpb25Ib29rKAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdEFjdGlv
bkhvb2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWN0aW9u
SG9vaygKCiAgICBYdEFjdGlvbkhvb2tJZAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QWN0aW9uTGlz
dCgKCiAgICBXaWRnZXRDbGFzcyAsCiAgICBYdEFjdGlvbkxpc3QqICwKICAgIENhcmRpbmFsKgoK
KTsKCmV4dGVybiB2b2lkIFh0Q2FsbEFjdGlvblByb2MoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0
IGNoYXIqICwKICAgIFhFdmVudCogLAogICAgU3RyaW5nKiAsCiAgICBDYXJkaW5hbAoKKTsKCmV4
dGVybiB2b2lkIFh0UmVnaXN0ZXJHcmFiQWN0aW9uKAoKICAgIFh0QWN0aW9uUHJvYyAsCiAgICBp
bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9p
ZCBYdFNldE11bHRpQ2xpY2tUaW1lKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVy
biBpbnQgWHRHZXRNdWx0aUNsaWNrVGltZSgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBLZXlT
eW0gWHRHZXRBY3Rpb25LZXlzeW0oCgogICAgWEV2ZW50KiAsCiAgICBNb2RpZmllcnMqCgopOwoK
CgoKCgoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXljb2RlKAoKICAgIERpc3BsYXkqICwKICAg
IHVuc2lnbmVkIGludCAsCiAgICBNb2RpZmllcnMgLAogICAgTW9kaWZpZXJzKiAsCiAgICBLZXlT
eW0qCgopOwoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXkoCgogICAgRGlzcGxheSogLAogICAg
dW5zaWduZWQgaW50ICwKICAgIE1vZGlmaWVycyAsCiAgICBNb2RpZmllcnMqICwKICAgIEtleVN5
bSoKCik7CgpleHRlcm4gdm9pZCBYdFNldEtleVRyYW5zbGF0b3IoCgogICAgRGlzcGxheSogLAog
ICAgWHRLZXlQcm9jCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckNhc2VDb252ZXJ0ZXIoCgog
ICAgRGlzcGxheSogLAogICAgWHRDYXNlUHJvYyAsCiAgICBLZXlTeW0gLAogICAgS2V5U3ltCgop
OwoKZXh0ZXJuIHZvaWQgWHRDb252ZXJ0Q2FzZSgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlTeW0g
LAogICAgS2V5U3ltKiAsCiAgICBLZXlTeW0qCgopOwpleHRlcm4gdm9pZCBYdEFkZEV2ZW50SGFu
ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50
SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZUV2ZW50SGFu
ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50
SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdEFkZFJhd0V2ZW50SGFu
ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50
SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVJhd0V2ZW50
SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2
ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdEluc2VydEV2ZW50
SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2
ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIgLAogICAgWHRMaXN0UG9zaXRpb24KCik7CgpleHRl
cm4gdm9pZCBYdEluc2VydFJhd0V2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRN
YXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIgLAogICAg
WHRMaXN0UG9zaXRpb24KCik7CgpleHRlcm4gWHRFdmVudERpc3BhdGNoUHJvYyBYdFNldEV2ZW50
RGlzcGF0Y2hlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgWHRFdmVudERpc3BhdGNo
UHJvYwoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVudFRvV2lkZ2V0KAoKICAgIFdp
ZGdldCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudFR5cGVIYW5k
bGVyKAoKICAgIFdpZGdldCAsCiAgICBpbnQgLAogICAgWHRQb2ludGVyICwKICAgIFh0RXZlbnRI
YW5kbGVyICwKICAgIFh0UG9pbnRlciAsCiAgICBYdExpc3RQb3NpdGlvbgoKKTsKCmV4dGVybiB2
b2lkIFh0UmVtb3ZlRXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAg
IFh0UG9pbnRlciAsCiAgICBYdEV2ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRl
cm4gRXZlbnRNYXNrIFh0QnVpbGRFdmVudE1hc2soCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZv
aWQgWHRSZWdpc3RlckV4dGVuc2lvblNlbGVjdG9yKAoKICAgIERpc3BsYXkqICwKICAgIGludCAs
CiAgICBpbnQgLAogICAgWHRFeHRlbnNpb25TZWxlY3RQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsK
CmV4dGVybiB2b2lkIFh0QWRkR3JhYigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIGludAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlR3JhYigKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gdm9p
ZCBYdFByb2Nlc3NFdmVudCgKCiAgICBYdElucHV0TWFzawoKKTsKCmV4dGVybiB2b2lkIFh0QXBw
UHJvY2Vzc0V2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdElucHV0TWFzawoKKTsKCmV4
dGVybiB2b2lkIFh0TWFpbkxvb3AoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTWFp
bkxvb3AoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRFeHBvc3VyZVRv
UmVnaW9uKAoKICAgIFhFdmVudCogLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRL
ZXlib2FyZEZvY3VzKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXQKCik7CgpleHRlcm4gV2lkZ2V0
IFh0R2V0S2V5Ym9hcmRGb2N1c1dpZGdldCgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gWEV2ZW50
KiBYdExhc3RFdmVudFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBUaW1lIFh0
TGFzdFRpbWVzdGFtcFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKCgoKCgoKCmV4dGVybiBY
dEludGVydmFsSWQgWHRBZGRUaW1lT3V0KAoKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWHRUaW1l
ckNhbGxiYWNrUHJvYyAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRJbnRlcnZhbElkIFh0
QXBwQWRkVGltZU91dCgKCiAgICBYdEFwcENvbnRleHQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAg
ICBYdFRpbWVyQ2FsbGJhY2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0
UmVtb3ZlVGltZU91dCgKCiAgICBYdEludGVydmFsSWQKCik7CgpleHRlcm4gWHRJbnB1dElkIFh0
QWRkSW5wdXQoCgogICAgaW50ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdElucHV0Q2FsbGJhY2tQ
cm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiBYdElucHV0SWQgWHRBcHBBZGRJbnB1dCgK
CiAgICBYdEFwcENvbnRleHQgLAogICAgaW50ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdElucHV0
Q2FsbGJhY2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlSW5w
dXQoCgogICAgWHRJbnB1dElkCgopOwoKZXh0ZXJuIFh0U2lnbmFsSWQgWHRBcHBBZGRTaWduYWwo
CgogICAgWHRBcHBDb250ZXh0ICwKICAgIFh0U2lnbmFsQ2FsbGJhY2tQcm9jICwKICAgIFh0UG9p
bnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlU2lnbmFsKAoKICAgIFh0U2lnbmFsSWQKCik7
CgpleHRlcm4gdm9pZCBYdE5vdGljZVNpZ25hbCgKCiAgICBYdFNpZ25hbElkCgopOwoKZXh0ZXJu
IHZvaWQgWHROZXh0RXZlbnQoCgogICAgWEV2ZW50KgoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTmV4
dEV2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYRXZlbnQqCgopOwoKCgoKCgoKZXh0ZXJu
IEJvb2xlYW4gWHRQZW5kaW5nKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWHRJbnB1dE1hc2sgWHRB
cHBQZW5kaW5nKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiBYdEJsb2NrSG9va0lkIFh0
QXBwQWRkQmxvY2tIb29rKAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdEJsb2NrSG9va1Byb2Mg
LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVCbG9ja0hvb2soCgogICAg
WHRCbG9ja0hvb2tJZAoKKTsKZXh0ZXJuIHZvaWQgWHRSZWFsaXplV2lkZ2V0KAoKICAgIFdpZGdl
dAoKKTsKCnZvaWQgWHRVbnJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZv
aWQgWHREZXN0cm95V2lkZ2V0KAoKICAgIFdpZGdldAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0U2Vu
c2l0aXZlKAoKICAgIFdpZGdldCAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdFNldE1hcHBl
ZFdoZW5NYW5hZ2VkKAoKICAgIFdpZGdldCAsCiAgICBpbnQKCik7CgpleHRlcm4gV2lkZ2V0IFh0
TmFtZVRvV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBX
aWRnZXQgWHRXaW5kb3dUb1dpZGdldCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7Cgpl
eHRlcm4gWHRQb2ludGVyIFh0R2V0Q2xhc3NFeHRlbnNpb24oCgogICAgV2lkZ2V0Q2xhc3MgLAog
ICAgQ2FyZGluYWwgLAogICAgWHJtUXVhcmsgLAogICAgbG9uZyAsCiAgICBDYXJkaW5hbAoKKTsK
ZXh0ZXJuIEFyZ0xpc3QgWHRNZXJnZUFyZ0xpc3RzKAoKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGlu
YWwgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKZXh0ZXJuIFh0VmFyQXJnc0xpc3Qg
WHRWYUNyZWF0ZUFyZ3NMaXN0KAoKICAgIFh0UG9pbnRlciAsIC4uLgoKKTsKZXh0ZXJuIERpc3Bs
YXkgKlh0RGlzcGxheSgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gRGlzcGxheSAqWHREaXNwbGF5
T2ZPYmplY3QoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW4oCgogICAg
V2lkZ2V0CgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW5PZk9iamVjdCgKCiAgICBXaWRnZXQK
Cik7CgpleHRlcm4gV2luZG93IFh0V2luZG93KAoKICAgIFdpZGdldAoKKTsKCmV4dGVybiBXaW5k
b3cgWHRXaW5kb3dPZk9iamVjdCgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gU3RyaW5nIFh0TmFt
ZSgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gV2lkZ2V0Q2xhc3MgWHRTdXBlcmNsYXNzKAoKICAg
IFdpZGdldAoKKTsKCmV4dGVybiBXaWRnZXRDbGFzcyBYdENsYXNzKAoKICAgIFdpZGdldAoKKTsK
CmV4dGVybiBXaWRnZXQgWHRQYXJlbnQoCgogICAgV2lkZ2V0CgopOwoKCgoKCgoKZXh0ZXJuIHZv
aWQgWHRBZGRDYWxsYmFjaygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRD
YWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVDYWxs
YmFjaygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRDYWxsYmFja1Byb2Mg
LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDYWxsYmFja3MoCgogICAgV2lk
Z2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0Q2FsbGJhY2tMaXN0CgopOwoKZXh0ZXJuIHZv
aWQgWHRSZW1vdmVDYWxsYmFja3MoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IFh0Q2FsbGJhY2tMaXN0CgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVBbGxDYWxsYmFja3MoCgog
ICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKCmV4dGVybiB2b2lkIFh0Q2FsbENhbGxi
YWNrcygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRQb2ludGVyCgopOwoK
ZXh0ZXJuIHZvaWQgWHRDYWxsQ2FsbGJhY2tMaXN0KAoKICAgIFdpZGdldCAsCiAgICBYdENhbGxi
YWNrTGlzdCAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRDYWxsYmFja1N0YXR1cyBYdEhh
c0NhbGxiYWNrcygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhcioKCik7CmV4dGVybiBYdEdl
b21ldHJ5UmVzdWx0IFh0TWFrZUdlb21ldHJ5UmVxdWVzdCgKCiAgICBXaWRnZXQgLAogICAgWHRX
aWRnZXRHZW9tZXRyeSogLAogICAgWHRXaWRnZXRHZW9tZXRyeSoKCik7CgpleHRlcm4gWHRHZW9t
ZXRyeVJlc3VsdCBYdFF1ZXJ5R2VvbWV0cnkoCgogICAgV2lkZ2V0ICwKICAgIFh0V2lkZ2V0R2Vv
bWV0cnkqICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0
ZVBvcHVwU2hlbGwoCgogICAgY29uc3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lk
Z2V0ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFD
cmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENsYXNzICwKICAg
IFdpZGdldCAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdFBvcHVwKAoKICAgIFdpZGdldCAs
CiAgICBYdEdyYWJLaW5kCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3B1cFNwcmluZ0xvYWRlZCgKCiAg
ICBXaWRnZXQKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9uZSgKCiAgICBXaWRnZXQgLAog
ICAgWHRQb2ludGVyICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tO
b25leGNsdXNpdmUoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdFBvaW50ZXIK
Cik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrRXhjbHVzaXZlKAoKICAgIFdpZGdldCAsCiAgICBY
dFBvaW50ZXIgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3Bkb3duKAoKICAg
IFdpZGdldAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tQb3Bkb3duKAoKICAgIFdpZGdldCAs
CiAgICBYdFBvaW50ZXIgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRNZW51UG9w
dXBBY3Rpb24oCgogICAgV2lkZ2V0ICwKICAgIFhFdmVudCogLAogICAgU3RyaW5nKiAsCiAgICBD
YXJkaW5hbCoKCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlV2lkZ2V0KAoKICAgIGNvbnN0IGNo
YXIqICwKICAgIFdpZGdldENsYXNzICwKICAgIFdpZGdldCAsCiAgICBBcmdMaXN0ICwKICAgIENh
cmRpbmFsCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZU1hbmFnZWRXaWRnZXQoCgogICAgY29u
c3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIEFyZ0xpc3QgLAog
ICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVXaWRnZXQoCgogICAgY29u
c3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4
dGVybiBXaWRnZXQgWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoCgogICAgY29uc3QgY2hhciogLAog
ICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQg
WHRDcmVhdGVBcHBsaWNhdGlvblNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENs
YXNzICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0QXBw
Q3JlYXRlU2hlbGwoCgogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgV2lk
Z2V0Q2xhc3MgLAogICAgRGlzcGxheSogLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsK
CmV4dGVybiBXaWRnZXQgWHRWYUFwcENyZWF0ZVNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENsYXNzICwKICAgIERpc3BsYXkqICwKICAgIC4uLgoK
KTsKCgoKCgoKCmV4dGVybiB2b2lkIFh0VG9vbGtpdEluaXRpYWxpemUoCgogICAgdm9pZAoKKTsK
CmV4dGVybiBYdExhbmd1YWdlUHJvYyBYdFNldExhbmd1YWdlUHJvYygKCiAgICBYdEFwcENvbnRl
eHQgLAogICAgWHRMYW5ndWFnZVByb2MgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQg
WHREaXNwbGF5SW5pdGlhbGl6ZSgKCiAgICBYdEFwcENvbnRleHQgLAogICAgRGlzcGxheSogLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtT3B0aW9uRGVzY1JlYyog
LAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBjaGFyKioKCik7CgpleHRlcm4gV2lkZ2V0
IFh0T3BlbkFwcGxpY2F0aW9uKAoKICAgIFh0QXBwQ29udGV4dCogLAogICAgY29uc3QgY2hhciog
LAogICAgWHJtT3B0aW9uRGVzY0xpc3QgLAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBT
dHJpbmcqICwKICAgIFN0cmluZyogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgQXJnTGlzdCAsCiAg
ICBDYXJkaW5hbAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYU9wZW5BcHBsaWNhdGlvbigKCiAgICBY
dEFwcENvbnRleHQqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybU9wdGlvbkRlc2NMaXN0ICwK
ICAgIENhcmRpbmFsICwKICAgIGludCogLAogICAgU3RyaW5nKiAsCiAgICBTdHJpbmcqICwKICAg
IFdpZGdldENsYXNzICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQgWHRBcHBJbml0aWFsaXpl
KAoKICAgIFh0QXBwQ29udGV4dCogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtT3B0aW9uRGVz
Y0xpc3QgLAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBTdHJpbmcqICwKICAgIFN0cmlu
ZyogLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFw
cEluaXRpYWxpemUoCgogICAgWHRBcHBDb250ZXh0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBY
cm1PcHRpb25EZXNjTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIFN0cmluZyog
LAogICAgU3RyaW5nKiAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0SW5pdGlhbGl6ZSgK
CiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1PcHRpb25EZXNjUmVj
KiAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBEaXNw
bGF5ICpYdE9wZW5EaXNwbGF5KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKiAs
CiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1PcHRpb25EZXNjUmVj
KiAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBYdEFw
cENvbnRleHQgWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoCgogICAgdm9pZAoKKTsKCmV4dGVy
biB2b2lkIFh0QXBwU2V0RmFsbGJhY2tSZXNvdXJjZXMoCgogICAgWHRBcHBDb250ZXh0ICwKICAg
IFN0cmluZyoKCik7CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoCgog
ICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZvaWQgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3Mo
CgogICAgV2lkZ2V0Q2xhc3MKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0V2lkZ2V0VG9BcHBs
aWNhdGlvbkNvbnRleHQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIFh0QXBwQ29udGV4dCBYdERp
c3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBYcm1E
YXRhYmFzZSBYdERhdGFiYXNlKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIFhybURhdGFiYXNl
IFh0U2NyZWVuRGF0YWJhc2UoCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiB2b2lkIFh0Q2xvc2VE
aXNwbGF5KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRBcHBsaWNhdGlvblJl
c291cmNlcygKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFh0UmVzb3VyY2VMaXN0
ICwKICAgIENhcmRpbmFsICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
dm9pZCBYdFZhR2V0QXBwbGljYXRpb25SZXNvdXJjZXMoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9p
bnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAgICAuLi4KCik7Cgpl
eHRlcm4gdm9pZCBYdEdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVy
ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0UmVzb3VyY2VMaXN0
ICwKICAgIENhcmRpbmFsICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
dm9pZCBYdFZhR2V0U3VicmVzb3VyY2VzKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHRSZXNvdXJjZUxpc3QgLAog
ICAgQ2FyZGluYWwgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRWYWx1ZXMoCgogICAg
V2lkZ2V0ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdFZh
U2V0VmFsdWVzKAoKICAgIFdpZGdldCAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFZh
bHVlcygKCiAgICBXaWRnZXQgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVy
biB2b2lkIFh0VmFHZXRWYWx1ZXMoCgogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4dGVybiB2
b2lkIFh0U2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAs
CiAgICBDYXJkaW5hbCAsCiAgICBBcmdMaXN0ICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZv
aWQgWHRWYVNldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIgLAogICAgWHRSZXNvdXJjZUxpc3Qg
LAogICAgQ2FyZGluYWwgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTdWJ2YWx1ZXMo
CgogICAgWHRQb2ludGVyICwKICAgIFh0UmVzb3VyY2VMaXN0ICwKICAgIENhcmRpbmFsICwKICAg
IEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdFZhR2V0U3VidmFsdWVz
KAoKICAgIFh0UG9pbnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAg
ICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFJlc291cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFz
cyAsCiAgICBYdFJlc291cmNlTGlzdCogLAogICAgQ2FyZGluYWwqCgopOwoKZXh0ZXJuIHZvaWQg
WHRHZXRDb25zdHJhaW50UmVzb3VyY2VMaXN0KAoKICAgIFdpZGdldENsYXNzICwKICAgIFh0UmVz
b3VyY2VMaXN0KiAsCiAgICBDYXJkaW5hbCoKCik7CnR5cGVkZWYgc3RydWN0IF9YdENoZWNrcG9p
bnRUb2tlblJlYyB7CiAgICBpbnQgc2F2ZV90eXBlOwogICAgaW50IGludGVyYWN0X3N0eWxlOwog
ICAgQm9vbGVhbiBzaHV0ZG93bjsKICAgIEJvb2xlYW4gZmFzdDsKICAgIEJvb2xlYW4gY2FuY2Vs
X3NodXRkb3duOwogICAgaW50IHBoYXNlOwogICAgaW50IGludGVyYWN0X2RpYWxvZ190eXBlOwog
ICAgQm9vbGVhbiByZXF1ZXN0X2NhbmNlbDsKICAgIEJvb2xlYW4gcmVxdWVzdF9uZXh0X3BoYXNl
OwogICAgQm9vbGVhbiBzYXZlX3N1Y2Nlc3M7CiAgICBpbnQgdHlwZTsKICAgIFdpZGdldCB3aWRn
ZXQ7Cn0gWHRDaGVja3BvaW50VG9rZW5SZWMsICpYdENoZWNrcG9pbnRUb2tlbjsKClh0Q2hlY2tw
b2ludFRva2VuIFh0U2Vzc2lvbkdldFRva2VuKAoKICAgIFdpZGdldAoKKTsKCnZvaWQgWHRTZXNz
aW9uUmV0dXJuVG9rZW4oCgogICAgWHRDaGVja3BvaW50VG9rZW4KCik7CgoKCgoKCgpleHRlcm4g
WHRFcnJvck1zZ0hhbmRsZXIgWHRBcHBTZXRFcnJvck1zZ0hhbmRsZXIoCgogICAgWHRBcHBDb250
ZXh0ICwKICAgIFh0RXJyb3JNc2dIYW5kbGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRFcnJvck1z
Z0hhbmRsZXIoCgogICAgWHRFcnJvck1zZ0hhbmRsZXIKCik7CgpleHRlcm4gWHRFcnJvck1zZ0hh
bmRsZXIgWHRBcHBTZXRXYXJuaW5nTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgLAogICAg
WHRFcnJvck1zZ0hhbmRsZXIKCik7CgpleHRlcm4gdm9pZCBYdFNldFdhcm5pbmdNc2dIYW5kbGVy
KAoKICAgIFh0RXJyb3JNc2dIYW5kbGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBFcnJvck1zZygK
CiAgICBYdEFwcENvbnRleHQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgU3RyaW5nKiAsCiAgICBDYXJk
aW5hbCoKCik7CgpleHRlcm4gdm9pZCBYdEVycm9yTXNnKAoKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0
cmluZyogLAogICAgQ2FyZGluYWwqCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBXYXJuaW5nTXNnKAoK
ICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBTdHJpbmcqICwKICAgIENhcmRp
bmFsKgoKKTsKCmV4dGVybiB2b2lkIFh0V2FybmluZ01zZygKCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBT
dHJpbmcqICwKICAgIENhcmRpbmFsKgoKKTsKCmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNl
dEVycm9ySGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgLAogICAgWHRFcnJvckhhbmRsZXIKCik7
CgpleHRlcm4gdm9pZCBYdFNldEVycm9ySGFuZGxlcigKCiAgICBYdEVycm9ySGFuZGxlcgoKKTsK
CmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNldFdhcm5pbmdIYW5kbGVyKAoKICAgIFh0QXBw
Q29udGV4dCAsCiAgICBYdEVycm9ySGFuZGxlcgoKKTsKCmV4dGVybiB2b2lkIFh0U2V0V2Fybmlu
Z0hhbmRsZXIoCgogICAgWHRFcnJvckhhbmRsZXIKCik7CgpleHRlcm4gdm9pZCBYdEFwcEVycm9y
KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFh0
RXJyb3IoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYdEFwcFdhcm5pbmcoCgog
ICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIHZvaWQgWHRXYXJu
aW5nKAoKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlICpYdEFwcEdldEVy
cm9yRGF0YWJhc2UoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIFhybURhdGFiYXNlICpY
dEdldEVycm9yRGF0YWJhc2UoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwR2V0RXJy
b3JEYXRhYmFzZVRleHQoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0
cmluZyAsCiAgICBpbnQgLAogICAgWHJtRGF0YWJhc2UKCik7CgpleHRlcm4gdm9pZCBYdEdldEVy
cm9yRGF0YWJhc2VUZXh0KAoKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0cmluZyAsCiAgICBpbnQKCik7
CgoKCgoKCgpleHRlcm4gY2hhciAqWHRNYWxsb2MoCgogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
Y2hhciAqWHRDYWxsb2MoCgogICAgQ2FyZGluYWwgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
Y2hhciAqWHRSZWFsbG9jKAoKICAgIGNoYXIqICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZv
aWQgWHRGcmVlKAoKICAgIGNoYXIqCgopOwpleHRlcm4gWHRXb3JrUHJvY0lkIFh0QWRkV29ya1By
b2MoCgogICAgWHRXb3JrUHJvYyAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRXb3JrUHJv
Y0lkIFh0QXBwQWRkV29ya1Byb2MoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIFh0V29ya1Byb2Mg
LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVXb3JrUHJvYygKCiAgICBY
dFdvcmtQcm9jSWQKCik7CgoKCgoKCgpleHRlcm4gR0MgWHRHZXRHQygKCiAgICBXaWRnZXQgLAog
ICAgWHRHQ01hc2sgLAogICAgWEdDVmFsdWVzKgoKKTsKCmV4dGVybiBHQyBYdEFsbG9jYXRlR0Mo
CgogICAgV2lkZ2V0ICwKICAgIENhcmRpbmFsICwKICAgIFh0R0NNYXNrICwKICAgIFhHQ1ZhbHVl
cyogLAogICAgWHRHQ01hc2sgLAogICAgWHRHQ01hc2sKCik7CgoKCgoKZXh0ZXJuIHZvaWQgWHRE
ZXN0cm95R0MoCgogICAgR0MKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVhc2VHQygKCiAgICBXaWRn
ZXQgLAogICAgR0MKCik7CgoKCmV4dGVybiB2b2lkIFh0QXBwUmVsZWFzZUNhY2hlUmVmcygKCiAg
ICBYdEFwcENvbnRleHQgLAogICAgWHRDYWNoZVJlZioKCik7CgpleHRlcm4gdm9pZCBYdENhbGxi
YWNrUmVsZWFzZUNhY2hlUmVmKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAogICAgWHRQ
b2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsYmFja1JlbGVhc2VDYWNoZVJlZkxpc3QoCgog
ICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9p
ZCBYdFNldFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXQqICwKICAg
IENhcmRpbmFsCgopOwoKZXh0ZXJuIFN0cmluZyBYdEZpbmRGaWxlKAoKICAgIGNvbnN0IGNoYXIq
ICwKICAgIFN1YnN0aXR1dGlvbiAsCiAgICBDYXJkaW5hbCAsCiAgICBYdEZpbGVQcmVkaWNhdGUK
Cik7CgpleHRlcm4gU3RyaW5nIFh0UmVzb2x2ZVBhdGhuYW1lKAoKICAgIERpc3BsYXkqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIFN1YnN0aXR1dGlvbiAsCiAgICBDYXJkaW5hbCAsCiAgICBYdEZpbGVQ
cmVkaWNhdGUKCik7CmV4dGVybiB2b2lkIFh0RGlzb3duU2VsZWN0aW9uKAoKICAgIFdpZGdldCAs
CiAgICBBdG9tICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVl
KAoKICAgIFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0b20gLAogICAgWHRTZWxlY3Rpb25DYWxs
YmFja1Byb2MgLAogICAgWHRQb2ludGVyICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9pZCBYdEdl
dFNlbGVjdGlvblZhbHVlcygKCiAgICBXaWRnZXQgLAogICAgQXRvbSAsCiAgICBBdG9tKiAsCiAg
ICBpbnQgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyKiAsCiAg
ICBUaW1lCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIFh0
QXBwQ29udGV4dCAsCiAgICB1bnNpZ25lZCBsb25nCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRTZWxl
Y3Rpb25UaW1lb3V0KAoKICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBYdEFwcEdldFNlbGVjdGlvblRpbWVvdXQoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgWHRHZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIHZvaWQKCik7CgpleHRl
cm4gWFNlbGVjdGlvblJlcXVlc3RFdmVudCAqWHRHZXRTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdp
ZGdldCAsCiAgICBBdG9tICwKICAgIFh0UmVxdWVzdElkCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRT
ZWxlY3Rpb25WYWx1ZUluY3JlbWVudGFsKAoKICAgIFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0
b20gLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyICwKICAgIFRp
bWUKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlc0luY3JlbWVudGFsKAoKICAg
IFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0b20qICwKICAgIGludCAsCiAgICBYdFNlbGVjdGlv
bkNhbGxiYWNrUHJvYyAsCiAgICBYdFBvaW50ZXIqICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9p
ZCBYdFNldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAg
QXRvbSAsCiAgICBYdFBvaW50ZXIgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0ICwKICAgIEF0
b20gLAogICAgWHRSZXF1ZXN0SWQgLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1
bnNpZ25lZCBsb25nKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVTZWxlY3Rp
b25SZXF1ZXN0KAoKICAgIFdpZGdldCAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIHZvaWQgWHRTZW5k
U2VsZWN0aW9uUmVxdWVzdCgKCiAgICBXaWRnZXQgLAogICAgQXRvbSAsCiAgICBUaW1lCgopOwoK
ZXh0ZXJuIHZvaWQgWHRDYW5jZWxTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldCAsCiAgICBB
dG9tCgopOwoKZXh0ZXJuIEF0b20gWHRSZXNlcnZlUHJvcGVydHlBdG9tKAoKICAgIFdpZGdldAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVsZWFzZVByb3BlcnR5QXRvbSgKCiAgICBXaWRnZXQgLAogICAg
QXRvbQoKKTsKCmV4dGVybiB2b2lkIFh0R3JhYktleSgKCiAgICBXaWRnZXQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIE1vZGlmaWVycyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsK
CmV4dGVybiB2b2lkIFh0VW5ncmFiS2V5KAoKICAgIFdpZGdldCAsCiAgICB1bnNpZ25lZCBpbnQg
LAogICAgTW9kaWZpZXJzCgopOwoKZXh0ZXJuIGludCBYdEdyYWJLZXlib2FyZCgKCiAgICBXaWRn
ZXQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVybiB2
b2lkIFh0VW5ncmFiS2V5Ym9hcmQoCgogICAgV2lkZ2V0ICwKICAgIFRpbWUKCik7CgpleHRlcm4g
dm9pZCBYdEdyYWJCdXR0b24oCgogICAgV2lkZ2V0ICwKICAgIGludCAsCiAgICBNb2RpZmllcnMg
LAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFdp
bmRvdyAsCiAgICBDdXJzb3IKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYkJ1dHRvbigKCiAgICBX
aWRnZXQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIE1vZGlmaWVycwoKKTsKCmV4dGVybiBpbnQg
WHRHcmFiUG9pbnRlcigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICBpbnQgLAogICAgaW50ICwKICAgIFdpbmRvdyAsCiAgICBDdXJzb3IgLAogICAgVGltZQoK
KTsKCmV4dGVybiB2b2lkIFh0VW5ncmFiUG9pbnRlcigKCiAgICBXaWRnZXQgLAogICAgVGltZQoK
KTsKCmV4dGVybiB2b2lkIFh0R2V0QXBwbGljYXRpb25OYW1lQW5kQ2xhc3MoCgogICAgRGlzcGxh
eSogLAogICAgU3RyaW5nKiAsCiAgICBTdHJpbmcqCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3Rl
ckRyYXdhYmxlKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFdpZGdldAoKKTsK
CmV4dGVybiB2b2lkIFh0VW5yZWdpc3RlckRyYXdhYmxlKAoKICAgIERpc3BsYXkqICwKICAgIERy
YXdhYmxlCgopOwoKZXh0ZXJuIFdpZGdldCBYdEhvb2tzT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkq
CgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0
OwogICAgQXJnTGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDcmVhdGVIb29r
RGF0YVJlYywgKlh0Q3JlYXRlSG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcg
dHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdFBvaW50ZXIgZXZlbnRfZGF0YTsKICAgIENh
cmRpbmFsIG51bV9ldmVudF9kYXRhOwp9IFh0Q2hhbmdlSG9va0RhdGFSZWMsICpYdENoYW5nZUhv
b2tEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgV2lkZ2V0IG9sZCwgcmVxOwogICAgQXJnTGlz
dCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDaGFuZ2VIb29rU2V0VmFsdWVzRGF0
YVJlYywgKlh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBT
dHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdEdlb21ldHJ5TWFzayBjaGFuZ2VN
YXNrOwogICAgWFdpbmRvd0NoYW5nZXMgY2hhbmdlczsKfSBYdENvbmZpZ3VyZUhvb2tEYXRhUmVj
LCAqWHRDb25maWd1cmVIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFN0cmluZyB0eXBl
OwogICAgV2lkZ2V0IHdpZGdldDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkqIHJlcXVlc3Q7CiAgICBY
dFdpZGdldEdlb21ldHJ5KiByZXBseTsKICAgIFh0R2VvbWV0cnlSZXN1bHQgcmVzdWx0Owp9IFh0
R2VvbWV0cnlIb29rRGF0YVJlYywgKlh0R2VvbWV0cnlIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0
IHsKICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKfSBYdERlc3Ryb3lIb29rRGF0
YVJlYywgKlh0RGVzdHJveUhvb2tEYXRhOwoKZXh0ZXJuIHZvaWQgWHRHZXREaXNwbGF5cygKCiAg
ICBYdEFwcENvbnRleHQgLAogICAgRGlzcGxheSoqKiAsCiAgICBDYXJkaW5hbCoKCik7CgpleHRl
cm4gQm9vbGVhbiBYdFRvb2xraXRUaHJlYWRJbml0aWFsaXplKAoKICAgIHZvaWQKCik7CgpleHRl
cm4gdm9pZCBYdEFwcFNldEV4aXRGbGFnKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiBC
b29sZWFuIFh0QXBwR2V0RXhpdEZsYWcoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZv
aWQgWHRBcHBMb2NrKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwVW5s
b2NrKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Fj
Y2VsZXJhdG9yVGFibGUoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2Fy
ZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRl
cioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvQXRvbSgKCiAgICBEaXNwbGF5KiAs
CiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAg
WHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3Ry
aW5nVG9Cb29sKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs
KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgop
OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Jvb2xlYW4oCgogICAgRGlzcGxheSogLAog
ICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhy
bVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmlu
Z1RvQ29tbWFuZEFyZ0FycmF5KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAg
IENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBv
aW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0N1cnNvcigKCiAgICBEaXNw
bGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIg
LAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0
Q3Z0U3RyaW5nVG9EaW1lbnNpb24oCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0
UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGlyZWN0b3J5U3RyaW5n
KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBY
cm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Rpc3BsYXkoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFs
dWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRy
ICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRmlsZSgK
CiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJt
VmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBC
b29sZWFuIFh0Q3Z0U3RyaW5nVG9GbG9hdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0
ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250KAoKICAg
IERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1
ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xl
YW4gWHRDdnRTdHJpbmdUb0ZvbnRTZXQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIg
LAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAg
IFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRm9udFN0cnVjdCgK
CiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJt
VmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBC
b29sZWFuIFh0Q3Z0U3RyaW5nVG9HcmF2aXR5KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVl
UHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAs
CiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0luaXRpYWxT
dGF0ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAog
ICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4
dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9JbnQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFs
dWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRy
ICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvUGl4ZWwo
CgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhy
bVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVy
biBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9SZXN0YXJ0U3R5bGUoCgogICAgRGlzcGxheSogLAogICAg
WHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh
bHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv
U2hvcnQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwK
ICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7Cgpl
eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvVHJhbnNsYXRpb25UYWJsZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0
U3RyaW5nVG9VbnNpZ25lZENoYXIoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0
UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvVmlzdWFsKAoKICAgIERp
c3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0
ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKCgpleHRlcm4gQm9vbGVh
biBYdEN2dEludFRvQm9vbCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBD
YXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2lu
dGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sZWFuKAoKICAgIERpc3BsYXkq
ICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAg
ICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJ
bnRUb0NvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs
KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgop
OwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRmxvYXQoCgogICAgRGlzcGxheSogLAogICAg
WHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh
bHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRm9u
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAg
WHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVy
biBCb29sZWFuIFh0Q3Z0SW50VG9QaXhlbCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0
ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9QaXhtYXAoCgogICAg
RGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVl
UHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVybiBCb29s
ZWFuIFh0Q3Z0SW50VG9TaG9ydCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAg
ICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQ
b2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9VbnNpZ25lZENoYXIoCgogICAg
RGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVl
UHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVybiBCb29s
ZWFuIFh0Q3Z0Q29sb3JUb1BpeGVsKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwK
ICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBY
dFBvaW50ZXIqCgopOwoKCgoKCgoKdHlwZWRlZiB2b2lkICpJY2VQb2ludGVyOwoKCgoKdHlwZWRl
ZiBlbnVtIHsKICAgIEljZVBvQXV0aEhhdmVSZXBseSwKICAgIEljZVBvQXV0aFJlamVjdGVkLAog
ICAgSWNlUG9BdXRoRmFpbGVkLAogICAgSWNlUG9BdXRoRG9uZUNsZWFudXAKfSBJY2VQb0F1dGhT
dGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUGFBdXRoQ29udGludWUsCiAgICBJY2VQYUF1
dGhBY2NlcHRlZCwKICAgIEljZVBhQXV0aFJlamVjdGVkLAogICAgSWNlUGFBdXRoRmFpbGVkCn0g
SWNlUGFBdXRoU3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZUNvbm5lY3RQZW5kaW5nLAog
ICAgSWNlQ29ubmVjdEFjY2VwdGVkLAogICAgSWNlQ29ubmVjdFJlamVjdGVkLAogICAgSWNlQ29u
bmVjdElPRXJyb3IKfSBJY2VDb25uZWN0U3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVBy
b3RvY29sU2V0dXBTdWNjZXNzLAogICAgSWNlUHJvdG9jb2xTZXR1cEZhaWx1cmUsCiAgICBJY2VQ
cm90b2NvbFNldHVwSU9FcnJvciwKICAgIEljZVByb3RvY29sQWxyZWFkeUFjdGl2ZQp9IEljZVBy
b3RvY29sU2V0dXBTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQWNjZXB0U3VjY2VzcywK
ICAgIEljZUFjY2VwdEZhaWx1cmUsCiAgICBJY2VBY2NlcHRCYWRNYWxsb2MKfSBJY2VBY2NlcHRT
dGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQ2xvc2VkTm93LAogICAgSWNlQ2xvc2VkQVNB
UCwKICAgIEljZUNvbm5lY3Rpb25JblVzZSwKICAgIEljZVN0YXJ0ZWRTaHV0ZG93bk5lZ290aWF0
aW9uCn0gSWNlQ2xvc2VTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUHJvY2Vzc01lc3Nh
Z2VzU3VjY2VzcywKICAgIEljZVByb2Nlc3NNZXNzYWdlc0lPRXJyb3IsCiAgICBJY2VQcm9jZXNz
TWVzc2FnZXNDb25uZWN0aW9uQ2xvc2VkCn0gSWNlUHJvY2Vzc01lc3NhZ2VzU3RhdHVzOwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZV9vZl9yZXF1ZXN0OwogICAg
aW50IG1ham9yX29wY29kZV9vZl9yZXF1ZXN0OwogICAgaW50IG1pbm9yX29wY29kZV9vZl9yZXF1
ZXN0OwogICAgSWNlUG9pbnRlciByZXBseTsKfSBJY2VSZXBseVdhaXRJbmZvOwoKdHlwZWRlZiBz
dHJ1Y3QgX0ljZUNvbm4gKkljZUNvbm47CnR5cGVkZWYgc3RydWN0IF9JY2VMaXN0ZW5PYmogKklj
ZUxpc3Rlbk9iajsKCnR5cGVkZWYgdm9pZCAoKkljZVdhdGNoUHJvYykgKAoKICAgIEljZUNvbm4g
LAogICAgSWNlUG9pbnRlciAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRlciAqCgopOwoKdHlwZWRl
ZiB2b2lkICgqSWNlUG9Qcm9jZXNzTXNnUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAgSWNlUG9p
bnRlciAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQgLAogICAgSWNlUmVw
bHlXYWl0SW5mbyAqICwKICAgIGludCAqCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlUGFQcm9jZXNz
TXNnUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAgSWNlUG9pbnRlciAsCiAgICBpbnQgLAogICAg
dW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbWFq
b3JfdmVyc2lvbjsKICAgIGludCBtaW5vcl92ZXJzaW9uOwogICAgSWNlUG9Qcm9jZXNzTXNnUHJv
YyBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBvVmVyc2lvblJlYzsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIGludCBtYWpvcl92ZXJzaW9uOwogICAgaW50IG1pbm9yX3ZlcnNpb247CiAgICBJY2VQYVBy
b2Nlc3NNc2dQcm9jIHByb2Nlc3NfbXNnX3Byb2M7Cn0gSWNlUGFWZXJzaW9uUmVjOwoKdHlwZWRl
ZiBJY2VQb0F1dGhTdGF0dXMgKCpJY2VQb0F1dGhQcm9jKSAoCgogICAgSWNlQ29ubiAsCiAgICBJ
Y2VQb2ludGVyICogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRl
ciAsCiAgICBpbnQgKiAsCiAgICBJY2VQb2ludGVyICogLAogICAgY2hhciAqKgoKKTsKCnR5cGVk
ZWYgSWNlUGFBdXRoU3RhdHVzICgqSWNlUGFBdXRoUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAg
SWNlUG9pbnRlciAqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRlciAsCiAgICBp
bnQgKiAsCiAgICBJY2VQb2ludGVyICogLAogICAgY2hhciAqKgoKKTsKCnR5cGVkZWYgaW50ICgq
SWNlSG9zdEJhc2VkQXV0aFByb2MpICgKCiAgICBjaGFyICoKCik7Cgp0eXBlZGVmIGludCAoKklj
ZVByb3RvY29sU2V0dXBQcm9jKSAoCgogICAgSWNlQ29ubiAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIGNoYXIgKiAsCiAgICBjaGFyICogLAogICAgSWNlUG9pbnRlciAqICwKICAgIGNoYXIgKioK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VQcm90b2NvbEFjdGl2YXRlUHJvYykgKAoKICAgIEljZUNv
bm4gLAogICAgSWNlUG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZUlPRXJyb3JQcm9jKSAo
CgogICAgSWNlQ29ubgoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBpbmdSZXBseVByb2MpICgKCiAg
ICBJY2VDb25uICwKICAgIEljZVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VFcnJvckhh
bmRsZXIpICgKCiAgICBJY2VDb25uICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg
bG9uZyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIEljZVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZv
aWQgKCpJY2VJT0Vycm9ySGFuZGxlcikgKAoKICAgIEljZUNvbm4KCik7CgoKCgoKCgoKZXh0ZXJu
IGludCBJY2VSZWdpc3RlckZvclByb3RvY29sU2V0dXAgKAoKICAgIGNoYXIgKiAsCiAgICBjaGFy
ICogLAogICAgY2hhciAqICwKICAgIGludCAsCiAgICBJY2VQb1ZlcnNpb25SZWMgKiAsCiAgICBp
bnQgLAogICAgY2hhciAqKiAsCiAgICBJY2VQb0F1dGhQcm9jICogLAogICAgSWNlSU9FcnJvclBy
b2MKCik7CgpleHRlcm4gaW50IEljZVJlZ2lzdGVyRm9yUHJvdG9jb2xSZXBseSAoCgogICAgY2hh
ciAqICwKICAgIGNoYXIgKiAsCiAgICBjaGFyICogLAogICAgaW50ICwKICAgIEljZVBhVmVyc2lv
blJlYyAqICwKICAgIGludCAsCiAgICBjaGFyICoqICwKICAgIEljZVBhQXV0aFByb2MgKiAsCiAg
ICBJY2VIb3N0QmFzZWRBdXRoUHJvYyAsCiAgICBJY2VQcm90b2NvbFNldHVwUHJvYyAsCiAgICBJ
Y2VQcm90b2NvbEFjdGl2YXRlUHJvYyAsCiAgICBJY2VJT0Vycm9yUHJvYwoKKTsKCmV4dGVybiBJ
Y2VDb25uIEljZU9wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICogLAogICAgSWNlUG9pbnRlciAs
CiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gSWNl
UG9pbnRlciBJY2VHZXRDb25uZWN0aW9uQ29udGV4dCAoCgogICAgSWNlQ29ubgoKKTsKCmV4dGVy
biBpbnQgSWNlTGlzdGVuRm9yQ29ubmVjdGlvbnMgKAoKICAgIGludCAqICwKICAgIEljZUxpc3Rl
bk9iaiAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VMaXN0ZW5G
b3JXZWxsS25vd25Db25uZWN0aW9ucyAoCgogICAgY2hhciAqICwKICAgIGludCAqICwKICAgIElj
ZUxpc3Rlbk9iaiAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VH
ZXRMaXN0ZW5Db25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VMaXN0ZW5PYmoKCik7CgpleHRlcm4g
Y2hhciAqSWNlR2V0TGlzdGVuQ29ubmVjdGlvblN0cmluZyAoCgogICAgSWNlTGlzdGVuT2JqCgop
OwoKZXh0ZXJuIGNoYXIgKkljZUNvbXBvc2VOZXR3b3JrSWRMaXN0ICgKCiAgICBpbnQgLAogICAg
SWNlTGlzdGVuT2JqICoKCik7CgpleHRlcm4gdm9pZCBJY2VGcmVlTGlzdGVuT2JqcyAoCgogICAg
aW50ICwKICAgIEljZUxpc3Rlbk9iaiAqCgopOwoKZXh0ZXJuIHZvaWQgSWNlU2V0SG9zdEJhc2Vk
QXV0aFByb2MgKAoKICAgIEljZUxpc3Rlbk9iaiAsCiAgICBJY2VIb3N0QmFzZWRBdXRoUHJvYwoK
KTsKCmV4dGVybiBJY2VDb25uIEljZUFjY2VwdENvbm5lY3Rpb24gKAoKICAgIEljZUxpc3Rlbk9i
aiAsCiAgICBJY2VBY2NlcHRTdGF0dXMgKgoKKTsKCmV4dGVybiB2b2lkIEljZVNldFNodXRkb3du
TmVnb3RpYXRpb24gKAoKICAgIEljZUNvbm4gLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBJY2VD
aGVja1NodXRkb3duTmVnb3RpYXRpb24gKAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gSWNlQ2xv
c2VTdGF0dXMgSWNlQ2xvc2VDb25uZWN0aW9uICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJuIGlu
dCBJY2VBZGRDb25uZWN0aW9uV2F0Y2ggKAoKICAgIEljZVdhdGNoUHJvYyAsCiAgICBJY2VQb2lu
dGVyCgopOwoKZXh0ZXJuIHZvaWQgSWNlUmVtb3ZlQ29ubmVjdGlvbldhdGNoICgKCiAgICBJY2VX
YXRjaFByb2MgLAogICAgSWNlUG9pbnRlcgoKKTsKCmV4dGVybiBJY2VQcm90b2NvbFNldHVwU3Rh
dHVzIEljZVByb3RvY29sU2V0dXAgKAoKICAgIEljZUNvbm4gLAogICAgaW50ICwKICAgIEljZVBv
aW50ZXIgLAogICAgaW50ICwKICAgIGludCAqICwKICAgIGludCAqICwKICAgIGNoYXIgKiogLAog
ICAgY2hhciAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VQcm90
b2NvbFNodXRkb3duICgKCiAgICBJY2VDb25uICwKICAgIGludAoKKTsKCmV4dGVybiBJY2VQcm9j
ZXNzTWVzc2FnZXNTdGF0dXMgSWNlUHJvY2Vzc01lc3NhZ2VzICgKCiAgICBJY2VDb25uICwKICAg
IEljZVJlcGx5V2FpdEluZm8gKiAsCiAgICBpbnQgKgoKKTsKCmV4dGVybiBpbnQgSWNlUGluZyAo
CgogICBJY2VDb25uICwKICAgSWNlUGluZ1JlcGx5UHJvYyAsCiAgIEljZVBvaW50ZXIKCik7Cgpl
eHRlcm4gY2hhciAqSWNlQWxsb2NTY3JhdGNoICgKCiAgIEljZUNvbm4gLAogICB1bnNpZ25lZCBs
b25nCgopOwoKZXh0ZXJuIGludCBJY2VGbHVzaCAoCgogICBJY2VDb25uCgopOwoKZXh0ZXJuIGlu
dCBJY2VHZXRPdXRCdWZTaXplICgKCiAgIEljZUNvbm4KCik7CgpleHRlcm4gaW50IEljZUdldElu
QnVmU2l6ZSAoCgogICBJY2VDb25uCgopOwoKZXh0ZXJuIEljZUNvbm5lY3RTdGF0dXMgSWNlQ29u
bmVjdGlvblN0YXR1cyAoCgogICAgSWNlQ29ubgoKKTsKCmV4dGVybiBjaGFyICpJY2VWZW5kb3Ig
KAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gY2hhciAqSWNlUmVsZWFzZSAoCgogICAgSWNlQ29u
bgoKKTsKCmV4dGVybiBpbnQgSWNlUHJvdG9jb2xWZXJzaW9uICgKCiAgICBJY2VDb25uCgopOwoK
ZXh0ZXJuIGludCBJY2VQcm90b2NvbFJldmlzaW9uICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu
IGludCBJY2VDb25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJuIGNoYXIg
KkljZUNvbm5lY3Rpb25TdHJpbmcgKAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gdW5zaWduZWQg
bG9uZyBJY2VMYXN0U2VudFNlcXVlbmNlTnVtYmVyICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgSWNlTGFzdFJlY2VpdmVkU2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNv
bm4KCik7CgpleHRlcm4gaW50IEljZVN3YXBwaW5nICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu
IEljZUVycm9ySGFuZGxlciBJY2VTZXRFcnJvckhhbmRsZXIgKAoKICAgIEljZUVycm9ySGFuZGxl
cgoKKTsKCmV4dGVybiBJY2VJT0Vycm9ySGFuZGxlciBJY2VTZXRJT0Vycm9ySGFuZGxlciAoCgog
ICAgSWNlSU9FcnJvckhhbmRsZXIKCik7CgoKCgoKCmV4dGVybiBpbnQgSWNlSW5pdFRocmVhZHMg
KAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJY2VBcHBMb2NrQ29ubiAoCgogICAgSWNlQ29u
bgoKKTsKCmV4dGVybiB2b2lkIEljZUFwcFVubG9ja0Nvbm4gKAoKICAgIEljZUNvbm4KCik7CgoK
dHlwZWRlZiBJY2VQb2ludGVyIFNtUG9pbnRlcjsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1NtY0Nv
bm4gKlNtY0Nvbm47CnR5cGVkZWYgc3RydWN0IF9TbXNDb25uICpTbXNDb25uOwoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgbGVuZ3RoOwogICAgU21Qb2ludGVyIHZhbHVlOwp9IFNtUHJv
cFZhbHVlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKnR5cGU7
CiAgICBpbnQgbnVtX3ZhbHM7CiAgICBTbVByb3BWYWx1ZSAqdmFsczsKfSBTbVByb3A7CgoKCgoK
Cgp0eXBlZGVmIGVudW0gewogICAgU21jQ2xvc2VkTm93LAogICAgU21jQ2xvc2VkQVNBUCwKICAg
IFNtY0Nvbm5lY3Rpb25JblVzZQp9IFNtY0Nsb3NlU3RhdHVzOwoKCgoKCgoKdHlwZWRlZiB2b2lk
ICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoKICAgIFNtY0Nvbm4gLAogICAgU21Qb2ludGVyICwK
ICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAo
KlNtY1NhdmVZb3Vyc2VsZlBoYXNlMlByb2MpICgKCiAgICBTbWNDb25uICwKICAgIFNtUG9pbnRl
cgoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY0ludGVyYWN0UHJvYykgKAoKICAgIFNtY0Nvbm4gLAog
ICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lkICgqU21jRGllUHJvYykgKAoKICAgIFNtY0Nv
bm4gLAogICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25DYW5jZWxs
ZWRQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQg
KCpTbWNTYXZlQ29tcGxldGVQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7
Cgp0eXBlZGVmIHZvaWQgKCpTbWNQcm9wUmVwbHlQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBT
bVBvaW50ZXIgLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewoKICAgIHN0cnVjdCB7CiAgICAgICAgU21jU2F2ZVlvdXJzZWxmUHJvYyBjYWxsYmFjazsK
ICAgICAgICBTbVBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICB9IHNhdmVfeW91cnNlbGY7CgogICAg
c3RydWN0IHsKICAgICAgICBTbWNEaWVQcm9jIGNhbGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBj
bGllbnRfZGF0YTsKICAgIH0gZGllOwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21jU2F2ZUNvbXBs
ZXRlUHJvYyBjYWxsYmFjazsKICAgICAgICBTbVBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICB9IHNh
dmVfY29tcGxldGU7CgogICAgc3RydWN0IHsKICAgICAgICBTbWNTaHV0ZG93bkNhbmNlbGxlZFBy
b2MgY2FsbGJhY2s7CiAgICAgICAgU21Qb2ludGVyIGNsaWVudF9kYXRhOwogICAgfSBzaHV0ZG93
bl9jYW5jZWxsZWQ7Cgp9IFNtY0NhbGxiYWNrczsKdHlwZWRlZiBpbnQgKCpTbXNSZWdpc3RlckNs
aWVudFByb2MpICgKCiAgICBTbXNDb25uICwKICAgIFNtUG9pbnRlciAsCiAgICBjaGFyICoKCik7
Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubiAs
CiAgICBTbVBvaW50ZXIgLAogICAgaW50CgopOwoKdHlwZWRlZiB2b2lkICgqU21zSW50ZXJhY3RE
b25lUHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyICwKICAgIGludAoKKTsKCnR5
cGVkZWYgdm9pZCAoKlNtc1NhdmVZb3Vyc2VsZlJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubiAs
CiAgICBTbVBvaW50ZXIgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc1NhdmVZb3Vyc2VsZlBoYXNlMlJlcXVlc3RQ
cm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpT
bXNTYXZlWW91cnNlbGZEb25lUHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyICwK
ICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc0Nsb3NlQ29ubmVjdGlvblByb2MpICgKCiAg
ICBTbXNDb25uICwKICAgIFNtUG9pbnRlciAsCiAgICBpbnQgLAogICAgY2hhciAqKgoKKTsKCnR5
cGVkZWYgdm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBT
bVBvaW50ZXIgLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCnR5cGVkZWYgdm9pZCAoKlNt
c0RlbGV0ZVByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBTbVBvaW50ZXIgLAog
ICAgaW50ICwKICAgIGNoYXIgKioKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNHZXRQcm9wZXJ0aWVz
UHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyCgopOwoKCgoKCgp0eXBlZGVmIHN0
cnVjdCB7CgogICAgc3RydWN0IHsKICAgICAgICBTbXNSZWdpc3RlckNsaWVudFByb2MgY2FsbGJh
Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gcmVnaXN0ZXJfY2xpZW50
OwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21zSW50ZXJhY3RSZXF1ZXN0UHJvYyBjYWxsYmFjazsK
ICAgICAgICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9yZXF1ZXN0OwoK
ICAgIHN0cnVjdCB7CiAgICAgICAgU21zSW50ZXJhY3REb25lUHJvYyBjYWxsYmFjazsKICAgICAg
ICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9kb25lOwoKICAgIHN0cnVj
dCB7CiAgICAgICAgU21zU2F2ZVlvdXJzZWxmUmVxdWVzdFByb2MgY2FsbGJhY2s7CiAgICAgICAg
U21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9yZXF1ZXN0OwoKICAg
IHN0cnVjdCB7CiAgICAgICAgU21zU2F2ZVlvdXJzZWxmUGhhc2UyUmVxdWVzdFByb2MgY2FsbGJh
Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9w
aGFzZTJfcmVxdWVzdDsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc1NhdmVZb3Vyc2VsZkRvbmVQ
cm9jIGNhbGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBtYW5hZ2VyX2RhdGE7CiAgICB9IHNhdmVf
eW91cnNlbGZfZG9uZTsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc0Nsb3NlQ29ubmVjdGlvblBy
b2MgY2FsbGJhY2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gY2xvc2Vf
Y29ubmVjdGlvbjsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc1NldFByb3BlcnRpZXNQcm9jIGNh
bGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBtYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0
aWVzOwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21zRGVsZXRlUHJvcGVydGllc1Byb2MgY2FsbGJh
Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gZGVsZXRlX3Byb3BlcnRp
ZXM7CgogICAgc3RydWN0IHsKICAgICAgICBTbXNHZXRQcm9wZXJ0aWVzUHJvYyBjYWxsYmFjazsK
ICAgICAgICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBnZXRfcHJvcGVydGllczsKCn0g
U21zQ2FsbGJhY2tzOwp0eXBlZGVmIGludCAoKlNtc05ld0NsaWVudFByb2MpICgKCiAgICBTbXND
b25uICwKICAgIFNtUG9pbnRlciAsCiAgICB1bnNpZ25lZCBsb25nICogLAogICAgU21zQ2FsbGJh
Y2tzICogLAogICAgY2hhciAqKgoKKTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoKlNtY0Vycm9ySGFu
ZGxlcikgKAoKICAgIFNtY0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBs
b25nICwKICAgIGludCAsCiAgICBpbnQgLAogICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lk
ICgqU21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubiAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIGludCAsCiAgICBTbVBvaW50ZXIKCik7
CgoKCgoKCgoKCmV4dGVybiBTbWNDb25uIFNtY09wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICog
LAogICAgU21Qb2ludGVyICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAs
CiAgICBTbWNDYWxsYmFja3MgKiAsCiAgICBjaGFyICogLAogICAgY2hhciAqKiAsCiAgICBpbnQg
LAogICAgY2hhciAqCgopOwoKZXh0ZXJuIFNtY0Nsb3NlU3RhdHVzIFNtY0Nsb3NlQ29ubmVjdGlv
biAoCgogICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgY2hhciAqKgoKKTsKCmV4dGVybiB2b2lk
IFNtY01vZGlmeUNhbGxiYWNrcyAoCgogICAgU21jQ29ubiAsCiAgICB1bnNpZ25lZCBsb25nICwK
ICAgIFNtY0NhbGxiYWNrcyAqCgopOwoKZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVydGllcyAoCgog
ICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgU21Qcm9wICoqCgopOwoKZXh0ZXJuIHZvaWQgU21j
RGVsZXRlUHJvcGVydGllcyAoCgogICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgY2hhciAqKgoK
KTsKCmV4dGVybiBpbnQgU21jR2V0UHJvcGVydGllcyAoCgogICAgU21jQ29ubiAsCiAgICBTbWNQ
cm9wUmVwbHlQcm9jICwKICAgIFNtUG9pbnRlcgoKKTsKCmV4dGVybiBpbnQgU21jSW50ZXJhY3RS
ZXF1ZXN0ICgKCiAgICBTbWNDb25uICwKICAgIGludCAsCiAgICBTbWNJbnRlcmFjdFByb2MgLAog
ICAgU21Qb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgU21jSW50ZXJhY3REb25lICgKCiAgICBTbWND
b25uICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFNtY1JlcXVlc3RTYXZlWW91cnNlbGYgKAoK
ICAgIFNtY0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgU21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgogICAg
U21jQ29ubiAsCiAgICBTbWNTYXZlWW91cnNlbGZQaGFzZTJQcm9jICwKICAgIFNtUG9pbnRlcgoK
KTsKCmV4dGVybiB2b2lkIFNtY1NhdmVZb3Vyc2VsZkRvbmUgKAoKICAgIFNtY0Nvbm4gLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBTbWNQcm90b2NvbFZlcnNpb24gKAoKICAgIFNtY0Nvbm4KCik7
CgpleHRlcm4gaW50IFNtY1Byb3RvY29sUmV2aXNpb24gKAoKICAgIFNtY0Nvbm4KCik7CgpleHRl
cm4gY2hhciAqU21jVmVuZG9yICgKCiAgICBTbWNDb25uCgopOwoKZXh0ZXJuIGNoYXIgKlNtY1Jl
bGVhc2UgKAoKICAgIFNtY0Nvbm4KCik7CgpleHRlcm4gY2hhciAqU21jQ2xpZW50SUQgKAoKICAg
IFNtY0Nvbm4KCik7CgpleHRlcm4gSWNlQ29ubiBTbWNHZXRJY2VDb25uZWN0aW9uICgKCiAgICBT
bWNDb25uCgopOwoKZXh0ZXJuIGludCBTbXNJbml0aWFsaXplICgKCiAgICBjaGFyICogLAogICAg
Y2hhciAqICwKICAgIFNtc05ld0NsaWVudFByb2MgLAogICAgU21Qb2ludGVyICwKICAgIEljZUhv
c3RCYXNlZEF1dGhQcm9jICwKICAgIGludCAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gY2hhciAq
U21zQ2xpZW50SG9zdE5hbWUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gY2hhciAqU21zR2Vu
ZXJhdGVDbGllbnRJRCAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBpbnQgU21zUmVnaXN0ZXJD
bGllbnRSZXBseSAoCgogICAgU21zQ29ubiAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gdm9pZCBT
bXNTYXZlWW91cnNlbGYgKAoKICAgIFNtc0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICBp
bnQgLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgU21zU2F2ZVlvdXJzZWxmUGhhc2UyICgKCiAg
ICBTbXNDb25uCgopOwoKZXh0ZXJuIHZvaWQgU21zSW50ZXJhY3QgKAoKICAgIFNtc0Nvbm4KCik7
CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gdm9pZCBTbXNT
YXZlQ29tcGxldGUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gdm9pZCBTbXNTaHV0ZG93bkNh
bmNlbGxlZCAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiB2b2lkIFNtc1JldHVyblByb3BlcnRp
ZXMgKAoKICAgIFNtc0Nvbm4gLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCmV4dGVybiB2
b2lkIFNtc0NsZWFuVXAgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gaW50IFNtc1Byb3RvY29s
VmVyc2lvbiAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xSZXZpc2lv
biAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBjaGFyICpTbXNDbGllbnRJRCAoCgogICAgU21z
Q29ubgoKKTsKCmV4dGVybiBJY2VDb25uIFNtc0dldEljZUNvbm5lY3Rpb24gKAoKICAgIFNtc0Nv
bm4KCik7CgpleHRlcm4gU21jRXJyb3JIYW5kbGVyIFNtY1NldEVycm9ySGFuZGxlciAoCgogICAg
U21jRXJyb3JIYW5kbGVyCgopOwoKZXh0ZXJuIFNtc0Vycm9ySGFuZGxlciBTbXNTZXRFcnJvckhh
bmRsZXIgKAoKICAgIFNtc0Vycm9ySGFuZGxlcgoKKTsKCmV4dGVybiB2b2lkIFNtRnJlZVByb3Bl
cnR5ICgKCiAgICBTbVByb3AgKgoKKTsKCmV4dGVybiB2b2lkIFNtRnJlZVJlYXNvbnMgKAoKICAg
IGludCAsCiAgICBjaGFyICoqCgopOwoKCmV4dGVybiBjb25zdCBjaGFyIFh0U2hlbGxTdHJpbmdz
W107CnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjICpTaGVsbFdpZGdldENsYXNzOwp0eXBl
ZGVmIHN0cnVjdCBfT3ZlcnJpZGVTaGVsbENsYXNzUmVjICpPdmVycmlkZVNoZWxsV2lkZ2V0Q2xh
c3M7CnR5cGVkZWYgc3RydWN0IF9XTVNoZWxsQ2xhc3NSZWMgKldNU2hlbGxXaWRnZXRDbGFzczsK
dHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgKlRyYW5zaWVudFNoZWxsV2lk
Z2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Ub3BMZXZlbFNoZWxsQ2xhc3NSZWMgKlRvcExldmVs
U2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9uU2hlbGxDbGFzc1Jl
YyAqQXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfU2Vzc2lvblNo
ZWxsQ2xhc3NSZWMgKlNlc3Npb25TaGVsbFdpZGdldENsYXNzOwoKCmV4dGVybiBXaWRnZXRDbGFz
cyBzaGVsbFdpZGdldENsYXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3Mgb3ZlcnJpZGVTaGVsbFdpZGdl
dENsYXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3Mgd21TaGVsbFdpZGdldENsYXNzOwpleHRlcm4gV2lk
Z2V0Q2xhc3MgdHJhbnNpZW50U2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIHRv
cExldmVsU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIGFwcGxpY2F0aW9uU2hl
bGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIHNlc3Npb25TaGVsbFdpZGdldENsYXNz
OwpleHRlcm4gY29uc3QgY2hhciBYdFN0cmluZ3NbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htU3Ry
aW5nc1tdOwpleHRlcm4gV2lkZ2V0Q2xhc3MgdmVuZG9yU2hlbGxXaWRnZXRDbGFzczsKCnR5cGVk
ZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsUmVjICogWG1WZW5kb3JTaGVsbFdpZGdldDsKdHlwZWRl
ZiBzdHJ1Y3QgX1htVmVuZG9yU2hlbGxDbGFzc1JlYyAqIFhtVmVuZG9yU2hlbGxXaWRnZXRDbGFz
czsKCgoKCgoKCkJvb2xlYW4gWG1Jc01vdGlmV01SdW5uaW5nKFdpZGdldCBzaGVsbCk7CmV4dGVy
biB2b2lkIFhtVHJhbnNsYXRlS2V5KERpc3BsYXkgKkRzcCwgS2V5Q29kZSBLZXljb2RlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllcnMgbW9kaWZpZXJzLCBNb2RpZmllcnMgKm1v
ZGlmaWVyc19yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVN5bSAqS2V5c3lt
X3JldHVybik7CmV4dGVybiBpbnQgeG1Vc2VWZXJzaW9uOwpleHRlcm4gY2hhciBfWG1TREVGQVVM
VF9GT05UW107CmV4dGVybiBjaGFyIF9YbVNERUZBVUxUX0JBQ0tHUk9VTkRbXTsKCgoKCgp0eXBl
ZGVmIGVudW0gewogICAgWG1GT05UX0lTX0ZPTlQsCiAgICBYbUZPTlRfSVNfRk9OVFNFVCwKICAg
IFhtRk9OVF9JU19YT0MsCiAgICBYbUZPTlRfSVNfWEZUCn0gWG1Gb250VHlwZTsKCmVudW0gewog
ICAgWG1TVFJJTkdfRElSRUNUSU9OX0xfVE9fUiwKICAgIFhtU1RSSU5HX0RJUkVDVElPTl9SX1RP
X0wsCiAgICBYbVNUUklOR19ESVJFQ1RJT05fREVGQVVMVCA9IDI1NQp9OwoKZW51bSB7CiAgICBY
bVNUUklOR19DT01QT05FTlRfVU5LTk9XTiwKICAgIFhtU1RSSU5HX0NPTVBPTkVOVF9DSEFSU0VU
LAogICAgWG1TVFJJTkdfQ09NUE9ORU5UX1RFWFQsCiAgICBYbVNUUklOR19DT01QT05FTlRfRElS
RUNUSU9OLAogICAgWG1TVFJJTkdfQ09NUE9ORU5UX1NFUEFSQVRPUiwKICAgIFhtU1RSSU5HX0NP
TVBPTkVOVF9MT0NBTEVfVEVYVAoKfTsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0
cmluZ0RpcmVjdGlvbjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyICpYbVN0cmluZzsKdHlwZWRlZiBY
bVN0cmluZyAqWG1TdHJpbmdUYWJsZTsKdHlwZWRlZiBjaGFyICpYbVN0cmluZ0NoYXJTZXQ7CnR5
cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0cmluZ0NvbXBvbmVudFR5cGU7Cgp0eXBlZGVmIHN0cnVj
dCBfX1htU3RyaW5nQ29udGV4dFJlYyAqX1htU3RyaW5nQ29udGV4dDsKdHlwZWRlZiBzdHJ1Y3Qg
X19YbVN0cmluZ1JlYyAqX1htU3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBfWG10U3RyaW5nQ29udGV4
dFJlYyAqWG1TdHJpbmdDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBfWG1Gb250TGlzdENvbnRleHRS
ZWMgKlhtRm9udENvbnRleHQ7CnR5cGVkZWYgc3RydWN0IF9fWG1SZW5kaXRpb25SZWMgKlhtRm9u
dExpc3RFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgX19YbVJlbmRlclRhYmxlUmVjICpYbUZvbnRMaXN0
OwoKCgoKCmV4dGVybiBXaWRnZXRDbGFzcyB4bVByaW1pdGl2ZVdpZGdldENsYXNzOwoKdHlwZWRl
ZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NSZWMgKlhtUHJpbWl0aXZlV2lkZ2V0Q2xhc3M7CnR5
cGVkZWYgc3RydWN0IF9YbVByaW1pdGl2ZVJlYyAqWG1QcmltaXRpdmVXaWRnZXQ7CgpleHRlcm4g
V2lkZ2V0Q2xhc3MgeG1HYWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldENsYXNz
UmVjICpYbUdhZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRSZWMgKlhtR2FkZ2V0
OwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtTWFuYWdlcldpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1
Y3QgX1htTWFuYWdlckNsYXNzUmVjICpYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1
Y3QgX1htTWFuYWdlclJlYyAqWG1NYW5hZ2VyV2lkZ2V0OwplbnVtIHsKICAgIFhtUElYRUxTLAog
ICAgWG0xMDBUSF9NSUxMSU1FVEVSUywKICAgIFhtMTAwMFRIX0lOQ0hFUywKICAgIFhtMTAwVEhf
UE9JTlRTLAogICAgWG0xMDBUSF9GT05UX1VOSVRTCn07CgoKCmVudW0gewogICAgWG1ERVNUUk9Z
LAogICAgWG1VTk1BUCwKICAgIFhtRE9fTk9USElORwp9OwoKCgplbnVtIHsKICAgIFhtRVhQTElD
SVQsCiAgICBYbVBPSU5URVIKfTsKCgoKZW51bSB7CiAgICBYbU5PTkUsCiAgICBYbVRBQl9HUk9V
UCwKICAgIFhtU1RJQ0tZX1RBQl9HUk9VUCwKICAgIFhtRVhDTFVTSVZFX1RBQl9HUk9VUAp9OwoK
CgplbnVtIHsKCgoKICAgIFhtQkVMTCA9IDEKfTsKCgoKZW51bSB7CiAgICBYbU5PX09SSUVOVEFU
SU9OLAogICAgWG1WRVJUSUNBTCwKICAgIFhtSE9SSVpPTlRBTAp9OwoKCgplbnVtIHsKICAgIFht
V09SS19BUkVBLAogICAgWG1NRU5VX0JBUiwKICAgIFhtTUVOVV9QVUxMRE9XTiwKICAgIFhtTUVO
VV9QT1BVUCwKICAgIFhtTUVOVV9PUFRJT04KfTsKCgoKZW51bSB7CiAgICBYbU5PX1BBQ0tJTkcs
CiAgICBYbVBBQ0tfVElHSFQsCiAgICBYbVBBQ0tfQ09MVU1OLAogICAgWG1QQUNLX05PTkUKfTsK
CmVudW0gewoKCgoKCiAgICBYbUFMSUdOTUVOVF9DT05URU5UU19UT1AgPSAzLAogICAgWG1BTElH
Tk1FTlRfQ09OVEVOVFNfQk9UVE9NCn07CgplbnVtIHsKICAgIFhtVEVBUl9PRkZfRU5BQkxFRCwK
ICAgIFhtVEVBUl9PRkZfRElTQUJMRUQKfTsKCmVudW0gewogICAgWG1VTlBPU1QsCiAgICBYbVVO
UE9TVF9BTkRfUkVQTEFZCn07CgoKZW51bSB7CiAgICAgICAgWG1MQVNUX1BPU0lUSU9OID0gLTEs
CiAgICAgICAgWG1GSVJTVF9QT1NJVElPTgp9OwoKCgplbnVtIHsKICAgIFhtQUxJR05NRU5UX0JF
R0lOTklORywKICAgIFhtQUxJR05NRU5UX0NFTlRFUiwKICAgIFhtQUxJR05NRU5UX0VORAp9OwoK
ZW51bSB7CiAgICBYbUFMSUdOTUVOVF9CQVNFTElORV9UT1AsCgoKCiAgICBYbUFMSUdOTUVOVF9C
QVNFTElORV9CT1RUT00gPSAyLAogICAgWG1BTElHTk1FTlRfV0lER0VUX1RPUCwKICAgIFhtQUxJ
R05NRU5UX1dJREdFVF9CT1RUT00KfTsKCgoKZW51bSB7CiAgICBYbUZSQU1FX0dFTkVSSUNfQ0hJ
TEQsCiAgICBYbUZSQU1FX1dPUktBUkVBX0NISUxELAogICAgWG1GUkFNRV9USVRMRV9DSElMRAp9
OwoKCmVudW0gewogICAgWG1OX09GX01BTlkgPSAxLAogICAgWG1PTkVfT0ZfTUFOWQp9OwoKCgpl
bnVtIHsKICAgIFhtQVRUQUNIX05PTkUsCiAgICBYbUFUVEFDSF9GT1JNLAogICAgWG1BVFRBQ0hf
T1BQT1NJVEVfRk9STSwKICAgIFhtQVRUQUNIX1dJREdFVCwKICAgIFhtQVRUQUNIX09QUE9TSVRF
X1dJREdFVCwKICAgIFhtQVRUQUNIX1BPU0lUSU9OLAogICAgWG1BVFRBQ0hfU0VMRgp9OwoKCgpl
bnVtIHsKICAgIFhtUkVTSVpFX05PTkUsCiAgICBYbVJFU0laRV9HUk9XLAogICAgWG1SRVNJWkVf
QU5ZCn07CgoKCmVudW0gewogICAgWG1DUl9OT05FLAogICAgWG1DUl9IRUxQLAogICAgWG1DUl9W
QUxVRV9DSEFOR0VELAogICAgWG1DUl9JTkNSRU1FTlQsCiAgICBYbUNSX0RFQ1JFTUVOVCwKICAg
IFhtQ1JfUEFHRV9JTkNSRU1FTlQsCiAgICBYbUNSX1BBR0VfREVDUkVNRU5ULAogICAgWG1DUl9U
T19UT1AsCiAgICBYbUNSX1RPX0JPVFRPTSwKICAgIFhtQ1JfRFJBRywKICAgIFhtQ1JfQUNUSVZB
VEUsCiAgICBYbUNSX0FSTSwKICAgIFhtQ1JfRElTQVJNLAogICAgWG1DUl9EVU1NWTEzLAogICAg
WG1DUl9EVU1NWTE0LAogICAgWG1DUl9EVU1NWTE1LAogICAgWG1DUl9NQVAsCiAgICBYbUNSX1VO
TUFQLAogICAgWG1DUl9GT0NVUywKICAgIFhtQ1JfTE9TSU5HX0ZPQ1VTLAogICAgWG1DUl9NT0RJ
RllJTkdfVEVYVF9WQUxVRSwKICAgIFhtQ1JfTU9WSU5HX0lOU0VSVF9DVVJTT1IsCiAgICBYbUNS
X0VYRUNVVEUsCiAgICBYbUNSX1NJTkdMRV9TRUxFQ1QsCiAgICBYbUNSX01VTFRJUExFX1NFTEVD
VCwKICAgIFhtQ1JfRVhURU5ERURfU0VMRUNULAogICAgWG1DUl9CUk9XU0VfU0VMRUNULAogICAg
WG1DUl9ERUZBVUxUX0FDVElPTiwKICAgIFhtQ1JfQ0xJUEJPQVJEX0RBVEFfUkVRVUVTVCwKICAg
IFhtQ1JfQ0xJUEJPQVJEX0RBVEFfREVMRVRFLAogICAgWG1DUl9DQVNDQURJTkcsCiAgICBYbUNS
X09LLAogICAgWG1DUl9DQU5DRUwsCiAgICBYbUNSX0RVTU1ZMzMsCiAgICBYbUNSX0FQUExZLAog
ICAgWG1DUl9OT19NQVRDSCwKICAgIFhtQ1JfQ09NTUFORF9FTlRFUkVELAogICAgWG1DUl9DT01N
QU5EX0NIQU5HRUQsCiAgICBYbUNSX0VYUE9TRSwKICAgIFhtQ1JfUkVTSVpFLAogICAgWG1DUl9J
TlBVVCwKICAgIFhtQ1JfR0FJTl9QUklNQVJZLAogICAgWG1DUl9MT1NFX1BSSU1BUlksCiAgICBY
bUNSX0NSRUFURSwKICAgIFhtQ1JfVEVBUl9PRkZfQUNUSVZBVEUsCiAgICBYbUNSX1RFQVJfT0ZG
X0RFQUNUSVZBVEUsCiAgICBYbUNSX09CU0NVUkVEX1RSQVZFUlNBTCwKICAgIFhtQ1JfUFJPVE9D
T0xTCn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAq
ZXZlbnQ7Cn0gWG1BbnlDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBy
ZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgaW50IGNsaWNrX2NvdW50Owp9IFhtQXJyb3dC
dXR0b25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAg
ICBYRXZlbnQgKmV2ZW50OwogICAgWG1TdHJpbmcgdmFsdWU7CiAgICBpbnQgbGVuZ3RoOwp9IFht
Q29tbWFuZENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsK
ICAgIFhFdmVudCAqZXZlbnQ7CiAgICBXaW5kb3cgd2luZG93Owp9IFhtRHJhd2luZ0FyZWFDYWxs
YmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQg
KmV2ZW50OwogICAgV2luZG93IHdpbmRvdzsKICAgIGludCBjbGlja19jb3VudDsKfSBYbURyYXdu
QnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwog
ICAgWEV2ZW50ICpldmVudDsKICAgIFhtU3RyaW5nIHZhbHVlOwogICAgaW50IGxlbmd0aDsKICAg
IFhtU3RyaW5nIG1hc2s7CiAgICBpbnQgbWFza19sZW5ndGg7CiAgICBYbVN0cmluZyBkaXI7CiAg
ICBpbnQgZGlyX2xlbmd0aDsKICAgIFhtU3RyaW5nIHBhdHRlcm47CiAgICBpbnQgcGF0dGVybl9s
ZW5ndGg7Cn0gWG1GaWxlU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50ICpldmVudDsKICAgIFhtU3RyaW5nIGl0ZW07
CiAgICBpbnQgaXRlbV9sZW5ndGg7CiAgICBpbnQgaXRlbV9wb3NpdGlvbjsKICAgIFhtU3RyaW5n
ICpzZWxlY3RlZF9pdGVtczsKICAgIGludCBzZWxlY3RlZF9pdGVtX2NvdW50OwogICAgaW50ICpz
ZWxlY3RlZF9pdGVtX3Bvc2l0aW9uczsKICAgIGludCBzZWxlY3Rpb25fdHlwZTsKfSBYbUxpc3RD
YWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAgICBYRXZl
bnQgKmV2ZW50OwogICAgaW50IGNsaWNrX2NvdW50Owp9IFhtUHVzaEJ1dHRvbkNhbGxiYWNrU3Ry
dWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7
CiAgICBXaWRnZXQgd2lkZ2V0OwogICAgY2hhciAqZGF0YTsKICAgIGNoYXIgKmNhbGxiYWNrc3Ry
dWN0Owp9IFhtUm93Q29sdW1uQ2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAg
aW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBpbnQgdmFsdWU7Cn0gWG1TY2FsZUNh
bGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVu
dCAqZXZlbnQ7CiAgICBpbnQgdmFsdWU7CiAgICBpbnQgcGl4ZWw7Cn0gWG1TY3JvbGxCYXJDYWxs
YmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQg
KmV2ZW50OwogICAgWG1TdHJpbmcgdmFsdWU7CiAgICBpbnQgbGVuZ3RoOwp9IFhtU2VsZWN0aW9u
Qm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwogICAg
WEV2ZW50ICpldmVudDsKICAgIGludCBzZXQ7Cn0gWG1Ub2dnbGVCdXR0b25DYWxsYmFja1N0cnVj
dDsKCgoKZW51bSB7CiAgICBYbU1VTFRJQ0xJQ0tfRElTQ0FSRCwKICAgIFhtTVVMVElDTElDS19L
RUVQCn07CgoKZW51bSB7CiAgICBYbVNIQURPV19JTiA9IDcsCiAgICBYbVNIQURPV19PVVQKfTsK
CgplbnVtIHsKICAgIFhtQVJST1dfVVAsCiAgICBYbUFSUk9XX0RPV04sCiAgICBYbUFSUk9XX0xF
RlQsCiAgICBYbUFSUk9XX1JJR0hUCn07CgoKCmVudW0gewogICAgWG1OT19MSU5FLAogICAgWG1T
SU5HTEVfTElORSwKICAgIFhtRE9VQkxFX0xJTkUsCiAgICBYbVNJTkdMRV9EQVNIRURfTElORSwK
ICAgIFhtRE9VQkxFX0RBU0hFRF9MSU5FLAogICAgWG1TSEFET1dfRVRDSEVEX0lOLAogICAgWG1T
SEFET1dfRVRDSEVEX09VVCwKICAgIFhtU0hBRE9XX0VUQ0hFRF9JTl9EQVNILAogICAgWG1TSEFE
T1dfRVRDSEVEX09VVF9EQVNILAogICAgWG1JTlZBTElEX1NFUEFSQVRPUl9UWVBFCn07CgoKCmVu
dW0gewogICAgWG1QSVhNQVAgPSAxLAogICAgWG1TVFJJTkcKfTsKCgplbnVtIHsKICAgIFhtV0lO
RE9XLAoKCgogICAgWG1DVVJTT1IgPSAyCn07CgoKCmVudW0gewogICAgWG1NQVhfT05fVE9QLAog
ICAgWG1NQVhfT05fQk9UVE9NLAogICAgWG1NQVhfT05fTEVGVCwKICAgIFhtTUFYX09OX1JJR0hU
Cn07CgoKCmVudW0gewogICAgWG1TSU5HTEVfU0VMRUNULAogICAgWG1NVUxUSVBMRV9TRUxFQ1Qs
CiAgICBYbUVYVEVOREVEX1NFTEVDVCwKICAgIFhtQlJPV1NFX1NFTEVDVAp9OwoKZW51bSB7CiAg
ICBYbVNUQVRJQywKICAgIFhtRFlOQU1JQwp9OwoKCgplbnVtIHsKICAgIFhtVkFSSUFCTEUsCiAg
ICBYbUNPTlNUQU5ULAogICAgWG1SRVNJWkVfSUZfUE9TU0lCTEUKfTsKCmVudW0gewogICAgWG1B
VVRPTUFUSUMsCiAgICBYbUFQUExJQ0FUSU9OX0RFRklORUQKfTsKCmVudW0gewoKCgogICAgWG1B
U19ORUVERUQgPSAxCn07CgplbnVtIHsKICAgIFhtQk9UVE9NX1JJR0hULAogICAgWG1UT1BfUklH
SFQsCiAgICBYbUJPVFRPTV9MRUZULAogICAgWG1UT1BfTEVGVAp9OwoKCgplbnVtIHsKICAgIFht
Q09NTUFORF9BQk9WRV9XT1JLU1BBQ0UsCiAgICBYbUNPTU1BTkRfQkVMT1dfV09SS1NQQUNFCn07
CgoKCmVudW0gewogICAgWG1NVUxUSV9MSU5FX0VESVQsCiAgICBYbVNJTkdMRV9MSU5FX0VESVQK
fTsKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFhtVEVYVF9GT1JXQVJELAogICAgWG1URVhUX0JBQ0tX
QVJECn0gWG1UZXh0RGlyZWN0aW9uOwoKdHlwZWRlZiBsb25nIFhtVGV4dFBvc2l0aW9uOwp0eXBl
ZGVmIEF0b20gWG1UZXh0Rm9ybWF0Owp0eXBlZGVmIGVudW0gewogICAgWG1TRUxFQ1RfUE9TSVRJ
T04sCiAgICBYbVNFTEVDVF9XSElURVNQQUNFLAogICAgWG1TRUxFQ1RfV09SRCwKICAgIFhtU0VM
RUNUX0xJTkUsCiAgICBYbVNFTEVDVF9BTEwsCiAgICBYbVNFTEVDVF9QQVJBR1JBUEgKfSBYbVRl
eHRTY2FuVHlwZTsKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFhtSElHSExJR0hUX05PUk1BTCwKICAg
IFhtSElHSExJR0hUX1NFTEVDVEVELAogICAgWG1ISUdITElHSFRfU0VDT05EQVJZX1NFTEVDVEVE
Cn0gWG1IaWdobGlnaHRNb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqcHRyOwogICAg
aW50IGxlbmd0aDsKICAgIFhtVGV4dEZvcm1hdCBmb3JtYXQ7Cn0gWG1UZXh0QmxvY2tSZWMsICpY
bVRleHRCbG9jazsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50
ICpldmVudDsKICAgIEJvb2xlYW4gZG9pdDsKICAgIFhtVGV4dFBvc2l0aW9uIGN1cnJJbnNlcnQs
IG5ld0luc2VydDsKICAgIFhtVGV4dFBvc2l0aW9uIHN0YXJ0UG9zLCBlbmRQb3M7CiAgICBYbVRl
eHRCbG9jayB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0LCAqWG1UZXh0VmVyaWZ5
UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgd2NoYXJfdCAqd2NzcHRyOwogICAgaW50IGxlbmd0
aDsKfSBYbVRleHRCbG9ja1JlY1djcywgKlhtVGV4dEJsb2NrV2NzOwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBCb29sZWFuIGRvaXQ7CiAg
ICBYbVRleHRQb3NpdGlvbiBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBYbVRleHRQb3NpdGlv
biBzdGFydFBvcywgZW5kUG9zOwogICAgWG1UZXh0QmxvY2tXY3MgdGV4dDsKfSBYbVRleHRWZXJp
ZnlDYWxsYmFja1N0cnVjdFdjcywgKlhtVGV4dFZlcmlmeVB0cldjczsKCgoKCgoKCmVudW0gewog
ICAgWG1ESUFMT0dfTk9ORSwKICAgIFhtRElBTE9HX0FQUExZX0JVVFRPTiwKICAgIFhtRElBTE9H
X0NBTkNFTF9CVVRUT04sCiAgICBYbURJQUxPR19ERUZBVUxUX0JVVFRPTiwKICAgIFhtRElBTE9H
X09LX0JVVFRPTiwKICAgIFhtRElBTE9HX0ZJTFRFUl9MQUJFTCwKICAgIFhtRElBTE9HX0ZJTFRF
Ul9URVhULAogICAgWG1ESUFMT0dfSEVMUF9CVVRUT04sCiAgICBYbURJQUxPR19MSVNULAogICAg
WG1ESUFMT0dfTElTVF9MQUJFTCwKICAgIFhtRElBTE9HX01FU1NBR0VfTEFCRUwsCiAgICBYbURJ
QUxPR19TRUxFQ1RJT05fTEFCRUwsCiAgICBYbURJQUxPR19TWU1CT0xfTEFCRUwsCiAgICBYbURJ
QUxPR19URVhULAogICAgWG1ESUFMT0dfU0VQQVJBVE9SLAogICAgWG1ESUFMT0dfRElSX0xJU1Qs
CiAgICBYbURJQUxPR19ESVJfTElTVF9MQUJFTAp9OwplbnVtIHsKICAgIFhtRElBTE9HX01PREVM
RVNTLAogICAgWG1ESUFMT0dfUFJJTUFSWV9BUFBMSUNBVElPTl9NT0RBTCwKICAgIFhtRElBTE9H
X0ZVTExfQVBQTElDQVRJT05fTU9EQUwsCiAgICBYbURJQUxPR19TWVNURU1fTU9EQUwKfTsKCgoK
CgoKZW51bSB7CiAgICBYbVBMQUNFX1RPUCwKICAgIFhtUExBQ0VfQUJPVkVfU0VMRUNUSU9OLAog
ICAgWG1QTEFDRV9CRUxPV19TRUxFQ1RJT04KfTsKZW51bSB7CiAgICBYbURJQUxPR19XT1JLX0FS
RUEsCiAgICBYbURJQUxPR19QUk9NUFQsCiAgICBYbURJQUxPR19TRUxFQ1RJT04sCiAgICBYbURJ
QUxPR19DT01NQU5ELAogICAgWG1ESUFMT0dfRklMRV9TRUxFQ1RJT04KfTsKCgplbnVtIHsKICAg
IFhtRElBTE9HX1RFTVBMQVRFLAogICAgWG1ESUFMT0dfRVJST1IsCiAgICBYbURJQUxPR19JTkZP
Uk1BVElPTiwKICAgIFhtRElBTE9HX01FU1NBR0UsCiAgICBYbURJQUxPR19RVUVTVElPTiwKICAg
IFhtRElBTE9HX1dBUk5JTkcsCiAgICBYbURJQUxPR19XT1JLSU5HCn07CgoKCnR5cGVkZWYgZW51
bSB7CiAgICBYbVZJU0lCSUxJVFlfVU5PQlNDVVJFRCwKICAgIFhtVklTSUJJTElUWV9QQVJUSUFM
TFlfT0JTQ1VSRUQsCiAgICBYbVZJU0lCSUxJVFlfRlVMTFlfT0JTQ1VSRUQKfSBYbVZpc2liaWxp
dHk7Cgp0eXBlZGVmIGVudW0gewogICAgWG1UUkFWRVJTRV9DVVJSRU5ULAogICAgWG1UUkFWRVJT
RV9ORVhULAogICAgWG1UUkFWRVJTRV9QUkVWLAogICAgWG1UUkFWRVJTRV9IT01FLAogICAgWG1U
UkFWRVJTRV9ORVhUX1RBQl9HUk9VUCwKICAgIFhtVFJBVkVSU0VfUFJFVl9UQUJfR1JPVVAsCiAg
ICBYbVRSQVZFUlNFX1VQLAogICAgWG1UUkFWRVJTRV9ET1dOLAogICAgWG1UUkFWRVJTRV9MRUZU
LAogICAgWG1UUkFWRVJTRV9SSUdIVAp9IFhtVHJhdmVyc2FsRGlyZWN0aW9uOwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBXaWRnZXQgdHJh
dmVyc2FsX2Rlc3RpbmF0aW9uOwogICAgWG1UcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uOwp9
IFhtVHJhdmVyc2VPYnNjdXJlZENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IFhtTmF2aWdhdGlvblR5cGU7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbUJ1dHRvblR5cGU7
CnR5cGVkZWYgWG1CdXR0b25UeXBlICogWG1CdXR0b25UeXBlVGFibGU7CnR5cGVkZWYgS2V5U3lt
ICogWG1LZXlTeW1UYWJsZTsKdHlwZWRlZiBYbVN0cmluZ0NoYXJTZXQgKiBYbVN0cmluZ0NoYXJT
ZXRUYWJsZTsKCmVudW0gewogICAgWG1QVVNIQlVUVE9OID0gMSwKICAgIFhtVE9HR0xFQlVUVE9O
LAogICAgWG1SQURJT0JVVFRPTiwKICAgIFhtQ0FTQ0FERUJVVFRPTiwKICAgIFhtU0VQQVJBVE9S
LAogICAgWG1ET1VCTEVfU0VQQVJBVE9SLAogICAgWG1USVRMRQp9OwoKCgoKCnR5cGVkZWYgWHRQ
b2ludGVyICgqWG1SZXNvdXJjZUJhc2VQcm9jKShXaWRnZXQgdywgWHRQb2ludGVyKTsKCnR5cGVk
ZWYgc3RydWN0IF9YbVNlY29uZGFyeVJlc291cmNlRGF0YVJlYyB7CiAgICBYbVJlc291cmNlQmFz
ZVByb2MgYmFzZV9wcm9jOwogICAgWHRQb2ludGVyIGNsaWVudF9kYXRhOwogICAgU3RyaW5nIG5h
bWU7CiAgICBTdHJpbmcgcmVzX2NsYXNzOwogICAgWHRSZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwog
ICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsKfSBYbVNlY29uZGFyeVJlc291cmNlRGF0YVJlYywg
KlhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhOwoKQ2FyZGluYWwgWG1HZXRTZWNvbmRhcnlSZXNvdXJj
ZURhdGEoV2lkZ2V0Q2xhc3Mgd2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhICoqcmVzRGF0YSk7CgoKUGl4bWFwIFhtR2V0UGl4bWFw
KFNjcmVlbiAqc2NyZWVuLCBjaGFyICppbWFnZV9uYW1lLCBQaXhlbCBmb3JlZ3JvdW5kLCBQaXhl
bCBiYWNrZ3JvdW5kKTsKUGl4bWFwIFhtR2V0UGl4bWFwQnlEZXB0aChTY3JlZW4gKnNjcmVlbiwg
Y2hhciAqaW1hZ2VfbmFtZSwgUGl4ZWwgZm9yZWdyb3VuZCwgUGl4ZWwgYmFja2dyb3VuZCwgaW50
IGRlcHRoKTsKQm9vbGVhbiBYbURlc3Ryb3lQaXhtYXAoU2NyZWVuICpzY3JlZW4sIFBpeG1hcCBw
aXhtYXApOwpCb29sZWFuIFhtSW5zdGFsbEltYWdlKFhJbWFnZSAqaW1hZ2UsIGNoYXIgKmltYWdl
X25hbWUpOwpCb29sZWFuIFhtVW5pbnN0YWxsSW1hZ2UoWEltYWdlICppbWFnZSk7CgoKCnZvaWQg
WG1VcGRhdGVEaXNwbGF5KFdpZGdldCB3KTsKCgoKdHlwZWRlZiBsb25nIFhtT2Zmc2V0Owp0eXBl
ZGVmIFhtT2Zmc2V0ICpYbU9mZnNldFB0cjsKCnZvaWQgWG1SZXNvbHZlUGFydE9mZnNldHMoV2lk
Z2V0Q2xhc3Mgd19jbGFzcywgWG1PZmZzZXRQdHIgKm9mZnNldCk7CnZvaWQgWG1SZXNvbHZlQWxs
UGFydE9mZnNldHMoV2lkZ2V0Q2xhc3Mgd19jbGFzcywgWG1PZmZzZXRQdHIgKm9mZnNldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYbU9mZnNldFB0ciAqY29uc3RyYWludF9vZmZzZXQp
OwpCb29sZWFuIFhtV2lkZ2V0R2V0QmFzZWxpbmVzKFdpZGdldCB3aWQsIERpbWVuc2lvbiAqKmJh
c2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVfY291bnQpOwpC
b29sZWFuIFhtV2lkZ2V0R2V0RGlzcGxheVJlY3QoV2lkZ2V0IHdpZCwgWFJlY3RhbmdsZSAqZGlz
cGxheXJlY3QpOwoKCgp2b2lkIFhtUmVnaXN0ZXJDb252ZXJ0ZXJzKHZvaWQpOwp2b2lkIFhtQ3Z0
U3RyaW5nVG9Vbml0VHlwZShYcm1WYWx1ZVB0ciBhcmdzLCBDYXJkaW5hbCAqbnVtX2FyZ3MsIFhy
bVZhbHVlICpmcm9tX3ZhbCwgWHJtVmFsdWUgKnRvX3ZhbCk7CmNoYXIgKlhtUmVnaXN0ZXJTZWdt
ZW50RW5jb2RpbmcoY2hhciAqZm9udGxpc3RfdGFnLCBjaGFyICpjdF9lbmNvZGluZyk7CmNoYXIg
KlhtTWFwU2VnbWVudEVuY29kaW5nKGNoYXIgKmZvbnRsaXN0X3RhZyk7ClhtU3RyaW5nIFhtQ3Z0
Q1RUb1htU3RyaW5nKGNoYXIgKnRleHQpOwpCb29sZWFuIFhtQ3Z0VGV4dFRvWG1TdHJpbmcoRGlz
cGxheSAqZGlzcGxheSwgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENhcmRpbmFsICpudW1fYXJncywgWHJtVmFsdWUgKmZyb21fdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3ZhbCwgWHRQb2ludGVyICpjb252ZXJ0ZXJfZGF0
YSk7CmNoYXIgKlhtQ3Z0WG1TdHJpbmdUb0NUKFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4gWG1D
dnRYbVN0cmluZ1RvVGV4dChEaXNwbGF5ICpkaXNwbGF5LCBYcm1WYWx1ZVB0ciBhcmdzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLCBYcm1WYWx1ZSAqZnJv
bV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqdG9fdmFsLCBYdFBv
aW50ZXIgKmNvbnZlcnRlcl9kYXRhKTsKCgoKaW50IFhtQ29udmVydFVuaXRzKFdpZGdldCB3aWRn
ZXQsIGludCBvcmllbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgIGludCBmcm9tX3VuaXRfdHlw
ZSwgaW50IGZyb21fdmFsdWUsIGludCB0b191bml0X3R5cGUpOwppbnQgWG1DdnRUb0hvcml6b250
YWxQaXhlbHMoU2NyZWVuICpzY3JlZW4sIGludCBmcm9tX3ZhbCwgaW50IGZyb21fdHlwZSk7Cmlu
dCBYbUN2dFRvVmVydGljYWxQaXhlbHMoU2NyZWVuICpzY3JlZW4sIGludCBmcm9tX3ZhbCwgaW50
IGZyb21fdHlwZSk7CmludCBYbUN2dEZyb21Ib3Jpem9udGFsUGl4ZWxzKFNjcmVlbiAqc2NyZWVu
LCBpbnQgZnJvbV92YWwsIGludCB0b190eXBlKTsKaW50IFhtQ3Z0RnJvbVZlcnRpY2FsUGl4ZWxz
KFNjcmVlbiAqc2NyZWVuLCBpbnQgZnJvbV92YWwsIGludCB0b190eXBlKTsKdm9pZCBYbVNldEZv
bnRVbml0cyhEaXNwbGF5ICpkaXNwbGF5LCBpbnQgaF92YWx1ZSwgaW50IHZfdmFsdWUpOwp2b2lk
IFhtU2V0Rm9udFVuaXQoRGlzcGxheSAqZGlzcGxheSwgaW50IHZhbHVlKTsKCgoKdm9pZCBYbVNl
dE1lbnVDdXJzb3IoRGlzcGxheSAqZGlzcGxheSwgQ3Vyc29yIGN1cnNvcklkKTsKQ3Vyc29yIFht
R2V0TWVudUN1cnNvcihEaXNwbGF5ICpkaXNwbGF5KTsKCgoKV2lkZ2V0IFhtQ3JlYXRlU2ltcGxl
Q2hlY2tCb3goV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CldpZGdldCBYbUNyZWF0
ZVNpbXBsZU1lbnVCYXIoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKV2lkZ2V0IFht
Q3JlYXRlU2ltcGxlT3B0aW9uTWVudShXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwgYXJnY291bnQp
OwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVQb3B1cE1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwg
YXJnY291bnQpOwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVu
dCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJn
bGlzdCwgQ2FyZGluYWwgYXJnY291bnQpOwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVSYWRpb0JveChX
aWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKCgoKV2lkZ2V0IFhtVmFDcmVhdGVTaW1w
bGVDaGVja0JveChXaWRnZXQgcGFyZW50LCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywgLi4uKTsKV2lkZ2V0IFhtVmFD
cmVhdGVTaW1wbGVNZW51QmFyKFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVPcHRpb25N
ZW51KFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWG1TdHJpbmcgb3B0aW9uX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBidXR0b25fc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssIC4uLik7CldpZGdldCBYbVZhQ3JlYXRlU2ltcGxl
UG9wdXBNZW51KFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywgLi4uKTsKV2lkZ2V0IFhtVmFD
cmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVudCwgU3RyaW5nIG5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0X2Zyb21fYnV0dG9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywg
Li4uKTsKV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVSYWRpb0JveChXaWRnZXQgcGFyZW50LCBTdHJp
bmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnV0dG9uX3NldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywg
Li4uKTsKCgoKV2lkZ2V0IFhtVHJhY2tpbmdFdmVudChXaWRnZXQgd2lkZ2V0LCBDdXJzb3IgY3Vy
c29yLCBCb29sZWFuIGNvbmZpbmVfdG8sCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpl
dmVudF9yZXR1cm4pOwpXaWRnZXQgWG1UcmFja2luZ0xvY2F0ZShXaWRnZXQgd2lkZ2V0LCBDdXJz
b3IgY3Vyc29yLCBCb29sZWFuIGNvbmZpbmVfdG8pOwoKCgp0eXBlZGVmIHZvaWQgKCpYbUNvbG9y
UHJvYykoWENvbG9yICpiZ19jb2xvciwgWENvbG9yICpmZ19jb2xvciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhDb2xvciAqc2VsX2NvbG9yLCBYQ29sb3IgKnRzX2NvbG9yLCBYQ29sb3Ig
KmJzX2NvbG9yKTsKCgpleHRlcm4gWG1Db2xvclByb2MgWG1TZXRDb2xvckNhbGN1bGF0aW9uKFht
Q29sb3JQcm9jIHByb2MpOwpleHRlcm4gWG1Db2xvclByb2MgWG1HZXRDb2xvckNhbGN1bGF0aW9u
KHZvaWQpOwpleHRlcm4gdm9pZCBYbUdldENvbG9ycyhTY3JlZW4gKnNjcmVlbiwgQ29sb3JtYXAg
Y29sb3JfbWFwLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kLCBQaXhl
bCAqZm9yZWdyb3VuZF9yZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICp0b3Bfc2hh
ZG93X3JldCwgUGl4ZWwgKmJvdHRvbV9zaGFkb3dfcmV0LAogICAgICAgICAgICAgICAgICAgICAg
ICBQaXhlbCAqc2VsZWN0X3JldCk7CmV4dGVybiB2b2lkIFhtQ2hhbmdlQ29sb3IoV2lkZ2V0IHdp
ZGdldCwgUGl4ZWwgYmFja2dyb3VuZCk7CgoKCkRpbWVuc2lvbiBYbVN0cmluZ0Jhc2VsaW5lKFht
Rm9udExpc3QgZm9udGxpc3QsIFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4gWG1TdHJpbmdCeXRl
Q29tcGFyZShYbVN0cmluZyBzMSwgWG1TdHJpbmcgczIpOwpCb29sZWFuIFhtU3RyaW5nQ29tcGFy
ZShYbVN0cmluZyBzMSwgWG1TdHJpbmcgczIpOwpYbVN0cmluZyBYbVN0cmluZ0NvbmNhdChYbVN0
cmluZyBzMSwgWG1TdHJpbmcgczIpOwpYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZShjaGFyICp0ZXh0
LCBjaGFyICp0YWcpOwpYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZUx0b1IoY2hhciAqdGV4dCwgY2hh
ciAqdGFnKTsKWG1TdHJpbmcgWG1TdHJpbmdMdG9SQ3JlYXRlKGNoYXIgKnRleHQsIGNoYXIgKnRh
Zyk7ClhtU3RyaW5nIFhtU3RyaW5nQ3JlYXRlTG9jYWxpemVkKGNoYXIgKnRleHQpOwpYbVN0cmlu
ZyBYbVN0cmluZ0NyZWF0ZVNpbXBsZShjaGFyICp0ZXh0KTsKWG1TdHJpbmcgWG1TdHJpbmdEaXJl
Y3Rpb25DcmVhdGUoWG1TdHJpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKTsKdm9pZCBYbVN0cmluZ0Ry
YXcoRGlzcGxheSAqZCwKICAgICAgICAgICAgICAgICAgV2luZG93IHcsCiAgICAgICAgICAgICAg
ICAgIFhtRm9udExpc3QgZm9udGxpc3QsCiAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmlu
ZywKICAgICAgICAgICAgICAgICAgR0MgZ2MsCiAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgs
CiAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgIERpbWVuc2lv
biB3aWR0aCwKICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsCiAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGF5b3V0X2RpcmVjdGlvbiwKICAgICAgICAgICAg
ICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgWG1TdHJpbmdEcmF3SW1hZ2UoRGlzcGxheSAq
ZCwgV2luZG93IHcsCiAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250bGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgR0MgZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24geCwKICAgICAgICAg
ICAgICAgICAgICAgICBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lv
biB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFsaWdubWVudCwK
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxheW91dF9kaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgWG1TdHJpbmdEcmF3
VW5kZXJsaW5lKERpc3BsYXkgKmQsIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBYbUZvbnRMaXN0IGZvbnRsaXN0LCBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDIGdjLCBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LCBEaW1lbnNpb24gd2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxpZ25tZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxheW91dF9kaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhtU3RyaW5nIHVuZGVybGluZSk7CkJvb2xlYW4gWG1TdHJpbmdFbXB0eShY
bVN0cmluZyBzMSk7CnZvaWQgWG1TdHJpbmdFeHRlbnQoWG1Gb250TGlzdCBmb250bGlzdCwKICAg
ICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgRGlt
ZW5zaW9uICp3aWR0aCwKICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gKmhlaWdodCk7CnZv
aWQgWG1TdHJpbmdGcmVlKFhtU3RyaW5nIHN0cmluZyk7CnZvaWQgWG1TdHJpbmdGcmVlQ29udGV4
dChYbVN0cmluZ0NvbnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1TdHJpbmdHZXRMdG9SKFhtU3Ry
aW5nIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IHRhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnRleHQpOwpYbVN0cmluZ0NvbXBvbmVudFR5
cGUgWG1TdHJpbmdHZXROZXh0Q29tcG9uZW50KFhtU3RyaW5nQ29udGV4dCBjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hh
clNldCAqdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb21wb25lbnRUeXBlICp1bmtub3duX3RhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCAqdW5rbm93bl9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnVua25vd25fdmFsdWUpOwpCb29sZWFuIFhtU3Ry
aW5nR2V0TmV4dFNlZ21lbnQoWG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhtU3RyaW5nQ2hhclNldCAqdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmdEaXJlY3Rpb24gKmRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJvb2xlYW4gKnNlcGFyYXRvcik7CkJvb2xlYW4gWG1TdHJpbmdIYXNTdWJzdHJpbmcoWG1T
dHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN1YnN0
cmluZyk7CkRpbWVuc2lvbiBYbVN0cmluZ0hlaWdodChYbUZvbnRMaXN0IGZvbnRsaXN0LCBYbVN0
cmluZyBzdHJpbmcpOwpCb29sZWFuIFhtU3RyaW5nSW5pdENvbnRleHQoWG1TdHJpbmdDb250ZXh0
ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKTsK
aW50IFhtU3RyaW5nTGVuZ3RoKFhtU3RyaW5nIHMxKTsKaW50IFhtU3RyaW5nTGluZUNvdW50KFht
U3RyaW5nIHN0cmluZyk7ClhtU3RyaW5nIFhtU3RyaW5nTkNvbmNhdChYbVN0cmluZyBzMSwgWG1T
dHJpbmcgczIsIGludCBudW1fYnl0ZXMpOwpYbVN0cmluZyBYbVN0cmluZ0NvcHkoWG1TdHJpbmcg
cyk7ClhtU3RyaW5nIFhtU3RyaW5nTkNvcHkoWG1TdHJpbmcgczEsIGludCBudW1fYnl0ZXMpOwpY
bVN0cmluZ0NvbXBvbmVudFR5cGUgWG1TdHJpbmdQZWVrTmV4dENvbXBvbmVudChYbVN0cmluZ0Nv
bnRleHQgY29udGV4dCk7ClhtU3RyaW5nIFhtU3RyaW5nU2VnbWVudENyZWF0ZShjaGFyICp0ZXh0
LCBjaGFyICp0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0RpcmVj
dGlvbiBkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHNl
cGFyYXRvcik7ClhtU3RyaW5nIFhtU3RyaW5nU2VwYXJhdG9yQ3JlYXRlKHZvaWQpOwoKRGltZW5z
aW9uIFhtU3RyaW5nV2lkdGgoWG1Gb250TGlzdCBmb250TGlzdCwgWG1TdHJpbmcgc3RyaW5nKTsK
ClhtRm9udExpc3QgWG1TdHJpbmdDcmVhdGVGb250TGlzdCggWEZvbnRTdHJ1Y3QgKmZvbnQsIFht
U3RyaW5nQ2hhclNldCBjaGFyc2V0KTsKCgoKWG1Gb250TGlzdCBYbUZvbnRMaXN0QXBwZW5kRW50
cnkoWG1Gb250TGlzdCBvbGRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
bUZvbnRMaXN0RW50cnkgZW50cnkpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoWEZvbnRT
dHJ1Y3QgKmZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQg
Y2hhcnNldCk7ClhtRm9udExpc3QgWG1Gb250TGlzdEFkZChYbUZvbnRMaXN0IG9sZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0ICpmb250LAogICAgICAgICAgICAgICAgICAg
ICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RDb3B5
KFhtRm9udExpc3QgZm9udGxpc3QpOwpYbUZvbnRMaXN0RW50cnkgWG1Gb250TGlzdEVudHJ5Q3Jl
YXRlKGNoYXIgKnRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUZv
bnRUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2lu
dGVyIGZvbnQpOwp2b2lkIFhtRm9udExpc3RFbnRyeUZyZWUoWG1Gb250TGlzdEVudHJ5ICplbnRy
eSk7Clh0UG9pbnRlciBYbUZvbnRMaXN0RW50cnlHZXRGb250KFhtRm9udExpc3RFbnRyeSBlbnRy
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250VHlwZSAqdHlwZV9yZXR1
cm4pOwpjaGFyICpYbUZvbnRMaXN0RW50cnlHZXRUYWcoWG1Gb250TGlzdEVudHJ5IGVudHJ5KTsK
WG1Gb250TGlzdEVudHJ5IFhtRm9udExpc3RFbnRyeUxvYWQoRGlzcGxheSAqZGlzcGxheSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udF9uYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlIHR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhZyk7CnZvaWQgWG1Gb250TGlzdEZyZWUo
WG1Gb250TGlzdCBsaXN0KTsKdm9pZCBYbUZvbnRMaXN0RnJlZUZvbnRDb250ZXh0KFhtRm9udENv
bnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1Gb250TGlzdEluaXRGb250Q29udGV4dChYbUZvbnRD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250
TGlzdCBmb250bGlzdCk7ClhtRm9udExpc3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KFhtRm9u
dENvbnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1Gb250TGlzdEdldE5leHRGb250KFhtRm9udENv
bnRleHQgY29udGV4dCwgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LCBYRm9udFN0cnVjdCAqKmZv
bnQpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1vdmVFbnRyeShYbUZvbnRMaXN0IG9sZGxpc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3RFbnRyeSBlbnRyeSk7
CgoKCgpXaWRnZXQgWG1HZXREZXN0aW5hdGlvbihEaXNwbGF5ICpkaXNwbGF5KTsKCgoKQm9vbGVh
biBYbUlzVHJhdmVyc2FibGUoV2lkZ2V0IHdpZGdldCk7ClhtVmlzaWJpbGl0eSBYbUdldFZpc2li
aWxpdHkoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1BZGRUYWJHcm91cChXaWRnZXQgd2lkZ2V0KTsK
dm9pZCBYbVJlbW92ZVRhYkdyb3VwKFdpZGdldCB3aWRnZXQpOwpXaWRnZXQgWG1HZXRUYWJHcm91
cChXaWRnZXQgd2lkZ2V0KTsKQm9vbGVhbiBYbVByb2Nlc3NUcmF2ZXJzYWwoV2lkZ2V0IHdpZGdl
dCwgWG1UcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKTsKV2lkZ2V0IFhtR2V0Rm9jdXNXaWRn
ZXQoV2lkZ2V0IHdpZGdldCk7CgoKCnZvaWQgWG1JbVJlZ2lzdGVyKFdpZGdldCB3LCB1bnNpZ25l
ZCBpbnQgcmVzZXJ2ZWQpOwp2b2lkIFhtSW1VbnJlZ2lzdGVyKFdpZGdldCB3KTsKdm9pZCBYbUlt
U2V0Rm9jdXNWYWx1ZXMoV2lkZ2V0IHcsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgbnVtX2FyZ3Mp
Owp2b2lkIFhtSW1TZXRWYWx1ZXMoV2lkZ2V0IHcsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgbnVt
X2FyZ3MpOwp2b2lkIFhtSW1VbnNldEZvY3VzKFdpZGdldCB3KTsKWElNIFhtSW1HZXRYSU0oV2lk
Z2V0IHcpOwppbnQgWG1JbU1iTG9va3VwU3RyaW5nKFdpZGdldCB3LAogICAgICAgICAgICAgICAg
ICAgICAgIFhLZXlQcmVzc2VkRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJ5dGVzLAogICAgICAgICAgICAg
ICAgICAgICAgIEtleVN5bSAqa2V5c3ltLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqc3Rh
dHVzKTsKdm9pZCBYbUltTWJSZXNldElDKFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAg
ICBjaGFyICoqbWIpOwpleHRlcm4gdm9pZCBYbUltVmFTZXRGb2N1c1ZhbHVlcyhXaWRnZXQgdywg
Li4uKTsKZXh0ZXJuIHZvaWQgWG1JbVZhU2V0VmFsdWVzKFdpZGdldCB3LCAuLi4pOwpleHRlcm4g
dm9pZCBfWG1EcmF3U2hhZG93cyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBEcmF3YWJsZSBkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHQyB0b3BfZ2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGltZW5zaW9uIHdpZHRoLCBEaW1lbnNpb24gaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBEaW1lbnNpb24gc2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2hhZG93X3R5cGUpOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NoYWRv
dyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxlIGQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgdG9wX2djLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
c2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgsIFBvc2l0
aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIHdpZHRoLCBEaW1lbnNp
b24gaGVpZ2h0KTsKCmV4dGVybiB2b2lkIF9YbUNsZWFyQm9yZGVyKERpc3BsYXkgKmRpc3BsYXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERpbWVuc2lvbiBzaGFkb3dfdGhpY2spOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NlcGFy
YXRvcihEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2Fi
bGUgZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDIHRvcF9nYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDIHNlcGFyYXRvcl9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgs
IFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gd2lkdGgs
IERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
c2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG1hcmdp
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3JpZW50YXRpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNlcGFyYXRvcl90eXBl
KTsKCmV4dGVybiB2b2lkIF9YbURyYXdEaWFtb25kKERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERyYXdhYmxlIGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDIHRvcF9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgYm90dG9tX2djLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQyBjZW50ZXJfZ2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiB3aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGltZW5zaW9uIHNoYWRvd190aGljaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGltZW5zaW9uIGZpbGwpOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NpbXBsZUhpZ2hsaWdodChEaXNw
bGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxl
IGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgZ2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIGhpZ2hsaWdo
dF90aGljayk7CgpleHRlcm4gdm9pZCBfWG1EcmF3SGlnaGxpZ2h0KERpc3BsYXkgKmRpc3BsYXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQyBnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlv
biB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbiB3
aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1l
bnNpb24gaGlnaGxpZ2h0X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
aW5lX3N0eWxlKTsKCmV4dGVybiB2b2lkIF9YbURyYXdBcnJvdyhEaXNwbGF5ICpkaXNwbGF5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDIHRvcF9nYywKICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdF9nYywKICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDIGNlbnRfZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICBQ
b3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9u
IHdpZHRoLCBEaW1lbnNpb24gaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5z
aW9uIHNoYWRvd190aGljaywKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
ZGlyZWN0aW9uKTsKCmV4dGVybiB2b2lkIF9YbUhpZ2hsaWdodEJvcmRlcihXaWRnZXQgdyk7CmV4
dGVybiB2b2lkIF9YbVVuaGlnaGxpZ2h0Qm9yZGVyKFdpZGdldCB3KTsKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgbG9uZyB4cm1fbmFtZTsKICAgIGxvbmcgeHJtX2NsYXNzOwogICAgbG9uZyB4cm1fdHlw
ZTsKICAgIENhcmRpbmFsIHhybV9zaXplOwogICAgaW50IHhybV9vZmZzZXQ7CiAgICBsb25nIHhy
bV9kZWZhdWx0X3R5cGU7CiAgICBYdFBvaW50ZXIgeHJtX2RlZmF1bHRfYWRkcjsKfSBYcm1SZXNv
dXJjZSwgKlhybVJlc291cmNlTGlzdDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdFZlcnNpb25U
eXBlOwp0eXBlZGVmIHZvaWQgKCpYdFByb2MpKAoKICAgIHZvaWQKCik7Cgp0eXBlZGVmIHZvaWQg
KCpYdFdpZGdldENsYXNzUHJvYykoCgogICAgV2lkZ2V0Q2xhc3MKCik7Cgp0eXBlZGVmIHZvaWQg
KCpYdFdpZGdldFByb2MpKAoKICAgIFdpZGdldAoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0QWNj
ZXB0Rm9jdXNQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgVGltZSoKCik7Cgp0eXBlZGVmIHZvaWQg
KCpYdEFyZ3NQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbCoK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpYdEluaXRQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0
ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRT
ZXRWYWx1ZXNGdW5jKSgKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0ICwKICAgIFdpZGdldCAsCiAg
ICBBcmdMaXN0ICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0QXJnc0Z1
bmMpKAoKICAgIFdpZGdldCAsCiAgICBBcmdMaXN0ICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVk
ZWYgdm9pZCAoKlh0QWxtb3N0UHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFdpZGdldCAsCiAgICBY
dFdpZGdldEdlb21ldHJ5KiAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgoKKTsKCnR5cGVkZWYgdm9p
ZCAoKlh0RXhwb3NlUHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFhFdmVudCogLAogICAgUmVnaW9u
CgopOwp0eXBlZGVmIHZvaWQgKCpYdFJlYWxpemVQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgWHRW
YWx1ZU1hc2sqICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsKCnR5cGVkZWYgWHRHZW9t
ZXRyeVJlc3VsdCAoKlh0R2VvbWV0cnlIYW5kbGVyKSgKCiAgICBXaWRnZXQgLAogICAgWHRXaWRn
ZXRHZW9tZXRyeSogLAogICAgWHRXaWRnZXRHZW9tZXRyeSoKCik7Cgp0eXBlZGVmIHZvaWQgKCpY
dFN0cmluZ1Byb2MpKAoKICAgIFdpZGdldCAsCiAgICBTdHJpbmcKCik7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICBTdHJpbmcgbmFtZTsKICAgIFN0cmluZyB0eXBlOwogICAgWHRBcmdWYWwgdmFsdWU7
CiAgICBpbnQgc2l6ZTsKfSBYdFR5cGVkQXJnLCAqWHRUeXBlZEFyZ0xpc3Q7Cgp0eXBlZGVmIHZv
aWQgKCpYdEFsbG9jYXRlUHJvYykoCgogICAgV2lkZ2V0Q2xhc3MgLAogICAgQ2FyZGluYWwgKiAs
CiAgICBDYXJkaW5hbCAqICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwgKiAsCiAgICBYdFR5
cGVkQXJnTGlzdCAsCiAgICBDYXJkaW5hbCAqICwKICAgIFdpZGdldCAqICwKICAgIFh0UG9pbnRl
ciAqCgopOwoKdHlwZWRlZiB2b2lkICgqWHREZWFsbG9jYXRlUHJvYykoCgogICAgV2lkZ2V0ICwK
ICAgIFh0UG9pbnRlcgoKKTsKCnN0cnVjdCBfWHRTdGF0ZVJlYzsKCnR5cGVkZWYgc3RydWN0IF9Y
dFRNUmVjIHsKICAgIFh0VHJhbnNsYXRpb25zIHRyYW5zbGF0aW9uczsKICAgIFh0Qm91bmRBY3Rp
b25zIHByb2NfdGFibGU7CiAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7CiAg
ICB1bnNpZ25lZCBsb25nIGxhc3RFdmVudFRpbWU7Cn0gWHRUTVJlYywgKlh0VE07CmV4dGVybiBp
bnQgX1h0SW5oZXJpdFRyYW5zbGF0aW9uczsKdHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKICAg
IFdpZGdldCBzZWxmOwogICAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwogICAgV2lkZ2V0IHBh
cmVudDsKICAgIFhybU5hbWUgeHJtX25hbWU7CiAgICBCb29sZWFuIGJlaW5nX2Rlc3Ryb3llZDsK
ICAgIFh0Q2FsbGJhY2tMaXN0IGRlc3Ryb3lfY2FsbGJhY2tzOwogICAgWHRQb2ludGVyIGNvbnN0
cmFpbnRzOwogICAgUG9zaXRpb24geCwgeTsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0Owog
ICAgRGltZW5zaW9uIGJvcmRlcl93aWR0aDsKICAgIEJvb2xlYW4gbWFuYWdlZDsKICAgIEJvb2xl
YW4gc2Vuc2l0aXZlOwogICAgQm9vbGVhbiBhbmNlc3Rvcl9zZW5zaXRpdmU7CiAgICBYdEV2ZW50
VGFibGUgZXZlbnRfdGFibGU7CiAgICBYdFRNUmVjIHRtOwogICAgWHRUcmFuc2xhdGlvbnMgYWNj
ZWxlcmF0b3JzOwogICAgUGl4ZWwgYm9yZGVyX3BpeGVsOwogICAgUGl4bWFwIGJvcmRlcl9waXht
YXA7CiAgICBXaWRnZXRMaXN0IHBvcHVwX2xpc3Q7CiAgICBDYXJkaW5hbCBudW1fcG9wdXBzOwog
ICAgU3RyaW5nIG5hbWU7CiAgICBTY3JlZW4gKnNjcmVlbjsKICAgIENvbG9ybWFwIGNvbG9ybWFw
OwogICAgV2luZG93IHdpbmRvdzsKICAgIENhcmRpbmFsIGRlcHRoOwogICAgUGl4ZWwgYmFja2dy
b3VuZF9waXhlbDsKICAgIFBpeG1hcCBiYWNrZ3JvdW5kX3BpeG1hcDsKICAgIEJvb2xlYW4gdmlz
aWJsZTsKICAgIEJvb2xlYW4gbWFwcGVkX3doZW5fbWFuYWdlZDsKfSBDb3JlUGFydDsKCnR5cGVk
ZWYgc3RydWN0IF9XaWRnZXRSZWMgewogICAgQ29yZVBhcnQgY29yZTsKIH0gV2lkZ2V0UmVjLCBD
b3JlUmVjOwp0eXBlZGVmIHN0cnVjdCBfQ29yZUNsYXNzUGFydCB7CiAgICBXaWRnZXRDbGFzcyBz
dXBlcmNsYXNzOwogICAgU3RyaW5nIGNsYXNzX25hbWU7CiAgICBDYXJkaW5hbCB3aWRnZXRfc2l6
ZTsKICAgIFh0UHJvYyBjbGFzc19pbml0aWFsaXplOwogICAgWHRXaWRnZXRDbGFzc1Byb2MgY2xh
c3NfcGFydF9pbml0aWFsaXplOwogICAgWHRFbnVtIGNsYXNzX2luaXRlZDsKICAgIFh0SW5pdFBy
b2MgaW5pdGlhbGl6ZTsKICAgIFh0QXJnc1Byb2MgaW5pdGlhbGl6ZV9ob29rOwogICAgWHRSZWFs
aXplUHJvYyByZWFsaXplOwogICAgWHRBY3Rpb25MaXN0IGFjdGlvbnM7CiAgICBDYXJkaW5hbCBu
dW1fYWN0aW9uczsKICAgIFh0UmVzb3VyY2VMaXN0IHJlc291cmNlczsKICAgIENhcmRpbmFsIG51
bV9yZXNvdXJjZXM7CiAgICBYcm1DbGFzcyB4cm1fY2xhc3M7CiAgICBCb29sZWFuIGNvbXByZXNz
X21vdGlvbjsKICAgIFh0RW51bSBjb21wcmVzc19leHBvc3VyZTsKICAgIEJvb2xlYW4gY29tcHJl
c3NfZW50ZXJsZWF2ZTsKICAgIEJvb2xlYW4gdmlzaWJsZV9pbnRlcmVzdDsKICAgIFh0V2lkZ2V0
UHJvYyBkZXN0cm95OwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0RXhwb3NlUHJvYyBl
eHBvc2U7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0QXJnc0Z1bmMgc2V0
X3ZhbHVlc19ob29rOwogICAgWHRBbG1vc3RQcm9jIHNldF92YWx1ZXNfYWxtb3N0OwogICAgWHRB
cmdzUHJvYyBnZXRfdmFsdWVzX2hvb2s7CiAgICBYdEFjY2VwdEZvY3VzUHJvYyBhY2NlcHRfZm9j
dXM7CiAgICBYdFZlcnNpb25UeXBlIHZlcnNpb247CiAgICBYdFBvaW50ZXIgY2FsbGJhY2tfcHJp
dmF0ZTsKICAgIFN0cmluZyB0bV90YWJsZTsKICAgIFh0R2VvbWV0cnlIYW5kbGVyIHF1ZXJ5X2dl
b21ldHJ5OwogICAgWHRTdHJpbmdQcm9jIGRpc3BsYXlfYWNjZWxlcmF0b3I7CiAgICBYdFBvaW50
ZXIgZXh0ZW5zaW9uOwogfSBDb3JlQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENs
YXNzUmVjIHsKICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKfSBXaWRnZXRDbGFzc1JlYywg
Q29yZUNsYXNzUmVjOwoKZXh0ZXJuIFdpZGdldENsYXNzUmVjIHdpZGdldENsYXNzUmVjOwp0eXBl
ZGVmIHN0cnVjdCBfQ29tcG9zaXRlUGFydCB7CiAgICBXaWRnZXRMaXN0IGNoaWxkcmVuOwogICAg
Q2FyZGluYWwgbnVtX2NoaWxkcmVuOwogICAgQ2FyZGluYWwgbnVtX3Nsb3RzOwogICAgWHRPcmRl
clByb2MgaW5zZXJ0X3Bvc2l0aW9uOwp9IENvbXBvc2l0ZVBhcnQsKkNvbXBvc2l0ZVB0cjsKCnR5
cGVkZWYgc3RydWN0IF9Db21wb3NpdGVSZWMgewogICAgQ29yZVBhcnQgY29yZTsKICAgIENvbXBv
c2l0ZVBhcnQgY29tcG9zaXRlOwp9IENvbXBvc2l0ZVJlYzsKCgoKCgoKCnR5cGVkZWYgc3RydWN0
IF9Db21wb3NpdGVDbGFzc1BhcnQgewogICAgWHRHZW9tZXRyeUhhbmRsZXIgZ2VvbWV0cnlfbWFu
YWdlcjsKICAgIFh0V2lkZ2V0UHJvYyBjaGFuZ2VfbWFuYWdlZDsKICAgIFh0V2lkZ2V0UHJvYyBp
bnNlcnRfY2hpbGQ7CiAgICBYdFdpZGdldFByb2MgZGVsZXRlX2NoaWxkOwogICAgWHRQb2ludGVy
IGV4dGVuc2lvbjsKfSBDb21wb3NpdGVDbGFzc1BhcnQsKkNvbXBvc2l0ZVBhcnRQdHI7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayBy
ZWNvcmRfdHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwog
ICAgQm9vbGVhbiBhY2NlcHRzX29iamVjdHM7CiAgICBCb29sZWFuIGFsbG93c19jaGFuZ2VfbWFu
YWdlZF9zZXQ7Cn0gQ29tcG9zaXRlQ2xhc3NFeHRlbnNpb25SZWMsICpDb21wb3NpdGVDbGFzc0V4
dGVuc2lvbjsKCgp0eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMgewogICAgIENvcmVD
bGFzc1BhcnQgY29yZV9jbGFzczsKICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2Ns
YXNzOwp9IENvbXBvc2l0ZUNsYXNzUmVjOwoKZXh0ZXJuIENvbXBvc2l0ZUNsYXNzUmVjIGNvbXBv
c2l0ZUNsYXNzUmVjOwp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludFBhcnQgewogICAgWHRQb2lu
dGVyIG11bWJsZTsKfSBDb25zdHJhaW50UGFydDsKCnR5cGVkZWYgc3RydWN0IF9Db25zdHJhaW50
UmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAg
IENvbnN0cmFpbnRQYXJ0IGNvbnN0cmFpbnQ7Cn0gQ29uc3RyYWludFJlYywgKkNvbnN0cmFpbnRX
aWRnZXQ7Cgp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUGFydCB7CiAgICBYdFJlc291
cmNlTGlzdCByZXNvdXJjZXM7CiAgICBDYXJkaW5hbCBudW1fcmVzb3VyY2VzOwogICAgQ2FyZGlu
YWwgY29uc3RyYWludF9zaXplOwogICAgWHRJbml0UHJvYyBpbml0aWFsaXplOwogICAgWHRXaWRn
ZXRQcm9jIGRlc3Ryb3k7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0UG9p
bnRlciBleHRlbnNpb247Cn0gQ29uc3RyYWludENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIFh0UG9pbnRlciBuZXh0X2V4dGVuc2lvbjsKICAgIFhybVF1YXJrIHJlY29yZF90eXBlOwog
ICAgbG9uZyB2ZXJzaW9uOwogICAgQ2FyZGluYWwgcmVjb3JkX3NpemU7CiAgICBYdEFyZ3NQcm9j
IGdldF92YWx1ZXNfaG9vazsKfSBDb25zdHJhaW50Q2xhc3NFeHRlbnNpb25SZWMsICpDb25zdHJh
aW50Q2xhc3NFeHRlbnNpb247Cgp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUmVjIHsK
ICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAgIENvbXBvc2l0ZUNsYXNzUGFydCBjb21w
b3NpdGVfY2xhc3M7CiAgICBDb25zdHJhaW50Q2xhc3NQYXJ0IGNvbnN0cmFpbnRfY2xhc3M7Cn0g
Q29uc3RyYWludENsYXNzUmVjOwoKZXh0ZXJuIENvbnN0cmFpbnRDbGFzc1JlYyBjb25zdHJhaW50
Q2xhc3NSZWM7CnR5cGVkZWYgc3RydWN0IF9PYmplY3RQYXJ0IHsKICAgIFdpZGdldCBzZWxmOwog
ICAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwogICAgV2lkZ2V0IHBhcmVudDsKICAgIFhybU5h
bWUgeHJtX25hbWU7CiAgICBCb29sZWFuIGJlaW5nX2Rlc3Ryb3llZDsKICAgIFh0Q2FsbGJhY2tM
aXN0IGRlc3Ryb3lfY2FsbGJhY2tzOwogICAgWHRQb2ludGVyIGNvbnN0cmFpbnRzOwp9IE9iamVj
dFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0UmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0
Owp9IE9iamVjdFJlYzsKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdENsYXNzUGFydCB7CgogICAgV2lk
Z2V0Q2xhc3Mgc3VwZXJjbGFzczsKICAgIFN0cmluZyBjbGFzc19uYW1lOwogICAgQ2FyZGluYWwg
d2lkZ2V0X3NpemU7CiAgICBYdFByb2MgY2xhc3NfaW5pdGlhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xh
c3NQcm9jIGNsYXNzX3BhcnRfaW5pdGlhbGl6ZTsKICAgIFh0RW51bSBjbGFzc19pbml0ZWQ7CiAg
ICBYdEluaXRQcm9jIGluaXRpYWxpemU7CiAgICBYdEFyZ3NQcm9jIGluaXRpYWxpemVfaG9vazsK
ICAgIFh0UHJvYyBvYmoxOwogICAgWHRQb2ludGVyIG9iajI7CiAgICBDYXJkaW5hbCBvYmozOwog
ICAgWHRSZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwogICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsK
ICAgIFhybUNsYXNzIHhybV9jbGFzczsKICAgIEJvb2xlYW4gb2JqNDsKICAgIFh0RW51bSBvYmo1
OwogICAgQm9vbGVhbiBvYmo2OwogICAgQm9vbGVhbiBvYmo3OwogICAgWHRXaWRnZXRQcm9jIGRl
c3Ryb3k7CiAgICBYdFByb2Mgb2JqODsKICAgIFh0UHJvYyBvYmo5OwogICAgWHRTZXRWYWx1ZXNG
dW5jIHNldF92YWx1ZXM7CiAgICBYdEFyZ3NGdW5jIHNldF92YWx1ZXNfaG9vazsKICAgIFh0UHJv
YyBvYmoxMDsKICAgIFh0QXJnc1Byb2MgZ2V0X3ZhbHVlc19ob29rOwogICAgWHRQcm9jIG9iajEx
OwogICAgWHRWZXJzaW9uVHlwZSB2ZXJzaW9uOwogICAgWHRQb2ludGVyIGNhbGxiYWNrX3ByaXZh
dGU7CiAgICBTdHJpbmcgb2JqMTI7CiAgICBYdFByb2Mgb2JqMTM7CiAgICBYdFByb2Mgb2JqMTQ7
CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9T2JqZWN0Q2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5
cGU7CiAgICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0QWxs
b2NhdGVQcm9jIGFsbG9jYXRlOwogICAgWHREZWFsbG9jYXRlUHJvYyBkZWFsbG9jYXRlOwp9IE9i
amVjdENsYXNzRXh0ZW5zaW9uUmVjLCAqT2JqZWN0Q2xhc3NFeHRlbnNpb247Cgp0eXBlZGVmIHN0
cnVjdCBfT2JqZWN0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsK
fSBPYmplY3RDbGFzc1JlYzsKCmV4dGVybiBPYmplY3RDbGFzc1JlYyBvYmplY3RDbGFzc1JlYzsK
dHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpQYXJ0IHsKICAgIFBvc2l0aW9uIHgsIHk7CiAgICBEaW1l
bnNpb24gd2lkdGgsIGhlaWdodDsKICAgIERpbWVuc2lvbiBib3JkZXJfd2lkdGg7CiAgICBCb29s
ZWFuIG1hbmFnZWQ7CiAgICBCb29sZWFuIHNlbnNpdGl2ZTsKICAgIEJvb2xlYW4gYW5jZXN0b3Jf
c2Vuc2l0aXZlOwp9UmVjdE9ialBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfUmVjdE9ialJlYyB7CiAg
ICBPYmplY3RQYXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKfSBSZWN0T2Jq
UmVjOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNsYXNzUGFydCB7CgogICAgV2lkZ2V0Q2xhc3Mg
c3VwZXJjbGFzczsKICAgIFN0cmluZyBjbGFzc19uYW1lOwogICAgQ2FyZGluYWwgd2lkZ2V0X3Np
emU7CiAgICBYdFByb2MgY2xhc3NfaW5pdGlhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xhc3NQcm9jIGNs
YXNzX3BhcnRfaW5pdGlhbGl6ZTsKICAgIFh0RW51bSBjbGFzc19pbml0ZWQ7CiAgICBYdEluaXRQ
cm9jIGluaXRpYWxpemU7CiAgICBYdEFyZ3NQcm9jIGluaXRpYWxpemVfaG9vazsKICAgIFh0UHJv
YyByZWN0MTsKICAgIFh0UG9pbnRlciByZWN0MjsKICAgIENhcmRpbmFsIHJlY3QzOwogICAgWHRS
ZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwogICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsKICAgIFhy
bUNsYXNzIHhybV9jbGFzczsKICAgIEJvb2xlYW4gcmVjdDQ7CiAgICBYdEVudW0gcmVjdDU7CiAg
ICBCb29sZWFuIHJlY3Q2OwogICAgQm9vbGVhbiByZWN0NzsKICAgIFh0V2lkZ2V0UHJvYyBkZXN0
cm95OwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0RXhwb3NlUHJvYyBleHBvc2U7CiAg
ICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0QXJnc0Z1bmMgc2V0X3ZhbHVlc19o
b29rOwogICAgWHRBbG1vc3RQcm9jIHNldF92YWx1ZXNfYWxtb3N0OwogICAgWHRBcmdzUHJvYyBn
ZXRfdmFsdWVzX2hvb2s7CiAgICBYdFByb2MgcmVjdDk7CiAgICBYdFZlcnNpb25UeXBlIHZlcnNp
b247CiAgICBYdFBvaW50ZXIgY2FsbGJhY2tfcHJpdmF0ZTsKICAgIFN0cmluZyByZWN0MTA7CiAg
ICBYdEdlb21ldHJ5SGFuZGxlciBxdWVyeV9nZW9tZXRyeTsKICAgIFh0UHJvYyByZWN0MTE7CiAg
ICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFJlY3RPYmpDbGFzc1BhcnQ7Cgp0eXBlZGVmIHN0cnVj
dCBfUmVjdE9iakNsYXNzUmVjIHsKICAgIFJlY3RPYmpDbGFzc1BhcnQgcmVjdF9jbGFzczsKfSBS
ZWN0T2JqQ2xhc3NSZWM7CgpleHRlcm4gUmVjdE9iakNsYXNzUmVjIHJlY3RPYmpDbGFzc1JlYzsK
CgpleHRlcm4gV2lkZ2V0IF9YdFdpbmRvd2VkQW5jZXN0b3IoCgogICAgV2lkZ2V0CgopOwoKZXh0
ZXJuIHZvaWQgX1h0SW5oZXJpdCgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVX
aW5kb3coCgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBWaXN1YWwqICwKICAg
IFh0VmFsdWVNYXNrICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsKCmV4dGVybiB2b2lk
IFh0UmVzaXplV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiB2b2lkIFh0TW92ZVdpZGdl
dCgKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh0Q29u
ZmlndXJlV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2ln
bmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJu
IHZvaWQgWHRSZXNpemVXaW5kb3coCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZvaWQgWHRQcm9j
ZXNzTG9jaygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRQcm9jZXNzVW5sb2NrKAoKICAg
IHZvaWQKCik7CgoKZW51bSB7CiAgICBYbU1FTlVfUE9QRE9XTiwKICAgIFhtTUVOVV9QUk9DRVNT
X1RSRUUsCiAgICBYbU1FTlVfVFJBVkVSU0FMLAogICAgWG1NRU5VX1NIRUxMX1BPUERPV04sCiAg
ICBYbU1FTlVfQ0FMTEJBQ0ssCiAgICBYbU1FTlVfQlVUVE9OLAogICAgWG1NRU5VX0NBU0NBRElO
RywKICAgIFhtTUVOVV9TVUJNRU5VLAogICAgWG1NRU5VX0FSTSwKICAgIFhtTUVOVV9ESVNBUk0s
CiAgICBYbU1FTlVfQkFSX0NMRUFOVVAsCiAgICBYbU1FTlVfU1RBVFVTLAogICAgWG1NRU5VX01F
TVdJREdFVF9VUERBVEUsCiAgICBYbU1FTlVfQlVUVE9OX1BPUERPV04sCiAgICBYbU1FTlVfUkVT
VE9SRV9FWENMVURFRF9URUFST0ZGX1RPX1RPUExFVkVMX1NIRUxMLAogICAgWG1NRU5VX1JFU1RP
UkVfVEVBUk9GRl9UT19UT1BMRVZFTF9TSEVMTCwKICAgIFhtTUVOVV9SRVNUT1JFX1RFQVJPRkZf
VE9fTUVOVVNIRUxMLAogICAgWG1NRU5VX0dFVF9MQVNUX1NFTEVDVF9UT1BMRVZFTCwKICAgIFht
TUVOVV9URUFSX09GRl9BUk0KfTsKdHlwZWRlZiBzdHJ1Y3QgX1htU2ltcGxlTWVudVJlYyB7CiAg
ICBpbnQgY291bnQ7CiAgICBpbnQgcG9zdF9mcm9tX2J1dHRvbjsKICAgIFh0Q2FsbGJhY2tQcm9j
IGNhbGxiYWNrOwogICAgWG1TdHJpbmdUYWJsZSBsYWJlbF9zdHJpbmc7CiAgICBTdHJpbmcgKmFj
Y2VsZXJhdG9yOwogICAgWG1TdHJpbmdUYWJsZSBhY2NlbGVyYXRvcl90ZXh0OwogICAgWG1LZXlT
eW1UYWJsZSBtbmVtb25pYzsKICAgIFhtU3RyaW5nQ2hhclNldFRhYmxlIG1uZW1vbmljX2NoYXJz
ZXQ7CiAgICBYbUJ1dHRvblR5cGVUYWJsZSBidXR0b25fdHlwZTsKICAgIGludCBidXR0b25fc2V0
OwogICAgWG1TdHJpbmcgb3B0aW9uX2xhYmVsOwogICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYzsK
fSBYbVNpbXBsZU1lbnVSZWMsICpYbVNpbXBsZU1lbnU7CnR5cGVkZWYgZW51bSB7CiAgICBYbVNZ
TlRIRVRJQ19OT05FLAogICAgWG1TWU5USEVUSUNfTE9BRAp9IFhtSW1wb3J0T3BlcmF0b3I7Cgp0
eXBlZGVmIHZvaWQgKCpYbUV4cG9ydFByb2MpKFdpZGdldCwgaW50LCBYdEFyZ1ZhbCAqKTsKdHlw
ZWRlZiBYbUltcG9ydE9wZXJhdG9yICgqWG1JbXBvcnRQcm9jKShXaWRnZXQsIGludCwgWHRBcmdW
YWwqKTsKCnR5cGVkZWYgc3RydWN0IF9YbVN5bnRoZXRpY1Jlc291cmNlIHsKICAgIFN0cmluZyBy
ZXNvdXJjZV9uYW1lOwogICAgQ2FyZGluYWwgcmVzb3VyY2Vfc2l6ZTsKICAgIENhcmRpbmFsIHJl
c291cmNlX29mZnNldDsKICAgIFhtRXhwb3J0UHJvYyBleHBvcnRfcHJvYzsKICAgIFhtSW1wb3J0
UHJvYyBpbXBvcnRfcHJvYzsKfSBYbVN5bnRoZXRpY1Jlc291cmNlOwoKCgoKCmVudW0gewogICAg
WG1QQVJFTlRfUFJPQ0VTU19BTlksCiAgICBYbUlOUFVUX0FDVElPTgp9OwoKZW51bSB7CiAgICBY
bVBBUkVOVF9BQ1RJVkFURSwKICAgIFhtUEFSRU5UX0NBTkNFTAp9OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgaW50IHByb2Nlc3NfdHlwZTsKfSBYbVBhcmVudFByb2Nlc3NBbnlSZWM7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgcHJvY2Vzc190eXBlOwogICAgWEV2ZW50ICpldmVudDsKICAg
IGludCBhY3Rpb247CiAgICBTdHJpbmcgKnBhcmFtczsKICAgIENhcmRpbmFsICpudW1fcGFyYW1z
Owp9IFhtUGFyZW50SW5wdXRBY3Rpb25SZWM7Cgp0eXBlZGVmIHVuaW9uIHsKICAgIFhtUGFyZW50
UHJvY2Vzc0FueVJlYyBhbnk7CiAgICBYbVBhcmVudElucHV0QWN0aW9uUmVjIGlucHV0X2FjdGlv
bjsKfSBYbVBhcmVudFByb2Nlc3NEYXRhUmVjLCAqWG1QYXJlbnRQcm9jZXNzRGF0YTsKCgoKZW51
bSB7CiAgICBYbUJBU0VMSU5FX0dFVCwKICAgIFhtQkFTRUxJTkVfU0VUCn07Cgp0eXBlZGVmIHN0
cnVjdCBfWG1CYXNlbGluZU1hcmdpbnMgewogICAgdW5zaWduZWQgY2hhciBnZXRfb3Jfc2V0Owog
ICAgRGltZW5zaW9uIG1hcmdpbl90b3A7CiAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsKICAg
IERpbWVuc2lvbiBzaGFkb3c7CiAgICBEaW1lbnNpb24gaGlnaGxpZ2h0OwogICAgRGltZW5zaW9u
IHRleHRfaGVpZ2h0OwogICAgRGltZW5zaW9uIHRleHRfd2lkdGg7CiAgICBEaW1lbnNpb24gbWFy
Z2luX2hlaWdodDsKfSBYbUJhc2VsaW5lTWFyZ2luczsKCnR5cGVkZWYgZW51bSB7CiAgICBYbUZP
Q1VTX0lOLAogICAgWG1GT0NVU19PVVQsCiAgICBYbUVOVEVSLAogICAgWG1MRUFWRQp9IFhtRm9j
dXNDaGFuZ2U7Cgp0eXBlZGVmIGVudW17CiAgICBYbU5PVF9OQVZJR0FCTEUsCiAgICBYbUNPTlRS
T0xfTkFWSUdBQkxFLAogICAgWG1UQUJfTkFWSUdBQkxFLAogICAgWG1ERVNDRU5EQU5UU19OQVZJ
R0FCTEUsCiAgICBYbURFU0NFTkRBTlRTX1RBQl9OQVZJR0FCTEUKfSBYbU5hdmlnYWJpbGl0eTsK
CgoKdHlwZWRlZiBCb29sZWFuICgqWG1QYXJlbnRQcm9jZXNzUHJvYykoV2lkZ2V0LCBYbVBhcmVu
dFByb2Nlc3NEYXRhKTsKdHlwZWRlZiB2b2lkICgqWG1XaWRnZXREaXNwYXRjaFByb2MpCiAgICAg
ICAgICAgICAgICAgICAgICAgIChXaWRnZXQgZ2FkZ2V0LCBYRXZlbnQgKmV2ZW50LCBNYXNrIGV2
ZW50X21hc2spOwp0eXBlZGVmIHZvaWQgKCpYbU1lbnVQb3B1cFByb2MpKFdpZGdldCwgV2lkZ2V0
LCBYRXZlbnQgKik7CnR5cGVkZWYgdm9pZCAoKlhtTWVudVRyYXZlcnNhbFByb2MpKCBXaWRnZXQs
IFdpZGdldCwgWG1UcmF2ZXJzYWxEaXJlY3Rpb24pOwp0eXBlZGVmIHZvaWQgKCpYbVJlc2l6ZUZs
YWdQcm9jKShXaWRnZXQsIEJvb2xlYW4pOwp0eXBlZGVmIHZvaWQgKCpYbVJlYWxpemVPdXRQcm9j
KShXaWRnZXQsIE1hc2sgKiwgWFNldFdpbmRvd0F0dHJpYnV0ZXMgKik7CnR5cGVkZWYgQm9vbGVh
biAoKlhtVmlzdWFsQ2hhbmdlUHJvYykKICAgICAgICAgICAgICAgICAgICAgICAgKFdpZGdldCBn
YWRnZXQsIFdpZGdldCBjdXJfbWdyLCBXaWRnZXQgbmV3X21ncik7CnR5cGVkZWYgdm9pZCAoKlht
VHJhdmVyc2FsUHJvYykoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlciwgaW50KTsKdHlwZWRl
ZiB2b2lkICgqWG1Gb2N1c01vdmVkUHJvYykoIFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIp
IDsKdHlwZWRlZiB2b2lkICgqWG1DYWNoZUNvcHlQcm9jKShYdFBvaW50ZXIsIFh0UG9pbnRlciwg
c2l6ZV90KTsKdHlwZWRlZiBpbnQgKCpYbUNhY2hlQ29tcGFyZVByb2MpKFh0UG9pbnRlciwgWHRQ
b2ludGVyKTsKdHlwZWRlZiBCb29sZWFuICgqWG1XaWRnZXRCYXNlbGluZVByb2MpCiAgICAgICAg
ICAgICAgICAgICAgICAgIChXaWRnZXQgdywgRGltZW5zaW9uICoqYmFzZWxpbmVzLCBpbnQgKm51
bV9iYXNlbGluZXMpOwp0eXBlZGVmIEJvb2xlYW4gKCpYbVdpZGdldERpc3BsYXlSZWN0UHJvYyko
V2lkZ2V0IHcsIFhSZWN0YW5nbGUgKnJlY3QpOwp0eXBlZGVmIHZvaWQgKCpYbVdpZGdldE1hcmdp
bnNQcm9jKShXaWRnZXQgdywgWG1CYXNlbGluZU1hcmdpbnMgKm1hcmdpbnMpOwp0eXBlZGVmIFht
TmF2aWdhYmlsaXR5ICgqWG1XaWRnZXROYXZpZ2FibGVQcm9jKShXaWRnZXQgdyk7CnR5cGVkZWYg
dm9pZCAoKlhtRm9jdXNDaGFuZ2VQcm9jKShXaWRnZXQgdywgWG1Gb2N1c0NoYW5nZSBjaGFuZ2Up
OwoKdHlwZWRlZiB2b2lkICgqWG1NZW51UHJvYykoaW50IGZ1bmN0aW9uLCBXaWRnZXQgd2lkZ2V0
LCAuLi4pOwoKdHlwZWRlZiB2b2lkICgqWG1HYWRnZXRDYWNoZVByb2MpKFh0UG9pbnRlcik7CnR5
cGVkZWYgQm9vbGVhbiAoKlhtVHJhdmVyc2FsQ2hpbGRyZW5Qcm9jKQogICAgICAgICAgICAgICAg
ICAgICAgICAoV2lkZ2V0IG13LCBXaWRnZXQgKipjaGlsZHJlbiwgQ2FyZGluYWwgKm51bV9jaGls
ZHJlbik7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgTW9kaWZpZXJzIG1vZDsKICAgIGNoYXIg
KmtleTsKICAgIGNoYXIgKmFjdGlvbjsKfSBfWG1CdWlsZFZpcnR1YWxLZXlTdHJ1Y3Q7CgoKCgoK
CnR5cGVkZWYgc3RydWN0IHsKICAgIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uOwogICAgWG1IaWdo
bGlnaHRNb2RlIG1vZGU7Cn0gX1htSGlnaGxpZ2h0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg
Q2FyZGluYWwgbnVtYmVyOwogICAgQ2FyZGluYWwgbWF4aW11bTsKICAgIF9YbUhpZ2hsaWdodFJl
YyAqbGlzdDsKfSBfWG1IaWdobGlnaHREYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBz
ZWxlY3Rpb247CiAgICBBdG9tIHRhcmdldDsKfSBfWG1UZXh0SW5zZXJ0UGFpcjsKCnR5cGVkZWYg
ZW51bSB7CiAgICBYbURFU1RfU0VMRUNULAogICAgWG1QUklNX1NFTEVDVAp9IFhtU2VsZWN0VHlw
ZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2xlYW4gZG9uZV9zdGF0dXM7CiAgICBCb29sZWFu
IHN1Y2Nlc3Nfc3RhdHVzOwogICAgWG1TZWxlY3RUeXBlIHNlbGVjdF90eXBlOwogICAgWFNlbGVj
dGlvblJlcXVlc3RFdmVudCAqZXZlbnQ7Cn0gX1htSW5zZXJ0U2VsZWN0OwoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWEV2ZW50ICpldmVudDsKICAgIFN0cmluZyAqcGFyYW1zOwogICAgQ2FyZGluYWwg
Km51bV9wYXJhbXM7Cn0gX1htVGV4dEFjdGlvblJlYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFdp
ZGdldCB3aWRnZXQ7CiAgICBYbVRleHRQb3NpdGlvbiBpbnNlcnRfcG9zOwogICAgaW50IG51bV9j
aGFyczsKICAgIFRpbWUgdGltZXN0YW1wOwogICAgQm9vbGVhbiBtb3ZlOwp9IF9YbVRleHREcm9w
VHJhbnNmZXJSZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYbVRleHRQb3NpdGlvbiBwb3NpdGlv
bjsKICAgIEF0b20gdGFyZ2V0OwogICAgVGltZSB0aW1lOwogICAgaW50IG51bV9jaGFyczsKICAg
IGludCByZWZfY291bnQ7Cn0gX1htVGV4dFByaW1TZWxlY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBTY3JlZW4gKnNjcmVlbjsKICAgIFhDb250ZXh0IGNvbnRleHQ7CiAgICB1bnNpZ25lZCBjaGFy
IHR5cGU7Cn0gWG1UZXh0Q29udGV4dERhdGFSZWMsICpYbVRleHRDb250ZXh0RGF0YTsKCmVudW0g
ewogICAgX1hNX0lTX0RFU1RfQ1RYLAogICAgX1hNX0lTX0dDX0RBVEFfQ1RYLAogICAgX1hNX0lT
X1BJWE1BUF9DVFgKfTsKZW51bXsKICAgIFhtR0VUX0FDVFVBTF9TSVpFID0gMSwKICAgIFhtR0VU
X1BSRUZFUlJFRF9TSVpFLAogICAgWG1HRU9fUFJFX1NFVCwKICAgIFhtR0VPX1BPU1RfU0VUCn07
CgoKZW51bSB7CiAgICBYbUdFT19FWFBBTkQsCiAgICBYbUdFT19DRU5URVIsCiAgICBYbUdFT19Q
QUNLCn07CgoKZW51bSB7CiAgICBYbUdFT19QUk9QT1JUSU9OQUwsCiAgICBYbUdFT19BVkVSQUdJ
TkcsCiAgICBYbUdFT19XUkFQCn07CgplbnVtIHsKICAgIFhtR0VPX1JPV19NQUpPUiwKICAgIFht
R0VPX0NPTFVNTl9NQUpPUgp9OwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2VvTWF0cml4UmVjICpYbUdl
b01hdHJpeDsKdHlwZWRlZiB1bmlvbiBfWG1HZW9NYWpvckxheW91dFJlYyAqWG1HZW9NYWpvckxh
eW91dDsKdHlwZWRlZiBzdHJ1Y3QgX1htS2lkR2VvbWV0cnlSZWMgewogICAgV2lkZ2V0IGtpZDsK
ICAgIFh0V2lkZ2V0R2VvbWV0cnkgYm94Owp9IFhtS2lkR2VvbWV0cnlSZWMsICpYbUtpZEdlb21l
dHJ5OwoKdHlwZWRlZiB2b2lkICgqWG1HZW9BcnJhbmdlUHJvYykoWG1HZW9NYXRyaXgsIFBvc2l0
aW9uLCBQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9u
ICosIERpbWVuc2lvbiAqKTsKdHlwZWRlZiBCb29sZWFuICgqWG1HZW9FeGNlcHRQcm9jKShYbUdl
b01hdHJpeCk7CnR5cGVkZWYgdm9pZCAoKlhtR2VvRXh0RGVzdHJ1Y3RvclByb2MpKFh0UG9pbnRl
cik7CnR5cGVkZWYgdm9pZCAoKlhtR2VvU2VnbWVudEZpeFVwUHJvYykoWG1HZW9NYXRyaXgsIGlu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0
LCBYbUtpZEdlb21ldHJ5KTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2xlYW4gZW5kOwogICAg
WG1HZW9TZWdtZW50Rml4VXBQcm9jIGZpeF91cDsKICAgIERpbWVuc2lvbiBldmVuX3dpZHRoOwog
ICAgRGltZW5zaW9uIGV2ZW5faGVpZ2h0OwogICAgRGltZW5zaW9uIG1pbl9oZWlnaHQ7CiAgICBC
b29sZWFuIHN0cmV0Y2hfaGVpZ2h0OwogICAgQm9vbGVhbiB1bmlmb3JtX2JvcmRlcjsKICAgIERp
bWVuc2lvbiBib3JkZXI7CiAgICB1bnNpZ25lZCBjaGFyIGZpbGxfbW9kZTsKICAgIHVuc2lnbmVk
IGNoYXIgZml0X21vZGU7CiAgICBCb29sZWFuIHN0aWNreV9lbmQ7CiAgICBEaW1lbnNpb24gc3Bh
Y2VfYWJvdmU7CiAgICBEaW1lbnNpb24gc3BhY2VfZW5kOwogICAgRGltZW5zaW9uIHNwYWNlX2Jl
dHdlZW47CiAgICBEaW1lbnNpb24gbWF4X2JveF9oZWlnaHQ7CiAgICBEaW1lbnNpb24gYm94ZXNf
d2lkdGg7CiAgICBEaW1lbnNpb24gZmlsbF93aWR0aDsKICAgIERpbWVuc2lvbiBib3hfY291bnQ7
Cn0gWG1HZW9Sb3dMYXlvdXRSZWMsICpYbUdlb1Jvd0xheW91dDsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIEJvb2xlYW4gZW5kOwogICAgWG1HZW9TZWdtZW50Rml4VXBQcm9jIGZpeF91cDsKICAgIERp
bWVuc2lvbiBldmVuX2hlaWdodDsKICAgIERpbWVuc2lvbiBldmVuX3dpZHRoOwogICAgRGltZW5z
aW9uIG1pbl93aWR0aDsKICAgIEJvb2xlYW4gc3RyZXRjaF93aWR0aDsKICAgIEJvb2xlYW4gdW5p
Zm9ybV9ib3JkZXI7CiAgICBEaW1lbnNpb24gYm9yZGVyOwogICAgdW5zaWduZWQgY2hhciBmaWxs
X21vZGU7CiAgICB1bnNpZ25lZCBjaGFyIGZpdF9tb2RlOwogICAgQm9vbGVhbiBzdGlja3lfZW5k
OwogICAgRGltZW5zaW9uIHNwYWNlX2xlZnQ7CiAgICBEaW1lbnNpb24gc3BhY2VfZW5kOwogICAg
RGltZW5zaW9uIHNwYWNlX2JldHdlZW47CiAgICBEaW1lbnNpb24gbWF4X2JveF93aWR0aDsKICAg
IERpbWVuc2lvbiBib3hlZF9oZWlnaHQ7CiAgICBEaW1lbnNpb24gZmlsbF9oZWlnaHQ7CiAgICBE
aW1lbnNpb24gYm94X2NvdW50Owp9IFhtR2VvQ29sdW1uTGF5b3V0UmVjLCAqWG1HZW9Db2x1bW5M
YXlvdXQ7Cgp0eXBlZGVmIHVuaW9uIF9YbUdlb01ham9yTGF5b3V0UmVjIHsKICAgIFhtR2VvUm93
TGF5b3V0UmVjIHJvdzsKICAgIFhtR2VvQ29sdW1uTGF5b3V0UmVjIGNvbDsKfSBYbUdlb01ham9y
TGF5b3V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2VvTWF0cml4UmVjIHsKICAgIFdpZGdldCBj
b21wb3NpdGU7CiAgICBXaWRnZXQgaW5zdGlnYXRvcjsKICAgIFh0V2lkZ2V0R2VvbWV0cnkgaW5z
dGlnX3JlcXVlc3Q7CiAgICBYdFdpZGdldEdlb21ldHJ5IHBhcmVudF9yZXF1ZXN0OwogICAgWHRX
aWRnZXRHZW9tZXRyeSAqaW5fbGF5b3V0OwogICAgWG1LaWRHZW9tZXRyeSBib3hlczsKICAgIFht
R2VvTWFqb3JMYXlvdXQgbGF5b3V0czsKICAgIERpbWVuc2lvbiBtYXJnaW5fdzsKICAgIERpbWVu
c2lvbiBtYXJnaW5faDsKICAgIEJvb2xlYW4gc3RyZXRjaF9ib3hlczsKICAgIEJvb2xlYW4gdW5p
Zm9ybV9ib3JkZXI7CiAgICBEaW1lbnNpb24gYm9yZGVyOwogICAgRGltZW5zaW9uIG1heF9tYWpv
cjsKICAgIERpbWVuc2lvbiBib3hlc19taW5vcjsKICAgIERpbWVuc2lvbiBmaWxsX21pbm9yOwog
ICAgRGltZW5zaW9uIHdpZHRoOwogICAgRGltZW5zaW9uIGhlaWdodDsKICAgIFhtR2VvRXhjZXB0
UHJvYyBzZXRfZXhjZXB0OwogICAgWG1HZW9FeGNlcHRQcm9jIGFsbW9zdF9leGNlcHQ7CiAgICBY
bUdlb0V4Y2VwdFByb2Mgbm9fZ2VvX3JlcXVlc3Q7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwog
ICAgWG1HZW9FeHREZXN0cnVjdG9yUHJvYyBleHRfZGVzdHJ1Y3RvcjsKICAgIFhtR2VvQXJyYW5n
ZVByb2MgYXJyYW5nZV9ib3hlczsKICAgIHVuc2lnbmVkIGNoYXIgbWFqb3Jfb3JkZXI7Cn0gWG1H
ZW9NYXRyaXhSZWM7Cgp0eXBlZGVmIFhtR2VvTWF0cml4ICgqWG1HZW9DcmVhdGVQcm9jKShXaWRn
ZXQsIFdpZGdldCwgWHRXaWRnZXRHZW9tZXRyeSAqKTsKZW51bSB7CiAgICBYbUNBU0NBREVfQlVU
VE9OX0JJVCA9IDEsCiAgICBYbUNBU0NBREVfQlVUVE9OX0dBREdFVF9CSVQsCiAgICBYbUNPTU1B
TkRfQk9YX0JJVCwKICAgIFhtRElBTE9HX1NIRUxMX0JJVCwKICAgIFhtTElTVF9CSVQsCiAgICBY
bUZPUk1fQklULAogICAgWG1URVhUX0ZJRUxEX0JJVCwKICAgIFhtR0FER0VUX0JJVCwKICAgIFht
TEFCRUxfQklULAogICAgWG1MQUJFTF9HQURHRVRfQklULAogICAgWG1NQUlOX1dJTkRPV19CSVQs
CiAgICBYbU1BTkFHRVJfQklULAogICAgWG1NRU5VX1NIRUxMX0JJVCwKICAgIFhtRFJBV05fQlVU
VE9OX0JJVCwKICAgIFhtUFJJTUlUSVZFX0JJVCwKICAgIFhtUFVTSF9CVVRUT05fQklULAogICAg
WG1QVVNIX0JVVFRPTl9HQURHRVRfQklULAogICAgWG1ST1dfQ09MVU1OX0JJVCwKICAgIFhtU0NS
T0xMX0JBUl9CSVQsCiAgICBYbVNDUk9MTEVEX1dJTkRPV19CSVQsCiAgICBYbVNFTEVDVElPTl9C
T1hfQklULAogICAgWG1TRVBBUkFUT1JfQklULAogICAgWG1TRVBBUkFUT1JfR0FER0VUX0JJVCwK
ICAgIFhtVEVYVF9CSVQsCiAgICBYbVRPR0dMRV9CVVRUT05fQklULAogICAgWG1UT0dHTEVfQlVU
VE9OX0dBREdFVF9CSVQsCiAgICBYbURST1BfVFJBTlNGRVJfQklULAogICAgWG1EUk9QX1NJVEVf
TUFOQUdFUl9CSVQsCiAgICBYbURJU1BMQVlfQklULAogICAgWG1TQ1JFRU5fQklULAogICAgWG1B
UlJPV19CVVRUT05fQklUID0gMzIsCiAgICBYbUFSUk9XX0JVVFRPTl9HQURHRVRfQklULAogICAg
WG1CVUxMRVRJTl9CT0FSRF9CSVQsCiAgICBYbURSQVdJTkdfQVJFQV9CSVQsCiAgICBYbUZJTEVf
U0VMRUNUSU9OX0JPWF9CSVQsCiAgICBYbUZSQU1FX0JJVCwKICAgIFhtTUVTU0FHRV9CT1hfQklU
LAogICAgWG1TQVNIX0JJVCwKICAgIFhtU0NBTEVfQklULAogICAgWG1QQU5FRF9XSU5ET1dfQklU
LAogICAgWG1WRU5ET1JfU0hFTExfQklULAogICAgWG1DTElQX1dJTkRPV19CSVQsCiAgICBYbURS
QUdfSUNPTl9CSVQsCiAgICBYbVRFQVJPRkZfQlVUVE9OX0JJVCwKICAgIFhtRFJBR19PVkVSX1NI
RUxMX0JJVCwKICAgIFhtRFJBR19DT05URVhUX0JJVCwKCgoKCgoKICAgIFhtRkFTVF9TVUJDTEFT
U19UQUlMX0JJVCwKCiAgICBYbUZJUlNUX0FQUExJQ0FUSU9OX1NVQkNMQVNTX0JJVCA9IDE5Mgp9
Owp0eXBlZGVmIHN0cnVjdCBfWG1QYXJ0UmVzb3VyY2UgewogICAgU3RyaW5nIHJlc291cmNlX25h
bWU7CiAgICBTdHJpbmcgcmVzb3VyY2VfY2xhc3M7CiAgICBTdHJpbmcgcmVzb3VyY2VfdHlwZTsK
ICAgIENhcmRpbmFsIHJlc291cmNlX3NpemU7CiAgICBDYXJkaW5hbCByZXNvdXJjZV9vZmZzZXQ7
CiAgICBTdHJpbmcgZGVmYXVsdF90eXBlOwogICAgWHRQb2ludGVyIGRlZmF1bHRfYWRkcjsKfSBY
bVBhcnRSZXNvdXJjZTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeDEsIHgyLCB5MSwgeTI7
Cn0gWG1SZWdpb25Cb3g7Cgp0eXBlZGVmIHN0cnVjdCBfWG1SZWdpb24gewogICAgbG9uZyBzaXpl
OwogICAgbG9uZyBudW1SZWN0czsKICAgIFhtUmVnaW9uQm94ICpyZWN0czsKICAgIFhtUmVnaW9u
Qm94IGV4dGVudHM7Cn0gWG1SZWdpb25SZWMsICpYbVJlZ2lvbjsKCgoKWG1HYWRnZXQgX1htSW5w
dXRJbkdhZGdldChXaWRnZXQgY3csIGludCB4LCBpbnQgeSk7ClhtR2FkZ2V0IF9YbUlucHV0Rm9y
R2FkZ2V0KFdpZGdldCBjdywgaW50IHgsIGludCB5KTsKdm9pZCBfWG1Db25maWd1cmVPYmplY3Qo
V2lkZ2V0IGcsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiB3aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgRGltZW5zaW9uIGJvcmRlcl93aWR0aCk7CnZvaWQgX1htUmVzaXplT2JqZWN0KFdpZGdldCBn
LCBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiBib3JkZXJfd2lkdGgpOwp2b2lkIF9YbU1vdmVPYmplY3QoV2lkZ2V0IGcsIFBv
c2l0aW9uIHgsIFBvc2l0aW9uIHkpOwp2b2lkIF9YbVJlZGlzcGxheUdhZGdldHMoV2lkZ2V0IHcs
IFhFdmVudCAqZXZlbnQsIFJlZ2lvbiByZWdpb24pOwp2b2lkIF9YbURpc3BhdGNoR2FkZ2V0SW5w
dXQoV2lkZ2V0IGcsIFhFdmVudCAqZXZlbnQsIE1hc2sgbWFzayk7ClRpbWUgX19YbUdldERlZmF1
bHRUaW1lKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50KTsKQm9vbGVhbiBfWG1JbnN0YWxsSW1hZ2Uo
WEltYWdlICppbWFnZSwgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGhvdF94LCBpbnQgaG90X3kpOwpCb29sZWFuIF9YbUdldEltYWdlKFNjcmVlbiAqc2NyZWVu
LCBjaGFyICppbWFnZV9uYW1lLCBYSW1hZ2UgKippbWFnZSk7CkJvb2xlYW4gX1htR2V0UGl4bWFw
RGF0YShTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeG1hcCBwaXht
YXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqaW1hZ2VfbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBQaXhl
bCAqZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICpiYWNrZ3JvdW5k
LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpob3RfeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqaG90X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
KndpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpoZWlnaHQpOwpQ
aXhtYXAgX1htR2V0UGl4bWFwKFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgIGNo
YXIgKmltYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoLAogICAgICAgICAg
ICAgICAgICAgIFBpeGVsIGZvcmVncm91bmQsCiAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFj
a2dyb3VuZCk7CkJvb2xlYW4gX1htSW5zdGFsbFBpeG1hcChQaXhtYXAgcGl4bWFwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICppbWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgZm9yZWdy
b3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGJhY2tncm91bmQpOwoKCgpCb29s
ZWFuIF9YbU1hcEJ0bkV2ZW50KFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpldmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpidXR0b24s
CiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICptb2RpZmllcnMpOwpCb29sZWFu
IF9YbU1hcEtleUV2ZW50KFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50ICpl
dmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmtleXN5bSwKICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm1vZGlmaWVycyk7CkJvb2xlYW4gX1htTWF0
Y2hCdG5FdmVudChYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV2
ZW50VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBidXR0b24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKTsKQm9vbGVhbiBf
WG1NYXRjaEtleUV2ZW50KFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZXZlbnRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMpOwoKCgpYSW1h
Z2UgKl9YbUdldEltYWdlRnJvbUZpbGUoY2hhciAqZmlsZW5hbWUpOwpYSW1hZ2UgKl9YbUdldElt
YWdlQW5kSG90U3BvdEZyb21GaWxlKGNoYXIgKmZpbGVuYW1lLCBpbnQgKmhvdF94LCBpbnQgKmhv
dF95KTsKCgoKZW51bSB7IFhtTEFCRUxfRk9OVExJU1QgPSAxLAogICAgICAgWG1CVVRUT05fRk9O
VExJU1QsCiAgICAgICBYbVRFWFRfRk9OVExJU1QKfTsKCnZvaWQgX1htUmVnaXN0ZXJDb252ZXJ0
ZXJzKHZvaWQpOwp2b2lkIF9YbVdhcm5pbmcoV2lkZ2V0IHcsIGNvbnN0IGNoYXIgKm1lc3NhZ2Us
IC4uLik7CkJvb2xlYW4gX1htU3RyaW5nc0FyZUVxdWFsKGNoYXIgKmluX3N0ciwgY2hhciAqdGV4
dF9zdHIpOwpYbUZvbnRMaXN0IF9YbUdldERlZmF1bHRGb250TGlzdChXaWRnZXQgdywgdW5zaWdu
ZWQgY2hhciBmb250TGlzdFR5cGUpOwpjaGFyICpfWG1Db252ZXJ0Q1NUb1N0cmluZyhYbVN0cmlu
ZyBjcyk7CkJvb2xlYW4gX1htQ3Z0WG1TdHJpbmdUb0NUKFhybVZhbHVlICpmcm9tLCBYcm1WYWx1
ZSAqdG8pOwoKCgp2b2lkIF9YbUJ1aWxkUmVzb3VyY2VzKFhtU3ludGhldGljUmVzb3VyY2UgKip3
Y19yZXNvdXJjZXNfcHRyLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqd2NfbnVtX3Jlc291
cmNlc19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgWG1TeW50aGV0aWNSZXNvdXJjZSAqc2Nf
cmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgIGludCBzY19udW1fcmVzb3VyY2VzKTsK
dm9pZCBfWG1Jbml0aWFsaXplU3ludGhldGljUmVzb3VyY2VzKFhtU3ludGhldGljUmVzb3VyY2Ug
KnJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1f
cmVzb3VyY2VzKTsKdm9pZCBfWG1QcmltaXRpdmVHZXRWYWx1ZXNIb29rKFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRHZXRWYWx1
ZXNIb29rKFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBf
WG1NYW5hZ2VyR2V0VmFsdWVzSG9vayhXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg
Km51bV9hcmdzKTsKdm9pZCBfWG1FeHRHZXRWYWx1ZXNIb29rKFdpZGdldCB3LAogICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2Fy
ZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1FeHRJbXBvcnRBcmdzKFdpZGdldCB3LAogICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgQ2FyZGlu
YWwgKm51bV9hcmdzKTsKdm9pZCBfWG1QcmltaXRpdmVJbXBvcnRBcmdzKFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRJbXBvcnRBcmdzKFdp
ZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRJbXBvcnRT
ZWNvbmRhcnlBcmdzKFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg
Km51bV9hcmdzKTsKdm9pZCBfWG1NYW5hZ2VySW1wb3J0QXJncyhXaWRnZXQgdywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwgKm51bV9hcmdzKTsKaW50IF9YbUNvbnZlcnRVbml0cyhTY3JlZW4gKnNjcmVlbiwK
ICAgICAgICAgICAgICAgICAgICBpbnQgZGltZW5zaW9uLAogICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaW50IGZyb21fdmFsLAogICAgICAgICAg
ICAgICAgICAgIGludCB0b190eXBlKTsKWG1JbXBvcnRPcGVyYXRvciBfWG1Ub0hvcml6b250YWxQ
aXhlbHMoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRB
cmdWYWwgKnZhbHVlKTsKWG1JbXBvcnRPcGVyYXRvciBfWG1Ub1ZlcnRpY2FsUGl4ZWxzKFdpZGdl
dCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRBcmdWYWwgKnZhbHVlKTsK
dm9pZCBfWG1Gcm9tSG9yaXpvbnRhbFBpeGVscyhXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRBcmdWYWwgKnZhbHVlKTsKdm9pZCBfWG1Gcm9tVmVydGljYWxQaXhlbHMoV2lkZ2V0IHdpZGdl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWHRBcmdWYWwgKnZhbHVlKTsKdm9pZCBfWG1Tb3J0UmVzb3VyY2VMaXN0KFhy
bVJlc291cmNlICpsaXN0W10sIENhcmRpbmFsIGxlbik7CnZvaWQgX1htVW5pdFR5cGVEZWZhdWx0
KFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnVuc2lnbmVkIGNoYXIgX1htR2V0
VW5pdFR5cGUoV2lkZ2V0IHdpZGdldCk7CgoKCkJvb2xlYW4gX1htSXNFdmVudFVuaXF1ZShYRXZl
bnQgKmV2ZW50KTsKdm9pZCBfWG1SZWNvcmRFdmVudChYRXZlbnQgKmV2ZW50KTsKdHlwZWRlZiBz
dHJ1Y3QgX1htQ29sb3JEYXRhIHsKICAgU2NyZWVuICogc2NyZWVuOwogICBDb2xvcm1hcCBjb2xv
cl9tYXA7CiAgIHVuc2lnbmVkIGNoYXIgYWxsb2NhdGVkOwogICBYQ29sb3IgYmFja2dyb3VuZDsK
ICAgWENvbG9yIGZvcmVncm91bmQ7CiAgIFhDb2xvciB0b3Bfc2hhZG93OwogICBYQ29sb3IgYm90
dG9tX3NoYWRvdzsKICAgWENvbG9yIHNlbGVjdDsKfSBYbUNvbG9yRGF0YTsKCnZvaWQgX1htUmVn
aXN0ZXJQaXhtYXBDb252ZXJ0ZXJzKHZvaWQpOwpjaGFyICpfWG1HZXRCR1BpeG1hcE5hbWUodm9p
ZCk7CnZvaWQgX1htQ2xlYXJCR1BpeG1hcCh2b2lkKTsKdm9pZCBfWG1Gb3JlZ3JvdW5kQ29sb3JE
ZWZhdWx0KFdpZGdldCB3aWRnZXQsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQg
X1htSGlnaGxpZ2h0Q29sb3JEZWZhdWx0KFdpZGdldCB3aWRnZXQsIGludCBvZmZzZXQsIFhybVZh
bHVlICp2YWx1ZSk7CnZvaWQgX1htQmFja2dyb3VuZENvbG9yRGVmYXVsdChXaWRnZXQgd2lkZ2V0
LCBpbnQgb2Zmc2V0LCBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVRvcFNoYWRvd0NvbG9yRGVm
YXVsdChXaWRnZXQgd2lkZ2V0LCBpbnQgb2Zmc2V0LCBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9Y
bUJvdHRvbVNoYWRvd0NvbG9yRGVmYXVsdChXaWRnZXQgd2lkZ2V0LCBpbnQgb2Zmc2V0LCBYcm1W
YWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVByaW1pdGl2ZVRvcFNoYWRvd1BpeG1hcERlZmF1bHQoV2lk
Z2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQgX1htTWFuYWdlclRvcFNoYWRvd1BpeG1hcERl
ZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVByaW1pdGl2ZUhpZ2hsaWdo
dFBpeG1hcERlZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQgX1htTWFuYWdl
ckhpZ2hsaWdodFBpeG1hcERlZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9Y
bUdldERlZmF1bHRUaHJlc2hvbGRzRm9yU2NyZWVuKFNjcmVlbiAqc2NyZWVuKTsKU3RyaW5nIF9Y
bUdldERlZmF1bHRCYWNrZ3JvdW5kQ29sb3JTcGVjKFNjcmVlbiAqc2NyZWVuKTsKdm9pZCBfWG1T
ZXREZWZhdWx0QmFja2dyb3VuZENvbG9yU3BlYyhTY3JlZW4gKnNjcmVlbiwgU3RyaW5nIG5ld19j
b2xvcl9zcGVjKTsKWG1Db2xvckRhdGEgKl9YbUdldERlZmF1bHRDb2xvcnMoU2NyZWVuICpzY3Jl
ZW4sIENvbG9ybWFwIGNvbG9yX21hcCk7CkJvb2xlYW4gX1htU2VhcmNoQ29sb3JDYWNoZSh1bnNp
Z25lZCBpbnQgd2hpY2gsIFhtQ29sb3JEYXRhICp2YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYbUNvbG9yRGF0YSAqKnJldCk7ClhtQ29sb3JEYXRhICpfWG1BZGRUb0NvbG9yQ2Fj
aGUoWG1Db2xvckRhdGEgKm5ld19yZWMpOwpQaXhlbCBfWG1CbGFja1BpeGVsKFNjcmVlbiAqc2Ny
ZWVuLCBDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yIGJsYWNrY29sb3IpOwpQaXhlbCBfWG1XaGl0
ZVBpeGVsKFNjcmVlbiAqc2NyZWVuLCBDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yIHdoaXRlY29s
b3IpOwpQaXhlbCBfWG1BY2Nlc3NDb2xvckRhdGEoWG1Db2xvckRhdGEgKmNkLCB1bnNpZ25lZCBj
aGFyIHdoaWNoKTsKWG1Db2xvckRhdGEgKl9YbUdldENvbG9ycyhTY3JlZW4gKnNjcmVlbiwgQ29s
b3JtYXAgY29sb3JfbWFwLCBQaXhlbCBiYWNrZ3JvdW5kKTsKdm9pZCBfWG1TZWxlY3RDb2xvckRl
ZmF1bHQoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWwpOwoKCgpYRm9udFN0cnVj
dCAqX1htR2V0Rmlyc3RGb250KFhtRm9udExpc3RFbnRyeSBlbnRyeSk7CkJvb2xlYW4gX1htRm9u
dExpc3RHZXREZWZhdWx0Rm9udChYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWEZvbnRTdHJ1Y3QgKipmb250X3N0cnVjdCk7CkJvb2xlYW4gX1ht
Rm9udExpc3RTZWFyY2goWG1Gb250TGlzdCBmb250bGlzdCwgWG1TdHJpbmdDaGFyU2V0IGNoYXJz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmluZHgsIFhGb250U3RydWN0ICoq
Zm9udF9zdHJ1Y3QpOwpCb29sZWFuIF9YbVN0cmluZ0lzWG1TdHJpbmcoWG1TdHJpbmcgc3RyaW5n
KTsKQm9vbGVhbiBfWG1TdHJpbmdJbml0Q29udGV4dChfWG1TdHJpbmdDb250ZXh0ICpjb250ZXh0
LCBfWG1TdHJpbmcgc3RyaW5nKTsKQm9vbGVhbiBfWG1TdHJpbmdHZXROZXh0U2VnbWVudChfWG1T
dHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1T
dHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFht
U3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmNo
YXJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiAqc2VwYXJh
dG9yKSA7CnZvaWQgX1htU3RyaW5nRnJlZUNvbnRleHQoX1htU3RyaW5nQ29udGV4dCBjb250ZXh0
KSA7CkRpbWVuc2lvbiBfWG1TdHJpbmdXaWR0aChYbUZvbnRMaXN0IGZvbnRsaXN0LCBfWG1TdHJp
bmcgc3RyaW5nKSA7CkRpbWVuc2lvbiBfWG1TdHJpbmdIZWlnaHQoWG1Gb250TGlzdCBmb250bGlz
dCwgX1htU3RyaW5nIHN0cmluZykgOwp2b2lkIF9YbVN0cmluZ0V4dGVudChYbUZvbnRMaXN0IGZv
bnRsaXN0LCBfWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
KndpZHRoLCBEaW1lbnNpb24gKmhlaWdodCkgOwpCb29sZWFuIF9YbVN0cmluZ0VtcHR5KF9YbVN0
cmluZyBzdHJpbmcpOwp2b2lkIF9YbVN0cmluZ0RyYXcoRGlzcGxheSAqZCwgV2luZG93IHcsIFht
Rm9udExpc3QgZm9udGxpc3QsIF9YbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICBH
QyBnYywgUG9zaXRpb24geCwgUG9zaXRpb24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbiwgdW5zaWduZWQgY2hhciBsYXlfZGlyLAogICAg
ICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgX1htU3RyaW5nRHJhd0ltYWdl
KERpc3BsYXkgKmQsIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0
IGZvbnRsaXN0LCBfWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBHQyBn
YywgUG9zaXRpb24geCwgUG9zaXRpb24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFsaWduLCB1bnNpZ25lZCBjaGFyIGxheV9kaXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXApOwp2b2lkIF9YbVN0cmluZ0Ry
YXdVbmRlcmxpbmUoRGlzcGxheSAqZCwgV2luZG93IHcsIFhtRm9udExpc3QgZiwgX1htU3RyaW5n
IHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQyBnYywgUG9zaXRpb24geCwgUG9zaXRp
b24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhbGlnbiwgdW5zaWduZWQgY2hhciBsYXlfZGlyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwgX1htU3RyaW5nIHUpOwp2b2lkIF9YbVN0cmluZ0Ry
YXdNbmVtb25pYyhEaXNwbGF5ICpkLCBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWG1Gb250TGlzdCBmb250bGlzdCwgX1htU3RyaW5nIHN0cmluZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MgZ2MsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksIERpbWVuc2lvbiB3aWR0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGF5b3V0X2RpcmVjdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIG1uZW1vbmljLCBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCk7
Cl9YbVN0cmluZyBfWG1TdHJpbmdDcmVhdGUoWG1TdHJpbmcgY3MpOwp2b2lkIF9YbVN0cmluZ0Zy
ZWUoX1htU3RyaW5nIHN0cmluZyk7CmNoYXIgKl9YbVN0cmluZ0dldEN1cnJlbnRDaGFyc2V0KHZv
aWQpIDsKY2hhciAqX1htQ2hhcnNldENhbm9uaWNhbGl6ZShTdHJpbmcgY2hhcnNldCk7Cl9YbVN0
cmluZyBfWG1TdHJpbmdDb3B5KF9YbVN0cmluZyBzdHJpbmcpOwpCb29sZWFuIF9YbVN0cmluZ0J5
dGVDb21wYXJlKF9YbVN0cmluZyBhLCBfWG1TdHJpbmcgYik7CkJvb2xlYW4gX1htU3RyaW5nSGFz
U3Vic3RyaW5nKF9YbVN0cmluZyBzdHJpbmcsIF9YbVN0cmluZyBzdWJzdHJpbmcpOwpYbVN0cmlu
ZyBfWG1TdHJpbmdDcmVhdGVFeHRlcm5hbChYbUZvbnRMaXN0IGZvbnRsaXN0LCBfWG1TdHJpbmcg
Y3MpOwpEaW1lbnNpb24gX1htU3RyaW5nQmFzZWxpbmUoWG1Gb250TGlzdCBmb250bGlzdCwgX1ht
U3RyaW5nIHN0cmluZyk7CmludCBfWG1TdHJpbmdMaW5lQ291bnQoX1htU3RyaW5nIHN0cmluZyk7
CmNoYXIgKiBfWG1TdHJpbmdHZXRUZXh0Q29uY2F0KFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4g
X1htU3RyaW5nSXNDdXJyZW50Q2hhcnNldChYbVN0cmluZ0NoYXJTZXQgYyk7CkJvb2xlYW4gX1ht
U3RyaW5nU2luZ2xlU2VnbWVudChYbVN0cmluZyBzdHIsIGNoYXIgKipwVGV4dE91dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCAqcENoYXJzZXRPdXQpOwp2
b2lkIF9YbVN0cmluZ1VwZGF0ZVdNU2hlbGxUaXRsZShYbVN0cmluZyB4bXN0ciwgV2lkZ2V0IHNo
ZWxsKTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1htRm9jdXNNb3ZlZENhbGxiYWNrU3RydWN0IHsK
ICAgIGludCByZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgQm9vbGVhbiBjb250OwogICAg
V2lkZ2V0IG9sZF9mb2N1czsKICAgIFdpZGdldCBuZXdfZm9jdXM7CiAgICB1bnNpZ25lZCBjaGFy
IGZvY3VzX3BvbGljeTsKfSBYbUZvY3VzTW92ZWRDYWxsYmFja1N0cnVjdCwgKlhtRm9jdXNNb3Zl
ZENhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRm9jdXNEYXRhUmVjICpYbUZvY3VzRGF0YTsK
ClhtRm9jdXNEYXRhIF9YbUNyZWF0ZUZvY3VzRGF0YSh2b2lkKTsKdm9pZCBfWG1EZXN0cm95Rm9j
dXNEYXRhKFhtRm9jdXNEYXRhIGZvY3VzRGF0YSk7CnZvaWQgX1htU2V0QWN0aXZlVGFiR3JvdXAo
WG1Gb2N1c0RhdGEgZm9jdXNEYXRhLCBXaWRnZXQgdGFiR3JvdXApOwpXaWRnZXQgX1htR2V0QWN0
aXZlSXRlbShXaWRnZXQgdyk7CnZvaWQgX1htTmF2aWdJbml0aWFsaXplKFdpZGdldCByZXF1ZXN0
LCBXaWRnZXQgbmV3X3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLCBD
YXJkaW5hbCAqbnVtX2FyZ3MpOwpCb29sZWFuIF9YbU5hdmlnU2V0VmFsdWVzKFdpZGdldCBjdXJy
ZW50LCBXaWRnZXQgcmVxdWVzdCwgV2lkZ2V0IG5ld193aWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnTGlzdCBhcmdzLCBDYXJkaW5hbCAqbnVtX2FyZ3MpOwp2b2lkIF9YbU5hdmlnQ2hh
bmdlTWFuYWdlZChXaWRnZXQgd2lkKTsKdm9pZCBfWG1OYXZpZ1Jlc2l6ZShXaWRnZXQgd2lkKTsK
dm9pZCBfWG1WYWxpZGF0ZUZvY3VzKFdpZGdldCB3aWQpOwp2b2lkIF9YbU5hdmlnRGVzdHJveShX
aWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1DYWxsRm9jdXNNb3ZlZChXaWRnZXQgb2xkLCBXaWRnZXQg
bmV3X3dpZCwgWEV2ZW50ICpldmVudCk7CkJvb2xlYW4gX1htTWdyVHJhdmVyc2FsKFdpZGdldCB3
aWQsIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbik7CnZvaWQgX1htQ2xlYXJGb2N1c1Bh
dGgoV2lkZ2V0IHdpZCk7CkJvb2xlYW4gX1htRm9jdXNJc0hlcmUoV2lkZ2V0IHcpOwp2b2lkIF9Y
bVByb2Nlc3NUcmF2ZXJzYWwoV2lkZ2V0IHcsIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpciwgQm9v
bGVhbiBjaGVjayk7CnVuc2lnbmVkIGNoYXIgX1htR2V0Rm9jdXNQb2xpY3koV2lkZ2V0IHcpOwpX
aWRnZXQgX1htRmluZFRvcE1vc3RTaGVsbChXaWRnZXQgdyk7CnZvaWQgX1htRm9jdXNNb2RlbENo
YW5nZWQoV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xp
ZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpOwpCb29sZWFuIF9YbUdyYWJUaGVGb2N1cyhX
aWRnZXQgdywgWEV2ZW50ICpldmVudCk7ClhtRm9jdXNEYXRhIF9YbUdldEZvY3VzRGF0YShXaWRn
ZXQgd2lkKTsKQm9vbGVhbiBfWG1DcmVhdGVWaXNpYmlsaXR5UmVjdChXaWRnZXQgdywgWFJlY3Rh
bmdsZSAqcmVjdFB0cik7CnZvaWQgX1htU2V0UmVjdChYUmVjdGFuZ2xlICpyZWN0LCBXaWRnZXQg
dyk7CmludCBfWG1JbnRlcnNlY3RSZWN0KFhSZWN0YW5nbGUgKnNyY1JlY3RBLCBXaWRnZXQgd2lk
Z2V0LCBYUmVjdGFuZ2xlICpkc3RSZWN0KTsKaW50IF9YbUVtcHR5UmVjdChYUmVjdGFuZ2xlICpy
KTsKdm9pZCBfWG1DbGVhclJlY3QoWFJlY3RhbmdsZSAqcik7CkJvb2xlYW4gX1htSXNOYXZpZ2Fi
bGUoV2lkZ2V0IHdpZCk7CnZvaWQgX1htV2lkZ2V0Rm9jdXNDaGFuZ2UoV2lkZ2V0IHdpZCwgWG1G
b2N1c0NoYW5nZSBjaGFuZ2UpOwpXaWRnZXQgX1htTmF2aWdhdGUoV2lkZ2V0IHdpZCwgWG1UcmF2
ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKTsKV2lkZ2V0IF9YbUZpbmROZXh0VGFiR3JvdXAoV2lk
Z2V0IHdpZCk7CldpZGdldCBfWG1GaW5kUHJldlRhYkdyb3VwKFdpZGdldCB3aWQpOwp2b2lkIF9Y
bVNldEluaXRpYWxPZlRhYkdyb3VwKFdpZGdldCB0YWJfZ3JvdXAsIFdpZGdldCBpbml0X2ZvY3Vz
KTsKdm9pZCBfWG1SZXNldFRyYXZHcmFwaChXaWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1Gb2N1c0lz
SW5TaGVsbChXaWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1TaGVsbElzRXhjbHVzaXZlKFdpZGdldCB3
aWQpOwpXaWRnZXQgX1htR2V0Rmlyc3RGb2N1cyhXaWRnZXQgd2lkKTsKCgoKdm9pZCBfWG1UcmFj
a1NoZWxsRm9jdXMoV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVy
IGNsaWVudF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICBCb29sZWFuICpkb250U3dhbGxvdyk7Cgp2b2lkIF9YbU1hbmFn
ZXJFbnRlcihXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50X2lu
LAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAg
ICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyTGVhdmUoV2lkZ2V0IHdp
ZCwKICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudF9pbiwKICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1f
cGFyYW1zKTsKCnZvaWQgX1htTWFuYWdlckZvY3VzSW5JbnRlcm5hbChXaWRnZXQgd2lkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyRm9jdXNJbihXaWRn
ZXQgbXcsCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbU1hbmFnZXJGb2N1c091dChXaWRnZXQgd2lkLAogICAg
ICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9w
YXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyVW5tYXAoV2lkZ2V0IG13LAogICAgICAgICAgICAgICAg
ICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywK
ICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1Qcmlt
aXRpdmVFbnRlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgIENhcmRpbmFsICpudW1fcGFyYW1zKTsKCnZvaWQgX1htUHJpbWl0aXZlTGVhdmUoV2lk
Z2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbVByaW1pdGl2ZUZvY3VzT3V0KFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg
Km51bV9wYXJhbXMpOwoKdm9pZCBfWG1QcmltaXRpdmVGb2N1c0luKFdpZGdldCB3LAogICAgICAg
ICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9w
YXJhbXMpOwoKdm9pZCBfWG1QcmltaXRpdmVVbm1hcChXaWRnZXQgdywKICAgICAgICAgICAgICAg
ICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFy
YW1zLAogICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fcGFyYW1zKTsKCnZvaWQg
X1htRW50ZXJHYWRnZXQoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu
dCwKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAg
ICBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbUxlYXZlR2FkZ2V0KFdpZGdldCB3LAog
ICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoK
dm9pZCBfWG1Gb2N1c0luR2FkZ2V0KFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgWEV2
ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1Gb2N1c091dEdh
ZGdldChXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsICpudW1fcGFyYW1zKTsKCgoKdm9pZCBfWG1HZW9BZGp1c3RCb3hlcyhYbUdlb01h
dHJpeCBnZW9TcGVjKTsKdm9pZCBfWG1HZW9BcnJhbmdlQm94ZXMoWG1HZW9NYXRyaXggZ2VvU3Bl
YywgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiAqcFcsIERpbWVuc2lvbiAqcEgpOwpEaW1lbnNpb24gX1htR2VvQm94ZXNTYW1l
V2lkdGgoWG1LaWRHZW9tZXRyeSByb3dQdHIsIERpbWVuc2lvbiB3aWR0aCk7CkRpbWVuc2lvbiBf
WG1HZW9Cb3hlc1NhbWVIZWlnaHQoWG1LaWRHZW9tZXRyeSByb3dQdHIsIERpbWVuc2lvbiBoZWln
aHQpOwp2b2lkIF9YbUdlb0NsZWFyUmVjdE9iakFyZWFzKFJlY3RPYmogciwgWFdpbmRvd0NoYW5n
ZXMgKm9sZCk7CmludCBfWG1HZW9Db3VudF9raWRzKENvbXBvc2l0ZVdpZGdldCBjKTsKdm9pZCBf
WG1HZW9HZXREaW1lbnNpb25zKFhtR2VvTWF0cml4IGdlb1NwZWMpOwpYbUtpZEdlb21ldHJ5IF9Y
bUdldEtpZEdlbyhXaWRnZXQgd2lkLCBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHVuaWZvcm1fYm9yZGVyLCBEaW1lbnNpb24gYm9yZGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdW5pZm9ybV93aWR0aF9tYXJnaW5zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdW5pZm9ybV9oZWlnaHRfbWFyZ2lucywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2lkZ2V0IGhlbHAsIGludCBnZW9fdHlwZSk7CnZvaWQgX1htR2VvTG9hZFZh
bHVlcyhXaWRnZXQgd2lkLCBpbnQgZ2VvVHlwZSwgV2lkZ2V0IGluc3RpZ2F0b3IsCiAgICAgICAg
ICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpyZXF1ZXN0LAogICAgICAgICAgICAgICAg
ICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqZ2VvUmVzdWx0KTsKWG1HZW9NYXRyaXggX1htR2VvTWF0
cml4QWxsb2ModW5zaWduZWQgaW50IG51bVJvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBudW1Cb3hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGV4dFNpemUpOwp2b2lkIF9YbUdlb01hdHJpeEZyZWUoWG1HZW9NYXRyaXgg
Z2VvX3NwZWMpOwp2b2lkIF9YbUdlb01hdHJpeEdldChYbUdlb01hdHJpeCBnZW9TcGVjLCBpbnQg
Z2VvVHlwZSk7CnZvaWQgX1htR2VvTWF0cml4U2V0KFhtR2VvTWF0cml4IGdlb1NwZWMpOwpCb29s
ZWFuIF9YbUdlb1JlcGx5WWVzKFdpZGdldCB3aWQsIFh0V2lkZ2V0R2VvbWV0cnkgKmRlc2lyZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcmVz
cG9uc2UpOwpCb29sZWFuIF9YbUdlb1NldHVwS2lkKFhtS2lkR2VvbWV0cnkgZ2VvLCBXaWRnZXQg
a2lkV2lkKTsKQm9vbGVhbiBfWG1HZW9tZXRyeUVxdWFsKFdpZGdldCB3aWQsIFh0V2lkZ2V0R2Vv
bWV0cnkgKmdlb0EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdl
dEdlb21ldHJ5ICpnZW9CKTsKdm9pZCBfWG1IYW5kbGVTaXplVXBkYXRlKFdpZGdldCB3aWQsIHVu
c2lnbmVkIGNoYXIgcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgWG1HZW9DcmVhdGVQ
cm9jIGNyZWF0ZU1hdHJpeCk7Clh0R2VvbWV0cnlSZXN1bHQgX1htSGFuZGxlUXVlcnlHZW9tZXRy
eShXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRX
aWRnZXRHZW9tZXRyeSAqaW50ZW5kZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpkZXNpcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwb2xpY3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYbUdlb0NyZWF0ZVByb2MgY3JlYXRlTWF0cml4KTsKWHRH
ZW9tZXRyeVJlc3VsdCBfWG1IYW5kbGVHZW9tZXRyeU1hbmFnZXIoV2lkZ2V0IHdpZCwgV2lkZ2V0
IGluc3RpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0
V2lkZ2V0R2VvbWV0cnkgKmRlc2lyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFsbG93ZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcG9saWN5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUdlb01hdHJpeCAqY2FjaGVQdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtR2VvQ3JlYXRlUHJvYyBjcmVh
dGVNYXRyaXgpOwpYdEdlb21ldHJ5UmVzdWx0IF9YbU1ha2VHZW9tZXRyeVJlcXVlc3QoV2lkZ2V0
IHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21l
dHJ5ICpnZW9tKTsKdm9pZCBfWG1NZW51QmFyRml4KFhtR2VvTWF0cml4IGdlb1NwZWMsIGludCBh
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0IGxheW91dFB0ciwgWG1L
aWRHZW9tZXRyeSByb3dQdHIpOwp2b2lkIF9YbVNlcGFyYXRvckZpeChYbUdlb01hdHJpeCBnZW9T
cGVjLCBpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0IGxh
eW91dFB0ciwgWG1LaWRHZW9tZXRyeSByb3dQdHIpOwp2b2lkIF9YbVNldEtpZEdlbyhYbUtpZEdl
b21ldHJ5IGtnLCBXaWRnZXQgaW5zdGlnYXRvcik7CgoKWG1SZWdpb24gX1htUmVnaW9uQ3JlYXRl
KHZvaWQpOwpYbVJlZ2lvbiBfWG1SZWdpb25DcmVhdGVTaXplKGxvbmcgc2l6ZSk7CnZvaWQgX1ht
UmVnaW9uQ29tcHV0ZUV4dGVudHMoWG1SZWdpb24gcik7CnZvaWQgX1htUmVnaW9uR2V0RXh0ZW50
cyhYbVJlZ2lvbiByLCBYUmVjdGFuZ2xlICpyZWN0KTsKdm9pZCBfWG1SZWdpb25VbmlvblJlY3RX
aXRoUmVnaW9uKFhSZWN0YW5nbGUgKnJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYbVJlZ2lvbiBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
bVJlZ2lvbiBkZXN0KTsKdm9pZCBfWG1SZWdpb25JbnRlcnNlY3RSZWN0V2l0aFJlZ2lvbihYUmVj
dGFuZ2xlICpyZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtUmVn
aW9uIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVJlZ2lv
biBkZXN0KTsKbG9uZyBfWG1SZWdpb25HZXROdW1SZWN0YW5nbGVzKFhtUmVnaW9uIHIpOwp2b2lk
IF9YbVJlZ2lvbkdldFJlY3RhbmdsZXMoWG1SZWdpb24gciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhSZWN0YW5nbGUgKipyZWN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgKm5yZWN0cyk7CnZvaWQgX1htUmVnaW9uU2V0R0NSZWdpb24oRGlzcGxheSAqZHB5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDIGdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB4X29yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeV9vcmlnaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgWG1SZWdpb24gcik7CnZvaWQgX1htUmVnaW9uRGVzdHJveShY
bVJlZ2lvbiByKTsKdm9pZCBfWG1SZWdpb25PZmZzZXQoWG1SZWdpb24gcFJlZ2lvbiwgaW50IHgs
IGludCB5KTsKdm9pZCBfWG1SZWdpb25JbnRlcnNlY3QoWG1SZWdpb24gcmVnMSwgWG1SZWdpb24g
cmVnMiwgWG1SZWdpb24gbmV3UmVnKTsKdm9pZCBfWG1SZWdpb25VbmlvbihYbVJlZ2lvbiByZWcx
LCBYbVJlZ2lvbiByZWcyLCBYbVJlZ2lvbiBuZXdSZWcpOwp2b2lkIF9YbVJlZ2lvblN1YnRyYWN0
KFhtUmVnaW9uIHJlZ00sIFhtUmVnaW9uIHJlZ1MsIFhtUmVnaW9uIHJlZ0QpOwpCb29sZWFuIF9Y
bVJlZ2lvbklzRW1wdHkoWG1SZWdpb24gcik7CkJvb2xlYW4gX1htUmVnaW9uRXF1YWwoWG1SZWdp
b24gcjEsIFhtUmVnaW9uIHIyKTsKQm9vbGVhbiBfWG1SZWdpb25Qb2ludEluUmVnaW9uKFhtUmVn
aW9uIHBSZWdpb24sIGludCB4LCBpbnQgeSk7CnZvaWQgX1htUmVnaW9uQ2xlYXIoWG1SZWdpb24g
ciApOwp2b2lkIF9YbVJlZ2lvblNocmluayhYbVJlZ2lvbiByLCBpbnQgZHgsIGludCBkeSk7CnZv
aWQgX1htUmVnaW9uRHJhd1NoYWRvdyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdDIHRvcF9nYywK
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAg
ICAgICAgIFhtUmVnaW9uIHJlZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lv
biBib3JkZXJfdGhpY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gc2hhZG93
X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNoYWRvd190eXBl
KTsKCgoKdm9pZCBfWG1TZXREZXN0aW5hdGlvbihEaXNwbGF5ICpkcHksIFdpZGdldCB3KTsKCgoK
dm9pZCBfWG1JbUNoYW5nZU1hbmFnZWQoV2lkZ2V0IHZ3KTsKdm9pZCBfWG1JbVJlYWxpemUoV2lk
Z2V0IHZ3KTsKdm9pZCBfWG1JbVJlc2l6ZShXaWRnZXQgdncpOwp2b2lkIF9YbUltUmVkaXNwbGF5
KFdpZGdldCB2dyk7CgoKCnZvaWQgX1htSW5pdEF0b21QYWlycyhEaXNwbGF5ICpkaXNwbGF5KTsK
dm9pZCBfWG1Jbml0VGFyZ2V0c1RhYmxlKERpc3BsYXkgKmRpc3BsYXkpOwpDYXJkaW5hbCBfWG1J
bmRleFRvVGFyZ2V0cyhXaWRnZXQgc2hlbGwsIENhcmRpbmFsIHRfaW5kZXgsIEF0b20gKip0YXJn
ZXRzUnRuKTsKQ2FyZGluYWwgX1htVGFyZ2V0c1RvSW5kZXgoV2lkZ2V0IHNoZWxsLCBBdG9tICp0
YXJnZXRzLCBDYXJkaW5hbCBudW1UYXJnZXRzKTsKQXRvbSBfWG1BbGxvY01vdGlmQXRvbShXaWRn
ZXQgc2hlbGwsIFRpbWUgdGltZSk7CnZvaWQgX1htRnJlZU1vdGlmQXRvbShXaWRnZXQgc2hlbGws
IEF0b20gYXRvbSk7CnZvaWQgX1htRGVzdHJveU1vdGlmV2luZG93KERpc3BsYXkgKmRweSk7Cldp
bmRvdyBfWG1HZXREcmFnUHJveHlXaW5kb3coRGlzcGxheSAqZGlzcGxheSk7CgoKCnZvaWQgX1ht
RHJhZ092ZXJIaWRlKFdpZGdldCB3LCBQb3NpdGlvbiBjbGlwT3JpZ2luWCwgUG9zaXRpb24gY2xp
cE9yaWdpblksCiAgICAgICAgICAgICAgICAgICAgIFhtUmVnaW9uIGNsaXBSZWdpb24pOwp2b2lk
IF9YbURyYWdPdmVyU2hvdyhXaWRnZXQgdywgUG9zaXRpb24gY2xpcE9yaWdpblgsIFBvc2l0aW9u
IGNsaXBPcmlnaW5ZLAogICAgICAgICAgICAgICAgICAgICBYbVJlZ2lvbiBjbGlwUmVnaW9uKTsK
dm9pZCBfWG1EcmFnT3Zlck1vdmUoV2lkZ2V0IHcsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHkpOwp2
b2lkIF9YbURyYWdPdmVyQ2hhbmdlKFdpZGdldCB3LCB1bnNpZ25lZCBjaGFyIGRyb3BTaXRlU3Rh
dHVzKTsKdm9pZCBfWG1EcmFnT3ZlckZpbmlzaChXaWRnZXQgdywgdW5zaWduZWQgY2hhciBjb21w
bGV0aW9uU3RhdHVzKTsKQ3Vyc29yIF9YbURyYWdPdmVyR2V0QWN0aXZlQ3Vyc29yKCBXaWRnZXQg
dyk7CnZvaWQgX1htRHJhZ092ZXJTZXRJbml0aWFsUG9zaXRpb24oV2lkZ2V0IHcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gaW5pdGlhbFgsIFBvc2l0aW9uIGlu
aXRpYWxZKTsKCgoKdm9pZCBfWG1EcmFnVW5kZXJBbmltYXRpb24oV2lkZ2V0IHcsIFh0UG9pbnRl
ciBjbGllbnREYXRhLCBYdFBvaW50ZXIgY2FsbERhdGEpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBY
dFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAg
ICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0R2VvbWV0cnlI
YW5kbGVyIHJvb3RfZ2VvbWV0cnlfbWFuYWdlcjsKfSBTaGVsbENsYXNzRXh0ZW5zaW9uUmVjLCAq
U2hlbGxDbGFzc0V4dGVuc2lvbjsKCgoKCnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjIHsK
ICAgICAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgQ29tcG9zaXRlQ2xhc3NQ
YXJ0IGNvbXBvc2l0ZV9jbGFzczsKICAgICAgICBTaGVsbENsYXNzUGFydCBzaGVsbF9jbGFzczsK
fSBTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFNoZWxsQ2xhc3NSZWMgc2hlbGxDbGFzc1JlYzsKCgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGNoYXIgKmdlb21ldHJ5OwogICAgICAgIFh0Q3JlYXRl
UG9wdXBDaGlsZFByb2MgY3JlYXRlX3BvcHVwX2NoaWxkX3Byb2M7CiAgICAgICAgWHRHcmFiS2lu
ZCBncmFiX2tpbmQ7CiAgICAgICAgQm9vbGVhbiBzcHJpbmdfbG9hZGVkOwogICAgICAgIEJvb2xl
YW4gcG9wcGVkX3VwOwogICAgICAgIEJvb2xlYW4gYWxsb3dfc2hlbGxfcmVzaXplOwogICAgICAg
IEJvb2xlYW4gY2xpZW50X3NwZWNpZmllZDsKCgoKCiAgICAgICAgQm9vbGVhbiBzYXZlX3VuZGVy
OwogICAgICAgIEJvb2xlYW4gb3ZlcnJpZGVfcmVkaXJlY3Q7CgogICAgICAgIFh0Q2FsbGJhY2tM
aXN0IHBvcHVwX2NhbGxiYWNrOwogICAgICAgIFh0Q2FsbGJhY2tMaXN0IHBvcGRvd25fY2FsbGJh
Y2s7CiAgICAgICAgVmlzdWFsKiB2aXN1YWw7Cn0gU2hlbGxQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBjb21wb3NpdGU7
CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwp9IFNoZWxsUmVjLCAqU2hlbGxXaWRnZXQ7CnR5cGVk
ZWYgc3RydWN0IHsKICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gT3ZlcnJpZGVTaGVsbENsYXNz
UGFydDsKCnR5cGVkZWYgc3RydWN0IF9PdmVycmlkZVNoZWxsQ2xhc3NSZWMgewogICAgICAgIENv
cmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAgICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9z
aXRlX2NsYXNzOwogICAgICAgIFNoZWxsQ2xhc3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIE92
ZXJyaWRlU2hlbGxDbGFzc1BhcnQgb3ZlcnJpZGVfc2hlbGxfY2xhc3M7Cn0gT3ZlcnJpZGVTaGVs
bENsYXNzUmVjOwoKZXh0ZXJuIE92ZXJyaWRlU2hlbGxDbGFzc1JlYyBvdmVycmlkZVNoZWxsQ2xh
c3NSZWM7CgoKCnR5cGVkZWYgc3RydWN0IHtpbnQgZnJhYmpvdXM7fSBPdmVycmlkZVNoZWxsUGFy
dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBjb3JlOwogICAgICAgIENvbXBv
c2l0ZVBhcnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBzaGVsbDsKICAgICAgICBPdmVy
cmlkZVNoZWxsUGFydCBvdmVycmlkZTsKfSBPdmVycmlkZVNoZWxsUmVjLCAqT3ZlcnJpZGVTaGVs
bFdpZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBXTVNo
ZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1dNU2hlbGxDbGFzc1JlYyB7CiAgICAgICAg
Q29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBvc2l0ZUNsYXNzUGFydCBjb21w
b3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAgICAgICAg
V01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKfSBXTVNoZWxsQ2xhc3NSZWM7CgpleHRl
cm4gV01TaGVsbENsYXNzUmVjIHdtU2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgICAgIGNoYXIgKnRpdGxlOwogICAgICAgIGludCB3bV90aW1lb3V0OwogICAgICAgIEJvb2xl
YW4gd2FpdF9mb3Jfd207CiAgICAgICAgQm9vbGVhbiB0cmFuc2llbnQ7CiAgICAgICAgQm9vbGVh
biB1cmdlbmN5OwogICAgICAgIFdpZGdldCBjbGllbnRfbGVhZGVyOwogICAgICAgIFN0cmluZyB3
aW5kb3dfcm9sZTsKICAgICAgICBzdHJ1Y3QgX09sZFhTaXplSGludHMgewogICAgICAgICAgICBs
b25nIGZsYWdzOwogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgaW50IHdpZHRoLCBo
ZWlnaHQ7CiAgICAgICAgICAgIGludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAgICAgICAgICAg
IGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAgICAgICAgIGludCB3aWR0aF9pbmMsIGhl
aWdodF9pbmM7CiAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgaW50IHg7
CiAgICAgICAgICAgICAgICAgICAgaW50IHk7CiAgICAgICAgICAgIH0gbWluX2FzcGVjdCwgbWF4
X2FzcGVjdDsKICAgICAgICB9IHNpemVfaGludHM7CiAgICAgICAgWFdNSGludHMgd21faGludHM7
CiAgICAgICAgaW50IGJhc2Vfd2lkdGgsIGJhc2VfaGVpZ2h0OwogICAgICAgIGludCB3aW5fZ3Jh
dml0eTsKICAgICAgICBBdG9tIHRpdGxlX2VuY29kaW5nOwp9IFdNU2hlbGxQYXJ0OwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBj
b21wb3NpdGU7CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwogICAgICAgIFdNU2hlbGxQYXJ0IHdt
Owp9IFdNU2hlbGxSZWMsICpXTVNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfVmVuZG9yU2hl
bGxDbGFzc1JlYyAqVmVuZG9yU2hlbGxXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXRDbGFzcyB2
ZW5kb3JTaGVsbFdpZGdldENsYXNzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50
ZXIgZXh0ZW5zaW9uOwp9IFZlbmRvclNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1Zl
bmRvclNoZWxsQ2xhc3NSZWMgewogICAgICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAg
ICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgICAgIFNoZWxsQ2xh
c3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIFdNU2hlbGxDbGFzc1BhcnQgd21fc2hlbGxfY2xh
c3M7CiAgICAgICAgVmVuZG9yU2hlbGxDbGFzc1BhcnQgdmVuZG9yX3NoZWxsX2NsYXNzOwp9IFZl
bmRvclNoZWxsQ2xhc3NSZWM7CgpleHRlcm4gVmVuZG9yU2hlbGxDbGFzc1JlYyB2ZW5kb3JTaGVs
bENsYXNzUmVjOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHZlbmRvcl9zcGVjaWZp
YzsKfSBWZW5kb3JTaGVsbFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29yZVBhcnQg
Y29yZTsKICAgICAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAgICAgICBTaGVsbFBhcnQg
c2hlbGw7CiAgICAgICAgV01TaGVsbFBhcnQgd207CiAgICAgICAgVmVuZG9yU2hlbGxQYXJ0IHZl
bmRvcjsKfSBWZW5kb3JTaGVsbFJlYywgKlZlbmRvclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVj
dCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFRyYW5zaWVudFNoZWxsQ2xhc3NQYXJ0OwoK
dHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgewogICAgICAgIENvcmVDbGFz
c1BhcnQgY29yZV9jbGFzczsKICAgICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2Ns
YXNzOwogICAgICAgIFNoZWxsQ2xhc3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIFdNU2hlbGxD
bGFzc1BhcnQgd21fc2hlbGxfY2xhc3M7CiAgICAgICAgVmVuZG9yU2hlbGxDbGFzc1BhcnQgdmVu
ZG9yX3NoZWxsX2NsYXNzOwogICAgICAgIFRyYW5zaWVudFNoZWxsQ2xhc3NQYXJ0IHRyYW5zaWVu
dF9zaGVsbF9jbGFzczsKfSBUcmFuc2llbnRTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFRyYW5zaWVu
dFNoZWxsQ2xhc3NSZWMgdHJhbnNpZW50U2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIFdpZGdldCB0cmFuc2llbnRfZm9yOwp9IFRyYW5zaWVudFNoZWxsUGFydDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBjb3JlOwogICAgICAgIENvbXBvc2l0ZVBh
cnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBzaGVsbDsKICAgICAgICBXTVNoZWxsUGFy
dCB3bTsKICAgICAgICBWZW5kb3JTaGVsbFBhcnQgdmVuZG9yOwogICAgICAgIFRyYW5zaWVudFNo
ZWxsUGFydCB0cmFuc2llbnQ7Cn0gVHJhbnNpZW50U2hlbGxSZWMsICpUcmFuc2llbnRTaGVsbFdp
ZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBUb3BMZXZl
bFNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1RvcExldmVsU2hlbGxDbGFzc1JlYyB7
CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBvc2l0ZUNsYXNz
UGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7
CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAgICBWZW5kb3JT
aGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2ZWxTaGVsbENs
YXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7Cn0gVG9wTGV2ZWxTaGVsbENsYXNzUmVjOwoK
ZXh0ZXJuIFRvcExldmVsU2hlbGxDbGFzc1JlYyB0b3BMZXZlbFNoZWxsQ2xhc3NSZWM7CgoKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBjaGFyICppY29uX25hbWU7CiAgICAgICAgQm9vbGVhbiBp
Y29uaWM7CiAgICAgICAgQXRvbSBpY29uX25hbWVfZW5jb2Rpbmc7Cn0gVG9wTGV2ZWxTaGVsbFBh
cnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29yZVBhcnQgY29yZTsKICAgICAgICBDb21w
b3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAgICAgICBTaGVsbFBhcnQgc2hlbGw7CiAgICAgICAgV01T
aGVsbFBhcnQgd207CiAgICAgICAgVmVuZG9yU2hlbGxQYXJ0IHZlbmRvcjsKICAgICAgICBUb3BM
ZXZlbFNoZWxsUGFydCB0b3BMZXZlbDsKfSBUb3BMZXZlbFNoZWxsUmVjLCAqVG9wTGV2ZWxTaGVs
bFdpZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBBcHBs
aWNhdGlvblNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9uU2hlbGxD
bGFzc1JlYyB7CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBv
c2l0ZUNsYXNzUGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hl
bGxfY2xhc3M7CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAg
ICBWZW5kb3JTaGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2
ZWxTaGVsbENsYXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7CiAgICAgICAgQXBwbGljYXRp
b25TaGVsbENsYXNzUGFydCBhcHBsaWNhdGlvbl9zaGVsbF9jbGFzczsKfSBBcHBsaWNhdGlvblNo
ZWxsQ2xhc3NSZWM7CgpleHRlcm4gQXBwbGljYXRpb25TaGVsbENsYXNzUmVjIGFwcGxpY2F0aW9u
U2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKCgogICAgY2hhciAqY2xhc3M7Cgog
ICAgWHJtQ2xhc3MgeHJtX2NsYXNzOwogICAgaW50IGFyZ2M7CiAgICBjaGFyICoqYXJndjsKfSBB
cHBsaWNhdGlvblNoZWxsUGFydDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBj
b3JlOwogICAgICAgIENvbXBvc2l0ZVBhcnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBz
aGVsbDsKICAgICAgICBXTVNoZWxsUGFydCB3bTsKICAgICAgICBWZW5kb3JTaGVsbFBhcnQgdmVu
ZG9yOwogICAgICAgIFRvcExldmVsU2hlbGxQYXJ0IHRvcExldmVsOwogICAgICAgIEFwcGxpY2F0
aW9uU2hlbGxQYXJ0IGFwcGxpY2F0aW9uOwp9IEFwcGxpY2F0aW9uU2hlbGxSZWMsICpBcHBsaWNh
dGlvblNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9u
Owp9IFNlc3Npb25TaGVsbENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9TZXNzaW9uU2hlbGxD
bGFzc1JlYyB7CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBv
c2l0ZUNsYXNzUGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hl
bGxfY2xhc3M7CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAg
ICBWZW5kb3JTaGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2
ZWxTaGVsbENsYXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7CiAgICAgICAgQXBwbGljYXRp
b25TaGVsbENsYXNzUGFydCBhcHBsaWNhdGlvbl9zaGVsbF9jbGFzczsKICAgICAgICBTZXNzaW9u
U2hlbGxDbGFzc1BhcnQgc2Vzc2lvbl9zaGVsbF9jbGFzczsKfSBTZXNzaW9uU2hlbGxDbGFzc1Jl
YzsKCmV4dGVybiBTZXNzaW9uU2hlbGxDbGFzc1JlYyBzZXNzaW9uU2hlbGxDbGFzc1JlYzsKCnR5
cGVkZWYgc3RydWN0IF9YdFNhdmVZb3Vyc2VsZlJlYyAqWHRTYXZlWW91cnNlbGY7CgoKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIFNtY0Nvbm4gY29ubmVjdGlvbjsKICAgIFN0cmluZyBzZXNzaW9uX2lk
OwogICAgU3RyaW5nKiByZXN0YXJ0X2NvbW1hbmQ7CiAgICBTdHJpbmcqIGNsb25lX2NvbW1hbmQ7
CiAgICBTdHJpbmcqIGRpc2NhcmRfY29tbWFuZDsKICAgIFN0cmluZyogcmVzaWduX2NvbW1hbmQ7
CiAgICBTdHJpbmcqIHNodXRkb3duX2NvbW1hbmQ7CiAgICBTdHJpbmcqIGVudmlyb25tZW50Owog
ICAgU3RyaW5nIGN1cnJlbnRfZGlyOwogICAgU3RyaW5nIHByb2dyYW1fcGF0aDsKICAgIHVuc2ln
bmVkIGNoYXIgcmVzdGFydF9zdHlsZTsKICAgIHVuc2lnbmVkIGNoYXIgY2hlY2twb2ludF9zdGF0
ZTsKICAgIEJvb2xlYW4gam9pbl9zZXNzaW9uOwogICAgWHRDYWxsYmFja0xpc3Qgc2F2ZV9jYWxs
YmFja3M7CiAgICBYdENhbGxiYWNrTGlzdCBpbnRlcmFjdF9jYWxsYmFja3M7CiAgICBYdENhbGxi
YWNrTGlzdCBjYW5jZWxfY2FsbGJhY2tzOwogICAgWHRDYWxsYmFja0xpc3Qgc2F2ZV9jb21wbGV0
ZV9jYWxsYmFja3M7CiAgICBYdENhbGxiYWNrTGlzdCBkaWVfY2FsbGJhY2tzOwogICAgWHRDYWxs
YmFja0xpc3QgZXJyb3JfY2FsbGJhY2tzOwogICAgWHRTYXZlWW91cnNlbGYgc2F2ZTsKICAgIFh0
SW5wdXRJZCBpbnB1dF9pZDsKICAgIFh0UG9pbnRlciBzZXMyMDsKICAgIFh0UG9pbnRlciBzZXMx
OTsKICAgIFh0UG9pbnRlciBzZXMxODsKICAgIFh0UG9pbnRlciBzZXMxNzsKICAgIFh0UG9pbnRl
ciBzZXMxNjsKICAgIFh0UG9pbnRlciBzZXMxNTsKICAgIFh0UG9pbnRlciBzZXMxNDsKICAgIFh0
UG9pbnRlciBzZXMxMzsKICAgIFh0UG9pbnRlciBzZXMxMjsKICAgIFh0UG9pbnRlciBzZXMxMTsK
ICAgIFh0UG9pbnRlciBzZXMxMDsKICAgIFh0UG9pbnRlciBzZXM5OwogICAgWHRQb2ludGVyIHNl
czg7CiAgICBYdFBvaW50ZXIgc2VzNzsKICAgIFh0UG9pbnRlciBzZXM2OwogICAgWHRQb2ludGVy
IHNlczU7CiAgICBYdFBvaW50ZXIgc2VzNDsKICAgIFh0UG9pbnRlciBzZXMzOwogICAgWHRQb2lu
dGVyIHNlczI7CiAgICBYdFBvaW50ZXIgc2VzMTsKfSBTZXNzaW9uU2hlbGxQYXJ0OwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBj
b21wb3NpdGU7CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwogICAgICAgIFdNU2hlbGxQYXJ0IHdt
OwogICAgICAgIFZlbmRvclNoZWxsUGFydCB2ZW5kb3I7CiAgICAgICAgVG9wTGV2ZWxTaGVsbFBh
cnQgdG9wTGV2ZWw7CiAgICAgICAgQXBwbGljYXRpb25TaGVsbFBhcnQgYXBwbGljYXRpb247CiAg
ICAgICAgU2Vzc2lvblNoZWxsUGFydCBzZXNzaW9uOwp9IFNlc3Npb25TaGVsbFJlYywgKlNlc3Np
b25TaGVsbFdpZGdldDsKCgoKCgoKCmV4dGVybiBDYXJkaW5hbCBfWG1GaWx0ZXJSZXNvdXJjZXMo
WHRSZXNvdXJjZSAqcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsIG51bVJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXaWRnZXRDbGFzcyBmaWx0ZXJDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYdFJlc291cmNlICoqZmlsdGVyZWRSZXNvdXJjZXNSdG4pOwoKZXh0ZXJuIHZvaWQgX1ht
QWRkR3JhYihXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gZXhjbHVz
aXZlLAogICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gc3ByaW5nX2xvYWRlZCk7CgpleHRl
cm4gdm9pZCBfWG1SZW1vdmVHcmFiKFdpZGdldCB3aWQpOwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1
bHQgX1htUm9vdEdlb21ldHJ5TWFuYWdlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpyZXF1ZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0
cnkgKnJlcGx5KTsKCmV4dGVybiB2b2lkIF9YbVZlbmRvckV4dFJlYWxpemUoV2lkZ2V0IHcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsb3N1cmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNhbGxfZGF0YSkgOwoKZXh0ZXJuIERp
c3BsYXkgKl9YbUdldERlZmF1bHREaXNwbGF5KHZvaWQpOwoKZXh0ZXJuIFZlbmRvclNoZWxsQ2xh
c3NSZWMgdmVuZG9yU2hlbGxDbGFzc1JlYzsKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQg
aW50IGV2ZW50VHlwZTsKICAgIEtleVN5bSBrZXlzeW07CiAgICBLZXlDb2RlIGtleTsKICAgIHVu
c2lnbmVkIGludCBtb2RpZmllcnM7CiAgICBXaWRnZXQgY29tcG9uZW50OwogICAgQm9vbGVhbiBu
ZWVkR3JhYjsKICAgIEJvb2xlYW4gaXNNbmVtb25pYzsKfSBYbUtleWJvYXJkRGF0YTsKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBQaXhlbCBmb3JlZ3JvdW5kOwoKICAgIERpbWVuc2lvbiBzaGFkb3df
dGhpY2tuZXNzOwogICAgUGl4ZWwgdG9wX3NoYWRvd19jb2xvcjsKICAgIFBpeG1hcCB0b3Bfc2hh
ZG93X3BpeG1hcDsKICAgIFBpeGVsIGJvdHRvbV9zaGFkb3dfY29sb3I7CiAgICBQaXhtYXAgYm90
dG9tX3NoYWRvd19waXhtYXA7CgogICAgUGl4ZWwgaGlnaGxpZ2h0X2NvbG9yOwogICAgUGl4bWFw
IGhpZ2hsaWdodF9waXhtYXA7CgogICAgWHRDYWxsYmFja0xpc3QgaGVscF9jYWxsYmFjazsKICAg
IFh0UG9pbnRlciB1c2VyX2RhdGE7CgogICAgQm9vbGVhbiB0cmF2ZXJzYWxfb247CiAgICB1bnNp
Z25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIFhtTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvbl90eXBl
OwoKCiAgICBCb29sZWFuIGV2ZW50X2hhbmRsZXJfYWRkZWQ7CiAgICBXaWRnZXQgYWN0aXZlX2No
aWxkOwogICAgV2lkZ2V0IGhpZ2hsaWdodGVkX3dpZGdldDsKICAgIFdpZGdldCBhY2NlbGVyYXRv
cl93aWRnZXQ7CgogICAgQm9vbGVhbiBoYXNfZm9jdXM7CgogICAgWG1TdHJpbmdEaXJlY3Rpb24g
c3RyaW5nX2RpcmVjdGlvbjsKCiAgICBYbUtleWJvYXJkRGF0YSAqa2V5Ym9hcmRfbGlzdDsKICAg
IHNob3J0IG51bV9rZXlib2FyZF9lbnRyaWVzOwogICAgc2hvcnQgc2l6ZV9rZXlib2FyZF9saXN0
OwoKICAgIFhtR2FkZ2V0IHNlbGVjdGVkX2dhZGdldDsKICAgIFhtR2FkZ2V0IGVsaWdpYmxlX2Zv
cl9tdWx0aV9idXR0b25fZXZlbnQ7CgogICAgR0MgYmFja2dyb3VuZF9HQzsKICAgIEdDIGhpZ2hs
aWdodF9HQzsKICAgIEdDIHRvcF9zaGFkb3dfR0M7CiAgICBHQyBib3R0b21fc2hhZG93X0dDOwoK
ICAgIFdpZGdldCBpbml0aWFsX2ZvY3VzOwoKICAgIFh0Q2FsbGJhY2tMaXN0IHBvcHVwX2hhbmRs
ZXJfY2FsbGJhY2s7Cn0gWG1NYW5hZ2VyUGFydDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0UG9p
bnRlciBuZXh0X2V4dGVuc2lvbjsKICAgIFhybVF1YXJrIHJlY29yZF90eXBlOwogICAgbG9uZyB2
ZXJzaW9uOwogICAgQ2FyZGluYWwgcmVjb3JkX3NpemU7CiAgICBYbVRyYXZlcnNhbENoaWxkcmVu
UHJvYyB0cmF2ZXJzYWxfY2hpbGRyZW47Cn0gWG1NYW5hZ2VyQ2xhc3NFeHRSZWMsICpYbU1hbmFn
ZXJDbGFzc0V4dDsKCgoKCnR5cGVkZWYgc3RydWN0IF9YbU1hbmFnZXJSZWMgewogICAgQ29yZVBh
cnQgY29yZTsKICAgIENvbXBvc2l0ZVBhcnQgY29tcG9zaXRlOwogICAgQ29uc3RyYWludFBhcnQg
Y29uc3RyYWludDsKICAgIFhtTWFuYWdlclBhcnQgbWFuYWdlcjsKfSBYbU1hbmFnZXJSZWM7CgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHRyYW5zbGF0aW9uczsKICAgIFhtU3ludGhldGlj
UmVzb3VyY2UgKnN5bl9yZXNvdXJjZXM7CiAgICBpbnQgbnVtX3N5bl9yZXNvdXJjZXM7CiAgICBY
bVN5bnRoZXRpY1Jlc291cmNlICpzeW5fY29uc3RyYWludF9yZXNvdXJjZXM7CiAgICBpbnQgbnVt
X3N5bl9jb25zdHJhaW50X3Jlc291cmNlczsKICAgIFhtUGFyZW50UHJvY2Vzc1Byb2MgcGFyZW50
X3Byb2Nlc3M7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtTWFuYWdlckNsYXNzUGFydDsK
CgoKCnR5cGVkZWYgc3RydWN0IF9YbU1hbmFnZXJDbGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0
IGNvcmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAg
Q29uc3RyYWludENsYXNzUGFydCBjb25zdHJhaW50X2NsYXNzOwogICAgWG1NYW5hZ2VyQ2xhc3NQ
YXJ0IG1hbmFnZXJfY2xhc3M7Cn0gWG1NYW5hZ2VyQ2xhc3NSZWM7CgoKCnR5cGVkZWYgc3RydWN0
IF9YbU1hbmFnZXJDb25zdHJhaW50UGFydCB7CiAgICBpbnQgdW51c2VkOwp9IFhtTWFuYWdlckNv
bnN0cmFpbnRQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htTWFuYWdlckNvbnN0cmFpbnRSZWMgewog
ICAgWG1NYW5hZ2VyQ29uc3RyYWludFBhcnQgbWFuYWdlcjsKfSBYbU1hbmFnZXJDb25zdHJhaW50
UmVjLCAqWG1NYW5hZ2VyQ29uc3RyYWludFB0cjsKCmV4dGVybiBYbU1hbmFnZXJDbGFzc1JlYyB4
bU1hbmFnZXJDbGFzc1JlYzsKQm9vbGVhbiBfWG1QYXJlbnRQcm9jZXNzKFdpZGdldCB3aWRnZXQs
IFhtUGFyZW50UHJvY2Vzc0RhdGEgZGF0YSk7CnZvaWQgX1htRGVzdHJveVBhcmVudENhbGxiYWNr
ICggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnQsIFh0UG9pbnRlciBjYWxsICk7Cgp2b2lkIF9Y
bVNvY29ycm8oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7CnZvaWQgX1htQ2xlYXJTaGFkb3dUeXBlKFdpZGdldCB3LAogICAgICAg
ICAgICAgICAgICAgICAgICBEaW1lbnNpb24gb2xkX3dpZHRoLCBEaW1lbnNpb24gb2xkX2hlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG9sZF9zaGFkb3dfdGhpY2tuZXNz
LAogICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gb2xkX2hpZ2hsaWdodF90aGlja25l
c3MpOwoKCnZvaWQgX1htR2FkZ2V0QnV0dG9uTW90aW9uKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50
LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldEFy
bShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1f
cGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRBY3RpdmF0ZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwg
U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRNdWx0
aUFybShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu
dW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRNdWx0aUFjdGl2YXRlKFdpZGdldCB3LCBYRXZlbnQg
KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdh
ZGdldERyYWcoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7CnZvaWQgX1htR2FkZ2V0U2VsZWN0KFdpZGdldCB3LCBYRXZlbnQgKmV2
ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbVBhcmVu
dEFjdGl2YXRlKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu
YWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbVBhcmVudENhbmNlbChXaWRnZXQgdywgWEV2ZW50ICpl
dmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRn
ZXRUcmF2ZXJzZVByZXZUYWJHcm91cChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpw
YXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZU5leHRU
YWJHcm91cChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFs
ICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZVByZXYoV2lkZ2V0IHcsIFhFdmVu
dCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CnZvaWQgX1ht
R2FkZ2V0VHJhdmVyc2VOZXh0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFt
cywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldFRyYXZlcnNlVXAoV2lkZ2V0
IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7
CnZvaWQgX1htR2FkZ2V0VHJhdmVyc2VEb3duKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJp
bmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldFRyYXZlcnNl
TGVmdChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu
dW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZVJpZ2h0KFdpZGdldCB3LCBYRXZlbnQg
KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdh
ZGdldFRyYXZlcnNlSG9tZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMs
IENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRIZWxwKFdpZGdldCB3LCBYRXZl
bnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9Y
bUdhZGdldEtleUlucHV0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywg
Q2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VySGVscChXaWRnZXQgdywgWEV2
ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdHlwZWRl
ZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NFeHRSZWMgewogICAgWHRQb2ludGVyIG5leHRfZXh0
ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAgICBsb25nIHZlcnNpb247CiAgICBD
YXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFhtV2lkZ2V0QmFzZWxpbmVQcm9jIHdpZGdldF9iYXNl
bGluZTsKICAgIFhtV2lkZ2V0RGlzcGxheVJlY3RQcm9jIHdpZGdldF9kaXNwbGF5X3JlY3Q7CiAg
ICBYbVdpZGdldE1hcmdpbnNQcm9jIHdpZGdldF9tYXJnaW5zOwp9IFhtUHJpbWl0aXZlQ2xhc3NF
eHRSZWMsICpYbVByaW1pdGl2ZUNsYXNzRXh0OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4
ZWwgZm9yZWdyb3VuZDsKCiAgICBEaW1lbnNpb24gc2hhZG93X3RoaWNrbmVzczsKICAgIFBpeGVs
IHRvcF9zaGFkb3dfY29sb3I7CiAgICBQaXhtYXAgdG9wX3NoYWRvd19waXhtYXA7CiAgICBQaXhl
bCBib3R0b21fc2hhZG93X2NvbG9yOwogICAgUGl4bWFwIGJvdHRvbV9zaGFkb3dfcGl4bWFwOwoK
ICAgIERpbWVuc2lvbiBoaWdobGlnaHRfdGhpY2tuZXNzOwogICAgUGl4ZWwgaGlnaGxpZ2h0X2Nv
bG9yOwogICAgUGl4bWFwIGhpZ2hsaWdodF9waXhtYXA7CgogICAgWHRDYWxsYmFja0xpc3QgaGVs
cF9jYWxsYmFjazsKICAgIFh0UG9pbnRlciB1c2VyX2RhdGE7CgogICAgQm9vbGVhbiB0cmF2ZXJz
YWxfb247CiAgICBCb29sZWFuIGhpZ2hsaWdodF9vbl9lbnRlcjsKICAgIEJvb2xlYW4gaGF2ZV90
cmF2ZXJzYWw7CgogICAgdW5zaWduZWQgY2hhciB1bml0X3R5cGU7CiAgICBYbU5hdmlnYXRpb25U
eXBlIG5hdmlnYXRpb25fdHlwZTsKCiAgICBCb29sZWFuIGhpZ2hsaWdodF9kcmF3bjsKICAgIEJv
b2xlYW4gaGlnaGxpZ2h0ZWQ7CgogICAgR0MgaGlnaGxpZ2h0X0dDOwogICAgR0MgdG9wX3NoYWRv
d19HQzsKICAgIEdDIGJvdHRvbV9zaGFkb3dfR0M7Cn0gWG1QcmltaXRpdmVQYXJ0OwoKCnR5cGVk
ZWYgc3RydWN0IF9YbVByaW1pdGl2ZVJlYyB7CiAgICBDb3JlUGFydCBjb3JlOwogICAgWG1Qcmlt
aXRpdmVQYXJ0IHByaW1pdGl2ZTsKfSBYbVByaW1pdGl2ZVJlYzsKCgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBYdFdpZGdldFByb2MgYm9yZGVyX2hpZ2hsaWdodDsKICAgIFh0V2lkZ2V0UHJvYyBib3Jk
ZXJfdW5oaWdobGlnaHQ7CiAgICBTdHJpbmcgdHJhbnNsYXRpb25zOwogICAgWHRBY3Rpb25Qcm9j
IGFybV9hbmRfYWN0aXZhdGU7CiAgICBYbVN5bnRoZXRpY1Jlc291cmNlICpzeW5fcmVzb3VyY2Vz
OwogICAgaW50IG51bV9zeW5fcmVzb3VyY2VzOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBY
bVByaW1pdGl2ZUNsYXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1QcmltaXRpdmVDbGFzc1Jl
YyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICBYbVByaW1pdGl2ZUNsYXNzUGFy
dCBwcmltaXRpdmVfY2xhc3M7Cn0gWG1QcmltaXRpdmVDbGFzc1JlYzsKCgpleHRlcm4gWG1Qcmlt
aXRpdmVDbGFzc1JlYyB4bVByaW1pdGl2ZUNsYXNzUmVjOwoKCgpleHRlcm4gdm9pZCBfWG1Qcmlt
aXRpdmVFbnRlcihXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRp
bmFsICpudW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htUHJpbWl0aXZlTGVhdmUoV2lkZ2V0IHcs
IFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4
dGVybiB2b2lkIF9YbVByaW1pdGl2ZUZvY3VzSW4oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0
cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVByaW1p
dGl2ZUZvY3VzT3V0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1UcmF2ZXJzZUxlZnQoV2lkZ2V0IHcs
IFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4
dGVybiB2b2lkIF9YbVRyYXZlcnNlUmlnaHQoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmlu
ZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNl
TmV4dChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu
dW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htVHJhdmVyc2VQcmV2KFdpZGdldCB3LCBYRXZlbnQg
KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9p
ZCBfWG1UcmF2ZXJzZURvd24oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlVXAoV2lkZ2V0
IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7
CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlSG9tZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htVHJhdmVy
c2VOZXh0VGFiR3JvdXAoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBD
YXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlUHJldlRhYkdyb3Vw
KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9w
YXJhbXMpOwpleHRlcm4gdm9pZCBfWG1QcmltaXRpdmVQYXJlbnRBY3RpdmF0ZShXaWRnZXQgdywg
WEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKZXh0
ZXJuIHZvaWQgX1htUHJpbWl0aXZlUGFyZW50Q2FuY2VsKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50
LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1Q
cmltaXRpdmVIZWxwKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1QcmltaXRpdmVVbm1hcChXaWRnZXQg
dywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsK
ZXh0ZXJuIEJvb2xlYW4gX1htRGlmZmVyZW50QmFja2dyb3VuZChXaWRnZXQgdywgV2lkZ2V0IHBh
cmVudCk7CnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldENhY2hlIHsKICAgIHN0cnVjdCBfWG1HYWRn
ZXRDYWNoZSAqbmV4dDsKICAgIHN0cnVjdCBfWG1HYWRnZXRDYWNoZSAqcHJldjsKICAgIGludCBy
ZWZfY291bnQ7Cn0gWG1HYWRnZXRDYWNoZSwgKlhtR2FkZ2V0Q2FjaGVQdHI7Cgp0eXBlZGVmIHN0
cnVjdCBfWG1DYWNoZUNsYXNzUGFydCB7CiAgICBYbUdhZGdldENhY2hlIGNhY2hlX2hlYWQ7CiAg
ICBYbUNhY2hlQ29weVByb2MgY2FjaGVfY29weTsKICAgIFhtR2FkZ2V0Q2FjaGVQcm9jIGNhY2hl
X2RlbGV0ZTsKICAgIFhtQ2FjaGVDb21wYXJlUHJvYyBjYWNoZV9jb21wYXJlOwp9IFhtQ2FjaGVD
bGFzc1BhcnQsICpYbUNhY2hlQ2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0
Q2FjaGVSZWYgewogICAgWG1HYWRnZXRDYWNoZSBjYWNoZTsKICAgIFh0QXJnVmFsIGRhdGE7Cn0g
WG1HYWRnZXRDYWNoZVJlZiwgKlhtR2FkZ2V0Q2FjaGVSZWZQdHI7CgoKCnR5cGVkZWYgc3RydWN0
IF9YbUdhZGdldFBhcnQgewogICAgRGltZW5zaW9uIHNoYWRvd190aGlja25lc3M7CiAgICBEaW1l
bnNpb24gaGlnaGxpZ2h0X3RoaWNrbmVzczsKCiAgICBYdENhbGxiYWNrTGlzdCBoZWxwX2NhbGxi
YWNrOwogICAgWHRQb2ludGVyIHVzZXJfZGF0YTsKCiAgICBCb29sZWFuIHRyYXZlcnNhbF9vbjsK
ICAgIEJvb2xlYW4gaGlnaGxpZ2h0X29uX2VudGVyOwogICAgQm9vbGVhbiBoYXZlX3RyYXZlcnNh
bDsKCiAgICB1bnNpZ25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIFhtTmF2aWdhdGlvblR5cGUgbmF2
aWdhdGlvbl90eXBlOwoKICAgIEJvb2xlYW4gaGlnaGxpZ2h0X2RyYXduOwogICAgQm9vbGVhbiBo
aWdobGlnaHRlZDsKICAgIEJvb2xlYW4gdmlzaWJsZTsKCiAgICBNYXNrIGV2ZW50X21hc2s7Cn0g
WG1HYWRnZXRQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldFJlYyB7CiAgICBPYmplY3RQ
YXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKICAgIFhtR2FkZ2V0UGFydCBn
YWRnZXQ7Cn0gWG1HYWRnZXRSZWM7CgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRDbGFzc0V4
dFJlYyB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayByZWNvcmRf
dHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwogICAgWG1X
aWRnZXRCYXNlbGluZVByb2Mgd2lkZ2V0X2Jhc2VsaW5lOwogICAgWG1XaWRnZXREaXNwbGF5UmVj
dFByb2Mgd2lkZ2V0X2Rpc3BsYXlfcmVjdDsKfSBYbUdhZGdldENsYXNzRXh0UmVjLCAqWG1HYWRn
ZXRDbGFzc0V4dDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRXaWRnZXRQcm9jIGJvcmRlcl9oaWdo
bGlnaHQ7CiAgICBYdFdpZGdldFByb2MgYm9yZGVyX3VuaGlnaGxpZ2h0OwogICAgWHRBY3Rpb25Q
cm9jIGFybV9hbmRfYWN0aXZhdGU7CiAgICBYbVdpZGdldERpc3BhdGNoUHJvYyBpbnB1dF9kaXNw
YXRjaDsKICAgIFhtVmlzdWFsQ2hhbmdlUHJvYyB2aXN1YWxfY2hhbmdlOwogICAgWG1TeW50aGV0
aWNSZXNvdXJjZSAqc3luX3Jlc291cmNlczsKICAgIGludCBudW1fc3luX3Jlc291cmNlczsKICAg
IFhtQ2FjaGVDbGFzc1BhcnRQdHIgY2FjaGVfcGFydDsKICAgIFh0UG9pbnRlciBleHRlbnNpb247
Cn0gWG1HYWRnZXRDbGFzc1BhcnQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0Q2xhc3NSZWMg
ewogICAgUmVjdE9iakNsYXNzUGFydCByZWN0X2NsYXNzOwogICAgWG1HYWRnZXRDbGFzc1BhcnQg
Z2FkZ2V0X2NsYXNzOwp9IFhtR2FkZ2V0Q2xhc3NSZWM7CgoKZXh0ZXJuIFhtR2FkZ2V0Q2xhc3NS
ZWMgeG1HYWRnZXRDbGFzc1JlYzsKdm9pZCBfWG1CdWlsZEdhZGdldFJlc291cmNlcyhXaWRnZXRD
bGFzcyBjKTsKdHlwZWRlZiBDYXJkaW5hbCAoKlhtR2V0U2VjUmVzRGF0YUZ1bmMpKFdpZGdldENs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1TZWNvbmRhcnlS
ZXNvdXJjZURhdGEgKiopOwoKdHlwZWRlZiBzdHJ1Y3QgX1htT2JqZWN0Q2xhc3NFeHRSZWMKewog
ICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAg
ICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKfSBYbU9iamVjdENsYXNz
RXh0UmVjLCAqWG1PYmplY3RDbGFzc0V4dDsKCnR5cGVkZWYgc3RydWN0IF9YbUdlbmVyaWNDbGFz
c0V4dFJlYyB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayByZWNv
cmRfdHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwp9IFht
R2VuZXJpY0NsYXNzRXh0UmVjLCAqWG1HZW5lcmljQ2xhc3NFeHQ7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1XcmFwcGVyRGF0YVJlYwp7CiAgICBzdHJ1Y3QgX1htV3JhcHBlckRhdGFSZWMgKm5leHQ7CiAg
ICBXaWRnZXRDbGFzcyB3aWRnZXRDbGFzczsKICAgIFh0SW5pdFByb2MgaW5pdGlhbGl6ZUxlYWY7
CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0VmFsdWVzTGVhZjsKICAgIFh0QXJnc1Byb2MgZ2V0VmFs
dWVzTGVhZjsKICAgIFh0UmVhbGl6ZVByb2MgcmVhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xhc3NQcm9j
IGNsYXNzUGFydEluaXRMZWFmOwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0R2VvbWV0
cnlIYW5kbGVyIGdlb21ldHJ5X21hbmFnZXI7Cn0gWG1XcmFwcGVyRGF0YVJlYywgKlhtV3JhcHBl
ckRhdGE7Cgp0eXBlZGVmIHN0cnVjdCBfWG1CYXNlQ2xhc3NFeHRSZWMKewogICAgWHRQb2ludGVy
IG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAgICBsb25nIHZlcnNp
b247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0SW5pdFByb2MgaW5pdGlhbGl6ZVBy
ZWhvb2s7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0VmFsdWVzUHJlaG9vazsKICAgIFh0SW5pdFBy
b2MgaW5pdGlhbGl6ZVBvc3Rob29rOwogICAgWHRTZXRWYWx1ZXNGdW5jIHNldFZhbHVlc1Bvc3Ro
b29rOwogICAgV2lkZ2V0Q2xhc3Mgc2Vjb25kYXJ5T2JqZWN0Q2xhc3M7CiAgICBYdEluaXRQcm9j
IHNlY29uZGFyeU9iamVjdENyZWF0ZTsKICAgIFhtR2V0U2VjUmVzRGF0YUZ1bmMgZ2V0U2VjUmVz
RGF0YTsKICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMzJdOwogICAgWHRBcmdzUHJvYyBnZXRWYWx1
ZXNQcmVob29rOwogICAgWHRBcmdzUHJvYyBnZXRWYWx1ZXNQb3N0aG9vazsKICAgIFh0V2lkZ2V0
Q2xhc3NQcm9jIGNsYXNzUGFydEluaXRQcmVob29rOwogICAgWHRXaWRnZXRDbGFzc1Byb2MgY2xh
c3NQYXJ0SW5pdFBvc3Rob29rOwogICAgWHRSZXNvdXJjZUxpc3QgZXh0X3Jlc291cmNlczsKICAg
IFh0UmVzb3VyY2VMaXN0IGNvbXBpbGVkX2V4dF9yZXNvdXJjZXM7CiAgICBDYXJkaW5hbCBudW1f
ZXh0X3Jlc291cmNlczsKICAgIEJvb2xlYW4gdXNlX3N1Yl9yZXNvdXJjZXM7CiAgICBYbVdpZGdl
dE5hdmlnYWJsZVByb2Mgd2lkZ2V0TmF2aWdhYmxlOwogICAgWG1Gb2N1c0NoYW5nZVByb2MgZm9j
dXNDaGFuZ2U7CiAgICBYbVdyYXBwZXJEYXRhIHdyYXBwZXJEYXRhOwp9IFhtQmFzZUNsYXNzRXh0
UmVjLCAqWG1CYXNlQ2xhc3NFeHQ7Cgp0eXBlZGVmIHN0cnVjdCBfWG1XaWRnZXRFeHREYXRhUmVj
CnsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBXaWRnZXQgcmVxV2lkZ2V0OwogICAgV2lkZ2V0IG9s
ZFdpZGdldDsKfSBYbVdpZGdldEV4dERhdGFSZWMsICpYbVdpZGdldEV4dERhdGE7CgpleHRlcm4g
WHJtUXVhcmsgWG1RbW90aWY7CmV4dGVybiBpbnQgX1htSW5oZXJpdENsYXNzOwpleHRlcm4gWG1C
YXNlQ2xhc3NFeHQgKl9YbV9mYXN0UHRyOwoKZXh0ZXJuIEJvb2xlYW4gX1htSXNTbG93U3ViY2xh
c3MoV2lkZ2V0Q2xhc3Mgd2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBiaXQpOwpleHRlcm4gWG1HZW5lcmljQ2xhc3NFeHQgKl9YbUdldENsYXNzRXh0ZW5z
aW9uUHRyKFhtR2VuZXJpY0NsYXNzRXh0ICpsc3RIZWFkUHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhybVF1YXJrIG93bmVyKTsKZXh0ZXJuIHZv
aWQgX1htUHVzaFdpZGdldEV4dERhdGEoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWG1XaWRnZXRFeHREYXRhIGRhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXh0VHlwZSk7CmV4dGVybiB2b2lkIF9YbVBvcFdp
ZGdldEV4dERhdGEoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYbVdpZGdldEV4dERhdGEgKmRhdGFSdG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBleHRUeXBlKTsKZXh0ZXJuIFhtV2lkZ2V0RXh0RGF0YSBfWG1HZXRX
aWRnZXRFeHREYXRhKFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGV4dFR5cGUpOwpleHRlcm4gdm9pZCBfWG1GcmVl
V2lkZ2V0RXh0RGF0YShXaWRnZXQgd2lkZ2V0KTsKZXh0ZXJuIHZvaWQgX1htQmFzZUNsYXNzUGFy
dEluaXRpYWxpemUoV2lkZ2V0Q2xhc3Mgd2MpOwpleHRlcm4gdm9pZCBfWG1Jbml0aWFsaXplRXh0
ZW5zaW9ucyh2b2lkKTsKZXh0ZXJuIEJvb2xlYW4gX1htSXNTdGFuZGFyZE1vdGlmV2lkZ2V0Q2xh
c3MoV2lkZ2V0Q2xhc3Mgd2MpOwpleHRlcm4gQ2FyZGluYWwgX1htU2Vjb25kYXJ5UmVzb3VyY2VE
YXRhKFhtQmFzZUNsYXNzRXh0IGJjZVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYbVNlY29uZGFyeVJlc291cmNlRGF0YSAqKnNlY1Jlc0RhdGFSdG4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRh
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc19uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtUmVzb3VyY2VCYXNl
UHJvYyBiYXNlZnVuY3Rpb25wb2ludGVyKTsKZXh0ZXJuIHZvaWQgX1htVHJhbnNmb3JtU3ViUmVz
b3VyY2VzKFh0UmVzb3VyY2VMaXN0IGNvbXBfcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX2NvbXBfcmVzb3VyY2VzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRSZXNvdXJjZUxpc3QgKnJlc291cmNlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fcmVzb3VyY2Vz
KTsKCgpleHRlcm4gQm9vbGVhbiBfWG1Jc1N1YmNsYXNzT2YoV2lkZ2V0Q2xhc3Mgd2MsIFdpZGdl
dENsYXNzIHNjbGFzcyk7CmVudW0gewogICAgWG1DQUNIRV9FWFRFTlNJT04gPSAxLAogICAgWG1E
RVNLVE9QX0VYVEVOU0lPTiwKICAgIFhtU0hFTExfRVhURU5TSU9OLAogICAgWG1QUk9UT0NPTF9F
WFRFTlNJT04sCiAgICBYbURFRkFVTFRfRVhURU5TSU9OCn07CnR5cGVkZWYgc3RydWN0IF9YbUV4
dFJlYyAqWG1FeHRPYmplY3Q7CnR5cGVkZWYgc3RydWN0IF9YbUV4dENsYXNzUmVjICpYbUV4dE9i
amVjdENsYXNzOwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRXh0T2JqZWN0Q2xhc3M7CnR5cGVkZWYg
c3RydWN0IF9YbUV4dENsYXNzUGFydCB7CiAgICBYbVN5bnRoZXRpY1Jlc291cmNlICpzeW5fcmVz
b3VyY2VzOwogICAgaW50IG51bV9zeW5fcmVzb3VyY2VzOwoKCgoKCgogICAgWHRQb2ludGVyIGV4
dGVuc2lvbjsKfSBYbUV4dENsYXNzUGFydCwgKlhtRXh0Q2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBz
dHJ1Y3QgX1htRXh0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsK
ICAgIFhtRXh0Q2xhc3NQYXJ0IGV4dF9jbGFzczsKfSBYbUV4dENsYXNzUmVjOwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgV2lkZ2V0IGxvZ2ljYWxQYXJlbnQ7CiAgICB1bnNpZ25lZCBjaGFyIGV4dGVu
c2lvblR5cGU7Cn0gWG1FeHRQYXJ0LCAqWG1FeHRQYXJ0UHRyOwoKZXh0ZXJuIFhtRXh0Q2xhc3NS
ZWMgeG1FeHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbUV4dFJlYyB7CiAgICBPYmplY3RQ
YXJ0IG9iamVjdDsKICAgIFhtRXh0UGFydCBleHQ7Cn0gWG1FeHRSZWM7Cgp0eXBlZGVmIHN0cnVj
dCBfWG1FeHRDYWNoZSB7CiAgIGNoYXIgZGF0YVsoMjUgKiBzaXplb2Yodm9pZCAqKSAtIHNpemVv
ZihCb29sZWFuKSldOwogICBCb29sZWFuIGludXNlOwp9IFhtRXh0Q2FjaGU7CgpleHRlcm4gY2hh
ciAqX1htRXh0T2JqQWxsb2MoQ2FyZGluYWwgc2l6ZSk7CmV4dGVybiB2b2lkIF9YbUV4dE9iakZy
ZWUoWHRQb2ludGVyIGVsZW1lbnQpOwpleHRlcm4gdm9pZCBfWG1CdWlsZEV4dFJlc291cmNlcyhX
aWRnZXRDbGFzcyBjKTsKdHlwZWRlZiBzdHJ1Y3QgX1htRGVza3RvcFJlYyAqWG1EZXNrdG9wT2Jq
ZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EZXNrdG9wQ2xhc3NSZWMgKlhtRGVza3RvcE9iamVjdENs
YXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3MgeG1EZXNrdG9wQ2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1EZXNrdG9wQ2xhc3NQYXJ0IHsKICAgIFdpZGdldENsYXNzIGNoaWxkX2NsYXNzOwogICAgWHRX
aWRnZXRQcm9jIGluc2VydF9jaGlsZDsKICAgIFh0V2lkZ2V0UHJvYyBkZWxldGVfY2hpbGQ7CiAg
ICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtRGVza3RvcENsYXNzUGFydCwgKlhtRGVza3RvcENs
YXNzUGFydFB0cjsKCnR5cGVkZWYgc3RydWN0IF9YbURlc2t0b3BDbGFzc1JlYyB7CiAgICBPYmpl
Y3RDbGFzc1BhcnQgb2JqZWN0X2NsYXNzOwogICAgWG1FeHRDbGFzc1BhcnQgZXh0X2NsYXNzOwog
ICAgWG1EZXNrdG9wQ2xhc3NQYXJ0IGRlc2t0b3BfY2xhc3M7Cn0gWG1EZXNrdG9wQ2xhc3NSZWM7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBXaWRnZXQgcGFyZW50OwogICAgV2lkZ2V0ICpjaGlsZHJl
bjsKICAgIENhcmRpbmFsIG51bV9jaGlsZHJlbjsKICAgIENhcmRpbmFsIG51bV9zbG90czsKfSBY
bURlc2t0b3BQYXJ0LCAqWG1EZXNrdG9wUGFydFB0cjsKCmV4dGVybiBYbURlc2t0b3BDbGFzc1Jl
YyB4bURlc2t0b3BDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbURlc2t0b3BSZWMgewogICAg
T2JqZWN0UGFydCBvYmplY3Q7CiAgICBYbUV4dFBhcnQgZXh0OwogICAgWG1EZXNrdG9wUGFydCBk
ZXNrdG9wOwp9IFhtRGVza3RvcFJlYzsKCgoKCmV4dGVybiBXaWRnZXRDbGFzcyBfWG1HZXRBY3R1
YWxDbGFzcyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0Q2xhc3Mgd19jbGFzcyk7CmV4dGVybiB2b2lkIF9YbVNldEFjdHVhbENsYXNz
KERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENs
YXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIGFj
dHVhbENsYXNzKTsKZXh0ZXJuIFdpZGdldENsYXNzIHhtU2NyZWVuQ2xhc3M7Cgp0eXBlZGVmIHN0
cnVjdCBfWG1TY3JlZW5SZWMgKlhtU2NyZWVuOwp0eXBlZGVmIHN0cnVjdCBfWG1TY3JlZW5DbGFz
c1JlYyAqWG1TY3JlZW5DbGFzczsKCmV4dGVybiBXaWRnZXQgWG1HZXRYbVNjcmVlbihTY3JlZW4g
KnNjcmVlbik7CmVudW0gewogICAgWG1BVFRBQ0hfTk9SVEhfV0VTVCwKICAgIFhtQVRUQUNIX05P
UlRILAogICAgWG1BVFRBQ0hfTk9SVEhfRUFTVCwKICAgIFhtQVRUQUNIX0VBU1QsCiAgICBYbUFU
VEFDSF9TT1VUSF9FQVNULAogICAgWG1BVFRBQ0hfU09VVEgsCiAgICBYbUFUVEFDSF9TT1VUSF9X
RVNULAogICAgWG1BVFRBQ0hfV0VTVCwKICAgIFhtQVRUQUNIX0NFTlRFUiwKICAgIFhtQVRUQUNI
X0hPVAp9OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdJY29uUmVjICpYbURyYWdJY29uT2Jq
ZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNsYXNzUmVjICpYbURyYWdJY29uT2JqZWN0
Q2xhc3M7CmV4dGVybiBXaWRnZXRDbGFzcyB4bURyYWdJY29uT2JqZWN0Q2xhc3M7CgpXaWRnZXQg
WG1DcmVhdGVEcmFnSWNvbiAoV2lkZ2V0IHdpZGdldCwgU3RyaW5nIG5hbWUsIEFyZ0xpc3QgYXJn
bGlzdCwgQ2FyZGluYWwgYXJnY291bnQpOwp0eXBlZGVmIHN0cnVjdCBfWG1TY3JlZW5DbGFzc1Bh
cnQgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVNjcmVlbkNsYXNzUGFydCwgKlhtU2Ny
ZWVuQ2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2NyZWVuQ2xhc3NSZWMgewogICAg
Q29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgWG1EZXNrdG9wQ2xhc3NQYXJ0IGRlc2t0b3Bf
Y2xhc3M7CiAgICBYbVNjcmVlbkNsYXNzUGFydCBzY3JlZW5fY2xhc3M7Cn0gWG1TY3JlZW5DbGFz
c1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdDdXJzb3JSZWMgewogICAgc3RydWN0IF9YbURy
YWdDdXJzb3JSZWMgKm5leHQ7CiAgICBDdXJzb3IgY3Vyc29yOwogICAgWG1EcmFnSWNvbk9iamVj
dCBzdGF0ZUljb247CiAgICBYbURyYWdJY29uT2JqZWN0IG9wSWNvbjsKICAgIFhtRHJhZ0ljb25P
YmplY3Qgc291cmNlSWNvbjsKICAgIEJvb2xlYW4gZGlydHk7Cn0gWG1EcmFnQ3Vyc29yUmVjLCAq
WG1EcmFnQ3Vyc29yQ2FjaGU7Cgp0eXBlZGVmIHN0cnVjdCBfWG1TY3JhdGNoUGl4bWFwUmVjICpY
bVNjcmF0Y2hQaXhtYXA7Cgp0eXBlZGVmIHN0cnVjdCBfWG1TY3JhdGNoUGl4bWFwUmVjIHsKICAg
IFhtU2NyYXRjaFBpeG1hcCBuZXh0OwogICAgUGl4bWFwIHBpeG1hcDsKICAgIENhcmRpbmFsIGRl
cHRoOwogICAgRGltZW5zaW9uIHdpZHRoOwogICAgRGltZW5zaW9uIGhlaWdodDsKICAgIEJvb2xl
YW4gaW5Vc2U7Cn0gWG1TY3JhdGNoUGl4bWFwUmVjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQm9v
bGVhbiBtd21QcmVzZW50OwogICAgdW5zaWduZWQgc2hvcnQgbnVtUmVwYXJlbnRlZDsKICAgIGlu
dCBkYXJrVGhyZXNob2xkOwogICAgaW50IGZvcmVncm91bmRUaHJlc2hvbGQ7CiAgICBpbnQgbGln
aHRUaHJlc2hvbGQ7CiAgICBYbURyYWdJY29uT2JqZWN0IGRlZmF1bHROb25lQ3Vyc29ySWNvbjsK
ICAgIFhtRHJhZ0ljb25PYmplY3QgZGVmYXVsdFZhbGlkQ3Vyc29ySWNvbjsKICAgIFhtRHJhZ0lj
b25PYmplY3QgZGVmYXVsdEludmFsaWRDdXJzb3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCBk
ZWZhdWx0TW92ZUN1cnNvckljb247CiAgICBYbURyYWdJY29uT2JqZWN0IGRlZmF1bHRDb3B5Q3Vy
c29ySWNvbjsKICAgIFhtRHJhZ0ljb25PYmplY3QgZGVmYXVsdExpbmtDdXJzb3JJY29uOwogICAg
WG1EcmFnSWNvbk9iamVjdCBkZWZhdWx0U291cmNlQ3Vyc29ySWNvbjsKCiAgICBDdXJzb3IgbnVs
bEN1cnNvcjsKICAgIFhtRHJhZ0N1cnNvclJlYyAqY3Vyc29yQ2FjaGU7CiAgICBDYXJkaW5hbCBt
YXhDdXJzb3JXaWR0aDsKICAgIENhcmRpbmFsIG1heEN1cnNvckhlaWdodDsKCiAgICBDdXJzb3Ig
bWVudUN1cnNvcjsKICAgIHVuc2lnbmVkIGNoYXIgdW5wb3N0QmVoYXZpb3I7CiAgICBYRm9udFN0
cnVjdCAqZm9udF9zdHJ1Y3Q7CiAgICBpbnQgaF91bml0OwogICAgaW50IHZfdW5pdDsKICAgIFht
U2NyYXRjaFBpeG1hcCBzY3JhdGNoUGl4bWFwczsKICAgIHVuc2lnbmVkIGNoYXIgbW92ZU9wYXF1
ZTsKCiAgICBYbURyYWdJY29uT2JqZWN0IHhtU3RhdGVDdXJzb3JJY29uOwogICAgWG1EcmFnSWNv
bk9iamVjdCB4bU1vdmVDdXJzb3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCB4bUNvcHlDdXJz
b3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCB4bUxpbmtDdXJzb3JJY29uOwogICAgWG1EcmFn
SWNvbk9iamVjdCB4bVNvdXJjZUN1cnNvckljb247CgogICAgR0MgaW1hZ2VHQzsKICAgIGludCBp
bWFnZUdDRGVwdGg7CiAgICBQaXhlbCBpbWFnZUZvcmVncm91bmQ7CiAgICBQaXhlbCBpbWFnZUJh
Y2tncm91bmQ7CgogICAgWHRQb2ludGVyIHNjcmVlbkluZm87Cn0gWG1TY3JlZW5QYXJ0LCAqWG1T
Y3JlZW5QYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2NyZWVuSW5mbyB7CiAgICBYdFBvaW50
ZXIgbWVudV9zdGF0ZTsKICAgIEJvb2xlYW4gZGVzdHJveUNhbGxiYWNrQWRkZWQ7Cn0gWG1TY3Jl
ZW5JbmZvOwoKZXh0ZXJuIFhtU2NyZWVuQ2xhc3NSZWMgeG1TY3JlZW5DbGFzc1JlYzsKCnR5cGVk
ZWYgc3RydWN0IF9YbVNjcmVlblJlYyB7CiAgICBDb3JlUGFydCBjb3JlOwogICAgWG1EZXNrdG9w
UGFydCBkZXNrdG9wOwogICAgWG1TY3JlZW5QYXJ0IHNjcmVlbjsKfSBYbVNjcmVlblJlYzsKCmV4
dGVybiBYcm1RdWFyayBfWG1JbnZhbGlkQ3Vyc29ySWNvblF1YXJrOwpleHRlcm4gWHJtUXVhcmsg
X1htVmFsaWRDdXJzb3JJY29uUXVhcms7CmV4dGVybiBYcm1RdWFyayBfWG1Ob25lQ3Vyc29ySWNv
blF1YXJrOwpleHRlcm4gWHJtUXVhcmsgX1htRGVmYXVsdERyYWdJY29uUXVhcms7CmV4dGVybiBY
cm1RdWFyayBfWG1Nb3ZlQ3Vyc29ySWNvblF1YXJrOwpleHRlcm4gWHJtUXVhcmsgX1htQ29weUN1
cnNvckljb25RdWFyazsKZXh0ZXJuIFhybVF1YXJrIF9YbUxpbmtDdXJzb3JJY29uUXVhcms7CgoK
CgpleHRlcm4gWG1EcmFnSWNvbk9iamVjdCBfWG1TY3JlZW5HZXRPcGVyYXRpb25JY29uKFdpZGdl
dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgb3BlcmF0aW9uKTsKZXh0ZXJuIFhtRHJhZ0ljb25PYmplY3QgX1htU2NyZWVu
R2V0U3RhdGVJY29uKFdpZGdldCB3LCB1bnNpZ25lZCBjaGFyIHN0YXRlKTsKZXh0ZXJuIFhtRHJh
Z0ljb25PYmplY3QgX1htU2NyZWVuR2V0U291cmNlSWNvbihXaWRnZXQgdyk7CmV4dGVybiBQaXht
YXAgX1htQWxsb2NTY3JhdGNoUGl4bWFwKFhtU2NyZWVuIHhtU2NyZWVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBkZXB0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEaW1lbnNpb24gaGVpZ2h0KTsKZXh0ZXJuIHZvaWQgX1htRnJlZVNjcmF0
Y2hQaXhtYXAoWG1TY3JlZW4geG1TY3JlZW4sIFBpeG1hcCBwaXhtYXApOwpleHRlcm4gWG1EcmFn
Q3Vyc29yQ2FjaGUgKiBfWG1HZXREcmFnQ3Vyc29yQ2FjaGVQdHIoWG1TY3JlZW4geG1TY3JlZW4p
OwpleHRlcm4gdm9pZCBfWG1HZXRNYXhDdXJzb3JTaXplKFdpZGdldCB3LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbiAqd2lkdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGltZW5zaW9uICpoZWlnaHQpOwpleHRlcm4gQ3Vyc29yIF9YbUdldE51bGxD
dXJzb3IoV2lkZ2V0IHcpOwpleHRlcm4gQ3Vyc29yIF9YbUdldE1lbnVDdXJzb3JCeVNjcmVlbihT
Y3JlZW4gKnNjcmVlbik7CmV4dGVybiBCb29sZWFuIF9YbUdldE1vdmVPcGFxdWVCeVNjcmVlbihT
Y3JlZW4gKnNjcmVlbik7CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9YbUdldFVucG9zdEJlaGF2aW9y
KFdpZGdldCB3aWQpOwpleHRlcm4gaW50IF9YbUdldEZvbnRVbml0KFNjcmVlbiAqc2NyZWVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaW1lbnNpb24pOwpleHRlcm4gdm9pZCBfWG1T
Y3JlZW5SZW1vdmVGcm9tQ3Vyc29yQ2FjaGUoWG1EcmFnSWNvbk9iamVjdCBpY29uKTsKZXh0ZXJu
IFdpZGdldENsYXNzIHhtUm93Q29sdW1uV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1S
b3dDb2x1bW5SZWMgKlhtUm93Q29sdW1uV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1Sb3dDb2x1
bW5DbGFzc1JlYyAqWG1Sb3dDb2x1bW5XaWRnZXRDbGFzczsKCgoKCgpleHRlcm4gV2lkZ2V0IFht
Q3JlYXRlTWVudUJhcihXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3QsIENh
cmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZU9wdGlvbk1lbnUoV2lkZ2V0
IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4
dGVybiBXaWRnZXQgWG1DcmVhdGVQb3B1cE1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwg
QXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVQ
dWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdsaXN0LCBDYXJk
aW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVSYWRpb0JveChXaWRnZXQgcGFy
ZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJu
IFdpZGdldCBYbUNyZWF0ZVJvd0NvbHVtbihXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcg
KmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVdvcmtB
cmVhKFdpZGdldCBwYXJlbnQsIGNoYXIgKm5hbWUsIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwgYXJn
Y291bnQpOwoKZXh0ZXJuIFdpZGdldCBYbU9wdGlvbkJ1dHRvbkdhZGdldChXaWRnZXQgb3B0aW9u
X21lbnUpOwpleHRlcm4gV2lkZ2V0IFhtT3B0aW9uTGFiZWxHYWRnZXQoV2lkZ2V0IG9wdGlvbl9t
ZW51KTsKCmV4dGVybiB2b2lkIFhtTWVudVBvc2l0aW9uKFdpZGdldCBtZW51LCBYQnV0dG9uUHJl
c3NlZEV2ZW50ICpldmVudCk7CmV4dGVybiBXaWRnZXQgWG1HZXRUZWFyT2ZmQ29udHJvbChXaWRn
ZXQgbWVudSk7CgpleHRlcm4gdm9pZCBYbUFkZFRvUG9zdEZyb21MaXN0KFdpZGdldCBtZW51X3dp
ZCwgV2lkZ2V0IHdpZGdldCk7CmV4dGVybiB2b2lkIFhtUmVtb3ZlRnJvbVBvc3RGcm9tTGlzdChX
aWRnZXQgbWVudV93aWQsIFdpZGdldCB3aWRnZXQpOwpleHRlcm4gV2lkZ2V0IFhtR2V0UG9zdGVk
RnJvbVdpZGdldChXaWRnZXQgbWVudSk7CnR5cGVkZWYgc3RydWN0IF9YbUJ1dHRvbkV2ZW50U3Rh
dHVzUmVjIHsKICAgIFRpbWUgdGltZTsKICAgIEJvb2xlYW4gdmVyaWZpZWQ7CiAgICBCb29sZWFu
IHdhaXRpbmdfdG9fYmVfbWFuYWdlZDsKICAgIFhCdXR0b25FdmVudCBldmVudDsKfSBYbUJ1dHRv
bkV2ZW50U3RhdHVzUmVjOwoKCnR5cGVkZWYgc3RydWN0IF9YbVJlcGxheUluZm9SZWMgewogICAg
VGltZSB0aW1lOwogICAgV2lkZ2V0IHRvcGxldmVsX21lbnU7Cn0gWG1SZXBsYXlJbmZvUmVjOwoK
dHlwZWRlZiBzdHJ1Y3QgX1htTWVudUZvY3VzUmVjIHsKICAgIFdpZGdldCBvbGRXaWRnZXQ7CiAg
ICBXaW5kb3cgb2xkRm9jdXM7CiAgICBpbnQgb2xkUmV2ZXJ0Owp9IFhtTWVudUZvY3VzUmVjOwoK
CnR5cGVkZWYgc3RydWN0IF9YbU1lbnVTdGF0ZVJlYyB7CiAgICBXaWRnZXQgUkNfTGFzdFNlbGVj
dFRvcGxldmVsOwogICAgWG1CdXR0b25FdmVudFN0YXR1c1JlYyBSQ19CdXR0b25FdmVudFN0YXR1
czsKICAgIFhtUmVwbGF5SW5mb1JlYyBSQ19SZXBsYXlJbmZvOwoKICAgIFdpZGdldCBSQ19hY3Rp
dmVJdGVtOwogICAgWG1NZW51Rm9jdXNSZWMgUkNfbWVudUZvY3VzOwoKICAgIEJvb2xlYW4gUkNf
YWxsb3dBY2NlbGVyYXRlZEluc2Vuc2l0aXZlVW5tYW5hZ2VkTWVudUl0ZW1zOwogICAgVGltZSBN
U19MYXN0TWFuYWdlZE1lbnVUaW1lOwogICAgQm9vbGVhbiBNVV9JbkRyYWdNb2RlOwogICAgV2lk
Z2V0IE1VX0N1cnJlbnRNZW51Q2hpbGQ7CiAgICBCb29sZWFuIE1VX0luUE1Nb2RlOwp9IFhtTWVu
dVN0YXRlUmVjLCAqWG1NZW51U3RhdGU7CgoKCnR5cGVkZWYgc3RydWN0IF9YbVJDS2lkR2VvbWV0
cnlSZWMKewogICAgV2lkZ2V0IGtpZDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkgYm94OwogICAgRGlt
ZW5zaW9uIG1hcmdpbl90b3A7CiAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsKICAgIERpbWVu
c2lvbiBiYXNlbGluZTsKfSBYbVJDS2lkR2VvbWV0cnlSZWMsICpYbVJDS2lkR2VvbWV0cnk7CgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgRGltZW5zaW9uIG1hcmdpbl9oZWlnaHQ7CiAgICBEaW1lbnNp
b24gbWFyZ2luX3dpZHRoOwoKICAgIERpbWVuc2lvbiBzcGFjaW5nOwoKICAgIERpbWVuc2lvbiBl
bnRyeV9ib3JkZXI7CgogICAgV2lkZ2V0IGhlbHBfcHVzaGJ1dHRvbjsKICAgIFdpZGdldCBjYXNj
YWRlQnRuOwoKICAgIFhtU3RyaW5nIG9wdGlvbl9sYWJlbDsKICAgIFdpZGdldCBvcHRpb25fc3Vi
bWVudTsKCiAgICBYbVJDS2lkR2VvbWV0cnkgYm94ZXM7CgogICAgV2lkZ2V0Q2xhc3MgZW50cnlf
Y2xhc3M7CgogICAgWHRDYWxsYmFja0xpc3QgZW50cnlfY2FsbGJhY2s7CiAgICBYdENhbGxiYWNr
TGlzdCBtYXBfY2FsbGJhY2s7CiAgICBYdENhbGxiYWNrTGlzdCB1bm1hcF9jYWxsYmFjazsKCiAg
ICBXaWRnZXQgbWVtb3J5X3N1YndpZGdldDsKCiAgICBzaG9ydCBudW1fY29sdW1uczsKCiAgICBT
dHJpbmcgbWVudVBvc3Q7CgogICAgdW5zaWduZWQgaW50IHBvc3RCdXR0b247CiAgICBpbnQgcG9z
dEV2ZW50VHlwZTsKICAgIHVuc2lnbmVkIGludCBwb3N0TW9kaWZpZXJzOwoKICAgIFN0cmluZyBt
ZW51X2FjY2VsZXJhdG9yOwogICAgS2V5U3ltIG1uZW1vbmljOwogICAgWG1TdHJpbmdDaGFyU2V0
IG1uZW1vbmljQ2hhclNldDsKCiAgICB1bnNpZ25lZCBjaGFyIGVudHJ5X2FsaWdubWVudDsKCiAg
ICB1bnNpZ25lZCBjaGFyIHBhY2tpbmc7CgogICAgdW5zaWduZWQgY2hhciB0eXBlOwoKICAgIHVu
c2lnbmVkIGNoYXIgb3JpZW50YXRpb247CgogICAgQm9vbGVhbiBhcm1lZDsKICAgIEJvb2xlYW4g
YWRqdXN0X21hcmdpbjsKICAgIEJvb2xlYW4gYWRqdXN0X2xhc3Q7CiAgICBCb29sZWFuIGRvX2Fs
aWdubWVudDsKICAgIEJvb2xlYW4gcmFkaW87CiAgICBCb29sZWFuIHJhZGlvX29uZTsKICAgIEJv
b2xlYW4gaG9tb2dlbmVvdXM7CiAgICBCb29sZWFuIHJlc2l6ZV93aWR0aDsKICAgIEJvb2xlYW4g
cmVzaXplX2hlaWdodDsKCiAgICBCb29sZWFuIHBvcHVwX2VuYWJsZWQ7CgogICAgRGltZW5zaW9u
IG9sZF93aWR0aDsKICAgIERpbWVuc2lvbiBvbGRfaGVpZ2h0OwogICAgRGltZW5zaW9uIG9sZF9z
aGFkb3dfdGhpY2tuZXNzOwoKICAgIFdpZGdldCAqcG9zdEZyb21MaXN0OwogICAgaW50IHBvc3RG
cm9tQ291bnQ7CiAgICBpbnQgcG9zdEZyb21MaXN0U2l6ZTsKCiAgICBXaWRnZXQgbGFzdFNlbGVj
dFRvcGxldmVsOwogICAgV2lkZ2V0IHBvcHVwUG9zdGVkOwoKICAgIHVuc2lnbmVkIGNoYXIgb2xk
Rm9jdXNQb2xpY3k7CgogICAgdW5zaWduZWQgY2hhciBUZWFyT2ZmTW9kZWw7CiAgICBXaWRnZXQg
UGFyZW50U2hlbGw7CiAgICBXaWRnZXQgdGVhcl9vZmZfY29udHJvbDsKICAgIEJvb2xlYW4gdG9f
c3RhdGU7CgogICAgWHRDYWxsYmFja0xpc3QgdGVhcl9vZmZfYWN0aXZhdGVkX2NhbGxiYWNrOwog
ICAgWHRDYWxsYmFja0xpc3QgdGVhcl9vZmZfZGVhY3RpdmF0ZWRfY2FsbGJhY2s7CiAgICBXaWRn
ZXQgdGVhcl9vZmZfbGFzdFNlbGVjdFRvcGxldmVsOwogICAgV2lkZ2V0IHRlYXJfb2ZmX2ZvY3Vz
X2l0ZW07CgogICAgdW5zaWduZWQgY2hhciBlbnRyeV92ZXJ0aWNhbF9hbGlnbm1lbnQ7CiAgICB1
bnNpZ25lZCBjaGFyIHBvcHVwX21lbnVfY2xpY2s7CiAgICBYdEludGVydmFsSWQgcG9wdXBfdGlt
ZW91dF90aW1lcjsKfSBYbVJvd0NvbHVtblBhcnQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29s
dW1uUmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsK
ICAgIENvbnN0cmFpbnRQYXJ0IGNvbnN0cmFpbnQ7CiAgICBYbU1hbmFnZXJQYXJ0IG1hbmFnZXI7
CiAgICBYbVJvd0NvbHVtblBhcnQgcm93X2NvbHVtbjsKfSBYbVJvd0NvbHVtblJlYzsKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBYbU1lbnVQcm9jIG1lbnVQcm9jZWR1cmVzOwogICAgWHRBY3Rpb25Q
cm9jIGFybUFuZEFjdGl2YXRlOwogICAgWG1NZW51VHJhdmVyc2FsUHJvYyB0cmF2ZXJzYWxIYW5k
bGVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVJvd0NvbHVtbkNsYXNzUGFydDsKCgp0
eXBlZGVmIHN0cnVjdCBfWG1Sb3dDb2x1bW5DbGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNv
cmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgQ29u
c3RyYWludENsYXNzUGFydCBjb25zdHJhaW50X2NsYXNzOwogICAgWG1NYW5hZ2VyQ2xhc3NQYXJ0
IG1hbmFnZXJfY2xhc3M7CiAgICBYbVJvd0NvbHVtbkNsYXNzUGFydCByb3dfY29sdW1uX2NsYXNz
Owp9IFhtUm93Q29sdW1uQ2xhc3NSZWM7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29sdW1uQ29u
c3RyYWludFBhcnQgewogICAgQm9vbGVhbiB3YXNfbWFuYWdlZDsKICAgIERpbWVuc2lvbiBtYXJn
aW5fdG9wOwogICAgRGltZW5zaW9uIG1hcmdpbl9ib3R0b207CiAgICBEaW1lbnNpb24gYmFzZWxp
bmU7CiAgICBzaG9ydCBwb3NpdGlvbl9pbmRleDsKfSBYbVJvd0NvbHVtbkNvbnN0cmFpbnRQYXJ0
OwoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29sdW1uQ29uc3RyYWludFJlYyB7CiAgICBYbU1hbmFn
ZXJDb25zdHJhaW50UGFydCBtYW5hZ2VyOwogICAgWG1Sb3dDb2x1bW5Db25zdHJhaW50UGFydCBy
b3dfY29sdW1uOwp9IFhtUm93Q29sdW1uQ29uc3RyYWludFJlYywgKlhtUm93Q29sdW1uQ29uc3Ry
YWludHM7CmV4dGVybiBYbVJvd0NvbHVtbkNsYXNzUmVjIHhtUm93Q29sdW1uQ2xhc3NSZWM7CmVu
dW0gewogICAgWG1XRUFLX0NIRUNLID0gMSwKICAgIFhtTUVESVVNX0NIRUNLLAogICAgWG1TVFJP
TkdfQ0hFQ0sKfTsKCmVudW0gewogICAgWG1NRU5VX0JFR0lOLAogICAgWG1NRU5VX01JRERMRSwK
ICAgIFhtTUVOVV9FTkQKfTsKCgoKCmVudW0gewogICAgQU5ZX0NISUxELAogICAgRklSU1RfQlVU
VE9OCn07Cgp2b2lkIF9MdFJDRW50cnlDYWxsYmFjayhXaWRnZXQgdywgWHRDYWxsYmFja0xpc3Qg
Y2JfbGlzdCwgWHRQb2ludGVyIGNicyk7Cgp2b2lkIF9YbVBvc3RQb3B1cE1lbnUoV2lkZ2V0IHdp
ZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htU2V0UG9wdXBNZW51Q2xpY2soV2lkZ2V0IHdpZCwg
Qm9vbGVhbiBwb3B1cE1lbnVDbGljayk7CkJvb2xlYW4gX1htR2V0UG9wdXBNZW51Q2xpY2soV2lk
Z2V0IHdpZCk7CnZvaWQgX1htQWxsb3dBY2NlbGVyYXRlZEluc2Vuc2l0aXZlVW5tYW5hZ2VkTWVu
dUl0ZW1zKFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJvb2xlYW4gYWxsb3dlZCk7CnZvaWQgX1htU2V0U3dhbGxvd0V2ZW50
SGFuZGxlcihXaWRnZXQgd2lkZ2V0LCBCb29sZWFuIGFkZF9oYW5kbGVyKTsKdm9pZCBfWG1NZW51
Rm9jdXMoV2lkZ2V0IHcsIGludCBvcGVyYXRpb24sIFRpbWUgX3RpbWUpOwp2b2lkIF9YbUdldEFj
dGl2ZVRvcExldmVsTWVudShXaWRnZXQgd2lkLCBXaWRnZXQgKnJ3aWQpOwpCb29sZWFuIF9YbU1h
dGNoQlNlbGVjdEV2ZW50KFdpZGdldCB3aWQsIFhFdmVudCAqZXZlbnQpOwpCb29sZWFuIF9YbU1h
dGNoQkRyYWdFdmVudChXaWRnZXQgd2lkLCBYRXZlbnQgKmV2ZW50KTsKdm9pZCBfWG1IYW5kbGVN
ZW51QnV0dG9uUHJlc3MoV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htTWVudUJ0
bkRvd24oV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1NZW51QnRu
VXAoV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgU3RyaW5nICpw
YXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1DYWxsUm93Q29sdW1uTWFwQ2Fs
bGJhY2soV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htQ2FsbFJvd0NvbHVtblVu
bWFwQ2FsbGJhY2soV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htTWVudVBvcERv
d24oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKnBvcHBlZF91cCk7CkJvb2xlYW4g
X1htSXNBY3RpdmVUZWFyT2ZmKFdpZGdldCB3KTsKdm9pZCBfWG1NZW51SGVscChXaWRnZXQgd2lk
LCBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7CldpZGdldCBfWG1NZW51TmV4dEl0ZW0oV2lkZ2V0IG1lbnUsIFdpZGdl
dCBjdXJyZW50X2l0ZW0pOwpleHRlcm4gV2lkZ2V0Q2xhc3MgeG1TZWxlY3Rpb25Cb3hXaWRnZXRD
bGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbVNlbGVjdGlvbkJveFJlYyAqWG1TZWxlY3Rpb25Cb3hX
aWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YbVNlbGVjdGlvbkJveENsYXNzUmVjICpYbVNlbGVjdGlv
bkJveFdpZGdldENsYXNzOwoKCgoKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTZWxlY3Rpb25Cb3go
V2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdMaXN0LCBDYXJkaW5hbCBhcmdjb3Vu
dCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTZWxlY3Rpb25EaWFsb2coV2lkZ2V0IHBhcmVudCwg
Y2hhciAqbmFtZSwgQXJnICphcmdMaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRn
ZXQgWG1DcmVhdGVQcm9tcHREaWFsb2coV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICph
cmdMaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1TZWxlY3Rpb25Cb3hH
ZXRDaGlsZChXaWRnZXQgcGFyZW50LCB1bnNpZ25lZCBjaGFyIGNoaWxkKTsKZXh0ZXJuIFdpZGdl
dENsYXNzIHhtVGV4dFdpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htVGV4dFJlYyAqWG1U
ZXh0V2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1UZXh0Q2xhc3NSZWMgKlhtVGV4dFdpZGdldENs
YXNzOwoKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVRleHQoV2lkZ2V0IHBhcmVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcgKmFyZ2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdD
b3VudCk7CgpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2Nyb2xsZWRUZXh0KFdpZGdldCBwYXJlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcgKmFyZ2xpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnY291bnQpOwoKCgoKCnR5cGVkZWYgc3RydWN0
IF9YbVRleHRTb3VyY2VSZWMgKlhtVGV4dFNvdXJjZTsKCnZvaWQgWG1UZXh0Q2xlYXJTZWxlY3Rp
b24oV2lkZ2V0IHdpZGdldCwgVGltZSB0aW1lKTsKQm9vbGVhbiBYbVRleHRDb3B5KFdpZGdldCB3
aWRnZXQsIFRpbWUgdGltZSk7CkJvb2xlYW4gWG1UZXh0Q3V0KFdpZGdldCB3aWRnZXQsIFRpbWUg
dGltZSk7CnZvaWQgWG1UZXh0RGlzYWJsZVJlZGlzcGxheShXaWRnZXQgd2lkZ2V0KTsKdm9pZCBY
bVRleHRFbmFibGVSZWRpc3BsYXkoV2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0RmluZFN0
cmluZyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgY2hhciAqc3RyaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgWG1UZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgWG1UZXh0
UG9zaXRpb24gKnBvc2l0aW9uKTsKQm9vbGVhbiBYbVRleHRGaW5kU3RyaW5nV2NzKFdpZGdldCB3
aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCB3Y2hhcl90ICp3Y3N0cmluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhtVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFhtVGV4dFBvc2l0
aW9uICpwb3NpdGlvbik7CmludCBYbVRleHRHZXRCYXNlbGluZShXaWRnZXQgd2lkZ2V0KTsKWG1U
ZXh0UG9zaXRpb24gWG1UZXh0R2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CkJvb2xl
YW4gWG1UZXh0R2V0RWRpdGFibGUoV2lkZ2V0IHdpZGdldCk7ClhtVGV4dFBvc2l0aW9uIFhtVGV4
dEdldEluc2VydGlvblBvc2l0aW9uKFdpZGdldCB3aWRnZXQpOwpYbVRleHRQb3NpdGlvbiBYbVRl
eHRHZXRMYXN0UG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CmludCBYbVRleHRHZXRNYXhMZW5ndGgo
V2lkZ2V0IHdpZGdldCk7CmNoYXIgKlhtVGV4dEdldFNlbGVjdGlvbihXaWRnZXQgd2lkZ2V0KTsK
Qm9vbGVhbiBYbVRleHRHZXRTZWxlY3Rpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQ
b3NpdGlvbiAqbGVmdCwgWG1UZXh0UG9zaXRpb24gKnJpZ2h0KTsKd2NoYXJfdCAqWG1UZXh0R2V0
U2VsZWN0aW9uV2NzKFdpZGdldCB3aWRnZXQpOwpYbVRleHRTb3VyY2UgWG1UZXh0R2V0U291cmNl
KFdpZGdldCB3aWRnZXQpOwpjaGFyICpYbVRleHRHZXRTdHJpbmcoV2lkZ2V0IHdpZGdldCk7Cndj
aGFyX3QgKlhtVGV4dEdldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0KTsKaW50IFhtVGV4dEdldFN1
YnN0cmluZyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgaW50IG51bV9jaGFy
cywgaW50IGJ1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlcik7
CmludCBYbVRleHRHZXRTdWJzdHJpbmdXY3MoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24g
c3RhcnQsIGludCBudW1fY2hhcnMsIGludCBidWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICpidWZmZXIpOwpYbVRleHRQb3NpdGlvbiBYbVRleHRHZXRUb3BDaGFy
YWN0ZXIoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1UZXh0SW5zZXJ0KFdpZGdldCB3aWRnZXQsIFht
VGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjaGFyICpzdHJpbmcpOwp2b2lkIFhtVGV4dEluc2VydFdj
cyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3NpdGlvbiwgd2NoYXJfdCAqd2NzdHJp
bmcpOwpCb29sZWFuIFhtVGV4dFBhc3RlKFdpZGdldCB3aWRnZXQpOwpCb29sZWFuIFhtVGV4dFBv
c1RvWFkoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gcG9zaXRpb24sIFBvc2l0aW9uICp4
LCBQb3NpdGlvbiAqeSk7CkJvb2xlYW4gWG1UZXh0UmVtb3ZlKFdpZGdldCB3aWRnZXQpOwp2b2lk
IFhtVGV4dFJlcGxhY2UoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gZnJvbV9wb3MsIFht
VGV4dFBvc2l0aW9uIHRvX3BvcywKICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlKTsKdm9p
ZCBYbVRleHRSZXBsYWNlV2NzKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9z
LCBYbVRleHRQb3NpdGlvbiB0b19wb3MsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICp3
Y3N0cmluZyk7CnZvaWQgWG1UZXh0U2Nyb2xsKFdpZGdldCB3aWRnZXQsIGludCBsaW5lcyk7CnZv
aWQgWG1UZXh0U2V0QWRkTW9kZShXaWRnZXQgd2lkZ2V0LCBCb29sZWFuIHN0YXRlKTsKdm9pZCBY
bVRleHRTZXRDdXJzb3JQb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3Np
dGlvbik7CnZvaWQgWG1UZXh0U2V0RWRpdGFibGUoV2lkZ2V0IHdpZGdldCwgQm9vbGVhbiBlZGl0
YWJsZSk7CnZvaWQgWG1UZXh0U2V0SGlnaGxpZ2h0KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0
aW9uIGxlZnQsIFhtVGV4dFBvc2l0aW9uIHJpZ2h0LCBYbUhpZ2hsaWdodE1vZGUgbW9kZSk7CnZv
aWQgWG1UZXh0U2V0SW5zZXJ0aW9uUG9zaXRpb24oV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRp
b24gcG9zaXRpb24pOwp2b2lkIFhtVGV4dFNldE1heExlbmd0aChXaWRnZXQgd2lkZ2V0LCBpbnQg
bWF4X2xlbmd0aCk7CnZvaWQgWG1UZXh0U2V0U2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4
dFBvc2l0aW9uIGZpcnN0LCBYbVRleHRQb3NpdGlvbiBsYXN0LCBUaW1lIHRpbWUpOwp2b2lkIFht
VGV4dFNldFNvdXJjZShXaWRnZXQgd2lkZ2V0LCBYbVRleHRTb3VyY2Ugc291cmNlLCBYbVRleHRQ
b3NpdGlvbiB0b3BfY2hhcmFjdGVyLCBYbVRleHRQb3NpdGlvbiBjdXJzb3JfcG9zaXRpb24pOwp2
b2lkIFhtVGV4dFNldFN0cmluZyhXaWRnZXQgd2lkZ2V0LCBjaGFyICp2YWx1ZSk7CnZvaWQgWG1U
ZXh0U2V0U3RyaW5nV2NzKFdpZGdldCB3aWRnZXQsIHdjaGFyX3QgKndjc3RyaW5nKTsKdm9pZCBY
bVRleHRTZXRUb3BDaGFyYWN0ZXIoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gdG9wX2No
YXJhY3Rlcik7CnZvaWQgWG1UZXh0U2hvd1Bvc2l0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBv
c2l0aW9uIHBvc2l0aW9uKTsKWG1UZXh0UG9zaXRpb24gWG1UZXh0WFlUb1BvcyhXaWRnZXQgd2lk
Z2V0LCBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5KTsKZXh0ZXJuIFdpZGdldENsYXNzIHhtTGFiZWxH
YWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsR2FkZ2V0UmVjICpYbUxhYmVsR2Fk
Z2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldENsYXNzUmVjICpYbUxhYmVsR2FkZ2V0
Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsR0NhY2hlT2JqUmVjICpYbUxhYmVsR0NhY2hl
T2JqZWN0OwoKCgoKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVMYWJlbEdhZGdldChXaWRnZXQgcGFy
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KTsKCmV4dGVybiBXaWRnZXQgWG1D
cmVhdGVMYWJlbEdhZGdldChXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3Qs
IENhcmRpbmFsIGFyZ2NvdW50KTsKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxHQ2FjaGVPYmpDbGFz
c1BhcnQgewogICAgICAgIGludCBmb287Cn0gWG1MYWJlbEdDYWNoZU9iakNsYXNzUGFydDsKCnR5
cGVkZWYgc3RydWN0IF9YbUxhYmVsR0NhY2hlT2JqQ2xhc3NSZWMgewogICAgICAgIE9iamVjdENs
YXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICAgICAgWG1FeHRDbGFzc1BhcnQgZXh0X2NsYXNzOwog
ICAgICAgIFhtTGFiZWxHQ2FjaGVPYmpDbGFzc1BhcnQgbGFiZWxfY2xhc3NfY2FjaGU7Cn0gWG1M
YWJlbEdDYWNoZU9iakNsYXNzUmVjOwoKZXh0ZXJuIFhtTGFiZWxHQ2FjaGVPYmpDbGFzc1JlYyB4
bUxhYmVsR0NhY2hlT2JqQ2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdDYWNoZU9i
alBhcnQgewogICAgICAgIHVuc2lnbmVkIGNoYXIgbGFiZWxfdHlwZTsKICAgICAgICB1bnNpZ25l
ZCBjaGFyIGFsaWdubWVudDsKICAgICAgICBYbVN0cmluZ0RpcmVjdGlvbiBzdHJpbmdfZGlyZWN0
aW9uOwoKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2hlaWdodDsKICAgICAgICBEaW1lbnNpb24g
bWFyZ2luX3dpZHRoOwogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fbGVmdDsKICAgICAgICBEaW1l
bnNpb24gbWFyZ2luX3JpZ2h0OwogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fdG9wOwogICAgICAg
IERpbWVuc2lvbiBtYXJnaW5fYm90dG9tOwoKICAgICAgICBCb29sZWFuIHJlY29tcHV0ZV9zaXpl
OwoKICAgICAgICBCb29sZWFuIHNraXBDYWxsYmFjazsKCiAgICAgICAgdW5zaWduZWQgY2hhciBt
ZW51X3R5cGU7Cn0gWG1MYWJlbEdDYWNoZU9ialBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJl
bEdDYWNoZU9ialJlYyB7CiAgICAgICAgT2JqZWN0UGFydCBvYmplY3Q7CiAgICAgICAgWG1FeHRQ
YXJ0IGV4dDsKICAgICAgICBYbUxhYmVsR0NhY2hlT2JqUGFydCBsYWJlbF9jYWNoZTsKfSBYbUxh
YmVsR0NhY2hlT2JqUmVjOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxHYWRnZXRDbGFzc1Bh
cnQgewogICAgICAgIFh0V2lkZ2V0UHJvYyBzZXRPdmVycmlkZUNhbGxiYWNrOwogICAgICAgIFht
TWVudVByb2MgbWVudVByb2NzOwogICAgICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1MYWJl
bEdhZGdldENsYXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldENsYXNzUmVj
IHsKICAgIFJlY3RPYmpDbGFzc1BhcnQgcmVjdF9jbGFzczsKICAgIFhtR2FkZ2V0Q2xhc3NQYXJ0
IGdhZGdldF9jbGFzczsKICAgIFhtTGFiZWxHYWRnZXRDbGFzc1BhcnQgbGFiZWxfY2xhc3M7Cn0g
WG1MYWJlbEdhZGdldENsYXNzUmVjOwoKZXh0ZXJuIFhtTGFiZWxHYWRnZXRDbGFzc1JlYyB4bUxh
YmVsR2FkZ2V0Q2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldFBhcnQgewog
ICAgICAgIF9YbVN0cmluZyBfbGFiZWw7CiAgICAgICAgX1htU3RyaW5nIF9hY2NfdGV4dDsKICAg
ICAgICBLZXlTeW0gbW5lbW9uaWM7CiAgICAgICAgU3RyaW5nIG1uZW1vbmljQ2hhcnNldDsKICAg
ICAgICBTdHJpbmcgYWNjZWxlcmF0b3I7CiAgICAgICAgWG1Gb250TGlzdCBmb250OwoKICAgICAg
ICBQaXhtYXAgcGl4bWFwOwogICAgICAgIFBpeG1hcCBwaXhtYXBfaW5zZW47CgoKICAgICAgICBH
QyBub3JtYWxfR0M7CiAgICAgICAgR0MgaW5zZW5zaXRpdmVfR0M7CgogICAgICAgIFhSZWN0YW5n
bGUgVGV4dFJlY3Q7CiAgICAgICAgWFJlY3RhbmdsZSBhY2NfVGV4dFJlY3Q7CgogICAgICAgIFht
TGFiZWxHQ2FjaGVPYmpQYXJ0ICpjYWNoZTsKfSBYbUxhYmVsR2FkZ2V0UGFydDsKCnR5cGVkZWYg
c3RydWN0IF9YbUxhYmVsR2FkZ2V0UmVjIHsKICAgICAgICBPYmplY3RQYXJ0IG9iamVjdDsKICAg
ICAgICBSZWN0T2JqUGFydCByZWN0YW5nbGU7CiAgICAgICAgWG1HYWRnZXRQYXJ0IGdhZGdldDsK
ICAgICAgICBYbUxhYmVsR2FkZ2V0UGFydCBsYWJlbDsKfSBYbUxhYmVsR2FkZ2V0UmVjOwpleHRl
cm4gaW50IF9YbUxhYmVsQ2FjaGVDb21wYXJlKFh0UG9pbnRlciBBLCBYdFBvaW50ZXIgQik7CmV4
dGVybiB2b2lkIF9YbUNhbGNMYWJlbEdEaW1lbnNpb25zKFdpZGdldCB3aWQpOwpleHRlcm4gdm9p
ZCBfWG1SZUNhY2hlTGFiRyhXaWRnZXQgdyk7CmV4dGVybiB2b2lkIF9YbUFzc2lnbkxhYkdfTWFy
Z2luSGVpZ2h0KFhtTGFiZWxHYWRnZXQgbHcsIERpbWVuc2lvbiB2YWx1ZSk7CmV4dGVybiB2b2lk
IF9YbUFzc2lnbkxhYkdfTWFyZ2luV2lkdGgoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZh
bHVlKTsKZXh0ZXJuIHZvaWQgX1htQXNzaWduTGFiR19NYXJnaW5MZWZ0KFhtTGFiZWxHYWRnZXQg
bHcsIERpbWVuc2lvbiB2YWx1ZSk7CmV4dGVybiB2b2lkIF9YbUFzc2lnbkxhYkdfTWFyZ2luUmln
aHQoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZhbHVlKTsKZXh0ZXJuIHZvaWQgX1htQXNz
aWduTGFiR19NYXJnaW5Ub3AoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZhbHVlKTsKZXh0
ZXJuIHZvaWQgX1htQXNzaWduTGFiR19NYXJnaW5Cb3R0b20oWG1MYWJlbEdhZGdldCBsdywgRGlt
ZW5zaW9uIHZhbHVlKTsKCmV4dGVybiB2b2lkIF9YbVByb2Nlc3NEcmFnKFdpZGdldCB3LCBYRXZl
bnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4g
V2lkZ2V0Q2xhc3MgeG1MYWJlbFdpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxS
ZWMgKlhtTGFiZWxXaWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsQ2xhc3NSZWMgKlhtTGFi
ZWxXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVMYWJlbChXaWRnZXQgcGFyZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh
cmRpbmFsIGFyZ0NvdW50KTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9YbVN0cmluZyBfbGFi
ZWw7CiAgICAgICAgX1htU3RyaW5nIF9hY2NfdGV4dDsKICAgICAgICBLZXlTeW0gbW5lbW9uaWM7
CiAgICAgICAgWG1TdHJpbmdDaGFyU2V0IG1uZW1vbmljQ2hhcnNldDsKICAgICAgICBTdHJpbmcg
YWNjZWxlcmF0b3I7CiAgICAgICAgdW5zaWduZWQgY2hhciBsYWJlbF90eXBlOwogICAgICAgIHVu
c2lnbmVkIGNoYXIgYWxpZ25tZW50OwogICAgICAgIFhtU3RyaW5nRGlyZWN0aW9uIHN0cmluZ19k
aXJlY3Rpb247CiAgICAgICAgWG1Gb250TGlzdCBmb250OwoKICAgICAgICBEaW1lbnNpb24gbWFy
Z2luX2hlaWdodDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3dpZHRoOwoKICAgICAgICBEaW1l
bnNpb24gbWFyZ2luX2xlZnQ7CiAgICAgICAgRGltZW5zaW9uIG1hcmdpbl9yaWdodDsKICAgICAg
ICBEaW1lbnNpb24gbWFyZ2luX3RvcDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsK
CiAgICAgICAgQm9vbGVhbiByZWNvbXB1dGVfc2l6ZTsKCiAgICAgICAgUGl4bWFwIHBpeG1hcDsK
ICAgICAgICBQaXhtYXAgcGl4bWFwX2luc2VuOwoKCiAgICAgICAgR0Mgbm9ybWFsX0dDOwogICAg
ICAgIEdDIGluc2Vuc2l0aXZlX0dDOwoKICAgICAgICBYUmVjdGFuZ2xlIFRleHRSZWN0OwogICAg
ICAgIFhSZWN0YW5nbGUgYWNjX1RleHRSZWN0OwoKICAgICAgICBCb29sZWFuIHNraXBDYWxsYmFj
azsKCiAgICAgICAgdW5zaWduZWQgY2hhciBtZW51X3R5cGU7Cn0gWG1MYWJlbFBhcnQ7CgoKdHlw
ZWRlZiBzdHJ1Y3QgX1htTGFiZWxSZWMgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAg
WG1QcmltaXRpdmVQYXJ0IHByaW1pdGl2ZTsKICAgICAgICBYbUxhYmVsUGFydCBsYWJlbDsKfSBY
bUxhYmVsUmVjOwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYdFdpZGdldFByb2Mgc2V0T3Zl
cnJpZGVDYWxsYmFjazsKICAgICAgICBYbU1lbnVQcm9jIG1lbnVQcm9jczsKICAgICAgICBTdHJp
bmcgdHJhbnNsYXRpb25zOwogICAgICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1MYWJlbENs
YXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbENsYXNzUmVjIHsKICAgICAgICBDb3Jl
Q2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgWG1QcmltaXRpdmVDbGFzc1BhcnQgcHJpbWl0
aXZlX2NsYXNzOwogICAgICAgIFhtTGFiZWxDbGFzc1BhcnQgbGFiZWxfY2xhc3M7Cn0gWG1MYWJl
bENsYXNzUmVjOwoKCgpleHRlcm4gWG1MYWJlbENsYXNzUmVjIHhtTGFiZWxDbGFzc1JlYzsKCgoK
dm9pZCBfWG1DYWxjTGFiZWxEaW1lbnNpb25zKFdpZGdldCB3KTsKZXh0ZXJuIFhtRm9udExpc3Qg
X19YbUZvbnRMaXN0QWxsb2MoaW50IG51bWJlck9mRW50cmllcyk7CmV4dGVybiB2b2lkIF9YbUZv
bnRMaXN0RW50cnlGcmVlKFhtRm9udExpc3RFbnRyeSBlbnRyeSk7ClhtRm9udExpc3RFbnRyeSBf
WG1Gb250TGlzdEVudHJ5Q3JlYXRlKHZvaWQpOwoKCnZvaWQgX19YbVJlbmRlclRhYmxlRmluYWxp
c2UoV2lkZ2V0LCBYbUZvbnRMaXN0LCBfWG1TdHJpbmcpOwp2b2lkIF9YbVJlbmRlclRhYmxlRmlu
YWxpc2UoV2lkZ2V0LCBYbUZvbnRMaXN0LCBYbVN0cmluZyk7CnZvaWQgX1htUmVuZGVyVGFibGVG
aW5hbGlzZVRhZyhXaWRnZXQsIFhtRm9udExpc3QsIGNoYXIgKik7CgoKCgoKCnR5cGVkZWYgc3Ry
dWN0IF9fWG1SZW5kaXRpb25SZWMgewogICAgICAgIGNoYXIgKnRhZzsKICAgICAgICBYbUZvbnRU
eXBlIHR5cGU7CiAgICAgICAgWEZvbnRTZXQgZm9udDsKICAgICAgICBpbnQgY291bnQ7Cn0gKl9Y
bVJlbmRpdGlvbjsKCnN0cnVjdCBfX1htUmVuZGVyVGFibGVSZWMgewogICAgICAgIHVuc2lnbmVk
IGludCBjb3VudDsKICAgICAgICBEaXNwbGF5ICpkcHk7CiAgICAgICAgX1htUmVuZGl0aW9uICpy
ZW5kaXRpb25zOwp9OwoKc3RydWN0IF9YbUZvbnRMaXN0Q29udGV4dFJlYyB7CiAgICBYbUZvbnRM
aXN0IGZvbnRsaXN0OwogICAgaW50IGN1cnJlbnRfZW50cnk7Cn07CgpzdHJ1Y3QgX19YbVN0cmlu
Z0V4dFJlYyB7CiAgICB1bnNpZ25lZCBjaGFyIHRhZzsKICAgIHVuc2lnbmVkIGNoYXIgbGVuOwog
ICAgdW5zaWduZWQgY2hhciBkYXRhWzFdOwp9OwoKc3RydWN0IF9fWG1TdHJpbmdDb21wb25lbnRS
ZWMgewogICAgWG1TdHJpbmdDb21wb25lbnRUeXBlIHR5cGU7CiAgICBpbnQgbGVuZ3RoOwogICAg
Y2hhciAqZGF0YTsKICAgIHNob3J0IGZvbnQ7Cn07CnR5cGVkZWYgc3RydWN0IF9fWG1TdHJpbmdD
b21wb25lbnRSZWMgX1htU3RyaW5nQ29tcG9uZW50UmVjLCAqX1htU3RyaW5nQ29tcG9uZW50OwoK
c3RydWN0IF9fWG1TdHJpbmdSZWMgewogICAgc3RydWN0IF9fWG1TdHJpbmdDb21wb25lbnRSZWMg
Kipjb21wb25lbnRzOwogICAgaW50IG51bWJlcl9vZl9jb21wb25lbnRzOwp9OwoKc3RydWN0IF9f
WG1TdHJpbmdDb250ZXh0UmVjIHsKICAgIHN0cnVjdCBfX1htU3RyaW5nUmVjICpzdHJpbmc7CiAg
ICBpbnQgY3VycmVudF9jb21wb25lbnQ7Cn07CgoKCgoKc3RydWN0IF9YbXRTdHJpbmdDb250ZXh0
UmVjIHsKICAgIHN0cnVjdCBfX1htU3RyaW5nUmVjICpzdHJpbmc7CiAgICBpbnQgY3VycmVudF9j
b21wb25lbnQ7CiAgICBjaGFyICp0ZXh0OwogICAgc2hvcnQgdGV4dGxlbjsKICAgIGNoYXIgKmNo
YXJzZXQ7CiAgICBYbVN0cmluZ0RpcmVjdGlvbiBkaXJlY3Rpb247CiAgICBCb29sZWFuIHNlcGFy
YXRvcjsKfTsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFhtSU1JbnB1dFBvbGljeTsKCgoKCgp2b2lk
IF9YbUltU2VuZFNwb3QoV2lkZ2V0IHcpOwoKWElDIFhtSW1HZXRYSUMoV2lkZ2V0IHcsIFhtSU1J
bnB1dFBvbGljeSBpbnB1dF9wb2xpY3ksCiAgICAgICAgICAgQXJnTGlzdCBhcmdzLCBDYXJkaW5h
bCBudW1fYXJncyk7ClhJQyBYbUltU2V0WElDKFdpZGdldCB3LCBYSUMgeGljKTsKCgoKCgpYbVNj
cmVlbkluZm8gKl9YbUdldFNjcmVlbkluZm8oV2lkZ2V0IHcpOwoKU3RyaW5nIF9YbU1ha2VEaWFs
b2dOYW1lKFN0cmluZyBuYW1lKTsKdm9pZCBfWG1FcnJvcihXaWRnZXQgdywgY29uc3QgY2hhciAq
bWVzc2FnZSwgLi4uKTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgQm9vbGVhbiBTaG93
VlNCLCBTaG93SFNCLCBIYXNIU0IsIEhhc1ZTQjsKICAgIFBvc2l0aW9uIEhzYlgsIEhzYlksIFZz
YlgsIFZzYlksIENsaXBYLCBDbGlwWSwgV29ya1gsIFdvcmtZOwogICAgaW50IEhzYlcsIEhzYkgs
IFZzYlcsIFZzYkgsIENsaXBXLCBDbGlwSCwgV29ya1csIFdvcmtIOwogICAgaW50IFN3WSwgU3dX
LCBTd0g7Cn0KWG1TV1ZhbHVlczsKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgQm9vbGVhbiBTaG93
VlNCLCBTaG93SFNCLCBIYXNIU0IsIEhhc1ZTQjsKICAgIFBvc2l0aW9uIEhzYlgsIEhzYlksIFZz
YlgsIFZzYlksIENsaXBYLCBDbGlwWSwgV29ya1gsIFdvcmtZOwogICAgaW50IEhzYlcsIEhzYkgs
IFZzYlcsIFZzYkgsIENsaXBXLCBDbGlwSCwgV29ya1csIFdvcmtIOwogICAgaW50IFN3WSwgTXdX
LCBNd0g7CiAgICBpbnQgbWJ3LCBtYmgsIGN3dywgY3doLCBtd3csIG13aCwgd3d3LCB3d2g7CiAg
ICBpbnQgczF3LCBzMWgsIHMydywgczJoLCBzM3csIHMzaDsKICAgIFBvc2l0aW9uIG1ieCwgbWJ5
LCBjd3gsIGN3eSwgbXd4LCBtd3ksIHd3eCwgd3d5OwogICAgUG9zaXRpb24gczF4LCBzMXksIHMy
eCwgczJ5LCBzM3gsIHMzeTsKfQpYbU1XVmFsdWVzOwoKCnZvaWQgX1htQ2FzY2FkZVBpeG1hcERl
ZmF1bHQoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWwpOwoKCldpZGdldCBfTHRG
aW5kVmVuZG9yRXh0KFdpZGdldCk7CgoKCgpYbUZvbnRMaXN0IF9YbUZvbnRMaXN0Q3JlYXRlRGVm
YXVsdChEaXNwbGF5ICpkaXNwKTsKWG1Gb250TGlzdEVudHJ5IF9YbUZvbnRMaXN0RW50cnlGcm9t
VGFnKFhtRm9udExpc3QgZm9udGxpc3QsIGNoYXIgKnRhZyk7CgoKdm9pZCBfWG1Jbml0UHJvdG9j
b2xzKFdpZGdldCB3KTsKdm9pZCBfWG1EZXN0cm95UHJvdG9jb2xzKFdpZGdldCB3KTsKCnZvaWQg
X1htTlNFRWRpdFJlc0NoZWNrTWVzc2FnZXMoV2lkZ2V0IHcsIFh0UG9pbnRlciBkYXRhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmNvbnQp
OwoKdm9pZCBfTHRWZW5kb3JVbm1hcChXaWRnZXQgY2hpbGQpOwoKCgp2b2lkIF9YbUxhYmVsR2V0
UGl4bWFwU2l6ZShXaWRnZXQgdywgUGl4bWFwIFBpeCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRGltZW5zaW9uICp3aWR0aCwgRGltZW5zaW9uICpoZWlnaHQpOwoKCgoKClh0R2VvbWV0cnlS
ZXN1bHQgX1htR01SZXBseVRvUXVlcnlHZW9tZXRyeShXaWRnZXQgdywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKnJlcXVlc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5
ICpyZXBseSk7Clh0R2VvbWV0cnlSZXN1bHQgX1htR01IYW5kbGVRdWVyeUdlb21ldHJ5KFdpZGdl
dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdl
b21ldHJ5ICpwcm9wb3NlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRXaWRnZXRHZW9tZXRyeSAqYW5zd2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3dpZHRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2hlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZXNpemVfcG9s
aWN5KTsKdm9pZCBfWG1HTUVuZm9yY2VNYXJnaW4oV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAg
ICAgICAgIERpbWVuc2lvbiBtYXJnaW5fd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIERp
bWVuc2lvbiBtYXJnaW5faGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHVz
ZVNldFZhbHVlcyk7CnZvaWQgX1htR01DYWxjU2l6ZShXaWRnZXQgdywKICAgICAgICAgICAgICAg
ICAgIERpbWVuc2lvbiBtYXJnaW5fdywgRGltZW5zaW9uIG1hcmdpbl9oLAogICAgICAgICAgICAg
ICAgICAgRGltZW5zaW9uICpyZXR3LCBEaW1lbnNpb24gKnJldGgpOwp2b2lkIF9YbUdNRG9MYXlv
dXQoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3csIERpbWVu
c2lvbiBtYXJnaW5faCwKICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzaXplX3Bv
bGljeSwgc2hvcnQgYWRqdXN0KTsKWHRHZW9tZXRyeVJlc3VsdCBfWG1HTUhhbmRsZUdlb21ldHJ5
TWFuYWdlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpkZXNpcmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFsbG93ZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG1hcmdpbl93
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNp
b24gbWFyZ2luX2hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIHJlc2l6ZV9wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiBhbGxvd19vdmVybGFwKTsKQm9vbGVhbiBfWG1H
TU92ZXJsYXAoV2lkZ2V0IHcsIFdpZGdldCBpbnN0aWdhdG9yLAogICAgICAgICAgICAgICAgICAg
ICBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
d2lkdGgsIERpbWVuc2lvbiBoZWlnaHQpOwoKCnZvaWQgX1htQmJNYXAoV2lkZ2V0IHcpOwp2b2lk
IF9YbUJiVW5tYXAoV2lkZ2V0IHcpOwoKCnZvaWQgX1htU2V0dXBJbWFnZUNhY2hlKHZvaWQpOwoK
CnZvaWQgX1htRmFrZUV4cG9zZShXaWRnZXQgbWVudV9zaGVsbCk7CkJvb2xlYW4gX1htTWVudUdl
dEluUE1Nb2RlKFdpZGdldCB3KTsKCgplbnVtIHsKICBYbU1FTlVfRk9DVVNfU0FWRT0wLAogIFht
TUVOVV9GT0NVU19SRVNUT1JFLAogIFhtTUVOVV9GT0NVU19TRVQKfTsKCgp2b2lkIF9YbU1lc3Nh
Z2VCb3hJbnN0YWxsSW1hZ2VzKFdpZGdldCB3KTsKCgp2b2lkIF9YbUluc3RhbGxTdGlwcGxlSW1h
Z2VzKFdpZGdldCB3KTsKCgoKCgp2b2lkIF9YbVJDU2V0TWFyZ2lucyhXaWRnZXQgcmMpOwpYdEdl
b21ldHJ5UmVzdWx0IF9YbVJDQWRqdXN0U2l6ZShXaWRnZXQgcmMsIFdpZGdldCBpbnN0aWcsIFh0
V2lkZ2V0R2VvbWV0cnkgKmluc3RpZ19yZXF1ZXN0KTsKdm9pZCBfWG1SQ1ByZWZlcnJlZFNpemUo
V2lkZ2V0IHJjLCBYdFdpZGdldEdlb21ldHJ5ICpyY2cpOwoKCnZvaWQgX1htRXhwb3J0WG1TdHJp
bmcoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFh0QXJnVmFsICp2YWx1ZSk7CnZvaWQgX1htRXhwb3J0
U3RyaW5nKFdpZGdldCB3LCBpbnQgb2Zmc2V0LCBYdEFyZ1ZhbCAqdmFsdWUpOwp2b2lkIF9YbU1h
bmFnZXJJbnN0YWxsQWNjZWxlcmF0b3IoV2lkZ2V0IG0sIFdpZGdldCB3LCBTdHJpbmcgcyk7CnZv
aWQgX1htTWFuYWdlckluc3RhbGxNbmVtb25pYyhXaWRnZXQgbSwgV2lkZ2V0IHcsIEtleVN5bSBt
bik7CnZvaWQgX1htTWFuYWdlclVuaW5zdGFsbEFjY2VsZXJhdG9yKFdpZGdldCBtLCBXaWRnZXQg
dyk7CnZvaWQgX1htTWFuYWdlclVuaW5zdGFsbE1uZW1vbmljKFdpZGdldCBtLCBXaWRnZXQgdyk7
CnZvaWQgX1htU2Nyb2xsZWRXUHJlZmVycmVkU2l6ZShXaWRnZXQgdywgV2lkZ2V0IGluc3RpZ2F0
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRy
eSAqaW5zdGlnYXRvcl9nZW9tLCBYbVNXVmFsdWVzICogdmFscyk7CnZvaWQgX1htU2Nyb2xsZWRX
TGF5b3V0KFdpZGdldCB3LCBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICppbnN0aWdhdG9yX2dlb20sIFhtU1dW
YWx1ZXMgKiB2YWxzKTsKdm9pZCBfWG1TY3JvbGxlZFdDb25maWd1cmVDaGlsZHJlbihXaWRnZXQg
dywgV2lkZ2V0IGluc3RpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRXaWRnZXRHZW9tZXRyeSAqaW5zdGlnYXRvcl9nZW9tLCBYbVNXVmFsdWVzICogdmFscyk7
CgoKQm9vbGVhbiBfWG1TZWxlY3Rpb25Cb3hNYXRjaChYbVNlbGVjdGlvbkJveFdpZGdldCB3KTsK
CgoKdm9pZCBfWG1QdXNoQnV0dG9uU2V0VHJhbnNsYXRpb24oV2lkZ2V0LCBpbnQpOwoKCnZvaWQg
X1htQ2hhbmdlVlNCKFhtVGV4dFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpOwp2b2lkIF9Y
bVJlZGlzcGxheUhCYXIoWG1UZXh0V2lkZ2V0IHcsIGludCBvZmZzZXQpOwppbnQgX1htRm9udENh
bGN1bGF0ZUF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aChXaWRnZXQgdywgWEZvbnRTdHJ1Y3QgKmZzKTsK
CnZvaWQgX1htU2V0Rm9jdXNSZXNldEZsYWcoV2lkZ2V0IHcsIEJvb2xlYW4gdmFsdWUpOwpCb29s
ZWFuIF9YbUdldEZvY3VzUmVzZXRGbGFnKFdpZGdldCB3KTsKV2lkZ2V0IF9YbUdldEFjdGl2ZVRh
Ykdyb3VwKFdpZGdldCB3aWRnZXQpOwpXaWRnZXQgX1htRmluZFRvcE1vc3RTaGVsbChXaWRnZXQg
d2lkZ2V0KTsKdHlwZWRlZiBlbnVtIF9YbU1vZGlmaWVyTGV2ZWxzIHsKICAgIEFMVE1vZGlmaWVy
ID0gMCwKICAgIE1FVEFNb2RpZmllciwKICAgIFNVUEVSTW9kaWZpZXIsCiAgICBIWVBFUk1vZGlm
aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX01PRElGSUVSUwp9
IFhtTW9kaWZpZXJMZXZlbHM7Cgp0eXBlZGVmIE1vZGlmaWVycyBYbU1vZGlmaWVyTWFza1NldFtN
QVhfTU9ESUZJRVJTXTsKdHlwZWRlZiBNb2RpZmllcnMgKlhtTW9kaWZpZXJNYXNrU2V0UmVmZXJl
bmNlOwoKWG1Nb2RpZmllck1hc2tTZXRSZWZlcmVuY2UgX1htR2V0TW9kaWZpZXJNYXBwaW5nc0Zv
ckRpc3BsYXkoRGlzcGxheSAqRHNwKTsKdm9pZCBfWG1JbnZhbGlkYXRlTW9kaWZpZXJNYXBwaW5n
c0ZvckRpc3BsYXkoRGlzcGxheSAqRHNwKTsKdm9pZCBfWG1SZWZyZXNoVmlydEtleXMoV2lkZ2V0
IHcpOwoKCgp2b2lkIF9YbUFkZEJhY2tncm91bmRUb0NvbG9yQ2FjaGUoU2NyZWVuICpzY3JlZW4s
IENvbG9ybWFwIGNvbG9yX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyBiYWNrZ3JvdW5kX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcmdiX2ZhbGxiYWNrLCBYcm1WYWx1ZSAqdmFsKTsKdm9pZCBfWG1JbnZhbGlkYXRlQ29sb3JD
YWNoZShCb29sZWFuIGRlZmF1bHRfb25seSk7CnZvaWQgX1htUGlja3VwVW5zcGVjaWZpZWRQaXht
YXBzKERpc3BsYXkgKmRweSk7CgoKCnZvaWQgX1htU3RyaW5nQmFzZWxpbmVzKFhtRm9udExpc3Qg
Zm9udGxpc3QsIF9YbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0
aW9uIHksIERpbWVuc2lvbiAqYmFzZWxpbmVzKTsKdm9pZCBfWG1TdHJpbmdVcGRhdGUoWG1Gb250
TGlzdCBmb250bGlzdCwgX1htU3RyaW5nIHN0cmluZyk7ClBpeGVsIF9YbVdoaXRlUGl4ZWxPZk9i
amVjdChXaWRnZXQpOwpQaXhlbCBfWG1CbGFja1BpeGVsT2ZPYmplY3QoV2lkZ2V0KTsKCgoKCnZv
aWQgX1htQXBwTG9jayhYdEFwcENvbnRleHQgYXBwYyk7CnZvaWQgX1htQXBwVW5sb2NrKFh0QXBw
Q29udGV4dCBhcHBjKTsKdm9pZCBfWG1Qcm9jZXNzTG9jayh2b2lkKTsKdm9pZCBfWG1Qcm9jZXNz
VW5sb2NrKHZvaWQpOwp2b2lkIF9YbU9iamVjdExvY2soV2lkZ2V0IHcpOwp2b2lkIF9YbU9iamVj
dFVubG9jayhXaWRnZXQgdyk7CgoKCgoKCnZvaWQgX1htUmVnaXN0ZXJOU0VDb252ZXJ0ZXJzKHZv
aWQpOwoKCgoKCgp2b2lkIF9YbURyYXdTcXVhcmVCdXR0b24oV2lkZ2V0IHcsIGludCB4LCBpbnQg
eSwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQyB0b3BfZ2MsIEdDIGJvdHRv
bV9nYywgR0Mgc2VsZWN0X2djLCBCb29sZWFuIGZpbGwpOwp2b2lkIF9YbURyYXdEaWFtb25kQnV0
dG9uKFdpZGdldCB3LCBpbnQgeCwgaW50IHksIGludCBzaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDIHRvcF9nYywgR0MgYm90dG9tX2djLCBHQyBzZWxlY3RfZ2MsIEJvb2xlYW4gZmls
bCk7CmV4dGVybiBCb29sZWFuIF9MdENoZWNrQ2xhc3NPZlZlbmRvclNoZWxsKFdpZGdldCB3KTsK
ZXh0ZXJuIFdpZGdldENsYXNzIHhtVGV4dEZpZWxkV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVj
dCBfWG1UZXh0RmllbGRSZWMgKlhtVGV4dEZpZWxkV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1U
ZXh0RmllbGRDbGFzc1JlYyAqWG1UZXh0RmllbGRXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXQg
WG1DcmVhdGVUZXh0RmllbGQoV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAq
YXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3Vu
dCk7CgoKCgoKdm9pZCBYbVRleHRGaWVsZENsZWFyU2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFRp
bWUgdGltZSk7CkJvb2xlYW4gWG1UZXh0RmllbGRDb3B5KFdpZGdldCB3aWRnZXQsIFRpbWUgdGlt
ZSk7CkJvb2xlYW4gWG1UZXh0RmllbGRDdXQoV2lkZ2V0IHdpZGdldCwgVGltZSB0aW1lKTsKaW50
IFhtVGV4dEZpZWxkR2V0QmFzZWxpbmUoV2lkZ2V0IHdpZGdldCk7ClhtVGV4dFBvc2l0aW9uIFht
VGV4dEZpZWxkR2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0
RmllbGRHZXRFZGl0YWJsZShXaWRnZXQgd2lkZ2V0KTsKWG1UZXh0UG9zaXRpb24gWG1UZXh0Rmll
bGRHZXRJbnNlcnRpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0KTsKWG1UZXh0UG9zaXRpb24gWG1U
ZXh0RmllbGRHZXRMYXN0UG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CmludCBYbVRleHRGaWVsZEdl
dE1heExlbmd0aChXaWRnZXQgd2lkZ2V0KTsKY2hhciAqWG1UZXh0RmllbGRHZXRTZWxlY3Rpb24o
V2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0RmllbGRHZXRTZWxlY3Rpb25Qb3NpdGlvbihX
aWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiAqbGVmdCwgWG1UZXh0UG9zaXRpb24gKnJpZ2h0
KTsKd2NoYXJfdCAqWG1UZXh0RmllbGRHZXRTZWxlY3Rpb25XY3MoV2lkZ2V0IHdpZGdldCk7CmNo
YXIgKlhtVGV4dEZpZWxkR2V0U3RyaW5nKFdpZGdldCB3aWRnZXQpOwp3Y2hhcl90ICpYbVRleHRG
aWVsZEdldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0KTsKaW50IFhtVGV4dEZpZWxkR2V0U3Vic3Ry
aW5nKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCBpbnQgbnVtX2NoYXJzLCBp
bnQgYnVmZmVyX3NpemUsIGNoYXIgKmJ1ZmZlcik7CmludCBYbVRleHRGaWVsZEdldFN1YnN0cmlu
Z1djcyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgaW50IG51bV9jaGFycywg
aW50IGJ1ZmZlcl9zaXplLCB3Y2hhcl90ICpidWZmZXIpOwp2b2lkIFhtVGV4dEZpZWxkSW5zZXJ0
KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjaGFyICpzdHJpbmcpOwp2
b2lkIFhtVGV4dEZpZWxkSW5zZXJ0V2NzKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBv
c2l0aW9uLCB3Y2hhcl90ICp3Y3N0cmluZyk7CkJvb2xlYW4gWG1UZXh0RmllbGRQYXN0ZShXaWRn
ZXQgd2lkZ2V0KTsKQm9vbGVhbiBYbVRleHRGaWVsZFBvc1RvWFkoV2lkZ2V0IHdpZGdldCwgWG1U
ZXh0UG9zaXRpb24gcG9zaXRpb24sIFBvc2l0aW9uICp4LCBQb3NpdGlvbiAqeSk7CkJvb2xlYW4g
WG1UZXh0RmllbGRSZW1vdmUoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1UZXh0RmllbGRSZXBsYWNl
KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9zLCBYbVRleHRQb3NpdGlvbiB0
b19wb3MsIGNoYXIgKnZhbHVlKTsKdm9pZCBYbVRleHRGaWVsZFJlcGxhY2VXY3MoV2lkZ2V0IHdp
ZGdldCwgWG1UZXh0UG9zaXRpb24gZnJvbV9wb3MsIFhtVGV4dFBvc2l0aW9uIHRvX3Bvcywgd2No
YXJfdCAqd2NzdHJpbmcpOwp2b2lkIFhtVGV4dEZpZWxkU2V0QWRkTW9kZShXaWRnZXQgd2lkZ2V0
LCBCb29sZWFuIHN0YXRlKTsKdm9pZCBYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKFdpZGdl
dCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uKTsKdm9pZCBYbVRleHRGaWVsZFNldEVk
aXRhYmxlKFdpZGdldCB3aWRnZXQsIEJvb2xlYW4gZWRpdGFibGUpOwp2b2lkIFhtVGV4dEZpZWxk
U2V0SGlnaGxpZ2h0KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGxlZnQsIFhtVGV4dFBv
c2l0aW9uIHJpZ2h0LCBYbUhpZ2hsaWdodE1vZGUgbW9kZSk7CnZvaWQgWG1UZXh0RmllbGRTZXRJ
bnNlcnRpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3NpdGlvbik7
CnZvaWQgWG1UZXh0RmllbGRTZXRNYXhMZW5ndGgoV2lkZ2V0IHdpZGdldCwgaW50IG1heF9sZW5n
dGgpOwp2b2lkIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBv
c2l0aW9uIGZpcnN0LCBYbVRleHRQb3NpdGlvbiBsYXN0LCBUaW1lIHRpbWUpOwp2b2lkIFhtVGV4
dEZpZWxkU2V0U3RyaW5nKFdpZGdldCB3aWRnZXQsIGNoYXIgKnZhbHVlKTsKdm9pZCBYbVRleHRG
aWVsZFNldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0LCB3Y2hhcl90ICp3Y3N0cmluZyk7CnZvaWQg
WG1UZXh0RmllbGRTaG93UG9zaXRpb24oV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gcG9z
aXRpb24pOwpYbVRleHRQb3NpdGlvbiBYbVRleHRGaWVsZFhZVG9Qb3MoV2lkZ2V0IHdpZGdldCwg
UG9zaXRpb24geCwgUG9zaXRpb24geSk7CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBCb29sZWFu
IEVjaG87CiAgICAgICAgQm9vbGVhbiBBbGxvd1NlbGVjdGlvbjsKCgogICAgICAgIGNoYXIgKlNl
bGVjdGlvblRleHQ7CiAgICAgICAgaW50IFNlbGVjdGlvbkxlbjsKCiAgICAgICAgWG1UZXh0UG9z
aXRpb24gT2xkSGlnaGxpZ2h0U3RhcnQ7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gT2xkSGlnaGxp
Z2h0RW5kOwogICAgICAgIFhtVGV4dFBvc2l0aW9uIE9sZEN1cnNvclBvczsKICAgICAgICBpbnQg
T2xkQ3Vyc29yWDsKCiAgICAgICAgaW50IEZhc3RJbnNlcnRDdXJzb3JTdGFydDsKICAgICAgICBp
bnQgRmFzdEluc2VydFRleHRMZW47CgogICAgICAgIERpbWVuc2lvbiBGb250SGVpZ2h0OwogICAg
ICAgIGludCBYRHJhdzsKICAgICAgICBpbnQgWURyYXc7CiAgICAgICAgaW50IFhPZmZzZXQ7CiAg
ICAgICAgaW50IE9sZFhPZmZzZXQ7CiAgICAgICAgaW50IFlPZmZzZXQ7CiAgICAgICAgaW50IFRl
eHRXaWR0aDsKICAgICAgICBpbnQgT2xkVGV4dFdpZHRoOwp9IFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgYWN0
aXZhdGVfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgZm9jdXNfY2FsbGJhY2s7CiAg
ICAgICAgWHRDYWxsYmFja0xpc3QgbG9zaW5nX2ZvY3VzX2NhbGxiYWNrOwogICAgICAgIFh0Q2Fs
bGJhY2tMaXN0IG1vZGlmeV92ZXJpZnlfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3Qg
d2NzX21vZGlmeV92ZXJpZnlfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgbW90aW9u
X3ZlcmlmeV9jYWxsYmFjazsKCiAgICAgICAgWHRDYWxsYmFja0xpc3QgZ2Fpbl9wcmltYXJ5X2Nh
bGxiYWNrOwogICAgICAgIFh0Q2FsbGJhY2tMaXN0IGxvc2VfcHJpbWFyeV9jYWxsYmFjazsKICAg
ICAgICBYdENhbGxiYWNrTGlzdCB2YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrOwogICAgICAgIGNoYXIg
KiB2YWx1ZTsKICAgICAgICB3Y2hhcl90ICogd2NfdmFsdWU7CgogICAgICAgIFhtRm9udExpc3Qg
Zm9udF9saXN0OwogICAgICAgIFhGb250U3RydWN0ICpmb250OwogICAgICAgIFhtVGV4dFNjYW5U
eXBlICpzZWxlY3Rpb25fYXJyYXk7CgogICAgICAgIF9YbUhpZ2hsaWdodERhdGEgaGlnaGxpZ2h0
OwoKICAgICAgICBHQyBnYzsKICAgICAgICBHQyBpbWFnZV9nYzsKICAgICAgICBHQyBzYXZlX2dj
OwoKICAgICAgICBQaXhtYXAgaWJlYW1fb2ZmOwogICAgICAgIFBpeG1hcCBhZGRfbW9kZV9jdXJz
b3I7CiAgICAgICAgUGl4bWFwIGN1cnNvcjsKICAgICAgICBQaXhtYXAgcHV0YmFjazsKICAgICAg
ICBQaXhtYXAgc3RpcHBsZV90aWxlOwogICAgICAgIFBpeG1hcCBpbWFnZV9jbGlwOwoKICAgICAg
ICBYbVRleHRQb3NpdGlvbiBjdXJzb3JfcG9zaXRpb247CiAgICAgICAgWG1UZXh0UG9zaXRpb24g
bmV3X2hfb2Zmc2V0OwogICAgICAgIFhtVGV4dFBvc2l0aW9uIGhfb2Zmc2V0OwoKICAgICAgICBY
bVRleHRQb3NpdGlvbiBvcmlnX2xlZnQ7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gb3JpZ19yaWdo
dDsKICAgICAgICBYbVRleHRQb3NpdGlvbiBwcmltX3Bvc19sZWZ0OwogICAgICAgIFhtVGV4dFBv
c2l0aW9uIHByaW1fcG9zX3JpZ2h0OwogICAgICAgIFhtVGV4dFBvc2l0aW9uIHByaW1fYW5jaG9y
OwoKICAgICAgICBYbVRleHRQb3NpdGlvbiBzZWNfcG9zX2xlZnQ7CiAgICAgICAgWG1UZXh0UG9z
aXRpb24gc2VjX3Bvc19yaWdodDsKICAgICAgICBYbVRleHRQb3NpdGlvbiBzZWNfYW5jaG9yOwoK
ICAgICAgICBYbVRleHRQb3NpdGlvbiBzdHVmZl9wb3M7CgogICAgICAgIFBvc2l0aW9uIHNlbGVj
dF9wb3NfeDsKCiAgICAgICAgVGltZSBwcmltX3RpbWU7CiAgICAgICAgVGltZSBkZXN0X3RpbWU7
CiAgICAgICAgVGltZSBzZWNfdGltZTsKICAgICAgICBUaW1lIGxhc3RfdGltZTsKCiAgICAgICAg
WHRJbnRlcnZhbElkIHRpbWVyX2lkOwogICAgICAgIFh0SW50ZXJ2YWxJZCBzZWxlY3RfaWQ7Cgog
ICAgICAgIGludCBibGlua19yYXRlOwogICAgICAgIGludCBzZWxlY3Rpb25fYXJyYXlfY291bnQ7
CiAgICAgICAgaW50IHRocmVzaG9sZDsKICAgICAgICBpbnQgc2l6ZV9hbGxvY2Q7CiAgICAgICAg
aW50IHN0cmluZ19sZW5ndGg7CgogICAgICAgIGludCBjdXJzb3JfaGVpZ2h0OwogICAgICAgIGlu
dCBjdXJzb3Jfd2lkdGg7CiAgICAgICAgaW50IHNhcnJheV9pbmRleDsKICAgICAgICBpbnQgbWF4
X2xlbmd0aDsKCgogICAgICAgIGludCBtYXhfY2hhcl9zaXplOwogICAgICAgIHNob3J0IGNvbHVt
bnM7CgogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fd2lkdGg7CiAgICAgICAgRGltZW5zaW9uIG1h
cmdpbl9oZWlnaHQ7CiAgICAgICAgRGltZW5zaW9uIGF2ZXJhZ2VfY2hhcl93aWR0aDsKICAgICAg
ICBEaW1lbnNpb24gbWFyZ2luX3RvcDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsK
ICAgICAgICBEaW1lbnNpb24gZm9udF9hc2NlbnQ7CiAgICAgICAgRGltZW5zaW9uIGZvbnRfZGVz
Y2VudDsKCiAgICAgICAgQm9vbGVhbiByZXNpemVfd2lkdGg7CgogICAgICAgIEJvb2xlYW4gcGVu
ZGluZ19kZWxldGU7CgogICAgICAgIEJvb2xlYW4gZWRpdGFibGU7CiAgICAgICAgQm9vbGVhbiB2
ZXJpZnlfYmVsbDsKCgogICAgICAgIEJvb2xlYW4gY3Vyc29yX3Bvc2l0aW9uX3Zpc2libGU7Cgog
ICAgICAgIEJvb2xlYW4gdHJhdmVyc2VkOwoKICAgICAgICBCb29sZWFuIGFkZF9tb2RlOwogICAg
ICAgIEJvb2xlYW4gaGFzX2ZvY3VzOwoKICAgICAgICBCb29sZWFuIGJsaW5rX29uOwogICAgICAg
IHNob3J0IGludCBjdXJzb3Jfb247CiAgICAgICAgQm9vbGVhbiByZWZyZXNoX2liZWFtX29mZjsK
CiAgICAgICAgQm9vbGVhbiBoYXZlX2ludmVydGVkX2ltYWdlX2djOwogICAgICAgIEJvb2xlYW4g
aGFzX3ByaW1hcnk7CgogICAgICAgIEJvb2xlYW4gaGFzX3NlY29uZGFyeTsKCiAgICAgICAgQm9v
bGVhbiBoYXNfZGVzdGluYXRpb247CgogICAgICAgIEJvb2xlYW4gc2VjX2RyYWc7CiAgICAgICAg
Qm9vbGVhbiBzZWxlY3Rpb25fbW92ZTsKCiAgICAgICAgQm9vbGVhbiBwZW5kaW5nX29mZjsKICAg
ICAgICBCb29sZWFuIGZvbnRsaXN0X2NyZWF0ZWQ7CgogICAgICAgIEJvb2xlYW4gaGFzX3JlY3Q7
CiAgICAgICAgQm9vbGVhbiBkb19kcm9wOwoKCgogICAgICAgIEJvb2xlYW4gY2FuY2VsOwogICAg
ICAgIEJvb2xlYW4gZXh0ZW5kaW5nOwogICAgICAgIEJvb2xlYW4gc2VjX2V4dGVuZGluZzsKICAg
ICAgICBCb29sZWFuIGNoYW5nZWRfdmlzaWJsZTsKCiAgICAgICAgQm9vbGVhbiBoYXZlX2ZvbnRz
ZXQ7CgogICAgICAgIEJvb2xlYW4gaW5fc2V0dmFsdWVzOwogICAgICAgIEJvb2xlYW4gZG9fcmVz
aXplOwogICAgICAgIEJvb2xlYW4gcmVkaXNwbGF5OwogICAgICAgIEJvb2xlYW4gb3ZlcnN0cmlr
ZTsKICAgICAgICBCb29sZWFuIHNlbF9zdGFydDsKICAgICAgICBYdFBvaW50ZXIgZXh0ZW5zaW9u
OwogICAgICAgIEJvb2xlYW4gY2hlY2tfc2V0X3JlbmRlcl90YWJsZTsKICAgICAgICBCb29sZWFu
IHVzZV94ZnQ7Cn0gWG1UZXh0RmllbGRQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbVRleHRGaWVs
ZFJlYyB7CiAgICAgICAgQ29yZVBhcnQgY29yZTsKICAgICAgICBYbVByaW1pdGl2ZVBhcnQgcHJp
bWl0aXZlOwogICAgICAgIFhtVGV4dEZpZWxkUGFydCB0ZXh0Owp9IFhtVGV4dEZpZWxkUmVjOwoK
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtVGV4dEZp
ZWxkQ2xhc3NQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbVRleHRGaWVsZENsYXNzUmVjIHsKICAg
ICAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgWG1QcmltaXRpdmVDbGFzc1Bh
cnQgcHJpbWl0aXZlX2NsYXNzOwogICAgICAgIFhtVGV4dEZpZWxkQ2xhc3NQYXJ0IHRleHRmaWVs
ZF9jbGFzczsKfSBYbVRleHRGaWVsZENsYXNzUmVjOwoKCgpleHRlcm4gWG1UZXh0RmllbGRDbGFz
c1JlYyB4bVRleHRGaWVsZENsYXNzUmVjOwpleHRlcm4gY29uc3QgY2hhciBfWG1BcnJvd0JfZGVm
YXVsdFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1CdWxsZXRpbkJfZGVmYXVs
dFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1DYXNjYWRlQl9tZW51YmFyX2V2
ZW50c1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1DYXNjYWRlQl9wX2V2ZW50c1tdOwpleHRlcm4g
Y29uc3QgY2hhciBfWG1EcmF3aW5nQV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25z
dCBjaGFyIF9YbURyYXdpbmdBX3RyYXZlcnNhbFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3Qg
Y2hhciBfWG1EcmF3bkJfZGVmYXVsdFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBf
WG1GcmFtZV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbUxhYmVs
X2RlZmF1bHRUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htTGFiZWxfbWVudVRy
YW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1MYWJlbF9tZW51X3RyYXZlcnNhbF9l
dmVudHNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htTGlzdF9MaXN0WGxhdGlvbnMxW107CmV4dGVy
biBjb25zdCBjaGFyIF9YbUxpc3RfTGlzdFhsYXRpb25zMltdOwpleHRlcm4gY29uc3QgY2hhciBf
WG1NYW5hZ2VyX21hbmFnZXJUcmF2ZXJzYWxUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNo
YXIgX1htTWFuYWdlcl9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9Y
bU1lbnVTaGVsbF90cmFuc2xhdGlvbnMgW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVByaW1pdGl2
ZV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVB1c2hCX2RlZmF1
bHRUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htUHVzaEJfbWVudVRyYW5zbGF0
aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1Sb3dDb2x1bW5fbWVudV90cmF2ZXJzYWxfdGFi
bGVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htUm93Q29sdW1uX2Jhcl90YWJsZVtdOwpleHRlcm4g
Y29uc3QgY2hhciBfWG1Sb3dDb2x1bW5fb3B0aW9uX3RhYmxlW107CmV4dGVybiBjb25zdCBjaGFy
IF9YbVJvd0NvbHVtbl9tZW51X3RhYmxlW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNhc2hfZGVm
VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbEJhcl9kZWZhdWx0VHJh
bnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbGVkV19TY3JvbGxlZFdpbmRv
d1hsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbGVkV19DbGlwV2luZG93VHJh
bnNsYXRpb25UYWJsZVtdOwpleHRlcm4gY29uc3QgY2hhciBfWG1TY3JvbGxlZFdfV29ya1dpbmRv
d1RyYW5zbGF0aW9uVGFibGVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htU2VsZWN0aW9CX2RlZmF1
bHRUZXh0QWNjZWxlcmF0b3JzW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRlYXJPZmZCX292ZXJy
aWRlVHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGlu
Z3MxW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGluZ3MyW107CmV4dGVy
biBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGluZ3MzW107CmV4dGVybiBjb25zdCBjaGFy
IF9YbVRleHRJbl9YbVRleHRFdmVudEJpbmRpbmdzMVtdOwpleHRlcm4gY29uc3QgY2hhciBfWG1U
ZXh0SW5fWG1UZXh0RXZlbnRCaW5kaW5nczJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVGV4dElu
X1htVGV4dEV2ZW50QmluZGluZ3MzW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRJbl9YbVRl
eHRFdmVudEJpbmRpbmdzM1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1Ub2dnbGVCX2RlZmF1bHRU
cmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVG9nZ2xlQl9tZW51VHJhbnNsYXRp
b25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX2ZhbGxiYWNrQmluZGluZ1N0cmlu
Z1tdOwoKCgpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19hY29ybkZhbGxiYWNrQmluZGlu
Z1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19hcG9sbG9GYWxsYmFja0Jp
bmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfZGdGYWxsYmFja0Jp
bmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfZGVjRmFsbGJhY2tC
aW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX2RibGNsa0ZhbGxi
YWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19ocEZhbGxi
YWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19pYm1GYWxs
YmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfaW5nckZh
bGxiYWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19tZWdh
dGVrRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlz
X21vdG9yb2xhRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZp
cnRLZXlzX3NnaUZhbGxiYWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1W
aXJ0S2V5c19zaWVtZW5zV3gyMDBGYWxsYmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0
IGNoYXIgX1htVmlydEtleXNfc2llbWVuczk3MzNGYWxsYmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0
ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfc3VuRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4
dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX3Rla0ZhbGxiYWNrQmluZGluZ1N0cmluZ1tdOwpl
bnVtIHsKICAgIFhtQ2xpcGJvYXJkRmFpbCwKICAgIFhtQ2xpcGJvYXJkU3VjY2VzcywKICAgIFht
Q2xpcGJvYXJkVHJ1bmNhdGUsCgogICAgWG1DbGlwYm9hcmRMb2NrZWQgPSA0LAoKICAgIFhtQ2xp
cGJvYXJkQmFkRm9ybWF0LAogICAgWG1DbGlwYm9hcmROb0RhdGEKfTsKCgplbnVtIHsKICAgIENs
aXBib2FyZEZhaWwsCiAgICBDbGlwYm9hcmRTdWNjZXNzLAogICAgQ2xpcGJvYXJkVHJ1bmNhdGUs
CgogICAgQ2xpcGJvYXJkTG9ja2VkID0gNCwKCiAgICBDbGlwYm9hcmRCYWRGb3JtYXQsCiAgICBD
bGlwYm9hcmROb0RhdGEKfTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGxvbmcgRGF0YUlkOwogICAg
bG9uZyBQcml2YXRlSWQ7Cn0gWG1DbGlwYm9hcmRQZW5kaW5nUmVjLCAqWG1DbGlwYm9hcmRQZW5k
aW5nTGlzdDsKCnR5cGVkZWYgdm9pZCAoKlhtQ3V0UGFzdGVQcm9jKShXaWRnZXQsIGludCAqLCBp
bnQgKiwgaW50ICopOwp0eXBlZGVmIHZvaWQgKCpWb2lkUHJvYykoV2lkZ2V0IHcsIGludCAqZGF0
YV9pZCwgaW50ICpwcml2YXRlX2lkLCBpbnQgKnJlYXNvbik7CgoKaW50IFhtQ2xpcGJvYXJkQmVn
aW5Db3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csCiAgICAgICAgICAgICAgICAg
ICAgICAgICBYbVN0cmluZyBjbGlwX2xhYmVsLCBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgVm9pZFByb2MgY2FsbGJhY2ssIGxvbmcgKml0ZW1faWQpOwoKaW50IFhtQ2xp
cGJvYXJkQ2FuY2VsQ29weShEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luZG93LCBsb25nIGl0
ZW1faWQpOwppbnQgWG1DbGlwYm9hcmRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5k
b3csIGxvbmcgaXRlbV9pZCwgY2hhciAqZm9ybWF0X25hbWUsCiAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGxvbmcgcHJpdmF0ZV9pZCwg
bG9uZyAqZGF0YV9pZCk7CmludCBYbUNsaXBib2FyZENvcHlCeU5hbWUoRGlzcGxheSAqZGlzcGxh
eSwgV2luZG93IHdpbmRvdywgbG9uZyBkYXRhX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg
IFh0UG9pbnRlciBidWZmZXIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBsb25nIHByaXZhdGVfaWQp
OwppbnQgWG1DbGlwYm9hcmRFbmRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3cs
IGxvbmcgaXRlbV9pZCk7CmludCBYbUNsaXBib2FyZEVuZFJldHJpZXZlKERpc3BsYXkgKmRpc3Bs
YXksIFdpbmRvdyB3aW5kb3cpOwppbnQgWG1DbGlwYm9hcmRJbnF1aXJlQ291bnQoRGlzcGxheSAq
ZGlzcGxheSwgV2luZG93IHdpbmRvdywgaW50ICpjb3VudCwgdW5zaWduZWQgbG9uZyAqbWF4X2xl
bmd0aCk7CmludCBYbUNsaXBib2FyZElucXVpcmVGb3JtYXQoRGlzcGxheSAqZGlzcGxheSwgV2lu
ZG93IHdpbmRvdywgaW50IGluZGV4LCBYdFBvaW50ZXIgZm9ybWF0X25hbWVfYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbiwgdW5zaWduZWQg
bG9uZyAqY29waWVkX2xlbik7CmludCBYbUNsaXBib2FyZElucXVpcmVMZW5ndGgoRGlzcGxheSAq
ZGlzcGxheSwgV2luZG93IHdpbmRvdywgY2hhciAqZm9ybWF0X25hbWUsIHVuc2lnbmVkIGxvbmcg
Kmxlbmd0aCk7CmludCBYbUNsaXBib2FyZElucXVpcmVQZW5kaW5nSXRlbXMoRGlzcGxheSAqZGlz
cGxheSwgV2luZG93IHdpbmRvdywgY2hhciAqZm9ybWF0X25hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWG1DbGlwYm9hcmRQZW5kaW5nTGlzdCAqaXRlbV9saXN0LCB1bnNp
Z25lZCBsb25nICpjb3VudCk7CmludCBYbUNsaXBib2FyZExvY2soRGlzcGxheSAqZGlzcGxheSwg
V2luZG93IHdpbmRvdyk7CmludCBYbUNsaXBib2FyZFJlZ2lzdGVyRm9ybWF0KERpc3BsYXkgKmRp
c3BsYXksIGNoYXIgKmZvcm1hdF9uYW1lLCBpbnQgZm9ybWF0X2xlbmd0aCk7CmludCBYbUNsaXBi
b2FyZFJldHJpZXZlKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csIGNoYXIgKmZvcm1h
dF9uYW1lLCBYdFBvaW50ZXIgYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGxlbmd0aCwgdW5zaWduZWQgbG9uZyAqbnVtX2J5dGVzLCBsb25nICpwcml2YXRlX2lk
KTsKaW50IFhtQ2xpcGJvYXJkU3RhcnRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5k
b3csIFhtU3RyaW5nIGNsaXBfbGFiZWwsIFRpbWUgdGltZXN0YW1wLAogICAgICAgICAgICAgICAg
ICAgICAgICAgV2lkZ2V0IHdpZGdldCwgWG1DdXRQYXN0ZVByb2MgY2FsbGJhY2ssIGxvbmcgKml0
ZW1faWQpOwppbnQgWG1DbGlwYm9hcmRTdGFydFJldHJpZXZlKERpc3BsYXkgKmRpc3BsYXksIFdp
bmRvdyB3aW5kb3csIFRpbWUgdGltZXN0YW1wKTsKaW50IFhtQ2xpcGJvYXJkVW5kb0NvcHkoRGlz
cGxheSAqZGlzcGxheSwgV2luZG93IHdpbmRvdyk7CmludCBYbUNsaXBib2FyZFVubG9jayhEaXNw
bGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luZG93LCBCb29sZWFuIHJlbW92ZV9hbGxfbG9ja3MpOwpp
bnQgWG1DbGlwYm9hcmRXaXRoZHJhd0Zvcm1hdChEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2lu
ZG93LCBpbnQgZGF0YV9pZCk7CkF0b20gWG1JbnRlcm5BdG9tKERpc3BsYXkgKmRpc3BsYXksIFN0
cmluZyBuYW1lLCBCb29sZWFuIG9ubHlfaWZfZXhpc3RzKTsKU3RyaW5nIFhtR2V0QXRvbU5hbWUo
RGlzcGxheSAqZGlzcGxheSwgQXRvbSBhdG9tKTsKZW51bSB7CiAgICBYbUNSX0RST1BfU0lURV9M
RUFWRV9NRVNTQUdFPTEsCiAgICBYbUNSX0RST1BfU0lURV9FTlRFUl9NRVNTQUdFLAogICAgWG1D
Ul9EUk9QX1NJVEVfTU9USU9OX01FU1NBR0UsCiAgICBYbUNSX0RST1BfTUVTU0FHRQp9OwoKZW51
bSB7CiAgICBYbU5PX0RST1BfU0lURT0xLAogICAgWG1JTlZBTElEX0RST1BfU0lURSwKICAgIFht
VkFMSURfRFJPUF9TSVRFCn07CmVudW0gewogICAgWG1EUkFHX1VOREVSX05PTkUsCiAgICBYbURS
QUdfVU5ERVJfUElYTUFQLAogICAgWG1EUkFHX1VOREVSX1NIQURPV19JTiwKICAgIFhtRFJBR19V
TkRFUl9TSEFET1dfT1VULAogICAgWG1EUkFHX1VOREVSX0hJR0hMSUdIVAp9OwoKZW51bSB7CiAg
ICBYbURST1BfU0lURV9TSU1QTEUsCiAgICBYbURST1BfU0lURV9DT01QT1NJVEUsCiAgICBYbURS
T1BfU0lURV9TSU1QTEVfQ0xJUF9PTkxZID0gMTI4LAogICAgWG1EUk9QX1NJVEVfQ09NUE9TSVRF
X0NMSVBfT05MWQp9OwoKZW51bSB7CiAgICBYbUFCT1ZFLAogICAgWG1CRUxPVwp9OwplbnVtIHsK
ICAgIFhtRFJPUF9TSVRFX0FDVElWRSwKICAgIFhtRFJPUF9TSVRFX0lOQUNUSVZFCn07CgoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJhZ1Byb2NDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgcmVhc29uOwog
ICAgWEV2ZW50ICpldmVudDsKICAgIFRpbWUgdGltZVN0YW1wOwogICAgV2lkZ2V0IGRyYWdDb250
ZXh0OwogICAgUG9zaXRpb24geCwgeTsKICAgIHVuc2lnbmVkIGNoYXIgZHJvcFNpdGVTdGF0dXM7
CiAgICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKICAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9u
czsKICAgIEJvb2xlYW4gYW5pbWF0ZTsKfSBYbURyYWdQcm9jQ2FsbGJhY2tTdHJ1Y3QsICpYbURy
YWdQcm9jQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wUHJvY0NhbGxiYWNrU3RydWN0
IHsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgVGltZSB0aW1lU3RhbXA7
CiAgICBXaWRnZXQgZHJhZ0NvbnRleHQ7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgdW5zaWduZWQg
Y2hhciBkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOwogICAgdW5z
aWduZWQgY2hhciBvcGVyYXRpb25zOwogICAgdW5zaWduZWQgY2hhciBkcm9wQWN0aW9uOwp9IFht
RHJvcFByb2NDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFByb2NDYWxsYmFjazsKCnR5cGVkZWYgc3Ry
dWN0IF9YbURyb3BTaXRlVmlzdWFsc1JlYyB7CiAgICBQaXhlbCBiYWNrZ3JvdW5kOwogICAgUGl4
ZWwgZm9yZWdyb3VuZDsKICAgIFBpeGVsIHRvcFNoYWRvd0NvbG9yOwogICAgUGl4bWFwIHRvcFNo
YWRvd1BpeG1hcDsKICAgIFBpeGVsIGJvdHRvbVNoYWRvd0NvbG9yOwogICAgUGl4bWFwIGJvdHRv
bVNoYWRvd1BpeG1hcDsKICAgIERpbWVuc2lvbiBzaGFkb3dUaGlja25lc3M7CiAgICBQaXhlbCBo
aWdobGlnaHRDb2xvcjsKICAgIFBpeG1hcCBoaWdobGlnaHRQaXhtYXA7CiAgICBEaW1lbnNpb24g
aGlnaGxpZ2h0VGhpY2tuZXNzOwogICAgRGltZW5zaW9uIGJvcmRlcldpZHRoOwp9IFhtRHJvcFNp
dGVWaXN1YWxzUmVjLCAqWG1Ecm9wU2l0ZVZpc3VhbHM7CgoKZXh0ZXJuIFdpZGdldENsYXNzIHht
RHJvcFNpdGVNYW5hZ2VyT2JqZWN0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZU1h
bmFnZXJDbGFzc1JlYyAqWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3RDbGFzczsKdHlwZWRlZiBzdHJ1
Y3QgX1htRHJvcFNpdGVNYW5hZ2VyUmVjICpYbURyb3BTaXRlTWFuYWdlck9iamVjdDsKCgoKCgpl
eHRlcm4gdm9pZCBYbURyb3BTaXRlUmVnaXN0ZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KTsKZXh0ZXJuIHZvaWQgWG1Ecm9wU2l0ZVVucmVnaXN0
ZXIoV2lkZ2V0IHdpZGdldCk7CmV4dGVybiB2b2lkIFhtRHJvcFNpdGVTdGFydFVwZGF0ZShXaWRn
ZXQgcmVmV2lkZ2V0KTsKZXh0ZXJuIHZvaWQgWG1Ecm9wU2l0ZVVwZGF0ZShXaWRnZXQgZW5jbG9z
aW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3VudCk7CmV4dGVybiB2b2lk
IFhtRHJvcFNpdGVFbmRVcGRhdGUoV2lkZ2V0IHJlZldpZGdldCk7CmV4dGVybiB2b2lkIFhtRHJv
cFNpdGVSZXRyaWV2ZShXaWRnZXQgZW5jbG9zaW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwgYXJnQ291bnQpOwpleHRlcm4gaW50IFhtRHJvcFNpdGVRdWVyeVN0YWNraW5nT3Jk
ZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdpZGdldCAqcGFyZW50X3J0biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdpZGdldCAqKmNoaWxkcmVuX3J0biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENhcmRpbmFsICpudW1fY2hpbGRyZW5fcnRuKTsKZXh0ZXJuIHZvaWQgWG1Ecm9w
U2l0ZUNvbmZpZ3VyZVN0YWNraW5nT3JkZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHNpYmxpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIHN0YWNrX21vZGUpOwpl
eHRlcm4gWG1Ecm9wU2l0ZVZpc3VhbHMgWG1Ecm9wU2l0ZUdldEFjdGl2ZVZpc3VhbHMoV2lkZ2V0
IHdpZGdldCk7CmVudW0gewogICAgWG1EUkFHX05PTkUsCiAgICBYbURSQUdfRFJPUF9PTkxZLAog
ICAgWG1EUkFHX1BSRUZFUl9QUkVSRUdJU1RFUiwKICAgIFhtRFJBR19QUkVSRUdJU1RFUiwKICAg
IFhtRFJBR19QUkVGRVJfRFlOQU1JQywKICAgIFhtRFJBR19EWU5BTUlDLAogICAgWG1EUkFHX1BS
RUZFUl9SRUNFSVZFUgp9OwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRGlzcGxheUNsYXNzOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRGlzcGxheVJlYyAqWG1EaXNwbGF5Owp0eXBlZGVmIHN0cnVjdCBfWG1E
aXNwbGF5Q2xhc3NSZWMgKlhtRGlzcGxheUNsYXNzOwoKZXh0ZXJuIFdpZGdldCBYbUdldFhtRGlz
cGxheShEaXNwbGF5ICpEc3ApOwpleHRlcm4gV2lkZ2V0IFhtR2V0RHJhZ0NvbnRleHQoV2lkZ2V0
IHcsIFRpbWUgdGltZSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IFhtSUQ7CmVudW0gewogICAgWG1U
T1BfTEVWRUxfRU5URVIsCiAgICBYbVRPUF9MRVZFTF9MRUFWRSwKICAgIFhtRFJBR19NT1RJT04s
CiAgICBYbURST1BfU0lURV9FTlRFUiwKICAgIFhtRFJPUF9TSVRFX0xFQVZFLAogICAgWG1EUk9Q
X1NUQVJULAogICAgWG1EUk9QX0ZJTklTSCwKICAgIFhtRFJBR19EUk9QX0ZJTklTSCwKICAgIFht
T1BFUkFUSU9OX0NIQU5HRUQKfTsKCgplbnVtIHsKICAgIFhtRFJPUCwKICAgIFhtRFJPUF9IRUxQ
LAogICAgWG1EUk9QX0NBTkNFTCwKICAgIFhtRFJPUF9JTlRFUlJVUFQKfTsKZW51bSB7CiAgICBY
bURST1BfRkFJTFVSRSwKICAgIFhtRFJPUF9TVUNDRVNTCn07CgoKCmVudW0gewogICAgWG1CTEVO
RF9BTEwsCiAgICBYbUJMRU5EX1NUQVRFX1NPVVJDRSwKICAgIFhtQkxFTkRfSlVTVF9TT1VSQ0Us
CiAgICBYbUJMRU5EX05PTkUKfTsKCgoKZW51bSB7CiAgICBYbUNSX1RPUF9MRVZFTF9FTlRFUiwK
ICAgIFhtQ1JfVE9QX0xFVkVMX0xFQVZFLAogICAgWG1DUl9EUkFHX01PVElPTiwKICAgIFhtQ1Jf
RFJPUF9TSVRFX0VOVEVSLAogICAgWG1DUl9EUk9QX1NJVEVfTEVBVkUsCiAgICBYbUNSX0RST1Bf
U1RBUlQsCiAgICBYbUNSX0RST1BfRklOSVNILAogICAgWG1DUl9EUkFHX0RST1BfRklOSVNILAog
ICAgWG1DUl9PUEVSQVRJT05fQ0hBTkdFRCwKICAgIF9YbU5VTUJFUl9ETkRfQ0JfUkVBU09OUwp9
OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ0NvbnRleHRDbGFzc1JlYyAqWG1EcmFnQ29udGV4dENs
YXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnQ29udGV4dFJlYyAqWG1EcmFnQ29udGV4dDsKZXh0
ZXJuIFdpZGdldENsYXNzIHhtRHJhZ0NvbnRleHRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUFu
eUlDQ0NhbGxiYWNrU3RydWN0IHsKICAgaW50IHJlYXNvbjsKICAgWEV2ZW50ICpldmVudDsKICAg
VGltZSB0aW1lU3RhbXA7Cn0gWG1BbnlJQ0NDYWxsYmFja1N0cnVjdCwgKlhtQW55SUNDQ2FsbGJh
Y2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2tTdHJ1Y3QgewogICBp
bnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgU2NyZWVu
ICpzY3JlZW47CgogICBXaW5kb3cgd2luZG93OwogICBQb3NpdGlvbiB4LHk7CiAgIHVuc2lnbmVk
IGNoYXIgZHJhZ1Byb3RvY29sU3R5bGU7CiAgIEF0b20gaWNjSGFuZGxlOwp9IFhtVG9wTGV2ZWxF
bnRlckNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0
cnVjdCBfWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBY
RXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgU2NyZWVuICpzY3JlZW47CiAgIFdp
bmRvdyB3aW5kb3c7Cn0gWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3QsICpYbVRvcExldmVs
TGVhdmVDYWxsYmFjazsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUVudGVyQ2FsbGJh
Y2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVT
dGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb247CiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0
aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZVN0YXR1czsKICAgUG9zaXRpb24geCwgeTsK
fSBYbURyb3BTaXRlRW50ZXJDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFNpdGVFbnRlckNhbGxiYWNr
OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVMZWF2ZUNhbGxiYWNrU3RydWN0IHsKICAgaW50
IHJlYXNvbjsKICAgWEV2ZW50ICpldmVudDsKICAgVGltZSB0aW1lU3RhbXA7Cn0gWG1Ecm9wU2l0
ZUxlYXZlQ2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BTaXRlTGVhdmVDYWxsYmFjazsKCnR5cGVkZWYg
c3RydWN0IF9YbURyYWdNb3Rpb25DYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFzb247CiAgIFhF
dmVudCAqZXZlbnQ7CiAgIFRpbWUgdGltZVN0YW1wOwogICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlv
bjsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb25zOwogICB1bnNpZ25lZCBjaGFyIGRyb3BTaXRl
U3RhdHVzOwogICBQb3NpdGlvbiB4LCB5Owp9IFhtRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0LCAq
WG1EcmFnTW90aW9uQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1PcGVyYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1l
IHRpbWVTdGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb247CiAgIHVuc2lnbmVkIGNoYXIg
b3BlcmF0aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZVN0YXR1czsKfSBYbU9wZXJhdGlv
bkNoYW5nZWRDYWxsYmFja1N0cnVjdCwgKlhtT3BlcmF0aW9uQ2hhbmdlZENhbGxiYWNrOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJvcFN0YXJ0Q2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwog
ICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVy
YXRpb247CiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9w
U2l0ZVN0YXR1czsKICAgdW5zaWduZWQgY2hhciBkcm9wQWN0aW9uOwogICBQb3NpdGlvbiB4LCB5
OwogICBXaW5kb3cgd2luZG93OwogICBBdG9tIGljY0hhbmRsZTsKfSBYbURyb3BTdGFydENhbGxi
YWNrU3RydWN0LCAqWG1Ecm9wU3RhcnRDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BG
aW5pc2hDYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFzb247CiAgIFhFdmVudCAqZXZlbnQ7CiAg
IFRpbWUgdGltZVN0YW1wOwogICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKICAgdW5zaWduZWQg
Y2hhciBvcGVyYXRpb25zOwogICB1bnNpZ25lZCBjaGFyIGRyb3BTaXRlU3RhdHVzOwogICB1bnNp
Z25lZCBjaGFyIGRyb3BBY3Rpb247CiAgIHVuc2lnbmVkIGNoYXIgY29tcGxldGlvblN0YXR1czsK
fSBYbURyb3BGaW5pc2hDYWxsYmFja1N0cnVjdCwgKlhtRHJvcEZpbmlzaENhbGxiYWNrOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJhZ0Ryb3BGaW5pc2hDYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFz
b247CiAgIFhFdmVudCAqZXZlbnQ7CiAgIFRpbWUgdGltZVN0YW1wOwp9IFhtRHJhZ0Ryb3BGaW5p
c2hDYWxsYmFja1N0cnVjdCwgKlhtRHJhZ0Ryb3BGaW5pc2hDYWxsYmFjazsKCgoKZXh0ZXJuIFdp
ZGdldCBYbURyYWdTdGFydChXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZl
bnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBudW1BcmdzKTsKCmV4dGVybiB2b2lkIFhtRHJh
Z0NhbmNlbChXaWRnZXQgZHJhZ0NvbnRleHQpOwoKZXh0ZXJuIEJvb2xlYW4gWG1UYXJnZXRzQXJl
Q29tcGF0aWJsZShEaXNwbGF5ICpkcHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbSAqZXhwb3J0VGFyZ2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDYXJkaW5hbCBudW1FeHBvcnRUYXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEF0b20gKmltcG9ydFRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtSW1wb3J0VGFyZ2V0cyk7CmVudW0gewogICAg
WG1UUkFOU0ZFUl9GQUlMVVJFLAogICAgWG1UUkFOU0ZFUl9TVUNDRVNTCn07CgpleHRlcm4gV2lk
Z2V0Q2xhc3MgeG1Ecm9wVHJhbnNmZXJPYmplY3RDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbURy
b3BUcmFuc2ZlckNsYXNzUmVjICpYbURyb3BUcmFuc2Zlck9iamVjdENsYXNzOwp0eXBlZGVmIHN0
cnVjdCBfWG1Ecm9wVHJhbnNmZXJSZWMgKlhtRHJvcFRyYW5zZmVyT2JqZWN0OwoKCgoKCnR5cGVk
ZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckVudHJ5UmVjIHsKICAgWHRQb2ludGVyIGNsaWVudF9k
YXRhOwogICBBdG9tIHRhcmdldDsKfSBYbURyb3BUcmFuc2ZlckVudHJ5UmVjLCAqWG1Ecm9wVHJh
bnNmZXJFbnRyeTsKCldpZGdldCBYbURyb3BUcmFuc2ZlclN0YXJ0KFdpZGdldCByZWZXaWRnZXQs
IEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgYXJnQ291bnQpOwp2b2lkIFhtRHJvcFRyYW5zZmVyQWRk
KFdpZGdldCB3aWRnZXQsIFhtRHJvcFRyYW5zZmVyRW50cnkgdHJhbnNmZXJzLCBDYXJkaW5hbCBu
dW1fdHJhbnNmZXJzKTsKdHlwZWRlZiBXaWRnZXQgKCpYbURyb3BUcmFuc2ZlclN0YXJ0VHJhbnNm
ZXJQcm9jKShXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9pZCAoKlhtRHJvcFRyYW5zZmVyQWRkVHJh
bnNmZXJQcm9jKShXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYbURyb3BUcmFuc2ZlckVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwpOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5z
ZmVyQ2xhc3NQYXJ0IHsKICAgIFhtRHJvcFRyYW5zZmVyU3RhcnRUcmFuc2ZlclByb2Mgc3RhcnRf
ZHJvcF90cmFuc2ZlcjsKICAgIFhtRHJvcFRyYW5zZmVyQWRkVHJhbnNmZXJQcm9jIGFkZF9kcm9w
X3RyYW5zZmVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbURyb3BUcmFuc2ZlckNsYXNz
UGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckNsYXNzUmVjIHsKICAgIE9iamVj
dENsYXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICBYbURyb3BUcmFuc2ZlckNsYXNzUGFydCBkcm9w
VHJhbnNmZXJfY2xhc3M7Cn0gWG1Ecm9wVHJhbnNmZXJDbGFzc1JlYzsKCmV4dGVybiBYbURyb3BU
cmFuc2ZlckNsYXNzUmVjIHhtRHJvcFRyYW5zZmVyQ2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1Ecm9wVHJhbnNmZXJMaXN0UmVjIHsKICAgIFhtRHJvcFRyYW5zZmVyRW50cnkgdHJhbnNmZXJf
bGlzdDsKICAgIENhcmRpbmFsIG51bV90cmFuc2ZlcnM7Cn0gWG1Ecm9wVHJhbnNmZXJMaXN0UmVj
LCAqWG1Ecm9wVHJhbnNmZXJMaXN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5zZmVyUGFy
dCB7CiAgICBYbURyb3BUcmFuc2ZlckVudHJ5IGRyb3BfdHJhbnNmZXJzOwogICAgQ2FyZGluYWwg
bnVtX2Ryb3BfdHJhbnNmZXJzOwogICAgQXRvbSBzZWxlY3Rpb247CiAgICBXaWRnZXQgZHJhZ0Nv
bnRleHQ7CiAgICBUaW1lIHRpbWVzdGFtcDsKICAgIEJvb2xlYW4gaW5jcmVtZW50YWw7CiAgICBX
aW5kb3cgc291cmNlX3dpbmRvdzsKICAgIHVuc2lnbmVkIGludCB0YWc7CiAgICBYdFNlbGVjdGlv
bkNhbGxiYWNrUHJvYyB0cmFuc2Zlcl9jYWxsYmFjazsKICAgIHVuc2lnbmVkIGNoYXIgdHJhbnNm
ZXJfc3RhdHVzOwoKICAgIEF0b20gbW90aWZfZHJvcF9hdG9tOwoKICAgIFhtRHJvcFRyYW5zZmVy
TGlzdCBkcm9wX3RyYW5zZmVyX2xpc3RzOwogICAgQ2FyZGluYWwgbnVtX2Ryb3BfdHJhbnNmZXJf
bGlzdHM7CiAgICBDYXJkaW5hbCBjdXJfZHJvcF90cmFuc2Zlcl9saXN0OwogICAgQ2FyZGluYWwg
Y3VyX3hmZXI7CiAgICBBdG9tICpjdXJfdGFyZ2V0czsKICAgIFh0UG9pbnRlciAqY3VyX2NsaWVu
dF9kYXRhOwp9IFhtRHJvcFRyYW5zZmVyUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFu
c2ZlclJlYyB7CiAgICBPYmplY3RQYXJ0IG9iamVjdDsKICAgIFhtRHJvcFRyYW5zZmVyUGFydCBk
cm9wVHJhbnNmZXI7Cn0gWG1Ecm9wVHJhbnNmZXJSZWM7CmV4dGVybiB2b2lkIF9YbUludGVybkF0
b21BbmROYW1lKERpc3BsYXkgKmRpc3BsYXksIEF0b20gYXRvbSwgU3RyaW5nIG5hbWUpOwoKCmV4
dGVybiB2b2lkIF9YbUZsdXNoQXRvbXNGb3JEaXNwbGF5KERpc3BsYXkgKkRzcCk7CnR5cGVkZWYg
bG9uZyBJTlQzMjsKCnR5cGVkZWYgc2hvcnQgSU5UMTY7CgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIg
SU5UODsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIENBUkQzMjsKCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgQ0FSRDE2Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQ0FSRDg7Cgp0eXBlZGVmIENBUkQzMiBC
SVRTMzI7CnR5cGVkZWYgQ0FSRDE2IEJJVFMxNjsKCgp0eXBlZGVmIENBUkQ4IEJZVEU7CnR5cGVk
ZWYgQ0FSRDggQk9PTDsKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ092ZXJTaGVsbFJlYyAqWG1EcmFn
T3ZlclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlclNoZWxsQ2xhc3NSZWMg
KlhtRHJhZ092ZXJTaGVsbFdpZGdldENsYXNzOwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRHJhZ092
ZXJTaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHZvaWQgKCpYbURTTUNyZWF0ZUluZm9Qcm9jKShY
bURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9p
ZCAoKlhtRFNNRGVzdHJveUluZm9Qcm9jKShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVkZWYgdm9pZCAoKlht
RFNNU3RhcnRVcGRhdGVQcm9jKShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVkZWYgdm9pZCAoKlhtRFNNUmV0
cmlldmVJbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZ0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwpOwp0eXBlZGVmIHZvaWQgKCpYbURTTVVwZGF0ZUluZm9Qcm9jKShYbURyb3BTaXRl
TWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9pZCAoKlhtRFNN
RW5kVXBkYXRlUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2lkZ2V0KTsKdHlwZWRlZiB2b2lkICgqWG1EU01VcGRhdGVQcm9j
KShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYdFBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsK
dHlwZWRlZiB2b2lkICgqWG1EU01Qcm9jZXNzTW90aW9uUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJP
YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRl
ZiB2b2lkICgqWG1EU01Qcm9jZXNzRHJvcFByb2MpKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1E
U01PcGVyYXRpb25DaGFuZ2VkUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgq
WG1EU01DaGFuZ2VSb290UHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1EU01JbnNlcnRJbmZv
UHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1EU01SZW1vdmVJbmZvUHJvYykoWG1Ecm9wU2l0
ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p
bnRlcik7CnR5cGVkZWYgdm9pZCAoKlhtRFNNU3luY1RyZWVQcm9jKShYbURyb3BTaXRlTWFuYWdl
ck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVk
ZWYgaW50ICgqWG1EU01HZXRUcmVlRnJvbURTTVByb2MpKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lk
ICgqWG1EU01DcmVhdGVEU0luZm9UYWJsZSkoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QpOwp0eXBl
ZGVmIHZvaWQgKCpYbURTTURlc3Ryb3lEU0luZm9UYWJsZSkoWG1Ecm9wU2l0ZU1hbmFnZXJPYmpl
Y3QpOwp0eXBlZGVmIHZvaWQgKCpYbURTTVJlZ2lzdGVySW5mb1Byb2MpKFhtRHJvcFNpdGVNYW5h
Z2VyT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIpOwp0eXBlZGVm
IFh0UG9pbnRlciAoKlhtRFNNV2lkZ2V0VG9JbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmpl
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQpOwp0
eXBlZGVmIHZvaWQgKCpYbURTTVVucmVnaXN0ZXJJbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJP
YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIp
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWG1EU01DcmVhdGVJbmZvUHJvYyBjcmVhdGVJbmZvOwog
ICAgWG1EU01EZXN0cm95SW5mb1Byb2MgZGVzdHJveUluZm87CiAgICBYbURTTVN0YXJ0VXBkYXRl
UHJvYyBzdGFydFVwZGF0ZTsKICAgIFhtRFNNUmV0cmlldmVJbmZvUHJvYyByZXRyaWV2ZUluZm87
CiAgICBYbURTTVVwZGF0ZUluZm9Qcm9jIHVwZGF0ZUluZm87CiAgICBYbURTTUVuZFVwZGF0ZVBy
b2MgZW5kVXBkYXRlOwoKICAgIFhtRFNNVXBkYXRlUHJvYyB1cGRhdGVEU007CgogICAgWG1EU01Q
cm9jZXNzTW90aW9uUHJvYyBwcm9jZXNzTW90aW9uOwogICAgWG1EU01Qcm9jZXNzRHJvcFByb2Mg
cHJvY2Vzc0Ryb3A7CiAgICBYbURTTU9wZXJhdGlvbkNoYW5nZWRQcm9jIG9wZXJhdGlvbkNoYW5n
ZWQ7CiAgICBYbURTTUNoYW5nZVJvb3RQcm9jIGNoYW5nZVJvb3Q7CgogICAgWG1EU01JbnNlcnRJ
bmZvUHJvYyBpbnNlcnRJbmZvOwogICAgWG1EU01SZW1vdmVJbmZvUHJvYyByZW1vdmVJbmZvOwoK
ICAgIFhtRFNNU3luY1RyZWVQcm9jIHN5bmNUcmVlOwogICAgWG1EU01HZXRUcmVlRnJvbURTTVBy
b2MgZ2V0VHJlZUZyb21EU007CgogICAgWG1EU01DcmVhdGVEU0luZm9UYWJsZSBjcmVhdGVUYWJs
ZTsKICAgIFhtRFNNRGVzdHJveURTSW5mb1RhYmxlIGRlc3Ryb3lUYWJsZTsKICAgIFhtRFNNUmVn
aXN0ZXJJbmZvUHJvYyByZWdpc3RlckluZm87CiAgICBYbURTTVdpZGdldFRvSW5mb1Byb2Mgd2lk
Z2V0VG9JbmZvOwogICAgWG1EU01VbnJlZ2lzdGVySW5mb1Byb2MgdW5yZWdpc3RlckluZm87Cgog
ICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbURyb3BTaXRlTWFuYWdlckNsYXNzUGFydDsKCnR5
cGVkZWYgc3RydWN0IF9YbURyb3BTaXRlTWFuYWdlckNsYXNzUmVjIHsKICAgIE9iamVjdENsYXNz
UGFydCBvYmplY3RfY2xhc3M7CiAgICBYbURyb3BTaXRlTWFuYWdlckNsYXNzUGFydCBkcm9wTWFu
YWdlcl9jbGFzczsKfSBYbURyb3BTaXRlTWFuYWdlckNsYXNzUmVjOwoKZXh0ZXJuIFhtRHJvcFNp
dGVNYW5hZ2VyQ2xhc3NSZWMgeG1Ecm9wU2l0ZU1hbmFnZXJDbGFzc1JlYzsKdHlwZWRlZiBzdHJ1
Y3QgX19YbURyb3BTaXRlVXBkYXRlSW5mb1JlYyB7CiAgWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3Qg
ZHNtOwogIFdpZGdldCByZWZXaWRnZXQ7CiAgWHRQb2ludGVyICpuZXh0Owp9IF9YbURyb3BTaXRl
VXBkYXRlSW5mb1JlYywgKl9YbURyb3BTaXRlVXBkYXRlSW5mbzsKCnR5cGVkZWYgc3RydWN0IF9Y
bURyb3BTaXRlTWFuYWdlclBhcnQgewogICAgWHRDYWxsYmFja1Byb2Mgbm90aWZ5UHJvYzsKICAg
IFh0Q2FsbGJhY2tQcm9jIHRyZWVVcGRhdGVQcm9jOwogICAgWHRQb2ludGVyIGNsaWVudF9kYXRh
OwogICAgWHRQb2ludGVyIGRyYWdVbmRlckRhdGE7CiAgICBYdFBvaW50ZXIgY3VySW5mbzsKICAg
IFRpbWUgY3VyVGltZTsKICAgIFBvc2l0aW9uIGN1clgsIGN1clksIG9sZFgsIG9sZFk7CiAgICB1
bnNpZ25lZCBjaGFyIGN1ckRyb3BTaXRlU3RhdHVzOwogICAgV2lkZ2V0IGN1ckRyYWdDb250ZXh0
OwogICAgQm9vbGVhbiBjdXJBbmltYXRlOwogICAgdW5zaWduZWQgY2hhciBjdXJPcGVyYXRpb25z
OwogICAgdW5zaWduZWQgY2hhciBjdXJPcGVyYXRpb247CiAgICBYbVJlZ2lvbiBjdXJBbmNlc3Rv
ckNsaXBSZWdpb247CiAgICBYbVJlZ2lvbiBuZXdBbmNlc3RvckNsaXBSZWdpb247CiAgICBYdFBv
aW50ZXIgZHNUYWJsZTsKICAgIFh0UG9pbnRlciBkc1Jvb3Q7CiAgICBQb3NpdGlvbiByb290WCwg
cm9vdFk7CiAgICBEaW1lbnNpb24gcm9vdFcsIHJvb3RIOwogICAgWHRQb2ludGVyIGNsaXBwZXJM
aXN0OwogICAgX1htRHJvcFNpdGVVcGRhdGVJbmZvIHVwZGF0ZUluZm87Cn0gWG1Ecm9wU2l0ZU1h
bmFnZXJQYXJ0LCAqWG1Ecm9wU2l0ZU1hbmFnZXJQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1ht
RHJvcFNpdGVNYW5hZ2VyUmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0OwogICAgWG1Ecm9wU2l0
ZU1hbmFnZXJQYXJ0IGRyb3BNYW5hZ2VyOwp9IFhtRHJvcFNpdGVNYW5hZ2VyUmVjOwoKZXh0ZXJu
IHZvaWQgX1htRFNNVXBkYXRlKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0IGRzbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnREYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNhbGxEYXRhKTsKZXh0ZXJuIGludCBfWG1EU01HZXRUcmVlRnJvbURT
TShYbURyb3BTaXRlTWFuYWdlck9iamVjdCBkc20sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0IHNoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p
bnRlciBkYXRhUHRyKTsKZXh0ZXJuIEJvb2xlYW4gX1htRHJvcFNpdGVTaGVsbChXaWRnZXQgd2lk
Z2V0KTsKZXh0ZXJuIEJvb2xlYW4gX1htRHJvcFNpdGVXcmFwcGVyQ2FuZGlkYXRlKFdpZGdldCB3
aWRnZXQpOwpleHRlcm4gV2lkZ2V0IF9YbUdldEFjdGl2ZURyb3BTaXRlKFdpZGdldCB3aWRnZXQp
OwpleHRlcm4gdm9pZCBfWG1TeW5jRHJvcFNpdGVUcmVlKFdpZGdldCBzaGVsbCk7CmV4dGVybiB2
b2lkIF9YbUlFbmRVcGRhdGUoWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdEludGVydmFsSWQgKmlu
dGVydmFsX2lkKTsKdHlwZWRlZiB2b2lkICgqWG1EcmFnU3RhcnRQcm9jKShYbURyYWdDb250ZXh0
LCBXaWRnZXQsIFhFdmVudCAqKTsKdHlwZWRlZiB2b2lkICgqWG1EcmFnQ2FuY2VsUHJvYykoWG1E
cmFnQ29udGV4dCkgOwp0eXBlZGVmIHN0cnVjdCB7CiAgIFhtRHJhZ1N0YXJ0UHJvYyBzdGFydDsK
ICAgWG1EcmFnQ2FuY2VsUHJvYyBjYW5jZWw7CiAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1E
cmFnQ29udGV4dENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdDb250ZXh0Q2xhc3NS
ZWMgewogICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgIFhtRHJhZ0NvbnRleHRDbGFzc1Bh
cnQgZHJhZ19jbGFzczsKfSBYbURyYWdDb250ZXh0Q2xhc3NSZWM7CgpleHRlcm4gWG1EcmFnQ29u
dGV4dENsYXNzUmVjIHhtRHJhZ0NvbnRleHRDbGFzc1JlYzsKCgoKCnR5cGVkZWYgc3RydWN0IHsK
ICAgV2luZG93IGZyYW1lOwogICBXaW5kb3cgd2luZG93OwogICBXaWRnZXQgc2hlbGw7CiAgIHVu
c2lnbmVkIGNoYXIgZmxhZ3M7CiAgIHVuc2lnbmVkIGNoYXIgZHJhZ1Byb3RvY29sU3R5bGU7CiAg
IGludCB4T3JpZ2luLCB5T3JpZ2luOwogICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKICAg
dW5zaWduZWQgaW50IGRlcHRoOwogICBYdFBvaW50ZXIgaWNjSW5mbzsKfSBYbURyYWdSZWNlaXZl
ckluZm9TdHJ1Y3QsICpYbURyYWdSZWNlaXZlckluZm87CgoKdHlwZWRlZiB1bmlvbiBfWG1Db252
ZXJ0U2VsZWN0aW9uUmVjIHsKICAgWHRDb252ZXJ0U2VsZWN0aW9uSW5jclByb2Mgc2VsX2luY3I7
CiAgIFh0Q29udmVydFNlbGVjdGlvblByb2Mgc2VsOwp9IFhtQ29udmVydFNlbGVjdGlvblJlYzsK
CnR5cGVkZWYgc3RydWN0IF9YbURyYWdDb250ZXh0UGFydCB7CiAgIEF0b20gKmV4cG9ydFRhcmdl
dHM7CiAgIENhcmRpbmFsIG51bUV4cG9ydFRhcmdldHM7CiAgIFhtQ29udmVydFNlbGVjdGlvblJl
YyBjb252ZXJ0UHJvYzsKICAgWHRQb2ludGVyIGNsaWVudERhdGE7CiAgIFhtRHJhZ0ljb25PYmpl
Y3Qgc291cmNlQ3Vyc29ySWNvbjsKICAgWG1EcmFnSWNvbk9iamVjdCBzdGF0ZUN1cnNvckljb247
CiAgIFhtRHJhZ0ljb25PYmplY3Qgb3BlcmF0aW9uQ3Vyc29ySWNvbjsKICAgWG1EcmFnSWNvbk9i
amVjdCBzb3VyY2VQaXhtYXBJY29uOwogICBQaXhlbCBjdXJzb3JCYWNrZ3JvdW5kOwogICBQaXhl
bCBjdXJzb3JGb3JlZ3JvdW5kOwogICBQaXhlbCB2YWxpZEN1cnNvckZvcmVncm91bmQ7CiAgIFBp
eGVsIGludmFsaWRDdXJzb3JGb3JlZ3JvdW5kOwogICBQaXhlbCBub25lQ3Vyc29yRm9yZWdyb3Vu
ZDsKICAgWHRDYWxsYmFja0xpc3QgZHJhZ01vdGlvbkNhbGxiYWNrOwogICBYdENhbGxiYWNrTGlz
dCBvcGVyYXRpb25DaGFuZ2VkQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IHNpdGVFbnRlckNh
bGxiYWNrOwogICBYdENhbGxiYWNrTGlzdCBzaXRlTGVhdmVDYWxsYmFjazsKICAgWHRDYWxsYmFj
a0xpc3QgdG9wTGV2ZWxFbnRlckNhbGxiYWNrOwogICBYdENhbGxiYWNrTGlzdCB0b3BMZXZlbExl
YXZlQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IGRyb3BTdGFydENhbGxiYWNrOwogICBYdENh
bGxiYWNrTGlzdCBkcm9wRmluaXNoQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IGRyYWdEcm9w
RmluaXNoQ2FsbGJhY2s7CiAgIHVuc2lnbmVkIGNoYXIgZHJhZ09wZXJhdGlvbnM7CiAgIEJvb2xl
YW4gaW5jcmVtZW50YWw7CiAgIHVuc2lnbmVkIGNoYXIgYmxlbmRNb2RlbDsKCiAgIFdpbmRvdyBz
cmNXaW5kb3c7CiAgIFRpbWUgZHJhZ1N0YXJ0VGltZTsKICAgQXRvbSBpY2NIYW5kbGU7CiAgIFdp
ZGdldCBzb3VyY2VXaWRnZXQ7CiAgIEJvb2xlYW4gc291cmNlSXNFeHRlcm5hbDsKCiAgIEJvb2xl
YW4gdG9wV2luZG93c0ZldGNoZWQ7CiAgIHVuc2lnbmVkIGNoYXIgY29tbVR5cGU7CiAgIHVuc2ln
bmVkIGNoYXIgYW5pbWF0aW9uVHlwZTsKCiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOwogICB1
bnNpZ25lZCBjaGFyIG9wZXJhdGlvbnM7CiAgIHVuc2lnbmVkIGludCBsYXN0RXZlbnRTdGF0ZTsK
ICAgdW5zaWduZWQgY2hhciBkcmFnQ29tcGxldGlvblN0YXR1czsKICAgdW5zaWduZWQgY2hhciBk
cmFnRHJvcENvbXBsZXRpb25TdGF0dXM7CiAgIEJvb2xlYW4gZm9yY2VJUEM7CiAgIEJvb2xlYW4g
c2VydmVyR3JhYmJlZDsKICAgQm9vbGVhbiB1c2VMb2NhbDsKICAgQm9vbGVhbiBpbkRyb3BTaXRl
OwogICBYdEludGVydmFsSWQgZHJhZ1RpbWVySWQ7CgogICBUaW1lIHJvdW5kT2ZmVGltZTsKICAg
VGltZSBsYXN0Q2hhbmdlVGltZTsKICAgVGltZSBjcm9zc2luZ1RpbWU7CgogICBUaW1lIGRyYWdG
aW5pc2hUaW1lOwogICBUaW1lIGRyb3BGaW5pc2hUaW1lOwoKICAgQXRvbSBkcm9wU2VsZWN0aW9u
OwogICBXaWRnZXQgc3JjU2hlbGw7CiAgIFBvc2l0aW9uIHN0YXJ0WCwgc3RhcnRZOwoKICAgWG1J
RCBzaXRlSUQ7CgogICBTY3JlZW4gKmN1cnJTY3JlZW47CiAgIFdpbmRvdyBjdXJyV21Sb290Owog
ICBYbURyYWdPdmVyU2hlbGxXaWRnZXQgY3VyRHJhZ092ZXI7CiAgIFhtRHJhZ092ZXJTaGVsbFdp
ZGdldCBvcmlnRHJhZ092ZXI7CgogICBYbURyYWdSZWNlaXZlckluZm9TdHJ1Y3QgKmN1cnJSZWNl
aXZlckluZm87CiAgIFhtRHJhZ1JlY2VpdmVySW5mb1N0cnVjdCAqcm9vdFJlY2VpdmVySW5mbzsK
ICAgWG1EcmFnUmVjZWl2ZXJJbmZvU3RydWN0ICpyZWNlaXZlckluZm9zOwogICBDYXJkaW5hbCBu
dW1SZWNlaXZlckluZm9zOwogICBDYXJkaW5hbCBtYXhSZWNlaXZlckluZm9zOwoKICAgdW5zaWdu
ZWQgY2hhciB0cmFja2luZ01vZGU7CiAgIHVuc2lnbmVkIGNoYXIgYWN0aXZlUHJvdG9jb2xTdHls
ZTsKICAgdW5zaWduZWQgY2hhciBhY3RpdmVCbGVuZE1vZGVsOwogICBCb29sZWFuIGRyYWdEcm9w
Q2FuY2VsRWZmZWN0Owp9IFhtRHJhZ0NvbnRleHRQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJh
Z0NvbnRleHRSZWMgewogICBDb3JlUGFydCBjb3JlOwogICBYbURyYWdDb250ZXh0UGFydCBkcmFn
Owp9IFhtRHJhZ0NvbnRleHRSZWM7CgoKCmV4dGVybiBYbURyYWdSZWNlaXZlckluZm8gX1htQWxs
b2NSZWNlaXZlckluZm8oWG1EcmFnQ29udGV4dCBkYyk7CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9Y
bUdldEFjdGl2ZVByb3RvY29sU3R5bGUoV2lkZ2V0IHcpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBD
QVJEMzIgZmxhZ3M7CiAgICBDQVJEMzIgZnVuY3Rpb25zOwogICAgQ0FSRDMyIGRlY29yYXRpb25z
OwogICAgSU5UMzIgaW5wdXRfbW9kZTsKICAgIENBUkQzMiBzdGF0dXM7Cn0gTW90aWZXbUhpbnRz
LCBNd21IaW50czsKdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBmbGFnczsKICAgIFdpbmRvdyB3
bV93aW5kb3c7Cn0gTW90aWZXbUluZm87Cgp0eXBlZGVmIE1vdGlmV21JbmZvIE13bUluZm87CgoK
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgZmxhZ3M7CiAgICBDQVJEMzIgZnVuY3Rp
b25zOwogICAgQ0FSRDMyIGRlY29yYXRpb25zOwogICAgSU5UMzIgaW5wdXRNb2RlOwogICAgQ0FS
RDMyIHN0YXR1czsKfSBQcm9wTW90aWZXbUhpbnRzOwoKdHlwZWRlZiBQcm9wTW90aWZXbUhpbnRz
IFByb3BNd21IaW50czsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQzMiBmbGFnczsK
ICAgIENBUkQzMiB3bVdpbmRvdzsKfSBQcm9wTW90aWZXbUluZm87Cgp0eXBlZGVmIFByb3BNb3Rp
ZldtSW5mbyBQcm9wTXdtSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX1htU2hlbGxFeHRSZWMgKlhtU2hl
bGxFeHRPYmplY3Q7CnR5cGVkZWYgc3RydWN0IF9YbVNoZWxsRXh0Q2xhc3NSZWMgKlhtU2hlbGxF
eHRPYmplY3RDbGFzczsKCgoKZXh0ZXJuIFdpZGdldENsYXNzIHhtU2hlbGxFeHRDbGFzczsKCgp0
eXBlZGVmIHN0cnVjdCBfWG1TaGVsbEV4dENsYXNzUGFydCB7CiAgICBYdEV2ZW50SGFuZGxlciBz
dHJ1Y3R1cmVOb3RpZnlIYW5kbGVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVNoZWxs
RXh0Q2xhc3NQYXJ0LCAqWG1TaGVsbEV4dENsYXNzUGFydFB0cjsKCnR5cGVkZWYgc3RydWN0IF9Y
bVNoZWxsRXh0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsKICAg
IFhtRXh0Q2xhc3NQYXJ0IGV4dF9jbGFzczsKICAgIFhtRGVza3RvcENsYXNzUGFydCBkZXNrdG9w
X2NsYXNzOwogICAgWG1TaGVsbEV4dENsYXNzUGFydCBzaGVsbF9jbGFzczsKfSBYbVNoZWxsRXh0
Q2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBsb25nIGxhc3RDb25maWd1
cmVSZXF1ZXN0OwogICAgQm9vbGVhbiB1c2VBc3luY0dlb21ldHJ5Owp9IFhtU2hlbGxFeHRQYXJ0
LCAqWG1TaGVsbEV4dFBhcnRQdHI7CgpleHRlcm4gWG1TaGVsbEV4dENsYXNzUmVjIHhtU2hlbGxF
eHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbVNoZWxsRXh0UmVjIHsKICAgIE9iamVjdFBh
cnQgb2JqZWN0OwogICAgWG1FeHRQYXJ0IGV4dDsKICAgIFhtRGVza3RvcFBhcnQgZGVza3RvcDsK
ICAgIFhtU2hlbGxFeHRQYXJ0IHNoZWxsOwp9IFhtU2hlbGxFeHRSZWM7CnR5cGVkZWYgc3RydWN0
IF9YbVZlbmRvclNoZWxsRXh0UmVjICpYbVZlbmRvclNoZWxsRXh0T2JqZWN0Owp0eXBlZGVmIHN0
cnVjdCBfWG1WZW5kb3JTaGVsbEV4dENsYXNzUmVjICpYbVZlbmRvclNoZWxsRXh0T2JqZWN0Q2xh
c3M7CmV4dGVybiBXaWRnZXRDbGFzcyB4bVZlbmRvclNoZWxsRXh0T2JqZWN0Q2xhc3M7CgoKCnR5
cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsRXh0Q2xhc3NQYXJ0ewogICAgWHRDYWxsYmFja1By
b2MgZGVsZXRlX3dpbmRvd19oYW5kbGVyOwogICAgWHRDYWxsYmFja1Byb2Mgb2Zmc2V0X2hhbmRs
ZXI7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtVmVuZG9yU2hlbGxFeHRDbGFzc1BhcnQs
ICpYbVZlbmRvclNoZWxsRXh0Q2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htVmVuZG9y
U2hlbGxFeHRDbGFzc1JlY3sKICAgIE9iamVjdENsYXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICBY
bUV4dENsYXNzUGFydCBleHRfY2xhc3M7CiAgICBYbURlc2t0b3BDbGFzc1BhcnQgZGVza3RvcF9j
bGFzczsKICAgIFhtU2hlbGxFeHRDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAgICBYbVZlbmRvclNo
ZWxsRXh0Q2xhc3NQYXJ0IHZlbmRvcl9jbGFzczsKfSBYbVZlbmRvclNoZWxsRXh0Q2xhc3NSZWM7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgV2lkZ2V0IHc7CiAgICAgICAgU3RyaW5nIHM7Cn0g
X1htQWNjZWxlcmF0b3JTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYbUZvbnRMaXN0IGRl
ZmF1bHRfZm9udF9saXN0OwogICAgdW5zaWduZWQgY2hhciBmb2N1c19wb2xpY3k7CiAgICBYbUZv
Y3VzRGF0YSBmb2N1c19kYXRhOwogICAgdW5zaWduZWQgY2hhciBkZWxldGVfcmVzcG9uc2U7CiAg
ICB1bnNpZ25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIE13bUhpbnRzIG13bV9oaW50czsKICAgIE13
bUluZm8gbXdtX2luZm87CiAgICBTdHJpbmcgbXdtX21lbnU7CiAgICBYdENhbGxiYWNrTGlzdCBm
b2N1c19tb3ZlZF9jYWxsYmFjazsKCiAgICBXaWRnZXQgb2xkX21hbmFnZWQ7CiAgICBQb3NpdGlv
biB4QXRNYXAsIHlBdE1hcCwgeE9mZnNldCwgeU9mZnNldDsKICAgIHVuc2lnbmVkIGxvbmcgbGFz
dE9mZnNldFNlcmlhbDsKICAgIHVuc2lnbmVkIGxvbmcgbGFzdE1hcFJlcXVlc3Q7CgogICAgQm9v
bGVhbiBleHRlcm5hbFJlcG9zaXRpb247CgogICAgdW5zaWduZWQgY2hhciBtYXBTdHlsZTsKICAg
IFh0Q2FsbGJhY2tMaXN0IHJlYWxpemVfY2FsbGJhY2s7CiAgICBYdEdyYWJLaW5kIGdyYWJfa2lu
ZDsKICAgIHVuc2lnbmVkIGNoYXIgYXVkaWJsZV93YXJuaW5nOwogICAgWG1Gb250TGlzdCBidXR0
b25fZm9udF9saXN0OwogICAgWG1Gb250TGlzdCBsYWJlbF9mb250X2xpc3Q7CiAgICBYbUZvbnRM
aXN0IHRleHRfZm9udF9saXN0OwogICAgU3RyaW5nIGlucHV0X21ldGhvZF9zdHJpbmc7CiAgICBT
dHJpbmcgcHJlZWRpdF90eXBlX3N0cmluZzsKICAgIHVuc2lnbmVkIGludCBsaWdodF90aHJlc2hv
bGQ7CiAgICB1bnNpZ25lZCBpbnQgZGFya190aHJlc2hvbGQ7CiAgICB1bnNpZ25lZCBpbnQgZm9y
ZWdyb3VuZF90aHJlc2hvbGQ7CiAgICB1bnNpZ25lZCBpbnQgaW1faGVpZ2h0OwogICAgWHRQb2lu
dGVyIGltX2luZm87CiAgICBCb29sZWFuIGltX3ZzX2hlaWdodF9zZXQ7Cgp9IFhtVmVuZG9yU2hl
bGxFeHRQYXJ0LCAqWG1WZW5kb3JTaGVsbEV4dFBhcnRQdHI7CgpleHRlcm4gWG1WZW5kb3JTaGVs
bEV4dENsYXNzUmVjIHhtVmVuZG9yU2hlbGxFeHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9Y
bVZlbmRvclNoZWxsRXh0UmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0OwogICAgWG1FeHRQYXJ0
IGV4dDsKICAgIFhtRGVza3RvcFBhcnQgZGVza3RvcDsKICAgIFhtU2hlbGxFeHRQYXJ0IHNoZWxs
OwogICAgWG1WZW5kb3JTaGVsbEV4dFBhcnQgdmVuZG9yOwp9IFhtVmVuZG9yU2hlbGxFeHRSZWM7
CgoKCgp1bnNpZ25lZCBjaGFyIF9YbUdldEF1ZGlibGVXYXJuaW5nKFdpZGdldCB3KTsKY2hhciAq
X1htR2V0SWNvblBpeG1hcE5hbWUodm9pZCk7CnZvaWQgX1htQ2xlYXJJY29uUGl4bWFwTmFtZSh2
b2lkKTsKdHlwZWRlZiB2b2lkICgqWG1DbG9uZVZpc3VhbFByb2MpKFhtRHJhZ0ljb25PYmplY3Qs
IFdpZGdldCwgV2lkZ2V0KTsKdHlwZWRlZiB2b2lkICgqWG1Nb3ZlUGl4bWFwUHJvYykoWG1EcmFn
SWNvbk9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNvbk9i
amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNvbk9iamVjdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24sIFBvc2l0aW9uKTsKCnR5
cGVkZWYgc3RydWN0IHsKICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1EcmFnSWNvbkNsYXNz
UGFydDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNsYXNzUmVjIHsKICAgIFJlY3RP
YmpDbGFzc1BhcnQgcmVjdGFuZ2xlX2NsYXNzOwogICAgWG1EcmFnSWNvbkNsYXNzUGFydCBkcmFn
SWNvbl9jbGFzczsKfSBYbURyYWdJY29uQ2xhc3NSZWM7CgpleHRlcm4gWG1EcmFnSWNvbkNsYXNz
UmVjIHhtRHJhZ0ljb25DbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENhcmRpbmFsIGRl
cHRoOwogICAgUGl4bWFwIHBpeG1hcDsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0OwogICAg
UGl4bWFwIG1hc2s7CiAgICBQb3NpdGlvbiBob3RfeCwgaG90X3k7CiAgICBQb3NpdGlvbiBvZmZz
ZXRfeCwgb2Zmc2V0X3k7CiAgICB1bnNpZ25lZCBjaGFyIGF0dGFjaG1lbnQ7CiAgICBCb29sZWFu
IGlzRGlydHk7CiAgICBSZWdpb24gcmVnaW9uOwogICAgUmVnaW9uIHJlc3RvcmVfcmVnaW9uOwog
ICAgUG9zaXRpb24geF9vZmZzZXQsIHlfb2Zmc2V0Owp9IFhtRHJhZ0ljb25QYXJ0LCAqWG1EcmFn
SWNvblBhcnRQdHI7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvblJlYyB7CiAgICBPYmplY3RQ
YXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKICAgIFhtRHJhZ0ljb25QYXJ0
IGRyYWc7Cn0gWG1EcmFnSWNvblJlYzsKCmV4dGVybiBXaWRnZXQgX1htR2V0VGV4dHVhbERyYWdJ
Y29uKFdpZGdldCB3KTsKCgoKZXh0ZXJuIHZvaWQgX1htRGVzdHJveURlZmF1bHREcmFnSWNvbihY
bURyYWdJY29uT2JqZWN0IGljb24pOwpleHRlcm4gQm9vbGVhbiBfWG1EcmFnSWNvbklzRGlydHko
WG1EcmFnSWNvbk9iamVjdCBpY29uKTsKZXh0ZXJuIHZvaWQgX1htRHJhZ0ljb25DbGVhbihYbURy
YWdJY29uT2JqZWN0IGljb24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNv
bk9iamVjdCBpY29uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtRHJhZ0ljb25PYmpl
Y3QgaWNvbjMpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFht
RHJhZ092ZXJTaGVsbENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdPdmVyU2hlbGxD
bGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFz
c1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAg
ICBXTVNoZWxsQ2xhc3NQYXJ0IHdtX3NoZWxsX2NsYXNzOwogICAgVmVuZG9yU2hlbGxDbGFzc1Bh
cnQgdmVuZG9yX3NoZWxsX2NsYXNzOwogICAgWG1EcmFnT3ZlclNoZWxsQ2xhc3NQYXJ0IGRyYWdP
dmVyX3NoZWxsX2NsYXNzOwp9IFhtRHJhZ092ZXJTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFhtRHJh
Z092ZXJTaGVsbENsYXNzUmVjIHhtRHJhZ092ZXJTaGVsbENsYXNzUmVjOwoKdHlwZWRlZiBzdHJ1
Y3QgX1htQmFja2luZ1JlYyB7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgUGl4bWFwIHBpeG1hcDsK
fSBYbUJhY2tpbmdSZWMsICpYbUJhY2tpbmc7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlckJs
ZW5kUmVjIHsKICAgIFhtRHJhZ0ljb25PYmplY3Qgc291cmNlSWNvbjsKICAgIFBvc2l0aW9uIHNv
dXJjZVg7CiAgICBQb3NpdGlvbiBzb3VyY2VZOwogICAgWG1EcmFnSWNvbk9iamVjdCBtaXhlZElj
b247CiAgICBHQyBnYzsKfSBYbURyYWdPdmVyQmxlbmRSZWMsICpYbURyYWdPdmVyQmxlbmQ7Cgp0
eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlclNoZWxsUGFydCB7CiAgICBQb3NpdGlvbiBob3RYOwog
ICAgUG9zaXRpb24gaG90WTsKICAgIHVuc2lnbmVkIGNoYXIgY3Vyc29yU3RhdGU7CiAgICB1bnNp
Z25lZCBjaGFyIG1vZGU7CiAgICB1bnNpZ25lZCBjaGFyIGFjdGl2ZU1vZGU7CgogICAgUG9zaXRp
b24gaW5pdGlhbFg7CiAgICBQb3NpdGlvbiBpbml0aWFsWTsKCiAgICBYbURyYWdJY29uT2JqZWN0
IHN0YXRlSWNvbjsKICAgIFhtRHJhZ0ljb25PYmplY3Qgb3BJY29uOwoKICAgIFhtRHJhZ092ZXJC
bGVuZFJlYyBjdXJzb3JCbGVuZDsKICAgIFhtRHJhZ092ZXJCbGVuZFJlYyByb290QmxlbmQ7CiAg
ICBQaXhlbCBjdXJzb3JGb3JlZ3JvdW5kOwogICAgUGl4ZWwgY3Vyc29yQmFja2dyb3VuZDsKICAg
IEN1cnNvciBuY0N1cnNvcjsKICAgIEN1cnNvciBhY3RpdmVDdXJzb3I7CgogICAgWG1CYWNraW5n
UmVjIGJhY2tpbmc7CiAgICBQaXhtYXAgdG1wUGl4OwogICAgUGl4bWFwIHRtcEJpdDsKICAgIEJv
b2xlYW4gaXNWaXNpYmxlOwp9IFhtRHJhZ092ZXJTaGVsbFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1EcmFnT3ZlclNoZWxsUmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0
IGNvbXBvc2l0ZTsKICAgIFNoZWxsUGFydCBzaGVsbDsKICAgIFdNU2hlbGxQYXJ0IHdtOwogICAg
VmVuZG9yU2hlbGxQYXJ0IHZlbmRvcjsKICAgIFhtRHJhZ092ZXJTaGVsbFBhcnQgZHJhZzsKfSBY
bURyYWdPdmVyU2hlbGxSZWM7CnR5cGVkZWYgc3RydWN0IF9YbURuZFNvdXJjZVByb3AgewogICAg
QllURSBieXRlX29yZGVyOwogICAgQllURSBwcm90b2NvbF92ZXJzaW9uOwogICAgQ0FSRDE2IHRh
cmdldF9pbmRleDsKICAgIENBUkQzMiBzZWxlY3Rpb247Cn0gWG1EbmRTb3VyY2VQcm9wOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRG5kUmVjZWl2ZXJQcm9wIHsKICAgIEJZVEUgYnl0ZV9vcmRlcjsKICAg
IEJZVEUgcHJvdG9jb2xfdmVyc2lvbjsKICAgIEJZVEUgcHJvdG9jb2xfc3R5bGU7CiAgICBCWVRF
IHBhZDE7CiAgICBDQVJEMzIgcHJveHlfd2luZG93OwogICAgQ0FSRDE2IG51bV9kcm9wX3NpdGVz
OwogICAgQ0FSRDE2IHBhZDI7CiAgICBDQVJEMzIgdG90YWxfc2l6ZTsKfSBYbURuZFJlY2VpdmVy
UHJvcDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRUb3AgewogICAgQ0FSRDMyIHNyY193aW5k
b3c7CiAgICBDQVJEMzIgcHJvcGVydHk7Cn0gWG1EbmRUb3A7Cgp0eXBlZGVmIHN0cnVjdCBfWG1E
bmRQb3QgewogICAgSU5UMTYgeDsKICAgIElOVDE2IHk7CiAgICBDQVJEMzIgcHJvcGVydHk7CiAg
ICBDQVJEMzIgc3JjX3dpbmRvdzsKfSBYbURuZFBvdDsKCnR5cGVkZWYgc3RydWN0IF9YbURuZE1l
c3NhZ2UgewogICAgQllURSByZWFzb247CiAgICBCWVRFIGJ5dGVfb3JkZXI7CiAgICBDQVJEMTYg
ZmxhZ3M7CiAgICBDQVJEMzIgdGltZTsKICAgIHVuaW9uIHsKICAgICAgICBYbURuZFRvcCB0b3A7
CiAgICAgICAgWG1EbmRQb3QgcG90OwogICAgfSBkYXRhOwp9IFhtRG5kTWVzc2FnZTsKCgoKCnR5
cGVkZWYgc3RydWN0IF9YbURuZFRhcmdldHMgewogICAgQllURSBieXRlX29yZGVyOwogICAgQllU
RSBwcm90b2NvbF92ZXJzaW9uOwogICAgQ0FSRDE2IG51bV90YXJnZXRfbGlzdHM7CiAgICBDQVJE
MzIgZGF0YV9zaXplOwoKfSBYbURuZFRhcmdldHM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRBdG9t
UGFpcnMgewogICAgQllURSBieXRlX29yZGVyOwogICAgQllURSBwcm90b2NvbF92ZXJzaW9uOwog
ICAgQ0FSRDE2IG51bV9wYWlyczsKICAgIENBUkQzMiBkYXRhX3NpemU7Cn0gWG1EbmRBdG9tUGFp
cnM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRBdG9tcyB7CiAgICBCWVRFIGJ5dGVfb3JkZXI7CiAg
ICBCWVRFIHByb3RvY29sX3ZlcnNpb247CiAgICBDQVJEMTYgbnVtX2F0b21zOwogICAgQ0FSRDMy
IGRhdGFfc2l6ZTsKfSBYbURuZEF0b21zOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgYXRv
bTsKICAgIENBUkQxNiBuYW1lbGVuOwogICAgQ0FSRDE2IHBhZDsKfSBYbURuZEF0b21QYWlyOwoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBhdG9tOwogICAgVGltZSB0aW1lOwp9IFhtRG5kQXRv
bXNUYWJsZUVudHJ5UmVjLCAqWG1EbmRBdG9tc1RhYmxlRW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBpbnQgbnVtX2VudHJpZXM7CiAgICBYbURuZEF0b21zVGFibGVFbnRyeSBlbnRyaWVzOwp9
IFhtRG5kQXRvbXNUYWJsZVJlYywgKlhtRG5kQXRvbXNUYWJsZTsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIGludCBudW1fdGFyZ2V0czsKICAgIEF0b20gKnRhcmdldHM7Cn0gWG1EbmRUYXJnZXRzVGFi
bGVFbnRyeVJlYywgKlhtRG5kVGFyZ2V0c1RhYmxlRW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBpbnQgbnVtX2VudHJpZXM7CiAgICBYbURuZFRhcmdldHNUYWJsZUVudHJ5IGVudHJpZXM7Cn0g
WG1EbmRUYXJnZXRzVGFibGVSZWMsICpYbURuZFRhcmdldHNUYWJsZTsKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIGNoYXIgKmF0b21zOwogICAgY2hhciAqYXRvbV9wdHI7CiAgICBjaGFyICphdG9t
X3N0YXJ0OwogICAgaW50IGF0b21fc2l6ZTsKICAgIGludCBhdG9tX2F2YWlsOwogICAgY2hhciAq
bmFtZXM7CiAgICBjaGFyICpuYW1lX3B0cjsKICAgIGNoYXIgKm5hbWVfc3RhcnQ7CiAgICBpbnQg
bmFtZV9zaXplOwogICAgaW50IG5hbWVfYXZhaWw7Cn0gWG1EbmRCdWZNZ3JSZWMsICpYbURuZEJ1
Zk1ncjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1TaGVsbERyb3BTaXRlSW5mbyB7CiAgICBYbURu
ZEJ1Zk1nclJlYyBpbmZvOwogICAgdW5zaWduZWQgY2hhciBieXRlX29yZGVyOwogICAgaW50IG51
bV9kcm9wX3NpdGVzOwp9IFhtU2hlbGxEcm9wU2l0ZUluZm9SZWMsICpYbVNoZWxsRHJvcFNpdGVJ
bmZvOwp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUluZm8gewoKICAgIHN0cnVjdCBfWG1Ecm9w
U2l0ZUluZm8gKm5leHQ7CgogICAgQm9vbGVhbiBleHRlcm5hbDsKICAgIEJvb2xlYW4gbGVhZjsK
ICAgIEJvb2xlYW4gaW1wbGljaXQ7CiAgICBCb29sZWFuIGlzU2hlbGw7CiAgICBCb29sZWFuIHVz
ZXJSZWdpb247CiAgICBCb29sZWFuIHJlZ2lzdGVyZWQ7CgogICAgc3RydWN0IF9YbURyb3BTaXRl
SW5mbyAqcGFyZW50OwogICAgc3RydWN0IF9YbURyb3BTaXRlSW5mbyAqKmNoaWxkcmVuOwoKICAg
IGludCBpblVwZGF0ZTsKICAgIHNob3J0IHRhcmdldF9pbmRleDsKICAgIHNob3J0IG51bUNoaWxk
cmVuOwogICAgc2hvcnQgbWF4Q2hpbGRyZW47CiAgICBYbVJlZ2lvbiByZWdpb247CgogICAgdW5z
aWduZWQgY2hhciBkcm9wU2l0ZU9wZXJhdGlvbnM7CiAgICBYdENhbGxiYWNrUHJvYyBkcmFnUHJv
YzsKICAgIFh0Q2FsbGJhY2tQcm9jIGRyb3BQcm9jOwogICAgV2lkZ2V0IGRyb3BTaXRlOwogICAg
dW5zaWduZWQgY2hhciBkcm9wU2l0ZVR5cGU7CiAgICB1bnNpZ25lZCBjaGFyIGFuaW1hdGlvblN0
eWxlOwogICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZUFjdGl2aXR5OwogICAgQXRvbSAqaW1wb3J0
VGFyZ2V0czsKICAgIENhcmRpbmFsIG51bUltcG9ydFRhcmdldHM7CiAgICBYUmVjdGFuZ2xlICpk
cm9wUmVjdGFuZ2xlczsKICAgIENhcmRpbmFsIG51bURyb3BSZWN0YW5nbGVzOwogICAgUGl4bWFw
IGFuaW1hdGlvblBpeG1hcDsKICAgIENhcmRpbmFsIGFuaW1hdGlvblBpeG1hcERlcHRoOwogICAg
UGl4bWFwIGFuaW1hdGlvbk1hc2s7Cgp9IFhtRHJvcFNpdGVJbmZvUmVjLCAqWG1Ecm9wU2l0ZUlu
Zm87CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBudW1fYnVja2V0czsKICAgIFhtRHJv
cFNpdGVJbmZvICpidWNrZXRzOwp9IERTSW5mb1RhYmxlOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBp
bnQgcmVhc29uOwogICAgWEV2ZW50ICpldmVudDsKICAgIFdpZGdldCB3aWRnZXQ7Cn0gWG1UcmVl
VXBkYXRlQ2FsbGJhY2tTdHJ1Y3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBUaW1lIHRpbWU7
CiAgICBXaW5kb3cgd2luZG93OwogICAgV2luZG93IHN1YndpbmRvdzsKICAgIFBvc2l0aW9uIHhy
b290LCB5cm9vdDsKICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKfSBYbU1vdGlvblJlYzsKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIFhtRHJhZ1JlY2VpdmVySW5mbyBjdXJSZWNlaXZlcjsKICAgIGludCBu
dW1fbW90aW9uczsKICAgIGludCBtYXhfbW90aW9uczsKICAgIFhtTW90aW9uUmVjICptb3Rpb25z
Owp9IFhtTW90aW9uQnVmZmVyOwoKCgoKdHlwZWRlZiB1bmlvbiB7CiAgICBYbUFueUlDQ0NhbGxi
YWNrU3RydWN0IGFueTsKICAgIFhtVG9wTGV2ZWxFbnRlckNhbGxiYWNrU3RydWN0IHRsZTsKICAg
IFhtVG9wTGV2ZWxMZWF2ZUNhbGxiYWNrU3RydWN0IHRsbDsKICAgIFhtRHJvcFNpdGVFbnRlckNh
bGxiYWNrU3RydWN0IGRzZTsKICAgIFhtRHJvcFNpdGVMZWF2ZUNhbGxiYWNrU3RydWN0IGRzbDsK
ICAgIFhtRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0IGRtOwogICAgWG1PcGVyYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tTdHJ1Y3Qgb2M7CiAgICBYbURyb3BTdGFydENhbGxiYWNrU3RydWN0IGRzOwogICAg
WG1Ecm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3QgZGY7CiAgICBYbURyYWdEcm9wRmluaXNoQ2FsbGJh
Y2tTdHJ1Y3QgZGRmOwp9IFhtRHJhZ0Ryb3BDYWxsYmFja1N0cnVjdDsKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIFhtRHJhZ092ZXJTaGVsbFdpZGdldCBkb3M7CiAgICBCb29sZWFuIHNvdXJjZUlz
RXh0ZXJuYWw7CiAgICBXaW5kb3cgd2luZG93OwogICAgV2lkZ2V0IHNoZWxsOwogICAgUG9zaXRp
b24geE9yaWdpbiwgeU9yaWdpbjsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0OwogICAgWHRQ
b2ludGVyIGljY0luZm87Cn0gWG1EcmFnVG9wTGV2ZWxDbGllbnREYXRhU3RydWN0OwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgWG1EcmFnT3ZlclNoZWxsV2lkZ2V0IGRvczsKICAgIFdpbmRvdyB3aW5k
b3c7Cn0gWG1EcmFnTW90aW9uQ2xpZW50RGF0YVN0cnVjdDsKQm9vbGVhbiBfWG1HZXREcmFnUmVj
ZWl2ZXJJbmZvKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYbURyYWdSZWNlaXZlckluZm8gcmkpOwp2b2lkIF9YbVNldERyYWdSZWNl
aXZlckluZm8oV2lkZ2V0IHcsIFdpZGdldCB3aWRnZXQpOwp2b2lkIF9YbUNsZWFyRHJhZ1JlY2Vp
dmVySW5mbyhXaWRnZXQgc2hlbGwpOwp2b2lkIF9YbUZyZWVEcmFnUmVjZWl2ZXJJbmZvKFhtU2hl
bGxEcm9wU2l0ZUluZm8gZGkpOwp1bnNpZ25lZCBjaGFyIF9YbUJ5dGVPcmRlcih2b2lkKTsKaW50
IF9YbU1lc3NhZ2VUeXBlVG9SZWFzb24oQllURSByZWFzb24pOwp2b2lkIF9YbUlDQ0V2ZW50VG9J
Q0NDYWxsYmFjayhYbURuZE1lc3NhZ2UgKm1zZywgWG1EcmFnRHJvcENhbGxiYWNrU3RydWN0ICpj
YnMpOwoKCmludCBfWG1SZWFkRHJhZ0J1ZmZlcihYbURuZEJ1Zk1nciBibWdyLCBCb29sZWFuIHJl
YWRfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmV0YnVmLCBpbnQgYnVmc2l6
ZSk7CmludCBfWG1Xcml0ZURyYWdCdWZmZXIoWG1EbmRCdWZNZ3IgYm1nciwgQm9vbGVhbiB3cml0
ZV9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgaW50IHNpemUpOwoK
CgoKCmV4dGVybiBYdFJlc291cmNlIF9YbURTUmVzb3VyY2VzW107CmV4dGVybiBpbnQgX1htTnVt
RFNSZXNvdXJjZXM7Cgp2b2lkIF9YbURTSUFkZENoaWxkKHZvaWQqIGEsIHZvaWQqIGIsIGludCBj
KTsKdm9pZCBfWG1EU0lSZW1vdmVDaGlsZCh2b2lkKiBhLCB2b2lkKiBiKTsKdm9pZCBfWG1EU0lE
ZXN0cm95KHZvaWQqIGEsIGludCBiKTsKaW50IF9YbURTSUdldEJvcmRlcldpZHRoKHZvaWQqIGEp
OwppbnQgX1htRFNJUmVwbGFjZUNoaWxkKHZvaWQqIGEpOwppbnQgX1htRFNJR2V0Q2hpbGRQb3Np
dGlvbih2b2lkKiBhLCB2b2lkKiBiKTsKdm9pZCBfWG1EU0lTd2FwQ2hpbGRyZW4odm9pZCogYSwg
dm9pZCogYiwgdm9pZCogYyk7CgoKdm9pZCBfTHR0ZXh0X3Byb2Nlc3NfZHJvcChXaWRnZXQgdywg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKTsKQm9vbGVhbiBfTHRE
ZWJ1Z0luaXQodm9pZCk7Cgp2b2lkIF9MdERlYnVnU2V0KEJvb2xlYW4gZmxhZyk7Cgp2b2lkIF9M
dERlYnVnVG9nZ2xlKHZvaWQpOwoKQm9vbGVhbiBfTHREZWJ1Z1F1ZXJ5U3RhdGUodm9pZCk7CgoK
CnZvaWQgX0x0RGVidWdQcmludFRyZWUoV2lkZ2V0IHcpOwp2b2lkIF9MdERlYnVnUHJpbnRDb21w
bGV0ZVRyZWUoV2lkZ2V0IHcpOwoKCgoKY29uc3QgY2hhciAqX0x0RGVidWdTdGF0ZShXaWRnZXQg
dyk7CgoKCgp2b2lkIF9MdERlYnVnUHJpbnRBcmdMaXN0KGNvbnN0IGNoYXIgKmZuLCBXaWRnZXQg
dywgQXJnTGlzdCBhbCwgaW50IG4sIEJvb2xlYW4gR2V0KTsKCgoKCmNvbnN0IGNoYXIgKl9MdERl
YnVnRm9jdXNEZXRhaWwyU3RyaW5nKGludCB0eXBlKTsKY29uc3QgY2hhciAqX0x0RGVidWdGb2N1
c01vZGUyU3RyaW5nKGludCB0eXBlKTsKY29uc3QgY2hhciAqX0x0RGVidWdFdmVudFR5cGUyU3Ry
aW5nKGludCB0eXBlKTsKCgoKY29uc3QgY2hhciAqX0x0RGVidWdHZW9BY3Rpb24yU3RyaW5nKGlu
dCBhY3Rpb24pOwpjb25zdCBjaGFyICpfTHREZWJ1Z0RlbGV0ZVJlc3BvbnNlMlN0cmluZyhpbnQg
ZCk7CmNvbnN0IGNoYXIgKl9MdERlYnVnR2VvbWV0cnlSZXN1bHQyU3RyaW5nKFh0R2VvbWV0cnlS
ZXN1bHQgcik7CmNvbnN0IGNoYXIgKl9MdERlYnVnRHJhZ0FuZERyb3BNZXNzYWdlVHlwZTJTdHJp
bmcodW5zaWduZWQgY2hhciByKTsKY29uc3QgY2hhciAqX0x0RGVidWdEcmFnVHlwZTJTdHJpbmco
dW5zaWduZWQgY2hhciByKTsKY29uc3QgY2hhciAqX0x0RGVidWdXaWRnZXRHZW9tZXRyeTJTdHJp
bmcoWHRXaWRnZXRHZW9tZXRyeSAqZyk7Cgpjb25zdCBjaGFyICpfTHREZWJ1Z0F0dGFjaG1lbnQy
U3RyaW5nKGludCBpKTsKY29uc3QgY2hhciAqX0x0RGVidWdNZW51Rm9jdXNPcDJTdHJpbmcoaW50
IGYpOwpjb25zdCBjaGFyICpfTHREZWJ1Z01lbnVFbnVtMlN0cmluZyhpbnQgZik7CmNvbnN0IGNo
YXIgKl9MdERlYnVnTXdtSW5wdXQyU3RyaW5nKGludCBhKTsKY29uc3QgY2hhciAqX0x0RGVidWdC
b29sZWFuMlN0cmluZyhCb29sZWFuIGIpOwpjb25zdCBjaGFyICpfTHREZWJ1Z1htU3RyaW5nMlN0
cmluZyhYbVN0cmluZyB4bXMpOwpjb25zdCBjaGFyICpfTHREZWJ1Z1BhY2tpbmcyU3RyaW5nKHVu
c2lnbmVkIGNoYXIgcCk7CmNvbnN0IGNoYXIgKl9MdERlYnVnUmNUeXBlMlN0cmluZyh1bnNpZ25l
ZCBjaGFyIHQpOwpjb25zdCBjaGFyICpfTHREZWJ1Z0FsaWdubWVudDJTdHJpbmcoaW50IG4pOwpj
b25zdCBjaGFyICpfTHREZWJ1Z01lbnVUeXBlMlN0cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9M
dERlYnVnTmF2aWdhYmlsaXR5MlN0cmluZyh1bnNpZ25lZCBjaGFyIG4pOwpjb25zdCBjaGFyICpf
THREZWJ1Z0hpZ2hsaWdodE1vZGUyU3RyaW5nKGludCBtb2RlKTsKY29uc3QgY2hhciAqX0x0RGVi
dWdTZWxlY3Rpb25Qb2xpY3kyU3RyaW5nKGludCBuKTsKY29uc3QgY2hhciAqX0x0RGVidWdSZWFz
b24yU3RyaW5nKGludCByZWFzb24pOwoKY29uc3QgY2hhciAqX0x0RGVidWdGb2N1c0NoYW5nZTJT
dHJpbmcoWG1Gb2N1c0NoYW5nZSBjKTsKCmNvbnN0IGNoYXIgKl9MdERlYnVnTmF2aWdhdGlvblR5
cGUyU3RyaW5nKFhtTmF2aWdhdGlvblR5cGUgbnQpOwpjb25zdCBjaGFyICpfTHREZWJ1Z0VkaXRN
b2RlMlN0cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9MdERlYnVnU0JEaXNwbGF5UG9saWN5MlN0
cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9MdERlYnVnU0JQbGFjZW1lbnQyU3RyaW5nKGludCBu
KTsKY29uc3QgY2hhciAqX0x0RGVidWdMaXN0U2l6ZVBvbGljeTJTdHJpbmcoaW50IG4pOwpjb25z
dCBjaGFyICpfTHREZWJ1Z1Jlc2l6ZVBvbGljeTJTdHJpbmcoaW50IG4pOwoKY29uc3QgY2hhciAq
X0x0RGVidWdTY3JvbGxpbmdQb2xpY3kyU3RyaW5nKHVuc2lnbmVkIGNoYXIgcik7CmNvbnN0IGNo
YXIgKl9MdERlYnVnRGlhbG9nU3R5bGUyU3RyaW5nKGludCBhKTsKCgoKCnZvaWQgX0x0RGVidWco
Y29uc3QgY2hhciAqZm4sIFdpZGdldCB3LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CnZvaWQgX0x0
RGVidWcyKGNvbnN0IGNoYXIgKmZuLCBXaWRnZXQgdywgV2lkZ2V0IGMsIGNvbnN0IGNoYXIgKmZt
dCwgLi4uKTsKdm9pZCBfTHREZWJ1ZzAoY29uc3QgY2hhciAqZm4sIFdpZGdldCB3LCBjb25zdCBj
aGFyICpmbXQsIC4uLik7CnZvaWQgX0x0RGVidWdQcmludFN0cmluZyhjb25zdCBjaGFyICpzKTsK
dm9pZCBfTHREZWJ1Z0FjdGlvbihjb25zdCBjaGFyICpmbiwgV2lkZ2V0IHcsIGNvbnN0IFN0cmlu
ZyBhY3Rpb24sCiAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgKnBhcmFtcywgY29uc3QgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpOwpCb29sZWFuIF9MdERlYnVnSW5EZWJ1Zyhjb25zdCBjaGFyICpm
biwgV2lkZ2V0IHcpOwpzdGF0aWMgaW50IF9YbVRleHRGX0ZvbnRNYXhXaWR0aChXaWRnZXQgdyk7
CgoKCnN0YXRpYyBYdFRyYW5zbGF0aW9ucyB0Zl9ldm50Ml90cmFucyx0Zl9ldm50M190cmFuczsK
dHlwZWRlZiB2b2lkICgqUmVkcmF3UHJvYykoWG1UZXh0RmllbGRXaWRnZXQpOwoKc3RhdGljIHZv
aWQgX1htVGV4dEZpZWxkU2V0RWRpdGFibGUoV2lkZ2V0IHcsIEJvb2xlYW4gZSk7CnN0YXRpYyB2
b2lkIGNsYXNzX2luaXRpYWxpemUodm9pZCk7CnN0YXRpYyB2b2lkIGNsYXNzX3BhcnRfaW5pdGlh
bGl6ZShXaWRnZXRDbGFzcyB3X2NsYXNzKTsKc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShXaWRnZXQs
IFdpZGdldCwgQXJnTGlzdCwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlc3Ryb3koV2lkZ2V0
IHcpOwpzdGF0aWMgdm9pZCBleHBvc2UoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFJlZ2lvbiBy
ZWdpb24pOwpzdGF0aWMgdm9pZCByZXNpemUoV2lkZ2V0IHcpOwpzdGF0aWMgQm9vbGVhbiBzZXRf
dmFsdWVzKFdpZGdldCwgV2lkZ2V0LCBXaWRnZXQsIEFyZ0xpc3QsIENhcmRpbmFsICopOwpzdGF0
aWMgWHRHZW9tZXRyeVJlc3VsdCBxdWVyeV9nZW9tZXRyeShXaWRnZXQgdywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcHJvcG9zZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFu
c3dlcik7CnN0YXRpYyB2b2lkIHJlYWxpemUoV2lkZ2V0IHcsIFh0VmFsdWVNYXNrICp2YWx1ZV9t
YXNrLAogICAgICAgICAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzICphdHRyaWJ1dGVz
KTsKc3RhdGljIHZvaWQgX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUoV2lkZ2V0IHcsIGludCBvZmZz
ZXQsIFh0QXJnVmFsICp2YWx1ZSk7CnN0YXRpYyBCb29sZWFuIGRyYWdfY29udmVydF9wcm9jKFdp
ZGdldCB3LCBBdG9tICpzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEF0b20gKnRhcmdldCwgQXRvbSAqdHlwZV9yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFh0UG9pbnRlciAqdmFsdWVfcmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nICpsZW5ndGhfcmV0dXJuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKmZvcm1hdF9yZXR1cm4pOwpzdGF0aWMgdm9pZCBkcmFnX3Ry
YW5zZmVyX3Byb2MoV2lkZ2V0IGR3LCBYdFBvaW50ZXIgY2xpZW50LCBBdG9tICpzZWxlY3Rpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b20gKnR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKmZvcm1hdCk7CnN0YXRpYyB2b2lkIGRyYWdfZHJvcF9maW5pc2go
V2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9k
YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjYWxsX2RhdGEpOwpz
dGF0aWMgdm9pZCBwcm9jZXNzX2Ryb3AoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFh0UG9pbnRlciBjYWxsX2RhdGEpOwoKCmludCBfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKFdpZGdl
dCB3LCBjaGFyICpzLCBpbnQgbCk7CgplbnVtIE1vZGlmeVRleHRDdXJzb3JQb3NpdGlvbiB7CiAg
Q1BfUmVzZXQsCiAgQ1BfU3RhcnRPZkluc2VydCwKICBDUF9FbmRPZkluc2VydCwKICBDUF9VbmNo
YW5nZWQKfSA7CgpzdGF0aWMgWG1UZXh0U2NhblR5cGUgZGVmYXVsdF9zZWxlY3Rpb25fYXJyYXlb
XSA9IHsKICAgICAgICBYbVNFTEVDVF9QT1NJVElPTiwKICAgICAgICBYbVNFTEVDVF9XT1JELAog
ICAgICAgIFhtU0VMRUNUX0xJTkUsCn07CnN0YXRpYyBpbnQgZGVmYXVsdF9zZWxlY3Rpb25fYXJy
YXlfY291bnQgPSAoKENhcmRpbmFsKSAoc2l6ZW9mKGRlZmF1bHRfc2VsZWN0aW9uX2FycmF5KSAv
IHNpemVvZihkZWZhdWx0X3NlbGVjdGlvbl9hcnJheVswXSkpKTsKCgoKCgpzdGF0aWMgWHRSZXNv
dXJjZSByZXNvdXJjZXNbXSA9CnsKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s0
NjgzXSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1Njld
KSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5hY3RpdmF0ZV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRT
dHJpbmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAg
ICAoKGNoYXIgKikmX1htU3RyaW5nc1s3NzY1XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwg
KChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3Qp
LCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5sb3NpbmdfZm9jdXNfY2Fs
bGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2
b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNjg1M10p
LCAoKGNoYXIqKSZYdFN0cmluZ3NbOTUyXSksICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksCiAg
ICAgICAgc2l6ZW9mKFh0Q2FsbGJhY2tMaXN0KSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVj
ICopMCktPnRleHQuZm9jdXNfY2FsbGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sx
NTY5XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFy
ICopJl9YbVN0cmluZ3NbODEzM10pLCAoKGNoYXIqKSZYdFN0cmluZ3NbOTUyXSksICgoY2hhciop
Jlh0U3RyaW5nc1sxNTY5XSksCiAgICAgICAgc2l6ZW9mKFh0Q2FsbGJhY2tMaXN0KSwgKChzaXpl
X3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQubW9kaWZ5X3ZlcmlmeV9jYWxsYmFjayks
CiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikw
KQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s4MTU0XSksICgoY2hh
ciopJlh0U3RyaW5nc1s5NTJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBz
aXplb2YoWHRDYWxsYmFja0xpc3QpLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+
dGV4dC53Y3NfbW9kaWZ5X3ZlcmlmeV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRTdHJp
bmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAgICAo
KGNoYXIgKikmX1htU3RyaW5nc1s4MTc4XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChj
aGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAo
KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tb3Rpb25fdmVyaWZ5X2NhbGxi
YWNrKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLCAoWHRQb2ludGVyKSgodm9p
ZCAqKTApCiAgICB9LAogICAgewogICAgICAgICgoY2hhciAqKSZfWG1TdHJpbmdzWzY5NDddKSwg
KChjaGFyKikmWHRTdHJpbmdzWzk1Ml0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLAogICAg
ICAgIHNpemVvZihYdENhbGxiYWNrTGlzdCksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq
KTApLT50ZXh0LmdhaW5fcHJpbWFyeV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRTdHJp
bmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAgICAo
KGNoYXIgKikmX1htU3RyaW5nc1s3NzQ1XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChj
aGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAo
KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5sb3NlX3ByaW1hcnlfY2FsbGJh
Y2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2b2lk
ICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwg
KChjaGFyKikmWHRTdHJpbmdzWzk1Ml0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLAogICAg
ICAgIHNpemVvZihYdENhbGxiYWNrTGlzdCksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq
KTApLT50ZXh0LnZhbHVlX2NoYW5nZWRfY2FsbGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3Ry
aW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAg
KChjaGFyKikmWHRTdHJpbmdzWzg1OV0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTQ5N10pLCAoKGNo
YXIqKSZYdFN0cmluZ3NbMTc5N10pLAogICAgICAgIHNpemVvZihTdHJpbmcpLCAoKHNpemVfdCkg
JigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC52YWx1ZSksCiAgICAgICAgKChjaGFyKikmWHRT
dHJpbmdzWzE3OTddKSwgKFh0UG9pbnRlcikiIgoKCiAgICB9LAogICAgewogICAgICAgICgoY2hh
ciAqKSZfWG1TdHJpbmdzWzEwNTc4XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzQ0OTZdKSwgKChj
aGFyICopJl9YbVN0cmluZ3NbMTIwNzldKSwKICAgICAgICBzaXplb2Yod2NoYXJfdCAqKSwgKChz
aXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQud2NfdmFsdWUpLAogICAgICAgICgo
Y2hhciopJlh0U3RyaW5nc1sxNzk3XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAg
ICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNzg3NV0pLCAoKGNoYXIgKikmX1htU3Ry
aW5nc1syNDMzXSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzEyMTA2XSksCiAgICAgICAgc2l6ZW9m
KERpbWVuc2lvbiksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0Lm1hcmdp
bl9oZWlnaHQpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1XSksIChYdFBvaW50ZXIp
NQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s3OTIxXSksICgoY2hh
ciAqKSZfWG1TdHJpbmdzWzI0NzldKSwgKChjaGFyICopJl9YbVN0cmluZ3NbMTEzMTVdKSwKICAg
ICAgICBzaXplb2YoRGltZW5zaW9uKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCkt
PnRleHQubWFyZ2luX3dpZHRoKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAo
WHRQb2ludGVyKTUKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNTYy
Nl0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1s3NDVdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE0MzVd
KSwKICAgICAgICBzaXplb2YoWG1UZXh0UG9zaXRpb24pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLAogICAgICAgICgoY2hhciopJlh0U3Ry
aW5nc1sxNjk1XSksIChYdFBvaW50ZXIpMAogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikm
X1htU3RyaW5nc1s1NDgyXSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzY1NV0pLCAoKGNoYXIqKSZY
dFN0cmluZ3NbMTc5MV0pLAogICAgICAgIHNpemVvZihzaG9ydCksICgoc2l6ZV90KSAmKChYbVRl
eHRGaWVsZFJlYyAqKTApLT50ZXh0LmNvbHVtbnMpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5n
c1sxNjk1XSksIChYdFBvaW50ZXIpMjAKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9Y
bVN0cmluZ3NbNzkzOF0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1syNTA1XSksICgoY2hhciopJlh0
U3RyaW5nc1sxNzE4XSksCiAgICAgICAgc2l6ZW9mKGludCksICgoc2l6ZV90KSAmKChYbVRleHRG
aWVsZFJlYyAqKTApLT50ZXh0Lm1heF9sZW5ndGgpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5n
c1sxNjk1XSksIChYdFBvaW50ZXIpMjE0NzQ4MzY0NwogICAgfSwKICAgIHsKICAgICAgICAoKGNo
YXIgKikmX1htU3RyaW5nc1s1MDA3XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzMyN10pLCAoKGNo
YXIqKSZYdFN0cmluZ3NbMTcxOF0pLAogICAgICAgIHNpemVvZihpbnQpLCAoKHNpemVfdCkgJigo
WG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5ibGlua19yYXRlKSwKICAgICAgICAoKGNoYXIqKSZY
dFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKTUwMAogICAgfSwKICAgIHsKICAgICAgICAoKGNo
YXIgKikmX1htU3RyaW5nc1s2OTA1XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzE3OTldKSwgKChj
aGFyICopJl9YbVN0cmluZ3NbMTEyNzddKSwKICAgICAgICBzaXplb2YoWG1Gb250TGlzdCksICgo
c2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0LmZvbnRfbGlzdCksCiAgICAgICAg
KChjaGFyKikmWHRTdHJpbmdzWzE3OTddKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQoKICAgIH0s
CgogICAgewogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1s2OTZdKSwgKChjaGFyKikmWHRTdHJp
bmdzWzEzOTVdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE3NjddKSwKICAgICAgICBzaXplb2YoWHRQ
b2ludGVyKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQuc2VsZWN0aW9u
X2FycmF5KSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKWRl
ZmF1bHRfc2VsZWN0aW9uX2FycmF5CgogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1ht
U3RyaW5nc1s5NTI2XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzM2OThdKSwgKChjaGFyKikmWHRT
dHJpbmdzWzE3MThdKSwKICAgICAgICBzaXplb2YoaW50KSwgKChzaXplX3QpICYoKFhtVGV4dEZp
ZWxkUmVjICopMCktPnRleHQuc2VsZWN0aW9uX2FycmF5X2NvdW50KSwKICAgICAgICAoKGNoYXIq
KSZYdFN0cmluZ3NbMTcxOF0pLCAoWHRQb2ludGVyKSZkZWZhdWx0X3NlbGVjdGlvbl9hcnJheV9j
b3VudAoKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbOTA2NV0pLCAo
KGNoYXIgKikmX1htU3RyaW5nc1szMzU0XSksICgoY2hhciopJlh0U3RyaW5nc1sxNTYxXSksCiAg
ICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+
dGV4dC5yZXNpemVfd2lkdGgpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1XSksIChY
dFBvaW50ZXIpMAogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s4NzM0
XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzMwNjJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1NjFd
KSwKICAgICAgICBzaXplb2YoQm9vbGVhbiksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq
KTApLT50ZXh0LnBlbmRpbmdfZGVsZXRlKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5
NV0pLCAoWHRQb2ludGVyKTEKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmlu
Z3NbNjU3OV0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1sxNjAzXSksICgoY2hhciopJlh0U3RyaW5n
c1sxNTYxXSksCiAgICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5lZGl0YWJsZSksCiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzE2
OTVdKSwgKFh0UG9pbnRlcikxCiAgICB9LAogICAgewogICAgICAgICgoY2hhciAqKSZfWG1TdHJp
bmdzWzU2NDFdKSwgKChjaGFyICopJl9YbVN0cmluZ3NbNzYwXSksICgoY2hhciopJlh0U3RyaW5n
c1sxNTYxXSksCiAgICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5jdXJzb3JfcG9zaXRpb25fdmlzaWJsZSksCiAgICAgICAgKChjaGFy
KikmWHRTdHJpbmdzWzE2OTVdKSwgKFh0UG9pbnRlcikxCiAgICB9LAogICAgewogICAgICAgICgo
Y2hhciAqKSZfWG1TdHJpbmdzWzEwNTg3XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzQ1MDVdKSwg
KChjaGFyKikmWHRTdHJpbmdzWzE1NjFdKSwKICAgICAgICBzaXplb2YoQm9vbGVhbiksICgoc2l6
ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0LnZlcmlmeV9iZWxsKSwKICAgICAgICAo
KGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKSgodW5zaWduZWQgY2hhcikofjAp
KQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s5NDc4XSksICgoY2hh
ciAqKSZfWG1TdHJpbmdzWzM2NTBdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE3MThdKSwKICAgICAg
ICBzaXplb2YoaW50KSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQudGhy
ZXNob2xkKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKTUK
ICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbODMxOF0pLCAoKGNoYXIg
KikmX1htU3RyaW5nc1syNzI4XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzExNjQ3XSksCnNpemVv
ZihYbU5hdmlnYXRpb25UeXBlKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnBy
aW1pdGl2ZS5uYXZpZ2F0aW9uX3R5cGUpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1
XSksIChYdFBvaW50ZXIpWG1UQUJfR1JPVVAKICAgIH0sCn07CgpzdGF0aWMgWG1TeW50aGV0aWNS
ZXNvdXJjZSBzeW5fcmVzb3VyY2VzW10gPQp7CiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0
cmluZ3NbNzkyMV0pLAogICAgICAgIHNpemVvZihEaW1lbnNpb24pLCAoKHNpemVfdCkgJigoWG1U
ZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tYXJnaW5fd2lkdGgpLAogICAgICAgIF9YbUZyb21Ib3Jp
em9udGFsUGl4ZWxzLCBfWG1Ub0hvcml6b250YWxQaXhlbHMKICAgIH0sCiAgICB7CiAgICAgICAg
KChjaGFyICopJl9YbVN0cmluZ3NbNzg3NV0pLAogICAgICAgIHNpemVvZihEaW1lbnNpb24pLCAo
KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tYXJnaW5faGVpZ2h0KSwKICAg
ICAgICBfWG1Gcm9tVmVydGljYWxQaXhlbHMsIF9YbVRvVmVydGljYWxQaXhlbHMKICAgIH0sCiAg
ICB7CiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzg1OV0pLAogICAgICAgIHNpemVvZihTdHJp
bmcpLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC52YWx1ZSksCiAgICAg
ICAgX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUgLCAoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAg
ICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1sxMDU3OF0pLAogICAgICAgIHNpemVvZih3Y2hhcl90
ICopLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC53Y192YWx1ZSksCiAg
ICAgICAgKCh2b2lkICopMCkgLCAoKHZvaWQgKikwKQogICAgfSwKfTsKCgoKCnN0YXRpYyB2b2lk
IFRleHRTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywgY2hhciAqcyk7CnN0YXRpYyB2b2lkIERyYXco
WG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRpYyB2b2lkIERyYXdBbGwoWG1UZXh0RmllbGRXaWRn
ZXQgdyk7CnN0YXRpYyB2b2lkIERyYXdJbnNlcnQoWG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRp
YyB2b2lkIE1hc3NpdmVDaGFuZ2VEcmF3KFhtVGV4dEZpZWxkV2lkZ2V0IHcpOwpzdGF0aWMgdm9p
ZCBEcmF3VGV4dFJlcG9zaXRpb24oWG1UZXh0RmllbGRXaWRnZXQpOwpzdGF0aWMgdm9pZCBDbGVh
ckhpZ2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgRHJhd1NpbmdsZUhp
Z2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgQ3Vyc29yRHJhdyhYbVRl
eHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgQ3Vyc29yRXJhc2UoWG1UZXh0RmllbGRXaWRn
ZXQgdyk7CnN0YXRpYyBCb29sZWFuIERvQ3Vyc29yTW92ZShYbVRleHRGaWVsZFdpZGdldCB3LCBY
RXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1UZXh0UG9zaXRpb24gcG9z
LCBCb29sZWFuIGhpZ2hsaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4g
ZHJhd2l0KSA7CnN0YXRpYyBCb29sZWFuIEN1cnNvclBvc2l0aW9uKFhtVGV4dEZpZWxkV2lkZ2V0
IHcpOwpzdGF0aWMgQm9vbGVhbiBDdXJzb3JNYXNzaXZlQWRqdXN0KFhtVGV4dEZpZWxkV2lkZ2V0
IHcpOwpzdGF0aWMgdm9pZCBDdXJzb3JTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywgQm9vbGVhbiBm
b2N1cyk7CnN0YXRpYyB2b2lkIFZlcmlmeUJlbGwoWG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRp
YyB2b2lkIFByaW1hcnlTZWxlY3Rpb25Db21wbGV0ZShYbVRleHRGaWVsZFdpZGdldCB3LCBUaW1l
IHRpbWUpOwoKdm9pZCBfWG1UZXh0RmllbGRGb2N1c0luKFdpZGdldCwgWEV2ZW50ICosIFN0cmlu
ZyAqLCBDYXJkaW5hbCAqKTsKdm9pZCBfWG1UZXh0RmllbGRGb2N1c091dChXaWRnZXQsIFhFdmVu
dCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGFjdGl2YXRlKFdpZGdldCwg
WEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgYmFja3dhcmRfY2hh
cmFjdGVyKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv
aWQgYmFja3dhcmRfd29yZChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7
CnN0YXRpYyB2b2lkIGJlZXAoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICop
OwpzdGF0aWMgdm9pZCBiZWdpbm5pbmdfb2ZfbGluZShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcg
KiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGNsZWFyX3NlbGVjdGlvbihXaWRnZXQsIFhFdmVu
dCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGNvcHlfY2xpcGJvYXJkKFdp
ZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgY29weV9w
cmltYXJ5KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv
aWQgY29weV90byhXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRp
YyB2b2lkIGN1dF9jbGlwYm9hcmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFs
ICopOwpzdGF0aWMgdm9pZCBjdXRfcHJpbWFyeShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwg
Q2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlbGV0ZV9uZXh0X2NoYXJhY3RlcihXaWRnZXQsIFhF
dmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlbGV0ZV9wcmV2aW91
c19jaGFyYWN0ZXIoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0
aWMgdm9pZCBkZWxldGVfbmV4dF93b3JkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJk
aW5hbCAqKTsKc3RhdGljIHZvaWQgZGVsZXRlX3ByZXZpb3VzX3dvcmQoV2lkZ2V0LCBYRXZlbnQg
KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBkZWxldGVfc2VsZWN0aW9uKFdp
ZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZGVsZXRl
X3RvX2VuZF9vZl9saW5lKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK
c3RhdGljIHZvaWQgZGVsZXRlX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3Ry
aW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBkZWxldGVfYWxsKFdpZGdldCwgWEV2ZW50
ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZGVzZWxlY3RfYWxsKFdpZGdl
dCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZG9fcXVpY2tf
YWN0aW9uKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv
aWQgZW5kX29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpz
dGF0aWMgdm9pZCBlbnRlcihXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7
CnN0YXRpYyB2b2lkIGV4dGVuZF9hZGp1c3QoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBleHRlbmRfZW5kKFdpZGdldCwgWEV2ZW50ICosIFN0cmlu
ZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZXh0ZW5kX3N0YXJ0KFdpZGdldCwgWEV2ZW50
ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZm9yd2FyZF9jaGFyYWN0ZXIo
V2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBmb3J3
YXJkX3dvcmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMg
dm9pZCBncmFiX2ZvY3VzKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK
CnN0YXRpYyB2b2lkIGluc2VydF9zdHJpbmcoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBrZXlfc2VsZWN0KFdpZGdldCwgWEV2ZW50ICosIFN0cmlu
ZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQga2lsbF9uZXh0X2NoYXJhY3RlcihXaWRnZXQs
IFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGtpbGxfbmV4dF93
b3JkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg
a2lsbF9wcmV2aW91c19jaGFyYWN0ZXIoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRp
bmFsICopOwpzdGF0aWMgdm9pZCBraWxsX3ByZXZpb3VzX3dvcmQoV2lkZ2V0LCBYRXZlbnQgKiwg
U3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBraWxsX3NlbGVjdGlvbihXaWRnZXQs
IFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGtpbGxfdG9fZW5k
X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMg
dm9pZCBraWxsX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBsZWF2ZShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwg
Q2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIG1vdmVfZGVzdGluYXRpb24oV2lkZ2V0LCBYRXZlbnQg
KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBtb3ZlX3RvKFdpZGdldCwgWEV2
ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgbmV4dF90YWJfZ3JvdXAo
V2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBwYWdl
X2xlZnQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9p
ZCBwYWdlX3JpZ2h0KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3Rh
dGljIHZvaWQgcGFzdGVfY2xpcGJvYXJkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJk
aW5hbCAqKTsKc3RhdGljIHZvaWQgcGFzdGVfcHJpbWFyeShXaWRnZXQsIFhFdmVudCAqLCBTdHJp
bmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHByZXZfdGFiX2dyb3VwKFdpZGdldCwgWEV2
ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgcHJvY2Vzc19iZHJhZyhX
aWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHByb2Nl
c3NfY2FuY2VsKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGlj
IHZvaWQgcHJvY2Vzc19ob21lKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAq
KTsKc3RhdGljIHZvaWQgcHJvY2Vzc19yZXR1cm4oV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICos
IENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBwcm9jZXNzX3RhYihXaWRnZXQsIFhFdmVudCAqLCBT
dHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHF1aWNrX2NvcHlfc2V0KFdpZGdldCwg
WEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgcXVpY2tfY3V0X3Nl
dChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHJl
ZHJhd19kaXNwbGF5KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3Rh
dGljIHZvaWQgc2Vjb25kYXJ5X2FkanVzdChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2Fy
ZGluYWwgKik7CnN0YXRpYyB2b2lkIHNlY29uZGFyeV9ub3RpZnkoV2lkZ2V0LCBYRXZlbnQgKiwg
U3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWNvbmRhcnlfc3RhcnQoV2lkZ2V0
LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWxlY3RfYWRq
dXN0KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg
c2VsZWN0X2FsbChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRp
YyB2b2lkIHNlbGVjdF9lbmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICop
OwpzdGF0aWMgdm9pZCBzZWxlY3Rfc3RhcnQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWxmX2luc2VydChXaWRnZXQsIFhFdmVudCAqLCBTdHJp
bmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHNldF9hbmNob3IoV2lkZ2V0LCBYRXZlbnQg
KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZXRfaW5zZXJ0aW9uX3BvaW50
KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgc2V0
X3NlbGVjdGlvbl9oaW50KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK
c3RhdGljIHZvaWQgdG9nZ2xlX2FkZF9tb2RlKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBD
YXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgdHJhdmVyc2VfaG9tZShXaWRnZXQsIFhFdmVudCAqLCBT
dHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHRyYXZlcnNlX25leHQoV2lkZ2V0LCBY
RXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCB0cmF2ZXJzZV9wcmV2
KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgdW5r
aWxsKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg
dW5tYXAoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwoKc3RhdGljIHZv
aWQgU2V0U2luZ2xlSGlnaGxpZ2h0KFdpZGdldCwgaW50LCBpbnQpOwoKCgoKCnN0YXRpYyBYdEFj
dGlvbnNSZWMgYWN0aW9uc1tdID0KewogICAgeyJzZWxmLWluc2VydCIsIHNlbGZfaW5zZXJ0fSwK
ICAgIHsiZGVsZXRlLXByZXZpb3VzLWNoYXJhY3RlciIsIGRlbGV0ZV9wcmV2aW91c19jaGFyYWN0
ZXJ9LAogICAgeyJkZWxldGUtbmV4dC1jaGFyYWN0ZXIiLCBkZWxldGVfbmV4dF9jaGFyYWN0ZXJ9
LAogICAgeyJkZWxldGUtcHJldmlvdXMtd29yZCIsIGRlbGV0ZV9wcmV2aW91c193b3JkfSwKICAg
IHsiZGVsZXRlLW5leHQtd29yZCIsIGRlbGV0ZV9uZXh0X3dvcmR9LAogICAgeyJkZWxldGUtdG8t
ZW5kLW9mLWxpbmUiLCBkZWxldGVfdG9fZW5kX29mX2xpbmV9LAogICAgeyJkZWxldGUtdG8tc3Rh
cnQtb2YtbGluZSIsIGRlbGV0ZV90b19zdGFydF9vZl9saW5lfSwKICAgIHsiYWN0aXZhdGUiLCBh
Y3RpdmF0ZX0sCiAgICB7InByb2Nlc3MtY2FuY2VsIiwgcHJvY2Vzc19jYW5jZWx9LAogICAgeyJw
cm9jZXNzLWJkcmFnIiwgcHJvY2Vzc19iZHJhZ30sCiAgICB7ImJhY2t3YXJkLWNoYXJhY3RlciIs
IGJhY2t3YXJkX2NoYXJhY3Rlcn0sCiAgICB7ImZvcndhcmQtY2hhcmFjdGVyIiwgZm9yd2FyZF9j
aGFyYWN0ZXJ9LAogICAgeyJiYWNrd2FyZC13b3JkIiwgYmFja3dhcmRfd29yZH0sCiAgICB7ImZv
cndhcmQtd29yZCIsIGZvcndhcmRfd29yZH0sCiAgICB7ImVuZC1vZi1saW5lIiwgZW5kX29mX2xp
bmV9LAogICAgeyJiZWdpbm5pbmctb2YtbGluZSIsIGJlZ2lubmluZ19vZl9saW5lfSwKICAgIHsi
cGFnZS1sZWZ0IiwgcGFnZV9sZWZ0fSwKICAgIHsicGFnZS1yaWdodCIsIHBhZ2VfcmlnaHR9LAog
ICAgeyJrZXktc2VsZWN0Iiwga2V5X3NlbGVjdH0sCiAgICB7ImdyYWItZm9jdXMiLCBncmFiX2Zv
Y3VzfSwKICAgIHsibW92ZS1kZXN0aW5hdGlvbiIsIG1vdmVfZGVzdGluYXRpb259LAogICAgeyJl
eHRlbmQtc3RhcnQiLCBleHRlbmRfc3RhcnR9LAogICAgeyJleHRlbmQtYWRqdXN0IiwgZXh0ZW5k
X2FkanVzdH0sCiAgICB7ImV4dGVuZC1lbmQiLCBleHRlbmRfZW5kfSwKICAgIHsiZGVsZXRlLXNl
bGVjdGlvbiIsIGRlbGV0ZV9zZWxlY3Rpb259LAogICAgeyJjbGVhci1zZWxlY3Rpb24iLCBjbGVh
cl9zZWxlY3Rpb259LAogICAgeyJjdXQtcHJpbWFyeSIsIGN1dF9wcmltYXJ5fSwKICAgIHsiY29w
eS1wcmltYXJ5IiwgY29weV9wcmltYXJ5fSwKICAgIHsic2V0LWFuY2hvciIsIHNldF9hbmNob3J9
LAoKICAgIHsidG9nZ2xlLWFkZC1tb2RlIiwgdG9nZ2xlX2FkZF9tb2RlfSwKICAgIHsic2VsZWN0
LWFsbCIsIHNlbGVjdF9hbGx9LAogICAgeyJkZXNlbGVjdC1hbGwiLCBkZXNlbGVjdF9hbGx9LAog
ICAgeyJzZWNvbmRhcnktc3RhcnQiLCBzZWNvbmRhcnlfc3RhcnR9LAogICAgeyJzZWNvbmRhcnkt
YWRqdXN0Iiwgc2Vjb25kYXJ5X2FkanVzdH0sCiAgICB7ImNvcHktdG8iLCBjb3B5X3RvfSwKICAg
IHsibW92ZS10byIsIG1vdmVfdG99LAogICAgeyJxdWljay1jdXQtc2V0IiwgcXVpY2tfY3V0X3Nl
dH0sCiAgICB7InF1aWNrLWNvcHktc2V0IiwgcXVpY2tfY29weV9zZXR9LAogICAgeyJkby1xdWlj
ay1hY3Rpb24iLCBkb19xdWlja19hY3Rpb259LAogICAgeyJjdXQtY2xpcGJvYXJkIiwgY3V0X2Ns
aXBib2FyZH0sCiAgICB7ImNvcHktY2xpcGJvYXJkIiwgY29weV9jbGlwYm9hcmR9LAogICAgeyJw
YXN0ZS1jbGlwYm9hcmQiLCBwYXN0ZV9jbGlwYm9hcmR9LAogICAgeyJ0cmF2ZXJzZS1uZXh0Iiwg
dHJhdmVyc2VfbmV4dH0sCiAgICB7InRyYXZlcnNlLXByZXYiLCB0cmF2ZXJzZV9wcmV2fSwKICAg
IHsidHJhdmVyc2UtaG9tZSIsIHRyYXZlcnNlX2hvbWV9LAogICAgeyJuZXh0LXRhYi1ncm91cCIs
IG5leHRfdGFiX2dyb3VwfSwKICAgIHsicHJldi10YWItZ3JvdXAiLCBwcmV2X3RhYl9ncm91cH0s
CiAgICB7ImZvY3VzSW4iLCBfWG1UZXh0RmllbGRGb2N1c0lufSwKICAgIHsiZm9jdXNPdXQiLCBf
WG1UZXh0RmllbGRGb2N1c091dH0sCiAgICB7ImVudGVyIiwgZW50ZXJ9LAogICAgeyJsZWF2ZSIs
IGxlYXZlfSwKCiAgICB7ImJlZXAiLCBiZWVwfSwKICAgIHsiZGVsZXRlLWFsbCIsIGRlbGV0ZV9h
bGx9LAogICAgeyJIZWxwIiwgX1htUHJpbWl0aXZlSGVscH0sCgoKCiAgICB7Imluc2VydC1zdHJp
bmciLCBpbnNlcnRfc3RyaW5nfSwKICAgIHsia2lsbC1uZXh0LWNoYXJhY3RlciIsIGtpbGxfbmV4
dF9jaGFyYWN0ZXJ9LAogICAgeyJraWxsLW5leHQtd29yZCIsIGtpbGxfbmV4dF93b3JkfSwKICAg
IHsia2lsbC1wcmV2aW91cy1jaGFyYWN0ZXIiLCBraWxsX3ByZXZpb3VzX2NoYXJhY3Rlcn0sCiAg
ICB7ImtpbGwtcHJldmlvdXMtd29yZCIsIGtpbGxfcHJldmlvdXNfd29yZH0sCiAgICB7ImtpbGwt
c2VsZWN0aW9uIiwga2lsbF9zZWxlY3Rpb259LAogICAgeyJraWxsLXRvLWVuZC1vZi1saW5lIiwg
a2lsbF90b19lbmRfb2ZfbGluZX0sCiAgICB7ImtpbGwtdG8tc3RhcnQtb2YtbGluZSIsIGtpbGxf
dG9fc3RhcnRfb2ZfbGluZX0sCiAgICB7InBhc3RlLXByaW1hcnkiLCBwYXN0ZV9wcmltYXJ5fSwK
ICAgIHsicHJvY2Vzcy1ob21lIiwgcHJvY2Vzc19ob21lfSwKICAgIHsicHJvY2Vzcy1yZXR1cm4i
LCBwcm9jZXNzX3JldHVybn0sCiAgICB7InByb2Nlc3MtdGFiIiwgcHJvY2Vzc190YWJ9LAogICAg
eyJyZWRyYXctZGlzcGxheSIsIHJlZHJhd19kaXNwbGF5fSwKICAgIHsic2Vjb25kYXJ5LW5vdGlm
eSIsIHNlY29uZGFyeV9ub3RpZnl9LAogICAgeyJzZWxlY3QtYWRqdXN0Iiwgc2VsZWN0X2FkanVz
dH0sCiAgICB7InNlbGVjdC1lbmQiLCBzZWxlY3RfZW5kfSwKICAgIHsic2VsZWN0LXN0YXJ0Iiwg
c2VsZWN0X3N0YXJ0fSwKICAgIHsic2V0LWluc2VydGlvbi1wb2ludCIsIHNldF9pbnNlcnRpb25f
cG9pbnR9LAogICAgeyJzZXQtc2VsZWN0aW9uLWhpbnQiLCBzZXRfc2VsZWN0aW9uX2hpbnR9LAog
ICAgeyJ1bmtpbGwiLCB1bmtpbGx9LAogICAgeyJ1bm1hcCIsIHVubWFwfSwKfTsKWG1QcmltaXRp
dmVDbGFzc0V4dFJlYyBfWG1UZXh0RlByaW1DbGFzc0V4dFJlYyA9CnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCh2b2lkICopMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgoWHJtUXVhcmspIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWG1QcmltaXRpdmVDbGFzc0V4dFJlYyksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCh2b2lkICopMCkKfTsKClhtVGV4dEZpZWxkQ2xhc3NSZWMgeG1UZXh0RmllbGRDbGFzc1JlYyA9
CnsKCiAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2lkZ2V0Q2xhc3Mp
ICYgeG1QcmltaXRpdmVDbGFzc1JlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlhtVGV4dEZpZWxkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKFhtVGV4dEZpZWxkUmVjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3NfaW5pdGlhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3NfcGFydF9pbml0aWFsaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChD
YXJkaW5hbCkgKHNpemVvZihhY3Rpb25zKSAvIHNpemVvZihhY3Rpb25zWzBdKSkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgoQ2FyZGluYWwpIChzaXplb2YocmVzb3VyY2VzKSAvIHNpemVv
ZihyZXNvdXJjZXNbMF0pKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
WHJtUXVhcmspIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
X3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWHRBbG1vc3RQcm9jKSBfWHRJ
bmhlcml0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEgKiAxMDAwICsgNiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfWG1UZXh0Rl9FdmVudEJpbmRpbmdzMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcXVlcnlfZ2VvbWV0cnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgodm9pZCAqKTApICwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogIH0sCgogIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKChYdFdpZGdldFByb2MpIF9YdEluaGVyaXQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFh0V2lkZ2V0UHJvYykgX1h0SW5oZXJpdCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3luX3Jlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChDYXJkaW5hbCkgKHNpemVvZihzeW5fcmVzb3VyY2VzKSAvIHNpemVv
ZihzeW5fcmVzb3VyY2VzWzBdKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoWHRQb2ludGVyKSAmIF9YbVRleHRGUHJpbUNsYXNzRXh0UmVjLAogIH0sCgogIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCkKICB9Cn07CgoKV2lkZ2V0Q2xhc3MgeG1UZXh0
RmllbGRXaWRnZXRDbGFzcyA9IChXaWRnZXRDbGFzcykmeG1UZXh0RmllbGRDbGFzc1JlYzsKCgoK
CgoKc3RhdGljIHZvaWQKRm9udFNpemUoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgICAgIFht
Rm9udExpc3RFbnRyeSBlbnRyeSA9ICgodm9pZCAqKTApOwogICAgICAgIFhGb250U3RydWN0ICpm
cyA9ICgodm9pZCAqKTApOwogICAgICAgIGludCBpLCBqLCBudW0sIG1heCwgbWluOwoKICAgIGZv
ciAoaSA9IDA7ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVu
ZGl0aW9uc1tpXS0+dGFnICE9ICgodm9pZCAqKTApOyBpKyspIHsKICAgICAgICBpZiAoIV9fZXh0
ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFu
dF9wICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRf
cCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25z
W2ldLT50YWcpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1
NDRdKSksIF9fczJfbGVuID0gc3RybGVuICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyksICghKChzaXplX3QpKGNvbnN0IHZvaWQg
KikoKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2
b2lkICopKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpID09IDEpIHx8IF9fczFfbGVuID49
IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkt
PnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgo
X19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSwgKF9fY29uc3Qg
Y2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k
aXRpb25zW2ldLT50YWcpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9s
ZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEy
NTQ0XSkpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKGNoYXIgKikmX1htU3RyaW5nc1sx
MjU0NF0pKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5n
c1sxMjU0NF0pKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKCgoY2hhciAqKSZfWG1TdHJp
bmdzWzEyNTQ0XSkpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRh
ZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCkoY29u
c3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJl
bmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQg
X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
KChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKikgKF9fY29uc3QgY2hhciAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv
bnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf
X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtICgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAo
X19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1
NDRdKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQg
PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICop
Jl9YbVN0cmluZ3NbMTI1NDRdKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp
LT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z
aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9
ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikm
X1htU3RyaW5nc1sxMjU0NF0pKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf
X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtIF9fczJb
MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0
cmluZ3NbMTI1NDRdKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1
bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzNdIC0gX19zMlszXSk7IH0g
fSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmICgoc2l6
ZV90KShjb25zdCB2b2lkICopKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf
bGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpLCBfX3MyX2xlbiA8IDQp
ID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSAm
JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkg
KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRd
KSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0
cmluZ3NbMTI1NDRdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp
dGlvbnNbaV0tPnRhZykpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBj
aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Zm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYm
IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg
KF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzJdIC0gKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlm
IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1
NDRdKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25z
dCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKTsgcmVnaXN0ZXIgaW50IF9f
cmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0
aW9uc1tpXS0+dGFnKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf
X3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k
aXRpb25zW2ldLT50YWcpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg
eyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u
c3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5y
ZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g
MCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv
bnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+
cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgo
Y2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSkpKTsgfSkpCiAgICAgICAgewogICAg
ICAgICAgICBlbnRyeSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0
KS0+cmVuZGl0aW9uc1tpXTsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiRm9udFNpemU6IFhtRk9OVExJU1RfREVGQVVMVF9UQUdcbiIp
OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghZW50cnkpCiAg
ICB7CgogICAgICAgIGZvciAoaSA9IDA7ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Zm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnICE9ICgodm9pZCAqKTApOyBpKyspIHsKICAg
ICAgICAgICAgaWYgKCFfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSAmJiBfX2J1
aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xp
c3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICop
Jl9YbVN0cmluZ3NbMF0pKSwgX19zMl9sZW4gPSBzdHJsZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSwgKCEoKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSArIDEpIC0gKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpID09IDEpIHx8IF9fczFfbGVu
ID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlz
dCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21w
ICgoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpLCAoX19jb25zdCBj
aGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp
dGlvbnNbaV0tPnRhZyksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xl
bikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0p
KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSAr
IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpID09
IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSwgX19z
MV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmICgoc2l6ZV90KShj
b25zdCB2b2lkICopKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkt
PnJlbmRpdGlvbnNbaV0tPnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcp
ID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJp
bmdzWzBdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq
KSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb
aV0tPnRhZykpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz
dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoY2hh
ciAqKSZfWG1TdHJpbmdzWzBdKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp
LT5yZW5kaXRpb25zW2ldLT50YWcpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQg
PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVsyXSAtICgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAy
ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop
IChfX2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkpWzNdIC0gKChfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBf
X3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpf
X3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyk7
IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j
b25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVswXSAtIF9fczJbMF0pOyBp
ZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3Nb
MF0pKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+
IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSlbM10gLSBfX3My
WzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykg
JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg
dm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp
dGlvbnNbaV0tPnRhZykgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyksIF9fczJf
bGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBd
KSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkg
KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSA9
PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u
c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5n
c1swXSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKiko
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs
dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIg
KikmX1htU3RyaW5nc1swXSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv
bnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+
cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm
JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo
X19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVszXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19y
ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z
MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICop
Jl9YbVN0cmluZ3NbMF0pKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMF07IGlmIChf
X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsxXSk7IGlm
IChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0g
KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7
IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAt
ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10p
OyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSwg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKSkpOyB9KSkgewoKICAgICAgICAgICAgICAgIGVudHJ5ID0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldOwogICAgICAgICAgICAg
ICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiRm9udFNp
emU6IFhtU1RSSU5HX0RFRkFVTFRfQ0hBUlNFVFxuIik7CgogICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCFlbnRyeSkKICAgIHsKCiAg
ICAgICAgZm9yIChpID0gMDsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xp
c3QpLT5yZW5kaXRpb25zW2ldLT50YWcgIT0gKCh2b2lkICopMCk7IGkrKykgewogICAgICAgICAg
ICBpZiAoIV9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVp
bHRpbl9jb25zdGFudF9wICgiIikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSAmJiAo
X19zMV9sZW4gPSBzdHJsZW4gKCIiKSwgX19zMl9sZW4gPSBzdHJsZW4gKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSwgKCEoKHNp
emVfdCkoY29uc3Qgdm9pZCAqKSgoIiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIi
KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0t
PnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpID09IDEpIHx8IF9fczJf
bGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoIiIpLCAoX19jb25zdCBjaGFy
ICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlv
bnNbaV0tPnRhZyksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg
KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIiIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk
ICopKCgiIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIiIpID09IDEpICYmIChfX3Mx
X2xlbiA9IHN0cmxlbiAoIiIpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w
ICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb
aV0tPnRhZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlz
dCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3Rl
ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg
KikoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25z
W2ldLT50YWcpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl
c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikp
WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcp
KVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo
KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikpWzJdIC0gKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlm
IChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiIpKVszXSAtICgoX19jb25zdCB1bnNp
Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19yZXN1bHQ7
IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpOyByZWdpc3Rl
ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09
IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg
KikgKCIiKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9j
b25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJl
bmRpdGlvbnNbaV0tPnRhZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEp
IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgJiYgKF9fczJfbGVuID0gc3Ry
bGVuICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlv
bnNbaV0tPnRhZyksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCIiKSAm
JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk
ICopKCIiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9
ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikpWzBdIC0g
KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzBdKTsg
aWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIiKSlbMV0gLSAoKF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzFdKTsgaWYgKF9fczJf
bGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIiKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm
JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo
X19jb25zdCBjaGFyICopICgiIikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp
LT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z
aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9f
czFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRh
ZykpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo
X19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+
dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg
PSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tp
XS0+dGFnKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0
ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop
ICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb
aV0tPnRhZykpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wICgiIiwgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKSkp
OyB9KSkgewogICAgICAgICAgICAgICAgZW50cnkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV07CiAgICAgICAgICAgICAgICBfTHREZWJ1
ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJGb250U2l6ZTogZW1wdHkg
dGFnXG4iKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgIH0KCiAgICBpZiAoISBlbnRyeSkgewogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmZvbnRfbGlzdCkgJiYgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5mb250X2xpc3QpLT5yZW5kaXRpb25zKQogICAgICAgICAgICAgICAgZW50cnkgPSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF07CiAgICB9
CgoKCgoKCgogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC51
c2VfeGZ0KSA9IDA7CgoKICAgIGlmICghZW50cnkpIHsKICAgICAgICBYbUZvbnRMaXN0IGZsID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpOwogICAgICAgICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KSA9IF9YbUZvbnRMaXN0Q3JlYXRl
RGVmYXVsdCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQt
PmNvcmUuc2NyZWVuLT5kaXNwbGF5KSk7CiAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9Y
bS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiVEYgRm9udFNpemU6IG92ZXJ3cml0aW5nIEZvbnRMaXN0
IChvbGQgJXAgbmV3ICVwKVxuIiwgZmwsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Zm9udF9saXN0KSk7CgoKICAgICAgICBlbnRyeSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1swXTsKICAgIH0KCgoKCgoKCiAgICBpZiAoZW50
cnktPnR5cGUgPT0gWG1GT05UX0lTX0ZPTlRTRVQpIHsKICAgICAgICBYRm9udFN0cnVjdCAqKmZv
bzsKICAgICAgICBjaGFyICoqYmFyOwoKICAgICAgICBpZiAoKG51bSA9IFhGb250c09mRm9udFNl
dCgoWEZvbnRTZXQpKGVudHJ5LT5mb250KSwgJmZvbywgJmJhcikpIDwgMSkgewogICAgICAgICAg
ICBmcyA9ICgodm9pZCAqKTApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZzID0gZm9v
WzBdOwogICAgICAgICAgICBtYXggPSAwOyBtaW4gPSAyMTQ3NDgzNjQ3OwogICAgICAgICAgICBm
b3IgKGo9MDsgajxudW07IGorKyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZvb1tqXS0+bWF4
X2JvdW5kcy53aWR0aCA+IG1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IGZv
b1tqXS0+bWF4X2JvdW5kcy53aWR0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoZm9vW2pdLT5t
aW5fYm91bmRzLndpZHRoIDwgbWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluID0g
Zm9vW2pdLT5taW5fYm91bmRzLndpZHRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuYXZlcmFnZV9jaGFyX3dpZHRoKSA9IChtYXggKyBt
aW4pIC8gMjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZzID0gKFhGb250U3RydWN0
ICopZW50cnktPmZvbnQ7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5h
dmVyYWdlX2NoYXJfd2lkdGgpID0KICAgICAgICAgICAgICAgIChmcy0+bWF4X2JvdW5kcy53aWR0
aCArIGZzLT5taW5fYm91bmRzLndpZHRoKSAvIDI7CiAgICB9CiAgICAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmZvbnQpID0gZnM7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5Gb250SGVpZ2h0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udC0+
bWF4X2JvdW5kcy5hc2NlbnQpICsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250
LT5tYXhfYm91bmRzLmRlc2NlbnQpOwoKICAgIGlmICggKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpIDw9IDAgKSB7CiAgICAgICAgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpID0gX1htRm9udENhbGN1bGF0
ZUF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCgoV2lkZ2V0KXcsIGZzKTsKICAgIH0KfQoKc3RhdGljIHZv
aWQKRm9udEluaXRpYWxpemUoWG1UZXh0RmllbGRXaWRnZXQgdykKewoKCgogICAgaWYgKCEoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkpCiAgICB7CiAgICAgICAgV2lk
Z2V0IHBhcmVudCA9ICgoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50KTsKCiAgICAgICAgd2hp
bGUgKHBhcmVudCkKICAgICAgICB7CiAgICAgICAgICAgIGlmICgoKCgoX1htX2Zhc3RQdHIgPSAo
KCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkg
PT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl
bnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChY
bUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgo
KE9iamVjdCkocGFyZW50KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4
dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFz
dFB0ciktPmZsYWdzKVsoKFhtQlVMTEVUSU5fQk9BUkRfQklUKSA+PiAzKV0pICYgKDEgPDwgKChY
bUJVTExFVElOX0JPQVJEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkgfHwgWHRJc1N1YmNs
YXNzKHBhcmVudCwgdmVuZG9yU2hlbGxXaWRnZXRDbGFzcykpIHsKICAgICAgICAgICAgICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIlRGIEZvbnRJbml0
aWFsaXplOiBvdmVyd3JpdGluZyBGb250TGlzdFxuIik7CgogICAgICAgICAgICAgICAgWHRWYUdl
dFZhbHVlcyhwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKSZf
WG1TdHJpbmdzWzEwMDUyXSksICYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf
bGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApKTsKCiAgICAg
ICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkgPSBY
bUZvbnRMaXN0Q29weSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkp
OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250bGlz
dF9jcmVhdGVkKSA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgcGFyZW50ID0gKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LnBhcmVudCk7CiAg
ICAgICAgfQoKCgogICAgICAgIGlmICghKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5m
b250X2xpc3QpKQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5mb250X2xpc3QpID0gX1htR2V0RGVmYXVsdEZvbnRMaXN0KChXaWRnZXQpdywgWG1U
RVhUX0ZPTlRMSVNUKTsKCgogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmZvbnRsaXN0X2NyZWF0ZWQpID0gMTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7
CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udGxpc3RfY3JlYXRl
ZCkgPSAxOwogICAgfQoKICAgIEZvbnRTaXplKHcpOwp9CgpzdGF0aWMgdm9pZApDaGFuZ2VEcmF3
R0MoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgWEdDVmFsdWVzIHZhbHVlczsKICAgIFh0R0NN
YXNrIG1hc2ssIGR5bmFtaWMsIGRvbnRjYXJlOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmdjKSkgewoKCgogICAgICAgWEZyZWVHQygoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w
YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5nYykpOwoKICAgICB9CgoKCgoKICAgIG1hc2sgPSAoMUw8PDUpIHwgKDFMPDw0KSB8ICgx
TDw8OCkgfCAoMUw8PDIpIHwgKDFMPDwzKTsKICAgIGR5bmFtaWMgPSAoMUw8PDE5KSB8ICgxTDw8
MTcpIHwgKDFMPDwxOCkgfAogICAgICAgICgxTDw8MikgfCAoMUw8PDMpOwogICAgZG9udGNhcmUg
PSAwOwoKICAgIHZhbHVlcy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0g
MDsKICAgIHZhbHVlcy5maWxsX3N0eWxlID0gMDsKCgoKCgoKICAgIG1hc2sgfD0gKDFMPDwxNCk7
CiAgICB2YWx1ZXMuZm9udCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udCkt
PmZpZDsKCiAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSkt
PnByaW1pdGl2ZS5mb3JlZ3JvdW5kKTsKICAgIHZhbHVlcy5iYWNrZ3JvdW5kID0gKCgoV2lkZ2V0
KSh3KSktPmNvcmUuYmFja2dyb3VuZF9waXhlbCk7CiAgICB2YWx1ZXMuY2xpcF94X29yaWdpbiA9
IDA7CiAgICB2YWx1ZXMuY2xpcF95X29yaWdpbiA9IDA7CgogICAgICAgIGlmICghIHctPmNvcmUu
c2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICBTY3JlZW4gKnMgPSAoKCgoT2JqZWN0KSgoV2lk
Z2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdp
ZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuKTsKCiAgICAgICAgICAgICAgICBt
YXNrIHw9ICgxTDw8MTEpOwogICAgICAgICAgICAgICAgdmFsdWVzLmZpbGxfc3R5bGUgPSAyOwog
ICAgICAgICAgICAgICAgdmFsdWVzLnN0aXBwbGUgPSBYbUdldFBpeG1hcEJ5RGVwdGgocywgIjUw
X2ZvcmVncm91bmQiLCAxLCAwLCAxKTsKICAgICAgICB9CgoKCgoKICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZ2MpID0gWENyZWF0ZUdDKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0
KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVu
dC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5j
b3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwg
bWFzaywgJnZhbHVlcyk7CgogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXZl
X2ludmVydGVkX2ltYWdlX2djKSA9IDA7Cn0KCgpzdGF0aWMgdm9pZApHQ0luaXRpYWxpemUoWG1U
ZXh0RmllbGRXaWRnZXQgdykKewogICAgWEdDVmFsdWVzIHZhbHVlczsKICAgIFh0R0NNYXNrIG1h
c2ssIGR5bmFtaWMsIGRvbnRjYXJlOwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZ2MpID0gKCh2b2lkICopMCk7CiAgICBDaGFuZ2VEcmF3R0Modyk7CgoKCgoKICAgIHZhbHVl
cy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0gMDsKICAgIHZhbHVlcy5m
aWxsX3N0eWxlID0gMjsKICAgIHZhbHVlcy5mb3JlZ3JvdW5kID0gKCgoWG1QcmltaXRpdmVXaWRn
ZXQpKHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpOwogICAgdmFsdWVzLmJhY2tncm91bmQgPSAo
KChXaWRnZXQpKHcpKS0+Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKTsKICAgIG1hc2sgPSAoMUw8PDUp
IHwgKDFMPDw0KSB8ICgxTDw8OCkgfAogICAgICAgICgxTDw8MikgfCAoMUw8PDMpOwogICAgZHlu
YW1pYyA9ICgxTDw8MTIpIHwgKDFMPDwxMykgfCAoMUw8PDExKTsKICAgIGRvbnRjYXJlID0gMDsK
CgoKCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmltYWdlX2djKSA9IFhDcmVh
dGVHQygoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xh
c3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6
ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgo
KE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRl
ZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5v
YmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksIG1hc2ssICZ2YWx1ZXMpOwoKCgoKCgogICAgdmFs
dWVzLmxpbmVfc3R5bGUgPSAwOwogICAgdmFsdWVzLmxpbmVfd2lkdGggPSAwOwogICAgdmFsdWVz
LmZpbGxfc3R5bGUgPSAwOwogICAgdmFsdWVzLmZvcmVncm91bmQgPSAoKChXaWRnZXQpKHcpKS0+
Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKTsKICAgIHZhbHVlcy5iYWNrZ3JvdW5kID0gKCgoWG1Qcmlt
aXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpOwogICAgbWFzayA9ICgxTDw8
NSkgfCAoMUw8PDQpIHwgKDFMPDw4KSB8CiAgICAgICAgKDFMPDwyKSB8ICgxTDw8Myk7CgogICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zYXZlX2djKSA9IFh0R2V0R0MoKFdpZGdl
dCl3LCBtYXNrLCAmdmFsdWVzKTsKfQoKc3RhdGljIHZvaWQKR0NQaXhtYXAoWG1UZXh0RmllbGRX
aWRnZXQgdykKewogICAgc3RhdGljIGNoYXIgZG90c1tdID0KICAgIHsyLCAxLCAxfTsKICAgIEdD
IGdjOwogICAgaW50IHdpZHRoLCB3aWR0aF9lcmFzZSwgaGVpZ2h0OwogICAgRGlzcGxheSAqZGlz
cGxheTsKICAgIFhHQ1ZhbHVlcyB2YWx1ZXM7CiAgICBYdEdDTWFzayBtYXNrOwoKICAgIHZhbHVl
cy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0gMDsKICAgIHZhbHVlcy5m
aWxsX3N0eWxlID0gMDsKICAgIHZhbHVlcy5mb3JlZ3JvdW5kID0gMDsKICAgIHZhbHVlcy5iYWNr
Z3JvdW5kID0gMDsKCiAgICBkaXNwbGF5ID0gKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl
dCkoKFdpZGdldCl3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQp
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSk7CiAgICB3aWR0aCA9IDU7
CiAgICB3aWR0aF9lcmFzZSA9IDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv
bnQpLT5tYXhfYm91bmRzLndpZHRoOwogICAgaGVpZ2h0ID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5Gb250SGVpZ2h0KTsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5jdXJzb3IpKQogICAgewogICAgICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQp
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp
ID8gKChXaWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0
KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikpOwogICAgfQoKICAgICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAg
ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdGlwcGxlX3RpbGUpKQogICAg
ewogICAgICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChX
aWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+
b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnN0aXBwbGVfdGlsZSkpOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAgICBp
ZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pYmVhbV9vZmYpKQogICAgewogICAg
ICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQp
dykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0
LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmliZWFtX29mZikpOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuaWJlYW1fb2ZmKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LnJlZnJlc2hfaWJlYW1fb2ZmKSA9IDA7CgogICAgaWYgKGhlaWdo
dCA+IDApIHsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikg
PQogICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuKSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDEp
OwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0aXBwbGVfdGlsZSkg
PQogICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuKSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDEp
OwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZikgPQog
ICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5z
Y3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu
KSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoX2VyYXNlLCBoZWlnaHQs
IHctPmNvcmUuZGVwdGgpOwoKICAgICAgICB2YWx1ZXMubGluZV9zdHlsZSA9IDA7CiAgICAgICAg
dmFsdWVzLmxpbmVfd2lkdGggPSAwOwogICAgICAgIHZhbHVlcy5maWxsX3N0eWxlID0gMDsKICAg
ICAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9IDA7CiAgICAgICAgdmFsdWVzLmJhY2tncm91bmQgPSAw
OwogICAgICAgIG1hc2sgPSAoMUw8PDUpIHwgKDFMPDw0KSB8ICgxTDw8OCkgfAogICAgICAgICAg
ICAoMUw8PDIpIHwgKDFMPDwzKTsKICAgICAgICBnYyA9IFhDcmVhdGVHQyhkaXNwbGF5LCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvciksIG1hc2ssICZ2YWx1ZXMpOwoKICAg
ICAgICBYRmlsbFJlY3RhbmdsZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmN1cnNvciksIGdjLAogICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWln
aHQpOwogICAgICAgIFhGaWxsUmVjdGFuZ2xlKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSwgZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgd2lkdGgsIGhlaWdodCk7CgogICAgICAgIFhTZXRGb3JlZ3JvdW5kKGRpc3BsYXksIGdjLCAx
KTsKICAgICAgICBYRHJhd0xpbmUoZGlzcGxheSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5jdXJzb3IpLCBnYywKICAgICAgICAgICAgICAgICAgMiwgMSwgMiwgaGVpZ2h0IC0gMik7
CiAgICAgICAgWERyYXdMaW5lKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuY3Vyc29yKSwgZ2MsCiAgICAgICAgICAgICAgICAgIDAsIDAsIDQsIDApOwogICAgICAgIFhE
cmF3TGluZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvciks
IGdjLAogICAgICAgICAgICAgICAgICAwLCBoZWlnaHQgLSAxLCA0LCBoZWlnaHQgLSAxKTsKCiAg
ICAgICAgWFNldExpbmVBdHRyaWJ1dGVzKGRpc3BsYXksIGdjLCAwLCAxLCAyLCAxKTsKICAgICAg
ICBYU2V0RGFzaGVzKGRpc3BsYXksIGdjLCAwLCAmZG90c1sxXSwgKGludClkb3RzWzBdKTsKICAg
ICAgICBYRHJhd0xpbmUoZGlzcGxheSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z
dGlwcGxlX3RpbGUpLCBnYywKICAgICAgICAgICAgICAgICAgMiwgMSwgMiwgaGVpZ2h0IC0gMik7
CiAgICAgICAgWERyYXdMaW5lKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuc3RpcHBsZV90aWxlKSwgZ2MsCiAgICAgICAgICAgICAgICAgIDEsIDAsIDMsIDApOwogICAg
ICAgIFhEcmF3TGluZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
aXBwbGVfdGlsZSksIGdjLAogICAgICAgICAgICAgICAgICAxLCBoZWlnaHQgLSAxLCAzLCBoZWln
aHQgLSAxKTsKCiAgICAgICAgWEZyZWVHQyhkaXNwbGF5LCBnYyk7CiAgICB9Cn0KCnN0YXRpYyB2
b2lkCkdDQ2xpcChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICAgICAgWFJlY3RhbmdsZSBjbGlw
OwogICAgICAgIERpbWVuc2lvbiBidywgYmg7CgogICAgICAgIGJ3ID0gKCgoWG1QcmltaXRpdmVX
aWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsgKCgoWG1QcmltaXRpdmVX
aWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpCiAgICAgICAgICAgICAg
ICArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX3dpZHRoKTsKICAgICAg
ICBiaCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tu
ZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhp
Y2tuZXNzKSArCiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
Lm1hcmdpbl9oZWlnaHQpOwogICAgICAgIGNsaXAueCA9IDA7CiAgICAgICAgY2xpcC55ID0gMDsK
ICAgICAgICBjbGlwLndpZHRoID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJn
aW5fYm90dG9tKTsKICAgICAgICBjbGlwLmhlaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWFyZ2luX3RvcCk7CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdywgIkdDQ2xpcCglZCwlZClcbiIsICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQubWFyZ2luX3RvcCkpOwogICAgICAgIHsKCiAgICAgICAgICAgICAgICBYU2V0Q2xpcFJl
Y3RhbmdsZXMoKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNv
cmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNv
cmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Z2MpLAogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhE
cmF3KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksICZjbGlwLCAxLCAwKTsKICAg
ICAgICB9CgogICAgICAgIEdDUGl4bWFwKHcpOwogICAgICAgIEN1cnNvclNldCh3LCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lmhhc19mb2N1cykpOwp9CgpzdGF0aWMgdm9pZApTaXpl
UmVjYWxjKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgICAgICBEaW1lbnNpb24gYncsIGJoOwoK
ICAgICAgICBidyA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3df
dGhpY2tuZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGln
aHRfdGhpY2tuZXNzKQogICAgICAgICAgICAgICAgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0Lm1hcmdpbl93aWR0aCk7CiAgICAgICAgYmggPSAoKChYbVByaW1pdGl2ZVdpZGdldCko
dykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKyAoKChYbVByaW1pdGl2ZVdpZGdldCko
dykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5faGVpZ2h0KTsKCiAgICAgICAgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKSA9ICgoKFdpZGdldCko
dykpLT5jb3JlLndpZHRoKSAtIDIgKiBidzsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPlhEcmF3KSA9IGJ3OwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNp
b24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcp
ID0gYmg7CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFy
dExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRl
bnNpb24pKS0+WU9mZnNldCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSArICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udC0+bWF4X2JvdW5kcy5hc2NlbnQpOwog
ICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9w
KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+Rm9udEhlaWdodCk7CiAgICAgICAgfQoKICAg
ICAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdykgKyAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApID4gKCgoV2lkZ2V0KSh3KSktPmNvcmUuaGVp
Z2h0KQogICAgICAgICAgICAgICAgICAgICAgICAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSkt
PnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3
KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSkgewogICAgICAgICAgICAgICAgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSA9ICgoKFdpZGdldCkodykpLT5j
b3JlLmhlaWdodCkgLSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSAtCiAgICAgICAg
ICAgICAgICAgICAgICAgICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdo
bGlnaHRfdGhpY2tuZXNzKSAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5z
aGFkb3dfdGhpY2tuZXNzKTsKICAgICAgICB9CiAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAg
ICBpZiAoKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KSkKICAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSA9ICgo
KChXaWRnZXQpKHcpKS0+Y29yZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNr
bmVzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkpIC8gKGludClfWG1UZXh0Rl9Gb250TWF4
V2lkdGgoKFdpZGdldCl3KTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuYXZlcmFnZV9jaGFyX3dpZHRoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSA9ICgoKChXaWRn
ZXQpKHcpKS0+Y29yZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIg
KiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkpIC8gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpOwoKICAgICAgICB9CgogICAgICAgIF9MdERlYnVnKCIu
Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIlNpemVSZWNhbGMgc2l6ZSAlZCAl
ZCAtPiBvZmZzZXQgJWQsJWQgdmlldyBkaW0gJWQgJWQgY29scyAlZFxuIiwgKCgoV2lkZ2V0KSh3
KSktPmNvcmUud2lkdGgpLCAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpLCAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZz
ZXQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pLCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApLCAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmNvbHVtbnMpKTsKCgoKCgp9CgpzdGF0aWMgdm9pZApUZXh0Rl9Jbml0
aWFsaXNlSGlnaGxpZ2h0KFdpZGdldCB3KQp7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3QgPSAoX1htSGlnaGxpZ2h0UmVjICopWHRDYWxsb2Mo
OCwgc2l6ZW9mKF9YbUhpZ2hsaWdodFJlYykpOwogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtID0gODsKICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyID0gMjsKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFswXS5wb3NpdGlvbiA9IDA7
CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3Rb
MF0ubW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsxXS5wb3NpdGlvbiA9IDIxNDc0ODM2NDc7CiAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbMV0u
bW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQucHJpbV9wb3NfcmlnaHQpID0gLTE7Cn0KCgoKCgpzdGF0aWMgdm9pZApjbGFzc19pbml0aWFs
aXplKHZvaWQpCnsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoKHZv
aWQgKikwKSwgIlhtVGV4dEZpZWxkIGNsYXNzX2luaXRpYWxpemVcbiIpOwogICAgdGZfZXZudDJf
dHJhbnM9WHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoX1htVGV4dEZfRXZlbnRCaW5kaW5nczIpOwog
ICAgdGZfZXZudDNfdHJhbnM9WHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoX1htVGV4dEZfRXZlbnRC
aW5kaW5nczMpOwp9CgoKc3RhdGljIHZvaWQKY2xhc3NfcGFydF9pbml0aWFsaXplKFdpZGdldENs
YXNzIHdpZGdldF9jbGFzcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j
IiwgKCh2b2lkICopMCksICJYbVRleHRGaWVsZCBjbGFzc19wYXJ0X2luaXRpYWxpemVcbiIpOwog
ICAgeyBpZiAoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNz
KSh3aWRnZXRfY2xhc3MpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNs
YXNzRXh0KSgoKFdpZGdldENsYXNzKSh3aWRnZXRfY2xhc3MpKS0+Y29yZV9jbGFzcy5leHRlbnNp
b24pKSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYo
KChXaWRnZXRDbGFzcykod2lkZ2V0X2NsYXNzKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDog
KChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xh
c3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKHdpZGdldF9jbGFzcykp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikp
ICgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3NbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0gfD0gKDEg
PDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSkgOyB9Owp9CgoKc3RhdGljIHZvaWQKaW5p
dGlhbGl6ZShXaWRnZXQgcmVxdWVzdCwgV2lkZ2V0IHRuZXcsIEFyZ0xpc3QgYXJncywgQ2FyZGlu
YWwgKm51bSkKewogICAgICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRn
ZXQpdG5ldzsKICAgICAgICBBdG9tIGltcG9ydF90YXJnZXRbM107CiAgICAgICAgQXJnIGRzX2Fy
Z3NbNl07CiAgICAgICAgaW50IG4gPSAwOwogICAgICAgIGNoYXIgKnRlbXA7CgogICAgICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIHRuZXcsICJpbml0aWFsaXplIDogJWkg
YXJnc1xuIiAiXHRyZXF1ZXN0IFggJTVpIFkgJTVpIFcgJTVpIEggJTVpXG4iICJcdCAgbmV3X3cg
WCAlNWkgWSAlNWkgVyAlNWkgSCAlNWlcbiIsICpudW0sICgoKFdpZGdldCkocmVxdWVzdCkpLT5j
b3JlLngpLCAoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS55KSwgKCgoV2lkZ2V0KShyZXF1ZXN0
KSktPmNvcmUud2lkdGgpLCAoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS5oZWlnaHQpLCAoKChX
aWRnZXQpKHRuZXcpKS0+Y29yZS54KSwgKCgoV2lkZ2V0KSh0bmV3KSktPmNvcmUueSksICgoKFdp
ZGdldCkodG5ldykpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KSh0bmV3KSktPmNvcmUuaGVpZ2h0
KSk7CiAgICAgICAgX0x0RGVidWdQcmludEFyZ0xpc3QoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j
IiwgdG5ldywgYXJncywgKm51bSwgMCk7CgoKCiAgICAgICAgWHRBdWdtZW50VHJhbnNsYXRpb25z
KChXaWRnZXQpdyx0Zl9ldm50Ml90cmFucyk7CiAgICAgICAgWHRBdWdtZW50VHJhbnNsYXRpb25z
KChXaWRnZXQpdyx0Zl9ldm50M190cmFucyk7CgoKICAgICAgICB3LT50ZXh0LmV4dGVuc2lvbiA9
CiAgICAgICAgICAgICAgICAoWHRQb2ludGVyKVh0TWFsbG9jKHNpemVvZihYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uKSk7CgoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlm
RXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSkt
PlNlbGVjdGlvblRleHQpID0gKCh2b2lkICopMCk7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5UZXh0V2lkdGgpID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lk
dGgpID0gMDsKCgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv
bnRfbGlzdCkpIHsKICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZmwgPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkgPSBYbUZvbnRMaXN0Q29weSgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkpOwogICAgICAgIH0KICAgICAgICBG
b250SW5pdGlhbGl6ZSh3KTsKCiAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpKQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5zdHJpbmdfbGVuZ3RoKSA9IHN0cmxlbigoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnZhbHVlKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSA9IDA7CgogICAgICAgICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuc2l6ZV9hbGxvY2QpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSArIDI1NjsKCiAgICAgICAgdGVtcCA9IChjaGFyICop
WHRNYWxsb2MoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zaXplX2FsbG9jZCkpOwog
ICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSkKICAgICAg
ICAgICAgICAgIHN0cmNweSh0ZW1wLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh
bHVlKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc3RyY3B5KHRlbXAsICIiKTsKICAg
ICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSA9IHRlbXA7CgogICAg
ICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZf
Rm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
dmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsK
CgogICAgICAgIGlmICgoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS53aWR0aCkgPT0gKERpbWVu
c2lvbikwKSB7CiAgICAgICAgICAgICAgICB7CgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRoKSA9ICgyICogKCgoWG1QcmltaXRpdmVXaWRnZXQp
KHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hs
aWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpICsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmNvbHVt
bnMpICogKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KSk7CgogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB7CgoKCgoKCiAgICAgICAg
ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY29sdW1ucykg
PSAoKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lkdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLSAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190
aGlja25lc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAyICogKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpKSAvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KTsKCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoV2lkZ2V0KShyZXF1ZXN0
KSktPmNvcmUuaGVpZ2h0KSA9PSAoRGltZW5zaW9uKTApIHsKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUuaGVpZ2h0KSA9ICgyICog
KCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQp
KHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyICogKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5f
aGVpZ2h0KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5Gb250SGVpZ2h0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICBTaXplUmVjYWxjKHcpOwoKCiAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+IDApIHsKICAgICAgICAgICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9IDA7CiAgICAgICAgfQoKICAgICAg
ICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclgpID0gLTE7CiAgICAgICAgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gLTE7CgogICAgICAgICgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQubGlzdD0oX1htSGlnaGxpZ2h0UmVj
KilYdE1hbGxvYyhzaXplb2YoX1htSGlnaGxpZ2h0UmVjKSk7CiAgICAgICAgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQubGlzdC0+bW9kZSkgPSBYbUhJR0hMSUdIVF9O
T1JNQUw7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRIaWdobGlnaHRTdGFy
dCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodEVuZCkgPSAtMTsKICAg
ICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5PbGRYT2Zmc2V0KSA9IDA7CgoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnRpbWVyX2lkKSA9IChYdEludGVydmFsSWQpMDsKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNlbGVjdF9pZCkgPSAoWHRJbnRlcnZhbElkKTA7Cgog
ICAgICAgIHctPnRleHQubGFzdF90aW1lID0gKFRpbWUpMDsKCiAgICAgICAgdy0+dGV4dC5zYXJy
YXlfaW5kZXggPSAwOwoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pID0g
MTsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2VsZWN0aW9uKSA9IDE7
CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXNfZm9jdXMpID0gMDsK
CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yKSA9IChQaXht
YXApKCh2b2lkICopMCk7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z
dGlwcGxlX3RpbGUpID0gKFBpeG1hcCkoKHZvaWQgKikwKTsKICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZikgPSAoUGl4bWFwKSgodm9pZCAqKTApOwoKCiAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5nYykgPSAoKHZvaWQgKikwKTsK
CgogICAgICAgIGltcG9ydF90YXJnZXRbMF0gPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodG5l
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp
ID8gKChXaWRnZXQpKHRuZXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodG5l
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJDT01QT1VORF9URVhU
IiwgMCk7CiAgICAgICAgaW1wb3J0X3RhcmdldFsxXSA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0
KSh0bmV3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodG5ldykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0
KSh0bmV3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIlRFWFQiLCAw
KTsKICAgICAgICBpbXBvcnRfdGFyZ2V0WzJdID0gKChBdG9tKSAzMSk7CiAgICAgICAgKCh2b2lk
KSggKGRzX2FyZ3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNzIxMF0pKSwgKGRz
X2FyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShpbXBvcnRfdGFyZ2V0KSApKTsgbisrOwogICAg
ICAgICgodm9pZCkoIChkc19hcmdzW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzg0
NzldKSksIChkc19hcmdzW25dKS52YWx1ZSA9IChYdEFyZ1ZhbCkoMykgKSk7IG4rKzsKICAgICAg
ICAoKHZvaWQpKCAoZHNfYXJnc1tuXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5nc1s2NDg4
XSkpLCAoZHNfYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdWYWwpKCgxTCA8PCAxKXwoMUwgPDwgMCkp
ICkpOyBuKys7CiAgICAgICAgKCh2b2lkKSggKGRzX2FyZ3Nbbl0pLm5hbWUgPSAoKChjaGFyICop
Jl9YbVN0cmluZ3NbNjM4Ml0pKSwgKGRzX2FyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShwcm9j
ZXNzX2Ryb3ApICkpOyBuKys7CgogICAgICAgIFhtRHJvcFNpdGVSZWdpc3Rlcih0bmV3LCBkc19h
cmdzLCBuKTsKCiAgICAgICAgVGV4dEZfSW5pdGlhbGlzZUhpZ2hsaWdodCh0bmV3KTsKICAgICAg
ICB3LT50ZXh0Lm1heF9jaGFyX3NpemUgPSAxOwp9CgoKc3RhdGljIHZvaWQKcmVhbGl6ZShXaWRn
ZXQgYXcsIFh0VmFsdWVNYXNrICp2YWx1ZV9tYXNrLCBYU2V0V2luZG93QXR0cmlidXRlcyAqYXR0
cmlidXRlcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClh
dzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJy
ZWFsaXplXG4iKTsKCgogICAgKCooJnhtUHJpbWl0aXZlQ2xhc3NSZWMpLT5jb3JlX2NsYXNzLnJl
YWxpemUpIChhdywgdmFsdWVfbWFzaywgYXR0cmlidXRlcyk7CgoKICAgIEdDSW5pdGlhbGl6ZSh3
KTsKICAgIEdDQ2xpcCh3KTsKICAgIEN1cnNvckRyYXcodyk7CgogICAgX1htVGV4dEZpZWxkU2V0
RWRpdGFibGUoYXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZWRpdGFibGUpKTsK
fQoKCnN0YXRpYyB2b2lkCmRlc3Ryb3koV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv
WG0vVGV4dEYuYyIsIGF3LCAiZGVzdHJveSIpOwoKCgoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSkKICAgIHsKICAgICAgICBYdFJlbW92ZVRpbWVP
dXQoKCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSk7CiAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSA9IDA7CiAgICB9Cgog
ICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KShhdykpLT50ZXh0LnRpbWVyX2lkKSkKICAgIHsK
ICAgICAgICBYdFJlbW92ZVRpbWVPdXQoKCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQu
dGltZXJfaWQpKTsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkoYXcpKS0+dGV4dC50aW1l
cl9pZCkgPSAwOwogICAgfQogICAgaWYoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpIHsK
ICAgICAgIFhGcmVlR0MoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4t
PmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlz
cGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpKTsKICAgICAgIFhGcmVl
R0MoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAo
KE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2VfZ2MpKTsKICAgIH0KCiAgICBYdFJlbGVh
c2VHQygoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc2F2ZV9nYykp
OwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRsaXN0X2NyZWF0
ZWQpKSB7CiAgICAgICAgWG1Gb250TGlzdEZyZWUoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5mb250X2xpc3QpKTsKICAgIH0KCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5TZWxlY3Rpb25UZXh0KSkgewogICAgICAgIFh0RnJlZSgoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPlNlbGVjdGlvblRleHQpKTsKICAgIH0KCiAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC52YWx1ZSkpOwoKCgoKCiAgICBYdEZyZWUoKGNoYXIgKil3LT50ZXh0LmV4
dGVuc2lvbik7CiAgICBYdFVuaW5zdGFsbFRyYW5zbGF0aW9ucyhhdyk7CiAgICBYdEZyZWUoKGNo
YXIgKikoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0Lmxpc3QpOwoKCgoK
fQoKCnN0YXRpYyB2b2lkCmV4cG9zZShXaWRnZXQgYXcsIFhFdmVudCAqZXZlbnQsIFJlZ2lvbiBy
ZWdpb24pCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7
CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJleHBvc2VcbiIp
OwoKICAgIGlmICghKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRvdyA6
ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpIHsKICAgICAgICBy
ZXR1cm47CiAgICB9CgoKCgogICAgaWYgKGV2ZW50LT54ZXhwb3NlLmNvdW50ICE9IDApIHJldHVy
bjsKCgogICAgQ3Vyc29yRXJhc2Uodyk7CiAgICBEcmF3QWxsKHcpOwoKICAgIF9YbURyYXdTaGFk
b3dzKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDog
KChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLAogICAg
ICAgICAgICAgICAgICAgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAg
ICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUudG9wX3NoYWRvd19H
QyksCiAgICAgICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRp
dmUuYm90dG9tX3NoYWRvd19HQyksCiAgICAgICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdp
ZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksICgoKFhtUHJpbWl0aXZl
V2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSwKICAgICAgICAgICAg
ICAgICAgICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRoKSAtIDIgKiAoKChYbVByaW1pdGl2ZVdp
ZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAg
ICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpIC0gMiAqICgoKFhtUHJpbWl0aXZlV2lk
Z2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSwKICAgICAgICAgICAgICAg
ICAgICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNz
KSwKICAgICAgICAgICAgICAgICAgIFhtU0hBRE9XX0lOKTsKICAgIGlmICgoKChYbVByaW1pdGl2
ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0ZWQpKSB7CiAgICAgICAgKCooKChYbVBy
aW1pdGl2ZUNsYXNzUmVjICopKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkp
LT5wcmltaXRpdmVfY2xhc3MuYm9yZGVyX2hpZ2hsaWdodCkpIChhdyk7CiAgICB9IGVsc2Ugewog
ICAgICAgICgqKCgoWG1QcmltaXRpdmVDbGFzc1JlYyAqKSgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKS0+cHJpbWl0aXZlX2NsYXNzLmJvcmRlcl91bmhpZ2hsaWdodCkpIChh
dyk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApyZXNpemUoV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRG
aWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9MdERlYnVnKCIuLi8u
Li8uLi9saWIvWG0vVGV4dEYuYyIsIGF3LCAicmVzaXplID0+IHdpZCAlZCBodCAlZFxuIiwgKCgo
V2lkZ2V0KShhdykpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KShhdykpLT5jb3JlLmhlaWdodCkp
OwoKCiAgICBTaXplUmVjYWxjKHcpOwoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5nYykpIHsKICAgICAgICBHQ0NsaXAodyk7CiAgICB9CgogICAgaWYgKCgoKChPYmpl
Y3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkoYXcpKS0+b2Jq
ZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpKSB7CiAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcodyk7
CiAgICB9Cn0KCgpzdGF0aWMgQm9vbGVhbgpzZXRfdmFsdWVzKFdpZGdldCBjdXJyZW50LCBXaWRn
ZXQgcmVxdWVzdCwgV2lkZ2V0IHJlcGx5LAogICAgICAgICAgIEFyZ0xpc3QgYXJncywgQ2FyZGlu
YWwgKm5hcmdzKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0
KWN1cnJlbnQ7CiAgICBYbVRleHRGaWVsZFdpZGdldCBuZXdfdyA9IChYbVRleHRGaWVsZFdpZGdl
dClyZXBseTsKICAgIEJvb2xlYW4gcmVkcmF3ID0gMDsKICAgIGludCBhdmVfd2lkdGg7CgogICAg
X0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgcmVwbHksICJzZXRfdmFsdWVzOiAl
aSBhcmdzXG4iICJcdCAgICBvbGQgWCAlNWkgWSAlNWkgVyAlNWkgSCAlNWlcbiIgIlx0cmVxdWVz
dCBYICU1aSBZICU1aSBXICU1aSBIICU1aVxuIiAiXHQgIG5ld193IFggJTVpIFkgJTVpIFcgJTVp
IEggJTVpXG4iLCAqbmFyZ3MsICgoKFdpZGdldCkoY3VycmVudCkpLT5jb3JlLngpLCAoKChXaWRn
ZXQpKGN1cnJlbnQpKS0+Y29yZS55KSwgKCgoV2lkZ2V0KShjdXJyZW50KSktPmNvcmUud2lkdGgp
LCAoKChXaWRnZXQpKGN1cnJlbnQpKS0+Y29yZS5oZWlnaHQpLCAoKChXaWRnZXQpKHJlcXVlc3Qp
KS0+Y29yZS54KSwgKCgoV2lkZ2V0KShyZXF1ZXN0KSktPmNvcmUueSksICgoKFdpZGdldCkocmVx
dWVzdCkpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KShyZXF1ZXN0KSktPmNvcmUuaGVpZ2h0KSwg
KCgoV2lkZ2V0KShyZXBseSkpLT5jb3JlLngpLCAoKChXaWRnZXQpKHJlcGx5KSktPmNvcmUueSks
ICgoKFdpZGdldCkocmVwbHkpKS0+Y29yZS53aWR0aCksICgoKFdpZGdldCkocmVwbHkpKS0+Y29y
ZS5oZWlnaHQpKTsKICAgIF9MdERlYnVnUHJpbnRBcmdMaXN0KCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIHJlcGx5LCBhcmdzLCAqbmFyZ3MsIDApOwoKICAgICAgICBpZiAobmV3X3ctPmNvcmUu
c2Vuc2l0aXZlICE9IHctPmNvcmUuc2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICBYR0NWYWx1
ZXMgdjsKICAgICAgICAgICAgICAgIGludCBtOwoKICAgICAgICAgICAgICAgIGlmICghIG5ld193
LT5jb3JlLnNlbnNpdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBtID0gKDFMPDw4KSB8
ICgxTDw8MTEpOwogICAgICAgICAgICAgICAgICAgICAgICB2LmZpbGxfc3R5bGUgPSAyOwogICAg
ICAgICAgICAgICAgICAgICAgICB2LnN0aXBwbGUgPSBYbUdldFBpeG1hcEJ5RGVwdGgoKCgoKE9i
amVjdCkobmV3X3cpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0
ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShuZXdfdykpLT5jb3JlLnNjcmVlbiA6ICgoT2JqZWN0KShu
ZXdfdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbiksICI1MF9mb3JlZ3JvdW5kIiwgMSwg
MCwgMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBt
ID0gKDFMPDw4KTsKICAgICAgICAgICAgICAgICAgICAgICAgdi5maWxsX3N0eWxlID0gMDsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoKCgoKE9iamVjdCkobmV3X3cpKS0+
b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgo
V2lkZ2V0KShuZXdfdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qu
cGFyZW50LT5jb3JlLndpbmRvdykpCiAgICAgICAgICAgICAgICAgICAgICAgIFhDaGFuZ2VHQygo
KCgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKG5ld193KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5
IDogKChPYmplY3QpKG5ld193KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5
KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZ2MpLCBtLCAmdik7CiAgICAg
ICAgICAgICAgICByZWRyYXcgPSAxOwogICAgICAgIH0KCgoKCgogICAgICAgIGlmICgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVj
dC5wYXJlbnQtPmNvcmUud2luZG93KSAmJiAoKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJp
bWl0aXZlLmZvcmVncm91bmQpICE9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KShuZXdfdykpLT5wcmlt
aXRpdmUuZm9yZWdyb3VuZCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdl
dCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4ZWwpICE9ICgoKFdpZGdldCkobmV3X3cpKS0+Y29y
ZS5iYWNrZ3JvdW5kX3BpeGVsKSkpIHsKCgoKCiAgICAgICAgICAgICAgICBYRnJlZUdDKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmdjKSk7CiAgICAgICAgICAgICAgICBYRnJlZUdDKCgoKChPYmpl
Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcp
KS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmltYWdlX2djKSk7CgogICAgICAgICAgICAgICAgWHRSZWxlYXNlR0Mo
KFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNhdmVfZ2MpKTsKCiAg
ICAgICAgICAgICAgICBHQ0luaXRpYWxpemUobmV3X3cpOwogICAgICAgICAgICAgICAgR0NDbGlw
KG5ld193KTsKCiAgICAgICAgICAgICAgICByZWRyYXcgPSAxOwogICAgICAgIH0KCiAgICAgICAg
aWYgKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgIT0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSkgfHwK
ICAgICAgICAgICAgICAgICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbl92aXNpYmxlKSAhPSAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb25fdmlzaWJsZSkpKSB7CiAgICAgICAgICAgICAgICByZWRyYXcgPSAxOwog
ICAgICAgIH0KICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1
ZSkgIT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQudmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICBYbUFueUNhbGxiYWNrU3RydWN0IHZjX2NiczsKICAgICAgICAgICAgICAgIGNo
YXIgKnRlbXA7CgogICAgICAgICAgICAgICAgcmVkcmF3ID0gMTsKCgogICAgICAgICAgICAgICAg
dGVtcCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KShuZXdfdykpLT50ZXh0LnZhbHVlKTsKCgogICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQudmFsdWUpID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSk7CgoKICAgICAgICAgICAgICAg
IFRleHRTZXQobmV3X3csIHRlbXApOwoKICAgICAgICAgICAgICAgIFRleHRGX0luaXRpYWxpc2VI
aWdobGlnaHQoKFdpZGdldCluZXdfdyk7CgogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKG5ld193KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9IDA7CgogICAgICAgICAgICAg
ICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KShuZXdfdykpLT50ZXh0LnZhbHVlX2NoYW5nZWRf
Y2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZjX2Nicy5yZWFzb24gPSBYbUNS
X1ZBTFVFX0NIQU5HRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZjX2Nicy5ldmVudCA9ICgo
dm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdl
dCluZXdfdywgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwgJnZjX2Nicyk7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0
Ri5jIiwgcmVwbHksICJzZXRfdmFsdWVzOiAlc1xuIiwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5l
d193KSktPnRleHQudmFsdWUpKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJsZSkgIT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5l
d193KSktPnRleHQuZWRpdGFibGUpKSB7CiAgICAgICAgICAgICAgICBfWG1UZXh0RmllbGRTZXRF
ZGl0YWJsZSgoV2lkZ2V0KW5ld193LCAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4
dC5lZGl0YWJsZSkpOwogICAgICAgICAgICAgICAgcmVkcmF3ID0gMTsKICAgICAgICB9CgoKCgoK
CgogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIGF2ZV93aWR0aCA9IChpbnQpX1htVGV4dEZf
Rm9udE1heFdpZHRoKChXaWRnZXQpdyk7CgogICAgICAgIH0KCiAgICAgICAgaWYgKCgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KSAhPSAoKChYbVRleHRGaWVsZFdpZGdl
dCkobmV3X3cpKS0+dGV4dC5mb250X2xpc3QpKSB7CgoKCiAgICAgICAgICAgICAgICBpZiAoKCgo
WG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZm9udF9saXN0KSA9PSAoKHZvaWQgKikw
KSkgewogICAgICAgICAgICAgICAgICAgICAgICBGb250SW5pdGlhbGl6ZShuZXdfdyk7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250bGlzdF9jcmVhdGVkKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RnJlZSgoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmZvbnRfbGlzdCkpOwogICAgICAgICAgICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4v
Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KW5ld193LCAiVEYgU2V0VmFsdWVzOiBjb3B5
aW5nIEZvbnRMaXN0XG4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KShuZXdfdykpLT50ZXh0LmZvbnRfbGlzdCkgPSBYbUZvbnRMaXN0Q29weSgoKChYbVRl
eHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5mb250X2xpc3QpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZm9udGxpc3RfY3Jl
YXRlZCkgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEZvbnRTaXplKG5l
d193KTsKCgoKCgogICAgICAgIGlmICgoKCgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKG5ld193
KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKG5ld193KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
d2luZG93KSkgewogICAgICAgICAgICAgICAgQ2hhbmdlRHJhd0dDKG5ld193KTsKICAgICAgICB9
CgogICAgICAgIHJlZHJhdyA9IDE7CgoKICAgICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS53aWR0
aCkgPSAoMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhp
Y2tuZXNzKSArCiAgICAgICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+
cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgIDIgKiAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkgKwogICAgICAgICAgICAg
ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSAqIGF2ZV93aWR0aCk7
CiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5j
b2x1bW5zKSAhPSAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5jb2x1bW5zKSkg
ewogICAgICAgICAgICAgICAgKCgoV2lkZ2V0KShuZXdfdykpLT5jb3JlLndpZHRoKSA9ICgyICog
KCgoWG1QcmltaXRpdmVXaWRnZXQpKG5ld193KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNz
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KShu
ZXdfdykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAg
ICAgICAgICAgIDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5tYXJnaW5f
d2lkdGgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
bmV3X3cpKS0+dGV4dC5jb2x1bW5zKSAqIGF2ZV93aWR0aCk7CiAgICAgICAgICAgICAgICAoKChX
aWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpID0gKDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykp
LT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAgICAgICAgICAy
ICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25l
c3MpICsKICAgICAgICAgICAgICAgICAgICAgICAgMiAqICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWFyZ2luX2hlaWdodCkgKwogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPkZvbnRIZWlnaHQpKTsKICAgICAgICB9CgogICAgICAgIHJldHVy
biByZWRyYXc7Cn0KCgpzdGF0aWMgWHRHZW9tZXRyeVJlc3VsdApxdWVyeV9nZW9tZXRyeShXaWRn
ZXQgYXcsIFh0V2lkZ2V0R2VvbWV0cnkgKnByb3Bvc2VkLCBYdFdpZGdldEdlb21ldHJ5ICphbnN3
ZXIpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAg
ICBYdFdpZGdldEdlb21ldHJ5IGE7CgogICAgaWYgKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3
KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5k
b3cpKSB7CiAgICAgICAgYS5yZXF1ZXN0X21vZGUgPSAoMTw8MikgfCAoMTw8Myk7CiAgICAgICAg
YS53aWR0aCA9ICgyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRv
d190aGlja25lc3MpICsgMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5o
aWdobGlnaHRfdGhpY2tuZXNzKSArCiAgICAgICAgICAgICAgICAgICAyICogKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpICsKICAgICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY29sdW1ucykgKiAoaW50KV9YbVRleHRGX0Zv
bnRNYXhXaWR0aCgoV2lkZ2V0KXcpKTsKCiAgICAgICAgYS5oZWlnaHQgPSAoMiAqICgoKFhtUHJp
bWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSArIDIgKiAoKChY
bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwog
ICAgICAgICAgICAgICAgICAgIDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h
cmdpbl9oZWlnaHQpICsKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmZvbnQpLT5tYXhfYm91bmRzLmFzY2VudCArCiAgICAgICAgICAgICAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250KS0+bWF4X2JvdW5kcy5kZXNjZW50
KTsKCgogICAgICAgICphbnN3ZXIgPSBhOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGFu
c3dlci0+d2lkdGggPSAoKChXaWRnZXQpKGF3KSktPmNvcmUud2lkdGgpOwogICAgICAgIGFuc3dl
ci0+aGVpZ2h0ID0gKCgoV2lkZ2V0KShhdykpLT5jb3JlLmhlaWdodCk7CiAgICB9CgogICAgcmV0
dXJuIF9YbUdNUmVwbHlUb1F1ZXJ5R2VvbWV0cnkoYXcsIHByb3Bvc2VkLCBhbnN3ZXIpOwp9CgoK
CgoKc3RhdGljIHZvaWQKVGV4dFNldChYbVRleHRGaWVsZFdpZGdldCB3LCBjaGFyICpzKQp7CiAg
ICBpbnQgbGVuOwoKICAgIGlmIChzKQogICAgewogICAgICAgIGxlbiA9IHN0cmxlbihzKTsKICAg
ICAgICBpZiAobGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zaXplX2FsbG9j
ZCkpCiAgICAgICAgewogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnNpemVfYWxsb2NkKSArPSBsZW47CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQudmFsdWUpID0gWHRSZWFsbG9jKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNpemVfYWxsb2NkKSk7
CiAgICAgICAgfQoKICAgICAgICBzdHJjcHkoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC52YWx1ZSksIHMpOwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpID0gbGVuOwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4
dFdpZHRoKSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSA9CiAgICAg
ICAgICAgIChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnN0cmluZ19sZW5ndGgpKTsKCiAgICAgICAgaWYgKCgoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0Lm1heF9sZW5ndGgpID4gMCkgJiYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuc3RyaW5nX2xlbmd0aCkgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h
eF9sZW5ndGgpKSkKICAgICAgICB7CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWF4X2xlbmd0aCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpOwogICAgICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2b2lkClRleHREZWxldGUo
WG1UZXh0RmllbGRXaWRnZXQgdywgaW50IHN0YXJ0LCBpbnQgbGVuKQp7CiAgICBpbnQgaTsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJUZXh0RGVs
ZXRlKGZyb20gJWQgbGVuICVkKVxuIiwgc3RhcnQsIGxlbik7CgoKICAgIGlmIChsZW4gPiAwKQog
ICAgewogICAgICAgIGZvciAoaSA9IHN0YXJ0ICsgbGVuOyBpIDwgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbaSAtIGxlbl0gPSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtpXTsKICAgICAgICB9CgogICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkgLT0gbGVuOwogICAg
ICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZf
Rm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
dmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsK
CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKV0gPSAwOwogICAgfQp9CgoKCgpz
dGF0aWMgQm9vbGVhbgpUZXh0SW5zZXJ0KFhtVGV4dEZpZWxkV2lkZ2V0IHcsIGNoYXIgKmJ1Ziwg
aW50IGxlbikKewogICAgaW50IGk7CiAgICBCb29sZWFuIGZhc3RfaW5zZXJ0OwoKICAgIGZhc3Rf
aW5zZXJ0ID0gMTsKICAgIGlmIChsZW4gPiAwKQogICAgewogICAgICAgIGlmICgoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpICsgbGVuID4gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXhfbGVuZ3RoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZl
cmlmeUJlbGwodyk7CiAgICAgICAgICAgIGZhc3RfaW5zZXJ0ID0gMDsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPj0gMCkgewogICAgICAgICAgICAgICAgZmFzdF9pbnNl
cnQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSArIGxlbiA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc2l6ZV9hbGxvY2QpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBp
ID0gMjU2OwogICAgICAgICAgICAgICAgaWYgKGkgPCBsZW4pCiAgICAgICAgICAgICAgICAgICAg
aSA9IGxlbjsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
c2l6ZV9hbGxvY2QpICs9IGkgKyAxOwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC52YWx1ZSkgPSBYdFJlYWxsb2MoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc2l6ZV9hbGxv
Y2QpKTsKCiAgICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXcsICIlczogJWRcbiIsICJUZXh0SW5zZXJ0OiBBbGxvY2VkIG5ldyBzcGFjZVxu
IiwgKGludCkoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNpemVfYWxsb2NkKSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuc3RyaW5nX2xlbmd0aCkgLSAxOyBpID49ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtpICsgbGVuXSA9ICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW2ldOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGJ1ZikgJiYg
X19idWlsdGluX2NvbnN0YW50X3AgKGxlbikgPyAoc3RybGVuIChidWYpICsgMSA+PSAoKHNpemVf
dCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5ICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRp
b24pXSwgYnVmLCBsZW4pIDogc3RybmNweSAoJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9u
KV0sIGJ1ZiwgbGVuKSkgOiBzdHJuY3B5ICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
XSwgYnVmLCBsZW4pKSk7CgogICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkZh
c3RJbnNlcnRDdXJzb3JTdGFydCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1
cnNvcl9wb3NpdGlvbik7CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RmFz
dEluc2VydFRleHRMZW4pID0gbGVuOwogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LnN0cmluZ19sZW5ndGgpICs9IGxlbjsKCiAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgo
V2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsKCiAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCldID0gMDsKICAgICAgICB9CiAgICB9CgogICAgcmV0
dXJuIGZhc3RfaW5zZXJ0Owp9CgoKCgoKCnN0YXRpYyB2b2lkCk1vZGlmeVRleHQoWG1UZXh0Rmll
bGRXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGNo
YXIgKnN0ciwgaW50IGxlbiwKICAgICAgICAgICBSZWRyYXdQcm9jIHJlZHJhdywgZW51bSBNb2Rp
ZnlUZXh0Q3Vyc29yUG9zaXRpb24gY3Vyc29ybW92ZSkKewogICAgWG1UZXh0VmVyaWZ5Q2FsbGJh
Y2tTdHJ1Y3QgbXZfY2JzOwogICAgWG1UZXh0QmxvY2tSZWMgdGI7CiAgICBCb29sZWFuIHRleHRf
d2FzX21vZGlmaWVkID0gMTsKICAgIFhtQW55Q2FsbGJhY2tTdHJ1Y3QgdmNfY2JzOwogICAgWG1U
ZXh0UG9zaXRpb24gY3Vyc29ycG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb24pOwogICAgWG1UZXh0UG9zaXRpb24gc2F2ZWRfY3Vyc29ycG9zID0gKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwoKICAgIG12X2Ni
cy5yZWFzb24gPSBYbUNSX01PRElGWUlOR19URVhUX1ZBTFVFOwogICAgbXZfY2JzLmRvaXQgPSAx
OwogICAgbXZfY2JzLmV2ZW50ID0gZXY7CgogICAgaWYgKHN0YXJ0IDwgZW5kKQogICAgewogICAg
ICAgIG12X2Nicy5zdGFydFBvcyA9IHN0YXJ0OwogICAgICAgIG12X2Nicy5lbmRQb3MgPSBlbmQ7
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbXZfY2JzLnN0YXJ0UG9zID0gZW5kOwogICAg
ICAgIG12X2Nicy5lbmRQb3MgPSBzdGFydDsKCiAgICB9CgoKCiAgICBtdl9jYnMuY3Vyckluc2Vy
dCA9IGN1cnNvcnBvczsKICAgIGlmKG12X2Nicy5zdGFydFBvcyAhPSBtdl9jYnMuZW5kUG9zKQog
ICAgewogICAgICAgIG12X2Nicy5uZXdJbnNlcnQgPSBtdl9jYnMuc3RhcnRQb3MgKyBsZW47CiAg
ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbXZfY2JzLm5ld0luc2VydCA9IGN1cnNvcnBvczsK
ICAgIH0KCiAgICBpZiAoc3RyKQogICAgewogICAgICAgIHRiLnB0ciA9IFh0TWFsbG9jKGxlbiAr
IDEpOwogICAgICAgIHRiLmxlbmd0aCA9IGxlbjsKICAgICAgICB0Yi5mb3JtYXQgPSAoKFhtVGV4
dEZvcm1hdCkgKChBdG9tKSAzMSkpOwogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f
Y29uc3RhbnRfcCAoc3RyKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobGVuKSA/IChzdHJsZW4g
KHN0cikgKyAxID49ICgoc2l6ZV90KSAobGVuKSkgPyAoY2hhciAqKSBtZW1jcHkgKHRiLnB0ciwg
c3RyLCBsZW4pIDogc3RybmNweSAodGIucHRyLCBzdHIsIGxlbikpIDogc3RybmNweSAodGIucHRy
LCBzdHIsIGxlbikpKTsKICAgICAgICB0Yi5wdHJbbGVuXSA9ICdcMCc7CiAgICB9CiAgICBlbHNl
CiAgICB7CgogICAgICAgIHRiLnB0ciA9ICgodm9pZCAqKTApOwogICAgICAgIHRiLmxlbmd0aCA9
IDA7CiAgICAgICAgdGIuZm9ybWF0ID0gKChYbVRleHRGb3JtYXQpICgoQXRvbSkgMzEpKTsKICAg
IH0KICAgIG12X2Nicy50ZXh0ID0gJnRiOwogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubW9kaWZ5X3ZlcmlmeV9jYWxsYmFjaykpCiAgICB7CiAgICAgICAgWHRDYWxsQ2Fs
bGJhY2tzKChXaWRnZXQpdywgKChjaGFyICopJl9YbVN0cmluZ3NbODEzM10pLCAmbXZfY2JzKTsK
ICAgIH0KICAgIGlmIChtdl9jYnMuZG9pdCkKICAgIHsKICAgICAgICBpZiAobXZfY2JzLnN0YXJ0
UG9zIDwgbXZfY2JzLmVuZFBvcykKICAgICAgICB7CiAgICAgICAgICAgIFRleHREZWxldGUodywg
bXZfY2JzLnN0YXJ0UG9zLCBtdl9jYnMuZW5kUG9zIC0gbXZfY2JzLnN0YXJ0UG9zKTsKICAgICAg
ICAgICAgY3Vyc29ycG9zID0gbXZfY2JzLnN0YXJ0UG9zOwogICAgICAgICAgICB0ZXh0X3dhc19t
b2RpZmllZCA9IDEgOwogICAgICAgIH0KICAgICAgICBpZiAobXZfY2JzLmVuZFBvcyA8IG12X2Ni
cy5zdGFydFBvcykKICAgICAgICB7CiAgICAgICAgICAgIFRleHREZWxldGUodywgbXZfY2JzLmVu
ZFBvcywgbXZfY2JzLnN0YXJ0UG9zIC0gbXZfY2JzLmVuZFBvcyk7CiAgICAgICAgICAgIGN1cnNv
cnBvcyA9IG12X2Nicy5lbmRQb3M7CiAgICAgICAgICAgIHRleHRfd2FzX21vZGlmaWVkID0gMSA7
CiAgICAgICAgfQoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNv
cl9wb3NpdGlvbikgPSBjdXJzb3Jwb3M7CgogICAgICAgIGlmICgobGVuID0gbXZfY2JzLnRleHQt
Pmxlbmd0aCkgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgY2hhciAqYnVmID0gbXZfY2JzLnRl
eHQtPnB0cjsKCiAgICAgICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnN0cmluZ19sZW5ndGgpICsgbGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5t
YXhfbGVuZ3RoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmVyaWZ5QmVsbCh3KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoKICAgICAgICAg
ICAgICAgIGlmIChyZWRyYXcgPT0gRHJhdyAmJiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnByaW1fcG9zX2xlZnQpIDwgMCAmJgogICAgICAgICAgICAgICAgICAgICF0ZXh0X3dhc19t
b2RpZmllZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZWRyYXcgPSBE
cmF3SW5zZXJ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQ3Vyc29yRXJhc2Uo
dyk7CiAgICAgICAgICAgICAgICBUZXh0SW5zZXJ0KHcsIGJ1ZiwgbGVuKTsKICAgICAgICAgICAg
ICAgIHRleHRfd2FzX21vZGlmaWVkID0gMSA7CiAgICAgICAgICAgICAgICBpZiAoY3Vyc29ybW92
ZSA9PSBDUF9FbmRPZkluc2VydCkKICAgICAgICAgICAgICAgICAgY3Vyc29ycG9zICs9IGxlbjsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRleHRfd2FzX21vZGlmaWVkKQog
ICAgICAgIHsKICAgICAgICAgICAgcmVkcmF3KHcpOwogICAgICAgICAgICBpZiAoKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrKSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgdmNfY2JzLnJlYXNvbiA9IFhtQ1JfVkFMVUVfQ0hBTkdFRDsK
ICAgICAgICAgICAgICAgIHZjX2Nicy5ldmVudCA9IGV2OwogICAgICAgICAgICAgICAgWHRDYWxs
Q2FsbGJhY2tzKChXaWRnZXQpdywgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwgJnZjX2Ni
cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gc2F2ZWRfY3Vyc29ycG9zOwogICAgICAgIGlm
IChjdXJzb3Jtb3ZlID09IENQX1Jlc2V0KQogICAgICAgICAgY3Vyc29ycG9zID0gMDsKICAgICAg
ICBpZiAoY3Vyc29ybW92ZSA9PSBDUF9VbmNoYW5nZWQpCiAgICAgICAgICBjdXJzb3Jwb3MgPSBz
YXZlZF9jdXJzb3Jwb3M7CiAgICAgICAgRG9DdXJzb3JNb3ZlKHcsIGV2LCBjdXJzb3Jwb3MsIDEs
IDEpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIFZlcmlmeUJlbGwodyk7CgogICAgfQog
ICAgaWYgKHRiLnB0cikKICAgIHsKICAgICAgICBYdEZyZWUodGIucHRyKTsKICAgIH0KfQoKCnN0
YXRpYyBYbVRleHRQb3NpdGlvbgpUZXh0UGl4ZWxUb1NlbGVjdGlvblBvcyhYbVRleHRGaWVsZFdp
ZGdldCB3LCBpbnQgeCkKewogICAgWG1UZXh0UG9zaXRpb24gcG9zOwoKICAgIHBvcyA9IDA7Cgog
ICAgeCAtPSAoaW50KSgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpICsgKCgoWG1UZXh0
RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KTsKCgogICAgaWYgKHggPD0gMCkKICAgIHsKICAgICAg
ICBwb3MgPSAwOwogICAgfQoKCiAgICBlbHNlIGlmICh4ID4gKGludClfWG1UZXh0Rl9Gb250VGV4
dFdpZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSks
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpKQogICAgewog
ICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0
aCk7CiAgICB9CgoKICAgIGVsc2UKICAgIHsKICAgICAgICBpbnQgcHJldlRvdCwgdG90LCBpLCBk
aWZmLCBtYjsKCiAgICAgICAgcHJldlRvdCA9IHRvdCA9IDA7CiAgICAgICAgcG9zID0gLTE7CiAg
ICAgICAgZGlmZiA9IHg7CiAgICAgICAgbWIgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOyBpKyspCiAgICAg
ICAgewogICAgICAgICAgICB0b3QgPSAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdl
dCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSwgaSk7CiAgICAgICAg
ICAgIGlmICh4IDwgdG90KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3MgPSBpOwog
ICAgICAgICAgICAgICAgaWYgKHRvdCAtIHggPiBkaWZmKQogICAgICAgICAgICAgICAgICAgIHBv
cyA9IHBvcyAtIDEgLSBtYjsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBpZiAoaSAmJiBwcmV2VG90ID09IHRvdCkKICAgICAgICAgICAgICAgIG1iKys7
CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG1iID0gMDsKICAgICAgICAgICAgcHJl
dlRvdCA9IHRvdDsKICAgICAgICAgICAgZGlmZiA9IHggLSB0b3Q7CiAgICAgICAgfQoKICAgICAg
ICBpZiAocG9zIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICAgICAgfQoKICAgIH0KICAgIHJl
dHVybiBwb3M7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24KVGV4dFBpeGVsVG9Qb3MoWG1UZXh0
RmllbGRXaWRnZXQgdywgaW50IHgpCnsKICAgIFhtVGV4dFBvc2l0aW9uIGksIHRvdCwgY3VyLCBw
b3M7CgogICAgcG9zID0gMDsKCiAgICB4IC09IChpbnQpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKCiAgICBpZiAo
eCA8PSAwKQogICAgewogICAgICAgIHBvcyA9IDA7CiAgICB9CgoKICAgIGVsc2UgaWYgKHggPiAo
aW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnZhbHVlKSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJp
bmdfbGVuZ3RoKSkpCiAgICB7CiAgICAgICAgcG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKICAgIH0KCiAgICBlbHNlCiAgICB7CiAgICAgICAgdG90
ID0gMDsKICAgICAgICBwb3MgPSAtMTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsgaSsrKQogICAgICAgIHsKICAg
ICAgICAgICAgY3VyID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgJigo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW2ldLCAxKTsKICAgICAgICAgICAg
aWYgKHggPCB0b3QgKyBjdXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBvcyA9IGk7
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB0b3QgKz0g
Y3VyOwogICAgICAgIH0KICAgICAgICBpZiAocG9zIDwgMCkKICAgICAgICB7CiAgICAgICAgICAg
IHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAg
ICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvczsKfQoKCgoKCgpzdGF0aWMgQm9vbGVhbgpNYWtl
UG9zaXRpb25WaXNpYmxlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykK
ewogICAgICAgIGludCB4LCBzdGFydCwgZW5kOwogICAgICAgIEJvb2xlYW4gbW92ZWQ7CgogICAg
ICAgIG1vdmVkID0gMDsKICAgICAgICB4ID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChX
aWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksIHBvcyk7CiAg
ICAgICAgc3RhcnQgPSAtKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KTsKICAgICAg
ICBlbmQgPSBzdGFydCArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2Jv
dHRvbSk7CgogICAgICAgIGlmICh4IDwgc3RhcnQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4
dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAteDsKICAgICAgICAgICAgICAgIG1vdmVkID0g
MTsKICAgICAgICB9IGVsc2UgaWYgKHggPiBlbmQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4
dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0Lm1hcmdpbl9ib3R0b20pIC0geDsKICAgICAgICAgICAgICAgIG1vdmVkID0gMTsKICAgICAg
ICB9CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQp
dywgIk1ha2VQb3NpdGlvblZpc2libGUocG9zICVkKSBzdGFydD0lZCBlbmQ9JWQgeD0lZCBtb3Zl
ZD0lc1xuIiwgcG9zLCBzdGFydCwgZW5kLCB4LCBfTHREZWJ1Z0Jvb2xlYW4yU3RyaW5nKG1vdmVk
KSk7CgoKCiAgICAgICAgcmV0dXJuIG1vdmVkOwp9CnN0YXRpYyB2b2lkCkRyYXdUZXh0KFhtVGV4
dEZpZWxkV2lkZ2V0IHcsIGludCBzdGFydCwgaW50IGVuZCwgWG1IaWdobGlnaHRNb2RlIGhpZ2hs
aWdodCkKewogICAgICAgIGludCB4LCBsZW47CiAgICAgICAgRGltZW5zaW9uIHdpZCwgYncsIGJo
OwogICAgICAgIFBvc2l0aW9uIGU7CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0KCVkICVkICVkKVxuIiwgc3RhcnQsIGVuZCwg
aGlnaGxpZ2h0KTsKCgogICAgICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hv
KSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGVuPWVuZC1z
dGFydDsKICAgICAgICBpZiAobGVuIDw9IDApCiAgICAgICAgICAgICAgICByZXR1cm47CgoKCgoK
CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5n
dGgpID4gMCkgewogICAgICAgICAgICAgICAgWG1IaWdobGlnaHRNb2RlIG1vZGUgPSBoaWdobGln
aHQ7CgogICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wOwoKICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcCA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kID0gdGVtcDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmlu
Z19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZW5kID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJp
bmdfbGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHggPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAo
aW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnZhbHVlKSwgc3RhcnQpOwogICAgICAgICAgICAgICAgd2lkID0gKGludClf
WG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSkgKyBzdGFydCwgbGVuKTsKCgogICAgICAgICAgICAgICAgYncgPSAoKChY
bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKyAoKChY
bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykKICAg
ICAgICAgICAgICAgICAgICAgICAgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h
cmdpbl93aWR0aCk7CiAgICAgICAgICAgICAgICBiaCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3
KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3
KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKQogICAgICAgICAgICAgICAgICAgICAg
ICArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2hlaWdodCk7CgogICAg
ICAgICAgICAgICAgaWYgKHggKyB3aWQgKyBidyA+ICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICB3aWQgPSAoKChXaWRnZXQpKHcpKS0+Y29yZS53
aWR0aCkgLSBidyAtIHg7CiAgICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8u
Li9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0OiBjbGlwICVkXG4iLCB3aWQp
OwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGUgPSB3aWQgKyAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwogICAgICAgICAgICAgICAgaWYgKG1vZGU9PVhtSElH
SExJR0hUX1NFTEVDVEVEICYmICEoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhhdmVf
aW52ZXJ0ZWRfaW1hZ2VfZ2MpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBfTHREZWJ1Zygi
Li4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dC1hXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQoKCgoKE9iamVjdCkodykpLT5vYmpl
Y3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRn
ZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFy
ZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZ2MpLCAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuZm9yZWdyb3VuZCkp
OwogICAgICAgICAgICAgICAgICAgICAgICBYRmlsbFJlY3RhbmdsZSgoKCgoT2JqZWN0KSgoV2lk
Z2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i
amVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwg
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu
aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykp
LT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5nYyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYncsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lk
dGgpIC0gMiAqIGJ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdldCko
dykpLT5jb3JlLmhlaWdodCkgLSAyICogYmgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgWFNl
dEZvcmVncm91bmQoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpLCAoKChXaWRnZXQpKHcpKS0+
Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNr
Z3JvdW5kKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5
IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmdjKSwgKCgoWG1QcmltaXRpdmVXaWRnZXQp
KHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFnZV9nYykgPSAx
OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaWdobGlnaHQgPT0gWG1ISUdITElHSFRfTk9S
TUFMICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFn
ZV9nYykpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv
WG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0LWJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICBYQ2xlYXJBcmVhKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRn
ZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2Jq
ZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl
dCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
d2luZG93KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidywgYmgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lkdGgpIC0gMiAq
IGJ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdldCkodykpLT5jb3Jl
LmhlaWdodCkgLSAyICogYmgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w
YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5nYyksICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5mb3JlZ3JvdW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kKCgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/
ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmdjKSwgKCgoV2lkZ2V0KSh3KSktPmNvcmUuYmFja2dyb3VuZF9waXhlbCkpOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o
YXZlX2ludmVydGVkX2ltYWdlX2djKSA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgewoKCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIs
IChXaWRnZXQpdywgIkRyYXdUZXh0LWMgeCAlZCBidyAlZCBlICVkIHdpZCAlZFxuIiwgeCwgYncs
IGUsIHdpZCk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPCBidykgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkIC0gYncgKyB4ID4gMCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENsZWFyQXJlYSgoKCgoT2JqZWN0KSgo
V2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAo
KE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5
KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ3LCBiaCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkIC0gYncgKyB4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQp
IC0gMiAqIGJoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENsZWFyQXJl
YSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz
cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
c2NyZWVuLT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5j
b3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5k
b3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBiaCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgoKFdpZGdldCkodykpLT5jb3JlLmhlaWdodCkgLSAyICogYmgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp
ID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5v
YmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZ2MpLCAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuZm9y
ZWdyb3VuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3
KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5nYyksICgoKFdpZGdldCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4
ZWwpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFnZV9nYykgPSAwOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zWzBd
LT50eXBlID09IFhtRk9OVF9JU19GT05UU0VUKSB7CgoKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhtYkRyYXdTdHJpbmcoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93
IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhGb250U2V0KSgoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF0tPmZvbnQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5nYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCAo
KChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUp
W3N0YXJ0XSwgbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWERyYXdTdHJpbmcoKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3Qu
cGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3
KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5k
b3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHgsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WU9m
ZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbc3RhcnRdLCBsZW4pOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09IFhtSElHSExJ
R0hUX1NFQ09OREFSWV9TRUxFQ1RFRCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgd2lkOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWQ9KGludClfWG1U
ZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpW3N0YXJ0XSwgbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRHJhd0xpbmUoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgs
ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WU9mZnNldCkgKyAxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeCArIHdpZCwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5ZT2Zmc2V0KSArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfQp9CgpzdGF0aWMgdm9pZApEcmF3VGV4dFJhbmdlKFhtVGV4dEZpZWxkV2lk
Z2V0IHcsIGludCBzdGFydCwgaW50IGVuZCkKewogICAgICAgIGludCBpOwogICAgICAgIFhtSGln
aGxpZ2h0TW9kZSBtb2RlOwoKICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRG
LmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dFJhbmdlWyVkICVkXVxuIiwgc3RhcnQsIGVuZCk7CiAg
ICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnN0cmluZ19sZW5ndGgpID4gMCkgewogICAgICAgIGlmIChzdGFydCA8IDApIHsKICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAg
ICAgICAgICAgICAgICBpbnQgdGVtcDsKCiAgICAgICAgICAgICAgICB0ZW1wID0gc3RhcnQ7CiAg
ICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKICAgICAgICAgICAgICAgIGVuZCA9IHRlbXA7CiAg
ICAgICAgfQoKICAgICAgICBtb2RlID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o
aWdobGlnaHQpLmxpc3RbMF0ubW9kZTsKICAgICAgICBmb3IgKGk9MDsgaTwoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyLTE7IGkrKykgewogICAgICAgICAg
ICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0
W2ldLnBvc2l0aW9uID09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9u
IDwgZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgc3Rh
cnQsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0u
cG9zaXRpb24sIG1vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsIHN0YXJ0LCBlbmQsIG1vZGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uIDwgc3RhcnQgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydCA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBv
c2l0aW9uICE9IHN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0
KHcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBv
c2l0aW9uLCBzdGFydCwgbW9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9uIDwg
ZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgc3RhcnQs
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9z
aXRpb24sIG1vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsIHN0YXJ0LCBlbmQsIG1vZGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7CiAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ucG9zaXRpb24gJiYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCku
bGlzdFtpKzFdLnBvc2l0aW9uIDwgZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdU
ZXh0KHcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ld
LnBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o
aWdobGlnaHQpLmxpc3RbaV0ubW9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IGVuZCkgewoKICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp
c3RbaV0ucG9zaXRpb24gPCBlbmQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQgPCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFd
LnBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtp
XS5tb2RlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2b2lkCkRyYXdUZXh0UmVwb3NpdGlvbihYbVRleHRGaWVs
ZFdpZGdldCB3KQp7CiAgICBpbnQgeHNyYywgeGRlc3QsIHdpZHRoLCBzdGFydCwgZW5kOwoKICAg
IGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hvKSkKICAgIHsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBpZiAoISgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRn
ZXQpdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVu
dC0+Y29yZS53aW5kb3cpKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+T2xkWE9mZnNldCkpCiAgICB7CiAgICAgICAgeHNyYyA9ICgoKFhtVGV4dEZpZWxkUGFydExl
c3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNp
b24pKS0+T2xkWE9mZnNldCkgLSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwog
ICAgICAgIHhkZXN0ID0gMDsKICAgICAgICB3aWR0aCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWFyZ2luX2JvdHRvbSkgLSB4c3JjICsgMTsKCgogICAgICAgIGVuZCA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICBzdGFy
dCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkQ3Vyc29yUG9zKTsKICAgIH0KICAgIGVs
c2UgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPiAoKChYbVRleHRGaWVs
ZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
ZXh0ZW5zaW9uKSktPk9sZFhPZmZzZXQpKQogICAgewogICAgICAgIHhzcmMgPSAwOwogICAgICAg
IHhkZXN0ID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSAtICgoKFhtVGV4dEZp
ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5leHRlbnNpb24pKS0+T2xkWE9mZnNldCk7CiAgICAgICAgd2lkdGggPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0geGRlc3QgKyAxOwoKCgogICAgICAg
IHN0YXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
OwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkQ3Vyc29yUG9zKTsK
ICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHdpZHRo
ID4gMCkKICAgIHsKICAgICAgICBpZiAoX0x0RGVidWdJbkRlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdykpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4v
Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJSZXBvc2l0aW9uOiB4b2ZmPSVkIG9s
ZD0lZCBzcmM9JWQgZGVzdD0lZCIgIiB3aWR0aD0lZCByZWZyZXNoICVkLSVkXG4iLCAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9s
ZFhPZmZzZXQpLCB4c3JjLCB4ZGVzdCwgd2lkdGgsIHN0YXJ0LCBlbmQpOwoKCgoKICAgICAgICB9
CgogICAgICAgIFhDb3B5QXJlYSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mt
PmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu
LT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAo
KE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksICgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/
ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVu
dC0+Y29yZS53aW5kb3cpLAogICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5YRHJhdykgKyB4c3JjLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSwKICAgICAg
ICAgICAgICAgICAgKHVuc2lnbmVkIGludCl3aWR0aCwgKHVuc2lnbmVkIGludCkoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApLAogICAgICAgICAgICAgICAgICAoKChY
bVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhkZXN0LCAoKChYbVRleHRGaWVsZFBhcnRM
ZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5z
aW9uKSktPllEcmF3KSk7CgoKCgoKICAgICAgICBpZiAoeGRlc3QgPCB4c3JjKQogICAgICAgIHsK
ICAgICAgICAgICAgWENsZWFyQXJlYSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuLT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4ZGVzdCArIHdp
ZHRoLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSwKICAgICAgICAgICAgICAgICAg
ICAgICB4c3JjIC0geGRlc3QsICh1bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5tYXJnaW5fdG9wKSwKICAgICAgICAgICAgICAgICAgICAgICAwKTsKCiAgICAgICAg
ICAgIGlmIChfTHREZWJ1Z0luRGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl
dCl3KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiUmVwb3NpdGlvbjogZXJhc2luZyB4PSVkIHk9JWQg
dz0lZCBoPSVkXG4iLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhkZXN0ICsg
d2lkdGgsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLCB4c3JjIC0geGRlc3QsICh1
bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSk7
CgoKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQog
ICAgICAgIHsKICAgICAgICAgICAgZW5kKys7CiAgICAgICAgfQoKICAgICAgICBEcmF3VGV4dFJh
bmdlKHcsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgZWxzZQogICAgewoKICAgICAgICBzdGFydCA9
IFRleHRQaXhlbFRvUG9zKHcsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpKTsKICAg
ICAgICBlbmQgPSBUZXh0UGl4ZWxUb1Bvcyh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhE
cmF3KSArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpICsg
MTsKCiAgICAgICAgRHJhd1RleHRSYW5nZSh3LCBzdGFydCwgZW5kKTsKCiAgICAgICAgaWYgKF9M
dERlYnVnSW5EZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcpKQogICAg
ICAgIHsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdp
ZGdldCl3LCAiUmVwb3NpdGlvbjogeG9mZj0lZCBvbGQ9JWQgcmVmcmVzaCAlZC0lZFxuIiwgKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5PbGRYT2Zmc2V0KSwgc3RhcnQsIGVuZCk7CgoKICAgICAgICB9CgogICAgfQoKICAgICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5leHRlbnNpb24pKS0+T2xkWE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPlhPZmZzZXQpOwp9CgoKc3RhdGljIHZvaWQKRXJhc2VYUmFuZ2UoWG1UZXh0RmllbGRXaWRn
ZXQgdywgaW50IHN0YXJ0LCBpbnQgZW5kKQp7CiAgICBpbnQgeDEsIHgyOwoKICAgIHgxID0gKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSArIHN0YXJ0OwogICAgeDIgPSAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpICsgZW5kOwogICAgaWYgKHgxIDwgMCkKICAgIHsK
ICAgICAgICB4MSA9IDA7CiAgICB9CiAgICBpZiAoeDIgPiAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKQogICAgewogICAgICAgIHgyID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKTsKICAgIH0KICAgIGlmICh4MiA+IHgx
KQogICAgewogICAgICAgIFhDbGVhckFyZWEoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+
Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+
Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2lu
ZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4MSwgKCgoWG1U
ZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksCiAgICAgICAgICAgICAgICAgICB4MiAtIHgxICsg
MSwKICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFy
Z2luX3RvcCksIDApOwogICAgfQp9CgoKc3RhdGljIHZvaWQKRHJhd1RleHRXaXRoQ29weUFyZWEo
WG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgaW50IHgsIGluc2VydF93aWR0aDsKICAgIGludCB4
c3JjLCB4ZGVzdCwgd2lkdGg7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVj
aG8pKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghKCgoKE9iamVjdCkoKFdp
ZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKChX
aWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIHggPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwog
ICAgaW5zZXJ0X3dpZHRoID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywg
JigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkUGFy
dExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRl
bnNpb24pKS0+RmFzdEluc2VydEN1cnNvclN0YXJ0KV0sICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+RmFzdEluc2VydFRleHRMZW4pKTsKCgoKICAgIGlmIChDdXJzb3JQb3NpdGlvbih3KSkKICAg
IHsKCgoKCgogICAgICAgIHhzcmMgPSAwOwogICAgICAgIHdpZHRoID0gKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5PbGRDdXJzb3JYKSArIHg7CiAgICAgICAgeGRlc3QgPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0gKHggKyAoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0
ZW5zaW9uKSktPk9sZEN1cnNvclgpKSAtIGluc2VydF93aWR0aDsKCiAgICAgICAgWENvcHlBcmVh
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19p
bml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChP
YmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVj
dC5wYXJlbnQtPmNvcmUud2luZG93KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAg
ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpLAogICAg
ICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhzcmMsICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLAogICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgaW50KXdpZHRoLCAodW5zaWduZWQgaW50KSgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQubWFyZ2luX3RvcCksCiAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+WERyYXcpICsgeGRlc3QsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpKTsKCiAg
ICAgICAgaWYgKF9MdERlYnVnSW5EZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lk
Z2V0KXcpKQogICAgICAgIHsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiRHJhd1RleHRXQ0E6IHg9JWQgeHNyYz0lZCB4ZGVzdD0lZCB3
aWR0aD0lZFxuIiwgeCwgeHNyYywgeGRlc3QsIHdpZHRoKTsKCgogICAgICAgIH0KCiAgICB9CiAg
ICBlbHNlCiAgICB7CgoKCgoKICAgICAgICB4c3JjID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdp
ZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RmFzdEluc2VydEN1cnNvclN0YXJ0KSkgKyB4OwoKCgog
ICAgICAgIHdpZHRoID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90
dG9tKSAtIHhzcmM7CiAgICAgICAgeGRlc3QgPSB4c3JjICsgaW5zZXJ0X3dpZHRoOwoKICAgICAg
ICBYQ29weUFyZWEoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl
dCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
d2luZG93KSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5nYyksCiAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNp
b24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcp
ICsgeHNyYywgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksCiAgICAgICAgICAgICAg
ICAgICh1bnNpZ25lZCBpbnQpd2lkdGgsICh1bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0Rmll
bGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4ZGVzdCwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Z
RHJhdykpOwoKICAgICAgICBpZiAoX0x0RGVidWdJbkRlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIChXaWRnZXQpdykpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dFdDQTogeD0lZCB4c3JjPSVk
IHhkZXN0PSVkIHdpZHRoPSVkXG4iLCB4LCB4c3JjLCB4ZGVzdCwgd2lkdGgpOwoKCiAgICAgICAg
fQogICAgfQoKICAgIERyYXdUZXh0UmFuZ2UodywgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5G
YXN0SW5zZXJ0Q3Vyc29yU3RhcnQpLAogICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0
ZW5zaW9uKSktPkZhc3RJbnNlcnRDdXJzb3JTdGFydCkgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPkZhc3RJbnNlcnRUZXh0TGVuKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+VGV4dFdpZHRoKSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSkK
ICAgIHsKICAgICAgICBFcmFzZVhSYW5nZSh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlRl
eHRXaWR0aCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSk7CiAgICB9
CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lkdGgpID0gKCgoWG1UZXh0
RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmV4dGVuc2lvbikpLT5UZXh0V2lkdGgpOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5PbGRYT2Zmc2V0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCk7Cn0KCgpz
dGF0aWMgdm9pZApEcmF3QWxsVGV4dChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICBpZiAoISgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RWNobykpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIERyYXdUZXh0UmFuZ2UodywgMCwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5zdHJpbmdfbGVuZ3RoKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4
dFdpZHRoKSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSkKICAgIHsK
ICAgICAgICBFcmFzZVhSYW5nZSh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlRleHRXaWR0
aCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSk7CiAgICB9CgogICAg
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lkdGgpID0gKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5UZXh0V2lkdGgpOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRY
T2Zmc2V0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCk7CiAgICAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0YXJ0KSA9ICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPk9sZEhpZ2hsaWdodEVuZCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnBy
aW1fcG9zX3JpZ2h0KTsKfQoKCgoKc3RhdGljIEJvb2xlYW4KQ3Vyc29yUG9zaXRpb24oWG1UZXh0
RmllbGRXaWRnZXQgdykKewogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu
YyIsIChXaWRnZXQpdywgIkN1cnNvclBvc2l0aW9uKCVkKVxuIiwgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pKTsKICAgICAgICBpZiAoKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgMCkgewogICAgICAgICAgICAg
ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gMDsK
ICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29y
X3Bvc2l0aW9uKSA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0
aCkpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vy
c29yX3Bvc2l0aW9uKSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl
bmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gTWFrZVBvc2l0aW9uVmlzaWJsZSh3LCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpOwp9CgoKc3Rh
dGljIEJvb2xlYW4KQ3Vyc29yTWFzc2l2ZUFkanVzdChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAg
ICBpbnQgc3RhcnQsIGVuZCwgbGFzdDsKICAgIEJvb2xlYW4gbW92ZWQ7CgogICAgbW92ZWQgPSAw
OwogICAgZW5kID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPj0gMCkKICAgIHsKICAgICAgICBzdGFydCA9IChp
bnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hs
aWdodCkubGlzdFsxXS5wb3NpdGlvbik7CgoKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBz
dGFydCA9IGVuZDsKICAgIH0KCiAgICBpZiAoZW5kIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5tYXJnaW5fYm90dG9tKSkKICAgIHsKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5YT2Zmc2V0KSA8IDApCiAgICAgICAgewogICAgICAgICAgICAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gMDsKICAgICAgICAgICAgbW92ZWQgPSAxOwogICAg
ICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHN0YXJ0ID49ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+WE9mZnNldCkgJiYKICAgICAgICAgICAgIGVuZCA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+WE9mZnNldCkgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0
b20pKQogICAgewogICAgICAgIHJldHVybiBtb3ZlZDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAg
ICAgICBsYXN0ID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpOwogICAgICAgIGlmIChzdGFydCAtIGVuZCA+ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpCiAgICAgICAgewogICAg
ICAgICAgICBpZiAobGFzdCAtIGVuZCA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
bWFyZ2luX2JvdHRvbSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
Lm1hcmdpbl9ib3R0b20pIC0gbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9m
ZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0g
ZW5kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGVuZCA+ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpCiAgICAgICAgewogICAg
ICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKSAtIGVuZDsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y
T2Zmc2V0KSA9IDA7CiAgICAgICAgfQogICAgICAgIG1vdmVkID0gMTsKICAgIH0KCiAgICByZXR1
cm4gbW92ZWQ7Cn0KCgpzdGF0aWMgdm9pZApDdXJzb3JTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywg
Qm9vbGVhbiBmb2N1cykKewogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXNf
Zm9jdXMpID0gZm9jdXM7CgoKICAgIGlmIChmb2N1cykKICAgIHsKICAgICAgICBYU2V0U3RpcHBs
ZSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz
cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
c2NyZWVuLT5kaXNwbGF5KSwKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmltYWdlX2djKSwKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAg
IFhTZXRTdGlwcGxlKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQpdykp
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBh
cmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLAogICAgICAgICAgICAgICAgICAgICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2VfZ2MpLAogICAgICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSk7CiAgICB9Cn0KCgpz
dGF0aWMgdm9pZApDdXJzb3JTYXZlVW5kZXJJQmVhbShYbVRleHRGaWVsZFdpZGdldCB3LCBpbnQg
eCkKewogICAgaWYgKCEoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcp
KS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNv
cmUud2luZG93KSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgoKICAgIFhGbHVzaCgoKCgo
T2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu
LT5kaXNwbGF5KSk7CgoKICAgIFhGaWxsUmVjdGFuZ2xlKCgoKChPYmplY3QpKChXaWRnZXQpdykp
LT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8g
KChXaWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgo
V2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZiksICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc2F2ZV9nYyksCiAgICAgICAgICAgICAgICAgICAwLCAwLCA1LCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApKTsKCiAgICBYQ29weUFyZWEoKCgo
KE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xh
c3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUuc2NyZWVuLT5k
aXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl
bi0+ZGlzcGxheSksICgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQpdykp
LT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29y
ZS53aW5kb3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZiksCiAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pbWFnZV9nYyksCiAg
ICAgICAgICAgICAgeCAtIDIsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLAogICAg
ICAgICAgICAgIDUsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX3RvcCks
IDAsIDApOwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucmVmcmVzaF9pYmVh
bV9vZmYpID0gMTsKfQoKCnN0YXRpYyB2b2lkCkN1cnNvclJlc3RvcmVVbmRlcklCZWFtKFhtVGV4
dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGludCB4OwoKICAgIGlmICghKCgoKE9iamVjdCkoKFdpZGdl
dCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgw
NCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKChXaWRn
ZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKCiAgICBYRmx1c2goKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdp
ZGdldCl3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5v
YmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSkpOwoKICAgIHggPSAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclgpICsgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y
RHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKICAgIFhDb3B5QXJl
YSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz
cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
c2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pYmVhbV9v
ZmYpLCAoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS53
aW5kb3cgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93
KSwKICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmltYWdlX2dj
KSwgMCwgMCwgNSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSwK
ICAgICAgICAgICAgICB4IC0gMiwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdykpOwoK
ICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucmVmcmVzaF9pYmVhbV9vZmYpID0g
MDsKfQoKCnN0YXRpYyB2b2lkCkN1cnNvckRyYXdJQmVhbShYbVRleHRGaWVsZFdpZGdldCB3LCBp
bnQgeCkKewoKICAgIEN1cnNvclNhdmVVbmRlcklCZWFtKHcsIHgpOwoKCiAgICBYU2V0VFNPcmln
aW4oKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xh
c3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUuc2Ny
ZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2Vf
Z2MpLAogICAgICAgICAgICAgICAgIHggLSAyLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllP
ZmZzZXQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250LT5tYXhfYm91bmRz
LmFzY2VudCkpOwoKICAgIFhGaWxsUmVjdGFuZ2xlKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lk
Z2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0
KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0
ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVj
dCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5pbWFnZV9nYyksCiAgICAgICAgICAgICAgICAgICB4IC0gMiwg
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksIDUsICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQubWFyZ2luX3RvcCkpOwp9CgoKc3RhdGljIHZvaWQKQ3Vyc29yRHJhdyhYbVRl
eHRGaWVsZFdpZGdldCB3KQp7CiAgICBpbnQgeDsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb25fdmlzaWJsZSkpCiAgICB7CiAgICAgICAgeCA9
IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1
cnNvcl9wb3NpdGlvbikpOwoKICAgICAgICBDdXJzb3JFcmFzZSh3KTsKICAgICAgICAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclBvcykgPSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5PbGRDdXJzb3JYKSA9IHg7CgogICAgICAgIHggKz0gKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKICAgICAg
ICBDdXJzb3JEcmF3SUJlYW0odywgeCk7CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuYmxpbmtfb24pID0gMTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCkN1cnNvckVyYXNl
KFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnJlZnJlc2hfaWJlYW1fb2ZmKSkKICAgIHsKICAgICAgICBDdXJzb3JSZXN0b3JlVW5k
ZXJJQmVhbSh3KTsKICAgIH0KCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmJs
aW5rX29uKSA9IDA7Cn0KCgpzdGF0aWMgdm9pZApDbGVhckhpZ2hsaWdodChYbVRleHRGaWVsZFdp
ZGdldCB3KQp7CiAgICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pKQog
ICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA+PSAwKSB7CiAgICAgICAgICAgICAgICBDdXJzb3JF
cmFzZSh3KTsKICAgICAgICAgICAgICAgIFRleHRGX0luaXRpYWxpc2VIaWdobGlnaHQoKFdpZGdl
dCl3KTsKCgoKCgoKICAgICAgICAgICAgICAgIERyYXdBbGxUZXh0KHcpOwoKICAgICAgICAgICAg
ICAgIEN1cnNvckRyYXcodyk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5wcmltX3Bvc19yaWdodCkgPSAtMTsKICAgICAgICB9CgogICAgICAgICgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+T2xkSGlnaGxpZ2h0U3RhcnQpID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5PbGRIaWdobGlnaHRFbmQpID0gLTE7Cn0KCnN0YXRpYyB2b2lkClNldFNpbmdsZUhpZ2hsaWdo
dChXaWRnZXQgdywgaW50IGxlZnQsIGludCByaWdodCkKewogICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSBsZWZ0OwogICAgICAgICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gcmlnaHQ7CgogICAgICAg
IGlmIChsZWZ0IDwgcmlnaHQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1iZXIgPSA0OwogICAgICAgICAgICAgICAgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbMF0ucG9zaXRpb24gPSAw
OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGln
aHQpLmxpc3RbMF0ubW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0WzFdLnBvc2l0aW9u
ID0gbGVmdDsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0WzFdLm1vZGUgPSBYbUhJR0hMSUdIVF9TRUxFQ1RFRDsKICAgICAgICAg
ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0WzJd
LnBvc2l0aW9uID0gcmlnaHQ7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsyXS5tb2RlID0gWG1ISUdITElHSFRfTk9STUFMOwog
ICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQp
Lmxpc3RbM10ucG9zaXRpb24gPSAyMTQ3NDgzNjQ3OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbNF0ubW9kZSA9IFhtSElHSExJ
R0hUX05PUk1BTDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVGV4dEZfSW5pdGlh
bGlzZUhpZ2hsaWdodCh3KTsKICAgICAgICB9Cn0KCnN0YXRpYyB2b2lkCkRyYXdTaW5nbGVIaWdo
bGlnaHQoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgICAgIGludCBsLCByOwoKICAgICAgICBp
ZiAoISgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RWNobykpIHsKICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CgogICAgICAgIGlmICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcp
KS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRv
dykpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyID09IDQpIHsKICAg
ICAgICAgICAgICAgIGwgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdo
dCkubGlzdFsxXS5wb3NpdGlvbjsKICAgICAgICAgICAgICAgIHIgPSAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsyXS5wb3NpdGlvbjsKCiAgICAgICAgICAg
ICAgICBEcmF3VGV4dCh3LCBsLCByLCAxKTsKICAgICAgICB9Cn0KCgoKCnN0YXRpYyB2b2lkCkRy
YXdJbnNlcnQoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgaWYgKCEoKCgoT2JqZWN0KSh3KSkt
Pm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAo
KFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQt
PmNvcmUud2luZG93KSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgoKICAgIERyYXdUZXh0
V2l0aENvcHlBcmVhKHcpOwogICAgQ3Vyc29yRHJhdyh3KTsKfQoKCgoKCnN0YXRpYyB2b2lkCkRy
YXdNb3ZlKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICghKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5j
b3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEN1cnNvckVyYXNl
KHcpOwogICAgaWYgKEN1cnNvclBvc2l0aW9uKHcpKQogICAgewogICAgICAgIERyYXdUZXh0UmVw
b3NpdGlvbih3KTsKICAgIH0KCiAgICBDdXJzb3JEcmF3KHcpOwp9CgoKCgoKc3RhdGljIHZvaWQK
RHJhdyhYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICBpZiAoISgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lk
Z2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29y
ZS53aW5kb3cpKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBDdXJzb3JFcmFzZSh3
KTsKCiAgICBDdXJzb3JQb3NpdGlvbih3KTsKCiAgICBEcmF3QWxsVGV4dCh3KTsKCiAgICBDdXJz
b3JEcmF3KHcpOwp9CgoKCgoKc3RhdGljIHZvaWQKRHJhd0FsbChYbVRleHRGaWVsZFdpZGdldCB3
KQp7CiAgICBpZiAoISgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDog
KChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpKQogICAgewogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBYQ2xlYXJBcmVhKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3
KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+
Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl
LndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwKICAg
ICAgICAgICAgICAgKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdo
dF90aGlja25lc3MpLAogICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5w
cmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAgICgoKFdpZGdldCko
dykpLT5jb3JlLndpZHRoKSAtIDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRp
dmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAgICgoKFdpZGdldCkodykpLT5j
b3JlLmhlaWdodCkgLSAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhp
Z2hsaWdodF90aGlja25lc3MpLAogICAgICAgICAgICAgICAwKTsKCiAgICBDdXJzb3JQb3NpdGlv
bih3KTsKCiAgICBEcmF3QWxsVGV4dCh3KTsKCiAgICBDdXJzb3JEcmF3KHcpOwp9CgoKCgoKCnN0
YXRpYyB2b2lkCk1hc3NpdmVDaGFuZ2VEcmF3KFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlm
ICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIEN1cnNvckVyYXNlKHcpOwoKICAgIEN1cnNvck1hc3NpdmVBZGp1c3Qodyk7Cgog
ICAgRHJhd0FsbFRleHQodyk7CgogICAgQ3Vyc29yRHJhdyh3KTsKfQoKCgoKCgoKc3RhdGljIEJv
b2xlYW4KSW5Xb3JkKGNoYXIgcykKewogICAgc3dpdGNoIChzKQogICAgewogICAgY2FzZSAnICc6
CiAgICBjYXNlICdcdCc6CiAgICBjYXNlICdcbic6CiAgICBjYXNlICchJzoKICAgIGNhc2UgJz8n
OgoKCgoKCiAgICBjYXNlICcsJzoKICAgICAgICByZXR1cm4gMDsKCiAgICBkZWZhdWx0OgogICAg
ICAgIHJldHVybiAxOwogICAgfQp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uCldvcmRFbmQoWG1U
ZXh0RmllbGRXaWRnZXQgdywgWG1UZXh0UG9zaXRpb24gcG9zKQp7CiAgICB3aGlsZSAoKHBvcyA8
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpICYmIEluV29y
ZCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtwb3NdKSkKICAgIHsKICAg
ICAgICBwb3MrKzsKICAgIH0KCiAgICByZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0
aW9uCldvcmRTdGFydChYbVRleHRGaWVsZFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpCnsK
ICAgIHdoaWxlICgocG9zID4gMCkgJiYgSW5Xb3JkKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpW3BvcyAtIDFdKSkKICAgIHsKICAgICAgICBwb3MtLTsKICAgIH0KCiAgICBy
ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uClNraXBGb3J3YXJkKFhtVGV4dEZp
ZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewogICAgd2hpbGUgKChwb3MgPCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKSAmJiAhSW5Xb3JkKCgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW3Bvc10pKQogICAgewogICAgICAg
IHBvcysrOwogICAgfQoKICAgIHJldHVybiBwb3M7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24K
U2tpcEJhY2t3YXJkKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewog
ICAgd2hpbGUgKChwb3MgPiAwKSAmJiAhSW5Xb3JkKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpW3BvcyAtIDFdKSkKICAgIHsKICAgICAgICBwb3MtLTsKICAgIH0KCiAgICBy
ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFNjYW5UeXBlClNjYW5UeXBlKFhtVGV4dEZpZWxk
V2lkZ2V0IHcpCnsKICAgIFhtVGV4dFNjYW5UeXBlIHR5cGU7CgogICAgaWYgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuc2VsZWN0aW9uX2FycmF5KSkKICAgIHsKICAgICAgICBpZiAo
dy0+dGV4dC5zYXJyYXlfaW5kZXggPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z
ZWxlY3Rpb25fYXJyYXlfY291bnQpKQogICAgICAgIHsKICAgICAgICAgICAgdy0+dGV4dC5zYXJy
YXlfaW5kZXggPSAwOwogICAgICAgIH0KCiAgICAgICAgdHlwZSA9ICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuc2VsZWN0aW9uX2FycmF5KVt3LT50ZXh0LnNhcnJheV9pbmRleF07CiAg
ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgc3dpdGNoICh3LT50ZXh0LnNhcnJheV9pbmRleCkK
ICAgICAgICB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICB0eXBlID0gWG1TRUxFQ1RfV09S
RDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgdHlwZSA9
IFhtU0VMRUNUX0FMTDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgIHR5cGUgPSBYbVNFTEVDVF9QT1NJVElPTjsKICAgICAgICAgICAgdy0+dGV4dC5zYXJy
YXlfaW5kZXggPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcmV0
dXJuIHR5cGU7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24KU2NhblR5cGVTdGFydChYbVRleHRG
aWVsZFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpCnsKICAgIHN3aXRjaCAoU2NhblR5cGUo
dykpCiAgICB7CiAgICBjYXNlIFhtU0VMRUNUX1dPUkQ6CiAgICAgICAgcG9zID0gV29yZFN0YXJ0
KHcsIHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBYbVNFTEVDVF9XSElURVNQQUNFOgog
ICAgICAgIHBvcyA9IFNraXBCYWNrd2FyZCh3LCBwb3MpOwogICAgICAgIGJyZWFrOwoKICAgIGNh
c2UgWG1TRUxFQ1RfTElORToKICAgIGNhc2UgWG1TRUxFQ1RfUEFSQUdSQVBIOgogICAgY2FzZSBY
bVNFTEVDVF9BTEw6CiAgICAgICAgcG9zID0gMDsKICAgICAgICBicmVhazsKCiAgICBjYXNlIFht
U0VMRUNUX1BPU0lUSU9OOgogICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKICAgIH0KCiAgICBy
ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uClNjYW5UeXBlRW5kKFhtVGV4dEZp
ZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewogICAgc3dpdGNoIChTY2FuVHlwZSh3
KSkKICAgIHsKICAgIGNhc2UgWG1TRUxFQ1RfV09SRDoKICAgICAgICBwb3MgPSBXb3JkRW5kKHcs
IHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBYbVNFTEVDVF9XSElURVNQQUNFOgogICAg
ICAgIHBvcyA9IFNraXBGb3J3YXJkKHcsIHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBY
bVNFTEVDVF9MSU5FOgogICAgY2FzZSBYbVNFTEVDVF9QQVJBR1JBUEg6CiAgICBjYXNlIFhtU0VM
RUNUX0FMTDoKICAgICAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgWG1TRUxFQ1RfUE9TSVRJT046
CiAgICBkZWZhdWx0OgogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHBvczsKfQoKCgoK
CgpzdGF0aWMgdm9pZApWZXJpZnlCZWxsKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICgo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZlcmlmeV9iZWxsKSkKICAgIHsKICAgICAg
ICBYQmVsbCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQt
PmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgNTApOwogICAgfQp9CgoKc3RhdGljIEJvb2xlYW4KRG9D
dXJzb3JNb3ZlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICBY
bVRleHRQb3NpdGlvbiBwb3MsIEJvb2xlYW4gaGlnaGxpZ2h0LCBCb29sZWFuIGRyYXdpdCkKewog
ICAgWG1UZXh0VmVyaWZ5Q2FsbGJhY2tTdHJ1Y3QgY2JzOwoKICAgIGlmIChwb3MgPiAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIHBv
cyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICB9
CgogICAgY2JzLmRvaXQgPSAxOwogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQubW90aW9uX3ZlcmlmeV9jYWxsYmFjaykpCiAgICB7CiAgICAgICAgY2JzLnJlYXNvbiA9IFht
Q1JfTU9WSU5HX0lOU0VSVF9DVVJTT1I7CiAgICAgICAgY2JzLmV2ZW50ID0gZXY7CiAgICAgICAg
Y2JzLmN1cnJJbnNlcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICAgICAgY2JzLm5ld0luc2VydCA9IHBvczsKICAgICAgICBjYnMuc3RhcnRQ
b3MgPSBjYnMuZW5kUG9zID0gMDsKICAgICAgICBjYnMudGV4dCA9ICgodm9pZCAqKTApOwoKICAg
ICAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdldCl3LCAoKGNoYXIgKikmX1htU3RyaW5nc1s4MTc4
XSksICZjYnMpOwoKICAgICAgICBpZiAoY2JzLmRvaXQpCiAgICAgICAgewogICAgICAgICAgICBw
b3MgPSBjYnMubmV3SW5zZXJ0OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoY2JzLmRvaXQpCiAg
ICB7CiAgICAgICAgaWYgKGhpZ2hsaWdodCkKICAgICAgICB7CiAgICAgICAgICAgIENsZWFySGln
aGxpZ2h0KHcpOwogICAgICAgIH0KCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gcG9zOwogICAgICAgIGlmIChkcmF3aXQpCiAgICAgICAg
ewogICAgICAgICAgICBEcmF3TW92ZSh3KTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7
CiAgICAgICAgVmVyaWZ5QmVsbCh3KTsKICAgIH0KCiAgICAodm9pZClfWG1JbVNlbmRTcG90KChX
aWRnZXQpdyk7CiAgICByZXR1cm4gY2JzLmRvaXQ7Cn0KCgpzdGF0aWMgdm9pZApEb0luc2VydChY
bVRleHRGaWVsZFdpZGdldCB3LCBYRXZlbnQgKmV2LCBjaGFyICpidWYsIGludCBsZW4pCnsKICAg
IGlmIChsZW4gPD0gMCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmVkaXRhYmxlKSkKICAgIHsKICAgICAgICBWZXJp
ZnlCZWxsKHcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX0x0RGVidWdJbkRlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdykpCiAgICB7CiAgICBjaGFyICp0
bXA7CgoKICAgICAgICB0bXAgPSBYdE1hbGxvYyhsZW4rMSk7CiAgICAgICAgKF9fZXh0ZW5zaW9u
X18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWYpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChs
ZW4pID8gKHN0cmxlbiAoYnVmKSArIDEgPj0gKChzaXplX3QpIChsZW4pKSA/IChjaGFyICopIG1l
bWNweSAodG1wLCBidWYsIGxlbikgOiBzdHJuY3B5ICh0bXAsIGJ1ZiwgbGVuKSkgOiBzdHJuY3B5
ICh0bXAsIGJ1ZiwgbGVuKSkpOwogICAgICAgIHRtcFtsZW5dID0gJ1wwJzsKICAgICAgICBfTHRE
ZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEb0luc2VydChidWYg
JyVzJyBsZW4gJWQpXG4iLCB0bXAsIGxlbik7CgogICAgICAgIFh0RnJlZSh0bXApOwogICAgfQoK
ICAgIGlmIChsZW4gPD0gMCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHct
PnRleHQuaGFzX3ByaW1hcnkgJiYgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wZW5k
aW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1
cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bv
c19sZWZ0KSAmJgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29y
X3Bvc2l0aW9uKSA8PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3Jp
Z2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIGVuZDsKCiAgICAgICAgc3RhcnQgPSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpOwogICAgICAg
IFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKChXaWRnZXQpdywtMSwtMSxldj9ldi0+eGtleS50aW1l
OjBMKTsKICAgICAgICBNb2RpZnlUZXh0KHcsIGV2LAogICAgICAgICAgICAgICAgICAgc3RhcnQs
IGVuZCwKICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVuLAogICAgICAgICAgICAgICAgICAgTWFz
c2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4
dEZpZWxkU2V0U2VsZWN0aW9uKChXaWRnZXQpdywtMSwtMSxldj9ldi0+eGtleS50aW1lOjBMKTsK
ICAgICAgICBNb2RpZnlUZXh0KHcsIGV2LAogICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiksCiAgICAgICAgICAgICAgICAgICBidWYsIGxl
biwKICAgICAgICAgICAgICAgICAgIERyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKc3Rh
dGljIHZvaWQKRG9TY2FuVHlwZShYbVRleHRGaWVsZFdpZGdldCB3LCBYRXZlbnQgKmV2LCBYbVRl
eHRQb3NpdGlvbiBwb3MpCnsKICAgIHN3aXRjaCAoU2NhblR5cGUodykpCiAgICB7CiAgICBjYXNl
IFhtU0VMRUNUX1BPU0lUSU9OOgogICAgICAgIERvQ3Vyc29yTW92ZSh3LCBldiwgcG9zLCAxLCAx
KTsKCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX2FuY2hvcikg
PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAg
ICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnByaW1fYW5jaG9yKSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp
bV9wb3NfbGVmdCkgPQogICAgICAgICAgICBTY2FuVHlwZVN0YXJ0KHcsIHBvcyk7CiAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCkgPSBTY2FuVHlw
ZUVuZCh3LCBwb3MpOwoKCiAgICAgICAgUHJpbWFyeVNlbGVjdGlvbkNvbXBsZXRlKHcsIGV2LT54
YnV0dG9uLnRpbWUpOwogICAgICAgIERyYXcodyk7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KCgoK
CgoKCnN0YXRpYyB2b2lkCkV4dGVuZEhpZ2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAg
ICBpbnQgeCwgcG9zOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv
biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5BbGxvd1Nl
bGVjdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHggPSB3LT50ZXh0LnNl
bGVjdF9wb3NfeDsKCiAgICBpZiAoeCA8IChpbnQpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y
RHJhdykpCiAgICB7CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9TZWxlY3Rpb25Qb3ModywgKGlu
dCkwKTsKICAgICAgICBpZiAocG9zID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIHBvcy0tOwog
ICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHggPiAoaW50KSgoKChYbVRleHRGaWVsZFBhcnRM
ZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5z
aW9uKSktPlhEcmF3KSArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2Jv
dHRvbSkpKQogICAgewogICAgICAgIHBvcyA9IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9i
b3R0b20pKSk7CiAgICAgICAgaWYgKHBvcyA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuc3RyaW5nX2xlbmd0aCkpCiAgICAgICAgewogICAgICAgICAgICBwb3MrKzsKICAgICAgICB9
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9TZWxlY3Rpb25Q
b3ModywgeCk7CiAgICB9CgogICAgaWYgKHBvcyA9PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
RG9DdXJzb3JNb3ZlKHcsICgodm9pZCAqKTApLCBwb3MsIDAsIDEpOwoKICAgIGlmIChwb3MgPCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fYW5jaG9yKSkKICAgIHsKICAgICAg
ICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0g
U2NhblR5cGVTdGFydCh3LCBwb3MpOwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9IFNjYW5UeXBlRW5kKHcsICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQucHJpbV9hbmNob3IpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg
ICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0gU2NhblR5
cGVTdGFydCh3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fYW5jaG9yKSk7
CgogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpID0gU2NhblR5cGVFbmQodywgcG9zKTsKICAgIH0KCiAgICBTZXRTaW5nbGVIaWdobGln
aHQoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xl
ZnQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSk7CiAg
ICBDdXJzb3JFcmFzZSh3KTsKCiAgICBpZiAoTWFrZVBvc2l0aW9uVmlzaWJsZSh3LCBwb3MpKQog
ICAgewogICAgICAgIERyYXdUZXh0UmVwb3NpdGlvbih3KTsKICAgIH0KCiAgICAgICAgRHJhd1Np
bmdsZUhpZ2hsaWdodCh3KTsKICAgICAgICBDdXJzb3JEcmF3KHcpOwp9CgoKc3RhdGljIHZvaWQK
RXh0ZW5kVGltZXIoWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdEludGVydmFsSWQgKmlkcCkKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldCljbGllbnRfZGF0YTsK
ICAgIGludCBoaWdobGlnaHRfdGltZTsKCiAgICBoaWdobGlnaHRfdGltZSA9IFh0R2V0TXVsdGlD
bGlja1RpbWUoKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNv
cmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNv
cmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSkpIC8gMjsKCiAgICBFeHRlbmRIaWdobGlnaHQodyk7Cgog
ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zZWxlY3RfaWQpID0gWHRBcHBBZGRU
aW1lT3V0KFh0V2lkZ2V0VG9BcHBsaWNhdGlvbkNvbnRleHQoKFdpZGdldCl3KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWhpZ2hsaWdodF90
aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kVGltZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWHRQb2ludGVyKXcpOwoK
fQoKCnN0YXRpYyBCb29sZWFuCkNvbnZlcnRTZWxlY3Rpb24oV2lkZ2V0IGF3LCBBdG9tICpzZWxl
Y3Rpb24sIEF0b20gKnRhcmdldCwgQXRvbSAqdHlwZSwKICAgICAgICAgICAgICAgICBYdFBvaW50
ZXIgKnZhbHVlLCB1bnNpZ25lZCBsb25nICpsZW5ndGgsIGludCAqZm9ybWF0KQp7CiAgICBYbVRl
eHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgQXRvbSBhdG9tX2Nv
bXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv
WG0vVGV4dEYuYyIsIGF3LCAiQ29udmVydFNlbGVjdGlvblxuIik7CgogICAgYXRvbV9jb21wX3Rl
eHQgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+
Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl
bi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCk7CiAgICBhdG9tX3RleHQgPSBYbUludGVy
bkF0b20oKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSks
ICJURVhUIiwgMCk7CgogICAgaWYgKCp0YXJnZXQgPT0gKChBdG9tKSAzMSkpewogICAgICAgICps
ZW5ndGggPSAobG9uZykoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbik7CgoK
CgogICAgICAgICp2YWx1ZSA9ICgoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25U
ZXh0KSkgIT0gKCh2b2lkICopMCkgPyAoc3RyY3B5KFh0TWFsbG9jKCh1bnNpZ25lZClzdHJsZW4o
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkgKyAxKSwgKCgoWG1UZXh0
RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkpIDogKCh2b2lkICopMCkpOwogICAgICAg
ICp0eXBlID0gKChBdG9tKSAzMSk7CiAgICB9CiAgICBlbHNlIGlmICgqdGFyZ2V0ID09IGF0b21f
Y29tcF90ZXh0IHx8ICp0YXJnZXQgPT0gYXRvbV90ZXh0KXsKCiAgICAgICAgICAgIFhUZXh0UHJv
cGVydHkgcHJvcDsKICAgICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICAgICBpbnQgcmV0OwoK
ICAgICAgICAgICAgYnVmID0gWHRNYWxsb2MoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxl
Y3Rpb25MZW4pICsgMSk7CiAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u
c3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkgJiYgX19i
dWlsdGluX2NvbnN0YW50X3AgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uTGVu
KSkgPyAoc3RybGVuICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpKSAr
IDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikp
KSA/IChjaGFyICopIG1lbWNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpIDogc3Ry
bmNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCAoKChY
bVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpKSA6IHN0cm5jcHkgKGJ1ZiwgKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5TZWxlY3Rpb25MZW4pKSkpOwogICAgICAgICAgICBidWZbKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pXSA9ICdcMCc7CgogICAgICAgICAgICByZXQgPSBYbWJU
ZXh0TGlzdFRvVGV4dFByb3BlcnR5KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUu
c2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkpLCAmYnVmLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhD
b21wb3VuZFRleHRTdHlsZSwgJnByb3ApOwoKICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAg
ICAgICAgIGlmIChyZXQgIT0gMCl7CiAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAgICAg
ICAgICAgICAgICp2YWx1ZSA9ICgodm9pZCAqKTApOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGVsc2V7CiAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYyhwcm9wLm5pdGVtcyArIDEpOwog
ICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHJvcC52YWx1ZSwgcHJvcC5uaXRlbXMpOwogICAg
ICAgICAgICAgICAgYnVmW3Byb3Aubml0ZW1zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAqbGVu
Z3RoID0gcHJvcC5uaXRlbXM7CiAgICAgICAgICAgICAgICAqdmFsdWUgPSBidWY7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAqdHlwZSA9IGF0b21fY29tcF90ZXh0OwoKICAgIH0KICAgIGVsc2UK
ICAgICAgICByZXR1cm4gMDsKCiAgICAqZm9ybWF0ID0gODsKICAgIHJldHVybiAxOwp9CgoKCnN0
YXRpYyB2b2lkCkxvc2VTZWxlY3Rpb24oV2lkZ2V0IGF3LCBBdG9tICpzZWxlY3Rpb24pCnsKICAg
ICAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgICAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCBhdywgIkxvc2VTZWxlY3Rpb25c
biIpOwoKICAgICAgICBpZih3LT50ZXh0Lmhhc19wcmltYXJ5KSB7CiAgICAgICAgICAgICAgICB3
LT50ZXh0Lmhhc19wcmltYXJ5ID0gMDsKICAgICAgICAgICAgICAgIGlmICgoKChYbVRleHRGaWVs
ZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
ZXh0ZW5zaW9uKSktPkVjaG8pICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp
bV9wb3NfbGVmdCkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JFcmFzZSh3
KTsKICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5wcmltX3Bvc19yaWdodCksIDApOwogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JE
cmF3KHcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gLTE7CiAgICAgICAgICAgICAgICAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0YXJ0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExl
c3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNp
b24pKS0+T2xkSGlnaGxpZ2h0RW5kKSA9IC0xOwogICAgICAgIH0KfQoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWEV2ZW50ICpldjsKICAgIGludCB1c2VfY3RleHQ7Cn0gU2VsZWN0aW9uQ2xpZW50
RGF0YTsKCgoKc3RhdGljIHZvaWQKUmVxdWVzdFNlbGVjdGlvbihXaWRnZXQgYXcsIFh0UG9pbnRl
ciBjbGllbnQsIEF0b20gKnNlbGVjdGlvbiwgQXRvbSAqdHlwZSwKICAgICAgICAgICAgICAgICBY
dFBvaW50ZXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgKmxlbmd0aCwgaW50ICpmb3JtYXQpCnsKICAg
IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBTZWxlY3Rp
b25DbGllbnREYXRhICpjbGllbnRfZGF0YSA9IChTZWxlY3Rpb25DbGllbnREYXRhKiljbGllbnQ7
CiAgICBYRXZlbnQgKmV2ID0gKFhFdmVudCopY2xpZW50X2RhdGEtPmV2OwoKICAgIF9MdERlYnVn
KCJDT1BZVE8iLCBhdywgIiVzOlJlcXVlc3RTZWxlY3Rpb24oJWQpXG5cdCVzID4lczwgbGVuZ3Ro
ICVkXG4iLCAiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAzNTg4LCAqc2VsZWN0aW9uID09ICgo
QXRvbSkgMSkgPyAiWEFfUFJJTUFSWSIgOiAiWEFfU0VDT05EQVJZIiwgIXZhbHVlID8gIk5VTEwi
IDogdmFsdWUsICpsZW5ndGgpOwoKCgoKCiAgICBpZiAoKCF2YWx1ZSkgfHwgKCpsZW5ndGggPT0g
MCkpCiAgICB7CiAgICAgICAgaWYgKCpzZWxlY3Rpb24gPT0gKChBdG9tKSAyKSkKICAgICAgICB7
CiAgICAgICAgICAgIGlmIChjbGllbnRfZGF0YS0+dXNlX2N0ZXh0ID09IDEpewogICAgICAgICAg
ICAgICAgY2xpZW50X2RhdGEtPnVzZV9jdGV4dCA9IDA7CiAgICAgICAgICAgICAgICBYdEdldFNl
bGVjdGlvblZhbHVlKGF3LCAoKEF0b20pIDIpLCAoKEF0b20pIDMxKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZXF1ZXN0U2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChYdFBvaW50ZXIpY2xpZW50X2RhdGEsIGV2LT54YnV0dG9uLnRpbWUpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBjbGllbnRfZGF0YS0+
dXNlX2N0ZXh0ID0gMTsKICAgICAgICAgICAgICAgIFh0R2V0U2VsZWN0aW9uVmFsdWUoYXcsICgo
QXRvbSkgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1JbnRlcm5BdG9tKCgo
KChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5p
dGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i
amVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiQ09NUE9V
TkRfVEVYVCIsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTZWxl
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlciljbGllbnRf
ZGF0YSwgZXYtPnhidXR0b24udGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNsaWVudF9kYXRhLT51c2VfY3RleHQgPT0g
MSl7CiAgICAgICAgICAgICAgICBjbGllbnRfZGF0YS0+dXNlX2N0ZXh0ID0gMDsKICAgICAgICAg
ICAgICAgIFh0R2V0U2VsZWN0aW9uVmFsdWUoYXcsICgoQXRvbSkgMSksICgoQXRvbSkgMzEpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTZWxlY3Rpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlciljbGllbnRfZGF0YSwgZXYtPnhidXR0
b24udGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
UmVxdWVzdFNlbGVjdGlvbjogbm8gc2VsZWN0aW9uIGF2YWlsYWJsZSIpOwogICAgICAgICAgICAg
ICAgWHRGcmVlKChjaGFyICopY2xpZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K
ICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAoKnNlbGVjdGlvbiA9PSAoKEF0b20pIDIpKQogICAg
ICAgIHsKICAgICAgICAgICAgWFRleHRQcm9wZXJ0eSBwcm9wOwogICAgICAgICAgICBpbnQgY291
bnQsIGk7CiAgICAgICAgICAgIGNoYXIgKipsaXN0OwoKICAgICAgICAgICAgaWYgKCp0eXBlID09
ICgoQXRvbSkgMzEpKXsKICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKCiAgICAgICAgICAgICAg
ICBidWYgPSBYdE1hbGxvYygqbGVuZ3RoICsgMSk7CiAgICAgICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKChjaGFyICopdmFsdWUpICYmIF9fYnVpbHRpbl9j
b25zdGFudF9wICgqbGVuZ3RoKSA/IChzdHJsZW4gKChjaGFyICopdmFsdWUpICsgMSA+PSAoKHNp
emVfdCkgKCpsZW5ndGgpKSA/IChjaGFyICopIG1lbWNweSAoYnVmLCAoY2hhciAqKXZhbHVlLCAq
bGVuZ3RoKSA6IHN0cm5jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkpIDogc3RybmNw
eSAoYnVmLCAoY2hhciAqKXZhbHVlLCAqbGVuZ3RoKSkpOwogICAgICAgICAgICAgICAgYnVmWyps
ZW5ndGhdID0gJ1wwJzsKCgogICAgICAgICAgICAgICAgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0
eSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3Nf
aW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgo
T2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJmJ1Ziwg
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZw
cm9wKTsKCiAgICAgICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQgY2hhciAq
KXZhbHVlOwogICAgICAgICAgICAgICAgcHJvcC5lbmNvZGluZyA9ICp0eXBlOwogICAgICAgICAg
ICAgICAgcHJvcC5mb3JtYXQgPSAqZm9ybWF0OwogICAgICAgICAgICAgICAgcHJvcC5uaXRlbXMg
PSAqbGVuZ3RoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBYbWJUZXh0UHJvcGVydHlUb1Rl
eHRMaXN0KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5
IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAm
cHJvcCwgJmxpc3QsICZjb3VudCk7CgogICAgICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyBpKysp
ewogICAgICAgICAgICAgICAgRG9JbnNlcnQodywgZXYsIGxpc3RbaV0sIHN0cmxlbihsaXN0W2ld
KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgICAgWG1UZXh0UG9zaXRpb24gcG9zOwoKICAgICAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9T
ZWxlY3Rpb25Qb3ModywgZXYtPnhidXR0b24ueCk7CiAgICAgICAgICAgIF9MdERlYnVnKCJDT1BZ
VE8iLCBhdywgIiVzOlJlcXVlc3RTZWxlY3Rpb24oJWQpIC0gJWQgJWRcbiIsICIuLi8uLi8uLi9s
aWIvWG0vVGV4dEYuYyIsIDM2NjIsIGV2LT54YnV0dG9uLngsIHBvcyk7CgoKICAgICAgICAgICAg
X0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXM6ICVkXG4i
LCAiZXZlbnQgcG9zIiwgKGludClwb3MpOwoKICAgICAgICAgICAgaWYgKF9MdERlYnVnSW5EZWJ1
ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcpKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0
KXcsICJSZXF1ZXN0U2VsZWN0aW9uOiBpbnNlcnRpbmcgJyVzJyBsZW5ndGg9JWQgYXQgcG9zOiAl
ZFxuIiwgKGNoYXIgKil2YWx1ZSwgKGludCkoKmxlbmd0aCksIHBvcyk7CgoKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgaWYgKERvQ3Vyc29yTW92ZSh3LCBldiwgcG9zLCAxLCAxKSkKICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICAgIFhUZXh0UHJvcGVydHkgcHJvcDsKICAgICAgICAgICAg
ICAgIGludCBjb3VudCwgaTsKICAgICAgICAgICAgICAgIGNoYXIgKipsaXN0OwoKICAgICAgICAg
ICAgICAgIGlmICgqdHlwZSA9PSAoKEF0b20pIDMxKSl7CiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqYnVmOwoKICAgICAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYygqbGVuZ3RoICsgMSk7
CiAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9w
ICgoY2hhciAqKXZhbHVlKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoKmxlbmd0aCkgPyAoc3Ry
bGVuICgoY2hhciAqKXZhbHVlKSArIDEgPj0gKChzaXplX3QpICgqbGVuZ3RoKSkgPyAoY2hhciAq
KSBtZW1jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkgOiBzdHJuY3B5IChidWYsIChj
aGFyICopdmFsdWUsICpsZW5ndGgpKSA6IHN0cm5jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxl
bmd0aCkpKTsKICAgICAgICAgICAgICAgICAgICBidWZbKmxlbmd0aF0gPSAnXDAnOwoKCiAgICAg
ICAgICAgICAgICAgICAgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgoKCgoT2JqZWN0KSh3KSkt
Pm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAo
KFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVj
dC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJmJ1ZiwgMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZwcm9wKTsKCiAgICAgICAgICAg
ICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl
bHNlewogICAgICAgICAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQgY2hhciAqKXZh
bHVlOwogICAgICAgICAgICAgICAgICAgIHByb3AuZW5jb2RpbmcgPSAqdHlwZTsKICAgICAgICAg
ICAgICAgICAgICBwcm9wLmZvcm1hdCA9ICpmb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgcHJv
cC5uaXRlbXMgPSAqbGVuZ3RoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFht
YlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSksICZwcm9wLCAmbGlzdCwgJmNvdW50KTsKCiAgICAgICAgICAgICAgICBm
b3IoaT0wOyBpPGNvdW50OyBpKyspewogICAgICAgICAgICAgICAgICAgIERvSW5zZXJ0KHcsIGV2
LCBsaXN0W2ldLCBzdHJsZW4obGlzdFtpXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAgIFh0RnJlZSgoY2hhciAqKWNsaWVudCk7CiAgICAgICAgWHRG
cmVlKChjaGFyICopdmFsdWUpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKUHJpbWFyeVNlbGVjdGlv
bkNvbXBsZXRlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFRpbWUgdGltZSkKewogICAgaW50IGxlbjsK
CiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkKICAgIHsK
ICAgICAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSk7
CiAgICB9CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9ICgo
dm9pZCAqKTApOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pID0g
MDsKICAgIGxlbiA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nfcmln
aHQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAg
ICAgICAgU2V0U2luZ2xlSGlnaGxpZ2h0KChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5wcmltX3Bvc19yaWdodCkpOwoKICAgIGlmIChsZW4gPiAwKQogICAgewogICAgICAgIHctPnRl
eHQuaGFzX3ByaW1hcnkgPSAxOwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2Vs
ZWN0aW9uTGVuKSA9IGxlbjsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpID0gWHRNYWxsb2MobGVuKTsKICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWls
dGluX2NvbnN0YW50X3AgKCYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVso
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpXSkgJiYgX19idWls
dGluX2NvbnN0YW50X3AgKGxlbikgPyAoc3RybGVuICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19s
ZWZ0KV0pICsgMSA+PSAoKHNpemVfdCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5ICgoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCAmKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bv
c19sZWZ0KV0sIGxlbikgOiBzdHJuY3B5ICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpLCAmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KV0sIGxlbikpIDogc3RybmNw
eSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgJigoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQucHJpbV9wb3NfbGVmdCldLCBsZW4pKSk7CgoKCiAgICAgICAgWHRPd25TZWxlY3Rpb24oKFdp
ZGdldCl3LCAoKEF0b20pIDEpLCB0aW1lLAogICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRT
ZWxlY3Rpb24sIExvc2VTZWxlY3Rpb24sICgodm9pZCAqKTApKTsKCgoKCgoKCiAgICB9CiAgICBl
bHNlCiAgICB7CgoKCiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24oKFdpZGdldCl3LC0x
LC0xLHRpbWUpOwogICAgfQp9CgoKCgoKCgpzdGF0aWMgdm9pZApfQmxpbmtDdXJzb3JDYWxsYmFj
ayhYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0SW50ZXJ2YWxJZCAqaWRwKQp7CiAgICBYbVRleHRG
aWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWNsaWVudF9kYXRhOwoKCgogICAgWG1J
bVNldEZvY3VzVmFsdWVzKChXaWRnZXQpY2xpZW50X2RhdGEsICgodm9pZCAqKTApLCAwKTsKCiAg
ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5ibGlua19vbikpCiAgICB7CiAg
ICAgICAgQ3Vyc29yRXJhc2Uodyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgQ3Vyc29y
RHJhdyh3KTsKICAgIH0KCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnRpbWVy
X2lkKSA9IFh0QXBwQWRkVGltZU91dChYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KChXaWRn
ZXQpdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuYmxpbmtfcmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CbGlua0N1cnNvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoWHRQb2ludGVyKXcpOwp9CgoKCgpleHRlcm4gdm9pZApfWG1U
ZXh0RmllbGRGb2N1c0luKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAg
ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0VmVy
aWZ5Q2FsbGJhY2tTdHJ1Y3QgY2JzOwogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4
dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
KFdpZGdldCl3LCAiJXNcbiIsICJfWG1UZXh0RmllbGRGb2N1c0luIik7CgogICAgaWYgKCBldmVu
dC0+dHlwZSA9PSA5ICYmIGV2ZW50LT54YW55LnNlbmRfZXZlbnQgJiYgISgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5oYXNfZm9jdXMpICkKICAgIHsKICAgICAgICBDdXJzb3JFcmFz
ZSh0ZncpOwogICAgICAgIEN1cnNvclNldCh0ZncsIDEpOwoKICAgICAgICBpZiAoKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmJsaW5rX3JhdGUpID4gMCAmJiAhKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHRmdykpLT50ZXh0LnRpbWVyX2lkKSkKICAgICAgICB7CiAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC50aW1lcl9pZCkgPSBYdEFwcEFkZFRpbWVP
dXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldFRvQXBwbGlj
YXRpb25Db250ZXh0KChXaWRnZXQpdGZ3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5i
bGlua19yYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CbGlua0N1cnNvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlcil0ZncpOwogICAgICAgIH0KICAgICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBDdXJzb3JEcmF3KHRmdyk7CiAgICAgICAgfQoK
ICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmZvY3VzX2NhbGxi
YWNrKSkKICAgICAgICB7CiAgICAgICAgICAgIGNicy5yZWFzb24gPSBYbUNSX0ZPQ1VTOwogICAg
ICAgICAgICBjYnMuZXZlbnQgPSBldmVudDsKICAgICAgICAgICAgY2JzLmN1cnJJbnNlcnQgPSBj
YnMubmV3SW5zZXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICAgICAgICAgIGNicy5zdGFydFBvcyA9IGNicy5lbmRQb3MgPSAwOwogICAg
ICAgICAgICBjYnMudGV4dCA9ICgodm9pZCAqKTApOwoKICAgICAgICAgICAgWHRDYWxsQ2FsbGJh
Y2tMaXN0KChXaWRnZXQpdGZ3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZm9j
dXNfY2FsbGJhY2spLCAmY2JzKTsKICAgICAgICB9CgogICAgICAgIGlmICgoKChYbVRleHRGaWVs
ZFdpZGdldCkodGZ3KSktPnRleHQuZWRpdGFibGUpKQogICAgICAgIHsKICAgICAgICAgICAgWG1J
bVNldEZvY3VzVmFsdWVzKHcsICgodm9pZCAqKTApLCAwKTsKICAgICAgICB9CgogICAgfQogICAg
WHRDYWxsQWN0aW9uUHJvYygoV2lkZ2V0KXRmdywgIlByaW1pdGl2ZUZvY3VzSW4iLCBldmVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywgKm51bV9wYXJhbXMpOwoKfQoKCgpleHRl
cm4gdm9pZApfWG1UZXh0RmllbGRGb2N1c091dChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwKICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7
CiAgICBYbVRleHRWZXJpZnlDYWxsYmFja1N0cnVjdCBjYnM7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGli
L1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgIl9YbVRleHRGaWVsZEZvY3VzT3V0Iik7
CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5oYXNfZm9jdXMpKQog
ICAgewogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQudGltZXJf
aWQpKQogICAgICAgIHsKICAgICAgICAgICAgWHRSZW1vdmVUaW1lT3V0KCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC50aW1lcl9pZCkpOwogICAgICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodGZ3KSktPnRleHQudGltZXJfaWQpID0gMDsKICAgICAgICB9CgogICAgICAgIEN1
cnNvckVyYXNlKHRmdyk7CiAgICAgICAgQ3Vyc29yU2V0KHRmdywgMCk7CiAgICAgICAgQ3Vyc29y
RHJhdyh0ZncpOwoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0
Lmxvc2luZ19mb2N1c19jYWxsYmFjaykpCiAgICAgICAgewogICAgICAgICAgICBjYnMucmVhc29u
ID0gWG1DUl9MT1NJTkdfRk9DVVM7CiAgICAgICAgICAgIGNicy5ldmVudCA9IGV2ZW50OwogICAg
ICAgICAgICBjYnMuY3Vyckluc2VydCA9IGNicy5uZXdJbnNlcnQgPSAoKChYbVRleHRGaWVsZFdp
ZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgY2JzLnN0YXJ0
UG9zID0gY2JzLmVuZFBvcyA9IDA7CiAgICAgICAgICAgIGNicy50ZXh0ID0gKCh2b2lkICopMCk7
CgogICAgICAgICAgICBpZiAoKCgoWG1HYWRnZXQpKHcpKS0+cmVjdGFuZ2xlLm1hbmFnZWQpKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBYdENhbGxDYWxsYmFja0xpc3QoKFdpZGdldCl0
ZncsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5sb3NpbmdfZm9jdXNfY2FsbGJh
Y2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNicyk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQu
ZWRpdGFibGUpKQogICAgICAgIHsKICAgICAgICAgICAgWG1JbVVuc2V0Rm9jdXMoKFdpZGdldCl0
ZncpOwogICAgICAgIH0KICAgIH0KCgoKCiAgICBYdENhbGxBY3Rpb25Qcm9jKChXaWRnZXQpdGZ3
LCAiUHJpbWl0aXZlRm9jdXNPdXQiLCBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtcywgKm51bV9wYXJhbXMpOwp9CgoKc3RhdGljIHZvaWQKYWN0aXZhdGUoV2lkZ2V0IHcsIFhF
dmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg
WG1BbnlDYWxsYmFja1N0cnVjdCBjYnM7CiAgICBXaWRnZXQgcGFyZW50OwoKICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAiYWN0aXZhdGUi
KTsKCgogICAgY2JzLnJlYXNvbiA9IFhtQ1JfQUNUSVZBVEU7CiAgICBjYnMuZXZlbnQgPSBldmVu
dDsKCiAgICBYdENhbGxDYWxsYmFja0xpc3QodywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKChYbVRl
eHRGaWVsZFdpZGdldCl3KSktPnRleHQuYWN0aXZhdGVfY2FsbGJhY2spLCAmY2JzKTsKCgoKCgog
ICAgcGFyZW50ID0gdzsKICAgIHdoaWxlICgocGFyZW50ID0gKCgoT2JqZWN0KShwYXJlbnQpKS0+
b2JqZWN0LnBhcmVudCkpICE9ICgodm9pZCAqKTApKQogICAgewogICAgICAgIGlmICgoKCgoKF9Y
bV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkocGFy
ZW50KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+
cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl
dENsYXNzKSgoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv
cmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0
ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lk
Z2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+
Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/
ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVNFTEVDVElPTl9CT1hfQklUKSA+PiAzKV0p
ICYgKDEgPDwgKChYbVNFTEVDVElPTl9CT1hfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSB8
fCAoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2Jq
ZWN0KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z
aW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgm
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
KSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0
Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCop
KCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkocGFyZW50KSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFz
dFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtTUVTU0FHRV9CT1hfQklUKSA+
PiAzKV0pICYgKDEgPDwgKChYbU1FU1NBR0VfQk9YX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAw
KSkpICYmICgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LnBhcmVudCkpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJh
c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoKCgoT2JqZWN0KShwYXJlbnQp
KS0+b2JqZWN0LnBhcmVudCkpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu
ZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NF
eHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkocGFyZW50KSktPm9i
amVjdC5wYXJlbnQpKSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu
c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht
R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KSgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3QucGFyZW50KSkpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgq
X1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbURJQUxPR19TSEVM
TF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtRElBTE9HX1NIRUxMX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGli
L1htL1RleHRGLmMiLCBwYXJlbnQsICJNYW5hZ2VyIHBhcmVudCBhY3RpdmF0ZSBpbiBUZXh0Rlxu
Iik7CgoKICAgICAgICAgICAgWHRDYWxsQWN0aW9uUHJvYyhwYXJlbnQsICJNYW5hZ2VyUGFyZW50
QWN0aXZhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LCBwYXJhbXMsICpu
dW1fcGFyYW1zKTsKICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApiYWNrd2FyZF9jaGFy
YWN0ZXIoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBh
cmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9
IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0
Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJiYWNrd2FyZF9jaGFyYWN0ZXIiKTsKCiAgICBpZiAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQog
ICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKICAgICAgICBjaGFyICpwdHI7CiAgICAg
ICAgaW50IG5leHQsIGk7CgogICAgICAgIHB0ciA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0Zncp
KS0+dGV4dC52YWx1ZSk7CiAgICAgICAgbmV4dCA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0
aCgoV2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vy
c29yX3Bvc2l0aW9uKS0xKTsKICAgICAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKS0xOwogICAgICAgIGZvcihpPSgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTI7IGk+PTA7IGktLSl7CiAgICAg
ICAgICAgIGlmIChuZXh0ID4gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3
LCBwdHIsIGkpKXsKICAgICAgICAgICAgICAgIHBvcyA9IGkgKyAxOwogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG5leHQgPT0gKGludClfWG1UZXh0
Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3LCBwdHIsIGkpKXsKICAgICAgICAgICAgICAgIHBv
cyA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIERvQ3Vyc29yTW92ZSh0Zncs
IGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKYmFja3dhcmRfd29yZChXaWRn
ZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwg
Km51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdp
ZGdldCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3
LCAiJXNcbiIsICJiYWNrd2FyZF93b3JkIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID4gMCkKICAgIHsKICAgICAgICBYbVRleHRQ
b3NpdGlvbiBwb3M7CgogICAgICAgIHBvcyA9IFdvcmRTdGFydCh0ZncsIFNraXBCYWNrd2FyZCh0
ZncsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pKSk7
CgogICAgICAgIERvQ3Vyc29yTW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3Rh
dGljIHZvaWQKYmVlcChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICBTdHJpbmcgKnBhcmFtcywg
Q2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAiYmVlcCIpOwoKICAgIFhCZWxsKCgoKChPYmplY3Qp
KHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0
KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+
b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCA1MCk7Cn0KCgpzdGF0aWMgdm9p
ZApiZWdpbm5pbmdfb2ZfbGluZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAg
ICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVs
ZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImJlZ2lubmluZ19vZl9saW5l
Iik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9z
aXRpb24pID4gMCkKICAgIHsKICAgICAgICBYbVRleHRQb3NpdGlvbiBwb3M7CgogICAgICAgIHBv
cyA9IDA7CgogICAgICAgIERvQ3Vyc29yTW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9
CgoKc3RhdGljIHZvaWQKY2xlYXJfc2VsZWN0aW9uKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg
ICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CmludCBw
b3M7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
ImNsZWFyX3NlbGVjdGlvbiIpOwoKCgoKCgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCko
dGZ3KSktPnRleHQuZWRpdGFibGUpIHx8ICF0ZnctPnRleHQuaGFzX3ByaW1hcnkpCiAgICB7CiAg
ICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IocG9z
ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX2xlZnQpO3Bvczwo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpO3BvcysrKQog
ICAgewogICAgICAgIGlmKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC52YWx1ZSlb
cG9zXSAhPSAnXG4nKQogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl
eHQudmFsdWUpW3Bvc10gPSAnICc7CiAgICB9CiAgICBYbVRleHRGaWVsZENsZWFyU2VsZWN0aW9u
KHcsZXYtPnhrZXkudGltZSk7Cn0Kc3RhdGljIHZvaWQKY29weV9jbGlwYm9hcmQoV2lkZ2V0IHcs
IFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVt
X3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl
dCl3LCAiJXNcbiIsICJjb3B5X2NsaXBib2FyZCIpOwoKICAgIFhtVGV4dEZpZWxkQ29weSh3LCBl
di0+eGtleS50aW1lKTsKfQoKCnN0YXRpYyB2b2lkCmNvcHlfcHJpbWFyeShXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFt
cykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAi
JXNcbiIsICJjb3B5X3ByaW1hcnkiKTsKCgoKfQoKCnN0YXRpYyB2b2lkCmNvcHlfdG8oV2lkZ2V0
IHcsIFhFdmVudCAqZXYsCiAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFy
YW1zKQp7CgoKCgogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0
KXc7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIl
c1xuIiwgImNvcHlfdG8iKTsKICAgIF9MdERlYnVnKCJDT1BZVE8iLCB3LCAiJXM6Y29weV90bygl
ZCkgLSAlZFxuIiwgIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgNDA4NCwgZXYtPnhidXR0b24u
eCk7CgoKICAgIGlmICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+QWxsb3dTZWxlY3Rpb24p
KQogICAgewogICAgICAgIFNlbGVjdGlvbkNsaWVudERhdGEgKmNsaWVudF9kYXRhOwoKICAgICAg
ICBjbGllbnRfZGF0YSA9ICgoU2VsZWN0aW9uQ2xpZW50RGF0YSAqKSBYdE1hbGxvYygodW5zaWdu
ZWQpIHNpemVvZihTZWxlY3Rpb25DbGllbnREYXRhKSkpOwogICAgICAgIGNsaWVudF9kYXRhLT5l
diA9ICgoWEV2ZW50ICopIFh0TWFsbG9jKCh1bnNpZ25lZCkgc2l6ZW9mKFhFdmVudCkpKTsKCiAg
ICAgICAgKmNsaWVudF9kYXRhLT5ldiA9ICpldjsKICAgICAgICBjbGllbnRfZGF0YS0+dXNlX2N0
ZXh0ID0gMTsKCiAgICAgICAgWHRHZXRTZWxlY3Rpb25WYWx1ZSh3LCAoKEF0b20pIDIpLAogICAg
ICAgICAgICAgICAgICAgICAgICBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qu
d2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQp
KHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCksCiAgICAgICAgICAg
ICAgICAgICAgICAgIFJlcXVlc3RTZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIChY
dFBvaW50ZXIpY2xpZW50X2RhdGEgLCBldi0+eGJ1dHRvbi50aW1lKTsKICAgIH0KfQoKCnN0YXRp
YyB2b2lkCmN1dF9jbGlwYm9hcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAg
U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZEN1
dCh3LCBldi0+eGJ1dHRvbi50aW1lKTsKfQoKCnN0YXRpYyB2b2lkCmN1dF9wcmltYXJ5KFdpZGdl
dCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51
bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn
ZXQpdywgIiVzXG4iLCAiY3V0X3ByaW1hcnkiKTsKfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9uZXh0
X2NoYXJhY3RlcihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRn
ZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfbmV4dF9jaGFyYWN0ZXIi
KTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkp
CiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAodGZ3LT50ZXh0Lmhhc19wcmltYXJ5ICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0Zncp
KS0+dGV4dC5wZW5kaW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+PSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQucHJpbV9wb3NfbGVmdCkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQucHJpbV9wb3NfcmlnaHQpKQogICAgewogICAgICAgIGludCBzdGFydCwgZW5kOwoK
ICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
bGVmdCk7CiAgICAgICAgZW5kID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmlt
X3Bvc19yaWdodCk7CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+
eGtleS50aW1lKTsKICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAg
ICBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgKGNoYXIgKikwLCAwLAogICAgICAgICAg
ICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KICAgIGVs
c2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAg
ewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKICAgICAgICBjaGFyICpwdHI7CiAgICAgICAg
aW50IGN1cnIsIGk7CgogICAgICAgIHB0ciA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+
dGV4dC52YWx1ZSk7CiAgICAgICAgY3VyciA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgo
V2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29y
X3Bvc2l0aW9uKSk7CiAgICAgICAgcG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50
ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAgICAgZm9yKGk9KCgoWG1UZXh0RmllbGRXaWRnZXQp
KHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikrMTsgaTw9KCgoWG1UZXh0RmllbGRXaWRnZXQp
KHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOyBpKyspewogICAgICAgICAgICBpZiAoY3VyciA8
IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXRmdywgcHRyLCBpKSl7CiAgICAg
ICAgICAgICAgICBwb3MgPSBpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAgICAgICAg
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLCBwb3Ms
CiAgICAgICAgICAgICAgICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgICAgICBEcmF3
LCBDUF9FbmRPZkluc2VydCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApkZWxldGVfcHJldmlvdXNf
Y2hhcmFjdGVyKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRX
aWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4u
L2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfcHJldmlvdXNfY2hh
cmFjdGVyIik7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZWRp
dGFibGUpKQogICAgewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKHRmdy0+dGV4dC5oYXNfcHJpbWFyeSAmJiAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQucGVuZGluZ19kZWxldGUpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX2xlZnQpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPD0gKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQs
IGVuZDsKCiAgICAgICAgc3RhcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnBy
aW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQucHJpbV9wb3NfcmlnaHQpOwogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEs
LTEsZXYtPnhrZXkudGltZSk7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAg
ICAgICAgICAgc3RhcnQsIGVuZCwKICAgICAgICAgICAgICAgICAgIChjaGFyICopMCwgMCwKICAg
ICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9
CiAgICBlbHNlIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bv
c2l0aW9uKSA+IDApCiAgICB7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gcG9zOwogICAgICAgIGNo
YXIgKnB0cjsKICAgICAgICBpbnQgbmV4dCwgaTsKCiAgICAgICAgcHRyID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHRmdykpLT50ZXh0LnZhbHVlKTsKICAgICAgICBuZXh0ID0gKGludClfWG1UZXh0
Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3LCBwdHIsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTEpOwogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTE7CiAgICAgICAgZm9yKGk9
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiktMjsgaT49
MDsgaS0tKXsKICAgICAgICAgICAgaWYgKG5leHQgPiAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lk
dGgoKFdpZGdldCl0ZncsIHB0ciwgaSkpewogICAgICAgICAgICAgICAgcG9zID0gaSArIDE7CiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV4dCA9
PSAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl0ZncsIHB0ciwgaSkpewogICAg
ICAgICAgICAgICAgcG9zID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgTW9k
aWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgcG9zLCAoKChYbVRleHRGaWVsZFdp
ZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSwKICAgICAgICAgICAgICAgICAgIChj
aGFyICopMCwgMCwKICAgICAgICAgICAgICAgICAgIERyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAg
IH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9uZXh0X3dvcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYs
CiAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7
CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBf
THREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImRl
bGV0ZV9uZXh0X3dvcmQiKTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+
dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBpZiAodGZ3LT50ZXh0Lmhhc19wcmltYXJ5ICYmICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5wZW5kaW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+PSAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgJiYKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpKQogICAgewogICAgICAgIGlu
dCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAgICAgZW5kID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCk7CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rp
b24odywtMSwtMSxldi0+eGtleS50aW1lKTsKICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAg
ICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgKGNoYXIgKikw
LCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0
KTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmlu
Z19sZW5ndGgpKQogICAgewogICAgICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAg
ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
LAogICAgICAgICAgICAgICAgICAgU2tpcEZvcndhcmQodGZ3LCBXb3JkRW5kKHRmdywgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKSwKICAgICAgICAg
ICAgICAgICAgIChjaGFyICopMCwgMCwKICAgICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VE
cmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApkZWxldGVfcHJldmlv
dXNfd29yZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
ICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0
ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1ht
L1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImRlbGV0ZV9wcmV2aW91c193b3JkIik7Cgog
ICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZWRpdGFibGUpKQogICAg
ewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KHRmdy0+dGV4dC5oYXNfcHJpbWFyeSAmJiAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl
eHQucGVuZGluZ19kZWxldGUpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50
ZXh0LnByaW1fcG9zX2xlZnQpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPD0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50
ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIGVuZDsKCiAgICAg
ICAgc3RhcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQp
OwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpOwogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEsLTEsZXYtPnhrZXku
dGltZSk7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgc3Rh
cnQsIGVuZCwKICAgICAgICAgICAgICAgICAgIChjaGFyICopMCwgMCwKICAgICAgICAgICAgICAg
ICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9CiAgICBlbHNlIGlm
ICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+IDAp
CiAgICB7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgV29y
ZFN0YXJ0KHRmdywgU2tpcEJhY2t3YXJkKHRmdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKSwKICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLAogICAgICAgICAgICAgICAg
ICAgKGNoYXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQ
X0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9zZWxlY3Rpb24oV2lk
Z2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRp
bmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0Rmll
bGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lk
Z2V0KXcsICIlc1xuIiwgImRlbGV0ZV9zZWxlY3Rpb24iKTsKCiAgICBpZiAoISgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAgICAgICAgVmVyaWZ5QmVs
bCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodGZ3LT50ZXh0Lmhhc19wcmlt
YXJ5KQogICAgewogICAgICAgIGludCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAgICAgZW5kID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCk7CiAgICAgICAg
WG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+eGtleS50aW1lKTsKICAgICAgICBN
b2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLAogICAgICAg
ICAgICAgICAgICAgKGNoYXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5n
ZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV90b19l
bmRfb2ZfbGluZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRn
ZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfdG9fZW5kX29mX2xpbmUi
KTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkp
CiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikg
PCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7
CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+eGtleS50aW1lKTsK
ICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAgICAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSwgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpLAogICAgICAgICAgICAgICAgICAgKGNo
YXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9m
SW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV90b19zdGFydF9vZl9saW5lKFdp
ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFt
cywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChY
bVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu
YyIsIChXaWRnZXQpdywgIiVzXG4iLCAiZGVsZXRlX3RvX3N0YXJ0X29mX2xpbmUiKTsKCiAgICBp
ZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAg
ICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQogICAg
ewogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEsLTEsZXYtPnhrZXkudGltZSk7
CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgMCwgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiksCiAgICAgICAgICAg
ICAgICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgICAgICBNYXNzaXZlQ2hhbmdlRHJh
dywgQ1BfRW5kT2ZJbnNlcnQpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZGVsZXRlX2FsbChXaWRn
ZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51
bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdl
dCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAi
JXNcbiIsICJkZWxldGVfYWxsIik7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQuZWRpdGFibGUpKQogICAgewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+
eGtleS50aW1lKTsKICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAgICAgMCwgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpLAogICAgICAgICAg
ICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9S
ZXNldCk7Cn0KCgpzdGF0aWMgdm9pZApkZXNlbGVjdF9hbGwoV2lkZ2V0IHcsIFhFdmVudCAqZXYs
CiAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
ZGVzZWxlY3RfYWxsIik7CiAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbih3LC0xLC0xLGV2LT54
a2V5LnRpbWUpOwp9CgoKc3RhdGljIHZvaWQKZG9fcXVpY2tfYWN0aW9uKFdpZGdldCB3LCBYRXZl
bnQgKmV2LAogICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFy
YW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcs
ICIlc1xuIiwgImRvX3F1aWNrX2FjdGlvbiIpOwp9CgoKc3RhdGljIHZvaWQKZW5kX29mX2xpbmUo
V2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxk
V2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl
dCl3LCAiJXNcbiIsICJlbmRfb2ZfbGluZSIpOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICBYbVRleHRQb3NpdGlvbiBw
b3M7CgogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zdHJp
bmdfbGVuZ3RoKTsKCiAgICAgICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMCwgMSk7CiAg
ICB9Cn0KCgpzdGF0aWMgdm9pZAplbnRlcihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CgogICAgX0x0RGVidWcoIi4uLy4u
Ly4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJlbnRlciIpOwoKCgogICAg
WHRDYWxsQWN0aW9uUHJvYyh3LCAiUHJpbWl0aXZlRW50ZXIiLCBldiwgcGFyYW1zLCAqbnVtX3Bh
cmFtcyk7Cgp9CgoKCgoKCnN0YXRpYyB2b2lkCmV4dGVuZF9hZGp1c3QoV2lkZ2V0IHcsIFhFdmVu
dCAqZXYsCiAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1z
KQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
ImV4dGVuZF9hZGp1c3QiKTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5B
bGxvd1NlbGVjdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRmdy0+dGV4
dC5zZWxlY3RfcG9zX3ggPSBldi0+eGJ1dHRvbi54OwoKICAgIGlmIChldi0+eGJ1dHRvbi54IDwg
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSB8fAogICAgICAgIGV2LT54YnV0dG9u
LnggPiAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpICsgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKQogICAgewogICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuc2VsZWN0X2lkKSkKICAgICAgICB7CiAgICAg
ICAgICAgIEV4dGVuZEhpZ2hsaWdodCh0ZncpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgICBFeHRlbmRUaW1lcigoWHRQb2ludGVyKXRmdywgKFh0SW50ZXJ2YWxJ
ZCkwKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKCgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zZWxlY3RfaWQpKQogICAgICAgIHsKICAgICAgICAg
ICAgWHRSZW1vdmVUaW1lT3V0KCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zZWxl
Y3RfaWQpKTsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnNl
bGVjdF9pZCkgPSAoWHRJbnRlcnZhbElkKTA7CiAgICAgICAgfQoKICAgICAgICBFeHRlbmRIaWdo
bGlnaHQodGZ3KTsKICAgIH0KfQoKCgoKCnN0YXRpYyB2b2lkCmV4dGVuZF9lbmQoV2lkZ2V0IHcs
IFhFdmVudCAqZXYsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg
ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgICAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
ImV4dGVuZF9lbmQiKTsKCiAgICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+
QWxsb3dTZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAg
ICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnNlbGVjdF9pZCkpIHsK
ICAgICAgICAgICAgICAgIFh0UmVtb3ZlVGltZU91dCgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQuc2VsZWN0X2lkKSk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuc2VsZWN0X2lkKSA9IChYdEludGVydmFsSWQpMDsKICAgICAgICB9Cgog
ICAgICAgIFByaW1hcnlTZWxlY3Rpb25Db21wbGV0ZSh0ZncsIGV2LT54YnV0dG9uLnRpbWUpOwp9
CgoKCgoKCgpzdGF0aWMgdm9pZApleHRlbmRfc3RhcnQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFht
VGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgaW50IHBvczsK
CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xu
IiwgImV4dGVuZF9zdGFydCIpOwoKICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCh3LCBYbVRSQVZFUlNF
X0NVUlJFTlQpOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2Vs
ZWN0aW9uKSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcG9zID0gVGV4dFBpeGVs
VG9TZWxlY3Rpb25Qb3ModGZ3LCBldi0+eGJ1dHRvbi54KTsKICAgIERvQ3Vyc29yTW92ZSh0Zncs
IGV2LCBwb3MsIDAsIDEpOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl
eHQucHJpbV9wb3NfbGVmdCkgPCAwKQogICAgewogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh0ZncpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5wcmltX3Bvc19yaWdodCkgPQogICAgICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9hbmNob3IpID0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICB9CgogICAgaWYgKCgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fYW5jaG9yKSkKICAgIHsKICAgICAgICAoKChY
bVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgIH0KICAgIGVsc2UK
ICAgIHsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlv
bik7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApmb3J3YXJkX2NoYXJhY3RlcihXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1f
cGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQp
dzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIl
c1xuIiwgImZvcndhcmRfY2hhcmFjdGVyIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBv
czsKICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgaW50IGN1cnIsIGk7CgogICAgICAgIHB0ciA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC52YWx1ZSk7CiAgICAgICAgY3VyciA9
IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSk7CiAgICAgICAgcG9zID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAg
ICAgZm9yKGk9KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlv
bikrMTsgaTw9KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgp
OyBpKyspewogICAgICAgICAgICBpZiAoY3VyciA8IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0
aCgoV2lkZ2V0KXRmdywgcHRyLCBpKSl7CiAgICAgICAgICAgICAgICBwb3MgPSBpOwogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIERvQ3Vyc29y
TW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZm9yd2FyZF93
b3JkKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENh
cmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0
RmllbGRXaWRnZXQpdzsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChX
aWRnZXQpdywgIiVzXG4iLCAiZm9yd2FyZF93b3JkIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0
aW9uIHBvczsKCiAgICAgICAgcG9zID0gU2tpcEZvcndhcmQodGZ3LCBXb3JkRW5kKHRmdywgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKTsKCiAgICAg
ICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMCwgMSk7CiAgICB9Cn0KCgpzdGF0aWMgdm9p
ZApncmFiX2ZvY3VzKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFy
YW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0g
KFhtVGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBwb3M7CgogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJncmFiX2Zv
Y3VzIik7CgogICAgWG1Qcm9jZXNzVHJhdmVyc2FsKChXaWRnZXQpdGZ3LCBYbVRSQVZFUlNFX0NV
UlJFTlQpOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2VsZWN0
aW9uKSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcG9zID0gVGV4dFBpeGVsVG9T
ZWxlY3Rpb25Qb3ModGZ3LCBldi0+eGJ1dHRvbi54KTsKCiAgICBpZiAoKHRmdy0+dGV4dC5sYXN0
X3RpbWUgKyBYdEdldE11bHRpQ2xpY2tUaW1lKCgoKChPYmplY3QpKChXaWRnZXQpdGZ3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkoKFdpZGdldCl0ZncpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdp
ZGdldCl0ZncpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpKSkgPgogICAg
ICAgIGV2LT54YnV0dG9uLnRpbWUpCiAgICB7CiAgICAgICAgdGZ3LT50ZXh0LnNhcnJheV9pbmRl
eCsrOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHRmdy0+dGV4dC5zYXJyYXlfaW5kZXgg
PSAwOwogICAgfQoKICAgIERvU2NhblR5cGUodGZ3LCBldiwgcG9zKTsKCiAgICB0ZnctPnRleHQu
bGFzdF90aW1lID0gZXYtPnhidXR0b24udGltZTsKfQpzdGF0aWMgdm9pZAppbnNlcnRfc3RyaW5n
KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJk
aW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j
IiwgKFdpZGdldCl3LCAiJXNcbiIsICJpbnNlcnRfc3RyaW5nIik7Cn0KCgpzdGF0aWMgdm9pZApr
ZXlfc2VsZWN0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFht
VGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBvbGQsbGVmdCxyaWdodDsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
a2V5X3NlbGVjdCIpOwoKICAgIGlmKCpudW1fcGFyYW1zID09IDApCiAgICB7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIG9sZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb24pOwogICAgbGVmdCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+
dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAgIHJpZ2h0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGlmKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90
IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYm
IF9fYnVpbHRpbl9jb25zdGFudF9wICgibGVmdCIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAocGFy
YW1zWzBdKSwgX19zMl9sZW4gPSBzdHJsZW4gKCJsZWZ0IiksICghKChzaXplX3QpKGNvbnN0IHZv
aWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikocGFyYW1zWzBd
KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgi
bGVmdCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJsZWZ0IikgPT0gMSkgfHwgX19z
Ml9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pLCAoX19j
b25zdCBjaGFyICopICgibGVmdCIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDog
X19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHBhcmFtc1swXSkgJiYgKChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv
aWQgKikocGFyYW1zWzBdKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHBhcmFtc1swXSks
IF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJsZWZ0IikgJiYgKChzaXpl
X3QpKGNvbnN0IHZvaWQgKikoKCJsZWZ0IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko
ImxlZnQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9
ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0p
KVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImxlZnQi
KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo
KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlb
MV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgibGVmdCIp
KVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo
KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsy
XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsZWZ0Iikp
WzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVszXSAt
ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsZWZ0IikpWzNd
KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCJsZWZ0Iik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVswXSAtIF9fczJbMF0pOyBpZiAoX19z
MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbMV0gLSBfX3MyWzFdKTsg
aWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhcmFtc1swXSkpWzJdIC0gX19z
MlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbM10g
LSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgi
bGVmdCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgibGVmdCIpICsgMSkgLSAoc2l6ZV90
KShjb25zdCB2b2lkICopKCJsZWZ0IikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgibGVm
dCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYm
ICgoc2l6ZV90KShjb25zdCB2b2lkICopKChwYXJhbXNbMF0pICsgMSkgLSAoc2l6ZV90KShjb25z
dCB2b2lkICopKHBhcmFtc1swXSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBp
bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq
KSAocGFyYW1zWzBdKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopKCJsZWZ0IikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KHBhcmFtc1swXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoImxlZnQiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg
X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
cGFyYW1zWzBdKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy
ICopICgibGVmdCIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y
ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFy
YW1zWzBdKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop
ICgibGVmdCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19j
b25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j
b25zdCBjaGFyICopIChwYXJhbXNbMF0pOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBd
IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxlZnQiKSlb
MF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3Mx
WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxlZnQi
KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo
X19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJs
ZWZ0IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9
IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
ImxlZnQiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHBhcmFtc1swXSwgImxl
ZnQiKSkpKTsgfSkgPT0gMCkKICAgIHsKICAgICAgICBiYWNrd2FyZF9jaGFyYWN0ZXIodyxldixw
YXJhbXMsbnVtX3BhcmFtcyk7CiAgICAgICAgaWYgKG9sZCA9PSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CgogICAgICAgIGlmICh0ZnctPnRleHQuaGFzX3ByaW1hcnkpCiAgICAg
ICAgewogICAgICAgICAgICBpZiAob2xkID09IGxlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGxlZnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bv
c2l0aW9uKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYob2xkID09IHJpZ2h0KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICByaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxlZnQgPSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgcmlnaHQgPSBvbGQ7
CiAgICAgICAgfQoKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbih3LGxlZnQscmlnaHQs
ZXYtPnhrZXkudGltZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfX2V4dGVuc2lv
bl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo
cGFyYW1zWzBdKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoInJpZ2h0IikgJiYgKF9fczFfbGVu
ID0gc3RybGVuIChwYXJhbXNbMF0pLCBfX3MyX2xlbiA9IHN0cmxlbiAoInJpZ2h0IiksICghKChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv
aWQgKikocGFyYW1zWzBdKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShj
b25zdCB2b2lkICopKCgicmlnaHQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmln
aHQiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikg
KHBhcmFtc1swXSksIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpLCAoX19zMV9sZW4gPCBfX3My
X2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3Ag
KHBhcmFtc1swXSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAt
IChzaXplX3QpKGNvbnN0IHZvaWQgKikocGFyYW1zWzBdKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBz
dHJsZW4gKHBhcmFtc1swXSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3Ag
KCJyaWdodCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgicmlnaHQiKSArIDEpIC0gKHNp
emVfdCkoY29uc3Qgdm9pZCAqKSgicmlnaHQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJl
Z2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChwYXJhbXNbMF0pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikoInJpZ2h0IikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3Vs
dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0
IGNoYXIgKikgKHBhcmFtc1swXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoInJpZ2h0IikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3Vs
dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0
IGNoYXIgKikgKHBhcmFtc1swXSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoInJpZ2h0IikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs
dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopIChwYXJhbXNbMF0pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv
bnN0IGNoYXIgKikgKCJyaWdodCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z
aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0
ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhcmFtc1sw
XSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf
X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChw
YXJhbXNbMF0pKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAocGFyYW1zWzBdKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl
c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChwYXJhbXNbMF0pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkg
OiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJyaWdodCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk
ICopKCgicmlnaHQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmlnaHQiKSA9PSAx
KSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJyaWdodCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVp
bHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChw
YXJhbXNbMF0pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHBhcmFtc1swXSkgPT0gMSkg
PyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbMF0gLSAoKF9fY29u
c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJyaWdodCIpKVswXSk7IGlmIChf
X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsxXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsxXSk7IGlmIChf
X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsyXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsyXSk7IGlmIChf
X3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbM10gLSAoKF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKSlbM10pOyB9IH0gX19y
ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z
MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBd
KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj
aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAm
JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKSlbMV0pOyBpZiAoX19zMl9sZW4g
PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1
bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsyXSk7IGlmIChfX3My
X2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVszXSk7IH0gfSBf
X3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAocGFyYW1zWzBdLCAicmlnaHQiKSkpKTsgfSkgPT0gMCkK
ICAgIHsKICAgICAgICBmb3J3YXJkX2NoYXJhY3Rlcih3LGV2LHBhcmFtcyxudW1fcGFyYW1zKTsK
ICAgICAgICBpZiAob2xkID09ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJz
b3JfcG9zaXRpb24pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAg
ICAgICAgaWYgKHRmdy0+dGV4dC5oYXNfcHJpbWFyeSkKICAgICAgICB7CiAgICAgICAgICAgIGlm
IChvbGQgPT0gbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGVmdCA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpZihvbGQgPT0gcmlnaHQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgcmlnaHQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vy
c29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgbGVmdCA9IG9sZDsKICAgICAgICB9CgogICAgICAg
IFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsbGVmdCxyaWdodCxldi0+eGtleS50aW1lKTsKICAg
ICAgICByZXR1cm47CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApraWxsX25leHRfY2hhcmFjdGVyKFdp
ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBD
YXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4
dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
KFdpZGdldCl3LCAiJXNcbiIsICJraWxsX25leHRfY2hhcmFjdGVyIik7CgogICAgZGVsZXRlX25l
eHRfY2hhcmFjdGVyKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFyYW1zKTsKfQoKCnN0
YXRpYyB2b2lkCmtpbGxfbmV4dF93b3JkKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAg
ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZp
ZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8u
Li8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAia2lsbF9uZXh0X3dvcmQi
KTsKCiAgICBkZWxldGVfbmV4dF93b3JkKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFy
YW1zKTsKfQoKCnN0YXRpYyB2b2lkCmtpbGxfcHJldmlvdXNfY2hhcmFjdGVyKFdpZGdldCB3LCBY
RXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu
YWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVs
ZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn
ZXQpdywgIiVzXG4iLCAia2lsbF9wcmV2aW91c19jaGFyYWN0ZXIiKTsKCiAgICBkZWxldGVfcHJl
dmlvdXNfY2hhcmFjdGVyKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFyYW1zKTsKfQoK
CnN0YXRpYyB2b2lkCmtpbGxfcHJldmlvdXNfd29yZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg
ICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0
RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJraWxs
X3ByZXZpb3VzX3dvcmQiKTsKCiAgICBkZWxldGVfcHJldmlvdXNfd29yZCgoV2lkZ2V0KXRmdywg
ZXYsIHBhcmFtcywgbnVtX3BhcmFtcyk7Cn0KCgpzdGF0aWMgdm9pZApraWxsX3NlbGVjdGlvbihX
aWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRp
bmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXcsICIlc1xuIiwgImtpbGxfc2VsZWN0aW9uIik7Cn0KCgpzdGF0aWMgdm9pZApr
aWxsX3RvX2VuZF9vZl9saW5lKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAg
ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWco
Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJraWxsX3RvX2Vu
ZF9vZl9saW5lIik7Cn0KCgpzdGF0aWMgdm9pZApraWxsX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0
IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu
YyIsIChXaWRnZXQpdywgIiVzXG4iLCAia2lsbF90b19zdGFydF9vZl9saW5lIik7Cn0KCgpzdGF0
aWMgdm9pZApsZWF2ZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgU3RyaW5nICpwYXJhbXMs
IENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1U
ZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXcsICIlc1xuIiwgImxlYXZlIik7CgoKCiAgICBYdENhbGxBY3Rpb25Qcm9jKChX
aWRnZXQpdGZ3LCAiUHJpbWl0aXZlTGVhdmUiLCBldiwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7Cgp9
CgoKc3RhdGljIHZvaWQKbW92ZV9kZXN0aW5hdGlvbihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg
ICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
bW92ZV9kZXN0aW5hdGlvbiIpOwp9CgoKc3RhdGljIHZvaWQKbW92ZV90byhXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsK
ICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4i
LCAibW92ZV90byIpOwp9CgoKc3RhdGljIHZvaWQKbmV4dF90YWJfZ3JvdXAoV2lkZ2V0IHcsIFhF
dmVudCAqZXYsCiAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3Bh
cmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3
LCAiJXNcbiIsICJuZXh0X3RhYl9ncm91cCIpOwoKICAgIFh0Q2FsbEFjdGlvblByb2ModywgIlBy
aW1pdGl2ZU5leHRUYWJHcm91cCIsIGV2LCBwYXJhbXMsICpudW1fcGFyYW1zKTsKfQoKCnN0YXRp
YyB2b2lkCnBhZ2VfbGVmdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgIFN0cmluZyAq
cGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3
ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwYWdlX2xlZnQiKTsKCiAgICBpZiAoKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQogICAgewog
ICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKCiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9Qb3Mo
dGZ3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpIC0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKTsKCiAgICAgICAgRG9DdXJzb3JNb3Zl
KHRmdywgZXYsIHBvcywgMSwgMSk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApwYWdlX3JpZ2h0KFdp
ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAq
bnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lk
Z2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3
LCAiJXNcbiIsICJwYWdlX3JpZ2h0Iik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsK
CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9Qb3ModGZ3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNp
b24pKS0+WERyYXcpICsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9i
b3R0b20pKTsKCiAgICAgICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMSwgMSk7CiAgICB9
Cn0KCgpzdGF0aWMgdm9pZApwYXN0ZV9jbGlwYm9hcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg
ICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
cGFzdGVfY2xpcGJvYXJkIik7CgogICAgWG1UZXh0RmllbGRQYXN0ZSh3KTsKfQoKCnN0YXRpYyB2
b2lkCnBhc3RlX3ByaW1hcnkoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInBhc3RlX3ByaW1hcnkiKTsK
fQoKCnN0YXRpYyB2b2lkCnByZXZfdGFiX2dyb3VwKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicHJl
dl90YWJfZ3JvdXAiKTsKCiAgICBYdENhbGxBY3Rpb25Qcm9jKHcsICJQcmltaXRpdmVQcmV2VGFi
R3JvdXAiLCBldiwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7Cn0KCgpzdGF0aWMgdm9pZApwcm9jZXNz
X2JkcmFnKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgQXRvbSBleHBvcnRfdGFyZ2V0WzNdOwogICAg
QXJnIGFyZ3NbMTBdOwogICAgaW50IG4gPSAwOwogICAgV2lkZ2V0IGRjOwogICAgWG1UZXh0Rmll
bGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBw
b3NpdGlvbjsKCiAgICBfWG1PYmplY3RMb2NrKHcpOwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNzX2JkcmFnIik7CgoKCiAg
ICBwb3NpdGlvbiA9IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHRmdywgZXYtPnhidXR0b24ueCk7
CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCl8fAog
ICAgICAgIHBvc2l0aW9uIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1f
cG9zX2xlZnQpIHx8CiAgICAgICAgcG9zaXRpb24gPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKCiAgICAgICAgX1htT2JqZWN0VW5sb2Nr
KHcpOwogICAgICAgIHJldHVybjsKICAgIH0KCgogICAgZXhwb3J0X3RhcmdldFswXSA9IFhtSW50
ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3Mu
Y2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwg
IkNPTVBPVU5EX1RFWFQiLCAwKTsKICAgIGV4cG9ydF90YXJnZXRbMV0gPSBYbUludGVybkF0b20o
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu
aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i
amVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJURVhUIiwg
MCk7CiAgICBleHBvcnRfdGFyZ2V0WzJdID0gKChBdG9tKSAzMSk7CgogICAgKCh2b2lkKSggKGFy
Z3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNjY2M10pKSwgKGFyZ3Nbbl0pLnZh
bHVlID0gKFh0QXJnVmFsKShleHBvcnRfdGFyZ2V0KSApKTsgbisrOwogICAgKCh2b2lkKSggKGFy
Z3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbODQ2Ml0pKSwgKGFyZ3Nbbl0pLnZh
bHVlID0gKFh0QXJnVmFsKSgzKSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0pLm5hbWUg
PSAoKChjaGFyICopJl9YbVN0cmluZ3NbNjMwMF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0gKFh0QXJn
VmFsKSgoMUwgPDwgMSl8KDFMIDw8IDApKSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0p
Lm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNTQ2MF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0g
KFh0QXJnVmFsKSh3KSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0pLm5hbWUgPSAoKChj
aGFyICopJl9YbVN0cmluZ3NbNTU4MF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShk
cmFnX2NvbnZlcnRfcHJvYykgKSk7IG4rKzsKICAgICgodm9pZCkoIChhcmdzW25dKS5uYW1lID0g
KCgoY2hhciAqKSZfWG1TdHJpbmdzWzk3ODldKSksIChhcmdzW25dKS52YWx1ZSA9IChYdEFyZ1Zh
bCkoX1htR2V0VGV4dHVhbERyYWdJY29uKHcpKSApKTsgbisrOwoKICAgIGRjID0gWG1EcmFnU3Rh
cnQodywgZXYsIGFyZ3MsIG4pOwoKICAgIGlmIChkYykKICAgIHsKICAgICAgICBYdEFkZENhbGxi
YWNrKGRjLCAoKGNoYXIgKikmX1htU3RyaW5nc1s2MjE3XSksIGRyYWdfZHJvcF9maW5pc2gsICgo
dm9pZCAqKTApKTsKICAgIH0KICAgIF9YbU9iamVjdFVubG9jayh3KTsKfQoKCnN0YXRpYyB2b2lk
CmRyYWdfZHJvcF9maW5pc2goV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu
dGVyIGNhbGxfZGF0YSkKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
dywgIiVzOmRyYWdfZHJvcF9maW5pc2goJWQpXG4iLCAiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCA0OTczKTsKCn0KCgpzdGF0aWMgQm9vbGVhbgpkcmFnX2NvbnZlcnRfcHJvYyhXaWRnZXQgdywg
QXRvbSAqc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICBBdG9tICp0YXJnZXQsIEF0b20gKnR5
cGVfcmV0dXJuLAogICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgKnZhbHVlX3JldHVybiwKICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuZ3RoX3JldHVybiwKICAgICAgICAgICAg
ICAgICAgaW50ICpmb3JtYXRfcmV0dXJuKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0Znc7CiAg
ICBXaWRnZXQgc3JjOwogICAgQXRvbSBhdG9tX2NvbXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0
OwogICAgQXRvbSBhdG9tX21vdGlmX2Ryb3A7CiAgICBBdG9tIGF0b21fZGVsZXRlOwoKICAgIGF0
b21fY29tcF90ZXh0ID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdl
dF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSkt
PmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkpLCAiQ09NUE9VTkRfVEVYVCIsIDApOwogICAgYXRvbV90ZXh0ID0g
WG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5k
aXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3Bs
YXkpLCAiVEVYVCIsIDApOwogICAgYXRvbV9tb3RpZl9kcm9wID0gWG1JbnRlcm5BdG9tKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiX01PVElGX0RST1Ai
LCAwKTsKICAgIGF0b21fZGVsZXRlID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lk
Z2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBh
cmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiREVMRVRFIiwgMCk7CgogICAgaWYgKCpzZWxl
Y3Rpb24gIT0gYXRvbV9tb3RpZl9kcm9wKQogICAgewogICAgICAgIF9MdERlYnVnKCIuLi8uLi8u
Li9saWIvWG0vVGV4dEYuYyIsIHcsICJzZWxlY3Rpb24gaXMgbm90IE1PVElGX0RST1BcbiIpOwog
ICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIHcsICJXZSdyZSBkZWFsaW5nIHdpdGggTU9USUZfRFJPUFxuIik7CgogICAgWHRWYUdl
dFZhbHVlcyh3LCAoKGNoYXIgKikmX1htU3RyaW5nc1s1NDYwXSksICZzcmMsICgodm9pZCAqKTAp
KTsKICAgIHRmdyA9IChYbVRleHRGaWVsZFdpZGdldClzcmM7CiAgICBfWG1PYmplY3RMb2NrKHNy
Yyk7CgogICAgaWYgKCp0YXJnZXQgPT0gKChBdG9tKSAzMSkpewogICAgICAgICpsZW5ndGhfcmV0
dXJuID0gKGxvbmcpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbik7CiAg
ICAgICAgKnZhbHVlX3JldHVybiA9ICgoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv
biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpKSAhPSAoKHZvaWQgKikwKSA/IChzdHJjcHkoWHRNYWxsb2MoKHVuc2lnbmVkKXN0
cmxlbigoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkpICsgMSksICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkpIDogKCh2b2lkICopMCkp
OwogICAgICAgICp0eXBlX3JldHVybiA9ICgoQXRvbSkgMzEpOwogICAgfQogICAgZWxzZSBpZiAo
KnRhcmdldCA9PSBhdG9tX2NvbXBfdGV4dCB8fCAqdGFyZ2V0ID09IGF0b21fdGV4dCl7CgogICAg
ICAgICAgICBYVGV4dFByb3BlcnR5IHByb3A7CiAgICAgICAgICAgIGNoYXIgKmJ1ZjsKICAgICAg
ICAgICAgaW50IHJldDsKCiAgICAgICAgICAgIGJ1ZiA9IFh0TWFsbG9jKCgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0
LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pICsgMSk7CiAgICAgICAgICAgIChfX2V4dGVuc2lv
bl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNl
bGVjdGlvblRleHQpKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0
ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpID8gKHN0cmxlbiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5z
aW9uKSktPlNlbGVjdGlvblRleHQpKSArIDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uTGVuKSkpID8gKGNoYXIgKikgbWVtY3B5IChidWYsICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0
ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpIDogc3RybmNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5T
ZWxlY3Rpb25MZW4pKSkgOiBzdHJuY3B5IChidWYsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZF
eHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikp
LT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxl
bikpKSk7CiAgICAgICAgICAgIGJ1ZlsoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0
aW9uTGVuKV0gPSAnXDAnOwoKICAgICAgICAgICAgcmV0ID0gWG1iVGV4dExpc3RUb1RleHRQcm9w
ZXJ0eSgoKCgoT2JqZWN0KSh0ZncpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh0ZncpKS0+Y29yZS5zY3JlZW4tPmRpc3Bs
YXkgOiAoKE9iamVjdCkodGZ3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5
KSwgJmJ1ZiwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0
U3R5bGUsICZwcm9wKTsKCiAgICAgICAgICAgIFh0RnJlZShidWYpOwogICAgICAgICAgICBpZiAo
cmV0ICE9IDApewogICAgICAgICAgICAgICAgKmxlbmd0aF9yZXR1cm4gPSAwOwogICAgICAgICAg
ICAgICAgKnZhbHVlX3JldHVybiA9ICgodm9pZCAqKTApOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGVsc2V7CiAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYyhwcm9wLm5pdGVtcyArIDEp
OwogICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHJvcC52YWx1ZSwgcHJvcC5uaXRlbXMpOwog
ICAgICAgICAgICAgICAgYnVmW3Byb3Aubml0ZW1zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAq
bGVuZ3RoX3JldHVybiA9IHByb3Aubml0ZW1zOwogICAgICAgICAgICAgICAgKnZhbHVlX3JldHVy
biA9IGJ1ZjsKICAgICAgICAgICAgfQogICAgICAgICAgICp0eXBlX3JldHVybiA9IGF0b21fY29t
cF90ZXh0OwoKICAgIH0KICAgIGVsc2UgaWYgKCp0YXJnZXQgPT0gYXRvbV9kZWxldGUpCiAgICB7
CgogICAgICAgIGludCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSgoV2lkZ2V0KXNyYykpLT50ZXh0LnByaW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSgoV2lkZ2V0KXNyYykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0
KTsKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbigoV2lkZ2V0KXNyYywtMSwtMSwwTCk7
CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAg
c3RhcnQsCiAgICAgICAgICAgICAgICAgICBlbmQsCiAgICAgICAgICAgICAgICAgICAoY2hhciAq
KTAsIDAsCiAgICAgICAgICAgICAgICAgICBNYXNzaXZlQ2hhbmdlRHJhdywgQ1BfRW5kT2ZJbnNl
cnQpOwoKICAgICAgICAqdmFsdWVfcmV0dXJuID0gKCh2b2lkICopMCk7CiAgICAgICAgKnR5cGVf
cmV0dXJuID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUu
c2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkpLCAiTlVMTCIsIDApOwogICAgICAgICpsZW5ndGhfcmV0dXJuID0gMDsKICAg
IH0KICAgIGVsc2UKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soc3JjKTsKICAgICAgICBy
ZXR1cm4gMDsKICAgIH0KCiAgICAqZm9ybWF0X3JldHVybiA9IDg7CgogICAgX1htT2JqZWN0VW5s
b2NrKHNyYyk7CiAgICByZXR1cm4gMTsKfQoKCnN0YXRpYyB2b2lkCmRyYWdfdHJhbnNmZXJfcHJv
YyhXaWRnZXQgZHcsIFh0UG9pbnRlciBjbGllbnQsIEF0b20gKnNlbGVjdGlvbiwgQXRvbSAqdHlw
ZSwKICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgKmxlbmd0
aCwgaW50ICpmb3JtYXQpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRX
aWRnZXQpY2xpZW50OwogICAgQXRvbSBhdG9tX2NvbXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0
OwogICAgQXRvbSBhdG9tX251bGw7CiAgICBBcmcgYXJnc1syXTsKICAgIGNoYXIgKmF0b21fbmFt
ZTsKCiAgICBhdG9tX2NvbXBfdGV4dCA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w
YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIkNPTVBPVU5EX1RFWFQiLCAwKTsKICAgIGF0
b21fdGV4dCA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuLT5kaXNwbGF5KSwgIlRFWFQiLCAwKTsKICAgIGF0b21fbnVsbCA9IFhtSW50ZXJuQXRvbSgo
KCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5p
dGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2Jq
ZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIk5VTEwiLCAw
KTsKCiAgICBhdG9tX25hbWUgPSBYR2V0QXRvbU5hbWUoKCgoKE9iamVjdCkoZHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0
KShkdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KShkdykpLT5vYmplY3QucGFy
ZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICp0eXBlKTsKCiAgICBpZiAoKnR5cGUgIT0gYXRv
bV9udWxsICYmICghdmFsdWUgfHwKICAgICAgICAoKnR5cGUgIT0gYXRvbV9jb21wX3RleHQgJiYg
KnR5cGUgIT0gYXRvbV90ZXh0ICYmICp0eXBlICE9ICgoQXRvbSkgMzEpKSkpCiAgICB7CgogICAg
ICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4i
LCAiZHJhZ190cmFuc2Zlcl9wcm9jOiBEbkQgVHJhbnNmZXIgRmFpbGVkKFRleHRGaWVsZCkiKTsK
CiAgICAgICAgKCh2b2lkKSggKGFyZ3NbMF0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3Nb
MTAzMjhdKSksIChhcmdzWzBdKS52YWx1ZSA9IChYdEFyZ1ZhbCkoWG1UUkFOU0ZFUl9GQUlMVVJF
KSApKTsKICAgICAgICAoKHZvaWQpKCAoYXJnc1sxXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3Ry
aW5nc1s4NDQ1XSkpLCAoYXJnc1sxXSkudmFsdWUgPSAoWHRBcmdWYWwpKDApICkpOwogICAgICAg
IFh0U2V0VmFsdWVzKGR3LCBhcmdzLCAyKTsKCiAgICB9CiAgICBlbHNlIGlmICgqdHlwZSAhPSBh
dG9tX251bGwpCiAgICB7CiAgICAgICAgWFRleHRQcm9wZXJ0eSBwcm9wOwogICAgICAgIGludCBj
b3VudCwgaTsKICAgICAgICBjaGFyICoqbGlzdDsKCiAgICAgICAgaWYgKCp0eXBlID09ICgoQXRv
bSkgMzEpKXsKICAgICAgICAgICAgY2hhciAqYnVmOwoKICAgICAgICAgICAgYnVmID0gWHRNYWxs
b2MoKmxlbmd0aCArIDEpOwogICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv
bnN0YW50X3AgKChjaGFyICopdmFsdWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgqbGVuZ3Ro
KSA/IChzdHJsZW4gKChjaGFyICopdmFsdWUpICsgMSA+PSAoKHNpemVfdCkgKCpsZW5ndGgpKSA/
IChjaGFyICopIG1lbWNweSAoYnVmLCAoY2hhciAqKXZhbHVlLCAqbGVuZ3RoKSA6IHN0cm5jcHkg
KGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkpIDogc3RybmNweSAoYnVmLCAoY2hhciAqKXZh
bHVlLCAqbGVuZ3RoKSkpOwogICAgICAgICAgICBidWZbKmxlbmd0aF0gPSAnXDAnOwoKCiAgICAg
ICAgICAgIFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoKCgoKE9iamVjdCkodykpLT5vYmplY3Qu
d2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQp
KHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICZidWYsIDEsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhDb21wb3VuZFRleHRTdHlsZSwgJnByb3ApOwoKICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAg
ICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQg
Y2hhciAqKXZhbHVlOwogICAgICAgICAgICBwcm9wLmVuY29kaW5nID0gKnR5cGU7CiAgICAgICAg
ICAgIHByb3AuZm9ybWF0ID0gKmZvcm1hdDsKICAgICAgICAgICAgcHJvcC5uaXRlbXMgPSAqbGVu
Z3RoOwogICAgICAgIH0KCiAgICAgICAgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3
KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJnByb3AsICZsaXN0LCAm
Y291bnQpOwoKICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyBpKyspewogICAgICAgICAgICBEb0lu
c2VydCh3LCAoKHZvaWQgKikwKSwgbGlzdFtpXSwgc3RybGVuKGxpc3RbaV0pKTsKICAgICAgICB9
CgogICAgfQoKICAgIGlmICh2YWx1ZSkKICAgICAgICBYdEZyZWUoKGNoYXIgKil2YWx1ZSk7Cn0K
CgpzdGF0aWMgdm9pZApwcm9jZXNzX2Ryb3AoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0
YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKewogICAgWG1Ecm9wUHJvY0NhbGxiYWNrU3RydWN0ICpE
cm9wSW5mbyA9CiAgICAgICAgKFhtRHJvcFByb2NDYWxsYmFja1N0cnVjdCAqKSBjYWxsX2RhdGE7
CiAgICBYbURyb3BUcmFuc2ZlckVudHJ5UmVjIGVudHJ5WzJdOwogICAgQXRvbSBhdG9tX2NvbXBf
dGV4dDsKICAgIEF0b20gYXRvbV90ZXh0OwogICAgQXRvbSBhdG9tX251bGw7CiAgICBBdG9tICpl
eHBvcnRfdGFyZ2V0czsKICAgIEF0b20gdGFyZ2V0OwogICAgQ2FyZGluYWwgbnVtX2V4cG9ydF90
YXJnZXRzOwogICAgQXJnIGFyZ3NbMTBdOwogICAgQ2FyZGluYWwgbiA9IDA7CiAgICBYbVRleHRQ
b3NpdGlvbiBwb3M7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRn
ZXQpdzsKICAgIEJvb2xlYW4gY29tcF90ZXh0LCB0ZXh0LCBzdHJpbmc7CgogICAgYXRvbV9jb21w
X3RleHQgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5z
Y3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl
bi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCk7CiAgICBhdG9tX3RleHQgPSBYbUludGVy
bkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNs
YXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJU
RVhUIiwgMCk7CiAgICBhdG9tX251bGwgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3Qu
cGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJOVUxMIiwgMCk7CgogICAgaWYgKChEcm9w
SW5mby0+ZHJvcEFjdGlvbiA9PSBYbURST1ApICYmCiAgICAgICAgKChEcm9wSW5mby0+b3BlcmF0
aW9uID09ICgxTCA8PCAxKSkgfHwKICAgICAgICAgKERyb3BJbmZvLT5vcGVyYXRpb24gPT0gKDFM
IDw8IDApKSkpCiAgICB7CgoKICAgICAgICAoKHZvaWQpKCAoYXJnc1tuXSkubmFtZSA9ICgoKGNo
YXIgKikmX1htU3RyaW5nc1s2NjYzXSkpLCAoYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdWYWwpKCZl
eHBvcnRfdGFyZ2V0cykgKSk7IG4rKzsKICAgICAgICAoKHZvaWQpKCAoYXJnc1tuXSkubmFtZSA9
ICgoKGNoYXIgKikmX1htU3RyaW5nc1s4NDYyXSkpLCAoYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdW
YWwpKCZudW1fZXhwb3J0X3RhcmdldHMpICkpOyBuKys7CiAgICAgICAgWHRHZXRWYWx1ZXMoRHJv
cEluZm8tPmRyYWdDb250ZXh0LCBhcmdzLCBuKTsKICAgICAgICBjb21wX3RleHQgPSB0ZXh0ID0g
c3RyaW5nID0gMDsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbnVtX2V4cG9ydF90YXJnZXRzOyBu
KyspIHsKICAgICAgICAgICAgaWYgKGV4cG9ydF90YXJnZXRzW25dID09IGF0b21fY29tcF90ZXh0
KQogICAgICAgICAgICAgICAgY29tcF90ZXh0ID0gMTsKICAgICAgICAgICAgZWxzZSBpZiAoZXhw
b3J0X3RhcmdldHNbbl0gPT0gYXRvbV90ZXh0KQogICAgICAgICAgICAgICAgdGV4dCA9IDE7CiAg
ICAgICAgICAgIGVsc2UgaWYgKGV4cG9ydF90YXJnZXRzW25dID09ICgoQXRvbSkgMzEpKQogICAg
ICAgICAgICAgICAgc3RyaW5nID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbXBfdGV4dCkK
ICAgICAgICAgICAgdGFyZ2V0ID0gYXRvbV9jb21wX3RleHQ7CiAgICAgICAgZWxzZSBpZiAodGV4
dCkKICAgICAgICAgICAgdGFyZ2V0ID0gYXRvbV90ZXh0OwogICAgICAgIGVsc2UgaWYgKHN0cmlu
ZykKICAgICAgICAgICAgdGFyZ2V0ID0gKChBdG9tKSAzMSk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgICB0YXJnZXQgPSBhdG9tX251bGw7CgogICAgICAgIGVudHJ5WzBdLnRhcmdldCA9IHRhcmdl
dDsKICAgICAgICBlbnRyeVswXS5jbGllbnRfZGF0YSA9IChYdFBvaW50ZXIpIHc7CgogICAgICAg
IG4gPSAwOwogICAgICAgIGlmICh0YXJnZXQgPT0gYXRvbV9udWxsKQogICAgICAgIHsKICAgICAg
ICAgICAgKCh2b2lkKSggKGFyZ3MgW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEw
MzI4XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShYbVRSQU5TRkVSX0ZBSUxVUkUp
ICkpOyBuKys7CiAgICAgICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIg
KikmX1htU3RyaW5nc1s4NDQ1XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKSgwKSAp
KTsgbisrOwogICAgICAgICAgICBEcm9wSW5mby0+b3BlcmF0aW9uID0gMEw7CiAgICAgICAgICAg
IERyb3BJbmZvLT5kcm9wU2l0ZVN0YXR1cyA9IFhtSU5WQUxJRF9EUk9QX1NJVEU7CiAgICAgICAg
fQogICAgICAgIGVsc2UgaWYgKERyb3BJbmZvLT5vcGVyYXRpb24gPT0gKDFMIDw8IDApKQogICAg
ICAgIHsKICAgICAgICAgICAgZW50cnlbMV0udGFyZ2V0ID0gWG1JbnRlcm5BdG9tKCgoKChPYmpl
Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcp
KS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiREVMRVRFIiwgMCk7CiAg
ICAgICAgICAgIGVudHJ5WzFdLmNsaWVudF9kYXRhID0gKFh0UG9pbnRlcikgdzsKICAgICAgICAg
ICAgKCh2b2lkKSggKGFyZ3MgW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzg0NDVd
KSksIChhcmdzIFtuXSkudmFsdWUgPSAoWHRBcmdWYWwpKDIpICkpOyBuKys7CiAgICAgICAgICAg
IERyb3BJbmZvLT5kcm9wU2l0ZVN0YXR1cyA9IFhtVkFMSURfRFJPUF9TSVRFOwogICAgICAgIH0K
ICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAoKHZvaWQpKCAoYXJncyBbbl0pLm5h
bWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbODQ0NV0pKSwgKGFyZ3MgW25dKS52YWx1ZSA9IChY
dEFyZ1ZhbCkoMSkgKSk7IG4rKzsKICAgICAgICAgICAgRHJvcEluZm8tPmRyb3BTaXRlU3RhdHVz
ID0gWG1WQUxJRF9EUk9QX1NJVEU7CiAgICAgICAgfQogICAgICAgICgodm9pZCkoIChhcmdzIFtu
XSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5nc1s2NTU2XSkpLCAoYXJncyBbbl0pLnZhbHVl
ID0gKFh0QXJnVmFsKShlbnRyeSkgKSk7IG4rKzsKICAgICAgICAoKHZvaWQpKCAoYXJncyBbbl0p
Lm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTAzMTVdKSksIChhcmdzIFtuXSkudmFsdWUg
PSAoWHRBcmdWYWwpKGRyYWdfdHJhbnNmZXJfcHJvYykgKSk7IG4rKzsKCgogICAgICAgIHBvcyA9
IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHRmdywgRHJvcEluZm8tPngpOwogICAgICAgIERvQ3Vy
c29yTW92ZSh0ZncsICgodm9pZCAqKTApLCBwb3MsIDEsIDEpOwogICAgfQogICAgZWxzZQogICAg
ewogICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5n
c1sxMDMyOF0pKSwgKGFyZ3MgW25dKS52YWx1ZSA9IChYdEFyZ1ZhbCkoWG1UUkFOU0ZFUl9GQUlM
VVJFKSApKTsgbisrOwogICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIg
KikmX1htU3RyaW5nc1s4NDQ1XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKSgwKSAp
KTsgbisrOwogICAgICAgIERyb3BJbmZvLT5vcGVyYXRpb24gPSAwTDsKICAgICAgICBEcm9wSW5m
by0+ZHJvcFNpdGVTdGF0dXMgPSBYbUlOVkFMSURfRFJPUF9TSVRFOwogICAgfQoKICAgIFhtRHJv
cFRyYW5zZmVyU3RhcnQgKERyb3BJbmZvLT5kcmFnQ29udGV4dCwgYXJncywgbik7Cgp9CgoKc3Rh
dGljIHZvaWQKcHJvY2Vzc19jYW5jZWwoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAg
ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWco
Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNzX2Nh
bmNlbCIpOwoKCgoKICAgIGlmICgoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50
KSkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAo
KCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSgoKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudCkpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xh
c3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xh
c3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkodykpLT5vYmpl
Y3QucGFyZW50KSkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNp
b24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdl
bmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9i
amVjdCkoKCgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQpKSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFz
dFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtTUFOQUdFUl9CSVQpID4+IDMp
XSkgJiAoMSA8PCAoKFhtTUFOQUdFUl9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAg
ewogICAgICAgIFh0Q2FsbEFjdGlvblByb2MoKCgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQp
LCAiTWFuYWdlclBhcmVudENhbmNlbCIsIGV2LCBwYXJhbXMsICpudW1fcGFyYW1zKTsKICAgIH0K
fQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfaG9tZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg
ICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNz
X2hvbWUiKTsKfQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfcmV0dXJuKFdpZGdldCB3LCBYRXZlbnQg
KmV2LAogICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMp
CnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVz
XG4iLCAicHJvY2Vzc19yZXR1cm4iKTsKfQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfdGFiKFdpZGdl
dCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51
bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn
ZXQpdywgIiVzXG4iLCAicHJvY2Vzc190YWIiKTsKfQoKCnN0YXRpYyB2b2lkCnF1aWNrX2NvcHlf
c2V0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywg
Q2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicXVpY2tfY29weV9zZXQiKTsKfQoKCnN0YXRpYyB2
b2lkCnF1aWNrX2N1dF9zZXQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInF1aWNrX2N1dF9zZXQiKTsK
fQoKCnN0YXRpYyB2b2lkCnJlZHJhd19kaXNwbGF5KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicmVk
cmF3X2Rpc3BsYXkiKTsKICAgIERyYXcoKFhtVGV4dEZpZWxkV2lkZ2V0KXcpOwp9CgoKc3RhdGlj
IHZvaWQKc2Vjb25kYXJ5X2FkanVzdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAg
ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2Vjb25kYXJ5
X2FkanVzdCIpOwp9CgoKc3RhdGljIHZvaWQKc2Vjb25kYXJ5X25vdGlmeShXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9w
YXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQp
dywgIiVzXG4iLCAic2Vjb25kYXJ5X25vdGlmeSIpOwp9CgoKc3RhdGljIHZvaWQKc2Vjb25kYXJ5
X3N0YXJ0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgU3RyaW5nICpwYXJh
bXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1ht
L1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInNlY29uZGFyeV9zdGFydCIpOwp9CgoKc3Rh
dGljIHZvaWQKc2VsZWN0X2FkanVzdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAg
ICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIu
Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2FkanVz
dCIpOwp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X2FsbChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg
ICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4
dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIu
Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2FsbCIp
OwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5wcmltX2FuY2hvcikgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAwOwogICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKCgogICAgUHJpbWFy
eVNlbGVjdGlvbkNvbXBsZXRlKHRmdywgZXYtPnhidXR0b24udGltZSk7CgogICAgRHJhdyh0Zncp
Owp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X2VuZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg
ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2Vu
ZCIpOwp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X3N0YXJ0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAog
ICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBY
bVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1
ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInNlbGVjdF9z
dGFydCIpOwoKICAgIGdyYWJfZm9jdXMoKFdpZGdldCl0ZncsIGV2LCBwYXJhbXMsIG51bV9wYXJh
bXMpOwp9CgoKc3RhdGljIHZvaWQKc2VsZl9pbnNlcnQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg
ICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewoKICAgIFht
VGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgY2hhciBidWZb
MTI4XSwgKmJ1ZjI7CiAgICBLZXlTeW0ga2V5c3ltOwogICAgaW50IGxlbiwgc3RhdHVzOwoKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
c2VsZl9pbnNlcnQiKTsKCiAgICBsZW4gPSBYbUltTWJMb29rdXBTdHJpbmcoKFdpZGdldCl0Zncs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhLZXlQcmVzc2VkRXZlbnQgKilldiwgYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAma2V5c3ltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dXMpOwoK
CiAgICBidWYyID0gWHRNYWxsb2MobGVuKzEpOwogICAgaWYgKHN0YXR1cyA9PSAtMSkKICAgICAg
ICBYbUltTWJMb29rdXBTdHJpbmcoKFdpZGdldCl0ZncsIChYS2V5UHJlc3NlZEV2ZW50ICopZXYs
IGJ1ZjIsIGxlbiwgJmtleXN5bSwgJnN0YXR1cyk7CiAgICBlbHNlCiAgICAgICAgKF9fZXh0ZW5z
aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWYpICYmIF9fYnVpbHRpbl9jb25zdGFudF9w
IChsZW4pID8gKHN0cmxlbiAoYnVmKSArIDEgPj0gKChzaXplX3QpIChsZW4pKSA/IChjaGFyICop
IG1lbWNweSAoYnVmMiwgYnVmLCBsZW4pIDogc3RybmNweSAoYnVmMiwgYnVmLCBsZW4pKSA6IHN0
cm5jcHkgKGJ1ZjIsIGJ1ZiwgbGVuKSkpOwoKICAgIGlmIChfTHREZWJ1Z0luRGVidWcoIi4uLy4u
Ly4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl0ZncpKQogICAgewogICAgICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiWG1JbU1iTG9va3VwU3Ry
aW5nID0+ICVkXG4iLCBsZW4pOwoKCiAgICAgICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiXHRTdGF0dXMgJXNcbiIsIChzdGF0dXMgPT0gMSkgPyAi
bm9uZSIgOiAoc3RhdHVzID09IDIpID8gImNoYXJzIiA6IChzdGF0dXMgPT0gNCkgPyAiYm90aCIg
OiAoc3RhdHVzID09IDMpID8gImtleXN5bSIgOiAoc3RhdHVzID09IC0xKSA/ICJvdmVyZmxvdyIg
OiAiPz8/PyIpOwoKCgoKCgogICAgICAgIGlmIChzdGF0dXMgPT0gNCB8fCBzdGF0dXMgPT0gMykK
ICAgICAgICB7CiAgICAgICAgICAgIF9MdERlYnVnMCgiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXRmdywgIlx0S2V5U3ltIDB4JVhcbiIsIGtleXN5bSk7CgogICAgICAgIH0KICAg
ICAgICBpZiAobGVuID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBpOwoKICAgICAgICAg
ICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiXHRC
dWZmZXIgIik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
KFdpZGdldCl0ZncsICIgJVgiLCAweEZGICYgYnVmW2ldKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAi
XG4iKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxlbiA+IDApCiAgICB7CiAgICAgICAgaWYg
KHN0YXR1cyA9PSA0IHx8IHN0YXR1cyA9PSAyKQogICAgICAgIHsKICAgICAgICAgICAgRG9JbnNl
cnQodGZ3LCBldiwgYnVmMiwgbGVuKTsKICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApz
ZXRfYW5jaG9yKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJzZXRfYW5jaG9yIik7Cn0KCgpzdGF0aWMgdm9p
ZApzZXRfaW5zZXJ0aW9uX3BvaW50KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAg
ICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJzZXRfaW5z
ZXJ0aW9uX3BvaW50Iik7Cn0KCgpzdGF0aWMgdm9pZApzZXRfc2VsZWN0aW9uX2hpbnQoV2lkZ2V0
IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu
YWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIs
IChXaWRnZXQpdywgIiVzXG4iLCAic2V0X3NlbGVjdGlvbl9oaW50Iik7Cn0KCgpzdGF0aWMgdm9p
ZAp0b2dnbGVfYWRkX21vZGUoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICBT
dHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8u
Li8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidG9nZ2xlX2FkZF9tb2Rl
Iik7Cn0KCgpzdGF0aWMgdm9pZAp0cmF2ZXJzZV9ob21lKFdpZGdldCB3LCBYRXZlbnQgKmV2LAog
ICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg
WG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJ0cmF2ZXJz
ZV9ob21lIik7CgogICAgWG1Qcm9jZXNzVHJhdmVyc2FsKChXaWRnZXQpdGZ3LCBYbVRSQVZFUlNF
X0hPTUUpOwp9CgoKc3RhdGljIHZvaWQKdHJhdmVyc2VfbmV4dChXaWRnZXQgdywgWEV2ZW50ICpl
diwKICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsK
ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidHJh
dmVyc2VfbmV4dCIpOwoKICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCgoV2lkZ2V0KXRmdywgWG1UUkFW
RVJTRV9ORVhUKTsKfQoKCnN0YXRpYyB2b2lkCnRyYXZlcnNlX3ByZXYoV2lkZ2V0IHcsIFhFdmVu
dCAqZXYsCiAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1z
KQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
InRyYXZlcnNlX3ByZXYiKTsKCiAgICBYbVByb2Nlc3NUcmF2ZXJzYWwoKFdpZGdldCl0ZncsIFht
VFJBVkVSU0VfUFJFVik7Cn0KCgpzdGF0aWMgdm9pZAp1bmtpbGwoV2lkZ2V0IHcsIFhFdmVudCAq
ZXYsCiAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidW5r
aWxsIik7Cn0KCgpzdGF0aWMgdm9pZAp1bm1hcChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg
U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4v
Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInVubWFwIik7Cn0KCgoK
CgoKZXh0ZXJuIFdpZGdldApYbUNyZWF0ZVRleHRGaWVsZChXaWRnZXQgcGFyZW50LCBjaGFyICpu
YW1lLCBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ0NvdW50KQp7CiAgICAgICAgV2lkZ2V0IHI7
CgogICAgICAgIF9YbU9iamVjdExvY2socGFyZW50KTsKICAgICAgICByID0gWHRDcmVhdGVXaWRn
ZXQobmFtZSwgeG1UZXh0RmllbGRXaWRnZXRDbGFzcywgcGFyZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ2xpc3QsIGFyZ0NvdW50KTsKICAgICAgICBfWG1PYmplY3RVbmxvY2socGFy
ZW50KTsKICAgICAgICByZXR1cm4gcjsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkQ2xlYXJT
ZWxlY3Rpb24oV2lkZ2V0IGF3LCBUaW1lIHRpbWUpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcg
PSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CgogICAgaWYg
KCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z
aW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJl
Y29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25Q
dHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zh
c3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRF
WFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1P
YmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFhtVGV4dEZpZWxkU2V0
U2VsZWN0aW9uKGF3LC0xLC0xLHRpbWUpOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQpCb29s
ZWFuClhtVGV4dEZpZWxkQ29weShXaWRnZXQgYXcsIFRpbWUgdGltZSkKewogICAgWG1UZXh0Rmll
bGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIERpc3BsYXkgKmRweTsKICAg
IFdpbmRvdyB3aW47CiAgICBpbnQgcjsKICAgIGxvbmcgaXRlbV9pZDsKICAgIFhtU3RyaW5nIGxi
ID0gKCh2b2lkICopMCk7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1f
ZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
YXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYg
KCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlw
ZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu
c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht
R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNp
b24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIp
LT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklF
TERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkgewogICAgICAgIF9YbU9iamVjdFVubG9j
ayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoYXcgPT0gKCh2b2lkICopMCkg
fHwgKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0
KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykgPT0gMCkgewogICAgICAgIF9YbU9i
amVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgZHB5ID0gKCgoKE9i
amVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0
KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSk7CiAgICB3aW4gPSAo
KCgoT2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu
aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKGF3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKGF3
KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KTsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9PSAoKHZvaWQgKikwKSkgewogICAgICAgIF9YbU9i
amVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbGIgPSBYbVN0cmlu
Z0NyZWF0ZUxvY2FsaXplZCgiWG1UZXh0RmllbGQiKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBi
b2FyZFN0YXJ0Q29weShkcHksIHdpbiwgbGIsIHRpbWUsCiAgICAgICAgICAgICAgICAoKHZvaWQg
KikwKSwgKCh2b2lkICopMCksICZpdGVtX2lkKSkgPT0gWG1DbGlwYm9hcmRMb2NrZWQpCiAgICAg
ICAgOwoKICAgIFhtU3RyaW5nRnJlZShsYik7CgogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNj
ZXNzKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAg
IH0KCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2FyZENvcHkoZHB5LCB3aW4sIGl0ZW1faWQsICJT
VFJJTkciLAogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv
biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rp
b25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pLAogICAgICAg
ICAgICAgICAgMCwgKCh2b2lkICopMCkpKSA9PSBYbUNsaXBib2FyZExvY2tlZCkKICAgICAgICA7
CgogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNjZXNzKSB7CiAgICAgICAgKHZvaWQpIFhtQ2xp
cGJvYXJkRW5kQ29weShkcHksIHdpbiwgaXRlbV9pZCk7CiAgICAgICAgX1htT2JqZWN0VW5sb2Nr
KGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2Fy
ZEVuZENvcHkoZHB5LCB3aW4sIGl0ZW1faWQpKSA9PSBYbUNsaXBib2FyZExvY2tlZCkKICAgICAg
ICA7CgogICAgaWYgKHIgPT0gWG1DbGlwYm9hcmRTdWNjZXNzKSB7CiAgICAgICAgX1htT2JqZWN0
VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSB7CiAgICAgICAgX1htT2Jq
ZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KfQoKCmV4dGVybiBCb29sZWFu
ClhtVGV4dEZpZWxkQ3V0KFdpZGdldCBhdywgVGltZSB0aW1lKQp7CiAgICBYbVRleHRGaWVsZFdp
ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgaW50IGZpcnN0LGxhc3Q7CgogICAg
X1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VD
bGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgo
KFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5j
b3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFht
QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NF
eHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFz
ZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpf
WG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9C
SVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDAp
IDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsK
ICAgIH0KCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9
PSAoKHZvaWQgKikwKSB8fCAhKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJs
ZSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAg
fQoKICAgIGlmIChYbVRleHRGaWVsZENvcHkoYXcsIHRpbWUpID09IDApIHsKICAgICAgICBfWG1P
YmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGxhc3QgPSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGZpcnN0ID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAgICBYbVRl
eHRGaWVsZFNldFNlbGVjdGlvbihhdywtMSwtMSwwTCk7CiAgICBNb2RpZnlUZXh0KHcsKFhFdmVu
dCAqKTAsZmlyc3QsbGFzdCwoKHZvaWQgKikwKSwwLE1hc3NpdmVDaGFuZ2VEcmF3LENQX1VuY2hh
bmdlZCk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiAxOwp9CgoKZXh0ZXJu
IGludApYbVRleHRGaWVsZEdldEJhc2VsaW5lKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRX
aWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIGludCBiOwoKICAgIF9YbU9iamVj
dExvY2soYXcpOwogICAgaWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFz
c0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1ht
R2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4
dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
KSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQ
dHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAz
KV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkK
ICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAg
fQoKICAgIGIgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZzZXQpOwogICAgX1htT2Jq
ZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiBiOwp9CgoKZXh0ZXJuIFhtVGV4dFBvc2l0aW9uClht
VGV4dEZpZWxkR2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRGaWVsZFdp
ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9zaXRpb24gcDsKCiAg
ICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFz
ZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFz
c0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1C
YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAo
Kl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxE
X0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDog
MCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw
OwogICAgfQoKICAgIHAgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIHA7Cn0KCgpleHRl
cm4gQm9vbGVhbgpYbVRleHRGaWVsZEdldEVkaXRhYmxlKFdpZGdldCBhdykKewogICAgWG1UZXh0
RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIEJvb2xlYW4gYjsKCiAg
ICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFz
ZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFz
c0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1C
YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAo
Kl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxE
X0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDog
MCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw
OwogICAgfQoKICAgIGIgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmVkaXRhYmxl
KTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICByZXR1cm4gYjsKfQoKCmV4dGVybiBYbVRl
eHRQb3NpdGlvbgpYbVRleHRGaWVsZEdldEluc2VydGlvblBvc2l0aW9uKFdpZGdldCBhdykKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIFhtVGV4
dFBvc2l0aW9uIHA7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFz
dFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykp
LT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgo
KFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09
IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikp
KSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJp
Y0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxY
bVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdz
KVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQp
ICYgMHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK
ICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJl
dHVybiBwOwp9CgoKZXh0ZXJuIFhtVGV4dFBvc2l0aW9uClhtVGV4dEZpZWxkR2V0TGFzdFBvc2l0
aW9uKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdp
ZGdldClhdzsKICAgIFhtVGV4dFBvc2l0aW9uIHA7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAg
ICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikp
KS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdp
ZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3Jl
X2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVu
c2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl
dENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2Ns
YXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpf
WG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAo
KFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAg
IF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcCA9ICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICBfWG1PYmpl
Y3RVbmxvY2soYXcpOwogICAgcmV0dXJuIHA7Cn0KCgpleHRlcm4gaW50ClhtVGV4dEZpZWxkR2V0
TWF4TGVuZ3RoKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRG
aWVsZFdpZGdldClhdzsKICAgIGludCBsOwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYg
KCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z
aW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJl
Y29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25Q
dHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zh
c3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRF
WFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkgewogICAgICAgIF9YbU9iamVj
dFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbCA9ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQubWF4X2xlbmd0aCk7CiAgICBfWG1PYmplY3RVbmxvY2soYXcp
OwogICAgcmV0dXJuIGw7Cn0KCgpleHRlcm4gY2hhciAqClhtVGV4dEZpZWxkR2V0U2VsZWN0aW9u
KFdpZGdldCBhdykKewogICAgY2hhciAqc3Vic3RyOwogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9
IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICgh
KCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lv
bikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNv
cmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xh
c3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu
ZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRy
ICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3Mp
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0
ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0
UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhU
X0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RV
bmxvY2soYXcpOwogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgIH0KCgoKICAgIGlmKCgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkgIT0gKCh2b2lkICopMCkpIHsK
ICAgICAgICBpbnQgbmNoYXJzID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25M
ZW4pOwoKICAgICAgICBzdWJzdHIgPSBYdE1hbGxvYyhuY2hhcnMrMSk7CiAgICAgICAgKF9fZXh0
ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlm
RXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSkt
PlNlbGVjdGlvblRleHQpKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobmNoYXJzKSA/IChzdHJs
ZW4gKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkpICsgMSA+PSAoKHNp
emVfdCkgKG5jaGFycykpID8gKGNoYXIgKikgbWVtY3B5IChzdWJzdHIsICgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksIG5jaGFycykgOiBzdHJuY3B5IChzdWJzdHIsICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksIG5jaGFycykpIDogc3RybmNw
eSAoc3Vic3RyLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCBuY2hh
cnMpKSk7CiAgICAgICAgc3Vic3RyW25jaGFyc10gPSAnXDAnOwoKICAgICAgICBfWG1PYmplY3RV
bmxvY2soYXcpOwogICAgICAgIHJldHVybiBzdWJzdHI7CiAgICB9CgogICAgX1htT2JqZWN0VW5s
b2NrKGF3KTsKICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCmV4dGVybiBCb29sZWFuClhtVGV4
dEZpZWxkR2V0U2VsZWN0aW9uUG9zaXRpb24oV2lkZ2V0IGF3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhtVGV4dFBvc2l0aW9uICpsZWZ0LCBYbVRleHRQb3NpdGlvbiAqcmlnaHQp
CnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBC
b29sZWFuIGI7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0
ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFht
UW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6
ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0Ns
YXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3
KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFt
b3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVso
KFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYg
MHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAg
ICAgICByZXR1cm4gMDsKICAgIH0KCgoKICAgICpsZWZ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAgICpyaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpOwogICAgYiA9IHctPnRleHQuaGFzX3ByaW1h
cnk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiBiOwp9CgoKZXh0ZXJuIHdj
aGFyX3QgKgpYbVRleHRGaWVsZEdldFNlbGVjdGlvbldjcyhXaWRnZXQgYXcpCnsKICAgIFhtVGV4
dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9j
ayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChX
aWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29y
ZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNz
KSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4
dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0
KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mp
KSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRD
bGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0Kiko
JigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikp
ID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkg
JiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAg
ICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAg
ICB9CgoKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0K
CgpleHRlcm4gY2hhciAqClhtVGV4dEZpZWxkR2V0U3RyaW5nKFdpZGdldCBhdykKewogICAgWG1U
ZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIGNoYXIgKnJldDsK
CiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF
eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/
ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD
bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm
JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ
RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpIHsKICAgICAgICByZXQgPSBYdE1hbGxvYygxKTsKICAgICAgICAqcmV0ID0g
J1wwJzsKCiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gcmV0Owog
ICAgfQoKICAgIHJldCA9IFh0TWFsbG9jKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
c3RyaW5nX2xlbmd0aCkgKyAxKTsKICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3Rh
bnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSkpICYmIF9fYnVpbHRp
bl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5n
dGgpKSA/IChzdHJsZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpKSAr
IDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19s
ZW5ndGgpKSkgPyAoY2hhciAqKSBtZW1jcHkgKHJldCwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl
bmd0aCkpIDogc3RybmNweSAocmV0LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh
bHVlKSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkpIDog
c3RybmNweSAocmV0LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSwgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkpKTsKICAgIHJldFso
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpXSA9ICdcMCc7Cgog
ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiByZXQ7Cn0KCgpleHRlcm4gd2NoYXJf
dCAqClhtVGV4dEZpZWxkR2V0U3RyaW5nV2NzKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRX
aWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsK
ICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENs
YXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNz
LmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgo
V2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv
cmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0
ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lk
Z2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVf
Y2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgo
Kl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8
ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpIHsKICAgICAgICBf
WG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgIH0KCgog
ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCmV4dGVy
biBpbnQKWG1UZXh0RmllbGRHZXRTdWJzdHJpbmcoV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlvbiBz
dGFydCwgaW50IG51bV9jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9z
aXplLCBjaGFyICpidWZmZXIpCnsKICAgIGludCBsZW47CiAgICBpbnQgcmV0dmFsID0gMTsKICAg
IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2Jq
ZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4
dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRn
ZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVf
Y2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNl
Q2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQg
KilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNs
YXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1ht
X2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklU
KSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6
IDApKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw
OwogICAgfQoKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9j
ayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgoKICAgIGlmIChudW1fY2hhcnMgPiBidWZm
ZXJfc2l6ZSkKICAgIHsKICAgICAgICBsZW4gPSBudW1fY2hhcnM7CiAgICB9CiAgICBlbHNlCiAg
ICB7CiAgICAgICAgbGVuID0gYnVmZmVyX3NpemUgLSAxOwogICAgICAgIHJldHZhbCA9IDI7CiAg
ICB9CgogICAgaWYgKHN0YXJ0ICsgbGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICBsZW4gPSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpIC0gc3RhcnQ7CiAgICB9CgogICAgKF9fZXh0ZW5z
aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnZhbHVlKSArIHN0YXJ0KSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobGVuKSA/IChzdHJs
ZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQpICsgMSA+
PSAoKHNpemVfdCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5IChidWZmZXIsICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQsIGxlbikgOiBzdHJuY3B5IChidWZm
ZXIsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQsIGxlbikp
IDogc3RybmNweSAoYnVmZmVyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVl
KSArIHN0YXJ0LCBsZW4pKSk7CiAgICBidWZmZXJbbGVuXSA9ICdcMCc7CgogICAgX1htT2JqZWN0
VW5sb2NrKGF3KTsKICAgIHJldHVybiByZXR2YWw7Cn0KCgpleHRlcm4gaW50ClhtVGV4dEZpZWxk
R2V0U3Vic3RyaW5nV2NzKFdpZGdldCBhdywgWG1UZXh0UG9zaXRpb24gc3RhcnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBudW1fY2hhcnMsIGludCBidWZmZXJfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqYnVmZmVyKQp7CiAgICBYbVRleHRGaWVsZFdp
ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwog
ICAgaWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xh
c3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu
ZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9i
amVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24p
KSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChX
aWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29y
ZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRl
bnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRn
ZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9j
bGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgq
X1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwg
KChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAg
ICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKCiAgICBfWG1P
YmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVs
ZEluc2VydChXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIHBvcywgY2hhciAqc3RyKQp7CiAgICBY
bVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9z
aXRpb24gbGVuOwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYgKCEoKCgoX1htX2Zhc3RQ
dHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+
b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChY
bUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJlY29yZF90eXBlKSA9PSBY
bVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj
dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkg
OiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWND
bGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1R
bW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylb
KChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAm
IDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoc3RyICYmICgobGVuID0gc3RybGVuKHN0
cikpID4gMCkgJiYgcG9zID49IDAgJiYgcG9zIDw9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp
bV9wb3NfcmlnaHQpID0gcG9zOwogICAgICAgIFRleHRJbnNlcnQodywgc3RyLCBsZW4pOwogICAg
ICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK
fQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkSW5zZXJ0V2NzKFdpZGdldCBhdywgWG1UZXh0UG9z
aXRpb24gcG9zaXRpb24sIHdjaGFyX3QgKndjc3RyaW5nKQp7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAg
aWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3Mp
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0
ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj
dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkt
PnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRn
ZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9j
bGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNp
b25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1ht
X2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChY
bVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBf
WG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBfWG1PYmplY3RV
bmxvY2soYXcpOwp9CmV4dGVybiBCb29sZWFuClhtVGV4dEZpZWxkUGFzdGUoV2lkZ2V0IGF3KQp7
CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgRGlz
cGxheSAqZHB5OwogICAgV2luZG93IHdpbjsKICAgIGludCByOwogICAgdW5zaWduZWQgbG9uZyBs
ZW4sIG5ieXRlczsKICAgIGxvbmcgcHJpdmF0ZV9pZDsKICAgIGNoYXIgKmJ1ZjsKICAgIFhtVGV4
dFBvc2l0aW9uIHBvczsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9m
YXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3
KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgo
KCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkg
PT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5l
cmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmpl
Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkp
LFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+Zmxh
Z3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJ
VCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2Nr
KGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZiAoYXcgPT0gKCh2b2lkICopMCkp
IHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoK
ICAgIGRweSA9ICgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xh
c3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3Bs
YXkpOwogICAgd2luID0gKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRv
dyA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyk7CgogICAgaWYg
KHdpbiA9PSAwKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4g
MDsKICAgIH0KCgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJY
bVRleHRGaWVsZFBhc3RlXG4iKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2FyZFN0YXJ0UmV0
cmlldmUoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSks
ICgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3Nf
aW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko
YXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAgICAgICAgICAgWHRMYXN0
VGltZXN0YW1wUHJvY2Vzc2VkKCgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mt
PmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5z
Y3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkpKSkpID09IFhtQ2xpcGJvYXJkTG9ja2VkKQogICAgICAgIDsKICAgIGlmIChy
ICE9IFhtQ2xpcGJvYXJkU3VjY2VzcykgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAg
ICAgICAgcmV0dXJuIDA7CiAgICB9CgoKICAgIHdoaWxlICgociA9IFhtQ2xpcGJvYXJkSW5xdWly
ZUxlbmd0aChkcHksIHdpbiwgIlNUUklORyIsICZsZW4pKQogICAgICAgICAgICAgICAgPT0gWG1D
bGlwYm9hcmRMb2NrZWQpCiAgICAgICAgOwogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNjZXNz
KSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0K
CiAgICBidWYgPSBYdE1hbGxvYyhsZW4gKyAxKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2Fy
ZFJldHJpZXZlKGRweSwgd2luLCAiU1RSSU5HIiwKICAgICAgICAgICAgICAgIGJ1ZiwgbGVuLCAm
bmJ5dGVzLCAmcHJpdmF0ZV9pZCkpID09IFhtQ2xpcGJvYXJkTG9ja2VkKQogICAgICAgIDsKCiAg
ICBpZiAociAhPSBYbUNsaXBib2FyZFN1Y2Nlc3MpIHsKICAgICAgICBYdEZyZWUoYnVmKTsKICAg
ICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgX0x0
RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJYbVRleHRGaWVsZFBhc3RlOiBz
aG91bGQgYmUgZ2V0dGluZyAlbGQgYnl0ZXNcbiIsIG5ieXRlcyk7CgoKICAgIHdoaWxlICgociA9
IFhtQ2xpcGJvYXJkRW5kUmV0cmlldmUoZHB5LCB3aW4pKSA9PSBYbUNsaXBib2FyZExvY2tlZCkK
ICAgICAgICA7CiAgICBpZiAociAhPSBYbUNsaXBib2FyZFN1Y2Nlc3MpIHsKICAgICAgICBYdEZy
ZWUoYnVmKTsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwog
ICAgfQoKCiAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CgogICAgaWYgKERvQ3Vyc29yTW92ZSh3LCAoKHZvaWQgKikwKSwgcG9zLCAxLCAx
KSkKICAgIHsKICAgICAgICBEb0luc2VydCh3LCAoKHZvaWQgKikwKSwgKGNoYXIgKilidWYsIGxl
bik7CiAgICB9CiAgICBYdEZyZWUoYnVmKTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICBy
ZXR1cm4gMTsKfQoKCmV4dGVybiBCb29sZWFuClhtVGV4dEZpZWxkUG9zVG9YWShXaWRnZXQgYXcs
IFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBQb3NpdGlvbiAqeCwgUG9zaXRpb24gKnkpCnsKICAg
IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBpbnQgcGl4
ZWw7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgo
KChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qu
d2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNs
YXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlm
KSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSkt
Pm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1C
YXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0
KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikp
KSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVY
VF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykp
ID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAg
ICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+ICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7CiAgICAg
ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwaXhl
bCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgKyAoaW50KV9YbVRleHRGX0Zv
bnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh
bHVlKSwgcG9zaXRpb24pOwogICAgaWYgKHBpeGVsIDwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5YRHJhdykgfHwgcGl4ZWwgPiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKSkKICAgIHsKICAg
ICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICp4
ID0gKFBvc2l0aW9uKXBpeGVsOwogICAgKnkgPSAoUG9zaXRpb24pKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5ZT2Zmc2V0KTsKCiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDE7
Cn0KCgpleHRlcm4gQm9vbGVhbgpYbVRleHRGaWVsZFJlbW92ZShXaWRnZXQgYXcpCnsKICAgIFht
VGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBpbnQgZmlyc3Qs
bGFzdDsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0g
KCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNl
Q2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9j
bGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90
aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChY
bUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NF
eHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+
b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlm
KSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1U
RVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3
KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAg
ICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZigoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNl
bGVjdGlvblRleHQpID09ICgodm9pZCAqKTApIHx8ICEoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmVkaXRhYmxlKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAg
ICAgIHJldHVybiAwOwogICAgfQoKICAgIGxhc3QgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGZpcnN0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbihh
dywtMSwtMSwwTCk7CiAgICBNb2RpZnlUZXh0KHcsKFhFdmVudCAqKTAsZmlyc3QsbGFzdCwoKHZv
aWQgKikwKSwwLE1hc3NpdmVDaGFuZ2VEcmF3LENQX0VuZE9mSW5zZXJ0KTsKCiAgICBfWG1PYmpl
Y3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDE7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFJl
cGxhY2UoV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlvbiBmaXJzdCwKICAgICAgICAgICAgICAgICAg
IFhtVGV4dFBvc2l0aW9uIGxhc3QsIGNoYXIgKnN0cikKewogICAgWG1UZXh0RmllbGRXaWRnZXQg
dyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIFhtVGV4dFBvc2l0aW9uIGxlbjsKCiAgICBf
WG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNs
YXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgo
V2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv
cmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1C
YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4
dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNl
Q2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdl
dF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9Y
bV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJ
VCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkg
OiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKHN0cikKICAgIHsKICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKICAg
ICAgICBpZiAobGFzdCA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl
bmd0aCkpCiAgICAgICAgICAgIGxhc3QgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnN0cmluZ19sZW5ndGgpOwogICAgICAgIGlmIChmaXJzdCA8PSBsYXN0KQogICAgICAgIHsKICAg
ICAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24oYXcsLTEsLTEsMEwpOwogICAgICAgICAg
ICBNb2RpZnlUZXh0KHcsIChYRXZlbnQgKikwLAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
LCBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIHN0ciwgbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICAgICAgfQogICAg
fQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkUmVw
bGFjZVdjcyhXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgWG1UZXh0UG9zaXRpb24gdG9fcG9zLCB3Y2hhcl90ICp3Y3N0cmluZykKewogICAg
WG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmpl
Y3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0
KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0
Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xh
c3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xh
c3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9j
bGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9Y
bUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NF
eHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0
UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4g
MyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkp
CiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkU2V0
QWRkTW9kZShXaWRnZXQgYXcsIEJvb2xlYW4gc3RhdGUpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0
IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBp
ZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcyko
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl
bnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+
cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl
dENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2Ns
YXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lv
blB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENs
YXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNz
LmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1f
ZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFht
VEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9Y
bU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIF9YbU9iamVjdFVu
bG9jayhhdyk7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKFdp
ZGdldCBhdywgWG1UZXh0UG9zaXRpb24gcG9zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0g
KFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYgKCEo
KCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykp
LT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJlY29y
ZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIg
KChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcyko
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl
bnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQ
dHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRf
RklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1PYmpl
Y3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAocG9zID49IDAgJiYg
cG9zIDw9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAg
ICB7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRp
b24pID0gcG9zOwogICAgICAgICh2b2lkKV9YbUltU2VuZFNwb3QoKFdpZGdldClhdyk7CgogICAg
ICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK
fQoKCnN0YXRpYyB2b2lkCl9YbVRleHRGaWVsZFNldEVkaXRhYmxlKFdpZGdldCB3LCBCb29sZWFu
IGUpCnsKICAgIGlmICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlKQogICAgewogICAgICAgIEFyZyBhcmdzWzEwXTsK
ICAgICAgICBpbnQgbmFyZ3M7CgogICAgICAgIFhtSW1SZWdpc3Rlcih3LCAwKTsKCiAgICAgICAg
bmFyZ3MgPSAwOwogICAgICAgICgodm9pZCkoIChhcmdzW25hcmdzXSkubmFtZSA9ICgoKGNoYXIq
KSZYdFN0cmluZ3NbNTJdKSksIChhcmdzW25hcmdzXSkudmFsdWUgPSAoWHRBcmdWYWwpKCgoKFdp
ZGdldCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4ZWwpKSApKTsKICAgICAgICBuYXJncysrOwog
ICAgICAgICgodm9pZCkoIChhcmdzW25hcmdzXSkubmFtZSA9ICgoKGNoYXIqKSZYdFN0cmluZ3Nb
MjE0XSkpLCAoYXJnc1tuYXJnc10pLnZhbHVlID0gKFh0QXJnVmFsKSgoKChYbVByaW1pdGl2ZVdp
ZGdldCkodykpLT5wcmltaXRpdmUuZm9yZWdyb3VuZCkpICkpOwogICAgICAgIG5hcmdzKys7CiAg
ICAgICAgWG1JbVNldFZhbHVlcyh3LCBhcmdzLCBuYXJncyk7CiAgICB9CiAgICBlbHNlCiAgICB7
CiAgICAgICAgWG1JbVVucmVnaXN0ZXIodyk7CiAgICB9Cn0KCgpleHRlcm4gdm9pZApYbVRleHRG
aWVsZFNldEVkaXRhYmxlKFdpZGdldCBhdywgQm9vbGVhbiBlZGl0YWJsZSkKewogICAgWG1UZXh0
RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2Nr
KGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdp
ZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3Jl
X2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3Mp
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0
ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQq
KSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENs
YXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgm
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkg
PyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAm
ICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7
CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZWRpdGFibGUpICE9IGVkaXRhYmxl
KQogICAgewogICAgICAgIF9YbVRleHRGaWVsZFNldEVkaXRhYmxlKGF3LCBlZGl0YWJsZSk7CiAg
ICB9CgogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJsZSkgPSBlZGl0
YWJsZTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVs
ZFNldEhpZ2hsaWdodChXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIGxlZnQsIFhtVGV4dFBvc2l0
aW9uIHJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUhpZ2hsaWdodE1vZGUgbW9kZSkK
ewogICAgICAgIGludCBpLCBqOwogICAgICAgIFhtSGlnaGxpZ2h0TW9kZSBlbTsKCgoKCgogICAg
ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgICAg
IF9YbU9iamVjdExvY2soYXcpOwogICAgICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF
eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/
ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD
bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm
JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ
RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpIHsKICAgICAgICAgICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAoaT0wOyBpPCgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1iZXItMTsgaSsrKQogICAgICAg
ICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5s
aXN0W2ldLnBvc2l0aW9uIDwgcmlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiByaWdodCA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0
W2krMV0ucG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIGVtID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ubW9kZTsKCgogICAgICAgIGZv
ciAoaT0wOyBpPCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1i
ZXI7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IGxlZnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp
c3RbaV0ubW9kZSA9IG1vZGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uIDwgbGVmdAog
ICAgICAgICAgICAgICAgICAgICAgICAmJiBsZWZ0IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaSsxXS5wb3NpdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLm51
bWJlciA9PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubWF4aW11
bSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtICs9IDg7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp
c3QgPSAoX1htSGlnaGxpZ2h0UmVjICopWHRSZWFsbG9jKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNoYXIgKikoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmhpZ2hsaWdodCkubGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZihfWG1IaWdobGlnaHRSZWMpICogKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5oaWdobGlnaHQpLm1heGltdW0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0
KS5udW1iZXIgKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0oKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyOyBqPmk7IGotLSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lmhp
Z2hsaWdodCkubGlzdFtqXSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxp
Z2h0KS5saXN0W2otMV07CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24gPSBsZWZ0OwogICAg
ICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hs
aWdodCkubGlzdFtpKzFdLm1vZGUgPSBtb2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
CgogICAgICAgIGZvciAoaT0wOyBpPCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGln
aGxpZ2h0KS5udW1iZXI7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IHJpZ2h0KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0W2ldLm1vZGUgPSBlbTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ucG9zaXRp
b24gPCByaWdodAogICAgICAgICAgICAgICAgICAgICAgICAmJiByaWdodCA8ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24pIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5udW1iZXIgPT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdo
bGlnaHQpLm1heGltdW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubWF4aW11bSArPSA4OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0ID0gKF9YbUhpZ2hsaWdodFJlYyAqKVh0UmVhbGxvYygKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2YoX1htSGlnaGxpZ2h0UmVjKSAqICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmhpZ2hsaWdodCkubnVtYmVyICsrOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLm51bWJlcjsgaj5pOyBq
LS0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3Rbal0gPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmhpZ2hsaWdodCkubGlzdFtqLTFdOwogICAgICAgICAgICAgICAgICAgICAgICAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9u
ID0gcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ubW9kZSA9IGVtOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lk
ClhtVGV4dEZpZWxkU2V0SW5zZXJ0aW9uUG9zaXRpb24oV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlv
biBwb3MpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7
CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChY
bUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNz
RXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mp
KSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkg
PyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNl
Q2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0Kiko
KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkg
JiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9G
SUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8g
MSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmIChwb3MgPj0gMCAmJiBwb3MgPD0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPSBwb3M7CgogICAgICAgIE1h
c3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4
dGVybiB2b2lkClhtVGV4dEZpZWxkU2V0TWF4TGVuZ3RoKFdpZGdldCBhdywgaW50IG1heF9sZW5n
dGgpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7Cgog
ICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJh
c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0
KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAo
KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xh
c3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFht
QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYg
KCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVM
RF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6
IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWF4X2xlbmd0
aCkgPSBtYXhfbGVuZ3RoOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnN0cmluZ19sZW5ndGgpID4gbWF4X2xlbmd0aCkKICAgIHsKICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpID0gbWF4X2xlbmd0aDsKICAgICAgICAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVttYXhfbGVuZ3RoXSA9ICdcMCc7
CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3Np
dGlvbikgPiBtYXhfbGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gbWF4X2xlbmd0aDsKICAgICAgICB9
CgogICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2Nr
KGF3KTsKfQoKCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFNldFNlbGVjdGlvbihXaWRnZXQgYXcs
IFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCBYbVRleHRQb3NpdGlvbiBlbmQsIFRpbWUgdGltZSkKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIEJvb2xl
YW4gZ2FpbiA9IDA7CiAgICBpbnQgbGVuOwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsICgodm9pZCAqKTApLCAiWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24gJWQgJWRcbiIs
IHN0YXJ0LCBlbmQpOwoKCiAgICAgICAgU2V0U2luZ2xlSGlnaGxpZ2h0KGF3LCBzdGFydCwgZW5k
KTsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgo
KFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xh
c3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYp
KSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+
b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJh
c2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQq
KSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkp
KSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhU
X0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkg
PyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5j
b3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSkK
ICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0K
CgoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkKICAg
IHsKICAgICAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0
KSk7CiAgICB9CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9
ICgodm9pZCAqKTApOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4p
ID0gMDsKCiAgICBpZiAoc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIHN0YXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKICAgIH0KICAgIGlmIChlbmQgPiAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIGVuZCA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICB9Cgog
ICAgaWYgKHN0YXJ0ID49IGVuZCkKICAgIHsKCiAgICAgICAgaWYoIXctPnRleHQuaGFzX3ByaW1h
cnkpCiAgICAgICAgewogICAgICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBYdERpc293blNlbGVjdGlvbihhdywgKChBdG9t
KSAxKSwgdGltZSk7CiAgICAgICAgdy0+dGV4dC5oYXNfcHJpbWFyeSA9IDA7CiAgICAgICAgaWYo
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hvKSkKICAgICAgICB7CiAgICAgICAgICAgIEN1
cnNvckVyYXNlKHcpOwogICAgICAgICAgICBEcmF3VGV4dCh3LCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnByaW1fcG9zX3JpZ2h0KSwgMCk7CiAgICAgICAgICAgIEN1cnNvckRyYXcodyk7CiAgICAg
ICAgfQoKCgoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0
YXJ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAt
MTsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodEVuZCkgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9IC0xOwogICAg
ICAgIHctPnRleHQucHJpbV90aW1lID0gdGltZTsKICAgIH0KICAgIGVsc2UKICAgIHsKCiAgICAg
ICAgZ2FpbiA9ICh3LT50ZXh0Lmhhc19wcmltYXJ5ID09IDApOwoKCiAgICAgICAgX0x0RGVidWco
Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJYdE93blNlbGVjdGlvbihfLCBYQV9QUklN
QVJZLCAuLi4pXG4iKTsKCgogICAgICAgIGlmIChYdE93blNlbGVjdGlvbihhdywgKChBdG9tKSAx
KSwgdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRTZWxlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMb3NlU2VsZWN0aW9uLCAoKHZvaWQgKikwKSkpCiAg
ICAgICAgewoKICAgICAgICAgICAgdy0+dGV4dC5oYXNfcHJpbWFyeSA9IDE7CiAgICAgICAgICAg
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSBzdGFydDsK
CgoKCiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpID0gZW5kOwogICAgICAgICAgICB3LT50ZXh0LnByaW1fdGltZSA9IHRpbWU7CiAgICAg
ICAgICAgIGxlbiA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nfcmln
aHQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAg
ICAgICAgICAgaWYgKGxlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uTGVuKSA9IGxlbjsKICAgICAgICAgICAgICAg
ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkgPSBYdE1hbGxvYyhsZW4p
OwogICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgm
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KV0pICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChs
ZW4pID8gKHN0cmxlbiAoJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCldKSArIDEgPj0gKChz
aXplX3QpIChsZW4pKSA/IChjaGFyICopIG1lbWNweSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5TZWxlY3Rpb25UZXh0KSwgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUp
WygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCldLCBsZW4pIDog
c3RybmNweSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgJigoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQucHJpbV9wb3NfbGVmdCldLCBsZW4pKSA6IHN0cm5jcHkgKCgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksICYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnZhbHVlKVsoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQp
XSwgbGVuKSkpOwoKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+RWNobykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEN1cnNvckVy
YXNlKHcpOwogICAgICAgICAgICAgICAgRHJhd1NpbmdsZUhpZ2hsaWdodCh3KTsKICAgICAgICAg
ICAgICAgIEN1cnNvckRyYXcodyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxz
ZQogICAgICAgIHsKICAgICAgICAgICAgZ2FpbiA9IDA7CiAgICAgICAgfQoKCiAgICAgICAgaWYg
KGdhaW4pCiAgICAgICAgewogICAgICAgICAgICBYbUFueUNhbGxiYWNrU3RydWN0IGNiczsKCiAg
ICAgICAgICAgIGNicy5yZWFzb24gPSBYbUNSX0dBSU5fUFJJTUFSWTsKICAgICAgICAgICAgY2Jz
LmV2ZW50ID0gKCh2b2lkICopMCk7CgogICAgICAgICAgICBYdENhbGxDYWxsYmFja0xpc3QoYXcs
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2Fpbl9wcmltYXJ5X2NhbGxiYWNrKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYdFBvaW50ZXIpJmNicyk7CiAgICAgICAg
fQogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZp
ZWxkU2V0U3RyaW5nKFdpZGdldCBhdywgY2hhciAqc3RyKQp7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9zaXRpb24gbGVuID0gMDsK
CiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF
eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/
ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD
bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm
JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ
RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKHN0cikKICAgIHsKICAgICAgICBsZW4gPSBzdHJsZW4oc3Ry
KTsKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbihhdywtMSwtMSwwTCk7CiAgICAgICAg
TW9kaWZ5VGV4dCh3LCAoWEV2ZW50ICopMCwKICAgICAgICAgICAgICAgICAgIDAsICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCksCiAgICAgICAgICAgICAgICAg
ICBzdHIsIGxlbiwKICAgICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9SZXNl
dCk7CiAgICB9CiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwp9CgoKZXh0ZXJuIHZvaWQKWG1UZXh0
RmllbGRTZXRTdHJpbmdXY3MoV2lkZ2V0IGF3LCB3Y2hhcl90ICp3Y192YWx1ZSkKewogICAgX1ht
T2JqZWN0TG9jayhhdyk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lk
ClhtVGV4dEZpZWxkU2hvd1Bvc2l0aW9uKFdpZGdldCBhdywgWG1UZXh0UG9zaXRpb24gcG9zaXRp
b24pCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7Cgog
ICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJh
c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0
KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAo
KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xh
c3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFht
QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYg
KCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVM
RF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6
IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIF9YbU9iamVjdFVubG9jayhhdyk7Cn0KCgpleHRlcm4gWG1UZXh0UG9z
aXRpb24KWG1UZXh0RmllbGRYWVRvUG9zKFdpZGdldCBhdywgUG9zaXRpb24geCwgUG9zaXRpb24g
eSkKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAg
IFhtVGV4dFBvc2l0aW9uIHI7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChf
WG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj
dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAm
JiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5
cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgo
KCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu
c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht
R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lv
bikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0cikt
PmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVM
RF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVu
bG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgciA9IFRleHRQaXhlbFRvU2Vs
ZWN0aW9uUG9zKHcsIHgpOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiByOwp9
CgoKc3RhdGljIHZvaWQKX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUoV2lkZ2V0IHcsIGludCBvZmZz
ZXQsIFh0QXJnVmFsICp2YWx1ZSkKewogICAgKnZhbHVlID0gKFh0QXJnVmFsKVhtVGV4dEZpZWxk
R2V0U3RyaW5nKHcpOwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIHcs
ICJfWG1UZXh0RmllbGRFeHBvcnRWYWx1ZTogdmFsdWUgJyVzJ1xuIiwgKGNoYXIgKikqdmFsdWUp
OwoKCn0KZXh0ZXJuIGludApfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKFdpZGdldCB3LCBjaGFyICpz
LCBpbnQgbCkKewoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf
bGlzdCktPnJlbmRpdGlvbnNbMF0tPnR5cGUgPT0gWG1GT05UX0lTX0ZPTlRTRVQpIHsKICAgICAg
ICByZXR1cm4gWG1iVGV4dEVzY2FwZW1lbnQoKFhGb250U2V0KSgoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF0tPmZvbnQpLCBzLCBsKTsKICAg
IH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiBYVGV4dFdpZHRoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5mb250LCBzLCBsKTsKICAgIH0KCn0KCgoKc3RhdGljIGludApfWG1UZXh0
Rl9Gb250TWF4V2lkdGgoV2lkZ2V0IHcpCnsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zWzBdLT50eXBlID09IFhtRk9OVF9JU19G
T05UU0VUKSB7CiAgICAgICAgWEZvbnRTdHJ1Y3QgKipmb287CiAgICAgICAgY2hhciAqKmJhcjsK
ICAgICAgICBpbnQgaSwgbnVtLCBtYXg7CgogICAgICAgIG51bSA9IFhGb250c09mRm9udFNldCgo
WEZvbnRTZXQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k
aXRpb25zWzBdLT5mb250LCAmZm9vLCAmYmFyKTsKICAgICAgICBtYXggPSAwOwogICAgICAgIGZv
ciAoaT0wOyBpPG51bTsgaSsrKXsKICAgICAgICAgICAgaWYgKGZvb1tpXS0+bWF4X2JvdW5kcy53
aWR0aCA+IG1heCkKICAgICAgICAgICAgICAgIG1heCA9IGZvb1tpXS0+bWF4X2JvdW5kcy53aWR0
aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1heDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0
dXJuICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udCktPm1heF9ib3VuZHMud2lk
dGg7CiAgICB9Cgp9Cg==
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.