<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>202685</bug_id>
          
          <creation_ts>2007-12-18 12:12 0000</creation_ts>
          <short_desc>sci-vizualization/paraview-3.2.1: add OpenFoam support</short_desc>
          <delta_ts>2008-01-15 13:56:14 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Ebuilds</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>oli.borm@web.de</reporter>
          <assigned_to>markusle@gentoo.org</assigned_to>
          <cc>daniel.tourde@bredband.net</cc>
    
    <cc>daniel.tourde@caelae.se</cc>
    
    <cc>sci@gentoo.org</cc>
    
    <cc>ted@foi.se</cc>
    
    <cc>Zeliboba@mail.ru</cc>

      

      
          <long_desc isprivate="0">
            <who>oli.borm@web.de</who>
            <bug_when>2007-12-18 12:12:30 0000</bug_when>
            <thetext>Since the update to version 3.2.1 of Paraview I&apos;m not able to use the native
OpenFOAM Readers in Paraview. So please add the patches to the ebuild.
Thank&apos;s!

Reproducible: Always</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>oli.borm@web.de</who>
            <bug_when>2007-12-18 12:13:03 0000</bug_when>
            <thetext>Created an attachment (id=138810)
OpenFOAM Reader patch

To activate the build in capabilities of Paraview for OpenFOAM Files, this
patch is needed at compile time. Maybe this can be activated with an USE Flag,
so that my ebuild from bug 104257 has an postprocessing tool. The built-in
capabilities of Paraview were selected as default in version 2.6.2.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>oli.borm@web.de</who>
            <bug_when>2007-12-18 12:13:56 0000</bug_when>
            <thetext>Created an attachment (id=138812)
Patch for the OpenFOAM Reader

This patch improves the built-in capabilities from Paraview for the OpenFOAM
Datastructure very much. I would highly recommend to add this patch to the
ebuild, if the openfoam support is compiled with.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>markusle@gentoo.org</who>
            <bug_when>2007-12-19 15:08:30 0000</bug_when>
            <thetext>Hi Oliver,

Thanks much for your patches and I&apos;ll try to have a look at them 
as soon as I find some time.

Best,
Markus</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>ted@foi.se</who>
            <bug_when>2007-12-19 15:12:47 0000</bug_when>
            <thetext>Markus,

In the meantime are you aware that Oliver put an ebuild for OpenFoam on the sunrise overlay? I used the ebuild and it built the beast (and the beast seems to be alive and kicking...)... Maybe time to try to include OpenFoam to the main gentoo tree...

Daniel</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>markusle@gentoo.org</who>
            <bug_when>2007-12-19 15:25:06 0000</bug_when>
            <thetext>Hi Daniel,

I am aware of it, but haven&apos;t had time to even look at it yet :(
As soon as I find some time ..... I&apos;ll have a closer look.

cheers,
Markus</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>markusle@gentoo.org</who>
            <bug_when>2008-01-04 11:25:07 0000</bug_when>
            <thetext>Hi Oliver,

I just had some time to look at your patches. 
Since they are quite extensive, would you be
able to comment on where they come from.
It almost seems to me that this is something
that should be reviewed and merged by upstream
rather than by us.

Best,
Markus</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>oli.borm@web.de</who>
            <bug_when>2008-01-04 11:52:47 0000</bug_when>
            <thetext>Hello Markus,

this patches came from the OpenFOAM Mailing list:
http://openfoam.cfd-online.com/cgi-bin/forum/show.cgi?tpc=1&amp;post=17466#POST17466

and since the post from yesterday, it seems that these patches were sent upstream but are not yet in the CVS. I fully agree with you, that these patches should be merged into the official tree. Nevertheless, I would highly recommend to use these patches in version 3.2.1 of the paraview ebuild and I hope we don&apos;t need these patches in further versions of paraview.

Oliver</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>markusle@gentoo.org</who>
            <bug_when>2008-01-05 16:24:38 0000</bug_when>
            <thetext>Hi Oliver,

Thanks much for the link! This indeed looks like a solid
patch hence it should be fine as part of our paraview ebuild
until upstream merges it into their trunk.

I&apos;ve added it to the pareview-3.2.1 ebuild and it should
have hit the mirrors by now. You&apos;ll need to re-sync and 
re-emerge paraview to pull it in.

Lacking any OpenFOAM dataset I have not yet tested it
but the option is there. Please give it a spin and let me know
if it works as expected.

Thanks,
Markus</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>daniel.tourde@bredband.net</who>
            <bug_when>2008-01-05 19:51:13 0000</bug_when>
            <thetext>Markus,

Are you sure you put the patch in the gentoo tree?
When I emerged, I got the new ebuild but not the patch...

Daniel</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>markusle@gentoo.org</who>
            <bug_when>2008-01-06 11:21:25 0000</bug_when>
            <thetext>Daniel,

The patch is on the mirrors not in the files/ directory
due to its size (patches in files/ should be &lt; 30k 
uncompressed). Just look for the line

epatch &quot;${DISTDIR}&quot;/${P}-OpenFOAM.patch.bz2

in the ebuild.

best,
Markus</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>oli.borm@web.de</who>
            <bug_when>2008-01-14 23:32:59 0000</bug_when>
            <thetext>Hello Markus,

I have had a quick look on the new paraview and it seems to work as expected. So I think we can close this bug.

Oliver

BTW: Why don&apos;t you call the new ebuild not paraview-3.2.1-r1 or something like that?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>markusle@gentoo.org</who>
            <bug_when>2008-01-15 13:56:14 0000</bug_when>
            <thetext>The present version works just fine for everybody
not caring about OpenFOAM. Hence, there is no reason
to force a multi-hour compile onto people for a feature
they most likely don&apos;t care about. An -r1 in this case
would be a real bug fix/enhancement that matters for
a significant fraction of people. If paraview would
compile in 5 minutes this would have been a
different story.

Best,
Markus</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138810</attachid>
            <date>2007-12-18 12:13 0000</date>
            <desc>OpenFOAM Reader patch</desc>
            <filename>ParaViewReaders-3.2.1.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIFBhcmFWaWV3My5vcmlnL1F0L0NvbXBvbmVudHMvUmVzb3VyY2VzL1hNTC9QYXJhVmlld1Jl
YWRlcnMueG1sCTIwMDctMTAtMjAgMTU6MDU6NTEuMzA4MDAwMDAwICswOTAwCisrKyBQYXJhVmll
dzMvUXQvQ29tcG9uZW50cy9SZXNvdXJjZXMvWE1ML1BhcmFWaWV3UmVhZGVycy54bWwJMjAwNy0x
MC0xOCAwOTo0Mzo1NS4wMDAwMDAwMDAgKzA5MDAKQEAgLTE3Myw0ICsxNzMsOCBAQAogICAgICAg
ICAgIGZpbGVfZGVzY3JpcHRpb249IkNvbW1hLXNlcGFyYXRlZC12YWx1ZXMiPgogICA8L1JlYWRl
cj4KIAorICA8UmVhZGVyIG5hbWU9Ik9wZW5GT0FNUmVhZGVyIgorICAgICAgICAgIGV4dGVuc2lv
bnM9ImNvbnRyb2xEaWN0IGZvYW0iCisgICAgICAgICAgZmlsZV9kZXNjcmlwdGlvbj0iT3BlbkZP
QU0gRmlsZXMiPgorICA8L1JlYWRlcj4KIDwvUGFyYVZpZXdSZWFkZXJzPgo=
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138812</attachid>
            <date>2007-12-18 12:13 0000</date>
            <desc>Patch for the OpenFOAM Reader</desc>
            <filename>OpenFOAMReader-3.2.1.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIFBhcmFWaWV3My5vcmlnL1NlcnZlcnMvU2VydmVyTWFuYWdlci9SZXNvdXJjZXMvcmVhZGVy
cy54bWwJMjAwNy0xMC0yMCAxNTowNTo1My4zODEwMDAwMDAgKzA5MDAKKysrIFBhcmFWaWV3My9T
ZXJ2ZXJzL1NlcnZlck1hbmFnZXIvUmVzb3VyY2VzL3JlYWRlcnMueG1sCTIwMDctMTAtMjAgMTM6
MzE6MTcuNzMyMDAwMDAwICswOTAwCkBAIC0zNDEyLDYzICszNDEyLDEyMiBAQAogICAgPC9Tb3Vy
Y2VQcm94eT4KIAogICAgIDwhLS0gQmVnaW5uaW5nIG9mIEZPQU0gUmVhZGVyIC0tPgotICAgIDxT
b3VyY2VQcm94eSBuYW1lPSJPcGVuRk9BTVJlYWRlciIgCi0gICAgICAgICAgICAgICAgICAgIGNs
YXNzPSJ2dGtPcGVuRk9BTVJlYWRlciI+Ci0gICAgICA8U3RyaW5nVmVjdG9yUHJvcGVydHkgbmFt
ZT0iRmlsZU5hbWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD0iU2V0Rmls
ZU5hbWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWFibGU9IjAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2VsZW1lbnRzPSIxIj4KLSAgICAgICAg
PEZpbGVMaXN0RG9tYWluIG5hbWU9ImZpbGVzIi8+Ci0gICAgICAgIDxEb2N1bWVudGF0aW9uPgot
ICAgICAgICAgIFNldCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgT3BlbkZPQU0gcmVhZGVyLgotICAg
ICAgICA8L0RvY3VtZW50YXRpb24+Ci0gICAgICA8L1N0cmluZ1ZlY3RvclByb3BlcnR5PgotICAg
ICAgPFN0cmluZ1ZlY3RvclByb3BlcnR5IG5hbWU9IkNlbGxBcnJheUluZm8iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb25fb25seT0iMSI+Ci0gICAgICAgIDxBcnJheVNl
bGVjdGlvbkluZm9ybWF0aW9uSGVscGVyIGF0dHJpYnV0ZV9uYW1lPSJDZWxsIi8+Ci0gICAgICA8
L1N0cmluZ1ZlY3RvclByb3BlcnR5PgotICAgICAgPFN0cmluZ1ZlY3RvclByb3BlcnR5IG5hbWU9
IkNlbGxBcnJheVN0YXR1cyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPSJT
ZXRDZWxsQXJyYXlTdGF0dXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29m
X2VsZW1lbnRzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRfY29tbWFu
ZD0iMSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfZWxlbWVudHNfcGVy
X2NvbW1hbmQ9IjIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF90eXBlcz0i
MiAwIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbl9wcm9wZXJ0eT0i
Q2VsbEFycmF5SW5mbyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iQ2VsbCBB
cnJheXMiPgotICAgICAgICA8QXJyYXlTZWxlY3Rpb25Eb21haW4gbmFtZT0iYXJyYXlfbGlzdCI+
Ci0gICAgICAgICAgPFJlcXVpcmVkUHJvcGVydGllcz4KLSAgICAgICAgICAgIDxQcm9wZXJ0eSBu
YW1lPSJDZWxsQXJyYXlJbmZvIiBmdW5jdGlvbj0iQXJyYXlMaXN0Ii8+Ci0gICAgICAgICAgPC9S
ZXF1aXJlZFByb3BlcnRpZXM+Ci0gICAgICAgIDwvQXJyYXlTZWxlY3Rpb25Eb21haW4+Ci0gICAg
ICAgIDxEb2N1bWVudGF0aW9uPgotICAgICAgICAgIFNlbGVjdCB3aGljaCBjZWxsLWNlbnRlcmVk
IGFycmF5cyB0byByZWFkLgotICAgICAgICA8L0RvY3VtZW50YXRpb24+Ci0gICAgICA8L1N0cmlu
Z1ZlY3RvclByb3BlcnR5PgotICAgICAgPEludFZlY3RvclByb3BlcnR5IG5hbWU9IlRpbWVTdGVw
UmFuZ2VJbmZvIgotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9IkdldFRpbWVTdGVw
UmFuZ2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb25fb25seT0iMSI+Ci0g
ICAgICAgIDxTaW1wbGVJbnRJbmZvcm1hdGlvbkhlbHBlci8+Ci0gICAgICA8L0ludFZlY3RvclBy
b3BlcnR5PgotICAgICAgPEludFZlY3RvclByb3BlcnR5IG5hbWU9IlRpbWVTdGVwIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD0iU2V0VGltZVN0ZXAiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXJfb2ZfZWxlbWVudHM9IjEiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbmltYXRlYWJsZT0iMSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHRfdmFsdWVzPSIwIj4KLSAgICAgICAgPEludFJhbmdlRG9tYWluIG5hbWU9InJhbmdlIj4KLSAg
ICAgICAgICA8UmVxdWlyZWRQcm9wZXJ0aWVzPgotICAgICAgICAgICAgPFByb3BlcnR5IG5hbWU9
IlRpbWVTdGVwUmFuZ2VJbmZvIiBmdW5jdGlvbj0iUmFuZ2UiLz4KLSAgICAgICAgICA8L1JlcXVp
cmVkUHJvcGVydGllcz4KLSAgICAgICAgPC9JbnRSYW5nZURvbWFpbj4KLSAgICAgICAgPERvY3Vt
ZW50YXRpb24+Ci0gICAgICAgICAgU2V0IHRoZSBjdXJyZW50IHRpbWVzdGVwLgotICAgICAgICA8
L0RvY3VtZW50YXRpb24+Ci0gICAgICA8L0ludFZlY3RvclByb3BlcnR5PgotICAgICAgPERvdWJs
ZVZlY3RvclByb3BlcnR5IAotICAgICAgICAgIG5hbWU9IlRpbWVzdGVwVmFsdWVzIgotICAgICAg
ICAgIHJlcGVhdGFibGU9IjEiCi0gICAgICAgICAgaW5mb3JtYXRpb25fb25seT0iMSI+Ci0gICAg
ICAgIDxUaW1lU3RlcHNJbmZvcm1hdGlvbkhlbHBlci8+Ci0gICAgICA8L0RvdWJsZVZlY3RvclBy
b3BlcnR5PgorICAgIDxTb3VyY2VQcm94eQorCisgICAgICAgIG5hbWU9Ik9wZW5GT0FNUmVhZGVy
IiAKKyAgICAgICAgY2xhc3M9InZ0a09wZW5GT0FNUmVhZGVyIgorCW91dHB1dD0idnRrRGF0YVNl
dCI+CisKKyAgICAgICA8U3RyaW5nVmVjdG9yUHJvcGVydHkKKyAgICAgICAgICAgbmFtZT0iRmls
ZU5hbWUiCisgICAgICAgICAgIGNvbW1hbmQ9IlNldEZpbGVOYW1lIgorICAgICAgICAgICBudW1i
ZXJfb2ZfZWxlbWVudHM9IjEiPgorICAgICAgICAgICA8RmlsZUxpc3REb21haW4gbmFtZT0iZmls
ZXMiLz4KKyAgICAgICAgPC9TdHJpbmdWZWN0b3JQcm9wZXJ0eT4KKworCTxJbnRWZWN0b3JQcm9w
ZXJ0eSAKKyAgICAgICAgICAgbmFtZT0iQ2FjaGVNZXNoIiAKKyAgICAgICAgICAgY29tbWFuZD0i
U2V0Q2FjaGVNZXNoIiAKKyAgICAgICAgICAgbnVtYmVyX29mX2VsZW1lbnRzPSIxIgorICAgICAg
ICAgICBkZWZhdWx0X3ZhbHVlcz0iMSI+CisgICAgICAgICAgIDxCb29sZWFuRG9tYWluIG5hbWU9
ImJvb2wiLz4KKyAgICAgICAgICAgICAgICA8RG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAg
ICAgICBDYWNoZSB0aGUgT3BlbkZPQU0gbWVzaCBiZXR3ZWVuIEdVSSBzZWxlY3Rpb24gY2hhbmdl
cy4KKyAgICAgICAgICAgICAgICA8L0RvY3VtZW50YXRpb24+CisgICAgICAgIDwvSW50VmVjdG9y
UHJvcGVydHk+CisKKyAgICAgICAgPEludFZlY3RvclByb3BlcnR5IG5hbWU9IlJlYWRab25lcyIg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPSJTZXRSZWFkWm9uZXMiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfZWxlbWVudHM9IjEiIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YWx1ZXM9IjAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYWJlbD0iUmVhZCBab25lcyI+CisgICAgICAgICAgPEJvb2xlYW5Eb21haW4gbmFt
ZT0iYm9vbCIvPgorICAgICAgICAgIDxEb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgUmVhZCBw
b2ludC9mYWNlL2NlbGwtWm9uZXM/CisgICAgICAgICAgPC9Eb2N1bWVudGF0aW9uPgorICAgICAg
ICA8L0ludFZlY3RvclByb3BlcnR5PgorCisJICAgIDxJbnRWZWN0b3JQcm9wZXJ0eSBuYW1lPSJB
Y2N1bXVsYXRlUGF0Y2hlcyIgCisJCQkgICAgICAgY29tbWFuZD0iU2V0S2VlcFBhdGNoZXMiCisJ
CQkgICAgICAgbnVtYmVyX29mX2VsZW1lbnRzPSIxIiAKKwkJCSAgICAgICBkZWZhdWx0X3ZhbHVl
cz0iMSIKKwkJCSAgICAgICBsYWJlbD0iQWNjdW11bGF0ZSBQYXRjaGVzIHRvIFNlbGVjdGlvbiBM
aXN0Ij4KKwkJICAgIDxCb29sZWFuRG9tYWluIG5hbWU9ImJvb2wiLz4KKwkJICAgIDxEb2N1bWVu
dGF0aW9uPgorCQkJICAgIEFjY3VtdWxhdGUgcGF0Y2hlcyBpbnRvIHNlbGVjdGlvbiBsaXN0IGFj
cm9zcyB0aW1lLXN0ZXBzIGV2ZW4gaWYgdGhleSBzdG9wIGV4aXN0aW5nCisJCSAgICA8L0RvY3Vt
ZW50YXRpb24+CisJICAgIDwvSW50VmVjdG9yUHJvcGVydHk+CisKKwk8RG91YmxlVmVjdG9yUHJv
cGVydHkKKyAgICAgICAgICAgbmFtZT0iVGltZXN0ZXBWYWx1ZXMiCisJICAgcmVwZWF0YWJsZT0i
MSIKKwkgICBpbmZvcm1hdGlvbl9vbmx5PSIxIj4KKyAgICAgICAgICAgPFRpbWVTdGVwc0luZm9y
bWF0aW9uSGVscGVyLz4KKyAgICAgICAgPC9Eb3VibGVWZWN0b3JQcm9wZXJ0eT4KKworCTxTdHJp
bmdWZWN0b3JQcm9wZXJ0eSAKKyAgICAgICAgICAgIG5hbWU9IlBhdGNoQXJyYXlJbmZvIgorICAg
ICAgICAgICAgaW5mb3JtYXRpb25fb25seT0iMSI+CisgICAgICAgICAgICA8QXJyYXlTZWxlY3Rp
b25JbmZvcm1hdGlvbkhlbHBlciBhdHRyaWJ1dGVfbmFtZT0iUGF0Y2giLz4KKwk8L1N0cmluZ1Zl
Y3RvclByb3BlcnR5PgorCTxTdHJpbmdWZWN0b3JQcm9wZXJ0eQorICAgICAgICAgICAgbmFtZT0i
TWVzaFJlZ2lvbnMiCisgICAgICAgICAgICBjb21tYW5kPSJTZXRQYXRjaEFycmF5U3RhdHVzIgor
ICAgICAgICAgICAgbnVtYmVyX29mX2VsZW1lbnRzPSIwIiAKKyAgICAgICAgICAgIHJlcGVhdF9j
b21tYW5kPSIxIgorICAgICAgICAgICAgbnVtYmVyX29mX2VsZW1lbnRzX3Blcl9jb21tYW5kPSIy
IgorICAgICAgICAgICAgZWxlbWVudF90eXBlcz0iMiAwIgorICAgICAgICAgICAgaW5mb3JtYXRp
b25fcHJvcGVydHk9IlBhdGNoQXJyYXlJbmZvIj4KKyAgICAgICAgICAgIDxBcnJheVNlbGVjdGlv
bkRvbWFpbiBuYW1lPSJhcnJheV9saXN0Ij4KKyAgICAgICAgICAgICAgICA8UmVxdWlyZWRQcm9w
ZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICA8UHJvcGVydHkgbmFtZT0iUGF0Y2hBcnJheUlu
Zm8iCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbj0iQXJyYXlMaXN0Ii8+CisgICAg
ICAgICAgICAgICAgICAgIDwvUmVxdWlyZWRQcm9wZXJ0aWVzPgorICAgICAgICAgICAgPC9BcnJh
eVNlbGVjdGlvbkRvbWFpbj4KKyAgICAgICAgPC9TdHJpbmdWZWN0b3JQcm9wZXJ0eT4KKwkKKyAg
ICAgICAgPFN0cmluZ1ZlY3RvclByb3BlcnR5IAorICAgICAgICAgICAgbmFtZT0iQ2VsbEFycmF5
SW5mbyIKKyAgICAgICAgICAgIGluZm9ybWF0aW9uX29ubHk9IjEiPgorICAgICAgICAgICAgPEFy
cmF5U2VsZWN0aW9uSW5mb3JtYXRpb25IZWxwZXIgYXR0cmlidXRlX25hbWU9IkNlbGwiLz4KKyAg
ICAgICAgPC9TdHJpbmdWZWN0b3JQcm9wZXJ0eT4KKyAgICAgICAgPFN0cmluZ1ZlY3RvclByb3Bl
cnR5CisgICAgICAgICAgICBuYW1lPSJDZWxsQXJyYXlzIgorICAgICAgICAgICAgY29tbWFuZD0i
U2V0Q2VsbEFycmF5U3RhdHVzIgorICAgICAgICAgICAgbnVtYmVyX29mX2VsZW1lbnRzPSIwIiAK
KyAgICAgICAgICAgIHJlcGVhdF9jb21tYW5kPSIxIgorICAgICAgICAgICAgbnVtYmVyX29mX2Vs
ZW1lbnRzX3Blcl9jb21tYW5kPSIyIgorICAgICAgICAgICAgZWxlbWVudF90eXBlcz0iMiAwIgor
ICAgIAkgICAgaW5mb3JtYXRpb25fcHJvcGVydHk9IkNlbGxBcnJheUluZm8iPgorICAgICAgICAg
ICAgPEFycmF5U2VsZWN0aW9uRG9tYWluIG5hbWU9ImFycmF5X2xpc3QiPgorICAgICAgICAgICAg
ICAgIDxSZXF1aXJlZFByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgIDxQcm9wZXJ0eSBu
YW1lPSJDZWxsQXJyYXlJbmZvIgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb249IkFy
cmF5TGlzdCIvPgorICAgICAgICAgICAgICAgIDwvUmVxdWlyZWRQcm9wZXJ0aWVzPgorICAgICAg
ICAgICAgPC9BcnJheVNlbGVjdGlvbkRvbWFpbj4KKyAgICAgICAgPC9TdHJpbmdWZWN0b3JQcm9w
ZXJ0eT4KKworICAgICAgICA8U3RyaW5nVmVjdG9yUHJvcGVydHkgCisgICAgICAgICAgICBuYW1l
PSJQb2ludEFycmF5SW5mbyIKKyAgICAgICAgICAgIGluZm9ybWF0aW9uX29ubHk9IjEiPgorICAg
ICAgICAgICAgPEFycmF5U2VsZWN0aW9uSW5mb3JtYXRpb25IZWxwZXIgYXR0cmlidXRlX25hbWU9
IlBvaW50Ii8+CisgICAgICAgIDwvU3RyaW5nVmVjdG9yUHJvcGVydHk+CisgICAgICAgIDxTdHJp
bmdWZWN0b3JQcm9wZXJ0eQorICAgICAgICAgICAgbmFtZT0iUG9pbnRBcnJheXMiCisgICAgICAg
ICAgICBjb21tYW5kPSJTZXRQb2ludEFycmF5U3RhdHVzIgorICAgICAgICAgICAgbnVtYmVyX29m
X2VsZW1lbnRzPSIwIiAKKyAgICAgICAgICAgIHJlcGVhdF9jb21tYW5kPSIxIgorICAgICAgICAg
ICAgbnVtYmVyX29mX2VsZW1lbnRzX3Blcl9jb21tYW5kPSIyIgorICAgICAgICAgICAgZWxlbWVu
dF90eXBlcz0iMiAwIgorCSAgICAgICAgaW5mb3JtYXRpb25fcHJvcGVydHk9IlBvaW50QXJyYXlJ
bmZvIj4KKyAgICAgICAgICAgIDxBcnJheVNlbGVjdGlvbkRvbWFpbiBuYW1lPSJhcnJheV9saXN0
Ij4KKyAgICAgICAgICAgICAgICA8UmVxdWlyZWRQcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAg
ICAgICA8UHJvcGVydHkgbmFtZT0iUG9pbnRBcnJheUluZm8iCisgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbj0iQXJyYXlMaXN0Ii8+CisgICAgICAgICAgICAgICAgPC9SZXF1aXJlZFBy
b3BlcnRpZXM+CisgICAgICAgICAgICA8L0FycmF5U2VsZWN0aW9uRG9tYWluPgorICAgICAgICA8
L1N0cmluZ1ZlY3RvclByb3BlcnR5PgorCiAgICAgPC9Tb3VyY2VQcm94eT4KICAgICA8IS0tIEVu
ZCBvZiBmb2FtIFJlYWRlciAtLT4KIAoKLS0tIFBhcmFWaWV3My5vcmlnL1ZUSy9JTy92dGtPcGVu
Rk9BTVJlYWRlci5jeHgJMjAwNy0xMS0wNyAyMTo1MTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIFBh
cmFWaWV3My9WVEsvSU8vdnRrT3BlbkZPQU1SZWFkZXIuY3h4CTIwMDctMTAtMjMgMTI6Mzc6MDUu
MDAwMDAwMDAwICswMjAwCkBAIC0xNiwxMSArMTYsMjEgQEAKIC8vIFRlY2hub2xvZ3kgTGFib3Jh
dG9yeSB3aG8gZGV2ZWxvcGVkIHRoaXMgY2xhc3MuCiAvLyBQbGVhc2UgYWRkcmVzcyBhbGwgY29t
bWVudHMgdG8gVGVycnkgSm9yZGFuICh0ZXJyeS5qb3JkYW5Ac2EubmV0bC5kb2UuZ292KQogLy8K
Ky8vIFRva2VuLWJhc2VkIEZvYW1GaWxlIGZvcm1hdCBsZXhlci9wYXJzZXIsIHBlcmZvcm1hbmNl
IGVuaGFuY2VtZW50cywKKy8vIGd6aXBwZWQgZmlsZSBhbmQgbGFncmFuZ2lhbiBmaWVsZCBzdXBw
b3J0IGJ5IFRha3V5YSBPc2hpbWEKKy8vIChvc2hpbWFAZW5nLm5paWdhdGEtdS5hYy5qcCkKKy8v
CisvLyAqIEdVSSBCYXNlZCBzZWxlY3Rpb24gb2YgbWVzaCByZWdpb25zIGFuZCBmaWVsZHMgYXZh
aWxhYmxlIGluIHRoZSBjYXNlCisvLyAqIE1pbm9yIGJ1ZyBmaXhlcyAvIFN0cmljdCBtZW1vcnkg
YWxsb2NhdGlvbiBjaGVja3MKKy8vICogTWlub3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzCisv
LyBieSBQaGlsaXBwb3NlIFJhamFuIChzYXJpdGhAcm9ja2V0bWFpbC5jb20pCisKICNpbmNsdWRl
ICJ2dGtPcGVuRk9BTVJlYWRlci5oIgogCisjaW5jbHVkZSA8dnRrc3lzL2lvcy9zc3RyZWFtPgog
I2luY2x1ZGUgPHZ0a3N0ZC9zdHJpbmc+CiAjaW5jbHVkZSA8dnRrc3RkL3ZlY3Rvcj4KLSNpbmNs
dWRlIDx2dGtzeXMvaW9zL3NzdHJlYW0+CisjaW5jbHVkZSA8dnRrX3psaWIuaD4KIAogI2luY2x1
ZGUgInZ0a0luZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAidnRrSW5mb3JtYXRpb25WZWN0b3IuaCIK
QEAgLTI4LDEwICszOCwxMiBAQAogI2luY2x1ZGUgInZ0a0RhdGFBcnJheVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgInZ0a1N0cmVhbWluZ0RlbWFuZERyaXZlblBpcGVsaW5lLmgiCiAjaW5jbHVkZSAi
dnRrQ2VsbEFycmF5LmgiCisjaW5jbHVkZSAidnRrQ2FsbGJhY2tDb21tYW5kLmgiCiAjaW5jbHVk
ZSAidnRrRGF0YUFycmF5U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAidnRrSW50QXJyYXkuaCIKLSNp
bmNsdWRlICJ2dGtGbG9hdEFycmF5LmgiCiAjaW5jbHVkZSAidnRrRG91YmxlQXJyYXkuaCIKKyNp
bmNsdWRlICJ2dGtTdHJpbmdBcnJheS5oIgorI2luY2x1ZGUgInZ0a1NvcnREYXRhQXJyYXkuaCIK
ICNpbmNsdWRlICJ2dGtQb2ludHMuaCIKICNpbmNsdWRlICJ2dGtDZWxsRGF0YS5oIgogI2luY2x1
ZGUgInZ0a0hleGFoZWRyb24uaCIKQEAgLTQ4LDQzICs2MCwyMTA0IEBACiAjaW5jbHVkZSAidnRr
VW5zdHJ1Y3R1cmVkR3JpZEFsZ29yaXRobS5oIgogI2luY2x1ZGUgInZ0a09iamVjdEZhY3Rvcnku
aCIKICNpbmNsdWRlICJ2dGtEaXJlY3RvcnkuaCIKKyNpbmNsdWRlICJ2dGtQb2x5RGF0YS5oIgor
I2luY2x1ZGUgInZ0a1BvaW50RGF0YS5oIgorI2luY2x1ZGUgInZ0a1BWQ29uZmlnLmgiIC8vIGZv
ciBQQVJBVklFV19WRVJTSU9OX01BSk9SCiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+CiAKKyNpZiAwCiAjaWZkZWYgVlRLX1VTRV9BTlNJX1NURExJQgogI2RlZmlu
ZSBWVEtfSU9TX05PQ1JFQVRFCiAjZWxzZQogI2RlZmluZSBWVEtfSU9TX05PQ1JFQVRFIHwgaW9z
Ojpub2NyZWF0ZQogI2VuZGlmCisjZW5kaWYKKworLy8gVGhlIGlucHV0IGJ1ZmZlciBzaXplIGlu
IGJ5dGVzLiBUaGUgcHVycG9zZSBvZiB0aGUgYnVmZmVyaW5nIGlzIHRvCisvLyByZWR1Y2UgdGhl
IG51bWJlciBvZiBjb3N0bHkgZ3pyZWFkKCkgY2FsbHMgc28gdGhlIGJ1ZmZlciBzaXplCisvLyBk
b2Vzbid0IGhhdmUgdG8gYmUgbGFyZ2UuCisjZGVmaW5lIFZUS19GT0FNRklMRV9CVUZTSVpFICgy
MDQ4KQorCisvLyBJZiB0aGUgbWFjcm8gaXMgc2V0IHRvIDEgZmFzdCAoYnV0IGluYWNjdXJhdGUp
IHN0cmluZyB0byBmbG9hdGluZworLy8gcG9pbnQgbnVtYmVyIGNvbnZlcnNpb24gcm91dGluZSBp
cyB1c2VkIGluc3RlYWQgb2YgdGhlIHN5c3RlbQorLy8gc3RydG9kKCkuIFRoaXMgYWZmZWN0cyBh
Ym91dCAxNSUgaW4gcGVyZm9ybWFuY2UgZm9yIGFzY2lpIGNhc2VzLgorI2RlZmluZSBWVEtfRk9B
TUZJTEVfRkFTVF9TVFJUT0QgMQogCi12dGtDeHhSZXZpc2lvbk1hY3JvKHZ0a09wZW5GT0FNUmVh
ZGVyLCAiJFJldmlzaW9uOiAxLjEwICQiKTsKK3Z0a0N4eFJldmlzaW9uTWFjcm8odnRrT3BlbkZP
QU1SZWFkZXIsICIkUmV2aXNpb246IDEuNy4yLjIgJCIpOwogdnRrU3RhbmRhcmROZXdNYWNybyh2
dGtPcGVuRk9BTVJlYWRlcik7CiAKLXN0cnVjdCBzdGRTdHJpbmcKK3N0cnVjdCBzdHJpbmdWZWN0
b3IKIHsKLSAgdnRrc3RkOjpzdHJpbmcgdmFsdWU7CisgIHZ0a3N0ZDo6dmVjdG9yPCB2dGtTdGRT
dHJpbmcgPiB2YWx1ZTsKIH07CiAKLXN0cnVjdCBzdHJpbmdWZWN0b3IKK3N0cnVjdCBpbnRWZWN0
b3IKK3sKKyAgdnRrc3RkOjp2ZWN0b3I8IGludCA+IHZhbHVlOworfTsKKworc3RydWN0IGRvdWJs
ZVZlY3RvcgoreworICB2dGtzdGQ6OnZlY3Rvcjxkb3VibGU+IHZhbHVlOworfTsKKworc3RydWN0
IGludFZlY3RvclZlY3RvcgoreworICB2dGtzdGQ6OnZlY3RvcjwgdnRrc3RkOjp2ZWN0b3I8IGlu
dCA+ID4gdmFsdWU7Cit9OworCitzdHJ1Y3QgZmFjZVZlY3RvclZlY3RvcgoreworICB2dGtzdGQ6
OnZlY3RvcjwgdnRrc3RkOjp2ZWN0b3I8IGZhY2UgPiA+IHZhbHVlOworfTsKKworc3RydWN0IHVu
c3RydWN0dXJlZEdyaWRWZWN0b3IKK3sKKyAgdnRrc3RkOjp2ZWN0b3I8dnRrVW5zdHJ1Y3R1cmVk
R3JpZCo+IHZhbHVlOworfTsKKworc3RydWN0IHZ0a09wZW5GT0FNUmVhZGVyOjp2dGtGb2FtRXJy
b3IKK3sKK3ByaXZhdGU6CisgIHZ0a1N0ZFN0cmluZyBzdHJfOworcHVibGljOgorICB2dGtGb2Ft
RXJyb3IoKTogc3RyXygpIHt9CisgIHZ0a0ZvYW1FcnJvcih2dGtGb2FtRXJyb3ImIGUpOiBzdHJf
KGUuc3RyKCkpIHt9CisgIGNvbnN0IHZ0a1N0ZFN0cmluZyBzdHIoKSBjb25zdCB7IHJldHVybiBz
dHJfOyB9CisgIC8vIGEgc3VwZXItZWFzeSB3YXkgdG8gbWFrZSB1c2Ugb2Ygb3BlcmF0b3I8PCgp
J3MgZGVmaW5lZCBpbgorICAvLyB2dGtzdGQ6Om9zdHJpbmdzdHJlYW0gY2xhc3MKKyAgdGVtcGxh
dGUgPGNsYXNzIFQ+IHZ0a0ZvYW1FcnJvciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQorICB7IHZ0
a3N0ZDo6b3N0cmluZ3N0cmVhbSBvczsgb3MgPDwgdDsgc3RyXyArPSBvcy5zdHIoKTsgcmV0dXJu
ICp0aGlzOyB9Cit9OworCisvLyB0b2tlbiBjbGFzcworLy8gYmFzZWQgb24gc3JjL09wZW5GT0FN
L2RiL0lPc3RyZWFtcy90b2tlbi97dG9rZW58dG9rZW5JfS5ICisvLyBhIHdvcmQgdG9rZW4gaXMg
dHJlYXRlZCBhcyBhIHN0cmluZyB0b2tlbi4KK3N0cnVjdCB2dGtPcGVuRk9BTVJlYWRlcjo6dnRr
Rm9hbVRva2VuCiB7Ci0gIHZ0a3N0ZDo6dmVjdG9yPCB2dGtzdGQ6OnN0cmluZyA+IHZhbHVlOwor
cHVibGljOgorICBlbnVtIHRva2VuVHlwZSB7IFVOREVGSU5FRCwgUFVOQ1RVQVRJT04sIFNUUklO
RywgTEFCRUwsIFNDQUxBUiwgRVJST1IgfTsKK3ByaXZhdGU6CisgIHRva2VuVHlwZSB0eXBlXzsK
KworICB2dGtGb2FtVG9rZW4oY29uc3QgdnRrRm9hbVRva2VuJik7CisgIHZvaWQgY2xlYXIoKSB7
IGlmKHR5cGVfID09IFNUUklORykgZGVsZXRlIHN0cmluZ1Rva2VuUHRyXzsgfQorCitwdWJsaWM6
CisgIHVuaW9uCisgIHsKKyAgICBjaGFyIHB1bmN0dWF0aW9uVG9rZW5fOyB2dGtTdGRTdHJpbmcq
IHN0cmluZ1Rva2VuUHRyXzsgaW50IGxhYmVsVG9rZW5fOworICAgIGRvdWJsZSBzY2FsYXJUb2tl
bl87CisgIH07CisKKyAgdnRrRm9hbVRva2VuKCk6IHR5cGVfKFVOREVGSU5FRCkge30KKyAgfnZ0
a0ZvYW1Ub2tlbigpIHsgY2xlYXIoKTsgfQorICB2b2lkIHNldEJhZCgpIHsgY2xlYXIoKTsgdHlw
ZV8gPSBFUlJPUjsgfQorICB0b2tlblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9
CisgIGJvb2wgaXNOdW1iZXIoKSBjb25zdCB7IHJldHVybiB0eXBlXyA9PSBMQUJFTCB8fCB0eXBl
XyA9PSBTQ0FMQVI7IH0KKworICBjaGFyIHB1bmN0dWF0aW9uVG9rZW4oKSBjb25zdCB7IHJldHVy
biBwdW5jdHVhdGlvblRva2VuXzsgfQorICBpbnQgbGFiZWxUb2tlbigpIGNvbnN0IHsgcmV0dXJu
IGxhYmVsVG9rZW5fOyB9CisgIGRvdWJsZSBudW1iZXIoKSBjb25zdAorICB7IGlmKHR5cGVfID09
IExBQkVMKSByZXR1cm4gbGFiZWxUb2tlbl87IGVsc2UgcmV0dXJuIHNjYWxhclRva2VuXzsgfQor
ICBjb25zdCB2dGtTdGRTdHJpbmcmIHN0cmluZ1Rva2VuKCkgY29uc3QKKyAgeyByZXR1cm4gKnN0
cmluZ1Rva2VuUHRyXzsgfQorCisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IGNoYXIgYykKKyAgeyBj
bGVhcigpOyB0eXBlXyA9IFBVTkNUVUFUSU9OOyBwdW5jdHVhdGlvblRva2VuXyA9IGM7IH0KKyAg
dm9pZCBvcGVyYXRvcj0oY29uc3QgY2hhciAqcykKKyAgeyBjbGVhcigpOyB0eXBlXyA9IFNUUklO
Rzsgc3RyaW5nVG9rZW5QdHJfID0gbmV3IHZ0a1N0ZFN0cmluZyhzKTsgfQorICB2b2lkIG9wZXJh
dG9yPShjb25zdCB2dGtTdGRTdHJpbmcmIHMpCisgIHsgY2xlYXIoKTsgdHlwZV8gPSBTVFJJTkc7
IHN0cmluZ1Rva2VuUHRyXyA9IG5ldyB2dGtTdGRTdHJpbmcocyk7IH0KKyAgdm9pZCBvcGVyYXRv
cj0oY29uc3QgaW50IGwpCisgIHsgY2xlYXIoKTsgdHlwZV8gPSBMQUJFTDsgbGFiZWxUb2tlbl8g
PSBsOyB9CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IGRvdWJsZSBkKQorICB7IGNsZWFyKCk7IHR5
cGVfID0gU0NBTEFSOyBzY2FsYXJUb2tlbl8gPSBkOyB9CisgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBjaGFyIGMpIGNvbnN0CisgIHsgcmV0dXJuIHR5cGVfID09IFBVTkNUVUFUSU9OICYmIHB1bmN0
dWF0aW9uVG9rZW5fID09IGM7IH0KKyAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGludCBpKSBjb25z
dAorICB7IHJldHVybiB0eXBlXyA9PSBMQUJFTCAmJiBsYWJlbFRva2VuXyA9PSBpOyB9CisgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCB2dGtTdGRTdHJpbmcmIHN0cikgY29uc3QKKyAgeyByZXR1cm4g
dHlwZV8gPT0gU1RSSU5HICYmICpzdHJpbmdUb2tlblB0cl8gPT0gc3RyOyB9CisgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCB2dGtTdGRTdHJpbmcmIHN0cikgY29uc3QKKyAgeyByZXR1cm4gdHlwZV8g
IT0gU1RSSU5HIHx8ICpzdHJpbmdUb2tlblB0cl8gIT0gc3RyOyB9CisgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBjaGFyIGMpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KGMpOyB9CisKKyAgZnJp
ZW5kIHZ0a3N0ZDo6b3N0cmluZ3N0cmVhbSYgb3BlcmF0b3I8PCh2dGtzdGQ6Om9zdHJpbmdzdHJl
YW0mIHN0ciwKKyAgICBjb25zdCB2dGtGb2FtVG9rZW4mIHQpCisgIHsKKyAgICBpZih0LnR5cGUo
KSA9PSBQVU5DVFVBVElPTikKKyAgICAgIHsKKyAgICAgIHN0ciA8PCB0LnB1bmN0dWF0aW9uVG9r
ZW5fOworICAgICAgfQorICAgIGVsc2UgaWYodC50eXBlKCkgPT0gU1RSSU5HKQorICAgICAgewor
ICAgICAgc3RyIDw8ICp0LnN0cmluZ1Rva2VuUHRyXzsKKyAgICAgIH0KKyAgICBlbHNlIGlmKHQu
dHlwZSgpID09IExBQkVMKQorICAgICAgeworICAgICAgc3RyIDw8IHQubGFiZWxUb2tlbl87Cisg
ICAgICB9CisgICAgZWxzZSBpZih0LnR5cGUoKSA9PSBTQ0FMQVIpCisgICAgICB7CisgICAgICBz
dHIgPDwgdC5zY2FsYXJUb2tlbl87CisgICAgICB9CisgICAgZWxzZSBpZih0LnR5cGUoKSA9PSBF
UlJPUikKKyAgICAgIHsKKyAgICAgIHN0ciA8PCAiYmFkVG9rZW4gKGFuIHVuZXhwZWN0ZWQgRU9G
PykiOworICAgICAgfQorICAgIHJldHVybiBzdHI7CisgIH0KIH07CiAKLXN0cnVjdCBpbnRWZWN0
b3IKKy8vIHJlYWQgYW5kIHRva2VuaXplIHRoZSBpbnB1dAorLy8gbGluZSBudW1iZXIgY291bnRp
bmcgaXMgYmFzZWQgb24KKy8vIHNyYy9PcGVuRk9BTS9kYi9JT3N0cmVhbXMvU3N0cmVhbXMvSVNz
dHJlYW1JLkgKK3N0cnVjdCB2dGtPcGVuRk9BTVJlYWRlcjo6dnRrRm9hbUZpbGUKK3sKK3ByaXZh
dGU6CisgIGd6RmlsZSBmaWxlXzsKKyAgYm9vbCBwdXRCYWNrXzsKKyAgaW50IHB1dEJhY2tDXzsK
KyAgaW50IGxpbmVOdW1iZXJfOworCisgIC8vIGJ1ZmZlciBwb2ludGVycy4gdXNpbmcgcmF3IHBv
aW50ZXJzIGZvciBwZXJmb3JtYW5jZSByZWFzb24uCisgIHVuc2lnbmVkIGNoYXIgKmJ1Zl87Cisg
IHVuc2lnbmVkIGNoYXIgKmJ1ZlB0cl87CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZkVuZFB0cl87CisK
KyAgLy8gZGVjbGFyZSBhbmQgZGVmaW5lIGFzIHByaXZhdGUKKyAgdm9pZCBwdXRCYWNrKGNvbnN0
IGludCBjKQorICB7CisgICAgaWYocHV0QmFja18pCisgICAgICB7CisgICAgICB0aHJvdyB2dGtG
b2FtRXJyb3IoKSA8PCAiQXR0ZW1wdGVkIGR1cGxpY2F0ZWQgcHV0QmFjaygpIjsKKyAgICAgIH0K
KyAgICBlbHNlCisgICAgICB7CisgICAgICBpZihjID09ICdcbicpCisgICAgICAgIHsKKyAgICAg
ICAgbGluZU51bWJlcl8tLTsKKyAgICAgICAgfQorICAgICAgKi0tYnVmUHRyXyA9IGM7CisgICAg
ICBwdXRCYWNrXyA9IHRydWU7CisgICAgICB9CisgIH0KKworICAvLyBnZXQgYSBjaGFyYWN0ZXIK
KyAgaW50IGdldGMoKQorICB7CisgICAgcHV0QmFja18gPSBmYWxzZTsKKyAgICBpZihidWZQdHJf
ID09IGJ1ZkVuZFB0cl8pCisgICAgICB7CisgICAgICBidWZQdHJfID0gYnVmXyArIDE7IC8vIHJl
c2VydmUgdGhlIGZpcnN0IGJ5dGUgZm9yIGdldGJhY2sgY2hhcgorICAgICAgY29uc3QgaW50IHJl
YWRTaXplID0gZ3pyZWFkKGZpbGVfLCBidWZQdHJfLCBWVEtfRk9BTUZJTEVfQlVGU0laRSAtIDEp
OworICAgICAgaWYocmVhZFNpemUgPD0gMCkgLy8gMCBieXRlIHJlYWQgb3IgRU9GCisgICAgICAg
IHsKKyAgICAgICAgLy8gc2V0IHRoZSBjdXJyZW50IGxvY2F0aW9uIHRvIHRoZSBlbmQgb2YgdGhl
IGJ1ZmZlciBzbyB0aGF0CisgICAgICAgIC8vIGdldGMoKSByZXR1cm5zIEVPRiBhZ2FpbiB3aGVu
IGNhbGxlZCBuZXh0IHRpbWUKKyAgICAgICAgYnVmUHRyXyA9IGJ1ZkVuZFB0cl87CisgICAgICAg
IHJldHVybiBFT0Y7CisgICAgICAgIH0KKyAgICAgIGJ1ZkVuZFB0cl8gPSBidWZQdHJfICsgcmVh
ZFNpemU7CisgICAgICB9CisgICAgY29uc3QgaW50IGMgPSAqYnVmUHRyXysrOworICAgIGlmKGMg
PT0gJ1xuJykKKyAgICAgIHsKKyAgICAgIGxpbmVOdW1iZXJfKys7CisgICAgICB9CisgICAgcmV0
dXJuIGM7CisgIH0KKworICAvLyBnZXQgbmV4dCBzZW1hbnRpY2FsbHkgdmFsaWQgY2hhcmFjdGVy
CisgIC8vIGJhc2VkIG9uIHNyYy9PcGVuRk9BTS9kYi9JT3N0cmVhbXMvU3N0cmVhbS9JU25leHRW
YWxpZC5DCisgIGludCBuZXh0VmFsaWQoKQorICB7CisgICAgaW50IGM7CisgICAgZm9yKDs7KQor
ICAgICAgeworICAgICAgaWYoKGMgPSBnZXRjKCkpICE9IEVPRiAmJiBpc3NwYWNlKGMpKQorICAg
ICAgICB7CisgICAgICAgIHdoaWxlKChjID0gZ2V0YygpKSAhPSBFT0YgJiYgaXNzcGFjZShjKSk7
CisgICAgICAgIH0KKyAgICAgIGlmKGMgPT0gJy8nKQorICAgICAgICB7CisgICAgICAgIGlmKChj
ID0gZ2V0YygpKSA9PSBFT0YpCisgICAgICAgICAgeworICAgICAgICAgIHJldHVybiAnLyc7Cisg
ICAgICAgICAgfQorICAgICAgICBpZihjID09ICcvJykgLy8gb25lLWxpbmUgY29tbWVudAorICAg
ICAgICAgIHsKKyAgICAgICAgICB3aGlsZShFT0YgIT0gKGMgPSBnZXRjKCkpICYmIGMgIT0gJ1xu
JyAmJiBjICE9ICdccicpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihjID09ICcqJykg
Ly8gbXVsdGktbGluZSBjb21tZW50CisgICAgICAgICAgeworICAgICAgICAgIGZvcig7OykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChjID0gZ2V0YygpKSA9PSAnKicpCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgaWYoKGMgPSBnZXRjKCkpID09ICcvJykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICBlbHNlIGlmKGMgPT0gRU9GKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRU9GOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRCYWNrKGMpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihjID09IEVP
RikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gRU9GOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
ICAgeworICAgICAgICAgIHB1dEJhY2soYyk7CisgICAgICAgICAgcmV0dXJuICcvJzsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgLy8gYSB2YWxpZCBjaGFyYWN0ZXIgb3IgYW4g
RU9GCisgICAgICAgIHsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
fQorCisgIC8vIHZhbGlkIGFzIGEgY2hhcmFjdGVyIHRoYXQgY29uc3RpdHV0ZXMgYSB3b3JkIG9y
IG5vdAorICAvLyBiYXNlZCBvbiBzcmMvT3BlbkZPQU0vcHJpbWl0aXZlcy9zdHJpbmdzL3dvcmQv
d29yZEkuSAorICBib29sIHZhbGlkKGNvbnN0IGludCBjKSBjb25zdAorICB7CisgICAgcmV0dXJu
ICghaXNzcGFjZShjKSAmJiBjICE9ICciJyAmJiBjICE9ICcvJyAmJiBjICE9ICc7JyAmJiBjICE9
ICd7JworICAgICAgJiYgYyAhPSAnfScpOworICB9CisKK3B1YmxpYzoKKyAgdnRrRm9hbUZpbGUo
KTogZmlsZV8oTlVMTCksIHB1dEJhY2tfKGZhbHNlKSwgcHV0QmFja0NfKDApLCBsaW5lTnVtYmVy
XygwKSwKKyAgICBidWZfKE5VTEwpIHt9CisgIH52dGtGb2FtRmlsZSgpIHsgY2xvc2UoKTsgfQor
CisgIHZvaWQgb3Blbihjb25zdCB2dGtTdGRTdHJpbmcmIHBhdGgpCisgIHsKKyAgICBsaW5lTnVt
YmVyXyA9IDA7CisKKyAgICBidWZfID0gbmV3IHVuc2lnbmVkIGNoYXJbVlRLX0ZPQU1GSUxFX0JV
RlNJWkVdOworICAgIGJ1ZlB0cl8gPSBidWZfOworICAgIGJ1ZkVuZFB0cl8gPSBidWZfOworCisg
ICAgaWYoZmlsZV8gIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigp
IDw8ICJGaWxlIGFscmVhZHkgb3BlbmVkIjsKKyAgICAgIH0KKyAgICBpZigoZmlsZV8gPSBnem9w
ZW4ocGF0aC5jX3N0cigpLCAicmIiKSkgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0
a0ZvYW1FcnJvcigpIDw8ICJDYW4ndCBvcGVuIjsKKyAgICAgIH0KKworICAgIGxpbmVOdW1iZXJf
ID0gMTsKKyAgfQorCisgIHZvaWQgY2xvc2UoKQorICB7CisgICAgaWYoYnVmXyAhPSBOVUxMKQor
ICAgICAgeworICAgICAgZGVsZXRlIFtdIGJ1Zl87CisgICAgICBidWZfID0gTlVMTDsKKyAgICAg
IH0KKyAgICBwdXRCYWNrXyA9IGZhbHNlOworICAgIHB1dEJhY2tDXyA9IDA7CisgICAgaWYoZmls
ZV8gIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGd6Y2xvc2UoZmlsZV8pOworICAgICAgZmlsZV8g
PSBOVUxMOworICAgICAgfQorICAgIC8vIGRvbid0IHJlc2V0IHRoZSBsaW5lIG51bWJlciBzbyB0
aGF0IHRoZSBsYXN0IGxpbmUgbnVtYmVyIGlzCisgICAgLy8gcmV0YWluZWQgYWZ0ZXIgY2xvc2UK
KyAgICAvLyBsaW5lTnVtYmVyXyA9IDA7CisgIH0KKworICBpbnQgbGluZU51bWJlcigpIGNvbnN0
IHsgcmV0dXJuIGxpbmVOdW1iZXJfOyB9CisKKyAgLy8gZ3pyZWFkIHdpdGggYnVmZmVyaW5nIGhh
bmRsaW5nCisgIGludCByZWFkKGNoYXIgKmJ1ZiwgY29uc3QgaW50IGxlbikKKyAgeworICAgIGlu
dCByZWFkbGVuOworICAgIGNvbnN0IGludCBidWZsZW4gPSBidWZFbmRQdHJfIC0gYnVmUHRyXzsK
KyAgICBpZihsZW4gPiBidWZsZW4pCisgICAgICB7CisgICAgICBtZW1jcHkoYnVmLCBidWZQdHJf
LCBidWZsZW4pOworICAgICAgcmVhZGxlbiA9IGd6cmVhZChmaWxlXywgYnVmICsgYnVmbGVuLCBs
ZW4gLSBidWZsZW4pOworICAgICAgaWYocmVhZGxlbiA+PSAwKQorICAgICAgICB7CisgICAgICAg
IHJlYWRsZW4gKz0gYnVmbGVuOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgaWYoYnVmbGVuID09IDApIC8vIHJldHVybiBFT0YKKyAgICAgICAgICB7CisgICAgICAg
ICAgcmVhZGxlbiA9IC0xOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsK
KyAgICAgICAgICByZWFkbGVuID0gYnVmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgYnVmUHRyXyA9IGJ1ZkVuZFB0cl87CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAg
ICAgbWVtY3B5KGJ1ZiwgYnVmUHRyXywgbGVuKTsKKyAgICAgIGJ1ZlB0cl8gKz0gbGVuOworICAg
ICAgcmVhZGxlbiA9IGxlbjsKKyAgICAgIH0KKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgcmVhZGxl
bjsgaSsrKQorICAgICAgeworICAgICAgaWYoYnVmW2ldID09ICdcbicpCisgICAgICAgIHsKKyAg
ICAgICAgbGluZU51bWJlcl8rKzsKKyAgICAgICAgfQorICAgICAgfQorICAgIHJldHVybiByZWFk
bGVuOworICB9CisKKyAgLy8gdGhlIHRva2VuaXplcgorICAvLyBiYXNlZCBvbiBzcmMvT3BlbkZP
QU0vZGIvSU9zdHJlYW1zL1NzdHJlYW1zL3tJU3JlYWRUb2tlbnxJU3JlYWR9LkMKKyAgLy8gcmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc3MsIGZhbHNlIGlmIGVuY291bnRlcmVkIEVPRgorICBib29sIHJl
YWQodnRrRm9hbVRva2VuJiB0b2tlbikKKyAgeworICAgIGludCBjID0gbmV4dFZhbGlkKCk7Cisg
ICAgaWYoYyA9PSBFT0YpCisgICAgICB7CisgICAgICB0b2tlbi5zZXRCYWQoKTsKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICBzd2l0Y2goYykKKyAgICAgIHsKKyAgICAgIGNhc2Ug
JzsnOiBjYXNlICcoJzogY2FzZSAnKSc6IGNhc2UgJ3snOiBjYXNlICd9JzogY2FzZSAnWyc6IGNh
c2UgJ10nOgorICAgICAgY2FzZSAnOic6IGNhc2UgJywnOiBjYXNlICc9JzogY2FzZSAnKyc6IGNh
c2UgJyonOiBjYXNlICcvJzoKKyAgICAgICAgLy8gcHVuY3R1YXRpb24gdG9rZW4KKyAgICAgICAg
dG9rZW4gPSAoY2hhciljOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgJy0nOiBj
YXNlICcuJzogY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQn
OgorICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzkn
OgorICAgICAgICAvLyBudW1iZXIgdG9rZW4KKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQg
TUFYX05VTSA9IDEwMDsKKyAgICAgICAgc3RhdGljIGNoYXIgbnVtYmVyQnVmZmVyW01BWF9OVU1d
OworICAgICAgICBib29sIGlzU2NhbGFyID0gZmFsc2U7CisgICAgICAgIGlmKGMgPT0gJy4nKQor
ICAgICAgICAgIHsKKyAgICAgICAgICBpc1NjYWxhciA9IHRydWU7CisgICAgICAgICAgfQorICAg
ICAgICBpbnQgaSA9IDAsIGlzRGlnaXQ7CisgICAgICAgIG51bWJlckJ1ZmZlcltpKytdID0gYzsK
KyAgICAgICAgd2hpbGUoRU9GICE9IChjID0gZ2V0YygpKSAmJiBpIDwgTUFYX05VTSAmJiAoKGlz
RGlnaXQgPSBpc2RpZ2l0KGMpKQorICAgICAgICAgIHx8IGMgPT0gJy4nIHx8IGMgPT0gJ2UnIHx8
IGMgPT0gJ0UnIHx8IGMgPT0gJysnIHx8IGMgPT0gJy0nKSkKKyAgICAgICAgICB7CisgICAgICAg
ICAgbnVtYmVyQnVmZmVyW2krK10gPSBjOworICAgICAgICAgIGlmKCFpc0RpZ2l0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgaXNTY2FsYXIgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKyAgICAgICAgaWYoaSA9PSBNQVhfTlVNKQorICAgICAgICAgIHsKKyAgICAgICAg
ICBpZihjICE9IEVPRikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHB1dEJhY2soYyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgbnVtYmVyQnVmZmVyW01BWF9OVU0gLSAxXSA9ICdcMCc7
CisgICAgICAgICAgdG9rZW4uc2V0QmFkKCk7CisgICAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9y
KCkgPDwgIlJlYWNoZWQgdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIgbGVuZ3RoIjsKKyAgICAg
ICAgICB9CisgICAgICAgIG51bWJlckJ1ZmZlcltpXSA9ICdcMCc7CisgICAgICAgIGlmKGMgIT0g
RU9GKQorICAgICAgICAgIHsKKyAgICAgICAgICBwdXRCYWNrKGMpOworICAgICAgICAgIGlmKGkg
PT0gMSAmJiBudW1iZXJCdWZmZXJbMF0gPT0gJy0nKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgdG9rZW4gPSAnLSc7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihpc1NjYWxh
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHRva2VuID0gc3RydG9kKG51bWJlckJ1ZmZl
ciwgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgdG9rZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cnRvbChudW1iZXJCdWZmZXIs
IE5VTEwsIDEwKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIHRocm93IHZ0a0Zv
YW1FcnJvcigpIDw8ICJFbmNvdW50ZXJlZCBFT0Ygd2hpbGUgdG9rZW5pemluZyBhIG51bWJlciI7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBjYXNlICciJzoKKyAgICAgICAgLy8gc3Ry
aW5nIHRva2VuCisgICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IE1BWF9TVFIgPSAxMDI0Owor
ICAgICAgICBzdGF0aWMgY2hhciBzdHJpbmdCdWZmZXJbTUFYX1NUUl07CisgICAgICAgIGludCBp
ID0gMDsKKyAgICAgICAgYm9vbCBlc2NhcGUgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUoKGMgPSBn
ZXRjKCkpICE9IEVPRikKKyAgICAgICAgICB7CisgICAgICAgICAgaWYoYyA9PSAnIicgJiYgIWVz
Y2FwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZ0J1ZmZlcltpXSA9ICdcMCc7
CisgICAgICAgICAgICB0b2tlbiA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmKChjID09ICdcbicgfHwgYyA9PSAnXHIn
KSAmJiAhZXNjYXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nQnVmZmVyW2ld
ID0gJ1wwJzsKKyAgICAgICAgICAgIHRva2VuID0gc3RyaW5nQnVmZmVyOworICAgICAgICAgICAg
dGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIkZvdW5kIGEgbmV3bGluZSB3aGlsZSByZWFkaW5nIHN0
cmluZyBcIiIKKyAgICAgICAgICAgICAgICA8PCBzdHJpbmdCdWZmZXIgPDwgIlwiIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICBpZihjID09ICdcXCcpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICBlc2NhcGUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIGVzY2FwZSA9IGZhbHNlOworICAgICAgICAgICAgc3RyaW5n
QnVmZmVyW2ldID0gYzsKKyAgICAgICAgICAgIGlmKCsraSA9PSBNQVhfU1RSKQorICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIHN0cmluZ0J1ZmZlcltNQVhfU1RSIC0gMV0gPSAnXDAnOwor
ICAgICAgICAgICAgICB0b2tlbiA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgICAgICAgdGhyb3cg
dnRrRm9hbUVycm9yKCkKKyAgICAgICAgICAgICAgICA8PCAiUmVhY2hlZCB0aGUgbWF4aW11bSBh
bGxvd2VkIHN0cmluZyBsZW5ndGgiOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfQorICAgICAgICBzdHJpbmdCdWZmZXJbaV0gPSAnXDAnOworICAgICAgICB0b2tl
biA9IHN0cmluZ0J1ZmZlcjsKKyAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIkVuY291
bnRlcmVkIEVPRiB3aGlsZSByZWFkaW5nIHN0cmluZyI7CisgICAgICAgIH0KKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIC8vIHBhcnNlcyBhcyBhIHdvcmQgdG9rZW4sIGJ1dCBnaXZlcyB0aGUgU1RS
SU5HIHR5cGUgZm9yIHNpbXBsaWNpdHkKKyAgICAgICAgeworICAgICAgICBwdXRCYWNrKGMpOwor
ICAgICAgICBjb25zdCBpbnQgTUFYX1dPUkQgPSAxMDI0OworICAgICAgICBzdGF0aWMgY2hhciB3
b3JkQnVmZmVyW01BWF9XT1JEXTsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBpbnQgYmMg
PSAwOworICAgICAgICB3aGlsZSgoRU9GICE9IChjID0gZ2V0YygpKSkgJiYgdmFsaWQoYykpCisg
ICAgICAgICAgeworICAgICAgICAgIGlmKGkgPj0gTUFYX1dPUkQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB3b3JkQnVmZmVyW01BWF9XT1JEIC0gMV0gPSAnXDAnOworICAgICAgICAgICAg
dG9rZW4gPSB3b3JkQnVmZmVyOworICAgICAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwg
IlJlYWNoZWQgdGhlIG1heGltdW0gYWxsb3dlZCB3b3JkIGxlbmd0aC4iOworICAgICAgICAgICAg
fQorICAgICAgICAgIGlmKGMgPT0gJygnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYmMr
KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJyknKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgYmMtLTsKKyAgICAgICAgICAgIGlmKGJjID09IC0xKQorICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgd29yZEJ1ZmZlcltpKytdID0gYzsKKyAgICAgICAgICB9CisgICAg
ICAgIGlmKGkgPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgdG9rZW4uc2V0QmFkKCk7Cisg
ICAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIkludmFsaWQgZmlyc3QgY2hhcmFjdGVy
IGFzIGEgdG9rZW4iOworICAgICAgICAgIH0KKyAgICAgICAgd29yZEJ1ZmZlcltpXSA9ICdcMCc7
CisgICAgICAgIHRva2VuID0gd29yZEJ1ZmZlcjsKKyAgICAgICAgaWYoYyAhPSBFT0YpCisgICAg
ICAgICAgeworICAgICAgICAgIHB1dEJhY2soYyk7CisgICAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICB9CisKKyAgdm9pZCByZWFkRXhwZWN0aW5n
KGNvbnN0IGNoYXIgYykKKyAgeworICAgIHZ0a0ZvYW1Ub2tlbiB0OworICAgIGlmKCFyZWFkKHQp
KQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0ZWQgRU9G
IjsKKyAgICAgIH0KKyAgICBpZih0ICE9IGMpCisgICAgICB7CisgICAgICB0aHJvdyB2dGtGb2Ft
RXJyb3IoKSA8PCAiRXhwZWN0ZWQgcHVuY3R1YXRpb24gdG9rZW4gIiA8PCBjIDw8ICIsIGZvdW5k
ICIKKyAgICAgICAgPDwgdDsKKyAgICAgIH0KKyAgfQorCisgIHZvaWQgcmVhZEV4cGVjdGluZyhj
b25zdCBjaGFyKiBzdHIpCisgIHsKKyAgICB2dGtGb2FtVG9rZW4gdDsKKyAgICBpZighcmVhZCh0
KSkKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJVbmV4cGVjdGVkIEVP
RiI7CisgICAgICB9CisgICAgaWYodCAhPSBzdHIpCisgICAgICB7CisgICAgICB0aHJvdyB2dGtG
b2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQgc3RyaW5nIFwiIiA8PCBzdHIgPDwgIlwiLCBmb3VuZCAi
IDw8IHQ7CisgICAgICB9CisgIH0KKworICAvLyBzcGVjaWFsaXplZCBmb3IgcmVhZGluZyBhbiBp
bnRlZ2VyIHZhbHVlLgorICAvLyBub3QgdXNpbmcgdGhlIHN0YW5kYXJkIHN0cnRvbCgpIGZvciBz
cGVlZCByZWFzb24uCisgIGludCByZWFkTGFiZWwoKQorICB7CisgICAgaW50IGMgPSBuZXh0VmFs
aWQoKTsKKworICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKKyAgICBpZihjID09ICctJykKKyAg
ICAgIHsKKyAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKKyAgICAgIGMgPSBnZXRjKCk7CisgICAgICB9
CisKKyAgICBpZighaXNkaWdpdChjKSkKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJv
cigpCisgICAgICAgIDw8ICJFeHBlY3RlZCBhbiBpbnRlZ2VyLCBmb3VuZCBhIG5vbi1kaWdpdCBj
aGFyYWN0ZXIiIDw8IChjaGFyKWM7CisgICAgICB9CisKKyAgICBpbnQgbnVtID0gYyAtICcwJzsK
KyAgICB3aGlsZShFT0YgIT0gKGMgPSBnZXRjKCkpICYmIGlzZGlnaXQoYykpCisgICAgICB7Cisg
ICAgICBudW0gPSAxMCAqIG51bSArIGMgLSAnMCc7CisgICAgICB9CisKKyAgICBpZihjID09IEVP
RikKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJFbmNvdW50ZXJlZCBF
T0Ygd2hpbGUgcmVhZGluZyBpbnRlZ2VyIjsKKyAgICAgIH0KKyAgICBwdXRCYWNrKGMpOworCisg
ICAgcmV0dXJuIG5lZ2F0aXZlID8gLW51bSA6IG51bTsKKyAgfQorCisjaWYgVlRLX0ZPQU1GSUxF
X0ZBU1RfU1RSVE9ECisgIC8vIGV4dHJlYW1lbHkgc2ltcGxpZmllZCBoaWdoLXBlcmZvcm1pbmcg
c3RyaW5nIHRvIGZsb2F0aW5nIHBvaW50CisgIC8vIGNvbnZlcnNpb24gY29kZSBiYXNlZCBvbgor
ICAvLyBQYXJhVmlldzMvVlRLL1V0aWxpdGllcy92dGtzcWxpdGUvdnRrX3NxbGl0ZTMuYworICBk
b3VibGUgcmVhZE51bWJlcigpCisgIHsKKyAgICBpbnQgYyA9IG5leHRWYWxpZCgpOworCisgICAg
Ly8gZGV0ZXJtaW5lIHNpZ24KKyAgICBib29sIG5lZ2F0aXZlID0gZmFsc2U7CisgICAgaWYoYyA9
PSAnLScpCisgICAgICB7CisgICAgICBuZWdhdGl2ZSA9IHRydWU7CisgICAgICBjID0gZ2V0Yygp
OworICAgICAgfQorCisgICAgaWYoYyA9PSBFT0YgfHwgKCFpc2RpZ2l0KGMpICYmIGMgIT0gJy4n
ICYmIGMgIT0gJ2UnICYmIGMgIT0gJ0UnKSkKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1F
cnJvcigpCisgICAgICAgIDw8ICJFeHBlY3RlZCBhIG51bWJlciwgZm91bmQgYSBub24tZGlnaXQg
Y2hhcmFjdGVyIiA8PCAoY2hhciljOworICAgICAgfQorCisgICAgLy8gcmVhZCBpbnRlZ2VyIHBh
cnQKKyAgICBsb25nIGRvdWJsZSBudW0gPSAwLjA7CisgICAgd2hpbGUoYyAhPSBFT0YgJiYgaXNk
aWdpdChjKSkKKyAgICAgIHsKKyAgICAgIG51bSA9IG51bSAqIDEwLjAgKyAoYyAtICcwJyk7Cisg
ICAgICBjID0gZ2V0YygpOworICAgICAgfQorCisgICAgLy8gcmVhZCBkZWNpbWFsIHBhcnQKKyAg
ICBpZihjID09ICcuJykKKyAgICAgIHsKKyAgICAgIGxvbmcgZG91YmxlIGRpdmlzb3IgPSAxLjA7
CisKKyAgICAgIGMgPSBnZXRjKCk7CisgICAgICB3aGlsZShjICE9IEVPRiAmJiBpc2RpZ2l0KGMp
KQorICAgICAgICB7CisgICAgICAgIG51bSA9IG51bSAqIDEwLjAgKyAoYyAtICcwJyk7CisgICAg
ICAgIGRpdmlzb3IgKj0gMTAuMDsKKyAgICAgICAgYyA9IGdldGMoKTsKKyAgICAgICAgfQorICAg
ICAgbnVtIC89IGRpdmlzb3I7CisgICAgICB9CisKKyAgICAvLyByZWFkIGV4cG9uZW50IHBhcnQK
KyAgICBpZihjID09ICdlJyB8fCBjID09ICdFJykKKyAgICAgIHsKKyAgICAgIGludCBlc2lnbiA9
IDE7CisgICAgICBpbnQgZXZhbCA9IDA7CisgICAgICBsb25nIGRvdWJsZSBzY2FsZSA9IDEuMDsK
KworICAgICAgYyA9IGdldGMoKTsKKyAgICAgIGlmKGMgPT0gJy0nKQorICAgICAgICB7CisgICAg
ICAgIGVzaWduID0gLTE7CisgICAgICAgIGMgPSBnZXRjKCk7CisgICAgICAgIH0KKyAgICAgIGVs
c2UgaWYoYyA9PSAnKycpCisgICAgICAgIHsKKyAgICAgICAgYyA9IGdldGMoKTsKKyAgICAgICAg
fQorCisgICAgICB3aGlsZShjICE9IEVPRiAmJiBpc2RpZ2l0KGMpKQorICAgICAgICB7CisgICAg
ICAgIGV2YWwgPSBldmFsICogMTAgKyBjIC0gJzAnOworICAgICAgICBjID0gZ2V0YygpOworICAg
ICAgICB9CisKKyAgICAgIC8vIGZhc3QgZXhwb25lbnQgbXVsdGlwbGljYXRpb24hCisgICAgICB3
aGlsZShldmFsID49IDY0KQorICAgICAgICB7CisgICAgICAgIHNjYWxlICo9IDEuMGUrNjQ7Cisg
ICAgICAgIGV2YWwgLT0gNjQ7CisgICAgICAgIH0KKyAgICAgIHdoaWxlKGV2YWwgPj0gMTYpCisg
ICAgICAgIHsKKyAgICAgICAgc2NhbGUgKj0gMS4wZSsxNjsKKyAgICAgICAgZXZhbCAtPSAxNjsK
KyAgICAgICAgfQorICAgICAgd2hpbGUoZXZhbCA+PSA0KQorICAgICAgICB7CisgICAgICAgIHNj
YWxlICo9IDEuMGUrNDsKKyAgICAgICAgZXZhbCAtPSA0OworICAgICAgICB9CisgICAgICB3aGls
ZShldmFsID49IDEpCisgICAgICAgIHsKKyAgICAgICAgc2NhbGUgKj0gMS4wZSsxOworICAgICAg
ICBldmFsIC09IDE7CisgICAgICAgIH0KKworICAgICAgaWYoZXNpZ24gPCAwKQorICAgICAgICB7
CisgICAgICAgIG51bSAvPSBzY2FsZTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgIG51bSAqPSBzY2FsZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgaWYoYyA9
PSBFT0YpCisgICAgICB7CisgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiVW5leHBlY3Rl
ZCBFT0YiOworICAgICAgfQorICAgIHB1dEJhY2soYyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZG91YmxlPihuZWdhdGl2ZSA/IC1udW0gOiBudW0pOworICB9CisjZWxzZQorICAvLyBzcGVj
aWFsaXplZCBmb3IgcmVhZGluZyBhIHNjYWxhciB2YWx1ZQorICBkb3VibGUgcmVhZE51bWJlcigp
CisgIHsKKyAgICBpbnQgYyA9IG5leHRWYWxpZCgpOworICAgIGlmKGMgPT0gRU9GIHx8ICghaXNk
aWdpdChjKSAmJiBjICE9ICctJyAmJiBjICE9ICcuJykpCisgICAgICB7CisgICAgICBpZihjID09
IEVPRikKKyAgICAgICAgeworICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiVW5leHBl
Y3RlZCBFT0YiOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgdGhy
b3cgdnRrRm9hbUVycm9yKCkgPDwgIkV4cGVjdGVkIGEgbnVtYmVyLCBmb3VuZCAiIDw8IChjaGFy
KWM7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIGNvbnN0IGludCBNQVhfTlVNID0gMTAwOwor
ICAgIHN0YXRpYyBjaGFyIG51bWJlckJ1ZmZlcltNQVhfTlVNXTsKKyAgICBpbnQgaSA9IDA7Cisg
ICAgbnVtYmVyQnVmZmVyW2krK10gPSBjOworICAgIGlmKEVPRiAhPSAoYyA9IGdldGMoKSkgJiYg
aSA8IE1BWF9OVU0gJiYgKGlzZGlnaXQoYykKKyAgICAgIHx8IGMgPT0gJy4nIHx8IGMgPT0gJ2Un
IHx8IGMgPT0gJ0UnKSkgLy8gc2lnbnMgZG8gbm90IGNvbWUgYXMgYSAybmQgY2hhcgorICAgICAg
eworICAgICAgbnVtYmVyQnVmZmVyW2krK10gPSBjOworICAgICAgd2hpbGUoRU9GICE9IChjID0g
Z2V0YygpKSAmJiBpIDwgTUFYX05VTSAmJiAoaXNkaWdpdChjKQorICAgICAgICB8fCBjID09ICcu
JyB8fCBjID09ICdlJyB8fCBjID09ICdFJyB8fCBjID09ICcrJyB8fCBjID09ICctJykpCisgICAg
ICAgIHsKKyAgICAgICAgbnVtYmVyQnVmZmVyW2krK10gPSBjOworICAgICAgICB9CisgICAgICB9
CisgICAgaWYoaSA9PSBNQVhfTlVNKQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9hbUVycm9y
KCkgPDwgIlJlYWNoZWQgdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIgbGVuZ3RoIjsKKyAgICAg
IH0KKyAgICBudW1iZXJCdWZmZXJbaV0gPSAnXDAnOworICAgIGlmKGMgPT0gRU9GKQorICAgICAg
eworICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAg
IH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBwdXRCYWNrKGMpOworICAgICAgaWYoaSA9PSAx
ICYmIG51bWJlckJ1ZmZlclswXSA9PSAnLScpCisgICAgICAgIHsKKyAgICAgICAgdGhyb3cgdnRr
Rm9hbUVycm9yKCkgPDwgIkV4cGVjdGVkIGEgbnVtYmVyLCBmb3VuZCBhIG1pbnVzIHNpZ24iOwor
ICAgICAgICB9CisgICAgICB9CisgICAgcmV0dXJuIHN0cnRvZChudW1iZXJCdWZmZXIsIE5VTEwp
OworICB9CisjZW5kaWYKK307CisKKy8vIElPb2JqZWN0IGNsYXNzCisvLyBob2xkcyBmaWxlIGhh
bmRsZSwgZmlsZSBmb3JtYXQsIG5hbWUgb2YgdGhlIG9iamVjdCB0aGUgZmlsZSBob2xkcyBhbmQK
Ky8vIHR5cGUgb2YgdGhlIG9iamVjdC4KK3N0cnVjdCB2dGtPcGVuRk9BTVJlYWRlcjo6dnRrRm9h
bUlPb2JqZWN0OiBwdWJsaWMgdnRrRm9hbUZpbGUKK3sKK3B1YmxpYzoKKyAgZW51bSBmaWxlRm9y
bWF0IHsgVU5ERUZJTkVELCBBU0NJSSwgQklOQVJZIH07CisKK3ByaXZhdGU6CisgIHZ0a1N0ZFN0
cmluZyBmaWxlTmFtZV87CisgIGZpbGVGb3JtYXQgZm9ybWF0XzsKKyAgdnRrU3RkU3RyaW5nIG9i
amVjdE5hbWVfOworICB2dGtTdGRTdHJpbmcgaGVhZGVyQ2xhc3NOYW1lXzsKKyAgdnRrRm9hbUVy
cm9yKiBlXzsKKworICB2b2lkIHJlYWRIZWFkZXIoKTsgLy8gZGVmaW5lZCBsYXRlcgorcHVibGlj
OgorICB2dGtGb2FtSU9vYmplY3QoKTogdnRrRm9hbUZpbGUoKSwgZm9ybWF0XyhVTkRFRklORUQp
LCBlXyhOVUxMKSB7fQorICB+dnRrRm9hbUlPb2JqZWN0KCkgeyBjbG9zZSgpOyB9CisKKyAgYm9v
bCBvcGVuKGNvbnN0IHZ0a1N0ZFN0cmluZyYgZmlsZSkKKyAgeworICAgIGZpbGVOYW1lXyA9IGZp
bGU7CisgICAgdHJ5CisgICAgICB7CisgICAgICB2dGtGb2FtRmlsZTo6b3BlbihmaWxlKTsKKyAg
ICAgIH0KKyAgICBjYXRjaCh2dGtGb2FtRXJyb3ImIGUpCisgICAgICB7CisgICAgICBlXyA9IG5l
dyB2dGtGb2FtRXJyb3IoZSk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICB0
cnkKKyAgICAgIHsKKyAgICAgIHJlYWRIZWFkZXIoKTsKKyAgICAgIH0KKyAgICBjYXRjaCh2dGtG
b2FtRXJyb3ImIGUpCisgICAgICB7CisgICAgICB2dGtGb2FtRmlsZTo6Y2xvc2UoKTsKKyAgICAg
IGVfID0gbmV3IHZ0a0ZvYW1FcnJvcihlKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KyAgICBlXyA9IE5VTEw7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICB2b2lkIGNsb3NlKCkK
KyAgeworICAgIHZ0a0ZvYW1GaWxlOjpjbG9zZSgpOworICAgIGZvcm1hdF8gPSBVTkRFRklORUQ7
CisgICAgb2JqZWN0TmFtZV8uZXJhc2UoKTsKKyAgICBoZWFkZXJDbGFzc05hbWVfLmVyYXNlKCk7
CisgICAgaWYoZV8gIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGRlbGV0ZSBlXzsKKyAgICAgIH0K
KyAgfQorICBjb25zdCB2dGtTdGRTdHJpbmcmIGZpbGVOYW1lKCkgeyByZXR1cm4gZmlsZU5hbWVf
OyB9CisgIGNvbnN0IGZpbGVGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0Xzsg
fQorICBjb25zdCB2dGtTdGRTdHJpbmcmIGNsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGhlYWRl
ckNsYXNzTmFtZV87IH0KKyAgY29uc3QgdnRrU3RkU3RyaW5nJiBvYmplY3ROYW1lKCkgY29uc3Qg
eyByZXR1cm4gb2JqZWN0TmFtZV87IH0KKyAgY29uc3QgdnRrRm9hbUVycm9yJiBlcnJvcigpIGNv
bnN0IHsgcmV0dXJuICplXzsgfQorICB2b2lkIHNldEVycm9yKHZ0a0ZvYW1FcnJvciYgZSkKKyAg
eyBpZihlXyAhPSBOVUxMKSBkZWxldGUgZV87IGVfID0gbmV3IHZ0a0ZvYW1FcnJvcihlKTsgfQor
fTsKKworLy8gYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSB2YWx1ZSBvZiBhIGRpY3Rpb25hcnkg
ZW50cnkgdGhhdCBjb3JyZXNwb25kcyB0bworLy8gaXRzIGtleXdvcmQuIG5vdGUgdGhhdCBhbiBl
bnRyeSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVlLgorc3RydWN0IHZ0a09wZW5GT0FNUmVh
ZGVyOjp2dGtGb2FtRW50cnlWYWx1ZQoreworcHVibGljOgorICBlbnVtIGVudHJ5VmFsdWVUeXBl
CisgICAgeworICAgIFVOREVGSU5FRCwgUFVOQ1RVQVRJT04sIFNUUklORywgTEFCRUwsIFNDQUxB
UiwgU1RSSU5HTElTVCwgTEFCRUxMSVNULAorICAgIExBQkVMTElTVExJU1QsIFNDQUxBUkxJU1Qs
IFZFQ1RPUkxJU1QsIEVOVFJZVkFMVUVMSVNULCBFTVBUWUxJU1QsCisgICAgRElDVElPTkFSWSwg
RVJST1IKKyAgICB9OworCitwcml2YXRlOgorICBlbnRyeVZhbHVlVHlwZSB0eXBlXzsKKyAgYm9v
bCBpc1VuaWZvcm1fOworICBib29sIG1hbmFnZWRfOworCisgIC8vIGRvbid0IHBhY2sgdGhlbSBp
bnRvIGEgdW5pb24KKyAgdnRrRm9hbVRva2VuIHRfOworICB2dGtzdGQ6OnZlY3Rvcjx2dGtGb2Ft
RW50cnlWYWx1ZSo+IGVudHJ5VmFsdWVQdHJzXzsKKworICB1bmlvbgorICB7CisgICAgaW50VmVj
dG9yICpsYWJlbExpc3RQdHJfOyB2dGtEb3VibGVBcnJheSAqc2NhbGFyTGlzdFB0cl8sICp2ZWN0
b3JMaXN0UHRyXzsKKyAgICBzdHJpbmdWZWN0b3IgKnN0cmluZ0xpc3RQdHJfOyBpbnRWZWN0b3JW
ZWN0b3IgKmxhYmVsTGlzdExpc3RQdHJfOworICAgIHZ0a0ZvYW1EaWN0ICpkaWN0UHRyXzsKKyAg
fTsKKworICB2b2lkIGNsZWFyKCk7CisgIHZvaWQgcmVhZExpc3QodnRrRm9hbUlPb2JqZWN0JiBp
byk7CisKK3B1YmxpYzoKKyAgdnRrRm9hbUVudHJ5VmFsdWUoKTogdHlwZV8oVU5ERUZJTkVEKSwg
aXNVbmlmb3JtXyhmYWxzZSksIG1hbmFnZWRfKHRydWUpLAorICAgIGxhYmVsTGlzdFB0cl8oTlVM
TCkge30KKyAgfnZ0a0ZvYW1FbnRyeVZhbHVlKCkgeyBjbGVhcigpOyB9CisKKyAgZW50cnlWYWx1
ZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9CisgIHZvaWQgc2V0RW1wdHlMaXN0
KCkgeyBjbGVhcigpOyBpc1VuaWZvcm1fID0gZmFsc2U7IHR5cGVfID0gRU1QVFlMSVNUOyB9Cisg
IGJvb2wgaXNVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gaXNVbmlmb3JtXzsgfQorICB2b2lkIHJl
YWQodnRrRm9hbUlPb2JqZWN0JiBpbyk7CisgIHZvaWQgcmVhZERpY3Rpb25hcnkodnRrRm9hbUlP
b2JqZWN0JiBpbywKKyAgICBjb25zdCB2dGtTdGRTdHJpbmcmIGZpcnN0S2V5d29yZCA9ICIiKTsK
KyAgY29uc3QgdnRrRm9hbVRva2VuJiB0b2tlbigpIGNvbnN0IHsgcmV0dXJuIHRfOyB9CisgIHZ0
a0ZvYW1Ub2tlbiYgdG9rZW4oKSB7IHJldHVybiB0XzsgfQorICBjb25zdCB2dGtzdGQ6OnZlY3Rv
cjxpbnQ+JiBsYWJlbExpc3QoKSBjb25zdAorICB7IHJldHVybiBsYWJlbExpc3RQdHJfLT52YWx1
ZTsgfQorICBjb25zdCB2dGtzdGQ6OnZlY3Rvcjx2dGtzdGQ6OnZlY3RvcjxpbnQ+ID4mIGxhYmVs
TGlzdExpc3QoKSBjb25zdAorICB7IHJldHVybiBsYWJlbExpc3RMaXN0UHRyXy0+dmFsdWU7IH0K
KyAgdnRrRG91YmxlQXJyYXkmIHNjYWxhckxpc3QoKQorICB7IHJldHVybiAqc2NhbGFyTGlzdFB0
cl87IH0KKyAgdnRrRG91YmxlQXJyYXkmIHZlY3Rvckxpc3QoKQorICB7IHJldHVybiAqdmVjdG9y
TGlzdFB0cl87IH0KKyAgdnRrRm9hbURpY3QmIGRpY3Rpb25hcnkoKQorICB7IHJldHVybiAqZGlj
dFB0cl87IH0KKyAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIgYykgY29uc3QKKyAgeyByZXR1
cm4gdHlwZV8gPT0gUFVOQ1RVQVRJT04gJiYgdF8gPT0gYzsgfQorICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgY2hhciBjKSBjb25zdAorICB7IHJldHVybiB0eXBlXyAhPSBQVU5DVFVBVElPTiB8fCB0
XyAhPSBjOyB9CisgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpbnQgaSkgY29uc3QKKyAgeyByZXR1
cm4gdHlwZV8gPT0gTEFCRUwgJiYgdF8gPT0gaTsgfQorCisgIHZvaWQgKnB0cigpCisgIHsKKyAg
ICBtYW5hZ2VkXyA9IGZhbHNlOyAvLyB0aGUgcmV0dXJuZWQgcG9pbnRlciB3aWxsIG5vdCBiZSBk
ZWxldGVkIGJ5IHRoZSBkJ3RvcgorICAgIHJldHVybiAodm9pZCAqKWxhYmVsTGlzdFB0cl87IC8v
IGFsbCBsaXN0IHBvaW50ZXJzIGFyZSBpbiBhIHNpbmdsZSB1bmlvbgorICB9CisKKyAgLy8gdGhl
IGZvbGxvd2luZyB0d28gYXJlIGZvciBhbiBleGNlcHRpb25hbCBleHByZXNzaW9uIG9mCisgIC8v
IGBMQUJFTHtMQUJFTG9yU0NBTEFSfScgd2l0aG91dCB0eXBlIHByZWZpeCAoZS4gZy4gYDJ7LTB9
JyBpbgorICAvLyBtaXhlZFJob0UgQi5DLiBpbiByaG9wU29uaWNGb2FtL3Nob2NrVHViZSkKKyAg
dm9pZCBtYWtlTGFiZWxMaXN0KGNvbnN0IGludCBsYWJlbFZhbHVlLCBjb25zdCBpbnQgc2l6ZSkK
KyAgeworICAgIGxhYmVsTGlzdFB0cl8gPSBuZXcgaW50VmVjdG9yOworICAgIHR5cGVfID0gTEFC
RUxMSVNUOworICAgIHZ0a3N0ZDo6dmVjdG9yPGludD4mIGxsID0gbGFiZWxMaXN0UHRyXy0+dmFs
dWU7CisgICAgbGwucmVzaXplKHNpemUpOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspCisgICAgICB7CisgICAgICBsbFtpXSA9IGxhYmVsVmFsdWU7CisgICAgICB9CisgIH0KKyAg
dm9pZCBtYWtlU2NhbGFyTGlzdChjb25zdCBkb3VibGUgc2NhbGFyVmFsdWUsIGNvbnN0IGludCBz
aXplKQorICB7CisgICAgc2NhbGFyTGlzdFB0cl8gPSB2dGtEb3VibGVBcnJheTo6TmV3KCk7Cisg
ICAgdHlwZV8gPSBTQ0FMQVJMSVNUOworICAgIHZ0a0RvdWJsZUFycmF5JiBzbCA9ICpzY2FsYXJM
aXN0UHRyXzsKKyAgICBzbC5TZXROdW1iZXJPZlZhbHVlcyhzaXplKTsKKyAgICBmb3IodnRrSWRU
eXBlIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgeworICAgICAgc2wuU2V0VmFsdWUoaSwg
c2NhbGFyVmFsdWUpOworICAgICAgfQorICB9CisKKyAgLy8gcmVhZCBhIGxhYmVsTGlzdAorICB2
b2lkIHJlYWRMYWJlbExpc3QodnRrRm9hbUlPb2JqZWN0JiBpbykKKyAgeworICAgIHZ0a0ZvYW1U
b2tlbiBjdXJyVG9rZW47CisgICAgaWYoIWlvLnJlYWQoY3VyclRva2VuKSkKKyAgICAgIHsKKyAg
ICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJVbmV4cGVjdGVkIEVPRiI7CisgICAgICB9Cisg
ICAgbGFiZWxMaXN0UHRyXyA9IG5ldyBpbnRWZWN0b3I7CisgICAgdHlwZV8gPSBMQUJFTExJU1Q7
CisgICAgaWYoY3VyclRva2VuLnR5cGUoKSA9PSB2dGtGb2FtVG9rZW46OkxBQkVMKQorICAgICAg
eworICAgICAgY29uc3QgaW50IHNpemUgPSBjdXJyVG9rZW4ubGFiZWxUb2tlbigpOworICAgICAg
bGFiZWxMaXN0UHRyXy0+dmFsdWUucmVzaXplKHNpemUpOworICAgICAgaWYoIWlvLnJlYWQoY3Vy
clRva2VuKSkKKyAgICAgICAgeworICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiVW5l
eHBlY3RlZCBFT0YiOworICAgICAgICB9CisgICAgICB2dGtzdGQ6OnZlY3RvcjxpbnQ+JiBsbCA9
IGxhYmVsTGlzdFB0cl8tPnZhbHVlOworICAgICAgLy8gc29tZSBvYmplY3RzIGhhdmUgbGlzdHMg
d2l0aCBvbmx5IG9uZSBlbGVtZW50IGVuY2xvc2VkIGJ5IHt9CisgICAgICAvLyBlLiBnLiBzaW1w
bGVGb2FtL3BpdHpEYWlseTNCbG9ja3MvY29uc3RhbnQvcG9seU1lc2gvZmFjZVpvbmVzCisgICAg
ICBpZihjdXJyVG9rZW4gPT0gJ3snKQorICAgICAgICB7CisgICAgICAgIGludCBsYWJlbFZhbHVl
ID0gaW8ucmVhZExhYmVsKCk7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpKysp
CisgICAgICAgICAgeworICAgICAgICAgIGxsW2ldID0gbGFiZWxWYWx1ZTsKKyAgICAgICAgICB9
CisgICAgICAgIGlvLnJlYWRFeHBlY3RpbmcoJ30nKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICBpZihjdXJyVG9rZW4gIT0gJygnKQorICAgICAgICB7CisgICAgICAgIHRocm93
IHZ0a0ZvYW1FcnJvcigpIDw8ICJFeHBlY3RlZCAoLCBmb3VuZCAiIDw8IGN1cnJUb2tlbjsKKyAg
ICAgICAgfQorICAgICAgaWYoaW8uZm9ybWF0KCkgPT0gdnRrRm9hbUlPb2JqZWN0OjpBU0NJSSkK
KyAgICAgICAgeworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAg
ICAgIHsKKyAgICAgICAgICBsbFtpXSA9IGlvLnJlYWRMYWJlbCgpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGlmKHNpemUgPiAwKSAvLyBh
dm9pZCBpbnZhbGlkIGFjY2VzcyB0byBsbC5hdCgwKQorICAgICAgICAgIHsKKyAgICAgICAgICBp
by5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZsbC5hdCgwKSksIHNpemUgKiBzaXplb2Yo
aW50KSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpby5yZWFkRXhwZWN0aW5nKCcp
Jyk7CisgICAgICB9CisgICAgZWxzZSBpZihjdXJyVG9rZW4gPT0gJygnKQorICAgICAgeworICAg
ICAgd2hpbGUoaW8ucmVhZChjdXJyVG9rZW4pICYmIGN1cnJUb2tlbiAhPSAnKScpCisgICAgICAg
IHsKKyAgICAgICAgaWYoY3VyclRva2VuLnR5cGUoKSAhPSB2dGtGb2FtVG9rZW46OkxBQkVMKQor
ICAgICAgICAgIHsKKyAgICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQg
YW4gaW50ZWdlciBvciBhICgsIGZvdW5kICIKKyAgICAgICAgICAgIDw8IGN1cnJUb2tlbjsKKyAg
ICAgICAgICB9CisgICAgICAgIGxhYmVsTGlzdFB0cl8tPnZhbHVlLnB1c2hfYmFjayhjdXJyVG9r
ZW4ubGFiZWxUb2tlbigpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsK
KyAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJFeHBlY3RlZCBpbnRlZ2VyIG9yICgsIGZv
dW5kICIgPDwgY3VyclRva2VuOworICAgICAgfQorICB9CisKKyAgLy8gcmVhZHMgYSBsaXN0IG9m
IGxhYmVsTGlzdHMuIHJlcXVpcmVzIHNpemUgcHJlZml4IG9mIHRoZSBsaXN0TGlzdAorICAvLyB0
byBiZSBwcmVzZW50LiBzaXplIG9mIHRoZSBsaXN0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3Ry
ZWFtIGlmCisgIC8vIHRoZSBmb3JtYXQgaXMgYmluYXJ5LgorICB2b2lkIHJlYWRMYWJlbExpc3RM
aXN0KHZ0a0ZvYW1JT29iamVjdCYgaW8pCisgIHsKKyAgICB2dGtGb2FtVG9rZW4gY3VyclRva2Vu
OworICAgIGlmKCFpby5yZWFkKGN1cnJUb2tlbikpCisgICAgICB7CisgICAgICB0aHJvdyB2dGtG
b2FtRXJyb3IoKSA8PCAiVW5leHBlY3RlZCBFT0YiOworICAgICAgfQorICAgIGlmKGN1cnJUb2tl
bi50eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpMQUJFTCkKKyAgICAgIHsKKyAgICAgIGxhYmVsTGlz
dExpc3RQdHJfID0gbmV3IGludFZlY3RvclZlY3RvcjsKKyAgICAgIHR5cGVfID0gTEFCRUxMSVNU
TElTVDsKKworICAgICAgY29uc3QgaW50IHNpemVJID0gY3VyclRva2VuLmxhYmVsVG9rZW4oKTsK
KyAgICAgIGxhYmVsTGlzdExpc3RQdHJfLT52YWx1ZS5yZXNpemUoc2l6ZUkpOworICAgICAgaW8u
cmVhZEV4cGVjdGluZygnKCcpOworICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNpemVJOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgaWYoIWlvLnJlYWQoY3VyclRva2VuKSkKKyAgICAgICAgICB7
CisgICAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAg
ICAgICAgICB9CisgICAgICAgIGlmKGN1cnJUb2tlbi50eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpM
QUJFTCkKKyAgICAgICAgICB7CisgICAgICAgICAgY29uc3QgaW50IHNpemVKID0gY3VyclRva2Vu
LmxhYmVsVG9rZW4oKTsKKyAgICAgICAgICBsYWJlbExpc3RMaXN0UHRyXy0+dmFsdWVbaV0ucmVz
aXplKHNpemVKKTsKKyAgICAgICAgICBpby5yZWFkRXhwZWN0aW5nKCcoJyk7CisgICAgICAgICAg
dnRrc3RkOjp2ZWN0b3I8aW50PiYgbGFiZWxMaXN0SSA9IGxhYmVsTGlzdExpc3RQdHJfLT52YWx1
ZVtpXTsKKyAgICAgICAgICBpZihpby5mb3JtYXQoKSA9PSB2dGtGb2FtSU9vYmplY3Q6OkFTQ0lJ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHNpemVKOyBq
KyspCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbGFiZWxMaXN0SVtqXSA9IGlvLnJl
YWRMYWJlbCgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYoc2l6ZUogPiAwKSAvLyBhdm9pZCBpbnZh
bGlkIHJlZmVyZW5jZSB0byBsYWJlbExpc3RJLmF0KDApCisgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgaW8ucmVhZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmbGFiZWxMaXN0SS5hdCgw
KSksCisgICAgICAgICAgICAgICAgc2l6ZUogKiBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpby5yZWFkRXhwZWN0aW5nKCcpJyk7CisgICAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmKGN1cnJUb2tlbiA9PSAnKCcpCisgICAgICAgICAgewor
ICAgICAgICAgIHdoaWxlKGlvLnJlYWQoY3VyclRva2VuKSAmJiBjdXJyVG9rZW4gIT0gJyknKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgaWYoY3VyclRva2VuLnR5cGUoKSAhPSB2dGtGb2Ft
VG9rZW46OkxBQkVMKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHRocm93IHZ0a0Zv
YW1FcnJvcigpIDw8ICJFeHBlY3RlZCBhbiBpbnRlZ2VyLCBmb3VuZCAiCisgICAgICAgICAgICAg
ICAgPDwgY3VyclRva2VuOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBsYWJlbExpc3RM
aXN0UHRyXy0+dmFsdWVbaV0ucHVzaF9iYWNrKGN1cnJUb2tlbi5sYWJlbFRva2VuKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAg
ICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQgaW50ZWdlciBvciAoLCBmb3Vu
ZCAiIDw8IGN1cnJUb2tlbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlvLnJlYWRF
eHBlY3RpbmcoJyknKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICB0aHJvdyB2
dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQgaW50ZWdlciwgZm91bmQgIiA8PCBjdXJyVG9rZW47
CisgICAgICB9CisgIH0KKworICAvLyByZWFkcyBhIHNjYWxhckxpc3QuIHJlcXVpcmVzIHNpemUg
cHJlZml4IG9mIHRoZSBsaXN0IHRvIGJlCisgIC8vIHByZXNlbnQgaW4gdGhlIHN0cmVhbSBpZiB0
aGUgZm9ybWF0IGlzIGJpbmFyeS4KKyAgdm9pZCByZWFkU2NhbGFyTGlzdCh2dGtGb2FtSU9vYmpl
Y3QmIGlvKQorICB7CisgICAgdnRrRm9hbVRva2VuIGN1cnJUb2tlbjsKKyAgICBpZighaW8ucmVh
ZChjdXJyVG9rZW4pKQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVu
ZXhwZWN0ZWQgRU9GIjsKKyAgICAgIH0KKyAgICBzY2FsYXJMaXN0UHRyXyA9IHZ0a0RvdWJsZUFy
cmF5OjpOZXcoKTsKKyAgICB0eXBlXyA9IFNDQUxBUkxJU1Q7CisgICAgaWYoY3VyclRva2VuLnR5
cGUoKSA9PSB2dGtGb2FtVG9rZW46OkxBQkVMKQorICAgICAgeworICAgICAgY29uc3QgdnRrSWRU
eXBlIHNpemUgPSBjdXJyVG9rZW4ubGFiZWxUb2tlbigpOworICAgICAgc2NhbGFyTGlzdFB0cl8t
PlNldE51bWJlck9mVmFsdWVzKHNpemUpOworICAgICAgaWYoIWlvLnJlYWQoY3VyclRva2VuKSkK
KyAgICAgICAgeworICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiVW5leHBlY3RlZCBF
T0YiOworICAgICAgICB9CisgICAgICB2dGtEb3VibGVBcnJheSYgc2wgPSAqc2NhbGFyTGlzdFB0
cl87CisgICAgICAvLyBzb21lIG9iamVjdHMgaGF2ZSBsaXN0cyB3aXRoIG9ubHkgb25lIGVsZW1l
bnQgZW5jbG9zZWQgYnkge30KKyAgICAgIC8vIHRvIHJlcHJlc2VudCBhIGZpZWxkIHdpdGggYW4g
dW5pZm9ybSB2YWx1ZQorICAgICAgaWYoY3VyclRva2VuID09ICd7JykKKyAgICAgICAgeworICAg
ICAgICBkb3VibGUgc2NhbGFyVmFsdWUgPSBpby5yZWFkTnVtYmVyKCk7CisgICAgICAgIGZvcih2
dGtJZFR5cGUgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIHNs
LlNldFZhbHVlKGksIHNjYWxhclZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgIGlvLnJlYWRF
eHBlY3RpbmcoJ30nKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBpZihjdXJy
VG9rZW4gIT0gJygnKQorICAgICAgICB7CisgICAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8
ICJFeHBlY3RlZCAoLCBmb3VuZCAiIDw8IGN1cnJUb2tlbjsKKyAgICAgICAgfQorICAgICAgaWYo
aW8uZm9ybWF0KCkgPT0gdnRrRm9hbUlPb2JqZWN0OjpBU0NJSSkKKyAgICAgICAgeworICAgICAg
ICBmb3IodnRrSWRUeXBlIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgIHsKKyAgICAg
ICAgICBzbC5TZXRWYWx1ZShpLCBpby5yZWFkTnVtYmVyKCkpOworICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGlmKHNpemUgPiAwKSAvLyBhdm9p
ZCBpbnZhbGlkIGFjY2VzcyB0byBHZXRQb2ludGVyKDApCisgICAgICAgICAgeworICAgICAgICAg
IGlvLnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2wuR2V0UG9pbnRlcigwKSksCisgICAg
ICAgICAgICBzaXplICogc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgaW8ucmVhZEV4cGVjdGluZygnKScpOworICAgICAgfQorICAgIGVsc2UgaWYoY3VyclRv
a2VuID09ICcoJykKKyAgICAgIHsKKyAgICAgIHdoaWxlKGlvLnJlYWQoY3VyclRva2VuKSAmJiBj
dXJyVG9rZW4gIT0gJyknKQorICAgICAgICB7CisgICAgICAgIGlmKCFpby5yZWFkKGN1cnJUb2tl
bikgfHwgIWN1cnJUb2tlbi5pc051bWJlcigpKQorICAgICAgICAgIHsKKyAgICAgICAgICB0aHJv
dyB2dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQgYW4gaW50ZWdlciBvciBhICgsIGZvdW5kICIK
KyAgICAgICAgICAgIDw8IGN1cnJUb2tlbjsKKyAgICAgICAgICB9CisgICAgICAgIHNjYWxhckxp
c3RQdHJfLT5JbnNlcnROZXh0VmFsdWUoY3VyclRva2VuLm51bWJlcigpKTsKKyAgICAgICAgfQor
ICAgICAgc2NhbGFyTGlzdFB0cl8tPlNxdWVlemUoKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAg
ICB7CisgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQgaW50ZWdlciBvciAo
LCBmb3VuZCAiIDw8IGN1cnJUb2tlbjsKKyAgICAgIH0KKyAgfQorCisgIC8vIHJlYWRzIGEgdmVj
dG9yTGlzdC4gcmVxdWlyZXMgc2l6ZSBwcmVmaXggb2YgdGhlIGxpc3QgdG8gYmUKKyAgLy8gcHJl
c2VudCBpbiB0aGUgc3RyZWFtIGlmIHRoZSBmb3JtYXQgaXMgYmluYXJ5LgorICAvLyBpZiBpc1Bv
c2l0aW9ucyBpcyB0cnVlIHJlYWQgQ2xvdWQgdHlwZSBvZiBkYXRhIGFzIHBhcnRpY2xlIHBvc2l0
aW9ucworICAvLyBiYXNlZCBvbiBzcmMvbGFncmFuZ2lhbi9iYXNpYy9wYXJ0aWNsZS9wYXJ0aWNs
ZUlPLkMKKyAgdm9pZCByZWFkVmVjdG9yTGlzdCh2dGtGb2FtSU9vYmplY3QmIGlvLCBjb25zdCBi
b29sIGlzUG9zaXRpb25zKQorICB7CisgICAgdnRrRm9hbVRva2VuIGN1cnJUb2tlbjsKKyAgICBp
ZighaW8ucmVhZChjdXJyVG9rZW4pKQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9hbUVycm9y
KCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAgIH0KKyAgICB2ZWN0b3JMaXN0UHRyXyA9IHZ0
a0RvdWJsZUFycmF5OjpOZXcoKTsKKyAgICB2ZWN0b3JMaXN0UHRyXy0+U2V0TnVtYmVyT2ZDb21w
b25lbnRzKDMpOworICAgIHR5cGVfID0gVkVDVE9STElTVDsKKyAgICBpZihjdXJyVG9rZW4udHlw
ZSgpID09IHZ0a0ZvYW1Ub2tlbjo6TEFCRUwpCisgICAgICB7CisgICAgICBjb25zdCBpbnQgc2l6
ZSA9IGN1cnJUb2tlbi5sYWJlbFRva2VuKCk7CisgICAgICB2ZWN0b3JMaXN0UHRyXy0+U2V0TnVt
YmVyT2ZUdXBsZXMoc2l6ZSk7CisgICAgICBpZighaW8ucmVhZChjdXJyVG9rZW4pKQorICAgICAg
ICB7CisgICAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJVbmV4cGVjdGVkIEVPRiI7Cisg
ICAgICAgIH0KKyAgICAgIC8vIHNvbWUgb2JqZWN0cyBtYXkgaGF2ZSBhIHZlY3RvciBsaXN0IHdp
dGggb25lIGVsZW1lbnQgZW5jbG9zZWQgYnkge30KKyAgICAgIGlmKGN1cnJUb2tlbiA9PSAneycp
CisgICAgICAgIHsKKyAgICAgICAgaW8ucmVhZEV4cGVjdGluZygnKCcpOworICAgICAgICBkb3Vi
bGUgdmVjdG9yVmFsdWVbM107CisgICAgICAgIHZlY3RvclZhbHVlWzBdID0gaW8ucmVhZE51bWJl
cigpOworICAgICAgICB2ZWN0b3JWYWx1ZVsxXSA9IGlvLnJlYWROdW1iZXIoKTsKKyAgICAgICAg
dmVjdG9yVmFsdWVbMl0gPSBpby5yZWFkTnVtYmVyKCk7CisgICAgICAgIGZvcihpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIHZlY3Rvckxpc3RQdHJfLT5T
ZXRUdXBsZShpLCB2ZWN0b3JWYWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICBpby5yZWFkRXhw
ZWN0aW5nKCcpJyk7CisgICAgICAgIGlmKGlzUG9zaXRpb25zKQorICAgICAgICAgIHsKKyAgICAg
ICAgICAvLyBza2lwIGxhYmVsIGNlbGxpCisgICAgICAgICAgaW8ucmVhZExhYmVsKCk7CisgICAg
ICAgICAgfQorICAgICAgICBpby5yZWFkRXhwZWN0aW5nKCd9Jyk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICBpZihjdXJyVG9rZW4gIT0gJygnKQorICAgICAgICB7CisgICAg
ICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJFeHBlY3RlZCAoLCBmb3VuZCAiIDw8IGN1cnJU
b2tlbjsKKyAgICAgICAgfQorICAgICAgaWYoaW8uZm9ybWF0KCkgPT0gdnRrRm9hbUlPb2JqZWN0
OjpBU0NJSSkKKyAgICAgICAgeworICAgICAgICBpZihzaXplID4gMCkgLy8gYXZvaWQgaW52YWxp
ZCBhY2Nlc3MgdG8gR2V0UG9pbnRlcigwKQorICAgICAgICAgIHsKKyAgICAgICAgICBkb3VibGUq
IHZlY3RvckNvbXBvbmVudEkgPSB2ZWN0b3JMaXN0UHRyXy0+R2V0UG9pbnRlcigwKTsKKyAgICAg
ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgaW8ucmVhZEV4cGVjdGluZygnKCcpOworICAgICAgICAgICAgKnZlY3RvckNvbXBvbmVu
dEkrKyA9IGlvLnJlYWROdW1iZXIoKTsKKyAgICAgICAgICAgICp2ZWN0b3JDb21wb25lbnRJKysg
PSBpby5yZWFkTnVtYmVyKCk7CisgICAgICAgICAgICAqdmVjdG9yQ29tcG9uZW50SSsrID0gaW8u
cmVhZE51bWJlcigpOworICAgICAgICAgICAgaW8ucmVhZEV4cGVjdGluZygnKScpOworICAgICAg
ICAgICAgaWYoaXNQb3NpdGlvbnMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8g
c2tpcCBsYWJlbCBjZWxsaQorICAgICAgICAgICAgICBpby5yZWFkTGFiZWwoKTsKKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxz
ZSAvLyBiaW5hcnkKKyAgICAgICAgeworICAgICAgICBpZihpc1Bvc2l0aW9ucykgLy8gbGFncmFu
Z2lhbi9wb3NpdGlvbnMgKGNsYXNzIENsb3VkKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZihz
aXplID4gMCkgLy8gYXZvaWQgaW52YWxpZCBhY2Nlc3MgdG8gR2V0UG9pbnRlcigpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICBmb3IoaW50IGkgPSAwLCBpbmRleCA9IDA7IGkgPCBzaXplOyBp
KyssIGluZGV4ICs9IDMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW8ucmVhZEV4
cGVjdGluZygnKCcpOworICAgICAgICAgICAgICBpby5yZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHZlY3Rvckxpc3RQdHJfCisgICAgICAgICAgICAgICAgLT5HZXRQb2ludGVyKGluZGV4KSks
IHNpemVvZihkb3VibGUpICogMyk7CisKKyAgICAgICAgICAgICAgLy8gc2tpcCBsYWJlbCBjZWxs
aSwgbGFiZWwgZmFjZWkgYW5kIHNjYWxhciBzdGVwRnJhY3Rpb24KKyAgICAgICAgICAgICAgY29u
c3QgaW50IGR1bW15U2l6ZSA9IDIgKiBzaXplb2YoaW50KSArIHNpemVvZihkb3VibGUpOworICAg
ICAgICAgICAgICBjaGFyIGR1bW15QnVmW2R1bW15U2l6ZV07CisgICAgICAgICAgICAgIGlvLnJl
YWQoZHVtbXlCdWYsIGR1bW15U2l6ZSk7CisgICAgICAgICAgICAgIGlvLnJlYWRFeHBlY3Rpbmco
JyknKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgZWxzZSAvLyByZWd1bGFyIHZlY3RvckZpZWxkCisgICAgICAgICAgeworICAgICAgICAgIGlm
KHNpemUgPiAwKSAvLyBhdm9pZCBpbnZhbGlkIGFjY2VzcyB0byBHZXRQb2ludGVyKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIGlvLnJlYWQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmVj
dG9yTGlzdFB0cl8tPkdldFBvaW50ZXIoMCkpLAorICAgICAgICAgICAgICBzaXplICogc2l6ZW9m
KGRvdWJsZSkgKiAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIGlvLnJlYWRFeHBlY3RpbmcoJyknKTsKKyAgICAgIH0KKyAgICBlbHNlIGlmKGN1cnJUb2tl
biA9PSAnKCcpCisgICAgICB7CisgICAgICB3aGlsZShpby5yZWFkKGN1cnJUb2tlbikgJiYgY3Vy
clRva2VuICE9ICcpJykKKyAgICAgICAgeworICAgICAgICBpZihjdXJyVG9rZW4gIT0gJygnKQor
ICAgICAgICAgIHsKKyAgICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQg
KCwgZm91bmQgIiA8PCBjdXJyVG9rZW47CisgICAgICAgICAgfQorICAgICAgICBkb3VibGUgdlsz
XTsKKyAgICAgICAgdlswXSA9IGlvLnJlYWROdW1iZXIoKTsKKyAgICAgICAgdlsxXSA9IGlvLnJl
YWROdW1iZXIoKTsKKyAgICAgICAgdlsyXSA9IGlvLnJlYWROdW1iZXIoKTsKKyAgICAgICAgdmVj
dG9yTGlzdFB0cl8tPkluc2VydE5leHRUdXBsZSh2KTsKKyAgICAgICAgaW8ucmVhZEV4cGVjdGlu
ZygnKScpOworICAgICAgICB9CisgICAgICB2ZWN0b3JMaXN0UHRyXy0+U3F1ZWV6ZSgpOworICAg
ICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJF
eHBlY3RlZCBpbnRlZ2VyIG9yICgsIGZvdW5kICIgPDwgY3VyclRva2VuOworICAgICAgfQorICB9
CisKKyAgY29uc3QgdnRrRm9hbUVudHJ5VmFsdWUmIG9wZXJhdG9yPj4odnRrU3RkU3RyaW5nJiBz
dHIpIGNvbnN0CisgIHsKKyAgICBpZih0eXBlXyA9PSBTVFJJTkcpCisgICAgICB7CisgICAgICBz
dHIgPSB2dGtTdGRTdHJpbmcodF8uc3RyaW5nVG9rZW4oKSk7CisgICAgICB9CisgICAgZWxzZQor
ICAgICAgeworICAgICAgLy92dGtFcnJvck1hY3JvKCJ0b2tlbiB0eXBlIGRvZXMgbm90IG1hdGNo
Iik7CisgICAgICBzdHIgPSAiIjsKKyAgICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKwor
ICBjb25zdCB2dGtGb2FtRW50cnlWYWx1ZSYgb3BlcmF0b3I+Pihkb3VibGUmIGQpIGNvbnN0Cisg
IHsKKyAgICBpZih0eXBlXyA9PSBTQ0FMQVIgfHwgdHlwZV8gPT0gTEFCRUwpCisgICAgICB7Cisg
ICAgICBkID0gdF8ubnVtYmVyKCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAg
Ly92dGtFcnJvck1hY3JvKCJ0b2tlbiB0eXBlIGRvZXMgbm90IG1hdGNoIik7CisgICAgICBkID0g
MC4wOworICAgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIGNvbnN0IHZ0a0ZvYW1F
bnRyeVZhbHVlJiBvcGVyYXRvcj4+KGludCYgaSkgY29uc3QKKyAgeworICAgIGlmKHR5cGVfID09
IExBQkVMKQorICAgICAgeworICAgICAgaSA9IHRfLmxhYmVsVG9rZW4oKTsKKyAgICAgIH0KKyAg
ICBlbHNlCisgICAgICB7CisgICAgICAvL3Z0a0Vycm9yTWFjcm8oInRva2VuIHR5cGUgZG9lcyBu
b3QgbWF0Y2giKTsKKyAgICAgIGkgPSAwOworICAgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAg
fQorfTsKKworLy8gYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYW4gZW50cnkgb2YgYSBkaWN0aW9u
YXJ5LiBub3RlIHRoYXQgYW4KKy8vIGVudHJ5IGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUu
CitzdHJ1Y3QgdnRrT3BlbkZPQU1SZWFkZXI6OnZ0a0ZvYW1FbnRyeQoreworcHJpdmF0ZToKKyAg
dnRrU3RkU3RyaW5nIGtleXdvcmRfOworICB2dGtzdGQ6OnZlY3Rvcjx2dGtGb2FtRW50cnlWYWx1
ZSo+IHZhbHVlUHRyc187CisKK3B1YmxpYzoKKyAgdnRrRm9hbUVudHJ5KCkge30KKyAgfnZ0a0Zv
YW1FbnRyeSgpCisgIHsKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVQdHJzXy5zaXpl
KCk7IGkrKykKKyAgICAgIHsKKyAgICAgIGRlbGV0ZSB2YWx1ZVB0cnNfW2ldOworICAgICAgfQor
ICB9CisKKyAgdnRrU3RkU3RyaW5nJiBrZXl3b3JkKCkgeyByZXR1cm4ga2V5d29yZF87IH0KKyAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiB2YWx1ZVB0cnNfLnNpemUoKTsgfQorICAvLyBy
ZXR1cm5zIGZhbHNlIGlmIHRoZSBudW1iZXIgb2YgdGhlIHZhbHVlcyBpcyAwIHRvIHNpbXBsaWZ5
IHRoaW5ncworICBib29sIGZvdW5kKCkgY29uc3QgeyByZXR1cm4gdmFsdWVQdHJzXy5zaXplKCkg
PiAwOyB9CisgIHZ0a0ZvYW1FbnRyeVZhbHVlJiBmaXJzdFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
KnZhbHVlUHRyc19bMF07IH0KKyAgY29uc3QgdnRrc3RkOjp2ZWN0b3I8aW50PiYgbGFiZWxMaXN0
KCkgY29uc3QKKyAgeyByZXR1cm4gZmlyc3RWYWx1ZSgpLmxhYmVsTGlzdCgpOyB9CisgIGNvbnN0
IHZ0a3N0ZDo6dmVjdG9yPHZ0a3N0ZDo6dmVjdG9yPGludD4gPiYgbGFiZWxMaXN0TGlzdCgpIGNv
bnN0CisgIHsgcmV0dXJuIGZpcnN0VmFsdWUoKS5sYWJlbExpc3RMaXN0KCk7IH0KKyAgdnRrRG91
YmxlQXJyYXkmIHNjYWxhckxpc3QoKQorICB7IHJldHVybiBmaXJzdFZhbHVlKCkuc2NhbGFyTGlz
dCgpOyB9CisgIHZ0a0RvdWJsZUFycmF5JiB2ZWN0b3JMaXN0KCkKKyAgeyByZXR1cm4gZmlyc3RW
YWx1ZSgpLnZlY3Rvckxpc3QoKTsgfQorICB2dGtGb2FtRGljdCYgZGljdGlvbmFyeSgpIC8vIG5v
dCB1c2luZyBmaXJzdFZhbHVlKCkgZm9yIGJyZWFraW5nIGNvbnN0bmVzcworICB7IHJldHVybiB2
YWx1ZVB0cnNfWzBdLT5kaWN0aW9uYXJ5KCk7IH0KKyAgdm9pZCAqcHRyKCkgeyByZXR1cm4gZmly
c3RWYWx1ZSgpLnB0cigpOyB9CisKKyAgdm9pZCByZWFkRGljdGlvbmFyeSh2dGtGb2FtSU9vYmpl
Y3QmIGlvKQorICB7CisgICAgdmFsdWVQdHJzXy5wdXNoX2JhY2sobmV3IHZ0a0ZvYW1FbnRyeVZh
bHVlKTsKKyAgICB2YWx1ZVB0cnNfLmJhY2soKS0+cmVhZERpY3Rpb25hcnkoaW8pOworICB9CisK
KyAgLy8gcmVhZCB2YWx1ZXMgb2YgYW4gZW50cnkKKyAgdm9pZCByZWFkKHZ0a0ZvYW1JT29iamVj
dCYgaW8pOworCisgIGNvbnN0IHZ0a0ZvYW1FbnRyeSYgb3BlcmF0b3I+Pih2dGtTdGRTdHJpbmcm
IHN0cikgY29uc3QKKyAgeworICAgIGlmKCFmb3VuZCgpIHx8IHZhbHVlUHRyc19bMF0tPnR5cGUo
KSAhPSB2dGtGb2FtRW50cnlWYWx1ZTo6U1RSSU5HKQorICAgICAgeworICAgICAgc3RyID0gIiI7
CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgdmFsdWVQdHJzX1swXS0+b3BlcmF0
b3I+PihzdHIpOworICAgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIGNvbnN0IHZ0
a0ZvYW1FbnRyeSYgb3BlcmF0b3I+Pihkb3VibGUmIGQpIGNvbnN0CisgIHsKKyAgICBpZighZm91
bmQoKSB8fCAodmFsdWVQdHJzX1swXS0+dHlwZSgpICE9IHZ0a0ZvYW1FbnRyeVZhbHVlOjpTQ0FM
QVIKKyAgICAgICYmIHZhbHVlUHRyc19bMF0tPnR5cGUoKSAhPSB2dGtGb2FtRW50cnlWYWx1ZTo6
TEFCRUwpKQorICAgICAgeworICAgICAgZCA9IDAuMDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAg
ICB7CisgICAgICB2YWx1ZVB0cnNfWzBdLT5vcGVyYXRvcj4+KGQpOworICAgICAgfQorICAgIHJl
dHVybiAqdGhpczsKKyAgfQorCisgIGNvbnN0IHZ0a0ZvYW1FbnRyeSYgb3BlcmF0b3I+PihpbnQm
IGkpIGNvbnN0CisgIHsKKyAgICBpZighZm91bmQoKSB8fCB2YWx1ZVB0cnNfWzBdLT50eXBlKCkg
IT0gdnRrRm9hbUVudHJ5VmFsdWU6OkxBQkVMKQorICAgICAgeworICAgICAgaSA9IDA7CisgICAg
ICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgdmFsdWVQdHJzX1swXS0+b3BlcmF0b3I+Pihp
KTsKKyAgICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KK307CisKKy8vIGEgY2xhc3MgdGhh
dCBob2xkcyBhIEZvYW1GaWxlIGRhdGEgc3RydWN0dXJlCitzdHJ1Y3QgdnRrT3BlbkZPQU1SZWFk
ZXI6OnZ0a0ZvYW1EaWN0OiBwdWJsaWMgdnRrRm9hbUVudHJ5VmFsdWUKK3sKK3B1YmxpYzoKKyAg
ZW51bSBkaWN0VHlwZQorICAgIHsgVU5ERUZJTkVELCBESUNUSU9OQVJZLCBTQ0FMQVJMSVNULCBW
RUNUT1JMSVNULCBMQUJFTExJU1QsIExBQkVMTElTVExJU1QsCisgICAgICBVTklGT1JNTEFCRUxM
SVNULCBVTklGT1JNU0NBTEFSTElTVCB9OworCitwcml2YXRlOgorICBkaWN0VHlwZSB0eXBlXzsK
KyAgdnRrc3RkOjp2ZWN0b3I8dnRrRm9hbUVudHJ5Kj4gZW50cnlQdHJzXzsKKyAgdnRrRm9hbUVu
dHJ5KiBkdW1teUVudHJ5UHRyXzsKKworICB2dGtGb2FtRGljdChjb25zdCB2dGtGb2FtRGljdCAm
KTsKKworcHVibGljOgorICB2dGtGb2FtRGljdCgpOiB2dGtGb2FtRW50cnlWYWx1ZSgpLCB0eXBl
XyhVTkRFRklORUQpLCBkdW1teUVudHJ5UHRyXyhOVUxMKSB7fQorICB+dnRrRm9hbURpY3QoKQor
ICB7CisgICAgaWYodHlwZV8gPT0gRElDVElPTkFSWSkKKyAgICAgIHsKKyAgICAgIGZvcihzaXpl
X3QgaSA9IDA7IGkgPCBlbnRyeVB0cnNfLnNpemUoKTsgaSsrKQorICAgICAgICB7CisgICAgICAg
IGRlbGV0ZSBlbnRyeVB0cnNfW2ldOworICAgICAgICB9CisgICAgICB9CisgICAgaWYoZHVtbXlF
bnRyeVB0cl8gIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGRlbGV0ZSBkdW1teUVudHJ5UHRyXzsK
KyAgICAgIH0KKyAgfQorCisgIGRpY3RUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlXzsg
fQorICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVudHJ5UHRyc18uc2l6ZSgpOyB9Cisg
IHZ0a0ZvYW1FbnRyeSYgZW50cnkoY29uc3QgaW50IGkpIHsgcmV0dXJuICplbnRyeVB0cnNfW2ld
OyB9CisgIHZ0a0ZvYW1FbnRyeSYgbG9va3VwKGNvbnN0IHZ0a1N0ZFN0cmluZyYga2V5d29yZCkK
KyAgeworICAgIGlmKHR5cGVfID09IERJQ1RJT05BUlkpCisgICAgICB7CisgICAgICBmb3Ioc2l6
ZV90IGkgPSAwOyBpIDwgZW50cnlQdHJzXy5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAg
ICBpZihlbnRyeVB0cnNfW2ldLT5rZXl3b3JkKCkgPT0ga2V5d29yZCkgLy8gZm91bmQKKyAgICAg
ICAgICB7CisgICAgICAgICAgcmV0dXJuICplbnRyeVB0cnNfW2ldOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorCisgICAgLy8gbm90IGZvdW5kCisgICAgaWYoZHVtbXlFbnRyeVB0
cl8gPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGR1bW15RW50cnlQdHJfID0gbmV3IHZ0a0ZvYW1F
bnRyeTsKKyAgICAgIH0KKyAgICByZXR1cm4gKmR1bW15RW50cnlQdHJfOworICB9CisKKyAgLy8g
cmVhZHMgYSBGb2FtRmlsZSBvciBhIHN1YmRpY3Rpb25hcnkuIGlmIHRoZSBzdHJlYW0gdG8gYmUg
cmVhZCBpcworICAvLyBhIHN1YmRpY3Rpb25hcnkgdGhlIHByZWNlZGluZyAneycgaXMgYXNzdW1l
ZCB0byBoYXZlIGFscmVhZHkgYmVlbgorICAvLyB0aHJvd24gYXdheS4KKyAgYm9vbCByZWFkKHZ0
a0ZvYW1JT29iamVjdCYgaW8sIGNvbnN0IGJvb2wgaXNTdWJEaWN0aW9uYXJ5ID0gZmFsc2UsCisg
ICAgY29uc3QgdnRrU3RkU3RyaW5nJiBmaXJzdEtleXdvcmQgPSAiIikKKyAgeworICAgIHRyeQor
ICAgICAgeworICAgICAgdnRrRm9hbVRva2VuIGN1cnJUb2tlbjsKKyAgICAgIGlmKGZpcnN0S2V5
d29yZCA9PSAiIikKKyAgICAgICAgeworICAgICAgICBpZighaXNTdWJEaWN0aW9uYXJ5KQorICAg
ICAgICAgIHsKKyAgICAgICAgICAvLyBwb2x5TWVzaC9wb2ludHMsIGxhZ3JhbmdpYW4gdmVjdG9y
cworICAgICAgICAgIGlmKGlvLmNsYXNzTmFtZSgpID09ICJ2ZWN0b3JGaWVsZCIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICByZWFkVmVjdG9yTGlzdChpbywgZmFsc2UpOworICAgICAgICAg
ICAgdHlwZV8gPSBWRUNUT1JMSVNUOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgZWxzZSBpZihpby5jbGFzc05hbWUoKSA9PSAic2NhbGFyRmllbGQi
KSAvLyBsYWdyYW5naWFuIHNjYWxhcnMKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRT
Y2FsYXJMaXN0KGlvKTsKKyAgICAgICAgICAgIHR5cGVfID0gU0NBTEFSTElTVDsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoaW8uY2xh
c3NOYW1lKCkgPT0gIkNsb3VkIikgLy8gbGFncmFuZ2lhbi9wb3NpdGlvbnMKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIHJlYWRWZWN0b3JMaXN0KGlvLCB0cnVlKTsKKyAgICAgICAgICAgIHR5
cGVfID0gVkVDVE9STElTVDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgIGVsc2UgaWYoaW8uY2xhc3NOYW1lKCkgPT0gImZhY2VMaXN0IikgLy8gcG9s
eU1lc2gvZmFjZXMKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRMYWJlbExpc3RMaXN0
KGlvKTsKKyAgICAgICAgICAgIHR5cGVfID0gTEFCRUxMSVNUTElTVDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoaW8uY2xhc3NOYW1l
KCkgPT0gImxhYmVsTGlzdCIpIC8vIHBvbHlNZXNoL3tvd25lcnxuZWlnaGJvdXJ9CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICByZWFkTGFiZWxMaXN0KGlvKTsKKyAgICAgICAgICAgIHR5cGVf
ID0gTEFCRUxMSVNUOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfQorCisgICAgICAgIC8vIHJlYWQgdGhlIGZpcnN0IHRva2VuCisgICAgICAgIGlm
KCFpby5yZWFkKGN1cnJUb2tlbikpCisgICAgICAgICAgeworICAgICAgICAgIHRocm93IHZ0a0Zv
YW1FcnJvcigpIDw8ICJVbmV4cGVjdGVkIEVPRiI7CisgICAgICAgICAgfQorCisgICAgICAgIC8v
IGxpc3Qgb2YgZGljdGlvbmFyaWVzIGlzIHJlYWQgYXMgYSB1c3VhbCBkaWN0aW9uYXJ5CisgICAg
ICAgIC8vIHBvbHlNZXNoL2JvdW5kYXJ5LCBwb2ludC9mYWNlL2NlbGwtWm9uZXMKKyAgICAgICAg
aWYoIWlzU3ViRGljdGlvbmFyeSAmJiBjdXJyVG9rZW4udHlwZSgpID09IHZ0a0ZvYW1Ub2tlbjo6
TEFCRUwpCisgICAgICAgICAgeworICAgICAgICAgIGlvLnJlYWRFeHBlY3RpbmcoJygnKTsKKyAg
ICAgICAgICBpZihjdXJyVG9rZW4ubGFiZWxUb2tlbigpID4gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmKCFpby5yZWFkKGN1cnJUb2tlbikpCisgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gY29udGludWUgdG8gcmVhZCBhcyBhIHVzdWFsIGRp
Y3Rpb25hcnkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIC8vIHJldHVybiBhcyBlbXB0
eSBkaWN0aW9uYXJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICBpby5yZWFkRXhwZWN0aW5n
KCcpJyk7CisgICAgICAgICAgICB0eXBlXyA9IERJQ1RJT05BUlk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIC8vIHNvbWUgYm91
bmRhcnkgZmlsZXMgZG9lcyBub3QgaGF2ZSB0aGUgbnVtYmVyIG9mIGJvdW5kYXJ5CisgICAgICAg
IC8vIHBhdGNoZXMgKGUuZy4gc2V0dGxpbmdGb2FtL3RhbmszRCkuIGluIHRoaXMgY2FzZSB3ZSBu
ZWVkIHRvCisgICAgICAgIC8vIGV4cGxpY2l0bHkgcmVhZCB0aGUgZmlsZSBhcyBhIGRpY3Rpb25h
cnkuCisgICAgICAgIGVsc2UgaWYoIWlzU3ViRGljdGlvbmFyeSAmJiBjdXJyVG9rZW4gPT0gJygn
CisgICAgICAgICAgJiYgaW8uY2xhc3NOYW1lKCkgPT0gInBvbHlCb3VuZGFyeU1lc2giKSAvLyBw
b2x5TWVzaC9ib3VuZGFyeQorICAgICAgICAgIHsKKwkgICAgaWYoIWlvLnJlYWQoY3VyclRva2Vu
KSkgLy8gcmVhZCB0aGUgZmlyc3Qga2V5d29yZAorICAgICAgICAgICAgeworICAgICAgICAgICAg
dGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICBpZihjdXJyVG9rZW4gPT0gJyknKSAvLyByZXR1cm4gYXMgZW1wdHkgZGljdGlv
bmFyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgdHlwZV8gPSBESUNUSU9OQVJZOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCS8vIHRo
ZSBmb2xsb3dpbmcgdHdvIGVsc2UtaWYgY2xhdXNlcyBhcmUgZm9yIGFuIGV4Y2VwdGlvbmFsCisJ
Ly8gZXhwcmVzc2lvbiBvZiBgTEFCRUx7TEFCRUxvclNDQUxBUn0nIHdpdGhvdXQgdHlwZSBwcmVm
aXgKKwkvLyAoZS4gZy4gYDJ7LTB9JyBpbiBtaXhlZFJob0UgQi5DLiBpbgorCS8vIHJob3BTb25p
Y0ZvYW0vc2hvY2tUdWJlKQorCWVsc2UgaWYoaXNTdWJEaWN0aW9uYXJ5ICYmIGN1cnJUb2tlbi50
eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpMQUJFTCkKKwkgIHsKKyAgICAgICAgICB0b2tlbigpID0g
Y3VyclRva2VuLmxhYmVsVG9rZW4oKTsKKyAgICAgICAgICB0eXBlXyA9IFVOSUZPUk1MQUJFTExJ
U1Q7CisgICAgICAgICAgaW8ucmVhZEV4cGVjdGluZygnfScpOworICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgIH0KKwllbHNlIGlmKGlzU3ViRGljdGlvbmFyeSAmJiBjdXJyVG9rZW4u
dHlwZSgpID09IHZ0a0ZvYW1Ub2tlbjo6U0NBTEFSKQorCSAgeworICAgICAgICAgIHRva2VuKCkg
PSBjdXJyVG9rZW4ubnVtYmVyKCk7CisgICAgICAgICAgdHlwZV8gPSBVTklGT1JNU0NBTEFSTElT
VDsKKyAgICAgICAgICBpby5yZWFkRXhwZWN0aW5nKCd9Jyk7CisgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgfQorICAgICAgICAvLyByZXR1cm4gYXMgZW1wdHkgZGljdGlvbmFyeQor
ICAgICAgICBlbHNlIGlmKGlzU3ViRGljdGlvbmFyeSAmJiBjdXJyVG9rZW4gPT0gJ30nKQorICAg
ICAgICAgIHsKKyAgICAgICAgICB0eXBlXyA9IERJQ1RJT05BUlk7CisgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAvLyBpZiBmaXJzdEtleXdvcmQg
aXMgc2V0IHJlYWQgdGhlIGZvbGxvd2luZyBzdHJlYW0gYXMgc3ViZGljdGlvbmFyeQorICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgIGVudHJ5UHRyc18ucHVzaF9iYWNrKG5ldyB2dGtGb2Ft
RW50cnkpOworICAgICAgICBlbnRyeVB0cnNfLmJhY2soKS0+a2V5d29yZCgpID0gZmlyc3RLZXl3
b3JkOworICAgICAgICBlbnRyeVB0cnNfLmJhY2soKS0+cmVhZERpY3Rpb25hcnkoaW8pOworICAg
ICAgICBpZighaW8ucmVhZChjdXJyVG9rZW4pIHx8IGN1cnJUb2tlbiA9PSAnfScgfHwgY3VyclRv
a2VuID09ICcpJykKKyAgICAgICAgICB7CisgICAgICAgICAgdHlwZV8gPSBESUNUSU9OQVJZOwor
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBp
ZihjdXJyVG9rZW4udHlwZSgpID09IHZ0a0ZvYW1Ub2tlbjo6U1RSSU5HKSAvLyBnZW5lcmFsIGRp
Y3Rpb25hcnkKKyAgICAgICAgeworICAgICAgICAvLyBiYXNlZCBvbiBzcmMvT3BlbkZPQU0vZGIv
ZGljdGlvbmFyeS9kaWN0aW9uYXJ5SU8uQworICAgICAgICBkbworICAgICAgICAgIHsKKyAgICAg
ICAgICBpZihjdXJyVG9rZW4gIT0gJzsnKSAvLyBpZ25vcmUgZW1wdHkgZW50cnkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIGVudHJ5UHRyc18ucHVzaF9iYWNrKG5ldyB2dGtGb2FtRW50cnkp
OworICAgICAgICAgICAgZW50cnlQdHJzXy5iYWNrKCktPmtleXdvcmQoKSA9IGN1cnJUb2tlbi5z
dHJpbmdUb2tlbigpOworICAgICAgICAgICAgZW50cnlQdHJzXy5iYWNrKCktPnJlYWQoaW8pOwor
ICAgICAgICAgICAgaWYoY3VyclRva2VuID09ICJGb2FtRmlsZSIpCisgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgLy8gZGVsZXRlIHRoZSBGb2FtRmlsZSBoZWFkZXIgc3ViZGljdGlvbmFy
eSBlbnRyeQorICAgICAgICAgICAgICBkZWxldGUgZW50cnlQdHJzXy5iYWNrKCk7CisgICAgICAg
ICAgICAgIGVudHJ5UHRyc18ucG9wX2JhY2soKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgIH0gd2hpbGUoaW8ucmVhZChjdXJyVG9rZW4pCisgICAgICAgICAgICAm
JiAoY3VyclRva2VuLnR5cGUoKSA9PSB2dGtGb2FtVG9rZW46OlNUUklORyB8fCBjdXJyVG9rZW4g
PT0gJzsnKSk7CisKKyAgICAgICAgaWYoY3VyclRva2VuLnR5cGUoKSA9PSB2dGtGb2FtVG9rZW46
OkVSUk9SIHx8IGN1cnJUb2tlbiA9PSAnfScKKyAgICAgICAgICB8fCBjdXJyVG9rZW4gPT0gJykn
KQorICAgICAgICAgIHsKKyAgICAgICAgICB0eXBlXyA9IERJQ1RJT05BUlk7CisgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKQor
ICAgICAgICAgIDw8ICJFeHBlY3RlZCBrZXl3b3JkLCBjbG9zaW5nIGJyYWNlLCA7IG9yIEVPRiwg
Zm91bmQgIiA8PCBjdXJyVG9rZW47CisgICAgICAgIH0KKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJv
cigpIDw8ICJCYWQgZmlyc3Qga2V5d29yZCBmb3IgZGljdGlvbmFyeSAiIDw8IGN1cnJUb2tlbjsK
KyAgICAgIH0KKyAgICBjYXRjaCh2dGtGb2FtRXJyb3ImIGUpCisgICAgICB7CisgICAgICBpZihp
c1N1YkRpY3Rpb25hcnkpCisgICAgICAgIHsKKyAgICAgICAgdGhyb3c7CisgICAgICAgIH0KKyAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBpby5zZXRFcnJvcihlKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgIH0KK307CisKK3ZvaWQgdnRrT3BlbkZP
QU1SZWFkZXI6OnZ0a0ZvYW1JT29iamVjdDo6cmVhZEhlYWRlcigpCit7CisgIHZ0a0ZvYW1Ub2tl
biBmaXJzdFRva2VuOworCisgIHJlYWRFeHBlY3RpbmcoIkZvYW1GaWxlIik7CisgIHJlYWRFeHBl
Y3RpbmcoJ3snKTsKKworICB2dGtGb2FtRGljdCBoZWFkZXJEaWN0OworICBoZWFkZXJEaWN0LnJl
YWQoKnRoaXMsIHRydWUpOyAvLyB0aHJvdyBleGNlcHRpb24gaW4gY2FzZSBvZiBlcnJvcgorCisg
IHZ0a0ZvYW1FbnRyeSYgZm9ybWF0RW50cnkgPSBoZWFkZXJEaWN0Lmxvb2t1cCgiZm9ybWF0Iik7
CisgIGlmKCFmb3JtYXRFbnRyeS5mb3VuZCgpKQorICAgIHsKKyAgICB0aHJvdyB2dGtGb2FtRXJy
b3IoKQorICAgICAgPDwgInRoZSBmb3JtYXQgZW50cnkgKGJpbmFyeS9hc2NpaSkgbm90IGZvdW5k
IGluIEZvYW1GaWxlIGhlYWRlciI7CisgICAgfQorICB2dGtTdGRTdHJpbmcgZm9ybWF0OworICBm
b3JtYXRFbnRyeSA+PiBmb3JtYXQ7CisgIC8vIGNhc2UgZG9lcyBtYXR0ZXIgKGUuIGcuICJCSU5B
UlkiIGlzIHRyZWF0ZWQgYXMgYXNjaWkpCisgIC8vIHNlZSBzcmMvT3BlbkZPQU0vZGIvSU9zdHJl
YW1zL0lPc3RyZWFtcy9JT3N0cmVhbS5DCisgIGlmKGZvcm1hdCA9PSAiYmluYXJ5IikKKyAgICB7
CisgICAgZm9ybWF0XyA9IEJJTkFSWTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgZm9ybWF0
XyA9IEFTQ0lJOworICAgIH0KKworICB2dGtGb2FtRW50cnkmIGNsYXNzRW50cnkgPSBoZWFkZXJE
aWN0Lmxvb2t1cCgiY2xhc3MiKTsKKyAgaWYoIWNsYXNzRW50cnkuZm91bmQoKSkKKyAgICB7Cisg
ICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgImNsYXNzIG5hbWUgbm90IGZvdW5kIGluIEZvYW1G
aWxlIGhlYWRlciI7CisgICAgfQorICBjbGFzc0VudHJ5ID4+IGhlYWRlckNsYXNzTmFtZV87CisK
KyAgdnRrRm9hbUVudHJ5JiBvYmplY3RFbnRyeSA9IGhlYWRlckRpY3QubG9va3VwKCJvYmplY3Qi
KTsKKyAgaWYoIW9iamVjdEVudHJ5LmZvdW5kKCkpCisgICAgeworICAgIHRocm93IHZ0a0ZvYW1F
cnJvcigpIDw8ICJvYmplY3QgbmFtZSBub3QgZm91bmQgaW4gRm9hbUZpbGUgaGVhZGVyIjsKKyAg
ICB9CisgIG9iamVjdEVudHJ5ID4+IG9iamVjdE5hbWVfOworfQorCit2b2lkIHZ0a09wZW5GT0FN
UmVhZGVyOjp2dGtGb2FtRW50cnlWYWx1ZTo6Y2xlYXIoKQoreworICBpZihtYW5hZ2VkXykKKyAg
ICB7CisgICAgaWYodHlwZV8gPT0gTEFCRUxMSVNUKQorICAgICAgeworICAgICAgZGVsZXRlIGxh
YmVsTGlzdFB0cl87CisgICAgICB9CisgICAgZWxzZSBpZih0eXBlXyA9PSBMQUJFTExJU1RMSVNU
KQorICAgICAgeworICAgICAgZGVsZXRlIGxhYmVsTGlzdExpc3RQdHJfOworICAgICAgfQorICAg
IGVsc2UgaWYodHlwZV8gPT0gU0NBTEFSTElTVCkKKyAgICAgIHsKKyAgICAgIHNjYWxhckxpc3RQ
dHJfLT5EZWxldGUoKTsKKyAgICAgIH0KKyAgICBlbHNlIGlmKHR5cGVfID09IFZFQ1RPUkxJU1Qp
CisgICAgICB7CisgICAgICB2ZWN0b3JMaXN0UHRyXy0+RGVsZXRlKCk7CisgICAgICB9CisgICAg
ZWxzZSBpZih0eXBlXyA9PSBTVFJJTkdMSVNUKQorICAgICAgeworICAgICAgZGVsZXRlIHN0cmlu
Z0xpc3RQdHJfOworICAgICAgfQorICAgIGVsc2UgaWYodHlwZV8gPT0gRU5UUllWQUxVRUxJU1Qp
CisgICAgICB7CisgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgZW50cnlWYWx1ZVB0cnNfLnNp
emUoKSA7IGkrKykKKyAgICAgICAgeworICAgICAgICBkZWxldGUgZW50cnlWYWx1ZVB0cnNfW2ld
OworICAgICAgICB9CisgICAgICB9CisgICAgZWxzZSBpZih0eXBlXyA9PSBESUNUSU9OQVJZKQor
ICAgICAgeworICAgICAgZGVsZXRlIGRpY3RQdHJfOworICAgICAgfQorICAgIH0KK30KKworLy8g
Z2VuZXJhbC1wdXJwb3NlIGxpc3QgcmVhZGVyIC0gZ3Vlc3MgdGhlIHR5cGUgb2YgdGhlIGxpc3Qg
YW5kIHJlYWQKKy8vIGl0LiBvbmx5IHN1cHBvcnRzIGFzY2lpIGZvcm1hdCBhbmQgYXNzdW1lcyB0
aGUgcHJlY2VkaW5nICcoJyBoYXMKKy8vIGFscmVhZHkgYmVlbiB0aHJvd24gYXdheS4gIHRoZSBy
ZWFkZXIgc3VwcG9ydHMgbmVzdGVkIGxpc3Qgd2l0aAorLy8gdmFyaWFibGUgbGVuZ3RocyAoZS4g
Zy4gYCgodG9rZW4gdG9rZW4pICh0b2tlbiB0b2tlbiB0b2tlbikpLicKKy8vIGFsc28gc3VwcG9y
dHMgY29tcG91bmQgb2YgdG9rZW5zIGFuZCBsaXN0cyAoZS4gZy4gYCgodG9rZW4gdG9rZW4pCisv
LyB0b2tlbiknKSBvbmx5IGlmIGEgbGlzdCBjb21lcyBhcyB0aGUgZmlyc3QgdmFsdWUuCit2b2lk
IHZ0a09wZW5GT0FNUmVhZGVyOjp2dGtGb2FtRW50cnlWYWx1ZTo6cmVhZExpc3QodnRrRm9hbUlP
b2JqZWN0JiBpbykKK3sKKyAgaW8ucmVhZCh0Xyk7CisKKyAgLy8gaW5pdGlhbCBndWVzcyBvZiB0
aGUgbGlzdCB0eXBlCisgIGlmKHRfLnR5cGUoKSA9PSB2dGtGb2FtVG9rZW46OkxBQkVMKQorICAg
IHsKKyAgICAvLyBpZiB0aGUgZmlyc3QgdG9rZW4gaXMgb2YgdHlwZSBMQUJFTCBpdCBtaWdodCBi
ZSBlaXRoZXIgYW4gZWxlbWVudCBvZgorICAgIC8vIGEgbGFiZWxMaXN0IG9yIHRoZSBzaXplIG9m
IGEgc3VibGlzdCBzbyBwcm9jZWVkIHRvIHRoZSBuZXh0IHRva2VuCisgICAgdnRrRm9hbVRva2Vu
IG5leHRUb2tlbjsKKyAgICBpZighaW8ucmVhZChuZXh0VG9rZW4pKQorICAgICAgeworICAgICAg
dGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAgIH0KKyAgICBp
ZihuZXh0VG9rZW4udHlwZSgpID09IHZ0a0ZvYW1Ub2tlbjo6TEFCRUwpCisgICAgICB7CisgICAg
ICBsYWJlbExpc3RQdHJfID0gbmV3IGludFZlY3RvcjsKKyAgICAgIGxhYmVsTGlzdFB0cl8tPnZh
bHVlLnB1c2hfYmFjayh0Xy5sYWJlbFRva2VuKCkpOworICAgICAgbGFiZWxMaXN0UHRyXy0+dmFs
dWUucHVzaF9iYWNrKG5leHRUb2tlbi5sYWJlbFRva2VuKCkpOworICAgICAgdHlwZV8gPSBMQUJF
TExJU1Q7CisgICAgICB9CisgICAgZWxzZSBpZihuZXh0VG9rZW4udHlwZSgpID09IHZ0a0ZvYW1U
b2tlbjo6U0NBTEFSKQorICAgICAgeworICAgICAgc2NhbGFyTGlzdFB0cl8gPSB2dGtEb3VibGVB
cnJheTo6TmV3KCk7CisgICAgICBzY2FsYXJMaXN0UHRyXy0+SW5zZXJ0TmV4dFZhbHVlKHRfLm51
bWJlcigpKTsKKyAgICAgIHNjYWxhckxpc3RQdHJfLT5JbnNlcnROZXh0VmFsdWUobmV4dFRva2Vu
Lm51bWJlcigpKTsKKyAgICAgIHR5cGVfID0gU0NBTEFSTElTVDsKKyAgICAgIH0KKyAgICBlbHNl
IGlmKG5leHRUb2tlbiA9PSAnKCcpIC8vIGxpc3Qgb2YgbGlzdDogcmVhZCByZWN1cnNpdmVseQor
ICAgICAgeworICAgICAgZW50cnlWYWx1ZVB0cnNfLnB1c2hfYmFjayhuZXcgdnRrRm9hbUVudHJ5
VmFsdWUpOworICAgICAgZW50cnlWYWx1ZVB0cnNfLmJhY2soKS0+cmVhZExpc3QoaW8pOworICAg
ICAgdHlwZV8gPSBFTlRSWVZBTFVFTElTVDsKKyAgICAgIH0KKyAgICBlbHNlIGlmKG5leHRUb2tl
biA9PSAnKScpIC8vIGxpc3Qgd2l0aCBvbmx5IG9uZSBsYWJlbCBlbGVtZW50CisgICAgICB7Cisg
ICAgICBsYWJlbExpc3RQdHJfID0gbmV3IGludFZlY3RvcjsKKyAgICAgIGxhYmVsTGlzdFB0cl8t
PnZhbHVlLnB1c2hfYmFjayh0Xy5sYWJlbFRva2VuKCkpOworICAgICAgdHlwZV8gPSBMQUJFTExJ
U1Q7CisgICAgICByZXR1cm47CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgdGhy
b3cgdnRrRm9hbUVycm9yKCkgPDwgIkV4cGVjdGVkIG51bWJlciwgKCBvciApLCBmb3VuZCAiIDw8
IG5leHRUb2tlbjsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYodF8udHlwZSgpID09IHZ0a0Zv
YW1Ub2tlbjo6U0NBTEFSKQorICAgIHsKKyAgICBzY2FsYXJMaXN0UHRyXyA9IHZ0a0RvdWJsZUFy
cmF5OjpOZXcoKTsKKyAgICBzY2FsYXJMaXN0UHRyXy0+SW5zZXJ0TmV4dFZhbHVlKHRfLm51bWJl
cigpKTsKKyAgICB0eXBlXyA9IFNDQUxBUkxJU1Q7CisgICAgfQorICAvLyBpZiB0aGUgZmlyc3Qg
d29yZCBpcyBhIHN0cmluZyB3ZSBoYXZlIHRvIHJlYWQgYW5vdGhlciB0b2tlbiB0byBkZXRlcm1p
bmUKKyAgLy8gaWYgdGhlIGZpcnN0IHdvcmQgaXMgYSBrZXl3b3JkIGZvciB0aGUgZm9sbG93aW5n
IGRpY3Rpb25hcnkKKyAgZWxzZSBpZih0Xy50eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpTVFJJTkcp
CisgICAgeworICAgIHZ0a0ZvYW1Ub2tlbiBuZXh0VG9rZW47CisgICAgaWYoIWlvLnJlYWQobmV4
dFRva2VuKSkKKyAgICAgIHsKKyAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJVbmV4cGVj
dGVkIEVPRiI7CisgICAgICB9CisgICAgaWYobmV4dFRva2VuLnR5cGUoKSA9PSB2dGtGb2FtVG9r
ZW46OlNUUklORykgLy8gbGlzdCBvZiBzdHJpbmdzCisgICAgICB7CisgICAgICBzdHJpbmdMaXN0
UHRyXyA9IG5ldyBzdHJpbmdWZWN0b3I7CisgICAgICBzdHJpbmdMaXN0UHRyXy0+dmFsdWUucHVz
aF9iYWNrKHRfLnN0cmluZ1Rva2VuKCkpOworICAgICAgc3RyaW5nTGlzdFB0cl8tPnZhbHVlLnB1
c2hfYmFjayhuZXh0VG9rZW4uc3RyaW5nVG9rZW4oKSk7CisgICAgICB0eXBlXyA9IFNUUklOR0xJ
U1Q7CisgICAgICB9CisgICAgLy8gZGljdGlvbmFyeSB3aXRoIHRoZSBhbHJlYWR5IHJlYWQgc3Ry
aW5nVG9rZW4gYXMgdGhlIGZpcnN0IGtleXdvcmQKKyAgICBlbHNlIGlmKG5leHRUb2tlbiA9PSAn
eycpCisgICAgICB7CisgICAgICBpZih0Xy5zdHJpbmdUb2tlbigpID09ICIiKQorICAgICAgICB7
CisgICAgICAgIHRocm93ICJFbXB0eSBzdHJpbmcgaXMgaW52YWxpZCBhcyBhIGtleXdvcmQgZm9y
IGRpY3Rpb25hcnkgZW50cnkiOworICAgICAgICB9CisgICAgICByZWFkRGljdGlvbmFyeShpbywg
dF8uc3RyaW5nVG9rZW4oKSk7CisgICAgICAvLyB0aGUgZGljdGlvbmFyeSByZWFkIGFzIGxpc3Qg
aGFzIHRoZSBlbnRyeSB0ZXJtaW5hdG9yICc7JyBzbworICAgICAgLy8gd2UgaGF2ZSB0byBza2lw
IGl0CisgICAgICByZXR1cm47CisgICAgICB9CisgICAgZWxzZSBpZihuZXh0VG9rZW4gPT0gJykn
KSAvLyBsaXN0IHdpdGggb25seSBvbmUgc3RyaW5nIGVsZW1lbnQKKyAgICAgIHsKKyAgICAgIHN0
cmluZ0xpc3RQdHJfID0gbmV3IHN0cmluZ1ZlY3RvcjsKKyAgICAgIHN0cmluZ0xpc3RQdHJfLT52
YWx1ZS5wdXNoX2JhY2sodF8uc3RyaW5nVG9rZW4oKSk7CisgICAgICB0eXBlXyA9IFNUUklOR0xJ
U1Q7CisgICAgICByZXR1cm47CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgdGhy
b3cgdnRrRm9hbUVycm9yKCkgPDwgIkV4cGVjdGVkIHN0cmluZywgeyBvciApLCBmb3VuZCAiIDw8
IG5leHRUb2tlbjsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYodF8gPT0gJygnKSAvLyBsaXN0
IG9mIGxpc3RzOiByZWFkIHJlY3Vyc2l2ZWx5CisgICAgeworICAgIGVudHJ5VmFsdWVQdHJzXy5w
dXNoX2JhY2sobmV3IHZ0a0ZvYW1FbnRyeVZhbHVlKTsKKyAgICBlbnRyeVZhbHVlUHRyc18uYmFj
aygpLT5yZWFkTGlzdChpbyk7CisgICAgLy8gcmVhZCBhbGwgdGhlIGZvbGxvd2luZyB2YWx1ZXMg
YXMgYXJiaXRyYXJ5IGVudHJ5VmFsdWVzCisgICAgLy8gdGhlIGFscGhhQ29udGFjdEFuZ2xlIGIu
Yy4gaW4gbXVsdGlwaGFzZUludGVyRm9hbS9kYW1CcmVhazRwaGFzZQorICAgIC8vIHJlYXF1aXJl
cyB0aGlzIHRyZWF0bWVudCAocmVhZGluZyBieSByZWFkTGlzdCgpIGlzIG5vdCBlbm91Z2gpCisg
ICAgZG8KKyAgICAgIHsKKyAgICAgIGVudHJ5VmFsdWVQdHJzXy5wdXNoX2JhY2sobmV3IHZ0a0Zv
YW1FbnRyeVZhbHVlKTsKKyAgICAgIGVudHJ5VmFsdWVQdHJzXy5iYWNrKCktPnJlYWQoaW8pOwor
ICAgICAgfQorICAgIHdoaWxlKCplbnRyeVZhbHVlUHRyc18uYmFjaygpICE9ICcpJyAmJiAqZW50
cnlWYWx1ZVB0cnNfLmJhY2soKSAhPSAnfScKKyAgICAgICYmICplbnRyeVZhbHVlUHRyc18uYmFj
aygpICE9ICc7Jyk7CisKKyAgICBpZigqZW50cnlWYWx1ZVB0cnNfLmJhY2soKSAhPSAnKScpCisg
ICAgICB7CisgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiRXhwZWN0ZWQgKSBiZWZvcmUg
IgorICAgICAgICA8PCBlbnRyeVZhbHVlUHRyc18uYmFjaygpLT50b2tlbigpOworICAgICAgfQor
CisgICAgLy8gZGVsZXRlICcpJworICAgIGRlbGV0ZSBlbnRyeVZhbHVlUHRyc18uYmFjaygpOwor
ICAgIGVudHJ5VmFsdWVQdHJzXy5wb3BfYmFjaygpOworICAgIHR5cGVfID0gRU5UUllWQUxVRUxJ
U1Q7CisgICAgcmV0dXJuOworICAgIH0KKyAgZWxzZSBpZih0XyA9PSAnKScpIC8vIGVtcHR5IGxp
c3QKKyAgICB7CisgICAgdHlwZV8gPSBFTVBUWUxJU1Q7CisgICAgcmV0dXJuOworICAgIH0KKwor
ICB3aGlsZShpby5yZWFkKHRfKSAmJiB0XyAhPSAnKScpCisgICAgeworICAgIGlmKHR5cGVfID09
IExBQkVMTElTVCkKKyAgICAgIHsKKyAgICAgIGlmKHRfLnR5cGUoKSA9PSB2dGtGb2FtVG9rZW46
OlNDQUxBUikgLy8gc3dpdGNoIHRvIHNjYWxhckxpc3QKKyAgICAgICAgeworICAgICAgICAvLyBs
YWJlbExpc3RQdHJfIGFuZCBzY2FsYXJMaXN0UHRyXyBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUg
dW5pb24gc28KKyAgICAgICAgLy8gd2UgbmVlZCBhIHRlbXByYXJ5IHBvaW50ZXIKKyAgICAgICAg
dnRrRG91YmxlQXJyYXkqIHNsUHRyID0gdnRrRG91YmxlQXJyYXk6Ok5ldygpOworICAgICAgICBj
b25zdCB2dGtJZFR5cGUgc2l6ZSA9IGxhYmVsTGlzdFB0cl8tPnZhbHVlLnNpemUoKTsKKyAgICAg
ICAgc2xQdHItPlNldE51bWJlck9mVmFsdWVzKHNpemUpOworICAgICAgICBmb3IodnRrSWRUeXBl
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBzbFB0ci0+U2V0
VmFsdWUoaSwgZG91YmxlKGxhYmVsTGlzdFB0cl8tPnZhbHVlW2ldKSk7CisgICAgICAgICAgfQor
ICAgICAgICBkZWxldGUgbGFiZWxMaXN0UHRyXzsKKyAgICAgICAgc2xQdHItPkluc2VydE5leHRW
YWx1ZSh0Xy5udW1iZXIoKSk7CisgICAgICAgIHNjYWxhckxpc3RQdHJfID0gc2xQdHI7IC8vIGNv
cHkgYWZ0ZXIgbGFiZWxMaXN0UHRyXyBpcyBkZWxldGVkCisgICAgICAgIHR5cGVfID0gU0NBTEFS
TElTVDsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZih0Xy50eXBlKCkgPT0gdnRrRm9hbVRva2Vu
OjpMQUJFTCkKKyAgICAgICAgeworICAgICAgICBsYWJlbExpc3RQdHJfLT52YWx1ZS5wdXNoX2Jh
Y2sodF8ubGFiZWxUb2tlbigpKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJFeHBlY3RlZCBhIG51bWJlciwgZm91bmQg
IiA8PCB0XzsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UgaWYodHlwZV8gPT0gU0NBTEFS
TElTVCkKKyAgICAgIHsKKyAgICAgIGlmKHRfLmlzTnVtYmVyKCkpCisgICAgICAgIHsKKyAgICAg
ICAgc2NhbGFyTGlzdFB0cl8tPkluc2VydE5leHRWYWx1ZSh0Xy5udW1iZXIoKSk7CisgICAgICAg
IH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8
PCAiRXhwZWN0ZWQgYSBudW1iZXIsIGZvdW5kICIgPDwgdF87CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICBlbHNlIGlmKHR5cGVfID09IFNUUklOR0xJU1QpCisgICAgICB7CisgICAgICBpZih0Xy50
eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpTVFJJTkcpCisgICAgICAgIHsKKyAgICAgICAgc3RyaW5n
TGlzdFB0cl8tPnZhbHVlLnB1c2hfYmFjayh0Xy5zdHJpbmdUb2tlbigpKTsKKyAgICAgICAgfQor
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJF
eHBlY3RlZCBhIHN0cmluZywgZm91bmQgIiA8PCB0XzsKKyAgICAgICAgfQorICAgICAgfQorICAg
IGVsc2UgaWYodHlwZV8gPT0gRU5UUllWQUxVRUxJU1QpCisgICAgICB7CisgICAgICBpZih0Xy50
eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpMQUJFTCkKKyAgICAgICAgeworICAgICAgICAvLyBza2lw
IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbWFrZSB0aGluZ3Mgc2ltcGxlCisgICAgICAgIGlm
KCFpby5yZWFkKHRfKSkKKyAgICAgICAgICB7CisgICAgICAgICAgdGhyb3cgdnRrRm9hbUVycm9y
KCkgPDwgIlVuZXhwZWN0ZWQgRU9GIjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlm
KHRfICE9ICcoJykKKyAgICAgICAgeworICAgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAi
RXhwZWN0ZWQgKCwgZm91bmQgIiA8PCB0XzsKKyAgICAgICAgfQorICAgICAgZW50cnlWYWx1ZVB0
cnNfLnB1c2hfYmFjayhuZXcgdnRrRm9hbUVudHJ5VmFsdWUpOworICAgICAgZW50cnlWYWx1ZVB0
cnNfLmJhY2soKS0+cmVhZExpc3QoaW8pOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAg
ICAgIHRocm93IHZ0a0ZvYW1FcnJvcigpIDw8ICJVbmV4cGVjdGVkIHRva2VuICIgPDwgdF87Cisg
ICAgICB9CisgICAgfQorCisgIGlmKHR5cGVfID09IFNDQUxBUkxJU1QpCisgICAgeworICAgIHNj
YWxhckxpc3RQdHJfLT5TcXVlZXplKCk7CisgICAgfQorfQorCisvLyBhIGxpc3Qgb2YgZGljdGlv
bmFyaWVzIGlzIGFjdHVhbGx5IHJlYWQgYXMgYSBkaWN0aW9uYXJ5Cit2b2lkIHZ0a09wZW5GT0FN
UmVhZGVyOjp2dGtGb2FtRW50cnlWYWx1ZTo6cmVhZERpY3Rpb25hcnkodnRrRm9hbUlPb2JqZWN0
JiBpbywKKyAgY29uc3QgdnRrU3RkU3RyaW5nJiBmaXJzdEtleXdvcmQpCit7CisgIGRpY3RQdHJf
ID0gbmV3IHZ0a0ZvYW1EaWN0OworICB0eXBlXyA9IERJQ1RJT05BUlk7CisgIGRpY3RQdHJfLT5y
ZWFkKGlvLCB0cnVlLCBmaXJzdEtleXdvcmQpOworfQorCisvLyBndWVzcyB0aGUgdHlwZSBvZiB0
aGUgZ2l2ZW4gZW50cnkgdmFsdWUgYW5kIHJlYWQgaXQKK3ZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6
OnZ0a0ZvYW1FbnRyeVZhbHVlOjpyZWFkKHZ0a0ZvYW1JT29iamVjdCYgaW8pCit7CisgIGlmKCFp
by5yZWFkKHRfKSkKKyAgICB7CisgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIlVuZXhwZWN0
ZWQgRU9GIjsKKyAgICB9CisKKyAgaWYodF8gPT0gJ3snKQorICAgIHsKKyAgICByZWFkRGljdGlv
bmFyeShpbyk7CisgICAgcmV0dXJuOworICAgIH0KKyAgLy8gZm9yIHJlYWRpbmcgc3VibGlzdCBm
cm9tIHZ0a0ZvYW1FbnRyeVZhbHVlOjpyZWFkTGlzdCgpIG9yIHRoZXJlCisgIC8vIGFyZSBjYXNl
cyB3aGVyZSBsaXN0cyB3aXRob3V0IHRoZSAobm9uKXVuaWZvcm0ga2V5d29yZCBhcHBlYXIKKyAg
Ly8gKGUuIGcuIGNvb2RsZXMvcGl0c0RhaWx5LzAvVSwgSHJ2J3MgdW5pZm9ybUZpeGVkVmFsdWUg
Yi5jLikKKyAgZWxzZSBpZih0XyA9PSAnKCcpCisgICAgeworICAgIHJlYWRMaXN0KGlvKTsKKyAg
ICByZXR1cm47CisgICAgfQorICBlbHNlIGlmKHRfID09ICJ1bmlmb3JtIikKKyAgICB7CisgICAg
aWYoIWlvLnJlYWQodF8pKQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkKKyAg
ICAgICAgPDwgIkV4cGVjdGVkIGEgdW5pZm9ybSB2YWx1ZSBvciBhIGxpc3QsIGZvdW5kIHVuZXhw
ZWN0ZWQgRU9GIjsKKyAgICAgIH0KKyAgICBpZih0XyA9PSAnKCcpCisgICAgICB7CisgICAgICBy
ZWFkTGlzdChpbyk7CisgICAgICB9CisgICAgZWxzZSBpZih0Xy50eXBlKCkgPT0gdnRrRm9hbVRv
a2VuOjpMQUJFTCkKKyAgICAgIHsKKyAgICAgIHR5cGVfID0gTEFCRUw7CisgICAgICB9CisgICAg
ZWxzZSBpZih0Xy50eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpTQ0FMQVIpCisgICAgICB7CisgICAg
ICB0eXBlXyA9IFNDQUxBUjsKKyAgICAgIH0KKyAgICBlbHNlIGlmKHRfLnR5cGUoKSA9PSB2dGtG
b2FtVG9rZW46OlNUUklORykKKyAgICAgIHsKKyAgICAgIHR5cGVfID0gU1RSSU5HOworICAgICAg
fQorICAgIGVsc2UgLy8gdW5leHBlY3RlZCBwdW5jdHVhdGlvbiB0b2tlbgorICAgICAgeworICAg
ICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIkV4cGVjdGVkIG51bWJlciwgc3RyaW5nIG9yICgs
IGZvdW5kICIgPDwgdF87CisgICAgICB9CisgICAgaXNVbmlmb3JtXyA9IHRydWU7CisgICAgfQor
ICBlbHNlIGlmKHRfID09ICJub251bmlmb3JtIikKKyAgICB7CisgICAgaWYoIWlvLnJlYWQodF8p
KQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9hbUVycm9yKCkgPDwgIkV4cGVjdGVkIGxpc3Qg
dHlwZSBzcGVjaWZpZXIsIGZvdW5kIEVPRiI7CisgICAgICB9CisgICAgaWYodF8gPT0gIkxpc3Q8
dmVjdG9yPiIpCisgICAgICB7CisgICAgICBpc1VuaWZvcm1fID0gZmFsc2U7CisgICAgICByZWFk
VmVjdG9yTGlzdChpbywgZmFsc2UpOworICAgICAgfQorICAgIGVsc2UgaWYodF8gPT0gIkxpc3Q8
c2NhbGFyPiIpCisgICAgICB7CisgICAgICBpc1VuaWZvcm1fID0gZmFsc2U7CisgICAgICByZWFk
U2NhbGFyTGlzdChpbyk7CisgICAgICB9CisgICAgLy8gTGlzdDxib29sPiBpcyByZWFkIGFzIExp
c3Q8bGFiZWw+CisgICAgZWxzZSBpZih0XyA9PSAiTGlzdDxsYWJlbD4iIHx8IHRfID09ICJMaXN0
PGJvb2w+IikKKyAgICAgIHsKKyAgICAgIGlzVW5pZm9ybV8gPSBmYWxzZTsKKyAgICAgIHJlYWRM
YWJlbExpc3QoaW8pOworICAgICAgfQorICAgIC8vIGFuIGVtcHR5IGxpc3QgZG9lc24ndCBoYXZl
IGEgbGlzdCB0eXBlIHNwZWNpZmllcgorICAgIGVsc2UgaWYodF8udHlwZSgpID09IHZ0a0ZvYW1U
b2tlbjo6TEFCRUwgJiYgdF8ubGFiZWxUb2tlbigpID09IDApCisgICAgICB7CisgICAgICB0eXBl
XyA9IEVNUFRZTElTVDsKKyAgICAgIGlzVW5pZm9ybV8gPSBmYWxzZTsKKyAgICAgIGlvLnJlYWRF
eHBlY3RpbmcoJygnKTsKKyAgICAgIGlvLnJlYWRFeHBlY3RpbmcoJyknKTsKKyAgICAgIH0KKyAg
ICBlbHNlCisgICAgICB7CisgICAgICB0aHJvdyB2dGtGb2FtRXJyb3IoKSA8PCAiVW5zdXBwb3J0
ZWQgbm9udW5pZm9ybSBsaXN0IHR5cGUgIiA8PCB0XzsKKyAgICAgIH0KKyAgICB9CisgIC8vIHpv
bmVzIGhhdmUgbGlzdCB3aXRob3V0IGEgdW5pZm9ybS9ub251bmlmb3JtIGtleXdvcmQKKyAgLy8g
TGlzdDxib29sPiBpcyByZWFkIGFzIExpc3Q8bGFiZWw+CisgIC8vIChlLiBnLiBmbGlwTWFwIGVu
dHJ5IGluIHBvaW50L2ZhY2UvY2VsbFpvbmVzKQorICBlbHNlIGlmKHRfID09ICJMaXN0PGxhYmVs
PiIgfHwgdF8gPT0gIkxpc3Q8Ym9vbD4iKQorICAgIHsKKyAgICBpc1VuaWZvcm1fID0gZmFsc2U7
CisgICAgcmVhZExhYmVsTGlzdChpbyk7CisgICAgfQorICBlbHNlIGlmKHRfLnR5cGUoKSA9PSB2
dGtGb2FtVG9rZW46OkxBQkVMKQorICAgIHsKKyAgICB0eXBlXyA9IExBQkVMOworICAgIH0KKyAg
ZWxzZSBpZih0Xy50eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpTQ0FMQVIpCisgICAgeworICAgIHR5
cGVfID0gU0NBTEFSOworICAgIH0KKyAgZWxzZSBpZih0Xy50eXBlKCkgPT0gdnRrRm9hbVRva2Vu
OjpTVFJJTkcpCisgICAgeworICAgIHR5cGVfID0gU1RSSU5HOworICAgIH0KKyAgZWxzZSBpZih0
Xy50eXBlKCkgPT0gdnRrRm9hbVRva2VuOjpQVU5DVFVBVElPTikKKyAgICB7CisgICAgdHlwZV8g
PSBQVU5DVFVBVElPTjsKKyAgICB9Cit9CisKKy8vIHJlYWQgdmFsdWVzIG9mIGFuIGVudHJ5Cit2
b2lkIHZ0a09wZW5GT0FNUmVhZGVyOjp2dGtGb2FtRW50cnk6OnJlYWQodnRrRm9hbUlPb2JqZWN0
JiBpbykKIHsKLSAgdnRrc3RkOjp2ZWN0b3I8IGludCA+IHZhbHVlOwotfTsKKyAgZm9yKDs7KQor
ICAgIHsKKyAgICB2YWx1ZVB0cnNfLnB1c2hfYmFjayhuZXcgdnRrRm9hbUVudHJ5VmFsdWUpOwor
ICAgIHZhbHVlUHRyc18uYmFjaygpLT5yZWFkKGlvKTsKIAotc3RydWN0IGludFZlY3RvclZlY3Rv
cgotewotICB2dGtzdGQ6OnZlY3RvcjwgdnRrc3RkOjp2ZWN0b3I8IGludCA+ID4gdmFsdWU7Ci19
OworICAgIGlmKHZhbHVlUHRyc18uc2l6ZSgpID49IDIpCisgICAgICB7CisgICAgICB2dGtGb2Ft
RW50cnlWYWx1ZSYgc2Vjb25kTGFzdFZhbHVlCisgICAgICAgID0gKnZhbHVlUHRyc19bdmFsdWVQ
dHJzXy5zaXplKCkgLSAyXTsKKyAgICAgIGlmKHNlY29uZExhc3RWYWx1ZS50eXBlKCkgPT0gdnRr
Rm9hbUVudHJ5VmFsdWU6OkxBQkVMKQorICAgICAgICB7CisgICAgICAgIHZ0a0ZvYW1FbnRyeVZh
bHVlJiBsYXN0VmFsdWUgPSAqdmFsdWVQdHJzXy5iYWNrKCk7CisKKyAgICAgICAgLy8gYSB6ZXJv
LXNpemVkIG5vbnVuaWZvcm0gbGlzdCB3aXRob3V0IHByZWZpeGluZyAibm9udW5pZm9ybSIKKyAg
ICAgICAgLy8ga2V5d29yZCBub3IgbGlzdCB0eXBlIHNwZWNpZmllciAoaS4gZS4gYDAoKSc7Cisg
ICAgICAgIC8vIGUuIGcuIHNpbXBsZUVuZ2luZS8wL3BvbHlNZXNoL3BvaW50Wm9uZXMpIHJlcXVp
cmVzIHNwZWNpYWwKKyAgICAgICAgLy8gY2FyZSAob25lIHdpdGggbm9udW5pZm9ybSBwcmVmaXgg
aXMgdHJlYXRlZCB3aXRoaW4KKyAgICAgICAgLy8gdnRrRm9hbUVudHJ5VmFsdWU6OnJlYWQoKSku
IHN0aWxsIHRoaXMgY2F1c2VzIGVycm9ybm91cworICAgICAgICAvLyBiZWhhdmlvciBmb3IgYDAg
bm9udW5pZm9ybSAwKCknIGJ1dCB0aGlzIHNob3VsZCBiZSBleHRyZW1lbHkKKyAgICAgICAgLy8g
cmFyZQorICAgICAgICBpZihsYXN0VmFsdWUudHlwZSgpID09IHZ0a0ZvYW1FbnRyeVZhbHVlOjpF
TVBUWUxJU1QKKyAgICAgICAgICAmJiBzZWNvbmRMYXN0VmFsdWUgPT0gMCkKKyAgICAgICAgICB7
CisgICAgICAgICAgZGVsZXRlIHZhbHVlUHRyc18uYmFjaygpOworICAgICAgICAgIHZhbHVlUHRy
c18ucG9wX2JhY2soKTsgLy8gZGVsZXRlIHRoZSBsYXN0IHZhbHVlCisgICAgICAgICAgdmFsdWVQ
dHJzXy5iYWNrKCktPnNldEVtcHR5TGlzdCgpOyAvLyBtYXJrIG5ldyBsYXN0IHZhbHVlIGFzIGVt
cHR5CisgICAgICAgICAgfQorICAgICAgICAvLyBmb3IgYW4gZXhjZXB0aW9uYWwgZXhwcmVzc2lv
biBvZiBgTEFCRUx7TEFCRUxvclNDQUxBUn0nIHdpdGhvdXQKKyAgICAgICAgLy8gdHlwZSBwcmVm
aXggKGUuIGcuIGAyey0wfScgaW4gbWl4ZWRSaG9FIEIuQy4gaW4KKyAgICAgICAgLy8gcmhvcFNv
bmljRm9hbS9zaG9ja1R1YmUpCisgICAgICAgIGVsc2UgaWYobGFzdFZhbHVlLnR5cGUoKSA9PSB2
dGtGb2FtRW50cnlWYWx1ZTo6RElDVElPTkFSWSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYo
bGFzdFZhbHVlLmRpY3Rpb25hcnkoKS50eXBlKCkgPT0gdnRrRm9hbURpY3Q6OlVOSUZPUk1MQUJF
TExJU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHNlY29u
ZExhc3RWYWx1ZS50b2tlbigpLmxhYmVsVG9rZW4oKTsKKyAgICAgICAgICAgIGNvbnN0IGludCB2
YWx1ZSA9IGxhc3RWYWx1ZS5kaWN0aW9uYXJ5KCkudG9rZW4oKS5sYWJlbFRva2VuKCk7CisgICAg
ICAgICAgICAvLyBkZWxldGUgbGFzdCB0d28gdmFsdWVzCisgICAgICAgICAgICBkZWxldGUgdmFs
dWVQdHJzXy5iYWNrKCk7CisgICAgICAgICAgICB2YWx1ZVB0cnNfLnBvcF9iYWNrKCk7CisgICAg
ICAgICAgICBkZWxldGUgdmFsdWVQdHJzXy5iYWNrKCk7CisgICAgICAgICAgICB2YWx1ZVB0cnNf
LnBvcF9iYWNrKCk7CisgICAgICAgICAgICAvLyBtYWtlIG5ldyBsYWJlbExpc3QKKyAgICAgICAg
ICAgIHZhbHVlUHRyc18ucHVzaF9iYWNrKG5ldyB2dGtGb2FtRW50cnlWYWx1ZSk7CisgICAgICAg
ICAgICB2YWx1ZVB0cnNfLmJhY2soKS0+bWFrZUxhYmVsTGlzdCh2YWx1ZSwgc2l6ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihsYXN0VmFsdWUuZGljdGlvbmFyeSgpLnR5cGUo
KQorICAgICAgICAgICAgPT0gdnRrRm9hbURpY3Q6OlVOSUZPUk1TQ0FMQVJMSVNUKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBzZWNvbmRMYXN0VmFsdWUudG9r
ZW4oKS5sYWJlbFRva2VuKCk7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgdmFsdWUgPSBsYXN0
VmFsdWUuZGljdGlvbmFyeSgpLnRva2VuKCkubnVtYmVyKCk7CisgICAgICAgICAgICAvLyBkZWxl
dGUgbGFzdCB0d28gdmFsdWVzCisgICAgICAgICAgICBkZWxldGUgdmFsdWVQdHJzXy5iYWNrKCk7
CisgICAgICAgICAgICB2YWx1ZVB0cnNfLnBvcF9iYWNrKCk7CisgICAgICAgICAgICBkZWxldGUg
dmFsdWVQdHJzXy5iYWNrKCk7CisgICAgICAgICAgICB2YWx1ZVB0cnNfLnBvcF9iYWNrKCk7Cisg
ICAgICAgICAgICAvLyBtYWtlIG5ldyBsYWJlbExpc3QKKyAgICAgICAgICAgIHZhbHVlUHRyc18u
cHVzaF9iYWNrKG5ldyB2dGtGb2FtRW50cnlWYWx1ZSk7CisgICAgICAgICAgICB2YWx1ZVB0cnNf
LmJhY2soKS0+bWFrZVNjYWxhckxpc3QodmFsdWUsIHNpemUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQogCi1zdHJ1Y3QgZmFjZVZlY3RvclZlY3Rvcgot
ewotICB2dGtzdGQ6OnZlY3RvcjwgdnRrc3RkOjp2ZWN0b3I8IGZhY2UgPiA+IHZhbHVlOwotfTsK
KyAgICBpZigqdmFsdWVQdHJzXy5iYWNrKCkgPT0gJzsnKQorICAgICAgeworICAgICAgZGVsZXRl
IHZhbHVlUHRyc18uYmFjaygpOworICAgICAgdmFsdWVQdHJzXy5wb3BfYmFjaygpOworICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgZWxzZSBpZih2YWx1ZVB0cnNfLmJhY2soKS0+dHlwZSgpID09
IHZ0a0ZvYW1FbnRyeVZhbHVlOjpESUNUSU9OQVJZKQorICAgICAgeworICAgICAgLy8gc3ViZGlj
dGlvbmFyeSBpcyBub3Qgc3VmZml4ZWQgYnkgYW4gZW50cnkgdGVybWluYXRvciAnOycKKyAgICAg
IGJyZWFrOworICAgICAgfQorICAgIGVsc2UgaWYoKnZhbHVlUHRyc18uYmFjaygpID09ICd9JyB8
fCAqdmFsdWVQdHJzXy5iYWNrKCkgPT0gJyknKQorICAgICAgeworICAgICAgdGhyb3cgdnRrRm9h
bUVycm9yKCkgPDwgIlVubWF0Y2hlZCAiIDw8IHZhbHVlUHRyc18uYmFjaygpLT50b2tlbigpOwor
ICAgICAgfQorICAgIH0KK30KIAogdnRrT3BlbkZPQU1SZWFkZXI6OnZ0a09wZW5GT0FNUmVhZGVy
KCkKIHsKQEAgLTk1LDYwICsyMTY4LDE0NCBAQAogICB0aGlzLT5GaWxlTmFtZSA9IE5VTEw7CiAK
ICAgLy9WVEsgQ0xBU1NFUwotICB0aGlzLT5Qb2ludHMgPSB2dGtQb2ludHM6Ok5ldygpOworICB0
aGlzLT5QYXRjaERhdGFBcnJheVNlbGVjdGlvbiA9IHZ0a0RhdGFBcnJheVNlbGVjdGlvbjo6TmV3
KCk7CiAgIHRoaXMtPkNlbGxEYXRhQXJyYXlTZWxlY3Rpb24gPSB2dGtEYXRhQXJyYXlTZWxlY3Rp
b246Ok5ldygpOworICB0aGlzLT5Qb2ludERhdGFBcnJheVNlbGVjdGlvbiA9IHZ0a0RhdGFBcnJh
eVNlbGVjdGlvbjo6TmV3KCk7CisKKyAgLy8gU2V0dXAgdGhlIFNlbGVjdGlvbiBvYnNlcnZlciBm
b3IgdGhlIGFib3ZlIHNlbGVjdGlvbiBhcnJheXMKKyAgdGhpcy0+U2VsZWN0aW9uT2JzZXJ2ZXIg
PSB2dGtDYWxsYmFja0NvbW1hbmQ6Ok5ldygpOworICB0aGlzLT5TZWxlY3Rpb25PYnNlcnZlcgor
ICAgIC0+U2V0Q2FsbGJhY2soJnZ0a09wZW5GT0FNUmVhZGVyOjpTZWxlY3Rpb25Nb2RpZmllZENh
bGxiYWNrKTsKKyAgdGhpcy0+U2VsZWN0aW9uT2JzZXJ2ZXItPlNldENsaWVudERhdGEodGhpcyk7
CisKKyAgdGhpcy0+UGF0Y2hEYXRhQXJyYXlTZWxlY3Rpb24KKyAgICAtPkFkZE9ic2VydmVyKHZ0
a0NvbW1hbmQ6Ok1vZGlmaWVkRXZlbnQsdGhpcy0+U2VsZWN0aW9uT2JzZXJ2ZXIpOworICB0aGlz
LT5DZWxsRGF0YUFycmF5U2VsZWN0aW9uCisgICAgLT5BZGRPYnNlcnZlcih2dGtDb21tYW5kOjpN
b2RpZmllZEV2ZW50LHRoaXMtPlNlbGVjdGlvbk9ic2VydmVyKTsKKyAgdGhpcy0+UG9pbnREYXRh
QXJyYXlTZWxlY3Rpb24KKyAgICAtPkFkZE9ic2VydmVyKHZ0a0NvbW1hbmQ6Ok1vZGlmaWVkRXZl
bnQsdGhpcy0+U2VsZWN0aW9uT2JzZXJ2ZXIpOworCisgIC8vIEluaXRpYWxpc2UgdGhlIFNlbGVj
dGlvbiBzdGF0dXMgYXJyYXlzCisgIHRoaXMtPkNlbGxTZWxlY3Rpb25PbGRTdGF0dXMgPSAwOwor
ICB0aGlzLT5Qb2ludFNlbGVjdGlvbk9sZFN0YXR1cyA9IDA7CisgIHRoaXMtPlBhdGNoU2VsZWN0
aW9uT2xkU3RhdHVzID0gMDsKKyAgdGhpcy0+Q2VsbFNlbGVjdGlvblN0YXR1cyA9IDA7CisgIHRo
aXMtPlBvaW50U2VsZWN0aW9uU3RhdHVzID0gMDsKKyAgdGhpcy0+UGF0Y2hTZWxlY3Rpb25TdGF0
dXMgPSAwOwogCiAgIC8vREFUQSBDT1VOVFMKLSAgdGhpcy0+TnVtRmFjZXMgPSAwOwotICB0aGlz
LT5OdW1Qb2ludHMgPSAwOwogICB0aGlzLT5OdW1DZWxscyA9IDA7CiAKICAgdGhpcy0+VGltZVN0
ZXBEYXRhID0gbmV3IHN0cmluZ1ZlY3RvcjsKLSAgdGhpcy0+UGF0aCA9IG5ldyBzdGRTdHJpbmc7
Ci0gIHRoaXMtPlBhdGhQcmVmaXggPSBuZXcgc3RkU3RyaW5nOworICB0aGlzLT5MYWdyYW5naWFu
VGltZVN0ZXBEYXRhID0gbmV3IHN0cmluZ1ZlY3RvcjsKKyAgdGhpcy0+T2xkRmlsZU5hbWUgPSBu
ZXcgdnRrU3RkU3RyaW5nOworICB0aGlzLT5QYXRoUHJlZml4ID0gbmV3IHZ0a1N0ZFN0cmluZzsK
ICAgdGhpcy0+UG9seU1lc2hQb2ludHNEaXIgPSBuZXcgc3RyaW5nVmVjdG9yOwogICB0aGlzLT5Q
b2x5TWVzaEZhY2VzRGlyID0gbmV3IHN0cmluZ1ZlY3RvcjsKLSAgdGhpcy0+Qm91bmRhcnlOYW1l
cyA9IG5ldyBzdHJpbmdWZWN0b3I7Ci0gIHRoaXMtPlBvaW50Wm9uZU5hbWVzID0gbmV3IHN0cmlu
Z1ZlY3RvcjsKLSAgdGhpcy0+RmFjZVpvbmVOYW1lcyA9IG5ldyBzdHJpbmdWZWN0b3I7Ci0gIHRo
aXMtPkNlbGxab25lTmFtZXMgPSBuZXcgc3RyaW5nVmVjdG9yOwotCi0gIHRoaXMtPkZhY2VQb2lu
dHMgPSBuZXcgaW50VmVjdG9yVmVjdG9yOwotICB0aGlzLT5GYWNlc093bmVyQ2VsbCA9IG5ldyBp
bnRWZWN0b3JWZWN0b3I7Ci0gIHRoaXMtPkZhY2VzTmVpZ2hib3JDZWxsID0gbmV3IGludFZlY3Rv
clZlY3RvcjsKLSAgdGhpcy0+RmFjZXNPZkNlbGwgPSBuZXcgZmFjZVZlY3RvclZlY3RvcjsKLSAg
dGhpcy0+U2l6ZU9mQm91bmRhcnkgPSBuZXcgaW50VmVjdG9yOwogCiAgIC8vREFUQSBUSU1FUwog
ICB0aGlzLT5OdW1iZXJPZlRpbWVTdGVwcyA9IDA7CiAgIHRoaXMtPlN0ZXBzID0gTlVMTDsKKyAg
dGhpcy0+VGltZU5hbWVzID0gdnRrU3RyaW5nQXJyYXk6Ok5ldygpOwogICB0aGlzLT5UaW1lU3Rl
cCA9IDA7CiAgIHRoaXMtPlRpbWVTdGVwUmFuZ2VbMF0gPSAwOwogICB0aGlzLT5UaW1lU3RlcFJh
bmdlWzFdID0gMDsKLSAgdGhpcy0+UmVxdWVzdEluZm9ybWF0aW9uRmxhZyA9IHRydWU7CisKKyAg
Ly8gZm9yIGNhY2hpbmcgbWVzaAorICB0aGlzLT5DYWNoZU1lc2ggPSAxOworICB0aGlzLT5PbGRU
aW1lU3RlcCA9IC0xOworICB0aGlzLT5JbnRlcm5hbE1lc2ggPSBOVUxMOworICB0aGlzLT5Cb3Vu
ZGFyeU1lc2ggPSBOVUxMOworICB0aGlzLT5Cb3VuZGFyeURpY3QgPSBOVUxMOworICB0aGlzLT5G
YWNlT3duZXIgPSBOVUxMOworICB0aGlzLT5Qb2ludFpvbmVNZXNoID0gTlVMTDsKKyAgdGhpcy0+
RmFjZVpvbmVNZXNoID0gTlVMTDsKKyAgdGhpcy0+Q2VsbFpvbmVNZXNoID0gTlVMTDsKKworICAv
LyBmb3IgcmVhZGluZyB6b25lcworICB0aGlzLT5SZWFkWm9uZXMgPSAwOyAvLyB0dXJuZWQgb2Zm
IGJ5IGRlZmF1bHQKKyAgLy8gZm9yIGFjY3VtdWxhdGluZyBwYXRjaGVzIGFjcm9zcyB0aW1lLXN0
ZXBzIChUdXJuZWQgb24gYnkgZGVmYXVsdCkKKyAgLy8gQXMgb2Ygbm93LCBvbmx5IGFjY3VtdWxh
dGlvbiBvZiBwYXRjaGVzIGlzIGltcGxlbWVudGVkCisgIHRoaXMtPktlZXBQYXRjaGVzID0gMTsK
IH0KIAogdnRrT3BlbkZPQU1SZWFkZXI6On52dGtPcGVuRk9BTVJlYWRlcigpCiB7CiAgIHZ0a0Rl
YnVnTWFjcm8oPDwiRGVDb25zdHJ1Y3RvciIpOwotICB0aGlzLT5Qb2ludHMtPkRlbGV0ZSgpOwor
CisgIC8vIERlbGV0ZSB0aGUgT2JzZXJ2ZXJzIGJlZm9yZSBkZWxldGluZyB0aGUgU2VsZWN0aW9u
IEFycmF5cyAhISEKKyAgdGhpcy0+UGF0Y2hEYXRhQXJyYXlTZWxlY3Rpb24tPlJlbW92ZU9ic2Vy
dmVyKHRoaXMtPlNlbGVjdGlvbk9ic2VydmVyKTsKKyAgdGhpcy0+Q2VsbERhdGFBcnJheVNlbGVj
dGlvbi0+UmVtb3ZlT2JzZXJ2ZXIodGhpcy0+U2VsZWN0aW9uT2JzZXJ2ZXIpOworICB0aGlzLT5Q
b2ludERhdGFBcnJheVNlbGVjdGlvbi0+UmVtb3ZlT2JzZXJ2ZXIodGhpcy0+U2VsZWN0aW9uT2Jz
ZXJ2ZXIpOworCisgIC8vIE5vdyBkZWxldGUgdGhlIFNlbGVjdGlvbiBPYnNlcnZlciBpdHNlbGYK
KyAgdGhpcy0+U2VsZWN0aW9uT2JzZXJ2ZXItPkRlbGV0ZSgpOworCisgIC8vIEZpbmFsbHkgZGVs
ZXRlIHRoZSBTZWxlY3Rpb24gQXJyYXlzCisgIHRoaXMtPlBhdGNoRGF0YUFycmF5U2VsZWN0aW9u
LT5EZWxldGUoKTsKICAgdGhpcy0+Q2VsbERhdGFBcnJheVNlbGVjdGlvbi0+RGVsZXRlKCk7Ci0g
IGRlbGV0ZSBbXSB0aGlzLT5TdGVwczsKKyAgdGhpcy0+UG9pbnREYXRhQXJyYXlTZWxlY3Rpb24t
PkRlbGV0ZSgpOwogCi0gIGRlbGV0ZSB0aGlzLT5UaW1lU3RlcERhdGE7Ci0gIGRlbGV0ZSB0aGlz
LT5QYXRoOworICBkZWxldGUgdGhpcy0+T2xkRmlsZU5hbWU7CiAgIGRlbGV0ZSB0aGlzLT5QYXRo
UHJlZml4OwogICBkZWxldGUgdGhpcy0+UG9seU1lc2hQb2ludHNEaXI7CiAgIGRlbGV0ZSB0aGlz
LT5Qb2x5TWVzaEZhY2VzRGlyOwotICBkZWxldGUgdGhpcy0+Qm91bmRhcnlOYW1lczsKLSAgZGVs
ZXRlIHRoaXMtPlBvaW50Wm9uZU5hbWVzOwotICBkZWxldGUgdGhpcy0+RmFjZVpvbmVOYW1lczsK
LSAgZGVsZXRlIHRoaXMtPkNlbGxab25lTmFtZXM7Ci0gIGRlbGV0ZSB0aGlzLT5GYWNlUG9pbnRz
OwotICBkZWxldGUgdGhpcy0+RmFjZXNPd25lckNlbGw7Ci0gIGRlbGV0ZSB0aGlzLT5GYWNlc05l
aWdoYm9yQ2VsbDsKLSAgZGVsZXRlIHRoaXMtPkZhY2VzT2ZDZWxsOwotICBkZWxldGUgdGhpcy0+
U2l6ZU9mQm91bmRhcnk7CisgIHRoaXMtPlRpbWVOYW1lcy0+RGVsZXRlKCk7CisgIGRlbGV0ZSB0
aGlzLT5UaW1lU3RlcERhdGE7CisgIGRlbGV0ZSB0aGlzLT5MYWdyYW5naWFuVGltZVN0ZXBEYXRh
OworCisgIHRoaXMtPkNsZWFyTWVzaGVzKCk7Cit9CisKK3ZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6
OkNsZWFyTWVzaGVzKCkKK3sKKyAgaWYodGhpcy0+RmFjZU93bmVyICE9IE5VTEwpCisgICAgewor
ICAgIHRoaXMtPkZhY2VPd25lci0+RGVsZXRlKCk7CisgICAgdGhpcy0+RmFjZU93bmVyID0gTlVM
TDsKKyAgICB9CisgIGlmKHRoaXMtPkludGVybmFsTWVzaCAhPSBOVUxMKQorICAgIHsKKyAgICB0
aGlzLT5JbnRlcm5hbE1lc2gtPkRlbGV0ZSgpOworICAgIHRoaXMtPkludGVybmFsTWVzaCA9IE5V
TEw7CisgICAgfQorICBpZih0aGlzLT5Cb3VuZGFyeU1lc2ggIT0gTlVMTCkKKyAgICB7CisgICAg
Zm9yKHNpemVfdCBpID0gMDsgaSA8IHRoaXMtPkJvdW5kYXJ5TWVzaC0+dmFsdWUuc2l6ZSgpOyBp
KyspCisgICAgICB7CisgICAgICB0aGlzLT5Cb3VuZGFyeU1lc2gtPnZhbHVlW2ldLT5EZWxldGUo
KTsKKyAgICAgIH0KKyAgICBkZWxldGUgdGhpcy0+Qm91bmRhcnlNZXNoOworICAgIHRoaXMtPkJv
dW5kYXJ5TWVzaCA9IE5VTEw7CisgICAgfQorICBkZWxldGUgdGhpcy0+Qm91bmRhcnlEaWN0Owor
ICBpZih0aGlzLT5Qb2ludFpvbmVNZXNoICE9IE5VTEwpCisgICAgeworICAgIGZvcihzaXplX3Qg
aSA9IDA7IGkgPCB0aGlzLT5Qb2ludFpvbmVNZXNoLT52YWx1ZS5zaXplKCk7IGkrKykKKyAgICAg
IHsKKyAgICAgIHRoaXMtPlBvaW50Wm9uZU1lc2gtPnZhbHVlW2ldLT5EZWxldGUoKTsKKyAgICAg
IH0KKyAgICBkZWxldGUgdGhpcy0+UG9pbnRab25lTWVzaDsKKyAgICB0aGlzLT5Qb2ludFpvbmVN
ZXNoID0gTlVMTDsKKyAgICB9CisgIGlmKHRoaXMtPkZhY2Vab25lTWVzaCAhPSBOVUxMKQorICAg
IHsKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdGhpcy0+RmFjZVpvbmVNZXNoLT52YWx1ZS5z
aXplKCk7IGkrKykKKyAgICAgIHsKKyAgICAgIHRoaXMtPkZhY2Vab25lTWVzaC0+dmFsdWVbaV0t
PkRlbGV0ZSgpOworICAgICAgfQorICAgIGRlbGV0ZSB0aGlzLT5GYWNlWm9uZU1lc2g7CisgICAg
dGhpcy0+RmFjZVpvbmVNZXNoID0gTlVMTDsKKyAgICB9CisgIGlmKHRoaXMtPkNlbGxab25lTWVz
aCAhPSBOVUxMKQorICAgIHsKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdGhpcy0+Q2VsbFpv
bmVNZXNoLT52YWx1ZS5zaXplKCk7IGkrKykKKyAgICAgIHsKKyAgICAgIHRoaXMtPkNlbGxab25l
TWVzaC0+dmFsdWVbaV0tPkRlbGV0ZSgpOworICAgICAgfQorICAgIGRlbGV0ZSB0aGlzLT5DZWxs
Wm9uZU1lc2g7CisgICAgdGhpcy0+Q2VsbFpvbmVNZXNoID0gTlVMTDsKKyAgICB9CiB9CiAKIGlu
dCB2dGtPcGVuRk9BTVJlYWRlcjo6UmVxdWVzdERhdGEoCkBAIC0xNjAsMTMgKzIzMTcsNTUgQEAK
ICAgdnRrSW5mb3JtYXRpb24qIG91dEluZm8gPSBvdXRwdXRWZWN0b3ItPkdldEluZm9ybWF0aW9u
T2JqZWN0KDApOwogICB2dGtNdWx0aUJsb2NrRGF0YVNldCAqb3V0cHV0ID0gdnRrTXVsdGlCbG9j
a0RhdGFTZXQ6OlNhZmVEb3duQ2FzdCgKICAgICBvdXRJbmZvLT5HZXQodnRrTXVsdGlCbG9ja0Rh
dGFTZXQ6OkRBVEFfT0JKRUNUKCkpKTsKKwogICBpZighdGhpcy0+RmlsZU5hbWUpCiAgICAgewog
ICAgIHZ0a0Vycm9yTWFjcm8oIkZpbGVOYW1lIGhhcyB0byBiZSBzcGVjaWZpZWQhIik7CiAgICAg
cmV0dXJuIDA7CiAgICAgfQotICB0aGlzLT5DcmVhdGVEYXRhU2V0KG91dHB1dCk7Ci0gIHJldHVy
biAxOworCisgIGlmKHRoaXMtPk51bWJlck9mVGltZVN0ZXBzID09IDApCisgICAgeworICAgIHZ0
a0Vycm9yTWFjcm8oPDwgdGhpcy0+RmlsZU5hbWUgPDwgIiBjb250YWlucyBubyB0aW1lc3RlcCBk
YXRhLiIpOworICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgaWYodGhpcy0+VGltZVN0ZXAg
PCB0aGlzLT5UaW1lU3RlcFJhbmdlWzBdCisgICAgIHx8IHRoaXMtPlRpbWVTdGVwID4gdGhpcy0+
VGltZVN0ZXBSYW5nZVsxXSkKKyAgICB7CisgICAgdnRrRXJyb3JNYWNybygiVGltZVN0ZXAgb3V0
IG9mIHJhbmdlIik7CisgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWYgUEFSQVZJRVdfVkVSU0lP
Tl9NQUpPUiA+PSAzCisgIGlmKG91dEluZm8tPkhhcyh2dGtTdHJlYW1pbmdEZW1hbmREcml2ZW5Q
aXBlbGluZTo6VVBEQVRFX1RJTUVfU1RFUFMoKSkpCisgICAgeworICAgIGRvdWJsZSogcmVxdWVz
dGVkVGltZVZhbHVlcworICAgICAgPSBvdXRJbmZvLT5HZXQodnRrU3RyZWFtaW5nRGVtYW5kRHJp
dmVuUGlwZWxpbmU6OlVQREFURV9USU1FX1NURVBTKCkpOworICAgIGludCBuU3RlcHMKKyAgICAg
ID0gb3V0SW5mby0+TGVuZ3RoKHZ0a1N0cmVhbWluZ0RlbWFuZERyaXZlblBpcGVsaW5lOjpUSU1F
X1NURVBTKCkpOworICAgIGRvdWJsZSogc3RlcHMKKyAgICAgID0gb3V0SW5mby0+R2V0KHZ0a1N0
cmVhbWluZ0RlbWFuZERyaXZlblBpcGVsaW5lOjpUSU1FX1NURVBTKCkpOworICAgIGludCB0aW1l
SSA9IDA7CisgICAgd2hpbGUodGltZUkgPCBuU3RlcHMgLSAxICYmIHN0ZXBzW3RpbWVJXSA8IHJl
cXVlc3RlZFRpbWVWYWx1ZXNbMF0pCisgICAgICB7CisgICAgICB0aW1lSSsrOworICAgICAgfQor
ICAgIHRoaXMtPlNldFRpbWVTdGVwKHRpbWVJKTsKKworICAgIG91dEluZm8tPlNldCh2dGtEYXRh
T2JqZWN0OjpEQVRBX1RJTUVfU1RFUFMoKSwgJnN0ZXBzW3RpbWVJXSwgMSk7CisgICAgfQorI2Vu
ZGlmCisgIHRoaXMtPk1ha2VUaW1lU3RlcERhdGEoKTsKKworICBjb25zdCBpbnQgcmV0ID0gdGhp
cy0+Q3JlYXRlRGF0YVNldChvdXRwdXQsIHRoaXMtPlRpbWVTdGVwKTsKKworICAvLyB1cGRhdGUg
c2VsZWN0aW9uIHN0YXR1cworICB0aGlzLT5DZWxsU2VsZWN0aW9uT2xkU3RhdHVzID0gdGhpcy0+
Q2VsbFNlbGVjdGlvblN0YXR1czsKKyAgdGhpcy0+UG9pbnRTZWxlY3Rpb25PbGRTdGF0dXMgPSB0
aGlzLT5Qb2ludFNlbGVjdGlvblN0YXR1czsKKyAgdGhpcy0+UGF0Y2hTZWxlY3Rpb25PbGRTdGF0
dXMgPSB0aGlzLT5QYXRjaFNlbGVjdGlvblN0YXR1czsKKworICByZXR1cm4gcmV0OwogfQogCiB2
b2lkIHZ0a09wZW5GT0FNUmVhZGVyOjpQcmludFNlbGYob3N0cmVhbSYgb3MsIHZ0a0luZGVudCBp
bmRlbnQpCkBAIC0xNzUsNyArMjM3NCw3IEBACiAgIHRoaXMtPlN1cGVyY2xhc3M6OlByaW50U2Vs
ZihvcyxpbmRlbnQpOwogICBvcyA8PCBpbmRlbnQgPDwgIkZpbGUgTmFtZTogIgogICAgICA8PCAo
dGhpcy0+RmlsZU5hbWUgPyB0aGlzLT5GaWxlTmFtZSA6ICIobm9uZSkiKSA8PCAiXG4iOwotICBv
cyA8PCBpbmRlbnQgPDwgIk51bWJlciBPZiBOb2RlczogIiA8PCB0aGlzLT5OdW1Qb2ludHMgPDwg
IlxuIjsKKy8vICBvcyA8PCBpbmRlbnQgPDwgIk51bWJlciBPZiBOb2RlczogIiA8PCB0aGlzLT5O
dW1Qb2ludHMgPDwgIlxuIjsKICAgb3MgPDwgaW5kZW50IDw8ICJOdW1iZXIgT2YgQ2VsbHM6ICIg
PDwgdGhpcy0+TnVtQ2VsbHMgPDwgIlxuIjsKICAgb3MgPDwgaW5kZW50IDw8ICJOdW1iZXIgb2Yg
VGltZSBTdGVwczogIiA8PCB0aGlzLT5OdW1iZXJPZlRpbWVTdGVwcyA8PCBlbmRsOwogICBvcyA8
PCBpbmRlbnQgPDwgIlRpbWVTdGVwUmFuZ2U6ICIgCkBAIC0xOTAsNzQgKzIzODksNTggQEAKICAg
dnRrSW5mb3JtYXRpb25WZWN0b3IgKip2dGtOb3RVc2VkKGlucHV0VmVjdG9yKSwKICAgdnRrSW5m
b3JtYXRpb25WZWN0b3IgKm91dHB1dFZlY3RvcikKIHsKLSAgaWYoIXRoaXMtPkZpbGVOYW1lKQor
ICBpZighdGhpcy0+RmlsZU5hbWUgfHwgc3RybGVuKHRoaXMtPkZpbGVOYW1lKSA9PSAwKQogICAg
IHsKICAgICB2dGtFcnJvck1hY3JvKCJGaWxlTmFtZSBoYXMgdG8gYmUgc3BlY2lmaWVkISIpOwog
ICAgIHJldHVybiAwOwogICAgIH0KLSAgdnRrRGVidWdNYWNybyg8PCJSZXF1ZXN0IEluZm8iKTsK
LSAgaWYoUmVxdWVzdEluZm9ybWF0aW9uRmxhZykKKyAgdnRrRGVidWdNYWNybyg8PCJSZXF1ZXN0
IEluZm86ICIgPDx0aGlzLT5GaWxlTmFtZSk7CisKKyAgaWYoKnRoaXMtPk9sZEZpbGVOYW1lICE9
IHZ0a1N0ZFN0cmluZyh0aGlzLT5GaWxlTmFtZSkpCiAgICAgewotICAgIHZ0a0RlYnVnTWFjcm8o
PDx0aGlzLT5GaWxlTmFtZSk7Ci0gICAgdGhpcy0+UGF0aC0+dmFsdWUuYXBwZW5kKHRoaXMtPkZp
bGVOYW1lKTsKLSAgICB0aGlzLT5SZWFkQ29udHJvbERpY3QoKTsKKyAgICAvLyB1cGRhdGVkIHRo
aXMtPk9sZEZpbGVOYW1lCisgICAgKnRoaXMtPk9sZEZpbGVOYW1lID0gdnRrU3RkU3RyaW5nKHRo
aXMtPkZpbGVOYW1lKTsKKworICAgIC8vIGNsZWFyIHByaW9yIGNhc2UgaW5mb3JtYXRpb24KKyAg
ICB0aGlzLT5PbGRUaW1lU3RlcCA9IC0xOworICAgIGlmKHRoaXMtPlN0ZXBzICE9IE5VTEwpCisg
ICAgICB7CisgICAgICBkZWxldGUgW10gdGhpcy0+U3RlcHM7CisgICAgICB0aGlzLT5TdGVwcyA9
IE5VTEw7CisgICAgICB9CisgICAgdGhpcy0+Q2xlYXJNZXNoZXMoKTsKKworICAgIHRoaXMtPkNl
bGxEYXRhQXJyYXlTZWxlY3Rpb24tPlJlbW92ZUFsbEFycmF5cygpOworICAgIHRoaXMtPlBvaW50
RGF0YUFycmF5U2VsZWN0aW9uLT5SZW1vdmVBbGxBcnJheXMoKTsKKyAgICB0aGlzLT5QYXRjaERh
dGFBcnJheVNlbGVjdGlvbi0+UmVtb3ZlQWxsQXJyYXlzKCk7CisKKyAgICAvLyBtYWtlIGNhc2Ug
aW5mb3JtYXRpb24KKyAgICBpZighdGhpcy0+UmVhZENvbnRyb2xEaWN0KHRoaXMtPkZpbGVOYW1l
KSkKKyAgICAgIHsKKyAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIGlmKHRoaXMtPk51bWJl
ck9mVGltZVN0ZXBzID09IDApCisgICAgICB7CisgICAgICB2dGtFcnJvck1hY3JvKDw8IHRoaXMt
PkZpbGVOYW1lIDw8ICIgY29udGFpbnMgbm8gdGltZXN0ZXAgZGF0YS4iKTsKKyAgICAgIHJldHVy
biAwOworICAgICAgfQogICAgIHRoaXMtPlRpbWVTdGVwUmFuZ2VbMF0gPSAwOwotICAgIHRoaXMt
PlRpbWVTdGVwUmFuZ2VbMV0gPSB0aGlzLT5OdW1iZXJPZlRpbWVTdGVwcy0xOworICAgIHRoaXMt
PlRpbWVTdGVwUmFuZ2VbMV0gPSB0aGlzLT5OdW1iZXJPZlRpbWVTdGVwczsKICAgICB0aGlzLT5Q
b3B1bGF0ZVBvbHlNZXNoRGlyQXJyYXlzKCk7CiAgICAgb3V0cHV0VmVjdG9yLT5HZXRJbmZvcm1h
dGlvbk9iamVjdCgwKS0+U2V0KAogICAgICAgdnRrU3RyZWFtaW5nRGVtYW5kRHJpdmVuUGlwZWxp
bmU6OlRJTUVfU1RFUFMoKSwgdGhpcy0+U3RlcHMsCiAgICAgICB0aGlzLT5OdW1iZXJPZlRpbWVT
dGVwcyk7Ci0gICAgdGhpcy0+UmVxdWVzdEluZm9ybWF0aW9uRmxhZyA9IGZhbHNlOwotICAgIH0K
LQotICAvL0FkZCBzY2FsYXJzIGFuZCB2ZWN0b3JzIHRvIG1ldGFkYXRhCi0gIC8vY3JlYXRlIHBh
dGggdG8gY3VycmVudCB0aW1lIHN0ZXAKLSAgdnRrc3lzX2lvczo6c3RyaW5nc3RyZWFtIHRlbXBQ
YXRoOwotICB0ZW1wUGF0aCA8PCB0aGlzLT5QYXRoUHJlZml4LT52YWx1ZS5jX3N0cigpOwotICB0
ZW1wUGF0aCA8PCB0aGlzLT5TdGVwc1t0aGlzLT5UaW1lU3RlcF07Ci0KLSAgLy9vcGVuIHRoZSBk
aXJlY3RvcnkgYW5kIGdldCBudW0gb2YgZmlsZXMKLSAgaW50IG51bVNvbHZlcnM7Ci0gIHZ0a0Rp
cmVjdG9yeSAqIGRpcmVjdG9yeSA9IHZ0a0RpcmVjdG9yeTo6TmV3KCk7Ci0gIGludCBvcGVuZWQg
PSBkaXJlY3RvcnktPk9wZW4odGVtcFBhdGguc3RyKCkuY19zdHIoKSk7Ci0gIGlmKG9wZW5lZCkK
LSAgICB7Ci0gICAgbnVtU29sdmVycyA9IGRpcmVjdG9yeS0+R2V0TnVtYmVyT2ZGaWxlcygpOwot
ICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICBudW1Tb2x2ZXJzID0gLTE7IC8vbm8gZGlyCisjaWYg
UEFSQVZJRVdfVkVSU0lPTl9NQUpPUiA+PSAzCisgICAgZG91YmxlIHRpbWVSYW5nZVsyXTsKKyAg
ICB0aW1lUmFuZ2VbMF0gPSB0aGlzLT5TdGVwc1swXTsKKyAgICB0aW1lUmFuZ2VbMV0gPSB0aGlz
LT5TdGVwc1t0aGlzLT5OdW1iZXJPZlRpbWVTdGVwcyAtIDFdOworICAgIG91dHB1dFZlY3Rvci0+
R2V0SW5mb3JtYXRpb25PYmplY3QoMCktPlNldCgKKyAgICAgIHZ0a1N0cmVhbWluZ0RlbWFuZERy
aXZlblBpcGVsaW5lOjpUSU1FX1JBTkdFKCksIHRpbWVSYW5nZSwgMik7CisjZW5kaWYKICAgICB9
CiAKLSAgLy9jbGVhciBwcmlvciB0aW1lc3RlcCBkYXRhCi0gIHRoaXMtPlRpbWVTdGVwRGF0YS0+
dmFsdWUuY2xlYXIoKTsKLQotICAvL2xvb3Agb3ZlciBhbGwgZmlsZXMgYW5kIGxvY2F0ZQotICAv
L3ZvbFNjYWxhcnMgYW5kIHZvbFZlY3RvcnMKLSAgZm9yKGludCBqID0gMDsgaiA8IG51bVNvbHZl
cnM7IGorKykKLSAgICB7Ci0gICAgY29uc3QgY2hhciAqIHRlbXBTb2x2ZXIgPSBkaXJlY3Rvcnkt
PkdldEZpbGUoaik7Ci0gICAgaWYodGVtcFNvbHZlciAhPSAoY2hhciAqKSJwb2x5TWVzaCIpCi0g
ICAgICB7Ci0gICAgICBpZih0ZW1wU29sdmVyICE9IChjaGFyICopIi4iICYmIHRlbXBTb2x2ZXIg
IT0gKGNoYXIgKikiLi4iKQotICAgICAgICB7Ci0gICAgICAgIHZ0a3N0ZDo6c3RyaW5nIHR5cGUo
dGhpcy0+R2V0RGF0YVR5cGUodGVtcFBhdGguc3RyKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU29sdmVyKSk7Ci0gICAgICAgIGlm
KHN0cmNtcCh0eXBlLmNfc3RyKCksICJTY2FsYXIiKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgdGhpcy0+VGltZVN0ZXBEYXRhLT52YWx1ZS5wdXNoX2JhY2sodnRrc3RkOjpzdHJpbmcodGVt
cFNvbHZlcikpOwotICAgICAgICAgIHRoaXMtPkNlbGxEYXRhQXJyYXlTZWxlY3Rpb24tPkFkZEFy
cmF5KHRlbXBTb2x2ZXIpOwotICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihzdHJjbXAodHlw
ZS5jX3N0cigpLCAiVmVjdG9yIikgPT0gMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgdGhpcy0+
VGltZVN0ZXBEYXRhLT52YWx1ZS5wdXNoX2JhY2sodnRrc3RkOjpzdHJpbmcodGVtcFNvbHZlcikp
OwotICAgICAgICAgIHRoaXMtPkNlbGxEYXRhQXJyYXlTZWxlY3Rpb24tPkFkZEFycmF5KHRlbXBT
b2x2ZXIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KKyAgdGhpcy0+
TWFrZVRpbWVTdGVwRGF0YSgpOwogCi0gIGRpcmVjdG9yeS0+RGVsZXRlKCk7CiAgIHJldHVybiAx
OwogfQogCkBAIC0zMDQsMjA3MSArMjQ4NywxODYwIEBACiAgIHJldHVybjsKIH0KIAotLy8gKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OkNvbWJpbmVP
d25lck5laWdib3IKLS8vCi0vLyAgUHVycG9zZToKLS8vICBhZGQgT3duZXIgZmFjZXMgdG8gdGhl
IGZhY2VzIG9mIGEgY2VsbCBhbmQgdGhlbiBhZGQgdGhlIG5laWdob3IgZmFjZXMKLS8vCi0vLyAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCi12b2lkIHZ0a09wZW5GT0FNUmVhZGVyOjpDb21iaW5lT3duZXJO
ZWlnYm9yKCkKLXsKLSAgdnRrRGVidWdNYWNybyg8PCJDb21iaW5lIG93bmVyICYgbmVpZ2hib3Ig
ZmFjZXMiKTsKLSAgLy9yZWludGlhbGl6ZSBmYWNlcyBvZiB0aGUgY2VsbHMKLSAgZmFjZSB0ZW1w
RmFjZTsKLSAgdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlLmNsZWFyKCk7Ci0gIHRoaXMtPkZhY2Vz
T2ZDZWxsLT52YWx1ZS5yZXNpemUodGhpcy0+TnVtQ2VsbHMpOworLy8KKy8vIFBPSU5UIE1FVEhP
RFMKKy8vCitpbnQgdnRrT3BlbkZPQU1SZWFkZXI6OkdldE51bWJlck9mUG9pbnRBcnJheXMoKQor
eworICByZXR1cm4gdGhpcy0+UG9pbnREYXRhQXJyYXlTZWxlY3Rpb24tPkdldE51bWJlck9mQXJy
YXlzKCk7Cit9CisKK2NvbnN0IGNoYXIqIHZ0a09wZW5GT0FNUmVhZGVyOjpHZXRQb2ludEFycmF5
TmFtZShpbnQgaW5kZXgpCit7CisgIHJldHVybiB0aGlzLT5Qb2ludERhdGFBcnJheVNlbGVjdGlv
bi0+R2V0QXJyYXlOYW1lKGluZGV4KTsKK30KKworaW50IHZ0a09wZW5GT0FNUmVhZGVyOjpHZXRQ
b2ludEFycmF5U3RhdHVzKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgIHJldHVybiB0aGlzLT5Qb2lu
dERhdGFBcnJheVNlbGVjdGlvbi0+QXJyYXlJc0VuYWJsZWQobmFtZSk7Cit9CisKK3ZvaWQgdnRr
T3BlbkZPQU1SZWFkZXI6OlNldFBvaW50QXJyYXlTdGF0dXMoY29uc3QgY2hhciogbmFtZSwgaW50
IHN0YXR1cykKK3sKKyAgaWYoc3RhdHVzKQorICAgIHsKKyAgICB0aGlzLT5Qb2ludERhdGFBcnJh
eVNlbGVjdGlvbi0+RW5hYmxlQXJyYXkobmFtZSk7CisgICAgfQorICBlbHNlCisgICAgeworICAg
IHRoaXMtPlBvaW50RGF0YUFycmF5U2VsZWN0aW9uLT5EaXNhYmxlQXJyYXkobmFtZSk7CisgICAg
fQorICByZXR1cm47Cit9CisKK3ZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OkRpc2FibGVBbGxQb2lu
dEFycmF5cygpCit7CisgIHRoaXMtPlBvaW50RGF0YUFycmF5U2VsZWN0aW9uLT5EaXNhYmxlQWxs
QXJyYXlzKCk7CisgIHJldHVybjsKK30KKwordm9pZCB2dGtPcGVuRk9BTVJlYWRlcjo6RW5hYmxl
QWxsUG9pbnRBcnJheXMoKQoreworICB0aGlzLT5Qb2ludERhdGFBcnJheVNlbGVjdGlvbi0+RW5h
YmxlQWxsQXJyYXlzKCk7CisgIHJldHVybjsKK30KKworCisvLworLy8gUEFUQ0ggTUVUSE9EUwor
Ly8KK2ludCB2dGtPcGVuRk9BTVJlYWRlcjo6R2V0TnVtYmVyT2ZQYXRjaEFycmF5cygpCit7Cisg
IHJldHVybiB0aGlzLT5QYXRjaERhdGFBcnJheVNlbGVjdGlvbi0+R2V0TnVtYmVyT2ZBcnJheXMo
KTsKK30KKworY29uc3QgY2hhciogdnRrT3BlbkZPQU1SZWFkZXI6OkdldFBhdGNoQXJyYXlOYW1l
KGludCBpbmRleCkKK3sKKyAgcmV0dXJuIHRoaXMtPlBhdGNoRGF0YUFycmF5U2VsZWN0aW9uLT5H
ZXRBcnJheU5hbWUoaW5kZXgpOworfQorCitpbnQgdnRrT3BlbkZPQU1SZWFkZXI6OkdldFBhdGNo
QXJyYXlTdGF0dXMoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgcmV0dXJuIHRoaXMtPlBhdGNoRGF0
YUFycmF5U2VsZWN0aW9uLT5BcnJheUlzRW5hYmxlZChuYW1lKTsKK30KKwordm9pZCB2dGtPcGVu
Rk9BTVJlYWRlcjo6U2V0UGF0Y2hBcnJheVN0YXR1cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc3Rh
dHVzKQoreworICBpZihzdGF0dXMpCisgICAgeworICAgIHRoaXMtPlBhdGNoRGF0YUFycmF5U2Vs
ZWN0aW9uLT5FbmFibGVBcnJheShuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgdGhp
cy0+UGF0Y2hEYXRhQXJyYXlTZWxlY3Rpb24tPkRpc2FibGVBcnJheShuYW1lKTsKKyAgICB9Cisg
IHJldHVybjsKK30KKwordm9pZCB2dGtPcGVuRk9BTVJlYWRlcjo6RGlzYWJsZUFsbFBhdGNoQXJy
YXlzKCkKK3sKKyAgdGhpcy0+UGF0Y2hEYXRhQXJyYXlTZWxlY3Rpb24tPkRpc2FibGVBbGxBcnJh
eXMoKTsKKyAgcmV0dXJuOworfQorCit2b2lkIHZ0a09wZW5GT0FNUmVhZGVyOjpFbmFibGVBbGxQ
YXRjaEFycmF5cygpCit7CisgIHRoaXMtPlBhdGNoRGF0YUFycmF5U2VsZWN0aW9uLT5FbmFibGVB
bGxBcnJheXMoKTsKKyAgcmV0dXJuOworfQorCisvLyBEZWZpbmUgdGhlIFNlbGVjdGlvbiBPYnNl
cnZlciAKK3ZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OlNlbGVjdGlvbk1vZGlmaWVkQ2FsbGJhY2so
dnRrT2JqZWN0KiwKKyAgdW5zaWduZWQgbG9uZywgdm9pZCogY2xpZW50ZGF0YSwgdm9pZCopCit7
CisgIHN0YXRpY19jYXN0PHZ0a09wZW5GT0FNUmVhZGVyKj4oY2xpZW50ZGF0YSktPlNlbGVjdGlv
bk1vZGlmaWVkKCk7Cit9CisKK3ZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OlNlbGVjdGlvbk1vZGlm
aWVkKCkKK3sKKyAgLy8gQ2hhbmdlIHRoZSBwaXBlbGluZSBtb2RpZmljYXRpb24gdGltZSB0byBm
b3JjZSB1cGRhdGUKKyAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIHRvIGRldGVjdCBj
aGFuZ2VzCisKKyAgLy8gQ2VsbCBTZWxlY3Rpb24gQXJyYXlzCisgIC8vIHdlIGxvb3AgZnJvbSB0
aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzZWxlY3Rpb24gYXJyYXkgc2luY2Ugd2UnZAorICAvLyBs
aWtlIHRvIHBsYWNlIG5ld2x5IGFkZGVkIHZhcmlhYmxlcyB0byBleHRyYSBoaWdoZXIgYml0cyAo
d2UKKyAgLy8gd291bGRuJ3QgbGlrZSB0byBtb3ZlIHRoZSBsb2NhdGlvbnMgb2YgYWxyZWFkeSBl
eGlzdGluZyB2YXJpYWJsZXMpCisgIHRoaXMtPkNlbGxTZWxlY3Rpb25TdGF0dXMgPSAwOworICBm
b3IoaW50IGkgPSB0aGlzLT5HZXROdW1iZXJPZkNlbGxBcnJheXMoKSAtIDE7IGkgPj0gMDsgaS0t
KQorICAgIHsKKyAgICB0aGlzLT5DZWxsU2VsZWN0aW9uU3RhdHVzID0gKHRoaXMtPkNlbGxTZWxl
Y3Rpb25TdGF0dXMgPDwgMSkgCisgICAgICArIHRoaXMtPkdldENlbGxBcnJheVN0YXR1cyh0aGlz
LT5HZXRDZWxsQXJyYXlOYW1lKGkpKTsKKyAgICB9CisgIC8vIGlmIHRoZSBzdGF0dXMgZmxhZyBv
dmVyZmxvd3Mgd2UnZCBsaWtlIHRvIGZhbGwgb250byB0aGUgc2FmZSBzaWRlCisgIC8vIChwcm9w
ZXJseSByZWZyZXNoIHRoZSBkYXRhc2V0IHdpdGhvdXQgbWVzaCBjYWNoaW5nKSBzbyB3ZSB1c2Ug
dGhlCisgIC8vIGxhc3QgYml0IChMU0IpIGFzIG92ZXJmbG93IGNvbnRyb2wgZmxhZy4gIGlmIG92
ZXJmbG93IG9jY3VycyB0aGUKKyAgLy8gTFNCIGlzIG5lZ2F0ZWQgZnJvbSB0aGUgb2xkIHN0YXR1
cworICBpZih0aGlzLT5HZXROdW1iZXJPZkNlbGxBcnJheXMoKQorICAgIDw9IHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKHRoaXMtPkNlbGxTZWxlY3Rpb25TdGF0dXMpICogOCAtIDEpKQorICAgIHsK
KyAgICB0aGlzLT5DZWxsU2VsZWN0aW9uU3RhdHVzID0gKHRoaXMtPkNlbGxTZWxlY3Rpb25TdGF0
dXMgPDwgMSkKKyAgICAgICsgKHRoaXMtPkNlbGxTZWxlY3Rpb25PbGRTdGF0dXMgJiAweDEpOwor
ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICB0aGlzLT5DZWxsU2VsZWN0aW9uU3RhdHVzID0gKHRo
aXMtPkNlbGxTZWxlY3Rpb25TdGF0dXMgPDwgMSkgCisgICAgICArICgofnRoaXMtPkNlbGxTZWxl
Y3Rpb25PbGRTdGF0dXMpICYgMHgxKTsKKyAgICB9CisgIC8vIFBvaW50IFNlbGVjdGlvbiBBcnJh
eXMKKyAgLy8gdGhpcy0+UG9pbnRTZWxlY3Rpb25PbGRTdGF0dXMgPSB0aGlzLT5Qb2ludFNlbGVj
dGlvblN0YXR1czsKKyAgdGhpcy0+UG9pbnRTZWxlY3Rpb25TdGF0dXMgPSAwOworICBmb3IoaW50
IGkgPSB0aGlzLT5HZXROdW1iZXJPZlBvaW50QXJyYXlzKCkgLSAxOyBpID49IDA7IGktLSkKKyAg
ICB7CisgICAgdGhpcy0+UG9pbnRTZWxlY3Rpb25TdGF0dXMgPSAodGhpcy0+UG9pbnRTZWxlY3Rp
b25TdGF0dXMgPDwgMSkgCisgICAgICArIHRoaXMtPkdldFBvaW50QXJyYXlTdGF0dXModGhpcy0+
R2V0UG9pbnRBcnJheU5hbWUoaSkpOworICAgIH0KKyAgaWYodGhpcy0+R2V0TnVtYmVyT2ZQb2lu
dEFycmF5cygpCisgICAgPD0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YodGhpcy0+UG9pbnRTZWxl
Y3Rpb25TdGF0dXMpICogOCAtIDEpKQorICAgIHsKKyAgICB0aGlzLT5Qb2ludFNlbGVjdGlvblN0
YXR1cyA9ICh0aGlzLT5Qb2ludFNlbGVjdGlvblN0YXR1cyA8PCAxKQorICAgICAgKyAodGhpcy0+
UG9pbnRTZWxlY3Rpb25PbGRTdGF0dXMgJiAweDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg
ICB0aGlzLT5Qb2ludFNlbGVjdGlvblN0YXR1cyA9ICh0aGlzLT5Qb2ludFNlbGVjdGlvblN0YXR1
cyA8PCAxKSAKKyAgICAgICsgKH4odGhpcy0+UG9pbnRTZWxlY3Rpb25PbGRTdGF0dXMpICYgMHgx
KTsKKyAgICB9CisgIC8vIFBhdGNoIFNlbGVjdGlvbiBBcnJheXMKKyAgLy8gdGhpcy0+UGF0Y2hT
ZWxlY3Rpb25PbGRTdGF0dXMgPSB0aGlzLT5QYXRjaFNlbGVjdGlvblN0YXR1czsKKyAgdGhpcy0+
UGF0Y2hTZWxlY3Rpb25TdGF0dXMgPSAwOworICBmb3IoaW50IGkgPSB0aGlzLT5HZXROdW1iZXJP
ZlBhdGNoQXJyYXlzKCkgLSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgdGhpcy0+UGF0Y2hT
ZWxlY3Rpb25TdGF0dXMgPSAodGhpcy0+UGF0Y2hTZWxlY3Rpb25TdGF0dXMgPDwgMSkgCisgICAg
ICArIHRoaXMtPkdldFBhdGNoQXJyYXlTdGF0dXModGhpcy0+R2V0UGF0Y2hBcnJheU5hbWUoaSkp
OworICAgIH0KKyAgaWYodGhpcy0+R2V0TnVtYmVyT2ZQYXRjaEFycmF5cygpCisgICAgPD0gc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YodGhpcy0+UGF0Y2hTZWxlY3Rpb25TdGF0dXMpICogOCAtIDEp
KQorICAgIHsKKyAgICB0aGlzLT5QYXRjaFNlbGVjdGlvblN0YXR1cyA9ICh0aGlzLT5QYXRjaFNl
bGVjdGlvblN0YXR1cyA8PCAxKQorICAgICAgKyAodGhpcy0+UGF0Y2hTZWxlY3Rpb25PbGRTdGF0
dXMgJiAweDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICB0aGlzLT5QYXRjaFNlbGVjdGlv
blN0YXR1cyA9ICh0aGlzLT5QYXRjaFNlbGVjdGlvblN0YXR1cyA8PCAxKSAKKyAgICAgICsgKH4o
dGhpcy0+UGF0Y2hTZWxlY3Rpb25PbGRTdGF0dXMpICYgMHgxKTsKKyAgICB9CisKKyAgLy8gSW5k
aWNhdGUgdGhhdCB0aGUgcGlwZWxpbmUgbmVlZHMgdG8gYmUgdXBkYXRlZCAoVlRLIENvbW1hbmQp
CisgIHRoaXMtPk1vZGlmaWVkKCk7Cit9CisKKworLy8gY3JlYXRlIGZpZWxkIGRhdGEgbGlzdHMg
YW5kIGNlbGwvcG9pbnQgYXJyYXkgc2VsZWN0aW9uIGxpc3RzCit2b2lkIHZ0a09wZW5GT0FNUmVh
ZGVyOjpNYWtlVGltZVN0ZXBEYXRhKCkKK3sKKyAgLy8gUmVhZCB0aGUgcGF0Y2hlcyBmcm9tIHRo
ZSBib3VuZGFyeSBmaWxlIGludG8gc2VsZWN0aW9uIGFycmF5CisgIGludCB0aW1lU3RhdGUgPSB0
aGlzLT5UaW1lU3RlcDsKKyAgdnRrRm9hbURpY3QqIGJvdW5kYXJ5RGljdFB0cgorICAgID0gdGhp
cy0+R2F0aGVyQmxvY2tzKCJib3VuZGFyeSIsIHRpbWVTdGF0ZSwgdHJ1ZSk7CisgIGlmKGJvdW5k
YXJ5RGljdFB0ciA9PSBOVUxMKQorICAgIHsKKyAgICB2dGtFcnJvck1hY3JvKDw8ICJDb3VsZG4n
dCByZWFkIHBvbHlNZXNoL2JvdW5kYXJ5Iik7CisgICAgcmV0dXJuOworICAgIH0KKworICB2dGtG
b2FtRGljdCYgYm91bmRhcnlEaWN0VG1wID0gKmJvdW5kYXJ5RGljdFB0cjsKKworICAvLyBBZGQg
dGhlIGludGVybmFsIG1lc2ggYnkgZGVmYXVsdCBhbHdheXMKKyAgY29uc3QgdnRrU3RkU3RyaW5n
IHRtcFN0ciA9ICJJbnRlcm5hbCBNZXNoIjsKKyAgdGhpcy0+UGF0Y2hEYXRhQXJyYXlTZWxlY3Rp
b24tPkFkZEFycmF5KHRtcFN0ci5jX3N0cigpKTsKKworICAvLyBpdGVyYXRlIHRocm91Z2ggZWFj
aCBlbnRyeSBpbiB0aGUgYm91bmRhcnkgZmlsZQorICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgYm91
bmRhcnlEaWN0VG1wLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICB2dGtGb2FtRW50cnkmIGJvdW5k
YXJ5RW50cnlJID0gYm91bmRhcnlEaWN0VG1wLmVudHJ5KGkpOworICAgIGludCBuRmFjZXM7Cisg
ICAgYm91bmRhcnlFbnRyeUkuZGljdGlvbmFyeSgpLmxvb2t1cCgibkZhY2VzIikgPj4gbkZhY2Vz
OworCisgICAgLy8gZXh0cmFjdCBuYW1lIG9mIHRoZSBjdXJyZW50IHBhdGNoIGZvciBpbnNlcnRp
b24KKyAgICBjb25zdCB2dGtTdGRTdHJpbmcmIGJvdW5kYXJ5TmFtZUkgPSBib3VuZGFyeUVudHJ5
SS5rZXl3b3JkKCk7CisKKyAgICAvLyBJZiB0aGUgc2l6ZSBvZiBwYXRjaCBiZWNvbWVzIHplcm8s
IGJ1dCBLZWVwUGF0Y2hlcyBpcyBzZWxlY3RlZCwKKyAgICAvLyBkbyBub3QgcmVtb3ZlIGZyb20g
bGlzdCwgZWxzZSwgcmVtb3ZlIHBhdGNoIGZyb20gbGlzdAorICAgIGlmKG5GYWNlcyA9PSAwKQor
ICAgICAgeworICAgICAgaWYoKHRoaXMtPlBhdGNoRGF0YUFycmF5U2VsZWN0aW9uLT5BcnJheUV4
aXN0cyhib3VuZGFyeU5hbWVJLmNfc3RyKCkpKQorICAgICAgICAmJiAoIXRoaXMtPkdldEtlZXBQ
YXRjaGVzKCkpKQorICAgICAgICB7CisgICAgICAgIHRoaXMtPlBhdGNoRGF0YUFycmF5U2VsZWN0
aW9uLT5SZW1vdmVBcnJheUJ5TmFtZShib3VuZGFyeU5hbWVJLmNfc3RyKCkpOworICAgICAgICB9
CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgdGhpcy0+UGF0Y2hEYXRhQXJyYXlT
ZWxlY3Rpb24tPkFkZEFycmF5KGJvdW5kYXJ5TmFtZUkuY19zdHIoKSk7CisgICAgICB9CisgICAg
fQorICBkZWxldGUgYm91bmRhcnlEaWN0UHRyOworCisgIC8vIENvbW1lbnRlZCBvdXQgdGhlICJS
ZW1vdmVBbGxBcnJheXMoKSIgbGluZS4uLi4KKyAgLy90aGlzLT5DZWxsRGF0YUFycmF5U2VsZWN0
aW9uLT5SZW1vdmVBbGxBcnJheXMoKTsKKworICAvL2NsZWFyIHByaW9yIHRpbWVzdGVwIGRhdGEK
KyAgdGhpcy0+VGltZVN0ZXBEYXRhLT52YWx1ZS5jbGVhcigpOworCisgIC8vQWRkIHNjYWxhcnMg
YW5kIHZlY3RvcnMgdG8gbWV0YWRhdGEKKyAgLy9jcmVhdGUgcGF0aCB0byBjdXJyZW50IHRpbWUg
c3RlcAorICB2dGtTdGRTdHJpbmcgdGVtcFBhdGgKKyAgICA9ICp0aGlzLT5QYXRoUHJlZml4ICsg
dGhpcy0+VGltZU5hbWVzLT5HZXRWYWx1ZSh0aGlzLT5UaW1lU3RlcCk7CisKKyAgLy9vcGVuIHRo
ZSBkaXJlY3RvcnkgYW5kIGdldCBudW0gb2YgZmlsZXMKKyAgdnRrRGlyZWN0b3J5ICogZGlyZWN0
b3J5ID0gdnRrRGlyZWN0b3J5OjpOZXcoKTsKKyAgaWYoIWRpcmVjdG9yeS0+T3Blbih0ZW1wUGF0
aC5jX3N0cigpKSkKKyAgICB7CisgICAgLy8gbm8gZGF0YQorICAgIGRpcmVjdG9yeS0+RGVsZXRl
KCk7CisgICAgcmV0dXJuOworICAgIH0KIAotICAvL2FkZCBvd25lciBmYWNlcyB0byBjZWxsCi0g
IGZvcihpbnQgaSA9IDA7IGkgPCAoaW50KXRoaXMtPkZhY2VzT3duZXJDZWxsLT52YWx1ZS5zaXpl
KCk7IGkrKykKKyAgLy9sb29wIG92ZXIgYWxsIGZpbGVzIGFuZCBsb2NhdGUKKyAgLy92b2xTY2Fs
YXJzIGFuZCB2b2xWZWN0b3JzCisgIGludCBuRmllbGRGaWxlcyA9IGRpcmVjdG9yeS0+R2V0TnVt
YmVyT2ZGaWxlcygpOworICBmb3IoaW50IGogPSAwOyBqIDwgbkZpZWxkRmlsZXM7IGorKykKICAg
ICB7Ci0gICAgZm9yKGludCBqID0gMDsgaiA8IChpbnQpdGhpcy0+RmFjZXNPd25lckNlbGwtPnZh
bHVlW2ldLnNpemUoKTsgaisrKQorICAgIGNvbnN0IHZ0a1N0ZFN0cmluZyBmaWVsZEZpbGUoZGly
ZWN0b3J5LT5HZXRGaWxlKGopKTsKKyAgICBjb25zdCBpbnQgbGVuID0gZmllbGRGaWxlLmxlbmd0
aCgpOworCisgICAgLy8gZXhjbHVkZWQgZXh0ZW5zaW9ucyBiYXNlZCBvbiBzcmMvT3BlbkZPQU0v
T1NzcGVjaWZpYy9Vbml4L1VuaXguQworICAgIGlmKCFkaXJlY3RvcnktPkZpbGVJc0RpcmVjdG9y
eShmaWVsZEZpbGUuY19zdHIoKSkKKyAgICAgICYmIGZpZWxkRmlsZS5zdWJzdHIobGVuIC0gMSkg
IT0gIn4iCisgICAgICAmJiAobGVuIDwgNCB8fCAoZmllbGRGaWxlLnN1YnN0cihsZW4gLSA0KSAh
PSAiLmJhayIKKyAgICAgICYmIGZpZWxkRmlsZS5zdWJzdHIobGVuIC0gNCkgIT0gIi5CQUsiCisg
ICAgICAmJiBmaWVsZEZpbGUuc3Vic3RyKGxlbiAtIDQpICE9ICIub2xkIikpCisgICAgICAmJiAo
bGVuIDwgNSB8fCBmaWVsZEZpbGUuc3Vic3RyKGxlbiAtIDUpICE9ICIuc2F2ZSIpKQogICAgICAg
ewotICAgICAgdGVtcEZhY2UuZmFjZUluZGV4ID0gdGhpcy0+RmFjZXNPd25lckNlbGwtPnZhbHVl
W2ldW2pdOwotICAgICAgdGVtcEZhY2UubmVpZ2hib3JGYWNlID0gZmFsc2U7Ci0gICAgICB0aGlz
LT5GYWNlc09mQ2VsbC0+dmFsdWVbaV0ucHVzaF9iYWNrKHRlbXBGYWNlKTsKKyAgICAgIHZ0a0Zv
YW1JT29iamVjdCBpbzsKKyAgICAgIGlmKGlvLm9wZW4odGVtcFBhdGggKyAiLyIgKyBmaWVsZEZp
bGUpKSAvLyBmaWxlIGV4aXN0cyBhbmQgcmVhZGFibGUKKyAgICAgICAgeworICAgICAgICBpZihp
by5jbGFzc05hbWUoKSA9PSAidm9sU2NhbGFyRmllbGQiIHx8CisgICAgICAgICAgaW8uY2xhc3NO
YW1lKCkgPT0gInZvbFZlY3RvckZpZWxkIikKKyAgICAgICAgICB7CisgICAgICAgICAgLy8gcmVh
bCBmaWxlIG5hbWUKKyAgICAgICAgICB0aGlzLT5UaW1lU3RlcERhdGEtPnZhbHVlLnB1c2hfYmFj
ayhmaWVsZEZpbGUpOworICAgICAgICAgIC8vIG9iamVjdCBuYW1lCisgICAgICAgICAgdGhpcy0+
Q2VsbERhdGFBcnJheVNlbGVjdGlvbi0+QWRkQXJyYXkoaW8ub2JqZWN0TmFtZSgpLmNfc3RyKCkp
OworICAgICAgICAgIH0KKyAgICAgICAgaW8uY2xvc2UoKTsKKyAgICAgICAgfQorI2lmIDAKKyAg
ICAgIC8vIHdhcm5pbmcgaXMgdHVybmVkIG9mZiBpbiBmYXZvciBvZiBzaWxlbmNlCisgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgdnRrV2FybmluZ01hY3JvKDw8ICJGaWxlICIgPDwgaW8u
ZmlsZU5hbWUoKS5jX3N0cigpCisgICAgICAgICAgPDwgIiBpcyBub3QgYSB2YWxpZCBPcGVuRk9B
TSBvYmplY3QuIFJlYXNvbjogIgorICAgICAgICAgIDw8IGlvLmVycm9yKCkuc3RyKCkuY19zdHIo
KSA8PCAiIGluIGxpbmUgIgorICAgICAgICAgIDw8IGlvLmxpbmVOdW1iZXIoKSk7CisgICAgICAg
IH0KKyNlbmRpZgogICAgICAgfQogICAgIH0KKyAgZGlyZWN0b3J5LT5EZWxldGUoKTsKIAotICAv
L2FkZCBuZWlnaGJvciBmYWNlcyB0byBjZWxsCi0gIGZvcihpbnQgaSA9IDA7IGkgPCAoaW50KXRo
aXMtPkZhY2VzTmVpZ2hib3JDZWxsLT52YWx1ZS5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgZm9y
KGludCBqID0gMDsgaiA8IChpbnQpdGhpcy0+RmFjZXNOZWlnaGJvckNlbGwtPnZhbHVlW2ldLnNp
emUoKTsgaisrKQotICAgICAgewotICAgICAgdGVtcEZhY2UuZmFjZUluZGV4ID0gdGhpcy0+RmFj
ZXNOZWlnaGJvckNlbGwtPnZhbHVlW2ldW2pdOwotICAgICAgdGVtcEZhY2UubmVpZ2hib3JGYWNl
ID0gdHJ1ZTsKLSAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXS5wdXNoX2JhY2sodGVt
cEZhY2UpOworICAvLyBsb2NhdGUgbGFnbGFuZ2lhbiBmaWVsZHMKKworICAvL2NsZWFyIHByaW9y
IHRpbWVzdGVwIGRhdGEKKyAgdGhpcy0+TGFncmFuZ2lhblRpbWVTdGVwRGF0YS0+dmFsdWUuY2xl
YXIoKTsKKyAgLy8gQ29tbWVudGVkIG91dCB0aGUgIlJlbW92ZUFsbEFycmF5cygpIiBsaW5lLi4u
LgorICAvL3RoaXMtPlBvaW50RGF0YUFycmF5U2VsZWN0aW9uLT5SZW1vdmVBbGxBcnJheXMoKTsK
KworICAvL29wZW4gdGhlIGRpcmVjdG9yeSBhbmQgZ2V0IG51bSBvZiBmaWxlcworICB0ZW1wUGF0
aCArPSAiL2xhZ3JhbmdpYW4iOworICBkaXJlY3RvcnkgPSB2dGtEaXJlY3Rvcnk6Ok5ldygpOwor
ICBpZihkaXJlY3RvcnktPk9wZW4odGVtcFBhdGguY19zdHIoKSkpCisgICAgeworICAgIG5GaWVs
ZEZpbGVzID0gZGlyZWN0b3J5LT5HZXROdW1iZXJPZkZpbGVzKCk7CisgICAgZm9yKGludCBqID0g
MDsgaiA8IG5GaWVsZEZpbGVzOyBqKyspCisgICAgICB7CisgICAgICBjb25zdCB2dGtTdGRTdHJp
bmcgZmllbGRGaWxlKGRpcmVjdG9yeS0+R2V0RmlsZShqKSk7CisgICAgICBjb25zdCBpbnQgbGVu
ID0gZmllbGRGaWxlLmxlbmd0aCgpOworCisgICAgICAvLyBleGNsdWRlZCBleHRlbnNpb25zIGJh
c2VkIG9uIHNyYy9PcGVuRk9BTS9PU3NwZWNpZmljL1VuaXgvVW5peC5DCisgICAgICBpZighZGly
ZWN0b3J5LT5GaWxlSXNEaXJlY3RvcnkoZmllbGRGaWxlLmNfc3RyKCkpCisgICAgICAgICYmIGZp
ZWxkRmlsZS5zdWJzdHIobGVuIC0gMSkgIT0gIn4iCisgICAgICAgICYmIChsZW4gPCA0IHx8IChm
aWVsZEZpbGUuc3Vic3RyKGxlbiAtIDQpICE9ICIuYmFrIgorICAgICAgICAmJiBmaWVsZEZpbGUu
c3Vic3RyKGxlbiAtIDQpICE9ICIuQkFLIgorICAgICAgICAmJiBmaWVsZEZpbGUuc3Vic3RyKGxl
biAtIDQpICE9ICIub2xkIikpCisgICAgICAgICYmIChsZW4gPCA1IHx8IGZpZWxkRmlsZS5zdWJz
dHIobGVuIC0gNSkgIT0gIi5zYXZlIikpCisgICAgICAgIHsKKyAgICAgICAgdnRrRm9hbUlPb2Jq
ZWN0IGlvOworICAgICAgICBpZihpby5vcGVuKHRlbXBQYXRoICsgIi8iICsgZmllbGRGaWxlKSkK
KyAgICAgICAgICB7CisgICAgICAgICAgaWYoaW8uY2xhc3NOYW1lKCkgPT0gInNjYWxhckZpZWxk
IgorICAgICAgICAgICAgfHwgaW8uY2xhc3NOYW1lKCkgPT0gInZlY3RvckZpZWxkIikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIHJlYWwgZmlsZSBuYW1lCisgICAgICAgICAgICB0aGlz
LT5MYWdyYW5naWFuVGltZVN0ZXBEYXRhLT52YWx1ZS5wdXNoX2JhY2soZmllbGRGaWxlKTsKKyAg
ICAgICAgICAgIC8vIG9iamVjdCBuYW1lCisgICAgICAgICAgICB0aGlzLT5Qb2ludERhdGFBcnJh
eVNlbGVjdGlvbi0+QWRkQXJyYXkoCisJICAgICAgKHZ0a1N0ZFN0cmluZygibGFncmFuZ2lhbi8i
KSArIGlvLm9iamVjdE5hbWUoKSkuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ZWxzZSBpZihpby5jbGFzc05hbWUoKSA9PSAiQ2xvdWQiICYmIGlvLm9iamVjdE5hbWUoKSA9PSAi
cG9zaXRpb25zIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMtPlBhdGNoRGF0YUFy
cmF5U2VsZWN0aW9uLT5BZGRBcnJheSgiTGFncmFuZ2lhbiBQYXJ0aWNsZXMiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICBpby5jbG9zZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
ICAgfQogICAgIH0KKyAgZGlyZWN0b3J5LT5EZWxldGUoKTsKIAotICAvL2NsZWFuIHVwIG1lbW9y
eQotICB0aGlzLT5GYWNlc093bmVyQ2VsbC0+dmFsdWUuY2xlYXIoKTsKLSAgdGhpcy0+RmFjZXNO
ZWlnaGJvckNlbGwtPnZhbHVlLmNsZWFyKCk7Ci0gIHJldHVybjsKKyAgLy8gcmVmcmVzaCBzZWxl
Y3Rpb24gc3RhdHVzCisgIHRoaXMtPlNlbGVjdGlvbk1vZGlmaWVkKCk7CiB9CiAKIC8vICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLS8vICBNZXRob2Q6IHZ0a09wZW5GT0FNUmVhZGVyOjpNYWtlSW50ZXJu
YWxNZXNoCisvLyAgTWV0aG9kOiB2dGtPcGVuRk9BTVJlYWRlcjo6SW5zZXJ0Q2VsbFRvR3JpZAog
Ly8KIC8vICBQdXJwb3NlOgotLy8gIGRlcml2ZSBjZWxsIHR5cGVzIGFuZCBjcmVhdGUgdGhlIGlu
dGVybmFsIG1lc2gKKy8vICBkZXRlcm1pbmUgY2VsbCBzaGFwZSBhbmQgaW5zZXJ0IHRoZSBjZWxs
IGludG8gdGhlIG1lc2gKKy8vICBoZXhhaGVkcm9uLCBwcmlzbSwgcHlyYW1pZCwgdGV0cmFoZWRy
b24sIHdlZGdlJnRldFdlZGdlCiAvLwogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotdnRrVW5zdHJ1
Y3R1cmVkR3JpZCAqIHZ0a09wZW5GT0FNUmVhZGVyOjpNYWtlSW50ZXJuYWxNZXNoKCkKK3ZvaWQg
dnRrT3BlbkZPQU1SZWFkZXI6Okluc2VydENlbGxUb0dyaWQodnRrVW5zdHJ1Y3R1cmVkR3JpZCog
aW50ZXJuYWxNZXNoLAorICBpbnQgY2VsbElkLCBmYWNlVmVjdG9yVmVjdG9yICpmYWNlc09mQ2Vs
bCwgaW50VmVjdG9yVmVjdG9yKiBmYWNlc1BvaW50cykKIHsKLSAgdnRrRGVidWdNYWNybyg8PCJN
YWtlIGludGVybmFsIG1lc2giKTsKLSAgLy9pbml0aWFsaXplIHZhcmlhYmxlcwotICBib29sIGZv
dW5kRHVwID0gZmFsc2U7Ci0gIHZ0a3N0ZDo6dmVjdG9yPCBpbnQgPiBjZWxsUG9pbnRzOwotICB2
dGtzdGQ6OnZlY3RvcjwgaW50ID4gdGVtcEZhY2VzWzJdOwotICB2dGtzdGQ6OnZlY3RvcjwgaW50
ID4gZmlyc3RGYWNlOwotICBpbnQgcGl2b3RQb2ludCA9IDA7Ci0gIGludCBpLCBqLCBrLCBsLCBw
Q291bnQ7Ci0gIGludCBmYWNlQ291bnQgPSAwOwotCi0gIC8vQ3JlYXRlIE1lc2gKLSAgdnRrVW5z
dHJ1Y3R1cmVkR3JpZCAqICBpbnRlcm5hbE1lc2ggPSB2dGtVbnN0cnVjdHVyZWRHcmlkOjpOZXco
KTsKLSAgLy9sb29wIHRocm91Z2ggZWFjaCBjZWxsLCBkZXJpdmUgdHlwZSBhbmQgaW5zZXJ0IGl0
IGludG8gdGhlIG1lc2gKLSAgLy9oZXhhaGVkcm9uLCBwcmlzbSwgcHlyYW1pZCwgdGV0cmFoZWRy
b24sIHdlZGdlJnRldFdlZGdlCi0gIGZvcihpID0gMDsgaSA8IChpbnQpdGhpcy0+RmFjZXNPZkNl
bGwtPnZhbHVlLnNpemUoKTsgaSsrKSAgLy9lYWNoIGNlbGwKLSAgICB7CisgIC8vIGFsaWFzZXMK
KyAgY29uc3QgdnRrc3RkOjp2ZWN0b3I8dnRrc3RkOjp2ZWN0b3I8aW50PiA+JiBmYWNlUG9pbnRz
CisgICAgPSBmYWNlc1BvaW50cy0+dmFsdWU7CisgIGNvbnN0IHZ0a3N0ZDo6dmVjdG9yPGZhY2U+
JiBjZWxsRmFjZXMgPSBmYWNlc09mQ2VsbC0+dmFsdWVbY2VsbElkXTsKKyAgY29uc3Qgc2l6ZV90
IG5DZWxsRmFjZXMgPSBjZWxsRmFjZXMuc2l6ZSgpOwogCi0gICAgLy9jYWxjdWxhdGUgdGhlIHRv
dGFsIHBvaW50cyBmb3IgdGhlIGNlbGwKLSAgICAvL3VzZWQgdG8gZGVyaXZlIGNlbGwgdHlwZQot
ICAgIGludCB0b3RhbFBvaW50Q291bnQgPSAwOwotICAgIGZvcihqID0gMDsgaiA8IChpbnQpdGhp
cy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldLnNpemUoKTsgaisrKSAgLy9lYWNoIGZhY2UKLSAgICAg
IHsKLSAgICAgIHRvdGFsUG9pbnRDb3VudCArPSAKLSAgICAgICAgKGludCl0aGlzLT5GYWNlUG9p
bnRzLT4KLSAgICAgICAgICAgICAgICAgdmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ld
W2pdLmZhY2VJbmRleF0uc2l6ZSgpOwotICAgICAgfQorICB2dGtJZExpc3QqIGNlbGxQb2ludHMg
PSB2dGtJZExpc3Q6Ok5ldygpOwogCi0gICAgLy8gdXNpbmcgY2VsbCB0eXBlIC0gb3JkZXIgcG9p
bnRzLCBjcmVhdGUgY2VsbCwgJiBhZGQgdG8gbWVzaAotICAgIC8vT0ZoZXggfCB2dGtIZXhhaGVk
cm9uCi0gICAgaWYgKHRvdGFsUG9pbnRDb3VudCA9PSAyNCkKKyAgLy8gZGV0ZXJtaW5lIHR5cGUg
b2YgdGhlIGNlbGwKKyAgLy8gYmFzZWQgb24gc3JjL09wZW5GT0FNL21lc2hlcy9tZXNoU2hhcGVz
L2NlbGxNYXRjaGVyL3toZXh8cHJpc218cHlyfHRldH0tCisgIC8vIE1hdGNoZXIuQworICBpbnQg
Y2VsbFR5cGUgPSBWVEtfQ09OVkVYX1BPSU5UX1NFVDsKKyAgaWYobkNlbGxGYWNlcyA9PSA2KQor
ICAgIHsKKyAgICBzaXplX3QgaiA9IDA7CisgICAgZm9yKGogPSAwOyBqIDwgbkNlbGxGYWNlczsg
aisrKQogICAgICAgewotICAgICAgZmFjZUNvdW50ID0gMDsKLQotICAgICAgLy9nZXQgZmlyc3Qg
ZmFjZQotICAgICAgZm9yKGogPSAwOyBqIDwKLSAgICAgICAgKGludCl0aGlzLT5GYWNlUG9pbnRz
LT4KLSAgICAgICAgICAgICAgICAgICAgdmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ld
WzBdLmZhY2VJbmRleF0uc2l6ZSgpOyBqKyspCisgICAgICBpZihmYWNlUG9pbnRzW2NlbGxGYWNl
c1tqXS5mYWNlSW5kZXhdLnNpemUoKSAhPSA0KQogICAgICAgICB7Ci0gICAgICAgIGZpcnN0RmFj
ZS5wdXNoX2JhY2sodGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbCi0gICAgICAgICAgdGhpcy0+RmFj
ZXNPZkNlbGwtPnZhbHVlW2ldWzBdLmZhY2VJbmRleF1bal0pOworICAgICAgICBicmVhazsKICAg
ICAgICAgfQotCi0gICAgICAvL3BhdGNoOiBpZiBpdCBpcyBhIG5laWdoYm9yIGZhY2UgZmxpcCB0
aGUgcG9pbnRzCi0gICAgICBpZih0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1bMF0ubmVpZ2hi
b3JGYWNlKQorICAgICAgfQorICAgIGlmKGogPT0gbkNlbGxGYWNlcykKKyAgICAgIHsKKyAgICAg
IGNlbGxUeXBlID0gVlRLX0hFWEFIRURST047CisgICAgICB9CisgICAgfQorICBlbHNlIGlmKG5D
ZWxsRmFjZXMgPT0gNSkKKyAgICB7CisgICAgaW50IG5UcmlzID0gMCwgblF1YWRzID0gMDsKKyAg
ICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgbkNlbGxGYWNlczsgaisrKQorICAgICAgeworICAgICAg
Y29uc3QgaW50IG5Qb2ludHMgPSBmYWNlUG9pbnRzW2NlbGxGYWNlc1tqXS5mYWNlSW5kZXhdLnNp
emUoKTsKKyAgICAgIGlmKG5Qb2ludHMgPT0gMykKICAgICAgICAgewotICAgICAgICBpbnQgdGVt
cFBvcDsKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludClmaXJzdEZhY2Uuc2l6ZSgpIC0gMTsg
aysrKQotICAgICAgICAgIHsKLSAgICAgICAgICB0ZW1wUG9wID0gZmlyc3RGYWNlW2ZpcnN0RmFj
ZS5zaXplKCktMV07Ci0gICAgICAgICAgZmlyc3RGYWNlLnBvcF9iYWNrKCk7Ci0gICAgICAgICAg
Zmlyc3RGYWNlLmluc2VydChmaXJzdEZhY2UuYmVnaW4oKSsxK2ssIHRlbXBQb3ApOwotICAgICAg
ICAgIH0KKyAgICAgICAgblRyaXMrKzsKICAgICAgICAgfQotCi0gICAgICAvL2FkZCBmaXJzdCBm
YWNlIHRvIGNlbGwgcG9pbnRzCi0gICAgICBmb3IoaiA9MDsgaiA8IChpbnQpZmlyc3RGYWNlLnNp
emUoKTsgaisrKQorICAgICAgZWxzZSBpZihuUG9pbnRzID09IDQpCiAgICAgICAgIHsKLSAgICAg
ICAgY2VsbFBvaW50cy5wdXNoX2JhY2soZmlyc3RGYWNlW2pdKTsKKyAgICAgICAgblF1YWRzKys7
CiAgICAgICAgIH0KLQotICAgICAgLy9maW5kIHRoZSBvcHBvc2l0ZSBmYWNlIGFuZCBvcmRlciB0
aGUgcG9pbnRzIGNvcnJlY3RseQotICAgICAgZm9yKGludCBwb2ludENvdW50ID0gMDsgcG9pbnRD
b3VudCA8IChpbnQpZmlyc3RGYWNlLnNpemUoKTsgcG9pbnRDb3VudCsrKQorICAgICAgZWxzZQog
ICAgICAgICB7Ci0KLSAgICAgICAgLy9maW5kIHRoZSBvdGhlciAyIGZhY2VzIGNvbnRhaW5pbmcg
ZWFjaCBwb2ludAotICAgICAgICBmb3IoaiA9IDE7IGogPCAoaW50KXRoaXMtPkZhY2VzT2ZDZWxs
LT52YWx1ZVtpXS5zaXplKCk7IGorKykgLy9lYWNoIGZhY2UKLSAgICAgICAgICB7Ci0gICAgICAg
ICAgZm9yKGsgPSAwOyBrIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAg
ICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVtqXS5mYWNlSW5kZXhdLnNpemUoKTsgaysr
KSAvL2VhY2ggcG9pbnQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKGZpcnN0RmFjZVtw
b2ludENvdW50XSA9PSB0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICAgICAgdGhp
cy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldW2pdLmZhY2VJbmRleF1ba10pCi0gICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgLy9BTk9USEVSIEZBQ0UgV0lUSCBUSEUgUE9JTlQKLSAgICAgICAg
ICAgICAgZm9yKGwgPSAwOyBsIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAg
ICAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1bal0uZmFjZUluZGV4XS5zaXpl
KCk7IGwrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGVtcEZhY2VzW2Zh
Y2VDb3VudF0ucHVzaF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlWwotICAgICAgICAgICAg
ICAgICAgdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldW2pdLmZhY2VJbmRleF1bbF0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZmFjZUNvdW50Kys7Ci0gICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgLy9sb2NhdGUgdGhlIHBp
dm90IHBvaW50IGNvbnRhaW5lZCBpbiBmYWNlcyAwICYgMQotICAgICAgICBmb3IoaiA9IDA7IGog
PCAoaW50KXRlbXBGYWNlc1swXS5zaXplKCk7IGorKykKLSAgICAgICAgICB7Ci0gICAgICAgICAg
Zm9yKGsgPSAwOyBrIDwgKGludCl0ZW1wRmFjZXNbMV0uc2l6ZSgpOyBrKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICBpZih0ZW1wRmFjZXNbMF1bal0gPT0gdGVtcEZhY2VzWzFdW2tdICYm
IHRlbXBGYWNlc1swXVtqXSAhPQotICAgICAgICAgICAgICBmaXJzdEZhY2VbcG9pbnRDb3VudF0p
Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcGl2b3RQb2ludCA9IHRlbXBGYWNlc1sw
XVtqXTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9Ci0gICAgICAgIGNlbGxQb2ludHMucHVzaF9iYWNrKHBpdm90UG9pbnQp
OwotICAgICAgICB0ZW1wRmFjZXNbMF0uY2xlYXIoKTsKLSAgICAgICAgdGVtcEZhY2VzWzFdLmNs
ZWFyKCk7Ci0gICAgICAgIGZhY2VDb3VudD0wOworICAgICAgICBicmVhazsKICAgICAgICAgfQot
Ci0gICAgICAvL2NyZWF0ZSB0aGUgaGV4IGNlbGwgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBtZXNo
Ci0gICAgICB2dGtIZXhhaGVkcm9uICogaGV4YWhlZHJvbj0gdnRrSGV4YWhlZHJvbjo6TmV3KCk7
Ci0gICAgICBmb3IocENvdW50ID0gMDsgcENvdW50IDwgKGludCljZWxsUG9pbnRzLnNpemUoKTsg
cENvdW50KyspCisgICAgICB9CisgICAgaWYoblRyaXMgPT0gMiAmJiBuUXVhZHMgPT0gMykKKyAg
ICAgIHsKKyAgICAgIGNlbGxUeXBlID0gVlRLX1dFREdFOworICAgICAgfQorICAgIGVsc2UgaWYo
blRyaXMgPT0gNCAmJiBuUXVhZHMgPT0gMSkKKyAgICAgIHsKKyAgICAgIGNlbGxUeXBlID0gVlRL
X1BZUkFNSUQ7CisgICAgICB9CisgICAgfQorICBlbHNlIGlmKG5DZWxsRmFjZXMgPT0gNCkKKyAg
ICB7CisgICAgc2l6ZV90IGogPSAwOworICAgIGZvcihqID0gMDsgaiA8IG5DZWxsRmFjZXM7IGor
KykKKyAgICAgIHsKKyAgICAgIGlmKGZhY2VQb2ludHNbY2VsbEZhY2VzW2pdLmZhY2VJbmRleF0u
c2l6ZSgpICE9IDMpCiAgICAgICAgIHsKLSAgICAgICAgaGV4YWhlZHJvbi0+R2V0UG9pbnRJZHMo
KS0+U2V0SWQocENvdW50LCBjZWxsUG9pbnRzW3BDb3VudF0pOworICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgaW50ZXJuYWxNZXNoLT5JbnNlcnROZXh0Q2VsbChoZXhhaGVkcm9uLT5H
ZXRDZWxsVHlwZSgpLAotICAgICAgICBoZXhhaGVkcm9uLT5HZXRQb2ludElkcygpKTsKLSAgICAg
IGhleGFoZWRyb24tPkRlbGV0ZSgpOwotICAgICAgY2VsbFBvaW50cy5jbGVhcigpOwotICAgICAg
Zmlyc3RGYWNlLmNsZWFyKCk7CiAgICAgICB9CisgICAgaWYoaiA9PSBuQ2VsbEZhY2VzKQorICAg
ICAgeworICAgICAgY2VsbFR5cGUgPSBWVEtfVEVUUkE7CisgICAgICB9CisgICAgfQogCi0gICAg
Ly9PRnByaXNtIHwgdnRrV2VkZ2UKLSAgICBlbHNlIGlmICh0b3RhbFBvaW50Q291bnQgPT0gMTgp
CisgIC8vIG5vdCBhbiBIZXgvV2VkZ2UvUHlyYW1pZC9UZXRyYQorICBpZihjZWxsVHlwZSA9PSBW
VEtfQ09OVkVYX1BPSU5UX1NFVCkKKyAgICB7CisgICAgaW50IG5Qb2ludHMgPSAwOworICAgIGZv
cihzaXplX3QgaiA9IDA7IGogPCBuQ2VsbEZhY2VzOyBqKyspCiAgICAgICB7Ci0gICAgICBmYWNl
Q291bnQgPSAwOwotICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgIG5Qb2ludHMgKz0gZmFjZVBv
aW50c1tjZWxsRmFjZXNbal0uZmFjZUluZGV4XS5zaXplKCk7CisgICAgICB9CisgICAgaWYoblBv
aW50cyA9PSAwKQorICAgICAgeworICAgICAgY2VsbFR5cGUgPSBWVEtfRU1QVFlfQ0VMTDsKKyAg
ICAgIH0KKyAgICB9CiAKLSAgICAgIC8vZmluZCBmaXJzdCB0cmlhbmd1bGFyIGZhY2UKLSAgICAg
IGZvcihqID0gMDsgaiA8IChpbnQpdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldLnNpemUoKTsg
aisrKSAgLy9lYWNoIGZhY2UKKyAgLy8gQ2VsbCBzaGFwZSBjb25zdHJ1Y3RvciBiYXNlZCBvbiB0
aGUgb25lIGltcGxlbWVudGQgYnkgVGVycnkKKyAgLy8gSm9yZGFuLCB3aXRoIHNvbWUgaW1wcm92
ZW1lbnRzLiBub3QgYXMgZWxlZ2FudCBhcyB0aGUgb25lIGluCisgIC8vIE9wZW5GT0FNIGJ1dCB3
b3JrcyByZWFzb25hYmx5IGZhc3QuCisKKyAgLy8gT0ZoZXggfCB2dGtIZXhhaGVkcm9uIHx8IE9G
cHJpc20gfCB2dGtXZWRnZQorICBpZiAoY2VsbFR5cGUgPT0gVlRLX0hFWEFIRURST04gfHwgY2Vs
bFR5cGUgPT0gVlRLX1dFREdFKQorICAgIHsKKyAgICAvLyBmaW5kIHRoZSBiYXNlIGZhY2UgbnVt
YmVyCisgICAgc2l6ZV90IGZhY2UwSWQgPSAwOworICAgIGlmKGNlbGxUeXBlID09IFZUS19IRVhB
SEVEUk9OKQorICAgICAgeworICAgICAgY2VsbFBvaW50cy0+U2V0TnVtYmVyT2ZJZHMoOCk7Cisg
ICAgICBmYWNlMElkID0gMDsKKyAgICAgIH0KKyAgICBlbHNlIC8vIFZUS19XRURHRQorICAgICAg
eworICAgICAgY2VsbFBvaW50cy0+U2V0TnVtYmVyT2ZJZHMoNik7CisgICAgICBmb3Ioc2l6ZV90
IGogPSAwOyBqIDwgbkNlbGxGYWNlczsgaisrKQogICAgICAgICB7Ci0gICAgICAgIGlmKChpbnQp
dGhpcy0+RmFjZVBvaW50cy0+Ci0gICAgICAgICAgICB2YWx1ZVt0aGlzLT5GYWNlc09mQ2VsbC0+
dmFsdWVbaV1bal0uZmFjZUluZGV4XS5zaXplKCkgPT0gMykKKyAgICAgICAgaWYoZmFjZVBvaW50
c1tjZWxsRmFjZXNbal0uZmFjZUluZGV4XS5zaXplKCkgPT0gMykKICAgICAgICAgICB7Ci0gICAg
ICAgICAgZm9yKGsgPSAwOyBrIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAg
ICAgICAgICAgdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldW2pdLmZhY2VJbmRleF0uc2l6ZSgp
OyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBmaXJzdEZhY2UucHVzaF9iYWNrKHRo
aXMtPkZhY2VQb2ludHMtPnZhbHVlWwotICAgICAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+
dmFsdWVbaV1bal0uZmFjZUluZGV4XVtrXSk7Ci0gICAgICAgICAgICBpbmRleCA9IGo7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgZmFjZTBJZCA9IGo7CiAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgfQogICAgICAgICB9CisgICAgICB9CiAKKyAgICAvL2dldCBmaXJzdCBmYWNlIGluIGNv
cnJlY3Qgb3JkZXIKKyAgICBjb25zdCB2dGtzdGQ6OnZlY3RvcjxpbnQ+JiBmYWNlMFBvaW50cwor
ICAgICAgPSBmYWNlUG9pbnRzW2NlbGxGYWNlc1tmYWNlMElkXS5mYWNlSW5kZXhdOworICAgIHNp
emVfdCBuRmFjZTBQb2ludHMgPSBmYWNlMFBvaW50cy5zaXplKCk7CisgICAgdnRrc3RkOjp2ZWN0
b3I8aW50PiBiYXNlRmFjZShuRmFjZTBQb2ludHMpOyAvLyBvcmRlcmVkIHBvaW50IGxpc3QKKyAg
ICBpZihjZWxsRmFjZXNbZmFjZTBJZF0ubmVpZ2hib3JGYWNlKQorICAgICAgewogICAgICAgLy9w
YXRjaDogaWYgaXQgaXMgYSBuZWlnaGJvciBmYWNlIGZsaXAgdGhlIHBvaW50cwotICAgICAgaWYo
dGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldWzBdLm5laWdoYm9yRmFjZSkKKyAgICAgIGZvcihz
aXplX3QgaiA9IDA7IGogPCBuRmFjZTBQb2ludHM7IGorKykKICAgICAgICAgewotICAgICAgICBp
bnQgdGVtcFBvcDsKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludClmaXJzdEZhY2Uuc2l6ZSgp
IC0gMTsgaysrKQotICAgICAgICAgIHsKLSAgICAgICAgICB0ZW1wUG9wID0gZmlyc3RGYWNlW2Zp
cnN0RmFjZS5zaXplKCktMV07Ci0gICAgICAgICAgZmlyc3RGYWNlLnBvcF9iYWNrKCk7Ci0gICAg
ICAgICAgZmlyc3RGYWNlLmluc2VydChmaXJzdEZhY2UuYmVnaW4oKSsxK2ssIHRlbXBQb3ApOwot
ICAgICAgICAgIH0KKyAgICAgICAgYmFzZUZhY2Vbal0gPSBmYWNlMFBvaW50c1tuRmFjZTBQb2lu
dHMgLSAxIC0gal07CisgICAgICAgIC8vYWRkIGJhc2UgZmFjZSB0byBjZWxsIHBvaW50cworICAg
ICAgICBjZWxsUG9pbnRzLT5TZXRJZChqLCBiYXNlRmFjZVtqXSk7CiAgICAgICAgIH0KLQotICAg
ICAgLy9hZGQgZmlyc3QgZmFjZSB0byBjZWxsIHBvaW50cwotICAgICAgZm9yKGogPTA7IGogPCAo
aW50KWZpcnN0RmFjZS5zaXplKCk7IGorKykKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7Cisg
ICAgICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgbkZhY2UwUG9pbnRzOyBqKyspCiAgICAgICAgIHsK
LSAgICAgICAgY2VsbFBvaW50cy5wdXNoX2JhY2soZmlyc3RGYWNlW2pdKTsKKyAgICAgICAgYmFz
ZUZhY2Vbal0gPSBmYWNlMFBvaW50c1tqXTsKKyAgICAgICAgLy9hZGQgYmFzZSBmYWNlIHRvIGNl
bGwgcG9pbnRzCisgICAgICAgIGNlbGxQb2ludHMtPlNldElkKGosIGJhc2VGYWNlW2pdKTsKICAg
ICAgICAgfQorICAgICAgfQogCi0gICAgICAvL2ZpbmQgdGhlIG9wcG9zaXRlIGZhY2UgYW5kIG9y
ZGVyIHRoZSBwb2ludHMgY29ycmVjdGx5Ci0gICAgICBmb3IoaW50IHBvaW50Q291bnQgPSAwOyBw
b2ludENvdW50IDwgKGludClmaXJzdEZhY2Uuc2l6ZSgpOyBwb2ludENvdW50KyspCisgICAgLy9m
aW5kIHRoZSBvcHBvc2l0ZSBmYWNlIHBvaW50cyBhbmQgb3JkZXIgdGhlIHBvaW50cyBjb3JyZWN0
bHkKKyAgICBjb25zdCBzaXplX3QgbkJhc2VGYWNlUG9pbnRzID0gYmFzZUZhY2Uuc2l6ZSgpOwor
ICAgIGZvcihzaXplX3QgcG9pbnRDb3VudCA9IDA7IHBvaW50Q291bnQgPCBuQmFzZUZhY2VQb2lu
dHM7IHBvaW50Q291bnQrKykKKyAgICAgIHsKKyAgICAgIGludCBwaXZvdFBvaW50ID0gLTE7Cisg
ICAgICBjb25zdCBpbnQgYmFzZUZhY2VQb2ludEkgPSBiYXNlRmFjZVtwb2ludENvdW50XTsKKyAg
ICAgIGZvcihzaXplX3QgaiA9IDA7IGogPCBuQ2VsbEZhY2VzOyBqKyspIC8vZWFjaCBmYWNlCiAg
ICAgICAgIHsKLSAgICAgICAgLy9maW5kIHRoZSAyIG90aGVyIGZhY2VzIGNvbnRhaW5pbmcgZWFj
aCBwb2ludAotICAgICAgICBmb3IoaiA9IDA7IGogPCAoaW50KXRoaXMtPkZhY2VzT2ZDZWxsLT52
YWx1ZVtpXS5zaXplKCk7IGorKykgLy9lYWNoIGZhY2UKKyAgICAgICAgaWYoaiA9PSBmYWNlMElk
KQorICAgICAgICAgIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAg
IGNvbnN0IHZ0a3N0ZDo6dmVjdG9yPGludD4mIGZhY2VKUG9pbnRzCisgICAgICAgICAgPSBmYWNl
UG9pbnRzW2NlbGxGYWNlc1tqXS5mYWNlSW5kZXhdOworICAgICAgICBjb25zdCBzaXplX3Qgc2l6
ZUsgPSBmYWNlSlBvaW50cy5zaXplKCk7CisgICAgICAgIGlmKHNpemVLID09IDMpIC8vIG9taXQg
dGhlIG90aGVyIHRyaWFuZ3VsYXIgd2VkZ2UgZmFjZQorICAgICAgICAgIHsKKyAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIGZvcihzaXplX3QgayA9IDA7IGsgPCBzaXpl
SzsgaysrKSAvL2VhY2ggcG9pbnQKICAgICAgICAgICB7Ci0gICAgICAgICAgZm9yKGsgPSAwOyBr
IDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICAgICAgdGhpcy0+RmFj
ZXNPZkNlbGwtPnZhbHVlW2ldW2pdLmZhY2VJbmRleF0uc2l6ZSgpOyBrKyspCisgICAgICAgICAg
Ly8gaWYgdGhlIHBvaW50IG1hdGNoZXMgdGhlIHBvaW50IG9mIHRoZSBiYXNlIGZhY2UuLi4KKyAg
ICAgICAgICBpZihiYXNlRmFjZVBvaW50SSA9PSBmYWNlSlBvaW50c1trXSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmKGZpcnN0RmFjZVtwb2ludENvdW50XSA9PSB0aGlzLT5GYWNlUG9p
bnRzLT52YWx1ZVsKLSAgICAgICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVtq
XS5mYWNlSW5kZXhdW2tdICYmIGogIT0gaW5kZXgpCisgICAgICAgICAgICBjb25zdCBib29sIGlz
TmVpZ2hib3IgPSBjZWxsRmFjZXNbal0ubmVpZ2hib3JGYWNlOworICAgICAgICAgICAgY29uc3Qg
aW50IGZhY2VKUHJldlBvaW50ID0gZmFjZUpQb2ludHNbKHNpemVLICsgayAtIDEpICUgc2l6ZUtd
OworICAgICAgICAgICAgY29uc3QgaW50IGZhY2VKTmV4dFBvaW50ID0gZmFjZUpQb2ludHNbKGsg
KyAxKSAlIHNpemVLXTsKKyAgICAgICAgICAgIGNvbnN0IGludCBiYXNlRmFjZVByZXZQb2ludCA9
IGJhc2VGYWNlWyhuQmFzZUZhY2VQb2ludHMKKyAgICAgICAgICAgICAgKyBwb2ludENvdW50IC0g
MSkgJSBuQmFzZUZhY2VQb2ludHNdOworICAgICAgICAgICAgY29uc3QgaW50IGJhc2VGYWNlTmV4
dFBvaW50CisgICAgICAgICAgICAgID0gYmFzZUZhY2VbKHBvaW50Q291bnQgKyAxKSAlIG5CYXNl
RmFjZVBvaW50c107CisKKyAgICAgICAgICAgIC8vIGlmIHRoZSBuZXh0IHBvaW50IG9mIHRoZSBq
LXRoIGZhY2UgbWF0Y2hlcyB0aGUKKyAgICAgICAgICAgIC8vIHByZXZpb3VzIHBvaW50IG9mIHRo
ZSBiYXNlIGZhY2UgdXNlIHRoZSBwcmV2aW91cworICAgICAgICAgICAgLy8gcG9pbnQgb2YgdGhl
IGotdGggZmFjZSBhcyB0aGUgcGl2b3QgcG9pbnQgYW5kIHVzZSB0aGUKKyAgICAgICAgICAgIC8v
IG5leHQgcG9pbnQgb3RoZXJ3aXNlCisgICAgICAgICAgICBpZihmYWNlSk5leHRQb2ludCA9PSAo
aXNOZWlnaGJvciA/IGJhc2VGYWNlTmV4dFBvaW50CisgICAgICAgICAgICAgIDogYmFzZUZhY2VQ
cmV2UG9pbnQpKQogICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vQU5PVEhFUiBGQUNF
IFdJVEggUE9JTlQKLSAgICAgICAgICAgICAgZm9yKGwgPSAwOyBsIDwgKGludCl0aGlzLT5GYWNl
UG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1
ZVtpXVtqXS5mYWNlSW5kZXhdLnNpemUoKTsgbCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0ZW1wRmFjZXNbZmFjZUNvdW50XS5wdXNoX2JhY2sodGhpcy0+RmFjZVBvaW50
cy0+dmFsdWVbCi0gICAgICAgICAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1b
al0uZmFjZUluZGV4XVtsXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBmYWNl
Q291bnQrKzsKKyAgICAgICAgICAgICAgcGl2b3RQb2ludCA9IGZhY2VKUHJldlBvaW50OwogICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHBpdm90UG9pbnQgPSBmYWNlSk5leHRQ
b2ludDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2VsbFBvaW50cy0+U2V0SWQobkJh
c2VGYWNlUG9pbnRzICsgcG9pbnRDb3VudCwgcGl2b3RQb2ludCk7CiAKLSAgICAgICAgLy9sb2Nh
dGUgdGhlIHBpdm90IHBvaW50IG9mIGZhY2VzIDAgJiAxCi0gICAgICAgIGZvcihqID0gMDsgaiA8
IChpbnQpdGVtcEZhY2VzWzBdLnNpemUoKTsgaisrKQotICAgICAgICAgIHsKLSAgICAgICAgICBm
b3IoayA9IDA7IGsgPCAoaW50KXRlbXBGYWNlc1sxXS5zaXplKCk7IGsrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmKHRlbXBGYWNlc1swXVtqXSA9PSB0ZW1wRmFjZXNbMV1ba10gJiYg
dGVtcEZhY2VzWzBdW2pdICE9Ci0gICAgICAgICAgICAgIGZpcnN0RmFjZVtwb2ludENvdW50XSkK
KyAgICAgICAgICAgIC8vIHdlIGZ1cnRoZXIgbG9vayBhdCBvbmUgbW9yZSB2ZXJ0ZXg6CisgICAg
ICAgICAgICAvLyBpZiB0aGUgai10aCBmYWNlIGFsc28gc2hhcmVzIG5leHQgcG9pbnQgb2YgdGhl
IGJhc2UgZmFjZQorICAgICAgICAgICAgLy8gYWRkIHRoZSBjb3JyZXNwb25kaW5nIG9wcG9zaXRl
IHBvaW50IHRvIGNlbGwgcG9pbnRzCisgICAgICAgICAgICBpZihwb2ludENvdW50IDwgbkJhc2VG
YWNlUG9pbnRzIC0gMSAmJiBiYXNlRmFjZU5leHRQb2ludAorICAgICAgICAgICAgICA9PSAoaXNO
ZWlnaGJvciA/IGZhY2VKTmV4dFBvaW50IDogZmFjZUpQcmV2UG9pbnQpKQogICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIHBpdm90UG9pbnQgPSB0ZW1wRmFjZXNbMF1bal07Ci0gICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBwb2ludENvdW50Kys7CisgICAgICAgICAgICAg
IGNlbGxQb2ludHMtPlNldElkKG5CYXNlRmFjZVBvaW50cyArIHBvaW50Q291bnQsCisgICAgICAg
ICAgICAgICAgZmFjZUpQb2ludHNbKGsgKyAyKSAlIHNpemVLXSk7CiAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOyAvLyBsb29rIG5vIG1vcmUgcG9pbnRzIGFzIHRvIHRoZSBmYWNl
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICBjZWxsUG9pbnRzLnB1c2hfYmFj
ayhwaXZvdFBvaW50KTsKLSAgICAgICAgdGVtcEZhY2VzWzBdLmNsZWFyKCk7Ci0gICAgICAgIHRl
bXBGYWNlc1sxXS5jbGVhcigpOwotICAgICAgICBmYWNlQ291bnQ9MDsKLSAgICAgICAgfQotCi0g
ICAgICAvL2NyZWF0ZSB0aGUgd2VkZ2UgY2VsbCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1lc2gK
LSAgICAgIHZ0a1dlZGdlICogd2VkZ2U9IHZ0a1dlZGdlOjpOZXcoKTsKLSAgICAgIGZvcihwQ291
bnQgPSAwOyBwQ291bnQgPCAoaW50KWNlbGxQb2ludHMuc2l6ZSgpOyBwQ291bnQrKykKLSAgICAg
ICAgewotICAgICAgICB3ZWRnZS0+R2V0UG9pbnRJZHMoKS0+U2V0SWQocENvdW50LCBjZWxsUG9p
bnRzW3BDb3VudF0pOwotICAgICAgICB9Ci0gICAgICBpbnRlcm5hbE1lc2gtPkluc2VydE5leHRD
ZWxsKHdlZGdlLT5HZXRDZWxsVHlwZSgpLAotICAgICAgICB3ZWRnZS0+R2V0UG9pbnRJZHMoKSk7
Ci0gICAgICBjZWxsUG9pbnRzLmNsZWFyKCk7Ci0gICAgICB3ZWRnZS0+RGVsZXRlKCk7Ci0gICAg
ICBmaXJzdEZhY2UuY2xlYXIoKTsKLSAgICAgIH0KLQotICAgIC8vT0ZweXJhbWlkIHwgdnRrUHly
YW1pZAotICAgIGVsc2UgaWYgKHRvdGFsUG9pbnRDb3VudCA9PSAxNikKLSAgICAgIHsKLSAgICAg
IGZvdW5kRHVwID0gZmFsc2U7Ci0KLSAgICAgIC8vZmluZCB0aGUgcXVhZHJhdGljIGZhY2UKLSAg
ICAgIGZvcihqID0gMDsgaiA8IChpbnQpdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ldLnNpemUo
KTsgaisrKSAgLy9lYWNoIGZhY2UKLSAgICAgICAgewotICAgICAgICBpZigoaW50KXRoaXMtPkZh
Y2VQb2ludHMtPgotICAgICAgICAgICAgdmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2ld
W2pdLmZhY2VJbmRleF0uc2l6ZSgpID09IDQpCisgICAgICAgIGlmKHBpdm90UG9pbnQgPj0gMCkg
Ly8gYnJlYWsgaWYgdGhlIHBpdm90IHBvaW50IGlzIGZvdW5kCiAgICAgICAgICAgewotICAgICAg
ICAgIGZvcihrID0gMDsgayA8IChpbnQpdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbCi0gICAgICAg
ICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVtqXS5mYWNlSW5kZXhdLnNpemUoKTsg
aysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2VsbFBvaW50cy5wdXNoX2JhY2sodGhp
cy0+RmFjZVBvaW50cy0+dmFsdWVbCi0gICAgICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52
YWx1ZVtpXVtqXS5mYWNlSW5kZXhdW2tdKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICBicmVh
azsKICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAvL2NyZWF0ZSB0aGUgaGV4
IGNlbGwgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBtZXNoCisgICAgaW50ZXJuYWxNZXNoLT5JbnNl
cnROZXh0Q2VsbChjZWxsVHlwZSwgY2VsbFBvaW50cyk7CisgICAgfQogCi0gICAgICAvL2NvbXBh
cmUgZmlyc3QgZmFjZSBwb2ludHMgdG8gb3RoZXIgZmFjZXMKLSAgICAgIGZvcihqID0gMDsgaiA8
IChpbnQpY2VsbFBvaW50cy5zaXplKCk7IGorKykgLy9lYWNoIHBvaW50CisgIC8vT0ZweXJhbWlk
IHwgdnRrUHlyYW1pZCB8fCBPRnRldCB8IHZ0a1RldHJhaGVkcm9uCisgIGVsc2UgaWYgKGNlbGxU
eXBlID09IFZUS19QWVJBTUlEIHx8IGNlbGxUeXBlID09IFZUS19URVRSQSkKKyAgICB7CisgICAg
aW50IGJhc2VGYWNlSWQgPSAtMTsKKyAgICBpZihjZWxsVHlwZSA9PSBWVEtfUFlSQU1JRCkKKyAg
ICAgIHsKKyAgICAgIGZvcihzaXplX3QgaiA9IDA7IGogPCBuQ2VsbEZhY2VzOyBqKyspCiAgICAg
ICAgIHsKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1
ZVsKLSAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1bMV0uZmFjZUluZGV4XS5z
aXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgaWYoY2VsbFBvaW50c1tqXSA9PSB0
aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52
YWx1ZVtpXVsxXS5mYWNlSW5kZXhdW2tdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgZm91
bmREdXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgaWYoIWZv
dW5kRHVwKQorICAgICAgICBpZihmYWNlUG9pbnRzW2NlbGxGYWNlc1tqXS5mYWNlSW5kZXhdLnNp
emUoKSA9PSA0KQogICAgICAgICAgIHsKLSAgICAgICAgICBjZWxsUG9pbnRzLnB1c2hfYmFjayh0
aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52
YWx1ZVtpXVtqXS5mYWNlSW5kZXhdW2tdKTsKKyAgICAgICAgICBiYXNlRmFjZUlkID0gajsKICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgLy9jcmVhdGUg
dGhlIHB5cmFtaWQgY2VsbCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1lc2gKLSAgICAgIHZ0a1B5
cmFtaWQgKiBweXJhbWlkID0gdnRrUHlyYW1pZDo6TmV3KCk7Ci0gICAgICBmb3IocENvdW50ID0g
MDsgcENvdW50IDwgKGludCljZWxsUG9pbnRzLnNpemUoKTsgcENvdW50KyspCi0gICAgICAgIHsK
LSAgICAgICAgcHlyYW1pZC0+R2V0UG9pbnRJZHMoKS0+U2V0SWQocENvdW50LCBjZWxsUG9pbnRz
W3BDb3VudF0pOwotICAgICAgICB9Ci0gICAgICBpbnRlcm5hbE1lc2gtPkluc2VydE5leHRDZWxs
KHB5cmFtaWQtPkdldENlbGxUeXBlKCksCi0gICAgICAgIHB5cmFtaWQtPkdldFBvaW50SWRzKCkp
OwotICAgICAgY2VsbFBvaW50cy5jbGVhcigpOwotICAgICAgcHlyYW1pZC0+RGVsZXRlKCk7Cisg
ICAgICBjZWxsUG9pbnRzLT5TZXROdW1iZXJPZklkcyg1KTsKICAgICAgIH0KLQotICAgIC8vT0Z0
ZXQgfCB2dGtUZXRyYWhlZHJvbgotICAgIGVsc2UgaWYgKHRvdGFsUG9pbnRDb3VudCA9PSAxMikK
KyAgICBlbHNlIC8vIFZUS19URVRSQQogICAgICAgewotICAgICAgZm91bmREdXAgPSBmYWxzZTsK
KyAgICAgIGJhc2VGYWNlSWQgPSAwOworICAgICAgY2VsbFBvaW50cy0+U2V0TnVtYmVyT2ZJZHMo
NCk7CisgICAgICB9CiAKLSAgICAgIC8vYWRkIGZpcnN0IGZhY2UgdG8gY2VsbCBwb2ludHMKLSAg
ICAgIGZvcihqID0gMDsgaiA8IChpbnQpdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbCi0gICAgICAg
IHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVswXS5mYWNlSW5kZXhdLnNpemUoKTsgaisrKQor
ICAgIC8vYWRkIGZpcnN0IGZhY2UgdG8gY2VsbCBwb2ludHMKKyAgICBjb25zdCB2dGtzdGQ6OnZl
Y3RvcjxpbnQ+JiBiYXNlRmFjZVBvaW50cworICAgICAgPSBmYWNlUG9pbnRzW2NlbGxGYWNlc1ti
YXNlRmFjZUlkXS5mYWNlSW5kZXhdOworICAgIGNvbnN0IHNpemVfdCBuQmFzZUZhY2VQb2ludHMg
PSBiYXNlRmFjZVBvaW50cy5zaXplKCk7CisgICAgaWYoY2VsbEZhY2VzW2Jhc2VGYWNlSWRdLm5l
aWdoYm9yRmFjZSkKKyAgICAgIHsKKyAgICAgIC8vIGlmIGl0IGlzIGEgbmVpZ2hib3IgZmFjZSBm
bGlwIHRoZSBwb2ludHMKKyAgICAgIGZvcihzaXplX3QgaiA9IDA7IGogPCBuQmFzZUZhY2VQb2lu
dHM7IGorKykKICAgICAgICAgewotICAgICAgICBjZWxsUG9pbnRzLnB1c2hfYmFjayh0aGlzLT5G
YWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1b
MF0uZmFjZUluZGV4XVtqXSk7CisgICAgICAgIGNlbGxQb2ludHMtPlNldElkKGosIGJhc2VGYWNl
UG9pbnRzW25CYXNlRmFjZVBvaW50cyAtIDEgLSBqXSk7CiAgICAgICAgIH0KLQotICAgICAgLy9j
b21wYXJlIGZpcnN0IGZhY2UgdG8gdGhlIHBvaW50cyBvZiBzZWNvbmQgZmFjZQotICAgICAgZm9y
KGogPSAwOyBqIDwgKGludCljZWxsUG9pbnRzLnNpemUoKTsgaisrKSAvL2VhY2ggcG9pbnQKKyAg
ICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgbkJh
c2VGYWNlUG9pbnRzOyBqKyspCiAgICAgICAgIHsKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGlu
dCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+
dmFsdWVbaV1bMV0uZmFjZUluZGV4XS5zaXplKCk7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAg
ICAgaWYoY2VsbFBvaW50c1tqXSA9PSB0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAg
ICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVsxXS5mYWNlSW5kZXhdW2tdKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgZm91bmREdXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIH0KLSAgICAgICAgaWYoIWZvdW5kRHVwKQotICAgICAgICAgIHsKLSAgICAgICAgICBj
ZWxsUG9pbnRzLnB1c2hfYmFjayh0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICAg
IHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVtqXS5mYWNlSW5kZXhdW2tdKTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9CisgICAgICAgIGNlbGxQb2ludHMtPlNldElkKGosIGJhc2VG
YWNlUG9pbnRzW2pdKTsKICAgICAgICAgfQorICAgICAgfQogCi0gICAgICAvL2NyZWF0ZSB0aGUg
d2VkZ2UgY2VsbCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1lc2gKLSAgICAgIHZ0a1RldHJhICog
dGV0cmEgPSB2dGtUZXRyYTo6TmV3KCk7Ci0gICAgICBmb3IocENvdW50ID0gMDsgcENvdW50IDwg
KGludCljZWxsUG9pbnRzLnNpemUoKTsgcENvdW50KyspCisgICAgLy8gY29tcGFyZSBhbiBhZGph
Y2VudCBmYWNlIChhbnkgbm9uIGJhc2UgZmFjZSBpcyBvaykgcG9pbnQgMSB0bworICAgIC8vIGJh
c2UgZmFjZSBwb2ludHMKKyAgICBjb25zdCBpbnQgYWRqYWNlbnRGYWNlSWQgPSAoYmFzZUZhY2VJ
ZCA9PSAwKSA/IDEgOiBiYXNlRmFjZUlkIC0gMTsKKyAgICBjb25zdCB2dGtzdGQ6OnZlY3Rvcjxp
bnQ+JiBhZGphY2VudEZhY2VQb2ludHMKKyAgICAgID0gZmFjZVBvaW50c1tjZWxsRmFjZXNbYWRq
YWNlbnRGYWNlSWRdLmZhY2VJbmRleF07CisgICAgY29uc3QgaW50IGFkamFjZW50RmFjZVBvaW50
MSA9IGFkamFjZW50RmFjZVBvaW50c1sxXTsKKyAgICBib29sIGZvdW5kRHVwID0gZmFsc2U7Cisg
ICAgZm9yKHNpemVfdCBqID0gMDsgaiA8IG5CYXNlRmFjZVBvaW50czsgaisrKQorICAgICAgewor
ICAgICAgLy8gaWYgcG9pbnQgMSBvZiB0aGUgYWRqYWNlbnQgZmFjZSBtYXRjaHMgcG9pbnQgaiBv
ZiB0aGUgYmFzZSBmYWNlLi4uCisgICAgICBpZihjZWxsUG9pbnRzLT5HZXRJZChqKSA9PSBhZGph
Y2VudEZhY2VQb2ludDEpCiAgICAgICAgIHsKLSAgICAgICAgdGV0cmEtPkdldFBvaW50SWRzKCkt
PlNldElkKHBDb3VudCwgY2VsbFBvaW50c1twQ291bnRdKTsKKyAgICAgICAgLy8gaWYgcG9pbnQg
MiBvZiB0aGUgYWRqYWNlbnQgZmFjZSBtYXRjaGVzIHRoZSBwcmV2aW91cyBwb2ludAorICAgICAg
ICAvLyBvZiB0aGUgYmFzZSBmYWNlIHVzZSBwb2ludCAwIG9mIHRoZSBhZGphY2VudCBmYWNlIGFz
IHRoZQorICAgICAgICAvLyBwaXZvdCBwb2ludDsgdXNlIHBvaW50IDIgb3RoZXJ3aXNlCisgICAg
ICAgIGNlbGxQb2ludHMtPlNldElkKG5CYXNlRmFjZVBvaW50cywgKGFkamFjZW50RmFjZVBvaW50
c1syXQorICAgICAgICAgID09IGNlbGxQb2ludHMtPkdldElkKChjZWxsRmFjZXNbYWRqYWNlbnRG
YWNlSWRdLm5laWdoYm9yRmFjZQorICAgICAgICAgID8gKGogKyAxKSA6IChuQmFzZUZhY2VQb2lu
dHMgKyBqIC0gMSkpICUgbkJhc2VGYWNlUG9pbnRzKSkgPyAKKyAgICAgICAgICBhZGphY2VudEZh
Y2VQb2ludHNbMF0gOiBhZGphY2VudEZhY2VQb2ludHNbMl0pOworICAgICAgICBmb3VuZER1cCA9
IHRydWU7CisgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICBpbnRlcm5hbE1lc2gtPklu
c2VydE5leHRDZWxsKHRldHJhLT5HZXRDZWxsVHlwZSgpLAotICAgICAgICB0ZXRyYS0+R2V0UG9p
bnRJZHMoKSk7Ci0gICAgICBjZWxsUG9pbnRzLmNsZWFyKCk7Ci0gICAgICB0ZXRyYS0+RGVsZXRl
KCk7CiAgICAgICB9Ci0KLSAgICAvL2Vycm9ub3VzIGNlbGxzCi0gICAgZWxzZSBpZih0b3RhbFBv
aW50Q291bnQgPT0gMCkKKyAgICAvLyBpZiBwb2ludCAxIG9mIHRoZSBhZGphY2VudCBmYWNlIGRv
ZXMgbm90IG1hdGNoIGFueSBwb2ludHMgb2YKKyAgICAvLyB0aGUgYmFzZSBmYWNlLCBpdCdzIHRo
ZSBwaXZvdCBwb2ludAorICAgIGlmKCFmb3VuZER1cCkKICAgICAgIHsKLSAgICAgIHZ0a1dhcm5p
bmdNYWNybygiV2FybmluZzogTm8gcG9pbnRzIGluIGNlbGwuIik7CisgICAgICBjZWxsUG9pbnRz
LT5TZXRJZChuQmFzZUZhY2VQb2ludHMsIGFkamFjZW50RmFjZVBvaW50MSk7CiAgICAgICB9CiAK
LSAgICAvL09GcG9seWhlZHJvbiB8fCB2dGtDb252ZXhQb2ludFNldAotICAgIGVsc2UKLSAgICAg
IHsKLSAgICAgIHZ0a1dhcm5pbmdNYWNybygiV2FybmluZzogUG9seWhlZHJhbCBEYXRhIGlzIHZl
cnkgU2xvdyEiKTsKLSAgICAgIGZvdW5kRHVwID0gZmFsc2U7CisgICAgLy9jcmVhdGUgdGhlIHRl
dHJhIGNlbGwgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBtZXNoCisgICAgaW50ZXJuYWxNZXNoLT5J
bnNlcnROZXh0Q2VsbChjZWxsVHlwZSwgY2VsbFBvaW50cyk7CisgICAgfQogCi0gICAgICAvL2dl
dCBmaXJzdCBmYWNlCi0gICAgICBmb3IoaiA9IDA7IGogPCAoaW50KXRoaXMtPkZhY2VQb2ludHMt
PnZhbHVlWwotICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1bMF0uZmFjZUluZGV4
XS5zaXplKCk7IGorKykKKyAgLy9lcnJvbm91cyBjZWxscworICBlbHNlIGlmKGNlbGxUeXBlID09
IFZUS19FTVBUWV9DRUxMKQorICAgIHsKKyAgICB2dGtXYXJuaW5nTWFjcm8oIldhcm5pbmc6IE5v
IHBvaW50cyBpbiBjZWxsLiIpOworICAgIH0KKworICAvL09GcG9seWhlZHJvbiB8fCB2dGtDb252
ZXhQb2ludFNldAorICBlbHNlCisgICAgeworICAgIC8vIHZ0a1dhcm5pbmdNYWNybygiV2Fybmlu
ZzogUG9seWhlZHJhbCBEYXRhIGlzIHZlcnkgU2xvdyEiKTsKKworICAgIC8vZ2V0IGZpcnN0IGZh
Y2UKKyAgICBjb25zdCB2dGtzdGQ6OnZlY3RvcjxpbnQ+JiBiYXNlRmFjZVBvaW50cworICAgICAg
PSBmYWNlUG9pbnRzW2NlbGxGYWNlc1swXS5mYWNlSW5kZXhdOworICAgIGNvbnN0IHNpemVfdCBu
QmFzZUZhY2VQb2ludHMgPSBiYXNlRmFjZVBvaW50cy5zaXplKCk7CisgICAgLy9hZGQgZmlyc3Qg
ZmFjZSB0byBjZWxsIHBvaW50cworICAgIC8vIG5vdCBzdXJlIGlmIGZsaXBwaW5nIGlzIG5lY2Vz
c2FyeSBidXQgZG8gaXQgYW55d2F5CisgICAgaWYoY2VsbEZhY2VzWzBdLm5laWdoYm9yRmFjZSkK
KyAgICAgIHsKKyAgICAgIC8vIGlmIGl0IGlzIGEgbmVpZ2hib3IgZmFjZSBmbGlwIHRoZSBwb2lu
dHMKKyAgICAgIGZvcihzaXplX3QgaiA9IDA7IGogPCBuQmFzZUZhY2VQb2ludHM7IGorKykKICAg
ICAgICAgewotICAgICAgICBmaXJzdEZhY2UucHVzaF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZh
bHVlWwotICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXVswXS5mYWNlSW5kZXhd
W2pdKTsKKyAgICAgICAgY2VsbFBvaW50cy0+SW5zZXJ0TmV4dElkKGJhc2VGYWNlUG9pbnRzW25C
YXNlRmFjZVBvaW50cyAtIDEgLSBqXSk7CiAgICAgICAgIH0KLQotICAgICAgLy9hZGQgZmlyc3Qg
ZmFjZSB0byBjZWxsIHBvaW50cwotICAgICAgZm9yKGogPTA7IGogPCAoaW50KWZpcnN0RmFjZS5z
aXplKCk7IGorKykKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBmb3Ioc2l6ZV90
IGogPSAwOyBqIDwgbkJhc2VGYWNlUG9pbnRzOyBqKyspCiAgICAgICAgIHsKLSAgICAgICAgY2Vs
bFBvaW50cy5wdXNoX2JhY2soZmlyc3RGYWNlW2pdKTsKKyAgICAgICAgY2VsbFBvaW50cy0+SW5z
ZXJ0TmV4dElkKGJhc2VGYWNlUG9pbnRzW2pdKTsKICAgICAgICAgfQorICAgICAgfQogCi0gICAg
ICAvL2xvb3AgdGhyb3VnaCBmYWNlcyBhbmQgY3JlYXRlIGEgbGlzdCBvZiBhbGwgcG9pbnRzCi0g
ICAgICAvL2ogPSAxIHNraXAgZmlyc3RGYWNlCi0gICAgICBmb3IoaiA9IDE7IGogPCAoaW50KXRo
aXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVtpXS5zaXplKCk7IGorKykKKyAgICAvL2xvb3AgdGhyb3Vn
aCBmYWNlcyBhbmQgY3JlYXRlIGEgbGlzdCBvZiBhbGwgcG9pbnRzCisgICAgLy9qID0gMSBza2lw
IGJhc2VGYWNlCisgICAgZm9yKHNpemVfdCBqID0gMTsgaiA8IG5DZWxsRmFjZXM7IGorKykKKyAg
ICAgIHsKKyAgICAgIC8vcmVtb3ZlIGR1cGxpY2F0ZSBwb2ludHMgZnJvbSBmYWNlcworICAgICAg
Y29uc3QgdnRrc3RkOjp2ZWN0b3I8aW50PiYgZmFjZUpQb2ludHMKKyAgICAgICAgPSBmYWNlUG9p
bnRzW2NlbGxGYWNlc1tqXS5mYWNlSW5kZXhdOworICAgICAgY29uc3Qgc2l6ZV90IG5GYWNlSlBv
aW50cyA9IGZhY2VKUG9pbnRzLnNpemUoKTsKKyAgICAgIGZvcihzaXplX3QgayA9IDA7IGsgPCBu
RmFjZUpQb2ludHM7IGsrKykKICAgICAgICAgewotICAgICAgICAvL3JlbW92ZSBkdXBsaWNhdGUg
cG9pbnRzIGZyb20gZmFjZXMKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludCl0aGlzLT5GYWNl
UG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1bal0u
ZmFjZUluZGV4XS5zaXplKCk7IGsrKykKKyAgICAgICAgY29uc3QgaW50IGZhY2VKUG9pbnRLID0g
ZmFjZUpQb2ludHNba107CisgICAgICAgIGJvb2wgZm91bmREdXAgPSBmYWxzZTsKKyAgICAgICAg
Zm9yKGludCBsID0gMDsgbCA8IGNlbGxQb2ludHMtPkdldE51bWJlck9mSWRzKCk7IGwrKykKICAg
ICAgICAgICB7Ci0gICAgICAgICAgZm9yKGwgPSAwOyBsIDwgKGludCljZWxsUG9pbnRzLnNpemUo
KTsgbCsrKTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKGNlbGxQb2ludHNbbF0gPT0g
dGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbCi0gICAgICAgICAgICAgIHRoaXMtPkZhY2VzT2ZDZWxs
LT52YWx1ZVtpXVtqXS5mYWNlSW5kZXhdW2tdKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGZvdW5kRHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgIGlmKCFmb3VuZER1cCkKKyAgICAgICAgICBpZihjZWxsUG9pbnRzLT5HZXRJZChsKSA9
PSBmYWNlSlBvaW50SykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNlbGxQb2ludHMucHVz
aF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlWwotICAgICAgICAgICAgICB0aGlzLT5GYWNl
c09mQ2VsbC0+dmFsdWVbaV1bal0uZmFjZUluZGV4XVtrXSk7Ci0gICAgICAgICAgICBmb3VuZER1
cCA9IGZhbHNlOworICAgICAgICAgICAgZm91bmREdXAgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7IC8vIGxvb2sgbm8gbW9yZQogICAgICAgICAgICAgfQogICAgICAgICAgIH0KKyAgICAgICAg
aWYoIWZvdW5kRHVwKQorICAgICAgICAgIHsKKyAgICAgICAgICBjZWxsUG9pbnRzLT5JbnNlcnRO
ZXh0SWQoZmFjZUpQb2ludEspOworICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAvL2Ny
ZWF0ZSB0aGUgcG9seSBjZWxsIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgbWVzaAotICAgICAgdnRr
Q29udmV4UG9pbnRTZXQgKiBwb2x5ID0gdnRrQ29udmV4UG9pbnRTZXQ6Ok5ldygpOwotICAgICAg
cG9seS0+R2V0UG9pbnRJZHMoKS0+U2V0TnVtYmVyT2ZJZHMoY2VsbFBvaW50cy5zaXplKCkpOwot
ICAgICAgZm9yKHBDb3VudCA9IDA7IHBDb3VudCA8IChpbnQpY2VsbFBvaW50cy5zaXplKCk7IHBD
b3VudCsrKQotICAgICAgICB7Ci0gICAgICAgIHBvbHktPkdldFBvaW50SWRzKCktPlNldElkKHBD
b3VudCwgY2VsbFBvaW50c1twQ291bnRdKTsKLSAgICAgICAgfQotICAgICAgaW50ZXJuYWxNZXNo
LT5JbnNlcnROZXh0Q2VsbChwb2x5LT5HZXRDZWxsVHlwZSgpLAotICAgICAgICBwb2x5LT5HZXRQ
b2ludElkcygpKTsKLSAgICAgIGNlbGxQb2ludHMuY2xlYXIoKTsKLSAgICAgIGZpcnN0RmFjZS5j
bGVhcigpOwotICAgICAgcG9seS0+RGVsZXRlKCk7CiAgICAgICB9Ci0gICAgfQogCi0gIC8vc2V0
IHRoZSBpbnRlcm5hbCBtZXNoIHBvaW50cwotICBpbnRlcm5hbE1lc2gtPlNldFBvaW50cyhQb2lu
dHMpOwotICB2dGtEZWJ1Z01hY3JvKDw8IkludGVybmFsIG1lc2ggbWFkZSIpOwotICByZXR1cm4g
aW50ZXJuYWxNZXNoOworICAgIC8vY3JlYXRlIHRoZSBwb2x5IGNlbGwgYW5kIGluc2VydCBpdCBp
bnRvIHRoZSBtZXNoCisgICAgaW50ZXJuYWxNZXNoLT5JbnNlcnROZXh0Q2VsbChWVEtfQ09OVkVY
X1BPSU5UX1NFVCwgY2VsbFBvaW50cyk7CisgICAgfQorICBjZWxsUG9pbnRzLT5EZWxldGUoKTsK
IH0KIAogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFk
ZXI6OkNvbnRyb2xEaWN0RGF0YVBhcnNlcgorLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6
Ok1ha2VJbnRlcm5hbE1lc2gKIC8vCiAvLyAgUHVycG9zZToKLS8vICBwYXJzZSBvdXQgZG91Ymxl
IHZhbHVlcyBmb3IgY29udHJvbERpY3QgZW50cmllcwotLy8gIHV0aWxpdHkgZnVuY3Rpb24KKy8v
ICBkZXJpdmUgY2VsbCB0eXBlcyBhbmQgY3JlYXRlIHRoZSBpbnRlcm5hbCBtZXNoCiAvLwogLy8g
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotZG91YmxlIHZ0a09wZW5GT0FNUmVhZGVyOjpDb250cm9sRGlj
dERhdGFQYXJzZXIoY29uc3QgY2hhciAqIGxpbmVJbikKK3Z0a1Vuc3RydWN0dXJlZEdyaWQgKiB2
dGtPcGVuRk9BTVJlYWRlcjo6TWFrZUludGVybmFsTWVzaCgKKyAgZmFjZVZlY3RvclZlY3RvciAq
ZmFjZXNPZkNlbGwsIGludFZlY3RvclZlY3RvciogZmFjZXNQb2ludHMsCisgIHZ0a1BvaW50cyog
cG9pbnRzKQogewotICBkb3VibGUgdmFsdWU7Ci0gIHZ0a3N0ZDo6c3RyaW5nIGxpbmUobGluZUlu
KTsKLSAgbGluZS5lcmFzZShsaW5lLmJlZ2luKCkrbGluZS5maW5kKCI7IikpOwotICB2dGtzdGQ6
OnN0cmluZyB0b2tlbjsKLSAgdnRrc3lzX2lvczo6c3RyaW5nc3RyZWFtIHRva2VuaXplcihsaW5l
KTsKKyAgdnRrRGVidWdNYWNybyg8PCJNYWtlIGludGVybmFsIG1lc2giKTsKIAotICAvL3BhcnNl
IHRvIHRoZSBmaW5hbCBlbnRyeSAtIGRvdWJsZQotICAvL3doaWxlKHRva2VuaXplcj4+dG9rZW4p
OwotICB3aGlsZSghdG9rZW5pemVyLmVvZigpKQorICAvL0NyZWF0ZSBNZXNoCisgIHZ0a1Vuc3Ry
dWN0dXJlZEdyaWQqIGludGVybmFsTWVzaCA9IHZ0a1Vuc3RydWN0dXJlZEdyaWQ6Ok5ldygpOwor
ICBpbnRlcm5hbE1lc2gtPkFsbG9jYXRlKGZhY2VzT2ZDZWxsLT52YWx1ZS5zaXplKCkpOworCisg
IC8vbG9vcCB0aHJvdWdoIGVhY2ggY2VsbCwgZGVyaXZlIHR5cGUgYW5kIGluc2VydCBpdCBpbnRv
IHRoZSBtZXNoCisgIC8vaGV4YWhlZHJvbiwgcHJpc20sIHB5cmFtaWQsIHRldHJhaGVkcm9uLCB3
ZWRnZSZ0ZXRXZWRnZQorICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgZmFjZXNPZkNlbGwtPnZhbHVl
LnNpemUoKTsgaSsrKSAgLy9lYWNoIGNlbGwKICAgICB7Ci0gICAgdG9rZW5pemVyID4+IHRva2Vu
OworICAgIHRoaXMtPkluc2VydENlbGxUb0dyaWQoaW50ZXJuYWxNZXNoLCBpLCBmYWNlc09mQ2Vs
bCwgZmFjZXNQb2ludHMpOwogICAgIH0KKyAgLy9zZXQgdGhlIGludGVybmFsIG1lc2ggcG9pbnRz
CisgIGludGVybmFsTWVzaC0+U2V0UG9pbnRzKHBvaW50cyk7CisgIHZ0a0RlYnVnTWFjcm8oPDwi
SW50ZXJuYWwgbWVzaCBtYWRlIik7CiAKLSAgdnRrc3lzX2lvczo6c3RyaW5nc3RyZWFtIGNvbnZl
cnNpb24odG9rZW4pOwotICBjb252ZXJzaW9uID4+IHZhbHVlOwotICByZXR1cm4gdmFsdWU7Cisg
IHJldHVybiBpbnRlcm5hbE1lc2g7CiB9CiAKLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vICBN
ZXRob2Q6IHZ0a09wZW5GT0FNUmVhZGVyOjpSZWFkQ29udHJvbERpY3QKLS8vCi0vLyAgUHVwb3Nl
OgotLy8gIHJlYWRzIHRoZSBjb250cm9sRGljdCBGaWxlCi0vLyAgZ2F0aGVyIHRoZSBuZWNlc3Nh
cnkgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgcGF0aCB0byB0aGUgZGF0YQotLy8KLS8vICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLXZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OlJlYWRDb250cm9sRGljdCAo
KQorLy8gTGlzdCB0aW1lIGRpcmVjdG9yaWVzIGFjY29yZGluZyB0byBjb250cm9sRGljdAorYm9v
bCB2dGtPcGVuRk9BTVJlYWRlcjo6TGlzdFRpbWVEaXJlY3Rvcmllc0J5Q29udHJvbERpY3QodnRr
Rm9hbURpY3QqIGRpY3RQdHIpCiB7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiUmVhZCBjb250cm9sRGlj
dCIpOwotICAvL2NyZWF0ZSB2YXJpYWJsZXMKLSAgdnRrc3RkOjpzdHJpbmcgdGVtcDsKLSAgZG91
YmxlIHN0YXJ0VGltZTsKLSAgZG91YmxlIGVuZFRpbWU7Ci0gIGRvdWJsZSBkZWx0YVQ7Ci0gIGRv
dWJsZSB3cml0ZUludGVydmFsOwotICBkb3VibGUgdGltZVN0ZXBJbmNyZW1lbnQ7Ci0gIHZ0a3N0
ZDo6c3RyaW5nIHdyaXRlQ29udHJvbDsKLSAgdnRrc3RkOjpzdHJpbmcgdGltZUZvcm1hdDsKLSAg
c3RkU3RyaW5nKiB0ZW1wU3RyaW5nU3RydWN0OwotCi0gIGlmc3RyZWFtICogaW5wdXQgPSBuZXcg
aWZzdHJlYW0odGhpcy0+UGF0aC0+dmFsdWUuY19zdHIoKSwgaW9zOjppbiBWVEtfSU9TX05PQ1JF
QVRFKTsKLQotICAvL2NyZWF0ZSB0aGUgcGF0aCB0byB0aGUgZGF0YSBkaXJlY3RvcnkKLSAgdGhp
cy0+UGF0aFByZWZpeC0+dmFsdWUgPSB0aGlzLT5QYXRoLT52YWx1ZTsKLSAgdGhpcy0+UGF0aFBy
ZWZpeC0+dmFsdWUuZXJhc2UodGhpcy0+UGF0aFByZWZpeC0+dmFsdWUuYmVnaW4oKSsKLSAgICB0
aGlzLT5QYXRoUHJlZml4LT52YWx1ZS5maW5kKCJzeXN0ZW0iKSx0aGlzLT5QYXRoUHJlZml4LT52
YWx1ZS5lbmQoKSk7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiUGF0aDogIjw8dGhpcy0+UGF0aFByZWZp
eC0+dmFsdWUuY19zdHIoKSk7Ci0KLSAgLy9maW5kIFN0YXJ0IFRpbWUKLSAgdGVtcFN0cmluZ1N0
cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+
dmFsdWU7Ci0gIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICB2dGtGb2FtRGljdCYgZGljdCA9
ICpkaWN0UHRyOwogCi0gIC8vd2hpbGUoISh0ZW1wLmNvbXBhcmUoMCw4LCJzdGFydFRpbWUiLDAs
OCkgPT0gMCkpCi0gIHdoaWxlIChzdHJjbXAodGVtcC5zdWJzdHIoMCw5KS5jX3N0cigpLCAic3Rh
cnRUaW1lIikpCisgIHZ0a0ZvYW1FbnRyeSYgc3RhcnRUaW1lRW50cnkgPSBkaWN0Lmxvb2t1cCgi
c3RhcnRUaW1lIik7CisgIGlmKCFzdGFydFRpbWVFbnRyeS5mb3VuZCgpKQogICAgIHsKLSAgICB0
ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBT
dHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIHZ0
a0Vycm9yTWFjcm8oPDwgInN0YXJ0VGltZSBlbnRyeSBub3QgZm91bmQgaW4gY29udHJvbERpY3Qi
KTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICBzdGFydFRpbWUgPSB0aGlzLT5Db250cm9s
RGljdERhdGFQYXJzZXIodGVtcC5jX3N0cigpKTsKLSAgdnRrRGVidWdNYWNybyg8PCJTdGFydCB0
aW1lOiAiPDxzdGFydFRpbWUpOworICBkb3VibGUgc3RhcnRUaW1lOworICBzdGFydFRpbWVFbnRy
eSA+PiBzdGFydFRpbWU7CiAKLSAgLy9maW5kIEVuZCBUaW1lCi0gIC8vd2hpbGUoISh0ZW1wLmNv
bXBhcmUoMCw2LCJlbmRUaW1lIiwwLDYpID09IDApKQotICB3aGlsZSAoc3RyY21wKHRlbXAuc3Vi
c3RyKDAsNykuY19zdHIoKSwgImVuZFRpbWUiKSkKKyAgdnRrRm9hbUVudHJ5JiBlbmRUaW1lRW50
cnkgPSBkaWN0Lmxvb2t1cCgiZW5kVGltZSIpOworICBpZighZW5kVGltZUVudHJ5LmZvdW5kKCkp
CiAgICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAg
ICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdT
dHJ1Y3Q7CisgICAgdnRrRXJyb3JNYWNybyg8PCAiZW5kVGltZSBlbnRyeSBub3QgZm91bmQgaW4g
Y29udHJvbERpY3QiKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICBlbmRUaW1lID0gdGhp
cy0+Q29udHJvbERpY3REYXRhUGFyc2VyKHRlbXAuY19zdHIoKSk7Ci0gIHZ0a0RlYnVnTWFjcm8o
PDwiRW5kIHRpbWU6ICI8PGVuZFRpbWUpOworICBkb3VibGUgZW5kVGltZTsKKyAgZW5kVGltZUVu
dHJ5ID4+IGVuZFRpbWU7CiAKLSAgLy9maW5kIERlbHRhIFQKLSAgLy93aGlsZSghKHRlbXAuY29t
cGFyZSgwLDUsImRlbHRhVCIsMCw1KSA9PSAwKSkKLSAgd2hpbGUgKHN0cmNtcCh0ZW1wLnN1YnN0
cigwLDYpLmNfc3RyKCksICJkZWx0YVQiKSkKKyAgdnRrRm9hbUVudHJ5JiBkZWx0YVRFbnRyeSA9
IGRpY3QubG9va3VwKCJkZWx0YVQiKTsKKyAgaWYoIWRlbHRhVEVudHJ5LmZvdW5kKCkpCiAgICAg
ewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1w
ID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7
CisgICAgdnRrRXJyb3JNYWNybyg8PCAiZGVsdGFUIGVudHJ5IG5vdCBmb3VuZCBpbiBjb250cm9s
RGljdCIpOworICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gIGRlbHRhVCA9IHRoaXMtPkNvbnRy
b2xEaWN0RGF0YVBhcnNlcih0ZW1wLmNfc3RyKCkpOwotICB2dGtEZWJ1Z01hY3JvKDw8ImRlbHRh
VDogIjw8ZGVsdGFUKTsKKyAgZG91YmxlIGRlbHRhVDsKKyAgZGVsdGFURW50cnkgPj4gZGVsdGFU
OwogCi0gIC8vZmluZCB3cml0ZSBjb250cm9sCi0gIC8vd2hpbGUoISh0ZW1wLmNvbXBhcmUoMCwx
MSwid3JpdGVDb250cm9sIiwwLDExKSA9PSAwKSkKLSAgd2hpbGUgKHN0cmNtcCh0ZW1wLnN1YnN0
cigwLDEyKS5jX3N0cigpLCAid3JpdGVDb250cm9sIikpCisgIHZ0a0ZvYW1FbnRyeSYgd3JpdGVJ
bnRlcnZhbEVudHJ5ID0gZGljdC5sb29rdXAoIndyaXRlSW50ZXJ2YWwiKTsKKyAgaWYoIXdyaXRl
SW50ZXJ2YWxFbnRyeS5mb3VuZCgpKQogICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhp
cy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwot
ICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIHZ0a0Vycm9yTWFjcm8oPDwgIndyaXRl
SW50ZXJ2YWwgZW50cnkgbm90IGZvdW5kIGluIGNvbnRyb2xEaWN0Iik7CisgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KKyAgZG91YmxlIHdyaXRlSW50ZXJ2YWw7CisgIHdyaXRlSW50ZXJ2YWxFbnRy
eSA+PiB3cml0ZUludGVydmFsOwogCi0gIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3RlbXAuZmlu
ZCgiOyIpKTsKLSAgdnRrc3RkOjpzdHJpbmcgdG9rZW47Ci0gIHZ0a3N5c19pb3M6OnN0cmluZ3N0
cmVhbSB0b2tlbml6ZXIodGVtcCk7Ci0KLSAgLy93aGlsZSh0b2tlbml6ZXIgPj4gdG9rZW4pOwot
ICB3aGlsZSghdG9rZW5pemVyLmVvZigpKQorICB2dGtGb2FtRW50cnkmIHRpbWVGb3JtYXRFbnRy
eSA9IGRpY3QubG9va3VwKCJ0aW1lRm9ybWF0Iik7CisgIGlmKCF0aW1lRm9ybWF0RW50cnkuZm91
bmQoKSkKICAgICB7Ci0gICAgdG9rZW5pemVyID4+IHRva2VuOworICAgIHZ0a0Vycm9yTWFjcm8o
PDwgInRpbWVGb3JtYXQgZW50cnkgbm90IGZvdW5kIGluIGNvbnRyb2xEaWN0Iik7CisgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KLSAgd3JpdGVDb250cm9sID0gdG9rZW47Ci0gIHZ0a0RlYnVnTWFj
cm8oPDwiV3JpdGUgY29udHJvbDogIjw8d3JpdGVDb250cm9sLmNfc3RyKCkpOworICB2dGtTdGRT
dHJpbmcgdGltZUZvcm1hdDsKKyAgdGltZUZvcm1hdEVudHJ5ID4+IHRpbWVGb3JtYXQ7CiAKLSAg
Ly9maW5kIHdyaXRlIGludGVydmFsCi0gIC8vd2hpbGUoISh0ZW1wLmNvbXBhcmUoMCwxMiwid3Jp
dGVJbnRlcnZhbCIsMCwxMikgPT0gMCkpCi0gIHdoaWxlIChzdHJjbXAodGVtcC5zdWJzdHIoMCwx
MykuY19zdHIoKSwgIndyaXRlSW50ZXJ2YWwiKSkKKyAgdnRrRm9hbUVudHJ5JiB0aW1lUHJlY2lz
aW9uRW50cnkgPSBkaWN0Lmxvb2t1cCgidGltZVByZWNpc2lvbiIpOworICBpbnQgdGltZVByZWNp
c2lvbjsKKyAgaWYodGltZVByZWNpc2lvbkVudHJ5LmZvdW5kKCkpCisgICAgeworICAgIHRpbWVQ
cmVjaXNpb25FbnRyeSA+PiB0aW1lUHJlY2lzaW9uOworICAgIH0KKyAgZWxzZQogICAgIHsKLSAg
ICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRl
bXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAg
IHRpbWVQcmVjaXNpb24gPSA2OyAvLyB0aGUgZGVmYXVsdCB2YWx1ZQogICAgIH0KLSAgd3JpdGVJ
bnRlcnZhbCA9IHRoaXMtPkNvbnRyb2xEaWN0RGF0YVBhcnNlcih0ZW1wLmNfc3RyKCkpOwotICB2
dGtEZWJ1Z01hY3JvKDw8IldyaXRlIGludGVydmFsOiAiPDx3cml0ZUludGVydmFsKTsKIAogICAv
L2NhbGN1bGF0ZSB0aGUgdGltZSBzdGVwIGluY3JlbWVudCBiYXNlZCBvbiB0eXBlIG9mIHJ1bgot
ICAvL2lmKHdyaXRlQ29udHJvbC5jb21wYXJlKDAsNywidGltZVN0ZXAiLDAsNykgPT0gMCkKLSAg
aWYoIXN0cmNtcCh3cml0ZUNvbnRyb2wuc3Vic3RyKDAsOCkuY19zdHIoKSwgInRpbWVTdGVwIikp
CisgIHZ0a1N0ZFN0cmluZyB3cml0ZUNvbnRyb2w7CisgIGRpY3QubG9va3VwKCJ3cml0ZUNvbnRy
b2wiKSA+PiB3cml0ZUNvbnRyb2w7CisgIGRvdWJsZSB0aW1lU3RlcEluY3JlbWVudDsKKyAgaWYo
d3JpdGVDb250cm9sID09ICJ0aW1lU3RlcCIpCiAgICAgewogICAgIHZ0a0RlYnVnTWFjcm8oPDwi
VGltZSBzdGVwIHR5cGUgZGF0YSIpOwogICAgIHRpbWVTdGVwSW5jcmVtZW50ID0gd3JpdGVJbnRl
cnZhbCAqIGRlbHRhVDsKICAgICB9Ci0gIGVsc2UKKyAgZWxzZSBpZih3cml0ZUNvbnRyb2wgPT0g
InJ1blRpbWUiIHx8IHdyaXRlQ29udHJvbCA9PSAiYWRqdXN0YWJsZVJ1blRpbWUiKQogICAgIHsK
ICAgICB2dGtEZWJ1Z01hY3JvKDw8IlJ1biB0aW1lIHR5cGUgZGF0YSIpOwogICAgIHRpbWVTdGVw
SW5jcmVtZW50ID0gd3JpdGVJbnRlcnZhbDsKICAgICB9Ci0KLSAgLy9maW5kIHRpbWUgZm9ybWF0
Ci0gIHdoaWxlKHRlbXAuZmluZCgidGltZUZvcm1hdCIpID09IHZ0a3N0ZDo6c3RyaW5nOjpucG9z
KQorICBlbHNlCiAgICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlu
cHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRl
bXBTdHJpbmdTdHJ1Y3Q7CisgICAgdnRrRXJyb3JNYWNybyg8PCJUaW1lIHN0ZXAgY2FuJ3QgYmUg
ZGV0ZXJtaW5lZCBiZWNhdXNlIHdyaXRlQ29udHJvbCBpcyIKKyAgICAgICIgc2V0IHRvICIgPDwg
d3JpdGVDb250cm9sLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gIHRpbWVG
b3JtYXQgPSB0ZW1wOwogCiAgIC8vY2FsY3VsYXRlIGhvdyBtYW55IHRpbWVzdGVwcyB0aGVyZSBz
aG91bGQgYmUKLSAgZmxvYXQgdGVtcFJlc3VsdCA9ICgoZW5kVGltZS1zdGFydFRpbWUpL3RpbWVT
dGVwSW5jcmVtZW50KTsKLSAgaW50IHRlbXBOdW1UaW1lU3RlcHMgPSAoaW50KSh0ZW1wUmVzdWx0
KzAuNSkrMTsgIC8vKzAuMSB0byByb3VuZCB1cAorICBkb3VibGUgdGVtcFJlc3VsdCA9IChlbmRU
aW1lIC0gc3RhcnRUaW1lKSAvIHRpbWVTdGVwSW5jcmVtZW50OworICBpbnQgdGVtcE51bVRpbWVT
dGVwcyA9IChpbnQpKHRlbXBSZXN1bHQgKyAwLjUpICsgMTsgIC8vKzAuMSB0byByb3VuZCB1cAor
CiAgIC8vbWFrZSBzdXJlIHRpbWUgc3RlcCBkaXIgZXhpc3RzCiAgIHZ0a3N0ZDo6dmVjdG9yPCBk
b3VibGUgPiB0ZW1wU3RlcHM7CiAgIHZ0a0RpcmVjdG9yeSAqIHRlc3QgPSB2dGtEaXJlY3Rvcnk6
Ok5ldygpOwotICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gcGFyc2VyOwotICBkb3VibGUgdGVt
cFN0ZXA7CisgIHRoaXMtPlRpbWVOYW1lcy0+SW5pdGlhbGl6ZSgpOwogICBmb3IoaW50IGkgPSAw
OyBpIDwgdGVtcE51bVRpbWVTdGVwczsgaSsrKQogICAgIHsKLSAgICB0ZW1wU3RlcCA9IGkqdGlt
ZVN0ZXBJbmNyZW1lbnQgKyBzdGFydFRpbWU7Ci0gICAgcGFyc2VyLmNsZWFyKCk7Ci0gICAgaWYo
dGltZUZvcm1hdC5maW5kKCJnZW5lcmFsIikgIT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCisgICAg
dnRrc3RkOjpvc3RyaW5nc3RyZWFtIHBhcnNlcjsKKyAgICBjb25zdCBkb3VibGUgdGVtcFN0ZXAg
PSBpICogdGltZVN0ZXBJbmNyZW1lbnQgKyBzdGFydFRpbWU7CisKKyAgICAvLyBkZXRlcm1pbmUg
dGltZSBuYW1lIGJhc2VkIG9uIEZvYW06OlRpbWU6OnRpbWVOYW1lKCkKKyAgICAvLyBpbiBzcmMv
T3BlbkZPQU0vZGIvVGltZS9UaW1lLkMKKyNpZmRlZiBfTVNDX1ZFUgorICAgIGJvb2wgY29ycmVj
dEV4cG9uZW50ID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmKHRpbWVGb3JtYXQgPT0gImdlbmVyYWwi
KQorICAgICAgeworICAgICAgLy8gImRvIG5vdCB1c2Ugc3RkOjogb3IgdnRrc3RkOjogd2hlbiB1
c2luZyBhbnl0aGluZyBkZWNsYXJlZCBpbgorICAgICAgLy8gaW9zdHJlYW0sIiBhY2NvcmRpbmcg
dG8gVlRLIGNvZGluZyBzdGFuZGFyZHMsIGJ1dCBmb2xsb3dpbmcKKyAgICAgIC8vIHRoZSBpbnN0
cnVjdGlvbiBjYXVzZXMgZXJyb3JzLi4uCisgICAgICBwYXJzZXIuc2V0Zih2dGtzdGQ6Omlvc19i
YXNlOjpmbXRmbGFncygwKSwgdnRrc3RkOjppb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CisgICAgICB9
CisgICAgZWxzZSBpZih0aW1lRm9ybWF0ID09ICJmaXhlZCIpCisgICAgICB7CisgICAgICBwYXJz
ZXIuc2V0Zih2dGtzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyh2dGtzdGQ6Omlvc19iYXNlOjpmaXhl
ZCksCisgICAgICAgIHZ0a3N0ZDo6aW9zX2Jhc2U6OmZsb2F0ZmllbGQpOworI2lmZGVmIF9NU0Nf
VkVSCisgICAgICBjb3JyZWN0RXhwb25lbnQgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgfQorICAg
IGVsc2UgaWYodGltZUZvcm1hdCA9PSAic2NpZW50aWZpYyIpCisgICAgICB7CisgICAgICBwYXJz
ZXIuc2V0Zih2dGtzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyh2dGtzdGQ6Omlvc19iYXNlOjpzY2ll
bnRpZmljKSwKKyAgICAgICAgdnRrc3RkOjppb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CisgICAgICB9
CisgICAgZWxzZQogICAgICAgewotICAgICAgcGFyc2VyIDw8IHRlbXBTdGVwOworICAgICAgdnRr
V2FybmluZ01hY3JvKCJXYXJuaW5nOiB1bnN1cHBvcnRlZCB0aW1lIGZvcm1hdC4gQXNzdW1pbmcg
Z2VuZXJhbC4iKTsKKyAgICAgIHBhcnNlci5zZXRmKHZ0a3N0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdz
KDApLCB2dGtzdGQ6Omlvc19iYXNlOjpmbG9hdGZpZWxkKTsKKyAgICAgIH0KKyAgICBwYXJzZXIu
cHJlY2lzaW9uKHRpbWVQcmVjaXNpb24pOworICAgIHBhcnNlciA8PCB0ZW1wU3RlcDsgLy8gc3Ry
aW5nc3RyZWFtIGRvZXNuJ3QgcmVxdWlyZSBlbmRzCisjaWZkZWYgX01TQ19WRVIKKyAgICAvLyB3
b3JrYXJvdW5kIGZvciBmb3JtYXQgZGlmZmVyZW5jZSBpbiBNU1ZDKys6CisgICAgLy8gcmVtb3Zl
IGFuIGV4dHJhIDAgZnJvbSBleHBvbmVudAorICAgIGlmKGNvcnJlY3RFeHBvbmVudCkKKyAgICAg
IHsKKyAgICAgIHZ0a1N0ZFN0cmluZyB0ZW1wU3RyKHBhcnNlci5zdHIoKSk7CisgICAgICBzaXpl
X3QgcG9zID0gdGVtcFN0ci5maW5kKCdlJyk7CisgICAgICBpZihwb3MgIT0gdnRrU3RkU3RyaW5n
OjpucG9zICYmIHRlbXBTdHIubGVuZ3RoKCkgPj0gcG9zICsgMworICAgICAgICAmJiB0ZW1wU3Ry
W3BvcyArIDJdID09ICcwJykKKyAgICAgICAgeworICAgICAgICB0ZW1wU3RyLmVyYXNlKHBvcyAr
IDIsIDEpOworICAgICAgICBwYXJzZXIuc3RyKHRlbXBTdHIpOworICAgICAgICB9CiAgICAgICB9
Ci0gICAgZWxzZQorI2VuZGlmCisgICAgaWYodGVzdC0+T3BlbigoKnRoaXMtPlBhdGhQcmVmaXgg
KyBwYXJzZXIuc3RyKCkpLmNfc3RyKCkpKQogICAgICAgewotICAgICAgcGFyc2VyIDw8IGlvczo6
c2NpZW50aWZpYyA8PHRlbXBTdGVwOworICAgICAgdGVtcFN0ZXBzLnB1c2hfYmFjayh0ZW1wU3Rl
cCk7CisgICAgICB0aGlzLT5UaW1lTmFtZXMtPkluc2VydE5leHRWYWx1ZShwYXJzZXIuc3RyKCkp
OwogICAgICAgfQotICAgIGlmKHRlc3QtPk9wZW4oKHRoaXMtPlBhdGhQcmVmaXgtPnZhbHVlK3Bh
cnNlci5zdHIoKS5jX3N0cigpKS5jX3N0cigpKSkKKyAgICAvLyBuZWNlc3NhcnkgZm9yIHJlYWRp
bmcgdGhlIGNhc2UvMCBkaXJlY3Rvcnkgd2hhdGV2ZXIgdGhlIHRpbWVGb3JtYXQgaXMKKyAgICAv
LyBiYXNlZCBvbiBGb2FtOjpUaW1lOjpvcGVyYXRvcisrKCkgaW4gc3JjL09wZW5GT0FNL2RiL1Rp
bWUvVGltZS5DCisgICAgZWxzZSBpZigoZmFicyh0ZW1wU3RlcCkgPCAxLjBlLTE0TCkgLy8gMTAq
U01BTEwKKyAgICAgICYmIHRlc3QtPk9wZW4oKCp0aGlzLT5QYXRoUHJlZml4ICsgdnRrU3RkU3Ry
aW5nKCIwIikpLmNfc3RyKCkpKQogICAgICAgewogICAgICAgdGVtcFN0ZXBzLnB1c2hfYmFjayh0
ZW1wU3RlcCk7CisgICAgICB0aGlzLT5UaW1lTmFtZXMtPkluc2VydE5leHRWYWx1ZSh2dGtTdGRT
dHJpbmcoIjAiKSk7CiAgICAgICB9CiAgICAgfQogICB0ZXN0LT5EZWxldGUoKTsKKyAgdGhpcy0+
VGltZU5hbWVzLT5TcXVlZXplKCk7CiAKICAgLy9BZGQgdGhlIHRpbWUgc3RlcHMgdGhhdCBhY3R1
YWxseSBleGlzdCB0byBzdGVwcwogICAvL2FsbG93cyB0aGUgcnVuIHRvIGJlIHN0b3BwZWQgc2hv
cnQgb2YgY29udHJvbERpY3Qgc3BlYwogICAvL2FsbG93cyBmb3IgcmVtb3ZhbCBvZiB0aW1lc3Rl
cHMKICAgdGhpcy0+TnVtYmVyT2ZUaW1lU3RlcHMgPSB0ZW1wU3RlcHMuc2l6ZSgpOwotICB0aGlz
LT5TdGVwcyA9IG5ldyBkb3VibGVbdGhpcy0+TnVtYmVyT2ZUaW1lU3RlcHNdOwotICBmb3IoaW50
IGkgPSAwOyBpIDwgdGhpcy0+TnVtYmVyT2ZUaW1lU3RlcHM7IGkrKykKKyAgaWYodGhpcy0+TnVt
YmVyT2ZUaW1lU3RlcHMgPiAwKQorICAgIHsKKyAgICB0aGlzLT5TdGVwcyA9IG5ldyBkb3VibGVb
dGhpcy0+TnVtYmVyT2ZUaW1lU3RlcHNdOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0aGlzLT5O
dW1iZXJPZlRpbWVTdGVwczsgaSsrKQorICAgICAgeworICAgICAgdGhpcy0+U3RlcHNbaV0gPSB0
ZW1wU3RlcHNbaV07CisgICAgICB9CisgICAgfQorICBlbHNlCiAgICAgewotICAgIHRoaXMtPlN0
ZXBzW2ldID10ZW1wU3RlcHNbaV07CisgICAgLy8gZHVtbXkgZm9yIHNhZmVseSBkZWxldGluZyBs
YXRlcgorICAgIHRoaXMtPlN0ZXBzID0gbmV3IGRvdWJsZVsxXTsKKyAgICB0aGlzLT5TdGVwc1sw
XSA9IDAuMDsKICAgICB9CisgIHJldHVybiB0cnVlOworfQogCi0gIGlucHV0LT5jbG9zZSgpOwot
ICBkZWxldGUgaW5wdXQ7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiY29udHJvbERpY3QgcmVhZCIpOwot
ICByZXR1cm47CisvLyBsaXN0IHRpbWUgZGlyZWN0b3JpZXMgYnkgc2VhcmNoaW5nIGFsbCB2YWxp
ZCB0aW1lIGluc3RhbmNlcyBpbiBhCisvLyBjYXNlIGRpcmVjdG9yeQorYm9vbCB2dGtPcGVuRk9B
TVJlYWRlcjo6TGlzdFRpbWVEaXJlY3Rvcmllc0J5SW5zdGFuY2VzKCkKK3sKKyAgLy8gb3BlbiB0
aGUgY2FzZSBkaXJlY3RvcnkKKyAgdnRrRGlyZWN0b3J5KiB0ZXN0ID0gdnRrRGlyZWN0b3J5OjpO
ZXcoKTsKKyAgaWYoIXRlc3QtPk9wZW4odGhpcy0+UGF0aFByZWZpeC0+Y19zdHIoKSkpCisgICAg
eworICAgIHRlc3QtPkRlbGV0ZSgpOworICAgIHZ0a0Vycm9yTWFjcm8oPDwiQ2FuJ3Qgb3BlbiBk
aXJlY3RvcnkgIjw8dGhpcy0+UGF0aFByZWZpeC0+Y19zdHIoKSk7CisgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAvLyBzZWFyY2ggYWxsIHRoZSBkaXJlY3RvcmllcyBpbiB0aGUgY2FzZSBk
aXJlY3RvcnkgYW5kIGRldGVjdAorICAvLyBkaXJlY3RvcmllcyB3aXRoIG5hbWVzIGNvbnZlcnRp
YmxlIHRvIG51bWJlcnMKKyAgdGhpcy0+VGltZU5hbWVzLT5Jbml0aWFsaXplKCk7CisgIHZ0a0Rv
dWJsZUFycmF5KiB0aW1lVmFsdWVzID0gdnRrRG91YmxlQXJyYXk6Ok5ldygpOworICBjb25zdCBp
bnQgbkZpbGVzID0gdGVzdC0+R2V0TnVtYmVyT2ZGaWxlcygpOworICBmb3IoaW50IGkgPSAwOyBp
IDwgbkZpbGVzOyBpKyspCisgICAgeworICAgIGNvbnN0IHZ0a1N0ZFN0cmluZyBkaXIgPSB0ZXN0
LT5HZXRGaWxlKGkpOworICAgIGlmKHRlc3QtPkZpbGVJc0RpcmVjdG9yeShkaXIuY19zdHIoKSkp
CisgICAgICB7CisgICAgICAvLyBjaGVjayBpZiB0aGUgbmFtZSBpcyBjb252ZXJ0aWJsZSB0byBh
IG51bWJlcgorICAgICAgYm9vbCBpc1RpbWVEaXIgPSB0cnVlOworICAgICAgZm9yKHNpemVfdCBq
ID0gMDsgaiA8IGRpci5sZW5ndGgoKTsgaisrKQorICAgICAgICB7CisgICAgICAgIGNvbnN0IGNo
YXIgYyA9IGRpcltqXTsKKyAgICAgICAgaWYoIWlzZGlnaXQoYykgJiYgYyAhPSAnKycgJiYgYyAh
PSAnLScgJiYgYyAhPSAnLicgJiYgYyAhPSAnZScKKyAgICAgICAgICAmJiBjICE9ICdFJykKKyAg
ICAgICAgICB7CisgICAgICAgICAgaXNUaW1lRGlyID0gZmFsc2U7CisgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZighaXNUaW1lRGlyKQorICAgICAgICB7
CisgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIC8vIGNvbnZlcnQgdG8gYSBu
dW1iZXIKKyAgICAgIGNoYXIgKmVuZHB0cjsKKyAgICAgIGRvdWJsZSB0aW1lVmFsdWUgPSBzdHJ0
b2QoZGlyLmNfc3RyKCksICZlbmRwdHIpOworICAgICAgLy8gY2hlY2sgaWYgdGhlIHZhbHVlIHJl
YWxseSB3YXMgY29udmVydGVkIHRvIGEgbnVtYmVyCisgICAgICBpZih0aW1lVmFsdWUgPT0gMC4w
ICYmIGVuZHB0ciA9PSBkaXIuY19zdHIoKSkKKyAgICAgICAgeworICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAvLyBhZGQgdG8gdGhlIGluc3RhbmNlIGxpc3QKKyAgICAgIHRp
bWVWYWx1ZXMtPkluc2VydE5leHRWYWx1ZSh0aW1lVmFsdWUpOworICAgICAgdGhpcy0+VGltZU5h
bWVzLT5JbnNlcnROZXh0VmFsdWUoZGlyKTsKKyAgICAgIH0KKyAgICB9CisgIHRlc3QtPkRlbGV0
ZSgpOworICB0aGlzLT5UaW1lTmFtZXMtPlNxdWVlemUoKTsKKworICAvLyBzb3J0IHRoZSBkZXRl
Y3RlZCB0aW1lIGRpcmVjdG9yaWVzIGFuZCBzZXQgYXMgdGltZXN0ZXBzCisgIHRoaXMtPk51bWJl
ck9mVGltZVN0ZXBzID0gdGhpcy0+VGltZU5hbWVzLT5HZXRTaXplKCk7CisgIGlmKHRoaXMtPk51
bWJlck9mVGltZVN0ZXBzID4gMCkKKyAgICB7CisgICAgaWYodGhpcy0+TnVtYmVyT2ZUaW1lU3Rl
cHMgPiAxKQorICAgICAgeworICAgICAgdnRrU29ydERhdGFBcnJheTo6U29ydCh0aW1lVmFsdWVz
LCB0aGlzLT5UaW1lTmFtZXMpOworICAgICAgfQorICAgIHRoaXMtPlN0ZXBzID0gbmV3IGRvdWJs
ZVt0aGlzLT5OdW1iZXJPZlRpbWVTdGVwc107CisgICAgZm9yKGludCBpID0gMDsgaSA8IHRoaXMt
Pk51bWJlck9mVGltZVN0ZXBzOyBpKyspCisgICAgICB7CisgICAgICB0aGlzLT5TdGVwc1tpXSA9
IHRpbWVWYWx1ZXMtPkdldFZhbHVlKGkpOworICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAvLyBkdW1teSBmb3Igc2FmZWx5IGRlbGV0aW5nIGxhdGVyCisgICAgdGhpcy0+U3RlcHMg
PSBuZXcgZG91YmxlWzFdOworICAgIHRoaXMtPlN0ZXBzWzBdID0gMC4wOworICAgIH0KKyAgdGlt
ZVZhbHVlcy0+RGVsZXRlKCk7CisKKyAgcmV0dXJuIHRydWU7CiB9CiAKIC8vICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKLS8vICBNZXRob2Q6IHZ0a09wZW5GT0FNUmVhZGVyOjpHZXRQb2ludHMKKy8vICBN
ZXRob2Q6IHZ0a09wZW5GT0FNUmVhZGVyOjpSZWFkQ29udHJvbERpY3QKIC8vCi0vLyAgUHVycG9z
ZToKLS8vICByZWFkIHRoZSBwb2ludHMgZmlsZSBpbnRvIGEgdnRrUG9pbnRzCisvLyAgUHVwb3Nl
OgorLy8gIHJlYWRzIHRoZSBjb250cm9sRGljdCBGaWxlCisvLyAgZ2F0aGVyIHRoZSBuZWNlc3Nh
cnkgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgcGF0aCB0byB0aGUgZGF0YQogLy8KIC8vICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLXZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OkdldFBvaW50cyAoaW50IHRp
bWVTdGF0ZSkKK2Jvb2wgdnRrT3BlbkZPQU1SZWFkZXI6OlJlYWRDb250cm9sRGljdChjb25zdCBj
aGFyKiBwYXRoSW4pCiB7Ci0gIC8vcGF0aCB0byBwb2ludHMgZmlsZQotICB2dGtzdGQ6OnN0cmlu
ZyBwb2ludFBhdGggPSB0aGlzLT5QYXRoUHJlZml4LT52YWx1ZSArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMtPlBvbHlNZXNoUG9pbnRzRGlyLT52YWx1ZVt0aW1lU3RhdGVdICsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9wb2x5TWVzaC9wb2ludHMiOwotICB2dGtE
ZWJ1Z01hY3JvKDw8IlJlYWQgcG9pbnRzIGZpbGU6ICI8PHBvaW50UGF0aC5jX3N0cigpKTsKKyAg
dnRrU3RkU3RyaW5nIHBhdGgocGF0aEluKTsKKyAgdnRrRm9hbUlPb2JqZWN0IGlvOwogCi0gIHZ0
a3N0ZDo6c3RyaW5nIHRlbXA7Ci0gIGJvb2wgYmluYXJ5V3JpdGVGb3JtYXQ7Ci0gIHN0ZFN0cmlu
ZyogdGVtcFN0cmluZ1N0cnVjdDsKLSAgaWZzdHJlYW0gKiBpbnB1dCA9IG5ldyBpZnN0cmVhbShw
b2ludFBhdGguY19zdHIoKSwgaW9zOjppbiBWVEtfSU9TX05PQ1JFQVRFKTsKLSAgLy9tYWtlIHN1
cmUgZmlsZSBleGlzdHMKLSAgaWYoaW5wdXQtPmZhaWwoKSkKKyAgaWYoIWlvLm9wZW4ocGF0aCkp
CiAgICAgewotICAgIGlucHV0LT5jbG9zZSgpOwotICAgIGRlbGV0ZSBpbnB1dDsKLSAgICByZXR1
cm47CisgICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciBvcGVuaW5nICIgPDwgaW8uZmlsZU5hbWUo
KS5jX3N0cigpIDw8ICI6ICIKKyAgICAgIDw8IGlvLmVycm9yKCkuc3RyKCkuY19zdHIoKSk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAvL2RldGVybWluZSBpZiBmaWxlIGlzIGJpbmFy
eSBvciBhc2NpaQotICB3aGlsZSh0ZW1wLmZpbmQoImZvcm1hdCIpID09IHZ0a3N0ZDo6c3RyaW5n
OjpucG9zKQorICB2dGtGb2FtRGljdCBkaWN0OworICBpZighZGljdC5yZWFkKGlvKSkKKyAgICB7
CisgICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciByZWFkaW5nIGxpbmUgIiA8PCBpby5saW5lTnVt
YmVyKCkKKyAgICAgIDw8ICIgb2YgIiA8PCBpby5maWxlTmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8
PCBpby5lcnJvcigpLnN0cigpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
IGlmKGRpY3QudHlwZSgpICE9IHZ0a0ZvYW1EaWN0OjpESUNUSU9OQVJZKQogICAgIHsKLSAgICB0
ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBT
dHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIHZ0
a0Vycm9yTWFjcm8oPDwiVGhlIGZpbGUgdHlwZSBvZiAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIo
KQorICAgICAgPDwgIiBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgaW5wdXQtPmNsb3NlKCk7CiAKLSAgLy9yZW9wZW4gZmlsZSBpbiBjb3JyZWN0IGZv
cm1hdAotICBpZih0ZW1wLmZpbmQoImJpbmFyeSIpICE9IHZ0a3N0ZDo6c3RyaW5nOjpucG9zKQor
ICAvL2NyZWF0ZSB0aGUgcGF0aCB0byB0aGUgZGF0YSBkaXJlY3RvcnkKKyAgLy8gbm90ZSB0aGF0
IGlmIGEgZmlsZSBpcyBzcGVjaWZpZWQgZnJvbSBjb21tYW5kIGxpbmUgKHdpdGgKKyAgLy8gLS1k
YXRhPW9wdCkgaXRzIHBhdGggbWF5IGJlIGEgcmVsYXRpdmUgb25lCisgIHZ0a1N0ZFN0cmluZyBw
cmVmaXgocGF0aCk7CisgIC8vIHJlbW92ZSB0cmFpbGluZyAiL2NvbnRyb2xEaWN0LmZvYW0iCisj
aWYgZGVmaW5lZChfV0lOMzIpCisgIHNpemVfdCBwb3MgPSBwcmVmaXguZmluZF9sYXN0X29mKCIv
XFwiKTsKKyNlbHNlCisgIHNpemVfdCBwb3MgPSBwcmVmaXguZmluZF9sYXN0X29mKCcvJyk7Cisj
ZW5kaWYKKyAgaWYocG9zICE9IHZ0a1N0ZFN0cmluZzo6bnBvcykKICAgICB7Ci0jaWZkZWYgX1dJ
TjMyCi0gICAgaW5wdXQtPm9wZW4ocG9pbnRQYXRoLmNfc3RyKCksIGlvczo6YmluYXJ5IHwgaW9z
OjppbiBWVEtfSU9TX05PQ1JFQVRFKTsKKyAgICBwcmVmaXguZXJhc2UocG9zKTsKKyAgICAvLyBy
ZW1vdmUgdHJhaWxpbmcgIi9zeXN0ZW0iIChvciBhbnkgb3RoZXIgZGlyZWN0b3J5IG5hbWUpCisj
aWYgZGVmaW5lZChfV0lOMzIpCisgICAgcG9zID0gcHJlZml4LmZpbmRfbGFzdF9vZigiL1xcIik7
CisjZWxzZQorICAgIHBvcyA9IHByZWZpeC5maW5kX2xhc3Rfb2YoJy8nKTsKKyNlbmRpZgorICAg
IGlmKHBvcyAhPSB2dGtTdGRTdHJpbmc6Om5wb3MpCisgICAgICB7CisgICAgICBwcmVmaXguZXJh
c2UocG9zICsgMSk7IC8vIHByZXNlcnZlIHRoZSBsYXN0ICIvIgorICAgICAgfQorICAgIGVsc2UK
KyAgICAgIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgUEFSQVZJRVdfVkVSU0lPTl9NQUpPUiA+
PSAzCisgICAgICBwcmVmaXggPSAiLlxcIjsKICNlbHNlCi0gICAgaW5wdXQtPm9wZW4ocG9pbnRQ
YXRoLmNfc3RyKCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7CisgICAgICBwcmVmaXggPSAi
Li8iOwogI2VuZGlmCi0gICAgYmluYXJ5V3JpdGVGb3JtYXQgPSB0cnVlOworICAgICAgfQogICAg
IH0KICAgZWxzZQogICAgIHsKLSAgICBpbnB1dC0+b3Blbihwb2ludFBhdGguY19zdHIoKSxpb3M6
OmluKTsKLSAgICBiaW5hcnlXcml0ZUZvcm1hdCA9IGZhbHNlOwotICAgIH0KLQotICBkb3VibGUg
eCx5LHo7Ci0gIHZ0a3N5c19pb3M6OnN0cmluZ3N0cmVhbSB0b2tlbml6ZXI7Ci0KLSAgLy9pbnN0
YW50aWF0ZSB0aGUgcG9pbnRzIGNsYXNzCi0gIHRoaXMtPlBvaW50cy0+UmVzZXQoKTsKLQotICAv
L2ZpbmQgZW5kIG9mIGhlYWRlcgotICAvL3doaWxlKHRlbXAuY29tcGFyZSgwLDQsICIvLyAqIiwg
MCwgNCkgIT0gMCkKLSAgd2hpbGUgKHN0cmNtcCh0ZW1wLnN1YnN0cigwLDQpLmNfc3RyKCksICIv
LyAqIikpCi0gICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0
KTsKLSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBT
dHJpbmdTdHJ1Y3Q7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmIFBBUkFWSUVXX1ZFUlNJT05fTUFK
T1IgPj0gMworICAgIHByZWZpeCA9ICIuLlxcIjsKKyNlbHNlCisgICAgcHJlZml4ID0gIi4uLyI7
CisjZW5kaWYKICAgICB9CisgICp0aGlzLT5QYXRoUHJlZml4ID0gcHJlZml4OworICB2dGtEZWJ1
Z01hY3JvKDw8IlBhdGg6ICI8PHRoaXMtPlBhdGhQcmVmaXgtPmNfc3RyKCkpOwogCi0gIC8vZmlu
ZCBudW1iZXIgb2YgcG9pbnRzCi0gIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlu
cHV0KTsKLSAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICBkZWxldGUgdGVtcFN0
cmluZ1N0cnVjdDsKLSAgd2hpbGUodGVtcC5lbXB0eSgpKQorICB2dGtGb2FtRW50cnkmIHdyaXRl
Q29udHJvbEVudHJ5ID0gZGljdC5sb29rdXAoIndyaXRlQ29udHJvbCIpOworICBpZighd3JpdGVD
b250cm9sRW50cnkuZm91bmQoKSkKICAgICB7Ci0gICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMt
PkdldExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAg
ICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICB2dGtFcnJvck1hY3JvKDw8ICJ3cml0ZUNv
bnRyb2wgZW50cnkgbm90IGZvdW5kIGluICIgPDwgcGF0aEluKTsKKyAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotCi0gIC8vcmVhZCBudW1iZXIgb2YgcG9pbnRzCi0gIHRva2VuaXplciA8PCB0ZW1w
OwotICB0b2tlbml6ZXIgPj4gTnVtUG9pbnRzOwotICAvL2JpbmFyeSBkYXRhCi0gIGlmKGJpbmFy
eVdyaXRlRm9ybWF0KQorICB2dGtTdGRTdHJpbmcgd3JpdGVDb250cm9sOworICB3cml0ZUNvbnRy
b2xFbnRyeSA+PiB3cml0ZUNvbnRyb2w7CisKKyAgdnRrU3RkU3RyaW5nIGFkanVzdFRpbWVTdGVw
OworICBkaWN0Lmxvb2t1cCgiYWRqdXN0VGltZVN0ZXAiKSA+PiBhZGp1c3RUaW1lU3RlcDsgLy8g
ZW1wdHkgaWYgbm90IGZvdW5kCisKKyAgLy8gbGlzdCB0aW1lIGRpcmVjdG9yaWVzIGFjY29yZGlu
ZyB0byBjb250cm9sRGljdCBpZiAoYWRqdXN0VGltZVN0ZXAKKyAgLy8gd3JpdGVDb250cm9sKSA9
PSAob2ZmLCB0aW1lU3RlcCkgb3IgKG9uLCBhZGp1c3RhYmxlUnVuVGltZSk7IGxpc3QKKyAgLy8g
YnkgdGltZSBpbnN0YW5jZXMgaW4gdGhlIGNhc2UgZGlyZWN0b3J5IG90aGVyd2lzZSAoZGlmZmVy
ZW50IGJlaGF2aW9yCisgIC8vIGZyb20gcGFyYUZvYW0pCisgIC8vIHZhbGlkIHN3aXRjaGluZyB3
b3JkcyB0YWtlbiBmcm9tIHNyYy9PcGVuRk9BTS9kYi9Td2l0Y2gvU3dpdGNoLkMKKyAgaWYoKChh
ZGp1c3RUaW1lU3RlcCA9PSAib2ZmIiB8fCBhZGp1c3RUaW1lU3RlcCA9PSAibm8iCisgICAgfHwg
YWRqdXN0VGltZVN0ZXAgPT0gIm4iIHx8IGFkanVzdFRpbWVTdGVwID09ICJmYWxzZSIKKyAgICB8
fCBhZGp1c3RUaW1lU3RlcCA9PSAiIikgJiYgd3JpdGVDb250cm9sID09ICJ0aW1lU3RlcCIpCisg
ICAgfHwgKChhZGp1c3RUaW1lU3RlcCA9PSAib24iIHx8IGFkanVzdFRpbWVTdGVwID09ICJ5ZXMi
CisgICAgfHwgYWRqdXN0VGltZVN0ZXAgPT0gInkiIHx8IGFkanVzdFRpbWVTdGVwID09ICJ0cnVl
IikKKyAgICAmJiB3cml0ZUNvbnRyb2wgPT0gImFkanVzdGFibGVSdW5UaW1lIikpCiAgICAgewot
ICAgIGlucHV0LT5nZXQoKTsgLy9wYXJlbnRoZXNpcwotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBO
dW1Qb2ludHM7IGkrKykKLSAgICAgIHsKLSAgICAgIGlucHV0LT5yZWFkKChjaGFyICopJngsc2l6
ZW9mKGRvdWJsZSkpOwotICAgICAgaW5wdXQtPnJlYWQoKGNoYXIgKikmeSxzaXplb2YoZG91Ymxl
KSk7Ci0gICAgICBpbnB1dC0+cmVhZCgoY2hhciAqKSZ6LHNpemVvZihkb3VibGUpKTsKLSAgICAg
IHRoaXMtPlBvaW50cy0+SW5zZXJ0UG9pbnQoaSx4LHkseik7Ci0gICAgICB9CisgICAgcmV0dXJu
IHRoaXMtPkxpc3RUaW1lRGlyZWN0b3JpZXNCeUNvbnRyb2xEaWN0KCZkaWN0KTsKICAgICB9Ci0K
LSAgLy9hc2NpaSBkYXRhCiAgIGVsc2UKICAgICB7Ci0gICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRo
aXMtPkdldExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsK
LSAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgdGhp
cy0+TnVtUG9pbnRzOyBpKyspCi0gICAgICB7Ci0gICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhp
cy0+R2V0TGluZShpbnB1dCk7Ci0gICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7
Ci0gICAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKLSAgICAgIHRlbXAuZXJhc2UodGVtcC5i
ZWdpbigpK3RlbXAuZmluZCgiKCIpKTsKLSAgICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3Rl
bXAuZmluZCgiKSIpKTsKLSAgICAgIHRva2VuaXplci5jbGVhcigpOwotICAgICAgdG9rZW5pemVy
IDw8IHRlbXA7Ci0gICAgICB0b2tlbml6ZXIgPj4geDsKLSAgICAgIHRva2VuaXplciA+PiB5Owot
ICAgICAgdG9rZW5pemVyID4+IHo7Ci0gICAgICB0aGlzLT5Qb2ludHMtPkluc2VydFBvaW50KGks
eCx5LHopOwotICAgICAgfQorICAgIHJldHVybiB0aGlzLT5MaXN0VGltZURpcmVjdG9yaWVzQnlJ
bnN0YW5jZXMoKTsKICAgICB9Ci0KLSAgaW5wdXQtPmNsb3NlKCk7Ci0gIGRlbGV0ZSBpbnB1dDsK
LSAgdnRrRGVidWdNYWNybyg8PCJQb2ludCBmaWxlIHJlYWQiKTsKLSAgcmV0dXJuOwogfQogCiAv
LyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCi0vLyAgTWV0aG9kOiB2dGtPcGVuRk9BTVJlYWRlcjo6UmVh
ZEZhY2VzRmlsZQorLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OkdldFBvaW50cwogLy8K
IC8vICBQdXJwb3NlOgotLy8gIHJlYWQgdGhlIGZhY2VzIGludG8gYSB2dGtzdGQ6OnZlY3Rvcgor
Ly8gIHJlYWQgdGhlIHBvaW50cyBmaWxlIGludG8gYSB2dGtQb2ludHMKIC8vCiAvLyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi12b2lkIHZ0a09wZW5GT0FNUmVhZGVyOjpSZWFkRmFjZXNGaWxlIChjb25z
dCBjaGFyICogZmFjZVBhdGhJbikKK3Z0a1BvaW50cyogdnRrT3BlbkZPQU1SZWFkZXI6OkdldFBv
aW50cyAoaW50IHRpbWVTdGF0ZSkKIHsKLSAgdnRrc3RkOjpzdHJpbmcgZmFjZVBhdGgoZmFjZVBh
dGhJbik7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiUmVhZCBmYWNlcyBmaWxlOiAiPDxmYWNlUGF0aC5j
X3N0cigpKTsKLSAgdnRrc3RkOjpzdHJpbmcgdGVtcDsKLSAgc3RkU3RyaW5nKiB0ZW1wU3RyaW5n
U3RydWN0OwotICBib29sIGJpbmFyeVdyaXRlRm9ybWF0OwotICBpZnN0cmVhbSAqIGlucHV0ID0g
bmV3IGlmc3RyZWFtKGZhY2VQYXRoLmNfc3RyKCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7
Ci0gIC8vbWFrZSBzdXJlIGZpbGUgZXhpc3RzCi0gIGlmKGlucHV0LT5mYWlsKCkpCi0gICAgewot
ICAgIGlucHV0LT5jbG9zZSgpOwotICAgIGRlbGV0ZSBpbnB1dDsKLSAgICByZXR1cm47Ci0gICAg
fQorICAvL3BhdGggdG8gcG9pbnRzIGZpbGUKKyAgdnRrU3RkU3RyaW5nIHBvaW50UGF0aCA9ICp0
aGlzLT5QYXRoUHJlZml4ICsKKyAgICB0aGlzLT5Qb2x5TWVzaFBvaW50c0Rpci0+dmFsdWVbdGlt
ZVN0YXRlXSArICIvcG9seU1lc2gvcG9pbnRzIjsKKyAgdnRrRGVidWdNYWNybyg8PCJSZWFkIHBv
aW50cyBmaWxlOiAiPDxwb2ludFBhdGguY19zdHIoKSk7CiAKLSAgLy9kZXRlcm1pbmUgaWYgZmls
ZSBpcyBiaW5hcnkgb3IgYXNjaWkKLSAgd2hpbGUodGVtcC5maW5kKCJmb3JtYXQiKSA9PSB2dGtz
dGQ6OnN0cmluZzo6bnBvcykKKyAgdnRrRm9hbUlPb2JqZWN0IGlvOworICBpZighKGlvLm9wZW4o
cG9pbnRQYXRoKSB8fCBpby5vcGVuKHBvaW50UGF0aCArICIuZ3oiKSkpCiAgICAgewotICAgIHRl
bXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0
cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7CisgICAgdnRr
RXJyb3JNYWNybyg8PCJFcnJvciBvcGVuaW5nICIgPDwgaW8uZmlsZU5hbWUoKS5jX3N0cigpIDw8
ICI6ICIKKyAgICAgIDw8IGlvLmVycm9yKCkuc3RyKCkuY19zdHIoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiAgICAgfQotICBpbnB1dC0+Y2xvc2UoKTsKLQotICAvL3Jlb3BlbiBmaWxlIGluIGNvcnJl
Y3QgZm9ybWF0Ci0gIGlmKHRlbXAuZmluZCgiYmluYXJ5IikgIT0gdnRrc3RkOjpzdHJpbmc6Om5w
b3MpCisgIHZ0a0ZvYW1EaWN0IGRpY3Q7CisgIGlmKCFkaWN0LnJlYWQoaW8pKQogICAgIHsKLSNp
ZmRlZiBfV0lOMzIKLSAgICBpbnB1dC0+b3BlbihmYWNlUGF0aC5jX3N0cigpLCBpb3M6OmJpbmFy
eSB8IGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0jZWxzZQotICAgIGlucHV0LT5vcGVuKGZh
Y2VQYXRoLmNfc3RyKCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0jZW5kaWYKLSAgICBi
aW5hcnlXcml0ZUZvcm1hdCA9IHRydWU7CisgICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciByZWFk
aW5nIGxpbmUgIiA8PCBpby5saW5lTnVtYmVyKCkKKyAgICAgIDw8ICIgb2YgIiA8PCBpby5maWxl
TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCBpby5lcnJvcigpLnN0cigpLmNfc3RyKCkpOworICAg
IHJldHVybiBOVUxMOwogICAgIH0KLSAgZWxzZQorICBpZihkaWN0LnR5cGUoKSAhPSB2dGtGb2Ft
RGljdDo6VkVDVE9STElTVCkKICAgICB7Ci0gICAgaW5wdXQtPm9wZW4oZmFjZVBhdGguY19zdHIo
KSxpb3M6OmluKTsKLSAgICBiaW5hcnlXcml0ZUZvcm1hdCA9IGZhbHNlOworICAgIHZ0a0Vycm9y
TWFjcm8oPDwiVGhlIGZpbGUgdHlwZSBvZiAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKQorICAg
ICAgPDwgIiBpcyBub3QgYSB2ZWN0b3JMaXN0Iik7CisgICAgcmV0dXJuIE5VTEw7CiAgICAgfQog
Ci0gIHZ0a3N5c19pb3M6OnN0cmluZ3N0cmVhbSB0b2tlbml6ZXI7Ci0gIHNpemVfdCBwb3M7Ci0g
IGludCBudW1GYWNlUG9pbnRzOwotICB0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZS5jbGVhcigpOwor
ICB2dGtEb3VibGVBcnJheSYgdmwgPSBkaWN0LnZlY3Rvckxpc3QoKTsKIAotICAvL2ZpbmQgZW5k
IG9mIGhlYWRlcgotICAvL3doaWxlKHRlbXAuY29tcGFyZSgwLDQsICIvLyAqIiwgMCwgNCkgIT0g
MCkKLSAgd2hpbGUgKHN0cmNtcCh0ZW1wLnN1YnN0cigwLDQpLmNfc3RyKCksICIvLyAqIikpCi0g
ICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0
ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1
Y3Q7Ci0gICAgfQorICAvL2luc3RhbnRpYXRlIHRoZSBwb2ludHMgY2xhc3MKKyAgdnRrUG9pbnRz
KiBwb2ludHMgPSB2dGtQb2ludHM6Ok5ldygpOworICBjb25zdCBpbnQgblBvaW50cyA9IHZsLkdl
dE51bWJlck9mVHVwbGVzKCk7CisgIHBvaW50cy0+U2V0TnVtYmVyT2ZQb2ludHMoblBvaW50cyk7
CiAKLSAgLy9maW5kIG51bWJlciBvZiBmYWNlcwotICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+
R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgZGVs
ZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gIHdoaWxlKHRlbXAuZW1wdHkoKSkKKyAgZm9yKGludCBp
ID0gMCwgaW5kZXggPSAwOyBpIDwgblBvaW50czsgaSsrLCBpbmRleCArPSAzKQogICAgIHsKLSAg
ICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRl
bXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAg
IHBvaW50cy0+U2V0UG9pbnQoaSwgdmwuR2V0UG9pbnRlcihpbmRleCkpOwogICAgIH0KKyAgdnRr
RGVidWdNYWNybyg8PCJQb2ludCBmaWxlIHJlYWQiKTsKKyAgcmV0dXJuIHBvaW50czsKK30KIAot
ICAvL3JlYWQgbnVtYmVyIG9mIGZhY2VzCi0gIHRva2VuaXplciA8PCB0ZW1wOwotICB0b2tlbml6
ZXIgPj4gdGhpcy0+TnVtRmFjZXM7Ci0gIHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlLnJlc2l6ZSh0
aGlzLT5OdW1GYWNlcyk7Ci0KLSAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5w
dXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gIGRlbGV0ZSB0ZW1wU3Ry
aW5nU3RydWN0Oy8vVEhST1cgT1VUICIoIgorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gIE1l
dGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OlJlYWRGYWNlc0ZpbGUKKy8vCisvLyAgUHVycG9zZToK
Ky8vICByZWFkIHRoZSBmYWNlcyBpbnRvIGEgdnRrc3RkOjp2ZWN0b3IKKy8vCisvLyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCitpbnRWZWN0b3JWZWN0b3IqIHZ0a09wZW5GT0FNUmVhZGVyOjpSZWFkRmFj
ZXNGaWxlIChjb25zdCBjaGFyKiBmYWNlUGF0aEluKQoreworICBjb25zdCB2dGtTdGRTdHJpbmcg
ZmFjZVBhdGgoZmFjZVBhdGhJbik7CisgIHZ0a0RlYnVnTWFjcm8oPDwiUmVhZCBmYWNlcyBmaWxl
OiAiPDxmYWNlUGF0aC5jX3N0cigpKTsKIAotICAvL2JpbmFyeSBkYXRhCi0gIGlmKGJpbmFyeVdy
aXRlRm9ybWF0KQorICB2dGtGb2FtSU9vYmplY3QgaW87CisgIGlmKCEoaW8ub3BlbihmYWNlUGF0
aCkgfHwgaW8ub3BlbihmYWNlUGF0aCArICIuZ3oiKSkpCiAgICAgewotICAgIC8vY2hhciBwYXJl
bjsKLSAgICBpbnQgdGVtcFBvaW50OwotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBOdW1GYWNlczsg
aSsrKQotICAgICAgewotICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5w
dXQpOwotICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgZGVsZXRl
IHRlbXBTdHJpbmdTdHJ1Y3Q7Ly9USFJPVyBPVVQgYmxhbmtsaW5lCi0KLSAgICAgIHRlbXBTdHJp
bmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICAgIHRlbXAgPSB0ZW1wU3RyaW5n
U3RydWN0LT52YWx1ZTsKLSAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OyAvL2dyYWIgcG9p
bnQgY291bnQKLQotICAgICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gICAgICB0b2tlbml6ZXIgPDwg
dGVtcDsKLSAgICAgIHRva2VuaXplciA+PiBudW1GYWNlUG9pbnRzOwotICAgICAgdGhpcy0+RmFj
ZVBvaW50cy0+dmFsdWVbaV0ucmVzaXplKG51bUZhY2VQb2ludHMpOwotICAgICAgLy9wYXJlbiA9
IGlucHV0LT5nZXQoKTsgIC8vZ3JhYiAoCi0gICAgICBpbnB1dC0+Z2V0KCk7ICAvL2dyYWIgKAot
ICAgICAgZm9yKGludCBqID0gMDsgaiA8IG51bUZhY2VQb2ludHM7IGorKykKLSAgICAgICAgewot
ICAgICAgICBpbnB1dC0+cmVhZCgoY2hhciAqKSAmdGVtcFBvaW50LCBzaXplb2YoaW50KSk7Ci0g
ICAgICAgIHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW2ldW2pdID0gdGVtcFBvaW50OwotICAgICAg
ICB9Ci0gICAgICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAg
ICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgICBkZWxldGUgdGVt
cFN0cmluZ1N0cnVjdDsgLy90aHJvdyBvdXQgKSBhbmQgcmVzdCBvZiBsaW5lCi0gICAgICB9Cisg
ICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciBvcGVuaW5nICIgPDwgaW8uZmlsZU5hbWUoKS5jX3N0
cigpIDw8ICI6ICIKKyAgICAgIDw8IGlvLmVycm9yKCkuc3RyKCkuY19zdHIoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiAgICAgfQotCi0gIC8vYXNjaWkgZGF0YQotICBlbHNlCisgIHZ0a0ZvYW1EaWN0
IGRpY3Q7CisgIGlmKCFkaWN0LnJlYWQoaW8pKQogICAgIHsKLSAgICAvL2NyZWF0ZSB2dGtzdGQ6
OnZlY3RvciBvZiBwb2ludHMgaW4gZWFjaCBmYWNlCi0gICAgZm9yKGludCBpID0gMDsgaSA8IHRo
aXMtPk51bUZhY2VzOyBpKyspCi0gICAgICB7Ci0gICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhp
cy0+R2V0TGluZShpbnB1dCk7Ci0gICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7
Ci0gICAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKLQotICAgICAgcG9zID0gdGVtcC5maW5k
KCIoIik7Ci0gICAgICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gYXNjVG9rZW5pemVyOwotICAg
ICAgYXNjVG9rZW5pemVyIDw8IHRlbXAuc3Vic3RyKDAsIHBvcyk7Ci0gICAgICB0ZW1wLmVyYXNl
KDAsIHBvcysxKTsKLSAgICAgIGFzY1Rva2VuaXplciA+PiBudW1GYWNlUG9pbnRzOwotICAgICAg
dGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbaV0ucmVzaXplKG51bUZhY2VQb2ludHMpOwotICAgICAg
Zm9yKGludCBqID0gMDsgaiA8IG51bUZhY2VQb2ludHM7IGorKykKLSAgICAgICAgewotICAgICAg
ICBwb3MgPSB0ZW1wLmZpbmQoIiAiKTsKLSAgICAgICAgdnRrc3lzX2lvczo6c3RyaW5nc3RyZWFt
IGxpbmVUb2tlbml6ZXI7Ci0gICAgICAgIGxpbmVUb2tlbml6ZXIgPDwgdGVtcC5zdWJzdHIoMCwg
cG9zKTsKLSAgICAgICAgdGVtcC5lcmFzZSgwLCBwb3MrMSk7Ci0gICAgICAgIGxpbmVUb2tlbml6
ZXIgPj4gdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbaV1bal07Ci0gICAgICAgIH0KLSAgICAgIH0K
KyAgICB2dGtFcnJvck1hY3JvKDw8IkVycm9yIHJlYWRpbmcgbGluZSAiIDw8IGlvLmxpbmVOdW1i
ZXIoKQorICAgICAgPDwgIiBvZiAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8
IGlvLmVycm9yKCkuc3RyKCkuY19zdHIoKSk7CisgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBp
ZihkaWN0LnR5cGUoKSAhPSB2dGtGb2FtRGljdDo6TEFCRUxMSVNUTElTVCkKKyAgICB7CisgICAg
dnRrRXJyb3JNYWNybyg8PCJUaGUgZmlsZSB0eXBlIG9mICIgPDwgaW8uZmlsZU5hbWUoKS5jX3N0
cigpCisgICAgICA8PCAiIGlzIG5vdCBhIGxhYmVsTGlzdExpc3QiKTsKKyAgICByZXR1cm4gTlVM
TDsKICAgICB9CiAKLSAgaW5wdXQtPmNsb3NlKCk7Ci0gIGRlbGV0ZSBpbnB1dDsKICAgdnRrRGVi
dWdNYWNybyg8PCJGYWNlcyByZWFkIik7Ci0gIHJldHVybjsKKyAgcmV0dXJuIChpbnRWZWN0b3JW
ZWN0b3IgKilkaWN0LnB0cigpOwogfQogCiAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAgTWV0
aG9kOiB2dGtPcGVuRk9BTVJlYWRlcjo6UmVhZE93bmVyRmlsZQorLy8gIE1ldGhvZDogdnRrT3Bl
bkZPQU1SZWFkZXI6OlJlYWRPd25lck5laWdoYm9yRmlsZXMKIC8vCiAvLyAgUHVycG9zZToKIC8v
ICByZWFkIHRoZSBvd25lciBmaWxlIGludG8gYSB2dGtzdGQ6OnZlY3RvcgogLy8KIC8vICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLXZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OlJlYWRPd25lckZpbGUoY29u
c3QgY2hhciAqIG93bmVyUGF0aEluKQorYm9vbCB2dGtPcGVuRk9BTVJlYWRlcjo6UmVhZE93bmVy
TmVpZ2hib3JGaWxlcyhmYWNlVmVjdG9yVmVjdG9yKiBmYWNlc09mQ2VsbCwKKyAgY29uc3QgY2hh
ciogb3duZXJQYXRoSW4sIGNvbnN0IGNoYXIqIG5laWdoYm9yUGF0aEluKQogewotICB2dGtzdGQ6
OnN0cmluZyBvd25lclBhdGgob3duZXJQYXRoSW4pOworICBjb25zdCB2dGtTdGRTdHJpbmcgb3du
ZXJQYXRoKG93bmVyUGF0aEluKTsKICAgdnRrRGVidWdNYWNybyg8PCJSZWFkIG93bmVyIGZpbGU6
ICI8PG93bmVyUGF0aC5jX3N0cigpKTsKLSAgdnRrc3RkOjpzdHJpbmcgdGVtcDsKLSAgc3RkU3Ry
aW5nKiB0ZW1wU3RyaW5nU3RydWN0OwotICBib29sIGJpbmFyeVdyaXRlRm9ybWF0OwotICBpZnN0
cmVhbSAqIGlucHV0ID0gbmV3IGlmc3RyZWFtKG93bmVyUGF0aC5jX3N0cigpLCBpb3M6OmluIFZU
S19JT1NfTk9DUkVBVEUpOwotICAvL21ha2Ugc3VyZSBmaWxlIGV4aXN0cwotICBpZihpbnB1dC0+
ZmFpbCgpKQotICAgIHsKLSAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgaW5wdXQ7Ci0g
ICAgcmV0dXJuOwotICAgIH0KIAotICAvL2RldGVybWluZSBpZiBmaWxlIGlzIGJpbmFyeSBvciBh
c2NpaQotICB3aGlsZSh0ZW1wLmZpbmQoImZvcm1hdCIpID09IHZ0a3N0ZDo6c3RyaW5nOjpucG9z
KQorICB2dGtGb2FtSU9vYmplY3QgaW87CisgIGlmKCEoaW8ub3Blbihvd25lclBhdGgpIHx8IGlv
Lm9wZW4ob3duZXJQYXRoICsgIi5neiIpKSkKICAgICB7Ci0gICAgdGVtcFN0cmluZ1N0cnVjdCA9
IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1
ZTsKLSAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICB2dGtFcnJvck1hY3JvKDw8IkVy
cm9yIG9wZW5pbmcgIiA8PCBpby5maWxlTmFtZSgpLmNfc3RyKCkgPDwgIjogIgorICAgICAgPDwg
aW8uZXJyb3IoKS5zdHIoKS5jX3N0cigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICBp
bnB1dC0+Y2xvc2UoKTsKLQotICAvL3Jlb3BlbiBmaWxlIGluIGNvcnJlY3QgZm9ybWF0Ci0gIGlm
KHRlbXAuZmluZCgiYmluYXJ5IikgIT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCisgIHZ0a0ZvYW1E
aWN0IG93bmVyRGljdDsKKyAgaWYoIW93bmVyRGljdC5yZWFkKGlvKSkKICAgICB7Ci0jaWZkZWYg
X1dJTjMyCi0gICAgaW5wdXQtPm9wZW4ob3duZXJQYXRoLmNfc3RyKCksIGlvczo6YmluYXJ5IHwg
aW9zOjppbiBWVEtfSU9TX05PQ1JFQVRFKTsKLSNlbHNlCi0gICAgaW5wdXQtPm9wZW4ob3duZXJQ
YXRoLmNfc3RyKCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0jZW5kaWYKLSAgICBiaW5h
cnlXcml0ZUZvcm1hdCA9IHRydWU7CisgICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciByZWFkaW5n
IGxpbmUgIiA8PCBpby5saW5lTnVtYmVyKCkKKyAgICAgIDw8ICIgb2YgIiA8PCBpby5maWxlTmFt
ZSgpLmNfc3RyKCkgPDwgIjogIiA8PCBpby5lcnJvcigpLnN0cigpLmNfc3RyKCkpOworICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gIGVsc2UKKyAgaWYob3duZXJEaWN0LnR5cGUoKSAhPSB2dGtG
b2FtRGljdDo6TEFCRUxMSVNUKQogICAgIHsKLSAgICBpbnB1dC0+b3Blbihvd25lclBhdGguY19z
dHIoKSxpb3M6OmluKTsKLSAgICBiaW5hcnlXcml0ZUZvcm1hdCA9IGZhbHNlOworICAgIHZ0a0Vy
cm9yTWFjcm8oPDwiVGhlIGZpbGUgdHlwZSBvZiAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKQor
ICAgICAgPDwgIiBpcyBub3QgYSBsYWJlbExpc3QiKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQorICBpby5jbG9zZSgpOwogCi0gIHZ0a3N0ZDo6c3RyaW5nIG51bUZhY2VzU3RyOwotICBpbnQg
ZmFjZVZhbHVlOwotCi0gIHRoaXMtPkZhY2VPd25lciA9IHZ0a0ludEFycmF5OjpOZXcoKTsKKyAg
Y29uc3QgdnRrU3RkU3RyaW5nIG5laWdoYm9yUGF0aChuZWlnaGJvclBhdGhJbik7CisgIHZ0a0Rl
YnVnTWFjcm8oPDwiUmVhZCBuZWlnaGJvciBmaWxlOiAiPDxuZWlnaGJvclBhdGguY19zdHIoKSk7
CiAKLSAgdnRrc3lzX2lvczo6c3RyaW5nc3RyZWFtIHRva2VuaXplcjsKLSAgdG9rZW5pemVyIDw8
IHRoaXMtPk51bUZhY2VzOwotICB0b2tlbml6ZXIgPj4gbnVtRmFjZXNTdHI7Ci0gIC8vZmluZCBl
bmQgb2YgaGVhZGVyICYgbnVtYmVyIG9mIGZhY2VzCi0gIC8vd2hpbGUodGVtcC5jb21wYXJlKDAs
bnVtRmFjZXNTdHIuc2l6ZSgpLG51bUZhY2VzU3RyLAotICAvLzAsbnVtRmFjZXNTdHIuc2l6ZSgp
KSE9MCkKLSAgd2hpbGUoc3RyY21wKHRlbXAuc3Vic3RyKDAsbnVtRmFjZXNTdHIuc2l6ZSgpKS5j
X3N0cigpLCBudW1GYWNlc1N0ci5jX3N0cigpKSkKKyAgaWYoIShpby5vcGVuKG5laWdoYm9yUGF0
aCkgfHwgaW8ub3BlbihuZWlnaGJvclBhdGggKyAiLmd6IikpKQogICAgIHsKLSAgICB0ZW1wU3Ry
aW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdT
dHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIHZ0a0Vycm9y
TWFjcm8oPDwiRXJyb3Igb3BlbmluZyAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKSA8PCAiOiAi
CisgICAgICA8PCBpby5lcnJvcigpLnN0cigpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0KLSAgdGhpcy0+RmFjZU93bmVyLT5TZXROdW1iZXJPZlZhbHVlcyh0aGlzLT5OdW1G
YWNlcyk7Ci0KLSAgLy9iaW5hcnkgZGF0YQotICBpZihiaW5hcnlXcml0ZUZvcm1hdCkKKyAgdnRr
Rm9hbURpY3QgbmVpZ2hib3JEaWN0OworICBpZighbmVpZ2hib3JEaWN0LnJlYWQoaW8pKQogICAg
IHsKLSAgICBpbnB1dC0+Z2V0KCk7IC8vcGFyZW50aGVzaXMKLSAgICBmb3IoaW50IGkgPSAwOyBp
IDwgTnVtRmFjZXM7IGkrKykKLSAgICAgIHsKLSAgICAgIGlucHV0LT5yZWFkKChjaGFyICopICZm
YWNlVmFsdWUsIHNpemVvZihpbnQpKTsKLSAgICAgIHRoaXMtPkZhY2VPd25lci0+U2V0VmFsdWUo
aSwgZmFjZVZhbHVlKTsKLSAgICAgIH0KKyAgICB2dGtFcnJvck1hY3JvKDw8IkVycm9yIHJlYWRp
bmcgbGluZSAiIDw8IGlvLmxpbmVOdW1iZXIoKQorICAgICAgPDwgIiBvZiAiIDw8IGlvLmZpbGVO
YW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8IGlvLmVycm9yKCkuc3RyKCkuY19zdHIoKSk7CisgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAvL2FzY2lpIGRhdGEKLSAgZWxzZQorICBpZihuZWln
aGJvckRpY3QudHlwZSgpICE9IHZ0a0ZvYW1EaWN0OjpMQUJFTExJU1QpCiAgICAgewotICAgIHRl
bXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0
cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0KLSAgICAv
L3JlYWQgZmFjZSBvd25lcnMgaW50byBpbnQgYXJyYXkKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwg
dGhpcy0+TnVtRmFjZXM7IGkrKykKLSAgICAgIHsKLSAgICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0
aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1
ZTsKLSAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotCi0gICAgICB0b2tlbml6ZXIuY2xl
YXIoKTsKLSAgICAgIHRva2VuaXplciA8PCB0ZW1wOwotICAgICAgdG9rZW5pemVyID4+IGZhY2VW
YWx1ZTsKLSAgICAgIHRoaXMtPkZhY2VPd25lci0+U2V0VmFsdWUoaSwgZmFjZVZhbHVlKTsKLSAg
ICAgIH0KKyAgICB2dGtFcnJvck1hY3JvKDw8IlRoZSBmaWxlIHR5cGUgb2YgIiA8PCBpby5maWxl
TmFtZSgpLmNfc3RyKCkKKyAgICAgIDw8ICIgaXMgbm90IGEgbGFiZWxMaXN0Iik7CisgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAvL2ZpbmQgdGhlIG51bWJlciBvZiBjZWxscwotICBkb3Vi
bGUgICogcmFuZ2U7Ci0gIHJhbmdlID0gdGhpcy0+RmFjZU93bmVyLT5HZXRSYW5nZSgpOwotICB0
aGlzLT5OdW1DZWxscyA9IChpbnQpcmFuZ2VbMV0rMTsKKyAgY29uc3QgdnRrc3RkOjp2ZWN0b3I8
aW50PiYgZmFjZU93bmVyID0gb3duZXJEaWN0LmxhYmVsTGlzdCgpOworICBjb25zdCB2dGtzdGQ6
OnZlY3RvcjxpbnQ+JiBmYWNlTmVpZ2hib3IgPSBuZWlnaGJvckRpY3QubGFiZWxMaXN0KCk7CiAK
LSAgLy9hZGQgdGhlIGZhY2UgbnVtYmVyIHRvIHRoZSBjb3JyZWN0IGNlbGwKLSAgLy9hY2NvcmRp
bmcgdG8gb3duZXIKLSAgdGhpcy0+RmFjZXNPd25lckNlbGwtPnZhbHVlLnJlc2l6ZSh0aGlzLT5O
dW1DZWxscyk7Ci0gIGludCB0ZW1wQ2VsbElkOwotICBmb3IoaW50IGogPSAwOyBqIDwgdGhpcy0+
TnVtRmFjZXM7IGorKykKKyAgaWYoZmFjZU93bmVyLnNpemUoKSAhPSBmYWNlTmVpZ2hib3Iuc2l6
ZSgpKQogICAgIHsKLSAgICB0ZW1wQ2VsbElkID0gdGhpcy0+RmFjZU93bmVyLT5HZXRWYWx1ZShq
KTsKLSAgICBpZih0ZW1wQ2VsbElkICE9IC0xKQotICAgICAgewotICAgICAgdGhpcy0+RmFjZXNP
d25lckNlbGwtPnZhbHVlW3RlbXBDZWxsSWRdLnB1c2hfYmFjayhqKTsKLSAgICAgIH0KKyAgICB2
dGtFcnJvck1hY3JvKDw8Ik51bWJlcnMgb2YgZmFjZXMgaW4gb3duZXIgYW5kIG5laWdoYm9yIGRv
bid0IG1hdGNoIik7CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICBpbnB1dC0+Y2xvc2Uo
KTsKLSAgZGVsZXRlIGlucHV0OwotICB2dGtEZWJ1Z01hY3JvKDw8Ik93bmVyIGZpbGUgcmVhZCIp
OwotICByZXR1cm47Ci19CisgIGNvbnN0IHNpemVfdCBuRmFjZXMgPSBmYWNlT3duZXIuc2l6ZSgp
OwogCi0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyAgTWV0aG9kOiB2dGtPcGVuRk9BTVJlYWRl
cjo6UmVhZE5laWdoYm9yRmlsZQotLy8KLS8vICBQdXJwb3NlOgotLy8gIHJlYWQgdGhlIG5laWdo
Ym9yIGZpbGUgaW50byBhIHZ0a3N0ZDo6dmVjdG9yCi0vLwotLy8gKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Kgotdm9pZCB2dGtPcGVuRk9BTVJlYWRlcjo6UmVhZE5laWdoYm9yRmlsZShjb25zdCBjaGFyICog
bmVpZ2hib3JQYXRoSW4pCi17Ci0gIHZ0a3N0ZDo6c3RyaW5nIG5laWdoYm9yUGF0aChuZWlnaGJv
clBhdGhJbik7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiUmVhZCBuZWlnaGJvciBmaWxlOiAiPDxuZWln
aGJvclBhdGguY19zdHIoKSk7Ci0gIHZ0a3N0ZDo6c3RyaW5nIHRlbXA7Ci0gIHN0ZFN0cmluZyog
dGVtcFN0cmluZ1N0cnVjdDsKLSAgYm9vbCBiaW5hcnlXcml0ZUZvcm1hdDsKLSAgaWZzdHJlYW0g
KiBpbnB1dCA9IG5ldyBpZnN0cmVhbShuZWlnaGJvclBhdGguY19zdHIoKSwgaW9zOjppbiBWVEtf
SU9TX05PQ1JFQVRFKTsKLSAgLy9tYWtlIHN1cmUgZmlsZSBleGlzdHMKLSAgaWYoaW5wdXQtPmZh
aWwoKSkKKyAgaWYobkZhY2VzID09IDApCiAgICAgewotICAgIGlucHV0LT5jbG9zZSgpOwotICAg
IGRlbGV0ZSBpbnB1dDsKLSAgICByZXR1cm47CisgICAgdnRrV2FybmluZ01hY3JvKDw8IlRoZSBt
ZXNoIGNvbnRhaW5zIG5vIGZhY2VzIik7CiAgICAgfQogCi0gIC8vZGV0ZXJtaW5lIGlmIGZpbGUg
aXMgYmluYXJ5IG9yIGFzY2lpCi0gIHdoaWxlKHRlbXAuZmluZCgiZm9ybWF0IikgPT0gdnRrc3Rk
OjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRM
aW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVs
ZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gICAgfQotICBpbnB1dC0+Y2xvc2UoKTsKKyAgdGhpcy0+
RmFjZU93bmVyID0gdnRrSW50QXJyYXk6Ok5ldygpOworICB2dGtJbnRBcnJheSYgZm8gPSAqdGhp
cy0+RmFjZU93bmVyOworICBmby5TZXROdW1iZXJPZlZhbHVlcyhuRmFjZXMpOwogCi0gIC8vcmVv
cGVuIGZpbGUgaW4gY29ycmVjdCBmb3JtYXQKLSAgaWYodGVtcC5maW5kKCJiaW5hcnkiKSAhPSB2
dGtzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0jaWZkZWYgX1dJTjMyCi0gICAgaW5wdXQtPm9w
ZW4obmVpZ2hib3JQYXRoLmNfc3RyKCksIGlvczo6YmluYXJ5IHwgaW9zOjppbiBWVEtfSU9TX05P
Q1JFQVRFKTsKLSNlbHNlCi0gICAgaW5wdXQtPm9wZW4obmVpZ2hib3JQYXRoLmNfc3RyKCksIGlv
czo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0jZW5kaWYKLSAgICBiaW5hcnlXcml0ZUZvcm1hdCA9
IHRydWU7Ci0gICAgfQotICBlbHNlCisgIC8vcmVhZCBmYWNlIG93bmVycyBpbnRvIGludCBhcnJh
eQorICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgbkZhY2VzOyBpKyspCiAgICAgewotICAgIGlucHV0
LT5vcGVuKG5laWdoYm9yUGF0aC5jX3N0cigpLGlvczo6aW4pOwotICAgIGJpbmFyeVdyaXRlRm9y
bWF0ID0gZmFsc2U7Ci0gICAgfQotCi0gIHZ0a3N0ZDo6c3RyaW5nIG51bUZhY2VzU3RyOwotICBp
bnQgZmFjZVZhbHVlOwotICB2dGtJbnRBcnJheSAqIGZhY2VOZWlnaGJvciA9IHZ0a0ludEFycmF5
OjpOZXcoKTsKLQotICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gdG9rZW5pemVyOwotICB0b2tl
bml6ZXIgPDwgdGhpcy0+TnVtRmFjZXM7Ci0gIHRva2VuaXplciA+PiBudW1GYWNlc1N0cjsKLSAg
Ly9maW5kIGVuZCBvZiBoZWFkZXIgJiBudW1iZXIgb2YgZmFjZXMKLSAgLy93aGlsZSh0ZW1wLmNv
bXBhcmUoMCxudW1GYWNlc1N0ci5zaXplKCksbnVtRmFjZXNTdHIsMCwKLSAgLy9udW1GYWNlc1N0
ci5zaXplKCkpIT0wKQotICB3aGlsZSAoc3RyY21wKHRlbXAuc3Vic3RyKDAsbnVtRmFjZXNTdHIu
c2l6ZSgpKS5jX3N0cigpLCBudW1GYWNlc1N0ci5jX3N0cigpKSkKLSAgICB7Ci0gICAgdGVtcFN0
cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5n
U3RydWN0LT52YWx1ZTsKLSAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICBmby5TZXRW
YWx1ZShpLCBmYWNlT3duZXJbaV0pOwogICAgIH0KIAotICAvL3JlYWQgZmFjZSBvd25lcnMgaW50
byBpbnQgYXJyYXkKLSAgZmFjZU5laWdoYm9yLT5TZXROdW1iZXJPZlZhbHVlcyh0aGlzLT5OdW1G
YWNlcyk7CisgIC8vYWRkIHRoZSBmYWNlIG51bWJlcnMgdG8gdGhlIGNvcnJlY3QgY2VsbAorICAv
LyBiYXNlZCBvbiBUZXJyeSdzIGNvZGUgYW5kCisgIC8vIHNyYy9PcGVuRk9BTS9tZXNoZXMvcHJp
bWl0aXZlTWVzaC9wcmltaXRpdmVNZXNoQ2VsbHMuQwogCi0gIC8vYmluYXJ5IGRhdGEKLSAgaWYo
YmluYXJ5V3JpdGVGb3JtYXQpCisgIC8vZmluZCB0aGUgbnVtYmVyIG9mIGNlbGxzCisgIGludCBu
Q2VsbHMgPSAtMTsKKyAgZm9yKHNpemVfdCBpID0gMDsgaSA8IG5GYWNlczsgaSsrKQogICAgIHsK
LSAgICBpbnB1dC0+Z2V0KCk7IC8vcGFyZW50aGVzaXMKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwg
dGhpcy0+TnVtRmFjZXM7IGkrKykKKyAgICBpZihuQ2VsbHMgPCBmYWNlT3duZXJbaV0pIC8vIG1h
eChuQ2VsbHMsIGZhY2VPd25lcltpXSkKKyAgICAgIHsKKyAgICAgIG5DZWxscyA9IGZhY2VPd25l
cltpXTsKKyAgICAgIH0KKyAgICBpZihuQ2VsbHMgPCBmYWNlTmVpZ2hib3JbaV0pIC8vIG1heChu
Q2VsbHMsIGZhY2VOZWlnaGJvcltpXSkKICAgICAgIHsKLSAgICAgIGlucHV0LT5yZWFkKChjaGFy
ICopICZmYWNlVmFsdWUsIHNpemVvZihpbnQpKTsKLSAgICAgIGZhY2VOZWlnaGJvci0+U2V0VmFs
dWUoaSwgZmFjZVZhbHVlKTsKKyAgICAgIG5DZWxscyA9IGZhY2VOZWlnaGJvcltpXTsKICAgICAg
IH0KICAgICB9CisgIG5DZWxscysrOwogCi0gIC8vYXNjaWkgZGF0YQotICBlbHNlCisgIGlmKG5D
ZWxscyA9PSAwKQogICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShp
bnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0
ZW1wU3RyaW5nU3RydWN0Oy8vdGhyb3cgYXdheSAoCi0gICAgLy9yZWFkIGZhY2Ugb3duZXJzIGlu
dG8gaW50IGFycmF5Ci0gICAgZm9yKGludCBpID0gMDsgaSA8IHRoaXMtPk51bUZhY2VzOyBpKysp
Ci0gICAgICB7Ci0gICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7
Ci0gICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgICBkZWxldGUgdGVt
cFN0cmluZ1N0cnVjdDsKLQotICAgICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gICAgICB0b2tlbml6
ZXIgPDwgdGVtcDsKLSAgICAgIHRva2VuaXplciA+PiBmYWNlVmFsdWU7Ci0gICAgICBmYWNlTmVp
Z2hib3ItPlNldFZhbHVlKGksIGZhY2VWYWx1ZSk7Ci0gICAgICB9CisgICAgdnRrV2FybmluZ01h
Y3JvKDw8IlRoZSBtZXNoIGNvbnRhaW5zIG5vIGNlbGxzIik7CiAgICAgfQotICAvL05vIG5lZWQg
dG8gcmVjYWx1bGF0ZSB0aGUgTnVtYmVyIG9mIENlbGxzCi0gIHRoaXMtPkZhY2VzTmVpZ2hib3JD
ZWxsLT52YWx1ZS5yZXNpemUodGhpcy0+TnVtQ2VsbHMpOwogCi0gIC8vYWRkIGZhY2UgbnVtYmVy
IHRvIGNvcnJlY3QgY2VsbAotICBpbnQgdGVtcENlbGxJZDsKLSAgZm9yKGludCBqID0gMDsgaiA8
IHRoaXMtPk51bUZhY2VzOyBqKyspCisgIHRoaXMtPk51bUNlbGxzID0gbkNlbGxzOworCisgIC8v
IGNvdW50IG51bWJlciBvZiBmYWNlcyBwZXIgY2VsbAorICB2dGtzdGQ6OnZlY3RvcjxpbnQ+IG5D
ZWxsRmFjZXMobkNlbGxzLCAwKTsKKyAgZm9yKHNpemVfdCBpID0gMDsgaSA8IG5GYWNlczsgaSsr
KQogICAgIHsKLSAgICB0ZW1wQ2VsbElkID0gZmFjZU5laWdoYm9yLT5HZXRWYWx1ZShqKTsKLSAg
ICBpZih0ZW1wQ2VsbElkICE9IC0xKQorICAgIC8vIHNpbXBsZUZvYW0vcGl0ekRhaWx5M0Jsb2Nr
cyBoYXMgZmFjZXMgd2l0aCBvd25lciBjZWxsIG51bWJlciAtMQorICAgIGlmKGZhY2VPd25lcltp
XSA+PSAwKQorICAgICAgeworICAgICAgbkNlbGxGYWNlc1tmYWNlT3duZXJbaV1dKys7CisgICAg
ICB9CisgICAgaWYoZmFjZU5laWdoYm9yW2ldID49IDApCiAgICAgICB7Ci0gICAgICB0aGlzLT5G
YWNlc05laWdoYm9yQ2VsbC0+dmFsdWVbdGVtcENlbGxJZF0ucHVzaF9iYWNrKGopOworICAgICAg
bkNlbGxGYWNlc1tmYWNlTmVpZ2hib3JbaV1dKys7CiAgICAgICB9CiAgICAgfQogCi0gIGZhY2VO
ZWlnaGJvci0+RGVsZXRlKCk7Ci0gIGlucHV0LT5jbG9zZSgpOwotICBkZWxldGUgaW5wdXQ7Ci0g
IHZ0a0RlYnVnTWFjcm8oPDwiTmVpZ2hib3IgZmlsZSByZWFkIik7Ci0gIHJldHVybjsKLX0KLQot
Ly8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgotLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OlBv
cHVsYXRlUG9seU1lc2hEaXJBcnJheXMKLS8vCi0vLyAgUHVycG9zZToKLS8vICBjcmVhdGUgYSBM
b29rdXAgVGFibGUgY29udGFpbmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIHBvaW50cwotLy8gIGFu
ZCBmYWNlcyBmaWxlcyBmb3IgZWFjaCB0aW1lIHN0ZXBzIG1lc2gKLS8vCi0vLyAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCi12b2lkIHZ0a09wZW5GT0FNUmVhZGVyOjpQb3B1bGF0ZVBvbHlNZXNoRGlyQXJy
YXlzKCkKLXsKLSAgdnRrRGVidWdNYWNybyg8PCJDcmVhdGUgbGlzdCBvZiBwb2ludHMvZmFjZXMg
ZmlsZSBkaXJlY3RvcmllcyIpOwotICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gcGF0aDsKLSAg
dnRrc3lzX2lvczo6c3RyaW5nc3RyZWFtIHRpbWVTdGVwOwotICBib29sIGZhY2VzRm91bmQ7Ci0g
IGJvb2wgcG9pbnRzRm91bmQ7Ci0gIGJvb2wgcG9seU1lc2hGb3VuZDsKLQotICAvL2ludGlhbGl6
ZSBzaXplIHRvIG51bWJlciBvZiB0aW1lc3RlcHMKLSAgdGhpcy0+UG9seU1lc2hQb2ludHNEaXIt
PnZhbHVlLnJlc2l6ZSh0aGlzLT5OdW1iZXJPZlRpbWVTdGVwcyk7Ci0gIHRoaXMtPlBvbHlNZXNo
RmFjZXNEaXItPnZhbHVlLnJlc2l6ZSh0aGlzLT5OdW1iZXJPZlRpbWVTdGVwcyk7Ci0KLSAgLy9s
b29wIHRocm91Z2ggZWFjaCB0aW1lc3RlcAotICBmb3IoaW50IGkgPSAwOyBpIDwgdGhpcy0+TnVt
YmVyT2ZUaW1lU3RlcHM7IGkrKykKKyAgLy8gc2l6ZSBjZWxsRmFjZXMKKyAgdnRrc3RkOjp2ZWN0
b3I8dnRrc3RkOjp2ZWN0b3I8ZmFjZT4gPiYgY2VsbEZhY2VzID0gZmFjZXNPZkNlbGwtPnZhbHVl
OworICBjZWxsRmFjZXMucmVzaXplKG5DZWxscyk7CisgIGZvcihpbnQgaSA9IDA7IGkgPCBuQ2Vs
bHM7IGkrKykKICAgICB7Ci0gICAgcG9seU1lc2hGb3VuZCA9IGZhbHNlOwotICAgIGZhY2VzRm91
bmQgPSBmYWxzZTsKLSAgICBwb2ludHNGb3VuZCA9IGZhbHNlOwotCi0gICAgLy9jcmVhdGUgdGhl
IHBhdGggdG8gdGhlIHRpbWVzdGVwCi0gICAgcGF0aC5jbGVhcigpOwotICAgIHRpbWVTdGVwLmNs
ZWFyKCk7Ci0gICAgdGltZVN0ZXAgPDwgU3RlcHNbaV07Ci0gICAgcGF0aCA8PCB0aGlzLT5QYXRo
UHJlZml4LT52YWx1ZSA8PHRpbWVTdGVwLnN0cigpIDw8ICIvIjsKKyAgICBjZWxsRmFjZXNbaV0u
cmVzaXplKG5DZWxsRmFjZXNbaV0pOworICAgIH0KIAotICAgIC8vZ2V0IHRoZSBudW1iZXIgb2Yg
ZmlsZXMKLSAgICB2dGtEaXJlY3RvcnkgKiBkaXJlY3RvcnkgPSB2dGtEaXJlY3Rvcnk6Ok5ldygp
OwotICAgIGRpcmVjdG9yeS0+T3BlbihwYXRoLnN0cigpLmNfc3RyKCkpOwotICAgIGludCBudW1G
aWxlcyA9IGRpcmVjdG9yeS0+R2V0TnVtYmVyT2ZGaWxlcygpOwotICAgIC8vTG9vayBmb3IgcG9s
eU1lc2ggRGlyCi0gICAgZm9yKGludCBqID0gMDsgaiA8IG51bUZpbGVzOyBqKyspCisgIC8vYWRk
IGZhY2UgbnVtYmVycyB0byBjb3JyZWN0IGNlbGwKKyAgZm9yKHNpemVfdCBpID0gMDsgaSA8IG5G
YWNlczsgaSsrKQorICAgIHsKKyAgICBjb25zdCBpbnQgb3duZXJDZWxsID0gZmFjZU93bmVyW2ld
OyAvLyBtdXN0IGJlIGEgc2lnbmVkIGludAorICAgIC8vIHNpbXBsZUZvYW0vcGl0ekRhaWx5M0Js
b2NrcyBoYXMgZmFjZXMgd2l0aCBvd25lciBjZWxsIG51bWJlciAtMQorICAgIGlmKG93bmVyQ2Vs
bCA+PSAwKQogICAgICAgewotICAgICAgdnRrc3RkOjpzdHJpbmcgdGVtcEZpbGUoZGlyZWN0b3J5
LT5HZXRGaWxlKGopKTsKLSAgICAgIGlmKHRlbXBGaWxlLmZpbmQoInBvbHlNZXNoIikgIT0gdnRr
c3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHsKLSAgICAgICAgcG9seU1lc2hGb3VuZCA9IHRy
dWU7Ci0KLSAgICAgICAgcGF0aCA8PCAicG9seU1lc2gvIjsKLQotICAgICAgICAvL2dldCBudW1i
ZXIgb2YgZmlsZXMgaW4gdGhlIHBvbHlNZXNoIGRpcgotICAgICAgICB2dGtEaXJlY3RvcnkgKiBw
b2x5TWVzaERpcmVjdG9yeSA9IHZ0a0RpcmVjdG9yeTo6TmV3KCk7Ci0gICAgICAgIHBvbHlNZXNo
RGlyZWN0b3J5LT5PcGVuKHBhdGguc3RyKCkuY19zdHIoKSk7Ci0gICAgICAgIGludCBudW1Qb2x5
TWVzaEZpbGVzID0gcG9seU1lc2hEaXJlY3RvcnktPkdldE51bWJlck9mRmlsZXMoKTsKLSAgICAg
ICAgLy9Mb29rIGZvciBwb2ludHMvZmFjZXMgZmlsZXMKLSAgICAgICAgZm9yKGludCBrID0gMDsg
ayA8IG51bVBvbHlNZXNoRmlsZXM7IGsrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgdnRrc3Rk
OjpzdHJpbmcgdGVtcEZpbGUyID0gdnRrc3RkOjpzdHJpbmcocG9seU1lc2hEaXJlY3RvcnktPgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEZp
bGUoaykpOwotICAgICAgICAgIGlmKHRlbXBGaWxlMi5maW5kKCJwb2ludHMiKSAhPSB2dGtzdGQ6
OnN0cmluZzo6bnBvcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMtPlBvbHlNZXNo
UG9pbnRzRGlyLT52YWx1ZVtpXSA9IHRpbWVTdGVwLnN0cigpOwotICAgICAgICAgICAgcG9pbnRz
Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYodGVtcEZpbGUy
LmZpbmQoImZhY2VzIikgIT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICB0aGlzLT5Qb2x5TWVzaEZhY2VzRGlyLT52YWx1ZVtpXSA9IHRpbWVTdGVwLnN0
cigpOwotICAgICAgICAgICAgZmFjZXNGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgfQotCi0gICAgICAgIC8vaWYgdGhlcmUgaXMgbm8gcG9pbnRzIG9yIGZhY2VzIGZvdW5k
IGluIHRoaXMgdGltZXN0ZXAKLSAgICAgICAgLy9zZXQgaXQgZXF1YWwgdG8gcHJldmlvdXMgdGlt
ZSBzdGVwIGlmIG5vIHByZXZpb3VzCi0gICAgICAgIC8vc2V0IGl0IGVxdWFsIHRvICJjb25zdGFu
dCIgZGlyCi0gICAgICAgIGlmKCFwb2ludHNGb3VuZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAg
aWYoaSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hQb2lu
dHNEaXItPnZhbHVlW2ldID0KLSAgICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hQb2ludHNEaXIt
PnZhbHVlW2ktMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hQb2ludHNEaXItPnZhbHVlW2ldID0gdnRrc3Rk
OjpzdHJpbmcoImNvbnN0YW50Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg
ICBpZighZmFjZXNGb3VuZCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgaWYoaSAhPSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+dmFsdWVbaV0g
PQotICAgICAgICAgICAgICB0aGlzLT5Qb2x5TWVzaEZhY2VzRGlyLT52YWx1ZVtpLTFdOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHRo
aXMtPlBvbHlNZXNoRmFjZXNEaXItPnZhbHVlW2ldID0gdnRrc3RkOjpzdHJpbmcoImNvbnN0YW50
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgIHBvbHlNZXNoRGlyZWN0
b3J5LT5EZWxldGUoKTsKLSAgICAgICAgYnJlYWs7ICAvL2ZvdW5kIC0gc3RvcCBsb29raW5nCi0g
ICAgICAgIH0KKyAgICAgIGZhY2UmIG93bmVyQ2VsbEZhY2UgPSBjZWxsRmFjZXNbb3duZXJDZWxs
XVstLW5DZWxsRmFjZXNbb3duZXJDZWxsXV07CisgICAgICBvd25lckNlbGxGYWNlLmZhY2VJbmRl
eCA9IGk7CisgICAgICBvd25lckNlbGxGYWNlLm5laWdoYm9yRmFjZSA9IGZhbHNlOwogICAgICAg
fQogCi0gICAgLy9pZiB0aGVyZSBpcyBubyBwb2x5TWVzaCBkaXIKLSAgICAvL3NldCAgaXQgZXF1
YWwgdG8gcHJldiB0aW1lc3RlcAotICAgIC8vaWYgbm8gcHJldiBzZXQgdG8gImNvbnN0YW50IiBk
aXIKLSAgICBpZighcG9seU1lc2hGb3VuZCkKKyAgICBjb25zdCBpbnQgbmVpZ2hib3JDZWxsID0g
ZmFjZU5laWdoYm9yW2ldOyAvLyBtdXN0IGJlIGEgc2lnbmVkIGludAorICAgIGlmKG5laWdoYm9y
Q2VsbCA+PSAwKQogICAgICAgewotICAgICAgaWYoaSAhPSAwKQotICAgICAgICB7Ci0gICAgICAg
IC8vc2V0IHBvaW50cy9mYWNlcyBsb2NhdGlvbiB0byBwcmV2aW91cyB0aW1lc3RlcHMgdmFsdWUK
LSAgICAgICAgdGhpcy0+UG9seU1lc2hQb2ludHNEaXItPnZhbHVlW2ldID0gdGhpcy0+UG9seU1l
c2hQb2ludHNEaXItPnZhbHVlW2ktMV07Ci0gICAgICAgIHRoaXMtPlBvbHlNZXNoRmFjZXNEaXIt
PnZhbHVlW2ldID0gdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+dmFsdWVbaS0xXTsKLSAgICAgICAg
fQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIC8vc2V0IHBvaW50cy9mYWNlcyB0byBj
b25zdGFudAotICAgICAgICB0aGlzLT5Qb2x5TWVzaFBvaW50c0Rpci0+dmFsdWVbaV0gPSB2dGtz
dGQ6OnN0cmluZygiY29uc3RhbnQiKTsKLSAgICAgICAgdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+
dmFsdWVbaV0gPSB2dGtzdGQ6OnN0cmluZygiY29uc3RhbnQiKTsKLSAgICAgICAgfQorICAgICAg
ZmFjZSYgbmVpZ2hib3JDZWxsRmFjZQorICAgICAgICA9IGNlbGxGYWNlc1tuZWlnaGJvckNlbGxd
Wy0tbkNlbGxGYWNlc1tuZWlnaGJvckNlbGxdXTsKKyAgICAgIG5laWdoYm9yQ2VsbEZhY2UuZmFj
ZUluZGV4ID0gaTsKKyAgICAgIG5laWdoYm9yQ2VsbEZhY2UubmVpZ2hib3JGYWNlID0gdHJ1ZTsK
ICAgICAgIH0KLSAgICBkaXJlY3RvcnktPkRlbGV0ZSgpOwogICAgIH0KIAotICB2dGtEZWJ1Z01h
Y3JvKDw8IlBvaW50cy9mYWNlcyBsaXN0IGNyZWF0ZWQiKTsKLSAgcmV0dXJuOworICB2dGtEZWJ1
Z01hY3JvKDw8Ik93bmVyIGZpbGUgcmVhZCIpOworICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OkdldERhdGFU
eXBlCisvLyAgTWV0aG9kOiB2dGtPcGVuRk9BTVJlYWRlcjo6UG9wdWxhdGVQb2x5TWVzaERpckFy
cmF5cwogLy8KIC8vICBQdXJwb3NlOgotLy8gIGRldGVybWluZXMgd2hldGhlciBhIHZhcmlhYmxl
IGlzIGEgdm9sdW1lIHNjYWxhciwgdmVjdG9yIG9yIG5laXRoZXIKLS8vICBmb3IgbWV0YSBkYXRh
CisvLyAgY3JlYXRlIGEgTG9va3VwIFRhYmxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIG9mIHRo
ZSBwb2ludHMKKy8vICBhbmQgZmFjZXMgZmlsZXMgZm9yIGVhY2ggdGltZSBzdGVwcyBtZXNoCiAv
LwogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgotY29uc3QgY2hhciAqIHZ0a09wZW5GT0FNUmVhZGVy
OjpHZXREYXRhVHlwZShjb25zdCBjaGFyICogcGF0aEluLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZmlsZU5hbWVJbikKK3ZvaWQgdnRrT3BlbkZP
QU1SZWFkZXI6OlBvcHVsYXRlUG9seU1lc2hEaXJBcnJheXMoKQogewotICB2dGtzdGQ6OnN0cmlu
ZyBwYXRoKHBhdGhJbik7Ci0gIHZ0a3N0ZDo6c3RyaW5nIGZpbGVOYW1lKGZpbGVOYW1lSW4pOwot
ICB2dGtzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHBhdGgrIi8iK2ZpbGVOYW1lOwotICB2dGtEZWJ1
Z01hY3JvKDw8IkdldCBkYXRhIHR5cGUgb2Y6ICI8PGZpbGVQYXRoLmNfc3RyKCkpOwotICBzdGRT
dHJpbmcqIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gIGlmc3RyZWFtICogaW5wdXQgPSBuZXcgaWZzdHJl
YW0oZmlsZVBhdGguY19zdHIoKSwgaW9zOjppbiBWVEtfSU9TX05PQ1JFQVRFKTsKLSAgLy9tYWtl
IHN1cmUgZmlsZSBleGlzdHMKLSAgaWYoaW5wdXQtPmZhaWwoKSkKLSAgICB7Ci0gICAgaW5wdXQt
PmNsb3NlKCk7Ci0gICAgZGVsZXRlIGlucHV0OwotICAgIHJldHVybiAiTnVsbCI7Ci0gICAgfQot
Ci0gIHZ0a3N0ZDo6c3RyaW5nIHRlbXA7Ci0gIHZ0a3N0ZDo6c3RyaW5nIGZvYW1DbGFzczsKLSAg
dnRrc3lzX2lvczo6c3RyaW5nc3RyZWFtIHRva2VuaXplcjsKLSAgaW50IG9wZW5lZDsKLQotICAv
L3NlZSBpZiBmaWxlTmFtZSBpcyBhIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIHZ0a0RpcmVjdG9yeSAq
IGRpcmVjdG9yeSA9IHZ0a0RpcmVjdG9yeTo6TmV3KCk7Ci0gIG9wZW5lZCA9IGRpcmVjdG9yeS0+
T3BlbihmaWxlUGF0aC5jX3N0cigpKTsKLSAgZGlyZWN0b3J5LT5EZWxldGUoKTsKLSAgaWYob3Bl
bmVkKQotICAgIHsKLSAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgaW5wdXQ7Ci0gICAg
cmV0dXJuICJEaXJlY3RvcnkiOwotICAgIH0KKyAgdnRrRGVidWdNYWNybyg8PCJDcmVhdGUgbGlz
dCBvZiBwb2ludHMvZmFjZXMgZmlsZSBkaXJlY3RvcmllcyIpOwogCi0gIC8vZmluZCBjbGFzcyBl
bnRyeQotICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAg
PSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0g
IHdoaWxlKHRlbXAuZmluZCgiY2xhc3MiKSA9PSB2dGtzdGQ6OnN0cmluZzo6bnBvcyAmJiAhaW5w
dXQtPmVvZigpKQotICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShp
bnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0
ZW1wU3RyaW5nU3RydWN0OwotICAgIH0KKyAgLy9pbnRpYWxpemUgc2l6ZSB0byBudW1iZXIgb2Yg
dGltZXN0ZXBzCisgIHRoaXMtPlBvbHlNZXNoUG9pbnRzRGlyLT52YWx1ZS5yZXNpemUodGhpcy0+
TnVtYmVyT2ZUaW1lU3RlcHMpOworICB0aGlzLT5Qb2x5TWVzaEZhY2VzRGlyLT52YWx1ZS5yZXNp
emUodGhpcy0+TnVtYmVyT2ZUaW1lU3RlcHMpOwogCi0gIC8vcmV0dXJuIHR5cGUKLSAgaWYoIWlu
cHV0LT5lb2YoKSkKKyAgLy9sb29wIHRocm91Z2ggZWFjaCB0aW1lc3RlcAorICBmb3IoaW50IGkg
PSAwOyBpIDwgdGhpcy0+TnVtYmVyT2ZUaW1lU3RlcHM7IGkrKykKICAgICB7Ci0gICAgdGVtcC5l
cmFzZSh0ZW1wLmJlZ2luKCkrdGVtcC5maW5kKCI7IikpOwotICAgIC8vUEFSU0UgT1VUIENMQVNT
IFRZUEUKLSAgICB0b2tlbml6ZXIgPDwgdGVtcDsKLSAgICAvL3doaWxlKHRva2VuaXplciA+PiBm
b2FtQ2xhc3MpOwotICAgIHdoaWxlKCF0b2tlbml6ZXIuZW9mKCkpCi0gICAgICB7Ci0gICAgICB0
b2tlbml6ZXIgPj4gZm9hbUNsYXNzOworICAgIC8vY3JlYXRlIHRoZSBwYXRoIHRvIHRoZSB0aW1l
c3RlcAorICAgIHZ0a1N0ZFN0cmluZyBwb2x5TWVzaFBhdGgKKyAgICAgID0gKnRoaXMtPlBhdGhQ
cmVmaXggKyB0aGlzLT5UaW1lTmFtZXMtPkdldFZhbHVlKGkpICsgIi9wb2x5TWVzaC8iOworICAg
IHZ0a0ZvYW1JT29iamVjdCBpbzsKKworICAgIGlmKGlvLm9wZW4ocG9seU1lc2hQYXRoICsgImZh
Y2VzIikgfHwgaW8ub3Blbihwb2x5TWVzaFBhdGggKyAiZmFjZXMuZ3oiKSkKKyAgICAgIHsKKyAg
ICAgIGlvLmNsb3NlKCk7CisgICAgICAvL3NldCBwb2ludHMvZmFjZXMgbG9jYXRpb24gdG8gY3Vy
cmVudCB0aW1lc3RlcHMgdmFsdWUKKyAgICAgIHRoaXMtPlBvbHlNZXNoRmFjZXNEaXItPnZhbHVl
W2ldID0gdGhpcy0+VGltZU5hbWVzLT5HZXRWYWx1ZShpKTsKICAgICAgIH0KLSAgICAvL3JldHVy
biBzY2FsYXIsIHZlY3Rvciwgb3IgaW52YWxpZAotICAgIGlmKGZvYW1DbGFzcyA9PSJ2b2xTY2Fs
YXJGaWVsZCIpCisgICAgZWxzZQogICAgICAgewotICAgICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAg
ICBkZWxldGUgaW5wdXQ7Ci0gICAgICByZXR1cm4gIlNjYWxhciI7CisgICAgICBpZihpICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgLy9zZXQgcG9pbnRzL2ZhY2VzIGxvY2F0aW9uIHRvIHByZXZp
b3VzIHRpbWVzdGVwcyB2YWx1ZQorICAgICAgICB0aGlzLT5Qb2x5TWVzaEZhY2VzRGlyLT52YWx1
ZVtpXSA9IHRoaXMtPlBvbHlNZXNoRmFjZXNEaXItPnZhbHVlW2ktMV07CisgICAgICAgIH0KKyAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAvL3NldCBwb2ludHMvZmFjZXMgdG8gY29uc3Rh
bnQKKyAgICAgICAgdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+dmFsdWVbaV0gPSB2dGtTdGRTdHJp
bmcoImNvbnN0YW50Iik7CisgICAgICAgIH0KICAgICAgIH0KLSAgICBlbHNlIGlmIChmb2FtQ2xh
c3MgPT0idm9sVmVjdG9yRmllbGQiKQorCisgICAgaWYoaW8ub3Blbihwb2x5TWVzaFBhdGggKyAi
cG9pbnRzIikgfHwgaW8ub3Blbihwb2x5TWVzaFBhdGggKyAicG9pbnRzLmd6IikpCiAgICAgICB7
Ci0gICAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICAgIGRlbGV0ZSBpbnB1dDsKLSAgICAgIHJldHVy
biAiVmVjdG9yIjsKKyAgICAgIGlvLmNsb3NlKCk7CisgICAgICAvL3NldCBwb2ludHMvZmFjZXMg
bG9jYXRpb24gdG8gY3VycmVudCB0aW1lc3RlcHMgdmFsdWUKKyAgICAgIHRoaXMtPlBvbHlNZXNo
UG9pbnRzRGlyLT52YWx1ZVtpXSA9IHRoaXMtPlRpbWVOYW1lcy0+R2V0VmFsdWUoaSk7CiAgICAg
ICB9CiAgICAgZWxzZQogICAgICAgewotICAgICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgICBkZWxl
dGUgaW5wdXQ7Ci0gICAgICByZXR1cm4gIkludmFsaWQiOworICAgICAgaWYoaSAhPSAwKQorICAg
ICAgICB7CisgICAgICAgIC8vc2V0IHBvaW50cy9mYWNlcyBsb2NhdGlvbiB0byBwcmV2aW91cyB0
aW1lc3RlcHMgdmFsdWUKKyAgICAgICAgdGhpcy0+UG9seU1lc2hQb2ludHNEaXItPnZhbHVlW2ld
CisgICAgICAgICAgPSB0aGlzLT5Qb2x5TWVzaFBvaW50c0Rpci0+dmFsdWVbaS0xXTsKKyAgICAg
ICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIC8vc2V0IHBvaW50cy9mYWNlcyB0
byBjb25zdGFudAorICAgICAgICB0aGlzLT5Qb2x5TWVzaFBvaW50c0Rpci0+dmFsdWVbaV0gPSB2
dGtTdGRTdHJpbmcoImNvbnN0YW50Iik7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0KLSAg
Ly9pZiB0aGUgZmlsZSBmb3JtYXQgaXMgd3JvbmcgcmV0dXJuIGludmFsaWQKLSAgZWxzZQotICAg
IHsKLSAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgaW5wdXQ7Ci0gICAgcmV0dXJuICJp
bnZhbGlkIjsKLSAgICB9CisgIHZ0a0RlYnVnTWFjcm8oPDwiUG9pbnRzL2ZhY2VzIGxpc3QgY3Jl
YXRlZCIpOworICByZXR1cm47CiB9CiAKIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vICBNZXRo
b2Q6IHZ0a09wZW5GT0FNUmVhZGVyOjpHZXRJbnRlcm5hbFZhcmlhYmxlQXRUaW1lc3RlcAorLy8g
IE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OkdldFZhcmlhYmxlQXRUaW1lc3RlcAogLy8KIC8v
ICBQdXJwb3NlOgotLy8gIHJldHVybnMgdGhlIHZhbHVlcyBmb3IgYSByZXF1ZXN0IHZhcmlhYmxl
IGZvciB0aGUgaW50ZXJuYWwgbWVzaAorLy8gIHJldHVybnMgdGhlIHZhbHVlcyBmb3IgYSByZXF1
ZXN0IHZhcmlhYmxlIGZvciB0aGUgaW50ZXJuYWwgYW5kIGJvdW5kYXJ5CisvLyAgbWVzaGVzCiAv
LwogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgotdnRrRG91YmxlQXJyYXkgKiB2dGtPcGVuRk9BTVJl
YWRlcjo6R2V0SW50ZXJuYWxWYXJpYWJsZUF0VGltZXN0ZXAKLSAgICAgICAgICAgICAgICAgKGNv
bnN0IGNoYXIgKiB2YXJOYW1lSW4sIGludCB0aW1lU3RhdGUpCitib29sIHZ0a09wZW5GT0FNUmVh
ZGVyOjpHZXRWYXJpYWJsZUF0VGltZXN0ZXAoCisgIHZ0a1Vuc3RydWN0dXJlZEdyaWQqIGludGVy
bmFsTWVzaCwgdW5zdHJ1Y3R1cmVkR3JpZFZlY3RvciogYm91bmRhcnlNZXNoLAorICB2dGtGb2Ft
RGljdCogYm91bmRhcnlEaWN0UHRyLCBjb25zdCBjaGFyKiB2YXJOYW1lSW4sIGludCB0aW1lU3Rh
dGUpCiB7Ci0gIHZ0a3N0ZDo6c3RyaW5nIHZhck5hbWUodmFyTmFtZUluKTsKLSAgdnRrc3lzX2lv
czo6c3RyaW5nc3RyZWFtIHZhclBhdGg7Ci0gIHZhclBhdGggPDwgdGhpcy0+UGF0aFByZWZpeC0+
dmFsdWUgPDwgdGhpcy0+U3RlcHNbdGltZVN0YXRlXSA8PCAiLyIgPDwgdmFyTmFtZTsKLSAgdnRr
RGVidWdNYWNybyg8PCJHZXQgaW50ZXJuYWwgdmFyaWFibGU6ICI8PHZhclBhdGguc3RyKCkuY19z
dHIoKSk7Ci0gIHZ0a0RvdWJsZUFycmF5ICpkYXRhID0gdnRrRG91YmxlQXJyYXk6Ok5ldygpOwor
ICB2dGtTdGRTdHJpbmcgdmFyUGF0aCA9ICp0aGlzLT5QYXRoUHJlZml4CisgICAgKyB0aGlzLT5U
aW1lTmFtZXMtPkdldFZhbHVlKHRpbWVTdGF0ZSkgKyAiLyIgKyB2dGtTdGRTdHJpbmcodmFyTmFt
ZUluKTsKKyAgdnRrRGVidWdNYWNybyg8PCJHZXQgdmFyaWFibGU6ICI8PHZhclBhdGguY19zdHIo
KSk7CiAKLSAgdnRrc3RkOjpzdHJpbmcgdGVtcDsKLSAgc3RkU3RyaW5nKiB0ZW1wU3RyaW5nU3Ry
dWN0OwotICBib29sIGJpbmFyeVdyaXRlRm9ybWF0OwotICBpZnN0cmVhbSAqIGlucHV0ID0gbmV3
IGlmc3RyZWFtKHZhclBhdGguc3RyKCkuY19zdHIoKSwgaW9zOjppbiBWVEtfSU9TX05PQ1JFQVRF
KTsKLSAgLy9tYWtlIHN1cmUgZmlsZSBleGlzdHMKLSAgaWYoaW5wdXQtPmZhaWwoKSkKKyAgLy8g
b3BlbiB0aGUgZmlsZQorICB2dGtGb2FtSU9vYmplY3QgaW87CisgIGlmKCFpby5vcGVuKHZhclBh
dGgpKQogICAgIHsKLSAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgaW5wdXQ7Ci0gICAg
cmV0dXJuIGRhdGE7CisgICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciBvcGVuaW5nICIgPDwgaW8u
ZmlsZU5hbWUoKS5jX3N0cigpIDw8ICI6ICIKKyAgICAgIDw8IGlvLmVycm9yKCkuc3RyKCkuY19z
dHIoKSk7CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAvL2RldGVybWluZSBpZiBmaWxl
IGlzIGJpbmFyeSBvciBhc2NpaQotICB3aGlsZSh0ZW1wLmZpbmQoImZvcm1hdCIpID09IHZ0a3N0
ZDo6c3RyaW5nOjpucG9zKQorICAvLyBpZiB0aGUgdmFyaWFibGUgaXMgZGlzYWJsZWQgb24gc2Vs
ZWN0aW9uIHBhbmVsIHRoZW4gc2tpcCBpdAorICBpZih0aGlzLT5DZWxsRGF0YUFycmF5U2VsZWN0
aW9uLT5BcnJheUV4aXN0cyhpby5vYmplY3ROYW1lKCkuY19zdHIoKSkKKyAgICAmJiAhdGhpcy0+
Q2VsbERhdGFBcnJheVNlbGVjdGlvbi0+QXJyYXlJc0VuYWJsZWQoaW8ub2JqZWN0TmFtZSgpLmNf
c3RyKCkpKQogICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1
dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1w
U3RyaW5nU3RydWN0OworICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgaW5wdXQtPmNsb3NlKCk7
CiAKLSAgLy9yZW9wZW4gZmlsZSBpbiBjb3JyZWN0IGZvcm1hdAotICBpZih0ZW1wLmZpbmQoImJp
bmFyeSIpICE9IHZ0a3N0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSNpZmRlZiBfV0lOMzIKLSAg
ICBpbnB1dC0+b3Blbih2YXJQYXRoLnN0cigpLmNfc3RyKCksIGlvczo6YmluYXJ5IHwgaW9zOjpp
biBWVEtfSU9TX05PQ1JFQVRFKTsKLSNlbHNlCi0gICAgaW5wdXQtPm9wZW4odmFyUGF0aC5zdHIo
KS5jX3N0cigpLCBpb3M6OmluIFZUS19JT1NfTk9DUkVBVEUpOwotI2VuZGlmCi0gICAgYmluYXJ5
V3JpdGVGb3JtYXQgPSB0cnVlOwotICAgIH0KLSAgZWxzZQorICAvLyByZWFkIHRoZSBmaWVsZCBm
aWxlIGludG8gZGljdGlvbmFyeQorICB2dGtGb2FtRGljdCBkaWN0OworICBpZighZGljdC5yZWFk
KGlvKSkKICAgICB7Ci0gICAgaW5wdXQtPm9wZW4odmFyUGF0aC5zdHIoKS5jX3N0cigpLGlvczo6
aW4pOwotICAgIGJpbmFyeVdyaXRlRm9ybWF0ID0gZmFsc2U7CisgICAgdnRrRXJyb3JNYWNybyg8
PCJFcnJvciByZWFkaW5nIGxpbmUgIiA8PCBpby5saW5lTnVtYmVyKCkKKyAgICAgIDw8ICIgb2Yg
IiA8PCBpby5maWxlTmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCBpby5lcnJvcigpLnN0cigpLmNf
c3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgdnRrc3RkOjpzdHJpbmcgZm9h
bUNsYXNzOwotICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gdG9rZW5pemVyOwotICBkb3VibGUg
dmFsdWU7Ci0KLSAgLy9maW5kIGNsYXNzCi0gIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRM
aW5lKGlucHV0KTsKLSAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICBkZWxldGUg
dGVtcFN0cmluZ1N0cnVjdDsKLQotICB3aGlsZSh0ZW1wLmZpbmQoImNsYXNzIikgPT0gdnRrc3Rk
OjpzdHJpbmc6Om5wb3MpCisgIGlmKGRpY3QudHlwZSgpICE9IHZ0a0ZvYW1EaWN0OjpESUNUSU9O
QVJZKQogICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7
Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3Ry
aW5nU3RydWN0OworICAgIHZ0a0Vycm9yTWFjcm8oPDwiRmlsZSAiIDw8IGlvLmZpbGVOYW1lKCku
Y19zdHIoKQorICAgICAgPDwgImlzIG5vdCB2YWxpZCBhcyBhIGZpZWxkIGZpbGUiKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICB0ZW1wLmVyYXNlKHRlbXAuYmVnaW4oKSt0ZW1wLmZpbmQo
IjsiKSk7Ci0gIHRva2VuaXplciA8PCB0ZW1wOwotICAvL3doaWxlKHRva2VuaXplciA+PiBmb2Ft
Q2xhc3MpOwotICB3aGlsZSghdG9rZW5pemVyLmVvZigpKQorCisgIC8vIHNldCBpbnRlcm5hbCB2
YWx1ZXMKKyAgdnRrRG91YmxlQXJyYXkqIGlEYXRhOworICB2dGtGb2FtRW50cnkmIGlFbnRyeSA9
IGRpY3QubG9va3VwKCJpbnRlcm5hbEZpZWxkIik7CisgIGlmKCFpRW50cnkuZm91bmQoKSkKICAg
ICB7Ci0gICAgdG9rZW5pemVyID4+IGZvYW1DbGFzczsKKyAgICB2dGtFcnJvck1hY3JvKDw8Imlu
dGVybmFsRmllbGQgbm90IGZvdW5kIGluICIgPDwgaW8uZmlsZU5hbWUoKS5jX3N0cigpKTsKKyAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICB0ZW1wPSIiOwotICAvL2NyZWF0ZSBzY2FsYXIgYXJy
YXlzCi0gIGlmKGZvYW1DbGFzcyA9PSJ2b2xTY2FsYXJGaWVsZCIpCisgIGlmKGlFbnRyeS5maXJz
dFZhbHVlKCkudHlwZSgpID09IHZ0a0ZvYW1FbnRyeVZhbHVlOjpFTVBUWUxJU1QpCiAgICAgewot
ICAgIHdoaWxlKHRlbXAuZmluZCgiaW50ZXJuYWxGaWVsZCIpID09IHZ0a3N0ZDo6c3RyaW5nOjpu
cG9zKQorICAgIGlmKHRoaXMtPk51bUNlbGxzID09IDApCiAgICAgICB7Ci0gICAgICB0ZW1wU3Ry
aW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgICB0ZW1wID0gdGVtcFN0cmlu
Z1N0cnVjdC0+dmFsdWU7Ci0gICAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICAgIC8v
IGlmIHRoZXJlJ3Mgbm8gY2VsbCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGJvdW5kYXJ5IGZhY2Vz
IGVpdGhlcgorICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9Ci0gICAgLy9ub251bmlmb3JtCi0g
ICAgaWYoISh0ZW1wLmZpbmQoIm5vbnVuaWZvcm0iKSA9PSB2dGtzdGQ6OnN0cmluZzo6bnBvcykp
CisgICAgZWxzZQogICAgICAgewotICAgICAgLy9jcmVhdGUgYW4gYXJyYXkKLSAgICAgIHRlbXBT
dHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICAgIHRlbXAgPSB0ZW1wU3Ry
aW5nU3RydWN0LT52YWx1ZTsKLSAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotCi0gICAg
ICBpbnQgc2NhbGFyQ291bnQ7Ci0gICAgICB0b2tlbml6ZXIuY2xlYXIoKTsKLSAgICAgIHRva2Vu
aXplciA8PCB0ZW1wOwotICAgICAgdG9rZW5pemVyID4+IHNjYWxhckNvdW50OwotICAgICAgZGF0
YS0+U2V0TnVtYmVyT2ZWYWx1ZXMoTnVtQ2VsbHMpOwotCi0gICAgICAvL2JpbmFyeSBkYXRhCi0g
ICAgICBpZihiaW5hcnlXcml0ZUZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAvL2FkZCB2YWx1
ZXMgdG8gYXJyYXkKLSAgICAgICAgaW5wdXQtPmdldCgpOyAvL3BhcmVudGhlc2lzCi0gICAgICAg
IGZvcihpbnQgaSA9IDA7IGkgPCBzY2FsYXJDb3VudDsgaSsrKQotICAgICAgICAgIHsKLSAgICAg
ICAgICBpbnB1dC0+cmVhZCgoY2hhciAqKSAmdmFsdWUsIHNpemVvZihkb3VibGUpKTsKLSAgICAg
ICAgICBkYXRhLT5TZXRWYWx1ZShpLCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICB2dGtFcnJvck1hY3JvKDw8ImludGVybmFsRmllbGQgaXMgZW1wdHkiKTsKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CiAKLSAgICAgIC8vYXNjaWkgZGF0YQotICAgICAg
ZWxzZQorICBpZihpby5jbGFzc05hbWUoKSA9PSAidm9sU2NhbGFyRmllbGQiKQorICAgIHsKKyAg
ICBpZihpRW50cnkuZmlyc3RWYWx1ZSgpLmlzVW5pZm9ybSgpKQorICAgICAgeworICAgICAgaURh
dGEgPSB2dGtEb3VibGVBcnJheTo6TmV3KCk7CisgICAgICBpRGF0YS0+U2V0TnVtYmVyT2ZWYWx1
ZXModGhpcy0+TnVtQ2VsbHMpOworICAgICAgZG91YmxlIG51bTsKKyAgICAgIGlFbnRyeSA+PiBu
dW07CisgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdGhpcy0+TnVtQ2VsbHM7IGkrKykKICAgICAg
ICAgewotICAgICAgICAvL2FkZCB2YWx1ZXMgdG8gYXJyYXkKLSAgICAgICAgdGVtcFN0cmluZ1N0
cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0
cnVjdC0+dmFsdWU7Ci0gICAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OyAvL2Rpc2NhcmQg
KAotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzY2FsYXJDb3VudDsgaSsrKQotICAgICAg
ICAgIHsKLSAgICAgICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7
Ci0gICAgICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgICAgIGRl
bGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotICAgICAgICAgIHRva2VuaXplci5jbGVhcigpOwotICAg
ICAgICAgIHRva2VuaXplciA8PCB0ZW1wOwotICAgICAgICAgIHRva2VuaXplciA+PiB2YWx1ZTsK
LSAgICAgICAgICBkYXRhLT5TZXRWYWx1ZShpLCB2YWx1ZSk7Ci0gICAgICAgICAgfQorICAgICAg
ICBpRGF0YS0+U2V0VmFsdWUoaSwgbnVtKTsKICAgICAgICAgfQogICAgICAgfQotCi0gICAgLy91
bmlmb3JtCi0gICAgZWxzZSBpZighKHRlbXAuZmluZCgidW5pZm9ybSIpID09IHZ0a3N0ZDo6c3Ry
aW5nOjpucG9zKSkKKyAgICBlbHNlIC8vIG5vbnVuaWZvcm0KICAgICAgIHsKLSAgICAgIC8vcGFy
c2Ugb3V0IHRoZSB1bmlmb3JtIHZhbHVlCi0gICAgICB2dGtzdGQ6OnN0cmluZyB0b2tlbjsKLSAg
ICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3RlbXAuZmluZCgiOyIpKTsKLSAgICAgIHRva2Vu
aXplci5jbGVhcigpOwotICAgICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgICAvL3doaWxlKHRv
a2VuaXplcj4+dG9rZW4pOwotICAgICAgd2hpbGUoIXRva2VuaXplci5lb2YoKSkKKyAgICAgIGlm
KGlFbnRyeS5maXJzdFZhbHVlKCkudHlwZSgpICE9IHZ0a0ZvYW1FbnRyeVZhbHVlOjpTQ0FMQVJM
SVNUKQogICAgICAgICB7Ci0gICAgICAgIHRva2VuaXplciA+PiB0b2tlbjsKKyAgICAgICAgdnRr
RXJyb3JNYWNybyg8PCJpbnRlcm5hbEZpZWxkIGlzIG5vdCBhIHNjYWxhckZpZWxkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0g
ICAgICB0b2tlbml6ZXIgPDwgdG9rZW47Ci0gICAgICB0b2tlbml6ZXIgPj4gdmFsdWU7Ci0gICAg
ICBkYXRhLT5TZXROdW1iZXJPZlZhbHVlcyhOdW1DZWxscyk7Ci0KLSAgICAgIC8vY3JlYXRlIGFy
cmF5IG9mIHVuaWZvcm0gdmFsdWVzCi0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTnVtQ2VsbHM7
IGkrKykKKyAgICAgIGlmKGlFbnRyeS5zY2FsYXJMaXN0KCkuR2V0U2l6ZSgpICE9IHRoaXMtPk51
bUNlbGxzKQogICAgICAgICB7Ci0gICAgICAgIGRhdGEtPlNldFZhbHVlKGksIHZhbHVlKTsKKyAg
ICAgICAgdnRrRXJyb3JNYWNybyg8PCJOdW1iZXIgb2YgY2VsbHMgaW4gbWVzaCBhbmQgZmllbGQg
ZG9uJ3QgbWF0Y2g6ICIKKyAgICAgICAgICA8PCAibWVzaCA9ICIgPDwgdGhpcy0+TnVtQ2VsbHMg
PDwgIiwgZmllbGQgPSAiCisgICAgICAgICAgPDwgaUVudHJ5LnNjYWxhckxpc3QoKS5HZXRTaXpl
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgIH0KLQotICAgIC8v
bm8gZGF0YQotICAgIGVsc2UKLSAgICAgIHsKLSAgICAgIGlucHV0LT5jbG9zZSgpOwotICAgICAg
ZGVsZXRlIGlucHV0OwotICAgICAgcmV0dXJuIGRhdGE7CisgICAgICBpRGF0YSA9ICh2dGtEb3Vi
bGVBcnJheSAqKWlFbnRyeS5wdHIoKTsKICAgICAgIH0KICAgICB9Ci0KLSAgLy9jcmVhdGUgdmVj
dG9yIGFycmF5cwotICBlbHNlIGlmKGZvYW1DbGFzcyA9PSAidm9sVmVjdG9yRmllbGQiKQorICBl
bHNlIGlmKGlvLmNsYXNzTmFtZSgpID09ICJ2b2xWZWN0b3JGaWVsZCIpCiAgICAgewotICAgIHRl
bXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0
cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gICAgd2hp
bGUodGVtcC5maW5kKCJpbnRlcm5hbEZpZWxkIikgPT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCisg
ICAgaWYoaUVudHJ5LmZpcnN0VmFsdWUoKS5pc1VuaWZvcm0oKSkKICAgICAgIHsKLSAgICAgIHRl
bXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICAgIHRlbXAgPSB0ZW1w
U3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotICAg
ICAgfQotICAgIGlmKCEodGVtcC5maW5kKCJub251bmlmb3JtIikgPT0gdnRrc3RkOjpzdHJpbmc6
Om5wb3MpKQotICAgICAgewotICAgICAgLy9jcmVhdGUgYW4gYXJyYXkKLSAgICAgIHRlbXBTdHJp
bmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICAgIHRlbXAgPSB0ZW1wU3RyaW5n
U3RydWN0LT52YWx1ZTsKLSAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotCi0gICAgICBp
bnQgdmVjdG9yQ291bnQ7Ci0gICAgICB0b2tlbml6ZXIuY2xlYXIoKTsKLSAgICAgIHRva2VuaXpl
ciA8PCB0ZW1wOwotICAgICAgdG9rZW5pemVyID4+IHZlY3RvckNvdW50OwotICAgICAgZGF0YS0+
U2V0TnVtYmVyT2ZDb21wb25lbnRzKDMpOwotCi0gICAgICAvL2JpbmFyeSBkYXRhCi0gICAgICBp
ZihiaW5hcnlXcml0ZUZvcm1hdCkKKyAgICAgIGlEYXRhID0gdnRrRG91YmxlQXJyYXk6Ok5ldygp
OworICAgICAgaURhdGEtPlNldE51bWJlck9mQ29tcG9uZW50cygzKTsKKyAgICAgIGlEYXRhLT5T
ZXROdW1iZXJPZlR1cGxlcyh0aGlzLT5OdW1DZWxscyk7CisgICAgICAvLyBoYXZlIHRvIGRldGVy
bWluZSB0aGUgdHlwZSBvZiB2ZWN0b3IKKyAgICAgIGlmKGlFbnRyeS5maXJzdFZhbHVlKCkudHlw
ZSgpID09IHZ0a0ZvYW1FbnRyeVZhbHVlOjpMQUJFTExJU1QpCiAgICAgICAgIHsKLSAgICAgICAg
Ly9hZGQgdmFsdWVzIHRvIHRoZSBhcnJheQotICAgICAgICBpbnB1dC0+Z2V0KCk7IC8vcGFyZW50
aGVzaXMKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHZlY3RvckNvdW50OyBpKyspCisgICAg
ICAgIGNvbnN0IHZ0a3N0ZDo6dmVjdG9yPGludD4mIGxsID0gaUVudHJ5LmxhYmVsTGlzdCgpOwor
ICAgICAgICBpZihsbC5zaXplKCkgIT0gMykKICAgICAgICAgICB7Ci0gICAgICAgICAgaW5wdXQt
PnJlYWQoKGNoYXIgKikgJnZhbHVlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgZGF0YS0+
SW5zZXJ0Q29tcG9uZW50KGksIDAsIHZhbHVlKTsKLSAgICAgICAgICBpbnB1dC0+cmVhZCgoY2hh
ciAqKSAmdmFsdWUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICBkYXRhLT5JbnNlcnRDb21w
b25lbnQoaSwgMSwgdmFsdWUpOwotICAgICAgICAgIGlucHV0LT5yZWFkKChjaGFyICopICZ2YWx1
ZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgIGRhdGEtPkluc2VydENvbXBvbmVudChpLCAy
LCB2YWx1ZSk7CisgICAgICAgICAgdnRrRXJyb3JNYWNybyg8PCJUaGUgdW5pZm9ybSBsaXN0IGlz
bid0IGEgdmVjdG9yIG9mIHNpemUgMyIpOworICAgICAgICAgIGlEYXRhLT5EZWxldGUoKTsKKyAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICBkb3VibGUgdlszXTsK
KyAgICAgICAgdlswXSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obGxbMF0pOworICAgICAgICB2WzFd
ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihsbFsxXSk7CisgICAgICAgIHZbMl0gPSBzdGF0aWNfY2Fz
dDxkb3VibGU+KGxsWzJdKTsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHRoaXMtPk51bUNl
bGxzOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlEYXRhLT5TZXRUdXBsZShpLCB2KTsK
ICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgLy9hc2NpaSBkYXRhCi0gICAgICBlbHNl
CisgICAgICBlbHNlIGlmKGlFbnRyeS5maXJzdFZhbHVlKCkudHlwZSgpID09IHZ0a0ZvYW1FbnRy
eVZhbHVlOjpTQ0FMQVJMSVNUKQogICAgICAgICB7Ci0gICAgICAgIC8vYWRkIHZhbHVlcyB0byB0
aGUgYXJyYXkKLSAgICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQp
OwotICAgICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgICAgIGRlbGV0
ZSB0ZW1wU3RyaW5nU3RydWN0OyAvL2Rpc2NhcmQgKAotICAgICAgICBmb3IoaW50IGkgPSAwOyBp
IDwgdmVjdG9yQ291bnQ7IGkrKykKKyAgICAgICAgdnRrRG91YmxlQXJyYXkmIHNsID0gaUVudHJ5
LnNjYWxhckxpc3QoKTsKKyAgICAgICAgaWYoc2wuR2V0U2l6ZSgpICE9IDMpCiAgICAgICAgICAg
ewotICAgICAgICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAg
ICAgICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgICAgICAgZGVsZXRl
IHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0KLSAgICAgICAgICAvL1JFTU9WRSBCUkFDS0VUUwotICAgICAg
ICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3RlbXAuZmluZCgiKCIpKTsKLSAgICAgICAgICB0
ZW1wLmVyYXNlKHRlbXAuYmVnaW4oKSt0ZW1wLmZpbmQoIikiKSk7Ci0KLSAgICAgICAgICAvL0dS
QUIgWCxZLCZaIFZBTFVFUwotICAgICAgICAgIHRva2VuaXplci5jbGVhcigpOwotICAgICAgICAg
IHRva2VuaXplciA8PCB0ZW1wOwotICAgICAgICAgIHRva2VuaXplciA+PiB2YWx1ZTsKLSAgICAg
ICAgICBkYXRhLT5JbnNlcnRDb21wb25lbnQoaSwgMCwgdmFsdWUpOwotICAgICAgICAgIHRva2Vu
aXplciA+PiB2YWx1ZTsKLSAgICAgICAgICBkYXRhLT5JbnNlcnRDb21wb25lbnQoaSwgMSwgdmFs
dWUpOwotICAgICAgICAgIHRva2VuaXplciA+PiB2YWx1ZTsKLSAgICAgICAgICBkYXRhLT5JbnNl
cnRDb21wb25lbnQoaSwgMiwgdmFsdWUpOworICAgICAgICAgIHZ0a0Vycm9yTWFjcm8oCisgICAg
ICAgICAgICA8PCAiVGhlIHVuaWZvcm0gbGlzdCBpc24ndCBhIHZlY3RvciBvZiBzaXplIDMgKGFj
dHVhbCBzaXplICIKKyAgICAgICAgICAgIDw8IHNsLkdldFNpemUoKSA8PCAiKSIpOworICAgICAg
ICAgIGlEYXRhLT5EZWxldGUoKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
fQorICAgICAgICBkb3VibGUqIHYgPSBzbC5HZXRQb2ludGVyKDApOworICAgICAgICBmb3IoaW50
IGkgPSAwOyBpIDwgdGhpcy0+TnVtQ2VsbHM7IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAg
aURhdGEtPlNldFR1cGxlKGksIHYpOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQot
ICAgIGVsc2UgaWYoISh0ZW1wLmZpbmQoInVuaWZvcm0iKSA9PSB2dGtzdGQ6OnN0cmluZzo6bnBv
cykpCi0gICAgICB7Ci0gICAgICAvL2NyZWF0ZSBhbiBhcnJheSBvZiB1bmlmb3JtIHZhbHVlcwot
ICAgICAgZG91YmxlIHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTM7Ci0KLSAgICAgIC8vcGFyc2Ugb3V0
IHRoZSB1bmlmb3JtIHZhbHVlcwotICAgICAgdGVtcC5lcmFzZSh0ZW1wLmJlZ2luKCksIHRlbXAu
YmVnaW4oKSt0ZW1wLmZpbmQoIigiKSsxKTsKLSAgICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigp
K3RlbXAuZmluZCgiKSIpLCB0ZW1wLmVuZCgpKTsKLSAgICAgIHRva2VuaXplci5jbGVhcigpOwot
ICAgICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgICB0b2tlbml6ZXIgPj4gdmFsdWUxOwotICAg
ICAgdG9rZW5pemVyID4+IHZhbHVlMjsKLSAgICAgIHRva2VuaXplciA+PiB2YWx1ZTM7Ci0gICAg
ICBkYXRhLT5TZXROdW1iZXJPZkNvbXBvbmVudHMoMyk7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBp
IDwgTnVtQ2VsbHM7IGkrKykKKyAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICBkYXRhLT5J
bnNlcnRDb21wb25lbnQoaSwgMCwgdmFsdWUxKTsKLSAgICAgICAgZGF0YS0+SW5zZXJ0Q29tcG9u
ZW50KGksIDEsIHZhbHVlMik7Ci0gICAgICAgIGRhdGEtPkluc2VydENvbXBvbmVudChpLCAyLCB2
YWx1ZTMpOworICAgICAgICB2dGtFcnJvck1hY3JvKDw8Ildyb25nIGxpc3QgdHlwZSIpOworICAg
ICAgICBpRGF0YS0+RGVsZXRlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgfQotCi0gICAgLy9ubyBkYXRhCi0gICAgZWxzZQorICAgIGVsc2UgLy8gbm9udW5pZm9y
bQogICAgICAgewotICAgICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgICBkZWxldGUgaW5wdXQ7Ci0g
ICAgICByZXR1cm4gZGF0YTsKKyAgICAgIGlmKGlFbnRyeS5maXJzdFZhbHVlKCkudHlwZSgpICE9
IHZ0a0ZvYW1FbnRyeVZhbHVlOjpWRUNUT1JMSVNUKQorICAgICAgICB7CisgICAgICAgIHZ0a0Vy
cm9yTWFjcm8oPDwiaW50ZXJuYWxGaWVsZCBpcyBub3QgYSB2ZWN0b3JGaWVsZCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gICAgICAgIAorICAgICAgaWYoaUVudHJ5LnZlY3Rv
ckxpc3QoKS5HZXROdW1iZXJPZlR1cGxlcygpICE9IHRoaXMtPk51bUNlbGxzKQorICAgICAgICB7
CisgICAgICAgIHZ0a0Vycm9yTWFjcm8oPDwiTnVtYmVyIG9mIGNlbGxzIGluIG1lc2ggYW5kIGZp
ZWxkIGRvbid0IG1hdGNoOiAiCisgICAgICAgICAgPDwgIm1lc2ggPSAiIDw8IHRoaXMtPk51bUNl
bGxzIDw8ICIsIGZpZWxkID0gIgorICAgICAgICAgIDw8IGlFbnRyeS52ZWN0b3JMaXN0KCkuR2V0
TnVtYmVyT2ZUdXBsZXMoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgaURhdGEgPSAodnRrRG91YmxlQXJyYXkgKilpRW50cnkucHRyKCk7CiAgICAgICB9CiAgICAg
fQotICBpbnB1dC0+Y2xvc2UoKTsKLSAgZGVsZXRlIGlucHV0OwotICB2dGtEZWJ1Z01hY3JvKDw8
IkludGVybmFsIHZhcmlhYmxlIGRhdGEgcmVhZCIpOwotICByZXR1cm4gZGF0YTsKLX0KLQotLy8g
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6OkdldEJv
dW5kYXJ5VmFyaWFibGVBdFRpbWVzdGVwCi0vLwotLy8gIFB1cnBvc2U6Ci0vLyAgcmV0dXJucyB0
aGUgdmFsdWVzIGZvciBhIHJlcXVlc3QgdmFyaWFibGUgZm9yIGEgYm9uZGFyeSByZWdpb24KLS8v
Ci0vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCi12dGtEb3VibGVBcnJheSAqIHZ0a09wZW5GT0FNUmVh
ZGVyOjpHZXRCb3VuZGFyeVZhcmlhYmxlQXRUaW1lc3RlcAotICAgICAgICAgICAgICAgIChpbnQg
Ym91bmRhcnlJbmRleCwgY29uc3QgY2hhciAqIHZhck5hbWVJbiwgaW50IHRpbWVTdGF0ZSwKLSAg
ICAgICAgICAgICAgICAgdnRrVW5zdHJ1Y3R1cmVkR3JpZCAqIGludGVybmFsTWVzaCkKLXsKLSAg
dnRrc3RkOjpzdHJpbmcgdmFyTmFtZSh2YXJOYW1lSW4pOwotICB2dGtzeXNfaW9zOjpzdHJpbmdz
dHJlYW0gdmFyUGF0aDsKLSAgdmFyUGF0aCA8PCB0aGlzLT5QYXRoUHJlZml4LT52YWx1ZSA8PCB0
aGlzLT5TdGVwc1t0aW1lU3RhdGVdIDw8ICIvIiA8PCB2YXJOYW1lOwotICB2dGtEZWJ1Z01hY3Jv
KDw8IkdldCBib3VuZGFyeSB2YXJpYWJsZTogIjw8dmFyUGF0aC5zdHIoKS5jX3N0cigpKTsKLSAg
dnRrRG91YmxlQXJyYXkgKmRhdGEgPSB2dGtEb3VibGVBcnJheTo6TmV3KCk7Ci0KLSAgdnRrc3Rk
OjpzdHJpbmcgdGVtcDsKLSAgc3RkU3RyaW5nKiB0ZW1wU3RyaW5nU3RydWN0OwotICBib29sIGJp
bmFyeVdyaXRlRm9ybWF0OwotICBpZnN0cmVhbSAqIGlucHV0ID0gbmV3IGlmc3RyZWFtKHZhclBh
dGguc3RyKCkuY19zdHIoKSwgaW9zOjppbiBWVEtfSU9TX05PQ1JFQVRFKTsKLSAgLy9tYWtlIHN1
cmUgZmlsZSBleGlzdHMKLSAgaWYoaW5wdXQtPmZhaWwoKSkKKyAgZWxzZQogICAgIHsKLSAgICBp
bnB1dC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgaW5wdXQ7Ci0gICAgcmV0dXJuIGRhdGE7CisgICAg
dnRrRXJyb3JNYWNybyg8PCJVbnN1cHBvcnRlZCBmaWVsZCBjbGFzcyIpOworICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgLy9kZXRlcm1pbmUgaWYgZmlsZSBpcyBiaW5hcnkgb3IgYXNjaWkK
LSAgd2hpbGUodGVtcC5maW5kKCJmb3JtYXQiKSA9PSB2dGtzdGQ6OnN0cmluZzo6bnBvcykKKyAg
Ly8gQWRkIGZpZWxkIG9ubHkgaWYgaW50ZXJuYWwgTWVzaCBleGlzdHMgKHNraXAgaWYgbm90IHNl
bGVjdGVkKQorICAvLyBOb3RlIHdlIHN0aWxsIG5lZWQgdG8gcmVhZCBpbnRlcm5hbEZpZWxkIGV2
ZW4gaWYgaW50ZXJuYWwgbWVzaCBpcworICAvLyBub3Qgc2VsZWN0ZWQsIHNpbmNlIGJvdW5kYXJp
ZXMgd2l0aG91dCB2YWx1ZSBlbnRyaWVzIG1heSByZWZlciB0bworICAvLyB0aGUgaW50ZXJuYWxG
aWVsZC4KKyAgaWYoKGlEYXRhLT5HZXRTaXplKCkgPiAwKSAKKyAgICAmJiAodGhpcy0+R2V0UGF0
Y2hBcnJheVN0YXR1cyh0aGlzLT5HZXRQYXRjaEFycmF5TmFtZSgwKSkpCisgICAgJiYgKGludGVy
bmFsTWVzaCAhPSBOVUxMKSkKICAgICB7Ci0gICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdl
dExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgICBk
ZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICBpRGF0YS0+U2V0TmFtZShpby5vYmplY3ROYW1l
KCkuY19zdHIoKSk7CisgICAgaW50ZXJuYWxNZXNoLT5HZXRDZWxsRGF0YSgpLT5BZGRBcnJheShp
RGF0YSk7CiAgICAgfQotICBpbnB1dC0+Y2xvc2UoKTsKIAotICAvL3Jlb3BlbiBmaWxlIGluIGNv
cnJlY3QgZm9ybWF0Ci0gIGlmKHRlbXAuZmluZCgiYmluYXJ5IikgIT0gdnRrc3RkOjpzdHJpbmc6
Om5wb3MpCi0gICAgewotI2lmZGVmIF9XSU4zMgotICAgIGlucHV0LT5vcGVuKHZhclBhdGguc3Ry
KCkuY19zdHIoKSwgaW9zOjpiaW5hcnkgfCBpb3M6OmluIFZUS19JT1NfTk9DUkVBVEUpOwotI2Vs
c2UKLSAgICBpbnB1dC0+b3Blbih2YXJQYXRoLnN0cigpLmNfc3RyKCksIGlvczo6aW4gVlRLX0lP
U19OT0NSRUFURSk7Ci0jZW5kaWYKLSAgICBiaW5hcnlXcml0ZUZvcm1hdCA9IHRydWU7Ci0gICAg
fQotICBlbHNlCisgIC8vIHNldCBib3VuZGFyeSB2YWx1ZXMKKyAgdnRrRm9hbUVudHJ5JiBiRW50
cnkgPSBkaWN0Lmxvb2t1cCgiYm91bmRhcnlGaWVsZCIpOworICB2dGtGb2FtRGljdCYgYm91bmRh
cnlEaWN0ID0gKmJvdW5kYXJ5RGljdFB0cjsKKyAgZm9yKHNpemVfdCBib3VuZGFyeUluZGV4ID0g
MCwgaSA9IDA7IGkgPCBib3VuZGFyeURpY3Quc2l6ZSgpOyBpKyspCiAgICAgewotICAgIGlucHV0
LT5vcGVuKHZhclBhdGguc3RyKCkuY19zdHIoKSxpb3M6OmluKTsKLSAgICBiaW5hcnlXcml0ZUZv
cm1hdCA9IGZhbHNlOwotICAgIH0KLQotICB2dGtzdGQ6OnN0cmluZyBmb2FtQ2xhc3M7Ci0gIHZ0
a3N5c19pb3M6OnN0cmluZ3N0cmVhbSB0b2tlbml6ZXI7Ci0gIGRvdWJsZSB2YWx1ZTsKKyAgICB2
dGtGb2FtRW50cnkmIGJvdW5kYXJ5RW50cnlJID0gYm91bmRhcnlEaWN0LmVudHJ5KGkpOworICAg
IGludCBuRmFjZXM7CisgICAgYm91bmRhcnlFbnRyeUkuZGljdGlvbmFyeSgpLmxvb2t1cCgibkZh
Y2VzIikgPj4gbkZhY2VzOwogCi0gIC8vZmluZCBjbGFzcwotICB0ZW1wU3RyaW5nU3RydWN0ID0g
dGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsK
LSAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gIHdoaWxlKHRlbXAuZmluZCgiY2xhc3MiKSA9
PSB2dGtzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRo
aXMtPkdldExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsK
LSAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKLSAgICB9Ci0gIHRlbXAuZXJhc2UodGVtcC5i
ZWdpbigpK3RlbXAuZmluZCgiOyIpKTsKLSAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gIC8vd2hpbGUo
dG9rZW5pemVyID4+IGZvYW1DbGFzcyk7Ci0gIHdoaWxlKCF0b2tlbml6ZXIuZW9mKCkpCi0gICAg
ewotICAgIHRva2VuaXplciA+PiBmb2FtQ2xhc3M7Ci0gICAgfQotICB0ZW1wPSIiOwotICAvL2Ny
ZWF0ZSBzY2FsYXIgYXJyYXlzCi0gIGlmKGZvYW1DbGFzcyA9PSJ2b2xTY2FsYXJGaWVsZCIpCi0g
ICAgewotICAgIC8vZmluZCBkZXNpcmVkIG1lc2gKLSAgICB3aGlsZSh0ZW1wLmZpbmQodGhpcy0+
Qm91bmRhcnlOYW1lcy0+dmFsdWVbYm91bmRhcnlJbmRleF0pID09IAotICAgICAgICAgICAgdnRr
c3RkOjpzdHJpbmc6Om5wb3MgJiYgIWlucHV0LT5lb2YoKSkKKyAgICAvLyBza2lwIGVtcHR5IGJv
dW5kYXJ5CisgICAgaWYobkZhY2VzID09IDApCiAgICAgICB7Ci0gICAgICB0ZW1wU3RyaW5nU3Ry
dWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVj
dC0+dmFsdWU7Ci0gICAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICAgIGNvbnRpbnVl
OwogICAgICAgfQotICAgIGlmKGlucHV0LT5lb2YoKSkKKworICAgIGNvbnN0IHZ0a1N0ZFN0cmlu
ZyYgYm91bmRhcnlOYW1lSSA9IGJvdW5kYXJ5RW50cnlJLmtleXdvcmQoKTsKKworICAgIC8vIEFk
ZCBmaWVsZCBvbmx5IGlmIGdpdmVuIGJvdW5kYXJ5IGlzIHNlbGVjdGVkIGZvciBkaXNwbGF5Cisg
ICAgaWYoIXRoaXMtPkdldFBhdGNoQXJyYXlTdGF0dXMoYm91bmRhcnlOYW1lSS5jX3N0cigpKSkK
ICAgICAgIHsKLSAgICAgIGlucHV0LT5jbG9zZSgpOwotICAgICAgZGVsZXRlIGlucHV0OwotICAg
ICAgcmV0dXJuIGRhdGE7CisgICAgICBjb250aW51ZTsKICAgICAgIH0KLSAgICAvL2ZpbmQgdmFs
dWUgZW50cnkKLSAgICB3aGlsZSh0ZW1wLmZpbmQoIn0iKSA9PSB2dGtzdGQ6OnN0cmluZzo6bnBv
cyAmJgotICAgICAgICAgIHRlbXAuZmluZCgidmFsdWUgIikgPT0gdnRrc3RkOjpzdHJpbmc6Om5w
b3MpCisKKyAgICB2dGtGb2FtRW50cnkmIGJFbnRyeUkgPSBiRW50cnkuZGljdGlvbmFyeSgpLmxv
b2t1cChib3VuZGFyeU5hbWVJKTsKKyAgICBpZighYkVudHJ5SS5mb3VuZCgpKQogICAgICAgewot
ICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgICAgdGVt
cCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1
Y3Q7IC8vZmluZCB2YWx1ZQorICAgICAgdnRrRXJyb3JNYWNybyg8PCAiYm91bmRhcnlGaWVsZCAi
IDw8IGJvdW5kYXJ5TmFtZUkuY19zdHIoKQorICAgICAgICA8PCAiIG5vdCBmb3VuZCBpbiBvYmpl
Y3QgIiA8PCB2YXJOYW1lSW4gPDwgIiBhdCB0aW1lID0gIgorICAgICAgICA8PCB0aGlzLT5UaW1l
TmFtZXMtPkdldFZhbHVlKHRpbWVTdGF0ZSkuY19zdHIoKSk7CisgICAgICBpRGF0YS0+RGVsZXRl
KCk7CisgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAKLSAgICAvL25vbnVuaWZvcm0KLSAg
ICBpZighKHRlbXAuZmluZCgibm9udW5pZm9ybSIpID09IHZ0a3N0ZDo6c3RyaW5nOjpucG9zKSkK
KyAgICBpZihiRW50cnlJLmZpcnN0VmFsdWUoKS50eXBlKCkgIT0gdnRrRm9hbUVudHJ5VmFsdWU6
OkRJQ1RJT05BUlkpCiAgICAgICB7CisgICAgICB2dGtFcnJvck1hY3JvKDw8ICJUeXBlIG9mIGJv
dW5kYXJ5RmllbGQgIiA8PCBib3VuZGFyeU5hbWVJLmNfc3RyKCkKKyAgICAgICAgPDwgIiBpcyBu
b3QgYSBzdWJkaWN0aW9uYXJ5IGluIG9iamVjdCAiIDw8IHZhck5hbWVJbiA8PCAiIGF0IHRpbWUg
PSAiCisgICAgICAgIDw8IHRoaXMtPlRpbWVOYW1lcy0+R2V0VmFsdWUodGltZVN0YXRlKS5jX3N0
cigpKTsKKyAgICAgIGlEYXRhLT5EZWxldGUoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IH0KIAotICAgICAgLy9iaW5hcnkgZGF0YQotICAgICAgaWYoYmluYXJ5V3JpdGVGb3JtYXQpCi0g
ICAgICAgIHsKLSAgICAgICAgLy9jcmVhdGUgYW4gYXJyYXkKLSAgICAgICAgdGVtcFN0cmluZ1N0
cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0
cnVjdC0+dmFsdWU7Ci0gICAgICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotCi0gICAgICAg
IGludCBzY2FsYXJDb3VudDsKLSAgICAgICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gICAgICAgIHRv
a2VuaXplciA8PCB0ZW1wOwotICAgICAgICB0b2tlbml6ZXIgPj4gc2NhbGFyQ291bnQ7Ci0gICAg
ICAgIGRhdGEtPlNldE51bWJlck9mVmFsdWVzKHNjYWxhckNvdW50KTsKKyAgICB2dGtEb3VibGVB
cnJheSogdkRhdGE7CiAKLSAgICAgICAgLy9hc3NpZ24gdmFsdWVzIHRvIHRoZSBhcnJheQotICAg
ICAgICBpbnB1dC0+Z2V0KCk7IC8vcGFyZW50aGVzaXMKLSAgICAgICAgZm9yKGludCBpID0gMDsg
aSA8IHNjYWxhckNvdW50OyBpKyspCisgICAgdnRrRm9hbUVudHJ5JiB2RW50cnkgPSBiRW50cnlJ
LmRpY3Rpb25hcnkoKS5sb29rdXAoInZhbHVlIik7CisgICAgLy8gdW5pZm9ybVZhbHVlIGlzIGZv
ciBIcnYncyBkZXYgdmVyc2lvbgorICAgIHZ0a0ZvYW1FbnRyeSYgdXZFbnRyeSA9IGJFbnRyeUku
ZGljdGlvbmFyeSgpLmxvb2t1cCgidW5pZm9ybVZhbHVlIik7CisgICAgCisgICAgaWYodkVudHJ5
LmZvdW5kKCkgfHwgdXZFbnRyeS5mb3VuZCgpKSAvLyB0aGUgYm91bmRhcnkgaGFzIGEgdmFsdWUg
ZW50cnkKKyAgICAgIHsKKyAgICAgIGlmKGlvLmNsYXNzTmFtZSgpID09ICJ2b2xTY2FsYXJGaWVs
ZCIpCisgICAgICAgIHsKKyAgICAgICAgaWYoKHZFbnRyeS5mb3VuZCgpICYmIHZFbnRyeS5maXJz
dFZhbHVlKCkuaXNVbmlmb3JtKCkpCisgICAgICAgICAgfHwgdXZFbnRyeS5mb3VuZCgpKQorICAg
ICAgICAgIHsKKyAgICAgICAgICB2RGF0YSA9IHZ0a0RvdWJsZUFycmF5OjpOZXcoKTsKKyAgICAg
ICAgICB2RGF0YS0+U2V0TnVtYmVyT2ZWYWx1ZXMobkZhY2VzKTsKKyAgICAgICAgICBkb3VibGUg
bnVtOworICAgICAgICAgIGlmKHZFbnRyeS5mb3VuZCgpKSAvLyAidmFsdWUiIGVudHJ5IGhhcyB0
aGUgcHJpb3JpdHkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHZFbnRyeSA+PiBudW07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
dXZFbnRyeSA+PiBudW07CisgICAgICAgICAgICB9CisgICAgICAgICAgZm9yKGludCBqID0gMDsg
aiA8IG5GYWNlczsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgdkRhdGEtPlNldFZh
bHVlKGosIG51bSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNlIC8v
IG5vbnVuaWZvcm0KICAgICAgICAgICB7Ci0gICAgICAgICAgaW5wdXQtPnJlYWQoKGNoYXIgKikg
JnZhbHVlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgZGF0YS0+U2V0VmFsdWUoaSwgdmFs
dWUpOworICAgICAgICAgIGlmKHZFbnRyeS5maXJzdFZhbHVlKCkudHlwZSgpICE9IHZ0a0ZvYW1F
bnRyeVZhbHVlOjpTQ0FMQVJMSVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgdnRrRXJy
b3JNYWNybyg8PCJib3VuZGFyeUZpZWxkICIgPDwgYm91bmRhcnlOYW1lSS5jX3N0cigpCisgICAg
ICAgICAgICAgIDw8ICIgaXMgbm90IGEgc2NhbGFyRmllbGQiKTsKKyAgICAgICAgICAgIGlEYXRh
LT5EZWxldGUoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICBpZih2RW50cnkuc2NhbGFyTGlzdCgpLkdldFNpemUoKSAhPSBuRmFjZXMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB2dGtFcnJvck1hY3JvKDw8Ik51bWJlciBvZiBmYWNlcyBp
biBmaWVsZCBhbmQgYm9uZGFyeSBkb24ndCBtYXRjaCIpOworICAgICAgICAgICAgaURhdGEtPkRl
bGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgIHZEYXRhID0gKHZ0a0RvdWJsZUFycmF5ICopdkVudHJ5LnB0cigpOwogICAgICAgICAgIH0K
ICAgICAgICAgfQotCi0gICAgICAvL2FzY2lpIGRhdGEKLSAgICAgIGVsc2UKKyAgICAgIGVsc2Ug
aWYoaW8uY2xhc3NOYW1lKCkgPT0gInZvbFZlY3RvckZpZWxkIikKICAgICAgICAgewotICAgICAg
ICB0ZW1wLmVyYXNlKHRlbXAuYmVnaW4oKSwgdGVtcC5iZWdpbigpK3RlbXAuZmluZCgiPiIpKzEp
OwotICAgICAgICAvL2FzY2lpIGRhdGEgd2l0aCAxMCBvciBsZXNzIHZhbHVlcyBhcmUgb24gdGhl
IHNhbWUgbGluZQotICAgICAgICAvLz4xMAotICAgICAgICBpZih0ZW1wID09IHZ0a3N0ZDo6c3Ry
aW5nKCIgIikpCi0gICAgICAgICAgewotICAgICAgICAgIC8vY3JlYXRlIGFuIGFycmF5IG9mIGRh
dGEKLSAgICAgICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0g
ICAgICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgICAgIGRlbGV0
ZSB0ZW1wU3RyaW5nU3RydWN0OwotCi0gICAgICAgICAgaW50IHNjYWxhckNvdW50OwotICAgICAg
ICAgIHRva2VuaXplci5jbGVhcigpOwotICAgICAgICAgIHRva2VuaXplciA8PCB0ZW1wOwotICAg
ICAgICAgIHRva2VuaXplciA+PiBzY2FsYXJDb3VudDsKLSAgICAgICAgICBkYXRhLT5TZXROdW1i
ZXJPZlZhbHVlcyhzY2FsYXJDb3VudCk7Ci0gICAgICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRo
aXMtPkdldExpbmUoaW5wdXQpOwotICAgICAgICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52
YWx1ZTsKLSAgICAgICAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsgLy9kaXNjYXJkICgKLQot
ICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzY2FsYXJDb3VudDsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQp
OwotICAgICAgICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgICAg
ICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0KLSAgICAgICAgICAgIHRva2VuaXplci5jbGVh
cigpOwotICAgICAgICAgICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgICAgICAgICB0b2tlbml6
ZXIgPj4gdmFsdWU7Ci0gICAgICAgICAgICBkYXRhLT5TZXRWYWx1ZShpLCB2YWx1ZSk7CisgICAg
ICAgIGlmKCh2RW50cnkuZm91bmQoKSAmJiB2RW50cnkuZmlyc3RWYWx1ZSgpLmlzVW5pZm9ybSgp
KQorICAgICAgICAgIHx8IHV2RW50cnkuZm91bmQoKSkKKyAgICAgICAgICB7CisgICAgICAgICAg
dkRhdGEgPSB2dGtEb3VibGVBcnJheTo6TmV3KCk7CisgICAgICAgICAgdkRhdGEtPlNldE51bWJl
ck9mQ29tcG9uZW50cygzKTsKKyAgICAgICAgICB2RGF0YS0+U2V0TnVtYmVyT2ZUdXBsZXMobkZh
Y2VzKTsKKyAgICAgICAgICAvLyB0aGUgInZhbHVlIiBlbnRyeSBoYXMgdGhlIHByaW9yaXR5Cisg
ICAgICAgICAgdnRrRm9hbUVudHJ5JiB2dkVudHJ5ID0gdkVudHJ5LmZvdW5kKCkgPyB2RW50cnkg
OiB1dkVudHJ5OworICAgICAgICAgIC8vIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHZl
Y3RvcgorICAgICAgICAgIGlmKHZ2RW50cnkuZmlyc3RWYWx1ZSgpLnR5cGUoKSA9PSB2dGtGb2Ft
RW50cnlWYWx1ZTo6TEFCRUxMSVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
dnRrc3RkOjp2ZWN0b3I8aW50PiYgbGwgPSB2dkVudHJ5LmxhYmVsTGlzdCgpOworICAgICAgICAg
ICAgaWYobGwuc2l6ZSgpICE9IDMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdnRr
RXJyb3JNYWNybyg8PCJUaGUgdW5pZm9ybSBsaXN0IGlzbid0IGEgdmVjdG9yIG9mIHNpemUgMyIp
OworICAgICAgICAgICAgICBpRGF0YS0+RGVsZXRlKCk7CisgICAgICAgICAgICAgIHZEYXRhLT5E
ZWxldGUoKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkb3VibGUgdlszXTsKKyAgICAgICAgICAgIHZbMF0gPSBzdGF0aWNfY2FzdDxk
b3VibGU+KGxsWzBdKTsKKyAgICAgICAgICAgIHZbMV0gPSBzdGF0aWNfY2FzdDxkb3VibGU+KGxs
WzFdKTsKKyAgICAgICAgICAgIHZbMl0gPSBzdGF0aWNfY2FzdDxkb3VibGU+KGxsWzJdKTsKKyAg
ICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBuRmFjZXM7IGorKykKKyAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICB2RGF0YS0+U2V0VHVwbGUoaiwgdik7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKHZ2RW50cnkuZmlyc3RWYWx1ZSgpLnR5
cGUoKSA9PSB2dGtGb2FtRW50cnlWYWx1ZTo6U0NBTEFSTElTVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIHZ0a0RvdWJsZUFycmF5JiBzbCA9IHZ2RW50cnkuc2NhbGFyTGlzdCgpOworICAg
ICAgICAgICAgaWYoc2wuR2V0U2l6ZSgpICE9IDMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgdnRrRXJyb3JNYWNybyg8PCAiVGhlIHVuaWZvcm0gdmFsdWUgbGlzdCBpbiBwYXRjaCAi
CisgICAgICAgICAgICAgICAgPDwgYm91bmRhcnlOYW1lSS5jX3N0cigpIDw8ICIgb2YgZmlsZSAi
CisgICAgICAgICAgICAgICAgPDwgaW8uZmlsZU5hbWUoKS5jX3N0cigpCisgICAgICAgICAgICAg
ICAgPDwgIiBpc24ndCBhIHZlY3RvciBvZiBzaXplIDMgKGFjdHVhbCBzaXplICIgPDwgc2wuR2V0
U2l6ZSgpCisgICAgICAgICAgICAgICAgPDwgIikiKTsKKyAgICAgICAgICAgICAgaURhdGEtPkRl
bGV0ZSgpOworICAgICAgICAgICAgICB2RGF0YS0+RGVsZXRlKCk7CisgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZG91YmxlKiB2ID0gc2wu
R2V0UG9pbnRlcigwKTsKKyAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBuRmFjZXM7IGor
KykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICB2RGF0YS0+U2V0VHVwbGUoaiwgdik7
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB2dGtFcnJvck1hY3JvKDw8Ildyb25nIGxpc3QgdHlwZSIpOwor
ICAgICAgICAgICAgaURhdGEtPkRlbGV0ZSgpOworICAgICAgICAgICAgdkRhdGEtPkRlbGV0ZSgp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0K
LSAgICAgICAgLy89PDEwCi0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSAvLyBub251bmlmb3Jt
CiAgICAgICAgICAgewotICAgICAgICAgIC8vY3JlYXRlIGFuIGFycmF5IHdpdGggZGF0YQotICAg
ICAgICAgIGludCBzY2FsYXJDb3VudDsKLSAgICAgICAgICB0b2tlbml6ZXIuY2xlYXIoKTsKLSAg
ICAgICAgICB0b2tlbml6ZXIgPDwgdGVtcDsKLSAgICAgICAgICB0b2tlbml6ZXIgPj4gc2NhbGFy
Q291bnQ7Ci0gICAgICAgICAgZGF0YS0+U2V0TnVtYmVyT2ZWYWx1ZXMoc2NhbGFyQ291bnQpOwot
ICAgICAgICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpLCB0ZW1wLmJlZ2luKCkrdGVtcC5maW5k
KCIoIikrMSk7Ci0gICAgICAgICAgdGVtcC5lcmFzZSh0ZW1wLmJlZ2luKCkrdGVtcC5maW5kKCIp
IiksIHRlbXAuZW5kKCkpOwotCi0gICAgICAgICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gICAgICAg
ICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNjYWxh
ckNvdW50OyBpKyspCisgICAgICAgICAgaWYodkVudHJ5LmZpcnN0VmFsdWUoKS50eXBlKCkgIT0g
dnRrRm9hbUVudHJ5VmFsdWU6OlZFQ1RPUkxJU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICB2dGtFcnJvck1hY3JvKDw8ImJvdW5kYXJ5RmllbGQgIiA8PCBib3VuZGFyeU5hbWVJLmNfc3Ry
KCkKKyAgICAgICAgICAgICAgPDwgIiBpcyBub3QgYSB2ZWN0b3JGaWVsZCIpOworICAgICAgICAg
ICAgaURhdGEtPkRlbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgIGlmKHZFbnRyeS52ZWN0b3JMaXN0KCkuR2V0TnVtYmVyT2ZUdXBsZXMo
KSAhPSBuRmFjZXMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICB0b2tlbml6ZXIgPj4gdmFs
dWU7Ci0gICAgICAgICAgICBkYXRhLT5TZXRWYWx1ZShpLCB2YWx1ZSk7CisgICAgICAgICAgICB2
dGtFcnJvck1hY3JvKDw8Ik51bWJlciBvZiBmYWNlcyBpbiBmaWVsZCBhbmQgYm9uZGFyeSBkb24n
dCBtYXRjaCIpOworICAgICAgICAgICAgaURhdGEtPkRlbGV0ZSgpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgIHZEYXRhID0gKHZ0a0RvdWJsZUFy
cmF5ICopdkVudHJ5LnB0cigpOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQotCi0g
ICAgLy91bmlmb3JtCi0gICAgZWxzZSBpZighKHRlbXAuZmluZCgidW5pZm9ybSIpID09IHZ0a3N0
ZDo6c3RyaW5nOjpucG9zKSkKLSAgICAgIHsKLSAgICAgIC8vY3JlYXRlIGFuIGFycmF5IG9mIHVu
aWZvcm0gdmFsdWVzCi0gICAgICBkb3VibGUgdmFsdWUxID0gMDsKLSAgICAgIHRlbXAuZXJhc2Uo
dGVtcC5iZWdpbigpLCB0ZW1wLmJlZ2luKCkrdGVtcC5maW5kKCJ1bmlmb3JtIikrNyk7Ci0gICAg
ICB0ZW1wLmVyYXNlKHRlbXAuYmVnaW4oKSt0ZW1wLmZpbmQoIjsiKSwgdGVtcC5lbmQoKSk7Ci0g
ICAgICB0b2tlbml6ZXIuY2xlYXIoKTsKLSAgICAgIHRva2VuaXplciA8PCB0ZW1wOwotICAgICAg
dG9rZW5pemVyID4+IHZhbHVlMTsKLSAgICAgIGRhdGEtPlNldE51bWJlck9mVmFsdWVzKHRoaXMt
PlNpemVPZkJvdW5kYXJ5LT52YWx1ZVtib3VuZGFyeUluZGV4XSk7Ci0gICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgdGhpcy0+U2l6ZU9mQm91bmRhcnktPnZhbHVlW2JvdW5kYXJ5SW5kZXhdOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgZGF0YS0+U2V0VmFsdWUoaSwgdmFsdWUxKTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgLy9ubyBkYXRhCi0gICAgZWxzZQotICAgICAgewotICAgICAgaW50
IGNlbGxJZDsKLSAgICAgIHZ0a0RhdGFBcnJheSAqIGludGVybmFsRGF0YSA9IGludGVybmFsTWVz
aC0+R2V0Q2VsbERhdGEoKS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
ZXRBcnJheSh2YXJOYW1lLmNfc3RyKCkpOwotICAgICAgZGF0YS0+U2V0TnVtYmVyT2ZWYWx1ZXMo
dGhpcy0+U2l6ZU9mQm91bmRhcnktPnZhbHVlW2JvdW5kYXJ5SW5kZXhdKTsKLSAgICAgIGZvcihp
bnQgaSA9IDA7IGkgPCB0aGlzLT5TaXplT2ZCb3VuZGFyeS0+dmFsdWVbYm91bmRhcnlJbmRleF07
IGkrKykKKyAgICAgIGVsc2UgLy8gb3RoZXIgZmllbGQgdHlwZXMKICAgICAgICAgewotICAgICAg
ICBjZWxsSWQgPSB0aGlzLT5GYWNlT3duZXItPkdldFZhbHVlKHRoaXMtPlN0YXJ0RmFjZSArIGkp
OwotICAgICAgICBkYXRhLT5TZXRWYWx1ZShpLCBpbnRlcm5hbERhdGEtPkdldENvbXBvbmVudChj
ZWxsSWQsIDApKTsKKyAgICAgICAgdnRrRXJyb3JNYWNybyg8PCJVbnN1cHBvcnRlZCBmaWVsZCBj
bGFzcyIpOworICAgICAgICBpRGF0YS0+RGVsZXRlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQotICAgICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgICBkZWxldGUgaW5wdXQ7Ci0g
ICAgICByZXR1cm4gZGF0YTsKLSAgICAgIH0KLSAgICB9Ci0gIC8vQ1JFQVRFIFZFQ1RPUiBBUlJB
WVMKLSAgZWxzZSBpZihmb2FtQ2xhc3MgPT0gInZvbFZlY3RvckZpZWxkIikKLSAgICB7Ci0gICAg
d2hpbGUodGVtcC5maW5kKHRoaXMtPkJvdW5kYXJ5TmFtZXMtPnZhbHVlW2JvdW5kYXJ5SW5kZXhd
KSA9PSAKLSAgICAgICAgICB2dGtzdGQ6OnN0cmluZzo6bnBvcyAmJiAhaW5wdXQtPmVvZigpKQot
ICAgICAgewotICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwot
ICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgZGVsZXRlIHRlbXBT
dHJpbmdTdHJ1Y3Q7Ci0gICAgICB9Ci0gICAgaWYoaW5wdXQtPmVvZigpKQotICAgICAgewotICAg
ICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgICBkZWxldGUgaW5wdXQ7Ci0gICAgICByZXR1cm4gZGF0
YTsKICAgICAgIH0KLSAgICB3aGlsZSh0ZW1wLmZpbmQoIn0iKSA9PSB2dGtzdGQ6OnN0cmluZzo6
bnBvcyAmJgotICAgICAgICAgIHRlbXAuZmluZCgidmFsdWUgIikgPT0gdnRrc3RkOjpzdHJpbmc6
Om5wb3MpCisgICAgZWxzZSAvLyBkb2Vzbid0IGhhdmUgYSB2YWx1ZSBlbnRyeQogICAgICAgewot
ICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgICAgdGVt
cCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAgICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1
Y3Q7IC8vZmluZCB2YWx1ZQotICAgICAgfQotICAgIC8vbm9udW5pZm9ybQotICAgIGlmKCEodGVt
cC5maW5kKCJub251bmlmb3JtIikgPT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpKQotICAgICAgewot
ICAgICAgLy9jcmVhdGUgYW4gYXJyYXkKLSAgICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5H
ZXRMaW5lKGlucHV0KTsKLSAgICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAg
ICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgICAgaW50IHN0YXJ0RmFjZTsKKyAgICAg
IGJvdW5kYXJ5RW50cnlJLmRpY3Rpb25hcnkoKS5sb29rdXAoInN0YXJ0RmFjZSIpID4+IHN0YXJ0
RmFjZTsKKyAgICAgIHZEYXRhID0gdnRrRG91YmxlQXJyYXk6Ok5ldygpOwogCi0gICAgICBpbnQg
dmVjdG9yQ291bnQ7Ci0gICAgICB0b2tlbml6ZXIuY2xlYXIoKTsKLSAgICAgIHRva2VuaXplciA8
PCB0ZW1wOwotICAgICAgdG9rZW5pemVyID4+IHZlY3RvckNvdW50OwotICAgICAgZGF0YS0+U2V0
TnVtYmVyT2ZDb21wb25lbnRzKDMpOwotCi0gICAgICAvL2JpbmFyeSBkYXRhCi0gICAgICBpZihi
aW5hcnlXcml0ZUZvcm1hdCkKKyAgICAgIGlmKGlvLmNsYXNzTmFtZSgpID09ICJ2b2xTY2FsYXJG
aWVsZCIpCiAgICAgICAgIHsKLSAgICAgICAgLy9pbnNlcnQgdmFsdWVzIGludG8gdGhlIGFycmF5
Ci0gICAgICAgIGlucHV0LT5nZXQoKTsgLy9wYXJlbnRoZXNpcwotICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgdmVjdG9yQ291bnQ7IGkrKykKKyAgICAgICAgdkRhdGEtPlNldE51bWJlck9mVmFs
dWVzKG5GYWNlcyk7CisgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBuRmFjZXM7IGorKykKICAg
ICAgICAgICB7Ci0gICAgICAgICAgaW5wdXQtPnJlYWQoKGNoYXIgKikgJnZhbHVlLCBzaXplb2Yo
ZG91YmxlKSk7Ci0gICAgICAgICAgZGF0YS0+SW5zZXJ0Q29tcG9uZW50KGksIDAsIHZhbHVlKTsK
LSAgICAgICAgICBpbnB1dC0+cmVhZCgoY2hhciAqKSAmdmFsdWUsIHNpemVvZihkb3VibGUpKTsK
LSAgICAgICAgICBkYXRhLT5JbnNlcnRDb21wb25lbnQoaSwgMSwgdmFsdWUpOwotICAgICAgICAg
IGlucHV0LT5yZWFkKChjaGFyICopICZ2YWx1ZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAg
IGRhdGEtPkluc2VydENvbXBvbmVudChpLCAyLCB2YWx1ZSk7CisgICAgICAgICAgY29uc3QgaW50
IGNlbGxJZCA9IHRoaXMtPkZhY2VPd25lci0+R2V0VmFsdWUoc3RhcnRGYWNlICsgaik7CisgICAg
ICAgICAgdkRhdGEtPlNldFZhbHVlKGosIGlEYXRhLT5HZXRWYWx1ZShjZWxsSWQpKTsKICAgICAg
ICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICAvL2FzY2lpIGRhdGEKLSAgICAgICAgZWxzZQor
ICAgICAgZWxzZSBpZihpby5jbGFzc05hbWUoKSA9PSAidm9sVmVjdG9yRmllbGQiKQorICAgICAg
ICB7CisgICAgICAgIHZEYXRhLT5TZXROdW1iZXJPZkNvbXBvbmVudHMoMyk7CisgICAgICAgIHZE
YXRhLT5TZXROdW1iZXJPZlR1cGxlcyhuRmFjZXMpOworICAgICAgICBmb3IoaW50IGogPSAwOyBq
IDwgbkZhY2VzOyBqKyspCiAgICAgICAgICAgewotICAgICAgICAgIC8vaW5zZXJ0IHZhbHVlcyBp
bnRvIHRoZSBhcnJheQotICAgICAgICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5l
KGlucHV0KTsKLSAgICAgICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAg
ICAgICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7IC8vZGlzY2FyZCAoCi0gICAgICAgICAgZm9y
KGludCBpID0gMDsgaSA8IHZlY3RvckNvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgICAgICAg
ICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgICAgICAgICBkZWxldGUgdGVt
cFN0cmluZ1N0cnVjdDsKLQotICAgICAgICAgICAgLy9SRU1PVkUgQlJBQ0tFVFMKLSAgICAgICAg
ICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3RlbXAuZmluZCgiKCIpKTsKLSAgICAgICAgICAg
IHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3RlbXAuZmluZCgiKSIpKTsKLQotICAgICAgICAgICAg
Ly9HUkFCIFgsWSwmWiBWQUxVRVMKLSAgICAgICAgICAgIHRva2VuaXplci5jbGVhcigpOwotICAg
ICAgICAgICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgICAgICAgICB0b2tlbml6ZXIgPj4gdmFs
dWU7Ci0gICAgICAgICAgICBkYXRhLT5JbnNlcnRDb21wb25lbnQoaSwgMCwgdmFsdWUpOwotICAg
ICAgICAgICAgdG9rZW5pemVyID4+IHZhbHVlOwotICAgICAgICAgICAgZGF0YS0+SW5zZXJ0Q29t
cG9uZW50KGksIDEsIHZhbHVlKTsKLSAgICAgICAgICAgIHRva2VuaXplciA+PiB2YWx1ZTsKLSAg
ICAgICAgICAgIGRhdGEtPkluc2VydENvbXBvbmVudChpLCAyLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgY29uc3QgaW50IGNlbGxJZCA9IHRoaXMtPkZhY2VPd25lci0+R2V0VmFs
dWUoc3RhcnRGYWNlICsgaik7CisgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIEdldFR1cGxlIHNo
b3VsZCBiZSB0aHJlYWQtc2FmZSBhY2NvZGluZyB0bworICAgICAgICAgIC8vIHRoZSBGQVEgb24g
UGFyYVZpZXcgV2lraQorICAgICAgICAgIHZEYXRhLT5TZXRUdXBsZShqLCBpRGF0YS0+R2V0VHVw
bGUoY2VsbElkKSk7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAvL3VuaWZvcm0KLSAg
ICBlbHNlIGlmKCEodGVtcC5maW5kKCJ1bmlmb3JtIikgPT0gdnRrc3RkOjpzdHJpbmc6Om5wb3Mp
KQotICAgICAgewotICAgICAgLy9jcmVhdGUgYW4gYXJyYXkgb2YgdW5pZm9ybSB2YWx1ZXMKLSAg
ICAgIGRvdWJsZSB2YWx1ZTEgPSAwLCB2YWx1ZTIgPSAwLCB2YWx1ZTMgPSAwOwotICAgICAgdGVt
cC5lcmFzZSh0ZW1wLmJlZ2luKCksIHRlbXAuYmVnaW4oKSt0ZW1wLmZpbmQoIigiKSsxKTsKLSAg
ICAgIHRlbXAuZXJhc2UodGVtcC5iZWdpbigpK3RlbXAuZmluZCgiKSIpLCB0ZW1wLmVuZCgpKTsK
LSAgICAgIHRva2VuaXplci5jbGVhcigpOwotICAgICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAg
ICB0b2tlbml6ZXIgPj4gdmFsdWUxOwotICAgICAgdG9rZW5pemVyID4+IHZhbHVlMjsKLSAgICAg
IHRva2VuaXplciA+PiB2YWx1ZTM7Ci0KLSAgICAgIGRhdGEtPlNldE51bWJlck9mQ29tcG9uZW50
cygzKTsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0aGlzLT5TaXplT2ZCb3VuZGFyeS0+dmFs
dWVbYm91bmRhcnlJbmRleF07IGkrKykKKyAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICBk
YXRhLT5JbnNlcnRDb21wb25lbnQoaSwgMCwgdmFsdWUxKTsKLSAgICAgICAgZGF0YS0+SW5zZXJ0
Q29tcG9uZW50KGksIDEsIHZhbHVlMik7Ci0gICAgICAgIGRhdGEtPkluc2VydENvbXBvbmVudChp
LCAyLCB2YWx1ZTMpOworICAgICAgICB2dGtFcnJvck1hY3JvKDw8IlVuc3VwcG9ydGVkIGZpZWxk
IGNsYXNzIik7CisgICAgICAgIGlEYXRhLT5EZWxldGUoKTsKKyAgICAgICAgdkRhdGEtPkRlbGV0
ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgIH0KLQotICAgIC8v
bm8gZGF0YQotICAgIGVsc2UKKyAgICBpZih2RGF0YS0+R2V0U2l6ZSgpID4gMCkKICAgICAgIHsK
LSAgICAgIGludCBjZWxsSWQ7Ci0gICAgICB2dGtEYXRhQXJyYXkgKiBpbnRlcm5hbERhdGEgPSBp
bnRlcm5hbE1lc2gtPkdldENlbGxEYXRhKCktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0QXJyYXkodmFyTmFtZS5jX3N0cigpKTsKLSAgICAgIGRhdGEtPlNldE51bWJl
ck9mQ29tcG9uZW50cygzKTsKLSAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0aGlzLT5TaXplT2ZC
b3VuZGFyeS0+dmFsdWVbYm91bmRhcnlJbmRleF07IGkrKykKLSAgICAgICAgewotICAgICAgICBj
ZWxsSWQgPSB0aGlzLT5GYWNlT3duZXItPkdldFZhbHVlKHRoaXMtPlN0YXJ0RmFjZSArIGkpOwot
ICAgICAgICBkYXRhLT5JbnNlcnRDb21wb25lbnQoaSwgMCwgaW50ZXJuYWxEYXRhLT5HZXRDb21w
b25lbnQoY2VsbElkLCAwKSk7Ci0gICAgICAgIGRhdGEtPkluc2VydENvbXBvbmVudChpLCAxLCBp
bnRlcm5hbERhdGEtPkdldENvbXBvbmVudChjZWxsSWQsIDEpKTsKLSAgICAgICAgZGF0YS0+SW5z
ZXJ0Q29tcG9uZW50KGksIDIsIGludGVybmFsRGF0YS0+R2V0Q29tcG9uZW50KGNlbGxJZCwgMikp
OwotICAgICAgICB9Ci0gICAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICAgIGRlbGV0ZSBpbnB1dDsK
LSAgICAgIHJldHVybiBkYXRhOworICAgICAgdkRhdGEtPlNldE5hbWUoaW8ub2JqZWN0TmFtZSgp
LmNfc3RyKCkpOworICAgICAgYm91bmRhcnlNZXNoLT52YWx1ZVtib3VuZGFyeUluZGV4XS0+R2V0
Q2VsbERhdGEoKQorICAgICAgICAtPkFkZEFycmF5KHZEYXRhKTsKICAgICAgIH0KKyAgICB2RGF0
YS0+RGVsZXRlKCk7CisgICAgYm91bmRhcnlJbmRleCsrOwogICAgIH0KLSAgaW5wdXQtPmNsb3Nl
KCk7Ci0gIGRlbGV0ZSBpbnB1dDsKLSAgdnRrRGVidWdNYWNybyg8PCJCb3VuZGFyeSBkYXRhIHJl
YWQiKTsKLSAgcmV0dXJuIGRhdGE7CisKKyAgaURhdGEtPkRlbGV0ZSgpOworICB2dGtEZWJ1Z01h
Y3JvKDw8IkludGVybmFsIHZhcmlhYmxlIGRhdGEgcmVhZCIpOworICByZXR1cm4gdHJ1ZTsKIH0K
IAogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgogLy8gIE1ldGhvZDogdnRrT3BlbkZPQU1SZWFkZXI6
OkdhdGhlckJsb2NrcwogLy8KIC8vICBQdXJwb3NlOgotLy8gIHJldHVybnMgYSB2ZWN0b3Igb2Yg
YmxvY2sgbmFtZXMgZm9yIGEgc3BlY2lmaWVkIGRvbWFpbgorLy8gIHJldHVybnMgYSBkaWN0aW9u
YXJ5IG9mIGJsb2NrIG5hbWVzIGZvciBhIHNwZWNpZmllZCBkb21haW4KIC8vCiAvLyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi1zdHJpbmdWZWN0b3IgKiB2dGtPcGVuRk9BTVJlYWRlcjo6R2F0aGVyQmxv
Y2tzKGNvbnN0IGNoYXIgKiB0eXBlSW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHRpbWVTdGF0ZSkKK3Z0a09wZW5GT0FNUmVhZGVyOjp2dGtGb2Ft
RGljdCogdnRrT3BlbkZPQU1SZWFkZXI6OkdhdGhlckJsb2NrcygKKyAgY29uc3QgY2hhciogdHlw
ZUluLCBpbnQgdGltZVN0YXRlLCBib29sIG11c3RSZWFkKQogewotICB2dGtzdGQ6OnN0cmluZyB0
eXBlKHR5cGVJbik7Ci0gIHZ0a3N0ZDo6c3RyaW5nIGJsb2NrUGF0aCA9IHRoaXMtPlBhdGhQcmVm
aXgtPnZhbHVlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hG
YWNlc0Rpci0+dmFsdWVbdGltZVN0YXRlXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIvcG9seU1lc2gvIit0eXBlOwotICB2dGtzdGQ6OnZlY3RvcjwgdnRrc3RkOjpzdHJpbmcgPiBi
bG9ja3M7Ci0gIHN0cmluZ1ZlY3RvciAqcmV0dXJuVmFsdWUgPSBuZXcgc3RyaW5nVmVjdG9yOwot
ICB2dGtEZWJ1Z01hY3JvKDw8IkdldCBibG9ja3M6ICI8PGJsb2NrUGF0aC5jX3N0cigpKTsKLQot
ICBpZnN0cmVhbSAqIGlucHV0ID0gbmV3IGlmc3RyZWFtKGJsb2NrUGF0aC5jX3N0cigpLCBpb3M6
OmluIFZUS19JT1NfTk9DUkVBVEUpOwotICAvL2lmIHRoZXJlIGlzIG5vIGZpbGUgcmV0dXJuIGEg
bnVsbCB2ZWN0b3IKLSAgaWYoaW5wdXQtPmZhaWwoKSkKLSAgICB7Ci0gICAgaW5wdXQtPmNsb3Nl
KCk7Ci0gICAgZGVsZXRlIGlucHV0OwotICAgIHJldHVyblZhbHVlLT52YWx1ZSA9IGJsb2NrczsK
LSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfQotCi0gIHZ0a3N0ZDo6c3RyaW5nIHRlbXA7
Ci0gIHN0ZFN0cmluZyogdGVtcFN0cmluZ1N0cnVjdDsKLSAgdnRrc3RkOjpzdHJpbmcgdG9rZW47
Ci0gIHZ0a3N5c19pb3M6OnN0cmluZ3N0cmVhbSB0b2tlbml6ZXI7Ci0gIHZ0a3N0ZDo6c3RyaW5n
IHRlbXBOYW1lOwotCi0gIC8vZmluZCBlbmQgb2YgaGVhZGVyCi0gIC8vd2hpbGUodGVtcC5jb21w
YXJlKDAsNCwiLy8gKiIsMCw0KSE9MCkKLSAgd2hpbGUgKHN0cmNtcCh0ZW1wLnN1YnN0cigwLDQp
LmNfc3RyKCksICIvLyAqIikpCi0gICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5H
ZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAg
ZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gICAgfQotICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhp
cy0+R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAg
ZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0KLSAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdl
dExpbmUoaW5wdXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gIGRlbGV0
ZSB0ZW1wU3RyaW5nU3RydWN0OyAvL3Rocm93IG91dCBibGFuayBsaW5lCi0KLSAgLy9OdW1iZXIg
b2YgYmxvY2tzCi0gIHRva2VuaXplciA8PCB0ZW1wOwotICB0b2tlbml6ZXIgPj4gdGhpcy0+TnVt
QmxvY2tzOwotICBibG9ja3MucmVzaXplKHRoaXMtPk51bUJsb2Nrcyk7Ci0KLSAgLy9sb29wIHRo
cm91Z2ggZWFjaCBibG9jawotICBmb3IoaW50IGkgPSAwOyBpIDwgdGhpcy0+TnVtQmxvY2tzOyBp
KyspCi0gICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsK
LSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJp
bmdTdHJ1Y3Q7IC8vdGhyb3cgb3V0IGJsYW5rIGxpbmUKLQotICAgIC8vTkFNRQotICAgIHRlbXBT
dHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0cmlu
Z1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7IC8vbmFtZQotCi0g
ICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgdG9rZW5p
emVyID4+IHRlbXBOYW1lOwotICAgIGJsb2Nrc1tpXSA9IHRlbXBOYW1lOwotICAgIC8vd2hpbGUo
dGVtcC5jb21wYXJlKDAsMSwifSIsMCwxKSAhPSAwKQotICAgIHdoaWxlIChzdHJjbXAodGVtcC5z
dWJzdHIoMCwxKS5jX3N0cigpLCAifSIpKQotICAgICAgewotICAgICAgdGVtcFN0cmluZ1N0cnVj
dCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3Qt
PnZhbHVlOwotICAgICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gICAgICB9Ci0gICAgfQot
ICByZXR1cm5WYWx1ZS0+dmFsdWUgPSBibG9ja3M7Ci0gIGlucHV0LT5jbG9zZSgpOwotICBkZWxl
dGUgaW5wdXQ7Ci0gIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgdnRrU3RkU3RyaW5nIHR5cGUodHlw
ZUluKTsKKyAgdnRrU3RkU3RyaW5nIGJsb2NrUGF0aCA9ICp0aGlzLT5QYXRoUHJlZml4CisgICAg
KyB0aGlzLT5Qb2x5TWVzaEZhY2VzRGlyLT52YWx1ZVt0aW1lU3RhdGVdICsgIi9wb2x5TWVzaC8i
ICsgdHlwZTsKKworICB2dGtGb2FtSU9vYmplY3QgaW87CisgIGlmKCEoaW8ub3BlbihibG9ja1Bh
dGgpIHx8IGlvLm9wZW4oYmxvY2tQYXRoICsgIi5neiIpKSkKKyAgICB7CisgICAgaWYobXVzdFJl
YWQpCisgICAgICB7CisgICAgICB2dGtFcnJvck1hY3JvKDw8IkVycm9yIG9wZW5pbmcgIiA8PCBp
by5maWxlTmFtZSgpLmNfc3RyKCkgPDwgIjogIgorICAgICAgICA8PCBpby5lcnJvcigpLnN0cigp
LmNfc3RyKCkpOworICAgICAgfQorICAgIHJldHVybiBOVUxMOworICAgIH0KKworICB2dGtGb2Ft
RGljdCogZGljdFB0ciA9IG5ldyB2dGtGb2FtRGljdDsKKyAgdnRrRm9hbURpY3QmIGRpY3QgPSAq
ZGljdFB0cjsKKyAgaWYoIWRpY3QucmVhZChpbykpCisgICAgeworICAgIHZ0a0Vycm9yTWFjcm8o
PDwiRXJyb3IgcmVhZGluZyBsaW5lICIgPDwgaW8ubGluZU51bWJlcigpCisgICAgICA8PCAiIG9m
ICIgPDwgaW8uZmlsZU5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgaW8uZXJyb3IoKS5zdHIoKS5j
X3N0cigpKTsKKyAgICBkZWxldGUgZGljdFB0cjsKKyAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg
IGlmKGRpY3QudHlwZSgpICE9IHZ0a0ZvYW1EaWN0OjpESUNUSU9OQVJZKQorICAgIHsKKyAgICB2
dGtFcnJvck1hY3JvKDw8IlRoZSBmaWxlIHR5cGUgb2YgIiA8PCBpby5maWxlTmFtZSgpLmNfc3Ry
KCkKKyAgICAgIDw8ICIgaXMgbm90IGEgZGljdGlvbmFyeSIpOworICAgIGRlbGV0ZSBkaWN0UHRy
OworICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIGRpY3RQdHI7CiB9CiAKIC8vICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKQEAgLTIzNzgsMTM4ICs0MzUwLDEwNSBAQAogLy8gIHJldHVybnMg
YSByZXF1ZXN0ZWQgYm91bmRhcnkgbWVzaAogLy8KIC8vICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXZ0
a1Vuc3RydWN0dXJlZEdyaWQgKiB2dGtPcGVuRk9BTVJlYWRlcjo6R2V0Qm91bmRhcnlNZXNoKGlu
dCB0aW1lU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYm91bmRhcnlJbmRleCkKK3Vuc3RydWN0dXJlZEdyaWRWZWN0b3Iq
IHZ0a09wZW5GT0FNUmVhZGVyOjpHZXRCb3VuZGFyeU1lc2goCisgIHZ0a0ZvYW1EaWN0KiBib3Vu
ZGFyeURpY3RQdHIsIGludFZlY3RvclZlY3RvciogZmFjZXNQb2ludHMsCisgIHZ0a1BvaW50cyog
cG9pbnRzKQogewotICB2dGtVbnN0cnVjdHVyZWRHcmlkICogYm91bmRhcnlNZXNoID0gdnRrVW5z
dHJ1Y3R1cmVkR3JpZDo6TmV3KCk7Ci0gIHZ0a3N0ZDo6c3RyaW5nIGJvdW5kYXJ5UGF0aCA9IHRo
aXMtPlBhdGhQcmVmaXgtPnZhbHVlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+dmFsdWVbdGltZVN0YXRlXSArCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIvcG9seU1lc2gvYm91bmRhcnkiOwotICB2dGtEZWJ1Z01hY3Jv
KDw8IkNyZWF0ZSBib3VuZGFyeSBtZXNoOiAiPDxib3VuZGFyeVBhdGguY19zdHIoKSk7CisgIHZ0
a0ZvYW1EaWN0JiBib3VuZGFyeURpY3QgPSAqYm91bmRhcnlEaWN0UHRyOworICB1bnN0cnVjdHVy
ZWRHcmlkVmVjdG9yKiBib3VuZGFyeU1lc2ggPSBuZXcgdW5zdHJ1Y3R1cmVkR3JpZFZlY3RvcjsK
IAotICBpbnQgbkZhY2VzOwotCi0gIGlmc3RyZWFtICogaW5wdXQgPSBuZXcgaWZzdHJlYW0oYm91
bmRhcnlQYXRoLmNfc3RyKCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0gIC8vcmV0dXJu
IGEgTnVsbCBvYmplY3QKLSAgaWYoaW5wdXQtPmZhaWwoKSkKKyAgZm9yKHNpemVfdCBib3VuZGFy
eUluZGV4ID0gMDsgYm91bmRhcnlJbmRleCA8IGJvdW5kYXJ5RGljdC5zaXplKCk7CisgICAgYm91
bmRhcnlJbmRleCsrKQogICAgIHsKLSAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICBkZWxldGUgaW5w
dXQ7Ci0gICAgcmV0dXJuIGJvdW5kYXJ5TWVzaDsKLSAgICB9CisgICAgdnRrRm9hbURpY3QmIGRp
Y3QgPSBib3VuZGFyeURpY3QuZW50cnkoYm91bmRhcnlJbmRleCkuZGljdGlvbmFyeSgpOwogCi0g
IHZ0a3N0ZDo6c3RyaW5nIHRlbXA7Ci0gIHN0ZFN0cmluZyogdGVtcFN0cmluZ1N0cnVjdDsKLSAg
dnRrc3RkOjpzdHJpbmcgdG9rZW47Ci0gIHZ0a3N5c19pb3M6OnN0cmluZ3N0cmVhbSB0b2tlbml6
ZXI7CisgICAgaW50IG5GYWNlczsKKyAgICB2dGtGb2FtRW50cnkmIG5GYWNlc0VudHJ5ID0gZGlj
dC5sb29rdXAoIm5GYWNlcyIpOworICAgIHZ0a0ZvYW1FbnRyeSYgc3RhcnRGYWNlRW50cnkgPSBk
aWN0Lmxvb2t1cCgic3RhcnRGYWNlIik7CisgICAgaWYoIW5GYWNlc0VudHJ5LmZvdW5kKCkgfHwg
IXN0YXJ0RmFjZUVudHJ5LmZvdW5kKCkpCisgICAgICB7CisgICAgICB2dGtXYXJuaW5nTWFjcm8o
CisgICAgICAgIDw8ICJFbnRyeSBuRmFjZXMgb3Igc3RhcnRGYWNlIG5vdCBmb3VuZCBpbiBib3Vu
ZGFyeSBlbnRyeSAiCisgICAgICAgIDw8IGJvdW5kYXJ5RGljdC5lbnRyeShib3VuZGFyeUluZGV4
KS5rZXl3b3JkKCkuY19zdHIoKSk7CisgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgYm91bmRh
cnlNZXNoLT52YWx1ZS5zaXplKCk7IGkrKykKKyAgICAgICAgeworICAgICAgICBib3VuZGFyeU1l
c2gtPnZhbHVlW2ldLT5EZWxldGUoKTsKKyAgICAgICAgfQorICAgICAgZGVsZXRlIGJvdW5kYXJ5
TWVzaDsKKyAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIG5GYWNlc0VudHJ5ID4+IG5G
YWNlczsKIAotICAvL2ZpbmQgZGVzaXJlZCBtZXNoIGVudHJ5Ci0gIHdoaWxlKHRlbXAuZmluZCh0
aGlzLT5Cb3VuZGFyeU5hbWVzLT52YWx1ZVtib3VuZGFyeUluZGV4XSkgPT0gCi0gICAgICAgIHZ0
a3N0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+
R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICAg
IGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotICAgIH0KKyAgICAvLyBza2lwIGVtcHR5IGJvdW5k
YXJ5CisgICAgaWYobkZhY2VzID09IDApCisgICAgICB7CisgICAgICBjb250aW51ZTsKKyAgICAg
IH0KIAotICAvL2dldCBuRmFjZXMKLSAgd2hpbGUodGVtcC5maW5kKCJuRmFjZXMiKSA9PSB2dGtz
dGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdl
dExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgICBk
ZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKLSAgICB9Ci0gIHRlbXAuZXJhc2UodGVtcC5iZWdpbigp
K3RlbXAuZmluZCgiOyIpKTsgLy9yZW1vdmUgOwotICB0b2tlbml6ZXIgPDwgdGVtcDsKLSAgLy93
aGlsZSh0b2tlbml6ZXIgPj4gdG9rZW4pOwotICB3aGlsZSghdG9rZW5pemVyLmVvZigpKQotICAg
IHsKLSAgICB0b2tlbml6ZXIgPj4gdG9rZW47Ci0gICAgfQotICB0b2tlbml6ZXIuY2xlYXIoKTsK
LSAgdG9rZW5pemVyIDw8IHRva2VuOwotICB0b2tlbml6ZXIgPj4gbkZhY2VzOworICAgIC8vIENy
ZWF0ZSBhIGJvdW5kYXJ5IG1lc2ggb25seSBpZiBzZWxlY3RlZCBpbiB0aGUgbGlzdCBmb3IgZGlz
cGxheQorICAgIHZ0a0ZvYW1FbnRyeSYgYm91bmRhcnlFbnRyeUkgPSBib3VuZGFyeURpY3QuZW50
cnkoYm91bmRhcnlJbmRleCk7CisgICAgY29uc3QgdnRrU3RkU3RyaW5nJiBib3VuZGFyeU5hbWVJ
ID0gYm91bmRhcnlFbnRyeUkua2V5d29yZCgpOworICAgIGlmKCF0aGlzLT5HZXRQYXRjaEFycmF5
U3RhdHVzKGJvdW5kYXJ5TmFtZUkuY19zdHIoKSkpCisgICAgICB7CisgICAgICBjb250aW51ZTsK
KyAgICAgIH0KIAotICAvL2dldCBzdGFydGZhY2UKLSAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMt
PkdldExpbmUoaW5wdXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gIGRl
bGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIGludCBzdGFydEZhY2U7CisgICAgc3RhcnRGYWNl
RW50cnkgPj4gc3RhcnRGYWNlOwogCi0gIC8vbG9vayBmb3IgInN0YXJ0RmFjZXMiCi0gIHdoaWxl
KHRlbXAuZmluZCgic3RhcnRGYWNlIikgPT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewot
ICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0g
dGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0g
ICAgfQotICB0ZW1wLmVyYXNlKHRlbXAuYmVnaW4oKSt0ZW1wLmZpbmQoIjsiKSk7IC8vcmVtb3Zl
IDsKLSAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gIHRva2VuaXplciA8PCB0ZW1wOwotICAvL3doaWxl
KHRva2VuaXplciA+PiB0b2tlbik7Ci0gIHdoaWxlKCF0b2tlbml6ZXIuZW9mKCkpCi0gICAgewot
ICAgIHRva2VuaXplciA+PiB0b2tlbjsKLSAgICB9Ci0gIHRva2VuaXplci5jbGVhcigpOwotICB0
b2tlbml6ZXIgPDwgdG9rZW47Ci0gIHRva2VuaXplciA+PiB0aGlzLT5TdGFydEZhY2U7CisgICAg
aW50IGVuZEZhY2UgPSBzdGFydEZhY2UgKyBuRmFjZXM7CiAKLSAgLy9DcmVhdGUgdGhlIG1lc2gK
LSAgaW50IGosIGs7Ci0gIHZ0a1RyaWFuZ2xlICogdHJpYW5nbGU7Ci0gIHZ0a1F1YWQgKiBxdWFk
OwotICB2dGtQb2x5Z29uICogcG9seWdvbjsKLSAgaW50IGVuZEZhY2UgPSB0aGlzLT5TdGFydEZh
Y2UgKyBuRmFjZXM7Ci0gIC8vbG9vcCB0aHJvdWdoIGVhY2ggZmFjZQotICBmb3IoaiA9IHRoaXMt
PlN0YXJ0RmFjZTsgaiA8IGVuZEZhY2U7IGorKykKLSAgICB7CisgICAgLy9DcmVhdGUgdGhlIG1l
c2gKKyAgICBib3VuZGFyeU1lc2gtPnZhbHVlLnB1c2hfYmFjayh2dGtVbnN0cnVjdHVyZWRHcmlk
OjpOZXcoKSk7CisgICAgdnRrVW5zdHJ1Y3R1cmVkR3JpZCYgYm0gPSAqYm91bmRhcnlNZXNoLT52
YWx1ZS5iYWNrKCk7CisgICAgYm0uQWxsb2NhdGUobkZhY2VzKTsKIAotICAgIC8vdHJpYW5nbGUK
LSAgICBpZih0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVtqXS5zaXplKCkgPT0gMykKKyAgICAvLyBh
bG9vY2F0ZSBhcnJheSBmb3IgY29udmVydGluZyBpbnQgdmVjdG9yIHRvIHZ0a0lkVHlwZSB2ZWN0
b3I6CisgICAgLy8gd29ya2Fyb3VuZCBmb3IgNjRiaXQgbWFjaGluZXMKKyAgICBpbnQgbWF4TkZh
Y2VQb2ludHMgPSAwOworICAgIGZvcihpbnQgaiA9IHN0YXJ0RmFjZTsgaiA8IGVuZEZhY2U7IGor
KykKICAgICAgIHsKLSAgICAgIHRyaWFuZ2xlID0gdnRrVHJpYW5nbGU6Ok5ldygpOwotICAgICAg
Zm9yKGsgPSAwOyBrIDwgMzsgaysrKQorICAgICAgY29uc3QgaW50IG5GYWNlUG9pbnRzID0gZmFj
ZXNQb2ludHMtPnZhbHVlW2pdLnNpemUoKTsKKyAgICAgIGlmKG5GYWNlUG9pbnRzID4gbWF4TkZh
Y2VQb2ludHMpCiAgICAgICAgIHsKLSAgICAgICAgdHJpYW5nbGUtPkdldFBvaW50SWRzKCktPlNl
dElkKGssIHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW2pdW2tdKTsKKyAgICAgICAgbWF4TkZhY2VQ
b2ludHMgPSBuRmFjZVBvaW50czsKICAgICAgICAgfQotICAgICAgYm91bmRhcnlNZXNoLT5JbnNl
cnROZXh0Q2VsbCh0cmlhbmdsZS0+R2V0Q2VsbFR5cGUoKSwKLSAgICAgIHRyaWFuZ2xlLT5HZXRQ
b2ludElkcygpKTsKLSAgICAgIHRyaWFuZ2xlLT5EZWxldGUoKTsKICAgICAgIH0KKyAgICB2dGtJ
ZFR5cGUqIGZhY2VQb2ludHNWdGtJZCA9IG5ldyB2dGtJZFR5cGVbbWF4TkZhY2VQb2ludHNdOwog
Ci0gICAgLy9xdWFkCi0gICAgZWxzZSBpZih0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVtqXS5zaXpl
KCkgPT0gNCkKKyAgICAvL2xvb3AgdGhyb3VnaCBlYWNoIGZhY2UKKyAgICBmb3IoaW50IGogPSBz
dGFydEZhY2U7IGogPCBlbmRGYWNlOyBqKyspCiAgICAgICB7Ci0gICAgICBxdWFkID0gdnRrUXVh
ZDo6TmV3KCk7Ci0gICAgICBmb3IoayA9IDA7IGsgPCA0OyBrKyspCisgICAgICB2dGtzdGQ6OnZl
Y3RvcjxpbnQ+JiBmYWNlUG9pbnRzID0gZmFjZXNQb2ludHMtPnZhbHVlW2pdOworICAgICAgc2l6
ZV90IG5GYWNlUG9pbnRzID0gZmFjZVBvaW50cy5zaXplKCk7CisKKyAgICAgIGZvcihzaXplX3Qg
ayA9IDA7IGsgPCBuRmFjZVBvaW50czsgaysrKQogICAgICAgICB7Ci0gICAgICAgIHF1YWQtPkdl
dFBvaW50SWRzKCktPlNldElkKGssIHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW2pdW2tdKTsKKyAg
ICAgICAgZmFjZVBvaW50c1Z0a0lkW2tdID0gZmFjZVBvaW50c1trXTsKICAgICAgICAgfQotICAg
ICAgYm91bmRhcnlNZXNoLT5JbnNlcnROZXh0Q2VsbChxdWFkLT5HZXRDZWxsVHlwZSgpLAotICAg
ICAgcXVhZC0+R2V0UG9pbnRJZHMoKSk7Ci0gICAgICBxdWFkLT5EZWxldGUoKTsKLSAgICAgIH0K
IAotICAgIC8vcG9seWdvbgotICAgIGVsc2UKLSAgICAgIHsKLSAgICAgIHBvbHlnb24gPSB2dGtQ
b2x5Z29uOjpOZXcoKTsKLSAgICAgIGZvcihrID0gMDsgayA8IChpbnQpdGhpcy0+RmFjZVBvaW50
cy0+dmFsdWVbal0uc2l6ZSgpOyBrKyspCisgICAgICAvL3RyaWFuZ2xlCisgICAgICBpZihuRmFj
ZVBvaW50cyA9PSAzKQorICAgICAgICB7CisgICAgICAgIGJtLkluc2VydE5leHRDZWxsKFZUS19U
UklBTkdMRSwgMywgZmFjZVBvaW50c1Z0a0lkKTsKKyAgICAgICAgfQorICAgICAgLy8gcXVhZAor
ICAgICAgZWxzZSBpZihuRmFjZVBvaW50cyA9PSA0KQogICAgICAgICB7Ci0gICAgICAgIHBvbHln
b24tPkdldFBvaW50SWRzKCktPkluc2VydElkKGssIHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW2pd
W2tdKTsKKyAgICAgICAgYm0uSW5zZXJ0TmV4dENlbGwoVlRLX1FVQUQsIDQsIGZhY2VQb2ludHNW
dGtJZCk7CisgICAgICAgIH0KKyAgICAgIC8vcG9seWdvbgorICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgIGJtLkluc2VydE5leHRDZWxsKFZUS19QT0xZR09OLCBuRmFjZVBvaW50cywKKyAg
ICAgICAgICBmYWNlUG9pbnRzVnRrSWQpOwogICAgICAgICB9Ci0gICAgICBib3VuZGFyeU1lc2gt
Pkluc2VydE5leHRDZWxsKHBvbHlnb24tPkdldENlbGxUeXBlKCksCi0gICAgICBwb2x5Z29uLT5H
ZXRQb2ludElkcygpKTsKLSAgICAgIHBvbHlnb24tPkRlbGV0ZSgpOwogICAgICAgfQotICAgIH0K
KyAgICBkZWxldGUgW10gZmFjZVBvaW50c1Z0a0lkOwogCi0gIC8vc2V0IHBvaW50cyBmb3IgYm91
bmRhcnkKLSAgYm91bmRhcnlNZXNoLT5TZXRQb2ludHModGhpcy0+UG9pbnRzKTsKLSAgLy9hZGQg
c2l6ZSBvZiBtZXNoCi0gIHRoaXMtPlNpemVPZkJvdW5kYXJ5LT52YWx1ZS5wdXNoX2JhY2soYm91
bmRhcnlNZXNoLT5HZXROdW1iZXJPZkNlbGxzKCkpOwotICBpbnB1dC0+Y2xvc2UoKTsKLSAgZGVs
ZXRlIGlucHV0OworICAgIC8vc2V0IHBvaW50cyBmb3IgYm91bmRhcnkKKyAgICBibS5TZXRQb2lu
dHMocG9pbnRzKTsKKyAgICB9CiAgIHZ0a0RlYnVnTWFjcm8oPDwiQm91bmRhcnkgbWVzaCBjcmVh
dGVkIik7CiAgIHJldHVybiBib3VuZGFyeU1lc2g7CiB9CkBAIC0yNTIxLDE0OCArNDQ2MCw2OSBA
QAogLy8gIHJldHVybnMgYSByZXF1ZXN0ZWQgcG9pbnQgem9uZSBtZXNoCiAvLwogLy8gKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgotdnRrVW5zdHJ1Y3R1cmVkR3JpZCAqIHZ0a09wZW5GT0FNUmVhZGVyOjpH
ZXRQb2ludFpvbmVNZXNoKGludCB0aW1lU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvaW50Wm9uZUluZGV4KQorYm9v
bCB2dGtPcGVuRk9BTVJlYWRlcjo6R2V0UG9pbnRab25lTWVzaCh1bnN0cnVjdHVyZWRHcmlkVmVj
dG9yKiBwb2ludFpvbmVNZXNoLAorICB2dGtQb2ludHMqIHBvaW50cywgaW50IHRpbWVTdGF0ZSkK
IHsKLSAgdnRrVW5zdHJ1Y3R1cmVkR3JpZCAqIHBvaW50Wm9uZU1lc2ggPSB2dGtVbnN0cnVjdHVy
ZWRHcmlkOjpOZXcoKTsKLSAgdnRrc3RkOjpzdHJpbmcgcG9pbnRab25lc1BhdGggPSB0aGlzLT5Q
YXRoUHJlZml4LT52YWx1ZVt0aW1lU3RhdGVdKwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIvcG9seU1lc2gvcG9pbnRab25lcyI7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiQ3JlYXRlIHBv
aW50IHpvbmUgbWVzaDogIjw8cG9pbnRab25lc1BhdGguY19zdHIoKSk7CisgIHZ0a0RlYnVnTWFj
cm8oPDwiQ3JlYXRlIHBvaW50IHpvbmUgbWVzaCIpOwogCi0gIHZ0a3N0ZDo6c3RyaW5nIHRlbXA7
Ci0gIHN0ZFN0cmluZyogdGVtcFN0cmluZ1N0cnVjdDsKLSAgYm9vbCBiaW5hcnlXcml0ZUZvcm1h
dDsKLSAgaWZzdHJlYW0gKiBpbnB1dCA9IG5ldyBpZnN0cmVhbShwb2ludFpvbmVzUGF0aC5jX3N0
cigpLCBpb3M6OmluIFZUS19JT1NfTk9DUkVBVEUpOwotICAvL21ha2Ugc3VyZSBmaWxlIGV4aXN0
cwotICBpZihpbnB1dC0+ZmFpbCgpKQotICAgIHsKLSAgICBpbnB1dC0+Y2xvc2UoKTsKLSAgICBk
ZWxldGUgaW5wdXQ7Ci0gICAgcmV0dXJuIHBvaW50Wm9uZU1lc2g7Ci0gICAgfQorICB2dGtGb2Ft
RGljdCogcG9pbnRab25lRGljdFB0cgorICAgID0gdGhpcy0+R2F0aGVyQmxvY2tzKCJwb2ludFpv
bmVzIiwgdGltZVN0YXRlLCBmYWxzZSk7CiAKLSAgLy9kZXRlcm1pbmUgaWYgZmlsZSBpcyBiaW5h
cnkgb3IgYXNjaWkKLSAgd2hpbGUodGVtcC5maW5kKCJmb3JtYXQiKSA9PSB2dGtzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgaWYocG9pbnRab25lRGljdFB0ciA9PSBOVUxMKQogICAgIHsKLSAgICB0ZW1w
U3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJp
bmdTdHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIC8vIG5v
dCBhbiBlcnJvcgorICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgaW5wdXQtPmNsb3NlKCk7CiAK
LSAgLy9yZW9wZW4gZmlsZSBpbiBjb3JyZWN0IGZvcm1hdAotICBpZih0ZW1wLmZpbmQoImJpbmFy
eSIpICE9IHZ0a3N0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSNpZmRlZiBfV0lOMzIKLSAgICBp
bnB1dC0+b3Blbihwb2ludFpvbmVzUGF0aC5jX3N0cigpLCBpb3M6OmJpbmFyeSB8IGlvczo6aW4g
VlRLX0lPU19OT0NSRUFURSk7Ci0jZWxzZQotICAgIGlucHV0LT5vcGVuKHBvaW50Wm9uZXNQYXRo
LmNfc3RyKCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0jZW5kaWYKLSAgICBiaW5hcnlX
cml0ZUZvcm1hdCA9IHRydWU7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgIGlucHV0LT5vcGVu
KHBvaW50Wm9uZXNQYXRoLmNfc3RyKCksaW9zOjppbik7Ci0gICAgYmluYXJ5V3JpdGVGb3JtYXQg
PSBmYWxzZTsKLSAgICB9CisgIHZ0a0ZvYW1EaWN0JiBwb2ludFpvbmVEaWN0ID0gKnBvaW50Wm9u
ZURpY3RQdHI7CisgIHNpemVfdCBuUG9pbnRab25lcyA9IHBvaW50Wm9uZURpY3Quc2l6ZSgpOwog
Ci0gIHZ0a3N0ZDo6c3RyaW5nIHRva2VuOwotICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gdG9r
ZW5pemVyOwotICB2dGtWZXJ0ZXggKiBwb2ludENlbGw7Ci0gIGludCB0ZW1wRWxlbWVudDsKLSAg
dnRrc3RkOjp2ZWN0b3I8IHZ0a3N0ZDo6dmVjdG9yIDwgaW50ID4gPiB0ZW1wRWxlbWVudFpvbmVz
OwotICBpbnQgbnVtRWxlbWVudDsKLQotICAvL2ZpbmQgZGVzaXJlZCBtZXNoIGVudHJ5Ci0gIHdo
aWxlKHRlbXAuZmluZCh0aGlzLT5Qb2ludFpvbmVOYW1lcy0+dmFsdWVbcG9pbnRab25lSW5kZXhd
KSA9PSAKLSAgICAgICAgdnRrc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgIHRlbXBTdHJp
bmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0
cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0gICAgfQotICB0ZW1w
U3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1wU3RyaW5n
U3RydWN0LT52YWx1ZTsKLSAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ly90aHJvdyBvdXQgewot
Ci0gIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgdGVtcCA9IHRl
bXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsvL3R5cGUK
LQotICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0
ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ly9sYWJl
bAotCi0gIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgdGVtcCA9
IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsvL251
bWJlciBvZiBlbGVtZW50cyBvciB7Ci0KLSAgLy9udW1iZXIgb2YgZWxlbWVudHMKLSAgaWYodGVt
cC5maW5kKCJ9IikgPT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgewotICAgIHRva2VuaXpl
ciA8PCB0ZW1wOwotICAgIHRva2VuaXplciA+PiBudW1FbGVtZW50OwotICAgIGlmKG51bUVsZW1l
bnQgPT0gMCkKKyAgZm9yKHNpemVfdCBpID0gMDsgaSA8IG5Qb2ludFpvbmVzOyBpKyspCisgICAg
eworICAgIC8vIGxvb2sgdXAgcG9pbnQgbGFiZWxzCisgICAgdnRrRm9hbURpY3QmIGRpY3QgPSBw
b2ludFpvbmVEaWN0LmVudHJ5KGkpLmRpY3Rpb25hcnkoKTsKKyAgICB2dGtGb2FtRW50cnkmIHBv
aW50TGFiZWxzRW50cnkgPSBkaWN0Lmxvb2t1cCgicG9pbnRMYWJlbHMiKTsKKyAgICBpZighcG9p
bnRMYWJlbHNFbnRyeS5mb3VuZCgpKQogICAgICAgewotICAgICAgaW5wdXQtPmNsb3NlKCk7Ci0g
ICAgICBkZWxldGUgaW5wdXQ7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgICAgIHZ0a0Vycm9yTWFj
cm8oPDwicG9pbnRMYWJlbHMgbm90IGZvdW5kIGluIHBvaW50Wm9uZXMiKTsKKyAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgIH0KLQotICAgIC8vYmluYXJ5IGRhdGEKLSAgICBpZihiaW5hcnlXcml0
ZUZvcm1hdCkKKyAgICAvLyBza2lwIGlmIHRoZSBsaXN0IGlzIGVtcHR5CisgICAgaWYocG9pbnRM
YWJlbHNFbnRyeS5maXJzdFZhbHVlKCkudHlwZSgpID09IHZ0a0ZvYW1FbnRyeVZhbHVlOjpFTVBU
WUxJU1QpCiAgICAgICB7Ci0gICAgICBpbnB1dC0+Z2V0KCk7IC8vcGFyZW50aGVzaXMKLSAgICAg
IGZvcihpbnQgaiA9IDA7IGogPCBudW1FbGVtZW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAg
aW5wdXQtPnJlYWQoKGNoYXIgKikgJnRlbXBFbGVtZW50LCBzaXplb2YoaW50KSk7Ci0gICAgICAg
IHBvaW50Q2VsbCA9IHZ0a1ZlcnRleDo6TmV3KCk7Ci0gICAgICAgIHBvaW50Q2VsbC0+R2V0UG9p
bnRJZHMoKS0+U2V0SWQoMCx0ZW1wRWxlbWVudCk7Ci0gICAgICAgIHBvaW50Wm9uZU1lc2gtPklu
c2VydE5leHRDZWxsKHBvaW50Q2VsbC0+R2V0Q2VsbFR5cGUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9pbnRDZWxsLT5HZXRQb2ludElkcygpKTsKLSAgICAgICAg
cG9pbnRDZWxsLT5EZWxldGUoKTsKLSAgICAgICAgfQorICAgICAgY29udGludWU7CiAgICAgICB9
Ci0KLSAgICAvL2FzY2lpIGRhdGEKLSAgICBlbHNlCisgICAgaWYocG9pbnRMYWJlbHNFbnRyeS5m
aXJzdFZhbHVlKCkudHlwZSgpICE9IHZ0a0ZvYW1FbnRyeVZhbHVlOjpMQUJFTExJU1QpCiAgICAg
ICB7Ci0gICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAg
ICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgICBkZWxldGUgdGVtcFN0cmlu
Z1N0cnVjdDsvL1RIUk9XIE9VVCAoCisgICAgICB2dGtFcnJvck1hY3JvKDw8InBvaW50TGFiZWxz
IG5vdCBvZiB0eXBlIGxhYmVsTGlzdDogdHlwZSA9ICIKKyAgICAgICAgPDwgcG9pbnRMYWJlbHNF
bnRyeS5maXJzdFZhbHVlKCkudHlwZSgpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
IAotICAgICAgLy9HRVQgRUFDSCBFTEVNRU5UICYgQUREIFRPIFZFQ1RPUgotICAgICAgZm9yKGlu
dCBqID0gMDsgaiA8IG51bUVsZW1lbnQ7IGorKykKLSAgICAgICAgewotICAgICAgICB0ZW1wU3Ry
aW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgICAgIHRlbXAgPSB0ZW1wU3Ry
aW5nU3RydWN0LT52YWx1ZTsKLSAgICAgICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7CisgICAg
Y29uc3QgdnRrc3RkOjp2ZWN0b3I8aW50PiYgbGFiZWxzID0gcG9pbnRMYWJlbHNFbnRyeS5sYWJl
bExpc3QoKTsKIAotICAgICAgICB0b2tlbml6ZXIuY2xlYXIoKTsKLSAgICAgICAgdG9rZW5pemVy
IDw8IHRlbXA7Ci0gICAgICAgIHRva2VuaXplciA+PiB0ZW1wRWxlbWVudDsKLSAgICAgICAgcG9p
bnRDZWxsID0gdnRrVmVydGV4OjpOZXcoKTsKLSAgICAgICAgcG9pbnRDZWxsLT5HZXRQb2ludElk
cygpLT5TZXRJZCgwLHRlbXBFbGVtZW50KTsKLSAgICAgICAgcG9pbnRab25lTWVzaC0+SW5zZXJ0
TmV4dENlbGwocG9pbnRDZWxsLT5HZXRDZWxsVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludENlbGwtPkdldFBvaW50SWRzKCkpOwotICAgICAgICBwb2lu
dENlbGwtPkRlbGV0ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQorICAgIC8vIGFsbG9j
YXRlIG5ldyBncmlkOiB3ZSBkbyBub3QgdXNlIHJlc2l6ZSgpIGJlZm9yZWhhbmQgc2luY2UgaXQK
KyAgICAvLyBjb3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBwb2ludGVyIGlmIHdlIHJldHVybiBieSBl
cnJvcgorICAgIHBvaW50Wm9uZU1lc2gtPnZhbHVlLnB1c2hfYmFjayh2dGtVbnN0cnVjdHVyZWRH
cmlkOjpOZXcoKSk7CisgICAgdnRrVW5zdHJ1Y3R1cmVkR3JpZCYgcHptID0gKnBvaW50Wm9uZU1l
c2gtPnZhbHVlLmJhY2soKTsKIAotICAvL3RoZXJlIGlzIG5vIGVudHJ5Ci0gIGVsc2UKLSAgICB7
Ci0gICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgZGVsZXRlIGlucHV0OwotICAgIHJldHVybiBOVUxM
OworICAgIC8vIHNldCBwb2ludFpvbmUgc2l6ZQorICAgIHNpemVfdCBuUG9pbnRzID0gbGFiZWxz
LnNpemUoKTsKKyAgICBwem0uQWxsb2NhdGUoblBvaW50cyk7CisKKyAgICAvLyBpbnNlcnQgcG9p
bnRzCisgICAgZm9yKHNpemVfdCBqID0gMDsgaiA8IG5Qb2ludHM7IGorKykKKyAgICAgIHsKKyAg
ICAgIHZ0a0lkVHlwZSBwb2ludExhYmVsID0gbGFiZWxzW2pdOworICAgICAgcHptLkluc2VydE5l
eHRDZWxsKFZUS19WRVJURVgsIDEsICZwb2ludExhYmVsKTsKKyAgICAgIH0KKyAgICBwem0uU2V0
UG9pbnRzKHBvaW50cyk7CiAgICAgfQotICAvL3NldCBwb2ludCB6b25lIHBvaW50cwotICBwb2lu
dFpvbmVNZXNoLT5TZXRQb2ludHMoUG9pbnRzKTsKLSAgaW5wdXQtPmNsb3NlKCk7Ci0gIGRlbGV0
ZSBpbnB1dDsKKworICBkZWxldGUgcG9pbnRab25lRGljdFB0cjsKKwogICB2dGtEZWJ1Z01hY3Jv
KDw8IlBvaW50IHpvbmUgbWVzaCBjcmVhdGVkIik7Ci0gIHJldHVybiBwb2ludFpvbmVNZXNoOwor
ICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjY3MiwxODkg
KzQ1MzIsMTA4IEBACiAvLyAgcmV0dXJucyBhIHJlcXVlc3RlZCBmYWNlIHpvbmUgbWVzaAogLy8K
IC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKLXZ0a1Vuc3RydWN0dXJlZEdyaWQgKiB2dGtPcGVuRk9B
TVJlYWRlcjo6R2V0RmFjZVpvbmVNZXNoKGludCB0aW1lU3RhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVpvbmVJbmRl
eCkKK2Jvb2wgdnRrT3BlbkZPQU1SZWFkZXI6OkdldEZhY2Vab25lTWVzaCgKKyAgdW5zdHJ1Y3R1
cmVkR3JpZFZlY3RvciogZmFjZVpvbmVNZXNoLCBpbnRWZWN0b3JWZWN0b3IqIGZhY2VzUG9pbnRz
LAorICB2dGtQb2ludHMqIHBvaW50cywgaW50IHRpbWVTdGF0ZSkKIHsKLSAgdnRrVW5zdHJ1Y3R1
cmVkR3JpZCAqIGZhY2Vab25lTWVzaCA9IHZ0a1Vuc3RydWN0dXJlZEdyaWQ6Ok5ldygpOwotICB2
dGtzdGQ6OnN0cmluZyBmYWNlWm9uZXNQYXRoID0gdGhpcy0+UGF0aFByZWZpeC0+dmFsdWUgKwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+
dmFsdWVbdGltZVN0YXRlXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL3Bv
bHlNZXNoL2ZhY2Vab25lcyI7Ci0gIHZ0a0RlYnVnTWFjcm8oPDwiQ3JlYXRlIGZhY2Ugem9uZSBt
ZXNoOiAiPDxmYWNlWm9uZXNQYXRoLmNfc3RyKCkpOwotCi0gIHZ0a3N0ZDo6c3RyaW5nIHRlbXA7
Ci0gIHN0ZFN0cmluZyogdGVtcFN0cmluZ1N0cnVjdDsKLSAgYm9vbCBiaW5hcnlXcml0ZUZvcm1h
dDsKLSAgaWZzdHJlYW0gKiBpbnB1dCA9IG5ldyBpZnN0cmVhbShmYWNlWm9uZXNQYXRoLmNfc3Ry
KCksIGlvczo6aW4gVlRLX0lPU19OT0NSRUFURSk7Ci0gIC8vbWFrZSBzdXJlIGZpbGUgZXhpc3Rz
Ci0gIGlmKGlucHV0LT5mYWlsKCkpCi0gICAgewotICAgIGlucHV0LT5jbG9zZSgpOwotICAgIGRl
bGV0ZSBpbnB1dDsKLSAgICByZXR1cm4gZmFjZVpvbmVNZXNoOwotICAgIH0KLQotICAvL2RldGVy
bWluZSBpZiBmaWxlIGlzIGJpbmFyeSBvciBhc2NpaQotICB3aGlsZSh0ZW1wLmZpbmQoImZvcm1h
dCIpID09IHZ0a3N0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0
ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZh
bHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OwotICAgIH0KLSAgaW5wdXQtPmNsb3Nl
KCk7Ci0KLSAgLy9yZW9wZW4gZmlsZSBpbiBjb3JyZWN0IGZvcm1hdAotICBpZih0ZW1wLmZpbmQo
ImJpbmFyeSIpICE9IHZ0a3N0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSNpZmRlZiBfV0lOMzIK
LSAgICBpbnB1dC0+b3BlbihmYWNlWm9uZXNQYXRoLmNfc3RyKCksIGlvczo6YmluYXJ5IHwgaW9z
OjppbiBWVEtfSU9TX05PQ1JFQVRFKTsKLSNlbHNlCi0gICAgaW5wdXQtPm9wZW4oZmFjZVpvbmVz
UGF0aC5jX3N0cigpLCBpb3M6OmluKTsKLSNlbmRpZgotICAgIGJpbmFyeVdyaXRlRm9ybWF0ID0g
dHJ1ZTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgaW5wdXQtPm9wZW4oZmFjZVpvbmVzUGF0
aC5jX3N0cigpLGlvczo6aW4pOwotICAgIGJpbmFyeVdyaXRlRm9ybWF0ID0gZmFsc2U7Ci0gICAg
fQorICB2dGtEZWJ1Z01hY3JvKDw8IkNyZWF0ZSBmYWNlIHpvbmUgbWVzaCIpOwogCi0gIHZ0a3N0
ZDo6c3RyaW5nIHRva2VuOwotICB2dGtzeXNfaW9zOjpzdHJpbmdzdHJlYW0gdG9rZW5pemVyOwot
ICB2dGtzdGQ6OnZlY3RvcjwgaW50ID4gZmFjZVpvbmU7Ci0gIGludCB0ZW1wRWxlbWVudDsKLSAg
dnRrc3RkOjp2ZWN0b3I8IHZ0a3N0ZDo6dmVjdG9yIDwgaW50ID4gPiB0ZW1wRWxlbWVudFpvbmVz
OwotICBpbnQgbnVtRWxlbWVudDsKKyAgdnRrRm9hbURpY3QqIGZhY2Vab25lRGljdFB0cgorICAg
ID0gdGhpcy0+R2F0aGVyQmxvY2tzKCJmYWNlWm9uZXMiLCB0aW1lU3RhdGUsIGZhbHNlKTsKIAot
ICAvL2ZpbmQgZGVzaXJlZCBtZXNoIGVudHJ5Ci0gIHdoaWxlKHRlbXAuZmluZCh0aGlzLT5GYWNl
Wm9uZU5hbWVzLT52YWx1ZVtmYWNlWm9uZUluZGV4XSkgPT0gCi0gICAgICAgIHZ0a3N0ZDo6c3Ry
aW5nOjpucG9zKQorICBpZihmYWNlWm9uZURpY3RQdHIgPT0gTlVMTCkKICAgICB7Ci0gICAgdGVt
cFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICAgIHRlbXAgPSB0ZW1wU3Ry
aW5nU3RydWN0LT52YWx1ZTsKLSAgICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgICAvLyBu
b3QgYW4gZXJyb3IKKyAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgdGVtcFN0cmluZ1N0cnVj
dCA9IHRoaXMtPkdldExpbmUoaW5wdXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFs
dWU7Ci0gIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0Oy8vdGhyb3cgb3V0IHsKKyAgdnRrRm9hbURp
Y3QmIGZhY2Vab25lRGljdCA9ICpmYWNlWm9uZURpY3RQdHI7CisgIHNpemVfdCBuRmFjZVpvbmVz
ID0gZmFjZVpvbmVEaWN0LnNpemUoKTsKIAotICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0
TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgZGVsZXRl
IHRlbXBTdHJpbmdTdHJ1Y3Q7Ly90eXBlCi0KLSAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMtPkdl
dExpbmUoaW5wdXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gIGRlbGV0
ZSB0ZW1wU3RyaW5nU3RydWN0Oy8vbGFiZWwKLQotICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+
R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgZGVs
ZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ly9udW1iZXIgb2YgdmFsdWVzIG9yIGZsaXBtYXAKLQotICBp
Zih0ZW1wLmZpbmQoImZsaXBNYXAiKSA9PSB2dGtzdGQ6OnN0cmluZzo6bnBvcykKKyAgZm9yKHNp
emVfdCBpID0gMDsgaSA8IG5GYWNlWm9uZXM7IGkrKykKICAgICB7Ci0gICAgLy9udW1iZXIgb2Yg
ZWxlbWVudHMKLSAgICB0b2tlbml6ZXIgPDwgdGVtcDsKLSAgICB0b2tlbml6ZXIgPj4gbnVtRWxl
bWVudDsKLSAgICBpZihudW1FbGVtZW50ID09IDApCisgICAgLy8gbG9vayB1cCBmYWNlIGxhYmVs
cworICAgIHZ0a0ZvYW1EaWN0JiBkaWN0ID0gZmFjZVpvbmVEaWN0LmVudHJ5KGkpLmRpY3Rpb25h
cnkoKTsKKyAgICB2dGtGb2FtRW50cnkmIGZhY2VMYWJlbHNFbnRyeSA9IGRpY3QubG9va3VwKCJm
YWNlTGFiZWxzIik7CisgICAgaWYoIWZhY2VMYWJlbHNFbnRyeS5mb3VuZCgpKQogICAgICAgewot
ICAgICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgICBkZWxldGUgaW5wdXQ7Ci0gICAgICByZXR1cm4g
TlVMTDsKKyAgICAgIGRlbGV0ZSBmYWNlWm9uZURpY3RQdHI7CisgICAgICB2dGtFcnJvck1hY3Jv
KDw8ImZhY2VMYWJlbHMgbm90IGZvdW5kIGluIGZhY2Vab25lcyIpOworICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgfQotCi0gICAgLy9iaW5hcnkKLSAgICBpZihiaW5hcnlXcml0ZUZvcm1hdCkK
KyAgICAvLyBza2lwIGlmIHRoZSBsaXN0IGlzIGVtcHR5CisgICAgaWYoZmFjZUxhYmVsc0VudHJ5
LmZpcnN0VmFsdWUoKS50eXBlKCkgPT0gdnRrRm9hbUVudHJ5VmFsdWU6OkVNUFRZTElTVCkKICAg
ICAgIHsKLSAgICAgIGlucHV0LT5nZXQoKTsgLy9wYXJlbnRoZXNpcwotICAgICAgZm9yKGludCBq
ID0gMDsgaiA8IG51bUVsZW1lbnQ7IGorKykKLSAgICAgICAgewotICAgICAgICBpbnB1dC0+cmVh
ZCgoY2hhciAqKSAmdGVtcEVsZW1lbnQsIHNpemVvZihpbnQpKTsKLSAgICAgICAgZmFjZVpvbmUu
cHVzaF9iYWNrKHRlbXBFbGVtZW50KTsKLSAgICAgICAgfQorICAgICAgY29udGludWU7CiAgICAg
ICB9Ci0KLSAgICAvL2FzY2lpCi0gICAgZWxzZQorICAgIGlmKGZhY2VMYWJlbHNFbnRyeS5maXJz
dFZhbHVlKCkudHlwZSgpICE9IHZ0a0ZvYW1FbnRyeVZhbHVlOjpMQUJFTExJU1QpCiAgICAgICB7
Ci0gICAgICAvL1RIUk9XIE9VVCAoCi0gICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0
TGluZShpbnB1dCk7Ci0gICAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAg
ICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKLQotICAgICAgLy9nZXQgZWFjaCBlbGVtZW50ICYg
YWRkIHRvIHZlY3RvcgotICAgICAgZm9yKGludCBqID0gMDsgaiA8IG51bUVsZW1lbnQ7IGorKykK
LSAgICAgICAgewotICAgICAgICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1
dCk7Ci0gICAgICAgIHRlbXAgPSB0ZW1wU3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgICAgICAgZGVs
ZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0KLSAgICAgICAgdG9rZW5pemVyLmNsZWFyKCk7Ci0gICAg
ICAgIHRva2VuaXplciA8PCB0ZW1wOwotICAgICAgICB0b2tlbml6ZXIgPj4gdGVtcEVsZW1lbnQ7
Ci0gICAgICAgIGZhY2Vab25lLnB1c2hfYmFjayh0ZW1wRWxlbWVudCk7Ci0gICAgICAgIH0KKyAg
ICAgIGRlbGV0ZSBmYWNlWm9uZURpY3RQdHI7CisgICAgICB2dGtFcnJvck1hY3JvKDw8ImZhY2VM
YWJlbHMgbm90IG9mIHR5cGUgbGFiZWxMaXN0Iik7CisgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICB9Ci0gICAgfQogCi0gIC8vQ3JlYXRlIHRoZSBtZXNoCi0gIGludCBrOwotICB2dGtUcmlhbmds
ZSAqIHRyaWFuZ2xlOwotICB2dGtRdWFkICogcXVhZDsKLSAgdnRrUG9seWdvbiAqIHBvbHlnb247
CisgICAgY29uc3QgdnRrc3RkOjp2ZWN0b3I8aW50PiYgbGFiZWxzID0gZmFjZUxhYmVsc0VudHJ5
LmxhYmVsTGlzdCgpOwogCi0gIC8vTE9PUCBUSFJPVUdIIEVBQ0ggRkFDRQotICBmb3IoaW50IGog
PSAwOyBqIDwgKGludClmYWNlWm9uZS5zaXplKCk7IGorKykKLSAgICB7CisgICAgLy8gYWxsb2Nh
dGUgbmV3IGdyaWQ6IHdlIGRvIG5vdCB1c2UgcmVzaXplKCkgYmVmb3JlaGFuZCBzaW5jZSBpdAor
ICAgIC8vIGNvdWxkIGxlYWQgdG8gdW5kZWZpbmVkIHBvaW50ZXIgaWYgd2UgcmV0dXJuIGJ5IGVy
cm9yCisgICAgZmFjZVpvbmVNZXNoLT52YWx1ZS5wdXNoX2JhY2sodnRrVW5zdHJ1Y3R1cmVkR3Jp
ZDo6TmV3KCkpOworICAgIHZ0a1Vuc3RydWN0dXJlZEdyaWQmIGZ6bSA9ICpmYWNlWm9uZU1lc2gt
PnZhbHVlLmJhY2soKTsKKworICAgIC8vIHNldCBmYWNlWm9uZSBzaXplCisgICAgc2l6ZV90IG5G
YWNlcyA9IGxhYmVscy5zaXplKCk7CisgICAgZnptLkFsbG9jYXRlKG5GYWNlcyk7CiAKLSAgICAv
L1RyaWFuZ3VsYXIgRmFjZQotICAgIGlmKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW2ZhY2Vab25l
W2pdXS5zaXplKCkgPT0gMykKKyAgICAvLyBhbG9vY2F0ZSBhcnJheSBmb3IgY29udmVydGluZyBp
bnQgdmVjdG9yIHRvIHZ0a0lkVHlwZSB2ZWN0b3I6CisgICAgLy8gd29ya2Fyb3VuZCBmb3IgNjRi
aXQgbWFjaGluZXMKKyAgICBpbnQgbWF4TkZhY2VQb2ludHMgPSAwOworICAgIGZvcihzaXplX3Qg
aiA9IDA7IGogPCBuRmFjZXM7IGorKykKICAgICAgIHsKLSAgICAgIHRyaWFuZ2xlID0gdnRrVHJp
YW5nbGU6Ok5ldygpOwotICAgICAgZm9yKGsgPSAwOyBrIDwgMzsgaysrKQorICAgICAgY29uc3Qg
aW50IG5GYWNlUG9pbnRzID0gZmFjZXNQb2ludHMtPnZhbHVlW2xhYmVsc1tqXV0uc2l6ZSgpOwor
ICAgICAgaWYobkZhY2VQb2ludHMgPiBtYXhORmFjZVBvaW50cykKICAgICAgICAgewotICAgICAg
ICB0cmlhbmdsZS0+R2V0UG9pbnRJZHMoKS0+U2V0SWQoaywgdGhpcy0+RmFjZVBvaW50cy0+dmFs
dWVbCi0gICAgICAgIGZhY2Vab25lW2pdXVtrXSk7CisgICAgICAgIG1heE5GYWNlUG9pbnRzID0g
bkZhY2VQb2ludHM7CiAgICAgICAgIH0KLSAgICAgIGZhY2Vab25lTWVzaC0+SW5zZXJ0TmV4dENl
bGwodHJpYW5nbGUtPkdldENlbGxUeXBlKCksCi0gICAgICAgIHRyaWFuZ2xlLT5HZXRQb2ludElk
cygpKTsKLSAgICAgIHRyaWFuZ2xlLT5EZWxldGUoKTsKICAgICAgIH0KKyAgICB2dGtJZFR5cGUq
IGZhY2VQb2ludHNWdGtJZCA9IG5ldyB2dGtJZFR5cGVbbWF4TkZhY2VQb2ludHNdOwogCi0gICAg
Ly9RdWFkcmFpYyBGYWNlCi0gICAgZWxzZSBpZih0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVtmYWNl
Wm9uZVtqXV0uc2l6ZSgpID09IDQpCisgICAgLy8gaW5zZXJ0IGZhY2VzCisgICAgZm9yKHNpemVf
dCBqID0gMDsgaiA8IG5GYWNlczsgaisrKQogICAgICAgewotICAgICAgcXVhZCA9IHZ0a1F1YWQ6
Ok5ldygpOwotICAgICAgZm9yKGsgPSAwOyBrIDwgNDsgaysrKQorICAgICAgdnRrc3RkOjp2ZWN0
b3I8aW50PiYgZmFjZVBvaW50cyA9IGZhY2VzUG9pbnRzLT52YWx1ZVtsYWJlbHNbal1dOworICAg
ICAgc2l6ZV90IG5GYWNlUG9pbnRzID0gZmFjZVBvaW50cy5zaXplKCk7CisKKyAgICAgIGZvcihz
aXplX3QgayA9IDA7IGsgPCBuRmFjZVBvaW50czsgaysrKQogICAgICAgICB7Ci0gICAgICAgIHF1
YWQtPkdldFBvaW50SWRzKCktPlNldElkKGssCi0gICAgICAgICAgdGhpcy0+RmFjZVBvaW50cy0+
dmFsdWVbZmFjZVpvbmVbal1dW2tdKTsKKyAgICAgICAgZmFjZVBvaW50c1Z0a0lkW2tdID0gZmFj
ZVBvaW50c1trXTsKICAgICAgICAgfQotICAgICAgZmFjZVpvbmVNZXNoLT5JbnNlcnROZXh0Q2Vs
bChxdWFkLT5HZXRDZWxsVHlwZSgpLAotICAgICAgICBxdWFkLT5HZXRQb2ludElkcygpKTsKLSAg
ICAgIHF1YWQtPkRlbGV0ZSgpOwotICAgICAgfQogCi0gICAgLy9Qb2x5Z29uYWwgRmFjZQotICAg
IGVsc2UKLSAgICAgIHsKLSAgICAgIHBvbHlnb24gPSB2dGtQb2x5Z29uOjpOZXcoKTsKLSAgICAg
IGZvcihrID0gMDsgayA8IChpbnQpdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbZmFjZVpvbmVbal1d
LnNpemUoKTsgaysrKQorICAgICAgLy90cmlhbmdsZQorICAgICAgaWYobkZhY2VQb2ludHMgPT0g
MykKKyAgICAgICAgeworICAgICAgICBmem0uSW5zZXJ0TmV4dENlbGwoVlRLX1RSSUFOR0xFLCAz
LCBmYWNlUG9pbnRzVnRrSWQpOworICAgICAgICB9CisgICAgICAvLyBxdWFkCisgICAgICBlbHNl
IGlmKG5GYWNlUG9pbnRzID09IDQpCisgICAgICAgIHsKKyAgICAgICAgZnptLkluc2VydE5leHRD
ZWxsKFZUS19RVUFELCA0LCBmYWNlUG9pbnRzVnRrSWQpOworICAgICAgICB9CisgICAgICAvL3Bv
bHlnb24KKyAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICBwb2x5Z29uLT5HZXRQb2ludElk
cygpLT5JbnNlcnRJZChrLCB0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICBmYWNl
Wm9uZVtqXV1ba10pOworICAgICAgICBmem0uSW5zZXJ0TmV4dENlbGwoVlRLX1BPTFlHT04sIG5G
YWNlUG9pbnRzLAorICAgICAgICAgIGZhY2VQb2ludHNWdGtJZCk7CiAgICAgICAgIH0KLSAgICAg
IGZhY2Vab25lTWVzaC0+SW5zZXJ0TmV4dENlbGwocG9seWdvbi0+R2V0Q2VsbFR5cGUoKSwKLSAg
ICAgICAgcG9seWdvbi0+R2V0UG9pbnRJZHMoKSk7Ci0gICAgICBwb2x5Z29uLT5EZWxldGUoKTsK
ICAgICAgIH0KKworICAgIGRlbGV0ZSBbXSBmYWNlUG9pbnRzVnRrSWQ7CisgICAgZnptLlNldFBv
aW50cyhwb2ludHMpOwogICAgIH0KIAotICAvL3NldCB0aGUgZmFjZSB6b25lIHBvaW50cwotICBm
YWNlWm9uZU1lc2gtPlNldFBvaW50cyh0aGlzLT5Qb2ludHMpOwotICBpbnB1dC0+Y2xvc2UoKTsK
LSAgZGVsZXRlIGlucHV0OworICBkZWxldGUgZmFjZVpvbmVEaWN0UHRyOworCiAgIHZ0a0RlYnVn
TWFjcm8oPDwiRmFjZSB6b25lIG1lc2ggY3JlYXRlZCIpOwotICByZXR1cm4gZmFjZVpvbmVNZXNo
OworICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjg2NCw2
MjggKzQ2NDMsNTkwIEBACiAvLyAgcmV0dXJucyBhIHJlcXVlc3RlZCBjZWxsIHpvbmUgbWVzaAog
Ly8KIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLXZ0a1Vuc3RydWN0dXJlZEdyaWQgKiB2dGtPcGVu
Rk9BTVJlYWRlcjo6R2V0Q2VsbFpvbmVNZXNoKGludCB0aW1lU3RhdGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbFpvbmVJ
bmRleCkKK2Jvb2wgdnRrT3BlbkZPQU1SZWFkZXI6OkdldENlbGxab25lTWVzaCgKKyAgdW5zdHJ1
Y3R1cmVkR3JpZFZlY3RvciogY2VsbFpvbmVNZXNoLCBmYWNlVmVjdG9yVmVjdG9yKiBmYWNlc09m
Q2VsbCwKKyAgaW50VmVjdG9yVmVjdG9yKiBmYWNlc1BvaW50cywgdnRrUG9pbnRzKiBwb2ludHMs
IGludCB0aW1lU3RhdGUpCiB7Ci0gIHZ0a1Vuc3RydWN0dXJlZEdyaWQgKiBjZWxsWm9uZU1lc2gg
PSB2dGtVbnN0cnVjdHVyZWRHcmlkOjpOZXcoKTsKLSAgdnRrc3RkOjpzdHJpbmcgY2VsbFpvbmVz
UGF0aCA9IHRoaXMtPlBhdGhQcmVmaXgtPnZhbHVlICsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMtPlBvbHlNZXNoRmFjZXNEaXItPnZhbHVlW3RpbWVTdGF0ZV0gKwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9wb2x5TWVzaC9jZWxsWm9uZXMiOwotICB2
dGtEZWJ1Z01hY3JvKDw8IkNyZWF0ZSBjZWxsIHpvbmUgbWVzaDogIjw8Y2VsbFpvbmVzUGF0aC5j
X3N0cigpKTsKLSAgdnRrc3RkOjpzdHJpbmcgdGVtcDsKLSAgc3RkU3RyaW5nKiB0ZW1wU3RyaW5n
U3RydWN0OwotICBib29sIGJpbmFyeVdyaXRlRm9ybWF0OwotICBpZnN0cmVhbSAqIGlucHV0ID0g
bmV3IGlmc3RyZWFtKGNlbGxab25lc1BhdGguY19zdHIoKSwgaW9zOjppbiBWVEtfSU9TX05PQ1JF
QVRFKTsKLSAgLy9tYWtlIHN1cmUgZmlsZSBleGlzdHMKLSAgaWYoaW5wdXQtPmZhaWwoKSkKLSAg
ICB7Ci0gICAgaW5wdXQtPmNsb3NlKCk7Ci0gICAgZGVsZXRlIGlucHV0OwotICAgIHJldHVybiBj
ZWxsWm9uZU1lc2g7Ci0gICAgfQotCi0gIC8vZGV0ZXJtaW5lIGlmIGZpbGUgaXMgYmluYXJ5IG9y
IGFzY2lpCi0gIHdoaWxlKHRlbXAuZmluZCgiZm9ybWF0IikgPT0gdnRrc3RkOjpzdHJpbmc6Om5w
b3MpCi0gICAgewotICAgIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsK
LSAgICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0gICAgZGVsZXRlIHRlbXBTdHJp
bmdTdHJ1Y3Q7Ci0gICAgfQotICBpbnB1dC0+Y2xvc2UoKTsKKyAgdnRrRGVidWdNYWNybyg8PCJD
cmVhdGUgY2VsbCB6b25lIG1lc2giKTsKIAotICAvL3Jlb3BlbiBmaWxlIGluIGNvcnJlY3QgZm9y
bWF0Ci0gIGlmKHRlbXAuZmluZCgiYmluYXJ5IikgIT0gdnRrc3RkOjpzdHJpbmc6Om5wb3MpCisg
IHZ0a0ZvYW1EaWN0KiBjZWxsWm9uZURpY3RQdHIKKyAgICA9IHRoaXMtPkdhdGhlckJsb2Nrcygi
Y2VsbFpvbmVzIiwgdGltZVN0YXRlLCBmYWxzZSk7CisKKyAgaWYoY2VsbFpvbmVEaWN0UHRyID09
IE5VTEwpCiAgICAgewotI2lmZGVmIF9XSU4zMgotICAgIGlucHV0LT5vcGVuKGNlbGxab25lc1Bh
dGguY19zdHIoKSwgaW9zOjpiaW5hcnkgfCBpb3M6OmluIFZUS19JT1NfTk9DUkVBVEUpOwotI2Vs
c2UKLSAgICBpbnB1dC0+b3BlbihjZWxsWm9uZXNQYXRoLmNfc3RyKCksIGlvczo6aW4gVlRLX0lP
U19OT0NSRUFURSk7Ci0jZW5kaWYKLSAgICBiaW5hcnlXcml0ZUZvcm1hdCA9IHRydWU7CisgICAg
Ly8gbm90IGFuIGVycm9yCisgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICBlbHNlCisKKyAgdnRr
Rm9hbURpY3QmIGNlbGxab25lRGljdCA9ICpjZWxsWm9uZURpY3RQdHI7CisgIHNpemVfdCBuQ2Vs
bFpvbmVzID0gY2VsbFpvbmVEaWN0LnNpemUoKTsKKworICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwg
bkNlbGxab25lczsgaSsrKQogICAgIHsKLSAgICBpbnB1dC0+b3BlbihjZWxsWm9uZXNQYXRoLmNf
c3RyKCksaW9zOjppbik7Ci0gICAgYmluYXJ5V3JpdGVGb3JtYXQgPSBmYWxzZTsKKyAgICAvLyBs
b29rIHVwIGNlbGwgbGFiZWxzCisgICAgdnRrRm9hbURpY3QmIGRpY3QgPSBjZWxsWm9uZURpY3Qu
ZW50cnkoaSkuZGljdGlvbmFyeSgpOworICAgIHZ0a0ZvYW1FbnRyeSYgY2VsbExhYmVsc0VudHJ5
ID0gZGljdC5sb29rdXAoImNlbGxMYWJlbHMiKTsKKyAgICBpZighY2VsbExhYmVsc0VudHJ5LmZv
dW5kKCkpCisgICAgICB7CisgICAgICBkZWxldGUgY2VsbFpvbmVEaWN0UHRyOworICAgICAgdnRr
RXJyb3JNYWNybyg8PCJjZWxsTGFiZWxzIG5vdCBmb3VuZCBpbiBjZWxsWm9uZXMiKTsKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAvLyBza2lwIGlmIHRoZSBsaXN0IGlzIGVtcHR5
CisgICAgaWYoY2VsbExhYmVsc0VudHJ5LmZpcnN0VmFsdWUoKS50eXBlKCkgPT0gdnRrRm9hbUVu
dHJ5VmFsdWU6OkVNUFRZTElTVCkKKyAgICAgIHsKKyAgICAgIGNvbnRpbnVlOworICAgICAgfQor
ICAgIGlmKGNlbGxMYWJlbHNFbnRyeS5maXJzdFZhbHVlKCkudHlwZSgpICE9IHZ0a0ZvYW1FbnRy
eVZhbHVlOjpMQUJFTExJU1QpCisgICAgICB7CisgICAgICBkZWxldGUgY2VsbFpvbmVEaWN0UHRy
OworICAgICAgdnRrRXJyb3JNYWNybyg8PCJjZWxsTGFiZWxzIG5vdCBvZiB0eXBlIGxhYmVsTGlz
dCIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgY29uc3QgdnRrc3RkOjp2
ZWN0b3I8aW50PiYgbGFiZWxzID0gY2VsbExhYmVsc0VudHJ5LmxhYmVsTGlzdCgpOworCisgICAg
Ly8gYWxsb2NhdGUgbmV3IGdyaWQ6IHdlIGRvIG5vdCB1c2UgcmVzaXplKCkgYmVmb3JlaGFuZCBz
aW5jZSBpdAorICAgIC8vIGNvdWxkIGxlYWQgdG8gdW5kZWZpbmVkIHBvaW50ZXIgaWYgd2UgcmV0
dXJuIGJ5IGVycm9yCisgICAgY2VsbFpvbmVNZXNoLT52YWx1ZS5wdXNoX2JhY2sodnRrVW5zdHJ1
Y3R1cmVkR3JpZDo6TmV3KCkpOworICAgIHZ0a1Vuc3RydWN0dXJlZEdyaWQqIGN6bSA9IGNlbGxa
b25lTWVzaC0+dmFsdWUuYmFjaygpOworCisgICAgLy8gc2V0IGNlbGxab25lIHNpemUKKyAgICBz
aXplX3QgbkNlbGxzID0gbGFiZWxzLnNpemUoKTsKKyAgICBjem0tPkFsbG9jYXRlKG5DZWxscyk7
CisKKyAgICAvLyBpbnNlcnQgY2VsbHMKKyAgICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgbkNlbGxz
OyBqKyspCisgICAgICB7CisgICAgICB0aGlzLT5JbnNlcnRDZWxsVG9HcmlkKGN6bSwgbGFiZWxz
W2pdLCBmYWNlc09mQ2VsbCwgZmFjZXNQb2ludHMpOworICAgICAgfQorCisgICAgLy9zZXQgY2Vs
bCB6b25lIHBvaW50cworICAgIGNlbGxab25lTWVzaC0+dmFsdWVbaV0tPlNldFBvaW50cyhwb2lu
dHMpOwogICAgIH0KIAotICB2dGtzdGQ6OnN0cmluZyB0b2tlbjsKLSAgdnRrc3lzX2lvczo6c3Ry
aW5nc3RyZWFtIHRva2VuaXplcjsKLSAgdnRrc3RkOjp2ZWN0b3I8IGludCA+IGNlbGxab25lOwot
ICBpbnQgdGVtcEVsZW1lbnQ7Ci0gIHZ0a3N0ZDo6dmVjdG9yPCB2dGtzdGQ6OnZlY3RvciA8IGlu
dCA+ID4gdGVtcEVsZW1lbnRab25lczsKLSAgaW50IG51bUVsZW1lbnQ7CisgIGRlbGV0ZSBjZWxs
Wm9uZURpY3RQdHI7CisgIHZ0a0RlYnVnTWFjcm8oPDwiQ2VsbCB6b25lIG1lc2ggY3JlYXRlZCIp
OworICByZXR1cm4gdHJ1ZTsKK30KKwordnRrUG9seURhdGEqIHZ0a09wZW5GT0FNUmVhZGVyOjpN
YWtlTGFncmFuZ2lhbk1lc2goaW50IHRpbWVTdGF0ZSkKK3sKKyAgdnRrU3RkU3RyaW5nIHBvc2l0
aW9uc1BhdGggPSAqdGhpcy0+UGF0aFByZWZpeAorICAgICsgdGhpcy0+VGltZU5hbWVzLT5HZXRW
YWx1ZSh0aW1lU3RhdGUpICsgICIvbGFncmFuZ2lhbi9wb3NpdGlvbnMiOwogCi0gIC8vZmluZCBk
ZXNpcmVkIG1lc2ggZW50cnkKLSAgd2hpbGUodGVtcC5maW5kKHRoaXMtPkNlbGxab25lTmFtZXMt
PnZhbHVlW2NlbGxab25lSW5kZXhdKSA9PSAKLSAgICAgICAgdnRrc3RkOjpzdHJpbmc6Om5wb3Mp
CisgIHZ0a0ZvYW1JT29iamVjdCBpbzsKKyAgaWYoIShpby5vcGVuKHBvc2l0aW9uc1BhdGgpIHx8
IGlvLm9wZW4ocG9zaXRpb25zUGF0aCArICIuZ3oiKSkpCisgICAgeworICAgIHZ0a0Vycm9yTWFj
cm8oPDwiRXJyb3Igb3BlbmluZyAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKSA8PCAiOiAiCisg
ICAgICA8PCBpby5lcnJvcigpLnN0cigpLmNfc3RyKCkpOworICAgIHJldHVybiBOVUxMOworICAg
IH0KKyAgdnRrRm9hbURpY3QgZGljdDsKKyAgaWYoIWRpY3QucmVhZChpbykpCisgICAgeworICAg
IHZ0a0Vycm9yTWFjcm8oPDwiRXJyb3IgcmVhZGluZyBsaW5lICIgPDwgaW8ubGluZU51bWJlcigp
CisgICAgICA8PCAiIG9mICIgPDwgaW8uZmlsZU5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgaW8u
ZXJyb3IoKS5zdHIoKS5jX3N0cigpKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGlmKGRp
Y3QudHlwZSgpICE9IHZ0a0ZvYW1EaWN0OjpWRUNUT1JMSVNUKQogICAgIHsKLSAgICB0ZW1wU3Ry
aW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdT
dHJ1Y3QtPnZhbHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICAgIHZ0a0Vycm9y
TWFjcm8oPDwiVGhlIGZpbGUgdHlwZSBvZiAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKQorICAg
ICAgPDwgIiBpcyBub3QgYSB2ZWN0b3JMaXN0Iik7CisgICAgcmV0dXJuIE5VTEw7CiAgICAgfQot
ICB0ZW1wU3RyaW5nU3RydWN0ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gIHRlbXAgPSB0ZW1w
U3RyaW5nU3RydWN0LT52YWx1ZTsKLSAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ly90aHJvdyBv
dXQgewogCi0gIHRlbXBTdHJpbmdTdHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgdGVt
cCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwotICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsv
L3R5cGUKKyAgdnRrRG91YmxlQXJyYXkmIHZsID0gZGljdC52ZWN0b3JMaXN0KCk7CisgIGNvbnN0
IHZ0a0lkVHlwZSBuUGFydGljbGVzID0gdmwuR2V0TnVtYmVyT2ZUdXBsZXMoKTsKKyAgLy9pbnN0
YW50aWF0ZSB0aGUgcG9pbnRzIGNsYXNzCisgIHZ0a1BvaW50cyogcG9pbnRzID0gdnRrUG9pbnRz
OjpOZXcoKTsKKyAgcG9pbnRzLT5TZXROdW1iZXJPZlBvaW50cyhuUGFydGljbGVzKTsKKyAgdnRr
UG9seURhdGEqIGxhZ3JhbmdpYW5NZXNoID0gdnRrUG9seURhdGE6Ok5ldygpOworICBsYWdyYW5n
aWFuTWVzaC0+QWxsb2NhdGUoblBhcnRpY2xlcyk7CiAKLSAgdGVtcFN0cmluZ1N0cnVjdCA9IHRo
aXMtPkdldExpbmUoaW5wdXQpOwotICB0ZW1wID0gdGVtcFN0cmluZ1N0cnVjdC0+dmFsdWU7Ci0g
IGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0OworICBmb3IodnRrSWRUeXBlIGkgPSAwLCBpbmRleCA9
IDA7IGkgPCBuUGFydGljbGVzOyBpKyssIGluZGV4ICs9IDMpCisgICAgeworICAgIHBvaW50cy0+
U2V0UG9pbnQoaSwgdmwuR2V0UG9pbnRlcihpbmRleCkpOworICAgIGxhZ3JhbmdpYW5NZXNoLT5J
bnNlcnROZXh0Q2VsbChWVEtfVkVSVEVYLCAxLCAmaSk7CisgICAgfQogCi0gIHRlbXBTdHJpbmdT
dHJ1Y3QgPSB0aGlzLT5HZXRMaW5lKGlucHV0KTsKLSAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3Qt
PnZhbHVlOwotICBkZWxldGUgdGVtcFN0cmluZ1N0cnVjdDsKKyAgbGFncmFuZ2lhbk1lc2gtPlNl
dFBvaW50cyhwb2ludHMpOworICBwb2ludHMtPkRlbGV0ZSgpOworICByZXR1cm4gbGFncmFuZ2lh
bk1lc2g7Cit9CiAKLSAgLy9udW1iZXIgb2YgZWxlbWVudHMKLSAgdG9rZW5pemVyIDw8IHRlbXA7
Ci0gIHRva2VuaXplciA+PiBudW1FbGVtZW50OworYm9vbCB2dGtPcGVuRk9BTVJlYWRlcjo6R2V0
TGFncmFuZ2lhblZhcmlhYmxlQXRUaW1lc3RlcCgKKyAgdnRrUG9seURhdGEqIGxhZ3JhbmdpYW5N
ZXNoLCBjb25zdCBjaGFyKiB2YXJOYW1lSW4sIGludCB0aW1lU3RhdGUpCit7CisgIHZ0a1N0ZFN0
cmluZyB2YXJQYXRoID0gKnRoaXMtPlBhdGhQcmVmaXgKKyAgICArIHRoaXMtPlRpbWVOYW1lcy0+
R2V0VmFsdWUodGltZVN0YXRlKSArICIvbGFncmFuZ2lhbi8iCisgICAgKyB2dGtTdGRTdHJpbmco
dmFyTmFtZUluKTsKIAotICAvL2JpbmFyeQotICBpZihiaW5hcnlXcml0ZUZvcm1hdCkKKyAgLy8g
b3BlbiB0aGUgZmlsZQorICB2dGtGb2FtSU9vYmplY3QgaW87CisgIGlmKCFpby5vcGVuKHZhclBh
dGgpKQogICAgIHsKLSAgICBpbnB1dC0+Z2V0KCk7IC8vcGFyZW50aGVzaXMKLSAgICBmb3IoaW50
IGogPSAwOyBqIDwgbnVtRWxlbWVudDsgaisrKQotICAgICAgewotICAgICAgaW5wdXQtPnJlYWQo
KGNoYXIgKikgJnRlbXBFbGVtZW50LCBzaXplb2YoaW50KSk7Ci0gICAgICBjZWxsWm9uZS5wdXNo
X2JhY2sodGVtcEVsZW1lbnQpOwotICAgICAgfQorICAgIHZ0a0Vycm9yTWFjcm8oPDwiRXJyb3Ig
b3BlbmluZyAiIDw8IGlvLmZpbGVOYW1lKCkuY19zdHIoKSA8PCAiOiAiCisgICAgICA8PCBpby5l
cnJvcigpLnN0cigpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgLy9h
c2NpaQotICBlbHNlCisgIC8vIGlmIHRoZSB2YXJpYWJsZSBpcyBkaXNhYmxlZCBvbiBzZWxlY3Rp
b24gcGFuZWwgdGhlbiBza2lwIGl0CisgIHZ0a1N0ZFN0cmluZyBzZWxlY3Rpb25OYW1lCisgICAg
PSB2dGtTdGRTdHJpbmcoImxhZ3JhbmdpYW4vIikgKyBpby5vYmplY3ROYW1lKCk7CisgIGlmKHRo
aXMtPlBvaW50RGF0YUFycmF5U2VsZWN0aW9uLT5BcnJheUV4aXN0cyhzZWxlY3Rpb25OYW1lLmNf
c3RyKCkpCisgICAgJiYgIXRoaXMtPlBvaW50RGF0YUFycmF5U2VsZWN0aW9uLT5BcnJheUlzRW5h
YmxlZChzZWxlY3Rpb25OYW1lLmNfc3RyKCkpKQogICAgIHsKLSAgICB0ZW1wU3RyaW5nU3RydWN0
ID0gdGhpcy0+R2V0TGluZShpbnB1dCk7Ci0gICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZh
bHVlOwotICAgIGRlbGV0ZSB0ZW1wU3RyaW5nU3RydWN0Oy8vdGhyb3cgb3V0ICgKLQotICAgIC8v
Z2V0IGVhY2ggZWxlbWVudCAmIGFkZCB0byB2ZWN0b3IKLSAgICBmb3IoaW50IGogPSAwOyBqIDwg
bnVtRWxlbWVudDsgaisrKQotICAgICAgewotICAgICAgdGVtcFN0cmluZ1N0cnVjdCA9IHRoaXMt
PkdldExpbmUoaW5wdXQpOwotICAgICAgdGVtcCA9IHRlbXBTdHJpbmdTdHJ1Y3QtPnZhbHVlOwot
ICAgICAgZGVsZXRlIHRlbXBTdHJpbmdTdHJ1Y3Q7Ci0KLSAgICAgIHRva2VuaXplci5jbGVhcigp
OwotICAgICAgdG9rZW5pemVyIDw8IHRlbXA7Ci0gICAgICB0b2tlbml6ZXIgPj4gdGVtcEVsZW1l
bnQ7Ci0gICAgICBjZWxsWm9uZS5wdXNoX2JhY2sodGVtcEVsZW1lbnQpOwotICAgICAgfQorICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAvL0NyZWF0ZSB0aGUgbWVzaAotICBib29sIGZvdW5k
RHVwID0gZmFsc2U7Ci0gIHZ0a3N0ZDo6dmVjdG9yPCBpbnQgPiBjZWxsUG9pbnRzOwotICB2dGtz
dGQ6OnZlY3RvcjwgaW50ID4gdGVtcEZhY2VzWzJdOwotICB2dGtzdGQ6OnZlY3RvcjwgaW50ID4g
Zmlyc3RGYWNlOwotICBpbnQgcGl2b3RQb2ludCA9IDA7Ci0gIGludCBpLCBqLCBrLCBsLCBwQ291
bnQ7Ci0gIGludCBmYWNlQ291bnQgPSAwOworICAvLyByZWFkIHRoZSBmaWVsZCBmaWxlIGludG8g
ZGljdGlvbmFyeQorICB2dGtGb2FtRGljdCBkaWN0OworICBpZighZGljdC5yZWFkKGlvKSkKKyAg
ICB7CisgICAgdnRrRXJyb3JNYWNybyg8PCJFcnJvciByZWFkaW5nIGxpbmUgIiA8PCBpby5saW5l
TnVtYmVyKCkKKyAgICAgIDw8ICIgb2YgIiA8PCBpby5maWxlTmFtZSgpLmNfc3RyKCkgPDwgIjog
IiA8PCBpby5lcnJvcigpLnN0cigpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKLSAgLy9DcmVhdGUgTWVzaAotICBmb3IoaSA9IDA7IGkgPCAoaW50KWNlbGxab25lLnNpemUo
KTsgaSsrKSAgLy9lYWNoIGNlbGwKKyAgLy8gc2V0IGxhZ3JhbmdpYW4gdmFsdWVzCisgIGlmKGRp
Y3QudHlwZSgpICE9IHZ0a0ZvYW1EaWN0OjpTQ0FMQVJMSVNUCisgICAgJiYgZGljdC50eXBlKCkg
IT0gdnRrRm9hbURpY3Q6OlZFQ1RPUkxJU1QpCiAgICAgewotICAgIC8vY2FsY3VsYXRlIHRvdGFs
IHBvaW50cyBmb3IgYWxsIGZhY2VzIG9mIGEgY2VsbAotICAgIC8vdXNlZCB0byBkZXRlcm1pbmUg
Y2VsbCB0eXBlCi0gICAgaW50IHRvdGFsUG9pbnRDb3VudCA9IDA7Ci0gICAgZm9yKGogPSAwOyBq
IDwgKGludCl0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbCi0gICAgICBjZWxsWm9uZVtpXV0uc2l6
ZSgpOyBqKyspICAvL2VhY2ggZmFjZQotICAgICAgewotICAgICAgdG90YWxQb2ludENvdW50ICs9
IChpbnQpdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlWwot
ICAgICAgICBjZWxsWm9uZVtpXV1bal0uZmFjZUluZGV4XS5zaXplKCk7Ci0gICAgICB9CisgICAg
dnRrRXJyb3JNYWNybyg8PCJVbnN1cHBvcnRlZCBsYWdyYW5naWFuIGZpZWxkIHR5cGUiKTsKKyAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAvLyB1c2luZyBjZWxsIHR5cGUgLSBvcmRl
ciBwb2ludHMsIGNyZWF0ZSBjZWxsLCBhZGQgdG8gbWVzaAorICB2dGtEb3VibGVBcnJheSogbERh
dGEgPSAodnRrRG91YmxlQXJyYXkgKilkaWN0LnB0cigpOwogCi0gICAgLy9PRmhleCB8IHZ0a0hl
eGFoZWRyb24KLSAgICBpZiAodG90YWxQb2ludENvdW50ID09IDI0KQotICAgICAgewotICAgICAg
ZmFjZUNvdW50ID0gMDsKKyAgLy8gR2V0TnVtYmVyT2ZUdXBsZXMoKSB3b3JrcyBmb3IgYm90aCBz
Y2FsYXIgYW5kIHZlY3RvcgorICBjb25zdCBpbnQgblBhcnRpY2xlcyA9IGxEYXRhLT5HZXROdW1i
ZXJPZlR1cGxlcygpOworICBpZihuUGFydGljbGVzICE9IGxhZ3JhbmdpYW5NZXNoLT5HZXROdW1i
ZXJPZkNlbGxzKCkpCisgICAgeworICAgIHZ0a0Vycm9yTWFjcm8oPDwiU2l6ZXMgb2YgbGFncmFu
Z2lhbiBtZXNoIGFuZCBmaWVsZCBkb24ndCBtYXRjaCIpOworICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKLSAgICAgIC8vZ2V0IGZpcnN0IGZhY2UKLSAgICAgIGZvcihqID0gMDsgaiA8IChpbnQp
dGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlWwotICAgICAg
ICBjZWxsWm9uZVtpXV1bMF0uZmFjZUluZGV4XS5zaXplKCk7IGorKykKLSAgICAgICAgewotICAg
ICAgICBmaXJzdEZhY2UucHVzaF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZh
Y2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgICBjZWxsWm9uZVtpXV1bMF0uZmFjZUluZGV4XVtq
XSk7Ci0gICAgICAgIH0KKyAgbERhdGEtPlNldE5hbWUoc2VsZWN0aW9uTmFtZS5jX3N0cigpKTsK
KyAgbGFncmFuZ2lhbk1lc2gtPkdldFBvaW50RGF0YSgpLT5BZGRBcnJheShsRGF0YSk7CisgIGxE
YXRhLT5EZWxldGUoKTsKKworICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgLy8taWYgaXQgaXMg
YSBuZWlnaGJvciBmYWNlIGZsaXAgaXQKLSAgICAgIGlmKEZhY2VzT2ZDZWxsLT52YWx1ZVtpXVsw
XS5uZWlnaGJvckZhY2UpCisvLyByZXR1cm4gMCBpZiB0aGVyZSdzIGFueSBlcnJvciwgMSBpZiBz
dWNjZXNzCitpbnQgdnRrT3BlbkZPQU1SZWFkZXI6OkNyZWF0ZURhdGFTZXQodnRrTXVsdGlCbG9j
a0RhdGFTZXQgKm91dHB1dCwKKyAgaW50IHRpbWVTdGF0ZSkKK3sKKyAgaW50IG9sZFRpbWVTdGF0
ZSA9IHRoaXMtPk9sZFRpbWVTdGVwOworICB2dGtQb2x5RGF0YSogbGFncmFuZ2lhbk1lc2ggPSBO
VUxMOworICBib29sIHVwZGF0ZVZhcmlhYmxlcyA9IHRydWU7CisKKyAgLy8gZGV0ZXJtaW5lIGlm
IHdlIG5lZWQgdG8gcmVjb25zdHJ1Y3QgbWVzaGVzCisgIGlmKHRoaXMtPkNhY2hlTWVzaCAmJiBv
bGRUaW1lU3RhdGUgPj0gMAorICAgICYmIHRoaXMtPlBvbHlNZXNoRmFjZXNEaXItPnZhbHVlW3Rp
bWVTdGF0ZV0KKyAgICAgICA9PSB0aGlzLT5Qb2x5TWVzaEZhY2VzRGlyLT52YWx1ZVtvbGRUaW1l
U3RhdGVdCisgICAgJiYgdGhpcy0+RmFjZU93bmVyICE9IE5VTEwKKyAgICAmJiB0aGlzLT5QYXRj
aFNlbGVjdGlvblN0YXR1cyA9PSB0aGlzLT5QYXRjaFNlbGVjdGlvbk9sZFN0YXR1cykKKyAgICB7
CisgICAgaWYoKHRpbWVTdGF0ZSA9PSBvbGRUaW1lU3RhdGUpIAorICAgICAgICYmICh0aGlzLT5D
ZWxsU2VsZWN0aW9uU3RhdHVzID09IHRoaXMtPkNlbGxTZWxlY3Rpb25PbGRTdGF0dXMpCisgICAg
ICAgJiYgKHRoaXMtPlBvaW50U2VsZWN0aW9uU3RhdHVzID09IHRoaXMtPlBvaW50U2VsZWN0aW9u
T2xkU3RhdHVzKSkKKyAgICAgIHsKKyAgICAgIHVwZGF0ZVZhcmlhYmxlcyA9IGZhbHNlOworICAg
ICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIC8vIGNsZWFuIHVwIGFycmF5cyBvZiB0aGUg
cHJldmlvdXMgdGltZXN0ZXAKKyAgICAgIC8vIENoZWNrIGlmIEludGVybmFsIE1lc2ggRXhpc3Rz
IGZpcnN0Li4uCisgICAgICBpZih0aGlzLT5JbnRlcm5hbE1lc2ggIT0gTlVMTCkKICAgICAgICAg
ewotICAgICAgICBpbnQgdGVtcFBvcDsKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludClmaXJz
dEZhY2Uuc2l6ZSgpIC0gMTsgaysrKQorICAgICAgICB2dGtDZWxsRGF0YSogaW50ZXJuYWxDZWxs
RGF0YSA9IHRoaXMtPkludGVybmFsTWVzaC0+R2V0Q2VsbERhdGEoKTsKKyAgICAgICAgd2hpbGUo
aW50ZXJuYWxDZWxsRGF0YS0+R2V0QXJyYXlOYW1lKDApKQogICAgICAgICAgIHsKLSAgICAgICAg
ICB0ZW1wUG9wID0gZmlyc3RGYWNlW2ZpcnN0RmFjZS5zaXplKCktMV07Ci0gICAgICAgICAgZmly
c3RGYWNlLnBvcF9iYWNrKCk7Ci0gICAgICAgICAgZmlyc3RGYWNlLmluc2VydChmaXJzdEZhY2Uu
YmVnaW4oKSsxK2ssIHRlbXBQb3ApOworICAgICAgICAgIGludGVybmFsQ2VsbERhdGEtPlJlbW92
ZUFycmF5KGludGVybmFsQ2VsbERhdGEtPkdldEFycmF5TmFtZSgwKSk7CiAgICAgICAgICAgfQog
ICAgICAgICB9Ci0KLSAgICAgIC8vYWRkIGZpcnN0IGZhY2UgdG8gY2VsbCBwb2ludHMKLSAgICAg
IGZvcihqID0wOyBqIDwgKGludClmaXJzdEZhY2Uuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAg
ICAgICAgY2VsbFBvaW50cy5wdXNoX2JhY2soZmlyc3RGYWNlW2pdKTsKLSAgICAgICAgfQotCi0g
ICAgICBmb3IoaW50IHBvaW50Q291bnQgPSAwO3BvaW50Q291bnQgPCAoaW50KWZpcnN0RmFjZS5z
aXplKCk7cG9pbnRDb3VudCsrKQorICAgICAgLy8gQ2hlY2sgaWYgQm91bmRhcnkgTWVzaCBFeGlz
dHMgZmlyc3QuLi4KKyAgICAgIGlmKHRoaXMtPkJvdW5kYXJ5TWVzaCAhPSBOVUxMKQogICAgICAg
ICB7Ci0gICAgICAgIC8vZmluZCB0aGUgMiBvdGhlciBmYWNlcyBjb250YWluaW5nIGVhY2ggcG9p
bnQgLSBzdGFydCB3aXRoIGZhY2UgMQotICAgICAgICBmb3IoaiA9IDE7IGogPCAoaW50KXRoaXMt
PkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgICBjZWxsWm9uZVtpXV0uc2l6ZSgpOyBqKysp
ICAvL2VhY2ggZmFjZQorICAgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdGhpcy0+Qm91bmRh
cnlNZXNoLT52YWx1ZS5zaXplKCk7IGkrKykKICAgICAgICAgICB7Ci0gICAgICAgICAgZm9yKGsg
PSAwOyBrIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVt0aGlzLT5GYWNlc09mQ2VsbC0+
Ci0gICAgICAgICAgICAgIHZhbHVlW2NlbGxab25lW2ldXVtqXS5mYWNlSW5kZXhdLnNpemUoKTsg
aysrKQorICAgICAgICAgIHZ0a0NlbGxEYXRhKiBib3VuZGFyeUNlbGxEYXRhCisgICAgICAgICAg
ICA9IHRoaXMtPkJvdW5kYXJ5TWVzaC0+dmFsdWVbaV0tPkdldENlbGxEYXRhKCk7CisgICAgICAg
ICAgd2hpbGUoYm91bmRhcnlDZWxsRGF0YS0+R2V0QXJyYXlOYW1lKDApKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgaWYoZmlyc3RGYWNlW3BvaW50Q291bnRdID09IHRoaXMtPkZhY2VQb2lu
dHMtPgotICAgICAgICAgICAgICAgdmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2NlbGxa
b25lW2ldXVtqXS5mYWNlSW5kZXhdW2tdKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
IC8vYW5vdGhlciBmYWNlIHdpdGggdGhlIHBvaW50Ci0gICAgICAgICAgICAgIGZvcihsID0gMDsg
bCA8IChpbnQpdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2NlbGxab25lW2ldXVtqXS5mYWNl
SW5kZXhdLnNpemUoKTsgbCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0
ZW1wRmFjZXNbZmFjZUNvdW50XS5wdXNoX2JhY2sodGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbCi0g
ICAgICAgICAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbY2VsbFpvbmVbaV1dW2pd
LmZhY2VJbmRleF0KLSAgICAgICAgICAgICAgICAgIFtsXSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICBmYWNlQ291bnQrKzsKLSAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ym91bmRhcnlDZWxsRGF0YS0+UmVtb3ZlQXJyYXkoYm91bmRhcnlDZWxsRGF0YS0+R2V0QXJyYXlO
YW1lKDApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9Ci0KLSAgICAgICAgLy9sb2NhdGUg
dGhlIHBpdm90IHBvaW50IGNvbnRhaW5lZCBpbiBmYWNlcyAwICYgMQotICAgICAgICBmb3IoaiA9
IDA7IGogPCAoaW50KXRlbXBGYWNlc1swXS5zaXplKCk7IGorKykKKyAgICAgICAgfQorICAgICAg
Ly8gaWYgb25seSBwb2ludCBjb29yZGluYXRlcyBjaGFuZ2UgcmVmcmVzaCBwb2ludCB2ZWN0b3IK
KyAgICAgIGlmKHRoaXMtPlBvbHlNZXNoUG9pbnRzRGlyLT52YWx1ZVt0aW1lU3RhdGVdCisgICAg
ICAgICE9IHRoaXMtPlBvbHlNZXNoUG9pbnRzRGlyLT52YWx1ZVtvbGRUaW1lU3RhdGVdKQorICAg
ICAgICB7CisgICAgICAgIC8vZ2V0IHRoZSBwb2ludHMKKyAgICAgICAgdnRrUG9pbnRzKiBwb2lu
dHMgPSB0aGlzLT5HZXRQb2ludHModGltZVN0YXRlKTsKKyAgICAgICAgaWYocG9pbnRzID09IE5V
TEwpCiAgICAgICAgICAgewotICAgICAgICAgIGZvcihrID0gMDsgayA8IChpbnQpdGVtcEZhY2Vz
WzFdLnNpemUoKTsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYodGVtcEZhY2Vz
WzBdW2pdID09IHRlbXBGYWNlc1sxXVtrXSAmJiB0ZW1wRmFjZXNbMF1bal0gIT0KLSAgICAgICAg
ICAgICAgZmlyc3RGYWNlW3BvaW50Q291bnRdKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIHBpdm90UG9pbnQgPSB0ZW1wRmFjZXNbMF1bal07Ci0gICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgfQotICAgICAgICBjZWxsUG9pbnRzLnB1c2hfYmFjayhwaXZvdFBvaW50KTsKLSAgICAg
ICAgdGVtcEZhY2VzWzBdLmNsZWFyKCk7Ci0gICAgICAgIHRlbXBGYWNlc1sxXS5jbGVhcigpOwot
ICAgICAgICBmYWNlQ291bnQ9MDsKLSAgICAgICAgfQogCi0gICAgICAgIC8vY3JlYXRlIHRoZSBo
ZXggY2VsbCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1lc2gKLSAgICAgICAgdnRrSGV4YWhlZHJv
biAqIGhleGFoZWRyb24gPSB2dGtIZXhhaGVkcm9uOjpOZXcoKTsKLSAgICAgICAgZm9yKHBDb3Vu
dCA9IDA7IHBDb3VudCA8IChpbnQpY2VsbFBvaW50cy5zaXplKCk7IHBDb3VudCsrKQorICAgICAg
ICAvLyByZWZyZXNoIHRoZSBwb2ludHMgaW4gZWFjaCBtZXNoCisgICAgICAgIC8vIENoZWNrIGlm
IEludGVybmFsIE1lc2ggZXhpc3RzIGZpcnN0Li4uLgorICAgICAgICBpZih0aGlzLT5JbnRlcm5h
bE1lc2ggIT0gTlVMTCkKICAgICAgICAgICB7Ci0gICAgICAgICAgaGV4YWhlZHJvbi0+R2V0UG9p
bnRJZHMoKS0+U2V0SWQocENvdW50LCBjZWxsUG9pbnRzW3BDb3VudF0pOworICAgICAgICAgIHRo
aXMtPkludGVybmFsTWVzaC0+U2V0UG9pbnRzKHBvaW50cyk7CiAgICAgICAgICAgfQotICAgICAg
ICBjZWxsWm9uZU1lc2gtPkluc2VydE5leHRDZWxsKGhleGFoZWRyb24tPkdldENlbGxUeXBlKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4YWhlZHJvbi0+R2V0UG9p
bnRJZHMoKSk7Ci0gICAgICAgIGhleGFoZWRyb24tPkRlbGV0ZSgpOwotICAgICAgICBjZWxsUG9p
bnRzLmNsZWFyKCk7Ci0gICAgICAgIGZpcnN0RmFjZS5jbGVhcigpOwotICAgICAgICB9Ci0KLSAg
ICAvL09GcHJpc20gfCB2dGtXZWRnZQotICAgIGVsc2UgaWYgKHRvdGFsUG9pbnRDb3VudCA9PSAx
OCkKLSAgICAgIHsKLSAgICAgIGZhY2VDb3VudCA9IDA7Ci0gICAgICBpbnQgaW5kZXggPSAwOwot
Ci0gICAgICAvL2ZpbmQgZmlyc3QgdHJpYW5ndWxhciBmYWNlCi0gICAgICBmb3IoaiA9IDA7IGog
PCAoaW50KXRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgY2VsbFpvbmVbaV1dLnNp
emUoKTsgaisrKSAgLy9lYWNoIGZhY2UKLSAgICAgICAgewotICAgICAgICBpZigoaW50KXRoaXMt
PkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgICBj
ZWxsWm9uZVtpXV1bal0uZmFjZUluZGV4XS5zaXplKCkgPT0gMykKKyAgICAgICAgLy8gQ2hlY2sg
aWYgQm91bmRhcnkgTWVzaCBleGlzdHMgZmlyc3QuLi4uCisgICAgICAgIGlmKHRoaXMtPkJvdW5k
YXJ5TWVzaCAhPSBOVUxMKQogICAgICAgICAgIHsKLSAgICAgICAgICBmb3IoayA9IDA7IGsgPCAo
aW50KXRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAg
ICAgICAgICAgIGNlbGxab25lW2ldXVtqXS5mYWNlSW5kZXhdLnNpemUoKTsgaysrKQorICAgICAg
ICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCB0aGlzLT5Cb3VuZGFyeU1lc2gtPnZhbHVlLnNpemUo
KTsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgZmlyc3RGYWNlLnB1c2hfYmFjayh0
aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVt0aGlzLT5GYWNlc09mQ2VsbC0+Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY2VsbFpvbmVbaV1dW2pdLmZhY2VJbmRleF1ba10p
OwotICAgICAgICAgICAgaW5kZXggPSBqOworICAgICAgICAgICAgdGhpcy0+Qm91bmRhcnlNZXNo
LT52YWx1ZVtpXS0+U2V0UG9pbnRzKHBvaW50cyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIC8vLWlmIGl0IGlzIGEgbmVp
Z2hib3IgZmFjZSBmbGlwIGl0Ci0gICAgICBpZih0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1b
MF0ubmVpZ2hib3JGYWNlKQotICAgICAgICB7Ci0gICAgICAgIGludCB0ZW1wUG9wOwotICAgICAg
ICBmb3IoayA9IDA7IGsgPCAoaW50KWZpcnN0RmFjZS5zaXplKCkgLSAxOyBrKyspCisgICAgICAg
IGlmKHRoaXMtPlBvaW50Wm9uZU1lc2ggIT0gTlVMTCkKICAgICAgICAgICB7Ci0gICAgICAgICAg
dGVtcFBvcCA9IGZpcnN0RmFjZVtmaXJzdEZhY2Uuc2l6ZSgpLTFdOwotICAgICAgICAgIGZpcnN0
RmFjZS5wb3BfYmFjaygpOwotICAgICAgICAgIGZpcnN0RmFjZS5pbnNlcnQoZmlyc3RGYWNlLmJl
Z2luKCkrMStrLCB0ZW1wUG9wKTsKKyAgICAgICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdGhp
cy0+UG9pbnRab25lTWVzaC0+dmFsdWUuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB0aGlzLT5Qb2ludFpvbmVNZXNoLT52YWx1ZVtpXS0+U2V0UG9pbnRzKHBvaW50cyk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgIC8vYWRkIGZp
cnN0IGZhY2UgdG8gY2VsbCBwb2ludHMKLSAgICAgIGZvcihqID0wOyBqIDwgKGludClmaXJzdEZh
Y2Uuc2l6ZSgpOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgY2VsbFBvaW50cy5wdXNoX2JhY2so
Zmlyc3RGYWNlW2pdKTsKLSAgICAgICAgfQotCi0gICAgICBmb3IoaW50IHBvaW50Q291bnQgPSAw
O3BvaW50Q291bnQgPCAoaW50KWZpcnN0RmFjZS5zaXplKCk7cG9pbnRDb3VudCsrKQotICAgICAg
ICB7Ci0gICAgICAgIC8vZmluZCB0aGUgMiBvdGhlciBmYWNlcyBjb250YWluaW5nIGVhY2ggcG9p
bnQKLSAgICAgICAgZm9yKGogPSAwOyBqIDwgKGludCl0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVb
Ci0gICAgICAgICAgY2VsbFpvbmVbaV1dLnNpemUoKTsgaisrKSAgLy9lYWNoIGZhY2UKKyAgICAg
ICAgaWYodGhpcy0+RmFjZVpvbmVNZXNoICE9IE5VTEwpCiAgICAgICAgICAgewotICAgICAgICAg
IGZvcihrID0gMDsgayA8IChpbnQpdGhpcy0+RmFjZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNP
ZkNlbGwtPnZhbHVlWwotICAgICAgICAgICAgY2VsbFpvbmVbaV1dW2pdLmZhY2VJbmRleF0uc2l6
ZSgpOyBrKyspIC8vZWFjaCBwb2ludAorICAgICAgICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCB0
aGlzLT5GYWNlWm9uZU1lc2gtPnZhbHVlLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgaWYoZmlyc3RGYWNlW3BvaW50Q291bnRdID09IHRoaXMtPkZhY2VQb2ludHMtPgot
ICAgICAgICAgICAgICAgdmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2NlbGxab25lW2ld
XVtqXS5mYWNlSW5kZXhdW2tdICYmCi0gICAgICAgICAgICAgICBqICE9IGluZGV4KQotICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIC8vYW5vdGhlciBmYWNlIHdpdGggcG9pbnQKLSAgICAg
ICAgICAgICAgZm9yKGwgPSAwOyBsIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVt0aGlz
LT4KLSAgICAgICAgICAgICAgICAgIEZhY2VzT2ZDZWxsLT52YWx1ZVtjZWxsWm9uZVtpXV1bal0u
ZmFjZUluZGV4XS5zaXplKCk7IGwrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGVtcEZhY2VzW2ZhY2VDb3VudF0ucHVzaF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVl
WwotICAgICAgICAgICAgICAgICAgdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlW2NlbGxab25lW2ld
XVtqXS5mYWNlSW5kZXhdCi0gICAgICAgICAgICAgICAgICBbbF0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgZmFjZUNvdW50Kys7Ci0gICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMtPkZhY2Vab25lTWVzaC0+dmFsdWVbaV0tPlNldFBvaW50cyhwb2ludHMpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgIH0KLQotICAgICAgICAvL2xvY2F0ZSB0aGUgcGl2b3QgcG9p
bnQgY29udGFpbmVkIGluIGZhY2VzIDAgJiAxCi0gICAgICAgIGZvcihqID0gMDsgaiA8IChpbnQp
dGVtcEZhY2VzWzBdLnNpemUoKTsgaisrKQorICAgICAgICBpZih0aGlzLT5DZWxsWm9uZU1lc2gg
IT0gTlVMTCkKICAgICAgICAgICB7Ci0gICAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludCl0ZW1w
RmFjZXNbMV0uc2l6ZSgpOyBrKyspCisgICAgICAgICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IHRo
aXMtPkNlbGxab25lTWVzaC0+dmFsdWUuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBpZih0ZW1wRmFjZXNbMF1bal0gPT0gdGVtcEZhY2VzWzFdW2tdICYmIHRlbXBGYWNl
c1swXVtqXSAhPQotICAgICAgICAgICAgICBmaXJzdEZhY2VbcG9pbnRDb3VudF0pCi0gICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgcGl2b3RQb2ludCA9IHRlbXBGYWNlc1swXVtqXTsKLSAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMtPkNl
bGxab25lTWVzaC0+dmFsdWVbaV0tPlNldFBvaW50cyhwb2ludHMpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgIH0KLSAgICAgICAgY2VsbFBvaW50cy5wdXNoX2JhY2socGl2b3RQb2ludCk7Ci0g
ICAgICAgIHRlbXBGYWNlc1swXS5jbGVhcigpOwotICAgICAgICB0ZW1wRmFjZXNbMV0uY2xlYXIo
KTsKLSAgICAgICAgZmFjZUNvdW50PTA7CisgICAgICAgIHBvaW50cy0+RGVsZXRlKCk7CiAgICAg
ICAgIH0KKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgdGhpcy0+Q2xlYXJNZXNo
ZXMoKTsKIAotICAgICAgLy9jcmVhdGUgdGhlIHdlZGdlIGNlbGwgYW5kIGluc2VydCBpdCBpbnRv
IHRoZSBtZXNoCi0gICAgICB2dGtXZWRnZSAqIHdlZGdlID0gdnRrV2VkZ2U6Ok5ldygpOwotICAg
ICAgZm9yKHBDb3VudCA9IDA7IHBDb3VudCA8IChpbnQpY2VsbFBvaW50cy5zaXplKCk7IHBDb3Vu
dCsrKQotICAgICAgICB7Ci0gICAgICAgIHdlZGdlLT5HZXRQb2ludElkcygpLT5TZXRJZChwQ291
bnQsIGNlbGxQb2ludHNbcENvdW50XSk7Ci0gICAgICAgIH0KLSAgICAgIGNlbGxab25lTWVzaC0+
SW5zZXJ0TmV4dENlbGwod2VkZ2UtPkdldENlbGxUeXBlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdlZGdlLT5HZXRQb2ludElkcygpKTsKLSAgICAgIGNlbGxQb2ludHMu
Y2xlYXIoKTsKLSAgICAgIHdlZGdlLT5EZWxldGUoKTsKLSAgICAgIGZpcnN0RmFjZS5jbGVhcigp
OworICAgIHZ0a1N0ZFN0cmluZyBtZXNoRGlyID0gKnRoaXMtPlBhdGhQcmVmaXgKKyAgICAgICsg
dGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+dmFsdWVbdGltZVN0YXRlXSArICIvcG9seU1lc2gvIjsK
KworICAgIC8vY3JlYXRlIHBhdGhzIHRvIHBvbHlNZXNoIGZpbGVzCisgICAgdnRrU3RkU3RyaW5n
IGZhY2VQYXRoID0gbWVzaERpciArICJmYWNlcyI7CisgICAgdnRrU3RkU3RyaW5nIG93bmVyUGF0
aCA9IG1lc2hEaXIgKyAib3duZXIiOworICAgIHZ0a1N0ZFN0cmluZyBuZWlnaGJvclBhdGggPSBt
ZXNoRGlyICsgIm5laWdoYm91ciI7CisKKyAgICAvL2NyZWF0ZSB0aGUgZmFjZXMgdmVjdG9yCisg
ICAgaW50VmVjdG9yVmVjdG9yKiBmYWNlUG9pbnRzID0gdGhpcy0+UmVhZEZhY2VzRmlsZShmYWNl
UGF0aC5jX3N0cigpKTsKKyAgICBpZihmYWNlUG9pbnRzID09IE5VTEwpCisgICAgICB7CisgICAg
ICByZXR1cm4gMDsKICAgICAgIH0KKyAgICB0aGlzLT5VcGRhdGVQcm9ncmVzcygwLjIpOwogCi0g
ICAgLy9PRnB5cmFtaWQgfCB2dGtQeXJhbWlkCi0gICAgZWxzZSBpZiAodG90YWxQb2ludENvdW50
ID09IDE2KQorICAgIC8vcmVhZCBvd25lci9uZWlnaGJvciBhbmQgY3JlYXRlIHRoZSBmYWNlcyBv
d25lci9mYWNlc09mQ2VsbCB2ZWN0b3IKKyAgICBmYWNlVmVjdG9yVmVjdG9yKiBmYWNlc09mQ2Vs
bCA9IG5ldyBmYWNlVmVjdG9yVmVjdG9yOworICAgIGlmKCF0aGlzLT5SZWFkT3duZXJOZWlnaGJv
ckZpbGVzKGZhY2VzT2ZDZWxsLCBvd25lclBhdGguY19zdHIoKSwKKyAgICAgIG5laWdoYm9yUGF0
aC5jX3N0cigpKSkKICAgICAgIHsKLSAgICAgIGZvdW5kRHVwID0gZmFsc2U7CisgICAgICBkZWxl
dGUgZmFjZVBvaW50czsKKyAgICAgIGRlbGV0ZSBmYWNlc09mQ2VsbDsKKyAgICAgIHJldHVybiAw
OworICAgICAgfQorICAgIHRoaXMtPlVwZGF0ZVByb2dyZXNzKDAuMyk7CiAKLSAgICAgIC8vZmlu
ZCBxdWFkCi0gICAgICBmb3IoaiA9IDA7IGogPCAoaW50KXRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1
ZVsKLSAgICAgICAgY2VsbFpvbmVbaV1dLnNpemUoKTsgaisrKSAgLy9lYWNoIGZhY2UKLSAgICAg
ICAgewotICAgICAgICBpZigoaW50KXRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZhY2Vz
T2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgICBjZWxsWm9uZVtpXV1bal0uZmFjZUluZGV4XS5zaXpl
KCkgPT0gNCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZm9yKGsgPSAwOyBrIDwgKGludCl0aGlz
LT5GYWNlUG9pbnRzLT52YWx1ZVt0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbCi0gICAgICAgICAg
ICBjZWxsWm9uZVtpXV1bal0uZmFjZUluZGV4XS5zaXplKCk7IGsrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgIGNlbGxQb2ludHMucHVzaF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVl
W3RoaXMtPkZhY2VzT2ZDZWxsLT4KLSAgICAgICAgICAgICAgdmFsdWVbY2VsbFpvbmVbaV1dW2pd
LmZhY2VJbmRleF1ba10pOwotICAgICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgIC8vZ2V0IHRoZSBwb2ludHMKKyAgICB2dGtQb2ludHMqIHBv
aW50cyA9IHRoaXMtPkdldFBvaW50cyh0aW1lU3RhdGUpOworICAgIGlmKHBvaW50cyA9PSBOVUxM
KQorICAgICAgeworICAgICAgZGVsZXRlIGZhY2VQb2ludHM7CisgICAgICBkZWxldGUgZmFjZXNP
ZkNlbGw7CisgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB0aGlzLT5VcGRhdGVQcm9ncmVz
cygwLjQpOwogCi0gICAgICAvL2NvbXBhcmUgZmlyc3QgZmFjZSBwb2ludHMgdG8gc2Vjb25kIGZh
Y2VzCi0gICAgICBmb3IoaiA9IDA7IGogPCAoaW50KWNlbGxQb2ludHMuc2l6ZSgpOyBqKyspIC8v
ZWFjaCBwb2ludAorICAgIC8vIG1ha2UgaW50ZXJuYWwgbWVzaAorICAgIC8vIENyZWF0ZSBJbnRl
cm5hbCBNZXNoIG9ubHkgaWYgcmVxdWlyZWQgZm9yIGRpc3BsYXkKKyAgICBpZih0aGlzLT5HZXRQ
YXRjaEFycmF5U3RhdHVzKEdldFBhdGNoQXJyYXlOYW1lKDApKSkKKyAgICAgIHsKKyAgICAgIHRo
aXMtPkludGVybmFsTWVzaCA9IHRoaXMtPk1ha2VJbnRlcm5hbE1lc2goZmFjZXNPZkNlbGwsIGZh
Y2VQb2ludHMsCisgICAgICAgIHBvaW50cyk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgewor
ICAgICAgaWYodGhpcy0+SW50ZXJuYWxNZXNoICE9IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAg
Zm9yKGsgPSAwOyBrIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVt0aGlzLT5GYWNlc09m
Q2VsbC0+dmFsdWVbCi0gICAgICAgICAgY2VsbFpvbmVbaV1dWzFdLmZhY2VJbmRleF0uc2l6ZSgp
OyBrKyspCi0gICAgICAgICAgewotICAgICAgICAgIGlmKGNlbGxQb2ludHNbal0gPT0gdGhpcy0+
RmFjZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlWwotICAgICAgICAgICAg
Y2VsbFpvbmVbaV1dWzFdLmZhY2VJbmRleF1ba10pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3VuZER1cCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICBp
ZighZm91bmREdXApCi0gICAgICAgICAgewotICAgICAgICAgIGNlbGxQb2ludHMucHVzaF9iYWNr
KHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAg
ICAgICAgIGNlbGxab25lW2ldXVtqXS5mYWNlSW5kZXhdW2tdKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgICB9CisgICAgICAgIHRoaXMtPkludGVybmFsTWVzaC0+RGVsZXRlKCk7CisgICAg
ICAgIHRoaXMtPkludGVybmFsTWVzaCA9IE5VTEw7CiAgICAgICAgIH0KKyAgICAgIH0KIAotICAg
ICAgLy9jcmVhdGUgdGhlIHB5cmFtaWQgY2VsbCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1lc2gK
LSAgICAgIHZ0a1B5cmFtaWQgKiBweXJhbWlkID0gdnRrUHlyYW1pZDo6TmV3KCk7Ci0gICAgICBm
b3IocENvdW50ID0gMDsgcENvdW50IDwgKGludCljZWxsUG9pbnRzLnNpemUoKTsgcENvdW50Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgcHlyYW1pZC0+R2V0UG9pbnRJZHMoKS0+U2V0SWQocENvdW50
LCBjZWxsUG9pbnRzW3BDb3VudF0pOwotICAgICAgICB9Ci0gICAgICBjZWxsWm9uZU1lc2gtPklu
c2VydE5leHRDZWxsKHB5cmFtaWQtPkdldENlbGxUeXBlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB5cmFtaWQtPkdldFBvaW50SWRzKCkpOwotICAgICAgY2VsbFBvaW50
cy5jbGVhcigpOwotICAgICAgcHlyYW1pZC0+RGVsZXRlKCk7CisgICAgLy8gcmVhZCBwb2x5TWVz
aC9ib25kYXJ5CisgICAgdGhpcy0+Qm91bmRhcnlEaWN0ID0gdGhpcy0+R2F0aGVyQmxvY2tzKCJi
b3VuZGFyeSIsIHRpbWVTdGF0ZSwgdHJ1ZSk7CisgICAgaWYodGhpcy0+Qm91bmRhcnlEaWN0ID09
IE5VTEwpCisgICAgICB7CisgICAgICBkZWxldGUgZmFjZVBvaW50czsKKyAgICAgIGRlbGV0ZSBm
YWNlc09mQ2VsbDsKKyAgICAgIHBvaW50cy0+RGVsZXRlKCk7CisgICAgICB2dGtFcnJvck1hY3Jv
KCJDb3VsZG4ndCByZWFkIHBvbHlNZXNoL2JvdW5kYXJ5Iik7CisgICAgICByZXR1cm4gMDsKICAg
ICAgIH0KIAotICAgIC8vT0Z0ZXQgfCB2dGtUZXRyYWhlZHJvbgotICAgIGVsc2UgaWYgKHRvdGFs
UG9pbnRDb3VudCA9PSAxMikKKyAgICAvLyBjcmVhdGUgYm91bmRhcnkgbWVzaAorICAgIHRoaXMt
PkJvdW5kYXJ5TWVzaCA9IHRoaXMtPkdldEJvdW5kYXJ5TWVzaCh0aGlzLT5Cb3VuZGFyeURpY3Qs
IGZhY2VQb2ludHMsCisgICAgICBwb2ludHMpOworICAgIGlmKHRoaXMtPkJvdW5kYXJ5TWVzaCA9
PSBOVUxMKQogICAgICAgewotICAgICAgZm91bmREdXAgPSBmYWxzZTsKKyAgICAgIGRlbGV0ZSBm
YWNlUG9pbnRzOworICAgICAgZGVsZXRlIGZhY2VzT2ZDZWxsOworICAgICAgcG9pbnRzLT5EZWxl
dGUoKTsKKyAgICAgIHJldHVybiAwOworICAgICAgfQogCi0gICAgICAvL2dyYWIgZmlyc3QgZmFj
ZQotICAgICAgZm9yKGogPSAwOyBqIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52YWx1ZVt0aGlz
LT5GYWNlc09mQ2VsbC0+dmFsdWVbCi0gICAgICAgIGNlbGxab25lW2ldXVswXS5mYWNlSW5kZXhd
LnNpemUoKTsgaisrKQorICAgIC8vIHJlYWQgYW5kIGNvbnN0cnVjdCB6b25lcworICAgIGlmKFJl
YWRab25lcykKKyAgICAgIHsKKyAgICAgIHRoaXMtPlBvaW50Wm9uZU1lc2ggPSBuZXcgdW5zdHJ1
Y3R1cmVkR3JpZFZlY3RvcjsKKyAgICAgIGlmKCF0aGlzLT5HZXRQb2ludFpvbmVNZXNoKHRoaXMt
PlBvaW50Wm9uZU1lc2gsIHBvaW50cywgdGltZVN0YXRlKSkKKyAgICAgICAgeworICAgICAgICBm
b3Ioc2l6ZV90IGkgPSAwOyBpIDwgdGhpcy0+UG9pbnRab25lTWVzaC0+dmFsdWUuc2l6ZSgpOyBp
KyspCisgICAgICAgICAgeworICAgICAgICAgIHRoaXMtPlBvaW50Wm9uZU1lc2gtPnZhbHVlW2ld
LT5EZWxldGUoKTsKKyAgICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLT5Qb2ludFpvbmVN
ZXNoOworICAgICAgICB0aGlzLT5Qb2ludFpvbmVNZXNoID0gTlVMTDsKKyAgICAgICAgZGVsZXRl
IGZhY2VQb2ludHM7CisgICAgICAgIGRlbGV0ZSBmYWNlc09mQ2VsbDsKKyAgICAgICAgcG9pbnRz
LT5EZWxldGUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIGlmKHRoaXMt
PlBvaW50Wm9uZU1lc2gtPnZhbHVlLnNpemUoKSA9PSAwKQogICAgICAgICB7Ci0gICAgICAgIGNl
bGxQb2ludHMucHVzaF9iYWNrKHRoaXMtPkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZhY2VzT2ZD
ZWxsLT52YWx1ZVsKLSAgICAgICAgICBjZWxsWm9uZVtpXV1bMF0uZmFjZUluZGV4XVtqXSk7Cisg
ICAgICAgIGRlbGV0ZSB0aGlzLT5Qb2ludFpvbmVNZXNoOworICAgICAgICB0aGlzLT5Qb2ludFpv
bmVNZXNoID0gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAvL2NvbXBhcmUgZmlyc3QgZmFjZSBw
b2ludHMgdG8gc2Vjb25kIGZhY2VzCi0gICAgICBmb3IoaiA9IDA7IGogPCAoaW50KWNlbGxQb2lu
dHMuc2l6ZSgpOyBqKyspIC8vZWFjaCBwb2ludAorICAgICAgdGhpcy0+RmFjZVpvbmVNZXNoID0g
bmV3IHVuc3RydWN0dXJlZEdyaWRWZWN0b3I7CisgICAgICBpZighdGhpcy0+R2V0RmFjZVpvbmVN
ZXNoKHRoaXMtPkZhY2Vab25lTWVzaCwgZmFjZVBvaW50cywgcG9pbnRzLAorICAgICAgICB0aW1l
U3RhdGUpKQogICAgICAgICB7Ci0gICAgICAgIGZvcihrID0gMDsgayA8IChpbnQpdGhpcy0+RmFj
ZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPnZhbHVlWwotICAgICAgICAgIGNlbGxa
b25lW2ldXVsxXS5mYWNlSW5kZXhdLnNpemUoKTsgaysrKQorICAgICAgICBmb3Ioc2l6ZV90IGkg
PSAwOyBpIDwgdGhpcy0+RmFjZVpvbmVNZXNoLT52YWx1ZS5zaXplKCk7IGkrKykKICAgICAgICAg
ICB7Ci0gICAgICAgICAgaWYoY2VsbFBvaW50c1tqXSA9PSB0aGlzLT5GYWNlUG9pbnRzLT52YWx1
ZVt0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbCi0gICAgICAgICAgICBjZWxsWm9uZVtpXV1bMV0u
ZmFjZUluZGV4XVtrXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvdW5kRHVwID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5GYWNlWm9uZU1lc2gtPnZhbHVlW2ld
LT5EZWxldGUoKTsKICAgICAgICAgICB9Ci0gICAgICAgIGlmKCFmb3VuZER1cCkKKyAgICAgICAg
ZGVsZXRlIHRoaXMtPkZhY2Vab25lTWVzaDsKKyAgICAgICAgdGhpcy0+RmFjZVpvbmVNZXNoID0g
TlVMTDsKKyAgICAgICAgZGVsZXRlIGZhY2VQb2ludHM7CisgICAgICAgIGRlbGV0ZSBmYWNlc09m
Q2VsbDsKKyAgICAgICAgcG9pbnRzLT5EZWxldGUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgIGlmKHRoaXMtPkZhY2Vab25lTWVzaC0+dmFsdWUuc2l6ZSgpID09IDApCisg
ICAgICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXMtPkZhY2Vab25lTWVzaDsKKyAgICAgICAgdGhp
cy0+RmFjZVpvbmVNZXNoID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAgIAorICAgICAgdGhp
cy0+Q2VsbFpvbmVNZXNoID0gbmV3IHVuc3RydWN0dXJlZEdyaWRWZWN0b3I7CisgICAgICBpZigh
dGhpcy0+R2V0Q2VsbFpvbmVNZXNoKHRoaXMtPkNlbGxab25lTWVzaCwgZmFjZXNPZkNlbGwsIGZh
Y2VQb2ludHMsCisgICAgICAgICBwb2ludHMsIHRpbWVTdGF0ZSkpCisgICAgICAgIHsKKyAgICAg
ICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IHRoaXMtPkNlbGxab25lTWVzaC0+dmFsdWUuc2l6ZSgp
OyBpKyspCiAgICAgICAgICAgewotICAgICAgICAgIGNlbGxQb2ludHMucHVzaF9iYWNrKHRoaXMt
PkZhY2VQb2ludHMtPnZhbHVlW3RoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgICAg
IGNlbGxab25lW2ldXVtqXS5mYWNlSW5kZXhdW2tdKTsKLSAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICB0aGlzLT5DZWxsWm9uZU1lc2gtPnZhbHVlW2ldLT5EZWxldGUoKTsKICAgICAgICAgICB9
CisgICAgICAgIGRlbGV0ZSB0aGlzLT5DZWxsWm9uZU1lc2g7CisgICAgICAgIHRoaXMtPkNlbGxa
b25lTWVzaCA9IE5VTEw7CisgICAgICAgIGRlbGV0ZSBmYWNlUG9pbnRzOworICAgICAgICBkZWxl
dGUgZmFjZXNPZkNlbGw7CisgICAgICAgIHBvaW50cy0+RGVsZXRlKCk7CisgICAgICAgIHJldHVy
biAwOwogICAgICAgICB9Ci0KLSAgICAgIC8vY3JlYXRlIHRoZSB3ZWRnZSBjZWxsIGFuZCBpbnNl
cnQgaXQgaW50byB0aGUgbWVzaAotICAgICAgdnRrVGV0cmEgKiB0ZXRyYSA9IHZ0a1RldHJhOjpO
ZXcoKTsKLSAgICAgIGZvcihwQ291bnQgPSAwOyBwQ291bnQgPCAoaW50KWNlbGxQb2ludHMuc2l6
ZSgpOyBwQ291bnQrKykKKyAgICAgIGlmKHRoaXMtPkNlbGxab25lTWVzaC0+dmFsdWUuc2l6ZSgp
ID09IDApCiAgICAgICAgIHsKLSAgICAgICAgdGV0cmEtPkdldFBvaW50SWRzKCktPlNldElkKHBD
b3VudCwgY2VsbFBvaW50c1twQ291bnRdKTsKKyAgICAgICAgZGVsZXRlIHRoaXMtPkNlbGxab25l
TWVzaDsKKyAgICAgICAgdGhpcy0+Q2VsbFpvbmVNZXNoID0gTlVMTDsKICAgICAgICAgfQotICAg
ICAgY2VsbFpvbmVNZXNoLT5JbnNlcnROZXh0Q2VsbCh0ZXRyYS0+R2V0Q2VsbFR5cGUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV0cmEtPkdldFBvaW50SWRzKCkpOwot
ICAgICAgY2VsbFBvaW50cy5jbGVhcigpOwotICAgICAgdGV0cmEtPkRlbGV0ZSgpOwogICAgICAg
fQogCi0gICAgLy9lcnJvbm91cyBjZWxscwotICAgIGVsc2UgaWYodG90YWxQb2ludENvdW50ID09
IDApCi0gICAgICB7Ci0gICAgICB2dGtXYXJuaW5nTWFjcm8oIldhcm5pbmc6IE5vIHBvaW50cyBp
biBjZWxsLiIpOwotICAgICAgfQorICAgIGRlbGV0ZSBmYWNlc09mQ2VsbDsKKyAgICBkZWxldGUg
ZmFjZVBvaW50czsKKyAgICBwb2ludHMtPkRlbGV0ZSgpOworICAgIH0KKyAgdGhpcy0+VXBkYXRl
UHJvZ3Jlc3MoMC41KTsKIAotICAgIC8vT0Zwb2x5aGVkcm9uIHx8IHZ0a0NvbnZleFBvaW50U2V0
Ci0gICAgZWxzZQorICBpZih1cGRhdGVWYXJpYWJsZXMpCisgICAgeworICAgIC8vIHJlYWQgZmll
bGQgZGF0YSB2YXJpYWJsZXMgaW50byBJbnRlcm5hbC9Cb3VuZGFyeSBtZXNoZXMKKyAgICBmb3Io
aW50IGkgPSAwOyBpIDwgKGludCl0aGlzLT5UaW1lU3RlcERhdGEtPnZhbHVlLnNpemUoKTsgaSsr
KQogICAgICAgewotICAgICAgdnRrV2FybmluZ01hY3JvKCJXYXJuaW5nOiBQb2x5aGVkcmFsIERh
dGEgaXMgdmVyeSBTbG93ISIpOwotICAgICAgZm91bmREdXAgPSBmYWxzZTsKLQotICAgICAgLy9n
cmFiIGZhY2UgMAotICAgICAgZm9yKGogPSAwOyBqIDwgKGludCl0aGlzLT5GYWNlUG9pbnRzLT52
YWx1ZVt0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbCi0gICAgICAgIGNlbGxab25lW2ldXVswXS5m
YWNlSW5kZXhdLnNpemUoKTsgaisrKQorICAgICAgaWYoIXRoaXMtPkdldFZhcmlhYmxlQXRUaW1l
c3RlcCh0aGlzLT5JbnRlcm5hbE1lc2gsIHRoaXMtPkJvdW5kYXJ5TWVzaCwKKyAgICAgICAgdGhp
cy0+Qm91bmRhcnlEaWN0LCB0aGlzLT5UaW1lU3RlcERhdGEtPnZhbHVlW2ldLmNfc3RyKCksIHRp
bWVTdGF0ZSkpCiAgICAgICAgIHsKLSAgICAgICAgZmlyc3RGYWNlLnB1c2hfYmFjayh0aGlzLT5G
YWNlUG9pbnRzLT52YWx1ZVsKLSAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1b
MF0uZmFjZUluZGV4XVtqXSk7CisgICAgICAgIC8vIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRp
bmcgYSBmaWVsZCBkYXRhIHZhcmlhYmxlLCBidXQgY29udGludWUKKyAgICAgICAgLy8gdG8gdGhl
IG5leHQgdmFyaWFibGUKKyAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KKyAgICAgIHRoaXMt
PlVwZGF0ZVByb2dyZXNzKDAuNQorICAgICAgICArIDAuNSAqICgoZmxvYXQpKGkgKyAxKSAvIChm
bG9hdCl0aGlzLT5UaW1lU3RlcERhdGEtPnZhbHVlLnNpemUoKSkpOworICAgICAgfQogCi0gICAg
ICAvL0FERCBGSVJTVCBGQUNFIFRPIENFTEwgUE9JTlRTCi0gICAgICBmb3IoaiA9MDsgaiA8IChp
bnQpZmlyc3RGYWNlLnNpemUoKTsgaisrKQorICAgIC8vIHJlYWQgbGFncmFuZ2lhbiBtZXNoIGFu
ZCBmaWVsZHMKKyAgICBpZih0aGlzLT5MYWdyYW5naWFuVGltZVN0ZXBEYXRhLT52YWx1ZS5zaXpl
KCkgPiAwCisgICAgICAmJiB0aGlzLT5HZXRQYXRjaEFycmF5U3RhdHVzKCJMYWdyYW5naWFuIFBh
cnRpY2xlcyIpKQorICAgICAgeworICAgICAgLy8gY29uc3RydWN0IGxhZ3JhbmdpYW4gbWVzaAor
ICAgICAgbGFncmFuZ2lhbk1lc2ggPSB0aGlzLT5NYWtlTGFncmFuZ2lhbk1lc2godGltZVN0YXRl
KTsKKyAgICAgIGlmKGxhZ3JhbmdpYW5NZXNoID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAg
Y2VsbFBvaW50cy5wdXNoX2JhY2soZmlyc3RGYWNlW2pdKTsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KLSAgICAgIC8vaiA9IDEgc2tpcCBmaXJzdEZhY2UKLSAgICAgIGZvcihqID0gMTsg
aiA8IChpbnQpIHRoaXMtPkZhY2VzT2ZDZWxsLT52YWx1ZVsKLSAgICAgICAgICAgY2VsbFpvbmVb
aV1dLnNpemUoKTsgaisrKQorCisgICAgICAvLyByZWFkIGxhZ3JhbmdpYW4gdmFyaWFibGVzCisg
ICAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdGhpcy0+TGFncmFuZ2lhblRpbWVTdGVwRGF0YS0+
dmFsdWUuc2l6ZSgpOyBpKyspCiAgICAgICAgIHsKLSAgICAgICAgLy9yZW1vdmUgZHVwbGljYXRl
IHBvaW50cyBmcm9tIGZhY2VzCi0gICAgICAgIGZvcihrID0gMDsgayA8IChpbnQpdGhpcy0+RmFj
ZVBvaW50cy0+dmFsdWVbCi0gICAgICAgICAgICB0aGlzLT5GYWNlc09mQ2VsbC0+dmFsdWVbaV1b
al0uZmFjZUluZGV4XS5zaXplKCk7IGsrKykKKyAgICAgICAgaWYoIXRoaXMtPkdldExhZ3Jhbmdp
YW5WYXJpYWJsZUF0VGltZXN0ZXAobGFncmFuZ2lhbk1lc2gsCisgICAgICAgICAgdGhpcy0+TGFn
cmFuZ2lhblRpbWVTdGVwRGF0YS0+dmFsdWVbaV0uY19zdHIoKSwgdGltZVN0YXRlKSkKICAgICAg
ICAgICB7Ci0gICAgICAgICAgZm9yKGwgPSAwOyBsIDwgKGludCljZWxsUG9pbnRzLnNpemUoKTsg
bCsrKTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKGNlbGxQb2ludHNbbF0gPT0gdGhp
cy0+RmFjZVBvaW50cy0+dmFsdWVbdGhpcy0+RmFjZXNPZkNlbGwtPgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVtjZWxsWm9uZVtpXV1bal0uZmFjZUluZGV4XVtrXSkKLSAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBmb3VuZER1cCA9IHRydWU7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICBpZighZm91bmREdXApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICBjZWxsUG9pbnRzLnB1c2hfYmFjayh0aGlzLT5GYWNlUG9pbnRzLT52
YWx1ZVt0aGlzLT5GYWNlc09mQ2VsbC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVtjZWxsWm9uZVtpXV1bal0uZmFjZUluZGV4XVtrXSk7Ci0gICAgICAgICAgICBmb3Vu
ZER1cCA9IGZhbHNlOwotICAgICAgICAgICAgfQorICAgICAgICAgIC8vIGVycm9yIG9jY3VycmVk
IHdoaWxlIHJlYWRpbmcgYSBmaWVsZCBkYXRhIHZhcmlhYmxlLCBidXQgY29udGludWUKKyAgICAg
ICAgICAvLyB0byB0aGUgbmV4dCB2YXJpYWJsZQorICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgIH0KICAgICAgICAgfQorICAgICAgfQorICAgIH0KIAotICAgICAgLy9jcmVhdGUgdGhlIHBv
bHkgY2VsbCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1lc2gKLSAgICAgIHZ0a0NvbnZleFBvaW50
U2V0ICogcG9seSA9IHZ0a0NvbnZleFBvaW50U2V0OjpOZXcoKTsKLSAgICAgIHBvbHktPkdldFBv
aW50SWRzKCktPlNldE51bWJlck9mSWRzKGNlbGxQb2ludHMuc2l6ZSgpKTsKLSAgICAgIGZvcihw
Q291bnQgPSAwOyBwQ291bnQgPCAoaW50KWNlbGxQb2ludHMuc2l6ZSgpOyBwQ291bnQrKykKLSAg
ICAgICAgewotICAgICAgICBwb2x5LT5HZXRQb2ludElkcygpLT5TZXRJZChwQ291bnQsIGNlbGxQ
b2ludHNbcENvdW50XSk7Ci0gICAgICAgIH0KLSAgICAgIGNlbGxab25lTWVzaC0+SW5zZXJ0TmV4
dENlbGwocG9seS0+R2V0Q2VsbFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9seS0+R2V0UG9pbnRJZHMoKSk7Ci0gICAgICBjZWxsUG9pbnRzLmNsZWFyKCk7Ci0g
ICAgICBmaXJzdEZhY2UuY2xlYXIoKTsKLSAgICAgIHBvbHktPkRlbGV0ZSgpOworICAvLyBhc3Np
Z24gZ3JvdXAgdG8gZWFjaCBvZiBkYXRhIGFuZCBwb2ludC9mYWNlL2NlbGwtWm9uZXMKKyAgaW50
IG5Hcm91cHMgPSAxICsgKChsYWdyYW5naWFuTWVzaCAhPSBOVUxMCisgICAgJiYgbGFncmFuZ2lh
bk1lc2gtPkdldFBvaW50RGF0YSgpLT5HZXROdW1iZXJPZkFycmF5cygpID4gMCkgPyAxIDogMCkK
KyAgICArICh0aGlzLT5Qb2ludFpvbmVNZXNoICE9IE5VTEwgPyAxIDogMCkKKyAgICArICh0aGlz
LT5GYWNlWm9uZU1lc2ggIT0gTlVMTCA/IDEgOiAwKQorICAgICsgKHRoaXMtPkNlbGxab25lTWVz
aCAhPSBOVUxMID8gMSA6IDApOworICBvdXRwdXQtPlNldE51bWJlck9mR3JvdXBzKG5Hcm91cHMp
OworCisgIC8vIHNldCBpbnRlcm5hbCBtZXNoL2RhdGEgYXMgb3V0cHV0CisgIC8vb3V0cHV0LT5T
ZXROdW1iZXJPZkRhdGFTZXRzKDAsb3V0cHV0LT5HZXROdW1iZXJPZkRhdGFTZXRzKDApKTsKKwor
ICAvLyBBZGQgSW50ZXJuYWwgTWVzaCB0byBmaW5hbCBvdXRwdXQgb25seSBpZiBzZWxlY3RlZCBm
b3IgZGlzcGxheQorICBpZihHZXRQYXRjaEFycmF5U3RhdHVzKEdldFBhdGNoQXJyYXlOYW1lKDAp
KSkKKyAgICB7CisgICAgb3V0cHV0LT5TZXREYXRhU2V0KDAsIG91dHB1dC0+R2V0TnVtYmVyT2ZE
YXRhU2V0cygwKSwgdGhpcy0+SW50ZXJuYWxNZXNoKTsKKyAgICB9CisKKyAgLy8gc2V0IGJvdW5k
YXJ5IG1lc2hlcy9kYXRhIGFzIG91dHB1dAorICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgdGhpcy0+
Qm91bmRhcnlNZXNoLT52YWx1ZS5zaXplKCk7IGorKykKKyAgICB7CisgICAgb3V0cHV0LT5TZXRE
YXRhU2V0KDAsIG91dHB1dC0+R2V0TnVtYmVyT2ZEYXRhU2V0cygwKSwKKyAgICAgIHRoaXMtPkJv
dW5kYXJ5TWVzaC0+dmFsdWVbal0pOworICAgIGlmKCF0aGlzLT5DYWNoZU1lc2gpCisgICAgICB7
CisgICAgICB0aGlzLT5Cb3VuZGFyeU1lc2gtPnZhbHVlW2pdLT5EZWxldGUoKTsKICAgICAgIH0K
ICAgICB9Ci0gIC8vc2V0IGNlbGwgem9uZSBwb2ludHMKLSAgY2VsbFpvbmVNZXNoLT5TZXRQb2lu
dHMoUG9pbnRzKTsKLSAgaW5wdXQtPmNsb3NlKCk7Ci0gIGRlbGV0ZSBpbnB1dDsKLSAgdnRrRGVi
dWdNYWNybyg8PCJDZWxsIHpvbmUgbWVzaCBjcmVhdGVkIik7Ci0gIHJldHVybiBjZWxsWm9uZU1l
c2g7Ci19CiAKLXZvaWQgdnRrT3BlbkZPQU1SZWFkZXI6OkNyZWF0ZURhdGFTZXQodnRrTXVsdGlC
bG9ja0RhdGFTZXQgKm91dHB1dCkKLXsKLSAgaW50IHRpbWVTdGF0ZSA9IHRoaXMtPlRpbWVTdGVw
OwotICAvL2NyZWF0ZSBwYXRocyB0byBwb2x5TWVzaCBmaWxlcwotICB2dGtzdGQ6OnN0cmluZyBi
b3VuZGFyeVBhdGggPSB0aGlzLT5QYXRoUHJlZml4LT52YWx1ZSArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMtPlBvbHlNZXNoRmFjZXNEaXItPnZhbHVlW3RpbWVTdGF0ZV0g
KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL3BvbHlNZXNoL2JvdW5kYXJ5IjsK
LSAgdnRrc3RkOjpzdHJpbmcgZmFjZVBhdGggPSB0aGlzLT5QYXRoUHJlZml4LT52YWx1ZSArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+dmFsdWVb
dGltZVN0YXRlXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9wb2x5TWVzaC9mYWNl
cyI7Ci0gIHZ0a3N0ZDo6c3RyaW5nIG93bmVyUGF0aCA9IHRoaXMtPlBhdGhQcmVmaXgtPnZhbHVl
ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+UG9seU1lc2hGYWNlc0Rpci0+
dmFsdWVbdGltZVN0YXRlXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvcG9seU1l
c2gvb3duZXIiOwotICB2dGtzdGQ6OnN0cmluZyBuZWlnaGJvclBhdGggPSB0aGlzLT5QYXRoUHJl
Zml4LT52YWx1ZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPlBvbHlN
ZXNoRmFjZXNEaXItPnZhbHVlW3RpbWVTdGF0ZV0gKwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiL3BvbHlNZXNoL25laWdoYm91ciI7Ci0gIC8vY3JlYXRlIHRoZSBmYWNlcyB2ZWN0
b3IKLSAgdGhpcy0+UmVhZEZhY2VzRmlsZShmYWNlUGF0aC5jX3N0cigpKTsKLQotICAvL2NyZWF0
ZSB0aGUgZmFjZXMgb3duZXIgdmVjdG9yCi0gIHRoaXMtPlJlYWRPd25lckZpbGUob3duZXJQYXRo
LmNfc3RyKCkpOwotCi0gIC8vY3JlYXRlIHRoZSBmYWNlcyBuZWlnaGJvciB2ZWN0b3IKLSAgdGhp
cy0+UmVhZE5laWdoYm9yRmlsZShuZWlnaGJvclBhdGguY19zdHIoKSk7Ci0KLSAgLy9jcmVhdGUg
YSB2ZWN0b3IgY29udGFpbmluZyBhIGZhY2VzIG9mIGVhY2ggY2VsbAotICB0aGlzLT5Db21iaW5l
T3duZXJOZWlnYm9yKCk7Ci0KLSAgdGhpcy0+R2V0UG9pbnRzKHRpbWVTdGF0ZSk7IC8vZ2V0IHRo
ZSBwb2ludHMKLQotICAvL2dldCB0aGUgbmFtZXMgb2YgdGhlIHJlZ2lvbnMKLSAgLy90aGlzLT5C
b3VuZGFyeU5hbWVzLT52YWx1ZSA9Ci0gIC8vICB0aGlzLT5HYXRoZXJCbG9ja3MoImJvdW5kYXJ5
IiwgdGltZVN0YXRlKS0+dmFsdWU7Ci0gIC8vdGhpcy0+UG9pbnRab25lTmFtZXMtPnZhbHVlID0K
LSAgLy8gIHRoaXMtPkdhdGhlckJsb2NrcygicG9pbnRab25lcyIsIHRpbWVTdGF0ZSktPnZhbHVl
OwotICAvL3RoaXMtPkZhY2Vab25lTmFtZXMtPnZhbHVlID0KLSAgLy8gIHRoaXMtPkdhdGhlckJs
b2NrcygiZmFjZVpvbmVzIiwgdGltZVN0YXRlKS0+dmFsdWU7Ci0gIC8vdGhpcy0+Q2VsbFpvbmVO
YW1lcy0+dmFsdWUgPQotICAvLyAgdGhpcy0+R2F0aGVyQmxvY2tzKCJjZWxsWm9uZXMiLCB0aW1l
U3RhdGUpLT52YWx1ZTsKLQotICAvL2dldCB0aGUgbmFtZXMgb2YgdGhlIHJlZ2lvbnMKLSAgdGhp
cy0+Qm91bmRhcnlOYW1lcyA9Ci0gICAgdGhpcy0+R2F0aGVyQmxvY2tzKCJib3VuZGFyeSIsIHRp
bWVTdGF0ZSk7Ci0gIHRoaXMtPlBvaW50Wm9uZU5hbWVzID0KLSAgICB0aGlzLT5HYXRoZXJCbG9j
a3MoInBvaW50Wm9uZXMiLCB0aW1lU3RhdGUpOwotICB0aGlzLT5GYWNlWm9uZU5hbWVzID0KLSAg
ICB0aGlzLT5HYXRoZXJCbG9ja3MoImZhY2Vab25lcyIsIHRpbWVTdGF0ZSk7Ci0gIHRoaXMtPkNl
bGxab25lTmFtZXMgPQotICAgIHRoaXMtPkdhdGhlckJsb2NrcygiY2VsbFpvbmVzIiwgdGltZVN0
YXRlKTsKLQotICBpbnQgbnVtQm91bmRhcmllcyA9IHRoaXMtPkJvdW5kYXJ5TmFtZXMtPnZhbHVl
LnNpemUoKTsKLSAgaW50IG51bVBvaW50Wm9uZXMgPSB0aGlzLT5Qb2ludFpvbmVOYW1lcy0+dmFs
dWUuc2l6ZSgpOwotICBpbnQgbnVtRmFjZVpvbmVzID0gdGhpcy0+RmFjZVpvbmVOYW1lcy0+dmFs
dWUuc2l6ZSgpOwotICBpbnQgbnVtQ2VsbFpvbmVzID0gdGhpcy0+Q2VsbFpvbmVOYW1lcy0+dmFs
dWUuc2l6ZSgpOwotCi0gIC8vSW50ZXJuYWwgTWVzaAotICB2dGtVbnN0cnVjdHVyZWRHcmlkICog
aW50ZXJuYWxNZXNoID0gdGhpcy0+TWFrZUludGVybmFsTWVzaCgpOwotICBmb3IoaW50IGkgPSAw
OyBpIDwgKGludCl0aGlzLT5UaW1lU3RlcERhdGEtPnZhbHVlLnNpemUoKTsgaSsrKQotICAgIHsK
LSAgICB2dGtEb3VibGVBcnJheSAqIGRhdGEgPQotICAgICAgdGhpcy0+R2V0SW50ZXJuYWxWYXJp
YWJsZUF0VGltZXN0ZXAodGhpcy0+VGltZVN0ZXBEYXRhLT52YWx1ZVtpXS5jX3N0cigpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0YXRlKTsKLSAgICBp
ZihkYXRhLT5HZXRTaXplKCkgPiAwKQorICBpZighdGhpcy0+Q2FjaGVNZXNoKQorICAgIHsKKyAg
ICAvLyBGaXJzdCBjaGVjayBpZiB0aGVzZSBtZXNoZXMgZXhpc3QgYmVmb3JlIGRlbGV0aW5nIHRo
ZW0uLi4uCisgICAgaWYodGhpcy0+Qm91bmRhcnlNZXNoICE9IE5VTEwpCiAgICAgICB7Ci0gICAg
ICBkYXRhLT5TZXROYW1lKHRoaXMtPlRpbWVTdGVwRGF0YS0+dmFsdWVbaV0uY19zdHIoKSk7Ci0g
ICAgICBpbnRlcm5hbE1lc2gtPkdldENlbGxEYXRhKCktPkFkZEFycmF5KGRhdGEpOworICAgICAg
ZGVsZXRlIHRoaXMtPkJvdW5kYXJ5TWVzaDsKKyAgICAgIHRoaXMtPkJvdW5kYXJ5TWVzaCA9IE5V
TEw7CiAgICAgICB9Ci0gICAgZGF0YS0+RGVsZXRlKCk7CisgICAgaWYodGhpcy0+SW50ZXJuYWxN
ZXNoICE9IE5VTEwpCisgICAgICB7CisgICAgICB0aGlzLT5JbnRlcm5hbE1lc2gtPkRlbGV0ZSgp
OworICAgICAgdGhpcy0+SW50ZXJuYWxNZXNoID0gTlVMTDsKKyAgICAgIH0KKyAgICBkZWxldGUg
dGhpcy0+Qm91bmRhcnlEaWN0OworICAgIHRoaXMtPkJvdW5kYXJ5RGljdCA9IE5VTEw7CisgICAg
dGhpcy0+RmFjZU93bmVyLT5EZWxldGUoKTsKKyAgICB0aGlzLT5GYWNlT3duZXIgPSBOVUxMOwog
ICAgIH0KLSAgLy9vdXRwdXQtPlNldE51bWJlck9mRGF0YVNldHMoMCxvdXRwdXQtPkdldE51bWJl
ck9mRGF0YVNldHMoMCkpOwotICBvdXRwdXQtPlNldERhdGFTZXQoMCwgb3V0cHV0LT5HZXROdW1i
ZXJPZkRhdGFTZXRzKDApLCBpbnRlcm5hbE1lc2gpOwogCi0gIC8vQm91bmRhcnkgTWVzaGVzCi0g
IGZvcihpbnQgaSA9IDA7IGkgPCAoaW50KW51bUJvdW5kYXJpZXM7IGkrKykKKyAgaW50IGdyb3Vw
SSA9IDA7CisKKyAgLy8gc2V0IGxhZ3JhbmdpYW4gbWVzaCBhcyBvdXRwdXQKKyAgaWYobGFncmFu
Z2lhbk1lc2ggIT0gTlVMTAorICAgICYmIGxhZ3JhbmdpYW5NZXNoLT5HZXRQb2ludERhdGEoKS0+
R2V0TnVtYmVyT2ZBcnJheXMoKSA+IDApCiAgICAgewotICAgIHZ0a1Vuc3RydWN0dXJlZEdyaWQg
KiBib3VuZGFyeU1lc2ggPSB0aGlzLT5HZXRCb3VuZGFyeU1lc2godGltZVN0YXRlLCBpKTsKLSAg
ICBmb3IoaW50IGogPSAwOyBqIDwgKGludCl0aGlzLT5UaW1lU3RlcERhdGEtPnZhbHVlLnNpemUo
KTsgaisrKQorICAgIGdyb3VwSSsrOworICAgIG91dHB1dC0+U2V0RGF0YVNldChncm91cEksIG91
dHB1dC0+R2V0TnVtYmVyT2ZEYXRhU2V0cyhncm91cEkpLAorICAgICAgbGFncmFuZ2lhbk1lc2gp
OworICAgIGxhZ3JhbmdpYW5NZXNoLT5EZWxldGUoKTsKKyAgICB9CisKKyAgLy8gc2V0IFpvbmUg
TWVzaGVzIGFzIG91dHB1dAorICBpZih0aGlzLT5Qb2ludFpvbmVNZXNoICE9IE5VTEwpCisgICAg
eworICAgIGdyb3VwSSsrOworICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCB0aGlzLT5Qb2ludFpv
bmVNZXNoLT52YWx1ZS5zaXplKCk7IGkrKykKICAgICAgIHsKLSAgICAgIHZ0a0RvdWJsZUFycmF5
ICogZGF0YSA9Ci0gICAgICAgIHRoaXMtPkdldEJvdW5kYXJ5VmFyaWFibGVBdFRpbWVzdGVwKGks
IFRpbWVTdGVwRGF0YS0+dmFsdWVbal0uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZVN0YXRlLCBpbnRlcm5hbE1lc2gpOwotICAgICAgaWYo
ZGF0YS0+R2V0U2l6ZSgpID4gMCkKKyAgICAgIG91dHB1dC0+U2V0RGF0YVNldChncm91cEksIG91
dHB1dC0+R2V0TnVtYmVyT2ZEYXRhU2V0cyhncm91cEkpLAorICAgICAgICB0aGlzLT5Qb2ludFpv
bmVNZXNoLT52YWx1ZVtpXSk7CisgICAgICBpZighdGhpcy0+Q2FjaGVNZXNoKQogICAgICAgICB7
Ci0gICAgICAgIGRhdGEtPlNldE5hbWUodGhpcy0+VGltZVN0ZXBEYXRhLT52YWx1ZVtqXS5jX3N0
cigpKTsKLSAgICAgICAgYm91bmRhcnlNZXNoLT5HZXRDZWxsRGF0YSgpLT5BZGRBcnJheShkYXRh
KTsKKyAgICAgICAgdGhpcy0+UG9pbnRab25lTWVzaC0+dmFsdWVbaV0tPkRlbGV0ZSgpOwogICAg
ICAgICB9Ci0gICAgICBkYXRhLT5EZWxldGUoKTsKICAgICAgIH0KLSAgICBvdXRwdXQtPlNldERh
dGFTZXQoMCwgb3V0cHV0LT5HZXROdW1iZXJPZkRhdGFTZXRzKDApLCBib3VuZGFyeU1lc2gpOwot
ICAgIGJvdW5kYXJ5TWVzaC0+RGVsZXRlKCk7CisgICAgaWYoIXRoaXMtPkNhY2hlTWVzaCkKKyAg
ICAgIHsKKyAgICAgIGRlbGV0ZSB0aGlzLT5Qb2ludFpvbmVNZXNoOworICAgICAgdGhpcy0+UG9p
bnRab25lTWVzaCA9IE5VTEw7CisgICAgICB9CiAgICAgfQogCi0gIGludGVybmFsTWVzaC0+RGVs
ZXRlKCk7Ci0gIHRoaXMtPkZhY2VPd25lci0+RGVsZXRlKCk7Ci0gIC8vWm9uZSBNZXNoZXMKLSAg
Zm9yKGludCBpID0gMDsgaSA8IChpbnQpbnVtUG9pbnRab25lczsgaSsrKQorICBpZih0aGlzLT5G
YWNlWm9uZU1lc2ggIT0gTlVMTCkKICAgICB7Ci0gICAgdnRrVW5zdHJ1Y3R1cmVkR3JpZCAqIHBv
aW50TWVzaCA9IHRoaXMtPkdldFBvaW50Wm9uZU1lc2godGltZVN0YXRlLCBpKTsKLSAgICBvdXRw
dXQtPlNldERhdGFTZXQoMCwgb3V0cHV0LT5HZXROdW1iZXJPZkRhdGFTZXRzKDApLAotICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludE1lc2gpOwotICAgIHBvaW50TWVzaC0+RGVsZXRlKCk7Cisg
ICAgZ3JvdXBJKys7CisgICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IHRoaXMtPkZhY2Vab25lTWVz
aC0+dmFsdWUuc2l6ZSgpOyBpKyspCisgICAgICB7CisgICAgICBvdXRwdXQtPlNldERhdGFTZXQo
Z3JvdXBJLCBvdXRwdXQtPkdldE51bWJlck9mRGF0YVNldHMoZ3JvdXBJKSwKKyAgICAgICAgdGhp
cy0+RmFjZVpvbmVNZXNoLT52YWx1ZVtpXSk7CisgICAgICBpZighdGhpcy0+Q2FjaGVNZXNoKQor
ICAgICAgICB7CisgICAgICAgIHRoaXMtPkZhY2Vab25lTWVzaC0+dmFsdWVbaV0tPkRlbGV0ZSgp
OworICAgICAgICB9CisgICAgICB9CisgICAgaWYoIXRoaXMtPkNhY2hlTWVzaCkKKyAgICAgIHsK
KyAgICAgIGRlbGV0ZSB0aGlzLT5GYWNlWm9uZU1lc2g7CisgICAgICB0aGlzLT5GYWNlWm9uZU1l
c2ggPSBOVUxMOworICAgICAgfQogICAgIH0KLSAgZm9yKGludCBpID0gMDsgaSA8IChpbnQpbnVt
RmFjZVpvbmVzOyBpKyspCisKKyAgaWYodGhpcy0+Q2VsbFpvbmVNZXNoICE9IE5VTEwpCiAgICAg
ewotICAgIHZ0a1Vuc3RydWN0dXJlZEdyaWQgKiBmYWNlTWVzaCA9IHRoaXMtPkdldEZhY2Vab25l
TWVzaCh0aW1lU3RhdGUsIGkpOwotICAgIG91dHB1dC0+U2V0RGF0YVNldCgwLCBvdXRwdXQtPkdl
dE51bWJlck9mRGF0YVNldHMoMCksCi0gICAgICAgICAgICAgICAgICAgICAgIGZhY2VNZXNoKTsK
LSAgICBmYWNlTWVzaC0+RGVsZXRlKCk7CisgICAgZ3JvdXBJKys7CisgICAgZm9yKHNpemVfdCBp
ID0gMDsgaSA8IHRoaXMtPkNlbGxab25lTWVzaC0+dmFsdWUuc2l6ZSgpOyBpKyspCisgICAgICB7
CisgICAgICBvdXRwdXQtPlNldERhdGFTZXQoZ3JvdXBJLCBvdXRwdXQtPkdldE51bWJlck9mRGF0
YVNldHMoZ3JvdXBJKSwKKyAgICAgICAgdGhpcy0+Q2VsbFpvbmVNZXNoLT52YWx1ZVtpXSk7Cisg
ICAgICBpZighdGhpcy0+Q2FjaGVNZXNoKQorICAgICAgICB7CisgICAgICAgIHRoaXMtPkNlbGxa
b25lTWVzaC0+dmFsdWVbaV0tPkRlbGV0ZSgpOworICAgICAgICB9CisgICAgICB9CisgICAgaWYo
IXRoaXMtPkNhY2hlTWVzaCkKKyAgICAgIHsKKyAgICAgIGRlbGV0ZSB0aGlzLT5DZWxsWm9uZU1l
c2g7CisgICAgICB0aGlzLT5DZWxsWm9uZU1lc2ggPSBOVUxMOworICAgICAgfQogICAgIH0KLSAg
Zm9yKGludCBpID0gMDsgaSA8IChpbnQpbnVtQ2VsbFpvbmVzOyBpKyspCisKKyAgaWYodGhpcy0+
Q2FjaGVNZXNoKQogICAgIHsKLSAgICB2dGtVbnN0cnVjdHVyZWRHcmlkICogY2VsbE1lc2ggPSB0
aGlzLT5HZXRDZWxsWm9uZU1lc2godGltZVN0YXRlLCBpKTsKLSAgICBvdXRwdXQtPlNldERhdGFT
ZXQoMCwgb3V0cHV0LT5HZXROdW1iZXJPZkRhdGFTZXRzKDApLAotICAgICAgICAgICAgICAgICAg
ICAgICBjZWxsTWVzaCk7Ci0gICAgY2VsbE1lc2gtPkRlbGV0ZSgpOworICAgIHRoaXMtPk9sZFRp
bWVTdGVwID0gdGltZVN0YXRlOwogICAgIH0KLSAgcmV0dXJuOwotfQotc3RkU3RyaW5nICogdnRr
T3BlbkZPQU1SZWFkZXI6OkdldExpbmUoaWZzdHJlYW0gKiBmaWxlKQotewotICBjaGFyIHRlbXBD
aGFyOwotICBzdGRTdHJpbmcgKiBidWZmZXIgPSBuZXcgc3RkU3RyaW5nOwotICB3aGlsZShmaWxl
LT5wZWVrKCkgIT0gJ1xuJykKKyAgZWxzZQogICAgIHsKLSAgICBmaWxlLT5nZXQodGVtcENoYXIp
OwotICAgIGJ1ZmZlci0+dmFsdWUgKz0gdGVtcENoYXI7CisgICAgdGhpcy0+T2xkVGltZVN0ZXAg
PSAtMTsKICAgICB9Ci0gIGZpbGUtPmdldCh0ZW1wQ2hhcik7IC8vdGhyb3cgb3V0IFxuCi0gIHJl
dHVybiBidWZmZXI7CisKKyAgcmV0dXJuIDE7CiB9CgotLS0gUGFyYVZpZXczLm9yaWcvVlRLL0lP
L3Z0a09wZW5GT0FNUmVhZGVyLmgJMjAwNy0xMS0wNyAyMTo1MTo1Ni4wMDAwMDAwMDAgKzAxMDAK
KysrIFBhcmFWaWV3My9WVEsvSU8vdnRrT3BlbkZPQU1SZWFkZXIuaAkyMDA3LTEwLTIyIDEzOjIy
OjAxLjAwMDAwMDAwMCArMDIwMApAQCAtMzcsMTYgKzM3LDE4IEBACiB9IGZhY2U7CiAKIGNsYXNz
IHZ0a1Vuc3RydWN0dXJlZEdyaWQ7CitjbGFzcyB2dGtQb2x5RGF0YTsKIGNsYXNzIHZ0a1BvaW50
czsKIGNsYXNzIHZ0a0ludEFycmF5OwotY2xhc3MgdnRrRmxvYXRBcnJheTsKLWNsYXNzIHZ0a0Rv
dWJsZUFycmF5OworY2xhc3MgdnRrU3RyaW5nQXJyYXk7CiBjbGFzcyB2dGtEYXRhQXJyYXlTZWxl
Y3Rpb247Ci1zdHJ1Y3Qgc3RkU3RyaW5nOworY2xhc3MgdnRrQ2FsbGJhY2tDb21tYW5kOworY2xh
c3MgdnRrU3RkU3RyaW5nOwogc3RydWN0IHN0cmluZ1ZlY3RvcjsKIHN0cnVjdCBpbnRWZWN0b3I7
CiBzdHJ1Y3QgaW50VmVjdG9yVmVjdG9yOwogc3RydWN0IGZhY2VWZWN0b3JWZWN0b3I7CitzdHJ1
Y3QgdW5zdHJ1Y3R1cmVkR3JpZFZlY3RvcjsKIAogY2xhc3MgVlRLX0lPX0VYUE9SVCB2dGtPcGVu
Rk9BTVJlYWRlciA6IHB1YmxpYyB2dGtNdWx0aUJsb2NrRGF0YVNldEFsZ29yaXRobQogewpAQCAt
OTMsMTYgKzk1LDEwMiBAQAogICB2b2lkIERpc2FibGVBbGxDZWxsQXJyYXlzKCk7CiAgIHZvaWQg
RW5hYmxlQWxsQ2VsbEFycmF5cygpOwogCisgIC8vIERlc2NyaXB0aW9uOgorICAvLyBHZXQgdGhl
IG51bWJlciBvZiBwb2ludCBhcnJheXMgYXZhaWxhYmxlIGluIHRoZSBpbnB1dC4KKyAgaW50IEdl
dE51bWJlck9mUG9pbnRBcnJheXModm9pZCk7CisKKyAgLy8gRGVzY3JpcHRpb246CisgIC8vIEdl
dC9TZXQgd2hldGhlciB0aGUgcG9pbnQgYXJyYXkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyB0bwor
ICAvLyBiZSByZWFkLgorICBpbnQgR2V0UG9pbnRBcnJheVN0YXR1cyhjb25zdCBjaGFyKiBuYW1l
KTsKKyAgdm9pZCBTZXRQb2ludEFycmF5U3RhdHVzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzdGF0
dXMpOworCisgIC8vIERlc2NyaXB0aW9uOgorICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlICBwb2lu
dCBhcnJheSB3aXRoIHRoZSBnaXZlbiBpbmRleCBpbgorICAvLyB0aGUgaW5wdXQuCisgIGNvbnN0
IGNoYXIqIEdldFBvaW50QXJyYXlOYW1lKGludCBpbmRleCk7CisKKyAgLy8gRGVzY3JpcHRpb246
CisgIC8vIFR1cm4gb24vb2ZmIGFsbCBwb2ludCBhcnJheXMuCisgIHZvaWQgRGlzYWJsZUFsbFBv
aW50QXJyYXlzKCk7CisgIHZvaWQgRW5hYmxlQWxsUG9pbnRBcnJheXMoKTsKKworICAvLyBEZXNj
cmlwdGlvbjoKKyAgLy8gR2V0IHRoZSBudW1iZXIgb2YgUGF0Y2hlcyAoaW5sY3VkaW5nIEludGVy
bmFsIE1lc2gpIGF2YWlsYWJsZSBpbiB0aGUgaW5wdXQuCisgIGludCBHZXROdW1iZXJPZlBhdGNo
QXJyYXlzKHZvaWQpOworCisgIC8vIERlc2NyaXB0aW9uOgorICAvLyBHZXQvU2V0IHdoZXRoZXIg
dGhlIFBhdGNoIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgdG8KKyAgLy8gYmUgcmVhZC4KKyAgaW50
IEdldFBhdGNoQXJyYXlTdGF0dXMoY29uc3QgY2hhciogbmFtZSk7CisgIHZvaWQgU2V0UGF0Y2hB
cnJheVN0YXR1cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc3RhdHVzKTsKKworICAvLyBEZXNjcmlw
dGlvbjoKKyAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBQYXRjaCB3aXRoIHRoZSBnaXZlbiBpbmRl
eCBpbgorICAvLyB0aGUgaW5wdXQuCisgIGNvbnN0IGNoYXIqIEdldFBhdGNoQXJyYXlOYW1lKGlu
dCBpbmRleCk7CisKKyAgLy8gRGVzY3JpcHRpb246CisgIC8vIFR1cm4gb24vb2ZmIGFsbCBQYXRj
aGVzIGluY2x1ZGluZyB0aGUgSW50ZXJuYWwgTWVzaC4KKyAgdm9pZCBEaXNhYmxlQWxsUGF0Y2hB
cnJheXMoKTsKKyAgdm9pZCBFbmFibGVBbGxQYXRjaEFycmF5cygpOworCisgIC8vIFNlbGVjdGlv
biBvYnNlcnZlciBjYWxsYmFjayBmdW5jdGlvbnMKKyAgc3RhdGljIHZvaWQgU2VsZWN0aW9uTW9k
aWZpZWRDYWxsYmFjaworICAoCisgICAgdnRrT2JqZWN0KiBjYWxsZXIsCisgICAgdW5zaWduZWQg
bG9uZyBlaWQsCisgICAgdm9pZCogY2xpZW50ZGF0YSwKKyAgICB2b2lkKiBjYWxsZGF0YQorICAp
OworCisgIHZvaWQgU2VsZWN0aW9uTW9kaWZpZWQoKTsKKworICAvLyBEZXNjcmlwdGlvbjoKKyAg
Ly8gU2V0L0dldCB3aGV0aGVyIG1lc2ggaXMgdG8gYmUgY2FjaGVkLgorICB2dGtTZXRNYWNybyhD
YWNoZU1lc2gsIGludCk7CisgIHZ0a0dldE1hY3JvKENhY2hlTWVzaCwgaW50KTsKKyAgdnRrQm9v
bGVhbk1hY3JvKENhY2hlTWVzaCwgaW50KTsKKworICAvLyBPcHRpb24gdG8gYWNjdW11bGF0ZSBw
YXRjaGVzIGFuZCBmaWVsZHMgYWNyb3NzIHRpbWUgc3RlcHMKKyAgLy8gRGVzY3JpcHRpb246Cisg
IC8vIFNldC9HZXQgd2hldGhlciB0aGUgcGF0Y2hlcyBhcmUgbGlzdGVkIGV2ZW4gaWYgc2l6ZSA9
IDAKKyAgdnRrU2V0TWFjcm8oS2VlcFBhdGNoZXMsaW50KTsKKyAgdnRrR2V0TWFjcm8oS2VlcFBh
dGNoZXMsaW50KTsKKyAgdnRrQm9vbGVhbk1hY3JvKEtlZXBQYXRjaGVzLCBpbnQpOworCisgIC8v
IERlc2NyaXB0aW9uOgorICAvLyBTZXQvR2V0IHdoZXRoZXIgem9uZXMgd2lsbCBiZSByZWFkLgor
ICB2dGtTZXRNYWNybyhSZWFkWm9uZXMsIGludCk7CisgIHZ0a0dldE1hY3JvKFJlYWRab25lcywg
aW50KTsKKyAgdnRrQm9vbGVhbk1hY3JvKFJlYWRab25lcywgaW50KTsKIAogcHJvdGVjdGVkOgor
ICAvLyBmb3IgY2FjaGluZyBtZXNoCisgIGludCBDYWNoZU1lc2g7CisgIC8vIGZvciByZWFkaW5n
IHBvaW50L2ZhY2UvY2VsbC1ab25lcworICBpbnQgUmVhZFpvbmVzOworCisgIC8vIGZvciBhY2N1
bXVsYXRpbmcgcGF0Y2hlcyBhY3Jvc3MgdGltZSBzdGVwcworICBpbnQgS2VlcFBhdGNoZXM7CisK
ICAgdnRrT3BlbkZPQU1SZWFkZXIoKTsKICAgfnZ0a09wZW5GT0FNUmVhZGVyKCk7Ci0gIGludCBS
ZXF1ZXN0RGF0YSh2dGtJbmZvcm1hdGlvbiAqLAotICAgIHZ0a0luZm9ybWF0aW9uVmVjdG9yICoq
LCB2dGtJbmZvcm1hdGlvblZlY3RvciAqKTsKLSAgaW50IFJlcXVlc3RJbmZvcm1hdGlvbih2dGtJ
bmZvcm1hdGlvbiAqLAotICAgIHZ0a0luZm9ybWF0aW9uVmVjdG9yICoqLCB2dGtJbmZvcm1hdGlv
blZlY3RvciAqKTsKKyAgaW50IFJlcXVlc3REYXRhKHZ0a0luZm9ybWF0aW9uICosIHZ0a0luZm9y
bWF0aW9uVmVjdG9yICoqLAorICAgIHZ0a0luZm9ybWF0aW9uVmVjdG9yICopOworICBpbnQgUmVx
dWVzdEluZm9ybWF0aW9uKHZ0a0luZm9ybWF0aW9uICosIHZ0a0luZm9ybWF0aW9uVmVjdG9yICoq
LAorICAgIHZ0a0luZm9ybWF0aW9uVmVjdG9yICopOwogCiBwcml2YXRlOgorCisgIHN0cnVjdCB2
dGtGb2FtRXJyb3I7CisgIHN0cnVjdCB2dGtGb2FtVG9rZW47CisgIHN0cnVjdCB2dGtGb2FtRmls
ZTsKKyAgc3RydWN0IHZ0a0ZvYW1JT29iamVjdDsKKyAgc3RydWN0IHZ0a0ZvYW1FbnRyeVZhbHVl
OworICBzdHJ1Y3QgdnRrRm9hbUVudHJ5OworICBzdHJ1Y3QgdnRrRm9hbURpY3Q7CisKICAgdnRr
T3BlbkZPQU1SZWFkZXIoY29uc3QgdnRrT3BlbkZPQU1SZWFkZXImKTsgIC8vIE5vdCBpbXBsZW1l
bnRlZC4KICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdnRrT3BlbkZPQU1SZWFkZXImKTsgIC8vIE5v
dCBpbXBsZW1lbnRlZC4KIApAQCAtMTEzLDUyICsyMDEsNzIgQEAKICAgaW50IFRpbWVTdGVwOwog
ICBpbnQgVGltZVN0ZXBSYW5nZVsyXTsKICAgZG91YmxlICogU3RlcHM7Ci0gIGJvb2wgUmVxdWVz
dEluZm9ybWF0aW9uRmxhZzsKLSAgaW50IFN0YXJ0RmFjZTsKIAotICBzdGRTdHJpbmcgKiBQYXRo
OwotICBzdGRTdHJpbmcgKiBQYXRoUHJlZml4OwotICBzdHJpbmdWZWN0b3IgKiBUaW1lU3RlcERh
dGE7CisgIC8vIFNlbGVjdGlvbiBPYnNlcnZlciBmb3IgdHJhbnNsYXRpbmcgR1VJIENoYW5nZXMg
dG8gTWVzaCBVcGRhdGVzCisgIHZ0a0NhbGxiYWNrQ29tbWFuZCAqIFNlbGVjdGlvbk9ic2VydmVy
OworCisgIC8vIERhdGFBcnJheVNlbGVjdGlvbiBmb3IgUGF0Y2ggLyBSZWdpb24gRGF0YQorICB2
dGtEYXRhQXJyYXlTZWxlY3Rpb24gKiBQYXRjaERhdGFBcnJheVNlbGVjdGlvbjsKICAgdnRrRGF0
YUFycmF5U2VsZWN0aW9uICogQ2VsbERhdGFBcnJheVNlbGVjdGlvbjsKLSAgaW50VmVjdG9yVmVj
dG9yICogRmFjZVBvaW50czsKLSAgaW50VmVjdG9yVmVjdG9yICogRmFjZXNPd25lckNlbGw7Ci0g
IGludFZlY3RvclZlY3RvciAqIEZhY2VzTmVpZ2hib3JDZWxsOwotICBmYWNlVmVjdG9yVmVjdG9y
ICogRmFjZXNPZkNlbGw7Ci0gIHZ0a1BvaW50cyAqIFBvaW50czsKKyAgdnRrRGF0YUFycmF5U2Vs
ZWN0aW9uICogUG9pbnREYXRhQXJyYXlTZWxlY3Rpb247CisKKyAgLy8gUHJldmlvdXMgYW5kIEN1
cnJlbnQgU3RhdHVzIG9mIGVhY2ggb2YgdGhlIHNlbGVjdGlvbiBhcnJheXMgKGluCisgIC8vIEJp
dHdpc2UgZm9ybSkuIE1heGltdW0gMzEgcGF0Y2hlcyBvciBmaWVsZHMgc3VwcG9ydCBhcyBvZiBu
b3cKKyAgLy8gKHNpbmNlIHdlIHVzZSBMU0IgZm9yIG92ZXJmbG93IGhhbmRsaW5nKQorICB1bnNp
Z25lZCBsb25nIENlbGxTZWxlY3Rpb25PbGRTdGF0dXM7CisgIHVuc2lnbmVkIGxvbmcgUG9pbnRT
ZWxlY3Rpb25PbGRTdGF0dXM7CisgIHVuc2lnbmVkIGxvbmcgUGF0Y2hTZWxlY3Rpb25PbGRTdGF0
dXM7CisgIHVuc2lnbmVkIGxvbmcgQ2VsbFNlbGVjdGlvblN0YXR1czsKKyAgdW5zaWduZWQgbG9u
ZyBQb2ludFNlbGVjdGlvblN0YXR1czsKKyAgdW5zaWduZWQgbG9uZyBQYXRjaFNlbGVjdGlvblN0
YXR1czsKKworICB2dGtTdGRTdHJpbmcqIE9sZEZpbGVOYW1lOworICB2dGtTdGRTdHJpbmcqIFBh
dGhQcmVmaXg7CisgIHZ0a1N0cmluZ0FycmF5ICpUaW1lTmFtZXM7CisgIHN0cmluZ1ZlY3RvciAq
IFRpbWVTdGVwRGF0YTsKKyAgc3RyaW5nVmVjdG9yICogTGFncmFuZ2lhblRpbWVTdGVwRGF0YTsK
KwogICB2dGtJZFR5cGUgTnVtQ2VsbHM7Ci0gIHZ0a0lkVHlwZSBOdW1GYWNlczsKICAgdnRrSW50
QXJyYXkgKiBGYWNlT3duZXI7Ci0gIC8vdnRrSW50QXJyYXkgKiBGYWNlTmVpZ2hib3I7CiAgIHN0
cmluZ1ZlY3RvciAqIFBvbHlNZXNoUG9pbnRzRGlyOwogICBzdHJpbmdWZWN0b3IgKiBQb2x5TWVz
aEZhY2VzRGlyOwotICB2dGtJZFR5cGUgTnVtUG9pbnRzOwotICBpbnRWZWN0b3IgKiBTaXplT2ZC
b3VuZGFyeTsKLSAgc3RyaW5nVmVjdG9yICogQm91bmRhcnlOYW1lczsKLSAgc3RyaW5nVmVjdG9y
ICogUG9pbnRab25lTmFtZXM7Ci0gIHN0cmluZ1ZlY3RvciAqIEZhY2Vab25lTmFtZXM7Ci0gIHN0
cmluZ1ZlY3RvciAqIENlbGxab25lTmFtZXM7Ci0gIGludCBOdW1CbG9ja3M7Ci0KLSAgdm9pZCBD
b21iaW5lT3duZXJOZWlnYm9yKCk7Ci0gIHZ0a1Vuc3RydWN0dXJlZEdyaWQgKiBNYWtlSW50ZXJu
YWxNZXNoKCk7Ci0gIGRvdWJsZSBDb250cm9sRGljdERhdGFQYXJzZXIoY29uc3QgY2hhciAqKTsK
LSAgdm9pZCBSZWFkQ29udHJvbERpY3QgKCk7Ci0gIHZvaWQgR2V0UG9pbnRzIChpbnQpOwotICB2
b2lkIFJlYWRGYWNlc0ZpbGUgKGNvbnN0IGNoYXIgKik7Ci0gIHZvaWQgUmVhZE93bmVyRmlsZShj
b25zdCBjaGFyICopOwotICB2b2lkIFJlYWROZWlnaGJvckZpbGUoY29uc3QgY2hhciAqKTsKKwor
ICAvLyBmb3IgY2FjaGluZyBtZXNoCisgIGludCBPbGRUaW1lU3RlcDsKKyAgdnRrVW5zdHJ1Y3R1
cmVkR3JpZCogSW50ZXJuYWxNZXNoOworICB1bnN0cnVjdHVyZWRHcmlkVmVjdG9yKiBCb3VuZGFy
eU1lc2g7CisgIHZ0a0ZvYW1EaWN0KiBCb3VuZGFyeURpY3Q7CisgIHVuc3RydWN0dXJlZEdyaWRW
ZWN0b3IqIFBvaW50Wm9uZU1lc2g7CisgIHVuc3RydWN0dXJlZEdyaWRWZWN0b3IqIEZhY2Vab25l
TWVzaDsKKyAgdW5zdHJ1Y3R1cmVkR3JpZFZlY3RvciogQ2VsbFpvbmVNZXNoOworCisgIC8vIG1l
bWJlciBmdW5jdGlvbnMKKyAgdm9pZCBDbGVhck1lc2hlcygpOworICB2b2lkIE1ha2VUaW1lU3Rl
cERhdGEoKTsKKyAgdm9pZCBJbnNlcnRDZWxsVG9HcmlkKHZ0a1Vuc3RydWN0dXJlZEdyaWQgKiwg
aW50LCBmYWNlVmVjdG9yVmVjdG9yICosCisgICAgaW50VmVjdG9yVmVjdG9yKik7CisgIHZ0a1Vu
c3RydWN0dXJlZEdyaWQgKiBNYWtlSW50ZXJuYWxNZXNoKGZhY2VWZWN0b3JWZWN0b3IgKiwgaW50
VmVjdG9yVmVjdG9yICosCisgICAgdnRrUG9pbnRzICopOworICBib29sIExpc3RUaW1lRGlyZWN0
b3JpZXNCeUNvbnRyb2xEaWN0KHZ0a0ZvYW1EaWN0KiBkaWN0KTsKKyAgYm9vbCBMaXN0VGltZURp
cmVjdG9yaWVzQnlJbnN0YW5jZXMoKTsKKyAgYm9vbCBSZWFkQ29udHJvbERpY3QoY29uc3QgY2hh
ciAqKTsKKyAgdnRrUG9pbnRzKiBHZXRQb2ludHMgKGludCk7CisgIGludFZlY3RvclZlY3Rvciog
UmVhZEZhY2VzRmlsZSAoY29uc3QgY2hhciAqKTsKKyAgYm9vbCBSZWFkT3duZXJOZWlnaGJvckZp
bGVzKGZhY2VWZWN0b3JWZWN0b3IgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICB2
b2lkIFBvcHVsYXRlUG9seU1lc2hEaXJBcnJheXMoKTsKLSAgY29uc3QgY2hhciAqIEdldERhdGFU
eXBlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLSAgdnRrRG91YmxlQXJyYXkgKiBHZXRJ
bnRlcm5hbFZhcmlhYmxlQXRUaW1lc3RlcChjb25zdCBjaGFyICosIGludCk7Ci0gIHZ0a0RvdWJs
ZUFycmF5ICogR2V0Qm91bmRhcnlWYXJpYWJsZUF0VGltZXN0ZXAoaW50LCBjb25zdCBjaGFyICos
IGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
dGtVbnN0cnVjdHVyZWRHcmlkICopOwotICBzdHJpbmdWZWN0b3IgKkdhdGhlckJsb2Nrcyhjb25z
dCBjaGFyICosIGludCk7Ci0gIHZ0a1Vuc3RydWN0dXJlZEdyaWQgKiBHZXRCb3VuZGFyeU1lc2go
aW50LCBpbnQpOwotICB2dGtVbnN0cnVjdHVyZWRHcmlkICogR2V0UG9pbnRab25lTWVzaChpbnQs
IGludCk7Ci0gIHZ0a1Vuc3RydWN0dXJlZEdyaWQgKiBHZXRGYWNlWm9uZU1lc2goaW50LCBpbnQp
OwotICB2dGtVbnN0cnVjdHVyZWRHcmlkICogR2V0Q2VsbFpvbmVNZXNoKGludCwgaW50KTsKLSAg
dm9pZCBDcmVhdGVEYXRhU2V0KHZ0a011bHRpQmxvY2tEYXRhU2V0ICopOwotICBzdGRTdHJpbmcg
KiBHZXRMaW5lKGlmc3RyZWFtICopOworICBib29sIEdldFZhcmlhYmxlQXRUaW1lc3RlcCh2dGtV
bnN0cnVjdHVyZWRHcmlkKiwgdW5zdHJ1Y3R1cmVkR3JpZFZlY3RvciosCisgICAgdnRrRm9hbURp
Y3QqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgdnRrRm9hbURpY3QqIEdhdGhlckJsb2Nrcyhjb25z
dCBjaGFyICosIGludCwgYm9vbCk7CisgIHVuc3RydWN0dXJlZEdyaWRWZWN0b3IqIEdldEJvdW5k
YXJ5TWVzaCh2dGtGb2FtRGljdCosIGludFZlY3RvclZlY3RvciAqLAorICAgIHZ0a1BvaW50cyAq
KTsKKyAgYm9vbCBHZXRQb2ludFpvbmVNZXNoKHVuc3RydWN0dXJlZEdyaWRWZWN0b3IqLCB2dGtQ
b2ludHMqLCBpbnQpOworICBib29sIEdldEZhY2Vab25lTWVzaCh1bnN0cnVjdHVyZWRHcmlkVmVj
dG9yICosIGludFZlY3RvclZlY3RvciAqLAorICAgIHZ0a1BvaW50cyAqLCBpbnQpOworICBib29s
IEdldENlbGxab25lTWVzaCh1bnN0cnVjdHVyZWRHcmlkVmVjdG9yICosIGZhY2VWZWN0b3JWZWN0
b3IgKiwKKyAgICBpbnRWZWN0b3JWZWN0b3IgKiwgdnRrUG9pbnRzICosIGludCk7CisgIHZ0a1Bv
bHlEYXRhKiBNYWtlTGFncmFuZ2lhbk1lc2goaW50KTsKKyAgYm9vbCBHZXRMYWdyYW5naWFuVmFy
aWFibGVBdFRpbWVzdGVwKHZ0a1BvbHlEYXRhKiwgY29uc3QgY2hhciosIGludCk7CisgIGludCBD
cmVhdGVEYXRhU2V0KHZ0a011bHRpQmxvY2tEYXRhU2V0ICosIGludCk7CiB9OwogCiAjZW5kaWYK
</data>        

          </attachment>
    </bug>

</bugzilla>