Re: [GNU Bison 3.8.2] testsuite: 764 failed

Michael Daniels <[email protected]> Wed, 24 Dec 2025 17:16:52 -0500
Newsgroups gmane.comp.parsers.bison.bugs
Message-ID <CAFK2qPQT+1S0HvKJPdW4ZyFsMvou2CT2wy-RwyO7x_WreTjzYg@mail.gmail.com>
--0000000000002d3a0d0646ba051b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

It seems that Gmail believes that the executable glr-regr16 (which I had
included in the tarball in my original message),
and the dsym folder are viruses.

Please see the attached files, which are all of the other contents
of the 764 folder.


On Wed, Dec 24, 2025 at 5:05=E2=80=AFPM Michael Daniels <mdaniels5757@gmail=
.com> wrote:
>
> Hi,
>
> It seems that the unit test #764 is failing on MacOS.
>
> I've attached tests/testsuite.log, along with tests/testsuite.dir/764.
>
> Best,
> Michael Daniels

--0000000000002d3a0d0646ba051b
Content-Type: text/x-c-code; charset="US-ASCII"; name="glr-regr16.cc"
Content-Disposition: attachment; filename="glr-regr16.cc"
Content-Transfer-Encoding: base64
Content-ID: <f_mjkkk35i1>
X-Attachment-Id: f_mjkkk35i1

Ly8gQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuOC4yLgoKLy8gU2tlbGV0b24g
aW1wbGVtZW50YXRpb24gZm9yIEJpc29uIEdMUiBwYXJzZXJzIGluIEMKCi8vIENvcHlyaWdodCAo
QykgMjAwMi0yMDE1LCAyMDE4LTIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCgov
LyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQovLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQovLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgovLyAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgoKLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLy8gR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCi8vIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8v
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KCi8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRl
IGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucwovLyBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24g
cGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawovLyB1bmRlciB0ZXJtcyBv
ZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLy8gcGFy
c2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRo
ZXJlb2YKLy8gYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9k
aWZ5IG9yIHJlZGlzdHJpYnV0ZQovLyB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1h
eSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCi8vIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGlj
aCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZwovLyBCaXNvbiBvdXRw
dXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwovLyBM
aWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KCi8vIFRoaXMgc3BlY2lhbCBl
eGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KLy8g
dmVyc2lvbiAyLjIgb2YgQmlzb24uCgovLyBDKysgR0xSIHBhcnNlciBza2VsZXRvbiB3cml0dGVu
IGJ5IFZhbGVudGluIFRvbG1lci4KCi8vIERPIE5PVCBSRUxZIE9OIEZFQVRVUkVTIFRIQVQgQVJF
IE5PVCBET0NVTUVOVEVEIGluIHRoZSBtYW51YWwsCi8vIGVzcGVjaWFsbHkgdGhvc2Ugd2hvc2Ug
bmFtZSBzdGFydCB3aXRoIFlZXyBvciB5eV8uICBUaGV5IGFyZQovLyBwcml2YXRlIGltcGxlbWVu
dGF0aW9uIGRldGFpbHMgdGhhdCBjYW4gYmUgY2hhbmdlZCBvciByZW1vdmVkLgoKLyogSWRlbnRp
ZnkgQmlzb24gb3V0cHV0LCBhbmQgQmlzb24gdmVyc2lvbi4gICovCiNkZWZpbmUgWVlCSVNPTiAz
MDgwMgoKLyogQmlzb24gdmVyc2lvbiBzdHJpbmcuICAqLwojZGVmaW5lIFlZQklTT05fVkVSU0lP
TiAiMy44LjIiCgovKiBTa2VsZXRvbiBuYW1lLiAgKi8KI2RlZmluZSBZWVNLRUxFVE9OX05BTUUg
ImdscjIuY2MiCgoKLy8gIiVjb2RlIHRvcCIgYmxvY2tzLgojbGluZSAxICJnbHItcmVncjE2Lnki
CiAvKiAtKi0gYysrIC0qLSAqLwovKiBBZGp1c3QgdG8gdGhlIGNvbXBpbGVyLgogIFdlIHVzZWQg
dG8gZG8gaXQgaGVyZSwgYnV0IGVhY2ggdGltZSB3ZSBhZGQgYSBuZXcgbGluZSwKICB3ZSBoYXZl
IHRvIGFkanVzdCBhbGwgdGhlIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcy4KICBJdCdz
IHNpbXBsZXIgdG8gdXNlIGEgY29uc3RhbnQgaW5jbHVkZSB0byBhIHZhcnlpbmcgZmlsZS4gICov
CiNpbmNsdWRlIDx0ZXN0c3VpdGUuaD4KCiNsaW5lIDU5ICJnbHItcmVncjE2LmNjIgoKCgoKCiMg
aWZuZGVmIFlZX05VTExQVFIKIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwojICAgaWYgMjAxMTAz
TCA8PSBfX2NwbHVzcGx1cwojICAgIGRlZmluZSBZWV9OVUxMUFRSIG51bGxwdHIKIyAgIGVsc2UK
IyAgICBkZWZpbmUgWVlfTlVMTFBUUiAwCiMgICBlbmRpZgojICBlbHNlCiMgICBkZWZpbmUgWVlf
TlVMTFBUUiAoKHZvaWQqKTApCiMgIGVuZGlmCiMgZW5kaWYKCgojaW5jbHVkZSA8YWxnb3JpdGht
PgojaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gcHRyZGlmZl90CiNpbmNsdWRlIDxjc3RyaW5nPiAvLyBt
ZW1jcHkKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGxp
bWl0cz4KI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8
c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKIyBkZWZp
bmUgWVlfQ1BMVVNQTFVTIF9fY3BsdXNwbHVzCiNlbHNlCiMgZGVmaW5lIFlZX0NQTFVTUExVUyAx
OTk3MTFMCiNlbmRpZgoKLy8gU3VwcG9ydCBtb3ZlIHNlbWFudGljcyB3aGVuIHBvc3NpYmxlLgoj
aWYgMjAxMTAzTCA8PSBZWV9DUExVU1BMVVMKIyBkZWZpbmUgWVlfTU9WRSAgICAgICAgICAgc3Rk
Ojptb3ZlCiMgZGVmaW5lIFlZX01PVkVfT1JfQ09QWSAgIG1vdmUKIyBkZWZpbmUgWVlfTU9WRV9S
RUYoVHlwZSkgVHlwZSYmCiMgZGVmaW5lIFlZX1JWUkVGKFR5cGUpICAgIFR5cGUmJgojIGRlZmlu
ZSBZWV9DT1BZKFR5cGUpICAgICBUeXBlCiNlbHNlCiMgZGVmaW5lIFlZX01PVkUKIyBkZWZpbmUg
WVlfTU9WRV9PUl9DT1BZICAgY29weQojIGRlZmluZSBZWV9NT1ZFX1JFRihUeXBlKSBUeXBlJgoj
IGRlZmluZSBZWV9SVlJFRihUeXBlKSAgICBjb25zdCBUeXBlJgojIGRlZmluZSBZWV9DT1BZKFR5
cGUpICAgICBjb25zdCBUeXBlJgojZW5kaWYKCi8vIFN1cHBvcnQgbm9leGNlcHQgd2hlbiBwb3Nz
aWJsZS4KI2lmIDIwMTEwM0wgPD0gWVlfQ1BMVVNQTFVTCiMgZGVmaW5lIFlZX05PRVhDRVBUIG5v
ZXhjZXB0CiMgZGVmaW5lIFlZX05PVEhST1cKI2Vsc2UKIyBkZWZpbmUgWVlfTk9FWENFUFQKIyBk
ZWZpbmUgWVlfTk9USFJPVyB0aHJvdyAoKQojZW5kaWYKCi8vIFN1cHBvcnQgY29uc3RleHByIHdo
ZW4gcG9zc2libGUuCiNpZiAyMDE3MDMgPD0gWVlfQ1BMVVNQTFVTCiMgZGVmaW5lIFlZX0NPTlNU
RVhQUiBjb25zdGV4cHIKI2Vsc2UKIyBkZWZpbmUgWVlfQ09OU1RFWFBSCiNlbmRpZgoKCgovKiBE
ZWJ1ZyB0cmFjZXMuICAqLwojaWZuZGVmIFlZREVCVUcKIyBkZWZpbmUgWVlERUJVRyAxCiNlbmRp
ZgoKbmFtZXNwYWNlIHl5IHsKI2xpbmUgMTM0ICJnbHItcmVncjE2LmNjIgoKCgoKICAvLy8gQSBC
aXNvbiBwYXJzZXIuCiAgY2xhc3MgcGFyc2VyCiAgewogIHB1YmxpYzoKICAgIC8vLyBTeW1ib2wg
c2VtYW50aWMgdmFsdWVzLgogICAgdHlwZWRlZiBpbnQgdmFsdWVfdHlwZTsKCiAgICAvLy8gU3lu
dGF4IGVycm9ycyB0aHJvd24gZnJvbSB1c2VyIGFjdGlvbnMuCiAgICBzdHJ1Y3Qgc3ludGF4X2Vy
cm9yIDogc3RkOjpydW50aW1lX2Vycm9yCiAgICB7CiAgICAgIHN5bnRheF9lcnJvciAoY29uc3Qg
c3RkOjpzdHJpbmcmIG0pCiAgICAgICAgOiBzdGQ6OnJ1bnRpbWVfZXJyb3IgKG0pCiAgICAgIHt9
CgogICAgICBzeW50YXhfZXJyb3IgKGNvbnN0IHN5bnRheF9lcnJvciYgcykKICAgICAgICA6IHN0
ZDo6cnVudGltZV9lcnJvciAocy53aGF0ICgpKQogICAgICB7fQoKICAgICAgfnN5bnRheF9lcnJv
ciAoKSBZWV9OT0VYQ0VQVCBZWV9OT1RIUk9XOwogICAgfTsKCiAgICAvLy8gVG9rZW4ga2luZHMu
CiAgICBzdHJ1Y3QgdG9rZW4KICAgIHsKICAgICAgZW51bSB0b2tlbl9raW5kX3R5cGUKICAgICAg
ewogICAgICAgIFlZRU1QVFkgPSAtMiwKICAgIFlZRU9GID0gMCwgICAgICAgICAgICAgICAgICAg
ICAvLyAiZW5kIG9mIGZpbGUiCiAgICBZWWVycm9yID0gMjU2LCAgICAgICAgICAgICAgICAgLy8g
ZXJyb3IKICAgIFlZVU5ERUYgPSAyNTcgICAgICAgICAgICAgICAgICAvLyAiaW52YWxpZCB0b2tl
biIKICAgICAgfTsKICAgIH07CgogICAgLy8vIFRva2VuIGtpbmQsIGFzIHJldHVybmVkIGJ5IHl5
bGV4LgogICAgdHlwZWRlZiB0b2tlbjo6dG9rZW5fa2luZF90eXBlIHRva2VuX2tpbmRfdHlwZTsK
CiAgICAvLy8gU3ltYm9sIGtpbmRzLgogICAgc3RydWN0IHN5bWJvbF9raW5kCiAgICB7CiAgICAg
IGVudW0gc3ltYm9sX2tpbmRfdHlwZQogICAgICB7CiAgICAgICAgWVlOVE9LRU5TID0gNSwgLy8v
PCBOdW1iZXIgb2YgdG9rZW5zLgogICAgICAgIFNfWVlFTVBUWSA9IC0yLAogICAgICAgIFNfWVlF
T0YgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gImVuZCBvZiBmaWxlIgogICAg
ICAgIFNfWVllcnJvciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IKICAg
ICAgICBTX1lZVU5ERUYgPSAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICJpbnZhbGlk
IHRva2VuIgogICAgICAgIFNfM19iXyA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gJ2InCiAgICAgICAgU180X2FfID0gNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAnYScKICAgICAgICBTX1lZQUNDRVBUID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICRhY2NlcHQKICAgICAgICBTX3N0YXJ0ID0gNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHN0YXJ0CiAgICAgICAgU19hbHQxID0gNywgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbHQxCiAgICAgICAgU19hbHQyID0gOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbHQyCiAgICAgIH07CiAgICB9OwoKICAgIC8vLyAoSW50ZXJuYWwpIHN5bWJvbCBraW5k
LgogICAgdHlwZWRlZiBzeW1ib2xfa2luZDo6c3ltYm9sX2tpbmRfdHlwZSBzeW1ib2xfa2luZF90
eXBlOwoKICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRva2Vucy4KICAgIHN0YXRpYyBjb25zdCBzeW1i
b2xfa2luZF90eXBlIFlZTlRPS0VOUyA9IHN5bWJvbF9raW5kOjpZWU5UT0tFTlM7CgogICAgLy8v
IEEgY29tcGxldGUgc3ltYm9sLgogICAgLy8vCiAgICAvLy8gRXhwZWN0cyBpdHMgQmFzZSB0eXBl
IHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBzeW1ib2wga2luZAogICAgLy8vIHZpYSBraW5kICgp
LgogICAgLy8vCiAgICAvLy8gUHJvdmlkZSBhY2Nlc3MgdG8gc2VtYW50aWMgdmFsdWUuCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4KICAgIHN0cnVjdCBiYXNpY19zeW1ib2wgOiBCYXNlCiAg
ICB7CiAgICAgIC8vLyBBbGlhcyB0byBCYXNlLgogICAgICB0eXBlZGVmIEJhc2Ugc3VwZXJfdHlw
ZTsKCiAgICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgogICAgICBiYXNpY19zeW1ib2wgKCkg
WVlfTk9FWENFUFQKICAgICAgICA6IHZhbHVlICgpCiAgICAgIHt9CgojaWYgMjAxMTAzTCA8PSBZ
WV9DUExVU1BMVVMKICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IuCiAgICAgIGJhc2ljX3N5bWJv
bCAoYmFzaWNfc3ltYm9sJiYgdGhhdCkKICAgICAgICA6IEJhc2UgKHN0ZDo6bW92ZSAodGhhdCkp
CiAgICAgICAgLCB2YWx1ZSAoc3RkOjptb3ZlICh0aGF0LnZhbHVlKSkKICAgICAge30KI2VuZGlm
CgogICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KICAgICAgYmFzaWNfc3ltYm9sIChjb25zdCBi
YXNpY19zeW1ib2wmIHRoYXQpOwogICAgICAvLy8gQ29uc3RydWN0b3IgZm9yIHZhbHVlbGVzcyBz
eW1ib2xzLgogICAgICBiYXNpY19zeW1ib2wgKHR5cGVuYW1lIEJhc2U6OmtpbmRfdHlwZSB0KTsK
CiAgICAgIC8vLyBDb25zdHJ1Y3RvciBmb3Igc3ltYm9scyB3aXRoIHNlbWFudGljIHZhbHVlLgog
ICAgICBiYXNpY19zeW1ib2wgKHR5cGVuYW1lIEJhc2U6OmtpbmRfdHlwZSB0LAogICAgICAgICAg
ICAgICAgICAgIFlZX1JWUkVGICh2YWx1ZV90eXBlKSB2KTsKCiAgICAgIC8vLyBEZXN0cm95IHRo
ZSBzeW1ib2wuCiAgICAgIH5iYXNpY19zeW1ib2wgKCkKICAgICAgewogICAgICAgIGNsZWFyICgp
OwogICAgICB9CgoKICAgICAgLy8vIENvcHkgYXNzaWdubWVudC4KICAgICAgYmFzaWNfc3ltYm9s
JiBvcGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N5bWJvbCYgdGhhdCkKICAgICAgewogICAgICAgIEJh
c2U6Om9wZXJhdG9yPSAodGhhdCk7CiAgICAgICAgdmFsdWUgPSB0aGF0LnZhbHVlOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgLy8vIE1vdmUgYXNzaWdubWVudC4KICAgICAg
YmFzaWNfc3ltYm9sJiBvcGVyYXRvcj0gKGJhc2ljX3N5bWJvbCYmIHRoYXQpCiAgICAgIHsKICAg
ICAgICBCYXNlOjpvcGVyYXRvcj0gKHN0ZDo6bW92ZSAodGhhdCkpOwogICAgICAgIHZhbHVlID0g
c3RkOjptb3ZlICh0aGF0LnZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgog
ICAgICAvLy8gRGVzdHJveSBjb250ZW50cywgYW5kIHJlY29yZCB0aGF0IGlzIGVtcHR5LgogICAg
ICB2b2lkIGNsZWFyICgpIFlZX05PRVhDRVBUCiAgICAgIHsKICAgICAgICBCYXNlOjpjbGVhciAo
KTsKICAgICAgfQoKI2lmIFlZREVCVUcgfHwgMAogICAgICAvLy8gVGhlIHVzZXItZmFjaW5nIG5h
bWUgb2YgdGhpcyBzeW1ib2wuCiAgICAgIGNvbnN0IGNoYXIgKm5hbWUgKCkgY29uc3QgWVlfTk9F
WENFUFQKICAgICAgewogICAgICAgIHJldHVybiBwYXJzZXI6OnN5bWJvbF9uYW1lICh0aGlzLT5r
aW5kICgpKTsKICAgICAgfQojZW5kaWYgLy8gI2lmIFlZREVCVUcgfHwgMAoKCiAgICAgIC8vLyBX
aGV0aGVyIGVtcHR5LgogICAgICBib29sIGVtcHR5ICgpIGNvbnN0IFlZX05PRVhDRVBUOwoKICAg
ICAgLy8vIERlc3RydWN0aXZlIG1vdmUsIFxhIHMgaXMgZW1wdGllZCBpbnRvIHRoaXMuCiAgICAg
IHZvaWQgbW92ZSAoYmFzaWNfc3ltYm9sJiBzKTsKCiAgICAgIC8vLyBUaGUgc2VtYW50aWMgdmFs
dWUuCiAgICAgIHZhbHVlX3R5cGUgdmFsdWU7CgogICAgcHJpdmF0ZToKI2lmIFlZX0NQTFVTUExV
UyA8IDIwMTEwM0wKICAgICAgLy8vIEFzc2lnbm1lbnQgb3BlcmF0b3IuCiAgICAgIGJhc2ljX3N5
bWJvbCYgb3BlcmF0b3I9IChjb25zdCBiYXNpY19zeW1ib2wmIHRoYXQpOwojZW5kaWYKICAgIH07
CgogICAgLy8vIFR5cGUgYWNjZXNzIHByb3ZpZGVyIGZvciB0b2tlbiAoZW51bSkgYmFzZWQgc3lt
Ym9scy4KICAgIHN0cnVjdCBieV9raW5kCiAgICB7CiAgICAgIC8vLyBUaGUgc3ltYm9sIGtpbmQg
YXMgbmVlZGVkIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgdHlwZWRlZiB0b2tlbl9raW5kX3R5
cGUga2luZF90eXBlOwoKICAgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCiAgICAgIGJ5X2tp
bmQgKCkgWVlfTk9FWENFUFQ7CgojaWYgMjAxMTAzTCA8PSBZWV9DUExVU1BMVVMKICAgICAgLy8v
IE1vdmUgY29uc3RydWN0b3IuCiAgICAgIGJ5X2tpbmQgKGJ5X2tpbmQmJiB0aGF0KSBZWV9OT0VY
Q0VQVDsKI2VuZGlmCgogICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KICAgICAgYnlfa2luZCAo
Y29uc3QgYnlfa2luZCYgdGhhdCkgWVlfTk9FWENFUFQ7CgogICAgICAvLy8gQ29uc3RydWN0b3Ig
ZnJvbSAoZXh0ZXJuYWwpIHRva2VuIG51bWJlcnMuCiAgICAgIGJ5X2tpbmQgKGtpbmRfdHlwZSB0
KSBZWV9OT0VYQ0VQVDsKCgogICAgICAvLy8gQ29weSBhc3NpZ25tZW50LgogICAgICBieV9raW5k
JiBvcGVyYXRvcj0gKGNvbnN0IGJ5X2tpbmQmIHRoYXQpOwoKICAgICAgLy8vIE1vdmUgYXNzaWdu
bWVudC4KICAgICAgYnlfa2luZCYgb3BlcmF0b3I9IChieV9raW5kJiYgdGhhdCk7CgoKICAgICAg
Ly8vIFJlY29yZCB0aGF0IHRoaXMgc3ltYm9sIGlzIGVtcHR5LgogICAgICB2b2lkIGNsZWFyICgp
IFlZX05PRVhDRVBUOwoKICAgICAgLy8vIFN0ZWFsIHRoZSBzeW1ib2wga2luZCBmcm9tIFxhIHRo
YXQuCiAgICAgIHZvaWQgbW92ZSAoYnlfa2luZCYgdGhhdCk7CgogICAgICAvLy8gVGhlIChpbnRl
cm5hbCkgdHlwZSBudW1iZXIgKGNvcnJlc3BvbmRpbmcgdG8gXGEgdHlwZSkuCiAgICAgIC8vLyBc
YSBlbXB0eSB3aGVuIGVtcHR5LgogICAgICBzeW1ib2xfa2luZF90eXBlIGtpbmQgKCkgY29uc3Qg
WVlfTk9FWENFUFQ7CgogICAgICAvLy8gVGhlIHN5bWJvbCBraW5kLgogICAgICAvLy8gXGEgU19Z
WUVNUFRZIHdoZW4gZW1wdHkuCiAgICAgIHN5bWJvbF9raW5kX3R5cGUga2luZF87CiAgICB9OwoK
ICAgIC8vLyAiRXh0ZXJuYWwiIHN5bWJvbHM6IHJldHVybmVkIGJ5IHRoZSBzY2FubmVyLgogICAg
c3RydWN0IHN5bWJvbF90eXBlIDogYmFzaWNfc3ltYm9sPGJ5X2tpbmQ+CiAgICB7fTsKCgogICAg
Ly8gRklYTUU6IHNob3VsZCBiZSBwcml2YXRlIGV2ZW50dWFsbHkuCiAgICBjbGFzcyBnbHJfc3Rh
Y2s7CiAgICBjbGFzcyBnbHJfc3RhdGU7CgogICAgLy8vIEJ1aWxkIGEgcGFyc2VyIG9iamVjdC4K
ICAgIHBhcnNlciAoKTsKICAgIH5wYXJzZXIgKCk7CgogICAgLy8vIFBhcnNlLiAgQW4gYWxpYXMg
Zm9yIHBhcnNlICgpLgogICAgLy8vIFxyZXR1cm5zICAwIGlmZiBwYXJzaW5nIHN1Y2NlZWRlZC4K
ICAgIGludCBvcGVyYXRvcigpICgpOwoKICAgIC8vLyBQYXJzZS4KICAgIC8vLyBccmV0dXJucyAg
MCBpZmYgcGFyc2luZyBzdWNjZWVkZWQuCiAgICBpbnQgcGFyc2UgKCk7CgojaWYgWVlERUJVRwog
ICAgLy8vIFRoZSBjdXJyZW50IGRlYnVnZ2luZyBzdHJlYW0uCiAgICBzdGQ6Om9zdHJlYW0mIGRl
YnVnX3N0cmVhbSAoKSBjb25zdDsKICAgIC8vLyBTZXQgdGhlIGN1cnJlbnQgZGVidWdnaW5nIHN0
cmVhbS4KICAgIHZvaWQgc2V0X2RlYnVnX3N0cmVhbSAoc3RkOjpvc3RyZWFtICYpOwoKICAgIC8v
LyBUeXBlIGZvciBkZWJ1Z2dpbmcgbGV2ZWxzLgogICAgdXNpbmcgZGVidWdfbGV2ZWxfdHlwZSA9
IGludDsKICAgIC8vLyBUaGUgY3VycmVudCBkZWJ1Z2dpbmcgbGV2ZWwuCiAgICBkZWJ1Z19sZXZl
bF90eXBlIGRlYnVnX2xldmVsICgpIGNvbnN0OwogICAgLy8vIFNldCB0aGUgY3VycmVudCBkZWJ1
Z2dpbmcgbGV2ZWwuCiAgICB2b2lkIHNldF9kZWJ1Z19sZXZlbCAoZGVidWdfbGV2ZWxfdHlwZSBs
KTsKI2VuZGlmCgogICAgLy8vIFJlcG9ydCBhIHN5bnRheCBlcnJvci4KICAgIC8vLyBccGFyYW0g
bXNnICAgIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5bnRheCBlcnJvci4KICAgIHZvaWQgZXJyb3Ig
KGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpOwoKI2lmIFlZREVCVUcgfHwgMAogICAgLy8vIFRoZSB1
c2VyLWZhY2luZyBuYW1lIG9mIHRoZSBzeW1ib2wgd2hvc2UgKGludGVybmFsKSBudW1iZXIgaXMK
ICAgIC8vLyBZWVNZTUJPTC4gIE5vIGJvdW5kcyBjaGVja2luZy4KICAgIHN0YXRpYyBjb25zdCBj
aGFyICpzeW1ib2xfbmFtZSAoc3ltYm9sX2tpbmRfdHlwZSB5eXN5bWJvbCk7CiNlbmRpZiAvLyAj
aWYgWVlERUJVRyB8fCAwCgoKCgojIGlmIFlZREVCVUcKICBwdWJsaWM6CiAgICAvLy8gXGJyaWVm
IFJlcG9ydCBhIHN5bWJvbCB2YWx1ZSBvbiB0aGUgZGVidWcgc3RyZWFtLgogICAgLy8vIFxwYXJh
bSB5eWtpbmQgICBUaGUgc3ltYm9sIGtpbmQuCiAgICAvLy8gXHBhcmFtIHl5dmFsICAgIEl0cyBz
ZW1hbnRpYyB2YWx1ZS4KICAgIHZvaWQgeXlfc3ltYm9sX3ZhbHVlX3ByaW50XyAoc3ltYm9sX2tp
bmRfdHlwZSB5eWtpbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZh
bHVlX3R5cGUmIHl5dmFsKSBjb25zdDsKICAgIC8vLyBcYnJpZWYgUmVwb3J0IGEgc3ltYm9sIG9u
IHRoZSBkZWJ1ZyBzdHJlYW0uCiAgICAvLy8gXHBhcmFtIHl5a2luZCAgIFRoZSBzeW1ib2wga2lu
ZC4KICAgIC8vLyBccGFyYW0geXl2YWwgICAgSXRzIHNlbWFudGljIHZhbHVlLgogICAgdm9pZCB5
eV9zeW1ib2xfcHJpbnRfIChzeW1ib2xfa2luZF90eXBlIHl5a2luZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdmFsdWVfdHlwZSYgeXl2YWwpIGNvbnN0OwogIHByaXZhdGU6CiAg
ICAvLy8gRGVidWcgc3RyZWFtLgogICAgc3RkOjpvc3RyZWFtKiB5eWNkZWJ1Z187CiNlbmRpZgoK
CgogICAgLy8vIENvbnZlcnQgYSBzY2FubmVyIHRva2VuIGtpbmQgXGEgdCB0byBhIHN5bWJvbCBr
aW5kLgogICAgLy8vIEluIHRoZW9yeSBcYSB0IHNob3VsZCBiZSBhIHRva2VuX2tpbmRfdHlwZSwg
YnV0IGNoYXJhY3RlciBsaXRlcmFscwogICAgLy8vIGFyZSB2YWxpZCwgeWV0IG5vdCBtZW1iZXJz
IG9mIHRoZSB0b2tlbl9raW5kX3R5cGUgZW51bS4KICAgIHN0YXRpYyBzeW1ib2xfa2luZF90eXBl
IHl5dHJhbnNsYXRlXyAoaW50IHQpIFlZX05PRVhDRVBUOwoKI2lmIFlZREVCVUcgfHwgMAogICAg
Ly8vIEZvciBhIHN5bWJvbCwgaXRzIG5hbWUgaW4gY2xlYXIuCiAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgeXl0bmFtZV9bXTsKI2VuZGlmIC8vICNpZiBZWURFQlVHIHx8IDAKCgogICAgLy8v
IFxicmllZiBSZWNsYWltIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4KICAgIC8v
LyBccGFyYW0geXltc2cgICAgIFdoeSB0aGlzIHRva2VuIGlzIHJlY2xhaW1lZC4KICAgIC8vLyAg
ICAgICAgICAgICAgICAgIElmIG51bGwsIHByaW50IG5vdGhpbmcuCiAgICAvLy8gXHBhcmFtIHl5
a2luZCAgICBUaGUgc3ltYm9sIGtpbmQuCiAgICB2b2lkIHl5X2Rlc3Ryb3lfIChjb25zdCBjaGFy
KiB5eW1zZywgc3ltYm9sX2tpbmRfdHlwZSB5eWtpbmQsCiAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZV90eXBlJiB5eXZhbCk7CgoKICAgIC8vIE5lZWRzIGFjY2VzcyB0byB5eV9kZXN0cm95Xywg
cmVwb3J0X3N5bnRheF9lcnJvciwgZXRjLgogICAgZnJpZW5kIGdscl9zdGFjazsKICB9OwoKCn0g
Ly8geXkKI2xpbmUgNDI0ICJnbHItcmVncjE2LmNjIgoKCgoKCm5hbWVzcGFjZQp7CiAgLyogRGVm
YXVsdCAoY29uc3RhbnQpIHZhbHVlIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uIGZvciBudWxsCiAg
ICAgcmlnaHQtaGFuZCBzaWRlcy4gIFVubGlrZSB0aGUgc3RhbmRhcmQgeWFjYy5jIHRlbXBsYXRl
LCBoZXJlIHdlIHNldAogICAgIHRoZSBkZWZhdWx0IHZhbHVlIG9mICQkIHRvIGEgemVyb2VkLW91
dCB2YWx1ZS4gIFNpbmNlIHRoZSBkZWZhdWx0CiAgICAgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGlz
IGJlaGF2aW9yIGlzIHRlY2huaWNhbGx5IGNvcnJlY3QuICAqLwogIHl5OjpwYXJzZXI6OnZhbHVl
X3R5cGUgeXl2YWxfZGVmYXVsdDsKfQoKCi8vIFVucXVhbGlmaWVkICVjb2RlIGJsb2Nrcy4KI2xp
bmUgMTkgImdsci1yZWdyMTYueSIKCiMgaW5jbHVkZSA8YXNzZXJ0Lmg+CgogIHN0YXRpYyBpbnQg
eXlsZXggKHl5OjpwYXJzZXI6OnZhbHVlX3R5cGUgKmx2YWxwKTsKICBzdGF0aWMgaW50IGxvb2th
aGVhZF92YWx1ZSA9IDA7CiMgZGVmaW5lIFVTRSh2YWwpCgojbGluZSA0NDkgImdsci1yZWdyMTYu
Y2MiCgoKI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CgojaWZuZGVmIFlZXwoj
IGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUwojICBpZiBFTkFCTEVfTkxT
CiMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIE1zZ2lk
KQojICBlbmRpZgojIGVuZGlmCiMgaWZuZGVmIFlZXwojICBkZWZpbmUgWVlfKE1zZ2lkKSBNc2dp
ZAojIGVuZGlmCiNlbmRpZgoKLy8gV2hldGhlciB3ZSBhcmUgY29tcGlsZWQgd2l0aCBleGNlcHRp
b24gc3VwcG9ydC4KI2lmbmRlZiBZWV9FWENFUFRJT05TCiMgaWYgZGVmaW5lZCBfX0dOVUNfXyAm
JiAhZGVmaW5lZCBfX0VYQ0VQVElPTlMKIyAgZGVmaW5lIFlZX0VYQ0VQVElPTlMgMAojIGVsc2UK
IyAgZGVmaW5lIFlZX0VYQ0VQVElPTlMgMQojIGVuZGlmCiNlbmRpZgoKI2lmbmRlZiBZWUZSRUUK
IyBkZWZpbmUgWVlGUkVFIGZyZWUKI2VuZGlmCiNpZm5kZWYgWVlNQUxMT0MKIyBkZWZpbmUgWVlN
QUxMT0MgbWFsbG9jCiNlbmRpZgoKI2lmbmRlZiBZWVNFVEpNUAojIGluY2x1ZGUgPHNldGptcC5o
PgojIGRlZmluZSBZWUpNUF9CVUYgam1wX2J1ZgojIGRlZmluZSBZWVNFVEpNUChFbnYpIHNldGpt
cCAoRW52KQovKiBQYWNpZnkgQ2xhbmcgYW5kIElDQy4gICovCiMgZGVmaW5lIFlZTE9OR0pNUChF
bnYsIFZhbCkgICAgICAgICAgICAgICAgICAgIFwKIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICBsb25nam1wIChFbnYsIFZhbCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgIFlZQVNTRVJUICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKIH0gd2hpbGUgKGZhbHNlKQojZW5kaWYKCiNpZm5kZWYgWVlfQVRUUklCVVRFX1BV
UkUKIyBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDIgPCBfX0dOVUNfXyArICg5NiA8PSBfX0dOVUNf
TUlOT1JfXykKIyAgZGVmaW5lIFlZX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpCiMgZWxzZQojICBkZWZpbmUgWVlfQVRUUklCVVRFX1BVUkUKIyBlbmRpZgojZW5kaWYK
CiNpZm5kZWYgWVlfQVRUUklCVVRFX1VOVVNFRAojIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMiA8
IF9fR05VQ19fICsgKDcgPD0gX19HTlVDX01JTk9SX18pCiMgIGRlZmluZSBZWV9BVFRSSUJVVEVf
VU5VU0VEIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKIyBlbHNlCiMgIGRlZmluZSBZWV9B
VFRSSUJVVEVfVU5VU0VECiMgZW5kaWYKI2VuZGlmCgovKiBUaGUgX05vcmV0dXJuIGtleXdvcmQg
b2YgQzExLiAgKi8KI2lmbmRlZiBfTm9yZXR1cm4KIyBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyBc
CiAgICAgICYmICgoMjAxMTAzIDw9IF9fY3BsdXNwbHVzICYmICEoX19HTlVDX18gPT0gNCAmJiBf
X0dOVUNfTUlOT1JfXyA9PSA3KSkgXAogICAgICAgICAgfHwgKGRlZmluZWQgX01TQ19WRVIgJiYg
MTkwMCA8PSBfTVNDX1ZFUikpKQojICBkZWZpbmUgX05vcmV0dXJuIFtbbm9yZXR1cm5dXQojIGVs
aWYgKCghZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fY2xhbmdfXykgXAogICAgICAg
ICYmICgyMDExMTIgPD0gKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyA/IF9fU1REQ19WRVJTSU9O
X18gOiAwKSBcCiAgICAgICAgICAgIHx8ICghZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gXAogICAg
ICAgICAgICAgICAgJiYgKDQgPCBfX0dOVUNfXyArICg3IDw9IF9fR05VQ19NSU5PUl9fKSBcCiAg
ICAgICAgICAgICAgICAgICAgfHwgKGRlZmluZWQgX19hcHBsZV9idWlsZF92ZXJzaW9uX18gXAog
ICAgICAgICAgICAgICAgICAgICAgICA/IDYwMDAwMDAgPD0gX19hcHBsZV9idWlsZF92ZXJzaW9u
X18gXAogICAgICAgICAgICAgICAgICAgICAgICA6IDMgPCBfX2NsYW5nX21ham9yX18gKyAoNSA8
PSBfX2NsYW5nX21pbm9yX18pKSkpKSkKICAgLyogX05vcmV0dXJuIHdvcmtzIGFzLWlzLiAgKi8K
IyBlbGlmICgyIDwgX19HTlVDX18gKyAoOCA8PSBfX0dOVUNfTUlOT1JfXykgfHwgZGVmaW5lZCBf
X2NsYW5nX18gXAogICAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQojICBkZWZpbmUgX05v
cmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQojIGVsaWYgMTIwMCA8PSAoZGVm
aW5lZCBfTVNDX1ZFUiA/IF9NU0NfVkVSIDogMCkKIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xz
cGVjIChub3JldHVybikKIyBlbHNlCiMgIGRlZmluZSBfTm9yZXR1cm4KIyBlbmRpZgojZW5kaWYK
Ci8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLwoj
aWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwojIGRlZmluZSBZWV9VU0UoRSkg
KCh2b2lkKSAoRSkpCiNlbHNlCiMgZGVmaW5lIFlZX1VTRShFKSAvKiBlbXB0eSAqLwojZW5kaWYK
Ci8qIFN1cHByZXNzIGFuIGluY29ycmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBiZWluZyB1
bmluaXRpYWxpemVkLiAgKi8KI2lmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUND
ICYmIDQwNiA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCiMgaWYgX19HTlVDX18g
KiAxMDAgKyBfX0dOVUNfTUlOT1JfXyA8IDQwNwojICBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBfUHJhZ21h
ICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxp
emVkXCIiKQojIGVsc2UKIyAgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JF
R0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9z
dGljIHB1c2giKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBfUHJh
Z21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIikgICAgICAg
ICAgICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11
bmluaXRpYWxpemVkXCIiKQojIGVuZGlmCiMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJ
QUxJWkVEX0VORCAgICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQojZWxz
ZQojIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQojZW5kaWYKI2lmbmRlZiBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgojIGRlZmluZSBZWV9JR05PUkVfTUFZ
QkVfVU5JTklUSUFMSVpFRF9CRUdJTgojIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9FTkQKI2VuZGlmCiNpZm5kZWYgWVlfSU5JVElBTF9WQUxVRQojIGRlZmluZSBZWV9JTklU
SUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLwojZW5kaWYKCiNpZiBkZWZpbmVkIF9fY3Bs
dXNwbHVzICYmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUNDICYmIDYgPD0gX19H
TlVDX18KIyBkZWZpbmUgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9CRUdJTiAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCBcIi1XdXNlbGVzcy1jYXN0XCIiKQojIGRlZmluZSBZWV9JR05PUkVfVVNFTEVTU19DQVNUX0VO
RCAgICAgICAgICAgIFwKICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQojZW5kaWYK
I2lmbmRlZiBZWV9JR05PUkVfVVNFTEVTU19DQVNUX0JFR0lOCiMgZGVmaW5lIFlZX0lHTk9SRV9V
U0VMRVNTX0NBU1RfQkVHSU4KIyBkZWZpbmUgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9FTkQKI2Vu
ZGlmCgoKI2lmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUNDICYmIDYgPD0gX19H
TlVDX18KIyBkZWZpbmUgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVHSU4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgX1ByYWdtYSAoIkdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgXCItV251bGwtZGVyZWZlcmVuY2VcIiIpCiMgZGVmaW5lIFlZX0lH
Tk9SRV9OVUxMX0RFUkVGRVJFTkNFX0VORCAgICAgICAgIFwKICBfUHJhZ21hICgiR0NDIGRpYWdu
b3N0aWMgcG9wIikKI2Vsc2UKIyBkZWZpbmUgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVH
SU4KIyBkZWZpbmUgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfRU5ECiNlbmRpZgoKIyBpZm5k
ZWYgWVlfTlVMTFBUUgojICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCiMgICBpZiAyMDExMDNMIDw9
IF9fY3BsdXNwbHVzCiMgICAgZGVmaW5lIFlZX05VTExQVFIgbnVsbHB0cgojICAgZWxzZQojICAg
IGRlZmluZSBZWV9OVUxMUFRSIDAKIyAgIGVuZGlmCiMgIGVsc2UKIyAgIGRlZmluZSBZWV9OVUxM
UFRSICgodm9pZCopMCkKIyAgZW5kaWYKIyBlbmRpZgojIGlmbmRlZiBZWV9DQVNUCiMgIGlmZGVm
IF9fY3BsdXNwbHVzCiMgICBkZWZpbmUgWVlfQ0FTVChUeXBlLCBWYWwpIHN0YXRpY19jYXN0PFR5
cGU+IChWYWwpCiMgICBkZWZpbmUgWVlfUkVJTlRFUlBSRVRfQ0FTVChUeXBlLCBWYWwpIHJlaW50
ZXJwcmV0X2Nhc3Q8VHlwZT4gKFZhbCkKIyAgZWxzZQojICAgZGVmaW5lIFlZX0NBU1QoVHlwZSwg
VmFsKSAoKFR5cGUpIChWYWwpKQojICAgZGVmaW5lIFlZX1JFSU5URVJQUkVUX0NBU1QoVHlwZSwg
VmFsKSAoKFR5cGUpIChWYWwpKQojICBlbmRpZgojIGVuZGlmCgovLyBGSVhNRTogVXNlIHRoZSBz
YW1lIGNvbnZlbnRpb25zIGFzIGxhbHIxLmNjLgoKI2lmbmRlZiBZWUFTU0VSVAojIGRlZmluZSBZ
WUFTU0VSVChDb25kaXRpb24pICgodm9pZCkgKChDb25kaXRpb24pIHx8IChhYm9ydCAoKSwgMCkp
KQojZW5kaWYKCiNpZmRlZiBZWURFQlVHCiMgZGVmaW5lIFlZREFTU0VSVChDb25kaXRpb24pIFlZ
QVNTRVJUKENvbmRpdGlvbikKI2Vsc2UKIyBkZWZpbmUgWVlEQVNTRVJUKENvbmRpdGlvbikKI2Vu
ZGlmCgovKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUu
ICAqLwojZGVmaW5lIFlZRklOQUwgIDQKLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJM
RS4gICovCiNkZWZpbmUgWVlMQVNUICAgMwoKLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJt
aW5hbHMuICAqLwojZGVmaW5lIFlZTlRPS0VOUyAgNQovKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5v
bnRlcm1pbmFscy4gICovCiNkZWZpbmUgWVlOTlRTICA0Ci8qIFlZTlJVTEVTIC0tIE51bWJlciBv
ZiBydWxlcy4gICovCiNkZWZpbmUgWVlOUlVMRVMgIDUKLyogWVlOU1RBVEVTIC0tIE51bWJlciBv
ZiBzdGF0ZXMuICAqLwojZGVmaW5lIFlZTlNUQVRFUyAgNwovKiBZWU1BWFJIUyAtLSBNYXhpbXVt
IG51bWJlciBvZiBzeW1ib2xzIG9uIHJpZ2h0LWhhbmQgc2lkZSBvZiBydWxlLiAgKi8KI2RlZmlu
ZSBZWU1BWFJIUyAyCi8qIFlZTUFYTEVGVCAtLSBNYXhpbXVtIG51bWJlciBvZiBzeW1ib2xzIHRv
IHRoZSBsZWZ0IG9mIGEgaGFuZGxlCiAgIGFjY2Vzc2VkIGJ5ICQwLCAkLTEsIGV0Yy4sIGluIGFu
eSBydWxlLiAgKi8KI2RlZmluZSBZWU1BWExFRlQgMAoKbmFtZXNwYWNlCnsKI2lmIFlZREVCVUcK
ICAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdh
cyBkZWZpbmVkLiAgKi8KICBjb25zdCBzaWduZWQgY2hhciB5eXJsaW5lW10gPQogIHsKICAgICAg
IDAsICAgIDI5LCAgICAyOSwgICAgMjksICAgIDMwLCAgICAzMQogIH07CiNlbmRpZgoKI2RlZmlu
ZSBZWVBBQ1RfTklORiAtNQojZGVmaW5lIFlZVEFCTEVfTklORiAtNQoKICAvLyBZWVBBQ1RbU1RB
VEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKLy8g
U1RBVEUtTlVNLgogIGNvbnN0IHNpZ25lZCBjaGFyIHl5cGFjdFtdID0KICB7CiAgICAgIC00LCAg
ICAgMSwgICAgLTIsICAgIC0xLCAgICAtNSwgICAgLTUsICAgIC01CiAgfTsKCiAgLy8gWVlERUZB
Q1RbU1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUt
TlVNLgovLyBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXMgbm90IHNwZWNpZnkgc29tZXRoaW5n
IGVsc2UgdG8gZG8uICBaZXJvCi8vIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLgogIGNv
bnN0IHNpZ25lZCBjaGFyIHl5ZGVmYWN0W10gPQogIHsKICAgICAgIDQsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMKICB9OwoKICAvLyBZWVBHT1RPW05URVJNLU5VTV0u
CiAgY29uc3Qgc2lnbmVkIGNoYXIgeXlwZ290b1tdID0KICB7CiAgICAgIC01LCAgICAtNSwgICAg
LTUsICAgIC01CiAgfTsKCiAgLy8gWVlERUZHT1RPW05URVJNLU5VTV0uCiAgY29uc3Qgc2lnbmVk
IGNoYXIgeXlkZWZnb3RvW10gPQogIHsKICAgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMKICB9
OwoKICAvLyBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXSAtLSBXaGF0IHRvIGRvIGluIHN0YXRl
IFNUQVRFLU5VTS4gIElmCi8vIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRp
dmUsIHJlZHVjZSB0aGUgcnVsZSB3aG9zZQovLyBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYg
WVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuCiAgY29uc3Qgc2lnbmVkIGNoYXIgeXl0YWJsZVtd
ID0KICB7CiAgICAgIC00LCAgICAgNCwgICAgIDUsICAgICA2CiAgfTsKCiAgY29uc3Qgc2lnbmVk
IGNoYXIgeXljaGVja1tdID0KICB7CiAgICAgICA0LCAgICAgMCwgICAgIDQsICAgICA0CiAgfTsK
CiAgLy8gWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIHN5bWJvbCBraW5kIG9mIHRoZSBhY2Nlc3Np
bmcgc3ltYm9sIG9mCi8vIHN0YXRlIFNUQVRFLU5VTS4KICBjb25zdCBzaWduZWQgY2hhciB5eXN0
b3NbXSA9CiAgewogICAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICA0LCAg
ICAgNAogIH07CgogIC8vIFlZUjFbUlVMRS1OVU1dIC0tIFN5bWJvbCBraW5kIG9mIHRoZSBsZWZ0
LWhhbmQgc2lkZSBvZiBydWxlIFJVTEUtTlVNLgogIGNvbnN0IHNpZ25lZCBjaGFyIHl5cjFbXSA9
CiAgewogICAgICAgMCwgICAgIDUsICAgICA2LCAgICAgNiwgICAgIDcsICAgICA4CiAgfTsKCiAg
Ly8gWVlSMltSVUxFLU5VTV0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0LWhhbmQg
c2lkZSBvZiBydWxlIFJVTEUtTlVNLgogIGNvbnN0IHNpZ25lZCBjaGFyIHl5cjJbXSA9CiAgewog
ICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAwCiAgfTsKCgogIC8qIFlZ
RFBSRUNbUlVMRS1OVU1dIC0tIER5bmFtaWMgcHJlY2VkZW5jZSBvZiBydWxlICNSVUxFLU5VTSAo
MCBpZiBub25lKS4gICovCiAgY29uc3Qgc2lnbmVkIGNoYXIgeXlkcHJlY1tdID0KICB7CiAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAKICB9OwoKICAvKiBZWU1FUkdF
UltSVUxFLU5VTV0gLS0gSW5kZXggb2YgbWVyZ2luZyBmdW5jdGlvbiBmb3IgcnVsZSAjUlVMRS1O
VU0uICAqLwogIGNvbnN0IHNpZ25lZCBjaGFyIHl5bWVyZ2VyW10gPQogIHsKICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMAogIH07CgogIC8qIFlZSU1NRURJQVRFW1JV
TEUtTlVNXSAtLSBUcnVlIGlmZiBydWxlICNSVUxFLU5VTSBpcyBub3QgdG8gYmUgZGVmZXJyZWQs
IGFzCiAgICAgaW4gdGhlIGNhc2Ugb2YgcHJlZGljYXRlcy4gICovCiAgY29uc3QgYm9vbCB5eWlt
bWVkaWF0ZVtdID0KICB7CiAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAKICB9OwoKICAvKiBZWUNPTkZMUFtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gUG9pbnRlciBpbnRv
IFlZQ09ORkwgb2Ygc3RhcnQgb2YKICAgICBsaXN0IG9mIGNvbmZsaWN0aW5nIHJlZHVjdGlvbnMg
Y29ycmVzcG9uZGluZyB0byBhY3Rpb24gZW50cnkgZm9yCiAgICAgc3RhdGUgU1RBVEUtTlVNIGlu
IHl5dGFibGUuICAwIG1lYW5zIG5vIGNvbmZsaWN0cy4gIFRoZSBsaXN0IGluCiAgICAgeXljb25m
bCBpcyB0ZXJtaW5hdGVkIGJ5IGEgcnVsZSBudW1iZXIgb2YgMC4gICovCiAgY29uc3Qgc2lnbmVk
IGNoYXIgeXljb25mbHBbXSA9CiAgewogICAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMAogIH07
CgogIC8qIFlZQ09ORkxbSV0gLS0gbGlzdHMgb2YgY29uZmxpY3RpbmcgcnVsZSBudW1iZXJzLCBl
YWNoIHRlcm1pbmF0ZWQgYnkKICAgICAwLCBwb2ludGVkIGludG8gYnkgWVlDT05GTFAuICAqLwog
ICAgICAgIGNvbnN0IHNob3J0IHl5Y29uZmxbXSA9CiAgewogICAgICAgMCwgICAgIDUsICAgICAw
CiAgfTsKfSAvLyBuYW1lc3BhY2UKCgovKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KI2RlZmluZSBZ
WVRFUlJPUiAxCgoKCmVudW0gWVlSRVNVTFRUQUcgeyB5eW9rLCB5eWFjY2VwdCwgeXlhYm9ydCwg
eXllcnIgfTsKCiNkZWZpbmUgWVlDSEsoWVlFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
WVlSRVNVTFRUQUcgeXljaGtfZmxhZyA9IFlZRTsgICAgICAgICAgICAgICBcCiAgICBpZiAoeXlj
aGtfZmxhZyAhPSB5eW9rKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgcmV0dXJuIHl5Y2hr
X2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKGZhbHNlKQoKI2lmIFlZ
REVCVUcKCiNkZWZpbmUgWVlDREVCVUcgaWYgKCF5eWRlYnVnKSB7fSBlbHNlIHN0ZDo6Y2VycgoK
IyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBLaW5kLCBWYWx1ZSwgTG9jYXRpb24pICAg
ICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpZiAoeXlkZWJ1ZykgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgIHN0ZDo6Y2VyciA8PCBUaXRsZSA8PCAnICc7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgeXlwYXJzZXIueXlfc3ltYm9sX3By
aW50XyAoS2luZCwgVmFsdWUpOyBcCiAgICAgICAgc3RkOjpjZXJyIDw8ICdcbic7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
IH0gd2hpbGUgKGZhbHNlKQoKIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKEFyZ3MpICAgICAgICAg
ICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgeXlzdGF0ZVN0YWNrLnl5X3JlZHVjZV9wcmludCBBcmdzOyAgICAgICAgXAogIH0gd2hpbGUg
KGZhbHNlKQoKLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQg
dW5pbml0aWFsaXplZCBzbyB0aGF0CiAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAq
LwppbnQgeXlkZWJ1ZzsKCm5hbWVzcGFjZQp7CiAgdXNpbmcgZ2xyX3N0YWNrID0geXk6OnBhcnNl
cjo6Z2xyX3N0YWNrOwogIHVzaW5nIGdscl9zdGF0ZSA9IHl5OjpwYXJzZXI6Omdscl9zdGF0ZTsK
CiAgdm9pZCB5eXBzdGFjayAoY29uc3QgZ2xyX3N0YWNrJiB5eXN0YWNrLCBzaXplX3QgeXlrKQog
ICAgWVlfQVRUUklCVVRFX1VOVVNFRDsKICB2b2lkIHl5cGR1bXBzdGFjayAoY29uc3QgZ2xyX3N0
YWNrJiB5eXN0YWNrKQogICAgWVlfQVRUUklCVVRFX1VOVVNFRDsKfQoKI2Vsc2UgLyogIVlZREVC
VUcgKi8KCiMgZGVmaW5lIFlZQ0RFQlVHIGlmICh0cnVlKSB7fSBlbHNlIHN0ZDo6Y2VycgojIGRl
ZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIEtpbmQsIFZhbHVlLCBMb2NhdGlvbikge30KIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKEFyZ3MpIHt9CgojZW5kaWYgLyogIVlZREVCVUcgKi8KCi8q
IFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8K
I2lmbmRlZiBZWUlOSVRERVBUSAojIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKI2VuZGlmCgovKiBZ
WU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3Rp
dmUgb25seQogICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2Vk
KS4KCiAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUg
dW5kZWZpbmVkIGlmCiAgIFNJWkVfTUFYIDwgWVlNQVhERVBUSCAqIHNpemVvZiAoR0xSU3RhY2tJ
dGVtKQogICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1l
dGljLiAgKi8KCiNpZm5kZWYgWVlNQVhERVBUSAojIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCiNl
bmRpZgoKLyogTWluaW11bSBudW1iZXIgb2YgZnJlZSBpdGVtcyBvbiB0aGUgc3RhY2sgYWxsb3dl
ZCBhZnRlciBhbgogICBhbGxvY2F0aW9uLiAgVGhpcyBpcyB0byBhbGxvdyBhbGxvY2F0aW9uIGFu
ZCBpbml0aWFsaXphdGlvbgogICB0byBiZSBjb21wbGV0ZWQgYnkgZnVuY3Rpb25zIHRoYXQgY2Fs
bCB5eWV4cGFuZEdMUlN0YWNrIGJlZm9yZSB0aGUKICAgc3RhY2sgaXMgZXhwYW5kZWQsIHRodXMg
aW5zdXJpbmcgdGhhdCBhbGwgbmVjZXNzYXJ5IHBvaW50ZXJzIGdldAogICBwcm9wZXJseSByZWRp
cmVjdGVkIHRvIG5ldyBkYXRhLiAgKi8KI2RlZmluZSBZWUhFQURST09NIDIKCiNpZm5kZWYgWVlT
VEFDS0VYUEFOREFCTEUKIyBkZWZpbmUgWVlTVEFDS0VYUEFOREFCTEUgMQojZW5kaWYKCm5hbWVz
cGFjZQp7CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFBhcmFtZXRlcj4KICBjbGFzcyBzdHJvbmdfaW5k
ZXhfYWxpYXMKICB7CiAgcHVibGljOgogICAgc3RhdGljIHN0cm9uZ19pbmRleF9hbGlhcyBjcmVh
dGUgKHN0ZDo6cHRyZGlmZl90IHZhbHVlKQogICAgewogICAgICBzdHJvbmdfaW5kZXhfYWxpYXMg
cmVzdWx0OwogICAgICByZXN1bHQudmFsdWVfID0gdmFsdWU7CiAgICAgIHJldHVybiByZXN1bHQ7
CiAgICB9CgogICAgc3RkOjpwdHJkaWZmX3QgY29uc3QmIGdldCAoKSBjb25zdCB7IHJldHVybiB2
YWx1ZV87IH0KCiAgICBzaXplX3QgdWdldCAoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+ICh2YWx1ZV8pOyB9CgogICAgc3Ryb25nX2luZGV4X2FsaWFzIG9wZXJhdG9yKyAoc3Rk
OjpwdHJkaWZmX3Qgb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBzdHJvbmdfaW5kZXhf
YWxpYXMgKGdldCAoKSArIG90aGVyKTsKICAgIH0KCiAgICB2b2lkIG9wZXJhdG9yKz0gKHN0ZDo6
cHRyZGlmZl90IG90aGVyKQogICAgewogICAgICB2YWx1ZV8gKz0gb3RoZXI7CiAgICB9CgogICAg
c3Ryb25nX2luZGV4X2FsaWFzIG9wZXJhdG9yLSAoc3RkOjpwdHJkaWZmX3Qgb3RoZXIpCiAgICB7
CiAgICAgIHJldHVybiBzdHJvbmdfaW5kZXhfYWxpYXMgKGdldCAoKSAtIG90aGVyKTsKICAgIH0K
CiAgICB2b2lkIG9wZXJhdG9yLT0gKHN0ZDo6cHRyZGlmZl90IG90aGVyKQogICAgewogICAgICB2
YWx1ZV8gLT0gb3RoZXI7CiAgICB9CgogICAgc2l6ZV90IG9wZXJhdG9yLSAoc3Ryb25nX2luZGV4
X2FsaWFzIG90aGVyKQogICAgewogICAgICByZXR1cm4gc3Ryb25nX2luZGV4X2FsaWFzIChnZXQg
KCkgLSBvdGhlci5nZXQgKCkpOwogICAgfQoKICAgIHN0cm9uZ19pbmRleF9hbGlhcyYgb3BlcmF0
b3IrKyAoKQogICAgewogICAgICArK3ZhbHVlXzsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICAgIGJvb2wgaXNWYWxpZCAoKSBjb25zdAogICAgewogICAgICByZXR1cm4gdmFsdWVfICE9IElO
VkFMSURfSU5ERVg7CiAgICB9CgogICAgdm9pZCBzZXRJbnZhbGlkKCkKICAgIHsKICAgICAgdmFs
dWVfID0gSU5WQUxJRF9JTkRFWDsKICAgIH0KCiAgICBib29sIG9wZXJhdG9yPT0gKHN0cm9uZ19p
bmRleF9hbGlhcyBvdGhlcikKICAgIHsKICAgICAgcmV0dXJuIGdldCAoKSA9PSBvdGhlci5nZXQg
KCk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9IChzdHJvbmdfaW5kZXhfYWxpYXMgb3RoZXIp
CiAgICB7CiAgICAgIHJldHVybiBnZXQgKCkgIT0gb3RoZXIuZ2V0ICgpOwogICAgfQoKICAgIGJv
b2wgb3BlcmF0b3I8IChzdHJvbmdfaW5kZXhfYWxpYXMgb3RoZXIpCiAgICB7CiAgICAgIHJldHVy
biBnZXQgKCkgPCBvdGhlci5nZXQgKCk7CiAgICB9CgogIHByaXZhdGU6CiAgICBzdGF0aWMgY29u
c3Qgc3RkOjpwdHJkaWZmX3QgSU5WQUxJRF9JTkRFWDsKCiAgICAvLyBXQVJOSU5HOiAwLWluaXRp
YWxpemVkLgogICAgc3RkOjpwdHJkaWZmX3QgdmFsdWVfOwogIH07IC8vIGNsYXNzIHN0cm9uZ19p
bmRleF9hbGlhcwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogIGNvbnN0IHN0ZDo6cHRyZGlmZl90
IHN0cm9uZ19pbmRleF9hbGlhczxUPjo6SU5WQUxJRF9JTkRFWCA9CiAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHN0ZDo6cHRyZGlmZl90Pjo6bWF4ICgpOwoKICB1c2luZyBzdGF0ZV9zZXRfaW5kZXgg
PSBzdHJvbmdfaW5kZXhfYWxpYXM8c3RydWN0IGdscl9zdGF0ZV9zZXRfdGFnPjsKCiAgc3RhdGVf
c2V0X2luZGV4IGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXggKHN0ZDo6cHRyZGlmZl90IHZhbHVlKQog
IHsKICAgIHJldHVybiBzdGF0ZV9zZXRfaW5kZXg6OmNyZWF0ZSAodmFsdWUpOwogIH0KCiAgLyoq
IFN0YXRlIG51bWJlcnMsIGFzIGluIExBTFIoMSkgbWFjaGluZSAqLwogIHVzaW5nIHN0YXRlX251
bSA9IGludDsKCiAgLyoqIFJ1bGUgbnVtYmVycywgYXMgaW4gTEFMUigxKSBtYWNoaW5lICovCiAg
dXNpbmcgcnVsZV9udW0gPSBpbnQ7CgogIHVzaW5nIHBhcnNlcl90eXBlID0geXk6OnBhcnNlcjsK
ICB1c2luZyBnbHJfc3RhdGUgPSBwYXJzZXJfdHlwZTo6Z2xyX3N0YXRlOwogIHVzaW5nIHN5bWJv
bF9raW5kID0gcGFyc2VyX3R5cGU6OnN5bWJvbF9raW5kOwogIHVzaW5nIHN5bWJvbF9raW5kX3R5
cGUgPSBwYXJzZXJfdHlwZTo6c3ltYm9sX2tpbmRfdHlwZTsKICB1c2luZyBzeW1ib2xfdHlwZSA9
IHBhcnNlcl90eXBlOjpzeW1ib2xfdHlwZTsKICB1c2luZyB2YWx1ZV90eXBlID0gcGFyc2VyX3R5
cGU6OnZhbHVlX3R5cGU7CgogIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgogIGNsYXNzIGdscl9z
dGFja19pdGVtOwogIGNsYXNzIHNlbWFudGljX29wdGlvbjsKfSAvLyBuYW1lc3BhY2UKCm5hbWVz
cGFjZQp7CiAgLyoqIEFjY2Vzc2luZyBzeW1ib2wgb2Ygc3RhdGUgWVlTVEFURS4gICovCiAgaW5s
aW5lIHN5bWJvbF9raW5kX3R5cGUKICB5eV9hY2Nlc3Npbmdfc3ltYm9sIChzdGF0ZV9udW0geXlz
dGF0ZSkKICB7CiAgICByZXR1cm4gWVlfQ0FTVCAoc3ltYm9sX2tpbmRfdHlwZSwgeXlzdG9zW3l5
c3RhdGVdKTsKICB9CgogIC8qKiBMZWZ0LWhhbmQtc2lkZSBzeW1ib2wgZm9yIHJ1bGUgI1lZUlVM
RS4gICovCiAgaW5saW5lIHN5bWJvbF9raW5kX3R5cGUKICB5eWxoc05vbnRlcm0gKHJ1bGVfbnVt
IHl5cnVsZSkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c3ltYm9sX2tpbmRfdHlwZT4oeXly
MVt5eXJ1bGVdKTsKICB9CgogIC8qKiBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgdGhlIHJp
Z2h0IGhhbmQgc2lkZSBvZiBydWxlICNSVUxFLiAgKi8KICBpbmxpbmUgaW50CiAgeXlyaHNMZW5n
dGggKHJ1bGVfbnVtIHl5cnVsZSkKICB7CiAgICByZXR1cm4geXlyMlt5eXJ1bGVdOwogIH0KfQoK
bmFtZXNwYWNlIHl5CnsKICBjbGFzcyBwYXJzZXI6Omdscl9zdGF0ZQogIHsKICBwdWJsaWM6CiAg
ICBnbHJfc3RhdGUgKCkKICAgICAgOiB5eXJlc29sdmVkIChmYWxzZSkKICAgICAgLCB5eWxyU3Rh
dGUgKDApCiAgICAgICwgeXlwb3NuICgwKQogICAgICAsIHl5cHJlZCAoMCkKICAgICAgLCB5eWZp
cnN0VmFsICgwKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7fQoKICAgIC8vLyBCdWlsZCB3
aXRoIGEgc2VtYW50aWMgdmFsdWUuCiAgICBnbHJfc3RhdGUgKHN0YXRlX251bSBsclN0YXRlLCBz
aXplX3QgcG9zbiwgY29uc3QgdmFsdWVfdHlwZSYgdmFsKQogICAgICA6IHl5cmVzb2x2ZWQgKHRy
dWUpCiAgICAgICwgeXlsclN0YXRlIChsclN0YXRlKQogICAgICAsIHl5cG9zbiAocG9zbikKICAg
ICAgLCB5eXByZWQgKDApCiAgICAgICwgeXl2YWwgKHZhbCkKICAgICAgLCBtYWdpY18gKE1BR0lD
KQogICAge30KCiAgICAvLy8gQnVpbGQgd2l0aCBhIHNlbWFudGljIG9wdGlvbi4KICAgIGdscl9z
dGF0ZSAoc3RhdGVfbnVtIGxyU3RhdGUsIHNpemVfdCBwb3NuKQogICAgICA6IHl5cmVzb2x2ZWQg
KGZhbHNlKQogICAgICAsIHl5bHJTdGF0ZSAobHJTdGF0ZSkKICAgICAgLCB5eXBvc24gKHBvc24p
CiAgICAgICwgeXlwcmVkICgwKQogICAgICAsIHl5Zmlyc3RWYWwgKDApCiAgICAgICwgbWFnaWNf
IChNQUdJQykKICAgIHt9CgogICAgZ2xyX3N0YXRlIChjb25zdCBnbHJfc3RhdGUmIG90aGVyKQog
ICAgICA6IHl5cmVzb2x2ZWQgKG90aGVyLnl5cmVzb2x2ZWQpCiAgICAgICwgeXlsclN0YXRlIChv
dGhlci55eWxyU3RhdGUpCiAgICAgICwgeXlwb3NuIChvdGhlci55eXBvc24pCiAgICAgICwgeXlw
cmVkICgwKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7CiAgICAgIHNldFByZWQgKG90aGVy
LnByZWQgKCkpOwogICAgICBpZiAob3RoZXIueXlyZXNvbHZlZCkKICAgICAgICBuZXcgKCZ5eXZh
bCkgdmFsdWVfdHlwZSAob3RoZXIudmFsdWUgKCkpOwogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgeXlmaXJzdFZhbCA9IDA7CiAgICAgICAgICBzZXRGaXJzdFZhbCAob3RoZXIuZmlyc3RW
YWwgKCkpOwogICAgICAgIH0KICAgICAgY2hlY2tfKCk7CiAgICB9CgogICAgfmdscl9zdGF0ZSAo
KQogICAgewogICAgICBjaGVja18gKCk7CiAgICAgIGlmICh5eXJlc29sdmVkKQogICAgICAgIHsK
ICAgICAgICAgIHl5dmFsLn52YWx1ZV90eXBlICgpOwogICAgICAgIH0KICAgICAgbWFnaWNfID0g
MDsKICAgIH0KCiAgICBnbHJfc3RhdGUmIG9wZXJhdG9yPSAoY29uc3QgZ2xyX3N0YXRlJiBvdGhl
cikKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICBvdGhlci5jaGVja18gKCk7CiAgICAgIGlm
ICgheXlyZXNvbHZlZCAmJiBvdGhlci55eXJlc29sdmVkKQogICAgICAgIG5ldyAoJnl5dmFsKSB2
YWx1ZV90eXBlOwogICAgICB5eXJlc29sdmVkID0gb3RoZXIueXlyZXNvbHZlZDsKICAgICAgeXls
clN0YXRlID0gb3RoZXIueXlsclN0YXRlOwogICAgICB5eXBvc24gPSBvdGhlci55eXBvc247CiAg
ICAgIHNldFByZWQgKG90aGVyLnByZWQgKCkpOwogICAgICBpZiAob3RoZXIueXlyZXNvbHZlZCkK
ICAgICAgICB2YWx1ZSAoKSA9IG90aGVyLnZhbHVlICgpOwogICAgICBlbHNlCiAgICAgICAgc2V0
Rmlyc3RWYWwgKG90aGVyLmZpcnN0VmFsICgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICAgIC8qKiBUeXBlIHRhZyBmb3IgdGhlIHNlbWFudGljIHZhbHVlLiAgSWYgdHJ1ZSwgeXl2YWwg
YXBwbGllcywgb3RoZXJ3aXNlCiAgICAgKiAgeXlmaXJzdFZhbCBhcHBsaWVzLiAgKi8KICAgIGJv
b2wgeXlyZXNvbHZlZDsKICAgIC8qKiBOdW1iZXIgb2YgY29ycmVzcG9uZGluZyBMQUxSKDEpIG1h
Y2hpbmUgc3RhdGUuICAqLwogICAgc3RhdGVfbnVtIHl5bHJTdGF0ZTsKICAgIC8qKiBTb3VyY2Ug
cG9zaXRpb24gb2YgdGhlIGxhc3QgdG9rZW4gcHJvZHVjZWQgYnkgbXkgc3ltYm9sICovCiAgICBz
aXplX3QgeXlwb3NuOwoKICAgIC8vLyBPbmx5IGNhbGwgcHJlZCgpIGFuZCBzZXRQcmVkKCkgb24g
b2JqZWN0cyBpbiB5eWl0ZW1zLCBub3QgdGVtcG9yYXJpZXMuCiAgICBnbHJfc3RhdGUqIHByZWQg
KCk7CiAgICBjb25zdCBnbHJfc3RhdGUqIHByZWQgKCkgY29uc3Q7CiAgICB2b2lkIHNldFByZWQg
KGNvbnN0IGdscl9zdGF0ZSogc3RhdGUpOwoKICAgIC8vLyBPbmx5IGNhbGwgZmlyc3RWYWwoKSBh
bmQgc2V0Rmlyc3RWYWwoKSBvbiBvYmplY3RzIGluIHl5aXRlbXMsIG5vdAogICAgLy8vIHRlbXBv
cmFyaWVzLgogICAgc2VtYW50aWNfb3B0aW9uKiBmaXJzdFZhbCAoKTsKICAgIGNvbnN0IHNlbWFu
dGljX29wdGlvbiogZmlyc3RWYWwgKCkgY29uc3Q7CiAgICB2b2lkIHNldEZpcnN0VmFsIChjb25z
dCBzZW1hbnRpY19vcHRpb24qIG9wdGlvbik7CgogICAgdmFsdWVfdHlwZSYgdmFsdWUgKCkKICAg
IHsKICAgICAgY2hlY2tfICgpOwogICAgICByZXR1cm4geXl2YWw7CiAgICB9CgogICAgY29uc3Qg
dmFsdWVfdHlwZSYgdmFsdWUgKCkgY29uc3QKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICBy
ZXR1cm4geXl2YWw7CiAgICB9CgogICAgdm9pZAogICAgZGVzdHJveSAoY2hhciBjb25zdCAqeXlt
c2csIHl5OjpwYXJzZXImIHl5cGFyc2VyKTsKCiAgICAvKiBERUJVR0dJTkcgT05MWSAqLwogICNp
ZiBZWURFQlVHCiAgICB2b2lkIHl5X3l5cHN0YWNrICgpIGNvbnN0CiAgICB7CiAgICAgIGNoZWNr
XyAoKTsKICAgICAgaWYgKHByZWQgKCkgIT0gWVlfTlVMTFBUUikKICAgICAgICB7CiAgICAgICAg
ICBwcmVkICgpLT55eV95eXBzdGFjayAoKTsKICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiIC0+ICI7
CiAgICAgICAgfQogICAgICBzdGQ6OmNlcnIgPDwgeXlsclN0YXRlIDw8ICJAIiA8PCB5eXBvc247
CiAgICB9CiAgI2VuZGlmCgogICAgc3RkOjpwdHJkaWZmX3QgaW5kZXhJbiAoY29uc3QgZ2xyX3N0
YWNrX2l0ZW0qIGFycmF5KSBjb25zdCBZWV9BVFRSSUJVVEVfVU5VU0VEOwoKICAgIGdscl9zdGFj
a19pdGVtKiBhc0l0ZW0gKCkKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICByZXR1cm4gYXNJ
dGVtKHRoaXMpOwogICAgfQoKICAgIGNvbnN0IGdscl9zdGFja19pdGVtKiBhc0l0ZW0gKCkgY29u
c3QKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICByZXR1cm4gYXNJdGVtICh0aGlzKTsKICAg
IH0KCiAgcHJpdmF0ZToKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RhdGljIGNvbnN0
IGdscl9zdGFja19pdGVtKiBhc0l0ZW0gKGNvbnN0IFQqIHN0YXRlKQogICAgewogICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBnbHJfc3RhY2tfaXRlbSo+KHN0YXRlKTsKICAgIH0K
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RhdGljIGdscl9zdGFja19pdGVtKiBhc0l0
ZW0gKFQqIHN0YXRlKQogICAgewogICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnbHJfc3Rh
Y2tfaXRlbSo+IChzdGF0ZSk7CiAgICB9CiAgICBzdGF0aWMgY29uc3QgY2hhciAqYXNfcG9pbnRl
cl8gKGNvbnN0IGdscl9zdGF0ZSAqc3RhdGUpCiAgICB7CiAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIgKj4gKHN0YXRlKTsKICAgIH0KICAgIHN0YXRpYyBjaGFyICphc19w
b2ludGVyXyAoZ2xyX3N0YXRlICpzdGF0ZSkKICAgIHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhciAqPiAoc3RhdGUpOwogICAgfQogICAgLyoqIFByZWNlZGluZyBzdGF0ZSBpbiB0
aGlzIHN0YWNrICovCiAgICBzdGQ6OnB0cmRpZmZfdCB5eXByZWQ7CiAgICB1bmlvbiB7CiAgICAg
IC8qKiBGaXJzdCBpbiBhIGNoYWluIG9mIGFsdGVybmF0aXZlIHJlZHVjdGlvbnMgcHJvZHVjaW5n
IHRoZQogICAgICAgKiAgbm9udGVybWluYWwgY29ycmVzcG9uZGluZyB0byB0aGlzIHN0YXRlLCB0
aHJlYWRlZCB0aHJvdWdoCiAgICAgICAqICB5eWZpcnN0VmFsLiAgVmFsdWUgIjAiIG1lYW5zIGVt
cHR5LiAgKi8KICAgICAgc3RkOjpwdHJkaWZmX3QgeXlmaXJzdFZhbDsKICAgICAgLyoqIFNlbWFu
dGljIHZhbHVlIGZvciB0aGlzIHN0YXRlLiAgKi8KICAgICAgdmFsdWVfdHlwZSB5eXZhbDsKICAg
IH07CgoKICBwdWJsaWM6CiAgICAvLyBDaGVjayBpbnZhcmlhbnRzLgogICAgdm9pZCBjaGVja18g
KCkgY29uc3QKICAgIHsKICAgICAgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVHSU4KICAg
ICAgWVlBU1NFUlQgKHRoaXMtPm1hZ2ljXyA9PSBNQUdJQyk7CiAgICAgIFlZX0lHTk9SRV9OVUxM
X0RFUkVGRVJFTkNFX0VORAogICAgfQoKICAgIC8vIEEgbWFnaWMgbnVtYmVyIHRvIGNoZWNrIG91
ciBwb2ludGVyIGFyaXRobWV0aWMgaXMgc2FuZS4KICAgIGVudW0geyBNQUdJQyA9IDcxMzcwNSB9
OwogICAgdW5zaWduZWQgaW50IG1hZ2ljXzsKICB9OyAvLyBjbGFzcyBwYXJzZXI6Omdscl9zdGF0
ZQp9IC8vIG5hbWVzcGFjZSB5eQoKCm5hbWVzcGFjZQp7CiAgLyoqIEEgc3RhY2sgb2YgR0xSU3Rh
dGUgcmVwcmVzZW50aW5nIHRoZSBkaWZmZXJlbnQgaGVhZHMgZHVyaW5nCiAgICAqIG5vbmRldGVy
bWluaXN0aWMgZXZhbHVhdGlvbi4gKi8KICBjbGFzcyBnbHJfc3RhdGVfc2V0CiAgewogIHB1Ymxp
YzoKICAgIC8qKiBJbml0aWFsaXplIFlZU0VUIHRvIGEgc2luZ2xldG9uIHNldCBjb250YWluaW5n
IGFuIGVtcHR5IHN0YWNrLiAgKi8KICAgIGdscl9zdGF0ZV9zZXQgKCkKICAgICAgOiB5eWxhc3RE
ZWxldGVkIChZWV9OVUxMUFRSKQogICAgewogICAgICB5eXN0YXRlcy5wdXNoX2JhY2sgKFlZX05V
TExQVFIpOwogICAgICB5eWxvb2thaGVhZE5lZWRzLnB1c2hfYmFjayAoZmFsc2UpOwogICAgfQoK
ICAgIC8vIEJlaGF2ZSBsaWtlIGEgdmVjdG9yIG9mIHN0YXRlcy4KICAgIGdscl9zdGF0ZSomIG9w
ZXJhdG9yW10gKHN0YXRlX3NldF9pbmRleCBpbmRleCkKICAgIHsKICAgICAgcmV0dXJuIHl5c3Rh
dGVzW2luZGV4LnVnZXQoKV07CiAgICB9CgogICAgZ2xyX3N0YXRlKiBvcGVyYXRvcltdIChzdGF0
ZV9zZXRfaW5kZXggaW5kZXgpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiB5eXN0YXRlc1tpbmRl
eC51Z2V0KCldOwogICAgfQoKICAgIHNpemVfdCBzaXplICgpIGNvbnN0CiAgICB7CiAgICAgIHJl
dHVybiB5eXN0YXRlcy5zaXplICgpOwogICAgfQoKICAgIHN0ZDo6dmVjdG9yPGdscl9zdGF0ZSo+
OjppdGVyYXRvciBiZWdpbiAoKQogICAgewogICAgICByZXR1cm4geXlzdGF0ZXMuYmVnaW4gKCk7
CiAgICB9CgogICAgc3RkOjp2ZWN0b3I8Z2xyX3N0YXRlKj46Oml0ZXJhdG9yIGVuZCAoKQogICAg
ewogICAgICByZXR1cm4geXlzdGF0ZXMuZW5kICgpOwogICAgfQoKICAgIGJvb2wgbG9va2FoZWFk
TmVlZHMgKHN0YXRlX3NldF9pbmRleCBpbmRleCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5
bG9va2FoZWFkTmVlZHNbaW5kZXgudWdldCAoKV07CiAgICB9CgogICAgYm9vbCBzZXRMb29rYWhl
YWROZWVkcyAoc3RhdGVfc2V0X2luZGV4IGluZGV4LCBib29sIHZhbHVlKQogICAgewogICAgICBy
ZXR1cm4geXlsb29rYWhlYWROZWVkc1tpbmRleC51Z2V0ICgpXSA9IHZhbHVlOwogICAgfQoKICAg
IC8qKiBJbnZhbGlkYXRlIHN0YWNrICNZWUsuICAqLwogICAgdm9pZAogICAgeXltYXJrU3RhY2tE
ZWxldGVkIChzdGF0ZV9zZXRfaW5kZXggeXlrKQogICAgewogICAgICBzaXplX3QgayA9IHl5ay51
Z2V0ICgpOwogICAgICBpZiAoeXlzdGF0ZXNba10gIT0gWVlfTlVMTFBUUikKICAgICAgICB5eWxh
c3REZWxldGVkID0geXlzdGF0ZXNba107CiAgICAgIHl5c3RhdGVzW2tdID0gWVlfTlVMTFBUUjsK
ICAgIH0KCiAgICAvKiogVW5kZWxldGUgdGhlIGxhc3Qgc3RhY2sgaW4gKnRoaXMgdGhhdCB3YXMg
bWFya2VkIGFzIGRlbGV0ZWQuICBDYW4KICAgICAgICBvbmx5IGJlIGRvbmUgb25jZSBhZnRlciBh
IGRlbGV0aW9uLCBhbmQgb25seSB3aGVuIGFsbCBvdGhlciBzdGFja3MgaGF2ZQogICAgICAgIGJl
ZW4gZGVsZXRlZC4gICovCiAgICB2b2lkCiAgICB5eXVuZGVsZXRlTGFzdFN0YWNrICgpCiAgICB7
CiAgICAgIGlmICh5eWxhc3REZWxldGVkID09IFlZX05VTExQVFIgfHwgIXl5c3RhdGVzLmVtcHR5
ICgpKQogICAgICAgIHJldHVybjsKICAgICAgeXlzdGF0ZXMucHVzaF9iYWNrICh5eWxhc3REZWxl
dGVkKTsKICAgICAgWVlDREVCVUcgPDwgIlJlc3RvcmluZyBsYXN0IGRlbGV0ZWQgc3RhY2sgYXMg
c3RhY2sgIzAuXG4iOwogICAgICBjbGVhckxhc3REZWxldGVkICgpOwogICAgfQoKICAgIC8qKiBS
ZW1vdmUgdGhlIGRlYWQgc3RhY2tzICh5eXN0YXRlc1tpXSA9PSBZWV9OVUxMUFRSKSBhbmQgc2hp
ZnQgdGhlIGxhdGVyCiAgICAgKiBvbmVzLiAgKi8KICAgIHZvaWQKICAgIHl5cmVtb3ZlRGVsZXRl
cyAoKQogICAgewogICAgICBzaXplX3QgbmV3c2l6ZSA9IHl5c3RhdGVzLnNpemUgKCk7CiAgICAg
IC8qIGogaXMgdGhlIG51bWJlciBvZiBsaXZlIHN0YWNrcyB3ZSBoYXZlIHNlZW4uICAqLwogICAg
ICBmb3IgKHNpemVfdCBpID0gMCwgaiA9IDA7IGogPCBuZXdzaXplOyArK2kpCiAgICAgICAgewog
ICAgICAgICAgaWYgKHl5c3RhdGVzW2ldID09IFlZX05VTExQVFIpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpZiAoaSA9PSBqKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBZWUNERUJVRyA8PCAiUmVtb3ZpbmcgZGVhZCBzdGFja3MuXG4iOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIG5ld3NpemUgLT0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgeXlzdGF0ZXNbal0gPSB5eXN0YXRlc1tpXTsK
ICAgICAgICAgICAgICAvKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgaXQncyB1bm5l
Y2Vzc2FyeSB0byBjb3B5CiAgICAgICAgICAgICAgICAgeXlsb29rYWhlYWROZWVkc1tpXSBzaW5j
ZSwgYWZ0ZXIKICAgICAgICAgICAgICAgICB5eXJlbW92ZURlbGV0ZXMgcmV0dXJucywgdGhlIHBh
cnNlciBpbW1lZGlhdGVseSBlaXRoZXIgZW50ZXJzCiAgICAgICAgICAgICAgICAgZGV0ZXJtaW5p
c3RpYyBvcGVyYXRpb24gb3Igc2hpZnRzIGEgdG9rZW4uICBIb3dldmVyLCBpdCBkb2Vzbid0CiAg
ICAgICAgICAgICAgICAgaHVydCwgYW5kIHRoZSBjb2RlIG1pZ2h0IGV2b2x2ZSB0byBuZWVkIGl0
LiAgKi8KICAgICAgICAgICAgICB5eWxvb2thaGVhZE5lZWRzW2pdID0geXlsb29rYWhlYWROZWVk
c1tpXTsKICAgICAgICAgICAgICBpZiAoaiAhPSBpKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBZWUNERUJVRyA8PCAiUmVuYW1lIHN0YWNrICIgPDwgaSA8PCAiIC0+ICIgPDwg
aiA8PCAiLlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBqICs9IDE7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHl5c3RhdGVzLnJlc2l6ZSAobmV3c2l6ZSk7CiAgICAg
IHl5bG9va2FoZWFkTmVlZHMucmVzaXplIChuZXdzaXplKTsKICAgIH0KCgogICAgc3RhdGVfc2V0
X2luZGV4CiAgICB5eXNwbGl0U3RhY2sgKHN0YXRlX3NldF9pbmRleCB5eWspCiAgICB7CiAgICAg
IGNvbnN0IHNpemVfdCBrID0geXlrLnVnZXQgKCk7CiAgICAgIHl5c3RhdGVzLnB1c2hfYmFjayAo
eXlzdGF0ZXNba10pOwogICAgICB5eWxvb2thaGVhZE5lZWRzLnB1c2hfYmFjayAoeXlsb29rYWhl
YWROZWVkc1trXSk7CiAgICAgIHJldHVybiBjcmVhdGVfc3RhdGVfc2V0X2luZGV4IChzdGF0aWNf
Y2FzdDxzdGQ6OnB0cmRpZmZfdD4gKHl5c3RhdGVzLnNpemUgKCkgLSAxKSk7CiAgICB9CgogICAg
dm9pZCBjbGVhckxhc3REZWxldGVkICgpCiAgICB7CiAgICAgIHl5bGFzdERlbGV0ZWQgPSBZWV9O
VUxMUFRSOwogICAgfQoKICBwcml2YXRlOgoKICAgIHN0ZDo6dmVjdG9yPGdscl9zdGF0ZSo+IHl5
c3RhdGVzOwogICAgLyoqIER1cmluZyBub25kZXRlcm1pbmlzdGljIG9wZXJhdGlvbiwgeXlsb29r
YWhlYWROZWVkcyB0cmFja3Mgd2hpY2gKICAgICAqICBzdGFja3MgaGF2ZSBhY3R1YWxseSBuZWVk
ZWQgdGhlIGN1cnJlbnQgbG9va2FoZWFkLiAgRHVyaW5nIGRldGVybWluaXN0aWMKICAgICAqICBv
cGVyYXRpb24sIHl5bG9va2FoZWFkTmVlZHNbMF0gaXMgbm90IG1haW50YWluZWQgc2luY2UgaXQg
d291bGQgbWVyZWx5CiAgICAgKiAgZHVwbGljYXRlICF5eWxhLmVtcHR5ICgpLiAgKi8KICAgIHN0
ZDo6dmVjdG9yPGJvb2w+IHl5bG9va2FoZWFkTmVlZHM7CgogICAgLyoqIFRoZSBsYXN0IHN0YWNr
IHdlIGludmFsaWRhdGVkLiAgKi8KICAgIGdscl9zdGF0ZSogeXlsYXN0RGVsZXRlZDsKICB9OyAv
LyBjbGFzcyBnbHJfc3RhdGVfc2V0Cn0gLy8gbmFtZXNwYWNlCgpuYW1lc3BhY2UKewogIGNsYXNz
IHNlbWFudGljX29wdGlvbgogIHsKICBwdWJsaWM6CiAgICBzZW1hbnRpY19vcHRpb24gKCkKICAg
ICAgOiB5eXJ1bGUgKDApCiAgICAgICwgeXlzdGF0ZSAoMCkKICAgICAgLCB5eW5leHQgKDApCiAg
ICAgICwgeXlsYSAoKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7fQoKICAgIHNlbWFudGlj
X29wdGlvbiAocnVsZV9udW0gcnVsZSkKICAgICAgOiB5eXJ1bGUgKHJ1bGUpCiAgICAgICwgeXlz
dGF0ZSAoMCkKICAgICAgLCB5eW5leHQgKDApCiAgICAgICwgeXlsYSAoKQogICAgICAsIG1hZ2lj
XyAoTUFHSUMpCiAgICB7fQoKICAgIHNlbWFudGljX29wdGlvbiAoY29uc3Qgc2VtYW50aWNfb3B0
aW9uJiB0aGF0KQogICAgICA6IHl5cnVsZSAodGhhdC55eXJ1bGUpCiAgICAgICwgeXlzdGF0ZSAo
dGhhdC55eXN0YXRlKQogICAgICAsIHl5bmV4dCAodGhhdC55eW5leHQpCiAgICAgICwgeXlsYSAo
dGhhdC55eWxhKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7CiAgICAgIHRoYXQuY2hlY2tf
ICgpOwogICAgfQoKICAgIC8vIE5lZWRlZCBmb3IgdGhlIGFzc2lnbm1lbnQgaW4geXluZXdTZW1h
bnRpY09wdGlvbi4KICAgIHNlbWFudGljX29wdGlvbiYgb3BlcmF0b3I9IChjb25zdCBzZW1hbnRp
Y19vcHRpb24mIHRoYXQpCiAgICB7CiAgICAgIGNoZWNrXyAoKTsKICAgICAgdGhhdC5jaGVja18g
KCk7CiAgICAgIHl5cnVsZSA9IHRoYXQueXlydWxlOwogICAgICB5eXN0YXRlID0gdGhhdC55eXN0
YXRlOwogICAgICB5eW5leHQgPSB0aGF0Lnl5bmV4dDsKICAgICAgeXlsYSA9IHRoYXQueXlsYTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIC8vLyBPbmx5IGNhbGwgc3RhdGUoKSBhbmQg
c2V0U3RhdGUoKSBvbiBvYmplY3RzIGluIHl5aXRlbXMsIG5vdCB0ZW1wb3Jhcmllcy4KICAgIGds
cl9zdGF0ZSogc3RhdGUoKTsKICAgIGNvbnN0IGdscl9zdGF0ZSogc3RhdGUoKSBjb25zdDsKICAg
IHZvaWQgc2V0U3RhdGUoY29uc3QgZ2xyX3N0YXRlKiBzKTsKCiAgICBjb25zdCBzZW1hbnRpY19v
cHRpb24qIG5leHQgKCkgY29uc3QgWVlfQVRUUklCVVRFX1VOVVNFRDsKICAgIHNlbWFudGljX29w
dGlvbiogbmV4dCAoKTsKICAgIHZvaWQgc2V0TmV4dCAoY29uc3Qgc2VtYW50aWNfb3B0aW9uKiBz
KTsKCiAgICBzdGQ6OnB0cmRpZmZfdCBpbmRleEluIChjb25zdCBnbHJfc3RhY2tfaXRlbSogYXJy
YXkpIGNvbnN0IFlZX0FUVFJJQlVURV9VTlVTRUQ7CgogICAgLyoqIFRydWUgaWZmIFlZWTAgYW5k
IFlZWTEgcmVwcmVzZW50IGlkZW50aWNhbCBvcHRpb25zIGF0IHRoZSB0b3AgbGV2ZWwuCiAgICAg
KiAgVGhhdCBpcywgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgcnVsZSBhcHBsaWVkIHRvIFJIUyBz
eW1ib2xzCiAgICAgKiAgdGhhdCBwcm9kdWNlIHRoZSBzYW1lIHRlcm1pbmFsIHN5bWJvbHMuICAq
LwogICAgYm9vbAogICAgaXNJZGVudGljYWxUbyAoY29uc3Qgc2VtYW50aWNfb3B0aW9uJiB5eXkx
KSBjb25zdAogICAgewogICAgICBjaGVja18gKCk7CiAgICAgIHl5eTEuY2hlY2tfICgpOwogICAg
ICBpZiAodGhpcy0+eXlydWxlID09IHl5eTEueXlydWxlKQogICAgICAgIHsKICAgICAgICAgIGNv
bnN0IGdscl9zdGF0ZSAqeXlzMCwgKnl5czE7CiAgICAgICAgICBpbnQgeXluOwogICAgICAgICAg
Zm9yICh5eXMwID0gdGhpcy0+c3RhdGUoKSwKICAgICAgICAgICAgICAgeXlzMSA9IHl5eTEuc3Rh
dGUoKSwKICAgICAgICAgICAgICAgeXluID0geXlyaHNMZW5ndGggKHRoaXMtPnl5cnVsZSk7CiAg
ICAgICAgICAgICAgIHl5biA+IDA7CiAgICAgICAgICAgICAgIHl5czAgPSB5eXMwLT5wcmVkKCks
CiAgICAgICAgICAgICAgIHl5czEgPSB5eXMxLT5wcmVkKCksIHl5biAtPSAxKQogICAgICAgICAg
ICBpZiAoeXlzMC0+eXlwb3NuICE9IHl5czEtPnl5cG9zbikKICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqIEFzc3VtaW5nIGlkZW50aWNhbE9wdGlvbnMg
KFlZWTAsWVlZMSksIGRlc3RydWN0aXZlbHkgbWVyZ2UgdGhlCiAgICAgKiAgYWx0ZXJuYXRpdmUg
c2VtYW50aWMgdmFsdWVzIGZvciB0aGUgUkhTLXN5bWJvbHMgb2YgWVlZMSBhbmQgWVlZMC4gICov
CiAgICB2b2lkCiAgICBtZXJnZVdpdGggKHNlbWFudGljX29wdGlvbiYgeXl5MSkKICAgIHsKICAg
ICAgY2hlY2tfICgpOwogICAgICB5eXkxLmNoZWNrXyAoKTsKICAgICAgZ2xyX3N0YXRlICp5eXMw
ID0gdGhpcy0+c3RhdGUgKCk7CiAgICAgIGdscl9zdGF0ZSAqeXlzMSA9IHl5eTEuc3RhdGUgKCk7
CiAgICAgIGZvciAoaW50IHl5biA9IHl5cmhzTGVuZ3RoICh0aGlzLT55eXJ1bGUpOwogICAgICAg
ICAgIHl5biA+IDA7CiAgICAgICAgICAgeXluIC09IDEsIHl5czAgPSB5eXMwLT5wcmVkICgpLCB5
eXMxID0geXlzMS0+cHJlZCAoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoeXlzMCA9PSB5eXMx
KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGVsc2UgaWYgKHl5czAtPnl5cmVzb2x2ZWQp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB5eXMxLT55eXJlc29sdmVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICB5eXMxLT52YWx1ZSAoKSA9IHl5czAtPnZhbHVlICgpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmICh5eXMxLT55eXJlc29sdmVkKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgeXlzMC0+eXlyZXNvbHZlZCA9IHRydWU7CiAgICAgICAgICAgICAgeXlzMC0+dmFs
dWUgKCkgPSB5eXMxLT52YWx1ZSAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgc2VtYW50aWNfb3B0aW9uKiB5eXowcHJldiA9IFlZX05V
TExQVFI7CiAgICAgICAgICAgICAgc2VtYW50aWNfb3B0aW9uKiB5eXowID0geXlzMC0+Zmlyc3RW
YWwoKTsKICAgICAgICAgICAgICBzZW1hbnRpY19vcHRpb24qIHl5ejEgPSB5eXMxLT5maXJzdFZh
bCgpOwogICAgICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBpZiAoeXl6MSA9PSB5eXowIHx8IHl5ejEgPT0gWVlfTlVMTFBUUikKICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeXl6MCA9PSBZ
WV9OVUxMUFRSKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eXowcHJldiAhPSBZWV9OVUxMUFRSKQogICAgICAgICAgICAgICAgICAgICAgICB5eXowcHJl
di0+c2V0TmV4dCAoeXl6MSk7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgIHl5czAtPnNldEZpcnN0VmFsICh5eXoxKTsKICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoeXl6MCA8IHl5ejEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgc2VtYW50aWNfb3B0aW9uKiB5eXogPSB5eXowOwogICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5ejBwcmV2ICE9IFlZX05VTExQVFIpCiAgICAgICAgICAgICAgICAgICAgICAgIHl5ejBwcmV2
LT5zZXROZXh0KHl5ejEpOwogICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICB5eXMwLT5zZXRGaXJzdFZhbCh5eXoxKTsKICAgICAgICAgICAgICAgICAgICAg
IHl5ejEgPSB5eXoxLT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICB5eXowLT5zZXROZXh0
KHl5eik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB5eXowcHJldiA9
IHl5ejA7CiAgICAgICAgICAgICAgICAgIHl5ejAgPSB5eXowLT5uZXh0KCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgeXlzMS0+c2V0Rmlyc3RWYWwoeXlzMC0+Zmlyc3RWYWwoKSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgojaWYgWVlERUJVRwogICAgdm9pZCB5eXJl
cG9ydFRyZWUgKHNpemVfdCB5eWluZGVudCA9IDIpIGNvbnN0CiAgICB7CiAgICAgIGNoZWNrXyAo
KTsKICAgICAgaW50IHl5bnJocyA9IHl5cmhzTGVuZ3RoICh0aGlzLT55eXJ1bGUpOwogICAgICBj
b25zdCBnbHJfc3RhdGUqIHl5c3RhdGVzWzEgKyBZWU1BWFJIU107CiAgICAgIGdscl9zdGF0ZSB5
eWxlZnRtb3N0X3N0YXRlOwoKICAgICAgewogICAgICAgIGNvbnN0IGdscl9zdGF0ZSogeXlzID0g
dGhpcy0+c3RhdGUoKTsKICAgICAgICBmb3IgKGludCB5eWkgPSB5eW5yaHM7IDAgPCB5eWk7IHl5
aSAtPSAxKQogICAgICAgICAgewogICAgICAgICAgICB5eXN0YXRlc1t5eWldID0geXlzOwogICAg
ICAgICAgICB5eXMgPSB5eXMtPnByZWQoKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoeXlzID09
IFlZX05VTExQVFIpCiAgICAgICAgICB7CiAgICAgICAgICAgIHl5bGVmdG1vc3Rfc3RhdGUueXlw
b3NuID0gMDsKICAgICAgICAgICAgeXlzdGF0ZXNbMF0gPSAmeXlsZWZ0bW9zdF9zdGF0ZTsKICAg
ICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICB5eXN0YXRlc1swXSA9IHl5czsKICAgICAg
fQoKICAgICAgc3RkOjpzdHJpbmcgeXlsaHMgPSB5eTo6cGFyc2VyOjpzeW1ib2xfbmFtZSAoeXls
aHNOb250ZXJtICh0aGlzLT55eXJ1bGUpKTsKICAgICAgWVlBU1NFUlQodGhpcy0+c3RhdGUoKSk7
CiAgICAgIGlmICh0aGlzLT5zdGF0ZSgpLT55eXBvc24gPCB5eXN0YXRlc1swXS0+eXlwb3NuICsg
MSkKICAgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjpzdHJpbmcoeXlpbmRlbnQsICcgJykgPDwgeXls
aHMgPDwgIiAtPiA8UnVsZSAiCiAgICAgICAgICAgICAgICAgIDw8IHRoaXMtPnl5cnVsZSAtIDEg
PDwgIiwgZW1wdHk+XG4iOwogICAgICBlbHNlCiAgICAgICAgc3RkOjpjZXJyIDw8IHN0ZDo6c3Ry
aW5nKHl5aW5kZW50LCAnICcpIDw8IHl5bGhzIDw8ICIgLT4gPFJ1bGUgIgogICAgICAgICAgICAg
ICAgICA8PCB0aGlzLT55eXJ1bGUgLSAxIDw8ICIsIHRva2VucyAiCiAgICAgICAgICAgICAgICAg
IDw8IHl5c3RhdGVzWzBdLT55eXBvc24gKyAxIDw8ICIgLi4gIgogICAgICAgICAgICAgICAgICA8
PCB0aGlzLT5zdGF0ZSgpLT55eXBvc24gPDwgIj5cbiI7CiAgICAgIGZvciAoaW50IHl5aSA9IDE7
IHl5aSA8PSB5eW5yaHM7IHl5aSArPSAxKQogICAgICAgIHsKICAgICAgICAgIGlmICh5eXN0YXRl
c1t5eWldLT55eXJlc29sdmVkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcgeXlzeW0gPSB5eTo6cGFyc2VyOjpzeW1ib2xfbmFtZSAoeXlfYWNjZXNzaW5nX3N5bWJvbCAo
eXlzdGF0ZXNbeXlpXS0+eXlsclN0YXRlKSk7CiAgICAgICAgICAgICAgaWYgKHl5c3RhdGVzW3l5
aS0xXS0+eXlwb3NuKzEgPiB5eXN0YXRlc1t5eWldLT55eXBvc24pCiAgICAgICAgICAgICAgICBz
dGQ6OmNlcnIgPDwgc3RkOjpzdHJpbmcoeXlpbmRlbnQgKyAyLCAnICcpIDw8IHl5c3ltCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgIiA8ZW1wdHk+XG4iOwogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCBzdGQ6OnN0cmluZyh5eWluZGVudCArIDIsICcg
JykgPDwgeXlzeW0KICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIDx0b2tlbnMgIiA8PCB5
eXN0YXRlc1t5eWktMV0tPnl5cG9zbiArIDEKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAi
IC4uICIgPDwgeXlzdGF0ZXNbeXlpXS0+eXlwb3NuIDw8ICI+XG4iOwogICAgICAgICAgICB9CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIHl5c3RhdGVzW3l5aV0tPmZpcnN0VmFsICgpLT55eXJl
cG9ydFRyZWUgKHl5aW5kZW50KzIpOwogICAgICAgIH0KICAgIH0KI2VuZGlmCgogICAgLyoqIFJ1
bGUgbnVtYmVyIGZvciB0aGlzIHJlZHVjdGlvbiAqLwogICAgcnVsZV9udW0geXlydWxlOwoKICBw
cml2YXRlOgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdGF0aWMgY29uc3QgZ2xyX3N0
YWNrX2l0ZW0qIGFzSXRlbShjb25zdCBUKiBzdGF0ZSkKICAgIHsKICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2xyX3N0YWNrX2l0ZW0qPihzdGF0ZSk7CiAgICB9CiAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KICAgIHN0YXRpYyBnbHJfc3RhY2tfaXRlbSogYXNJdGVtKFQqIHN0
YXRlKQogICAgewogICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnbHJfc3RhY2tfaXRlbSo+
KHN0YXRlKTsKICAgIH0KICAgIC8qKiBUaGUgbGFzdCBSSFMgc3RhdGUgaW4gdGhlIGxpc3Qgb2Yg
c3RhdGVzIHRvIGJlIHJlZHVjZWQuICAqLwogICAgc3RkOjpwdHJkaWZmX3QgeXlzdGF0ZTsKICAg
IC8qKiBOZXh0IHNpYmxpbmcgaW4gY2hhaW4gb2Ygb3B0aW9ucy4gIFRvIGZhY2lsaXRhdGUgbWVy
Z2luZywKICAgICAqICBvcHRpb25zIGFyZSBjaGFpbmVkIGluIGRlY3JlYXNpbmcgb3JkZXIgYnkg
YWRkcmVzcy4gICovCiAgICBzdGQ6OnB0cmRpZmZfdCB5eW5leHQ7CgogIHB1YmxpYzoKICAgIC8q
KiBUaGUgbG9va2FoZWFkIGZvciB0aGlzIHJlZHVjdGlvbi4gICovCiAgICBzeW1ib2xfdHlwZSB5
eWxhOwoKCiAgcHVibGljOgogICAgLy8gQ2hlY2sgaW52YXJpYW50cy4KICAgIHZvaWQgY2hlY2tf
ICgpIGNvbnN0CiAgICB7CiAgICAgIFlZX0lHTk9SRV9OVUxMX0RFUkVGRVJFTkNFX0JFR0lOCiAg
ICAgIFlZQVNTRVJUICh0aGlzLT5tYWdpY18gPT0gTUFHSUMpOwogICAgICBZWV9JR05PUkVfTlVM
TF9ERVJFRkVSRU5DRV9FTkQKICAgIH0KCiAgICAvLyBBIG1hZ2ljIG51bWJlciB0byBjaGVjayBv
dXIgcG9pbnRlciBhcml0aG1ldGljIGlzIHNhbmUuCiAgICBlbnVtIHsgTUFHSUMgPSAweGVmZjFj
YWNlIH07CiAgICB1bnNpZ25lZCBpbnQgbWFnaWNfOwogIH07IC8vIGNsYXNzIHNlbWFudGljX29w
dGlvbgp9IC8vIG5hbWVzcGFjZQoKbmFtZXNwYWNlCnsKICAvKiogVHlwZSBvZiB0aGUgaXRlbXMg
aW4gdGhlIEdMUiBzdGFjay4KICAgKiAgSXQgY2FuIGJlIGVpdGhlciBhIGdscl9zdGF0ZSBvciBh
IHNlbWFudGljX29wdGlvbi4gVGhlIGlzX3N0YXRlXyBmaWVsZAogICAqICBpbmRpY2F0ZXMgd2hp
Y2ggaXRlbSBvZiB0aGUgdW5pb24gaXMgdmFsaWQuICAqLwogIGNsYXNzIGdscl9zdGFja19pdGVt
CiAgewogIHB1YmxpYzoKICAgIGdscl9zdGFja19pdGVtIChib29sIHN0YXRlID0gdHJ1ZSkKICAg
ICAgOiBpc19zdGF0ZV8gKHN0YXRlKQogICAgICAsIG1hZ2ljXyAoTUFHSUMpCiAgICB7CiAgICAg
IGlmIChpc19zdGF0ZV8pCiAgICAgICAgbmV3ICgmcmF3XykgZ2xyX3N0YXRlOwogICAgICBlbHNl
CiAgICAgICAgbmV3ICgmcmF3Xykgc2VtYW50aWNfb3B0aW9uOwogICAgfQoKICAgIGdscl9zdGFj
a19pdGVtIChjb25zdCBnbHJfc3RhY2tfaXRlbSYgb3RoZXIpIFlZX05PRVhDRVBUIFlZX05PVEhS
T1cKICAgICAgOiBpc19zdGF0ZV8gKG90aGVyLmlzX3N0YXRlXykKICAgICAgLCBtYWdpY18gKE1B
R0lDKQogICAgewogICAgICBvdGhlci5jaGVja18gKCk7CiAgICAgIHN0ZDo6bWVtY3B5IChyYXdf
LCBvdGhlci5yYXdfLCB1bmlvbl9zaXplKTsKICAgIH0KCiAgICBnbHJfc3RhY2tfaXRlbSYgb3Bl
cmF0b3I9IChnbHJfc3RhY2tfaXRlbSBvdGhlcikKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAg
ICBvdGhlci5jaGVja18gKCk7CiAgICAgIHN0ZDo6c3dhcCAoaXNfc3RhdGVfLCBvdGhlci5pc19z
dGF0ZV8pOwogICAgICBzdGQ6OnN3YXAgKHJhd18sIG90aGVyLnJhd18pOwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogICAgfmdscl9zdGFja19pdGVtICgpCiAgICB7CiAgICAgIGNoZWNrXyAo
KTsKICAgICAgaWYgKGlzX3N0YXRlICgpKQogICAgICAgIGdldFN0YXRlICgpLn5nbHJfc3RhdGUg
KCk7CiAgICAgIGVsc2UKICAgICAgICBnZXRPcHRpb24gKCkufnNlbWFudGljX29wdGlvbiAoKTsK
ICAgIH0KCiAgICB2b2lkIHNldFN0YXRlIChjb25zdCBnbHJfc3RhdGUgJnN0YXRlKQogICAgewog
ICAgICBjaGVja18gKCk7CiAgICAgIHN0YXRlLmNoZWNrXyAoKTsKICAgICAgaWYgKHRoaXMgIT0g
c3RhdGUuYXNJdGVtICgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChpc19zdGF0ZV8pCiAgICAg
ICAgICAgIGdldFN0YXRlICgpLn5nbHJfc3RhdGUgKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIGdldE9wdGlvbiAoKS5+c2VtYW50aWNfb3B0aW9uICgpOwogICAgICAgICAgbmV3ICgmcmF3
XykgZ2xyX3N0YXRlIChzdGF0ZSk7CiAgICAgICAgICBpc19zdGF0ZV8gPSB0cnVlOwogICAgICAg
IH0KICAgIH0KCiAgICBnbHJfc3RhdGUmIGdldFN0YXRlICgpCiAgICB7CiAgICAgIGNoZWNrXyAo
KTsKICAgICAgWVlEQVNTRVJUIChpc19zdGF0ZSAoKSk7CiAgICAgIHZvaWQgKnl5cCA9IHJhd187
CiAgICAgIGdscl9zdGF0ZSYgcmVzID0gKnN0YXRpY19jYXN0PGdscl9zdGF0ZSo+ICh5eXApOwog
ICAgICByZXMuY2hlY2tfICgpOwogICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIGNvbnN0IGds
cl9zdGF0ZSYgZ2V0U3RhdGUgKCkgY29uc3QKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAgICBZ
WURBU1NFUlQgKGlzX3N0YXRlICgpKTsKICAgICAgY29uc3Qgdm9pZCAqeXlwID0gcmF3XzsKICAg
ICAgY29uc3QgZ2xyX3N0YXRlJiByZXMgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgZ2xyX3N0YXRlKj4g
KHl5cCk7CiAgICAgIHJlcy5jaGVja18gKCk7CiAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAg
c2VtYW50aWNfb3B0aW9uJiBnZXRPcHRpb24gKCkKICAgIHsKICAgICAgY2hlY2tfICgpOwogICAg
ICBZWURBU1NFUlQgKCFpc19zdGF0ZSAoKSk7CiAgICAgIHZvaWQgKnl5cCA9IHJhd187CiAgICAg
IHJldHVybiAqc3RhdGljX2Nhc3Q8c2VtYW50aWNfb3B0aW9uKj4gKHl5cCk7CiAgICB9CiAgICBj
b25zdCBzZW1hbnRpY19vcHRpb24mIGdldE9wdGlvbiAoKSBjb25zdAogICAgewogICAgICBjaGVj
a18gKCk7CiAgICAgIFlZREFTU0VSVCAoIWlzX3N0YXRlICgpKTsKICAgICAgY29uc3Qgdm9pZCAq
eXlwID0gcmF3XzsKICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBzZW1hbnRpY19vcHRp
b24qPiAoeXlwKTsKICAgIH0KICAgIGJvb2wgaXNfc3RhdGUgKCkgY29uc3QKICAgIHsKICAgICAg
Y2hlY2tfICgpOwogICAgICByZXR1cm4gaXNfc3RhdGVfOwogICAgfQoKICBwcml2YXRlOgogICAg
Ly8vIFRoZSBwb3NzaWJsZSBjb250ZW50cyBvZiByYXdfLiBTaW5jZSB0aGV5IGhhdmUgY29uc3Ry
dWN0b3JzLCB0aGV5IGNhbm5vdAogICAgLy8vIGJlIGRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSB1
bmlvbi4KICAgIHVuaW9uIGNvbnRlbnRzCiAgICB7CiAgICAgIGNoYXIgeXlzdGF0ZVtzaXplb2Yg
KGdscl9zdGF0ZSldOwogICAgICBjaGFyIHl5b3B0aW9uW3NpemVvZiAoc2VtYW50aWNfb3B0aW9u
KV07CiAgICB9OwogICAgZW51bSB7IHVuaW9uX3NpemUgPSBzaXplb2YgKGNvbnRlbnRzKSB9Owog
ICAgdW5pb24gewogICAgICAvLy8gU3Ryb25nZXN0IGFsaWdubWVudCBjb25zdHJhaW50cy4KICAg
ICAgbG9uZyBkb3VibGUgeXlhbGlnbl9tZTsKICAgICAgLy8vIEEgYnVmZmVyIGxhcmdlIGVub3Vn
aCB0byBzdG9yZSB0aGUgY29udGVudHMuCiAgICAgIGNoYXIgcmF3X1t1bmlvbl9zaXplXTsKICAg
IH07CiAgICAvKiogVHlwZSB0YWcgZm9yIHRoZSB1bmlvbi4gKi8KICAgIGJvb2wgaXNfc3RhdGVf
OwoKICBwdWJsaWM6CiAgICAvLyBDaGVjayBpbnZhcmlhbnRzLgogICAgdm9pZCBjaGVja18gKCkg
Y29uc3QKICAgIHsKICAgICAgWVlBU1NFUlQgKHRoaXMtPm1hZ2ljXyA9PSBNQUdJQyk7CiAgICAg
IFlZQVNTRVJUICh0aGlzLT5pc19zdGF0ZV8gPT0gZmFsc2UgfHwgdGhpcy0+aXNfc3RhdGVfID09
IHRydWUpOwogICAgfQogICAgLy8gQSBtYWdpYyBudW1iZXIgdG8gY2hlY2sgb3VyIHBvaW50ZXIg
YXJpdGhtZXRpYyBpcyBzYW5lLgogICAgZW51bSB7IE1BR0lDID0gMHhERUFEMUFDQyB9OyAvLyAz
NzM1ODg2NTQwLgogICAgY29uc3QgdW5zaWduZWQgaW50IG1hZ2ljXzsKICB9OyAvLyBjbGFzcyBn
bHJfc3RhY2tfaXRlbQp9IC8vIG5hbWVzcGFjZQoKZ2xyX3N0YXRlKiBnbHJfc3RhdGU6OnByZWQg
KCkKewogIGNoZWNrXyAoKTsKICBZWV9JR05PUkVfTlVMTF9ERVJFRkVSRU5DRV9CRUdJTgogIHJl
dHVybiB5eXByZWQgPyAmYXNJdGVtIChhc19wb2ludGVyXyAodGhpcykgLSB5eXByZWQpLT5nZXRT
dGF0ZSAoKSA6IFlZX05VTExQVFI7CiAgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfRU5ECn0K
CmNvbnN0IGdscl9zdGF0ZSogZ2xyX3N0YXRlOjpwcmVkICgpIGNvbnN0CnsKICBjaGVja18gKCk7
CiAgWVlfSUdOT1JFX05VTExfREVSRUZFUkVOQ0VfQkVHSU4KICByZXR1cm4geXlwcmVkID8gJmFz
SXRlbSAoYXNfcG9pbnRlcl8gKHRoaXMpIC0geXlwcmVkKS0+Z2V0U3RhdGUgKCkgOiBZWV9OVUxM
UFRSOwogIFlZX0lHTk9SRV9OVUxMX0RFUkVGRVJFTkNFX0VORAp9Cgp2b2lkIGdscl9zdGF0ZTo6
c2V0UHJlZCAoY29uc3QgZ2xyX3N0YXRlKiBzdGF0ZSkKewogIGNoZWNrXyAoKTsKICBpZiAoc3Rh
dGUpCiAgICBzdGF0ZS0+Y2hlY2tfICgpOwogIHl5cHJlZCA9IHN0YXRlID8gYXNfcG9pbnRlcl8g
KHRoaXMpIC0gYXNfcG9pbnRlcl8gKHN0YXRlKSA6IDA7Cn0KCnNlbWFudGljX29wdGlvbiogZ2xy
X3N0YXRlOjpmaXJzdFZhbCAoKQp7CiAgY2hlY2tfICgpOwogIHJldHVybiB5eWZpcnN0VmFsID8g
Jihhc0l0ZW0odGhpcykgLSB5eWZpcnN0VmFsKS0+Z2V0T3B0aW9uKCkgOiBZWV9OVUxMUFRSOwp9
Cgpjb25zdCBzZW1hbnRpY19vcHRpb24qIGdscl9zdGF0ZTo6Zmlyc3RWYWwgKCkgY29uc3QKewog
IGNoZWNrXyAoKTsKICByZXR1cm4geXlmaXJzdFZhbCA/ICYoYXNJdGVtKHRoaXMpIC0geXlmaXJz
dFZhbCktPmdldE9wdGlvbigpIDogWVlfTlVMTFBUUjsKfQoKdm9pZCBnbHJfc3RhdGU6OnNldEZp
cnN0VmFsIChjb25zdCBzZW1hbnRpY19vcHRpb24qIG9wdGlvbikKewogIGNoZWNrXyAoKTsKICB5
eWZpcnN0VmFsID0gb3B0aW9uID8gYXNJdGVtKHRoaXMpIC0gYXNJdGVtKG9wdGlvbikgOiAwOwp9
CgpzdGQ6OnB0cmRpZmZfdCBnbHJfc3RhdGU6OmluZGV4SW4gKGNvbnN0IGdscl9zdGFja19pdGVt
KiBhcnJheSkgY29uc3QKewogIGNoZWNrXyAoKTsKICByZXR1cm4gYXNJdGVtKHRoaXMpIC0gYXJy
YXk7Cn0KCnN0ZDo6cHRyZGlmZl90IHNlbWFudGljX29wdGlvbjo6aW5kZXhJbiAoY29uc3QgZ2xy
X3N0YWNrX2l0ZW0qIGFycmF5KSBjb25zdAp7CiAgcmV0dXJuIGFzSXRlbSh0aGlzKSAtIGFycmF5
Owp9CgpnbHJfc3RhdGUqIHNlbWFudGljX29wdGlvbjo6c3RhdGUgKCkKewogIFlZX0lHTk9SRV9O
VUxMX0RFUkVGRVJFTkNFX0JFR0lOCiAgcmV0dXJuIHl5c3RhdGUgPyAmKGFzSXRlbSh0aGlzKSAt
IHl5c3RhdGUpLT5nZXRTdGF0ZSgpIDogWVlfTlVMTFBUUjsKICBZWV9JR05PUkVfTlVMTF9ERVJF
RkVSRU5DRV9FTkQKfQoKY29uc3QgZ2xyX3N0YXRlKiBzZW1hbnRpY19vcHRpb246OnN0YXRlICgp
IGNvbnN0CnsKICByZXR1cm4geXlzdGF0ZSA/ICYoYXNJdGVtKHRoaXMpIC0geXlzdGF0ZSktPmdl
dFN0YXRlKCkgOiBZWV9OVUxMUFRSOwp9Cgp2b2lkIHNlbWFudGljX29wdGlvbjo6c2V0U3RhdGUg
KGNvbnN0IGdscl9zdGF0ZSogcykKewogIHl5c3RhdGUgPSBzID8gYXNJdGVtKHRoaXMpIC0gYXNJ
dGVtKHMpIDogMDsKfQoKY29uc3Qgc2VtYW50aWNfb3B0aW9uKiBzZW1hbnRpY19vcHRpb246Om5l
eHQgKCkgY29uc3QKewogIHJldHVybiB5eW5leHQgPyAmKGFzSXRlbSh0aGlzKSAtIHl5bmV4dCkt
PmdldE9wdGlvbigpIDogWVlfTlVMTFBUUjsKfQoKc2VtYW50aWNfb3B0aW9uKiBzZW1hbnRpY19v
cHRpb246Om5leHQgKCkKewogIHJldHVybiB5eW5leHQgPyAmKGFzSXRlbSh0aGlzKSAtIHl5bmV4
dCktPmdldE9wdGlvbigpIDogWVlfTlVMTFBUUjsKfQoKdm9pZCBzZW1hbnRpY19vcHRpb246OnNl
dE5leHQgKGNvbnN0IHNlbWFudGljX29wdGlvbiogcykKewogIHl5bmV4dCA9IHMgPyBhc0l0ZW0o
dGhpcykgLSBhc0l0ZW0ocykgOiAwOwp9Cgp2b2lkIGdscl9zdGF0ZTo6ZGVzdHJveSAoY2hhciBj
b25zdCogeXltc2csIHl5OjpwYXJzZXImIHl5cGFyc2VyKQp7CiAgY2hlY2tfICgpOwogIGlmICh5
eXJlc29sdmVkKQogICAgeXlwYXJzZXIueXlfZGVzdHJveV8gKHl5bXNnLCB5eV9hY2Nlc3Npbmdf
c3ltYm9sKHl5bHJTdGF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKCkpOwog
IGVsc2UKICAgIHsKI2lmIFlZREVCVUcKICAgICAgWVlDREVCVUcgPDwgeXltc2cKICAgICAgICAg
ICAgICAgPDwgKGZpcnN0VmFsKCkgPyAiIHVucmVzb2x2ZWQgIiA6ICIgaW5jb21wbGV0ZSAiKQog
ICAgICAgICAgICAgICA8PCAoeXlfYWNjZXNzaW5nX3N5bWJvbCAoeXlsclN0YXRlKSA8IFlZTlRP
S0VOUyA/ICJ0b2tlbiIgOiAibnRlcm0iKQogICAgICAgICAgICAgICA8PCAnICcgPDwgeXlwYXJz
ZXIuc3ltYm9sX25hbWUgKHl5X2FjY2Vzc2luZ19zeW1ib2wgKHl5bHJTdGF0ZSkpCiAgICAgICAg
ICAgICAgIDw8ICIgKCIKICAgICAgICAgICAgICAgPDwgIilcbiI7CiNlbmRpZgogICAgICBpZiAo
Zmlyc3RWYWwoKSAhPSBZWV9OVUxMUFRSKQogICAgICAgIHsKICAgICAgICAgIHNlbWFudGljX29w
dGlvbiYgeXlvcHRpb24gPSAqZmlyc3RWYWwgKCk7CiAgICAgICAgICBnbHJfc3RhdGUgKnl5cmgg
PSB5eW9wdGlvbi5zdGF0ZSAoKTsKICAgICAgICAgIGZvciAoaW50IHl5biA9IHl5cmhzTGVuZ3Ro
ICh5eW9wdGlvbi55eXJ1bGUpOyB5eW4gPiAwOyB5eW4gLT0gMSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIHl5cmgtPmRlc3Ryb3kgKHl5bXNnLCB5eXBhcnNlcik7CiAgICAgICAgICAgICAg
eXlyaCA9IHl5cmgtPnByZWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCiN1
bmRlZiBZWUZJTEwKI2RlZmluZSBZWUZJTEwoTikgeXlmaWxsICh5eXZzcCwgeXlsb3csIChOKSwg
eXlub3JtYWwpCgpuYW1lc3BhY2UKewogIGNsYXNzIHN0YXRlX3N0YWNrCiAgewogIHB1YmxpYzoK
ICAgIHVzaW5nIHBhcnNlcl90eXBlID0geXk6OnBhcnNlcjsKICAgIHVzaW5nIHN5bWJvbF9raW5k
ID0gcGFyc2VyX3R5cGU6OnN5bWJvbF9raW5kOwogICAgdXNpbmcgdmFsdWVfdHlwZSA9IHBhcnNl
cl90eXBlOjp2YWx1ZV90eXBlOwoKICAgIC8qKiBJbml0aWFsaXplIHRvIGEgc2luZ2xlIGVtcHR5
IHN0YWNrLCB3aXRoIHRvdGFsIG1heGltdW0KICAgICAqICBjYXBhY2l0eSBmb3IgYWxsIHN0YWNr
cyBvZiBZWVNJWkUuICAqLwogICAgc3RhdGVfc3RhY2sgKHNpemVfdCB5eXNpemUpCiAgICAgIDog
eXlzcGxpdFBvaW50IChZWV9OVUxMUFRSKQogICAgewogICAgICB5eWl0ZW1zLnJlc2VydmUgKHl5
c2l6ZSk7CiAgICB9CgojaWYgWVlTVEFDS0VYUEFOREFCTEUKICAgIC8qKiBSZXR1cm5zIGZhbHNl
IGlmIGl0IHRyaWVkIHRvIGV4cGFuZCBidXQgY291bGQgbm90LiAqLwogICAgYm9vbAogICAgeXll
eHBhbmRHTFJTdGFja0lmTmVlZGVkICgpCiAgICB7CiAgICAgIHJldHVybiBZWUhFQURST09NIDw9
IHNwYWNlTGVmdCAoKSB8fCB5eWV4cGFuZEdMUlN0YWNrICgpOwogICAgfQoKICBwcml2YXRlOgog
ICAgLyoqIElmICp0aGlzIGlzIGV4cGFuZGFibGUsIGV4dGVuZCBpdC4gIFdBUk5JTkc6IFBvaW50
ZXJzIGludG8gdGhlCiAgICAgICAgc3RhY2sgZnJvbSBvdXRzaWRlIHNob3VsZCBiZSBjb25zaWRl
cmVkIGludmFsaWQgYWZ0ZXIgdGhpcyBjYWxsLgogICAgICAgIFdlIGFsd2F5cyBleHBhbmQgd2hl
biB0aGVyZSBhcmUgMSBvciBmZXdlciBpdGVtcyBsZWZ0IEFGVEVSIGFuCiAgICAgICAgYWxsb2Nh
dGlvbiwgc28gdGhhdCB3ZSBjYW4gYXZvaWQgaGF2aW5nIGV4dGVybmFsIHBvaW50ZXJzIGV4aXN0
CiAgICAgICAgYWNyb3NzIGFuIGFsbG9jYXRpb24uICAqLwogICAgYm9vbAogICAgeXlleHBhbmRH
TFJTdGFjayAoKQogICAgewogICAgICBjb25zdCBzaXplX3Qgb2xkc2l6ZSA9IHl5aXRlbXMuc2l6
ZSgpOwogICAgICBpZiAoWVlNQVhERVBUSCAtIFlZSEVBRFJPT00gPCBvbGRzaXplKQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgY29uc3Qgc2l6ZV90IHl5bmV3U2l6ZSA9IFlZTUFYREVQVEgg
PCAyICogb2xkc2l6ZSA/IFlZTUFYREVQVEggOiAyICogb2xkc2l6ZTsKICAgICAgY29uc3QgZ2xy
X3N0YWNrX2l0ZW0gKm9sZGJhc2UgPSAmeXlpdGVtc1swXTsKCiAgICAgIHl5aXRlbXMucmVzZXJ2
ZSAoeXluZXdTaXplKTsKICAgICAgY29uc3QgZ2xyX3N0YWNrX2l0ZW0gKm5ld2Jhc2UgPSAmeXlp
dGVtc1swXTsKCiAgICAgIC8vIEFkanVzdCB0aGUgcG9pbnRlcnMuICBQZXJmb3JtIHJhdyBwb2lu
dGVyIGFyaXRobWV0aWMsIGFzIHRoZXJlCiAgICAgIC8vIGlzIG5vIHJlYXNvbiBmb3Igb2JqZWN0
cyB0byBiZSBhbGlnbmVkIG9uIHRoZWlyIHNpemUuCiAgICAgIGNvbnN0IHB0cmRpZmZfdCBkaXNw
CiAgICAgICAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiAobmV3YmFzZSkgLSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPiAob2xkYmFzZSk7CiAgICAgIGlmICh5eXNwbGl0UG9p
bnQpCiAgICAgICAgY29uc3RfY2FzdDxnbHJfc3RhdGUqJj4gKHl5c3BsaXRQb2ludCkKICAgICAg
ICAgID0gcmVpbnRlcnByZXRfY2FzdDxnbHJfc3RhdGUqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4gKGNvbnN0X2Nhc3Q8Z2xyX3N0YXRlKj4gKHl5c3BsaXRQb2ludCkpICsgZGlzcCk7CgogICAg
ICBmb3IgKHN0ZDo6dmVjdG9yPGdscl9zdGF0ZSo+OjppdGVyYXRvcgogICAgICAgICAgICAgaSA9
IHl5dG9wcy5iZWdpbiAoKSwKICAgICAgICAgICAgIHl5ZW5kID0geXl0b3BzLmVuZCAoKTsKICAg
ICAgICAgICBpICE9IHl5ZW5kOyArK2kpCiAgICAgICAgaWYgKGdscl9zdGF0ZV9ub3RfbnVsbCAo
KmkpKQogICAgICAgICAgKmkgPSByZWludGVycHJldF9jYXN0PGdscl9zdGF0ZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KCppKSArIGRpc3ApOwoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cgog
IHB1YmxpYzoKI2Vsc2UKICAgIGJvb2wgeXlleHBhbmRHTFJTdGFja0lmTmVlZGVkICgpCiAgICB7
CiAgICAgIHJldHVybiBZWUhFQURST09NIDw9IHNwYWNlTGVmdCAoKTsKICAgIH0KI2VuZGlmCiN1
bmRlZiBZWVNUQUNLRVhQQU5EQUJMRQoKICAgIHN0YXRpYyBib29sIGdscl9zdGF0ZV9ub3RfbnVs
bCAoZ2xyX3N0YXRlKiBzKQogICAgewogICAgICByZXR1cm4gcyAhPSBZWV9OVUxMUFRSOwogICAg
fQoKICAgIGJvb2wKICAgIHJlZHVjZVRvT25lU3RhY2sgKCkKICAgIHsKICAgICAgdXNpbmcgaXRl
cmF0b3IgPSBzdGQ6OnZlY3RvcjxnbHJfc3RhdGUqPjo6aXRlcmF0b3I7CiAgICAgIGNvbnN0IGl0
ZXJhdG9yIHl5YmVnaW4gPSB5eXRvcHMuYmVnaW4oKTsKICAgICAgY29uc3QgaXRlcmF0b3IgeXll
bmQgPSB5eXRvcHMuZW5kKCk7CiAgICAgIGNvbnN0IGl0ZXJhdG9yIHl5aXQgPSBzdGQ6OmZpbmRf
aWYoeXliZWdpbiwgeXllbmQsIGdscl9zdGF0ZV9ub3RfbnVsbCk7CiAgICAgIGlmICh5eWl0ID09
IHl5ZW5kKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXgg
eXlrID0gY3JlYXRlX3N0YXRlX3NldF9pbmRleCh5eWl0ICsgMSAtIHl5YmVnaW4pOwogICAgICAg
ICAgIHl5ay51Z2V0KCkgIT0gbnVtVG9wcygpOyArK3l5aykKICAgICAgICB5eXRvcHMueXltYXJr
U3RhY2tEZWxldGVkICh5eWspOwogICAgICB5eXRvcHMueXlyZW1vdmVEZWxldGVzICgpOwogICAg
ICB5eWNvbXByZXNzU3RhY2sgKCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKiBD
YWxsZWQgd2hlbiByZXR1cm5pbmcgdG8gZGV0ZXJtaW5pc3RpYyBvcGVyYXRpb24gdG8gY2xlYW4g
dXAgdGhlIGV4dHJhCiAgICAgKiBzdGFja3MuICovCiAgICB2b2lkCiAgICB5eWNvbXByZXNzU3Rh
Y2sgKCkKICAgIHsKICAgICAgaWYgKHl5dG9wcy5zaXplKCkgIT0gMSB8fCAhaXNTcGxpdCgpKQog
ICAgICAgIHJldHVybjsKCiAgICAgIC8vIHl5ciBpcyB0aGUgc3RhdGUgYWZ0ZXIgdGhlIHNwbGl0
IHBvaW50LgogICAgICBnbHJfc3RhdGUqIHl5ciA9IFlZX05VTExQVFI7CiAgICAgIGZvciAoZ2xy
X3N0YXRlICp5eXAgPSBmaXJzdFRvcCgpLCAqeXlxID0geXlwLT5wcmVkKCk7CiAgICAgICAgICAg
eXlwICE9IHl5c3BsaXRQb2ludDsKICAgICAgICAgICB5eXIgPSB5eXAsIHl5cCA9IHl5cSwgeXlx
ID0geXlwLT5wcmVkKCkpCiAgICAgICAgeXlwLT5zZXRQcmVkKHl5cik7CgogICAgICAvLyBUaGlz
IGNvbnN0X2Nhc3QgaXMgb2theSwgc2luY2UgYW55d2F5IHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBt
dXRhYmxlCiAgICAgIC8vIHl5aXRlbXMgaW50byB3aGljaCB5eXNwbGl0UG9pbnQgcG9pbnRzLgog
ICAgICBnbHJfc3RhY2tfaXRlbSogbmV4dEZyZWVJdGVtCiAgICAgICAgPSBjb25zdF9jYXN0PGds
cl9zdGF0ZSo+ICh5eXNwbGl0UG9pbnQpLT5hc0l0ZW0gKCkgKyAxOwogICAgICB5eXNwbGl0UG9p
bnQgPSBZWV9OVUxMUFRSOwogICAgICB5eXRvcHMuY2xlYXJMYXN0RGVsZXRlZCAoKTsKCiAgICAg
IHdoaWxlICh5eXIgIT0gWVlfTlVMTFBUUikKICAgICAgICB7CiAgICAgICAgICBuZXh0RnJlZUl0
ZW0tPnNldFN0YXRlICgqeXlyKTsKICAgICAgICAgIGdscl9zdGF0ZSYgbmV4dEZyZWVTdGF0ZSA9
IG5leHRGcmVlSXRlbS0+Z2V0U3RhdGUoKTsKICAgICAgICAgIHl5ciA9IHl5ci0+cHJlZCgpOwog
ICAgICAgICAgbmV4dEZyZWVTdGF0ZS5zZXRQcmVkKCYobmV4dEZyZWVJdGVtIC0gMSktPmdldFN0
YXRlKCkpOwogICAgICAgICAgc2V0Rmlyc3RUb3AgKCZuZXh0RnJlZVN0YXRlKTsKICAgICAgICAg
ICsrbmV4dEZyZWVJdGVtOwogICAgICAgIH0KICAgICAgeXlpdGVtcy5yZXNpemUoc3RhdGljX2Nh
c3Q8c2l6ZV90PihuZXh0RnJlZUl0ZW0gLSB5eWl0ZW1zLmRhdGEoKSkpOwogICAgfQoKICAgIGJv
b2wgaXNTcGxpdCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHl5c3BsaXRQb2ludCAhPSBZWV9OVUxM
UFRSOwogICAgfQoKICAgIC8vIFByZXNlbnQgdGhlIGludGVyZmFjZSBvZiBhIHZlY3RvciBvZiBn
bHJfc3RhY2tfaXRlbS4KICAgIHN0ZDo6dmVjdG9yPGdscl9zdGFja19pdGVtPjo6Y29uc3RfaXRl
cmF0b3IgYmVnaW4gKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5aXRlbXMuYmVnaW4gKCk7
CiAgICB9CgogICAgc3RkOjp2ZWN0b3I8Z2xyX3N0YWNrX2l0ZW0+Ojpjb25zdF9pdGVyYXRvciBl
bmQgKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5aXRlbXMuZW5kICgpOwogICAgfQoKICAg
IHNpemVfdCBzaXplKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5aXRlbXMuc2l6ZSAoKTsK
ICAgIH0KCiAgICBnbHJfc3RhY2tfaXRlbSYgb3BlcmF0b3JbXSAoc2l6ZV90IGkpCiAgICB7CiAg
ICAgIHJldHVybiB5eWl0ZW1zW2ldOwogICAgfQoKICAgIGdscl9zdGFja19pdGVtJiBzdGFja0l0
ZW1BdCAoc2l6ZV90IGluZGV4KQogICAgewogICAgICByZXR1cm4geXlpdGVtc1tpbmRleF07CiAg
ICB9CgogICAgc2l6ZV90IG51bVRvcHMgKCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHl5dG9w
cy5zaXplICgpOwogICAgfQoKICAgIGdscl9zdGF0ZSogZmlyc3RUb3AgKCkgY29uc3QKICAgIHsK
ICAgICAgcmV0dXJuIHl5dG9wc1tjcmVhdGVfc3RhdGVfc2V0X2luZGV4ICgwKV07CiAgICB9Cgog
ICAgZ2xyX3N0YXRlKiB0b3BBdCAoc3RhdGVfc2V0X2luZGV4IGkpIGNvbnN0CiAgICB7CiAgICAg
IHJldHVybiB5eXRvcHNbaV07CiAgICB9CgogICAgdm9pZCBzZXRGaXJzdFRvcCAoZ2xyX3N0YXRl
KiB2YWx1ZSkKICAgIHsKICAgICAgeXl0b3BzW2NyZWF0ZV9zdGF0ZV9zZXRfaW5kZXggKDApXSA9
IHZhbHVlOwogICAgfQoKICAgIHZvaWQgc2V0VG9wQXQgKHN0YXRlX3NldF9pbmRleCBpLCBnbHJf
c3RhdGUqIHZhbHVlKQogICAgewogICAgICB5eXRvcHNbaV0gPSB2YWx1ZTsKICAgIH0KCiAgICB2
b2lkIHBvcF9iYWNrICgpCiAgICB7CiAgICAgIHl5aXRlbXMucG9wX2JhY2sgKCk7CiAgICB9Cgog
ICAgdm9pZCBwb3BfYmFjayAoc2l6ZV90IG4pCiAgICB7CiAgICAgIHl5aXRlbXMucmVzaXplICh5
eWl0ZW1zLnNpemUgKCkgLSBuKTsKICAgIH0KCiAgICBzdGF0ZV9zZXRfaW5kZXgKICAgIHl5c3Bs
aXRTdGFjayAoc3RhdGVfc2V0X2luZGV4IHl5aykKICAgIHsKICAgICAgaWYgKCFpc1NwbGl0ICgp
KQogICAgICAgIHsKICAgICAgICAgIFlZQVNTRVJUICh5eWsuZ2V0ICgpID09IDApOwogICAgICAg
ICAgeXlzcGxpdFBvaW50ID0gdG9wQXQgKHl5ayk7CiAgICAgICAgfQogICAgICByZXR1cm4geXl0
b3BzLnl5c3BsaXRTdGFjayAoeXlrKTsKICAgIH0KCiAgICAvKiogQXNzdW1pbmcgdGhhdCBZWVMg
aXMgYSBHTFJTdGF0ZSBzb21ld2hlcmUgb24gKnRoaXMsIHVwZGF0ZSB0aGUKICAgICAqICBzcGxp
dHBvaW50IG9mICp0aGlzLCBpZiBuZWVkZWQsIHNvIHRoYXQgaXQgaXMgYXQgbGVhc3QgYXMgZGVl
cCBhcwogICAgICogIFlZUy4gICovCiAgICB2b2lkCiAgICB5eXVwZGF0ZVNwbGl0IChnbHJfc3Rh
dGUmIHl5cykKICAgIHsKICAgICAgaWYgKGlzU3BsaXQoKSAmJiAmeXlzIDwgeXlzcGxpdFBvaW50
KQogICAgICAgIHl5c3BsaXRQb2ludCA9ICZ5eXM7CiAgICB9CgogICAgLyoqIFJldHVybiBhIGZy
ZXNoIEdMUlN0YXRlLgogICAgICogQ2FsbGVycyBzaG91bGQgY2FsbCB5eXJlc2VydmVTdGFjayBh
ZnRlcndhcmRzIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcwogICAgICogc3VmZmljaWVudCBoZWFkcm9v
bS4gICovCiAgICBnbHJfc3RhdGUmIHl5bmV3R0xSU3RhdGUgKGNvbnN0IGdscl9zdGF0ZSYgbmV3
U3RhdGUpCiAgICB7CiAgICAgIGdscl9zdGF0ZSYgc3RhdGUgPSB5eWl0ZW1zW3l5bmV3R0xSU3Rh
Y2tJdGVtICh0cnVlKV0uZ2V0U3RhdGUgKCk7CiNpZiBmYWxzZSAmJiAyMDExMDNMIDw9IFlZX0NQ
TFVTUExVUwogICAgICBzdGF0ZSA9IHN0ZDo6bW92ZSAobmV3U3RhdGUpOwojZWxzZQogICAgICBz
dGF0ZSA9IG5ld1N0YXRlOwojZW5kaWYKICAgICAgcmV0dXJuIHN0YXRlOwogICAgfQoKICAgIC8q
KiBSZXR1cm4gYSBmcmVzaCBTZW1hbnRpY09wdGlvbi4KICAgICAqIENhbGxlcnMgc2hvdWxkIGNh
bGwgeXlyZXNlcnZlU3RhY2sgYWZ0ZXJ3YXJkcyB0byBtYWtlIHN1cmUgdGhlcmUgaXMKICAgICAq
IHN1ZmZpY2llbnQgaGVhZHJvb20uICAqLwogICAgc2VtYW50aWNfb3B0aW9uJiB5eW5ld1NlbWFu
dGljT3B0aW9uIChzZW1hbnRpY19vcHRpb24gbmV3T3B0aW9uKQogICAgewogICAgICBzZW1hbnRp
Y19vcHRpb24mIG9wdGlvbiA9IHl5aXRlbXNbeXluZXdHTFJTdGFja0l0ZW0gKGZhbHNlKV0uZ2V0
T3B0aW9uICgpOwogICAgICBvcHRpb24gPSBzdGQ6Om1vdmUgKG5ld09wdGlvbik7CiAgICAgIHJl
dHVybiBvcHRpb247CiAgICB9CgogICAgLyogRG8gbm90aGluZyBpZiBZWU5PUk1BTCBvciBpZiAq
WVlMT1cgPD0gWVlMT1cxLiAgT3RoZXJ3aXNlLCBmaWxsIGluCiAgICAgKiBZWVZTUFtZWUxPVzEg
Li4gKllZTE9XLTFdIGFzIGluIHl5ZmlsbGluIGFuZCBzZXQgKllZTE9XID0gWVlMT1cxLgogICAg
ICogRm9yIGNvbnZlbmllbmNlLCBhbHdheXMgcmV0dXJuIFlZTE9XMS4gICovCiAgICBpbnQKICAg
IHl5ZmlsbCAoZ2xyX3N0YWNrX2l0ZW0gKnl5dnNwLCBpbnQgJnl5bG93LCBpbnQgeXlsb3cxLCBi
b29sIHl5bm9ybWFsKQogICAgewogICAgICBpZiAoIXl5bm9ybWFsICYmIHl5bG93MSA8IHl5bG93
KQogICAgICAgIHsKICAgICAgICAgIHl5ZmlsbGluICh5eXZzcCwgeXlsb3csIHl5bG93MSk7CiAg
ICAgICAgICB5eWxvdyA9IHl5bG93MTsKICAgICAgICB9CiAgICAgIHJldHVybiB5eWxvdzE7CiAg
ICB9CgogICAgLyoqIEZpbGwgaW4gWVlWU1BbWVlMT1cxIC4uIFlZTE9XMC0xXSBmcm9tIHRoZSBj
aGFpbiBvZiBzdGF0ZXMgc3RhcnRpbmcKICAgICAqICBhdCBZWVZTUFtZWUxPVzBdLmdldFN0YXRl
KCkucHJlZCgpLiAgTGVhdmVzIFlZVlNQW1lZTE9XMV0uZ2V0U3RhdGUoKS5wcmVkKCkKICAgICAq
ICBjb250YWluaW5nIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHN0YXRlIGluIHRoZSBjaGFpbi4g
ICovCiAgICB2b2lkCiAgICB5eWZpbGxpbiAoZ2xyX3N0YWNrX2l0ZW0gKnl5dnNwLCBpbnQgeXls
b3cwLCBpbnQgeXlsb3cxKQogICAgewogICAgICBnbHJfc3RhdGUqIHMgPSB5eXZzcFt5eWxvdzBd
LmdldFN0YXRlKCkucHJlZCgpOwogICAgICBZWUFTU0VSVChzICE9IFlZX05VTExQVFIpOwogICAg
ICBmb3IgKGludCBpID0geXlsb3cwLTE7IGkgPj0geXlsb3cxOyBpIC09IDEsIHMgPSBzLT5wcmVk
KCkpCiAgICAgICAgewogICAgICAgICAgZ2xyX3N0YXRlJiB5eXMgPSB5eXZzcFtpXS5nZXRTdGF0
ZSgpOwojaWYgWVlERUJVRwogICAgICAgICAgeXlzLnl5bHJTdGF0ZSA9IHMtPnl5bHJTdGF0ZTsK
I2VuZGlmCiAgICAgICAgICB5eXMueXlyZXNvbHZlZCA9IHMtPnl5cmVzb2x2ZWQ7CiAgICAgICAg
ICBpZiAocy0+eXlyZXNvbHZlZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5ldyAoJnl5
cy52YWx1ZSAoKSkgdmFsdWVfdHlwZSAocy0+dmFsdWUgKCkpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIC8qIFRoZSBlZmZlY3Qgb2YgdXNpbmcgeXl2YWwgb3IgeXls
b2MgKGluIGFuIGltbWVkaWF0ZQogICAgICAgICAgICAgKiBydWxlKSBpcyB1bmRlZmluZWQuICAq
LwogICAgICAgICAgICB5eXMuc2V0Rmlyc3RWYWwgKFlZX05VTExQVFIpOwogICAgICAgICAgeXlz
LnNldFByZWQocy0+cHJlZCgpKTsKICAgICAgICB9CiAgICB9CgojaWYgWVlERUJVRwoKICAgIC8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KICAgIHwgUmVwb3J0IHRoYXQgc3RhY2sgI1lZSyBvZiAqWVlTVEFDS1Ag
aXMgZ29pbmcgdG8gYmUgcmVkdWNlZCBieSBZWVJVTEUuIHwKICAgIGAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
CiAgICB2b2lkCiAgICB5eV9yZWR1Y2VfcHJpbnQgKGJvb2wgeXlub3JtYWwsIGdscl9zdGFja19p
dGVtKiB5eXZzcCwgc3RhdGVfc2V0X2luZGV4IHl5aywKICAgICAgICAgICAgICAgICAgICAgcnVs
ZV9udW0geXlydWxlLCBwYXJzZXJfdHlwZSYgeXlwYXJzZXIpCiAgICB7CiAgICAgIGludCB5eW5y
aHMgPSB5eXJoc0xlbmd0aCAoeXlydWxlKTsKICAgICAgaW50IHl5aTsKICAgICAgc3RkOjpjZXJy
IDw8ICJSZWR1Y2luZyBzdGFjayAiIDw8IHl5ay5nZXQoKSA8PCAiIGJ5IHJ1bGUgIiA8PCB5eXJ1
bGUgLSAxCiAgICAgICAgICAgICAgICA8PCAiIChsaW5lICIgPDwgaW50ICh5eXJsaW5lW3l5cnVs
ZV0pIDw8ICIpOlxuIjsKICAgICAgaWYgKCEgeXlub3JtYWwpCiAgICAgICAgeXlmaWxsaW4gKHl5
dnNwLCAxLCAteXlucmhzKTsKICAgICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICov
CiAgICAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICAgICB7CiAgICAg
ICAgICBzdGQ6OmNlcnIgPDwgIiAgICQiIDw8IHl5aSArIDEgPDwgIiA9ICI7CiAgICAgICAgICB5
eXBhcnNlci55eV9zeW1ib2xfcHJpbnRfCiAgICAgICAgICAgICh5eV9hY2Nlc3Npbmdfc3ltYm9s
ICh5eXZzcFt5eWkgLSB5eW5yaHMgKyAxXS5nZXRTdGF0ZSgpLnl5bHJTdGF0ZSksCiAgICAgICAg
ICAgICB5eXZzcFt5eWkgLSB5eW5yaHMgKyAxXS5nZXRTdGF0ZSgpLnZhbHVlICgpKTsKICAgICAg
ICAgIGlmICgheXl2c3BbeXlpIC0geXlucmhzICsgMV0uZ2V0U3RhdGUoKS55eXJlc29sdmVkKQog
ICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAodW5yZXNvbHZlZCkiOwogICAgICAgICAgc3RkOjpj
ZXJyIDw8ICdcbic7CiAgICAgICAgfQogICAgfQoKCiNkZWZpbmUgWVlJTkRFWChZWVgpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAoKFlZWCkgPT0gWVlfTlVMTFBUUiA/IC0xIDogKFlZWCktPmluZGV4SW4gKHl5aXRlbXMuZGF0
YSAoKSkpCgogICAgdm9pZAogICAgZHVtcFN0YWNrICgpIGNvbnN0CiAgICB7CiAgICAgIGZvciAo
c2l6ZV90IHl5aSA9IDA7IHl5aSA8IHNpemUoKTsgKyt5eWkpCiAgICAgICAgewogICAgICAgICAg
Y29uc3QgZ2xyX3N0YWNrX2l0ZW0mIGl0ZW0gPSB5eWl0ZW1zW3l5aV07CiAgICAgICAgICBzdGQ6
OmNlcnIgPDwgc3RkOjpzZXR3KDMpIDw8IHl5aSA8PCAiLiAiOwogICAgICAgICAgaWYgKGl0ZW0u
aXNfc3RhdGUoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiUmVz
OiAiIDw8IGl0ZW0uZ2V0U3RhdGUoKS55eXJlc29sdmVkCiAgICAgICAgICAgICAgICAgICAgICAg
IDw8ICIsIExSIFN0YXRlOiAiIDw8IGl0ZW0uZ2V0U3RhdGUoKS55eWxyU3RhdGUKICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgIiwgcG9zbjogIiA8PCBpdGVtLmdldFN0YXRlKCkueXlwb3NuCiAg
ICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIHByZWQ6ICIgPDwgWVlJTkRFWChpdGVtLmdldFN0
YXRlKCkucHJlZCgpKTsKICAgICAgICAgICAgICBpZiAoISBpdGVtLmdldFN0YXRlKCkueXlyZXNv
bHZlZCkKICAgICAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiLCBmaXJzdFZhbDogIgogICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8IFlZSU5ERVgoaXRlbS5nZXRTdGF0ZSgpLmZpcnN0VmFsKCkp
OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBzdGQ6OmNlcnIgPDwgIk9wdGlvbi4gcnVsZTogIiA8PCBpdGVtLmdldE9wdGlvbigpLnl5cnVs
ZSAtIDEKICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiwgc3RhdGU6ICIgPDwgWVlJTkRFWChp
dGVtLmdldE9wdGlvbigpLnN0YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIG5l
eHQ6ICIgPDwgWVlJTkRFWChpdGVtLmdldE9wdGlvbigpLm5leHQoKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIHN0ZDo6Y2VyciA8PCAnXG4nOwogICAgICAgIH0KICAgICAgc3RkOjpjZXJyIDw8
ICJUb3BzOiI7CiAgICAgIGZvciAoc3RhdGVfc2V0X2luZGV4IHl5aSA9IGNyZWF0ZV9zdGF0ZV9z
ZXRfaW5kZXgoMCk7IHl5aS51Z2V0KCkgPCBudW1Ub3BzKCk7ICsreXlpKSB7CiAgICAgICAgc3Rk
OjpjZXJyIDw8IHl5aS5nZXQoKSA8PCAiOiAiIDw8IFlZSU5ERVgodG9wQXQoeXlpKSkgPDwgIjsg
IjsKICAgICAgfQogICAgICBzdGQ6OmNlcnIgPDwgJ1xuJzsKICAgIH0KCiN1bmRlZiBZWUlOREVY
CiNlbmRpZgoKICAgIFlZUkVTVUxUVEFHCiAgICB5eXJlcG9ydEFtYmlndWl0eSAoY29uc3Qgc2Vt
YW50aWNfb3B0aW9uJiB5eXgwLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbWFudGlj
X29wdGlvbiYgeXl4MSwgcGFyc2VyX3R5cGUmIHl5cGFyc2VyKQogICAgewogICAgICBZWV9VU0Ug
KHl5eDApOwogICAgICBZWV9VU0UgKHl5eDEpOwoKI2lmIFlZREVCVUcKICAgICAgc3RkOjpjZXJy
IDw8ICJBbWJpZ3VpdHkgZGV0ZWN0ZWQuXG4iCiAgICAgICAgIk9wdGlvbiAxLFxuIjsKICAgICAg
eXl4MC55eXJlcG9ydFRyZWUgKCk7CiAgICAgIHN0ZDo6Y2VyciA8PCAiXG5PcHRpb24gMixcbiI7
CiAgICAgIHl5eDEueXlyZXBvcnRUcmVlICgpOwogICAgICBzdGQ6OmNlcnIgPDwgJ1xuJzsKI2Vu
ZGlmCgogICAgICB5eXBhcnNlci5lcnJvciAoWVlfKCJzeW50YXggaXMgYW1iaWd1b3VzIikpOwog
ICAgICByZXR1cm4geXlhYm9ydDsKICAgIH0KCiNpZiBZWURFQlVHCiAgICAvKiBQcmludCBZWVMg
KHBvc3NpYmx5IE5VTEwpIGFuZCBpdHMgcHJlZGVjZXNzb3JzLiAqLwogICAgdm9pZAogICAgeXlw
c3RhdGVzIChjb25zdCBnbHJfc3RhdGUqIHl5cykgY29uc3QKICAgIHsKICAgICAgaWYgKHl5cyAh
PSBZWV9OVUxMUFRSKQogICAgICAgIHl5cy0+eXlfeXlwc3RhY2soKTsKICAgICAgZWxzZQogICAg
ICAgIHN0ZDo6Y2VyciA8PCAiPG51bGw+IjsKICAgICAgc3RkOjpjZXJyIDw8ICdcbic7CiAgICB9
CiNlbmRpZgoKICBwcml2YXRlOgogICAgc2l6ZV90IHNwYWNlTGVmdCgpIGNvbnN0CiAgICB7CiAg
ICAgIHJldHVybiB5eWl0ZW1zLmNhcGFjaXR5KCkgLSB5eWl0ZW1zLnNpemUoKTsKICAgIH0KCiAg
ICAvKiogUmV0dXJuIGEgZnJlc2ggR0xSU3RhY2tJdGVtIGluIHRoaXMuICBUaGUgaXRlbSBpcyBh
biBMUiBzdGF0ZQogICAgICogIGlmIFlZSVNfU1RBVEUsIGFuZCBvdGhlcndpc2UgYSBzZW1hbnRp
YyBvcHRpb24uICBDYWxsZXJzIHNob3VsZCBjYWxsCiAgICAgKiAgeXlyZXNlcnZlU3RhY2sgYWZ0
ZXJ3YXJkcyB0byBtYWtlIHN1cmUgdGhlcmUgaXMgc3VmZmljaWVudAogICAgICogIGhlYWRyb29t
LiAgKi8KICAgIHNpemVfdAogICAgeXluZXdHTFJTdGFja0l0ZW0gKGJvb2wgeXlpc19zdGF0ZSkK
ICAgIHsKICAgICAgWVlEQVNTRVJUKHl5aXRlbXMuc2l6ZSgpIDwgeXlpdGVtcy5jYXBhY2l0eSgp
KTsKICAgICAgeXlpdGVtcy5wdXNoX2JhY2soZ2xyX3N0YWNrX2l0ZW0oeXlpc19zdGF0ZSkpOwog
ICAgICByZXR1cm4geXlpdGVtcy5zaXplKCkgLSAxOwogICAgfQoKCiAgcHVibGljOgogICAgc3Rk
Ojp2ZWN0b3I8Z2xyX3N0YWNrX2l0ZW0+IHl5aXRlbXM7CiAgICAvLyBXaGVyZSB0aGUgc3RhY2sg
c3BsaXRzLiBBbnl0aGluZyBiZWxvdyB0aGlzIGFkZHJlc3MgaXMgZGV0ZXJtaW5pc3RpYy4KICAg
IGNvbnN0IGdscl9zdGF0ZSogeXlzcGxpdFBvaW50OwogICAgZ2xyX3N0YXRlX3NldCB5eXRvcHM7
CiAgfTsgLy8gY2xhc3Mgc3RhdGVfc3RhY2sKfSAvLyBuYW1lc3BhY2UKCiN1bmRlZiBZWUZJTEwK
I2RlZmluZSBZWUZJTEwoTikgeXlzdGF0ZVN0YWNrLnl5ZmlsbCAoeXl2c3AsIHl5bG93LCAoTiks
IHl5bm9ybWFsKQoKbmFtZXNwYWNlIHl5CnsKICBjbGFzcyBwYXJzZXI6Omdscl9zdGFjawogIHsK
ICBwdWJsaWM6CgoKICAgIGdscl9zdGFjayAoc2l6ZV90IHl5c2l6ZSwgcGFyc2VyX3R5cGUmIHl5
cGFyc2VyX3l5YXJnKQogICAgICA6IHl5ZXJyU3RhdGUgKDApCiAgICAgICwgeXlzdGF0ZVN0YWNr
ICh5eXNpemUpCiAgICAgICwgeXllcnJjbnQgKDApCiAgICAgICwgeXlsYSAoKQogICAgICAsIHl5
cGFyc2VyICh5eXBhcnNlcl95eWFyZykKICAgIHt9CgogICAgfmdscl9zdGFjayAoKQogICAgewog
ICAgICBpZiAoIXRoaXMtPnl5bGEuZW1wdHkgKCkpCiAgICAgICAgeXlwYXJzZXIueXlfZGVzdHJv
eV8gKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMtPnl5bGEua2luZCAoKSwgdGhpcy0+eXlsYS52YWx1ZSk7CiAgICAgIHBv
cGFsbF8gKCk7CiAgICB9CgogICAgaW50IHl5ZXJyU3RhdGU7CgogICAgc3RhdGVfc3RhY2sgeXlz
dGF0ZVN0YWNrOwogICAgaW50IHl5ZXJyY250OwogICAgc3ltYm9sX3R5cGUgeXlsYTsKICAgIFlZ
Sk1QX0JVRiB5eWV4Y2VwdGlvbl9idWZmZXI7CiAgICBwYXJzZXJfdHlwZSYgeXlwYXJzZXI7Cgog
ICNkZWZpbmUgWVlDSEsxKFlZRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBzd2l0
Y2ggKFlZRSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICBjYXNlIHl5b2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICBjYXNlIHl5YWJvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGdvdG8geXlhYm9ydGxhYjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICBjYXNlIHl5YWNjZXB0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgIGdvdG8geXlhY2NlcHRsYWI7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBjYXNlIHl5
ZXJyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgIGdvdG8geXl1c2VyX2Vycm9yOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBkZWZhdWx0OiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgIGdvdG8geXlidWdsYWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfSB3
aGlsZSAoZmFsc2UpCgogICAgaW50CiAgICBwYXJzZSAoKQogICAgewogICAgICBpbnQgeXlyZXN1
bHQ7CiAgICAgIHNpemVfdCB5eXBvc247CgogICAgICBZWUNERUJVRyA8PCAiU3RhcnRpbmcgcGFy
c2VcbiI7CgogICAgICB0aGlzLT55eWxhLmNsZWFyICgpOwoKICAgICAgc3dpdGNoIChZWVNFVEpN
UCAodGhpcy0+eXlleGNlcHRpb25fYnVmZmVyKSkKICAgICAgICB7CiAgICAgICAgY2FzZSAwOiBi
cmVhazsKICAgICAgICBjYXNlIDE6IGdvdG8geXlhYm9ydGxhYjsKICAgICAgICBjYXNlIDI6IGdv
dG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICAgZGVmYXVsdDogZ290byB5eWJ1Z2xhYjsKICAgICAg
ICB9CiAgICAgIHRoaXMtPnl5Z2xyU2hpZnQgKGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXgoMCksIDAs
IDAsIHRoaXMtPnl5bGEudmFsdWUpOwogICAgICB5eXBvc24gPSAwOwoKICAgICAgd2hpbGUgKHRy
dWUpCiAgICAgICAgewogICAgICAgICAgLyogRm9yIGVmZmljaWVuY3ksIHdlIGhhdmUgdHdvIGxv
b3BzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMKICAgICAgICAgICAgIHNwZWNpYWxpemVkIHRvIGRl
dGVybWluaXN0aWMgb3BlcmF0aW9uIChzaW5nbGUgc3RhY2ssIG5vCiAgICAgICAgICAgICBwb3Rl
bnRpYWwgYW1iaWd1aXR5KS4gICovCiAgICAgICAgICAvKiBTdGFuZGFyZCBtb2RlICovCiAgICAg
ICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0YXRl
X251bSB5eXN0YXRlID0gdGhpcy0+Zmlyc3RUb3BTdGF0ZSgpLT55eWxyU3RhdGU7CiAgICAgICAg
ICAgICAgWVlDREVCVUcgPDwgIkVudGVyaW5nIHN0YXRlICIgPDwgeXlzdGF0ZSA8PCAnXG4nOwog
ICAgICAgICAgICAgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCiAgICAgICAgICAgICAgICBnb3Rv
IHl5YWNjZXB0bGFiOwogICAgICAgICAgICAgIGlmICh5eV9pc19kZWZhdWx0ZWRfc3RhdGUgKHl5
c3RhdGUpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBydWxlX251
bSB5eXJ1bGUgPSB5eV9kZWZhdWx0X2FjdGlvbiAoeXlzdGF0ZSk7CiAgICAgICAgICAgICAgICAg
IGlmICh5eXJ1bGUgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLT55eXJlcG9ydFN5bnRheEVycm9yICgpOwogICAgICAgICAgICAgICAgICAgICAg
Z290byB5eXVzZXJfZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICBZWUNISzEgKHRoaXMtPnl5Z2xyUmVkdWNlIChjcmVhdGVfc3RhdGVfc2V0X2luZGV4KDApLCB5
eXJ1bGUsIHRydWUpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHl5Z2V0X3Rva2VuICgpOwogICAgICAgICAg
ICAgICAgICBjb25zdCBzaG9ydCogeXljb25mbGljdHM7CiAgICAgICAgICAgICAgICAgIGNvbnN0
IGludCB5eWFjdGlvbiA9IHl5Z2V0TFJBY3Rpb25zICh5eXN0YXRlLCB0aGlzLT55eWxhLmtpbmQg
KCksIHl5Y29uZmxpY3RzKTsKICAgICAgICAgICAgICAgICAgaWYgKCp5eWNvbmZsaWN0cyAhPSAw
KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBpZiAoeXlfaXNf
c2hpZnRfYWN0aW9uICh5eWFjdGlvbikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB0aGlzLT55eWxhLmtpbmQg
KCksIHRoaXMtPnl5bGEudmFsdWUsIHRoaXMtPnl5bGEubG9jYXRpb24pOwogICAgICAgICAgICAg
ICAgICAgICAgeXlwb3NuICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIG1vdmUgeXlsdmFsLgogICAgICAgICAgICAgICAgICAgICAgdGhpcy0+eXlnbHJTaGlm
dCAoY3JlYXRlX3N0YXRlX3NldF9pbmRleCgwKSwgeXlhY3Rpb24sIHl5cG9zbiwgdGhpcy0+eXls
YS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICB5eWxhLmNsZWFyICgpOwogICAgICAgICAg
ICAgICAgICAgICAgaWYgKDAgPCB0aGlzLT55eWVyclN0YXRlKQogICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLT55eWVyclN0YXRlIC09IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICBlbHNlIGlmICh5eV9pc19lcnJvcl9hY3Rpb24gKHl5YWN0aW9uKSkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBpc3N1ZSBhbiBl
cnJvciBtZXNzYWdlIGFnYWluIGZvciBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvd24gZnJvbSB0aGUgc2Nhbm5lci4gICovCiAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy0+eXlsYS5raW5kICgpICE9IHN5bWJvbF9raW5kOjpTX1lZZXJyb3IpCiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMtPnl5cmVwb3J0U3ludGF4RXJyb3IgKCk7CiAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIHl5dXNlcl9lcnJvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBZWUNISzEgKHRoaXMtPnl5Z2xyUmVk
dWNlIChjcmVhdGVfc3RhdGVfc2V0X2luZGV4KDApLCAteXlhY3Rpb24sIHRydWUpKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlzID0gY3JlYXRlX3N0
YXRlX3NldF9pbmRleCgwKTsgeXlzLnVnZXQoKSA8IHRoaXMtPnl5c3RhdGVTdGFjay5udW1Ub3Bz
KCk7ICsreXlzKQogICAgICAgICAgICAgICAgdGhpcy0+eXlzdGF0ZVN0YWNrLnl5dG9wcy5zZXRM
b29rYWhlYWROZWVkcyh5eXMsICF0aGlzLT55eWxhLmVtcHR5ICgpKTsKCiAgICAgICAgICAgICAg
LyogeXlwcm9jZXNzT25lU3RhY2sgcmV0dXJucyBvbmUgb2YgdGhyZWUgdGhpbmdzOgoKICAgICAg
ICAgICAgICAgICAgLSBBbiBlcnJvciBmbGFnLiAgSWYgdGhlIGNhbGxlciBpcyB5eXByb2Nlc3NP
bmVTdGFjaywgaXQKICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSByZXR1cm5zIGFzIHdl
bGwuICBXaGVuIHRoZSBjYWxsZXIgaXMgZmluYWxseQogICAgICAgICAgICAgICAgICAgIHl5cGFy
c2UsIGl0IGp1bXBzIHRvIGFuIGVycm9yIGxhYmVsIHZpYSBZWUNISzEuCgogICAgICAgICAgICAg
ICAgICAtIHl5b2ssIGJ1dCB5eXByb2Nlc3NPbmVTdGFjayBoYXMgaW52b2tlZCB5eW1hcmtTdGFj
a0RlbGV0ZWQKICAgICAgICAgICAgICAgICAgICAoeXlzKSwgd2hpY2ggc2V0cyB0aGUgdG9wIHN0
YXRlIG9mIHl5cyB0byBOVUxMLiAgVGh1cywKICAgICAgICAgICAgICAgICAgICB5eXBhcnNlJ3Mg
Zm9sbG93aW5nIGludm9jYXRpb24gb2YgeXlyZW1vdmVEZWxldGVzIHdpbGwgcmVtb3ZlCiAgICAg
ICAgICAgICAgICAgICAgdGhlIHN0YWNrLgoKICAgICAgICAgICAgICAgICAgLSB5eW9rLCB3aGVu
IHJlYWR5IHRvIHNoaWZ0IGEgdG9rZW4uCgogICAgICAgICAgICAgICAgIEV4Y2VwdCBpbiB0aGUg
Zmlyc3QgY2FzZSwgeXlwYXJzZSB3aWxsIGludm9rZSB5eXJlbW92ZURlbGV0ZXMgYW5kCiAgICAg
ICAgICAgICAgICAgdGhlbiBzaGlmdCB0aGUgbmV4dCB0b2tlbiBvbnRvIGFsbCByZW1haW5pbmcg
c3RhY2tzLiAgVGhpcwogICAgICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgc2hp
ZnQgKHRoYXQgaXMsIGFmdGVyIGFsbCBwcmVjZWRpbmcKICAgICAgICAgICAgICAgICByZWR1Y3Rp
b25zIG9uIGFsbCBzdGFja3MpIGhlbHBzIHByZXZlbnQgZG91YmxlIGRlc3RydWN0b3IgY2FsbHMK
ICAgICAgICAgICAgICAgICBvbiB5eWx2YWwgaW4gdGhlIGV2ZW50IG9mIG1lbW9yeSBleGhhdXN0
aW9uLiAgKi8KCiAgICAgICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlzID0gY3JlYXRl
X3N0YXRlX3NldF9pbmRleCAoMCk7IHl5cy51Z2V0ICgpIDwgdGhpcy0+eXlzdGF0ZVN0YWNrLm51
bVRvcHMgKCk7ICsreXlzKQogICAgICAgICAgICAgICAgWVlDSEsxICh0aGlzLT55eXByb2Nlc3NP
bmVTdGFjayAoeXlzLCB5eXBvc24pKTsKICAgICAgICAgICAgICB0aGlzLT55eXN0YXRlU3RhY2su
eXl0b3BzLnl5cmVtb3ZlRGVsZXRlcyAoKTsKICAgICAgICAgICAgICBpZiAodGhpcy0+eXlzdGF0
ZVN0YWNrLnl5dG9wcy5zaXplKCkgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgdGhpcy0+eXlzdGF0ZVN0YWNrLnl5dG9wcy55eXVuZGVsZXRlTGFzdFN0YWNrICgpOwog
ICAgICAgICAgICAgICAgICBpZiAodGhpcy0+eXlzdGF0ZVN0YWNrLnl5dG9wcy5zaXplKCkgPT0g
MCkKICAgICAgICAgICAgICAgICAgICB0aGlzLT55eUZhaWwgKFlZXygic3ludGF4IGVycm9yIikp
OwogICAgICAgICAgICAgICAgICBZWUNISzEgKHRoaXMtPnl5cmVzb2x2ZVN0YWNrICgpKTsKICAg
ICAgICAgICAgICAgICAgWVlDREVCVUcgPDwgIlJldHVybmluZyB0byBkZXRlcm1pbmlzdGljIG9w
ZXJhdGlvbi5cbiI7CiAgICAgICAgICAgICAgICAgIHRoaXMtPnl5cmVwb3J0U3ludGF4RXJyb3Ig
KCk7CiAgICAgICAgICAgICAgICAgIGdvdG8geXl1c2VyX2Vycm9yOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAvKiBJZiBhbnkgeXlnbHJTaGlmdCBjYWxsIGZhaWxzLCBpdCB3aWxs
IGZhaWwgYWZ0ZXIgc2hpZnRpbmcuICBUaHVzLAogICAgICAgICAgICAgICAgIGEgY29weSBvZiB5
eWx2YWwgd2lsbCBhbHJlYWR5IGJlIG9uIHN0YWNrIDAgaW4gdGhlIGV2ZW50IG9mIGEKICAgICAg
ICAgICAgICAgICBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgbG9vcC4gIFRodXMsIHl5bGEgaXMg
ZW1wdGllZAogICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgbG9vcCB0byBtYWtlIHN1cmUgdGhl
IHVzZXIgZGVzdHJ1Y3RvciBmb3IgeXlsdmFsIGlzbid0CiAgICAgICAgICAgICAgICAgY2FsbGVk
IHR3aWNlLiAgKi8KICAgICAgICAgICAgICBzeW1ib2xfa2luZF90eXBlIHl5dG9rZW5fdG9fc2hp
ZnQgPSB0aGlzLT55eWxhLmtpbmQgKCk7CiAgICAgICAgICAgICAgdGhpcy0+eXlsYS5raW5kXyA9
IHN5bWJvbF9raW5kOjpTX1lZRU1QVFk7CiAgICAgICAgICAgICAgeXlwb3NuICs9IDE7CiAgICAg
ICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlzID0gY3JlYXRlX3N0YXRlX3NldF9pbmRl
eCAoMCk7IHl5cy51Z2V0ICgpIDwgdGhpcy0+eXlzdGF0ZVN0YWNrLm51bVRvcHMgKCk7ICsreXlz
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZV9udW0geXlz
dGF0ZSA9IHRoaXMtPnRvcFN0YXRlICh5eXMpLT55eWxyU3RhdGU7CiAgICAgICAgICAgICAgICAg
IGNvbnN0IHNob3J0KiB5eWNvbmZsaWN0czsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHl5
YWN0aW9uID0geXlnZXRMUkFjdGlvbnMgKHl5c3RhdGUsIHl5dG9rZW5fdG9fc2hpZnQsIHl5Y29u
ZmxpY3RzKTsKICAgICAgICAgICAgICAgICAgLyogTm90ZSB0aGF0IHl5Y29uZmxpY3RzIHdlcmUg
aGFuZGxlZCBieSB5eXByb2Nlc3NPbmVTdGFjay4gICovCiAgICAgICAgICAgICAgICAgIFlZQ0RF
QlVHIDw8ICJPbiBzdGFjayAiIDw8IHl5cy5nZXQoKSA8PCAiLCAiOwogICAgICAgICAgICAgICAg
ICBZWV9TWU1CT0xfUFJJTlQgKCJzaGlmdGluZyIsIHl5dG9rZW5fdG9fc2hpZnQsIHRoaXMtPnl5
bGEudmFsdWUsIHRoaXMtPnl5bGEubG9jYXRpb24pOwogICAgICAgICAgICAgICAgICB0aGlzLT55
eWdsclNoaWZ0ICh5eXMsIHl5YWN0aW9uLCB5eXBvc24sIHRoaXMtPnl5bGEudmFsdWUpOwogICAg
ICAgICAgICAgICAgICBZWUNERUJVRyA8PCAiU3RhY2sgIiA8PCB5eXMuZ2V0KCkgPDwgIiBub3cg
aW4gc3RhdGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB0aGlzLT50b3BTdGF0ZSh5
eXMpLT55eWxyU3RhdGUgPDwgJ1xuJzsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAg
IGlmICh0aGlzLT55eXN0YXRlU3RhY2sueXl0b3BzLnNpemUgKCkgPT0gMSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgWVlDSEsxICh0aGlzLT55eXJlc29sdmVTdGFjayAoKSk7
CiAgICAgICAgICAgICAgICAgIFlZQ0RFQlVHIDw8ICJSZXR1cm5pbmcgdG8gZGV0ZXJtaW5pc3Rp
YyBvcGVyYXRpb24uXG4iOwogICAgICAgICAgICAgICAgICB0aGlzLT55eXN0YXRlU3RhY2sueXlj
b21wcmVzc1N0YWNrICgpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgY29udGludWU7CiAgICAgICAgeXl1c2VyX2Vycm9y
OgogICAgICAgICAgdGhpcy0+eXlyZWNvdmVyU3ludGF4RXJyb3IgKCk7CiAgICAgICAgICB5eXBv
c24gPSB0aGlzLT5maXJzdFRvcFN0YXRlKCktPnl5cG9zbjsKICAgICAgICB9CgogICAgeXlhY2Nl
cHRsYWI6CiAgICAgIHl5cmVzdWx0ID0gMDsKICAgICAgZ290byB5eXJldHVybjsKCiAgICB5eWJ1
Z2xhYjoKICAgICAgWVlBU1NFUlQgKGZhbHNlKTsKICAgICAgZ290byB5eWFib3J0bGFiOwoKICAg
IHl5YWJvcnRsYWI6CiAgICAgIHl5cmVzdWx0ID0gMTsKICAgICAgZ290byB5eXJldHVybjsKCiAg
ICB5eWV4aGF1c3RlZGxhYjoKICAgICAgeXlwYXJzZXIuZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1
c3RlZCIpKTsKICAgICAgeXlyZXN1bHQgPSAyOwogICAgICBnb3RvIHl5cmV0dXJuOwoKICAgIHl5
cmV0dXJuOgogICAgICByZXR1cm4geXlyZXN1bHQ7CiAgICB9CiAgI3VuZGVmIFlZQ0hLMQoKICAg
IHZvaWQgeXlyZXNlcnZlR2xyU3RhY2sgKCkKICAgIHsKICAgICAgaWYgKCF5eXN0YXRlU3RhY2su
eXlleHBhbmRHTFJTdGFja0lmTmVlZGVkICgpKQogICAgICAgIHl5TWVtb3J5RXhoYXVzdGVkICgp
OwogICAgfQoKICAgIF9Ob3JldHVybiB2b2lkCiAgICB5eU1lbW9yeUV4aGF1c3RlZCAoKQogICAg
ewogICAgICBZWUxPTkdKTVAgKHl5ZXhjZXB0aW9uX2J1ZmZlciwgMik7CiAgICB9CgogICAgX05v
cmV0dXJuIHZvaWQKICAgIHl5RmFpbCAoY29uc3QgY2hhciogeXltc2cpCiAgICB7CiAgICAgIGlm
ICh5eW1zZyAhPSBZWV9OVUxMUFRSKQogICAgICAgIHl5cGFyc2VyLmVycm9yICh5eW1zZyk7CiAg
ICAgIFlZTE9OR0pNUCAoeXlleGNlcHRpb25fYnVmZmVyLCAxKTsKICAgIH0KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBHTFJTdGF0ZXMgKi8KCgogICAgLyoqIEFkZCBhIG5l
dyBzZW1hbnRpYyBhY3Rpb24gdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIGFjdGlvbiBmb3IgcnVsZQog
ICAgICogIFlZUlVMRSBvbiB0aGUgc2VtYW50aWMgdmFsdWVzIGluIFlZUkhTIHRvIHRoZSBsaXN0
IG9mCiAgICAgKiAgYWx0ZXJuYXRpdmUgYWN0aW9ucyBmb3IgWVlTVEFURS4gIEFzc3VtZXMgdGhh
dCBZWVJIUyBjb21lcyBmcm9tCiAgICAgKiAgc3RhY2sgI1lZSyBvZiAqdGhpcy4gKi8KICAgIHZv
aWQKICAgIHl5YWRkRGVmZXJyZWRBY3Rpb24gKHN0YXRlX3NldF9pbmRleCB5eWssIGdscl9zdGF0
ZSogeXlzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGdscl9zdGF0ZSogeXlyaHMsIHJ1
bGVfbnVtIHl5cnVsZSkKICAgIHsKICAgICAgc2VtYW50aWNfb3B0aW9uJiB5eW9wdCA9IHl5c3Rh
dGVTdGFjay55eW5ld1NlbWFudGljT3B0aW9uIChzZW1hbnRpY19vcHRpb24gKHl5cnVsZSkpOwog
ICAgICB5eW9wdC5zZXRTdGF0ZSAoeXlyaHMpOwogICAgICB5eW9wdC5zZXROZXh0ICh5eXN0YXRl
LT5maXJzdFZhbCAoKSk7CiAgICAgIGlmICh5eXN0YXRlU3RhY2sueXl0b3BzLmxvb2thaGVhZE5l
ZWRzICh5eWspKQogICAgICAgIHl5b3B0Lnl5bGEgPSB0aGlzLT55eWxhOwogICAgICB5eXN0YXRl
LT5zZXRGaXJzdFZhbCAoJnl5b3B0KTsKCiAgICAgIHl5cmVzZXJ2ZUdsclN0YWNrICgpOwogICAg
fQoKICAjaWYgWVlERUJVRwogICAgdm9pZCB5eXBkdW1wc3RhY2sgKCkgY29uc3QKICAgIHsKICAg
ICAgeXlzdGF0ZVN0YWNrLmR1bXBTdGFjaygpOwogICAgfQogICNlbmRpZgoKICAgIHZvaWQKICAg
IHl5cmVwb3J0U3ludGF4RXJyb3IgKCkKICAgIHsKICAgICAgaWYgKHl5ZXJyU3RhdGUgIT0gMCkK
ICAgICAgICByZXR1cm47CgogICAgICBzdGQ6OnN0cmluZyBtc2cgPSBZWV8oInN5bnRheCBlcnJv
ciIpOwogICAgICB5eXBhcnNlci5lcnJvciAoWVlfTU9WRSAobXNnKSk7CiAgICAgIHl5ZXJyY250
ICs9IDE7CiAgICB9CgogICAgLyogUmVjb3ZlciBmcm9tIGEgc3ludGF4IGVycm9yIG9uIHRoaXMs
IGFzc3VtaW5nIHRoYXQgeXl0b2tlbiwKICAgICAgIHl5bHZhbCwgYW5kIHl5bGxvYyBhcmUgdGhl
IHN5bnRhY3RpYyBjYXRlZ29yeSwgc2VtYW50aWMgdmFsdWUsIGFuZCBsb2NhdGlvbgogICAgICAg
b2YgdGhlIGxvb2thaGVhZC4gICovCiAgICB2b2lkCiAgICB5eXJlY292ZXJTeW50YXhFcnJvciAo
KQogICAgewogICAgICBpZiAoeXllcnJTdGF0ZSA9PSAzKQogICAgICAgIC8qIFdlIGp1c3Qgc2hp
ZnRlZCB0aGUgZXJyb3IgdG9rZW4gYW5kIChwZXJoYXBzKSB0b29rIHNvbWUKICAgICAgICAgICBy
ZWR1Y3Rpb25zLiAgU2tpcCB0b2tlbnMgdW50aWwgd2UgY2FuIHByb2NlZWQuICAqLwogICAgICAg
IHdoaWxlICh0cnVlKQogICAgICAgICAgewogICAgICAgICAgICBpZiAodGhpcy0+eXlsYS5raW5k
ICgpID09IHN5bWJvbF9raW5kOjpTX1lZRU9GKQogICAgICAgICAgICAgIHl5RmFpbCAoWVlfTlVM
TFBUUik7CiAgICAgICAgICAgIGlmICh0aGlzLT55eWxhLmtpbmQgKCkgIT0gc3ltYm9sX2tpbmQ6
OlNfWVlFTVBUWSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB5eXBhcnNlci55eV9k
ZXN0cm95XyAoIkVycm9yOiBkaXNjYXJkaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLT55eWxhLmtpbmQgKCksIHRoaXMtPnl5bGEudmFsdWUpOwogICAgICAg
ICAgICAgICAgdGhpcy0+eXlsYS5raW5kXyA9IHN5bWJvbF9raW5kOjpTX1lZRU1QVFk7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB5eWdldF90b2tlbiAoKTsKICAgICAgICAgICAgaW50IHl5
aiA9IHl5cGFjdFtmaXJzdFRvcFN0YXRlKCktPnl5bHJTdGF0ZV07CiAgICAgICAgICAgIGlmICh5
eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXlqKSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgIHl5aiArPSB0aGlzLT55eWxhLmtpbmQgKCk7CiAgICAgICAgICAgIGlmICh5eWogPCAw
IHx8IFlZTEFTVCA8IHl5aiB8fCB5eWNoZWNrW3l5al0gIT0gdGhpcy0+eXlsYS5raW5kICgpKQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICh5eWRlZmFjdFtmaXJzdFRvcFN0YXRl
KCktPnl5bHJTdGF0ZV0gIT0gMCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoISB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRh
YmxlW3l5al0pKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgIGlmICgh
eXlzdGF0ZVN0YWNrLnJlZHVjZVRvT25lU3RhY2soKSkKICAgICAgICB5eUZhaWwgKFlZX05VTExQ
VFIpOwoKICAgICAgLyogTm93IHBvcCBzdGFjayB1bnRpbCB3ZSBmaW5kIGEgc3RhdGUgdGhhdCBz
aGlmdHMgdGhlIGVycm9yIHRva2VuLiAgKi8KICAgICAgeXllcnJTdGF0ZSA9IDM7CiAgICAgIHdo
aWxlIChmaXJzdFRvcFN0YXRlICgpICE9IFlZX05VTExQVFIpCiAgICAgICAgewogICAgICAgICAg
Z2xyX3N0YXRlICp5eXMgPSBmaXJzdFRvcFN0YXRlICgpOwogICAgICAgICAgaW50IHl5aiA9IHl5
cGFjdFt5eXMtPnl5bHJTdGF0ZV07CiAgICAgICAgICBpZiAoISB5eXBhY3RfdmFsdWVfaXNfZGVm
YXVsdCAoeXlqKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHl5aiArPSBZWVRFUlJPUjsK
ICAgICAgICAgICAgICBpZiAoMCA8PSB5eWogJiYgeXlqIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5
al0gPT0gWVlURVJST1IKICAgICAgICAgICAgICAgICAgJiYgeXlfaXNfc2hpZnRfYWN0aW9uICh5
eXRhYmxlW3l5al0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvKiBTaGlm
dCB0aGUgZXJyb3IgdG9rZW4uICAqLwogICAgICAgICAgICAgICAgICBZWV9TWU1CT0xfUFJJTlQg
KCJTaGlmdGluZyIsIHl5X2FjY2Vzc2luZ19zeW1ib2wgKHl5dGFibGVbeXlqXSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+eXlsYS52YWx1ZSwgeXllcnJsb2MpOwog
ICAgICAgICAgICAgICAgICB5eWdsclNoaWZ0IChjcmVhdGVfc3RhdGVfc2V0X2luZGV4KDApLCB5
eXRhYmxlW3l5al0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5cy0+eXlwb3NuLCB5
eWxhLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgeXlzID0gZmlyc3RUb3BTdGF0ZSgpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgaWYgKHl5cy0+cHJlZCgpICE9IFlZX05VTExQVFIpCiAgICAgICAgICAgIHl5cy0+ZGVz
dHJveSAoIkVycm9yOiBwb3BwaW5nIiwgeXlwYXJzZXIpOwogICAgICAgICAgeXlzdGF0ZVN0YWNr
LnNldEZpcnN0VG9wKHl5cy0+cHJlZCgpKTsKICAgICAgICAgIHl5c3RhdGVTdGFjay5wb3BfYmFj
aygpOwogICAgICAgIH0KICAgICAgaWYgKGZpcnN0VG9wU3RhdGUoKSA9PSBZWV9OVUxMUFRSKQog
ICAgICAgIHl5RmFpbCAoWVlfTlVMTFBUUik7CiAgICB9CgogICAgWVlSRVNVTFRUQUcKICAgIHl5
cHJvY2Vzc09uZVN0YWNrIChzdGF0ZV9zZXRfaW5kZXggeXlrLAogICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCB5eXBvc24pCiAgICB7CiAgICAgIHdoaWxlICh5eXN0YXRlU3RhY2sudG9wQXQo
eXlrKSAhPSBZWV9OVUxMUFRSKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHN0YXRlX251bSB5
eXN0YXRlID0gdG9wU3RhdGUoeXlrKS0+eXlsclN0YXRlOwogICAgICAgICAgWVlDREVCVUcgPDwg
IlN0YWNrICIgPDwgeXlrLmdldCgpCiAgICAgICAgICAgICAgICAgICA8PCAiIEVudGVyaW5nIHN0
YXRlICIgPDwgeXlzdGF0ZSA8PCAnXG4nOwoKICAgICAgICAgIFlZQVNTRVJUICh5eXN0YXRlICE9
IFlZRklOQUwpOwoKICAgICAgICAgIGlmICh5eV9pc19kZWZhdWx0ZWRfc3RhdGUgKHl5c3RhdGUp
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgcnVsZV9udW0geXlydWxlID0geXlf
ZGVmYXVsdF9hY3Rpb24gKHl5c3RhdGUpOwogICAgICAgICAgICAgIGlmICh5eXJ1bGUgPT0gMCkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgWVlDREVCVUcgPDwgIlN0YWNrICIg
PDwgeXlrLmdldCgpIDw8ICIgZGllcy5cbiI7CiAgICAgICAgICAgICAgICAgIHl5c3RhdGVTdGFj
ay55eXRvcHMueXltYXJrU3RhY2tEZWxldGVkICh5eWspOwogICAgICAgICAgICAgICAgICByZXR1
cm4geXlvazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zdCBZWVJFU1VMVFRB
RyB5eWZsYWcKICAgICAgICAgICAgICAgID0geXlnbHJSZWR1Y2UgKHl5aywgeXlydWxlLCB5eWlt
bWVkaWF0ZVt5eXJ1bGVdKTsKICAgICAgICAgICAgICBpZiAoeXlmbGFnID09IHl5ZXJyKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBZWUNERUJVRyA8PCAiU3RhY2sgIiA8PCB5
eWsuZ2V0KCkgPDwgIiBkaWVzIgogICAgICAgICAgICAgICAgICAgICIgKHByZWRpY2F0ZSBmYWls
dXJlIG9yIGV4cGxpY2l0IHVzZXIgZXJyb3IpLlxuIjsKICAgICAgICAgICAgICAgICAgeXlzdGF0
ZVN0YWNrLnl5dG9wcy55eW1hcmtTdGFja0RlbGV0ZWQgKHl5ayk7CiAgICAgICAgICAgICAgICAg
IHJldHVybiB5eW9rOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh5eWZsYWcg
IT0geXlvaykKICAgICAgICAgICAgICAgIHJldHVybiB5eWZsYWc7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIHl5c3RhdGVTdGFjay55eXRv
cHMuc2V0TG9va2FoZWFkTmVlZHMoeXlrLCB0cnVlKTsKICAgICAgICAgICAgICB5eWdldF90b2tl
biAoKTsKICAgICAgICAgICAgICBjb25zdCBzaG9ydCogeXljb25mbGljdHM7CiAgICAgICAgICAg
ICAgY29uc3QgaW50IHl5YWN0aW9uID0geXlnZXRMUkFjdGlvbnMgKHl5c3RhdGUsIHRoaXMtPnl5
bGEua2luZCAoKSwgeXljb25mbGljdHMpOwoKICAgICAgICAgICAgICBmb3IgKDsgKnl5Y29uZmxp
Y3RzICE9IDA7ICsreXljb25mbGljdHMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIHN0YXRlX3NldF9pbmRleCB5eW5ld1N0YWNrID0geXlzdGF0ZVN0YWNrLnl5c3BsaXRTdGFj
ayAoeXlrKTsKICAgICAgICAgICAgICAgICAgWVlDREVCVUcgPDwgIlNwbGl0dGluZyBvZmYgc3Rh
Y2sgIiA8PCB5eW5ld1N0YWNrLmdldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIg
ZnJvbSAiIDw8IHl5ay5nZXQoKSA8PCAiLlxuIjsKICAgICAgICAgICAgICAgICAgWVlSRVNVTFRU
QUcgeXlmbGFnID0KICAgICAgICAgICAgICAgICAgICB5eWdsclJlZHVjZSAoeXluZXdTdGFjaywg
Knl5Y29uZmxpY3RzLCB5eWltbWVkaWF0ZVsqeXljb25mbGljdHNdKTsKICAgICAgICAgICAgICAg
ICAgaWYgKHl5ZmxhZyA9PSB5eW9rKQogICAgICAgICAgICAgICAgICAgIFlZQ0hLICh5eXByb2Nl
c3NPbmVTdGFjayAoeXluZXdTdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHl5cG9zbikpOwogICAgICAgICAgICAgICAgICBlbHNlIGlmICh5eWZsYWcg
PT0geXllcnIpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgWVlD
REVCVUcgPDwgIlN0YWNrICIgPDwgeXluZXdTdGFjay5nZXQoKSA8PCAiIGRpZXMuXG4iOwogICAg
ICAgICAgICAgICAgICAgICAgeXlzdGF0ZVN0YWNrLnl5dG9wcy55eW1hcmtTdGFja0RlbGV0ZWQg
KHl5bmV3U3RhY2spOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgIHJldHVybiB5eWZsYWc7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgIGlmICh5eV9pc19zaGlmdF9hY3Rpb24gKHl5YWN0aW9uKSkKICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGVsc2UgaWYgKHl5X2lzX2Vycm9yX2FjdGlvbiAo
eXlhY3Rpb24pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBZWUNERUJVRyA8
PCAiU3RhY2sgIiA8PCB5eWsuZ2V0KCkgPDwgIiBkaWVzLlxuIjsKICAgICAgICAgICAgICAgICAg
eXlzdGF0ZVN0YWNrLnl5dG9wcy55eW1hcmtTdGFja0RlbGV0ZWQgKHl5ayk7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgWVlSRVNVTFRUQUcgeXlmbGFnCiAgICAgICAg
ICAgICAgICAgICAgPSB5eWdsclJlZHVjZSAoeXlrLCAteXlhY3Rpb24sIHl5aW1tZWRpYXRlWy15
eWFjdGlvbl0pOwogICAgICAgICAgICAgICAgICBpZiAoeXlmbGFnID09IHl5ZXJyKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIFlZQ0RFQlVHIDw8ICJTdGFjayAi
IDw8IHl5ay5nZXQoKSA8PCAiIGRpZXMiCiAgICAgICAgICAgICAgICAgICAgICAgICIgKHByZWRp
Y2F0ZSBmYWlsdXJlIG9yIGV4cGxpY2l0IHVzZXIgZXJyb3IpLlxuIjsKICAgICAgICAgICAgICAg
ICAgICAgIHl5c3RhdGVTdGFjay55eXRvcHMueXltYXJrU3RhY2tEZWxldGVkICh5eWspOwogICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICBlbHNlIGlmICh5eWZsYWcgIT0geXlvaykKICAgICAgICAgICAgICAgICAgICByZXR1
cm4geXlmbGFnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4geXlvazsKICAgIH0KCiAgICAvKiogUGVyZm9ybSB1c2VyIGFjdGlvbiBmb3IgcnVs
ZSBudW1iZXIgWVlOLCB3aXRoIFJIUyBsZW5ndGggWVlSSFNMRU4sCiAgICAgKiAgYW5kIHRvcCBz
dGFjayBpdGVtIFlZVlNQLiAgWVlWQUxQIHBvaW50cyB0byBwbGFjZSB0byBwdXQgc2VtYW50aWMK
ICAgICAqICB2YWx1ZSAoJCQpLCBhbmQgeXlsb2NwIHBvaW50cyB0byBwbGFjZSBmb3IgbG9jYXRp
b24gaW5mb3JtYXRpb24KICAgICAqICAoQCQpLiAgUmV0dXJucyB5eW9rIGZvciBub3JtYWwgcmV0
dXJuLCB5eWFjY2VwdCBmb3IgWVlBQ0NFUFQsCiAgICAgKiAgeXllcnIgZm9yIFlZRVJST1IsIHl5
YWJvcnQgZm9yIFlZQUJPUlQuICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5dXNlckFjdGlvbiAo
cnVsZV9udW0geXlydWxlLCBpbnQgeXlyaHNsZW4sIGdscl9zdGFja19pdGVtKiB5eXZzcCwgc3Rh
dGVfc2V0X2luZGV4IHl5aywKICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZSogeXl2YWxwKQog
ICAgewogICAgICBib29sIHl5bm9ybWFsIFlZX0FUVFJJQlVURV9VTlVTRUQgPSAheXlzdGF0ZVN0
YWNrLmlzU3BsaXQoKTsKICAgICAgaW50IHl5bG93ID0gMTsKICBZWV9VU0UgKHl5dmFscCk7CiAg
ICAgIFlZX1VTRSAoeXlrKTsKICAgICAgWVlfVVNFICh5eXJoc2xlbik7CiAgICAjIHVuZGVmIHl5
ZXJyb2sKICAgICMgZGVmaW5lIHl5ZXJyb2sgKHl5ZXJyU3RhdGUgPSAwKQogICAgIyB1bmRlZiBZ
WUFDQ0VQVAogICAgIyBkZWZpbmUgWVlBQ0NFUFQgcmV0dXJuIHl5YWNjZXB0CiAgICAjIHVuZGVm
IFlZQUJPUlQKICAgICMgZGVmaW5lIFlZQUJPUlQgcmV0dXJuIHl5YWJvcnQKICAgICMgdW5kZWYg
WVlFUlJPUgogICAgIyBkZWZpbmUgWVlFUlJPUiByZXR1cm4geXllcnJvaywgeXllcnIKICAgICMg
dW5kZWYgWVlSRUNPVkVSSU5HCiAgICAjIGRlZmluZSBZWVJFQ09WRVJJTkcoKSAoeXllcnJTdGF0
ZSAhPSAwKQogICAgIyB1bmRlZiB5eXRva2VuCiAgICAjIGRlZmluZSB5eXRva2VuIHRoaXMtPnl5
bGEua2luZF8KICAgICMgdW5kZWYgeXljbGVhcmluCiAgICAjIGRlZmluZSB5eWNsZWFyaW4gKHl5
dG9rZW4gPSBzeW1ib2xfa2luZDo6U19ZWUVNUFRZKQogICAgIyB1bmRlZiBZWUJBQ0tVUAogICAg
IyBkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHJldHVybiB5eXBhcnNlci5lcnJvciAoWVlfKCJz
eW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpLCAgICAgXAogICAgICAgICAgICAgeXllcnJv
aywgeXllcnIKCgogICAgICBpZiAoeXlyaHNsZW4gPT0gMCkKICAgICAgICAqeXl2YWxwID0geXl2
YWxfZGVmYXVsdDsKICAgICAgZWxzZQogICAgICAgICp5eXZhbHAgPSB5eXZzcFtZWUZJTEwgKDEt
eXlyaHNsZW4pXS5nZXRTdGF0ZSgpLnZhbHVlICgpOwogICAgLyogSWYgeXlrID09IC0xLCB3ZSBh
cmUgcnVubmluZyBhIGRlZmVycmVkIGFjdGlvbiBvbiBhIHRlbXBvcmFyeQogICAgICAgc3RhY2su
ICBJbiB0aGF0IGNhc2UsIFlZX1JFRFVDRV9QUklOVCBtdXN0IG5vdCBwbGF5IHdpdGggWVlGSUxM
LAogICAgICAgc28gcHJldGVuZCB0aGUgc3RhY2sgaXMgIm5vcm1hbCIuICovCiAgICBZWV9SRURV
Q0VfUFJJTlQgKCh5eW5vcm1hbCB8fCB5eWsgPT0gY3JlYXRlX3N0YXRlX3NldF9pbmRleCAoLTEp
LCB5eXZzcCwgeXlrLCB5eXJ1bGUsIHl5cGFyc2VyKSk7CiAgICAjaWYgWVlfRVhDRVBUSU9OUwog
ICAgICB0cnkKICAgICAgewogICAgI2VuZGlmIC8vIFlZX0VYQ0VQVElPTlMKICAgICAgc3dpdGNo
ICh5eXJ1bGUpCiAgICAgICAgewogICAgCiNsaW5lIDI2NjIgImdsci1yZWdyMTYuY2MiCgogICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgfQogICAgI2lmIFlZX0VYQ0VQVElPTlMKICAg
ICAgfQogICAgICBjYXRjaCAoY29uc3Qgc3ludGF4X2Vycm9yJiB5eWV4YykKICAgICAgICB7CiAg
ICAgICAgICBZWUNERUJVRyA8PCAiQ2F1Z2h0IGV4Y2VwdGlvbjogIiA8PCB5eWV4Yy53aGF0KCkg
PDwgJ1xuJzsKICAgICAgICAgIHl5cGFyc2VyLmVycm9yICh5eWV4Yy53aGF0ICgpKTsKICAgICAg
ICAgIFlZRVJST1I7CiAgICAgICAgfQogICAgI2VuZGlmIC8vIFlZX0VYQ0VQVElPTlMKICAgIFlZ
X1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eWxoc05vbnRlcm0gKHl5cnVsZSksICp5eXZhbHAs
ICp5eWxvY3ApOwoKICAgICAgcmV0dXJuIHl5b2s7CiAgICAjIHVuZGVmIHl5ZXJyb2sKICAgICMg
dW5kZWYgWVlBQk9SVAogICAgIyB1bmRlZiBZWUFDQ0VQVAogICAgIyB1bmRlZiBZWUVSUk9SCiAg
ICAjIHVuZGVmIFlZQkFDS1VQCiAgICAjIHVuZGVmIHl5dG9rZW4KICAgICMgdW5kZWYgeXljbGVh
cmluCiAgICAjIHVuZGVmIFlZUkVDT1ZFUklORwogICAgfQoKICAgIFlZUkVTVUxUVEFHCiAgICB5
eXJlc29sdmVTdGFjayAoKQogICAgewogICAgICBpZiAoeXlzdGF0ZVN0YWNrLmlzU3BsaXQgKCkp
CiAgICAgICAgewogICAgICAgICAgaW50IHl5biA9IDA7CiAgICAgICAgICBmb3IgKGdscl9zdGF0
ZSogeXlzID0gZmlyc3RUb3BTdGF0ZSAoKTsKICAgICAgICAgICAgICAgeXlzICE9IHl5c3RhdGVT
dGFjay55eXNwbGl0UG9pbnQ7CiAgICAgICAgICAgICAgIHl5cyA9IHl5cy0+cHJlZCAoKSkKICAg
ICAgICAgICAgeXluICs9IDE7CiAgICAgICAgICBZWUNISyAoeXlyZXNvbHZlU3RhdGVzICgqZmly
c3RUb3BTdGF0ZSAoKSwgeXluKSk7CiAgICAgICAgfQogICAgICByZXR1cm4geXlvazsKICAgIH0K
CiAgICAvKiogUG9wIHRoZSBzeW1ib2xzIGNvbnN1bWVkIGJ5IHJlZHVjdGlvbiAjWVlSVUxFIGZy
b20gdGhlIHRvcCBvZiBzdGFjawogICAgICogICNZWUsgb2YgKllZU1RBQ0tQLCBhbmQgcGVyZm9y
bSB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgYWN0aW9uIG9uIHRoZWlyCiAgICAgKiAgc2VtYW50
aWMgdmFsdWVzLiAgQXNzdW1lcyB0aGF0IGFsbCBhbWJpZ3VpdGllcyBpbiBzZW1hbnRpYyB2YWx1
ZXMKICAgICAqICBoYXZlIGJlZW4gcHJldmlvdXNseSByZXNvbHZlZC4gIFNldCAqWVlWQUxQIHRv
IHRoZSByZXN1bHRpbmcgdmFsdWUsCiAgICAgKiAgYW5kICpZWUxPQ1AgdG8gdGhlIGNvbXB1dGVk
IGxvY2F0aW9uIChpZiBhbnkpLiAgUmV0dXJuIHZhbHVlIGlzIGFzCiAgICAgKiAgZm9yIHVzZXJB
Y3Rpb24uICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5ZG9BY3Rpb24gKHN0YXRlX3NldF9pbmRl
eCB5eWssIHJ1bGVfbnVtIHl5cnVsZSwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUqIHl5dmFs
cCkKICAgIHsKICAgICAgY29uc3QgaW50IHl5bnJocyA9IHl5cmhzTGVuZ3RoICh5eXJ1bGUpOwoK
ICAgICAgaWYgKCF5eXN0YXRlU3RhY2suaXNTcGxpdCgpKQogICAgICAgIHsKICAgICAgICAgIC8q
IFN0YW5kYXJkIHNwZWNpYWwgY2FzZTogc2luZ2xlIHN0YWNrLiAgKi8KICAgICAgICAgIFlZQVNT
RVJUICh5eWsuZ2V0KCkgPT0gMCk7CiAgICAgICAgICBnbHJfc3RhY2tfaXRlbSogeXlyaHMgPSB5
eXN0YXRlU3RhY2suZmlyc3RUb3AoKS0+YXNJdGVtKCk7CiAgICAgICAgICBjb25zdCBZWVJFU1VM
VFRBRyByZXMKICAgICAgICAgICAgPSB5eXVzZXJBY3Rpb24gKHl5cnVsZSwgeXlucmhzLCB5eXJo
cywgeXlrLCB5eXZhbHApOwogICAgICAgICAgeXlzdGF0ZVN0YWNrLnBvcF9iYWNrKHN0YXRpY19j
YXN0PHNpemVfdD4oeXlucmhzKSk7CiAgICAgICAgICB5eXN0YXRlU3RhY2suc2V0Rmlyc3RUb3Ao
Jnl5c3RhdGVTdGFja1t5eXN0YXRlU3RhY2suc2l6ZSgpIC0gMV0uZ2V0U3RhdGUoKSk7CiAgICAg
ICAgICByZXR1cm4gcmVzOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IGdscl9zdGFja19pdGVtIHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVCArIDFdOwogICAg
ICAgICAgZ2xyX3N0YXRlKiB5eXMgPSB5eXN0YXRlU3RhY2sudG9wQXQoeXlrKTsKICAgICAgICAg
IHl5cmhzVmFsc1tZWU1BWFJIUyArIFlZTUFYTEVGVF0uZ2V0U3RhdGUoKS5zZXRQcmVkKHl5cyk7
CiAgICAgICAgICBmb3IgKGludCB5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSArPSAxKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgeXlzID0geXlzLT5wcmVkKCk7CiAgICAgICAgICAgICAg
WVlBU1NFUlQgKHl5cyAhPSBZWV9OVUxMUFRSKTsKICAgICAgICAgICAgfQogICAgICAgICAgeXlz
dGF0ZVN0YWNrLnl5dXBkYXRlU3BsaXQgKCp5eXMpOwogICAgICAgICAgeXlzdGF0ZVN0YWNrLnNl
dFRvcEF0KHl5aywgeXlzKTsKICAgICAgICAgIHJldHVybiB5eXVzZXJBY3Rpb24gKHl5cnVsZSwg
eXlucmhzLCB5eXJoc1ZhbHMgKyBZWU1BWFJIUyArIFlZTUFYTEVGVCAtIDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB5eWssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5
eXZhbHApOwogICAgICAgIH0KICAgIH0KCiAgICAvKiogUG9wIGl0ZW1zIG9mZiBzdGFjayAjWVlL
IG9mICpZWVNUQUNLUCBhY2NvcmRpbmcgdG8gZ3JhbW1hciBydWxlIFlZUlVMRSwKICAgICAqICBh
bmQgcHVzaCBiYWNrIG9uIHRoZSByZXN1bHRpbmcgbm9udGVybWluYWwgc3ltYm9sLiAgUGVyZm9y
bSB0aGUKICAgICAqICBzZW1hbnRpYyBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIFlZUlVMRSBhbmQg
c3RvcmUgaXRzIHZhbHVlIHdpdGggdGhlCiAgICAgKiAgbmV3bHkgcHVzaGVkIHN0YXRlLCBpZiBZ
WUZPUkNFRVZBTCBvciBpZiAqWVlTVEFDS1AgaXMgY3VycmVudGx5CiAgICAgKiAgdW5hbWJpZ3Vv
dXMuICBPdGhlcndpc2UsIHN0b3JlIHRoZSBkZWZlcnJlZCBzZW1hbnRpYyBhY3Rpb24gd2l0aAog
ICAgICogIHRoZSBuZXcgc3RhdGUuICBJZiB0aGUgbmV3IHN0YXRlIHdvdWxkIGhhdmUgYW4gaWRl
bnRpY2FsIGlucHV0CiAgICAgKiAgcG9zaXRpb24sIExSIHN0YXRlLCBhbmQgcHJlZGVjZXNzb3Ig
dG8gYW4gZXhpc3Rpbmcgc3RhdGUgb24gdGhlIHN0YWNrLAogICAgICogIGl0IGlzIGlkZW50aWZp
ZWQgd2l0aCB0aGF0IGV4aXN0aW5nIHN0YXRlLCBlbGltaW5hdGluZyBzdGFjayAjWVlLIGZyb20K
ICAgICAqICAqWVlTVEFDS1AuICBJbiB0aGlzIGNhc2UsIHRoZSBzZW1hbnRpYyB2YWx1ZSBpcwog
ICAgICogIGFkZGVkIHRvIHRoZSBvcHRpb25zIGZvciB0aGUgZXhpc3Rpbmcgc3RhdGUncyBzZW1h
bnRpYyB2YWx1ZS4KICAgICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5Z2xyUmVkdWNlIChzdGF0
ZV9zZXRfaW5kZXggeXlrLCBydWxlX251bSB5eXJ1bGUsIGJvb2wgeXlmb3JjZUV2YWwpCiAgICB7
CiAgICAgIHNpemVfdCB5eXBvc24gPSB0b3BTdGF0ZSh5eWspLT55eXBvc247CgogICAgICBpZiAo
eXlmb3JjZUV2YWwgfHwgIXl5c3RhdGVTdGFjay5pc1NwbGl0KCkpCiAgICAgICAgewogICAgICAg
ICAgdmFsdWVfdHlwZSB2YWw7CgogICAgICAgICAgWVlSRVNVTFRUQUcgeXlmbGFnID0geXlkb0Fj
dGlvbiAoeXlrLCB5eXJ1bGUsICZ2YWwpOwogICAgICAgICAgaWYgKHl5ZmxhZyA9PSB5eWVyciAm
JiB5eXN0YXRlU3RhY2suaXNTcGxpdCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgWVlD
REVCVUcgPDwgIlBhcnNlIG9uIHN0YWNrICIgPDwgeXlrLmdldCAoKQogICAgICAgICAgICAgICAg
ICAgICAgIDw8ICIgcmVqZWN0ZWQgYnkgcnVsZSAiIDw8IHl5cnVsZSAtIDEKICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiIChsaW5lICIgPDwgaW50ICh5eXJsaW5lW3l5cnVsZV0pIDw8ICIpLlxu
IjsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKHl5ZmxhZyAhPSB5eW9rKQogICAgICAgICAg
ICByZXR1cm4geXlmbGFnOwogICAgICAgICAgeXlnbHJTaGlmdCAoeXlrLAogICAgICAgICAgICAg
ICAgICAgICAgeXlMUmdvdG9TdGF0ZSAodG9wU3RhdGUoeXlrKS0+eXlsclN0YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsaHNOb250ZXJtICh5eXJ1bGUpKSwKICAg
ICAgICAgICAgICAgICAgICAgIHl5cG9zbiwgdmFsKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBnbHJfc3RhdGUgKnl5cyA9IHl5c3RhdGVTdGFjay50b3BBdCh5eWsp
OwogICAgICAgICAgZ2xyX3N0YXRlICp5eXMwID0geXlzOwogICAgICAgICAgZm9yIChpbnQgeXlu
ID0geXlyaHNMZW5ndGggKHl5cnVsZSk7IDAgPCB5eW47IHl5biAtPSAxKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgeXlzID0geXlzLT5wcmVkKCk7CiAgICAgICAgICAgICAgWVlBU1NFUlQg
KHl5cyAhPSBZWV9OVUxMUFRSKTsKICAgICAgICAgICAgfQogICAgICAgICAgeXlzdGF0ZVN0YWNr
Lnl5dXBkYXRlU3BsaXQgKCp5eXMpOwogICAgICAgICAgc3RhdGVfbnVtIHl5bmV3TFJTdGF0ZSA9
IHl5TFJnb3RvU3RhdGUgKHl5cy0+eXlsclN0YXRlLCB5eWxoc05vbnRlcm0gKHl5cnVsZSkpOwog
ICAgICAgICAgWVlDREVCVUcgPDwgIlJlZHVjZWQgc3RhY2sgIiA8PCB5eWsuZ2V0ICgpCiAgICAg
ICAgICAgICAgICAgICA8PCAiIGJ5IHJ1bGUgIiA8PCB5eXJ1bGUgLSAxIDw8ICIgKGxpbmUgIiA8
PCBpbnQgKHl5cmxpbmVbeXlydWxlXSkKICAgICAgICAgICAgICAgICAgIDw8ICIpOyBhY3Rpb24g
ZGVmZXJyZWQuICBOb3cgaW4gc3RhdGUgIiA8PCB5eW5ld0xSU3RhdGUKICAgICAgICAgICAgICAg
ICAgIDw8ICIuXG4iOwogICAgICAgICAgZm9yIChzdGF0ZV9zZXRfaW5kZXggeXlpID0gY3JlYXRl
X3N0YXRlX3NldF9pbmRleCgwKTsgeXlpLnVnZXQoKSA8IHl5c3RhdGVTdGFjay5udW1Ub3BzKCk7
ICsreXlpKQogICAgICAgICAgICBpZiAoeXlpICE9IHl5ayAmJiB5eXN0YXRlU3RhY2sudG9wQXQo
eXlpKSAhPSBZWV9OVUxMUFRSKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0
IGdscl9zdGF0ZSogeXlzcGxpdCA9IHl5c3RhdGVTdGFjay55eXNwbGl0UG9pbnQ7CiAgICAgICAg
ICAgICAgICBnbHJfc3RhdGUqIHl5cCA9IHl5c3RhdGVTdGFjay50b3BBdCh5eWkpOwogICAgICAg
ICAgICAgICAgd2hpbGUgKHl5cCAhPSB5eXMgJiYgeXlwICE9IHl5c3BsaXQKICAgICAgICAgICAg
ICAgICAgICAgICAmJiB5eXAtPnl5cG9zbiA+PSB5eXBvc24pCiAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBpZiAoeXlwLT55eWxyU3RhdGUgPT0geXluZXdMUlN0YXRlCiAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHl5cC0+cHJlZCgpID09IHl5cykKICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgeXlhZGREZWZlcnJlZEFjdGlvbiAo
eXlrLCB5eXAsIHl5czAsIHl5cnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHl5c3RhdGVT
dGFjay55eXRvcHMueXltYXJrU3RhY2tEZWxldGVkICh5eWspOwogICAgICAgICAgICAgICAgICAg
ICAgICBZWUNERUJVRyA8PCAiTWVyZ2luZyBzdGFjayAiIDw8IHl5ay5nZXQgKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBpbnRvIHN0YWNrICIgPDwgeXlpLmdldCAoKSA8
PCAiLlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5b2s7CiAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgeXlwID0geXlwLT5wcmVkKCk7CiAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICB5eXN0YXRlU3RhY2suc2V0
VG9wQXQoeXlrLCB5eXMpOwogICAgICAgICAgeXlnbHJTaGlmdERlZmVyICh5eWssIHl5bmV3TFJT
dGF0ZSwgeXlwb3NuLCB5eXMwLCB5eXJ1bGUpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHl5b2s7
CiAgICB9CgogICAgLyoqIFNoaWZ0IHN0YWNrICNZWUsgb2YgKllZU1RBQ0tQLCB0byBhIG5ldyBz
dGF0ZSBjb3JyZXNwb25kaW5nIHRvIExSCiAgICAgKiAgc3RhdGUgWVlMUlNUQVRFLCBhdCBpbnB1
dCBwb3NpdGlvbiBZWVBPU04sIHdpdGggdGhlICh1bnJlc29sdmVkKQogICAgICogIHNlbWFudGlj
IHZhbHVlIG9mIFlZUkhTIHVuZGVyIHRoZSBhY3Rpb24gZm9yIFlZUlVMRS4gICovCiAgICB2b2lk
CiAgICB5eWdsclNoaWZ0RGVmZXIgKHN0YXRlX3NldF9pbmRleCB5eWssIHN0YXRlX251bSB5eWxy
U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB5eXBvc24sIGdscl9zdGF0ZSogeXly
aHMsIHJ1bGVfbnVtIHl5cnVsZSkKICAgIHsKICAgICAgZ2xyX3N0YXRlJiB5eW5ld1N0YXRlID0g
eXlzdGF0ZVN0YWNrLnl5bmV3R0xSU3RhdGUgKAogICAgICAgIGdscl9zdGF0ZSAoeXlsclN0YXRl
LCB5eXBvc24pKTsKICAgICAgeXluZXdTdGF0ZS5zZXRQcmVkICh5eXN0YXRlU3RhY2sudG9wQXQg
KHl5aykpOwogICAgICB5eXN0YXRlU3RhY2suc2V0VG9wQXQgKHl5aywgJnl5bmV3U3RhdGUpOwoK
ICAgICAgLyogSW52b2tlcyB5eXJlc2VydmVTdGFjay4gICovCiAgICAgIHl5YWRkRGVmZXJyZWRB
Y3Rpb24gKHl5aywgJnl5bmV3U3RhdGUsIHl5cmhzLCB5eXJ1bGUpOwogICAgfQoKICAgIC8qKiBT
aGlmdCB0byBhIG5ldyBzdGF0ZSBvbiBzdGFjayAjWVlLIG9mICpZWVNUQUNLUCwgY29ycmVzcG9u
ZGluZyB0byBMUgogICAgICogc3RhdGUgWVlMUlNUQVRFLCBhdCBpbnB1dCBwb3NpdGlvbiBZWVBP
U04sIHdpdGggKHJlc29sdmVkKSBzZW1hbnRpYwogICAgICogdmFsdWUgWVlWQUxfQVJHIGFuZCBz
b3VyY2UgbG9jYXRpb24gWVlMT0NfQVJHLiAgKi8KICAgIHZvaWQKICAgIHl5Z2xyU2hpZnQgKHN0
YXRlX3NldF9pbmRleCB5eWssIHN0YXRlX251bSB5eWxyU3RhdGUsCiAgICAgICAgICAgICAgICBz
aXplX3QgeXlwb3NuLAogICAgICAgICAgICAgICAgY29uc3QgdmFsdWVfdHlwZSYgeXl2YWxfYXJn
KQogICAgewogICAgICBnbHJfc3RhdGUmIHl5bmV3U3RhdGUgPSB5eXN0YXRlU3RhY2sueXluZXdH
TFJTdGF0ZSAoCiAgICAgICAgZ2xyX3N0YXRlICh5eWxyU3RhdGUsIHl5cG9zbiwgeXl2YWxfYXJn
KSk7CiAgICAgIHl5bmV3U3RhdGUuc2V0UHJlZCAoeXlzdGF0ZVN0YWNrLnRvcEF0KHl5aykpOwog
ICAgICB5eXN0YXRlU3RhY2suc2V0VG9wQXQgKHl5aywgJnl5bmV3U3RhdGUpOwogICAgICB5eXJl
c2VydmVHbHJTdGFjayAoKTsKICAgIH0KCiNpZiBZWURFQlVHCiAgICB2b2lkCiAgICB5eXBzdGFj
ayAoc3RhdGVfc2V0X2luZGV4IHl5aykgY29uc3QKICAgIHsKICAgICAgeXlzdGF0ZVN0YWNrLnl5
cHN0YXRlcyAoeXlzdGF0ZVN0YWNrLnRvcEF0ICh5eWspKTsKICAgIH0KI2VuZGlmCgogICAgZ2xy
X3N0YXRlKiB0b3BTdGF0ZShzdGF0ZV9zZXRfaW5kZXggaSkgewogICAgICByZXR1cm4geXlzdGF0
ZVN0YWNrLnRvcEF0KGkpOwogICAgfQoKICAgIGdscl9zdGF0ZSogZmlyc3RUb3BTdGF0ZSgpIHsK
ICAgICAgcmV0dXJuIHl5c3RhdGVTdGFjay5maXJzdFRvcCgpOwogICAgfQoKICBwcml2YXRlOgoK
ICAgIHZvaWQgcG9wYWxsXyAoKQogICAgewogICAgICAvKiBJZiB0aGUgc3RhY2sgaXMgd2VsbC1m
b3JtZWQsIHBvcCB0aGUgc3RhY2sgdW50aWwgaXQgaXMgZW1wdHksCiAgICAgICAgIGRlc3Ryb3lp
bmcgaXRzIGVudHJpZXMgYXMgd2UgZ28uICBCdXQgZnJlZSB0aGUgc3RhY2sgcmVnYXJkbGVzcwog
ICAgICAgICBvZiB3aGV0aGVyIGl0IGlzIHdlbGwtZm9ybWVkLiAgKi8KICAgICAgZm9yIChzdGF0
ZV9zZXRfaW5kZXggayA9IGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXgoMCk7IGsudWdldCgpIDwgeXlz
dGF0ZVN0YWNrLm51bVRvcHMoKTsgayArPSAxKQogICAgICAgIGlmICh5eXN0YXRlU3RhY2sudG9w
QXQoaykgIT0gWVlfTlVMTFBUUikKICAgICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKHl5c3Rh
dGVTdGFjay50b3BBdChrKSAhPSBZWV9OVUxMUFRSKQogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGdscl9zdGF0ZSogc3RhdGUgPSB0b3BTdGF0ZShrKTsKICAgICAgICAgICAgICAgIGlm
IChzdGF0ZS0+cHJlZCgpICE9IFlZX05VTExQVFIpCiAgICAgICAgICAgICAgICAgIHN0YXRlLT5k
ZXN0cm95ICgiQ2xlYW51cDogcG9wcGluZyIsIHl5cGFyc2VyKTsKICAgICAgICAgICAgICAgIHl5
c3RhdGVTdGFjay5zZXRUb3BBdChrLCBzdGF0ZS0+cHJlZCgpKTsKICAgICAgICAgICAgICAgIHl5
c3RhdGVTdGFjay5wb3BfYmFjaygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgIH0KICAgIH0KCiAgICAvKiogUmVzb2x2ZSB0aGUgcHJldmlvdXMgWVlOIHN0
YXRlcyBzdGFydGluZyBhdCBhbmQgaW5jbHVkaW5nIHN0YXRlIFlZUwogICAgICogIG9uICpZWVNU
QUNLUC4gSWYgcmVzdWx0ICE9IHl5b2ssIHNvbWUgc3RhdGVzIG1heSBoYXZlIGJlZW4gbGVmdAog
ICAgICogIHVucmVzb2x2ZWQgcG9zc2libHkgd2l0aCBlbXB0eSBzZW1hbnRpYyBvcHRpb24gY2hh
aW5zLiAgUmVnYXJkbGVzcwogICAgICogIG9mIHdoZXRoZXIgcmVzdWx0ID0geXlvaywgZWFjaCBz
dGF0ZSBoYXMgYmVlbiBsZWZ0IHdpdGggY29uc2lzdGVudAogICAgICogIGRhdGEgc28gdGhhdCBk
ZXN0cm95IGNhbiBiZSBpbnZva2VkIGlmIG5lY2Vzc2FyeS4gICovCiAgICBZWVJFU1VMVFRBRwog
ICAgeXlyZXNvbHZlU3RhdGVzIChnbHJfc3RhdGUmIHl5cywgaW50IHl5bikKICAgIHsKICAgICAg
aWYgKDAgPCB5eW4pCiAgICAgICAgewogICAgICAgICAgWVlBU1NFUlQgKHl5cy5wcmVkKCkgIT0g
WVlfTlVMTFBUUik7CiAgICAgICAgICBZWUNISyAoeXlyZXNvbHZlU3RhdGVzICgqeXlzLnByZWQo
KSwgeXluLTEpKTsKICAgICAgICAgIGlmICghIHl5cy55eXJlc29sdmVkKQogICAgICAgICAgICBZ
WUNISyAoeXlyZXNvbHZlVmFsdWUgKHl5cykpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHl5b2s7
CiAgICB9CgogICAgc3RhdGljIHZvaWQKICAgIHl5dXNlck1lcmdlIChpbnQgeXluLCB2YWx1ZV90
eXBlJiB5eTAsIHZhbHVlX3R5cGUmIHl5MSkKICAgIHsKICAgICAgWVlfVVNFICh5eTApOwogICAg
ICBZWV9VU0UgKHl5MSk7CgogICAgICBzd2l0Y2ggKHl5bikKICAgICAgICB7CgogICAgICAgICAg
ZGVmYXVsdDogYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8qKiBSZXNvbHZlIHRoZSBhbWJp
Z3VpdHkgcmVwcmVzZW50ZWQgaW4gc3RhdGUgWVlTIGluICpZWVNUQUNLUCwKICAgICAqICBwZXJm
b3JtIHRoZSBpbmRpY2F0ZWQgYWN0aW9ucywgYW5kIHNldCB0aGUgc2VtYW50aWMgdmFsdWUgb2Yg
WVlTLgogICAgICogIElmIHJlc3VsdCAhPSB5eW9rLCB0aGUgY2hhaW4gb2Ygc2VtYW50aWMgb3B0
aW9ucyBpbiBZWVMgaGFzIGJlZW4KICAgICAqICBjbGVhcmVkIGluc3RlYWQgb3IgaXQgaGFzIGJl
ZW4gbGVmdCB1bm1vZGlmaWVkIGV4Y2VwdCB0aGF0CiAgICAgKiAgcmVkdW5kYW50IG9wdGlvbnMg
bWF5IGhhdmUgYmVlbiByZW1vdmVkLiAgUmVnYXJkbGVzcyBvZiB3aGV0aGVyCiAgICAgKiAgcmVz
dWx0ID0geXlvaywgWVlTIGhhcyBiZWVuIGxlZnQgd2l0aCBjb25zaXN0ZW50IGRhdGEgc28gdGhh
dAogICAgICogIGRlc3Ryb3kgY2FuIGJlIGludm9rZWQgaWYgbmVjZXNzYXJ5LiAgKi8KICAgIFlZ
UkVTVUxUVEFHCiAgICB5eXJlc29sdmVWYWx1ZSAoZ2xyX3N0YXRlJiB5eXMpCiAgICB7CiAgICAg
IHNlbWFudGljX29wdGlvbiogeXliZXN0ID0geXlzLmZpcnN0VmFsKCk7CiAgICAgIFlZQVNTRVJU
KHl5YmVzdCAhPSBZWV9OVUxMUFRSKTsKICAgICAgYm9vbCB5eW1lcmdlID0gZmFsc2U7CiAgICAg
IFlZUkVTVUxUVEFHIHl5ZmxhZzsKCiAgICAgIHNlbWFudGljX29wdGlvbiogeXlwUHJldiA9IHl5
YmVzdDsKICAgICAgZm9yIChzZW1hbnRpY19vcHRpb24qIHl5cCA9IHl5YmVzdC0+bmV4dCgpOwog
ICAgICAgICAgIHl5cCAhPSBZWV9OVUxMUFRSOyApCiAgICAgICAgewogICAgICAgICAgaWYgKHl5
YmVzdC0+aXNJZGVudGljYWxUbyAoKnl5cCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB5
eWJlc3QtPm1lcmdlV2l0aCAoKnl5cCk7CiAgICAgICAgICAgICAgeXlwUHJldi0+c2V0TmV4dCh5
eXAtPm5leHQoKSk7CiAgICAgICAgICAgICAgeXlwID0geXlwUHJldi0+bmV4dCgpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzd2l0Y2gg
KHl5cHJlZmVyZW5jZSAoKnl5YmVzdCwgKnl5cCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgIHJldHVybiB5eXN0YXRlU3RhY2sueXly
ZXBvcnRBbWJpZ3VpdHkgKCp5eWJlc3QsICp5eXAsIHl5cGFyc2VyKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIHl5bWVy
Z2UgPSB0cnVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
MjoKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAg
ICAgICAgICAgICAgIHl5YmVzdCA9IHl5cDsKICAgICAgICAgICAgICAgICAgeXltZXJnZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgIC8qIFRoaXMgY2Fubm90IGhhcHBlbiBzbyBpdCBpcyBub3Qgd29ydGgg
YSBZWUFTU0VSVCAoZmFsc2UpLAogICAgICAgICAgICAgICAgICAgICBidXQgc29tZSBjb21waWxl
cnMgY29tcGxhaW4gaWYgdGhlIGRlZmF1bHQgY2FzZSBpcwogICAgICAgICAgICAgICAgICAgICBv
bWl0dGVkLiAgKi8KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgeXlwUHJldiA9IHl5cDsKICAgICAgICAgICAgICB5eXAgPSB5eXAtPm5leHQo
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIHZhbHVlX3R5cGUgdmFsOwogICAgICBp
ZiAoeXltZXJnZSkKICAgICAgICB7CiAgICAgICAgICBpbnQgeXlwcmVjID0geXlkcHJlY1t5eWJl
c3QtPnl5cnVsZV07CiAgICAgICAgICB5eWZsYWcgPSB5eXJlc29sdmVBY3Rpb24gKCp5eWJlc3Qs
ICZ2YWwpOwogICAgICAgICAgaWYgKHl5ZmxhZyA9PSB5eW9rKQogICAgICAgICAgICBmb3IgKHNl
bWFudGljX29wdGlvbiogeXlwID0geXliZXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgeXlw
ICE9IFlZX05VTExQVFI7CiAgICAgICAgICAgICAgICAgeXlwID0geXlwLT5uZXh0KCkpCiAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHl5cHJlYyA9PSB5eWRwcmVjW3l5cC0+eXly
dWxlXSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUg
eXl2YWxfb3RoZXI7CiAgICAgICAgICAgICAgICAgICAgeXlmbGFnID0geXlyZXNvbHZlQWN0aW9u
ICgqeXlwLCAmeXl2YWxfb3RoZXIpOwogICAgICAgICAgICAgICAgICAgIGlmICh5eWZsYWcgIT0g
eXlvaykKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgeXlw
YXJzZXIueXlfZGVzdHJveV8gKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGluY29tcGxldGVseSBtZXJn
ZWQgdmFsdWUgZm9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHl5X2FjY2Vzc2luZ19zeW1ib2wgKHl5cy55eWxyU3RhdGUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+eXlsYS52YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIHl5dXNlck1lcmdlICh5eW1lcmdlclt5eXAtPnl5cnVsZV0sIHZhbCwgeXl2YWxf
b3RoZXIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHl5ZmxhZyA9IHl5cmVzb2x2ZUFjdGlvbiAoKnl5YmVzdCwgJnZhbCk7
CgogICAgICBpZiAoeXlmbGFnID09IHl5b2spCiAgICAgICAgewogICAgICAgICAgeXlzLnl5cmVz
b2x2ZWQgPSB0cnVlOwogICAgICAgICAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVH
SU4KICAgICAgICAgIG5ldyAoJnl5cy52YWx1ZSAoKSkgdmFsdWVfdHlwZSAodmFsKTsKCiAgICAg
ICAgICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB5eXMuc2V0Rmlyc3RWYWwoWVlfTlVMTFBUUik7CgogICAgICByZXR1cm4geXlm
bGFnOwogICAgfQoKICAgIC8qKiBSZXNvbHZlIHRoZSBzdGF0ZXMgZm9yIHRoZSBSSFMgb2YgWVlP
UFQgb24gKllZU1RBQ0tQLCBwZXJmb3JtIGl0cwogICAgICogIHVzZXIgYWN0aW9uLCBhbmQgcmV0
dXJuIHRoZSBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gaW4gKllZVkFMUAogICAgICogIGFu
ZCAqWVlMT0NQLiAgUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHJlc3VsdCA9IHl5b2ssIGFsbCBSSFMg
c3RhdGVzCiAgICAgKiAgaGF2ZSBiZWVuIGRlc3Ryb3llZCAoYXNzdW1pbmcgdGhlIHVzZXIgYWN0
aW9uIGRlc3Ryb3lzIGFsbCBSSFMKICAgICAqICBzZW1hbnRpYyB2YWx1ZXMgaWYgaW52b2tlZCku
ICAqLwogICAgWVlSRVNVTFRUQUcKICAgIHl5cmVzb2x2ZUFjdGlvbiAoc2VtYW50aWNfb3B0aW9u
JiB5eW9wdCwgdmFsdWVfdHlwZSogeXl2YWxwKQogICAgewogICAgICBnbHJfc3RhdGUqIHl5b3B0
U3RhdGUgPSB5eW9wdC5zdGF0ZSgpOwogICAgICBZWUFTU0VSVCh5eW9wdFN0YXRlICE9IFlZX05V
TExQVFIpOwogICAgICBpbnQgeXlucmhzID0geXlyaHNMZW5ndGggKHl5b3B0Lnl5cnVsZSk7CiAg
ICAgIFlZUkVTVUxUVEFHIHl5ZmxhZyA9IHl5cmVzb2x2ZVN0YXRlcyAoKnl5b3B0U3RhdGUsIHl5
bnJocyk7CiAgICAgIGlmICh5eWZsYWcgIT0geXlvaykKICAgICAgICB7CiAgICAgICAgICBmb3Ig
KGdscl9zdGF0ZSAqeXlzID0geXlvcHRTdGF0ZTsgeXlucmhzID4gMDsgeXlzID0geXlzLT5wcmVk
KCksIHl5bnJocyAtPSAxKQogICAgICAgICAgICB5eXMtPmRlc3Ryb3kgKCJDbGVhbnVwOiBwb3Bw
aW5nIiwgeXlwYXJzZXIpOwogICAgICAgICAgcmV0dXJuIHl5ZmxhZzsKICAgICAgICB9CgogICAg
ICBnbHJfc3RhY2tfaXRlbSB5eXJoc1ZhbHNbWVlNQVhSSFMgKyBZWU1BWExFRlQgKyAxXTsKICAg
ICAgeXlyaHNWYWxzW1lZTUFYUkhTICsgWVlNQVhMRUZUXS5nZXRTdGF0ZSgpLnNldFByZWQoeXlv
cHQuc3RhdGUoKSk7CiAgICAgIHsKICAgICAgICBzeW1ib2xfdHlwZSB5eWxhX2N1cnJlbnQgPSBz
dGQ6Om1vdmUgKHRoaXMtPnl5bGEpOwogICAgICAgIHRoaXMtPnl5bGEgPSBzdGQ6Om1vdmUgKHl5
b3B0Lnl5bGEpOwogICAgICAgIHl5ZmxhZyA9IHl5dXNlckFjdGlvbiAoeXlvcHQueXlydWxlLCB5
eW5yaHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXJoc1ZhbHMgKyBZWU1BWFJI
UyArIFlZTUFYTEVGVCAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVf
c3RhdGVfc2V0X2luZGV4ICgtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXZh
bHApOwogICAgICAgIHRoaXMtPnl5bGEgPSBzdGQ6Om1vdmUgKHl5bGFfY3VycmVudCk7CiAgICAg
IH0KICAgICAgcmV0dXJuIHl5ZmxhZzsKICAgIH0KCiAgICAvKiogSWYgeXl0b2tlbiBpcyBlbXB0
eSwgZmV0Y2ggdGhlIG5leHQgdG9rZW4uICAqLwogICAgdm9pZAogICAgeXlnZXRfdG9rZW4gKCkK
ICAgIHsKICAgICAgaWYgKHRoaXMtPnl5bGEuZW1wdHkgKCkpCiAgICAgICAgewogICAgICAgICAg
WVlDREVCVUcgPDwgIlJlYWRpbmcgYSB0b2tlblxuIjsKI2lmIFlZX0VYQ0VQVElPTlMKICAgICAg
ICAgIHRyeQojZW5kaWYgLy8gWVlfRVhDRVBUSU9OUwogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgeXlsYS5raW5kXyA9IHl5cGFyc2VyLnl5dHJhbnNsYXRlXyAoeXlsZXggKCZ0aGlzLT55eWxh
LnZhbHVlKSk7CiAgICAgICAgICAgIH0KI2lmIFlZX0VYQ0VQVElPTlMKICAgICAgICAgIGNhdGNo
IChjb25zdCBwYXJzZXJfdHlwZTo6c3ludGF4X2Vycm9yJiB5eWV4YykKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIFlZQ0RFQlVHIDw8ICJDYXVnaHQgZXhjZXB0aW9uOiAiIDw8IHl5ZXhjLndo
YXQgKCkgPDwgJ1xuJzsKICAgICAgICAgICAgICB5eXBhcnNlci5lcnJvciAoeXlleGMud2hhdCAo
KSk7CiAgICAgICAgICAgICAgLy8gTWFwIGVycm9ycyBjYXVnaHQgaW4gdGhlIHNjYW5uZXIgdG8g
dGhlIGVycm9yIHRva2VuLCBzbyB0aGF0IGVycm9yCiAgICAgICAgICAgICAgLy8gaGFuZGxpbmcg
aXMgc3RhcnRlZC4KICAgICAgICAgICAgICB0aGlzLT55eWxhLmtpbmRfID0gc3ltYm9sX2tpbmQ6
OlNfWVllcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KI2VuZGlmIC8vIFlZX0VYQ0VQVElP
TlMKICAgICAgaWYgKHRoaXMtPnl5bGEua2luZCAoKSA9PSBzeW1ib2xfa2luZDo6U19ZWUVPRikK
ICAgICAgICBZWUNERUJVRyA8PCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiI7CiAgICAgIGVsc2UK
ICAgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgdGhpcy0+eXlsYS5raW5k
ICgpLCB0aGlzLT55eWxhLnZhbHVlLCB0aGlzLT55eWxhLmxvY2F0aW9uKTsKICAgIH0KCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpc29uIGdyYW1tYXItdGFibGUgbWFuaXB1
bGF0aW9uLiAgKi8KCiAgICAvKiogVGhlIGFjdGlvbiB0byB0YWtlIGluIFlZU1RBVEUgb24gc2Vl
aW5nIFlZVE9LRU4uCiAgICAgKiAgUmVzdWx0IFIgbWVhbnMKICAgICAqICAgIFIgPCAwOiAgUmVk
dWNlIG9uIHJ1bGUgLVIuCiAgICAgKiAgICBSID0gMDogIEVycm9yLgogICAgICogICAgUiA+IDA6
ICBTaGlmdCB0byBzdGF0ZSBSLgogICAgICogIFNldCAqWVlDT05GTElDVFMgdG8gYSBwb2ludGVy
IGludG8geXljb25mbCB0byBhIDAtdGVybWluYXRlZCBsaXN0CiAgICAgKiAgb2YgY29uZmxpY3Rp
bmcgcmVkdWN0aW9ucy4KICAgICAqLwogICAgc3RhdGljIGludAogICAgeXlnZXRMUkFjdGlvbnMg
KHN0YXRlX251bSB5eXN0YXRlLCBzeW1ib2xfa2luZF90eXBlIHl5dG9rZW4sIGNvbnN0IHNob3J0
KiYgeXljb25mbGljdHMpCiAgICB7CiAgICAgIGludCB5eWluZGV4ID0geXlwYWN0W3l5c3RhdGVd
ICsgeXl0b2tlbjsKICAgICAgaWYgKHl5dG9rZW4gPT0gc3ltYm9sX2tpbmQ6OlNfWVllcnJvcikK
ICAgICAgICB7CiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBlcnJvciB0b2tlbi4KICAgICAgICAg
IHl5Y29uZmxpY3RzID0geXljb25mbDsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAg
ICAgZWxzZSBpZiAoeXlfaXNfZGVmYXVsdGVkX3N0YXRlICh5eXN0YXRlKQogICAgICAgICAgICAg
ICB8fCB5eWluZGV4IDwgMCB8fCBZWUxBU1QgPCB5eWluZGV4IHx8IHl5Y2hlY2tbeXlpbmRleF0g
IT0geXl0b2tlbikKICAgICAgICB7CiAgICAgICAgICB5eWNvbmZsaWN0cyA9IHl5Y29uZmw7CiAg
ICAgICAgICByZXR1cm4gLXl5ZGVmYWN0W3l5c3RhdGVdOwogICAgICAgIH0KICAgICAgZWxzZSBp
ZiAoISB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRhYmxlW3l5aW5kZXhdKSkKICAgICAgICB7
CiAgICAgICAgICB5eWNvbmZsaWN0cyA9IHl5Y29uZmwgKyB5eWNvbmZscFt5eWluZGV4XTsKICAg
ICAgICAgIHJldHVybiB5eXRhYmxlW3l5aW5kZXhdOwogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIHl5Y29uZmxpY3RzID0geXljb25mbCArIHl5Y29uZmxwW3l5aW5kZXhd
OwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIC8qKiBDb21wdXRlIHBv
c3QtcmVkdWN0aW9uIHN0YXRlLgogICAgICogXHBhcmFtIHl5c3RhdGUgICB0aGUgY3VycmVudCBz
dGF0ZQogICAgICogXHBhcmFtIHl5c3ltICAgICB0aGUgbm9udGVybWluYWwgdG8gcHVzaCBvbiB0
aGUgc3RhY2sKICAgICAqLwogICAgc3RhdGljIHN0YXRlX251bQogICAgeXlMUmdvdG9TdGF0ZSAo
c3RhdGVfbnVtIHl5c3RhdGUsIHN5bWJvbF9raW5kX3R5cGUgeXlzeW0pCiAgICB7CiAgICAgIGNv
bnN0IGludCB5eXIgPSB5eXBnb3RvW3l5c3ltIC0gWVlOVE9LRU5TXSArIHl5c3RhdGU7CiAgICAg
IGlmICgwIDw9IHl5ciAmJiB5eXIgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlyXSA9PSB5eXN0YXRl
KQogICAgICAgIHJldHVybiB5eXRhYmxlW3l5cl07CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4g
eXlkZWZnb3RvW3l5c3ltIC0gWVlOVE9LRU5TXTsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAg
eXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHN0YXRlX251bSB5eXN0YXRlKQogICAgewogICAgICBy
ZXR1cm4gKCh5eXN0YXRlKSA9PSBZWVBBQ1RfTklORik7CiAgICB9CgogICAgc3RhdGljIGJvb2wK
ICAgIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKGludCB5eXRhYmxlX3ZhbHVlIFlZX0FUVFJJQlVU
RV9VTlVTRUQpCiAgICB7CiAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAg
ICB5eV9pc19zaGlmdF9hY3Rpb24gKGludCB5eWFjdGlvbikgWVlfTk9FWENFUFQKICAgIHsKICAg
ICAgcmV0dXJuIDAgPCB5eWFjdGlvbjsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgeXlfaXNf
ZXJyb3JfYWN0aW9uIChpbnQgeXlhY3Rpb24pIFlZX05PRVhDRVBUCiAgICB7CiAgICAgIHJldHVy
biB5eWFjdGlvbiA9PSAwOwogICAgfQoKICAgIC8qKiBXaGV0aGVyIExSIHN0YXRlIFlZU1RBVEUg
aGFzIG9ubHkgYSBkZWZhdWx0IHJlZHVjdGlvbgogICAgICogIChyZWdhcmRsZXNzIG9mIHRva2Vu
KS4gICovCiAgICBzdGF0aWMgYm9vbAogICAgeXlfaXNfZGVmYXVsdGVkX3N0YXRlIChzdGF0ZV9u
dW0geXlzdGF0ZSkKICAgIHsKICAgICAgcmV0dXJuIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5
eXBhY3RbeXlzdGF0ZV0pOwogICAgfQoKICAgIC8qKiBUaGUgZGVmYXVsdCByZWR1Y3Rpb24gZm9y
IFlZU1RBVEUsIGFzc3VtaW5nIGl0IGhhcyBvbmUuICAqLwogICAgc3RhdGljIHJ1bGVfbnVtCiAg
ICB5eV9kZWZhdWx0X2FjdGlvbiAoc3RhdGVfbnVtIHl5c3RhdGUpCiAgICB7CiAgICAgIHJldHVy
biB5eWRlZmFjdFt5eXN0YXRlXTsKICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIEdMUlN0YWNrcyAqLwoKICAgIC8qKiBZMCBhbmQgWTEgcmVwcmVzZW50IHR3byBw
b3NzaWJsZSBhY3Rpb25zIHRvIHRha2UgaW4gYSBnaXZlbgogICAgICogIHBhcnNpbmcgc3RhdGU7
IHJldHVybiAwIGlmIG5vIGNvbWJpbmF0aW9uIGlzIHBvc3NpYmxlLAogICAgICogIDEgaWYgdXNl
ci1tZXJnZWFibGUsIDIgaWYgWTAgaXMgcHJlZmVycmVkLCAzIGlmIFkxIGlzIHByZWZlcnJlZC4g
ICovCiAgICBzdGF0aWMgaW50CiAgICB5eXByZWZlcmVuY2UgKGNvbnN0IHNlbWFudGljX29wdGlv
biYgeTAsIGNvbnN0IHNlbWFudGljX29wdGlvbiYgeTEpCiAgICB7CiAgICAgIGNvbnN0IHJ1bGVf
bnVtIHIwID0geTAueXlydWxlLCByMSA9IHkxLnl5cnVsZTsKICAgICAgY29uc3QgaW50IHAwID0g
eXlkcHJlY1tyMF0sIHAxID0geXlkcHJlY1tyMV07CgogICAgICBpZiAocDAgPT0gcDEpCiAgICAg
ICAgewogICAgICAgICAgaWYgKHl5bWVyZ2VyW3IwXSA9PSAwIHx8IHl5bWVyZ2VyW3IwXSAhPSB5
eW1lcmdlcltyMV0pCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKHAwID09IDAgfHwgcDEgPT0g
MCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZWxzZSBpZiAocDAgPCBwMSkKICAgICAgICByZXR1
cm4gMzsKICAgICAgZWxzZSBpZiAocDEgPCBwMCkKICAgICAgICByZXR1cm4gMjsKICAgICAgZWxz
ZQogICAgICAgIHJldHVybiAwOwogICAgfQoKCiAgfTsgLy8gY2xhc3MgcGFyc2VyOjpnbHJfc3Rh
Y2sKfSAvLyBuYW1lc3BhY2UgeXkKCgojaWYgWVlERUJVRwpuYW1lc3BhY2UKewogIHZvaWQKICB5
eXBzdGFjayAoY29uc3QgZ2xyX3N0YWNrJiB5eXN0YWNrLCBzaXplX3QgeXlrKQogIHsKICAgIHl5
c3RhY2sueXlwc3RhY2sgKGNyZWF0ZV9zdGF0ZV9zZXRfaW5kZXggKHN0YXRpY19jYXN0PHN0ZDo6
cHRyZGlmZl90PiAoeXlrKSkpOwogIH0KCiAgdm9pZAogIHl5cGR1bXBzdGFjayAoY29uc3QgZ2xy
X3N0YWNrJiB5eXN0YWNrKQogIHsKICAgIHl5c3RhY2sueXlwZHVtcHN0YWNrICgpOwogIH0KfQoj
ZW5kaWYKCm5hbWVzcGFjZSB5eSB7CiNsaW5lIDMyMTkgImdsci1yZWdyMTYuY2MiCgogIC8vLyBC
dWlsZCBhIHBhcnNlciBvYmplY3QuCiAgcGFyc2VyOjpwYXJzZXIgKCkKI2lmIFlZREVCVUcKICAg
ICA6eXljZGVidWdfICgmc3RkOjpjZXJyKQojZW5kaWYKICB7fQoKICBwYXJzZXI6On5wYXJzZXIg
KCkKICB7fQoKICBwYXJzZXI6OnN5bnRheF9lcnJvcjo6fnN5bnRheF9lcnJvciAoKSBZWV9OT0VY
Q0VQVCBZWV9OT1RIUk9XCiAge30KCiAgaW50CiAgcGFyc2VyOjpvcGVyYXRvcigpICgpCiAgewog
ICAgcmV0dXJuIHBhcnNlICgpOwogIH0KCiAgaW50CiAgcGFyc2VyOjpwYXJzZSAoKQogIHsKICAg
IGdscl9zdGFjayB5eXN0YWNrKFlZSU5JVERFUFRILCAqdGhpcyk7CiAgICByZXR1cm4geXlzdGFj
ay5wYXJzZSAoKTsKICB9CgojaWYgWVlERUJVRyB8fCAwCiAgY29uc3QgY2hhciAqCiAgcGFyc2Vy
OjpzeW1ib2xfbmFtZSAoc3ltYm9sX2tpbmRfdHlwZSB5eXN5bWJvbCkKICB7CiAgICByZXR1cm4g
eXl0bmFtZV9beXlzeW1ib2xdOwogIH0KI2VuZGlmIC8vICNpZiBZWURFQlVHIHx8IDAKCgojaWYg
WVlERUJVRwogIC8vIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5
bWJvbCBTWU1CT0wtTlVNLgogIC8vIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGlu
ZyBhdCBcYSBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4KICBjb25zdCBjaGFyKgogIGNvbnN0IHBh
cnNlcjo6eXl0bmFtZV9bXSA9CiAgewogICJcImVuZCBvZiBmaWxlXCIiLCAiZXJyb3IiLCAiXCJp
bnZhbGlkIHRva2VuXCIiLCAiJ2InIiwgIidhJyIsCiAgIiRhY2NlcHQiLCAic3RhcnQiLCAiYWx0
MSIsICJhbHQyIiwgWVlfTlVMTFBUUgogIH07CiNlbmRpZgoKCgoKCgogIHZvaWQKICBwYXJzZXI6
Onl5X2Rlc3Ryb3lfIChjb25zdCBjaGFyKiB5eW1zZywgc3ltYm9sX2tpbmRfdHlwZSB5eWtpbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUmIHl5dmFsKQogIHsKICAgIFlZ
X1VTRSAoeXl2YWwpOwogICAgaWYgKCF5eW1zZykKICAgICAgeXltc2cgPSAiRGVsZXRpbmciOwog
ICAgcGFyc2VyJiB5eXBhcnNlciA9ICp0aGlzOwogICAgWVlfVVNFICh5eXBhcnNlcik7CiAgICBZ
WV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eWtpbmQsIHl5dmFsLCB5eWxvYyk7CgogICAgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KICAgIHN3aXRjaCAoeXlraW5kKQogICAgewog
ICAgICBjYXNlIHN5bWJvbF9raW5kOjpTXzNfYl86IC8vICdiJwojbGluZSAxNyAiZ2xyLXJlZ3Ix
Ni55IgogICAgICAgICAgICAgICAgICAgIHsgbG9va2FoZWFkX3ZhbHVlID0gMDsgfQojbGluZSAz
Mjg5ICJnbHItcmVncjE2LmNjIgogICAgICAgIGJyZWFrOwoKICAgICAgZGVmYXVsdDoKICAgICAg
ICBicmVhazsKICAgIH0KICAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAogIH0K
CiNpZiBZWURFQlVHCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS4KICB8IFByaW50IHRoaXMgc3lt
Ym9sLiAgfAogIGAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogIHZvaWQKICBwYXJzZXI6Onl5X3N5
bWJvbF92YWx1ZV9wcmludF8gKHN5bWJvbF9raW5kX3R5cGUgeXlraW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2YWx1ZV90eXBlJiB5eXZhbCkgY29uc3QKICB7CiAgICBZWV9V
U0UgKHl5dmFsKTsKICAgIHN0ZDo6b3N0cmVhbSYgeXlvID0gZGVidWdfc3RyZWFtICgpOwogICAg
WVlfVVNFICh5eW8pOwogICAgWVlfVVNFICh5eWtpbmQpOwogIH0KCiAgdm9pZAogIHBhcnNlcjo6
eXlfc3ltYm9sX3ByaW50XyAoc3ltYm9sX2tpbmRfdHlwZSB5eWtpbmQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5cGUmIHl5dmFsKSBjb25zdAogIHsKICAgICp5eWNk
ZWJ1Z18gPDwgKHl5a2luZCA8IFlZTlRPS0VOUyA/ICJ0b2tlbiIgOiAibnRlcm0iKQogICAgICAg
ICAgICAgICA8PCAnICcgPDwgc3ltYm9sX25hbWUgKHl5a2luZCkgPDwgIiAoIjsKICAgIHl5X3N5
bWJvbF92YWx1ZV9wcmludF8gKHl5a2luZCwgeXl2YWwpOwogICAgKnl5Y2RlYnVnXyA8PCAnKSc7
CiAgfQoKICBzdGQ6Om9zdHJlYW0mCiAgcGFyc2VyOjpkZWJ1Z19zdHJlYW0gKCkgY29uc3QKICB7
CiAgICByZXR1cm4gKnl5Y2RlYnVnXzsKICB9CgogIHZvaWQKICBwYXJzZXI6OnNldF9kZWJ1Z19z
dHJlYW0gKHN0ZDo6b3N0cmVhbSYgbykKICB7CiAgICB5eWNkZWJ1Z18gPSAmbzsKICB9CgoKICBw
YXJzZXI6OmRlYnVnX2xldmVsX3R5cGUKICBwYXJzZXI6OmRlYnVnX2xldmVsICgpIGNvbnN0CiAg
ewogICAgcmV0dXJuIHl5ZGVidWc7CiAgfQoKICB2b2lkCiAgcGFyc2VyOjpzZXRfZGVidWdfbGV2
ZWwgKGRlYnVnX2xldmVsX3R5cGUgbCkKICB7CiAgICAvLyBBY3R1YWxseSwgaXQgaXMgeXlkZWJ1
ZyB3aGljaCBpcyByZWFsbHkgdXNlZC4KICAgIHl5ZGVidWcgPSBsOwogIH0KI2VuZGlmIC8vIFlZ
REVCVUcKCiAgcGFyc2VyOjpzeW1ib2xfa2luZF90eXBlCiAgcGFyc2VyOjp5eXRyYW5zbGF0ZV8g
KGludCB0KSBZWV9OT0VYQ0VQVAogIHsKICAgIC8vIFlZVFJBTlNMQVRFW1RPS0VOLU5VTV0gLS0g
U3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCiAgICAvLyBUT0tFTi1OVU0gYXMgcmV0dXJu
ZWQgYnkgeXlsZXguCiAgICBzdGF0aWMKICAgIGNvbnN0IHNpZ25lZCBjaGFyCiAgICB0cmFuc2xh
dGVfdGFibGVbXSA9CiAgICB7CiAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMs
ICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAog
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCiAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAogICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMSwgICAgIDIKICAgIH07CiAgICAvLyBMYXN0IHZhbGlkIHRva2VuIGtpbmQu
CiAgICBjb25zdCBpbnQgY29kZV9tYXggPSAyNTc7CgogICAgaWYgKHQgPD0gMCkKICAgICAgcmV0
dXJuIHN5bWJvbF9raW5kOjpTX1lZRU9GOwogICAgZWxzZSBpZiAodCA8PSBjb2RlX21heCkKICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0IDxzeW1ib2xfa2luZF90eXBlPiAodHJhbnNsYXRlX3RhYmxl
W3RdKTsKICAgIGVsc2UKICAgICAgcmV0dXJuIHN5bWJvbF9raW5kOjpTX1lZVU5ERUY7CiAgfQoK
CgogIC8qLS0tLS0tLS0tLgogIHwgc3ltYm9sLiAgfAogIGAtLS0tLS0tLS0qLwogIC8vIGJhc2lj
X3N5bWJvbC4KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4KICBwYXJzZXI6OmJhc2ljX3N5bWJv
bDxCYXNlPjo6YmFzaWNfc3ltYm9sIChjb25zdCBiYXNpY19zeW1ib2wmIHRoYXQpCiAgICA6IEJh
c2UgKHRoYXQpCiAgICAsIHZhbHVlICh0aGF0LnZhbHVlKQogIHt9CgoKICAvLy8gQ29uc3RydWN0
b3IgZm9yIHZhbHVlbGVzcyBzeW1ib2xzLgogIHRlbXBsYXRlIDx0eXBlbmFtZSBCYXNlPgogIHBh
cnNlcjo6YmFzaWNfc3ltYm9sPEJhc2U+OjpiYXNpY19zeW1ib2wgKHR5cGVuYW1lIEJhc2U6Omtp
bmRfdHlwZSB0KQogICAgOiBCYXNlICh0KQogICAgLCB2YWx1ZSAoKQogIHt9CgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBCYXNlPgogIHBhcnNlcjo6YmFzaWNfc3ltYm9sPEJhc2U+OjpiYXNpY19zeW1i
b2wgKHR5cGVuYW1lIEJhc2U6OmtpbmRfdHlwZSB0LCBZWV9SVlJFRiAodmFsdWVfdHlwZSkgdikK
ICAgIDogQmFzZSAodCkKICAgICwgdmFsdWUgKFlZX01PVkUgKHYpKQogIHt9CgoKCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJhc2U+CiAgYm9vbAogIHBhcnNlcjo6YmFzaWNfc3ltYm9sPEJhc2U+Ojpl
bXB0eSAoKSBjb25zdCBZWV9OT0VYQ0VQVAogIHsKICAgIHJldHVybiB0aGlzLT5raW5kICgpID09
IHN5bWJvbF9raW5kOjpTX1lZRU1QVFk7CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4K
ICB2b2lkCiAgcGFyc2VyOjpiYXNpY19zeW1ib2w8QmFzZT46Om1vdmUgKGJhc2ljX3N5bWJvbCYg
cykKICB7CiAgICBzdXBlcl90eXBlOjptb3ZlIChzKTsKICAgIHZhbHVlID0gWVlfTU9WRSAocy52
YWx1ZSk7CiAgfQoKICAvLyBieV9raW5kLgogIHBhcnNlcjo6Ynlfa2luZDo6Ynlfa2luZCAoKSBZ
WV9OT0VYQ0VQVAogICAgOiBraW5kXyAoc3ltYm9sX2tpbmQ6OlNfWVlFTVBUWSkKICB7fQoKI2lm
IDIwMTEwM0wgPD0gWVlfQ1BMVVNQTFVTCiAgcGFyc2VyOjpieV9raW5kOjpieV9raW5kIChieV9r
aW5kJiYgdGhhdCkgWVlfTk9FWENFUFQKICAgIDoga2luZF8gKHRoYXQua2luZF8pCiAgewogICAg
dGhhdC5jbGVhciAoKTsKICB9CiNlbmRpZgoKICBwYXJzZXI6OmJ5X2tpbmQ6OmJ5X2tpbmQgKGNv
bnN0IGJ5X2tpbmQmIHRoYXQpIFlZX05PRVhDRVBUCiAgICA6IGtpbmRfICh0aGF0LmtpbmRfKQog
IHt9CgogIHBhcnNlcjo6Ynlfa2luZDo6Ynlfa2luZCAodG9rZW5fa2luZF90eXBlIHQpIFlZX05P
RVhDRVBUCiAgICA6IGtpbmRfICh5eXRyYW5zbGF0ZV8gKHQpKQogIHt9CgoKICBwYXJzZXI6OmJ5
X2tpbmQmCiAgcGFyc2VyOjpieV9raW5kOjpieV9raW5kOjpvcGVyYXRvcj0gKGNvbnN0IGJ5X2tp
bmQmIHRoYXQpCiAgewogICAga2luZF8gPSB0aGF0LmtpbmRfOwogICAgcmV0dXJuICp0aGlzOwog
IH0KCiAgcGFyc2VyOjpieV9raW5kJgogIHBhcnNlcjo6Ynlfa2luZDo6Ynlfa2luZDo6b3BlcmF0
b3I9IChieV9raW5kJiYgdGhhdCkKICB7CiAgICBraW5kXyA9IHRoYXQua2luZF87CiAgICB0aGF0
LmNsZWFyICgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgogIHZvaWQKICBwYXJzZXI6OmJ5X2tp
bmQ6OmNsZWFyICgpIFlZX05PRVhDRVBUCiAgewogICAga2luZF8gPSBzeW1ib2xfa2luZDo6U19Z
WUVNUFRZOwogIH0KCiAgdm9pZAogIHBhcnNlcjo6Ynlfa2luZDo6bW92ZSAoYnlfa2luZCYgdGhh
dCkKICB7CiAgICBraW5kXyA9IHRoYXQua2luZF87CiAgICB0aGF0LmNsZWFyICgpOwogIH0KCiAg
cGFyc2VyOjpzeW1ib2xfa2luZF90eXBlCiAgcGFyc2VyOjpieV9raW5kOjpraW5kICgpIGNvbnN0
IFlZX05PRVhDRVBUCiAgewogICAgcmV0dXJuIGtpbmRfOwogIH0KCgoKfSAvLyB5eQojbGluZSAz
NTAwICJnbHItcmVncjE2LmNjIgojbGluZSAzMyAiZ2xyLXJlZ3IxNi55IgoKCi8qIEEgQysrIGVy
cm9yIHJlcG9ydGluZyBmdW5jdGlvbi4gICovCnZvaWQKeXk6OnBhcnNlcjo6ZXJyb3IgKGNvbnN0
IHN0ZDo6c3RyaW5nJiBtKQp7CiAgc3RkOjpjZXJyIDw8IG0gPDwgJ1xuJzsKfQoKc3RhdGljIGlu
dAp5eXBhcnNlICgpCnsKICB5eTo6cGFyc2VyIHA7CiAgcmV0dXJuIHAucGFyc2UgKCk7Cn0KCiNp
bmNsdWRlIDxhc3NlcnQuaD4Kc3RhdGljCmludCB5eWxleCAoeXk6OnBhcnNlcjo6dmFsdWVfdHlw
ZSAqbHZhbHApCnsKICBzdGF0aWMgY2hhciBjb25zdCBpbnB1dFtdID0gImFiIjsKICBzdGF0aWMg
aW50IHRva251bSA9IDA7CiAgaW50IHJlczsKICAodm9pZCkgbHZhbHA7CiAgZW51bSB7IGlucHV0
X2VsdHMgPSBzaXplb2YgaW5wdXQgLyBzaXplb2YgaW5wdXRbMF0gfTsKICAodm9pZCkgaW5wdXRf
ZWx0czsKICBhc3NlcnQgKDAgPD0gdG9rbnVtICYmIHRva251bSA8IGlucHV0X2VsdHMpOwogIHJl
cyA9IGlucHV0W3Rva251bSsrXTsKICBpZiAocmVzID09ICdiJykKICAgIGxvb2thaGVhZF92YWx1
ZSA9IDE7CgogIHJldHVybiByZXM7Cn0KCmludAptYWluICh2b2lkKQp7CiAgaW50IHN0YXR1czsK
ICBpZiAoZ2V0ZW52ICgiWVlERUJVRyIpKQogICAgeXlkZWJ1ZyA9IDE7CiAgc3RhdHVzID0geXlw
YXJzZSAoKSAhPSAxOwogIGlmIChsb29rYWhlYWRfdmFsdWUpCiAgICB7CiAgICAgIGZwcmludGYg
KHN0ZGVyciwgIkxvb2thaGVhZCBkZXN0cnVjdG9yIG5vdCBjYWxsZWQuXG4iKTsKICAgICAgc3Rh
dHVzID0gMTsKICAgIH0KICByZXR1cm4gc3RhdHVzOwp9Cg==
--0000000000002d3a0d0646ba051b
Content-Type: application/octet-stream; name=run
Content-Disposition: attachment; filename=run
Content-Transfer-Encoding: base64
Content-ID: <f_mjkkk35r4>
X-Attachment-Id: f_mjkkk35r4

IyEgL2Jpbi9zaAp0ZXN0ICR7WlNIX1ZFUlNJT04reX0gJiYgYWxpYXMgLWcgJyR7MSsiJEAifSc9
JyIkQCInCmNkICcvbml4L3Zhci9uaXgvYnVpbGRzL25peC0zMzE1Mi00NzQ3ODQ1MjMvYmlzb24t
My44LjIvdGVzdHMnCmV4ZWMgJHtDT05GSUdfU0hFTEwtL25peC9zdG9yZS9jdjZqdjhoOXJidjZn
eDhrNGhhcWJpcXY3MnhiM2Ewcy1iYXNoLTUuM3AzL2Jpbi9iYXNofSAiL25peC92YXIvbml4L2J1
aWxkcy9uaXgtMzMxNTItNDc0Nzg0NTIzL2Jpc29uLTMuOC4yLy4vdGVzdHMvdGVzdHN1aXRlIiAt
diAtZCAgQVVUT1RFU1RfUEFUSD0nL25peC9zdG9yZS85amw0OWlhYmttM3psYjM0ZjN4cWpka3Nh
dmtybGd6bC1iaXNvbi0zLjguMi9iaW4nIDc2NCAkezErIiRAIn0KZXhpdCAxCg==
--0000000000002d3a0d0646ba051b
Content-Type: application/octet-stream; name="glr-regr16.output"
Content-Disposition: attachment; filename="glr-regr16.output"
Content-Transfer-Encoding: base64
Content-ID: <f_mjkkk35l2>
X-Attachment-Id: f_mjkkk35l2

VGVybWluYWxzIHVudXNlZCBpbiBncmFtbWFyCgogICAgJ2InCgoKU3RhdGUgMCBjb25mbGljdHM6
IDEgcmVkdWNlL3JlZHVjZQoKCkdyYW1tYXIKCiAgICAwICRhY2NlcHQ6IHN0YXJ0ICRlbmQKCiAg
ICAxIHN0YXJ0OiBhbHQxICdhJwogICAgMiAgICAgIHwgYWx0MiAnYScKCiAgICAzIGFsdDE6ICVl
bXB0eQoKICAgIDQgYWx0MjogJWVtcHR5CgoKVGVybWluYWxzLCB3aXRoIHJ1bGVzIHdoZXJlIHRo
ZXkgYXBwZWFyCgogICAgJGVuZCAoMCkgMAogICAgJ2EnICg5NykgMSAyCiAgICAnYicgKDk4KQog
ICAgZXJyb3IgKDI1NikKCgpOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBl
YXIKCiAgICAkYWNjZXB0ICg1KQogICAgICAgIG9uIGxlZnQ6IDAKICAgIHN0YXJ0ICg2KQogICAg
ICAgIG9uIGxlZnQ6IDEgMgogICAgICAgIG9uIHJpZ2h0OiAwCiAgICBhbHQxICg3KQogICAgICAg
IG9uIGxlZnQ6IDMKICAgICAgICBvbiByaWdodDogMQogICAgYWx0MiAoOCkKICAgICAgICBvbiBs
ZWZ0OiA0CiAgICAgICAgb24gcmlnaHQ6IDIKCgpTdGF0ZSAwCgogICAgMCAkYWNjZXB0OiAuIHN0
YXJ0ICRlbmQKICAgIDEgc3RhcnQ6IC4gYWx0MSAnYScKICAgIDIgICAgICB8IC4gYWx0MiAnYScK
ICAgIDMgYWx0MTogJWVtcHR5IC4gIFsnYSddCiAgICA0IGFsdDI6ICVlbXB0eSAuICBbJ2EnXQoK
ICAgICdhJyAgICAgICByZWR1Y2UgdXNpbmcgcnVsZSAzIChhbHQxKQogICAgJ2EnICAgICAgIFty
ZWR1Y2UgdXNpbmcgcnVsZSA0IChhbHQyKV0KICAgICRkZWZhdWx0ICByZWR1Y2UgdXNpbmcgcnVs
ZSAzIChhbHQxKQoKICAgIHN0YXJ0ICBnbyB0byBzdGF0ZSAxCiAgICBhbHQxICAgZ28gdG8gc3Rh
dGUgMgogICAgYWx0MiAgIGdvIHRvIHN0YXRlIDMKCiAgICByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0
IG9uIHRva2VuICdhJzoKICAgICAgICAzIGFsdDE6ICVlbXB0eSAuCiAgICAgICAgNCBhbHQyOiAl
ZW1wdHkgLgogICAgICBFeGFtcGxlOiAuICdhJwogICAgICBGaXJzdCByZWR1Y2UgZGVyaXZhdGlv
bgogICAgICAgIHN0YXJ0CiAgICAgICAgYC0+IDE6IGFsdDEgICAgICAgICAgICAnYScKICAgICAg
ICAgICAgICAgYC0+IDM6ICVlbXB0eSAuCiAgICAgIFNlY29uZCByZWR1Y2UgZGVyaXZhdGlvbgog
ICAgICAgIHN0YXJ0CiAgICAgICAgYC0+IDI6IGFsdDIgICAgICAgICAgICAnYScKICAgICAgICAg
ICAgICAgYC0+IDQ6ICVlbXB0eSAuCgoKClN0YXRlIDEKCiAgICAwICRhY2NlcHQ6IHN0YXJ0IC4g
JGVuZAoKICAgICRlbmQgIHNoaWZ0LCBhbmQgZ28gdG8gc3RhdGUgNAoKClN0YXRlIDIKCiAgICAx
IHN0YXJ0OiBhbHQxIC4gJ2EnCgogICAgJ2EnICBzaGlmdCwgYW5kIGdvIHRvIHN0YXRlIDUKCgpT
dGF0ZSAzCgogICAgMiBzdGFydDogYWx0MiAuICdhJwoKICAgICdhJyAgc2hpZnQsIGFuZCBnbyB0
byBzdGF0ZSA2CgoKU3RhdGUgNAoKICAgIDAgJGFjY2VwdDogc3RhcnQgJGVuZCAuCgogICAgJGRl
ZmF1bHQgIGFjY2VwdAoKClN0YXRlIDUKCiAgICAxIHN0YXJ0OiBhbHQxICdhJyAuCgogICAgJGRl
ZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDEgKHN0YXJ0KQoKClN0YXRlIDYKCiAgICAyIHN0YXJ0
OiBhbHQyICdhJyAuCgogICAgJGRlZmF1bHQgIHJlZHVjZSB1c2luZyBydWxlIDIgKHN0YXJ0KQo=
--0000000000002d3a0d0646ba051b
Content-Type: application/octet-stream; name="glr-regr16.y"
Content-Disposition: attachment; filename="glr-regr16.y"
Content-Transfer-Encoding: base64
Content-ID: <f_mjkkk35o3>
X-Attachment-Id: f_mjkkk35o3

JWNvZGUgdG9wIHsgLyogLSotIGMrKyAtKi0gKi8KLyogQWRqdXN0IHRvIHRoZSBjb21waWxlci4K
ICBXZSB1c2VkIHRvIGRvIGl0IGhlcmUsIGJ1dCBlYWNoIHRpbWUgd2UgYWRkIGEgbmV3IGxpbmUs
CiAgd2UgaGF2ZSB0byBhZGp1c3QgYWxsIHRoZSBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2Fn
ZXMuCiAgSXQncyBzaW1wbGVyIHRvIHVzZSBhIGNvbnN0YW50IGluY2x1ZGUgdG8gYSB2YXJ5aW5n
IGZpbGUuICAqLwojaW5jbHVkZSA8dGVzdHN1aXRlLmg+Cn0KCgolZGVmaW5lIHBhcnNlLmFzc2Vy
dAolZGVmaW5lIHBhcnNlLnRyYWNlCiVnbHItcGFyc2VyCiVleHBlY3QgMAolZXhwZWN0LXJyIDEK
JXNrZWxldG9uICJnbHIyLmNjIgoKJWRlc3RydWN0b3IgeyBsb29rYWhlYWRfdmFsdWUgPSAwOyB9
ICdiJwoKJWNvZGUgewojIGluY2x1ZGUgPGFzc2VydC5oPgoKICBzdGF0aWMgaW50IHl5bGV4ICh5
eTo6cGFyc2VyOjp2YWx1ZV90eXBlICpsdmFscCk7CiAgc3RhdGljIGludCBsb29rYWhlYWRfdmFs
dWUgPSAwOwojIGRlZmluZSBVU0UodmFsKQp9CgolJQoKc3RhcnQ6IGFsdDEgJ2EnIHwgYWx0MiAn
YScgOwphbHQxOiA7CmFsdDI6IDsKCiUlCgovKiBBIEMrKyBlcnJvciByZXBvcnRpbmcgZnVuY3Rp
b24uICAqLwp2b2lkCnl5OjpwYXJzZXI6OmVycm9yIChjb25zdCBzdGQ6OnN0cmluZyYgbSkKewog
IHN0ZDo6Y2VyciA8PCBtIDw8ICdcbic7Cn0KCnN0YXRpYyBpbnQKeXlwYXJzZSAoKQp7CiAgeXk6
OnBhcnNlciBwOwogIHJldHVybiBwLnBhcnNlICgpOwp9CgojaW5jbHVkZSA8YXNzZXJ0Lmg+CnN0
YXRpYwppbnQgeXlsZXggKHl5OjpwYXJzZXI6OnZhbHVlX3R5cGUgKmx2YWxwKQp7CiAgc3RhdGlj
IGNoYXIgY29uc3QgaW5wdXRbXSA9ICJhYiI7CiAgc3RhdGljIGludCB0b2tudW0gPSAwOwogIGlu
dCByZXM7CiAgKHZvaWQpIGx2YWxwOwogIGVudW0geyBpbnB1dF9lbHRzID0gc2l6ZW9mIGlucHV0
IC8gc2l6ZW9mIGlucHV0WzBdIH07CiAgKHZvaWQpIGlucHV0X2VsdHM7CiAgYXNzZXJ0ICgwIDw9
IHRva251bSAmJiB0b2tudW0gPCBpbnB1dF9lbHRzKTsKICByZXMgPSBpbnB1dFt0b2tudW0rK107
CiAgaWYgKHJlcyA9PSAnYicpCiAgICBsb29rYWhlYWRfdmFsdWUgPSAxOwoKICByZXR1cm4gcmVz
Owp9CgppbnQKbWFpbiAodm9pZCkKewogIGludCBzdGF0dXM7CiAgaWYgKGdldGVudiAoIllZREVC
VUciKSkKICAgIHl5ZGVidWcgPSAxOwogIHN0YXR1cyA9IHl5cGFyc2UgKCkgIT0gMTsKICBpZiAo
bG9va2FoZWFkX3ZhbHVlKQogICAgewogICAgICBmcHJpbnRmIChzdGRlcnIsICJMb29rYWhlYWQg
ZGVzdHJ1Y3RvciBub3QgY2FsbGVkLlxuIik7CiAgICAgIHN0YXR1cyA9IDE7CiAgICB9CiAgcmV0
dXJuIHN0YXR1czsKfQo=
--0000000000002d3a0d0646ba051b
Content-Type: application/octet-stream; name=stderr
Content-Disposition: attachment; filename=stderr
Content-Transfer-Encoding: base64
Content-ID: <f_mjkkk35u5>
X-Attachment-Id: f_mjkkk35u5

c3ludGF4IGVycm9yCg==
--0000000000002d3a0d0646ba051b
Content-Type: application/octet-stream; name="testsuite.log"
Content-Disposition: attachment; filename="testsuite.log"
Content-Transfer-Encoding: base64
Content-ID: <f_mjkkk35y6>
X-Attachment-Id: f_mjkkk35y6

IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIGNvbXBpbGF0aW9uIC0qLQo3NjQuIGds
ci1yZWdyZXNzaW9uLmF0OjE4NjI6IHRlc3RpbmcgTGVha2VkIGxvb2thaGVhZCBhZnRlciBub25k
ZXRlcm1pbmlzdGljIHBhcnNlIHN5bnRheCBlcnJvcjogZ2xyMi5jYyAuLi4KLi9nbHItcmVncmVz
c2lvbi5hdDoxODYyOiBDT0xVTU5TPTEwMDA7IGV4cG9ydCBDT0xVTU5TOyBOT19URVJNX0hZUEVS
TElOS1M9MTsgZXhwb3J0IE5PX1RFUk1fSFlQRVJMSU5LUzsgIGJpc29uIC0tY29sb3I9bm8gLWZu
by1jYXJldCAtcmFsbCAtbyBnbHItcmVncjE2LmNjIGdsci1yZWdyMTYueQouL2dsci1yZWdyZXNz
aW9uLmF0OjE4NjI6ICRDWFggJENQUEZMQUdTICRDWFgxMV9DWFhGTEFHUyAkQ1hYRkxBR1MgJExE
RkxBR1MgLW8gZ2xyLXJlZ3IxNiBnbHItcmVncjE2LmNjICRMSUJTCnN0ZGVycjoKc3Rkb3V0Ogou
L2dsci1yZWdyZXNzaW9uLmF0OjE4NjI6ICAkUFJFUEFSU0VSIC4vZ2xyLXJlZ3IxNgovbml4L3Zh
ci9uaXgvYnVpbGRzL25peC0zMzE1Mi00NzQ3ODQ1MjMvYmlzb24tMy44LjIvdGVzdHMvdGVzdHN1
aXRlLmRpci9hdC1ncm91cHMvNzY0L3Rlc3Qtc291cmNlOiBsaW5lIDI1MTogMjE4NzMgVHJhY2Uv
QlBUIHRyYXA6IDUgICAgICAgICAgKCAkYXRfY2hlY2tfdHJhY2U7ICRQUkVQQVJTRVIgLi9nbHIt
cmVncjE2ICkgPj4gIiRhdF9zdGRvdXQiIDI+PiAiJGF0X3N0ZGVyciIgNT4mLQpzdGRlcnI6CnN5
bnRheCBlcnJvcgouL2dsci1yZWdyZXNzaW9uLmF0OjE4NjI6IGV4aXQgY29kZSB3YXMgMTMzLCBl
eHBlY3RlZCAwCjc2NC4gZ2xyLXJlZ3Jlc3Npb24uYXQ6MTg2MjogNzY0LiBMZWFrZWQgbG9va2Fo
ZWFkIGFmdGVyIG5vbmRldGVybWluaXN0aWMgcGFyc2Ugc3ludGF4IGVycm9yOiBnbHIyLmNjIChn
bHItcmVncmVzc2lvbi5hdDoxODYyKTogRkFJTEVEIChnbHItcmVncmVzc2lvbi5hdDoxODYyKQo=
--0000000000002d3a0d0646ba051b--