<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>185109</bug_id>
          
          <creation_ts>2018-04-27 23:05:00 -0700</creation_ts>
          <short_desc>Web Inspector: Layers inspector should allow control-dragging to pan the 3D render</short_desc>
          <delta_ts>2018-07-10 13:10:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>Safari 11</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Phil Dokas">phil</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1418771</commentid>
    <comment_count>0</comment_count>
    <who name="Phil Dokas">phil</who>
    <bug_when>2018-04-27 23:05:00 -0700</bug_when>
    <thetext>Per https://webkit.org/blog/8262/visualizing-layers-in-web-inspector/:

&gt; We might begin by exploring the visualization to understand each layer’s position, size, and rendering order. To navigate, use left-drag to rotate, right-drag to pan, and scroll to zoom.

Right-click dragging is very tricky on a trackpad. You have to touch two fingers to the trackpad, click with a third, and move the third without releasing the first two. As such, per macOS conventions, holding down the control key and clicking the trackpad should function as a right-click. Therefore, holding control while dragging should pan the layers wireframe.

Bug submitted per recommendation from Ross Kirsling: https://twitter.com/rkirsling/status/990052211479666688</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420244</commentid>
    <comment_count>1</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-05-03 11:44:45 -0700</bug_when>
    <thetext>This will be a trivial fix but it&apos;s currently blocked by a limitation in three.js&apos; OrbitControls.

Rather than fork that module, I&apos;m working on getting it updated:
https://github.com/mrdoob/three.js/issues/13970</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438621</commentid>
    <comment_count>2</comment_count>
      <attachid>344132</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-02 13:58:53 -0700</bug_when>
    <thetext>Created attachment 344132
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440531</commentid>
    <comment_count>3</comment_count>
      <attachid>344132</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-07-09 13:57:04 -0700</bug_when>
    <thetext>Comment on attachment 344132
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=344132&amp;action=review

Was is possible to pan before this change? The pull request for three.js mentions right-dragging, but I can&apos;t tell what that is. Also I think geometry in the scene shouldn&apos;t be selectable when clicking as part of a pan operation. This would cause a user&apos;s selection to change when panning to get a better view. r- for now, due to the selection issue.

&gt; Source/WebInspectorUI/UserInterface/Views/Layers3DContentView.js:160
&gt; +        this._controls.screenSpacePanning = true;

I&apos;d like to see a high-level explanation for why the default values for panSpeed and screenSpacePanning aren&apos;t used. It looks like screenSpacePanning controls the axes on which the camera pans, and the default is to pan only on the horizontal axis of the plane parallel to the scene. That seems like strange default behavior in any case, but maybe I&apos;m missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440577</commentid>
    <comment_count>4</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-09 15:07:54 -0700</bug_when>
    <thetext>(In reply to Matt Baker from comment #3)
&gt; Comment on attachment 344132 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=344132&amp;action=review
&gt; 
&gt; Was is possible to pan before this change? The pull request for three.js
&gt; mentions right-dragging, but I can&apos;t tell what that is. Also I think
&gt; geometry in the scene shouldn&apos;t be selectable when clicking as part of a pan
&gt; operation. This would cause a user&apos;s selection to change when panning to get
&gt; a better view. r- for now, due to the selection issue.

As mentioned on IRC, this part is unchanged from before -- I&apos;d be happy to address it in a subsequent patch, if that&apos;s alright?

&gt; &gt; Source/WebInspectorUI/UserInterface/Views/Layers3DContentView.js:160
&gt; &gt; +        this._controls.screenSpacePanning = true;
&gt; 
&gt; I&apos;d like to see a high-level explanation for why the default values for
&gt; panSpeed and screenSpacePanning aren&apos;t used. It looks like
&gt; screenSpacePanning controls the axes on which the camera pans, and the
&gt; default is to pan only on the horizontal axis of the plane parallel to the
&gt; scene. That seems like strange default behavior in any case, but maybe I&apos;m
&gt; missing something.

Both of these fields were introduced in recent releases so I&apos;m just setting them so as to maintain our existing behavior. I&apos;m not really clear on the motivation behind the change in default panning mode (https://github.com/mrdoob/three.js/pull/13242, https://github.com/mrdoob/three.js/pull/13720); we might be able to rework the scene in order to align with the new default but it&apos;s doubtful that cost would justify benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440602</commentid>
    <comment_count>5</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-09 16:08:26 -0700</bug_when>
    <thetext>Created https://bugs.webkit.org/show_bug.cgi?id=187488 to track the unintentional selection issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440945</commentid>
    <comment_count>6</comment_count>
      <attachid>344132</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-10 13:09:50 -0700</bug_when>
    <thetext>Comment on attachment 344132
Patch

Clearing flags on attachment: 344132

Committed r233695: &lt;https://trac.webkit.org/changeset/233695&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440946</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-10 13:09:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440947</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-10 13:10:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/42036967&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344132</attachid>
            <date>2018-07-02 13:58:53 -0700</date>
            <delta_ts>2018-07-10 13:09:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185109-20180702135848.patch</filename>
            <type>text/plain</type>
            <size>2171734</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzNDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA2
Mzk2ODY2MjQ3OWFiMGU4ODRjNzJiMDAxNmMyYTlkZDUyZjViZTlmLi42NzAxZDUyMzYzYWQ2Mzg2
ZDBlYmQwZmYwMmM4ZTBhYjUyMGQ5YmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxOC0wNy0wMiAgUm9zcyBLaXJzbGluZyAgPHJraXJzbGluZ0BnbWFpbC5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTGF5ZXJzIGluc3BlY3RvciBzaG91bGQgYWxs
b3cgY29udHJvbC1kcmFnZ2luZyB0byBwYW4gdGhlIDNEIHJlbmRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MTA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcmVzc2VkIGluIHRoZSB0aHJlZS5q
cyByZXBvIGl0c2VsZiAoaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9wdWxsLzEz
OTcyKSwKKyAgICAgICAgc28gdGhpcyBwYXRjaCBzaW1wbHkgdXBkYXRlcyB0aHJlZS5qcyBhbmQg
aXRzIE9yYml0Q29udHJvbHMgbW9kdWxlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRl
cm5hbC90aHJlZS5qcy9MSUNFTlNFOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
dGhyZWUuanMvdGhyZWUuanM6CisgICAgICAgIFVwZGF0ZSB0byByOTQuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0V4dGVybmFsL3RocmVlLmpzL09yYml0Q29udHJvbHMuanM6CisgICAgICAg
IFVwZGF0ZSB0byBsYXRlc3QuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVy
czNEQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5MYXllcnMzRENvbnRlbnRWaWV3LnByb3Rv
dHlwZS5pbml0aWFsTGF5b3V0KToKKyAgICAgICAgKFdJLkxheWVyczNEQ29udGVudFZpZXcucHJv
dG90eXBlLl9yZXN0cmljdFBhbik6CisgICAgICAgIEFkYXB0IHRvIHJlY2VudCBjaGFuZ2VzIGlu
IHRocmVlLmpzLgorCiAyMDE4LTA2LTI4ICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSRUdSRVNTSU9OIChyMjEzMDAwKTogY29weSBm
cm9tIFNlYXJjaCByZXN1bHRzIGNvbnRlbnQgdmlldyBicm9rZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL3RocmVlLmpzL0xJQ0VOU0Ug
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC90aHJlZS5qcy9M
SUNFTlNFCmluZGV4IDU2MDQ5MDE0MGViNTJlYmYyZDlhNGQyNjA0OTUxMjRkMjc2MDhiYTQuLjQ5
MmMyM2UyOWEzZjU3ZTI3MTI1ZDkxMTA3N2I1ZTI2ZGY3NDVjNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL3RocmVlLmpzL0xJQ0VOU0UK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvdGhyZWUu
anMvTElDRU5TRQpAQCAtMSw2ICsxLDYgQEAKIFRoZSBNSVQgTGljZW5zZQogCi1Db3B5cmlnaHQg
wqkgMjAxMC0yMDE3IHRocmVlLmpzIGF1dGhvcnMKK0NvcHlyaWdodCDCqSAyMDEwLTIwMTggdGhy
ZWUuanMgYXV0aG9ycwogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo
YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiBvZiB0aGlzIHNvZnR3YXJlIGFu
ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVh
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvdGhyZWUuanMvT3JiaXRDb250cm9scy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL3RocmVlLmpzL09yYml0Q29udHJvbHMuanMKaW5kZXggZGU3NjE4
ODZjZTVjNGU1OWNkOGQ5ZTdhMTkyNTcyMjJhMmQ0MzE1Yi4uNDE4MjQxYjc0ZTBkN2I5YWJkYThh
NmIyNDMxYTEwOTYzZTgzMDU4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvdGhyZWUuanMvT3JiaXRDb250cm9scy5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC90aHJlZS5qcy9PcmJpdENv
bnRyb2xzLmpzCkBAIC05LDkgKzksOSBAQAogLy8gVGhpcyBzZXQgb2YgY29udHJvbHMgcGVyZm9y
bXMgb3JiaXRpbmcsIGRvbGx5aW5nICh6b29taW5nKSwgYW5kIHBhbm5pbmcuCiAvLyBVbmxpa2Ug
VHJhY2tiYWxsQ29udHJvbHMsIGl0IG1haW50YWlucyB0aGUgInVwIiBkaXJlY3Rpb24gb2JqZWN0
LnVwICgrWSBieSBkZWZhdWx0KS4KIC8vCi0vLyAgICBPcmJpdCAtIGxlZnQgbW91c2UgLyB0b3Vj
aDogb25lIGZpbmdlciBtb3ZlCi0vLyAgICBab29tIC0gbWlkZGxlIG1vdXNlLCBvciBtb3VzZXdo
ZWVsIC8gdG91Y2g6IHR3byBmaW5nZXIgc3ByZWFkIG9yIHNxdWlzaAotLy8gICAgUGFuIC0gcmln
aHQgbW91c2UsIG9yIGFycm93IGtleXMgLyB0b3VjaDogdGhyZWUgZmluZ2VyIHN3aXBlCisvLyAg
ICBPcmJpdCAtIGxlZnQgbW91c2UgLyB0b3VjaDogb25lLWZpbmdlciBtb3ZlCisvLyAgICBab29t
IC0gbWlkZGxlIG1vdXNlLCBvciBtb3VzZXdoZWVsIC8gdG91Y2g6IHR3by1maW5nZXIgc3ByZWFk
IG9yIHNxdWlzaAorLy8gICAgUGFuIC0gcmlnaHQgbW91c2UsIG9yIGFycm93IGtleXMgLyB0b3Vj
aDogdHdvLWZpbmdlciBtb3ZlCiAKIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9i
amVjdCwgZG9tRWxlbWVudCApIHsKIApAQCAtNTksNiArNTksOCBAQCBUSFJFRS5PcmJpdENvbnRy
b2xzID0gZnVuY3Rpb24gKCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7CiAKICAgICAvLyBTZXQgdG8g
ZmFsc2UgdG8gZGlzYWJsZSBwYW5uaW5nCiAgICAgdGhpcy5lbmFibGVQYW4gPSB0cnVlOworICAg
IHRoaXMucGFuU3BlZWQgPSAxLjA7CisgICAgdGhpcy5zY3JlZW5TcGFjZVBhbm5pbmcgPSBmYWxz
ZTsgLy8gaWYgdHJ1ZSwgcGFuIGluIHNjcmVlbi1zcGFjZQogICAgIHRoaXMua2V5UGFuU3BlZWQg
PSA3LjA7IC8vIHBpeGVscyBtb3ZlZCBwZXIgYXJyb3cga2V5IHB1c2gKIAogICAgIC8vIFNldCB0
byB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgcm90YXRlIGFyb3VuZCB0aGUgdGFyZ2V0CkBAIC03Myw3
ICs3NSw3IEBAIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9iamVjdCwgZG9tRWxl
bWVudCApIHsKICAgICB0aGlzLmtleXMgPSB7IExFRlQ6IDM3LCBVUDogMzgsIFJJR0hUOiAzOSwg
Qk9UVE9NOiA0MCB9OwogCiAgICAgLy8gTW91c2UgYnV0dG9ucwotICAgIHRoaXMubW91c2VCdXR0
b25zID0geyBPUkJJVDogVEhSRUUuTU9VU0UuTEVGVCwgWk9PTTogVEhSRUUuTU9VU0UuTUlERExF
LCBQQU46IFRIUkVFLk1PVVNFLlJJR0hUIH07CisgICAgdGhpcy5tb3VzZUJ1dHRvbnMgPSB7IExF
RlQ6IFRIUkVFLk1PVVNFLkxFRlQsIE1JRERMRTogVEhSRUUuTU9VU0UuTUlERExFLCBSSUdIVDog
VEhSRUUuTU9VU0UuUklHSFQgfTsKIAogICAgIC8vIGZvciByZXNldAogICAgIHRoaXMudGFyZ2V0
MCA9IHRoaXMudGFyZ2V0LmNsb25lKCk7CkBAIC0xODMsMTQgKzE4NSwxNyBAQCBUSFJFRS5PcmJp
dENvbnRyb2xzID0gZnVuY3Rpb24gKCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7CiAgICAgICAgICAg
ICAgICAgc3BoZXJpY2FsRGVsdGEudGhldGEgKj0gKCAxIC0gc2NvcGUuZGFtcGluZ0ZhY3RvciAp
OwogICAgICAgICAgICAgICAgIHNwaGVyaWNhbERlbHRhLnBoaSAqPSAoIDEgLSBzY29wZS5kYW1w
aW5nRmFjdG9yICk7CiAKKyAgICAgICAgICAgICAgICBwYW5PZmZzZXQubXVsdGlwbHlTY2FsYXIo
IDEgLSBzY29wZS5kYW1waW5nRmFjdG9yICk7CisKICAgICAgICAgICAgIH0gZWxzZSB7CiAKICAg
ICAgICAgICAgICAgICBzcGhlcmljYWxEZWx0YS5zZXQoIDAsIDAsIDAgKTsKIAorICAgICAgICAg
ICAgICAgIHBhbk9mZnNldC5zZXQoIDAsIDAsIDAgKTsKKwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBzY2FsZSA9IDE7Ci0gICAgICAgICAgICBwYW5PZmZzZXQuc2V0KCAwLCAwLCAwICk7
CiAKICAgICAgICAgICAgIC8vIHVwZGF0ZSBjb25kaXRpb24gaXM6CiAgICAgICAgICAgICAvLyBt
aW4oY2FtZXJhIGRpc3BsYWNlbWVudCwgY2FtZXJhIHJvdGF0aW9uIGluIHJhZGlhbnMpXjIgPiBF
UFMKQEAgLTI0NSw3ICsyNTAsNyBAQCBUSFJFRS5PcmJpdENvbnRyb2xzID0gZnVuY3Rpb24gKCBv
YmplY3QsIGRvbUVsZW1lbnQgKSB7CiAgICAgdmFyIHN0YXJ0RXZlbnQgPSB7IHR5cGU6ICdzdGFy
dCcgfTsKICAgICB2YXIgZW5kRXZlbnQgPSB7IHR5cGU6ICdlbmQnIH07CiAKLSAgICB2YXIgU1RB
VEUgPSB7IE5PTkU6IC0gMSwgUk9UQVRFOiAwLCBET0xMWTogMSwgUEFOOiAyLCBUT1VDSF9ST1RB
VEU6IDMsIFRPVUNIX0RPTExZOiA0LCBUT1VDSF9QQU46IDUgfTsKKyAgICB2YXIgU1RBVEUgPSB7
IE5PTkU6IC0gMSwgUk9UQVRFOiAwLCBET0xMWTogMSwgUEFOOiAyLCBUT1VDSF9ST1RBVEU6IDMs
IFRPVUNIX0RPTExZX1BBTjogNCB9OwogCiAgICAgdmFyIHN0YXRlID0gU1RBVEUuTk9ORTsKIApA
QCAtMzE2LDcgKzMyMSwxNyBAQCBUSFJFRS5PcmJpdENvbnRyb2xzID0gZnVuY3Rpb24gKCBvYmpl
Y3QsIGRvbUVsZW1lbnQgKSB7CiAKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhblVwKCBkaXN0
YW5jZSwgb2JqZWN0TWF0cml4ICkgewogCi0gICAgICAgICAgICB2LnNldEZyb21NYXRyaXhDb2x1
bW4oIG9iamVjdE1hdHJpeCwgMSApOyAvLyBnZXQgWSBjb2x1bW4gb2Ygb2JqZWN0TWF0cml4Cisg
ICAgICAgICAgICBpZiAoIHNjb3BlLnNjcmVlblNwYWNlUGFubmluZyA9PT0gdHJ1ZSApIHsKKwor
ICAgICAgICAgICAgICAgIHYuc2V0RnJvbU1hdHJpeENvbHVtbiggb2JqZWN0TWF0cml4LCAxICk7
CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICB2LnNldEZyb21NYXRy
aXhDb2x1bW4oIG9iamVjdE1hdHJpeCwgMCApOworICAgICAgICAgICAgICAgIHYuY3Jvc3NWZWN0
b3JzKCBzY29wZS5vYmplY3QudXAsIHYgKTsKKworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICB2Lm11bHRpcGx5U2NhbGFyKCBkaXN0YW5jZSApOwogCiAgICAgICAgICAgICBwYW5PZmZzZXQu
YWRkKCB2ICk7CkBAIC0zMzQsNyArMzQ5LDcgQEAgVEhSRUUuT3JiaXRDb250cm9scyA9IGZ1bmN0
aW9uICggb2JqZWN0LCBkb21FbGVtZW50ICkgewogCiAgICAgICAgICAgICB2YXIgZWxlbWVudCA9
IHNjb3BlLmRvbUVsZW1lbnQgPT09IGRvY3VtZW50ID8gc2NvcGUuZG9tRWxlbWVudC5ib2R5IDog
c2NvcGUuZG9tRWxlbWVudDsKIAotICAgICAgICAgICAgaWYgKCBzY29wZS5vYmplY3QgaW5zdGFu
Y2VvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSApIHsKKyAgICAgICAgICAgIGlmICggc2NvcGUu
b2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEgKSB7CiAKICAgICAgICAgICAgICAgICAvLyBwZXJz
cGVjdGl2ZQogICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHNjb3BlLm9iamVjdC5wb3Np
dGlvbjsKQEAgLTM0NCwxMSArMzU5LDExIEBAIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlv
biAoIG9iamVjdCwgZG9tRWxlbWVudCApIHsKICAgICAgICAgICAgICAgICAvLyBoYWxmIG9mIHRo
ZSBmb3YgaXMgY2VudGVyIHRvIHRvcCBvZiBzY3JlZW4KICAgICAgICAgICAgICAgICB0YXJnZXRE
aXN0YW5jZSAqPSBNYXRoLnRhbiggKCBzY29wZS5vYmplY3QuZm92IC8gMiApICogTWF0aC5QSSAv
IDE4MC4wICk7CiAKLSAgICAgICAgICAgICAgICAvLyB3ZSBhY3R1YWxseSBkb24ndCB1c2Ugc2Ny
ZWVuV2lkdGgsIHNpbmNlIHBlcnNwZWN0aXZlIGNhbWVyYSBpcyBmaXhlZCB0byBzY3JlZW4gaGVp
Z2h0CisgICAgICAgICAgICAgICAgLy8gd2UgdXNlIG9ubHkgY2xpZW50SGVpZ2h0IGhlcmUgc28g
YXNwZWN0IHJhdGlvIGRvZXMgbm90IGRpc3RvcnQgc3BlZWQKICAgICAgICAgICAgICAgICBwYW5M
ZWZ0KCAyICogZGVsdGFYICogdGFyZ2V0RGlzdGFuY2UgLyBlbGVtZW50LmNsaWVudEhlaWdodCwg
c2NvcGUub2JqZWN0Lm1hdHJpeCApOwogICAgICAgICAgICAgICAgIHBhblVwKCAyICogZGVsdGFZ
ICogdGFyZ2V0RGlzdGFuY2UgLyBlbGVtZW50LmNsaWVudEhlaWdodCwgc2NvcGUub2JqZWN0Lm1h
dHJpeCApOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBzY29wZS5vYmplY3QgaW5zdGFuY2Vv
ZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEgKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBz
Y29wZS5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEgKSB7CiAKICAgICAgICAgICAgICAgICAv
LyBvcnRob2dyYXBoaWMKICAgICAgICAgICAgICAgICBwYW5MZWZ0KCBkZWx0YVggKiAoIHNjb3Bl
Lm9iamVjdC5yaWdodCAtIHNjb3BlLm9iamVjdC5sZWZ0ICkgLyBzY29wZS5vYmplY3Quem9vbSAv
IGVsZW1lbnQuY2xpZW50V2lkdGgsIHNjb3BlLm9iamVjdC5tYXRyaXggKTsKQEAgLTM2OCwxMSAr
MzgzLDExIEBAIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9iamVjdCwgZG9tRWxl
bWVudCApIHsKIAogICAgIGZ1bmN0aW9uIGRvbGx5SW4oIGRvbGx5U2NhbGUgKSB7CiAKLSAgICAg
ICAgaWYgKCBzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSAp
IHsKKyAgICAgICAgaWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSApIHsKIAog
ICAgICAgICAgICAgc2NhbGUgLz0gZG9sbHlTY2FsZTsKIAotICAgICAgICB9IGVsc2UgaWYgKCBz
Y29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEgKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoIHNjb3BlLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSApIHsKIAog
ICAgICAgICAgICAgc2NvcGUub2JqZWN0Lnpvb20gPSBNYXRoLm1heCggc2NvcGUubWluWm9vbSwg
TWF0aC5taW4oIHNjb3BlLm1heFpvb20sIHNjb3BlLm9iamVjdC56b29tICogZG9sbHlTY2FsZSAp
ICk7CiAgICAgICAgICAgICBzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOwpA
QCAtMzg5LDExICs0MDQsMTEgQEAgVEhSRUUuT3JiaXRDb250cm9scyA9IGZ1bmN0aW9uICggb2Jq
ZWN0LCBkb21FbGVtZW50ICkgewogCiAgICAgZnVuY3Rpb24gZG9sbHlPdXQoIGRvbGx5U2NhbGUg
KSB7CiAKLSAgICAgICAgaWYgKCBzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5QZXJzcGVj
dGl2ZUNhbWVyYSApIHsKKyAgICAgICAgaWYgKCBzY29wZS5vYmplY3QuaXNQZXJzcGVjdGl2ZUNh
bWVyYSApIHsKIAogICAgICAgICAgICAgc2NhbGUgKj0gZG9sbHlTY2FsZTsKIAotICAgICAgICB9
IGVsc2UgaWYgKCBzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1l
cmEgKSB7CisgICAgICAgIH0gZWxzZSBpZiAoIHNjb3BlLm9iamVjdC5pc09ydGhvZ3JhcGhpY0Nh
bWVyYSApIHsKIAogICAgICAgICAgICAgc2NvcGUub2JqZWN0Lnpvb20gPSBNYXRoLm1heCggc2Nv
cGUubWluWm9vbSwgTWF0aC5taW4oIHNjb3BlLm1heFpvb20sIHNjb3BlLm9iamVjdC56b29tIC8g
ZG9sbHlTY2FsZSApICk7CiAgICAgICAgICAgICBzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlv
bk1hdHJpeCgpOwpAQCAtNDQxLDE1ICs0NTYsMTQgQEAgVEhSRUUuT3JiaXRDb250cm9scyA9IGZ1
bmN0aW9uICggb2JqZWN0LCBkb21FbGVtZW50ICkgewogICAgICAgICAvL2NvbnNvbGUubG9nKCAn
aGFuZGxlTW91c2VNb3ZlUm90YXRlJyApOwogCiAgICAgICAgIHJvdGF0ZUVuZC5zZXQoIGV2ZW50
LmNsaWVudFgsIGV2ZW50LmNsaWVudFkgKTsKLSAgICAgICAgcm90YXRlRGVsdGEuc3ViVmVjdG9y
cyggcm90YXRlRW5kLCByb3RhdGVTdGFydCApOworCisgICAgICAgIHJvdGF0ZURlbHRhLnN1YlZl
Y3RvcnMoIHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQgKS5tdWx0aXBseVNjYWxhciggc2NvcGUucm90
YXRlU3BlZWQgKTsKIAogICAgICAgICB2YXIgZWxlbWVudCA9IHNjb3BlLmRvbUVsZW1lbnQgPT09
IGRvY3VtZW50ID8gc2NvcGUuZG9tRWxlbWVudC5ib2R5IDogc2NvcGUuZG9tRWxlbWVudDsKIAot
ICAgICAgICAvLyByb3RhdGluZyBhY3Jvc3Mgd2hvbGUgc2NyZWVuIGdvZXMgMzYwIGRlZ3JlZXMg
YXJvdW5kCi0gICAgICAgIHJvdGF0ZUxlZnQoIDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueCAv
IGVsZW1lbnQuY2xpZW50V2lkdGggKiBzY29wZS5yb3RhdGVTcGVlZCApOworICAgICAgICByb3Rh
dGVMZWZ0KCAyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnggLyBlbGVtZW50LmNsaWVudEhlaWdo
dCApOyAvLyB5ZXMsIGhlaWdodAogCi0gICAgICAgIC8vIHJvdGF0aW5nIHVwIGFuZCBkb3duIGFs
b25nIHdob2xlIHNjcmVlbiBhdHRlbXB0cyB0byBnbyAzNjAsIGJ1dCBsaW1pdGVkIHRvIDE4MAot
ICAgICAgICByb3RhdGVVcCggMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS55IC8gZWxlbWVudC5j
bGllbnRIZWlnaHQgKiBzY29wZS5yb3RhdGVTcGVlZCApOworICAgICAgICByb3RhdGVVcCggMiAq
IE1hdGguUEkgKiByb3RhdGVEZWx0YS55IC8gZWxlbWVudC5jbGllbnRIZWlnaHQgKTsKIAogICAg
ICAgICByb3RhdGVTdGFydC5jb3B5KCByb3RhdGVFbmQgKTsKIApAQCAtNDg3LDcgKzUwMSw3IEBA
IFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9iamVjdCwgZG9tRWxlbWVudCApIHsK
IAogICAgICAgICBwYW5FbmQuc2V0KCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZICk7CiAK
LSAgICAgICAgcGFuRGVsdGEuc3ViVmVjdG9ycyggcGFuRW5kLCBwYW5TdGFydCApOworICAgICAg
ICBwYW5EZWx0YS5zdWJWZWN0b3JzKCBwYW5FbmQsIHBhblN0YXJ0ICkubXVsdGlwbHlTY2FsYXIo
IHNjb3BlLnBhblNwZWVkICk7CiAKICAgICAgICAgcGFuKCBwYW5EZWx0YS54LCBwYW5EZWx0YS55
ICk7CiAKQEAgLTU1OSwyNCArNTczLDI5IEBAIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlv
biAoIG9iamVjdCwgZG9tRWxlbWVudCApIHsKIAogICAgIH0KIAotICAgIGZ1bmN0aW9uIGhhbmRs
ZVRvdWNoU3RhcnREb2xseSggZXZlbnQgKSB7CisgICAgZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFy
dERvbGx5UGFuKCBldmVudCApIHsKIAotICAgICAgICAvL2NvbnNvbGUubG9nKCAnaGFuZGxlVG91
Y2hTdGFydERvbGx5JyApOworICAgICAgICAvL2NvbnNvbGUubG9nKCAnaGFuZGxlVG91Y2hTdGFy
dERvbGx5UGFuJyApOwogCi0gICAgICAgIHZhciBkeCA9IGV2ZW50LnRvdWNoZXNbIDAgXS5wYWdl
WCAtIGV2ZW50LnRvdWNoZXNbIDEgXS5wYWdlWDsKLSAgICAgICAgdmFyIGR5ID0gZXZlbnQudG91
Y2hlc1sgMCBdLnBhZ2VZIC0gZXZlbnQudG91Y2hlc1sgMSBdLnBhZ2VZOworICAgICAgICBpZiAo
IHNjb3BlLmVuYWJsZVpvb20gKSB7CiAKLSAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0
KCBkeCAqIGR4ICsgZHkgKiBkeSApOworICAgICAgICAgICAgdmFyIGR4ID0gZXZlbnQudG91Y2hl
c1sgMCBdLnBhZ2VYIC0gZXZlbnQudG91Y2hlc1sgMSBdLnBhZ2VYOworICAgICAgICAgICAgdmFy
IGR5ID0gZXZlbnQudG91Y2hlc1sgMCBdLnBhZ2VZIC0gZXZlbnQudG91Y2hlc1sgMSBdLnBhZ2VZ
OwogCi0gICAgICAgIGRvbGx5U3RhcnQuc2V0KCAwLCBkaXN0YW5jZSApOworICAgICAgICAgICAg
dmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KCBkeCAqIGR4ICsgZHkgKiBkeSApOwogCi0gICAgfQor
ICAgICAgICAgICAgZG9sbHlTdGFydC5zZXQoIDAsIGRpc3RhbmNlICk7CisKKyAgICAgICAgfQor
CisgICAgICAgIGlmICggc2NvcGUuZW5hYmxlUGFuICkgewogCi0gICAgZnVuY3Rpb24gaGFuZGxl
VG91Y2hTdGFydFBhbiggZXZlbnQgKSB7CisgICAgICAgICAgICB2YXIgeCA9IDAuNSAqICggZXZl
bnQudG91Y2hlc1sgMCBdLnBhZ2VYICsgZXZlbnQudG91Y2hlc1sgMSBdLnBhZ2VYICk7CisgICAg
ICAgICAgICB2YXIgeSA9IDAuNSAqICggZXZlbnQudG91Y2hlc1sgMCBdLnBhZ2VZICsgZXZlbnQu
dG91Y2hlc1sgMSBdLnBhZ2VZICk7CiAKLSAgICAgICAgLy9jb25zb2xlLmxvZyggJ2hhbmRsZVRv
dWNoU3RhcnRQYW4nICk7CisgICAgICAgICAgICBwYW5TdGFydC5zZXQoIHgsIHkgKTsKIAotICAg
ICAgICBwYW5TdGFydC5zZXQoIGV2ZW50LnRvdWNoZXNbIDAgXS5wYWdlWCwgZXZlbnQudG91Y2hl
c1sgMCBdLnBhZ2VZICk7CisgICAgICAgIH0KIAogICAgIH0KIApAQCAtNTg1LDE1ICs2MDQsMTQg
QEAgVEhSRUUuT3JiaXRDb250cm9scyA9IGZ1bmN0aW9uICggb2JqZWN0LCBkb21FbGVtZW50ICkg
ewogICAgICAgICAvL2NvbnNvbGUubG9nKCAnaGFuZGxlVG91Y2hNb3ZlUm90YXRlJyApOwogCiAg
ICAgICAgIHJvdGF0ZUVuZC5zZXQoIGV2ZW50LnRvdWNoZXNbIDAgXS5wYWdlWCwgZXZlbnQudG91
Y2hlc1sgMCBdLnBhZ2VZICk7Ci0gICAgICAgIHJvdGF0ZURlbHRhLnN1YlZlY3RvcnMoIHJvdGF0
ZUVuZCwgcm90YXRlU3RhcnQgKTsKKworICAgICAgICByb3RhdGVEZWx0YS5zdWJWZWN0b3JzKCBy
b3RhdGVFbmQsIHJvdGF0ZVN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHNjb3BlLnJvdGF0ZVNwZWVk
ICk7CiAKICAgICAgICAgdmFyIGVsZW1lbnQgPSBzY29wZS5kb21FbGVtZW50ID09PSBkb2N1bWVu
dCA/IHNjb3BlLmRvbUVsZW1lbnQuYm9keSA6IHNjb3BlLmRvbUVsZW1lbnQ7CiAKLSAgICAgICAg
Ly8gcm90YXRpbmcgYWNyb3NzIHdob2xlIHNjcmVlbiBnb2VzIDM2MCBkZWdyZWVzIGFyb3VuZAot
ICAgICAgICByb3RhdGVMZWZ0KCAyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnggLyBlbGVtZW50
LmNsaWVudFdpZHRoICogc2NvcGUucm90YXRlU3BlZWQgKTsKKyAgICAgICAgcm90YXRlTGVmdCgg
MiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS54IC8gZWxlbWVudC5jbGllbnRIZWlnaHQgKTsgLy8g
eWVzLCBoZWlnaHQKIAotICAgICAgICAvLyByb3RhdGluZyB1cCBhbmQgZG93biBhbG9uZyB3aG9s
ZSBzY3JlZW4gYXR0ZW1wdHMgdG8gZ28gMzYwLCBidXQgbGltaXRlZCB0byAxODAKLSAgICAgICAg
cm90YXRlVXAoIDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueSAvIGVsZW1lbnQuY2xpZW50SGVp
Z2h0ICogc2NvcGUucm90YXRlU3BlZWQgKTsKKyAgICAgICAgcm90YXRlVXAoIDIgKiBNYXRoLlBJ
ICogcm90YXRlRGVsdGEueSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICk7CiAKICAgICAgICAgcm90
YXRlU3RhcnQuY29weSggcm90YXRlRW5kICk7CiAKQEAgLTYwMSw0NiArNjE5LDQxIEBAIFRIUkVF
Lk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9iamVjdCwgZG9tRWxlbWVudCApIHsKIAogICAg
IH0KIAotICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZURvbGx5KCBldmVudCApIHsKKyAgICBm
dW5jdGlvbiBoYW5kbGVUb3VjaE1vdmVEb2xseVBhbiggZXZlbnQgKSB7CiAKLSAgICAgICAgLy9j
b25zb2xlLmxvZyggJ2hhbmRsZVRvdWNoTW92ZURvbGx5JyApOworICAgICAgICAvL2NvbnNvbGUu
bG9nKCAnaGFuZGxlVG91Y2hNb3ZlRG9sbHlQYW4nICk7CiAKLSAgICAgICAgdmFyIGR4ID0gZXZl
bnQudG91Y2hlc1sgMCBdLnBhZ2VYIC0gZXZlbnQudG91Y2hlc1sgMSBdLnBhZ2VYOwotICAgICAg
ICB2YXIgZHkgPSBldmVudC50b3VjaGVzWyAwIF0ucGFnZVkgLSBldmVudC50b3VjaGVzWyAxIF0u
cGFnZVk7CisgICAgICAgIGlmICggc2NvcGUuZW5hYmxlWm9vbSApIHsKIAotICAgICAgICB2YXIg
ZGlzdGFuY2UgPSBNYXRoLnNxcnQoIGR4ICogZHggKyBkeSAqIGR5ICk7CisgICAgICAgICAgICB2
YXIgZHggPSBldmVudC50b3VjaGVzWyAwIF0ucGFnZVggLSBldmVudC50b3VjaGVzWyAxIF0ucGFn
ZVg7CisgICAgICAgICAgICB2YXIgZHkgPSBldmVudC50b3VjaGVzWyAwIF0ucGFnZVkgLSBldmVu
dC50b3VjaGVzWyAxIF0ucGFnZVk7CiAKLSAgICAgICAgZG9sbHlFbmQuc2V0KCAwLCBkaXN0YW5j
ZSApOworICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KCBkeCAqIGR4ICsgZHkg
KiBkeSApOwogCi0gICAgICAgIGRvbGx5RGVsdGEuc3ViVmVjdG9ycyggZG9sbHlFbmQsIGRvbGx5
U3RhcnQgKTsKKyAgICAgICAgICAgIGRvbGx5RW5kLnNldCggMCwgZGlzdGFuY2UgKTsKIAotICAg
ICAgICBpZiAoIGRvbGx5RGVsdGEueSA+IDAgKSB7CisgICAgICAgICAgICBkb2xseURlbHRhLnNl
dCggMCwgTWF0aC5wb3coIGRvbGx5RW5kLnkgLyBkb2xseVN0YXJ0LnksIHNjb3BlLnpvb21TcGVl
ZCApICk7CiAKLSAgICAgICAgICAgIGRvbGx5T3V0KCBnZXRab29tU2NhbGUoKSApOwotCi0gICAg
ICAgIH0gZWxzZSBpZiAoIGRvbGx5RGVsdGEueSA8IDAgKSB7CisgICAgICAgICAgICBkb2xseUlu
KCBkb2xseURlbHRhLnkgKTsKIAotICAgICAgICAgICAgZG9sbHlJbiggZ2V0Wm9vbVNjYWxlKCkg
KTsKKyAgICAgICAgICAgIGRvbGx5U3RhcnQuY29weSggZG9sbHlFbmQgKTsKIAogICAgICAgICB9
CiAKLSAgICAgICAgZG9sbHlTdGFydC5jb3B5KCBkb2xseUVuZCApOworICAgICAgICBpZiAoIHNj
b3BlLmVuYWJsZVBhbiApIHsKIAotICAgICAgICBzY29wZS51cGRhdGUoKTsKKyAgICAgICAgICAg
IHZhciB4ID0gMC41ICogKCBldmVudC50b3VjaGVzWyAwIF0ucGFnZVggKyBldmVudC50b3VjaGVz
WyAxIF0ucGFnZVggKTsKKyAgICAgICAgICAgIHZhciB5ID0gMC41ICogKCBldmVudC50b3VjaGVz
WyAwIF0ucGFnZVkgKyBldmVudC50b3VjaGVzWyAxIF0ucGFnZVkgKTsKIAotICAgIH0KKyAgICAg
ICAgICAgIHBhbkVuZC5zZXQoIHgsIHkgKTsKIAotICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92
ZVBhbiggZXZlbnQgKSB7CisgICAgICAgICAgICBwYW5EZWx0YS5zdWJWZWN0b3JzKCBwYW5FbmQs
IHBhblN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHNjb3BlLnBhblNwZWVkICk7CiAKLSAgICAgICAg
Ly9jb25zb2xlLmxvZyggJ2hhbmRsZVRvdWNoTW92ZVBhbicgKTsKKyAgICAgICAgICAgIHBhbigg
cGFuRGVsdGEueCwgcGFuRGVsdGEueSApOwogCi0gICAgICAgIHBhbkVuZC5zZXQoIGV2ZW50LnRv
dWNoZXNbIDAgXS5wYWdlWCwgZXZlbnQudG91Y2hlc1sgMCBdLnBhZ2VZICk7Ci0KLSAgICAgICAg
cGFuRGVsdGEuc3ViVmVjdG9ycyggcGFuRW5kLCBwYW5TdGFydCApOwotCi0gICAgICAgIHBhbigg
cGFuRGVsdGEueCwgcGFuRGVsdGEueSApOworICAgICAgICAgICAgcGFuU3RhcnQuY29weSggcGFu
RW5kICk7CiAKLSAgICAgICAgcGFuU3RhcnQuY29weSggcGFuRW5kICk7CisgICAgICAgIH0KIAog
ICAgICAgICBzY29wZS51cGRhdGUoKTsKIApAQCAtNjY0LDE3ICs2NzcsMjkgQEAgVEhSRUUuT3Ji
aXRDb250cm9scyA9IGZ1bmN0aW9uICggb2JqZWN0LCBkb21FbGVtZW50ICkgewogCiAgICAgICAg
IHN3aXRjaCAoIGV2ZW50LmJ1dHRvbiApIHsKIAotICAgICAgICAgICAgY2FzZSBzY29wZS5tb3Vz
ZUJ1dHRvbnMuT1JCSVQ6CisgICAgICAgICAgICBjYXNlIHNjb3BlLm1vdXNlQnV0dG9ucy5MRUZU
OgogCi0gICAgICAgICAgICAgICAgaWYgKCBzY29wZS5lbmFibGVSb3RhdGUgPT09IGZhbHNlICkg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmICggZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRh
S2V5ICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggc2NvcGUuZW5hYmxlUGFuID09PSBm
YWxzZSApIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBoYW5kbGVNb3VzZURvd25QYW4o
IGV2ZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5QQU47CisKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgaGFuZGxlTW91c2VEb3du
Um90YXRlKCBldmVudCApOworICAgICAgICAgICAgICAgICAgICBpZiAoIHNjb3BlLmVuYWJsZVJv
dGF0ZSA9PT0gZmFsc2UgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRF
LlJPVEFURTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUm90YXRlKCBldmVu
dCApOworCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUk9UQVRFOworCisgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNh
c2Ugc2NvcGUubW91c2VCdXR0b25zLlpPT006CisgICAgICAgICAgICBjYXNlIHNjb3BlLm1vdXNl
QnV0dG9ucy5NSURETEU6CiAKICAgICAgICAgICAgICAgICBpZiAoIHNjb3BlLmVuYWJsZVpvb20g
PT09IGZhbHNlICkgcmV0dXJuOwogCkBAIC02ODQsNyArNzA5LDcgQEAgVEhSRUUuT3JiaXRDb250
cm9scyA9IGZ1bmN0aW9uICggb2JqZWN0LCBkb21FbGVtZW50ICkgewogCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2Ugc2NvcGUubW91c2VCdXR0b25zLlBBTjoKKyAg
ICAgICAgICAgIGNhc2Ugc2NvcGUubW91c2VCdXR0b25zLlJJR0hUOgogCiAgICAgICAgICAgICAg
ICAgaWYgKCBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuOwogCkBAIC03NjUsOSAr
NzkwLDEwIEBAIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9iamVjdCwgZG9tRWxl
bWVudCApIHsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7CiAKKyAgICAgICAgc2NvcGUuZGlzcGF0Y2hFdmVudCggc3RhcnRF
dmVudCApOworCiAgICAgICAgIGhhbmRsZU1vdXNlV2hlZWwoIGV2ZW50ICk7CiAKLSAgICAgICAg
c2NvcGUuZGlzcGF0Y2hFdmVudCggc3RhcnRFdmVudCApOyAvLyBub3Qgc3VyZSB3aHkgdGhlc2Ug
YXJlIGhlcmUuLi4KICAgICAgICAgc2NvcGUuZGlzcGF0Y2hFdmVudCggZW5kRXZlbnQgKTsKIAog
ICAgIH0KQEAgLTc4NCw2ICs4MTAsOCBAQCBUSFJFRS5PcmJpdENvbnRyb2xzID0gZnVuY3Rpb24g
KCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7CiAKICAgICAgICAgaWYgKCBzY29wZS5lbmFibGVkID09
PSBmYWxzZSApIHJldHVybjsKIAorICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCiAg
ICAgICAgIHN3aXRjaCAoIGV2ZW50LnRvdWNoZXMubGVuZ3RoICkgewogCiAgICAgICAgICAgICBj
YXNlIDE6IC8vIG9uZS1maW5nZXJlZCB0b3VjaDogcm90YXRlCkBAIC03OTYsMjMgKzgyNCwxMyBA
QCBUSFJFRS5PcmJpdENvbnRyb2xzID0gZnVuY3Rpb24gKCBvYmplY3QsIGRvbUVsZW1lbnQgKSB7
CiAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSAyOiAvLyB0d28t
ZmluZ2VyZWQgdG91Y2g6IGRvbGx5CisgICAgICAgICAgICBjYXNlIDI6IC8vIHR3by1maW5nZXJl
ZCB0b3VjaDogZG9sbHktcGFuCiAKLSAgICAgICAgICAgICAgICBpZiAoIHNjb3BlLmVuYWJsZVpv
b20gPT09IGZhbHNlICkgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICggc2NvcGUuZW5hYmxl
Wm9vbSA9PT0gZmFsc2UgJiYgc2NvcGUuZW5hYmxlUGFuID09PSBmYWxzZSApIHJldHVybjsKIAot
ICAgICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnREb2xseSggZXZlbnQgKTsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlQYW4oIGV2ZW50ICk7CiAKLSAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX0RPTExZOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIGNhc2UgMzogLy8gdGhyZWUtZmluZ2VyZWQgdG91Y2g6IHBhbgotCi0g
ICAgICAgICAgICAgICAgaWYgKCBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hTdGFydFBhbiggZXZlbnQgKTsKLQotICAgICAg
ICAgICAgICAgIHN0YXRlID0gU1RBVEUuVE9VQ0hfUEFOOworICAgICAgICAgICAgICAgIHN0YXRl
ID0gU1RBVEUuVE9VQ0hfRE9MTFlfUEFOOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAg
LTg0MiwyNyArODYwLDE4IEBAIFRIUkVFLk9yYml0Q29udHJvbHMgPSBmdW5jdGlvbiAoIG9iamVj
dCwgZG9tRWxlbWVudCApIHsKICAgICAgICAgICAgIGNhc2UgMTogLy8gb25lLWZpbmdlcmVkIHRv
dWNoOiByb3RhdGUKIAogICAgICAgICAgICAgICAgIGlmICggc2NvcGUuZW5hYmxlUm90YXRlID09
PSBmYWxzZSApIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoIHN0YXRlICE9PSBTVEFURS5U
T1VDSF9ST1RBVEUgKSByZXR1cm47IC8vIGlzIHRoaXMgbmVlZGVkPy4uLgorICAgICAgICAgICAg
ICAgIGlmICggc3RhdGUgIT09IFNUQVRFLlRPVUNIX1JPVEFURSApIHJldHVybjsgLy8gaXMgdGhp
cyBuZWVkZWQ/CiAKICAgICAgICAgICAgICAgICBoYW5kbGVUb3VjaE1vdmVSb3RhdGUoIGV2ZW50
ICk7CiAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSAyOiAvLyB0
d28tZmluZ2VyZWQgdG91Y2g6IGRvbGx5CisgICAgICAgICAgICBjYXNlIDI6IC8vIHR3by1maW5n
ZXJlZCB0b3VjaDogZG9sbHktcGFuCiAKLSAgICAgICAgICAgICAgICBpZiAoIHNjb3BlLmVuYWJs
ZVpvb20gPT09IGZhbHNlICkgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmICggc3RhdGUgIT09
IFNUQVRFLlRPVUNIX0RPTExZICkgcmV0dXJuOyAvLyBpcyB0aGlzIG5lZWRlZD8uLi4KLQotICAg
ICAgICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZURvbGx5KCBldmVudCApOwotCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgMzogLy8gdGhyZWUtZmluZ2VyZWQgdG91
Y2g6IHBhbgotCi0gICAgICAgICAgICAgICAgaWYgKCBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNl
ICkgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmICggc3RhdGUgIT09IFNUQVRFLlRPVUNIX1BB
TiApIHJldHVybjsgLy8gaXMgdGhpcyBuZWVkZWQ/Li4uCisgICAgICAgICAgICAgICAgaWYgKCBz
Y29wZS5lbmFibGVab29tID09PSBmYWxzZSAmJiBzY29wZS5lbmFibGVQYW4gPT09IGZhbHNlICkg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmICggc3RhdGUgIT09IFNUQVRFLlRPVUNIX0RPTExZ
X1BBTiApIHJldHVybjsgLy8gaXMgdGhpcyBuZWVkZWQ/CiAKLSAgICAgICAgICAgICAgICBoYW5k
bGVUb3VjaE1vdmVQYW4oIGV2ZW50ICk7CisgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hNb3Zl
RG9sbHlQYW4oIGV2ZW50ICk7CiAKICAgICAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvdGhyZWUuanMv
dGhyZWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC90
aHJlZS5qcy90aHJlZS5qcwppbmRleCBkMjYwNTIwZWQ2YmM3YjkwMGJhNmEyZGJkZjE0ZWEwMTYy
MTFlZGE5Li5iMTMzZjZkZmEyODVhY2YzNzI2OWMzN2M3YjEyMDRhN2FkN2JlOTdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC90aHJlZS5q
cy90aHJlZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC90aHJlZS5qcy90aHJlZS5qcwpAQCAtMSw3ICsxLDcgQEAKIChmdW5jdGlvbiAoZ2xvYmFs
LCBmYWN0b3J5KSB7CiAgICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBt
b2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6CiAgICAgdHlwZW9mIGRl
ZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBm
YWN0b3J5KSA6Ci0gICAgKGZhY3RvcnkoKGdsb2JhbC5USFJFRSA9IGdsb2JhbC5USFJFRSB8fCB7
fSkpKTsKKyAgICAoZmFjdG9yeSgoZ2xvYmFsLlRIUkVFID0ge30pKSk7CiB9KHRoaXMsIChmdW5j
dGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7CiAKICAgICAvLyBQb2x5ZmlsbHMKQEAgLTM5
LDcgKzM5LDcgQEAKIAogICAgIH0KIAotICAgIGlmICggRnVuY3Rpb24ucHJvdG90eXBlLm5hbWUg
PT09IHVuZGVmaW5lZCApIHsKKyAgICBpZiAoICduYW1lJyBpbiBGdW5jdGlvbi5wcm90b3R5cGUg
PT09IGZhbHNlICkgewogCiAgICAgICAgIC8vIE1pc3NpbmcgaW4gSUUKICAgICAgICAgLy8gaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZl
cmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vbmFtZQpAQCAtNjUsOCArNjUsNiBAQAogCiAg
ICAgICAgICAgICBPYmplY3QuYXNzaWduID0gZnVuY3Rpb24gKCB0YXJnZXQgKSB7CiAKLSAgICAg
ICAgICAgICAgICAndXNlIHN0cmljdCc7Ci0KICAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9
PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCApIHsKIAogICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCAnQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwg
dG8gb2JqZWN0JyApOwpAQCAtMTg3LDcgKzE4NSw3IEBACiAKICAgICB9ICk7CiAKLSAgICB2YXIg
UkVWSVNJT04gPSAnODYnOworICAgIHZhciBSRVZJU0lPTiA9ICc5NCc7CiAgICAgdmFyIE1PVVNF
ID0geyBMRUZUOiAwLCBNSURETEU6IDEsIFJJR0hUOiAyIH07CiAgICAgdmFyIEN1bGxGYWNlTm9u
ZSA9IDA7CiAgICAgdmFyIEN1bGxGYWNlQmFjayA9IDE7CkBAIC0yODEsMTUgKzI3OSwyOSBAQAog
ICAgIHZhciBSR0JFRm9ybWF0ID0gUkdCQUZvcm1hdDsKICAgICB2YXIgRGVwdGhGb3JtYXQgPSAx
MDI2OwogICAgIHZhciBEZXB0aFN0ZW5jaWxGb3JtYXQgPSAxMDI3OwotICAgIHZhciBSR0JfUzNU
Q19EWFQxX0Zvcm1hdCA9IDIwMDE7Ci0gICAgdmFyIFJHQkFfUzNUQ19EWFQxX0Zvcm1hdCA9IDIw
MDI7Ci0gICAgdmFyIFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCA9IDIwMDM7Ci0gICAgdmFyIFJHQkFf
UzNUQ19EWFQ1X0Zvcm1hdCA9IDIwMDQ7Ci0gICAgdmFyIFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0
ID0gMjEwMDsKLSAgICB2YXIgUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQgPSAyMTAxOwotICAgIHZh
ciBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSAyMTAyOwotICAgIHZhciBSR0JBX1BWUlRDXzJC
UFBWMV9Gb3JtYXQgPSAyMTAzOwotICAgIHZhciBSR0JfRVRDMV9Gb3JtYXQgPSAyMTUxOworICAg
IHZhciBSR0JfUzNUQ19EWFQxX0Zvcm1hdCA9IDMzNzc2OworICAgIHZhciBSR0JBX1MzVENfRFhU
MV9Gb3JtYXQgPSAzMzc3NzsKKyAgICB2YXIgUkdCQV9TM1RDX0RYVDNfRm9ybWF0ID0gMzM3Nzg7
CisgICAgdmFyIFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCA9IDMzNzc5OworICAgIHZhciBSR0JfUFZS
VENfNEJQUFYxX0Zvcm1hdCA9IDM1ODQwOworICAgIHZhciBSR0JfUFZSVENfMkJQUFYxX0Zvcm1h
dCA9IDM1ODQxOworICAgIHZhciBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgPSAzNTg0MjsKKyAg
ICB2YXIgUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gMzU4NDM7CisgICAgdmFyIFJHQl9FVEMx
X0Zvcm1hdCA9IDM2MTk2OworICAgIHZhciBSR0JBX0FTVENfNHg0X0Zvcm1hdCA9IDM3ODA4Owor
ICAgIHZhciBSR0JBX0FTVENfNXg0X0Zvcm1hdCA9IDM3ODA5OworICAgIHZhciBSR0JBX0FTVENf
NXg1X0Zvcm1hdCA9IDM3ODEwOworICAgIHZhciBSR0JBX0FTVENfNng1X0Zvcm1hdCA9IDM3ODEx
OworICAgIHZhciBSR0JBX0FTVENfNng2X0Zvcm1hdCA9IDM3ODEyOworICAgIHZhciBSR0JBX0FT
VENfOHg1X0Zvcm1hdCA9IDM3ODEzOworICAgIHZhciBSR0JBX0FTVENfOHg2X0Zvcm1hdCA9IDM3
ODE0OworICAgIHZhciBSR0JBX0FTVENfOHg4X0Zvcm1hdCA9IDM3ODE1OworICAgIHZhciBSR0JB
X0FTVENfMTB4NV9Gb3JtYXQgPSAzNzgxNjsKKyAgICB2YXIgUkdCQV9BU1RDXzEweDZfRm9ybWF0
ID0gMzc4MTc7CisgICAgdmFyIFJHQkFfQVNUQ18xMHg4X0Zvcm1hdCA9IDM3ODE4OworICAgIHZh
ciBSR0JBX0FTVENfMTB4MTBfRm9ybWF0ID0gMzc4MTk7CisgICAgdmFyIFJHQkFfQVNUQ18xMngx
MF9Gb3JtYXQgPSAzNzgyMDsKKyAgICB2YXIgUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdCA9IDM3ODIx
OwogICAgIHZhciBMb29wT25jZSA9IDIyMDA7CiAgICAgdmFyIExvb3BSZXBlYXQgPSAyMjAxOwog
ICAgIHZhciBMb29wUGluZ1BvbmcgPSAyMjAyOwpAQCAtMzEyLDYgKzMyNCw4IEBACiAgICAgdmFy
IFJHQkRFbmNvZGluZyA9IDMwMDY7CiAgICAgdmFyIEJhc2ljRGVwdGhQYWNraW5nID0gMzIwMDsK
ICAgICB2YXIgUkdCQURlcHRoUGFja2luZyA9IDMyMDE7CisgICAgdmFyIFRhbmdlbnRTcGFjZU5v
cm1hbE1hcCA9IDA7CisgICAgdmFyIE9iamVjdFNwYWNlTm9ybWFsTWFwID0gMTsKIAogICAgIC8q
KgogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCkBA
IC0zMjMsNDIgKzMzNywzNSBAQAogICAgICAgICBERUcyUkFEOiBNYXRoLlBJIC8gMTgwLAogICAg
ICAgICBSQUQyREVHOiAxODAgLyBNYXRoLlBJLAogCi0gICAgICAgIGdlbmVyYXRlVVVJRDogZnVu
Y3Rpb24gKCkgewotCi0gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmJyb29mYS5jb20vVG9vbHMv
TWF0aC51dWlkLmh0bQotCi0gICAgICAgICAgICB2YXIgY2hhcnMgPSAnMDEyMzQ1Njc4OUFCQ0RF
RkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLnNwbGl0KCAn
JyApOwotICAgICAgICAgICAgdmFyIHV1aWQgPSBuZXcgQXJyYXkoIDM2ICk7Ci0gICAgICAgICAg
ICB2YXIgcm5kID0gMCwgcjsKLQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRl
VVVJRCgpIHsKLQotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDM2OyBpICsr
ICkgeworICAgICAgICBnZW5lcmF0ZVVVSUQ6ICggZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggaSA9PT0gOCB8fCBpID09PSAxMyB8fCBpID09PSAxOCB8fCBpID09PSAy
MyApIHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMv
MTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTk2MzEzNiMy
MTk2MzEzNgogCi0gICAgICAgICAgICAgICAgICAgICAgICB1dWlkWyBpIF0gPSAnLSc7CisgICAg
ICAgICAgICB2YXIgbHV0ID0gW107CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
aSA9PT0gMTQgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCAyNTY7IGkgKysg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHV1aWRbIGkgXSA9ICc0JzsKLQotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGx1dFsgaSBdID0gKCBpIDwg
MTYgPyAnMCcgOiAnJyApICsgKCBpICkudG9TdHJpbmcoIDE2ICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcm5kIDw9IDB4MDIgKSBybmQgPSAweDIwMDAwMDAgKyAoIE1hdGgucmFu
ZG9tKCkgKiAweDEwMDAwMDAgKSB8IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gcm5k
ICYgMHhmOwotICAgICAgICAgICAgICAgICAgICAgICAgcm5kID0gcm5kID4+IDQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB1dWlkWyBpIF0gPSBjaGFyc1sgKCBpID09PSAxOSApID8gKCByICYg
MHgzICkgfCAweDggOiByIF07CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpIHsKIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgZDAgPSBNYXRoLnJhbmRvbSgpICogMHhm
ZmZmZmZmZiB8IDA7CisgICAgICAgICAgICAgICAgdmFyIGQxID0gTWF0aC5yYW5kb20oKSAqIDB4
ZmZmZmZmZmYgfCAwOworICAgICAgICAgICAgICAgIHZhciBkMiA9IE1hdGgucmFuZG9tKCkgKiAw
eGZmZmZmZmZmIHwgMDsKKyAgICAgICAgICAgICAgICB2YXIgZDMgPSBNYXRoLnJhbmRvbSgpICog
MHhmZmZmZmZmZiB8IDA7CisgICAgICAgICAgICAgICAgdmFyIHV1aWQgPSBsdXRbIGQwICYgMHhm
ZiBdICsgbHV0WyBkMCA+PiA4ICYgMHhmZiBdICsgbHV0WyBkMCA+PiAxNiAmIDB4ZmYgXSArIGx1
dFsgZDAgPj4gMjQgJiAweGZmIF0gKyAnLScgKworICAgICAgICAgICAgICAgICAgICBsdXRbIGQx
ICYgMHhmZiBdICsgbHV0WyBkMSA+PiA4ICYgMHhmZiBdICsgJy0nICsgbHV0WyBkMSA+PiAxNiAm
IDB4MGYgfCAweDQwIF0gKyBsdXRbIGQxID4+IDI0ICYgMHhmZiBdICsgJy0nICsKKyAgICAgICAg
ICAgICAgICAgICAgbHV0WyBkMiAmIDB4M2YgfCAweDgwIF0gKyBsdXRbIGQyID4+IDggJiAweGZm
IF0gKyAnLScgKyBsdXRbIGQyID4+IDE2ICYgMHhmZiBdICsgbHV0WyBkMiA+PiAyNCAmIDB4ZmYg
XSArCisgICAgICAgICAgICAgICAgICAgIGx1dFsgZDMgJiAweGZmIF0gKyBsdXRbIGQzID4+IDgg
JiAweGZmIF0gKyBsdXRbIGQzID4+IDE2ICYgMHhmZiBdICsgbHV0WyBkMyA+PiAyNCAmIDB4ZmYg
XTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB1dWlkLmpvaW4oICcnICk7CisgICAgICAgICAg
ICAgICAgLy8gLnRvVXBwZXJDYXNlKCkgaGVyZSBmbGF0dGVucyBjb25jYXRlbmF0ZWQgc3RyaW5n
cyB0byBzYXZlIGhlYXAgbWVtb3J5IHNwYWNlLgorICAgICAgICAgICAgICAgIHJldHVybiB1dWlk
LnRvVXBwZXJDYXNlKCk7CiAKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgfSgpLAorICAgICAg
ICB9ICkoKSwKIAogICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCB2YWx1ZSwgbWluLCBtYXggKSB7
CiAKQEAgLTQ1NywyMyArNDY0LDE1IEBACiAKICAgICAgICAgfSwKIAotICAgICAgICBuZWFyZXN0
UG93ZXJPZlR3bzogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgY2VpbFBvd2VyT2ZUd286
IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdyggMiwg
TWF0aC5yb3VuZCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7CisgICAgICAgICAg
ICByZXR1cm4gTWF0aC5wb3coIDIsIE1hdGguY2VpbCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRo
LkxOMiApICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBuZXh0UG93ZXJPZlR3bzogZnVuY3Rp
b24gKCB2YWx1ZSApIHsKLQotICAgICAgICAgICAgdmFsdWUgLS07Ci0gICAgICAgICAgICB2YWx1
ZSB8PSB2YWx1ZSA+PiAxOwotICAgICAgICAgICAgdmFsdWUgfD0gdmFsdWUgPj4gMjsKLSAgICAg
ICAgICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7Ci0gICAgICAgICAgICB2YWx1ZSB8PSB2YWx1ZSA+
PiA4OwotICAgICAgICAgICAgdmFsdWUgfD0gdmFsdWUgPj4gMTY7Ci0gICAgICAgICAgICB2YWx1
ZSArKzsKKyAgICAgICAgZmxvb3JQb3dlck9mVHdvOiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0g
ICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coIDIs
IE1hdGguZmxvb3IoIE1hdGgubG9nKCB2YWx1ZSApIC8gTWF0aC5MTjIgKSApOwogCiAgICAgICAg
IH0KIApAQCAtNDk1LDcgKzQ5NCw3IEBACiAKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcygg
VmVjdG9yMi5wcm90b3R5cGUsIHsKIAotICAgICAgICAid2lkdGgiIDogeworICAgICAgICAid2lk
dGgiOiB7CiAKICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogCkBAIC01MTEsNyArNTEw
LDcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgICJoZWlnaHQiIDogeworICAgICAgICAiaGVp
Z2h0IjogewogCiAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKIApAQCAtNzE4LDYgKzcx
NywxOCBAQAogCiAgICAgICAgIH0sCiAKKyAgICAgICAgYXBwbHlNYXRyaXgzOiBmdW5jdGlvbiAo
IG0gKSB7CisKKyAgICAgICAgICAgIHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55OworICAgICAg
ICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzOworCisgICAgICAgICAgICB0aGlzLnggPSBlWyAwIF0g
KiB4ICsgZVsgMyBdICogeSArIGVbIDYgXTsKKyAgICAgICAgICAgIHRoaXMueSA9IGVbIDEgXSAq
IHggKyBlWyA0IF0gKiB5ICsgZVsgNyBdOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKwor
ICAgICAgICB9LAorCiAgICAgICAgIG1pbjogZnVuY3Rpb24gKCB2ICkgewogCiAgICAgICAgICAg
ICB0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTsKQEAgLTgzNCw3ICs4NDUsNyBAQAog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgbGVuZ3RoTWFuaGF0dGFuOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbWFuaGF0dGFuTGVuZ3RoOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAgICAgIHJldHVy
biBNYXRoLmFicyggdGhpcy54ICkgKyBNYXRoLmFicyggdGhpcy55ICk7CiAKQEAgLTg3MSw3ICs4
ODIsNyBAQAogCiAgICAgICAgIH0sCiAKLSAgICAgICAgZGlzdGFuY2VUb01hbmhhdHRhbjogZnVu
Y3Rpb24gKCB2ICkgeworICAgICAgICBtYW5oYXR0YW5EaXN0YW5jZVRvOiBmdW5jdGlvbiAoIHYg
KSB7CiAKICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyggdGhpcy54IC0gdi54ICkgKyBNYXRo
LmFicyggdGhpcy55IC0gdi55ICk7CiAKQEAgLTk2MCwxMDIxICs5NzEsOTM4IEBACiAKICAgICAv
KioKICAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBh
dXRob3Igc3VwZXJlZ2diZXJ0IC8gaHR0cDovL3d3dy5wYXVsYnJ1bnQuY28udWsvCisgICAgICog
QGF1dGhvciBwaGlsb2diIC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy8KKyAgICAgKiBAYXV0aG9y
IGpvcmRpX3JvcyAvIGh0dHA6Ly9wbGF0dHNvZnQuY29tCisgICAgICogQGF1dGhvciBEMXBsbzFk
IC8gaHR0cDovL2dpdGh1Yi5jb20vRDFwbG8xZAogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBo
dHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBzemltZWsgLyBodHRwczov
L2dpdGh1Yi5jb20vc3ppbWVrLworICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0
cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhvciB0aW1rbmlwIC8gaHR0cDovL3d3dy5mbG9vcnBs
YW5uZXIuY29tLworICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAg
ICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkK
ICAgICAgKi8KIAotICAgIHZhciB0ZXh0dXJlSWQgPSAwOworICAgIGZ1bmN0aW9uIE1hdHJpeDQo
KSB7CiAKLSAgICBmdW5jdGlvbiBUZXh0dXJlKCBpbWFnZSwgbWFwcGluZywgd3JhcFMsIHdyYXBU
LCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGlu
ZyApIHsKKyAgICAgICAgdGhpcy5lbGVtZW50cyA9IFsKIAotICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IHRleHR1cmVJZCArKyB9ICk7CisgICAgICAg
ICAgICAxLCAwLCAwLCAwLAorICAgICAgICAgICAgMCwgMSwgMCwgMCwKKyAgICAgICAgICAgIDAs
IDAsIDEsIDAsCisgICAgICAgICAgICAwLCAwLCAwLCAxCiAKLSAgICAgICAgdGhpcy51dWlkID0g
X01hdGguZ2VuZXJhdGVVVUlEKCk7CisgICAgICAgIF07CiAKLSAgICAgICAgdGhpcy5uYW1lID0g
Jyc7CisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAgdGhp
cy5pbWFnZSA9IGltYWdlICE9PSB1bmRlZmluZWQgPyBpbWFnZSA6IFRleHR1cmUuREVGQVVMVF9J
TUFHRTsKLSAgICAgICAgdGhpcy5taXBtYXBzID0gW107CisgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCAnVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1
bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7CiAKLSAgICAgICAgdGhpcy5tYXBwaW5nID0g
bWFwcGluZyAhPT0gdW5kZWZpbmVkID8gbWFwcGluZyA6IFRleHR1cmUuREVGQVVMVF9NQVBQSU5H
OworICAgICAgICB9CiAKLSAgICAgICAgdGhpcy53cmFwUyA9IHdyYXBTICE9PSB1bmRlZmluZWQg
PyB3cmFwUyA6IENsYW1wVG9FZGdlV3JhcHBpbmc7Ci0gICAgICAgIHRoaXMud3JhcFQgPSB3cmFw
VCAhPT0gdW5kZWZpbmVkID8gd3JhcFQgOiBDbGFtcFRvRWRnZVdyYXBwaW5nOworICAgIH0KIAot
ICAgICAgICB0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWFnRmls
dGVyIDogTGluZWFyRmlsdGVyOwotICAgICAgICB0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlciAh
PT0gdW5kZWZpbmVkID8gbWluRmlsdGVyIDogTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOworICAg
IE9iamVjdC5hc3NpZ24oIE1hdHJpeDQucHJvdG90eXBlLCB7CiAKLSAgICAgICAgdGhpcy5hbmlz
b3Ryb3B5ID0gYW5pc290cm9weSAhPT0gdW5kZWZpbmVkID8gYW5pc290cm9weSA6IDE7CisgICAg
ICAgIGlzTWF0cml4NDogdHJ1ZSwKIAotICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdCAhPT0g
dW5kZWZpbmVkID8gZm9ybWF0IDogUkdCQUZvcm1hdDsKLSAgICAgICAgdGhpcy50eXBlID0gdHlw
ZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IFVuc2lnbmVkQnl0ZVR5cGU7CisgICAgICAgIHNldDog
ZnVuY3Rpb24gKCBuMTEsIG4xMiwgbjEzLCBuMTQsIG4yMSwgbjIyLCBuMjMsIG4yNCwgbjMxLCBu
MzIsIG4zMywgbjM0LCBuNDEsIG40MiwgbjQzLCBuNDQgKSB7CiAKLSAgICAgICAgdGhpcy5vZmZz
ZXQgPSBuZXcgVmVjdG9yMiggMCwgMCApOwotICAgICAgICB0aGlzLnJlcGVhdCA9IG5ldyBWZWN0
b3IyKCAxLCAxICk7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAg
ICAgIHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5wcmVtdWx0aXBs
eUFscGhhID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuZmxpcFkgPSB0cnVlOwotICAgICAgICB0aGlz
LnVucGFja0FsaWdubWVudCA9IDQ7ICAgLy8gdmFsaWQgdmFsdWVzOiAxLCAyLCA0LCA4IChzZWUg
aHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQaXhl
bFN0b3JlaS54bWwpCisgICAgICAgICAgICB0ZVsgMCBdID0gbjExOyB0ZVsgNCBdID0gbjEyOyB0
ZVsgOCBdID0gbjEzOyB0ZVsgMTIgXSA9IG4xNDsKKyAgICAgICAgICAgIHRlWyAxIF0gPSBuMjE7
IHRlWyA1IF0gPSBuMjI7IHRlWyA5IF0gPSBuMjM7IHRlWyAxMyBdID0gbjI0OworICAgICAgICAg
ICAgdGVbIDIgXSA9IG4zMTsgdGVbIDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7IHRlWyAxNCBd
ID0gbjM0OworICAgICAgICAgICAgdGVbIDMgXSA9IG40MTsgdGVbIDcgXSA9IG40MjsgdGVbIDEx
IF0gPSBuNDM7IHRlWyAxNSBdID0gbjQ0OwogCi0gICAgICAgIC8vIFZhbHVlcyBvZiBlbmNvZGlu
ZyAhPT0gVEhSRUUuTGluZWFyRW5jb2Rpbmcgb25seSBzdXBwb3J0ZWQgb24gbWFwLCBlbnZNYXAg
YW5kIGVtaXNzaXZlTWFwLgotICAgICAgICAvLwotICAgICAgICAvLyBBbHNvIGNoYW5naW5nIHRo
ZSBlbmNvZGluZyBhZnRlciBhbHJlYWR5IHVzZWQgYnkgYSBNYXRlcmlhbCB3aWxsIG5vdCBhdXRv
bWF0aWNhbGx5IG1ha2UgdGhlIE1hdGVyaWFsCi0gICAgICAgIC8vIHVwZGF0ZS4gIFlvdSBuZWVk
IHRvIGV4cGxpY2l0bHkgY2FsbCBNYXRlcmlhbC5uZWVkc1VwZGF0ZSB0byB0cmlnZ2VyIGl0IHRv
IHJlY29tcGlsZS4KLSAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nICE9PSB1bmRlZmlu
ZWQgPyBlbmNvZGluZyA6IExpbmVhckVuY29kaW5nOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgdGhpcy52ZXJzaW9uID0gMDsKLSAgICAgICAgdGhpcy5vblVwZGF0ZSA9IG51
bGw7CisgICAgICAgIH0sCiAKLSAgICB9CisgICAgICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7
CiAKLSAgICBUZXh0dXJlLkRFRkFVTFRfSU1BR0UgPSB1bmRlZmluZWQ7Ci0gICAgVGV4dHVyZS5E
RUZBVUxUX01BUFBJTkcgPSBVVk1hcHBpbmc7CisgICAgICAgICAgICB0aGlzLnNldCgKIAotICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggVGV4dHVyZS5wcm90b3R5cGUsICJuZWVkc1VwZGF0ZSIs
IHsKKyAgICAgICAgICAgICAgICAxLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgIDAsIDEsIDAs
IDAsCisgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAw
LCAxCiAKLSAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgKTsK
IAotICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdHJ1ZSApIHRoaXMudmVyc2lvbiArKzsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgIH0g
KTsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIFRl
eHR1cmUucHJvdG90eXBlLCBFdmVudERpc3BhdGNoZXIucHJvdG90eXBlLCB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IE1hdHJpeDQoKS5mcm9tQXJyYXkoIHRoaXMuZWxlbWVudHMgKTsKIAotICAg
ICAgICBjb25zdHJ1Y3RvcjogVGV4dHVyZSwKKyAgICAgICAgfSwKIAotICAgICAgICBpc1RleHR1
cmU6IHRydWUsCisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggbSApIHsKIAotICAgICAgICBjbG9u
ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAg
ICAgICAgICAgIHZhciBtZSA9IG0uZWxlbWVudHM7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcg
dGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgIHRlWyAwIF0gPSBt
ZVsgMCBdOyB0ZVsgMSBdID0gbWVbIDEgXTsgdGVbIDIgXSA9IG1lWyAyIF07IHRlWyAzIF0gPSBt
ZVsgMyBdOworICAgICAgICAgICAgdGVbIDQgXSA9IG1lWyA0IF07IHRlWyA1IF0gPSBtZVsgNSBd
OyB0ZVsgNiBdID0gbWVbIDYgXTsgdGVbIDcgXSA9IG1lWyA3IF07CisgICAgICAgICAgICB0ZVsg
OCBdID0gbWVbIDggXTsgdGVbIDkgXSA9IG1lWyA5IF07IHRlWyAxMCBdID0gbWVbIDEwIF07IHRl
WyAxMSBdID0gbWVbIDExIF07CisgICAgICAgICAgICB0ZVsgMTIgXSA9IG1lWyAxMiBdOyB0ZVsg
MTMgXSA9IG1lWyAxMyBdOyB0ZVsgMTQgXSA9IG1lWyAxNCBdOyB0ZVsgMTUgXSA9IG1lWyAxNSBd
OworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGNv
cHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICBjb3B5UG9zaXRpb246IGZ1bmN0aW9u
ICggbSApIHsKIAotICAgICAgICAgICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7CisgICAgICAg
ICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzLCBtZSA9IG0uZWxlbWVudHM7CiAKLSAgICAgICAg
ICAgIHRoaXMuaW1hZ2UgPSBzb3VyY2UuaW1hZ2U7Ci0gICAgICAgICAgICB0aGlzLm1pcG1hcHMg
PSBzb3VyY2UubWlwbWFwcy5zbGljZSggMCApOworICAgICAgICAgICAgdGVbIDEyIF0gPSBtZVsg
MTIgXTsKKyAgICAgICAgICAgIHRlWyAxMyBdID0gbWVbIDEzIF07CisgICAgICAgICAgICB0ZVsg
MTQgXSA9IG1lWyAxNCBdOwogCi0gICAgICAgICAgICB0aGlzLm1hcHBpbmcgPSBzb3VyY2UubWFw
cGluZzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB0aGlzLndyYXBT
ID0gc291cmNlLndyYXBTOwotICAgICAgICAgICAgdGhpcy53cmFwVCA9IHNvdXJjZS53cmFwVDsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgdGhpcy5tYWdGaWx0ZXIgPSBzb3VyY2UubWFnRmls
dGVyOwotICAgICAgICAgICAgdGhpcy5taW5GaWx0ZXIgPSBzb3VyY2UubWluRmlsdGVyOworICAg
ICAgICBleHRyYWN0QmFzaXM6IGZ1bmN0aW9uICggeEF4aXMsIHlBeGlzLCB6QXhpcyApIHsKIAot
ICAgICAgICAgICAgdGhpcy5hbmlzb3Ryb3B5ID0gc291cmNlLmFuaXNvdHJvcHk7CisgICAgICAg
ICAgICB4QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAwICk7CisgICAgICAgICAgICB5
QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAxICk7CisgICAgICAgICAgICB6QXhpcy5z
ZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAyICk7CiAKLSAgICAgICAgICAgIHRoaXMuZm9ybWF0
ID0gc291cmNlLmZvcm1hdDsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHNvdXJjZS50eXBlOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHRoaXMub2Zmc2V0LmNvcHko
IHNvdXJjZS5vZmZzZXQgKTsKLSAgICAgICAgICAgIHRoaXMucmVwZWF0LmNvcHkoIHNvdXJjZS5y
ZXBlYXQgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1pcG1hcHMg
PSBzb3VyY2UuZ2VuZXJhdGVNaXBtYXBzOwotICAgICAgICAgICAgdGhpcy5wcmVtdWx0aXBseUFs
cGhhID0gc291cmNlLnByZW11bHRpcGx5QWxwaGE7Ci0gICAgICAgICAgICB0aGlzLmZsaXBZID0g
c291cmNlLmZsaXBZOwotICAgICAgICAgICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSBzb3VyY2Uu
dW5wYWNrQWxpZ25tZW50OwotICAgICAgICAgICAgdGhpcy5lbmNvZGluZyA9IHNvdXJjZS5lbmNv
ZGluZzsKKyAgICAgICAgbWFrZUJhc2lzOiBmdW5jdGlvbiAoIHhBeGlzLCB5QXhpcywgekF4aXMg
KSB7CisKKyAgICAgICAgICAgIHRoaXMuc2V0KAorICAgICAgICAgICAgICAgIHhBeGlzLngsIHlB
eGlzLngsIHpBeGlzLngsIDAsCisgICAgICAgICAgICAgICAgeEF4aXMueSwgeUF4aXMueSwgekF4
aXMueSwgMCwKKyAgICAgICAgICAgICAgICB4QXhpcy56LCB5QXhpcy56LCB6QXhpcy56LCAwLAor
ICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEKKyAgICAgICAgICAgICk7CiAKICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAo
IG1ldGEgKSB7Ci0KLSAgICAgICAgICAgIGlmICggbWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0g
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgZXh0cmFjdFJvdGF0aW9uOiBmdW5jdGlvbiAoKSB7
CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF07Cisg
ICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXh0cmFjdFJvdGF0aW9uKCBtICkgewogCi0gICAgICAg
ICAgICBmdW5jdGlvbiBnZXREYXRhVVJMKCBpbWFnZSApIHsKKyAgICAgICAgICAgICAgICAvLyB0
aGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IHJlZmxlY3Rpb24gbWF0cmljZXMKIAotICAgICAg
ICAgICAgICAgIHZhciBjYW52YXM7CisgICAgICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVt
ZW50czsKKyAgICAgICAgICAgICAgICB2YXIgbWUgPSBtLmVsZW1lbnRzOwogCi0gICAgICAgICAg
ICAgICAgaWYgKCBpbWFnZS50b0RhdGFVUkwgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICB2YXIgc2NhbGVYID0gMSAvIHYxLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDAgKS5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICB2YXIgc2NhbGVZID0gMSAvIHYxLnNldEZyb21NYXRyaXhD
b2x1bW4oIG0sIDEgKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB2YXIgc2NhbGVaID0gMSAv
IHYxLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDIgKS5sZW5ndGgoKTsKIAotICAgICAgICAgICAg
ICAgICAgICBjYW52YXMgPSBpbWFnZTsKKyAgICAgICAgICAgICAgICB0ZVsgMCBdID0gbWVbIDAg
XSAqIHNjYWxlWDsKKyAgICAgICAgICAgICAgICB0ZVsgMSBdID0gbWVbIDEgXSAqIHNjYWxlWDsK
KyAgICAgICAgICAgICAgICB0ZVsgMiBdID0gbWVbIDIgXSAqIHNjYWxlWDsKKyAgICAgICAgICAg
ICAgICB0ZVsgMyBdID0gMDsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGVbIDQgXSA9IG1lWyA0IF0gKiBzY2FsZVk7CisgICAgICAgICAgICAgICAgdGVbIDUg
XSA9IG1lWyA1IF0gKiBzY2FsZVk7CisgICAgICAgICAgICAgICAgdGVbIDYgXSA9IG1lWyA2IF0g
KiBzY2FsZVk7CisgICAgICAgICAgICAgICAgdGVbIDcgXSA9IDA7CiAKLSAgICAgICAgICAgICAg
ICAgICAgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCAnaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCcsICdjYW52YXMnICk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy53
aWR0aCA9IGltYWdlLndpZHRoOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0g
aW1hZ2UuaGVpZ2h0OworICAgICAgICAgICAgICAgIHRlWyA4IF0gPSBtZVsgOCBdICogc2NhbGVa
OworICAgICAgICAgICAgICAgIHRlWyA5IF0gPSBtZVsgOSBdICogc2NhbGVaOworICAgICAgICAg
ICAgICAgIHRlWyAxMCBdID0gbWVbIDEwIF0gKiBzY2FsZVo7CisgICAgICAgICAgICAgICAgdGVb
IDExIF0gPSAwOwogCi0gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCAnMmQn
ICkuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApOwor
ICAgICAgICAgICAgICAgIHRlWyAxMiBdID0gMDsKKyAgICAgICAgICAgICAgICB0ZVsgMTMgXSA9
IDA7CisgICAgICAgICAgICAgICAgdGVbIDE0IF0gPSAwOworICAgICAgICAgICAgICAgIHRlWyAx
NSBdID0gMTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKIAotICAgICAgICAgICAgICAgIGlmICggY2FudmFzLndpZHRoID4gMjA0OCB8fCBjYW52YXMu
aGVpZ2h0ID4gMjA0OCApIHsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoICdpbWFnZS9qcGVnJywgMC42ICk7CisgICAgICAgIH0o
KSwKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIG1ha2VSb3RhdGlvbkZyb21F
dWxlcjogZnVuY3Rpb24gKCBldWxlciApIHsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2FudmFzLnRvRGF0YVVSTCggJ2ltYWdlL3BuZycgKTsKKyAgICAgICAgICAgIGlmICggISAoIGV1
bGVyICYmIGV1bGVyLmlzRXVsZXIgKSApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21F
dWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3Iz
IGFuZCBvcmRlci4nICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIG91dHB1
dCA9IHsKLSAgICAgICAgICAgICAgICBtZXRhZGF0YTogewotICAgICAgICAgICAgICAgICAgICB2
ZXJzaW9uOiA0LjUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0dXJlJywKLSAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiAnVGV4dHVyZS50b0pTT04nCi0gICAgICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgICAgIHV1aWQ6IHRoaXMudXVpZCwKLSAgICAgICAgICAgICAg
ICBuYW1lOiB0aGlzLm5hbWUsCisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwog
Ci0gICAgICAgICAgICAgICAgbWFwcGluZzogdGhpcy5tYXBwaW5nLAorICAgICAgICAgICAgdmFy
IHggPSBldWxlci54LCB5ID0gZXVsZXIueSwgeiA9IGV1bGVyLno7CisgICAgICAgICAgICB2YXIg
YSA9IE1hdGguY29zKCB4ICksIGIgPSBNYXRoLnNpbiggeCApOworICAgICAgICAgICAgdmFyIGMg
PSBNYXRoLmNvcyggeSApLCBkID0gTWF0aC5zaW4oIHkgKTsKKyAgICAgICAgICAgIHZhciBlID0g
TWF0aC5jb3MoIHogKSwgZiA9IE1hdGguc2luKCB6ICk7CiAKLSAgICAgICAgICAgICAgICByZXBl
YXQ6IFsgdGhpcy5yZXBlYXQueCwgdGhpcy5yZXBlYXQueSBdLAotICAgICAgICAgICAgICAgIG9m
ZnNldDogWyB0aGlzLm9mZnNldC54LCB0aGlzLm9mZnNldC55IF0sCi0gICAgICAgICAgICAgICAg
d3JhcDogWyB0aGlzLndyYXBTLCB0aGlzLndyYXBUIF0sCisgICAgICAgICAgICBpZiAoIGV1bGVy
Lm9yZGVyID09PSAnWFlaJyApIHsKIAotICAgICAgICAgICAgICAgIG1pbkZpbHRlcjogdGhpcy5t
aW5GaWx0ZXIsCi0gICAgICAgICAgICAgICAgbWFnRmlsdGVyOiB0aGlzLm1hZ0ZpbHRlciwKLSAg
ICAgICAgICAgICAgICBhbmlzb3Ryb3B5OiB0aGlzLmFuaXNvdHJvcHksCisgICAgICAgICAgICAg
ICAgdmFyIGFlID0gYSAqIGUsIGFmID0gYSAqIGYsIGJlID0gYiAqIGUsIGJmID0gYiAqIGY7CiAK
LSAgICAgICAgICAgICAgICBmbGlwWTogdGhpcy5mbGlwWQotICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB0ZVsgMCBdID0gYyAqIGU7CisgICAgICAgICAgICAgICAgdGVbIDQgXSA9IC0g
YyAqIGY7CisgICAgICAgICAgICAgICAgdGVbIDggXSA9IGQ7CiAKLSAgICAgICAgICAgIGlmICgg
dGhpcy5pbWFnZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHRlWyAxIF0gPSBh
ZiArIGJlICogZDsKKyAgICAgICAgICAgICAgICB0ZVsgNSBdID0gYWUgLSBiZiAqIGQ7CisgICAg
ICAgICAgICAgICAgdGVbIDkgXSA9IC0gYiAqIGM7CiAKLSAgICAgICAgICAgICAgICAvLyBUT0RP
OiBNb3ZlIHRvIFRIUkVFLkltYWdlCisgICAgICAgICAgICAgICAgdGVbIDIgXSA9IGJmIC0gYWUg
KiBkOworICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBiZSArIGFmICogZDsKKyAgICAgICAgICAg
ICAgICB0ZVsgMTAgXSA9IGEgKiBjOwogCi0gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhp
cy5pbWFnZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWVhaJyAp
IHsKIAotICAgICAgICAgICAgICAgIGlmICggaW1hZ2UudXVpZCA9PT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgIHZhciBjZSA9IGMgKiBlLCBjZiA9IGMgKiBmLCBkZSA9IGQgKiBlLCBk
ZiA9IGQgKiBmOwogCi0gICAgICAgICAgICAgICAgICAgIGltYWdlLnV1aWQgPSBfTWF0aC5nZW5l
cmF0ZVVVSUQoKTsgLy8gVUdICisgICAgICAgICAgICAgICAgdGVbIDAgXSA9IGNlICsgZGYgKiBi
OworICAgICAgICAgICAgICAgIHRlWyA0IF0gPSBkZSAqIGIgLSBjZjsKKyAgICAgICAgICAgICAg
ICB0ZVsgOCBdID0gYSAqIGQ7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGVbIDEgXSA9IGEgKiBmOworICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsKKyAgICAg
ICAgICAgICAgICB0ZVsgOSBdID0gLSBiOwogCi0gICAgICAgICAgICAgICAgaWYgKCBtZXRhLmlt
YWdlc1sgaW1hZ2UudXVpZCBdID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgdGVb
IDIgXSA9IGNmICogYiAtIGRlOworICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBkZiArIGNlICog
YjsKKyAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9IGEgKiBjOwogCi0gICAgICAgICAgICAgICAg
ICAgIG1ldGEuaW1hZ2VzWyBpbWFnZS51dWlkIF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB1dWlkOiBpbWFnZS51dWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBnZXREYXRh
VVJMKCBpbWFnZSApCi0gICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBldWxlci5vcmRlciA9PT0gJ1pYWScgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdmFyIGNlID0gYyAqIGUsIGNmID0gYyAqIGYsIGRlID0gZCAqIGUsIGRmID0g
ZCAqIGY7CiAKLSAgICAgICAgICAgICAgICBvdXRwdXQuaW1hZ2UgPSBpbWFnZS51dWlkOworICAg
ICAgICAgICAgICAgIHRlWyAwIF0gPSBjZSAtIGRmICogYjsKKyAgICAgICAgICAgICAgICB0ZVsg
NCBdID0gLSBhICogZjsKKyAgICAgICAgICAgICAgICB0ZVsgOCBdID0gZGUgKyBjZiAqIGI7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZVsgMSBdID0gY2YgKyBkZSAqIGI7Cisg
ICAgICAgICAgICAgICAgdGVbIDUgXSA9IGEgKiBlOworICAgICAgICAgICAgICAgIHRlWyA5IF0g
PSBkZiAtIGNlICogYjsKIAotICAgICAgICAgICAgbWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0g
PSBvdXRwdXQ7CisgICAgICAgICAgICAgICAgdGVbIDIgXSA9IC0gYSAqIGQ7CisgICAgICAgICAg
ICAgICAgdGVbIDYgXSA9IGI7CisgICAgICAgICAgICAgICAgdGVbIDEwIF0gPSBhICogYzsKIAot
ICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGV1bGVy
Lm9yZGVyID09PSAnWllYJyApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHZhciBh
ZSA9IGEgKiBlLCBhZiA9IGEgKiBmLCBiZSA9IGIgKiBlLCBiZiA9IGIgKiBmOwogCi0gICAgICAg
IGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB0ZVsgMCBdID0gYyAqIGU7
CisgICAgICAgICAgICAgICAgdGVbIDQgXSA9IGJlICogZCAtIGFmOworICAgICAgICAgICAgICAg
IHRlWyA4IF0gPSBhZSAqIGQgKyBiZjsKIAotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7CisgICAgICAgICAgICAgICAgdGVbIDEgXSA9IGMgKiBm
OworICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBiZiAqIGQgKyBhZTsKKyAgICAgICAgICAgICAg
ICB0ZVsgOSBdID0gYWYgKiBkIC0gYmU7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0
ZVsgMiBdID0gLSBkOworICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBiICogYzsKKyAgICAgICAg
ICAgICAgICB0ZVsgMTAgXSA9IGEgKiBjOwogCi0gICAgICAgIHRyYW5zZm9ybVV2OiBmdW5jdGlv
biAoIHV2ICkgeworICAgICAgICAgICAgfSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdZWlgn
ICkgewogCi0gICAgICAgICAgICBpZiAoIHRoaXMubWFwcGluZyAhPT0gVVZNYXBwaW5nICkgcmV0
dXJuOworICAgICAgICAgICAgICAgIHZhciBhYyA9IGEgKiBjLCBhZCA9IGEgKiBkLCBiYyA9IGIg
KiBjLCBiZCA9IGIgKiBkOwogCi0gICAgICAgICAgICB1di5tdWx0aXBseSggdGhpcy5yZXBlYXQg
KTsKLSAgICAgICAgICAgIHV2LmFkZCggdGhpcy5vZmZzZXQgKTsKKyAgICAgICAgICAgICAgICB0
ZVsgMCBdID0gYyAqIGU7CisgICAgICAgICAgICAgICAgdGVbIDQgXSA9IGJkIC0gYWMgKiBmOwor
ICAgICAgICAgICAgICAgIHRlWyA4IF0gPSBiYyAqIGYgKyBhZDsKIAotICAgICAgICAgICAgaWYg
KCB1di54IDwgMCB8fCB1di54ID4gMSApIHsKKyAgICAgICAgICAgICAgICB0ZVsgMSBdID0gZjsK
KyAgICAgICAgICAgICAgICB0ZVsgNSBdID0gYSAqIGU7CisgICAgICAgICAgICAgICAgdGVbIDkg
XSA9IC0gYiAqIGU7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLndyYXBTICkgewor
ICAgICAgICAgICAgICAgIHRlWyAyIF0gPSAtIGQgKiBlOworICAgICAgICAgICAgICAgIHRlWyA2
IF0gPSBhZCAqIGYgKyBiYzsKKyAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9IGFjIC0gYmQgKiBm
OwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgUmVwZWF0V3JhcHBpbmc6CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1haWScgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHV2LnggPSB1di54IC0gTWF0aC5mbG9vciggdXYueCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdmFyIGFjID0gYSAqIGMsIGFkID0g
YSAqIGQsIGJjID0gYiAqIGMsIGJkID0gYiAqIGQ7CiAKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDbGFtcFRvRWRnZVdyYXBwaW5nOgorICAgICAgICAgICAgICAgIHRlWyAwIF0gPSBjICogZTsK
KyAgICAgICAgICAgICAgICB0ZVsgNCBdID0gLSBmOworICAgICAgICAgICAgICAgIHRlWyA4IF0g
PSBkICogZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdXYueCA9IHV2LnggPCAwID8gMCA6
IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB0ZVsg
MSBdID0gYWMgKiBmICsgYmQ7CisgICAgICAgICAgICAgICAgdGVbIDUgXSA9IGEgKiBlOworICAg
ICAgICAgICAgICAgIHRlWyA5IF0gPSBhZCAqIGYgLSBiYzsKIAotICAgICAgICAgICAgICAgICAg
ICBjYXNlIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6CisgICAgICAgICAgICAgICAgdGVbIDIgXSA9
IGJjICogZiAtIGFkOworICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBiICogZTsKKyAgICAgICAg
ICAgICAgICB0ZVsgMTAgXSA9IGJkICogZiArIGFjOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIE1hdGguYWJzKCBNYXRoLmZsb29yKCB1di54ICkgJSAyICkgPT09IDEgKSB7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1di54ID0gTWF0aC5jZWls
KCB1di54ICkgLSB1di54OworICAgICAgICAgICAgLy8gYm90dG9tIHJvdworICAgICAgICAgICAg
dGVbIDMgXSA9IDA7CisgICAgICAgICAgICB0ZVsgNyBdID0gMDsKKyAgICAgICAgICAgIHRlWyAx
MSBdID0gMDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIGxhc3QgY29sdW1uCisgICAgICAgICAgICB0ZVsgMTIgXSA9IDA7CisgICAgICAgICAgICB0
ZVsgMTMgXSA9IDA7CisgICAgICAgICAgICB0ZVsgMTQgXSA9IDA7CisgICAgICAgICAgICB0ZVsg
MTUgXSA9IDE7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1di54ID0gdXYueCAtIE1h
dGguZmxvb3IoIHV2LnggKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5p
b246IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHplcm8g
PSBuZXcgVmVjdG9yMyggMCwgMCwgMCApOworICAgICAgICAgICAgdmFyIG9uZSA9IG5ldyBWZWN0
b3IzKCAxLCAxLCAxICk7CiAKLSAgICAgICAgICAgIGlmICggdXYueSA8IDAgfHwgdXYueSA+IDEg
KSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5p
b24oIHEgKSB7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLndyYXBUICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBvc2UoIHplcm8sIHEsIG9uZSApOwogCi0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgUmVwZWF0V3JhcHBpbmc6CisgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB1di55ID0gdXYueSAtIE1hdGguZmxvb3IoIHV2LnkgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9KCksCiAKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDbGFtcFRvRWRnZVdyYXBwaW5nOgorICAgICAgICBsb29rQXQ6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdXYueSA9IHV2LnkgPCAwID8g
MCA6IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZhciB4
ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB5ID0gbmV3IFZlY3RvcjMoKTsKKyAg
ICAgICAgICAgIHZhciB6ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgICAgICBj
YXNlIE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
bG9va0F0KCBleWUsIHRhcmdldCwgdXAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggTWF0aC5hYnMoIE1hdGguZmxvb3IoIHV2LnkgKSAlIDIgKSA9PT0gMSApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXYueSA9IE1hdGguY2VpbCggdXYueSApIC0gdXYueTsKKyAgICAgICAgICAgICAgICB6
LnN1YlZlY3RvcnMoIGV5ZSwgdGFyZ2V0ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCB6Lmxlbmd0aFNxKCkgPT09IDAgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1di55ID0gdXYueSAtIE1hdGguZmxvb3IoIHV2Lnkg
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZXllIGFuZCB0YXJnZXQgYXJlIGluIHRoZSBzYW1l
IHBvc2l0aW9uCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB6LnogPSAxOwogCiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgei5ub3JtYWxpemUoKTsK
KyAgICAgICAgICAgICAgICB4LmNyb3NzVmVjdG9ycyggdXAsIHogKTsKIAotICAgICAgICAgICAg
aWYgKCB0aGlzLmZsaXBZICkgeworICAgICAgICAgICAgICAgIGlmICggeC5sZW5ndGhTcSgpID09
PSAwICkgewogCi0gICAgICAgICAgICAgICAgdXYueSA9IDEgLSB1di55OworICAgICAgICAgICAg
ICAgICAgICAvLyB1cCBhbmQgeiBhcmUgcGFyYWxsZWwKIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoIE1hdGguYWJzKCB1cC56ICkgPT09IDEgKSB7CiAKLSAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgei54ICs9IDAuMDAwMTsKIAotICAgIH0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Igc3Vw
ZXJlZ2diZXJ0IC8gaHR0cDovL3d3dy5wYXVsYnJ1bnQuY28udWsvCi0gICAgICogQGF1dGhvciBw
aGlsb2diIC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy8KLSAgICAgKiBAYXV0aG9yIG1pa2FlbCBl
bXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRob3IgZWdyYWV0aGVyIC8gaHR0
cDovL2VncmFldGhlci5jb20vCi0gICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9n
aXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB6
LnogKz0gMC4wMDAxOwogCi0gICAgZnVuY3Rpb24gVmVjdG9yNCggeCwgeSwgeiwgdyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMueCA9IHggfHwgMDsKLSAgICAgICAg
dGhpcy55ID0geSB8fCAwOwotICAgICAgICB0aGlzLnogPSB6IHx8IDA7Ci0gICAgICAgIHRoaXMu
dyA9ICggdyAhPT0gdW5kZWZpbmVkICkgPyB3IDogMTsKKyAgICAgICAgICAgICAgICAgICAgei5u
b3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgeC5jcm9zc1ZlY3RvcnMoIHVwLCB6ICk7
CiAKLSAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgT2JqZWN0LmFzc2lnbiggVmVjdG9y
NC5wcm90b3R5cGUsIHsKKyAgICAgICAgICAgICAgICB4Lm5vcm1hbGl6ZSgpOworICAgICAgICAg
ICAgICAgIHkuY3Jvc3NWZWN0b3JzKCB6LCB4ICk7CiAKLSAgICAgICAgaXNWZWN0b3I0OiB0cnVl
LAorICAgICAgICAgICAgICAgIHRlWyAwIF0gPSB4Lng7IHRlWyA0IF0gPSB5Lng7IHRlWyA4IF0g
PSB6Lng7CisgICAgICAgICAgICAgICAgdGVbIDEgXSA9IHgueTsgdGVbIDUgXSA9IHkueTsgdGVb
IDkgXSA9IHoueTsKKyAgICAgICAgICAgICAgICB0ZVsgMiBdID0geC56OyB0ZVsgNiBdID0geS56
OyB0ZVsgMTAgXSA9IHouejsKIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggeCwgeSwgeiwgdyAp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgdGhpcy54ID0g
eDsKLSAgICAgICAgICAgIHRoaXMueSA9IHk7Ci0gICAgICAgICAgICB0aGlzLnogPSB6OwotICAg
ICAgICAgICAgdGhpcy53ID0gdzsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9KCksCiAKLSAgICAgICAgfSwKKyAgICAgICAgbXVsdGlwbHk6IGZ1
bmN0aW9uICggbSwgbiApIHsKIAotICAgICAgICBzZXRTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFy
ICkgeworICAgICAgICAgICAgaWYgKCBuICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAg
IHRoaXMueCA9IHNjYWxhcjsKLSAgICAgICAgICAgIHRoaXMueSA9IHNjYWxhcjsKLSAgICAgICAg
ICAgIHRoaXMueiA9IHNjYWxhcjsKLSAgICAgICAgICAgIHRoaXMudyA9IHNjYWxhcjsKKyAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cg
b25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkg
aW5zdGVhZC4nICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNl
cyggbSwgbiApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggdGhp
cywgbSApOwogCi0gICAgICAgIHNldFg6IGZ1bmN0aW9uICggeCApIHsKKyAgICAgICAgfSwKIAot
ICAgICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgcHJlbXVsdGlwbHk6IGZ1bmN0aW9uICgg
bSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5tdWx0aXBseU1hdHJpY2VzKCBtLCB0aGlzICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBz
ZXRZOiBmdW5jdGlvbiAoIHkgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMueSA9IHk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICBtdWx0aXBseU1hdHJpY2VzOiBmdW5jdGlvbiAo
IGEsIGIgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBhZSA9IGEuZWxlbWVudHM7
CisgICAgICAgICAgICB2YXIgYmUgPSBiLmVsZW1lbnRzOworICAgICAgICAgICAgdmFyIHRlID0g
dGhpcy5lbGVtZW50czsKIAotICAgICAgICBzZXRaOiBmdW5jdGlvbiAoIHogKSB7CisgICAgICAg
ICAgICB2YXIgYTExID0gYWVbIDAgXSwgYTEyID0gYWVbIDQgXSwgYTEzID0gYWVbIDggXSwgYTE0
ID0gYWVbIDEyIF07CisgICAgICAgICAgICB2YXIgYTIxID0gYWVbIDEgXSwgYTIyID0gYWVbIDUg
XSwgYTIzID0gYWVbIDkgXSwgYTI0ID0gYWVbIDEzIF07CisgICAgICAgICAgICB2YXIgYTMxID0g
YWVbIDIgXSwgYTMyID0gYWVbIDYgXSwgYTMzID0gYWVbIDEwIF0sIGEzNCA9IGFlWyAxNCBdOwor
ICAgICAgICAgICAgdmFyIGE0MSA9IGFlWyAzIF0sIGE0MiA9IGFlWyA3IF0sIGE0MyA9IGFlWyAx
MSBdLCBhNDQgPSBhZVsgMTUgXTsKIAotICAgICAgICAgICAgdGhpcy56ID0gejsKKyAgICAgICAg
ICAgIHZhciBiMTEgPSBiZVsgMCBdLCBiMTIgPSBiZVsgNCBdLCBiMTMgPSBiZVsgOCBdLCBiMTQg
PSBiZVsgMTIgXTsKKyAgICAgICAgICAgIHZhciBiMjEgPSBiZVsgMSBdLCBiMjIgPSBiZVsgNSBd
LCBiMjMgPSBiZVsgOSBdLCBiMjQgPSBiZVsgMTMgXTsKKyAgICAgICAgICAgIHZhciBiMzEgPSBi
ZVsgMiBdLCBiMzIgPSBiZVsgNiBdLCBiMzMgPSBiZVsgMTAgXSwgYjM0ID0gYmVbIDE0IF07Cisg
ICAgICAgICAgICB2YXIgYjQxID0gYmVbIDMgXSwgYjQyID0gYmVbIDcgXSwgYjQzID0gYmVbIDEx
IF0sIGI0NCA9IGJlWyAxNSBdOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIHRlWyAwIF0gPSBhMTEgKiBiMTEgKyBhMTIgKiBiMjEgKyBhMTMgKiBiMzEgKyBhMTQgKiBi
NDE7CisgICAgICAgICAgICB0ZVsgNCBdID0gYTExICogYjEyICsgYTEyICogYjIyICsgYTEzICog
YjMyICsgYTE0ICogYjQyOworICAgICAgICAgICAgdGVbIDggXSA9IGExMSAqIGIxMyArIGExMiAq
IGIyMyArIGExMyAqIGIzMyArIGExNCAqIGI0MzsKKyAgICAgICAgICAgIHRlWyAxMiBdID0gYTEx
ICogYjE0ICsgYTEyICogYjI0ICsgYTEzICogYjM0ICsgYTE0ICogYjQ0OwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICB0ZVsgMSBdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMx
ICsgYTI0ICogYjQxOworICAgICAgICAgICAgdGVbIDUgXSA9IGEyMSAqIGIxMiArIGEyMiAqIGIy
MiArIGEyMyAqIGIzMiArIGEyNCAqIGI0MjsKKyAgICAgICAgICAgIHRlWyA5IF0gPSBhMjEgKiBi
MTMgKyBhMjIgKiBiMjMgKyBhMjMgKiBiMzMgKyBhMjQgKiBiNDM7CisgICAgICAgICAgICB0ZVsg
MTMgXSA9IGEyMSAqIGIxNCArIGEyMiAqIGIyNCArIGEyMyAqIGIzNCArIGEyNCAqIGI0NDsKIAot
ICAgICAgICBzZXRXOiBmdW5jdGlvbiAoIHcgKSB7CisgICAgICAgICAgICB0ZVsgMiBdID0gYTMx
ICogYjExICsgYTMyICogYjIxICsgYTMzICogYjMxICsgYTM0ICogYjQxOworICAgICAgICAgICAg
dGVbIDYgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0MjsK
KyAgICAgICAgICAgIHRlWyAxMCBdID0gYTMxICogYjEzICsgYTMyICogYjIzICsgYTMzICogYjMz
ICsgYTM0ICogYjQzOworICAgICAgICAgICAgdGVbIDE0IF0gPSBhMzEgKiBiMTQgKyBhMzIgKiBi
MjQgKyBhMzMgKiBiMzQgKyBhMzQgKiBiNDQ7CiAKLSAgICAgICAgICAgIHRoaXMudyA9IHc7Cisg
ICAgICAgICAgICB0ZVsgMyBdID0gYTQxICogYjExICsgYTQyICogYjIxICsgYTQzICogYjMxICsg
YTQ0ICogYjQxOworICAgICAgICAgICAgdGVbIDcgXSA9IGE0MSAqIGIxMiArIGE0MiAqIGIyMiAr
IGE0MyAqIGIzMiArIGE0NCAqIGI0MjsKKyAgICAgICAgICAgIHRlWyAxMSBdID0gYTQxICogYjEz
ICsgYTQyICogYjIzICsgYTQzICogYjMzICsgYTQ0ICogYjQzOworICAgICAgICAgICAgdGVbIDE1
IF0gPSBhNDEgKiBiMTQgKyBhNDIgKiBiMjQgKyBhNDMgKiBiMzQgKyBhNDQgKiBiNDQ7CiAKICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2V0Q29tcG9u
ZW50OiBmdW5jdGlvbiAoIGluZGV4LCB2YWx1ZSApIHsKLQotICAgICAgICAgICAgc3dpdGNoICgg
aW5kZXggKSB7CisgICAgICAgIG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CiAKLSAg
ICAgICAgICAgICAgICBjYXNlIDA6IHRoaXMueCA9IHZhbHVlOyBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IDI6IHRoaXMueiA9IHZhbHVlOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMu
dyA9IHZhbHVlOyBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJy
b3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApOworICAgICAgICAgICAgdmFy
IHRlID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVbIDAg
XSAqPSBzOyB0ZVsgNCBdICo9IHM7IHRlWyA4IF0gKj0gczsgdGVbIDEyIF0gKj0gczsKKyAgICAg
ICAgICAgIHRlWyAxIF0gKj0gczsgdGVbIDUgXSAqPSBzOyB0ZVsgOSBdICo9IHM7IHRlWyAxMyBd
ICo9IHM7CisgICAgICAgICAgICB0ZVsgMiBdICo9IHM7IHRlWyA2IF0gKj0gczsgdGVbIDEwIF0g
Kj0gczsgdGVbIDE0IF0gKj0gczsKKyAgICAgICAgICAgIHRlWyAzIF0gKj0gczsgdGVbIDcgXSAq
PSBzOyB0ZVsgMTEgXSAqPSBzOyB0ZVsgMTUgXSAqPSBzOwogCiAgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBp
bmRleCApIHsKKyAgICAgICAgYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTogZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgICAgICBzd2l0Y2ggKCBpbmRleCApIHsKKyAgICAgICAgICAgIHZhciB2MSA9IG5l
dyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiB0aGlzLng7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gdGhpcy55OwotICAgICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIHRoaXMuejsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiB0aGlz
Lnc7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMg
b3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBh
cHBseVRvQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSB7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBhdHRyaWJ1dGUuY291bnQ7IGkgPCBs
OyBpICsrICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHYxLnggPSBhdHRy
aWJ1dGUuZ2V0WCggaSApOworICAgICAgICAgICAgICAgICAgICB2MS55ID0gYXR0cmlidXRlLmdl
dFkoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgdjEueiA9IGF0dHJpYnV0ZS5nZXRaKCBpICk7
CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdjEu
YXBwbHlNYXRyaXg0KCB0aGlzICk7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25z
dHJ1Y3RvciggdGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53ICk7CisgICAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZS5zZXRYWVooIGksIHYxLngsIHYxLnksIHYxLnogKTsKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHYgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTsKIAotICAgICAgICAgICAgdGhpcy54
ID0gdi54OwotICAgICAgICAgICAgdGhpcy55ID0gdi55OwotICAgICAgICAgICAgdGhpcy56ID0g
di56OwotICAgICAgICAgICAgdGhpcy53ID0gKCB2LncgIT09IHVuZGVmaW5lZCApID8gdi53IDog
MTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAg
IH0sCisgICAgICAgIH0oKSwKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICggdiwgdyApIHsKKyAg
ICAgICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCB3ICE9
PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0g
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBv
bmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFk
LicgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRWZWN0b3JzKCB2LCB3ICk7Cisg
ICAgICAgICAgICB2YXIgbjExID0gdGVbIDAgXSwgbjEyID0gdGVbIDQgXSwgbjEzID0gdGVbIDgg
XSwgbjE0ID0gdGVbIDEyIF07CisgICAgICAgICAgICB2YXIgbjIxID0gdGVbIDEgXSwgbjIyID0g
dGVbIDUgXSwgbjIzID0gdGVbIDkgXSwgbjI0ID0gdGVbIDEzIF07CisgICAgICAgICAgICB2YXIg
bjMxID0gdGVbIDIgXSwgbjMyID0gdGVbIDYgXSwgbjMzID0gdGVbIDEwIF0sIG4zNCA9IHRlWyAx
NCBdOworICAgICAgICAgICAgdmFyIG40MSA9IHRlWyAzIF0sIG40MiA9IHRlWyA3IF0sIG40MyA9
IHRlWyAxMSBdLCBuNDQgPSB0ZVsgMTUgXTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly9UT0RPOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQKKyAgICAgICAgICAgIC8vKCBiYXNlZCBv
biBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5j
dGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG0gKQogCi0gICAgICAgICAgICB0aGlzLnggKz0g
di54OwotICAgICAgICAgICAgdGhpcy55ICs9IHYueTsKLSAgICAgICAgICAgIHRoaXMueiArPSB2
Lno7Ci0gICAgICAgICAgICB0aGlzLncgKz0gdi53OworICAgICAgICAgICAgcmV0dXJuICgKKyAg
ICAgICAgICAgICAgICBuNDEgKiAoCisgICAgICAgICAgICAgICAgICAgICsgbjE0ICogbjIzICog
bjMyCisgICAgICAgICAgICAgICAgICAgICAtIG4xMyAqIG4yNCAqIG4zMgorICAgICAgICAgICAg
ICAgICAgICAgLSBuMTQgKiBuMjIgKiBuMzMKKyAgICAgICAgICAgICAgICAgICAgICsgbjEyICog
bjI0ICogbjMzCisgICAgICAgICAgICAgICAgICAgICArIG4xMyAqIG4yMiAqIG4zNAorICAgICAg
ICAgICAgICAgICAgICAgLSBuMTIgKiBuMjMgKiBuMzQKKyAgICAgICAgICAgICAgICApICsKKyAg
ICAgICAgICAgICAgICBuNDIgKiAoCisgICAgICAgICAgICAgICAgICAgICsgbjExICogbjIzICog
bjM0CisgICAgICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yNCAqIG4zMworICAgICAgICAgICAg
ICAgICAgICAgKyBuMTQgKiBuMjEgKiBuMzMKKyAgICAgICAgICAgICAgICAgICAgIC0gbjEzICog
bjIxICogbjM0CisgICAgICAgICAgICAgICAgICAgICArIG4xMyAqIG4yNCAqIG4zMQorICAgICAg
ICAgICAgICAgICAgICAgLSBuMTQgKiBuMjMgKiBuMzEKKyAgICAgICAgICAgICAgICApICsKKyAg
ICAgICAgICAgICAgICBuNDMgKiAoCisgICAgICAgICAgICAgICAgICAgICsgbjExICogbjI0ICog
bjMyCisgICAgICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yMiAqIG4zNAorICAgICAgICAgICAg
ICAgICAgICAgLSBuMTQgKiBuMjEgKiBuMzIKKyAgICAgICAgICAgICAgICAgICAgICsgbjEyICog
bjIxICogbjM0CisgICAgICAgICAgICAgICAgICAgICArIG4xNCAqIG4yMiAqIG4zMQorICAgICAg
ICAgICAgICAgICAgICAgLSBuMTIgKiBuMjQgKiBuMzEKKyAgICAgICAgICAgICAgICApICsKKyAg
ICAgICAgICAgICAgICBuNDQgKiAoCisgICAgICAgICAgICAgICAgICAgIC0gbjEzICogbjIyICog
bjMxCisgICAgICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yMyAqIG4zMgorICAgICAgICAgICAg
ICAgICAgICAgKyBuMTEgKiBuMjIgKiBuMzMKKyAgICAgICAgICAgICAgICAgICAgICsgbjEzICog
bjIxICogbjMyCisgICAgICAgICAgICAgICAgICAgICAtIG4xMiAqIG4yMSAqIG4zMworICAgICAg
ICAgICAgICAgICAgICAgKyBuMTIgKiBuMjMgKiBuMzEKKyAgICAgICAgICAgICAgICApCiAKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgKTsKIAogICAgICAgICB9LAogCi0g
ICAgICAgIGFkZFNjYWxhcjogZnVuY3Rpb24gKCBzICkgewotCi0gICAgICAgICAgICB0aGlzLngg
Kz0gczsKLSAgICAgICAgICAgIHRoaXMueSArPSBzOwotICAgICAgICAgICAgdGhpcy56ICs9IHM7
Ci0gICAgICAgICAgICB0aGlzLncgKz0gczsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIHRyYW5zcG9zZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOworICAgICAgICAgICAgdmFyIHRtcDsKIAotICAgICAg
ICBhZGRWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7CisgICAgICAgICAgICB0bXAgPSB0ZVsg
MSBdOyB0ZVsgMSBdID0gdGVbIDQgXTsgdGVbIDQgXSA9IHRtcDsKKyAgICAgICAgICAgIHRtcCA9
IHRlWyAyIF07IHRlWyAyIF0gPSB0ZVsgOCBdOyB0ZVsgOCBdID0gdG1wOworICAgICAgICAgICAg
dG1wID0gdGVbIDYgXTsgdGVbIDYgXSA9IHRlWyA5IF07IHRlWyA5IF0gPSB0bXA7CiAKLSAgICAg
ICAgICAgIHRoaXMueCA9IGEueCArIGIueDsKLSAgICAgICAgICAgIHRoaXMueSA9IGEueSArIGIu
eTsKLSAgICAgICAgICAgIHRoaXMueiA9IGEueiArIGIuejsKLSAgICAgICAgICAgIHRoaXMudyA9
IGEudyArIGIudzsKKyAgICAgICAgICAgIHRtcCA9IHRlWyAzIF07IHRlWyAzIF0gPSB0ZVsgMTIg
XTsgdGVbIDEyIF0gPSB0bXA7CisgICAgICAgICAgICB0bXAgPSB0ZVsgNyBdOyB0ZVsgNyBdID0g
dGVbIDEzIF07IHRlWyAxMyBdID0gdG1wOworICAgICAgICAgICAgdG1wID0gdGVbIDExIF07IHRl
WyAxMSBdID0gdGVbIDE0IF07IHRlWyAxNCBdID0gdG1wOwogCiAgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFkZFNjYWxlZFZlY3RvcjogZnVuY3Rpb24g
KCB2LCBzICkgeworICAgICAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKCB2ICkgewogCi0gICAg
ICAgICAgICB0aGlzLnggKz0gdi54ICogczsKLSAgICAgICAgICAgIHRoaXMueSArPSB2LnkgKiBz
OwotICAgICAgICAgICAgdGhpcy56ICs9IHYueiAqIHM7Ci0gICAgICAgICAgICB0aGlzLncgKz0g
di53ICogczsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisKKyAgICAgICAg
ICAgIHRlWyAxMiBdID0gdi54OworICAgICAgICAgICAgdGVbIDEzIF0gPSB2Lnk7CisgICAgICAg
ICAgICB0ZVsgMTQgXSA9IHYuejsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAg
ICAgfSwKIAotICAgICAgICBzdWI6IGZ1bmN0aW9uICggdiwgdyApIHsKKyAgICAgICAgZ2V0SW52
ZXJzZTogZnVuY3Rpb24gKCBtLCB0aHJvd09uRGVnZW5lcmF0ZSApIHsKIAotICAgICAgICAgICAg
aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAvLyBiYXNlZCBvbiBodHRwOi8v
d3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52
ZXJzZS9mb3VyRC9pbmRleC5odG0KKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHMs
CisgICAgICAgICAgICAgICAgbWUgPSBtLmVsZW1lbnRzLAogCi0gICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFy
Z3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7CisgICAgICAgICAgICAgICAgbjEx
ID0gbWVbIDAgXSwgbjIxID0gbWVbIDEgXSwgbjMxID0gbWVbIDIgXSwgbjQxID0gbWVbIDMgXSwK
KyAgICAgICAgICAgICAgICBuMTIgPSBtZVsgNCBdLCBuMjIgPSBtZVsgNSBdLCBuMzIgPSBtZVsg
NiBdLCBuNDIgPSBtZVsgNyBdLAorICAgICAgICAgICAgICAgIG4xMyA9IG1lWyA4IF0sIG4yMyA9
IG1lWyA5IF0sIG4zMyA9IG1lWyAxMCBdLCBuNDMgPSBtZVsgMTEgXSwKKyAgICAgICAgICAgICAg
ICBuMTQgPSBtZVsgMTIgXSwgbjI0ID0gbWVbIDEzIF0sIG4zNCA9IG1lWyAxNCBdLCBuNDQgPSBt
ZVsgMTUgXSwKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQxMSA9IG4yMyAqIG4z
NCAqIG40MiAtIG4yNCAqIG4zMyAqIG40MiArIG4yNCAqIG4zMiAqIG40MyAtIG4yMiAqIG4zNCAq
IG40MyAtIG4yMyAqIG4zMiAqIG40NCArIG4yMiAqIG4zMyAqIG40NCwKKyAgICAgICAgICAgICAg
ICB0MTIgPSBuMTQgKiBuMzMgKiBuNDIgLSBuMTMgKiBuMzQgKiBuNDIgLSBuMTQgKiBuMzIgKiBu
NDMgKyBuMTIgKiBuMzQgKiBuNDMgKyBuMTMgKiBuMzIgKiBuNDQgLSBuMTIgKiBuMzMgKiBuNDQs
CisgICAgICAgICAgICAgICAgdDEzID0gbjEzICogbjI0ICogbjQyIC0gbjE0ICogbjIzICogbjQy
ICsgbjE0ICogbjIyICogbjQzIC0gbjEyICogbjI0ICogbjQzIC0gbjEzICogbjIyICogbjQ0ICsg
bjEyICogbjIzICogbjQ0LAorICAgICAgICAgICAgICAgIHQxNCA9IG4xNCAqIG4yMyAqIG4zMiAt
IG4xMyAqIG4yNCAqIG4zMiAtIG4xNCAqIG4yMiAqIG4zMyArIG4xMiAqIG4yNCAqIG4zMyArIG4x
MyAqIG4yMiAqIG4zNCAtIG4xMiAqIG4yMyAqIG4zNDsKIAotICAgICAgICAgICAgdGhpcy54IC09
IHYueDsKLSAgICAgICAgICAgIHRoaXMueSAtPSB2Lnk7Ci0gICAgICAgICAgICB0aGlzLnogLT0g
di56OwotICAgICAgICAgICAgdGhpcy53IC09IHYudzsKKyAgICAgICAgICAgIHZhciBkZXQgPSBu
MTEgKiB0MTEgKyBuMjEgKiB0MTIgKyBuMzEgKiB0MTMgKyBuNDEgKiB0MTQ7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgaWYgKCBkZXQgPT09IDAgKSB7CiAKLSAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICB2YXIgbXNnID0gIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZl
cnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCI7CiAKLSAgICAgICAg
c3ViU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aHJvd09u
RGVnZW5lcmF0ZSA9PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgdGhpcy54IC09IHM7Ci0gICAg
ICAgICAgICB0aGlzLnkgLT0gczsKLSAgICAgICAgICAgIHRoaXMueiAtPSBzOwotICAgICAgICAg
ICAgdGhpcy53IC09IHM7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggbXNn
ICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCBtc2cgKTsK
IAotICAgICAgICBzdWJWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB0aGlzLnggPSBhLnggLSBiLng7Ci0gICAgICAgICAgICB0aGlz
LnkgPSBhLnkgLSBiLnk7Ci0gICAgICAgICAgICB0aGlzLnogPSBhLnogLSBiLno7Ci0gICAgICAg
ICAgICB0aGlzLncgPSBhLncgLSBiLnc7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRl
bnRpdHkoKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgIHZhciBkZXRJbnYgPSAxIC8gZGV0OwogCi0gICAgICAgIG11
bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKKyAgICAgICAgICAgIHRlWyAwIF0g
PSB0MTEgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgMSBdID0gKCBuMjQgKiBuMzMgKiBuNDEg
LSBuMjMgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzEgKiBuNDMgKyBuMjEgKiBuMzQgKiBuNDMgKyBu
MjMgKiBuMzEgKiBuNDQgLSBuMjEgKiBuMzMgKiBuNDQgKSAqIGRldEludjsKKyAgICAgICAgICAg
IHRlWyAyIF0gPSAoIG4yMiAqIG4zNCAqIG40MSAtIG4yNCAqIG4zMiAqIG40MSArIG4yNCAqIG4z
MSAqIG40MiAtIG4yMSAqIG4zNCAqIG40MiAtIG4yMiAqIG4zMSAqIG40NCArIG4yMSAqIG4zMiAq
IG40NCApICogZGV0SW52OworICAgICAgICAgICAgdGVbIDMgXSA9ICggbjIzICogbjMyICogbjQx
IC0gbjIyICogbjMzICogbjQxIC0gbjIzICogbjMxICogbjQyICsgbjIxICogbjMzICogbjQyICsg
bjIyICogbjMxICogbjQzIC0gbjIxICogbjMyICogbjQzICkgKiBkZXRJbnY7CiAKLSAgICAgICAg
ICAgIHRoaXMueCAqPSBzY2FsYXI7Ci0gICAgICAgICAgICB0aGlzLnkgKj0gc2NhbGFyOwotICAg
ICAgICAgICAgdGhpcy56ICo9IHNjYWxhcjsKLSAgICAgICAgICAgIHRoaXMudyAqPSBzY2FsYXI7
CisgICAgICAgICAgICB0ZVsgNCBdID0gdDEyICogZGV0SW52OworICAgICAgICAgICAgdGVbIDUg
XSA9ICggbjEzICogbjM0ICogbjQxIC0gbjE0ICogbjMzICogbjQxICsgbjE0ICogbjMxICogbjQz
IC0gbjExICogbjM0ICogbjQzIC0gbjEzICogbjMxICogbjQ0ICsgbjExICogbjMzICogbjQ0ICkg
KiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgNiBdID0gKCBuMTQgKiBuMzIgKiBuNDEgLSBuMTIg
KiBuMzQgKiBuNDEgLSBuMTQgKiBuMzEgKiBuNDIgKyBuMTEgKiBuMzQgKiBuNDIgKyBuMTIgKiBu
MzEgKiBuNDQgLSBuMTEgKiBuMzIgKiBuNDQgKSAqIGRldEludjsKKyAgICAgICAgICAgIHRlWyA3
IF0gPSAoIG4xMiAqIG4zMyAqIG40MSAtIG4xMyAqIG4zMiAqIG40MSArIG4xMyAqIG4zMSAqIG40
MiAtIG4xMSAqIG4zMyAqIG40MiAtIG4xMiAqIG4zMSAqIG40MyArIG4xMSAqIG4zMiAqIG40MyAp
ICogZGV0SW52OworCisgICAgICAgICAgICB0ZVsgOCBdID0gdDEzICogZGV0SW52OworICAgICAg
ICAgICAgdGVbIDkgXSA9ICggbjE0ICogbjIzICogbjQxIC0gbjEzICogbjI0ICogbjQxIC0gbjE0
ICogbjIxICogbjQzICsgbjExICogbjI0ICogbjQzICsgbjEzICogbjIxICogbjQ0IC0gbjExICog
bjIzICogbjQ0ICkgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsgMTAgXSA9ICggbjEyICogbjI0
ICogbjQxIC0gbjE0ICogbjIyICogbjQxICsgbjE0ICogbjIxICogbjQyIC0gbjExICogbjI0ICog
bjQyIC0gbjEyICogbjIxICogbjQ0ICsgbjExICogbjIyICogbjQ0ICkgKiBkZXRJbnY7CisgICAg
ICAgICAgICB0ZVsgMTEgXSA9ICggbjEzICogbjIyICogbjQxIC0gbjEyICogbjIzICogbjQxIC0g
bjEzICogbjIxICogbjQyICsgbjExICogbjIzICogbjQyICsgbjEyICogbjIxICogbjQzIC0gbjEx
ICogbjIyICogbjQzICkgKiBkZXRJbnY7CisKKyAgICAgICAgICAgIHRlWyAxMiBdID0gdDE0ICog
ZGV0SW52OworICAgICAgICAgICAgdGVbIDEzIF0gPSAoIG4xMyAqIG4yNCAqIG4zMSAtIG4xNCAq
IG4yMyAqIG4zMSArIG4xNCAqIG4yMSAqIG4zMyAtIG4xMSAqIG4yNCAqIG4zMyAtIG4xMyAqIG4y
MSAqIG4zNCArIG4xMSAqIG4yMyAqIG4zNCApICogZGV0SW52OworICAgICAgICAgICAgdGVbIDE0
IF0gPSAoIG4xNCAqIG4yMiAqIG4zMSAtIG4xMiAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMSAqIG4z
MiArIG4xMSAqIG4yNCAqIG4zMiArIG4xMiAqIG4yMSAqIG4zNCAtIG4xMSAqIG4yMiAqIG4zNCAp
ICogZGV0SW52OworICAgICAgICAgICAgdGVbIDE1IF0gPSAoIG4xMiAqIG4yMyAqIG4zMSAtIG4x
MyAqIG4yMiAqIG4zMSArIG4xMyAqIG4yMSAqIG4zMiAtIG4xMSAqIG4yMyAqIG4zMiAtIG4xMiAq
IG4yMSAqIG4zMyArIG4xMSAqIG4yMiAqIG4zMyApICogZGV0SW52OwogCiAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFwcGx5TWF0cml4NDogZnVuY3Rp
b24gKCBtICkgeworICAgICAgICBzY2FsZTogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgICAgICAg
ICB2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMueiwgdyA9IHRoaXMudzsKLSAg
ICAgICAgICAgIHZhciBlID0gbS5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMu
ZWxlbWVudHM7CisgICAgICAgICAgICB2YXIgeCA9IHYueCwgeSA9IHYueSwgeiA9IHYuejsKIAot
ICAgICAgICAgICAgdGhpcy54ID0gZVsgMCBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA4IF0gKiB6
ICsgZVsgMTIgXSAqIHc7Ci0gICAgICAgICAgICB0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNSBd
ICogeSArIGVbIDkgXSAqIHogKyBlWyAxMyBdICogdzsKLSAgICAgICAgICAgIHRoaXMueiA9IGVb
IDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHogKyBlWyAxNCBdICogdzsKLSAgICAg
ICAgICAgIHRoaXMudyA9IGVbIDMgXSAqIHggKyBlWyA3IF0gKiB5ICsgZVsgMTEgXSAqIHogKyBl
WyAxNSBdICogdzsKKyAgICAgICAgICAgIHRlWyAwIF0gKj0geDsgdGVbIDQgXSAqPSB5OyB0ZVsg
OCBdICo9IHo7CisgICAgICAgICAgICB0ZVsgMSBdICo9IHg7IHRlWyA1IF0gKj0geTsgdGVbIDkg
XSAqPSB6OworICAgICAgICAgICAgdGVbIDIgXSAqPSB4OyB0ZVsgNiBdICo9IHk7IHRlWyAxMCBd
ICo9IHo7CisgICAgICAgICAgICB0ZVsgMyBdICo9IHg7IHRlWyA3IF0gKj0geTsgdGVbIDExIF0g
Kj0gejsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBkaXZpZGVTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkgewotCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApOwotCi0gICAgICAgIH0sCi0KLSAg
ICAgICAgc2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb246IGZ1bmN0aW9uICggcSApIHsKLQotICAg
ICAgICAgICAgLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvZ2VvbWV0cnkv
cm90YXRpb25zL2NvbnZlcnNpb25zL3F1YXRlcm5pb25Ub0FuZ2xlL2luZGV4Lmh0bQorICAgICAg
ICBnZXRNYXhTY2FsZU9uQXhpczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAvLyBxIGlz
IGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAorICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVt
ZW50czsKIAotICAgICAgICAgICAgdGhpcy53ID0gMiAqIE1hdGguYWNvcyggcS53ICk7CisgICAg
ICAgICAgICB2YXIgc2NhbGVYU3EgPSB0ZVsgMCBdICogdGVbIDAgXSArIHRlWyAxIF0gKiB0ZVsg
MSBdICsgdGVbIDIgXSAqIHRlWyAyIF07CisgICAgICAgICAgICB2YXIgc2NhbGVZU3EgPSB0ZVsg
NCBdICogdGVbIDQgXSArIHRlWyA1IF0gKiB0ZVsgNSBdICsgdGVbIDYgXSAqIHRlWyA2IF07Cisg
ICAgICAgICAgICB2YXIgc2NhbGVaU3EgPSB0ZVsgOCBdICogdGVbIDggXSArIHRlWyA5IF0gKiB0
ZVsgOSBdICsgdGVbIDEwIF0gKiB0ZVsgMTAgXTsKIAotICAgICAgICAgICAgdmFyIHMgPSBNYXRo
LnNxcnQoIDEgLSBxLncgKiBxLncgKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoIE1h
dGgubWF4KCBzY2FsZVhTcSwgc2NhbGVZU3EsIHNjYWxlWlNxICkgKTsKIAotICAgICAgICAgICAg
aWYgKCBzIDwgMC4wMDAxICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgIHRoaXMu
eCA9IDE7Ci0gICAgICAgICAgICAgICAgIHRoaXMueSA9IDA7Ci0gICAgICAgICAgICAgICAgIHRo
aXMueiA9IDA7CisgICAgICAgIG1ha2VUcmFuc2xhdGlvbjogZnVuY3Rpb24gKCB4LCB5LCB6ICkg
ewogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zZXQoCiAKLSAgICAg
ICAgICAgICAgICAgdGhpcy54ID0gcS54IC8gczsKLSAgICAgICAgICAgICAgICAgdGhpcy55ID0g
cS55IC8gczsKLSAgICAgICAgICAgICAgICAgdGhpcy56ID0gcS56IC8gczsKKyAgICAgICAgICAg
ICAgICAxLCAwLCAwLCB4LAorICAgICAgICAgICAgICAgIDAsIDEsIDAsIHksCisgICAgICAgICAg
ICAgICAgMCwgMCwgMSwgeiwKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAg
ICAgIH0sCiAKLSAgICAgICAgc2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4OiBmdW5jdGlv
biAoIG0gKSB7Ci0KLSAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuZXVjbGlkZWFuc3BhY2UuY29t
L21hdGhzL2dlb21ldHJ5L3JvdGF0aW9ucy9jb252ZXJzaW9ucy9tYXRyaXhUb0FuZ2xlL2luZGV4
Lmh0bQorICAgICAgICBtYWtlUm90YXRpb25YOiBmdW5jdGlvbiAoIHRoZXRhICkgewogCi0gICAg
ICAgICAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24g
bWF0cml4IChpLmUsIHVuc2NhbGVkKQorICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhl
dGEgKSwgcyA9IE1hdGguc2luKCB0aGV0YSApOwogCi0gICAgICAgICAgICB2YXIgYW5nbGUsIHgs
IHksIHosICAgICAvLyB2YXJpYWJsZXMgZm9yIHJlc3VsdAotICAgICAgICAgICAgICAgIGVwc2ls
b24gPSAwLjAxLCAgICAgLy8gbWFyZ2luIHRvIGFsbG93IGZvciByb3VuZGluZyBlcnJvcnMKLSAg
ICAgICAgICAgICAgICBlcHNpbG9uMiA9IDAuMSwgICAgIC8vIG1hcmdpbiB0byBkaXN0aW5ndWlz
aCBiZXR3ZWVuIDAgYW5kIDE4MCBkZWdyZWVzCisgICAgICAgICAgICB0aGlzLnNldCgKIAotICAg
ICAgICAgICAgICAgIHRlID0gbS5lbGVtZW50cywKKyAgICAgICAgICAgICAgICAxLCAwLCAwLCAw
LAorICAgICAgICAgICAgICAgIDAsIGMsIC0gcywgMCwKKyAgICAgICAgICAgICAgICAwLCBzLCBj
LCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEKIAotICAgICAgICAgICAgICAgIG0xMSA9
IHRlWyAwIF0sIG0xMiA9IHRlWyA0IF0sIG0xMyA9IHRlWyA4IF0sCi0gICAgICAgICAgICAgICAg
bTIxID0gdGVbIDEgXSwgbTIyID0gdGVbIDUgXSwgbTIzID0gdGVbIDkgXSwKLSAgICAgICAgICAg
ICAgICBtMzEgPSB0ZVsgMiBdLCBtMzIgPSB0ZVsgNiBdLCBtMzMgPSB0ZVsgMTAgXTsKKyAgICAg
ICAgICAgICk7CiAKLSAgICAgICAgICAgIGlmICggKCBNYXRoLmFicyggbTEyIC0gbTIxICkgPCBl
cHNpbG9uICkgJiYKLSAgICAgICAgICAgICAgICAgKCBNYXRoLmFicyggbTEzIC0gbTMxICkgPCBl
cHNpbG9uICkgJiYKLSAgICAgICAgICAgICAgICAgKCBNYXRoLmFicyggbTIzIC0gbTMyICkgPCBl
cHNpbG9uICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAg
IC8vIHNpbmd1bGFyaXR5IGZvdW5kCi0gICAgICAgICAgICAgICAgLy8gZmlyc3QgY2hlY2sgZm9y
IGlkZW50aXR5IG1hdHJpeCB3aGljaCBtdXN0IGhhdmUgKzEgZm9yIGFsbCB0ZXJtcwotICAgICAg
ICAgICAgICAgIC8vIGluIGxlYWRpbmcgZGlhZ29uYWwgYW5kIHplcm8gaW4gb3RoZXIgdGVybXMK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGlmICggKCBNYXRoLmFicyggbTEyICsgbTIx
ICkgPCBlcHNpbG9uMiApICYmCi0gICAgICAgICAgICAgICAgICAgICAoIE1hdGguYWJzKCBtMTMg
KyBtMzEgKSA8IGVwc2lsb24yICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICggTWF0aC5hYnMo
IG0yMyArIG0zMiApIDwgZXBzaWxvbjIgKSAmJgotICAgICAgICAgICAgICAgICAgICAgKCBNYXRo
LmFicyggbTExICsgbTIyICsgbTMzIC0gMyApIDwgZXBzaWxvbjIgKSApIHsKKyAgICAgICAgbWFr
ZVJvdGF0aW9uWTogZnVuY3Rpb24gKCB0aGV0YSApIHsKIAotICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIHNpbmd1bGFyaXR5IGlzIGlkZW50aXR5IG1hdHJpeCBzbyBhbmdsZSA9IDAKKyAgICAg
ICAgICAgIHZhciBjID0gTWF0aC5jb3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhldGEgKTsK
IAotICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCggMSwgMCwgMCwgMCApOworICAgICAgICAg
ICAgdGhpcy5zZXQoCiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIHplcm8g
YW5nbGUsIGFyYml0cmFyeSBheGlzCisgICAgICAgICAgICAgICAgIGMsIDAsIHMsIDAsCisgICAg
ICAgICAgICAgICAgIDAsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgLSBzLCAwLCBjLCAwLAor
ICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICApOwogCi0gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgc2luZ3VsYXJpdHkg
aXMgYW5nbGUgPSAxODAKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAg
ICAgYW5nbGUgPSBNYXRoLlBJOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdmFyIHh4
ID0gKCBtMTEgKyAxICkgLyAyOwotICAgICAgICAgICAgICAgIHZhciB5eSA9ICggbTIyICsgMSAp
IC8gMjsKLSAgICAgICAgICAgICAgICB2YXIgenogPSAoIG0zMyArIDEgKSAvIDI7Ci0gICAgICAg
ICAgICAgICAgdmFyIHh5ID0gKCBtMTIgKyBtMjEgKSAvIDQ7Ci0gICAgICAgICAgICAgICAgdmFy
IHh6ID0gKCBtMTMgKyBtMzEgKSAvIDQ7Ci0gICAgICAgICAgICAgICAgdmFyIHl6ID0gKCBtMjMg
KyBtMzIgKSAvIDQ7CisgICAgICAgIG1ha2VSb3RhdGlvblo6IGZ1bmN0aW9uICggdGhldGEgKSB7
CiAKLSAgICAgICAgICAgICAgICBpZiAoICggeHggPiB5eSApICYmICggeHggPiB6eiApICkgewor
ICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKSwgcyA9IE1hdGguc2luKCB0aGV0
YSApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIG0xMSBpcyB0aGUgbGFyZ2VzdCBkaWFnb25h
bCB0ZXJtCisgICAgICAgICAgICB0aGlzLnNldCgKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IHh4IDwgZXBzaWxvbiApIHsKKyAgICAgICAgICAgICAgICBjLCAtIHMsIDAsIDAsCisgICAgICAg
ICAgICAgICAgcywgYywgMCwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAorICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDEKIAotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB5ID0gMC43MDcxMDY3ODE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB6ID0gMC43MDcxMDY3ODE7CisgICAgICAgICAgICApOwogCi0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgeCA9IE1hdGguc3FydCggeHggKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHkgPSB4eSAvIHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB6ID0geHogLyB4OworICAgICAg
ICB9LAogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgbWFrZVJvdGF0aW9uQXhpczog
ZnVuY3Rpb24gKCBheGlzLCBhbmdsZSApIHsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IHl5ID4genogKSB7CisgICAgICAgICAgICAvLyBCYXNlZCBvbiBodHRwOi8vd3d3LmdhbWVkZXYu
bmV0L3JlZmVyZW5jZS9hcnRpY2xlcy9hcnRpY2xlMTE5OS5hc3AKIAotICAgICAgICAgICAgICAg
ICAgICAvLyBtMjIgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybQorICAgICAgICAgICAgdmFy
IGMgPSBNYXRoLmNvcyggYW5nbGUgKTsKKyAgICAgICAgICAgIHZhciBzID0gTWF0aC5zaW4oIGFu
Z2xlICk7CisgICAgICAgICAgICB2YXIgdCA9IDEgLSBjOworICAgICAgICAgICAgdmFyIHggPSBh
eGlzLngsIHkgPSBheGlzLnksIHogPSBheGlzLno7CisgICAgICAgICAgICB2YXIgdHggPSB0ICog
eCwgdHkgPSB0ICogeTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHl5IDwgZXBzaWxvbiAp
IHsKKyAgICAgICAgICAgIHRoaXMuc2V0KAogCi0gICAgICAgICAgICAgICAgICAgICAgICB4ID0g
MC43MDcxMDY3ODE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHogPSAwLjcwNzEwNjc4MTsKKyAgICAgICAgICAgICAgICB0eCAqIHggKyBj
LCB0eCAqIHkgLSBzICogeiwgdHggKiB6ICsgcyAqIHksIDAsCisgICAgICAgICAgICAgICAgdHgg
KiB5ICsgcyAqIHosIHR5ICogeSArIGMsIHR5ICogeiAtIHMgKiB4LCAwLAorICAgICAgICAgICAg
ICAgIHR4ICogeiAtIHMgKiB5LCB0eSAqIHogKyBzICogeCwgdCAqIHogKiB6ICsgYywgMCwKKyAg
ICAgICAgICAgICAgICAwLCAwLCAwLCAxCiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBNYXRoLnNxcnQo
IHl5ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0geHkgLyB5OwotICAgICAgICAgICAg
ICAgICAgICAgICAgeiA9IHl6IC8geTsKKyAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICBtYWtlU2NhbGU6IGZ1bmN0aW9uICggeCwgeSwgeiApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAvLyBtMzMgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybSBzbyBiYXNlIHJl
c3VsdCBvbiB0aGlzCisgICAgICAgICAgICB0aGlzLnNldCgKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHp6IDwgZXBzaWxvbiApIHsKKyAgICAgICAgICAgICAgICB4LCAwLCAwLCAwLAorICAg
ICAgICAgICAgICAgIDAsIHksIDAsIDAsCisgICAgICAgICAgICAgICAgMCwgMCwgeiwgMCwKKyAg
ICAgICAgICAgICAgICAwLCAwLCAwLCAxCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSAw
LjcwNzEwNjc4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwLjcwNzEwNjc4MTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgKTsKIAotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHogPSBNYXRoLnNxcnQoIHp6ICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB4ID0geHogLyB6OwotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHl6IC8gejsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIG1ha2VTaGVhcjogZnVu
Y3Rpb24gKCB4LCB5LCB6ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5zZXQoCiAKLSAgICAgICAgICAgICAgICB0aGlzLnNldCggeCwgeSwgeiwgYW5nbGUgKTsKKyAg
ICAgICAgICAgICAgICAxLCB5LCB6LCAwLAorICAgICAgICAgICAgICAgIHgsIDEsIHosIDAsCisg
ICAgICAgICAgICAgICAgeCwgeSwgMSwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAxCiAK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gcmV0dXJuIDE4MCBkZWcgcm90YXRpb24K
KyAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICAvLyBhcyB3ZSBoYXZlIHJlYWNoZWQgaGVyZSB0aGVyZSBhcmUgbm8g
c2luZ3VsYXJpdGllcyBzbyB3ZSBjYW4gaGFuZGxlIG5vcm1hbGx5CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgIHZhciBzID0gTWF0aC5zcXJ0KCAoIG0zMiAtIG0yMyApICogKCBtMzIgLSBtMjMg
KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtMTMgLSBtMzEgKSAqICggbTEz
IC0gbTMxICkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggbTIxIC0gbTEyICkg
KiAoIG0yMSAtIG0xMiApICk7IC8vIHVzZWQgdG8gbm9ybWFsaXplCisgICAgICAgIGNvbXBvc2U6
IGZ1bmN0aW9uICggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICkgewogCi0gICAgICAgICAg
ICBpZiAoIE1hdGguYWJzKCBzICkgPCAwLjAwMSApIHMgPSAxOworICAgICAgICAgICAgdmFyIHRl
ID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgLy8gcHJldmVudCBkaXZpZGUgYnkgemVy
bywgc2hvdWxkIG5vdCBoYXBwZW4gaWYgbWF0cml4IGlzIG9ydGhvZ29uYWwgYW5kIHNob3VsZCBi
ZQotICAgICAgICAgICAgLy8gY2F1Z2h0IGJ5IHNpbmd1bGFyaXR5IHRlc3QgYWJvdmUsIGJ1dCBJ
J3ZlIGxlZnQgaXQgaW4ganVzdCBpbiBjYXNlCisgICAgICAgICAgICB2YXIgeCA9IHF1YXRlcm5p
b24uX3gsIHkgPSBxdWF0ZXJuaW9uLl95LCB6ID0gcXVhdGVybmlvbi5feiwgdyA9IHF1YXRlcm5p
b24uX3c7CisgICAgICAgICAgICB2YXIgeDIgPSB4ICsgeCwgeTIgPSB5ICsgeSwgejIgPSB6ICsg
ejsKKyAgICAgICAgICAgIHZhciB4eCA9IHggKiB4MiwgeHkgPSB4ICogeTIsIHh6ID0geCAqIHoy
OworICAgICAgICAgICAgdmFyIHl5ID0geSAqIHkyLCB5eiA9IHkgKiB6MiwgenogPSB6ICogejI7
CisgICAgICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5ID0gdyAqIHkyLCB3eiA9IHcgKiB6MjsK
IAotICAgICAgICAgICAgdGhpcy54ID0gKCBtMzIgLSBtMjMgKSAvIHM7Ci0gICAgICAgICAgICB0
aGlzLnkgPSAoIG0xMyAtIG0zMSApIC8gczsKLSAgICAgICAgICAgIHRoaXMueiA9ICggbTIxIC0g
bTEyICkgLyBzOwotICAgICAgICAgICAgdGhpcy53ID0gTWF0aC5hY29zKCAoIG0xMSArIG0yMiAr
IG0zMyAtIDEgKSAvIDIgKTsKKyAgICAgICAgICAgIHZhciBzeCA9IHNjYWxlLngsIHN5ID0gc2Nh
bGUueSwgc3ogPSBzY2FsZS56OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgICAgICB0ZVsgMCBdID0gKCAxIC0gKCB5eSArIHp6ICkgKSAqIHN4OworICAgICAgICAgICAg
ICAgIHRlWyAxIF0gPSAoIHh5ICsgd3ogKSAqIHN4OworICAgICAgICAgICAgICAgIHRlWyAyIF0g
PSAoIHh6IC0gd3kgKSAqIHN4OworICAgICAgICAgICAgICAgIHRlWyAzIF0gPSAwOwogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgdGVbIDQgXSA9ICggeHkgLSB3eiApICogc3k7CisgICAg
ICAgICAgICAgICAgdGVbIDUgXSA9ICggMSAtICggeHggKyB6eiApICkgKiBzeTsKKyAgICAgICAg
ICAgICAgICB0ZVsgNiBdID0gKCB5eiArIHd4ICkgKiBzeTsKKyAgICAgICAgICAgICAgICB0ZVsg
NyBdID0gMDsKIAotICAgICAgICBtaW46IGZ1bmN0aW9uICggdiApIHsKKyAgICAgICAgICAgICAg
ICB0ZVsgOCBdID0gKCB4eiArIHd5ICkgKiBzejsKKyAgICAgICAgICAgICAgICB0ZVsgOSBdID0g
KCB5eiAtIHd4ICkgKiBzejsKKyAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9ICggMSAtICggeHgg
KyB5eSApICkgKiBzejsKKyAgICAgICAgICAgICAgICB0ZVsgMTEgXSA9IDA7CiAKLSAgICAgICAg
ICAgIHRoaXMueCA9IE1hdGgubWluKCB0aGlzLngsIHYueCApOwotICAgICAgICAgICAgdGhpcy55
ID0gTWF0aC5taW4oIHRoaXMueSwgdi55ICk7Ci0gICAgICAgICAgICB0aGlzLnogPSBNYXRoLm1p
biggdGhpcy56LCB2LnogKTsKLSAgICAgICAgICAgIHRoaXMudyA9IE1hdGgubWluKCB0aGlzLncs
IHYudyApOworICAgICAgICAgICAgICAgIHRlWyAxMiBdID0gcG9zaXRpb24ueDsKKyAgICAgICAg
ICAgICAgICB0ZVsgMTMgXSA9IHBvc2l0aW9uLnk7CisgICAgICAgICAgICAgICAgdGVbIDE0IF0g
PSBwb3NpdGlvbi56OworICAgICAgICAgICAgICAgIHRlWyAxNSBdID0gMTsKIAotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAg
fSwKIAotICAgICAgICBtYXg6IGZ1bmN0aW9uICggdiApIHsKLQotICAgICAgICAgICAgdGhpcy54
ID0gTWF0aC5tYXgoIHRoaXMueCwgdi54ICk7Ci0gICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1h
eCggdGhpcy55LCB2LnkgKTsKLSAgICAgICAgICAgIHRoaXMueiA9IE1hdGgubWF4KCB0aGlzLnos
IHYueiApOwotICAgICAgICAgICAgdGhpcy53ID0gTWF0aC5tYXgoIHRoaXMudywgdi53ICk7Ci0K
LSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICBkZWNvbXBvc2U6IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICBjbGFt
cDogZnVuY3Rpb24gKCBtaW4sIG1heCApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBk
ZWNvbXBvc2UoIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSApIHsKIAotICAgICAgICAgICAg
Ly8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBvbmVudHdpc2UKKyAgICAgICAgICAgICAgICB2YXIg
dGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1heCggbWlu
LngsIE1hdGgubWluKCBtYXgueCwgdGhpcy54ICkgKTsKLSAgICAgICAgICAgIHRoaXMueSA9IE1h
dGgubWF4KCBtaW4ueSwgTWF0aC5taW4oIG1heC55LCB0aGlzLnkgKSApOwotICAgICAgICAgICAg
dGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiApICk7Ci0g
ICAgICAgICAgICB0aGlzLncgPSBNYXRoLm1heCggbWluLncsIE1hdGgubWluKCBtYXgudywgdGhp
cy53ICkgKTsKKyAgICAgICAgICAgICAgICB2YXIgc3ggPSB2ZWN0b3Iuc2V0KCB0ZVsgMCBdLCB0
ZVsgMSBdLCB0ZVsgMiBdICkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgdmFyIHN5ID0gdmVj
dG9yLnNldCggdGVbIDQgXSwgdGVbIDUgXSwgdGVbIDYgXSApLmxlbmd0aCgpOworICAgICAgICAg
ICAgICAgIHZhciBzeiA9IHZlY3Rvci5zZXQoIHRlWyA4IF0sIHRlWyA5IF0sIHRlWyAxMCBdICku
bGVuZ3RoKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIC8v
IGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBpbnZlcnQgb25lIHNjYWxlCisg
ICAgICAgICAgICAgICAgdmFyIGRldCA9IHRoaXMuZGV0ZXJtaW5hbnQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIGRldCA8IDAgKSBzeCA9IC0gc3g7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICBwb3NpdGlvbi54ID0gdGVbIDEyIF07CisgICAgICAgICAgICAgICAgcG9zaXRpb24ueSA9
IHRlWyAxMyBdOworICAgICAgICAgICAgICAgIHBvc2l0aW9uLnogPSB0ZVsgMTQgXTsKIAotICAg
ICAgICBjbGFtcFNjYWxhcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIC8vIHNjYWxl
IHRoZSByb3RhdGlvbiBwYXJ0CisgICAgICAgICAgICAgICAgbWF0cml4LmNvcHkoIHRoaXMgKTsK
IAotICAgICAgICAgICAgdmFyIG1pbiwgbWF4OworICAgICAgICAgICAgICAgIHZhciBpbnZTWCA9
IDEgLyBzeDsKKyAgICAgICAgICAgICAgICB2YXIgaW52U1kgPSAxIC8gc3k7CisgICAgICAgICAg
ICAgICAgdmFyIGludlNaID0gMSAvIHN6OwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
Y2xhbXBTY2FsYXIoIG1pblZhbCwgbWF4VmFsICkgeworICAgICAgICAgICAgICAgIG1hdHJpeC5l
bGVtZW50c1sgMCBdICo9IGludlNYOworICAgICAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sg
MSBdICo9IGludlNYOworICAgICAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sgMiBdICo9IGlu
dlNYOwogCi0gICAgICAgICAgICAgICAgaWYgKCBtaW4gPT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDQgXSAqPSBpbnZTWTsKKyAgICAgICAgICAgICAg
ICBtYXRyaXguZWxlbWVudHNbIDUgXSAqPSBpbnZTWTsKKyAgICAgICAgICAgICAgICBtYXRyaXgu
ZWxlbWVudHNbIDYgXSAqPSBpbnZTWTsKIAotICAgICAgICAgICAgICAgICAgICBtaW4gPSBuZXcg
VmVjdG9yNCgpOwotICAgICAgICAgICAgICAgICAgICBtYXggPSBuZXcgVmVjdG9yNCgpOworICAg
ICAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sgOCBdICo9IGludlNaOworICAgICAgICAgICAg
ICAgIG1hdHJpeC5lbGVtZW50c1sgOSBdICo9IGludlNaOworICAgICAgICAgICAgICAgIG1hdHJp
eC5lbGVtZW50c1sgMTAgXSAqPSBpbnZTWjsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBxdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbWF0cml4ICk7CiAKLSAg
ICAgICAgICAgICAgICBtaW4uc2V0KCBtaW5WYWwsIG1pblZhbCwgbWluVmFsLCBtaW5WYWwgKTsK
LSAgICAgICAgICAgICAgICBtYXguc2V0KCBtYXhWYWwsIG1heFZhbCwgbWF4VmFsLCBtYXhWYWwg
KTsKKyAgICAgICAgICAgICAgICBzY2FsZS54ID0gc3g7CisgICAgICAgICAgICAgICAgc2NhbGUu
eSA9IHN5OworICAgICAgICAgICAgICAgIHNjYWxlLnogPSBzejsKIAotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmNsYW1wKCBtaW4sIG1heCApOworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCiAgICAgICAgICAgICB9OwogCiAgICAgICAgIH0oKSwKIAotICAgICAgICBjbGFtcExl
bmd0aDogZnVuY3Rpb24gKCBtaW4sIG1heCApIHsKKyAgICAgICAgbWFrZVBlcnNwZWN0aXZlOiBm
dW5jdGlvbiAoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgewogCi0gICAg
ICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICggZmFy
ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxh
ciggbGVuZ3RoIHx8IDEgKS5tdWx0aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0aC5taW4o
IG1heCwgbGVuZ3RoICkgKSApOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
Lk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBh
IG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4nICk7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgIH0KIAotICAgICAgICBmbG9vcjogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciB4ID0gMiAqIG5lYXIg
LyAoIHJpZ2h0IC0gbGVmdCApOworICAgICAgICAgICAgdmFyIHkgPSAyICogbmVhciAvICggdG9w
IC0gYm90dG9tICk7CiAKLSAgICAgICAgICAgIHRoaXMueCA9IE1hdGguZmxvb3IoIHRoaXMueCAp
OwotICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7Ci0gICAgICAgICAg
ICB0aGlzLnogPSBNYXRoLmZsb29yKCB0aGlzLnogKTsKLSAgICAgICAgICAgIHRoaXMudyA9IE1h
dGguZmxvb3IoIHRoaXMudyApOworICAgICAgICAgICAgdmFyIGEgPSAoIHJpZ2h0ICsgbGVmdCAp
IC8gKCByaWdodCAtIGxlZnQgKTsKKyAgICAgICAgICAgIHZhciBiID0gKCB0b3AgKyBib3R0b20g
KSAvICggdG9wIC0gYm90dG9tICk7CisgICAgICAgICAgICB2YXIgYyA9IC0gKCBmYXIgKyBuZWFy
ICkgLyAoIGZhciAtIG5lYXIgKTsKKyAgICAgICAgICAgIHZhciBkID0gLSAyICogZmFyICogbmVh
ciAvICggZmFyIC0gbmVhciApOworCisgICAgICAgICAgICB0ZVsgMCBdID0geDsgICAgdGVbIDQg
XSA9IDA7ICAgIHRlWyA4IF0gPSBhOyAgICB0ZVsgMTIgXSA9IDA7CisgICAgICAgICAgICB0ZVsg
MSBdID0gMDsgICAgdGVbIDUgXSA9IHk7ICAgIHRlWyA5IF0gPSBiOyAgICB0ZVsgMTMgXSA9IDA7
CisgICAgICAgICAgICB0ZVsgMiBdID0gMDsgICAgdGVbIDYgXSA9IDA7ICAgIHRlWyAxMCBdID0g
YzsgICB0ZVsgMTQgXSA9IGQ7CisgICAgICAgICAgICB0ZVsgMyBdID0gMDsgICAgdGVbIDcgXSA9
IDA7ICAgIHRlWyAxMSBdID0gLSAxOyB0ZVsgMTUgXSA9IDA7CiAKICAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY2VpbDogZnVuY3Rpb24gKCkgewotCi0g
ICAgICAgICAgICB0aGlzLnggPSBNYXRoLmNlaWwoIHRoaXMueCApOwotICAgICAgICAgICAgdGhp
cy55ID0gTWF0aC5jZWlsKCB0aGlzLnkgKTsKLSAgICAgICAgICAgIHRoaXMueiA9IE1hdGguY2Vp
bCggdGhpcy56ICk7Ci0gICAgICAgICAgICB0aGlzLncgPSBNYXRoLmNlaWwoIHRoaXMudyApOwot
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgbWFrZU9ydGhvZ3JhcGhpYzogZnVu
Y3Rpb24gKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIHsKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIHZh
ciB3ID0gMS4wIC8gKCByaWdodCAtIGxlZnQgKTsKKyAgICAgICAgICAgIHZhciBoID0gMS4wIC8g
KCB0b3AgLSBib3R0b20gKTsKKyAgICAgICAgICAgIHZhciBwID0gMS4wIC8gKCBmYXIgLSBuZWFy
ICk7CiAKLSAgICAgICAgcm91bmQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB4ID0g
KCByaWdodCArIGxlZnQgKSAqIHc7CisgICAgICAgICAgICB2YXIgeSA9ICggdG9wICsgYm90dG9t
ICkgKiBoOworICAgICAgICAgICAgdmFyIHogPSAoIGZhciArIG5lYXIgKSAqIHA7CiAKLSAgICAg
ICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQoIHRoaXMueCApOwotICAgICAgICAgICAgdGhpcy55
ID0gTWF0aC5yb3VuZCggdGhpcy55ICk7Ci0gICAgICAgICAgICB0aGlzLnogPSBNYXRoLnJvdW5k
KCB0aGlzLnogKTsKLSAgICAgICAgICAgIHRoaXMudyA9IE1hdGgucm91bmQoIHRoaXMudyApOwor
ICAgICAgICAgICAgdGVbIDAgXSA9IDIgKiB3OyAgICB0ZVsgNCBdID0gMDsgICAgdGVbIDggXSA9
IDA7ICAgIHRlWyAxMiBdID0gLSB4OworICAgICAgICAgICAgdGVbIDEgXSA9IDA7ICAgIHRlWyA1
IF0gPSAyICogaDsgICAgdGVbIDkgXSA9IDA7ICAgIHRlWyAxMyBdID0gLSB5OworICAgICAgICAg
ICAgdGVbIDIgXSA9IDA7ICAgIHRlWyA2IF0gPSAwOyAgICB0ZVsgMTAgXSA9IC0gMiAqIHA7IHRl
WyAxNCBdID0gLSB6OworICAgICAgICAgICAgdGVbIDMgXSA9IDA7ICAgIHRlWyA3IF0gPSAwOyAg
ICB0ZVsgMTEgXSA9IDA7ICAgdGVbIDE1IF0gPSAxOwogCiAgICAgICAgICAgICByZXR1cm4gdGhp
czsKIAogICAgICAgICB9LAogCi0gICAgICAgIHJvdW5kVG9aZXJvOiBmdW5jdGlvbiAoKSB7Ci0K
LSAgICAgICAgICAgIHRoaXMueCA9ICggdGhpcy54IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLngg
KSA6IE1hdGguZmxvb3IoIHRoaXMueCApOwotICAgICAgICAgICAgdGhpcy55ID0gKCB0aGlzLnkg
PCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueSApIDogTWF0aC5mbG9vciggdGhpcy55ICk7Ci0gICAg
ICAgICAgICB0aGlzLnogPSAoIHRoaXMueiA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy56ICkgOiBN
YXRoLmZsb29yKCB0aGlzLnogKTsKLSAgICAgICAgICAgIHRoaXMudyA9ICggdGhpcy53IDwgMCAp
ID8gTWF0aC5jZWlsKCB0aGlzLncgKSA6IE1hdGguZmxvb3IoIHRoaXMudyApOworICAgICAgICBl
cXVhbHM6IGZ1bmN0aW9uICggbWF0cml4ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgICAgICB2YXIgbWUg
PSBtYXRyaXguZWxlbWVudHM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IDE2OyBpICsrICkgewogCi0gICAgICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIGlmICggdGVbIGkgXSAhPT0gbWVbIGkgXSApIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgdGhpcy54ID0gLSB0aGlzLng7Ci0gICAgICAgICAgICB0aGlzLnkgPSAt
IHRoaXMueTsKLSAgICAgICAgICAgIHRoaXMueiA9IC0gdGhpcy56OwotICAgICAgICAgICAgdGhp
cy53ID0gLSB0aGlzLnc7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkb3Q6
IGZ1bmN0aW9uICggdiApIHsKKyAgICAgICAgZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBv
ZmZzZXQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2
LnkgKyB0aGlzLnogKiB2LnogKyB0aGlzLncgKiB2Lnc7CisgICAgICAgICAgICBpZiAoIG9mZnNl
dCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKIAotICAgICAgICB9LAorICAgICAgICAgICAg
Zm9yICggdmFyIGkgPSAwOyBpIDwgMTY7IGkgKysgKSB7CiAKLSAgICAgICAgbGVuZ3RoU3E6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzWyBpIF0gPSBhcnJheVsg
aSArIG9mZnNldCBdOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy54ICogdGhpcy54ICsgdGhp
cy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56ICsgdGhpcy53ICogdGhpcy53OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAg
ICAgIGxlbmd0aDogZnVuY3Rpb24gKCkgeworICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFy
cmF5LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAq
IHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRo
aXMudyApOworICAgICAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBb
XTsKKyAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwog
Ci0gICAgICAgIH0sCisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAg
ICAgIGxlbmd0aE1hbmhhdHRhbjogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICByZXR1cm4g
TWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRoaXMu
eiApICsgTWF0aC5hYnMoIHRoaXMudyApOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAgbm9ybWFs
aXplOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxh
ciggdGhpcy5sZW5ndGgoKSB8fCAxICk7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBzZXRMZW5n
dGg6IGZ1bmN0aW9uICggbGVuZ3RoICkgewotCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5ub3Jt
YWxpemUoKS5tdWx0aXBseVNjYWxhciggbGVuZ3RoICk7Ci0KLSAgICAgICAgfSwKLQotICAgICAg
ICBsZXJwOiBmdW5jdGlvbiAoIHYsIGFscGhhICkgewotCi0gICAgICAgICAgICB0aGlzLnggKz0g
KCB2LnggLSB0aGlzLnggKSAqIGFscGhhOwotICAgICAgICAgICAgdGhpcy55ICs9ICggdi55IC0g
dGhpcy55ICkgKiBhbHBoYTsKLSAgICAgICAgICAgIHRoaXMueiArPSAoIHYueiAtIHRoaXMueiAp
ICogYWxwaGE7Ci0gICAgICAgICAgICB0aGlzLncgKz0gKCB2LncgLSB0aGlzLncgKSAqIGFscGhh
OwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIGxl
cnBWZWN0b3JzOiBmdW5jdGlvbiAoIHYxLCB2MiwgYWxwaGEgKSB7Ci0KLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLnN1YlZlY3RvcnMoIHYyLCB2MSApLm11bHRpcGx5U2NhbGFyKCBhbHBoYSApLmFk
ZCggdjEgKTsKLQotICAgICAgICB9LAotCi0gICAgICAgIGVxdWFsczogZnVuY3Rpb24gKCB2ICkg
ewotCi0gICAgICAgICAgICByZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09
IHRoaXMueSApICYmICggdi56ID09PSB0aGlzLnogKSAmJiAoIHYudyA9PT0gdGhpcy53ICkgKTsK
LQotICAgICAgICB9LAotCi0gICAgICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zm
c2V0ICkgewotCi0gICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0
ID0gMDsKLQotICAgICAgICAgICAgdGhpcy54ID0gYXJyYXlbIG9mZnNldCBdOwotICAgICAgICAg
ICAgdGhpcy55ID0gYXJyYXlbIG9mZnNldCArIDEgXTsKLSAgICAgICAgICAgIHRoaXMueiA9IGFy
cmF5WyBvZmZzZXQgKyAyIF07Ci0gICAgICAgICAgICB0aGlzLncgPSBhcnJheVsgb2Zmc2V0ICsg
MyBdOwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAorICAgICAgICAg
ICAgYXJyYXlbIG9mZnNldCBdID0gdGVbIDAgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQg
KyAxIF0gPSB0ZVsgMSBdOworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9IHRlWyAy
IF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGVbIDMgXTsKIAotICAgICAg
ICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CisgICAgICAgICAgICBhcnJh
eVsgb2Zmc2V0ICsgNCBdID0gdGVbIDQgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA1
IF0gPSB0ZVsgNSBdOworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDYgXSA9IHRlWyA2IF07
CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNyBdID0gdGVbIDcgXTsKIAotICAgICAgICAg
ICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTsKLSAgICAgICAgICAgIGlm
ICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOworICAgICAgICAgICAgYXJyYXlb
IG9mZnNldCArIDggXSA9IHRlWyA4IF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgOSBd
ID0gdGVbIDkgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAxMCBdID0gdGVbIDEwIF07
CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTEgXSA9IHRlWyAxMSBdOwogCi0gICAgICAg
ICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0
ICsgMSBdID0gdGhpcy55OwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9IHRoaXMu
ejsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLnc7CisgICAgICAgICAg
ICBhcnJheVsgb2Zmc2V0ICsgMTIgXSA9IHRlWyAxMiBdOworICAgICAgICAgICAgYXJyYXlbIG9m
ZnNldCArIDEzIF0gPSB0ZVsgMTMgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAxNCBd
ID0gdGVbIDE0IF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTUgXSA9IHRlWyAxNSBd
OwogCiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAKLSAgICAgICAgfSwKLQotICAgICAgICBm
cm9tQnVmZmVyQXR0cmlidXRlOiBmdW5jdGlvbiAoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCAp
IHsKLQotICAgICAgICAgICAgaWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKLQotICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiBy
ZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4nICk7Ci0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdGhpcy54ID0gYXR0cmlidXRlLmdldFgoIGluZGV4ICk7Ci0gICAgICAg
ICAgICB0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WSggaW5kZXggKTsKLSAgICAgICAgICAgIHRoaXMu
eiA9IGF0dHJpYnV0ZS5nZXRaKCBpbmRleCApOwotICAgICAgICAgICAgdGhpcy53ID0gYXR0cmli
dXRlLmdldFcoIGluZGV4ICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAg
IH0KLQotICAgIH0gKTsKLQotICAgIC8qKgotICAgICAqIEBhdXRob3Igc3ppbWVrIC8gaHR0cHM6
Ly9naXRodWIuY29tL3N6aW1lay8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2Fs
dGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRob3IgTWFyaXVzIEtpbnRlbCAvIGh0dHBzOi8v
Z2l0aHViLmNvbS9raW50ZWwKLSAgICAgKi8KLQotICAgIC8qCi0gICAgIEluIG9wdGlvbnMsIHdl
IGNhbiBzcGVjaWZ5OgotICAgICAqIFRleHR1cmUgcGFyYW1ldGVycyBmb3IgYW4gYXV0by1nZW5l
cmF0ZWQgdGFyZ2V0IHRleHR1cmUKLSAgICAgKiBkZXB0aEJ1ZmZlci9zdGVuY2lsQnVmZmVyOiBC
b29sZWFucyB0byBpbmRpY2F0ZSBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgYnVmZmVycwot
ICAgICovCi0gICAgZnVuY3Rpb24gV2ViR0xSZW5kZXJUYXJnZXQoIHdpZHRoLCBoZWlnaHQsIG9w
dGlvbnMgKSB7Ci0KLSAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7Ci0K
LSAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdo
dDsKLQotICAgICAgICB0aGlzLnNjaXNzb3IgPSBuZXcgVmVjdG9yNCggMCwgMCwgd2lkdGgsIGhl
aWdodCApOwotICAgICAgICB0aGlzLnNjaXNzb3JUZXN0ID0gZmFsc2U7Ci0KLSAgICAgICAgdGhp
cy52aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7Ci0KLSAgICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICAgICAgaWYgKCBvcHRpb25zLm1pbkZp
bHRlciA9PT0gdW5kZWZpbmVkICkgb3B0aW9ucy5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7Ci0K
LSAgICAgICAgdGhpcy50ZXh0dXJlID0gbmV3IFRleHR1cmUoIHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCBvcHRpb25zLndyYXBTLCBvcHRpb25zLndyYXBULCBvcHRpb25zLm1hZ0ZpbHRlciwgb3B0aW9u
cy5taW5GaWx0ZXIsIG9wdGlvbnMuZm9ybWF0LCBvcHRpb25zLnR5cGUsIG9wdGlvbnMuYW5pc290
cm9weSwgb3B0aW9ucy5lbmNvZGluZyApOwotCi0gICAgICAgIHRoaXMuZGVwdGhCdWZmZXIgPSBv
cHRpb25zLmRlcHRoQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoQnVmZmVyIDog
dHJ1ZTsKLSAgICAgICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gb3B0aW9ucy5zdGVuY2lsQnVmZmVy
ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZW5jaWxCdWZmZXIgOiB0cnVlOwotICAgICAgICB0
aGlzLmRlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZGVwdGhUZXh0dXJlICE9PSB1bmRlZmluZWQgPyBv
cHRpb25zLmRlcHRoVGV4dHVyZSA6IG51bGw7Ci0KLSAgICB9Ci0KLSAgICBPYmplY3QuYXNzaWdu
KCBXZWJHTFJlbmRlclRhcmdldC5wcm90b3R5cGUsIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUs
IHsKLQotICAgICAgICBpc1dlYkdMUmVuZGVyVGFyZ2V0OiB0cnVlLAotCi0gICAgICAgIHNldFNp
emU6IGZ1bmN0aW9uICggd2lkdGgsIGhlaWdodCApIHsKLQotICAgICAgICAgICAgaWYgKCB0aGlz
LndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0ICkgewotCi0gICAgICAg
ICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0
ID0gaGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7Ci0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdGhpcy52aWV3cG9ydC5zZXQoIDAsIDAsIHdpZHRoLCBoZWln
aHQgKTsKLSAgICAgICAgICAgIHRoaXMuc2Npc3Nvci5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQg
KTsKLQotICAgICAgICB9LAotCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKLQotICAg
ICAgICB9LAotCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewotCi0gICAgICAg
ICAgICB0aGlzLndpZHRoID0gc291cmNlLndpZHRoOwotICAgICAgICAgICAgdGhpcy5oZWlnaHQg
PSBzb3VyY2UuaGVpZ2h0OwotCi0gICAgICAgICAgICB0aGlzLnZpZXdwb3J0LmNvcHkoIHNvdXJj
ZS52aWV3cG9ydCApOwotCi0gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBzb3VyY2UudGV4dHVy
ZS5jbG9uZSgpOwotCi0gICAgICAgICAgICB0aGlzLmRlcHRoQnVmZmVyID0gc291cmNlLmRlcHRo
QnVmZmVyOwotICAgICAgICAgICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gc291cmNlLnN0ZW5jaWxC
dWZmZXI7Ci0gICAgICAgICAgICB0aGlzLmRlcHRoVGV4dHVyZSA9IHNvdXJjZS5kZXB0aFRleHR1
cmU7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIH0sCi0KLSAgICAgICAg
ZGlzcG9zZTogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQo
IHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKLQogICAgICAgICB9CiAKICAgICB9ICk7CiAKLSAgICAv
KioKLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tCi0g
ICAgICovCi0KLSAgICBmdW5jdGlvbiBXZWJHTFJlbmRlclRhcmdldEN1YmUoIHdpZHRoLCBoZWln
aHQsIG9wdGlvbnMgKSB7Ci0KLSAgICAgICAgV2ViR0xSZW5kZXJUYXJnZXQuY2FsbCggdGhpcywg
d2lkdGgsIGhlaWdodCwgb3B0aW9ucyApOwotCi0gICAgICAgIHRoaXMuYWN0aXZlQ3ViZUZhY2Ug
PSAwOyAvLyBQWCAwLCBOWCAxLCBQWSAyLCBOWSAzLCBQWiA0LCBOWiA1Ci0gICAgICAgIHRoaXMu
YWN0aXZlTWlwTWFwTGV2ZWwgPSAwOwotCi0gICAgfQotCi0gICAgV2ViR0xSZW5kZXJUYXJnZXRD
dWJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFdlYkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlw
ZSApOwotICAgIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBX
ZWJHTFJlbmRlclRhcmdldEN1YmU7Ci0KLSAgICBXZWJHTFJlbmRlclRhcmdldEN1YmUucHJvdG90
eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlID0gdHJ1ZTsKLQogICAgIC8qKgogICAgICAqIEBh
dXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCiAgICAgICogQGF1dGhvciBh
bHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KQEAgLTIzNzAsNyArMjI5OCw5IEBA
CiAKICAgICAgICAgaW52ZXJzZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4g
dGhpcy5jb25qdWdhdGUoKS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIC8vIHF1YXRlcm5pb24g
aXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoCisKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmNvbmp1Z2F0ZSgpOwogCiAgICAgICAgIH0sCiAKQEAgLTI1MDYsMTkgKzI0MzYsMjEgQEAKIAog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgc2luSGFsZlRoZXRhID0gTWF0aC5zcXJ0
KCAxLjAgLSBjb3NIYWxmVGhldGEgKiBjb3NIYWxmVGhldGEgKTsKKyAgICAgICAgICAgIHZhciBz
cXJTaW5IYWxmVGhldGEgPSAxLjAgLSBjb3NIYWxmVGhldGEgKiBjb3NIYWxmVGhldGE7CiAKLSAg
ICAgICAgICAgIGlmICggTWF0aC5hYnMoIHNpbkhhbGZUaGV0YSApIDwgMC4wMDEgKSB7CisgICAg
ICAgICAgICBpZiAoIHNxclNpbkhhbGZUaGV0YSA8PSBOdW1iZXIuRVBTSUxPTiApIHsKIAotICAg
ICAgICAgICAgICAgIHRoaXMuX3cgPSAwLjUgKiAoIHcgKyB0aGlzLl93ICk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5feCA9IDAuNSAqICggeCArIHRoaXMuX3ggKTsKLSAgICAgICAgICAgICAgICB0
aGlzLl95ID0gMC41ICogKCB5ICsgdGhpcy5feSApOwotICAgICAgICAgICAgICAgIHRoaXMuX3og
PSAwLjUgKiAoIHogKyB0aGlzLl96ICk7CisgICAgICAgICAgICAgICAgdmFyIHMgPSAxIC0gdDsK
KyAgICAgICAgICAgICAgICB0aGlzLl93ID0gcyAqIHcgKyB0ICogdGhpcy5fdzsKKyAgICAgICAg
ICAgICAgICB0aGlzLl94ID0gcyAqIHggKyB0ICogdGhpcy5feDsKKyAgICAgICAgICAgICAgICB0
aGlzLl95ID0gcyAqIHkgKyB0ICogdGhpcy5feTsKKyAgICAgICAgICAgICAgICB0aGlzLl96ID0g
cyAqIHogKyB0ICogdGhpcy5fejsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpOwogCiAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIHZhciBzaW5IYWxmVGhldGEgPSBNYXRoLnNxcnQoIHNxclNpbkhhbGZUaGV0
YSApOwogICAgICAgICAgICAgdmFyIGhhbGZUaGV0YSA9IE1hdGguYXRhbjIoIHNpbkhhbGZUaGV0
YSwgY29zSGFsZlRoZXRhICk7CiAgICAgICAgICAgICB2YXIgcmF0aW9BID0gTWF0aC5zaW4oICgg
MSAtIHQgKSAqIGhhbGZUaGV0YSApIC8gc2luSGFsZlRoZXRhLAogICAgICAgICAgICAgICAgIHJh
dGlvQiA9IE1hdGguc2luKCB0ICogaGFsZlRoZXRhICkgLyBzaW5IYWxmVGhldGE7CkBAIC0yODYx
LDggKzI3OTMsOCBAQAogCiAgICAgICAgICAgICB2YXIgdyA9IDEgLyAoIGVbIDMgXSAqIHggKyBl
WyA3IF0gKiB5ICsgZVsgMTEgXSAqIHogKyBlWyAxNSBdICk7CiAKLSAgICAgICAgICAgIHRoaXMu
eCA9ICggZVsgMCBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA4IF0gICogeiArIGVbIDEyIF0gKSAq
IHc7Ci0gICAgICAgICAgICB0aGlzLnkgPSAoIGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsg
OSBdICAqIHogKyBlWyAxMyBdICkgKiB3OworICAgICAgICAgICAgdGhpcy54ID0gKCBlWyAwIF0g
KiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHogKyBlWyAxMiBdICkgKiB3OworICAgICAgICAg
ICAgdGhpcy55ID0gKCBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAqIHogKyBlWyAx
MyBdICkgKiB3OwogICAgICAgICAgICAgdGhpcy56ID0gKCBlWyAyIF0gKiB4ICsgZVsgNiBdICog
eSArIGVbIDEwIF0gKiB6ICsgZVsgMTQgXSApICogdzsKIAogICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CkBAIC0yODc2LDkgKzI4MDgsOSBAQAogCiAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgcXVh
dCAqIHZlY3RvcgogCi0gICAgICAgICAgICB2YXIgaXggPSAgcXcgKiB4ICsgcXkgKiB6IC0gcXog
KiB5OwotICAgICAgICAgICAgdmFyIGl5ID0gIHF3ICogeSArIHF6ICogeCAtIHF4ICogejsKLSAg
ICAgICAgICAgIHZhciBpeiA9ICBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7CisgICAgICAgICAg
ICB2YXIgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7CisgICAgICAgICAgICB2YXIgaXkg
PSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7CisgICAgICAgICAgICB2YXIgaXogPSBxdyAqIHog
KyBxeCAqIHkgLSBxeSAqIHg7CiAgICAgICAgICAgICB2YXIgaXcgPSAtIHF4ICogeCAtIHF5ICog
eSAtIHF6ICogejsKIAogICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2Ug
cXVhdApAQCAtMjkyNSw4ICsyODU3LDggQEAKICAgICAgICAgICAgIHZhciB4ID0gdGhpcy54LCB5
ID0gdGhpcy55LCB6ID0gdGhpcy56OwogICAgICAgICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzOwog
Ci0gICAgICAgICAgICB0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAg
KiB6OwotICAgICAgICAgICAgdGhpcy55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5
IF0gICogejsKKyAgICAgICAgICAgIHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsg
ZVsgOCBdICogejsKKyAgICAgICAgICAgIHRoaXMueSA9IGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5
ICsgZVsgOSBdICogejsKICAgICAgICAgICAgIHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0g
KiB5ICsgZVsgMTAgXSAqIHo7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZSgp
OwpAQCAtMzA3NSw3ICszMDA3LDcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgIGxlbmd0aE1h
bmhhdHRhbjogZnVuY3Rpb24gKCkgeworICAgICAgICBtYW5oYXR0YW5MZW5ndGg6IGZ1bmN0aW9u
ICgpIHsKIAogICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKCB0aGlzLnggKSArIE1hdGguYWJz
KCB0aGlzLnkgKSArIE1hdGguYWJzKCB0aGlzLnogKTsKIApAQCAtMzExOCwxMyArMzA1MCw3IEBA
CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlz
LnksIHogPSB0aGlzLno7Ci0KLSAgICAgICAgICAgIHRoaXMueCA9IHkgKiB2LnogLSB6ICogdi55
OwotICAgICAgICAgICAgdGhpcy55ID0geiAqIHYueCAtIHggKiB2Lno7Ci0gICAgICAgICAgICB0
aGlzLnogPSB4ICogdi55IC0geSAqIHYueDsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHRoaXMsIHYgKTsKIAogICAgICAg
ICB9LAogCkBAIC0zMjAyLDcgKzMxMjgsNyBAQAogCiAgICAgICAgIH0sCiAKLSAgICAgICAgZGlz
dGFuY2VUb01hbmhhdHRhbjogZnVuY3Rpb24gKCB2ICkgeworICAgICAgICBtYW5oYXR0YW5EaXN0
YW5jZVRvOiBmdW5jdGlvbiAoIHYgKSB7CiAKICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicygg
dGhpcy54IC0gdi54ICkgKyBNYXRoLmFicyggdGhpcy55IC0gdi55ICkgKyBNYXRoLmFicyggdGhp
cy56IC0gdi56ICk7CiAKQEAgLTMzMTIsNDkgKzMyMzgsNDEgQEAKICAgICB9ICk7CiAKICAgICAv
KioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBh
dXRob3Igc3VwZXJlZ2diZXJ0IC8gaHR0cDovL3d3dy5wYXVsYnJ1bnQuY28udWsvCi0gICAgICog
QGF1dGhvciBwaGlsb2diIC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy8KLSAgICAgKiBAYXV0aG9y
IGpvcmRpX3JvcyAvIGh0dHA6Ly9wbGF0dHNvZnQuY29tCi0gICAgICogQGF1dGhvciBEMXBsbzFk
IC8gaHR0cDovL2dpdGh1Yi5jb20vRDFwbG8xZAogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBo
dHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIg
LyBodHRwOi8vZ29tby5zZS8KLSAgICAgKiBAYXV0aG9yIHRpbWtuaXAgLyBodHRwOi8vd3d3LmZs
b29ycGxhbm5lci5jb20vCi0gICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5p
bwogICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFu
Z2xleQorICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAgICAgKiBA
YXV0aG9yIHRzY2h3CiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBNYXRyaXg0KCkgeworICAgIGZ1
bmN0aW9uIE1hdHJpeDMoKSB7CiAKICAgICAgICAgdGhpcy5lbGVtZW50cyA9IFsKIAotICAgICAg
ICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAgICAgICAw
LCAwLCAxLCAwLAotICAgICAgICAgICAgMCwgMCwgMCwgMQorICAgICAgICAgICAgMSwgMCwgMCwK
KyAgICAgICAgICAgIDAsIDEsIDAsCisgICAgICAgICAgICAwLCAwLCAxCiAKICAgICAgICAgXTsK
IAogICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICBj
b25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciBy
ZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7CisgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCAnVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFk
cyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7CiAKICAgICAgICAgfQogCiAgICAg
fQogCi0gICAgT2JqZWN0LmFzc2lnbiggTWF0cml4NC5wcm90b3R5cGUsIHsKKyAgICBPYmplY3Qu
YXNzaWduKCBNYXRyaXgzLnByb3RvdHlwZSwgewogCi0gICAgICAgIGlzTWF0cml4NDogdHJ1ZSwK
KyAgICAgICAgaXNNYXRyaXgzOiB0cnVlLAogCi0gICAgICAgIHNldDogZnVuY3Rpb24gKCBuMTEs
IG4xMiwgbjEzLCBuMTQsIG4yMSwgbjIyLCBuMjMsIG4yNCwgbjMxLCBuMzIsIG4zMywgbjM0LCBu
NDEsIG40MiwgbjQzLCBuNDQgKSB7CisgICAgICAgIHNldDogZnVuY3Rpb24gKCBuMTEsIG4xMiwg
bjEzLCBuMjEsIG4yMiwgbjIzLCBuMzEsIG4zMiwgbjMzICkgewogCiAgICAgICAgICAgICB2YXIg
dGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICB0ZVsgMCBdID0gbjExOyB0ZVsgNCBd
ID0gbjEyOyB0ZVsgOCBdID0gbjEzOyB0ZVsgMTIgXSA9IG4xNDsKLSAgICAgICAgICAgIHRlWyAx
IF0gPSBuMjE7IHRlWyA1IF0gPSBuMjI7IHRlWyA5IF0gPSBuMjM7IHRlWyAxMyBdID0gbjI0Owot
ICAgICAgICAgICAgdGVbIDIgXSA9IG4zMTsgdGVbIDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7
IHRlWyAxNCBdID0gbjM0OwotICAgICAgICAgICAgdGVbIDMgXSA9IG40MTsgdGVbIDcgXSA9IG40
MjsgdGVbIDExIF0gPSBuNDM7IHRlWyAxNSBdID0gbjQ0OworICAgICAgICAgICAgdGVbIDAgXSA9
IG4xMTsgdGVbIDEgXSA9IG4yMTsgdGVbIDIgXSA9IG4zMTsKKyAgICAgICAgICAgIHRlWyAzIF0g
PSBuMTI7IHRlWyA0IF0gPSBuMjI7IHRlWyA1IF0gPSBuMzI7CisgICAgICAgICAgICB0ZVsgNiBd
ID0gbjEzOyB0ZVsgNyBdID0gbjIzOyB0ZVsgOCBdID0gbjMzOwogCiAgICAgICAgICAgICByZXR1
cm4gdGhpczsKIApAQCAtMzM2NCwxMCArMzI4Miw5IEBACiAKICAgICAgICAgICAgIHRoaXMuc2V0
KAogCi0gICAgICAgICAgICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAxLCAw
LCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAgICAgICAgMCwgMCwg
MCwgMQorICAgICAgICAgICAgICAgIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgMCwgMSwgMCwK
KyAgICAgICAgICAgICAgICAwLCAwLCAxCiAKICAgICAgICAgICAgICk7CiAKQEAgLTMzNzcsNyAr
MzI5NCw3IEBACiAKICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAg
cmV0dXJuIG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KCB0aGlzLmVsZW1lbnRzICk7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5mcm9tQXJyYXkoIHRoaXMuZWxlbWVu
dHMgKTsKIAogICAgICAgICB9LAogCkBAIC0zMzg2LDE3MzAgKzMzMDMsMTUyNCBAQAogICAgICAg
ICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKICAgICAgICAgICAgIHZhciBtZSA9IG0uZWxl
bWVudHM7CiAKLSAgICAgICAgICAgIHRlWyAwIF0gPSBtZVsgMCBdOyB0ZVsgMSBdID0gbWVbIDEg
XTsgdGVbIDIgXSA9IG1lWyAyIF07IHRlWyAzIF0gPSBtZVsgMyBdOwotICAgICAgICAgICAgdGVb
IDQgXSA9IG1lWyA0IF07IHRlWyA1IF0gPSBtZVsgNSBdOyB0ZVsgNiBdID0gbWVbIDYgXTsgdGVb
IDcgXSA9IG1lWyA3IF07Ci0gICAgICAgICAgICB0ZVsgOCBdID0gbWVbIDggXTsgdGVbIDkgXSA9
IG1lWyA5IF07IHRlWyAxMCBdID0gbWVbIDEwIF07IHRlWyAxMSBdID0gbWVbIDExIF07Ci0gICAg
ICAgICAgICB0ZVsgMTIgXSA9IG1lWyAxMiBdOyB0ZVsgMTMgXSA9IG1lWyAxMyBdOyB0ZVsgMTQg
XSA9IG1lWyAxNCBdOyB0ZVsgMTUgXSA9IG1lWyAxNSBdOwotCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIGNvcHlQb3NpdGlvbjogZnVuY3Rpb24gKCBt
ICkgewotCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzLCBtZSA9IG0uZWxlbWVu
dHM7Ci0KLSAgICAgICAgICAgIHRlWyAxMiBdID0gbWVbIDEyIF07Ci0gICAgICAgICAgICB0ZVsg
MTMgXSA9IG1lWyAxMyBdOwotICAgICAgICAgICAgdGVbIDE0IF0gPSBtZVsgMTQgXTsKKyAgICAg
ICAgICAgIHRlWyAwIF0gPSBtZVsgMCBdOyB0ZVsgMSBdID0gbWVbIDEgXTsgdGVbIDIgXSA9IG1l
WyAyIF07CisgICAgICAgICAgICB0ZVsgMyBdID0gbWVbIDMgXTsgdGVbIDQgXSA9IG1lWyA0IF07
IHRlWyA1IF0gPSBtZVsgNSBdOworICAgICAgICAgICAgdGVbIDYgXSA9IG1lWyA2IF07IHRlWyA3
IF0gPSBtZVsgNyBdOyB0ZVsgOCBdID0gbWVbIDggXTsKIAogICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBleHRyYWN0QmFzaXM6IGZ1bmN0aW9uICggeEF4
aXMsIHlBeGlzLCB6QXhpcyApIHsKLQotICAgICAgICAgICAgeEF4aXMuc2V0RnJvbU1hdHJpeENv
bHVtbiggdGhpcywgMCApOwotICAgICAgICAgICAgeUF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbigg
dGhpcywgMSApOwotICAgICAgICAgICAgekF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbiggdGhpcywg
MiApOworICAgICAgICBzZXRGcm9tTWF0cml4NDogZnVuY3Rpb24gKCBtICkgewogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHZhciBtZSA9IG0uZWxlbWVudHM7CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgIHRoaXMuc2V0KAogCi0gICAgICAgIG1ha2VCYXNpczogZnVu
Y3Rpb24gKCB4QXhpcywgeUF4aXMsIHpBeGlzICkgeworICAgICAgICAgICAgICAgIG1lWyAwIF0s
IG1lWyA0IF0sIG1lWyA4IF0sCisgICAgICAgICAgICAgICAgbWVbIDEgXSwgbWVbIDUgXSwgbWVb
IDkgXSwKKyAgICAgICAgICAgICAgICBtZVsgMiBdLCBtZVsgNiBdLCBtZVsgMTAgXQogCi0gICAg
ICAgICAgICB0aGlzLnNldCgKLSAgICAgICAgICAgICAgICB4QXhpcy54LCB5QXhpcy54LCB6QXhp
cy54LCAwLAotICAgICAgICAgICAgICAgIHhBeGlzLnksIHlBeGlzLnksIHpBeGlzLnksIDAsCi0g
ICAgICAgICAgICAgICAgeEF4aXMueiwgeUF4aXMueiwgekF4aXMueiwgMCwKLSAgICAgICAgICAg
ICAgICAwLCAgICAgICAwLCAgICAgICAwLCAgICAgICAxCiAgICAgICAgICAgICApOwogCiAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGV4dHJhY3RSb3Rh
dGlvbjogZnVuY3Rpb24gKCkgeworICAgICAgICBhcHBseVRvQnVmZmVyQXR0cmlidXRlOiBmdW5j
dGlvbiAoKSB7CiAKICAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBleHRyYWN0Um90YXRpb24oIG0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlICkgewog
Ci0gICAgICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKLSAgICAgICAgICAgICAg
ICB2YXIgbWUgPSBtLmVsZW1lbnRzOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICB2
YXIgc2NhbGVYID0gMSAvIHYxLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDAgKS5sZW5ndGgoKTsK
LSAgICAgICAgICAgICAgICB2YXIgc2NhbGVZID0gMSAvIHYxLnNldEZyb21NYXRyaXhDb2x1bW4o
IG0sIDEgKS5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB2YXIgc2NhbGVaID0gMSAvIHYxLnNl
dEZyb21NYXRyaXhDb2x1bW4oIG0sIDIgKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAg
djEueCA9IGF0dHJpYnV0ZS5nZXRYKCBpICk7CisgICAgICAgICAgICAgICAgICAgIHYxLnkgPSBh
dHRyaWJ1dGUuZ2V0WSggaSApOworICAgICAgICAgICAgICAgICAgICB2MS56ID0gYXR0cmlidXRl
LmdldFooIGkgKTsKIAotICAgICAgICAgICAgICAgIHRlWyAwIF0gPSBtZVsgMCBdICogc2NhbGVY
OwotICAgICAgICAgICAgICAgIHRlWyAxIF0gPSBtZVsgMSBdICogc2NhbGVYOwotICAgICAgICAg
ICAgICAgIHRlWyAyIF0gPSBtZVsgMiBdICogc2NhbGVYOworICAgICAgICAgICAgICAgICAgICB2
MS5hcHBseU1hdHJpeDMoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIHRlWyA0IF0gPSBtZVsg
NCBdICogc2NhbGVZOwotICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBtZVsgNSBdICogc2NhbGVZ
OwotICAgICAgICAgICAgICAgIHRlWyA2IF0gPSBtZVsgNiBdICogc2NhbGVZOworICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUuc2V0WFlaKCBpLCB2MS54LCB2MS55LCB2MS56ICk7CiAKLSAg
ICAgICAgICAgICAgICB0ZVsgOCBdID0gbWVbIDggXSAqIHNjYWxlWjsKLSAgICAgICAgICAgICAg
ICB0ZVsgOSBdID0gbWVbIDkgXSAqIHNjYWxlWjsKLSAgICAgICAgICAgICAgICB0ZVsgMTAgXSA9
IG1lWyAxMCBdICogc2NhbGVaOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7CiAKICAgICAg
ICAgICAgIH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIG1ha2VSb3RhdGlvbkZyb21FdWxl
cjogZnVuY3Rpb24gKCBldWxlciApIHsKLQotICAgICAgICAgICAgaWYgKCAhICggZXVsZXIgJiYg
ZXVsZXIuaXNFdWxlciApICkgewotCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RI
UkVFLk1hdHJpeDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIg
cm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7Ci0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uICggbSApIHsKIAotICAgICAgICAgICAg
dmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5
TWF0cmljZXMoIHRoaXMsIG0gKTsKIAotICAgICAgICAgICAgdmFyIHggPSBldWxlci54LCB5ID0g
ZXVsZXIueSwgeiA9IGV1bGVyLno7Ci0gICAgICAgICAgICB2YXIgYSA9IE1hdGguY29zKCB4ICks
IGIgPSBNYXRoLnNpbiggeCApOwotICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggeSApLCBk
ID0gTWF0aC5zaW4oIHkgKTsKLSAgICAgICAgICAgIHZhciBlID0gTWF0aC5jb3MoIHogKSwgZiA9
IE1hdGguc2luKCB6ICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIGlmICggZXVsZXIub3Jk
ZXIgPT09ICdYWVonICkgeworICAgICAgICBwcmVtdWx0aXBseTogZnVuY3Rpb24gKCBtICkgewog
Ci0gICAgICAgICAgICAgICAgdmFyIGFlID0gYSAqIGUsIGFmID0gYSAqIGYsIGJlID0gYiAqIGUs
IGJmID0gYiAqIGY7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCBt
LCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICB0ZVsgMCBdID0gYyAqIGU7Ci0gICAgICAgICAg
ICAgICAgdGVbIDQgXSA9IC0gYyAqIGY7Ci0gICAgICAgICAgICAgICAgdGVbIDggXSA9IGQ7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0ZVsgMSBdID0gYWYgKyBiZSAqIGQ7Ci0gICAg
ICAgICAgICAgICAgdGVbIDUgXSA9IGFlIC0gYmYgKiBkOwotICAgICAgICAgICAgICAgIHRlWyA5
IF0gPSAtIGIgKiBjOworICAgICAgICBtdWx0aXBseU1hdHJpY2VzOiBmdW5jdGlvbiAoIGEsIGIg
KSB7CiAKLSAgICAgICAgICAgICAgICB0ZVsgMiBdID0gYmYgLSBhZSAqIGQ7Ci0gICAgICAgICAg
ICAgICAgdGVbIDYgXSA9IGJlICsgYWYgKiBkOwotICAgICAgICAgICAgICAgIHRlWyAxMCBdID0g
YSAqIGM7CisgICAgICAgICAgICB2YXIgYWUgPSBhLmVsZW1lbnRzOworICAgICAgICAgICAgdmFy
IGJlID0gYi5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CiAK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWVhaJyApIHsKKyAgICAg
ICAgICAgIHZhciBhMTEgPSBhZVsgMCBdLCBhMTIgPSBhZVsgMyBdLCBhMTMgPSBhZVsgNiBdOwor
ICAgICAgICAgICAgdmFyIGEyMSA9IGFlWyAxIF0sIGEyMiA9IGFlWyA0IF0sIGEyMyA9IGFlWyA3
IF07CisgICAgICAgICAgICB2YXIgYTMxID0gYWVbIDIgXSwgYTMyID0gYWVbIDUgXSwgYTMzID0g
YWVbIDggXTsKIAotICAgICAgICAgICAgICAgIHZhciBjZSA9IGMgKiBlLCBjZiA9IGMgKiBmLCBk
ZSA9IGQgKiBlLCBkZiA9IGQgKiBmOworICAgICAgICAgICAgdmFyIGIxMSA9IGJlWyAwIF0sIGIx
MiA9IGJlWyAzIF0sIGIxMyA9IGJlWyA2IF07CisgICAgICAgICAgICB2YXIgYjIxID0gYmVbIDEg
XSwgYjIyID0gYmVbIDQgXSwgYjIzID0gYmVbIDcgXTsKKyAgICAgICAgICAgIHZhciBiMzEgPSBi
ZVsgMiBdLCBiMzIgPSBiZVsgNSBdLCBiMzMgPSBiZVsgOCBdOwogCi0gICAgICAgICAgICAgICAg
dGVbIDAgXSA9IGNlICsgZGYgKiBiOwotICAgICAgICAgICAgICAgIHRlWyA0IF0gPSBkZSAqIGIg
LSBjZjsKLSAgICAgICAgICAgICAgICB0ZVsgOCBdID0gYSAqIGQ7CisgICAgICAgICAgICB0ZVsg
MCBdID0gYTExICogYjExICsgYTEyICogYjIxICsgYTEzICogYjMxOworICAgICAgICAgICAgdGVb
IDMgXSA9IGExMSAqIGIxMiArIGExMiAqIGIyMiArIGExMyAqIGIzMjsKKyAgICAgICAgICAgIHRl
WyA2IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzM7CiAKLSAgICAgICAgICAg
ICAgICB0ZVsgMSBdID0gYSAqIGY7Ci0gICAgICAgICAgICAgICAgdGVbIDUgXSA9IGEgKiBlOwot
ICAgICAgICAgICAgICAgIHRlWyA5IF0gPSAtIGI7CisgICAgICAgICAgICB0ZVsgMSBdID0gYTIx
ICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxOworICAgICAgICAgICAgdGVbIDQgXSA9IGEy
MSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMjsKKyAgICAgICAgICAgIHRlWyA3IF0gPSBh
MjEgKiBiMTMgKyBhMjIgKiBiMjMgKyBhMjMgKiBiMzM7CiAKLSAgICAgICAgICAgICAgICB0ZVsg
MiBdID0gY2YgKiBiIC0gZGU7Ci0gICAgICAgICAgICAgICAgdGVbIDYgXSA9IGRmICsgY2UgKiBi
OwotICAgICAgICAgICAgICAgIHRlWyAxMCBdID0gYSAqIGM7CisgICAgICAgICAgICB0ZVsgMiBd
ID0gYTMxICogYjExICsgYTMyICogYjIxICsgYTMzICogYjMxOworICAgICAgICAgICAgdGVbIDUg
XSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMjsKKyAgICAgICAgICAgIHRlWyA4
IF0gPSBhMzEgKiBiMTMgKyBhMzIgKiBiMjMgKyBhMzMgKiBiMzM7CiAKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWlhZJyApIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIGNlID0gYyAqIGUsIGNmID0gYyAqIGYsIGRlID0g
ZCAqIGUsIGRmID0gZCAqIGY7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0ZVsgMCBd
ID0gY2UgLSBkZiAqIGI7Ci0gICAgICAgICAgICAgICAgdGVbIDQgXSA9IC0gYSAqIGY7Ci0gICAg
ICAgICAgICAgICAgdGVbIDggXSA9IGRlICsgY2YgKiBiOworICAgICAgICBtdWx0aXBseVNjYWxh
cjogZnVuY3Rpb24gKCBzICkgewogCi0gICAgICAgICAgICAgICAgdGVbIDEgXSA9IGNmICsgZGUg
KiBiOwotICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsKLSAgICAgICAgICAgICAgICB0
ZVsgOSBdID0gZGYgLSBjZSAqIGI7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRz
OwogCi0gICAgICAgICAgICAgICAgdGVbIDIgXSA9IC0gYSAqIGQ7Ci0gICAgICAgICAgICAgICAg
dGVbIDYgXSA9IGI7Ci0gICAgICAgICAgICAgICAgdGVbIDEwIF0gPSBhICogYzsKKyAgICAgICAg
ICAgIHRlWyAwIF0gKj0gczsgdGVbIDMgXSAqPSBzOyB0ZVsgNiBdICo9IHM7CisgICAgICAgICAg
ICB0ZVsgMSBdICo9IHM7IHRlWyA0IF0gKj0gczsgdGVbIDcgXSAqPSBzOworICAgICAgICAgICAg
dGVbIDIgXSAqPSBzOyB0ZVsgNSBdICo9IHM7IHRlWyA4IF0gKj0gczsKIAotICAgICAgICAgICAg
fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdaWVgnICkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKLSAgICAgICAgICAgICAgICB2YXIgYWUgPSBhICogZSwgYWYgPSBhICogZiwgYmUg
PSBiICogZSwgYmYgPSBiICogZjsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHRlWyAw
IF0gPSBjICogZTsKLSAgICAgICAgICAgICAgICB0ZVsgNCBdID0gYmUgKiBkIC0gYWY7Ci0gICAg
ICAgICAgICAgICAgdGVbIDggXSA9IGFlICogZCArIGJmOworICAgICAgICBkZXRlcm1pbmFudDog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgdGVbIDEgXSA9IGMgKiBmOwotICAgICAg
ICAgICAgICAgIHRlWyA1IF0gPSBiZiAqIGQgKyBhZTsKLSAgICAgICAgICAgICAgICB0ZVsgOSBd
ID0gYWYgKiBkIC0gYmU7CisgICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0g
ICAgICAgICAgICAgICAgdGVbIDIgXSA9IC0gZDsKLSAgICAgICAgICAgICAgICB0ZVsgNiBdID0g
YiAqIGM7Ci0gICAgICAgICAgICAgICAgdGVbIDEwIF0gPSBhICogYzsKKyAgICAgICAgICAgIHZh
ciBhID0gdGVbIDAgXSwgYiA9IHRlWyAxIF0sIGMgPSB0ZVsgMiBdLAorICAgICAgICAgICAgICAg
IGQgPSB0ZVsgMyBdLCBlID0gdGVbIDQgXSwgZiA9IHRlWyA1IF0sCisgICAgICAgICAgICAgICAg
ZyA9IHRlWyA2IF0sIGggPSB0ZVsgNyBdLCBpID0gdGVbIDggXTsKIAotICAgICAgICAgICAgfSBl
bHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdZWlgnICkgeworICAgICAgICAgICAgcmV0dXJuIGEg
KiBlICogaSAtIGEgKiBmICogaCAtIGIgKiBkICogaSArIGIgKiBmICogZyArIGMgKiBkICogaCAt
IGMgKiBlICogZzsKIAotICAgICAgICAgICAgICAgIHZhciBhYyA9IGEgKiBjLCBhZCA9IGEgKiBk
LCBiYyA9IGIgKiBjLCBiZCA9IGIgKiBkOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
dGVbIDAgXSA9IGMgKiBlOwotICAgICAgICAgICAgICAgIHRlWyA0IF0gPSBiZCAtIGFjICogZjsK
LSAgICAgICAgICAgICAgICB0ZVsgOCBdID0gYmMgKiBmICsgYWQ7CisgICAgICAgIGdldEludmVy
c2U6IGZ1bmN0aW9uICggbWF0cml4LCB0aHJvd09uRGVnZW5lcmF0ZSApIHsKIAotICAgICAgICAg
ICAgICAgIHRlWyAxIF0gPSBmOwotICAgICAgICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsKLSAg
ICAgICAgICAgICAgICB0ZVsgOSBdID0gLSBiICogZTsKKyAgICAgICAgICAgIGlmICggbWF0cml4
ICYmIG1hdHJpeC5pc01hdHJpeDQgKSB7CiAKLSAgICAgICAgICAgICAgICB0ZVsgMiBdID0gLSBk
ICogZTsKLSAgICAgICAgICAgICAgICB0ZVsgNiBdID0gYWQgKiBmICsgYmM7Ci0gICAgICAgICAg
ICAgICAgdGVbIDEwIF0gPSBhYyAtIGJkICogZjsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCAiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBubyBsb25nZXIgdGFrZXMgYSBNYXRy
aXg0IGFyZ3VtZW50LiIgKTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggZXVsZXIub3JkZXIg
PT09ICdYWlknICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIGFjID0g
YSAqIGMsIGFkID0gYSAqIGQsIGJjID0gYiAqIGMsIGJkID0gYiAqIGQ7CisgICAgICAgICAgICB2
YXIgbWUgPSBtYXRyaXguZWxlbWVudHMsCisgICAgICAgICAgICAgICAgdGUgPSB0aGlzLmVsZW1l
bnRzLAogCi0gICAgICAgICAgICAgICAgdGVbIDAgXSA9IGMgKiBlOwotICAgICAgICAgICAgICAg
IHRlWyA0IF0gPSAtIGY7Ci0gICAgICAgICAgICAgICAgdGVbIDggXSA9IGQgKiBlOworICAgICAg
ICAgICAgICAgIG4xMSA9IG1lWyAwIF0sIG4yMSA9IG1lWyAxIF0sIG4zMSA9IG1lWyAyIF0sCisg
ICAgICAgICAgICAgICAgbjEyID0gbWVbIDMgXSwgbjIyID0gbWVbIDQgXSwgbjMyID0gbWVbIDUg
XSwKKyAgICAgICAgICAgICAgICBuMTMgPSBtZVsgNiBdLCBuMjMgPSBtZVsgNyBdLCBuMzMgPSBt
ZVsgOCBdLAogCi0gICAgICAgICAgICAgICAgdGVbIDEgXSA9IGFjICogZiArIGJkOwotICAgICAg
ICAgICAgICAgIHRlWyA1IF0gPSBhICogZTsKLSAgICAgICAgICAgICAgICB0ZVsgOSBdID0gYWQg
KiBmIC0gYmM7CisgICAgICAgICAgICAgICAgdDExID0gbjMzICogbjIyIC0gbjMyICogbjIzLAor
ICAgICAgICAgICAgICAgIHQxMiA9IG4zMiAqIG4xMyAtIG4zMyAqIG4xMiwKKyAgICAgICAgICAg
ICAgICB0MTMgPSBuMjMgKiBuMTIgLSBuMjIgKiBuMTMsCiAKLSAgICAgICAgICAgICAgICB0ZVsg
MiBdID0gYmMgKiBmIC0gYWQ7Ci0gICAgICAgICAgICAgICAgdGVbIDYgXSA9IGIgKiBlOwotICAg
ICAgICAgICAgICAgIHRlWyAxMCBdID0gYmQgKiBmICsgYWM7CisgICAgICAgICAgICAgICAgZGV0
ID0gbjExICogdDExICsgbjIxICogdDEyICsgbjMxICogdDEzOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIGRldCA9PT0gMCApIHsKIAotICAgICAgICAgICAgLy8gbGFzdCBjb2x1
bW4KLSAgICAgICAgICAgIHRlWyAzIF0gPSAwOwotICAgICAgICAgICAgdGVbIDcgXSA9IDA7Ci0g
ICAgICAgICAgICB0ZVsgMTEgXSA9IDA7CisgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICJUSFJF
RS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50
IGlzIDAiOwogCi0gICAgICAgICAgICAvLyBib3R0b20gcm93Ci0gICAgICAgICAgICB0ZVsgMTIg
XSA9IDA7Ci0gICAgICAgICAgICB0ZVsgMTMgXSA9IDA7Ci0gICAgICAgICAgICB0ZVsgMTQgXSA9
IDA7Ci0gICAgICAgICAgICB0ZVsgMTUgXSA9IDE7CisgICAgICAgICAgICAgICAgaWYgKCB0aHJv
d09uRGVnZW5lcmF0ZSA9PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIG1ha2VSb3RhdGlvbkZyb21RdWF0
ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggbXNnICk7CiAKLSAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgeCA9IHEuX3gsIHkgPSBxLl95LCB6ID0gcS5f
eiwgdyA9IHEuX3c7Ci0gICAgICAgICAgICB2YXIgeDIgPSB4ICsgeCwgeTIgPSB5ICsgeSwgejIg
PSB6ICsgejsKLSAgICAgICAgICAgIHZhciB4eCA9IHggKiB4MiwgeHkgPSB4ICogeTIsIHh6ID0g
eCAqIHoyOwotICAgICAgICAgICAgdmFyIHl5ID0geSAqIHkyLCB5eiA9IHkgKiB6MiwgenogPSB6
ICogejI7Ci0gICAgICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5ID0gdyAqIHkyLCB3eiA9IHcg
KiB6MjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eSgpOwogCi0gICAgICAg
ICAgICB0ZVsgMCBdID0gMSAtICggeXkgKyB6eiApOwotICAgICAgICAgICAgdGVbIDQgXSA9IHh5
IC0gd3o7Ci0gICAgICAgICAgICB0ZVsgOCBdID0geHogKyB3eTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdGVbIDEgXSA9IHh5ICsgd3o7Ci0gICAgICAgICAgICB0ZVsgNSBdID0gMSAt
ICggeHggKyB6eiApOwotICAgICAgICAgICAgdGVbIDkgXSA9IHl6IC0gd3g7CisgICAgICAgICAg
ICB2YXIgZGV0SW52ID0gMSAvIGRldDsKIAotICAgICAgICAgICAgdGVbIDIgXSA9IHh6IC0gd3k7
Ci0gICAgICAgICAgICB0ZVsgNiBdID0geXogKyB3eDsKLSAgICAgICAgICAgIHRlWyAxMCBdID0g
MSAtICggeHggKyB5eSApOworICAgICAgICAgICAgdGVbIDAgXSA9IHQxMSAqIGRldEludjsKKyAg
ICAgICAgICAgIHRlWyAxIF0gPSAoIG4zMSAqIG4yMyAtIG4zMyAqIG4yMSApICogZGV0SW52Owor
ICAgICAgICAgICAgdGVbIDIgXSA9ICggbjMyICogbjIxIC0gbjMxICogbjIyICkgKiBkZXRJbnY7
CiAKLSAgICAgICAgICAgIC8vIGxhc3QgY29sdW1uCi0gICAgICAgICAgICB0ZVsgMyBdID0gMDsK
LSAgICAgICAgICAgIHRlWyA3IF0gPSAwOwotICAgICAgICAgICAgdGVbIDExIF0gPSAwOworICAg
ICAgICAgICAgdGVbIDMgXSA9IHQxMiAqIGRldEludjsKKyAgICAgICAgICAgIHRlWyA0IF0gPSAo
IG4zMyAqIG4xMSAtIG4zMSAqIG4xMyApICogZGV0SW52OworICAgICAgICAgICAgdGVbIDUgXSA9
ICggbjMxICogbjEyIC0gbjMyICogbjExICkgKiBkZXRJbnY7CiAKLSAgICAgICAgICAgIC8vIGJv
dHRvbSByb3cKLSAgICAgICAgICAgIHRlWyAxMiBdID0gMDsKLSAgICAgICAgICAgIHRlWyAxMyBd
ID0gMDsKLSAgICAgICAgICAgIHRlWyAxNCBdID0gMDsKLSAgICAgICAgICAgIHRlWyAxNSBdID0g
MTsKKyAgICAgICAgICAgIHRlWyA2IF0gPSB0MTMgKiBkZXRJbnY7CisgICAgICAgICAgICB0ZVsg
NyBdID0gKCBuMjEgKiBuMTMgLSBuMjMgKiBuMTEgKSAqIGRldEludjsKKyAgICAgICAgICAgIHRl
WyA4IF0gPSAoIG4yMiAqIG4xMSAtIG4yMSAqIG4xMiApICogZGV0SW52OwogCiAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGxvb2tBdDogZnVuY3Rpb24g
KCkgewotCi0gICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2
YXIgeSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgeiA9IG5ldyBWZWN0b3IzKCk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBsb29rQXQoIGV5ZSwgdGFyZ2V0LCB1cCAp
IHsKKyAgICAgICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB2
YXIgdGUgPSB0aGlzLmVsZW1lbnRzOworICAgICAgICAgICAgdmFyIHRtcCwgbSA9IHRoaXMuZWxl
bWVudHM7CiAKLSAgICAgICAgICAgICAgICB6LnN1YlZlY3RvcnMoIGV5ZSwgdGFyZ2V0ICk7Cisg
ICAgICAgICAgICB0bXAgPSBtWyAxIF07IG1bIDEgXSA9IG1bIDMgXTsgbVsgMyBdID0gdG1wOwor
ICAgICAgICAgICAgdG1wID0gbVsgMiBdOyBtWyAyIF0gPSBtWyA2IF07IG1bIDYgXSA9IHRtcDsK
KyAgICAgICAgICAgIHRtcCA9IG1bIDUgXTsgbVsgNSBdID0gbVsgNyBdOyBtWyA3IF0gPSB0bXA7
CiAKLSAgICAgICAgICAgICAgICBpZiAoIHoubGVuZ3RoU3EoKSA9PT0gMCApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGV5ZSBhbmQgdGFyZ2V0
IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbgorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
ICAgIHoueiA9IDE7CisgICAgICAgIGdldE5vcm1hbE1hdHJpeDogZnVuY3Rpb24gKCBtYXRyaXg0
ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJv
bU1hdHJpeDQoIG1hdHJpeDQgKS5nZXRJbnZlcnNlKCB0aGlzICkudHJhbnNwb3NlKCk7CiAKLSAg
ICAgICAgICAgICAgICB6Lm5vcm1hbGl6ZSgpOwotICAgICAgICAgICAgICAgIHguY3Jvc3NWZWN0
b3JzKCB1cCwgeiApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgaWYgKCB4Lmxlbmd0
aFNxKCkgPT09IDAgKSB7CisgICAgICAgIHRyYW5zcG9zZUludG9BcnJheTogZnVuY3Rpb24gKCBy
ICkgewogCi0gICAgICAgICAgICAgICAgICAgIC8vIHVwIGFuZCB6IGFyZSBwYXJhbGxlbAorICAg
ICAgICAgICAgdmFyIG0gPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICAgICAgICAgIGlm
ICggTWF0aC5hYnMoIHVwLnogKSA9PT0gMSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ei54ICs9IDAuMDAwMTsKKyAgICAgICAgICAgIHJbIDAgXSA9IG1bIDAgXTsKKyAgICAgICAgICAg
IHJbIDEgXSA9IG1bIDMgXTsKKyAgICAgICAgICAgIHJbIDIgXSA9IG1bIDYgXTsKKyAgICAgICAg
ICAgIHJbIDMgXSA9IG1bIDEgXTsKKyAgICAgICAgICAgIHJbIDQgXSA9IG1bIDQgXTsKKyAgICAg
ICAgICAgIHJbIDUgXSA9IG1bIDcgXTsKKyAgICAgICAgICAgIHJbIDYgXSA9IG1bIDIgXTsKKyAg
ICAgICAgICAgIHJbIDcgXSA9IG1bIDUgXTsKKyAgICAgICAgICAgIHJbIDggXSA9IG1bIDggXTsK
IAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHoueiArPSAwLjAwMDE7CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBzZXRVdlRyYW5zZm9ybTogZnVuY3Rpb24g
KCB0eCwgdHksIHN4LCBzeSwgcm90YXRpb24sIGN4LCBjeSApIHsKIAotICAgICAgICAgICAgICAg
ICAgICB6Lm5vcm1hbGl6ZSgpOwotICAgICAgICAgICAgICAgICAgICB4LmNyb3NzVmVjdG9ycygg
dXAsIHogKTsKKyAgICAgICAgICAgIHZhciBjID0gTWF0aC5jb3MoIHJvdGF0aW9uICk7CisgICAg
ICAgICAgICB2YXIgcyA9IE1hdGguc2luKCByb3RhdGlvbiApOwogCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5zZXQoCisgICAgICAgICAgICAgICAgc3ggKiBjLCBzeCAqIHMs
IC0gc3ggKiAoIGMgKiBjeCArIHMgKiBjeSApICsgY3ggKyB0eCwKKyAgICAgICAgICAgICAgICAt
IHN5ICogcywgc3kgKiBjLCAtIHN5ICogKCAtIHMgKiBjeCArIGMgKiBjeSApICsgY3kgKyB0eSwK
KyAgICAgICAgICAgICAgICAwLCAwLCAxCisgICAgICAgICAgICApOwogCi0gICAgICAgICAgICAg
ICAgeC5ub3JtYWxpemUoKTsKLSAgICAgICAgICAgICAgICB5LmNyb3NzVmVjdG9ycyggeiwgeCAp
OworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdGVbIDAgXSA9IHgueDsgdGVbIDQgXSA9
IHkueDsgdGVbIDggXSA9IHoueDsKLSAgICAgICAgICAgICAgICB0ZVsgMSBdID0geC55OyB0ZVsg
NSBdID0geS55OyB0ZVsgOSBdID0gei55OwotICAgICAgICAgICAgICAgIHRlWyAyIF0gPSB4Lno7
IHRlWyA2IF0gPSB5Lno7IHRlWyAxMCBdID0gei56OworICAgICAgICBzY2FsZTogZnVuY3Rpb24g
KCBzeCwgc3kgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
IHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB0
ZVsgMCBdICo9IHN4OyB0ZVsgMyBdICo9IHN4OyB0ZVsgNiBdICo9IHN4OworICAgICAgICAgICAg
dGVbIDEgXSAqPSBzeTsgdGVbIDQgXSAqPSBzeTsgdGVbIDcgXSAqPSBzeTsKIAotICAgICAgICB9
KCksCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICBtdWx0aXBseTogZnVuY3Rp
b24gKCBtLCBuICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIG4gIT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgcm90YXRlOiBmdW5jdGlvbiAoIHRoZXRhICkgewogCi0gICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9u
bHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGlu
c3RlYWQuJyApOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMo
IG0sIG4gKTsKKyAgICAgICAgICAgIHZhciBjID0gTWF0aC5jb3MoIHRoZXRhICk7CisgICAgICAg
ICAgICB2YXIgcyA9IE1hdGguc2luKCB0aGV0YSApOwogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5t
dWx0aXBseU1hdHJpY2VzKCB0aGlzLCBtICk7CisgICAgICAgICAgICB2YXIgYTExID0gdGVbIDAg
XSwgYTEyID0gdGVbIDMgXSwgYTEzID0gdGVbIDYgXTsKKyAgICAgICAgICAgIHZhciBhMjEgPSB0
ZVsgMSBdLCBhMjIgPSB0ZVsgNCBdLCBhMjMgPSB0ZVsgNyBdOwogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB0ZVsgMCBdID0gYyAqIGExMSArIHMgKiBhMjE7CisgICAgICAgICAgICB0ZVsgMyBd
ID0gYyAqIGExMiArIHMgKiBhMjI7CisgICAgICAgICAgICB0ZVsgNiBdID0gYyAqIGExMyArIHMg
KiBhMjM7CiAKLSAgICAgICAgcHJlbXVsdGlwbHk6IGZ1bmN0aW9uICggbSApIHsKKyAgICAgICAg
ICAgIHRlWyAxIF0gPSAtIHMgKiBhMTEgKyBjICogYTIxOworICAgICAgICAgICAgdGVbIDQgXSA9
IC0gcyAqIGExMiArIGMgKiBhMjI7CisgICAgICAgICAgICB0ZVsgNyBdID0gLSBzICogYTEzICsg
YyAqIGEyMzsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggbSwg
dGhpcyApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBtdWx0aXBseU1hdHJpY2VzOiBmdW5jdGlvbiAoIGEsIGIgKSB7CisgICAgICAgIHRyYW5zbGF0
ZTogZnVuY3Rpb24gKCB0eCwgdHkgKSB7CiAKLSAgICAgICAgICAgIHZhciBhZSA9IGEuZWxlbWVu
dHM7Ci0gICAgICAgICAgICB2YXIgYmUgPSBiLmVsZW1lbnRzOwogICAgICAgICAgICAgdmFyIHRl
ID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgdmFyIGExMSA9IGFlWyAwIF0sIGExMiA9
IGFlWyA0IF0sIGExMyA9IGFlWyA4IF0sIGExNCA9IGFlWyAxMiBdOwotICAgICAgICAgICAgdmFy
IGEyMSA9IGFlWyAxIF0sIGEyMiA9IGFlWyA1IF0sIGEyMyA9IGFlWyA5IF0sIGEyNCA9IGFlWyAx
MyBdOwotICAgICAgICAgICAgdmFyIGEzMSA9IGFlWyAyIF0sIGEzMiA9IGFlWyA2IF0sIGEzMyA9
IGFlWyAxMCBdLCBhMzQgPSBhZVsgMTQgXTsKLSAgICAgICAgICAgIHZhciBhNDEgPSBhZVsgMyBd
LCBhNDIgPSBhZVsgNyBdLCBhNDMgPSBhZVsgMTEgXSwgYTQ0ID0gYWVbIDE1IF07CisgICAgICAg
ICAgICB0ZVsgMCBdICs9IHR4ICogdGVbIDIgXTsgdGVbIDMgXSArPSB0eCAqIHRlWyA1IF07IHRl
WyA2IF0gKz0gdHggKiB0ZVsgOCBdOworICAgICAgICAgICAgdGVbIDEgXSArPSB0eSAqIHRlWyAy
IF07IHRlWyA0IF0gKz0gdHkgKiB0ZVsgNSBdOyB0ZVsgNyBdICs9IHR5ICogdGVbIDggXTsKIAot
ICAgICAgICAgICAgdmFyIGIxMSA9IGJlWyAwIF0sIGIxMiA9IGJlWyA0IF0sIGIxMyA9IGJlWyA4
IF0sIGIxNCA9IGJlWyAxMiBdOwotICAgICAgICAgICAgdmFyIGIyMSA9IGJlWyAxIF0sIGIyMiA9
IGJlWyA1IF0sIGIyMyA9IGJlWyA5IF0sIGIyNCA9IGJlWyAxMyBdOwotICAgICAgICAgICAgdmFy
IGIzMSA9IGJlWyAyIF0sIGIzMiA9IGJlWyA2IF0sIGIzMyA9IGJlWyAxMCBdLCBiMzQgPSBiZVsg
MTQgXTsKLSAgICAgICAgICAgIHZhciBiNDEgPSBiZVsgMyBdLCBiNDIgPSBiZVsgNyBdLCBiNDMg
PSBiZVsgMTEgXSwgYjQ0ID0gYmVbIDE1IF07CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgdGVbIDAgXSA9IGExMSAqIGIxMSArIGExMiAqIGIyMSArIGExMyAqIGIzMSAr
IGExNCAqIGI0MTsKLSAgICAgICAgICAgIHRlWyA0IF0gPSBhMTEgKiBiMTIgKyBhMTIgKiBiMjIg
KyBhMTMgKiBiMzIgKyBhMTQgKiBiNDI7Ci0gICAgICAgICAgICB0ZVsgOCBdID0gYTExICogYjEz
ICsgYTEyICogYjIzICsgYTEzICogYjMzICsgYTE0ICogYjQzOwotICAgICAgICAgICAgdGVbIDEy
IF0gPSBhMTEgKiBiMTQgKyBhMTIgKiBiMjQgKyBhMTMgKiBiMzQgKyBhMTQgKiBiNDQ7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgIHRlWyAxIF0gPSBhMjEgKiBiMTEgKyBhMjIgKiBiMjEgKyBh
MjMgKiBiMzEgKyBhMjQgKiBiNDE7Ci0gICAgICAgICAgICB0ZVsgNSBdID0gYTIxICogYjEyICsg
YTIyICogYjIyICsgYTIzICogYjMyICsgYTI0ICogYjQyOwotICAgICAgICAgICAgdGVbIDkgXSA9
IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMyArIGEyNCAqIGI0MzsKLSAgICAgICAg
ICAgIHRlWyAxMyBdID0gYTIxICogYjE0ICsgYTIyICogYjI0ICsgYTIzICogYjM0ICsgYTI0ICog
YjQ0OworICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggbWF0cml4ICkgewogCi0gICAgICAgICAg
ICB0ZVsgMiBdID0gYTMxICogYjExICsgYTMyICogYjIxICsgYTMzICogYjMxICsgYTM0ICogYjQx
OwotICAgICAgICAgICAgdGVbIDYgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIz
MiArIGEzNCAqIGI0MjsKLSAgICAgICAgICAgIHRlWyAxMCBdID0gYTMxICogYjEzICsgYTMyICog
YjIzICsgYTMzICogYjMzICsgYTM0ICogYjQzOwotICAgICAgICAgICAgdGVbIDE0IF0gPSBhMzEg
KiBiMTQgKyBhMzIgKiBiMjQgKyBhMzMgKiBiMzQgKyBhMzQgKiBiNDQ7CisgICAgICAgICAgICB2
YXIgdGUgPSB0aGlzLmVsZW1lbnRzOworICAgICAgICAgICAgdmFyIG1lID0gbWF0cml4LmVsZW1l
bnRzOwogCi0gICAgICAgICAgICB0ZVsgMyBdID0gYTQxICogYjExICsgYTQyICogYjIxICsgYTQz
ICogYjMxICsgYTQ0ICogYjQxOwotICAgICAgICAgICAgdGVbIDcgXSA9IGE0MSAqIGIxMiArIGE0
MiAqIGIyMiArIGE0MyAqIGIzMiArIGE0NCAqIGI0MjsKLSAgICAgICAgICAgIHRlWyAxMSBdID0g
YTQxICogYjEzICsgYTQyICogYjIzICsgYTQzICogYjMzICsgYTQ0ICogYjQzOwotICAgICAgICAg
ICAgdGVbIDE1IF0gPSBhNDEgKiBiMTQgKyBhNDIgKiBiMjQgKyBhNDMgKiBiMzQgKyBhNDQgKiBi
NDQ7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA5OyBpICsrICkgewogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICBpZiAoIHRlWyBpIF0gIT09IG1l
WyBpIF0gKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAgICAgfSwKIAotICAgICAgICBtdWx0aXBseVNjYWxhcjogZnVuY3Rp
b24gKCBzICkgeworICAgICAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCAp
IHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgICAgIGlm
ICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAgICAgICAgICB0ZVsg
MCBdICo9IHM7IHRlWyA0IF0gKj0gczsgdGVbIDggXSAqPSBzOyB0ZVsgMTIgXSAqPSBzOwotICAg
ICAgICAgICAgdGVbIDEgXSAqPSBzOyB0ZVsgNSBdICo9IHM7IHRlWyA5IF0gKj0gczsgdGVbIDEz
IF0gKj0gczsKLSAgICAgICAgICAgIHRlWyAyIF0gKj0gczsgdGVbIDYgXSAqPSBzOyB0ZVsgMTAg
XSAqPSBzOyB0ZVsgMTQgXSAqPSBzOwotICAgICAgICAgICAgdGVbIDMgXSAqPSBzOyB0ZVsgNyBd
ICo9IHM7IHRlWyAxMSBdICo9IHM7IHRlWyAxNSBdICo9IHM7CisgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDA7IGkgPCA5OyBpICsrICkgeworCisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50
c1sgaSBdID0gYXJyYXlbIGkgKyBvZmZzZXQgXTsKKworICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGFwcGx5VG9CdWZmZXJB
dHRyaWJ1dGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdG9BcnJheTogZnVuY3Rpb24gKCBhcnJh
eSwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTsKKyAgICAgICAg
ICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlICkgewor
ICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKIAotICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7CisgICAg
ICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0ZVsgMCBdOworICAgICAgICAgICAgYXJyYXlbIG9m
ZnNldCArIDEgXSA9IHRlWyAxIF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMiBdID0g
dGVbIDIgXTsKIAotICAgICAgICAgICAgICAgICAgICB2MS54ID0gYXR0cmlidXRlLmdldFgoIGkg
KTsKLSAgICAgICAgICAgICAgICAgICAgdjEueSA9IGF0dHJpYnV0ZS5nZXRZKCBpICk7Ci0gICAg
ICAgICAgICAgICAgICAgIHYxLnogPSBhdHRyaWJ1dGUuZ2V0WiggaSApOworICAgICAgICAgICAg
YXJyYXlbIG9mZnNldCArIDMgXSA9IHRlWyAzIF07CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0
ICsgNCBdID0gdGVbIDQgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA1IF0gPSB0ZVsg
NSBdOwogCi0gICAgICAgICAgICAgICAgICAgIHYxLmFwcGx5TWF0cml4NCggdGhpcyApOworICAg
ICAgICAgICAgYXJyYXlbIG9mZnNldCArIDYgXSA9IHRlWyA2IF07CisgICAgICAgICAgICBhcnJh
eVsgb2Zmc2V0ICsgNyBdID0gdGVbIDcgXTsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA4
IF0gPSB0ZVsgOCBdOwogCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5zZXRYWVooIGks
IHYxLngsIHYxLnksIHYxLnogKTsKKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0
ZTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIH07CisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0
cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqIEBhdXRob3Igc3ppbWVrIC8gaHR0cHM6Ly9n
aXRodWIuY29tL3N6aW1lay8KKyAgICAgKi8KIAotICAgICAgICB9KCksCisgICAgdmFyIHRleHR1
cmVJZCA9IDA7CiAKLSAgICAgICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiBUZXh0dXJlKCBpbWFnZSwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1p
bkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApIHsKIAotICAgICAg
ICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KCB0aGlzLCAnaWQnLCB7IHZhbHVlOiB0ZXh0dXJlSWQgKysgfSApOwogCi0gICAgICAgICAg
ICB2YXIgbjExID0gdGVbIDAgXSwgbjEyID0gdGVbIDQgXSwgbjEzID0gdGVbIDggXSwgbjE0ID0g
dGVbIDEyIF07Ci0gICAgICAgICAgICB2YXIgbjIxID0gdGVbIDEgXSwgbjIyID0gdGVbIDUgXSwg
bjIzID0gdGVbIDkgXSwgbjI0ID0gdGVbIDEzIF07Ci0gICAgICAgICAgICB2YXIgbjMxID0gdGVb
IDIgXSwgbjMyID0gdGVbIDYgXSwgbjMzID0gdGVbIDEwIF0sIG4zNCA9IHRlWyAxNCBdOwotICAg
ICAgICAgICAgdmFyIG40MSA9IHRlWyAzIF0sIG40MiA9IHRlWyA3IF0sIG40MyA9IHRlWyAxMSBd
LCBuNDQgPSB0ZVsgMTUgXTsKKyAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlE
KCk7CiAKLSAgICAgICAgICAgIC8vVE9ETzogbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50Ci0gICAg
ICAgICAgICAvLyggYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMv
YWxnZWJyYS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtICkKKyAgICAg
ICAgdGhpcy5uYW1lID0gJyc7CiAKLSAgICAgICAgICAgIHJldHVybiAoCi0gICAgICAgICAgICAg
ICAgbjQxICogKAotICAgICAgICAgICAgICAgICAgICArIG4xNCAqIG4yMyAqIG4zMgotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTMgKiBuMjQgKiBuMzIKLSAgICAgICAgICAgICAgICAgICAgIC0g
bjE0ICogbjIyICogbjMzCi0gICAgICAgICAgICAgICAgICAgICArIG4xMiAqIG4yNCAqIG4zMwot
ICAgICAgICAgICAgICAgICAgICAgKyBuMTMgKiBuMjIgKiBuMzQKLSAgICAgICAgICAgICAgICAg
ICAgIC0gbjEyICogbjIzICogbjM0Ci0gICAgICAgICAgICAgICAgKSArCi0gICAgICAgICAgICAg
ICAgbjQyICogKAotICAgICAgICAgICAgICAgICAgICArIG4xMSAqIG4yMyAqIG4zNAotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTEgKiBuMjQgKiBuMzMKLSAgICAgICAgICAgICAgICAgICAgICsg
bjE0ICogbjIxICogbjMzCi0gICAgICAgICAgICAgICAgICAgICAtIG4xMyAqIG4yMSAqIG4zNAot
ICAgICAgICAgICAgICAgICAgICAgKyBuMTMgKiBuMjQgKiBuMzEKLSAgICAgICAgICAgICAgICAg
ICAgIC0gbjE0ICogbjIzICogbjMxCi0gICAgICAgICAgICAgICAgKSArCi0gICAgICAgICAgICAg
ICAgbjQzICogKAotICAgICAgICAgICAgICAgICAgICArIG4xMSAqIG4yNCAqIG4zMgotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTEgKiBuMjIgKiBuMzQKLSAgICAgICAgICAgICAgICAgICAgIC0g
bjE0ICogbjIxICogbjMyCi0gICAgICAgICAgICAgICAgICAgICArIG4xMiAqIG4yMSAqIG4zNAot
ICAgICAgICAgICAgICAgICAgICAgKyBuMTQgKiBuMjIgKiBuMzEKLSAgICAgICAgICAgICAgICAg
ICAgIC0gbjEyICogbjI0ICogbjMxCi0gICAgICAgICAgICAgICAgKSArCi0gICAgICAgICAgICAg
ICAgbjQ0ICogKAotICAgICAgICAgICAgICAgICAgICAtIG4xMyAqIG4yMiAqIG4zMQotICAgICAg
ICAgICAgICAgICAgICAgLSBuMTEgKiBuMjMgKiBuMzIKLSAgICAgICAgICAgICAgICAgICAgICsg
bjExICogbjIyICogbjMzCi0gICAgICAgICAgICAgICAgICAgICArIG4xMyAqIG4yMSAqIG4zMgot
ICAgICAgICAgICAgICAgICAgICAgLSBuMTIgKiBuMjEgKiBuMzMKLSAgICAgICAgICAgICAgICAg
ICAgICsgbjEyICogbjIzICogbjMxCi0gICAgICAgICAgICAgICAgKQorICAgICAgICB0aGlzLmlt
YWdlID0gaW1hZ2UgIT09IHVuZGVmaW5lZCA/IGltYWdlIDogVGV4dHVyZS5ERUZBVUxUX0lNQUdF
OworICAgICAgICB0aGlzLm1pcG1hcHMgPSBbXTsKIAotICAgICAgICAgICAgKTsKKyAgICAgICAg
dGhpcy5tYXBwaW5nID0gbWFwcGluZyAhPT0gdW5kZWZpbmVkID8gbWFwcGluZyA6IFRleHR1cmUu
REVGQVVMVF9NQVBQSU5HOwogCi0gICAgICAgIH0sCisgICAgICAgIHRoaXMud3JhcFMgPSB3cmFw
UyAhPT0gdW5kZWZpbmVkID8gd3JhcFMgOiBDbGFtcFRvRWRnZVdyYXBwaW5nOworICAgICAgICB0
aGlzLndyYXBUID0gd3JhcFQgIT09IHVuZGVmaW5lZCA/IHdyYXBUIDogQ2xhbXBUb0VkZ2VXcmFw
cGluZzsKIAotICAgICAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5t
YWdGaWx0ZXIgPSBtYWdGaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1hZ0ZpbHRlciA6IExpbmVhckZp
bHRlcjsKKyAgICAgICAgdGhpcy5taW5GaWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/
IG1pbkZpbHRlciA6IExpbmVhck1pcE1hcExpbmVhckZpbHRlcjsKIAotICAgICAgICAgICAgdmFy
IHRlID0gdGhpcy5lbGVtZW50czsKLSAgICAgICAgICAgIHZhciB0bXA7CisgICAgICAgIHRoaXMu
YW5pc290cm9weSA9IGFuaXNvdHJvcHkgIT09IHVuZGVmaW5lZCA/IGFuaXNvdHJvcHkgOiAxOwog
Ci0gICAgICAgICAgICB0bXAgPSB0ZVsgMSBdOyB0ZVsgMSBdID0gdGVbIDQgXTsgdGVbIDQgXSA9
IHRtcDsKLSAgICAgICAgICAgIHRtcCA9IHRlWyAyIF07IHRlWyAyIF0gPSB0ZVsgOCBdOyB0ZVsg
OCBdID0gdG1wOwotICAgICAgICAgICAgdG1wID0gdGVbIDYgXTsgdGVbIDYgXSA9IHRlWyA5IF07
IHRlWyA5IF0gPSB0bXA7CisgICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0ICE9PSB1bmRlZmlu
ZWQgPyBmb3JtYXQgOiBSR0JBRm9ybWF0OworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlICE9PSB1
bmRlZmluZWQgPyB0eXBlIDogVW5zaWduZWRCeXRlVHlwZTsKIAotICAgICAgICAgICAgdG1wID0g
dGVbIDMgXTsgdGVbIDMgXSA9IHRlWyAxMiBdOyB0ZVsgMTIgXSA9IHRtcDsKLSAgICAgICAgICAg
IHRtcCA9IHRlWyA3IF07IHRlWyA3IF0gPSB0ZVsgMTMgXTsgdGVbIDEzIF0gPSB0bXA7Ci0gICAg
ICAgICAgICB0bXAgPSB0ZVsgMTEgXTsgdGVbIDExIF0gPSB0ZVsgMTQgXTsgdGVbIDE0IF0gPSB0
bXA7CisgICAgICAgIHRoaXMub2Zmc2V0ID0gbmV3IFZlY3RvcjIoIDAsIDAgKTsKKyAgICAgICAg
dGhpcy5yZXBlYXQgPSBuZXcgVmVjdG9yMiggMSwgMSApOworICAgICAgICB0aGlzLmNlbnRlciA9
IG5ldyBWZWN0b3IyKCAwLCAwICk7CisgICAgICAgIHRoaXMucm90YXRpb24gPSAwOwogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgdGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5tYXRyaXggPSBuZXcgTWF0cml4MygpOwogCi0gICAgICAgIH0sCisg
ICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5wcmVtdWx0
aXBseUFscGhhID0gZmFsc2U7CisgICAgICAgIHRoaXMuZmxpcFkgPSB0cnVlOworICAgICAgICB0
aGlzLnVucGFja0FsaWdubWVudCA9IDQ7ICAgLy8gdmFsaWQgdmFsdWVzOiAxLCAyLCA0LCA4IChz
ZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQ
aXhlbFN0b3JlaS54bWwpCiAKLSAgICAgICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uICggdiApIHsK
KyAgICAgICAgLy8gVmFsdWVzIG9mIGVuY29kaW5nICE9PSBUSFJFRS5MaW5lYXJFbmNvZGluZyBv
bmx5IHN1cHBvcnRlZCBvbiBtYXAsIGVudk1hcCBhbmQgZW1pc3NpdmVNYXAuCisgICAgICAgIC8v
CisgICAgICAgIC8vIEFsc28gY2hhbmdpbmcgdGhlIGVuY29kaW5nIGFmdGVyIGFscmVhZHkgdXNl
ZCBieSBhIE1hdGVyaWFsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgbWFrZSB0aGUgTWF0ZXJpYWwK
KyAgICAgICAgLy8gdXBkYXRlLiAgWW91IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIE1hdGVyaWFs
Lm5lZWRzVXBkYXRlIHRvIHRyaWdnZXIgaXQgdG8gcmVjb21waWxlLgorICAgICAgICB0aGlzLmVu
Y29kaW5nID0gZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IGVuY29kaW5nIDogTGluZWFyRW5jb2Rp
bmc7CiAKLSAgICAgICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgIHRoaXMu
dmVyc2lvbiA9IDA7CisgICAgICAgIHRoaXMub25VcGRhdGUgPSBudWxsOwogCi0gICAgICAgICAg
ICB0ZVsgMTIgXSA9IHYueDsKLSAgICAgICAgICAgIHRlWyAxMyBdID0gdi55OwotICAgICAgICAg
ICAgdGVbIDE0IF0gPSB2Lno7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICBUZXh0dXJlLkRFRkFVTFRfSU1BR0UgPSB1bmRlZmluZWQ7CisgICAgVGV4dHVyZS5ERUZBVUxU
X01BUFBJTkcgPSBVVk1hcHBpbmc7CiAKLSAgICAgICAgfSwKKyAgICBUZXh0dXJlLnByb3RvdHlw
ZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5
cGUgKSwgewogCi0gICAgICAgIGdldEludmVyc2U6IGZ1bmN0aW9uICggbSwgdGhyb3dPbkRlZ2Vu
ZXJhdGUgKSB7CisgICAgICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlLAogCi0gICAgICAgICAgICAv
LyBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21h
dHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG0KLSAgICAgICAgICAgIHZhciB0
ZSA9IHRoaXMuZWxlbWVudHMsCi0gICAgICAgICAgICAgICAgbWUgPSBtLmVsZW1lbnRzLAorICAg
ICAgICBpc1RleHR1cmU6IHRydWUsCiAKLSAgICAgICAgICAgICAgICBuMTEgPSBtZVsgMCBdLCBu
MjEgPSBtZVsgMSBdLCBuMzEgPSBtZVsgMiBdLCBuNDEgPSBtZVsgMyBdLAotICAgICAgICAgICAg
ICAgIG4xMiA9IG1lWyA0IF0sIG4yMiA9IG1lWyA1IF0sIG4zMiA9IG1lWyA2IF0sIG40MiA9IG1l
WyA3IF0sCi0gICAgICAgICAgICAgICAgbjEzID0gbWVbIDggXSwgbjIzID0gbWVbIDkgXSwgbjMz
ID0gbWVbIDEwIF0sIG40MyA9IG1lWyAxMSBdLAotICAgICAgICAgICAgICAgIG4xNCA9IG1lWyAx
MiBdLCBuMjQgPSBtZVsgMTMgXSwgbjM0ID0gbWVbIDE0IF0sIG40NCA9IG1lWyAxNSBdLAorICAg
ICAgICB1cGRhdGVNYXRyaXg6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIHQxMSA9
IG4yMyAqIG4zNCAqIG40MiAtIG4yNCAqIG4zMyAqIG40MiArIG4yNCAqIG4zMiAqIG40MyAtIG4y
MiAqIG4zNCAqIG40MyAtIG4yMyAqIG4zMiAqIG40NCArIG4yMiAqIG4zMyAqIG40NCwKLSAgICAg
ICAgICAgICAgICB0MTIgPSBuMTQgKiBuMzMgKiBuNDIgLSBuMTMgKiBuMzQgKiBuNDIgLSBuMTQg
KiBuMzIgKiBuNDMgKyBuMTIgKiBuMzQgKiBuNDMgKyBuMTMgKiBuMzIgKiBuNDQgLSBuMTIgKiBu
MzMgKiBuNDQsCi0gICAgICAgICAgICAgICAgdDEzID0gbjEzICogbjI0ICogbjQyIC0gbjE0ICog
bjIzICogbjQyICsgbjE0ICogbjIyICogbjQzIC0gbjEyICogbjI0ICogbjQzIC0gbjEzICogbjIy
ICogbjQ0ICsgbjEyICogbjIzICogbjQ0LAotICAgICAgICAgICAgICAgIHQxNCA9IG4xNCAqIG4y
MyAqIG4zMiAtIG4xMyAqIG4yNCAqIG4zMiAtIG4xNCAqIG4yMiAqIG4zMyArIG4xMiAqIG4yNCAq
IG4zMyArIG4xMyAqIG4yMiAqIG4zNCAtIG4xMiAqIG4yMyAqIG4zNDsKKyAgICAgICAgICAgIHRo
aXMubWF0cml4LnNldFV2VHJhbnNmb3JtKCB0aGlzLm9mZnNldC54LCB0aGlzLm9mZnNldC55LCB0
aGlzLnJlcGVhdC54LCB0aGlzLnJlcGVhdC55LCB0aGlzLnJvdGF0aW9uLCB0aGlzLmNlbnRlci54
LCB0aGlzLmNlbnRlci55ICk7CiAKLSAgICAgICAgICAgIHZhciBkZXQgPSBuMTEgKiB0MTEgKyBu
MjEgKiB0MTIgKyBuMzEgKiB0MTMgKyBuNDEgKiB0MTQ7CisgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgIGlmICggZGV0ID09PSAwICkgeworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAgICAgdmFyIG1zZyA9ICJUSFJFRS5NYXRyaXg0LmdldEludmVyc2UoKTogY2Fu
J3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCI7CisgICAgICAgICAgICByZXR1cm4g
bmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIHRocm93T25EZWdlbmVyYXRlID09PSB0cnVlICkgeworICAgICAgICB9LAogCi0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7CisgICAgICAgIGNvcHk6IGZ1bmN0
aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lOwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggbXNnICk7CisgICAgICAgICAgICB0aGlzLmltYWdlID0gc291cmNlLmltYWdlOworICAg
ICAgICAgICAgdGhpcy5taXBtYXBzID0gc291cmNlLm1pcG1hcHMuc2xpY2UoIDAgKTsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMubWFwcGluZyA9IHNvdXJjZS5tYXBwaW5n
OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpdHkoKTsKKyAgICAgICAgICAg
IHRoaXMud3JhcFMgPSBzb3VyY2Uud3JhcFM7CisgICAgICAgICAgICB0aGlzLndyYXBUID0gc291
cmNlLndyYXBUOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLm1hZ0ZpbHRlciA9
IHNvdXJjZS5tYWdGaWx0ZXI7CisgICAgICAgICAgICB0aGlzLm1pbkZpbHRlciA9IHNvdXJjZS5t
aW5GaWx0ZXI7CiAKLSAgICAgICAgICAgIHZhciBkZXRJbnYgPSAxIC8gZGV0OworICAgICAgICAg
ICAgdGhpcy5hbmlzb3Ryb3B5ID0gc291cmNlLmFuaXNvdHJvcHk7CiAKLSAgICAgICAgICAgIHRl
WyAwIF0gPSB0MTEgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgMSBdID0gKCBuMjQgKiBuMzMg
KiBuNDEgLSBuMjMgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzEgKiBuNDMgKyBuMjEgKiBuMzQgKiBu
NDMgKyBuMjMgKiBuMzEgKiBuNDQgLSBuMjEgKiBuMzMgKiBuNDQgKSAqIGRldEludjsKLSAgICAg
ICAgICAgIHRlWyAyIF0gPSAoIG4yMiAqIG4zNCAqIG40MSAtIG4yNCAqIG4zMiAqIG40MSArIG4y
NCAqIG4zMSAqIG40MiAtIG4yMSAqIG4zNCAqIG40MiAtIG4yMiAqIG4zMSAqIG40NCArIG4yMSAq
IG4zMiAqIG40NCApICogZGV0SW52OwotICAgICAgICAgICAgdGVbIDMgXSA9ICggbjIzICogbjMy
ICogbjQxIC0gbjIyICogbjMzICogbjQxIC0gbjIzICogbjMxICogbjQyICsgbjIxICogbjMzICog
bjQyICsgbjIyICogbjMxICogbjQzIC0gbjIxICogbjMyICogbjQzICkgKiBkZXRJbnY7CisgICAg
ICAgICAgICB0aGlzLmZvcm1hdCA9IHNvdXJjZS5mb3JtYXQ7CisgICAgICAgICAgICB0aGlzLnR5
cGUgPSBzb3VyY2UudHlwZTsKIAotICAgICAgICAgICAgdGVbIDQgXSA9IHQxMiAqIGRldEludjsK
LSAgICAgICAgICAgIHRlWyA1IF0gPSAoIG4xMyAqIG4zNCAqIG40MSAtIG4xNCAqIG4zMyAqIG40
MSArIG4xNCAqIG4zMSAqIG40MyAtIG4xMSAqIG4zNCAqIG40MyAtIG4xMyAqIG4zMSAqIG40NCAr
IG4xMSAqIG4zMyAqIG40NCApICogZGV0SW52OwotICAgICAgICAgICAgdGVbIDYgXSA9ICggbjE0
ICogbjMyICogbjQxIC0gbjEyICogbjM0ICogbjQxIC0gbjE0ICogbjMxICogbjQyICsgbjExICog
bjM0ICogbjQyICsgbjEyICogbjMxICogbjQ0IC0gbjExICogbjMyICogbjQ0ICkgKiBkZXRJbnY7
Ci0gICAgICAgICAgICB0ZVsgNyBdID0gKCBuMTIgKiBuMzMgKiBuNDEgLSBuMTMgKiBuMzIgKiBu
NDEgKyBuMTMgKiBuMzEgKiBuNDIgLSBuMTEgKiBuMzMgKiBuNDIgLSBuMTIgKiBuMzEgKiBuNDMg
KyBuMTEgKiBuMzIgKiBuNDMgKSAqIGRldEludjsKKyAgICAgICAgICAgIHRoaXMub2Zmc2V0LmNv
cHkoIHNvdXJjZS5vZmZzZXQgKTsKKyAgICAgICAgICAgIHRoaXMucmVwZWF0LmNvcHkoIHNvdXJj
ZS5yZXBlYXQgKTsKKyAgICAgICAgICAgIHRoaXMuY2VudGVyLmNvcHkoIHNvdXJjZS5jZW50ZXIg
KTsKKyAgICAgICAgICAgIHRoaXMucm90YXRpb24gPSBzb3VyY2Uucm90YXRpb247CiAKLSAgICAg
ICAgICAgIHRlWyA4IF0gPSB0MTMgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgOSBdID0gKCBu
MTQgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjEgKiBuNDMgKyBuMTEg
KiBuMjQgKiBuNDMgKyBuMTMgKiBuMjEgKiBuNDQgLSBuMTEgKiBuMjMgKiBuNDQgKSAqIGRldElu
djsKLSAgICAgICAgICAgIHRlWyAxMCBdID0gKCBuMTIgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjIg
KiBuNDEgKyBuMTQgKiBuMjEgKiBuNDIgLSBuMTEgKiBuMjQgKiBuNDIgLSBuMTIgKiBuMjEgKiBu
NDQgKyBuMTEgKiBuMjIgKiBuNDQgKSAqIGRldEludjsKLSAgICAgICAgICAgIHRlWyAxMSBdID0g
KCBuMTMgKiBuMjIgKiBuNDEgLSBuMTIgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjEgKiBuNDIgKyBu
MTEgKiBuMjMgKiBuNDIgKyBuMTIgKiBuMjEgKiBuNDMgLSBuMTEgKiBuMjIgKiBuNDMgKSAqIGRl
dEludjsKKyAgICAgICAgICAgIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhB
dXRvVXBkYXRlOworICAgICAgICAgICAgdGhpcy5tYXRyaXguY29weSggc291cmNlLm1hdHJpeCAp
OwogCi0gICAgICAgICAgICB0ZVsgMTIgXSA9IHQxNCAqIGRldEludjsKLSAgICAgICAgICAgIHRl
WyAxMyBdID0gKCBuMTMgKiBuMjQgKiBuMzEgLSBuMTQgKiBuMjMgKiBuMzEgKyBuMTQgKiBuMjEg
KiBuMzMgLSBuMTEgKiBuMjQgKiBuMzMgLSBuMTMgKiBuMjEgKiBuMzQgKyBuMTEgKiBuMjMgKiBu
MzQgKSAqIGRldEludjsKLSAgICAgICAgICAgIHRlWyAxNCBdID0gKCBuMTQgKiBuMjIgKiBuMzEg
LSBuMTIgKiBuMjQgKiBuMzEgLSBuMTQgKiBuMjEgKiBuMzIgKyBuMTEgKiBuMjQgKiBuMzIgKyBu
MTIgKiBuMjEgKiBuMzQgLSBuMTEgKiBuMjIgKiBuMzQgKSAqIGRldEludjsKLSAgICAgICAgICAg
IHRlWyAxNSBdID0gKCBuMTIgKiBuMjMgKiBuMzEgLSBuMTMgKiBuMjIgKiBuMzEgKyBuMTMgKiBu
MjEgKiBuMzIgLSBuMTEgKiBuMjMgKiBuMzIgLSBuMTIgKiBuMjEgKiBuMzMgKyBuMTEgKiBuMjIg
KiBuMzMgKSAqIGRldEludjsKKyAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gc291
cmNlLmdlbmVyYXRlTWlwbWFwczsKKyAgICAgICAgICAgIHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9
IHNvdXJjZS5wcmVtdWx0aXBseUFscGhhOworICAgICAgICAgICAgdGhpcy5mbGlwWSA9IHNvdXJj
ZS5mbGlwWTsKKyAgICAgICAgICAgIHRoaXMudW5wYWNrQWxpZ25tZW50ID0gc291cmNlLnVucGFj
a0FsaWdubWVudDsKKyAgICAgICAgICAgIHRoaXMuZW5jb2RpbmcgPSBzb3VyY2UuZW5jb2Rpbmc7
CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2Nh
bGU6IGZ1bmN0aW9uICggdiApIHsKLQotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50
czsKLSAgICAgICAgICAgIHZhciB4ID0gdi54LCB5ID0gdi55LCB6ID0gdi56OworICAgICAgICB0
b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKIAotICAgICAgICAgICAgdGVbIDAgXSAqPSB4OyB0
ZVsgNCBdICo9IHk7IHRlWyA4IF0gKj0gejsKLSAgICAgICAgICAgIHRlWyAxIF0gKj0geDsgdGVb
IDUgXSAqPSB5OyB0ZVsgOSBdICo9IHo7Ci0gICAgICAgICAgICB0ZVsgMiBdICo9IHg7IHRlWyA2
IF0gKj0geTsgdGVbIDEwIF0gKj0gejsKLSAgICAgICAgICAgIHRlWyAzIF0gKj0geDsgdGVbIDcg
XSAqPSB5OyB0ZVsgMTEgXSAqPSB6OworICAgICAgICAgICAgdmFyIGlzUm9vdE9iamVjdCA9ICgg
bWV0YSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXRhID09PSAnc3RyaW5nJyApOwogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIGlmICggISBpc1Jvb3RPYmplY3QgJiYg
bWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0gIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgIHJldHVybiBtZXRhLnRleHR1cmVzWyB0aGlzLnV1aWQgXTsKIAot
ICAgICAgICBnZXRNYXhTY2FsZU9uQXhpczogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOworICAgICAgICAgICAgZnVuY3Rp
b24gZ2V0RGF0YVVSTCggaW1hZ2UgKSB7CiAKLSAgICAgICAgICAgIHZhciBzY2FsZVhTcSA9IHRl
WyAwIF0gKiB0ZVsgMCBdICsgdGVbIDEgXSAqIHRlWyAxIF0gKyB0ZVsgMiBdICogdGVbIDIgXTsK
LSAgICAgICAgICAgIHZhciBzY2FsZVlTcSA9IHRlWyA0IF0gKiB0ZVsgNCBdICsgdGVbIDUgXSAq
IHRlWyA1IF0gKyB0ZVsgNiBdICogdGVbIDYgXTsKLSAgICAgICAgICAgIHZhciBzY2FsZVpTcSA9
IHRlWyA4IF0gKiB0ZVsgOCBdICsgdGVbIDkgXSAqIHRlWyA5IF0gKyB0ZVsgMTAgXSAqIHRlWyAx
MCBdOworICAgICAgICAgICAgICAgIHZhciBjYW52YXM7CiAKLSAgICAgICAgICAgIHJldHVybiBN
YXRoLnNxcnQoIE1hdGgubWF4KCBzY2FsZVhTcSwgc2NhbGVZU3EsIHNjYWxlWlNxICkgKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgKSB7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gaW1hZ2U7CiAKLSAg
ICAgICAgbWFrZVRyYW5zbGF0aW9uOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgdGhpcy5zZXQoCisgICAgICAgICAgICAgICAg
ICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwnLCAnY2FudmFzJyApOworICAgICAgICAgICAgICAgICAgICBjYW52YXMud2lk
dGggPSBpbWFnZS53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGlt
YWdlLmhlaWdodDsKIAotICAgICAgICAgICAgICAgIDEsIDAsIDAsIHgsCi0gICAgICAgICAgICAg
ICAgMCwgMSwgMCwgeSwKLSAgICAgICAgICAgICAgICAwLCAwLCAxLCB6LAotICAgICAgICAgICAg
ICAgIDAsIDAsIDAsIDEKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMu
Z2V0Q29udGV4dCggJzJkJyApOwogCi0gICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhICkgewogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHV0SW1hZ2VEYXRhKCBp
bWFnZSwgMCwgMCApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgbWFrZVJvdGF0aW9uWDogZnVuY3Rpb24gKCB0aGV0YSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwgaW1hZ2Uud2lk
dGgsIGltYWdlLmhlaWdodCApOwogCi0gICAgICAgICAgICB2YXIgYyA9IE1hdGguY29zKCB0aGV0
YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdGhpcy5zZXQoCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
MSwgMCwgIDAsIDAsCi0gICAgICAgICAgICAgICAgMCwgYywgLSBzLCAwLAotICAgICAgICAgICAg
ICAgIDAsIHMsICBjLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsICAwLCAxCisgICAgICAgICAg
ICAgICAgaWYgKCBjYW52YXMud2lkdGggPiAyMDQ4IHx8IGNhbnZhcy5oZWlnaHQgPiAyMDQ4ICkg
ewogCi0gICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzLnRv
RGF0YVVSTCggJ2ltYWdlL2pwZWcnLCAwLjYgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCggJ2ltYWdlL3BuZycgKTsKIAotICAgICAgICBt
YWtlUm90YXRpb25ZOiBmdW5jdGlvbiAoIHRoZXRhICkgeworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKSwgcyA9IE1hdGguc2luKCB0aGV0
YSApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLnNldCgKKyAgICAgICAgICAg
IHZhciBvdXRwdXQgPSB7CiAKLSAgICAgICAgICAgICAgICAgYywgMCwgcywgMCwKLSAgICAgICAg
ICAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgICAgICAgICAtIHMsIDAsIGMsIDAsCi0gICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDEKKyAgICAgICAgICAgICAgICBtZXRhZGF0YTogeworICAg
ICAgICAgICAgICAgICAgICB2ZXJzaW9uOiA0LjUsCisgICAgICAgICAgICAgICAgICAgIHR5cGU6
ICdUZXh0dXJlJywKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiAnVGV4dHVyZS50b0pT
T04nCisgICAgICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICB1dWlkOiB0aGlzLnV1aWQsCisgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLAogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICBtYXBwaW5nOiB0aGlzLm1h
cHBpbmcsCiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByZXBlYXQ6IFsgdGhpcy5yZXBl
YXQueCwgdGhpcy5yZXBlYXQueSBdLAorICAgICAgICAgICAgICAgIG9mZnNldDogWyB0aGlzLm9m
ZnNldC54LCB0aGlzLm9mZnNldC55IF0sCisgICAgICAgICAgICAgICAgY2VudGVyOiBbIHRoaXMu
Y2VudGVyLngsIHRoaXMuY2VudGVyLnkgXSwKKyAgICAgICAgICAgICAgICByb3RhdGlvbjogdGhp
cy5yb3RhdGlvbiwKIAotICAgICAgICBtYWtlUm90YXRpb25aOiBmdW5jdGlvbiAoIHRoZXRhICkg
eworICAgICAgICAgICAgICAgIHdyYXA6IFsgdGhpcy53cmFwUywgdGhpcy53cmFwVCBdLAogCi0g
ICAgICAgICAgICB2YXIgYyA9IE1hdGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRh
ICk7CisgICAgICAgICAgICAgICAgZm9ybWF0OiB0aGlzLmZvcm1hdCwKKyAgICAgICAgICAgICAg
ICBtaW5GaWx0ZXI6IHRoaXMubWluRmlsdGVyLAorICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjog
dGhpcy5tYWdGaWx0ZXIsCisgICAgICAgICAgICAgICAgYW5pc290cm9weTogdGhpcy5hbmlzb3Ry
b3B5LAogCi0gICAgICAgICAgICB0aGlzLnNldCgKKyAgICAgICAgICAgICAgICBmbGlwWTogdGhp
cy5mbGlwWQogCi0gICAgICAgICAgICAgICAgYywgLSBzLCAwLCAwLAotICAgICAgICAgICAgICAg
IHMsICBjLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsICAwLCAxLCAwLAotICAgICAgICAgICAg
ICAgIDAsICAwLCAwLCAxCisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICApOworICAgICAg
ICAgICAgaWYgKCB0aGlzLmltYWdlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdG8gVEhSRUUuSW1hZ2UK
IAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuaW1hZ2U7CiAK
LSAgICAgICAgbWFrZVJvdGF0aW9uQXhpczogZnVuY3Rpb24gKCBheGlzLCBhbmdsZSApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIGltYWdlLnV1aWQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgLy8gQmFzZWQgb24gaHR0cDovL3d3dy5nYW1lZGV2Lm5ldC9yZWZlcmVuY2UvYXJ0aWNs
ZXMvYXJ0aWNsZTExOTkuYXNwCisgICAgICAgICAgICAgICAgICAgIGltYWdlLnV1aWQgPSBfTWF0
aC5nZW5lcmF0ZVVVSUQoKTsgLy8gVUdICiAKLSAgICAgICAgICAgIHZhciBjID0gTWF0aC5jb3Mo
IGFuZ2xlICk7Ci0gICAgICAgICAgICB2YXIgcyA9IE1hdGguc2luKCBhbmdsZSApOwotICAgICAg
ICAgICAgdmFyIHQgPSAxIC0gYzsKLSAgICAgICAgICAgIHZhciB4ID0gYXhpcy54LCB5ID0gYXhp
cy55LCB6ID0gYXhpcy56OwotICAgICAgICAgICAgdmFyIHR4ID0gdCAqIHgsIHR5ID0gdCAqIHk7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLnNldCgKKyAgICAgICAgICAg
ICAgICBpZiAoICEgaXNSb290T2JqZWN0ICYmIG1ldGEuaW1hZ2VzWyBpbWFnZS51dWlkIF0gPT09
IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHR4ICogeCArIGMsIHR4ICogeSAtIHMg
KiB6LCB0eCAqIHogKyBzICogeSwgMCwKLSAgICAgICAgICAgICAgICB0eCAqIHkgKyBzICogeiwg
dHkgKiB5ICsgYywgdHkgKiB6IC0gcyAqIHgsIDAsCi0gICAgICAgICAgICAgICAgdHggKiB6IC0g
cyAqIHksIHR5ICogeiArIHMgKiB4LCB0ICogeiAqIHogKyBjLCAwLAotICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDEKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybDsKIAotICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBpbWFnZSApICkgewog
Ci0gICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
cm9jZXNzIGFycmF5IG9mIGltYWdlcyBlLmcuIEN1YmVUZXh0dXJlCiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVybCA9IFtdOwogCi0gICAgICAgIG1ha2VTY2FsZTogZnVu
Y3Rpb24gKCB4LCB5LCB6ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBsID0gaW1hZ2UubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgdGhp
cy5zZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLnB1c2goIGdldERhdGFVUkwo
IGltYWdlWyBpIF0gKSApOwogCi0gICAgICAgICAgICAgICAgeCwgMCwgMCwgMCwKLSAgICAgICAg
ICAgICAgICAwLCB5LCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIHosIDAsCi0gICAgICAg
ICAgICAgICAgMCwgMCwgMCwgMQorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3Mgc2luZ2xlIGltYWdl
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGdldERhdGFVUkwo
IGltYWdlICk7CiAKLSAgICAgICAgbWFrZVNoZWFyOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7Cisg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5zZXQoCisgICAgICAgICAg
ICAgICAgICAgIG1ldGEuaW1hZ2VzWyBpbWFnZS51dWlkIF0gPSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1dWlkOiBpbWFnZS51dWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1
cmwKKyAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIDEsIHksIHosIDAs
Ci0gICAgICAgICAgICAgICAgeCwgMSwgeiwgMCwKLSAgICAgICAgICAgICAgICB4LCB5LCAxLCAw
LAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDEKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgb3V0cHV0LmltYWdlID0gaW1hZ2UudXVpZDsKIAot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgIGlmICggISBpc1Jvb3RPYmplY3QgKSB7CiAKLSAgICAgICAgY29tcG9zZTogZnVu
Y3Rpb24gKCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUgKSB7CisgICAgICAgICAgICAgICAg
bWV0YS50ZXh0dXJlc1sgdGhpcy51dWlkIF0gPSBvdXRwdXQ7CiAKLSAgICAgICAgICAgIHRoaXMu
bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTsKLSAgICAgICAgICAgIHRo
aXMuc2NhbGUoIHNjYWxlICk7Ci0gICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uKCBwb3NpdGlv
biApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIHJldHVybiBvdXRwdXQ7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkZWNvbXBvc2U6IGZ1
bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7Ci0g
ICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgZGlzcG9zZTog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVjb21wb3NlKCBw
b3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUgKSB7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKIAotICAgICAgICAgICAgICAgIHZhciB0ZSA9
IHRoaXMuZWxlbWVudHM7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB2YXIgc3ggPSB2
ZWN0b3Iuc2V0KCB0ZVsgMCBdLCB0ZVsgMSBdLCB0ZVsgMiBdICkubGVuZ3RoKCk7Ci0gICAgICAg
ICAgICAgICAgdmFyIHN5ID0gdmVjdG9yLnNldCggdGVbIDQgXSwgdGVbIDUgXSwgdGVbIDYgXSAp
Lmxlbmd0aCgpOwotICAgICAgICAgICAgICAgIHZhciBzeiA9IHZlY3Rvci5zZXQoIHRlWyA4IF0s
IHRlWyA5IF0sIHRlWyAxMCBdICkubGVuZ3RoKCk7CisgICAgICAgIHRyYW5zZm9ybVV2OiBmdW5j
dGlvbiAoIHV2ICkgewogCi0gICAgICAgICAgICAgICAgLy8gaWYgZGV0ZXJtaW5lIGlzIG5lZ2F0
aXZlLCB3ZSBuZWVkIHRvIGludmVydCBvbmUgc2NhbGUKLSAgICAgICAgICAgICAgICB2YXIgZGV0
ID0gdGhpcy5kZXRlcm1pbmFudCgpOwotICAgICAgICAgICAgICAgIGlmICggZGV0IDwgMCApIHN4
ID0gLSBzeDsKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXBwaW5nICE9PSBVVk1hcHBpbmcgKSBy
ZXR1cm47CiAKLSAgICAgICAgICAgICAgICBwb3NpdGlvbi54ID0gdGVbIDEyIF07Ci0gICAgICAg
ICAgICAgICAgcG9zaXRpb24ueSA9IHRlWyAxMyBdOwotICAgICAgICAgICAgICAgIHBvc2l0aW9u
LnogPSB0ZVsgMTQgXTsKKyAgICAgICAgICAgIHV2LmFwcGx5TWF0cml4MyggdGhpcy5tYXRyaXgg
KTsKIAotICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRoZSByb3RhdGlvbiBwYXJ0Ci0gICAgICAg
ICAgICAgICAgbWF0cml4LmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgIGlmICggdXYueCA8IDAg
fHwgdXYueCA+IDEgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgaW52U1ggPSAxIC8gc3g7Ci0g
ICAgICAgICAgICAgICAgdmFyIGludlNZID0gMSAvIHN5OwotICAgICAgICAgICAgICAgIHZhciBp
bnZTWiA9IDEgLyBzejsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLndyYXBTICkgewog
Ci0gICAgICAgICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyAwIF0gKj0gaW52U1g7Ci0gICAgICAg
ICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyAxIF0gKj0gaW52U1g7Ci0gICAgICAgICAgICAgICAg
bWF0cml4LmVsZW1lbnRzWyAyIF0gKj0gaW52U1g7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
UmVwZWF0V3JhcHBpbmc6CiAKLSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDQgXSAq
PSBpbnZTWTsKLSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDUgXSAqPSBpbnZTWTsK
LSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDYgXSAqPSBpbnZTWTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHV2LnggPSB1di54IC0gTWF0aC5mbG9vciggdXYueCApOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVu
dHNbIDggXSAqPSBpbnZTWjsKLSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDkgXSAq
PSBpbnZTWjsKLSAgICAgICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDEwIF0gKj0gaW52U1o7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xhbXBUb0VkZ2VXcmFwcGluZzoKIAotICAgICAg
ICAgICAgICAgIHF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBtYXRyaXggKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHV2LnggPSB1di54IDwgMCA/IDAgOiAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBzY2FsZS54ID0gc3g7Ci0g
ICAgICAgICAgICAgICAgc2NhbGUueSA9IHN5OwotICAgICAgICAgICAgICAgIHNjYWxlLnogPSBz
ejsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOgogCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IE1hdGguYWJzKCBNYXRoLmZsb29yKCB1di54ICkgJSAyICkgPT09IDEgKSB7CiAKLSAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXYueCA9IE1hdGguY2VpbCggdXYu
eCApIC0gdXYueDsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogCi0gICAgICAgIG1ha2VQZXJzcGVjdGl2ZTogZnVuY3Rpb24gKCBsZWZ0LCByaWdodCwg
dG9wLCBib3R0b20sIG5lYXIsIGZhciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
di54ID0gdXYueCAtIE1hdGguZmxvb3IoIHV2LnggKTsKIAotICAgICAgICAgICAgaWYgKCBmYXIg
PT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFz
IGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLicgKTsKKyAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVt
ZW50czsKLSAgICAgICAgICAgIHZhciB4ID0gMiAqIG5lYXIgLyAoIHJpZ2h0IC0gbGVmdCApOwot
ICAgICAgICAgICAgdmFyIHkgPSAyICogbmVhciAvICggdG9wIC0gYm90dG9tICk7CisgICAgICAg
ICAgICBpZiAoIHV2LnkgPCAwIHx8IHV2LnkgPiAxICkgewogCi0gICAgICAgICAgICB2YXIgYSA9
ICggcmlnaHQgKyBsZWZ0ICkgLyAoIHJpZ2h0IC0gbGVmdCApOwotICAgICAgICAgICAgdmFyIGIg
PSAoIHRvcCArIGJvdHRvbSApIC8gKCB0b3AgLSBib3R0b20gKTsKLSAgICAgICAgICAgIHZhciBj
ID0gLSAoIGZhciArIG5lYXIgKSAvICggZmFyIC0gbmVhciApOwotICAgICAgICAgICAgdmFyIGQg
PSAtIDIgKiBmYXIgKiBuZWFyIC8gKCBmYXIgLSBuZWFyICk7CisgICAgICAgICAgICAgICAgc3dp
dGNoICggdGhpcy53cmFwVCApIHsKIAotICAgICAgICAgICAgdGVbIDAgXSA9IHg7ICAgIHRlWyA0
IF0gPSAwOyAgICB0ZVsgOCBdID0gYTsgICAgdGVbIDEyIF0gPSAwOwotICAgICAgICAgICAgdGVb
IDEgXSA9IDA7ICAgIHRlWyA1IF0gPSB5OyAgICB0ZVsgOSBdID0gYjsgICAgdGVbIDEzIF0gPSAw
OwotICAgICAgICAgICAgdGVbIDIgXSA9IDA7ICAgIHRlWyA2IF0gPSAwOyAgICB0ZVsgMTAgXSA9
IGM7ICAgdGVbIDE0IF0gPSBkOwotICAgICAgICAgICAgdGVbIDMgXSA9IDA7ICAgIHRlWyA3IF0g
PSAwOyAgICB0ZVsgMTEgXSA9IC0gMTsgdGVbIDE1IF0gPSAwOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIFJlcGVhdFdyYXBwaW5nOgogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHV2LnkgPSB1di55IC0gTWF0aC5mbG9vciggdXYueSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDbGFtcFRvRWRnZVdyYXBwaW5nOgogCi0gICAgICAgIG1ha2VPcnRob2dyYXBo
aWM6IGZ1bmN0aW9uICggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1di55ID0gdXYueSA8IDAgPyAwIDogMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1l
bnRzOwotICAgICAgICAgICAgdmFyIHcgPSAxLjAgLyAoIHJpZ2h0IC0gbGVmdCApOwotICAgICAg
ICAgICAgdmFyIGggPSAxLjAgLyAoIHRvcCAtIGJvdHRvbSApOwotICAgICAgICAgICAgdmFyIHAg
PSAxLjAgLyAoIGZhciAtIG5lYXIgKTsKLQotICAgICAgICAgICAgdmFyIHggPSAoIHJpZ2h0ICsg
bGVmdCApICogdzsKLSAgICAgICAgICAgIHZhciB5ID0gKCB0b3AgKyBib3R0b20gKSAqIGg7Ci0g
ICAgICAgICAgICB2YXIgeiA9ICggZmFyICsgbmVhciApICogcDsKLQotICAgICAgICAgICAgdGVb
IDAgXSA9IDIgKiB3OyAgICB0ZVsgNCBdID0gMDsgICAgdGVbIDggXSA9IDA7ICAgIHRlWyAxMiBd
ID0gLSB4OwotICAgICAgICAgICAgdGVbIDEgXSA9IDA7ICAgIHRlWyA1IF0gPSAyICogaDsgICAg
dGVbIDkgXSA9IDA7ICAgIHRlWyAxMyBdID0gLSB5OwotICAgICAgICAgICAgdGVbIDIgXSA9IDA7
ICAgIHRlWyA2IF0gPSAwOyAgICB0ZVsgMTAgXSA9IC0gMiAqIHA7IHRlWyAxNCBdID0gLSB6Owot
ICAgICAgICAgICAgdGVbIDMgXSA9IDA7ICAgIHRlWyA3IF0gPSAwOyAgICB0ZVsgMTEgXSA9IDA7
ICAgdGVbIDE1IF0gPSAxOworICAgICAgICAgICAgICAgICAgICBjYXNlIE1pcnJvcmVkUmVwZWF0
V3JhcHBpbmc6CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBNYXRoLmFicyggTWF0aC5mbG9vciggdXYueSApICUgMiApID09PSAxICkgewog
Ci0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXYueSA9IE1hdGguY2Vp
bCggdXYueSApIC0gdXYueTsKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggbWF0cml4ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgdmFyIHRl
ID0gdGhpcy5lbGVtZW50czsKLSAgICAgICAgICAgIHZhciBtZSA9IG1hdHJpeC5lbGVtZW50czsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1di55ID0gdXYueSAtIE1hdGguZmxvb3IoIHV2
LnkgKTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgMTY7IGkgKysgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgICAgIGlmICggdGVbIGkgXSAhPT0gbWVbIGkgXSApIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICgg
YXJyYXksIG9mZnNldCApIHsKLQotICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5l
ZCApIG9mZnNldCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDE2OyBp
ICsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmZsaXBZICkgewogCi0gICAgICAgICAgICAg
ICAgdGhpcy5lbGVtZW50c1sgaSBdID0gYXJyYXlbIGkgKyBvZmZzZXQgXTsKKyAgICAgICAgICAg
ICAgICB1di55ID0gMSAtIHV2Lnk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFy
cmF5LCBvZmZzZXQgKSB7Ci0KLSAgICAgICAgICAgIGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCAp
IGFycmF5ID0gW107Ci0gICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zm
c2V0ID0gMDsKLQotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKLQotICAgICAg
ICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGVbIDAgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZz
ZXQgKyAxIF0gPSB0ZVsgMSBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9IHRl
WyAyIF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGVbIDMgXTsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNCBdID0gdGVbIDQgXTsKLSAgICAg
ICAgICAgIGFycmF5WyBvZmZzZXQgKyA1IF0gPSB0ZVsgNSBdOwotICAgICAgICAgICAgYXJyYXlb
IG9mZnNldCArIDYgXSA9IHRlWyA2IF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNyBd
ID0gdGVbIDcgXTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA4IF0g
PSB0ZVsgOCBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDkgXSA9IHRlWyA5IF07Ci0g
ICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTAgXSA9IHRlWyAxMCBdOwotICAgICAgICAgICAg
YXJyYXlbIG9mZnNldCArIDExIF0gPSB0ZVsgMTEgXTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoIFRleHR1cmUucHJvdG90eXBlLCAibmVlZHNVcGRhdGUiLCB7CiAKLSAgICAgICAgICAgIGFy
cmF5WyBvZmZzZXQgKyAxMiBdID0gdGVbIDEyIF07Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0
ICsgMTMgXSA9IHRlWyAxMyBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDE0IF0gPSB0
ZVsgMTQgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAxNSBdID0gdGVbIDE1IF07Cisg
ICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdHJ1ZSApIHRoaXMudmVyc2lvbiArKzsK
IAogICAgICAgICB9CiAKICAgICB9ICk7CiAKICAgICAvKioKLSAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqIEBhdXRob3Igc3VwZXJlZ2di
ZXJ0IC8gaHR0cDovL3d3dy5wYXVsYnJ1bnQuY28udWsvCisgICAgICogQGF1dGhvciBwaGlsb2di
IC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy8KKyAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdl
ciAvIGh0dHA6Ly9nb21vLnNlLworICAgICAqIEBhdXRob3IgZWdyYWV0aGVyIC8gaHR0cDovL2Vn
cmFldGhlci5jb20vCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIu
Y29tL1dlc3RMYW5nbGV5CiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBEYXRhVGV4dHVyZSggZGF0
YSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1h
Z0ZpbHRlciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApIHsKLQotICAgICAgICBU
ZXh0dXJlLmNhbGwoIHRoaXMsIG51bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVy
LCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKTsKLQotICAg
ICAgICB0aGlzLmltYWdlID0geyBkYXRhOiBkYXRhLCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVp
Z2h0IH07Ci0KLSAgICAgICAgdGhpcy5tYWdGaWx0ZXIgPSBtYWdGaWx0ZXIgIT09IHVuZGVmaW5l
ZCA/IG1hZ0ZpbHRlciA6IE5lYXJlc3RGaWx0ZXI7Ci0gICAgICAgIHRoaXMubWluRmlsdGVyID0g
bWluRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtaW5GaWx0ZXIgOiBOZWFyZXN0RmlsdGVyOworICAg
IGZ1bmN0aW9uIFZlY3RvcjQoIHgsIHksIHosIHcgKSB7CiAKLSAgICAgICAgdGhpcy5nZW5lcmF0
ZU1pcG1hcHMgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5mbGlwWSA9IGZhbHNlOwotICAgICAgICB0
aGlzLnVucGFja0FsaWdubWVudCA9IDE7CisgICAgICAgIHRoaXMueCA9IHggfHwgMDsKKyAgICAg
ICAgdGhpcy55ID0geSB8fCAwOworICAgICAgICB0aGlzLnogPSB6IHx8IDA7CisgICAgICAgIHRo
aXMudyA9ICggdyAhPT0gdW5kZWZpbmVkICkgPyB3IDogMTsKIAogICAgIH0KIAotICAgIERhdGFU
ZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRleHR1cmUucHJvdG90eXBlICk7Ci0g
ICAgRGF0YVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGF0YVRleHR1cmU7CisgICAg
T2JqZWN0LmFzc2lnbiggVmVjdG9yNC5wcm90b3R5cGUsIHsKIAotICAgIERhdGFUZXh0dXJlLnBy
b3RvdHlwZS5pc0RhdGFUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgaXNWZWN0b3I0OiB0cnVlLAog
Ci0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAg
ICAgKi8KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHgsIHksIHosIHcgKSB7CiAKLSAgICBmdW5j
dGlvbiBDdWJlVGV4dHVyZSggaW1hZ2VzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRl
ciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nICkgeworICAg
ICAgICAgICAgdGhpcy54ID0geDsKKyAgICAgICAgICAgIHRoaXMueSA9IHk7CisgICAgICAgICAg
ICB0aGlzLnogPSB6OworICAgICAgICAgICAgdGhpcy53ID0gdzsKIAotICAgICAgICBpbWFnZXMg
PSBpbWFnZXMgIT09IHVuZGVmaW5lZCA/IGltYWdlcyA6IFtdOwotICAgICAgICBtYXBwaW5nID0g
bWFwcGluZyAhPT0gdW5kZWZpbmVkID8gbWFwcGluZyA6IEN1YmVSZWZsZWN0aW9uTWFwcGluZzsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIFRleHR1cmUuY2FsbCggdGhpcywg
aW1hZ2VzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3Jt
YXQsIHR5cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nICk7CisgICAgICAgIH0sCiAKLSAgICAgICAg
dGhpcy5mbGlwWSA9IGZhbHNlOworICAgICAgICBzZXRTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFy
ICkgewogCi0gICAgfQorICAgICAgICAgICAgdGhpcy54ID0gc2NhbGFyOworICAgICAgICAgICAg
dGhpcy55ID0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy56ID0gc2NhbGFyOworICAgICAgICAg
ICAgdGhpcy53ID0gc2NhbGFyOwogCi0gICAgQ3ViZVRleHR1cmUucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZSggVGV4dHVyZS5wcm90b3R5cGUgKTsKLSAgICBDdWJlVGV4dHVyZS5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBDdWJlVGV4dHVyZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgQ3ViZVRleHR1cmUucHJvdG90eXBlLmlzQ3ViZVRleHR1cmUgPSB0cnVlOworICAgICAgICB9
LAogCi0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBDdWJlVGV4dHVyZS5wcm90b3R5cGUsICdp
bWFnZXMnLCB7CisgICAgICAgIHNldFg6IGZ1bmN0aW9uICggeCApIHsKIAotICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMueCA9IHg7CiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmltYWdlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwK
IAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIHNldFk6IGZ1bmN0
aW9uICggeSApIHsKIAotICAgICAgICAgICAgdGhpcy5pbWFnZSA9IHZhbHVlOworICAgICAgICAg
ICAgdGhpcy55ID0geTsKIAotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgIH0gKTsKKyAgICAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgdHNjaHcKLSAg
ICAgKgotICAgICAqIFVuaWZvcm1zIG9mIGEgcHJvZ3JhbS4KLSAgICAgKiBUaG9zZSBmb3JtIGEg
dHJlZSBzdHJ1Y3R1cmUgd2l0aCBhIHNwZWNpYWwgdG9wLWxldmVsIGNvbnRhaW5lciBmb3IgdGhl
IHJvb3QsCi0gICAgICogd2hpY2ggeW91IGdldCBieSBjYWxsaW5nICduZXcgV2ViR0xVbmlmb3Jt
cyggZ2wsIHByb2dyYW0sIHJlbmRlcmVyICknLgotICAgICAqCi0gICAgICoKLSAgICAgKiBQcm9w
ZXJ0aWVzIG9mIGlubmVyIG5vZGVzIGluY2x1ZGluZyB0aGUgdG9wLWxldmVsIGNvbnRhaW5lcjoK
LSAgICAgKgotICAgICAqIC5zZXEgLSBhcnJheSBvZiBuZXN0ZWQgdW5pZm9ybXMKLSAgICAgKiAu
bWFwIC0gbmVzdGVkIHVuaWZvcm1zIGJ5IG5hbWUKLSAgICAgKgotICAgICAqCi0gICAgICogTWV0
aG9kcyBvZiBhbGwgbm9kZXMgZXhjZXB0IHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyOgotICAgICAq
Ci0gICAgICogLnNldFZhbHVlKCBnbCwgdmFsdWUsIFtyZW5kZXJlcl0gKQotICAgICAqCi0gICAg
ICogICAgICB1cGxvYWRzIGEgdW5pZm9ybSB2YWx1ZShzKQotICAgICAqICAgICAgdGhlICdyZW5k
ZXJlcicgcGFyYW1ldGVyIGlzIG5lZWRlZCBmb3Igc2FtcGxlciB1bmlmb3JtcwotICAgICAqCi0g
ICAgICoKLSAgICAgKiBTdGF0aWMgbWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAo
cmVuZGVyZXIgZmFjdG9yaXphdGlvbnMpOgotICAgICAqCi0gICAgICogLnVwbG9hZCggZ2wsIHNl
cSwgdmFsdWVzLCByZW5kZXJlciApCi0gICAgICoKLSAgICAgKiAgICAgIHNldHMgdW5pZm9ybXMg
aW4gJ3NlcScgdG8gJ3ZhbHVlc1tpZF0udmFsdWUnCi0gICAgICoKLSAgICAgKiAuc2VxV2l0aFZh
bHVlKCBzZXEsIHZhbHVlcyApIDogZmlsdGVyZWRTZXEKLSAgICAgKgotICAgICAqICAgICAgZmls
dGVycyAnc2VxJyBlbnRyaWVzIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2YWx1ZXMKLSAg
ICAgKgotICAgICAqCi0gICAgICogTWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAo
cmVuZGVyZXIgZmFjdG9yaXphdGlvbnMpOgotICAgICAqCi0gICAgICogLnNldFZhbHVlKCBnbCwg
bmFtZSwgdmFsdWUgKQotICAgICAqCi0gICAgICogICAgICBzZXRzIHVuaWZvcm0gd2l0aCAgbmFt
ZSAnbmFtZScgdG8gJ3ZhbHVlJwotICAgICAqCi0gICAgICogLnNldCggZ2wsIG9iaiwgcHJvcCAp
Ci0gICAgICoKLSAgICAgKiAgICAgIHNldHMgdW5pZm9ybSBmcm9tIG9iamVjdCBhbmQgcHJvcGVy
dHkgd2l0aCBzYW1lIG5hbWUgdGhhbiB1bmlmb3JtCi0gICAgICoKLSAgICAgKiAuc2V0T3B0aW9u
YWwoIGdsLCBvYmosIHByb3AgKQotICAgICAqCi0gICAgICogICAgICBsaWtlIC5zZXQgZm9yIGFu
IG9wdGlvbmFsIHByb3BlcnR5IG9mIHRoZSBvYmplY3QKLSAgICAgKgotICAgICAqLworICAgICAg
ICBzZXRaOiBmdW5jdGlvbiAoIHogKSB7CiAKLSAgICB2YXIgZW1wdHlUZXh0dXJlID0gbmV3IFRl
eHR1cmUoKTsKLSAgICB2YXIgZW1wdHlDdWJlVGV4dHVyZSA9IG5ldyBDdWJlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgdGhpcy56ID0gejsKIAotICAgIC8vIC0tLSBCYXNlIGZvciBpbm5lciBub2Rl
cyAoaW5jbHVkaW5nIHRoZSByb290KSAtLS0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgZnVuY3Rpb24gVW5pZm9ybUNvbnRhaW5lcigpIHsKKyAgICAgICAgfSwKIAotICAgICAgICB0
aGlzLnNlcSA9IFtdOwotICAgICAgICB0aGlzLm1hcCA9IHt9OworICAgICAgICBzZXRXOiBmdW5j
dGlvbiAoIHcgKSB7CiAKLSAgICB9CisgICAgICAgICAgICB0aGlzLncgPSB3OwogCi0gICAgLy8g
LS0tIFV0aWxpdGllcyAtLS0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgLy8gQXJy
YXkgQ2FjaGVzIChwcm92aWRlIHR5cGVkIGFycmF5cyBmb3IgdGVtcG9yYXJ5IGJ5IHNpemUpCisg
ICAgICAgIH0sCiAKLSAgICB2YXIgYXJyYXlDYWNoZUYzMiA9IFtdOwotICAgIHZhciBhcnJheUNh
Y2hlSTMyID0gW107CisgICAgICAgIHNldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCwgdmFs
dWUgKSB7CiAKLSAgICAvLyBGbG9hdDMyQXJyYXkgY2FjaGVzIHVzZWQgZm9yIHVwbG9hZGluZyBN
YXRyaXggdW5pZm9ybXMKKyAgICAgICAgICAgIHN3aXRjaCAoIGluZGV4ICkgewogCi0gICAgdmFy
IG1hdDRhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoIDE2ICk7Ci0gICAgdmFyIG1hdDNhcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkoIDkgKTsKKyAgICAgICAgICAgICAgICBjYXNlIDA6IHRoaXMueCA9
IHZhbHVlOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHRoaXMueSA9IHZhbHVlOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDM6IHRoaXMudyA9IHZhbHVlOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcg
KyBpbmRleCApOwogCi0gICAgLy8gRmxhdHRlbmluZyBmb3IgYXJyYXlzIG9mIHZlY3RvcnMgYW5k
IG1hdHJpY2VzCisgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBmbGF0dGVuKCBhcnJheSwg
bkJsb2NrcywgYmxvY2tTaXplICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAg
ICAgdmFyIGZpcnN0RWxlbSA9IGFycmF5WyAwIF07CisgICAgICAgIH0sCiAKLSAgICAgICAgaWYg
KCBmaXJzdEVsZW0gPD0gMCB8fCBmaXJzdEVsZW0gPiAwICkgcmV0dXJuIGFycmF5OwotICAgICAg
ICAvLyB1bm9wdGltaXplZDogISBpc05hTiggZmlyc3RFbGVtICkKLSAgICAgICAgLy8gc2VlIGh0
dHA6Ly9qYWNrc29uZHVuc3Rhbi5jb20vYXJ0aWNsZXMvOTgzCisgICAgICAgIGdldENvbXBvbmVu
dDogZnVuY3Rpb24gKCBpbmRleCApIHsKIAotICAgICAgICB2YXIgbiA9IG5CbG9ja3MgKiBibG9j
a1NpemUsCi0gICAgICAgICAgICByID0gYXJyYXlDYWNoZUYzMlsgbiBdOworICAgICAgICAgICAg
c3dpdGNoICggaW5kZXggKSB7CiAKLSAgICAgICAgaWYgKCByID09PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gdGhpcy54OworICAgICAgICAgICAgICAgIGNh
c2UgMTogcmV0dXJuIHRoaXMueTsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiB0aGlz
Lno7CisgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gdGhpcy53OworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyAr
IGluZGV4ICk7CiAKLSAgICAgICAgICAgIHIgPSBuZXcgRmxvYXQzMkFycmF5KCBuICk7Ci0gICAg
ICAgICAgICBhcnJheUNhY2hlRjMyWyBuIF0gPSByOworICAgICAgICAgICAgfQogCi0gICAgICAg
IH0KKyAgICAgICAgfSwKIAotICAgICAgICBpZiAoIG5CbG9ja3MgIT09IDAgKSB7CisgICAgICAg
IGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGZpcnN0RWxlbS50b0FycmF5KCBy
LCAwICk7CisgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMueCwg
dGhpcy55LCB0aGlzLnosIHRoaXMudyApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDEs
IG9mZnNldCA9IDA7IGkgIT09IG5CbG9ja3M7ICsrIGkgKSB7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgICAgICBvZmZzZXQgKz0gYmxvY2tTaXplOwotICAgICAgICAgICAgICAgIGFycmF5WyBp
IF0udG9BcnJheSggciwgb2Zmc2V0ICk7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggdiApIHsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy54ID0gdi54OworICAgICAgICAgICAg
dGhpcy55ID0gdi55OworICAgICAgICAgICAgdGhpcy56ID0gdi56OworICAgICAgICAgICAgdGhp
cy53ID0gKCB2LncgIT09IHVuZGVmaW5lZCApID8gdi53IDogMTsKIAotICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgfSwKIAot
ICAgIH0KKyAgICAgICAgYWRkOiBmdW5jdGlvbiAoIHYsIHcgKSB7CiAKLSAgICAvLyBUZXh0dXJl
IHVuaXQgYWxsb2NhdGlvbgorICAgICAgICAgICAgaWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7CiAK
LSAgICBmdW5jdGlvbiBhbGxvY1RleFVuaXRzKCByZW5kZXJlciwgbiApIHsKKyAgICAgICAgICAg
ICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0
cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuJyApOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYsIHcgKTsKIAotICAgICAgICB2
YXIgciA9IGFycmF5Q2FjaGVJMzJbIG4gXTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAo
IHIgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRoaXMueCArPSB2Lng7CisgICAgICAg
ICAgICB0aGlzLnkgKz0gdi55OworICAgICAgICAgICAgdGhpcy56ICs9IHYuejsKKyAgICAgICAg
ICAgIHRoaXMudyArPSB2Lnc7CiAKLSAgICAgICAgICAgIHIgPSBuZXcgSW50MzJBcnJheSggbiAp
OwotICAgICAgICAgICAgYXJyYXlDYWNoZUkzMlsgbiBdID0gcjsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICBmb3IgKCB2YXIgaSA9
IDA7IGkgIT09IG47ICsrIGkgKQotICAgICAgICAgICAgclsgaSBdID0gcmVuZGVyZXIuYWxsb2NU
ZXh0dXJlVW5pdCgpOworICAgICAgICBhZGRTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsKIAotICAg
ICAgICByZXR1cm4gcjsKKyAgICAgICAgICAgIHRoaXMueCArPSBzOworICAgICAgICAgICAgdGhp
cy55ICs9IHM7CisgICAgICAgICAgICB0aGlzLnogKz0gczsKKyAgICAgICAgICAgIHRoaXMudyAr
PSBzOwogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAvLyAtLS0gU2V0
dGVycyAtLS0KKyAgICAgICAgfSwKIAotICAgIC8vIE5vdGU6IERlZmluaW5nIHRoZXNlIG1ldGhv
ZHMgZXh0ZXJuYWxseSwgYmVjYXVzZSB0aGV5IGNvbWUgaW4gYSBidW5jaAotICAgIC8vIGFuZCB0
aGlzIHdheSB0aGVpciBuYW1lcyBtaW5pZnkuCisgICAgICAgIGFkZFZlY3RvcnM6IGZ1bmN0aW9u
ICggYSwgYiApIHsKIAotICAgIC8vIFNpbmdsZSBzY2FsYXIKKyAgICAgICAgICAgIHRoaXMueCA9
IGEueCArIGIueDsKKyAgICAgICAgICAgIHRoaXMueSA9IGEueSArIGIueTsKKyAgICAgICAgICAg
IHRoaXMueiA9IGEueiArIGIuejsKKyAgICAgICAgICAgIHRoaXMudyA9IGEudyArIGIudzsKIAot
ICAgIGZ1bmN0aW9uIHNldFZhbHVlMWYoIGdsLCB2ICkgeyBnbC51bmlmb3JtMWYoIHRoaXMuYWRk
ciwgdiApOyB9Ci0gICAgZnVuY3Rpb24gc2V0VmFsdWUxaSggZ2wsIHYgKSB7IGdsLnVuaWZvcm0x
aSggdGhpcy5hZGRyLCB2ICk7IH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgLy8g
U2luZ2xlIGZsb2F0IHZlY3RvciAoZnJvbSBmbGF0IGFycmF5IG9yIFRIUkVFLlZlY3Rvck4pCisg
ICAgICAgIH0sCiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZTJmdiggZ2wsIHYgKSB7CisgICAgICAg
IGFkZFNjYWxlZFZlY3RvcjogZnVuY3Rpb24gKCB2LCBzICkgewogCi0gICAgICAgIGlmICggdi54
ID09PSB1bmRlZmluZWQgKSBnbC51bmlmb3JtMmZ2KCB0aGlzLmFkZHIsIHYgKTsKLSAgICAgICAg
ZWxzZSBnbC51bmlmb3JtMmYoIHRoaXMuYWRkciwgdi54LCB2LnkgKTsKKyAgICAgICAgICAgIHRo
aXMueCArPSB2LnggKiBzOworICAgICAgICAgICAgdGhpcy55ICs9IHYueSAqIHM7CisgICAgICAg
ICAgICB0aGlzLnogKz0gdi56ICogczsKKyAgICAgICAgICAgIHRoaXMudyArPSB2LncgKiBzOwog
Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1
ZTNmdiggZ2wsIHYgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgaWYgKCB2LnggIT09IHVuZGVm
aW5lZCApCi0gICAgICAgICAgICBnbC51bmlmb3JtM2YoIHRoaXMuYWRkciwgdi54LCB2LnksIHYu
eiApOwotICAgICAgICBlbHNlIGlmICggdi5yICE9PSB1bmRlZmluZWQgKQotICAgICAgICAgICAg
Z2wudW5pZm9ybTNmKCB0aGlzLmFkZHIsIHYuciwgdi5nLCB2LmIgKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZ2wudW5pZm9ybTNmdiggdGhpcy5hZGRyLCB2ICk7CisgICAgICAgIHN1Yjog
ZnVuY3Rpb24gKCB2LCB3ICkgewogCi0gICAgfQorICAgICAgICAgICAgaWYgKCB3ICE9PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZTRmdiggZ2wsIHYgKSB7CisgICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFj
Y2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7CiAKLSAgICAg
ICAgaWYgKCB2LnggPT09IHVuZGVmaW5lZCApIGdsLnVuaWZvcm00ZnYoIHRoaXMuYWRkciwgdiAp
OwotICAgICAgICBlbHNlIGdsLnVuaWZvcm00ZiggdGhpcy5hZGRyLCB2LngsIHYueSwgdi56LCB2
LncgKTsKKyAgICAgICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgICAgIHRoaXMueCAtPSB2Lng7
CisgICAgICAgICAgICB0aGlzLnkgLT0gdi55OworICAgICAgICAgICAgdGhpcy56IC09IHYuejsK
KyAgICAgICAgICAgIHRoaXMudyAtPSB2Lnc7CiAKLSAgICAvLyBTaW5nbGUgbWF0cml4IChmcm9t
IGZsYXQgYXJyYXkgb3IgTWF0cml4TikKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ZnVuY3Rpb24gc2V0VmFsdWUyZm0oIGdsLCB2ICkgeworICAgICAgICB9LAogCi0gICAgICAgIGds
LnVuaWZvcm1NYXRyaXgyZnYoIHRoaXMuYWRkciwgZmFsc2UsIHYuZWxlbWVudHMgfHwgdiApOwor
ICAgICAgICBzdWJTY2FsYXI6IGZ1bmN0aW9uICggcyApIHsKIAotICAgIH0KKyAgICAgICAgICAg
IHRoaXMueCAtPSBzOworICAgICAgICAgICAgdGhpcy55IC09IHM7CisgICAgICAgICAgICB0aGlz
LnogLT0gczsKKyAgICAgICAgICAgIHRoaXMudyAtPSBzOwogCi0gICAgZnVuY3Rpb24gc2V0VmFs
dWUzZm0oIGdsLCB2ICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgaWYg
KCB2LmVsZW1lbnRzID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
IGdsLnVuaWZvcm1NYXRyaXgzZnYoIHRoaXMuYWRkciwgZmFsc2UsIHYgKTsKKyAgICAgICAgc3Vi
VmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkgewogCi0gICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLnggPSBhLnggLSBiLng7CisgICAgICAgICAgICB0aGlzLnkgPSBhLnkgLSBiLnk7
CisgICAgICAgICAgICB0aGlzLnogPSBhLnogLSBiLno7CisgICAgICAgICAgICB0aGlzLncgPSBh
LncgLSBiLnc7CiAKLSAgICAgICAgICAgIG1hdDNhcnJheS5zZXQoIHYuZWxlbWVudHMgKTsKLSAg
ICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYoIHRoaXMuYWRkciwgZmFsc2UsIG1hdDNhcnJh
eSApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgfQorICAgICAgICB9LAog
Ci0gICAgfQorICAgICAgICBtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CiAK
LSAgICBmdW5jdGlvbiBzZXRWYWx1ZTRmbSggZ2wsIHYgKSB7CisgICAgICAgICAgICB0aGlzLngg
Kj0gc2NhbGFyOworICAgICAgICAgICAgdGhpcy55ICo9IHNjYWxhcjsKKyAgICAgICAgICAgIHRo
aXMueiAqPSBzY2FsYXI7CisgICAgICAgICAgICB0aGlzLncgKj0gc2NhbGFyOwogCi0gICAgICAg
IGlmICggdi5lbGVtZW50cyA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoIHRoaXMuYWRkciwgZmFsc2Us
IHYgKTsKKyAgICAgICAgfSwKIAotICAgICAgICB9IGVsc2UgeworICAgICAgICBhcHBseU1hdHJp
eDQ6IGZ1bmN0aW9uICggbSApIHsKIAotICAgICAgICAgICAgbWF0NGFycmF5LnNldCggdi5lbGVt
ZW50cyApOwotICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdiggdGhpcy5hZGRyLCBmYWxz
ZSwgbWF0NGFycmF5ICk7CisgICAgICAgICAgICB2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwg
eiA9IHRoaXMueiwgdyA9IHRoaXMudzsKKyAgICAgICAgICAgIHZhciBlID0gbS5lbGVtZW50czsK
IAotICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICog
eSArIGVbIDggXSAqIHogKyBlWyAxMiBdICogdzsKKyAgICAgICAgICAgIHRoaXMueSA9IGVbIDEg
XSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICogeiArIGVbIDEzIF0gKiB3OworICAgICAgICAg
ICAgdGhpcy56ID0gZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogeiArIGVbIDE0
IF0gKiB3OworICAgICAgICAgICAgdGhpcy53ID0gZVsgMyBdICogeCArIGVbIDcgXSAqIHkgKyBl
WyAxMSBdICogeiArIGVbIDE1IF0gKiB3OwogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICAvLyBTaW5nbGUgdGV4dHVyZSAoMkQgLyBDdWJlKQorICAgICAgICB9LAogCi0g
ICAgZnVuY3Rpb24gc2V0VmFsdWVUMSggZ2wsIHYsIHJlbmRlcmVyICkgeworICAgICAgICBkaXZp
ZGVTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkgewogCi0gICAgICAgIHZhciB1bml0ID0gcmVu
ZGVyZXIuYWxsb2NUZXh0dXJlVW5pdCgpOwotICAgICAgICBnbC51bmlmb3JtMWkoIHRoaXMuYWRk
ciwgdW5pdCApOwotICAgICAgICByZW5kZXJlci5zZXRUZXh0dXJlMkQoIHYgfHwgZW1wdHlUZXh0
dXJlLCB1bml0ICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAv
IHNjYWxhciApOwogCi0gICAgfQorICAgICAgICB9LAogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWVU
NiggZ2wsIHYsIHJlbmRlcmVyICkgeworICAgICAgICBzZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlv
bjogZnVuY3Rpb24gKCBxICkgewogCi0gICAgICAgIHZhciB1bml0ID0gcmVuZGVyZXIuYWxsb2NU
ZXh0dXJlVW5pdCgpOwotICAgICAgICBnbC51bmlmb3JtMWkoIHRoaXMuYWRkciwgdW5pdCApOwot
ICAgICAgICByZW5kZXJlci5zZXRUZXh0dXJlQ3ViZSggdiB8fCBlbXB0eUN1YmVUZXh0dXJlLCB1
bml0ICk7CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRo
cy9nZW9tZXRyeS9yb3RhdGlvbnMvY29udmVyc2lvbnMvcXVhdGVybmlvblRvQW5nbGUvaW5kZXgu
aHRtCiAKLSAgICB9CisgICAgICAgICAgICAvLyBxIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXpl
ZAogCi0gICAgLy8gSW50ZWdlciAvIEJvb2xlYW4gdmVjdG9ycyBvciBhcnJheXMgdGhlcmVvZiAo
YWx3YXlzIGZsYXQgYXJyYXlzKQorICAgICAgICAgICAgdGhpcy53ID0gMiAqIE1hdGguYWNvcygg
cS53ICk7CiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZTJpdiggZ2wsIHYgKSB7IGdsLnVuaWZvcm0y
aXYoIHRoaXMuYWRkciwgdiApOyB9Ci0gICAgZnVuY3Rpb24gc2V0VmFsdWUzaXYoIGdsLCB2ICkg
eyBnbC51bmlmb3JtM2l2KCB0aGlzLmFkZHIsIHYgKTsgfQotICAgIGZ1bmN0aW9uIHNldFZhbHVl
NGl2KCBnbCwgdiApIHsgZ2wudW5pZm9ybTRpdiggdGhpcy5hZGRyLCB2ICk7IH0KKyAgICAgICAg
ICAgIHZhciBzID0gTWF0aC5zcXJ0KCAxIC0gcS53ICogcS53ICk7CiAKLSAgICAvLyBIZWxwZXIg
dG8gcGljayB0aGUgcmlnaHQgc2V0dGVyIGZvciB0aGUgc2luZ3VsYXIgY2FzZQorICAgICAgICAg
ICAgaWYgKCBzIDwgMC4wMDAxICkgewogCi0gICAgZnVuY3Rpb24gZ2V0U2luZ3VsYXJTZXR0ZXIo
IHR5cGUgKSB7CisgICAgICAgICAgICAgICAgdGhpcy54ID0gMTsKKyAgICAgICAgICAgICAgICB0
aGlzLnkgPSAwOworICAgICAgICAgICAgICAgIHRoaXMueiA9IDA7CiAKLSAgICAgICAgc3dpdGNo
ICggdHlwZSApIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIGNhc2UgMHgx
NDA2OiByZXR1cm4gc2V0VmFsdWUxZjsgLy8gRkxPQVQKLSAgICAgICAgICAgIGNhc2UgMHg4YjUw
OiByZXR1cm4gc2V0VmFsdWUyZnY7IC8vIF9WRUMyCi0gICAgICAgICAgICBjYXNlIDB4OGI1MTog
cmV0dXJuIHNldFZhbHVlM2Z2OyAvLyBfVkVDMwotICAgICAgICAgICAgY2FzZSAweDhiNTI6IHJl
dHVybiBzZXRWYWx1ZTRmdjsgLy8gX1ZFQzQKKyAgICAgICAgICAgICAgICB0aGlzLnggPSBxLngg
LyBzOworICAgICAgICAgICAgICAgIHRoaXMueSA9IHEueSAvIHM7CisgICAgICAgICAgICAgICAg
dGhpcy56ID0gcS56IC8gczsKIAotICAgICAgICAgICAgY2FzZSAweDhiNWE6IHJldHVybiBzZXRW
YWx1ZTJmbTsgLy8gX01BVDIKLSAgICAgICAgICAgIGNhc2UgMHg4YjViOiByZXR1cm4gc2V0VmFs
dWUzZm07IC8vIF9NQVQzCi0gICAgICAgICAgICBjYXNlIDB4OGI1YzogcmV0dXJuIHNldFZhbHVl
NGZtOyAvLyBfTUFUNAorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNlIDB4OGI1ZTog
Y2FzZSAweDhkNjY6IHJldHVybiBzZXRWYWx1ZVQxOyAvLyBTQU1QTEVSXzJELCBTQU1QTEVSX0VY
VEVSTkFMX09FUwotICAgICAgICAgICAgY2FzZSAweDhiNjA6IHJldHVybiBzZXRWYWx1ZVQ2OyAv
LyBTQU1QTEVSX0NVQkUKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBj
YXNlIDB4MTQwNDogY2FzZSAweDhiNTY6IHJldHVybiBzZXRWYWx1ZTFpOyAvLyBJTlQsIEJPT0wK
LSAgICAgICAgICAgIGNhc2UgMHg4YjUzOiBjYXNlIDB4OGI1NzogcmV0dXJuIHNldFZhbHVlMml2
OyAvLyBfVkVDMgotICAgICAgICAgICAgY2FzZSAweDhiNTQ6IGNhc2UgMHg4YjU4OiByZXR1cm4g
c2V0VmFsdWUzaXY7IC8vIF9WRUMzCi0gICAgICAgICAgICBjYXNlIDB4OGI1NTogY2FzZSAweDhi
NTk6IHJldHVybiBzZXRWYWx1ZTRpdjsgLy8gX1ZFQzQKKyAgICAgICAgfSwKIAotICAgICAgICB9
CisgICAgICAgIHNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeDogZnVuY3Rpb24gKCBtICkg
ewogCi0gICAgfQorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20v
bWF0aHMvZ2VvbWV0cnkvcm90YXRpb25zL2NvbnZlcnNpb25zL21hdHJpeFRvQW5nbGUvaW5kZXgu
aHRtCiAKLSAgICAvLyBBcnJheSBvZiBzY2FsYXJzCisgICAgICAgICAgICAvLyBhc3N1bWVzIHRo
ZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVk
KQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWUxZnYoIGdsLCB2ICkgeyBnbC51bmlmb3JtMWZ2KCB0
aGlzLmFkZHIsIHYgKTsgfQotICAgIGZ1bmN0aW9uIHNldFZhbHVlMWl2KCBnbCwgdiApIHsgZ2wu
dW5pZm9ybTFpdiggdGhpcy5hZGRyLCB2ICk7IH0KKyAgICAgICAgICAgIHZhciBhbmdsZSwgeCwg
eSwgeiwgICAgIC8vIHZhcmlhYmxlcyBmb3IgcmVzdWx0CisgICAgICAgICAgICAgICAgZXBzaWxv
biA9IDAuMDEsICAgICAvLyBtYXJnaW4gdG8gYWxsb3cgZm9yIHJvdW5kaW5nIGVycm9ycworICAg
ICAgICAgICAgICAgIGVwc2lsb24yID0gMC4xLCAgICAgLy8gbWFyZ2luIHRvIGRpc3Rpbmd1aXNo
IGJldHdlZW4gMCBhbmQgMTgwIGRlZ3JlZXMKIAotICAgIC8vIEFycmF5IG9mIHZlY3RvcnMgKGZs
YXQgb3IgZnJvbSBUSFJFRSBjbGFzc2VzKQorICAgICAgICAgICAgICAgIHRlID0gbS5lbGVtZW50
cywKIAotICAgIGZ1bmN0aW9uIHNldFZhbHVlVjJhKCBnbCwgdiApIHsKKyAgICAgICAgICAgICAg
ICBtMTEgPSB0ZVsgMCBdLCBtMTIgPSB0ZVsgNCBdLCBtMTMgPSB0ZVsgOCBdLAorICAgICAgICAg
ICAgICAgIG0yMSA9IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF0sCisgICAg
ICAgICAgICAgICAgbTMxID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEwIF07
CiAKLSAgICAgICAgZ2wudW5pZm9ybTJmdiggdGhpcy5hZGRyLCBmbGF0dGVuKCB2LCB0aGlzLnNp
emUsIDIgKSApOworICAgICAgICAgICAgaWYgKCAoIE1hdGguYWJzKCBtMTIgLSBtMjEgKSA8IGVw
c2lsb24gKSAmJgorICAgICAgICAgICAgICAgICAoIE1hdGguYWJzKCBtMTMgLSBtMzEgKSA8IGVw
c2lsb24gKSAmJgorICAgICAgICAgICAgICAgICAoIE1hdGguYWJzKCBtMjMgLSBtMzIgKSA8IGVw
c2lsb24gKSApIHsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAvLyBzaW5ndWxhcml0eSBmb3Vu
ZAorICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBpZGVudGl0eSBtYXRyaXggd2hp
Y2ggbXVzdCBoYXZlICsxIGZvciBhbGwgdGVybXMKKyAgICAgICAgICAgICAgICAvLyBpbiBsZWFk
aW5nIGRpYWdvbmFsIGFuZCB6ZXJvIGluIG90aGVyIHRlcm1zCiAKLSAgICBmdW5jdGlvbiBzZXRW
YWx1ZVYzYSggZ2wsIHYgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAoIE1hdGguYWJzKCBtMTIg
KyBtMjEgKSA8IGVwc2lsb24yICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICggTWF0aC5hYnMo
IG0xMyArIG0zMSApIDwgZXBzaWxvbjIgKSAmJgorICAgICAgICAgICAgICAgICAgICAgKCBNYXRo
LmFicyggbTIzICsgbTMyICkgPCBlcHNpbG9uMiApICYmCisgICAgICAgICAgICAgICAgICAgICAo
IE1hdGguYWJzKCBtMTEgKyBtMjIgKyBtMzMgLSAzICkgPCBlcHNpbG9uMiApICkgewogCi0gICAg
ICAgIGdsLnVuaWZvcm0zZnYoIHRoaXMuYWRkciwgZmxhdHRlbiggdiwgdGhpcy5zaXplLCAzICkg
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBzaW5ndWxhcml0eSBpcyBpZGVudGl0eSBt
YXRyaXggc28gYW5nbGUgPSAwCiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0
KCAxLCAwLCAwLCAwICk7CiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZVY0YSggZ2wsIHYgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOyAvLyB6ZXJvIGFuZ2xlLCBhcmJpdHJhcnkg
YXhpcwogCi0gICAgICAgIGdsLnVuaWZvcm00ZnYoIHRoaXMuYWRkciwgZmxhdHRlbiggdiwgdGhp
cy5zaXplLCA0ICkgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICB9CisgICAgICAgICAgICAg
ICAgLy8gb3RoZXJ3aXNlIHRoaXMgc2luZ3VsYXJpdHkgaXMgYW5nbGUgPSAxODAKIAotICAgIC8v
IEFycmF5IG9mIG1hdHJpY2VzIChmbGF0IG9yIGZyb20gVEhSRUUgY2xhc2VzKQorICAgICAgICAg
ICAgICAgIGFuZ2xlID0gTWF0aC5QSTsKIAotICAgIGZ1bmN0aW9uIHNldFZhbHVlTTJhKCBnbCwg
diApIHsKKyAgICAgICAgICAgICAgICB2YXIgeHggPSAoIG0xMSArIDEgKSAvIDI7CisgICAgICAg
ICAgICAgICAgdmFyIHl5ID0gKCBtMjIgKyAxICkgLyAyOworICAgICAgICAgICAgICAgIHZhciB6
eiA9ICggbTMzICsgMSApIC8gMjsKKyAgICAgICAgICAgICAgICB2YXIgeHkgPSAoIG0xMiArIG0y
MSApIC8gNDsKKyAgICAgICAgICAgICAgICB2YXIgeHogPSAoIG0xMyArIG0zMSApIC8gNDsKKyAg
ICAgICAgICAgICAgICB2YXIgeXogPSAoIG0yMyArIG0zMiApIC8gNDsKIAotICAgICAgICBnbC51
bmlmb3JtTWF0cml4MmZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBmbGF0dGVuKCB2LCB0aGlzLnNpemUs
IDQgKSApOworICAgICAgICAgICAgICAgIGlmICggKCB4eCA+IHl5ICkgJiYgKCB4eCA+IHp6ICkg
KSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIG0xMSBpcyB0aGUgbGFyZ2VzdCBk
aWFnb25hbCB0ZXJtCiAKLSAgICBmdW5jdGlvbiBzZXRWYWx1ZU0zYSggZ2wsIHYgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggeHggPCBlcHNpbG9uICkgewogCi0gICAgICAgIGdsLnVuaWZv
cm1NYXRyaXgzZnYoIHRoaXMuYWRkciwgZmFsc2UsIGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgOSAp
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHkgPSAwLjcwNzEwNjc4MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHogPSAwLjcwNzEw
Njc4MTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgIGZ1bmN0
aW9uIHNldFZhbHVlTTRhKCBnbCwgdiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSBN
YXRoLnNxcnQoIHh4ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0geHkgLyB4OworICAg
ICAgICAgICAgICAgICAgICAgICAgeiA9IHh6IC8geDsKIAotICAgICAgICBnbC51bmlmb3JtTWF0
cml4NGZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDE2ICkgKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIHl5ID4genogKSB7CiAKLSAgICAvLyBBcnJheSBvZiB0ZXh0dXJlcyAoMkQgLyBDdWJlKQor
ICAgICAgICAgICAgICAgICAgICAvLyBtMjIgaXMgdGhlIGxhcmdlc3QgZGlhZ29uYWwgdGVybQog
Ci0gICAgZnVuY3Rpb24gc2V0VmFsdWVUMWEoIGdsLCB2LCByZW5kZXJlciApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCB5eSA8IGVwc2lsb24gKSB7CiAKLSAgICAgICAgdmFyIG4gPSB2Lmxl
bmd0aCwKLSAgICAgICAgICAgIHVuaXRzID0gYWxsb2NUZXhVbml0cyggcmVuZGVyZXIsIG4gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwLjcwNzEwNjc4MTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IDAuNzA3MTA2Nzgx
OwogCi0gICAgICAgIGdsLnVuaWZvcm0xaXYoIHRoaXMuYWRkciwgdW5pdHMgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IG47
ICsrIGkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTWF0aC5zcXJ0KCB5eSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHh5IC8geTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHogPSB5eiAvIHk7CiAKLSAgICAgICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmUyRCggdlsg
aSBdIHx8IGVtcHR5VGV4dHVyZSwgdW5pdHNbIGkgXSApOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICB9CisgICAgICAg
ICAgICAgICAgICAgIC8vIG0zMyBpcyB0aGUgbGFyZ2VzdCBkaWFnb25hbCB0ZXJtIHNvIGJhc2Ug
cmVzdWx0IG9uIHRoaXMKIAotICAgIGZ1bmN0aW9uIHNldFZhbHVlVDZhKCBnbCwgdiwgcmVuZGVy
ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggenogPCBlcHNpbG9uICkgewogCi0gICAg
ICAgIHZhciBuID0gdi5sZW5ndGgsCi0gICAgICAgICAgICB1bml0cyA9IGFsbG9jVGV4VW5pdHMo
IHJlbmRlcmVyLCBuICk7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMC43MDcxMDY3ODE7
CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMC43MDcxMDY3ODE7CisgICAgICAgICAgICAg
ICAgICAgICAgICB6ID0gMDsKIAotICAgICAgICBnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVu
aXRzICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgZm9yICggdmFy
IGkgPSAwOyBpICE9PSBuOyArKyBpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeiA9IE1h
dGguc3FydCggenogKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4eiAvIHo7CisgICAg
ICAgICAgICAgICAgICAgICAgICB5ID0geXogLyB6OwogCi0gICAgICAgICAgICByZW5kZXJlci5z
ZXRUZXh0dXJlQ3ViZSggdlsgaSBdIHx8IGVtcHR5Q3ViZVRleHR1cmUsIHVuaXRzWyBpIF0gKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAK
LSAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5zZXQoIHgsIHksIHosIGFuZ2xlICk7CiAKLSAg
ICAvLyBIZWxwZXIgdG8gcGljayB0aGUgcmlnaHQgc2V0dGVyIGZvciBhIHB1cmUgKGJvdHRvbS1s
ZXZlbCkgYXJyYXkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gcmV0dXJuIDE4MCBk
ZWcgcm90YXRpb24KIAotICAgIGZ1bmN0aW9uIGdldFB1cmVBcnJheVNldHRlciggdHlwZSApIHsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKCB0eXBlICkgeworICAgICAgICAgICAg
Ly8gYXMgd2UgaGF2ZSByZWFjaGVkIGhlcmUgdGhlcmUgYXJlIG5vIHNpbmd1bGFyaXRpZXMgc28g
d2UgY2FuIGhhbmRsZSBub3JtYWxseQogCi0gICAgICAgICAgICBjYXNlIDB4MTQwNjogcmV0dXJu
IHNldFZhbHVlMWZ2OyAvLyBGTE9BVAotICAgICAgICAgICAgY2FzZSAweDhiNTA6IHJldHVybiBz
ZXRWYWx1ZVYyYTsgLy8gX1ZFQzIKLSAgICAgICAgICAgIGNhc2UgMHg4YjUxOiByZXR1cm4gc2V0
VmFsdWVWM2E7IC8vIF9WRUMzCi0gICAgICAgICAgICBjYXNlIDB4OGI1MjogcmV0dXJuIHNldFZh
bHVlVjRhOyAvLyBfVkVDNAorICAgICAgICAgICAgdmFyIHMgPSBNYXRoLnNxcnQoICggbTMyIC0g
bTIzICkgKiAoIG0zMiAtIG0yMyApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
IG0xMyAtIG0zMSApICogKCBtMTMgLSBtMzEgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCBtMjEgLSBtMTIgKSAqICggbTIxIC0gbTEyICkgKTsgLy8gdXNlZCB0byBub3JtYWxp
emUKIAotICAgICAgICAgICAgY2FzZSAweDhiNWE6IHJldHVybiBzZXRWYWx1ZU0yYTsgLy8gX01B
VDIKLSAgICAgICAgICAgIGNhc2UgMHg4YjViOiByZXR1cm4gc2V0VmFsdWVNM2E7IC8vIF9NQVQz
Ci0gICAgICAgICAgICBjYXNlIDB4OGI1YzogcmV0dXJuIHNldFZhbHVlTTRhOyAvLyBfTUFUNAor
ICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggcyApIDwgMC4wMDEgKSBzID0gMTsKIAotICAgICAg
ICAgICAgY2FzZSAweDhiNWU6IHJldHVybiBzZXRWYWx1ZVQxYTsgLy8gU0FNUExFUl8yRAotICAg
ICAgICAgICAgY2FzZSAweDhiNjA6IHJldHVybiBzZXRWYWx1ZVQ2YTsgLy8gU0FNUExFUl9DVUJF
CisgICAgICAgICAgICAvLyBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvLCBzaG91bGQgbm90IGhhcHBl
biBpZiBtYXRyaXggaXMgb3J0aG9nb25hbCBhbmQgc2hvdWxkIGJlCisgICAgICAgICAgICAvLyBj
YXVnaHQgYnkgc2luZ3VsYXJpdHkgdGVzdCBhYm92ZSwgYnV0IEkndmUgbGVmdCBpdCBpbiBqdXN0
IGluIGNhc2UKIAotICAgICAgICAgICAgY2FzZSAweDE0MDQ6IGNhc2UgMHg4YjU2OiByZXR1cm4g
c2V0VmFsdWUxaXY7IC8vIElOVCwgQk9PTAotICAgICAgICAgICAgY2FzZSAweDhiNTM6IGNhc2Ug
MHg4YjU3OiByZXR1cm4gc2V0VmFsdWUyaXY7IC8vIF9WRUMyCi0gICAgICAgICAgICBjYXNlIDB4
OGI1NDogY2FzZSAweDhiNTg6IHJldHVybiBzZXRWYWx1ZTNpdjsgLy8gX1ZFQzMKLSAgICAgICAg
ICAgIGNhc2UgMHg4YjU1OiBjYXNlIDB4OGI1OTogcmV0dXJuIHNldFZhbHVlNGl2OyAvLyBfVkVD
NAorICAgICAgICAgICAgdGhpcy54ID0gKCBtMzIgLSBtMjMgKSAvIHM7CisgICAgICAgICAgICB0
aGlzLnkgPSAoIG0xMyAtIG0zMSApIC8gczsKKyAgICAgICAgICAgIHRoaXMueiA9ICggbTIxIC0g
bTEyICkgLyBzOworICAgICAgICAgICAgdGhpcy53ID0gTWF0aC5hY29zKCAoIG0xMSArIG0yMiAr
IG0zMyAtIDEgKSAvIDIgKTsKIAotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgIH0KKyAgICAgICAgfSwKIAotICAgIC8vIC0tLSBVbmlmb3JtIENsYXNzZXMgLS0tCisg
ICAgICAgIG1pbjogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgZnVuY3Rpb24gU2luZ2xlVW5pZm9y
bSggaWQsIGFjdGl2ZUluZm8sIGFkZHIgKSB7CisgICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1p
biggdGhpcy54LCB2LnggKTsKKyAgICAgICAgICAgIHRoaXMueSA9IE1hdGgubWluKCB0aGlzLnks
IHYueSApOworICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5taW4oIHRoaXMueiwgdi56ICk7Cisg
ICAgICAgICAgICB0aGlzLncgPSBNYXRoLm1pbiggdGhpcy53LCB2LncgKTsKIAotICAgICAgICB0
aGlzLmlkID0gaWQ7Ci0gICAgICAgIHRoaXMuYWRkciA9IGFkZHI7Ci0gICAgICAgIHRoaXMuc2V0
VmFsdWUgPSBnZXRTaW5ndWxhclNldHRlciggYWN0aXZlSW5mby50eXBlICk7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKIAotICAgICAgICAvLyB0aGlzLnBhdGggPSBhY3RpdmVJbmZvLm5hbWU7
IC8vIERFQlVHCisgICAgICAgIH0sCiAKLSAgICB9CisgICAgICAgIG1heDogZnVuY3Rpb24gKCB2
ICkgewogCi0gICAgZnVuY3Rpb24gUHVyZUFycmF5VW5pZm9ybSggaWQsIGFjdGl2ZUluZm8sIGFk
ZHIgKSB7CisgICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTsKKyAg
ICAgICAgICAgIHRoaXMueSA9IE1hdGgubWF4KCB0aGlzLnksIHYueSApOworICAgICAgICAgICAg
dGhpcy56ID0gTWF0aC5tYXgoIHRoaXMueiwgdi56ICk7CisgICAgICAgICAgICB0aGlzLncgPSBN
YXRoLm1heCggdGhpcy53LCB2LncgKTsKIAotICAgICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgICAg
IHRoaXMuYWRkciA9IGFkZHI7Ci0gICAgICAgIHRoaXMuc2l6ZSA9IGFjdGl2ZUluZm8uc2l6ZTsK
LSAgICAgICAgdGhpcy5zZXRWYWx1ZSA9IGdldFB1cmVBcnJheVNldHRlciggYWN0aXZlSW5mby50
eXBlICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAvLyB0aGlzLnBhdGgg
PSBhY3RpdmVJbmZvLm5hbWU7IC8vIERFQlVHCisgICAgICAgIH0sCiAKLSAgICB9CisgICAgICAg
IGNsYW1wOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgewogCi0gICAgZnVuY3Rpb24gU3RydWN0dXJl
ZFVuaWZvcm0oIGlkICkgeworICAgICAgICAgICAgLy8gYXNzdW1lcyBtaW4gPCBtYXgsIGNvbXBv
bmVudHdpc2UKIAotICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgICAgICB0aGlzLnggPSBN
YXRoLm1heCggbWluLngsIE1hdGgubWluKCBtYXgueCwgdGhpcy54ICkgKTsKKyAgICAgICAgICAg
IHRoaXMueSA9IE1hdGgubWF4KCBtaW4ueSwgTWF0aC5taW4oIG1heC55LCB0aGlzLnkgKSApOwor
ICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRo
aXMueiApICk7CisgICAgICAgICAgICB0aGlzLncgPSBNYXRoLm1heCggbWluLncsIE1hdGgubWlu
KCBtYXgudywgdGhpcy53ICkgKTsKIAotICAgICAgICBVbmlmb3JtQ29udGFpbmVyLmNhbGwoIHRo
aXMgKTsgLy8gbWl4LWluCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIH0KKyAgICAg
ICAgfSwKIAotICAgIFN0cnVjdHVyZWRVbmlmb3JtLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0
aW9uICggZ2wsIHZhbHVlICkgeworICAgICAgICBjbGFtcFNjYWxhcjogZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgIC8vIE5vdGU6IERvbid0IG5lZWQgYW4gZXh0cmEgJ3JlbmRlcmVyJyBwYXJhbWV0
ZXIsIHNpbmNlIHNhbXBsZXJzCi0gICAgICAgIC8vIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJ1Y3R1
cmVkIHVuaWZvcm1zLgorICAgICAgICAgICAgdmFyIG1pbiwgbWF4OwogCi0gICAgICAgIHZhciBz
ZXEgPSB0aGlzLnNlcTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjbGFtcFNjYWxhcigg
bWluVmFsLCBtYXhWYWwgKSB7CiAKLSAgICAgICAgZm9yICggdmFyIGkgPSAwLCBuID0gc2VxLmxl
bmd0aDsgaSAhPT0gbjsgKysgaSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG1pbiA9PT0gdW5k
ZWZpbmVkICkgewogCi0gICAgICAgICAgICB2YXIgdSA9IHNlcVsgaSBdOwotICAgICAgICAgICAg
dS5zZXRWYWx1ZSggZ2wsIHZhbHVlWyB1LmlkIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgbWlu
ID0gbmV3IFZlY3RvcjQoKTsKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gbmV3IFZlY3RvcjQo
KTsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgfTsKKyAgICAgICAgICAg
ICAgICBtaW4uc2V0KCBtaW5WYWwsIG1pblZhbCwgbWluVmFsLCBtaW5WYWwgKTsKKyAgICAgICAg
ICAgICAgICBtYXguc2V0KCBtYXhWYWwsIG1heFZhbCwgbWF4VmFsLCBtYXhWYWwgKTsKIAotICAg
IC8vIC0tLSBUb3AtbGV2ZWwgLS0tCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xhbXAo
IG1pbiwgbWF4ICk7CiAKLSAgICAvLyBQYXJzZXIgLSBidWlsZHMgdXAgdGhlIHByb3BlcnR5IHRy
ZWUgZnJvbSB0aGUgcGF0aCBzdHJpbmdzCisgICAgICAgICAgICB9OwogCi0gICAgdmFyIFJlUGF0
aFBhcnQgPSAvKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZzsKKyAgICAgICAgfSgpLAogCi0gICAg
Ly8gZXh0cmFjdHMKLSAgICAvLyAgLSB0aGUgaWRlbnRpZmllciAobWVtYmVyIG5hbWUgb3IgYXJy
YXkgaW5kZXgpCi0gICAgLy8gIC0gZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgcmlnaHQgYnJhY2tl
dCAoZm91bmQgd2hlbiBhcnJheSBpbmRleCkKLSAgICAvLyAgLSBmb2xsb3dlZCBieSBhbiBvcHRp
b25hbCBsZWZ0IGJyYWNrZXQgb3IgZG90ICh0eXBlIG9mIHN1YnNjcmlwdCkKLSAgICAvLwotICAg
IC8vIE5vdGU6IFRoZXNlIHBvcnRpb25zIGNhbiBiZSByZWFkIGluIGEgbm9uLW92ZXJsYXBwaW5n
IGZhc2hpb24gYW5kCi0gICAgLy8gYWxsb3cgc3RyYWlnaHRmb3J3YXJkIHBhcnNpbmcgb2YgdGhl
IGhpZXJhcmNoeSB0aGF0IFdlYkdMIGVuY29kZXMKLSAgICAvLyBpbiB0aGUgdW5pZm9ybSBuYW1l
cy4KKyAgICAgICAgY2xhbXBMZW5ndGg6IGZ1bmN0aW9uICggbWluLCBtYXggKSB7CiAKLSAgICBm
dW5jdGlvbiBhZGRVbmlmb3JtKCBjb250YWluZXIsIHVuaWZvcm1PYmplY3QgKSB7CisgICAgICAg
ICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTsKIAotICAgICAgICBjb250YWluZXIuc2Vx
LnB1c2goIHVuaWZvcm1PYmplY3QgKTsKLSAgICAgICAgY29udGFpbmVyLm1hcFsgdW5pZm9ybU9i
amVjdC5pZCBdID0gdW5pZm9ybU9iamVjdDsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdmlk
ZVNjYWxhciggbGVuZ3RoIHx8IDEgKS5tdWx0aXBseVNjYWxhciggTWF0aC5tYXgoIG1pbiwgTWF0
aC5taW4oIG1heCwgbGVuZ3RoICkgKSApOwogCi0gICAgfQorICAgICAgICB9LAogCi0gICAgZnVu
Y3Rpb24gcGFyc2VVbmlmb3JtKCBhY3RpdmVJbmZvLCBhZGRyLCBjb250YWluZXIgKSB7CisgICAg
ICAgIGZsb29yOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgdmFyIHBhdGggPSBhY3RpdmVJbmZv
Lm5hbWUsCi0gICAgICAgICAgICBwYXRoTGVuZ3RoID0gcGF0aC5sZW5ndGg7CisgICAgICAgICAg
ICB0aGlzLnggPSBNYXRoLmZsb29yKCB0aGlzLnggKTsKKyAgICAgICAgICAgIHRoaXMueSA9IE1h
dGguZmxvb3IoIHRoaXMueSApOworICAgICAgICAgICAgdGhpcy56ID0gTWF0aC5mbG9vciggdGhp
cy56ICk7CisgICAgICAgICAgICB0aGlzLncgPSBNYXRoLmZsb29yKCB0aGlzLncgKTsKIAotICAg
ICAgICAvLyByZXNldCBSZWdFeHAgb2JqZWN0LCBiZWNhdXNlIG9mIHRoZSBlYXJseSBleGl0IG9m
IGEgcHJldmlvdXMgcnVuCi0gICAgICAgIFJlUGF0aFBhcnQubGFzdEluZGV4ID0gMDsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIGZvciAoIDsgOyApIHsKKyAgICAgICAgfSwK
IAotICAgICAgICAgICAgdmFyIG1hdGNoID0gUmVQYXRoUGFydC5leGVjKCBwYXRoICksCi0gICAg
ICAgICAgICAgICAgbWF0Y2hFbmQgPSBSZVBhdGhQYXJ0Lmxhc3RJbmRleCwKKyAgICAgICAgY2Vp
bDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgaWQgPSBtYXRjaFsgMSBdLAotICAg
ICAgICAgICAgICAgIGlkSXNJbmRleCA9IG1hdGNoWyAyIF0gPT09ICddJywKLSAgICAgICAgICAg
ICAgICBzdWJzY3JpcHQgPSBtYXRjaFsgMyBdOworICAgICAgICAgICAgdGhpcy54ID0gTWF0aC5j
ZWlsKCB0aGlzLnggKTsKKyAgICAgICAgICAgIHRoaXMueSA9IE1hdGguY2VpbCggdGhpcy55ICk7
CisgICAgICAgICAgICB0aGlzLnogPSBNYXRoLmNlaWwoIHRoaXMueiApOworICAgICAgICAgICAg
dGhpcy53ID0gTWF0aC5jZWlsKCB0aGlzLncgKTsKIAotICAgICAgICAgICAgaWYgKCBpZElzSW5k
ZXggKSBpZCA9IGlkIHwgMDsgLy8gY29udmVydCB0byBpbnRlZ2VyCisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgaWYgKCBzdWJzY3JpcHQgPT09IHVuZGVmaW5lZCB8fCBz
dWJzY3JpcHQgPT09ICdbJyAmJiBtYXRjaEVuZCArIDIgPT09IHBhdGhMZW5ndGggKSB7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgICAgICAvLyBiYXJlIG5hbWUgb3IgInB1cmUiIGJvdHRvbS1s
ZXZlbCBhcnJheSAiWzBdIiBzdWZmaXgKKyAgICAgICAgcm91bmQ6IGZ1bmN0aW9uICgpIHsKIAot
ICAgICAgICAgICAgICAgIGFkZFVuaWZvcm0oIGNvbnRhaW5lciwgc3Vic2NyaXB0ID09PSB1bmRl
ZmluZWQgPwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNpbmdsZVVuaWZvcm0oIGlkLCBh
Y3RpdmVJbmZvLCBhZGRyICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFB1cmVBcnJh
eVVuaWZvcm0oIGlkLCBhY3RpdmVJbmZvLCBhZGRyICkgKTsKKyAgICAgICAgICAgIHRoaXMueCA9
IE1hdGgucm91bmQoIHRoaXMueCApOworICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5yb3VuZCgg
dGhpcy55ICk7CisgICAgICAgICAgICB0aGlzLnogPSBNYXRoLnJvdW5kKCB0aGlzLnogKTsKKyAg
ICAgICAgICAgIHRoaXMudyA9IE1hdGgucm91bmQoIHRoaXMudyApOwogCi0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIC8vIHN0ZXAgaW50byBpbm5lciBub2Rl
IC8gY3JlYXRlIGl0IGluIGNhc2UgaXQgZG9lc24ndCBleGlzdAorICAgICAgICByb3VuZFRvWmVy
bzogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgdmFyIG1hcCA9IGNvbnRhaW5lci5t
YXAsIG5leHQgPSBtYXBbIGlkIF07CisgICAgICAgICAgICB0aGlzLnggPSAoIHRoaXMueCA8IDAg
KSA/IE1hdGguY2VpbCggdGhpcy54ICkgOiBNYXRoLmZsb29yKCB0aGlzLnggKTsKKyAgICAgICAg
ICAgIHRoaXMueSA9ICggdGhpcy55IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnkgKSA6IE1hdGgu
Zmxvb3IoIHRoaXMueSApOworICAgICAgICAgICAgdGhpcy56ID0gKCB0aGlzLnogPCAwICkgPyBN
YXRoLmNlaWwoIHRoaXMueiApIDogTWF0aC5mbG9vciggdGhpcy56ICk7CisgICAgICAgICAgICB0
aGlzLncgPSAoIHRoaXMudyA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy53ICkgOiBNYXRoLmZsb29y
KCB0aGlzLncgKTsKIAotICAgICAgICAgICAgICAgIGlmICggbmV4dCA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgbmV4dCA9
IG5ldyBTdHJ1Y3R1cmVkVW5pZm9ybSggaWQgKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkVW5p
Zm9ybSggY29udGFpbmVyLCBuZXh0ICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgY29udGFp
bmVyID0gbmV4dDsKKyAgICAgICAgICAgIHRoaXMueCA9IC0gdGhpcy54OworICAgICAgICAgICAg
dGhpcy55ID0gLSB0aGlzLnk7CisgICAgICAgICAgICB0aGlzLnogPSAtIHRoaXMuejsKKyAgICAg
ICAgICAgIHRoaXMudyA9IC0gdGhpcy53OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAotICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICB9CisgICAgICAgIGRv
dDogZnVuY3Rpb24gKCB2ICkgewogCi0gICAgLy8gUm9vdCBDb250YWluZXIKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2LnogKyB0aGlz
LncgKiB2Lnc7CiAKLSAgICBmdW5jdGlvbiBXZWJHTFVuaWZvcm1zKCBnbCwgcHJvZ3JhbSwgcmVu
ZGVyZXIgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgVW5pZm9ybUNvbnRhaW5lci5jYWxsKCB0
aGlzICk7CisgICAgICAgIGxlbmd0aFNxOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgdGhpcy5y
ZW5kZXJlciA9IHJlbmRlcmVyOworICAgICAgICAgICAgcmV0dXJuIHRoaXMueCAqIHRoaXMueCAr
IHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiArIHRoaXMudyAqIHRoaXMudzsKIAot
ICAgICAgICB2YXIgbiA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoIHByb2dyYW0sIGdsLkFDVElW
RV9VTklGT1JNUyApOworICAgICAgICB9LAogCi0gICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8
IG47ICsrIGkgKSB7CisgICAgICAgIGxlbmd0aDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICB2YXIgaW5mbyA9IGdsLmdldEFjdGl2ZVVuaWZvcm0oIHByb2dyYW0sIGkgKSwKLSAgICAgICAg
ICAgICAgICBwYXRoID0gaW5mby5uYW1lLAotICAgICAgICAgICAgICAgIGFkZHIgPSBnbC5nZXRV
bmlmb3JtTG9jYXRpb24oIHByb2dyYW0sIHBhdGggKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRo
LnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMu
eiArIHRoaXMudyAqIHRoaXMudyApOwogCi0gICAgICAgICAgICBwYXJzZVVuaWZvcm0oIGluZm8s
IGFkZHIsIHRoaXMgKTsKKyAgICAgICAgfSwKIAotICAgICAgICB9CisgICAgICAgIG1hbmhhdHRh
bkxlbmd0aDogZnVuY3Rpb24gKCkgewogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIE1hdGgu
YWJzKCB0aGlzLnggKSArIE1hdGguYWJzKCB0aGlzLnkgKSArIE1hdGguYWJzKCB0aGlzLnogKSAr
IE1hdGguYWJzKCB0aGlzLncgKTsKIAotICAgIFdlYkdMVW5pZm9ybXMucHJvdG90eXBlLnNldFZh
bHVlID0gZnVuY3Rpb24gKCBnbCwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgdmFyIHUgPSB0aGlzLm1hcFsgbmFtZSBdOworICAgICAgICBub3JtYWxpemU6IGZ1bmN0aW9u
ICgpIHsKIAotICAgICAgICBpZiAoIHUgIT09IHVuZGVmaW5lZCApIHUuc2V0VmFsdWUoIGdsLCB2
YWx1ZSwgdGhpcy5yZW5kZXJlciApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2aWRlU2Nh
bGFyKCB0aGlzLmxlbmd0aCgpIHx8IDEgKTsKIAotICAgIH07CisgICAgICAgIH0sCiAKLSAgICBX
ZWJHTFVuaWZvcm1zLnByb3RvdHlwZS5zZXRPcHRpb25hbCA9IGZ1bmN0aW9uICggZ2wsIG9iamVj
dCwgbmFtZSApIHsKKyAgICAgICAgc2V0TGVuZ3RoOiBmdW5jdGlvbiAoIGxlbmd0aCApIHsKIAot
ICAgICAgICB2YXIgdiA9IG9iamVjdFsgbmFtZSBdOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIGxlbmd0aCApOwogCi0gICAgICAgIGlmICggdiAh
PT0gdW5kZWZpbmVkICkgdGhpcy5zZXRWYWx1ZSggZ2wsIG5hbWUsIHYgKTsKKyAgICAgICAgfSwK
IAotICAgIH07CisgICAgICAgIGxlcnA6IGZ1bmN0aW9uICggdiwgYWxwaGEgKSB7CiAKKyAgICAg
ICAgICAgIHRoaXMueCArPSAoIHYueCAtIHRoaXMueCApICogYWxwaGE7CisgICAgICAgICAgICB0
aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhOworICAgICAgICAgICAgdGhpcy56ICs9
ICggdi56IC0gdGhpcy56ICkgKiBhbHBoYTsKKyAgICAgICAgICAgIHRoaXMudyArPSAoIHYudyAt
IHRoaXMudyApICogYWxwaGE7CiAKLSAgICAvLyBTdGF0aWMgaW50ZXJmYWNlCisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKIAotICAgIFdlYkdMVW5pZm9ybXMudXBsb2FkID0gZnVuY3Rpb24gKCBn
bCwgc2VxLCB2YWx1ZXMsIHJlbmRlcmVyICkgeworICAgICAgICB9LAogCi0gICAgICAgIGZvciAo
IHZhciBpID0gMCwgbiA9IHNlcS5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CisgICAgICAgIGxl
cnBWZWN0b3JzOiBmdW5jdGlvbiAoIHYxLCB2MiwgYWxwaGEgKSB7CiAKLSAgICAgICAgICAgIHZh
ciB1ID0gc2VxWyBpIF0sCi0gICAgICAgICAgICAgICAgdiA9IHZhbHVlc1sgdS5pZCBdOworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuc3ViVmVjdG9ycyggdjIsIHYxICkubXVsdGlwbHlTY2FsYXIo
IGFscGhhICkuYWRkKCB2MSApOwogCi0gICAgICAgICAgICBpZiAoIHYubmVlZHNVcGRhdGUgIT09
IGZhbHNlICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgLy8gbm90ZTogYWx3YXlz
IHVwZGF0aW5nIHdoZW4gLm5lZWRzVXBkYXRlIGlzIHVuZGVmaW5lZAotICAgICAgICAgICAgICAg
IHUuc2V0VmFsdWUoIGdsLCB2LnZhbHVlLCByZW5kZXJlciApOworICAgICAgICBlcXVhbHM6IGZ1
bmN0aW9uICggdiApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICggKCB2
LnggPT09IHRoaXMueCApICYmICggdi55ID09PSB0aGlzLnkgKSAmJiAoIHYueiA9PT0gdGhpcy56
ICkgJiYgKCB2LncgPT09IHRoaXMudyApICk7CiAKLSAgICAgICAgfQorICAgICAgICB9LAogCi0g
ICAgfTsKKyAgICAgICAgZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CiAK
LSAgICBXZWJHTFVuaWZvcm1zLnNlcVdpdGhWYWx1ZSA9IGZ1bmN0aW9uICggc2VxLCB2YWx1ZXMg
KSB7CisgICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsK
IAotICAgICAgICB2YXIgciA9IFtdOworICAgICAgICAgICAgdGhpcy54ID0gYXJyYXlbIG9mZnNl
dCBdOworICAgICAgICAgICAgdGhpcy55ID0gYXJyYXlbIG9mZnNldCArIDEgXTsKKyAgICAgICAg
ICAgIHRoaXMueiA9IGFycmF5WyBvZmZzZXQgKyAyIF07CisgICAgICAgICAgICB0aGlzLncgPSBh
cnJheVsgb2Zmc2V0ICsgMyBdOwogCi0gICAgICAgIGZvciAoIHZhciBpID0gMCwgbiA9IHNlcS5s
ZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgdmFyIHUgPSBzZXFbIGkgXTsKLSAgICAgICAgICAgIGlmICggdS5pZCBpbiB2YWx1
ZXMgKSByLnB1c2goIHUgKTsKKyAgICAgICAgfSwKIAotICAgICAgICB9CisgICAgICAgIHRvQXJy
YXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKIAotICAgICAgICByZXR1cm4gcjsKKyAg
ICAgICAgICAgIGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107CisgICAgICAg
ICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKIAotICAgIH07Cisg
ICAgICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7CisgICAgICAgICAgICBhcnJheVsg
b2Zmc2V0ICsgMSBdID0gdGhpcy55OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9
IHRoaXMuejsKKyAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLnc7CiAKLSAg
ICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAq
LworICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgdmFyIENvbG9yS2V5d29yZHMgPSB7
ICdhbGljZWJsdWUnOiAweEYwRjhGRiwgJ2FudGlxdWV3aGl0ZSc6IDB4RkFFQkQ3LCAnYXF1YSc6
IDB4MDBGRkZGLCAnYXF1YW1hcmluZSc6IDB4N0ZGRkQ0LCAnYXp1cmUnOiAweEYwRkZGRiwKLSAg
ICAgICAgJ2JlaWdlJzogMHhGNUY1REMsICdiaXNxdWUnOiAweEZGRTRDNCwgJ2JsYWNrJzogMHgw
MDAwMDAsICdibGFuY2hlZGFsbW9uZCc6IDB4RkZFQkNELCAnYmx1ZSc6IDB4MDAwMEZGLCAnYmx1
ZXZpb2xldCc6IDB4OEEyQkUyLAotICAgICAgICAnYnJvd24nOiAweEE1MkEyQSwgJ2J1cmx5d29v
ZCc6IDB4REVCODg3LCAnY2FkZXRibHVlJzogMHg1RjlFQTAsICdjaGFydHJldXNlJzogMHg3RkZG
MDAsICdjaG9jb2xhdGUnOiAweEQyNjkxRSwgJ2NvcmFsJzogMHhGRjdGNTAsCi0gICAgICAgICdj
b3JuZmxvd2VyYmx1ZSc6IDB4NjQ5NUVELCAnY29ybnNpbGsnOiAweEZGRjhEQywgJ2NyaW1zb24n
OiAweERDMTQzQywgJ2N5YW4nOiAweDAwRkZGRiwgJ2RhcmtibHVlJzogMHgwMDAwOEIsICdkYXJr
Y3lhbic6IDB4MDA4QjhCLAotICAgICAgICAnZGFya2dvbGRlbnJvZCc6IDB4Qjg4NjBCLCAnZGFy
a2dyYXknOiAweEE5QTlBOSwgJ2RhcmtncmVlbic6IDB4MDA2NDAwLCAnZGFya2dyZXknOiAweEE5
QTlBOSwgJ2RhcmtraGFraSc6IDB4QkRCNzZCLCAnZGFya21hZ2VudGEnOiAweDhCMDA4QiwKLSAg
ICAgICAgJ2RhcmtvbGl2ZWdyZWVuJzogMHg1NTZCMkYsICdkYXJrb3JhbmdlJzogMHhGRjhDMDAs
ICdkYXJrb3JjaGlkJzogMHg5OTMyQ0MsICdkYXJrcmVkJzogMHg4QjAwMDAsICdkYXJrc2FsbW9u
JzogMHhFOTk2N0EsICdkYXJrc2VhZ3JlZW4nOiAweDhGQkM4RiwKLSAgICAgICAgJ2RhcmtzbGF0
ZWJsdWUnOiAweDQ4M0Q4QiwgJ2RhcmtzbGF0ZWdyYXknOiAweDJGNEY0RiwgJ2RhcmtzbGF0ZWdy
ZXknOiAweDJGNEY0RiwgJ2Rhcmt0dXJxdW9pc2UnOiAweDAwQ0VEMSwgJ2Rhcmt2aW9sZXQnOiAw
eDk0MDBEMywKLSAgICAgICAgJ2RlZXBwaW5rJzogMHhGRjE0OTMsICdkZWVwc2t5Ymx1ZSc6IDB4
MDBCRkZGLCAnZGltZ3JheSc6IDB4Njk2OTY5LCAnZGltZ3JleSc6IDB4Njk2OTY5LCAnZG9kZ2Vy
Ymx1ZSc6IDB4MUU5MEZGLCAnZmlyZWJyaWNrJzogMHhCMjIyMjIsCi0gICAgICAgICdmbG9yYWx3
aGl0ZSc6IDB4RkZGQUYwLCAnZm9yZXN0Z3JlZW4nOiAweDIyOEIyMiwgJ2Z1Y2hzaWEnOiAweEZG
MDBGRiwgJ2dhaW5zYm9ybyc6IDB4RENEQ0RDLCAnZ2hvc3R3aGl0ZSc6IDB4RjhGOEZGLCAnZ29s
ZCc6IDB4RkZENzAwLAotICAgICAgICAnZ29sZGVucm9kJzogMHhEQUE1MjAsICdncmF5JzogMHg4
MDgwODAsICdncmVlbic6IDB4MDA4MDAwLCAnZ3JlZW55ZWxsb3cnOiAweEFERkYyRiwgJ2dyZXkn
OiAweDgwODA4MCwgJ2hvbmV5ZGV3JzogMHhGMEZGRjAsICdob3RwaW5rJzogMHhGRjY5QjQsCi0g
ICAgICAgICdpbmRpYW5yZWQnOiAweENENUM1QywgJ2luZGlnbyc6IDB4NEIwMDgyLCAnaXZvcnkn
OiAweEZGRkZGMCwgJ2toYWtpJzogMHhGMEU2OEMsICdsYXZlbmRlcic6IDB4RTZFNkZBLCAnbGF2
ZW5kZXJibHVzaCc6IDB4RkZGMEY1LCAnbGF3bmdyZWVuJzogMHg3Q0ZDMDAsCi0gICAgICAgICds
ZW1vbmNoaWZmb24nOiAweEZGRkFDRCwgJ2xpZ2h0Ymx1ZSc6IDB4QUREOEU2LCAnbGlnaHRjb3Jh
bCc6IDB4RjA4MDgwLCAnbGlnaHRjeWFuJzogMHhFMEZGRkYsICdsaWdodGdvbGRlbnJvZHllbGxv
dyc6IDB4RkFGQUQyLCAnbGlnaHRncmF5JzogMHhEM0QzRDMsCi0gICAgICAgICdsaWdodGdyZWVu
JzogMHg5MEVFOTAsICdsaWdodGdyZXknOiAweEQzRDNEMywgJ2xpZ2h0cGluayc6IDB4RkZCNkMx
LCAnbGlnaHRzYWxtb24nOiAweEZGQTA3QSwgJ2xpZ2h0c2VhZ3JlZW4nOiAweDIwQjJBQSwgJ2xp
Z2h0c2t5Ymx1ZSc6IDB4ODdDRUZBLAotICAgICAgICAnbGlnaHRzbGF0ZWdyYXknOiAweDc3ODg5
OSwgJ2xpZ2h0c2xhdGVncmV5JzogMHg3Nzg4OTksICdsaWdodHN0ZWVsYmx1ZSc6IDB4QjBDNERF
LCAnbGlnaHR5ZWxsb3cnOiAweEZGRkZFMCwgJ2xpbWUnOiAweDAwRkYwMCwgJ2xpbWVncmVlbic6
IDB4MzJDRDMyLAotICAgICAgICAnbGluZW4nOiAweEZBRjBFNiwgJ21hZ2VudGEnOiAweEZGMDBG
RiwgJ21hcm9vbic6IDB4ODAwMDAwLCAnbWVkaXVtYXF1YW1hcmluZSc6IDB4NjZDREFBLCAnbWVk
aXVtYmx1ZSc6IDB4MDAwMENELCAnbWVkaXVtb3JjaGlkJzogMHhCQTU1RDMsCi0gICAgICAgICdt
ZWRpdW1wdXJwbGUnOiAweDkzNzBEQiwgJ21lZGl1bXNlYWdyZWVuJzogMHgzQ0IzNzEsICdtZWRp
dW1zbGF0ZWJsdWUnOiAweDdCNjhFRSwgJ21lZGl1bXNwcmluZ2dyZWVuJzogMHgwMEZBOUEsICdt
ZWRpdW10dXJxdW9pc2UnOiAweDQ4RDFDQywKLSAgICAgICAgJ21lZGl1bXZpb2xldHJlZCc6IDB4
QzcxNTg1LCAnbWlkbmlnaHRibHVlJzogMHgxOTE5NzAsICdtaW50Y3JlYW0nOiAweEY1RkZGQSwg
J21pc3R5cm9zZSc6IDB4RkZFNEUxLCAnbW9jY2FzaW4nOiAweEZGRTRCNSwgJ25hdmFqb3doaXRl
JzogMHhGRkRFQUQsCi0gICAgICAgICduYXZ5JzogMHgwMDAwODAsICdvbGRsYWNlJzogMHhGREY1
RTYsICdvbGl2ZSc6IDB4ODA4MDAwLCAnb2xpdmVkcmFiJzogMHg2QjhFMjMsICdvcmFuZ2UnOiAw
eEZGQTUwMCwgJ29yYW5nZXJlZCc6IDB4RkY0NTAwLCAnb3JjaGlkJzogMHhEQTcwRDYsCi0gICAg
ICAgICdwYWxlZ29sZGVucm9kJzogMHhFRUU4QUEsICdwYWxlZ3JlZW4nOiAweDk4RkI5OCwgJ3Bh
bGV0dXJxdW9pc2UnOiAweEFGRUVFRSwgJ3BhbGV2aW9sZXRyZWQnOiAweERCNzA5MywgJ3BhcGF5
YXdoaXAnOiAweEZGRUZENSwgJ3BlYWNocHVmZic6IDB4RkZEQUI5LAotICAgICAgICAncGVydSc6
IDB4Q0Q4NTNGLCAncGluayc6IDB4RkZDMENCLCAncGx1bSc6IDB4RERBMERELCAncG93ZGVyYmx1
ZSc6IDB4QjBFMEU2LCAncHVycGxlJzogMHg4MDAwODAsICdyZWQnOiAweEZGMDAwMCwgJ3Jvc3li
cm93bic6IDB4QkM4RjhGLAotICAgICAgICAncm95YWxibHVlJzogMHg0MTY5RTEsICdzYWRkbGVi
cm93bic6IDB4OEI0NTEzLCAnc2FsbW9uJzogMHhGQTgwNzIsICdzYW5keWJyb3duJzogMHhGNEE0
NjAsICdzZWFncmVlbic6IDB4MkU4QjU3LCAnc2Vhc2hlbGwnOiAweEZGRjVFRSwKLSAgICAgICAg
J3NpZW5uYSc6IDB4QTA1MjJELCAnc2lsdmVyJzogMHhDMEMwQzAsICdza3libHVlJzogMHg4N0NF
RUIsICdzbGF0ZWJsdWUnOiAweDZBNUFDRCwgJ3NsYXRlZ3JheSc6IDB4NzA4MDkwLCAnc2xhdGVn
cmV5JzogMHg3MDgwOTAsICdzbm93JzogMHhGRkZBRkEsCi0gICAgICAgICdzcHJpbmdncmVlbic6
IDB4MDBGRjdGLCAnc3RlZWxibHVlJzogMHg0NjgyQjQsICd0YW4nOiAweEQyQjQ4QywgJ3RlYWwn
OiAweDAwODA4MCwgJ3RoaXN0bGUnOiAweEQ4QkZEOCwgJ3RvbWF0byc6IDB4RkY2MzQ3LCAndHVy
cXVvaXNlJzogMHg0MEUwRDAsCi0gICAgICAgICd2aW9sZXQnOiAweEVFODJFRSwgJ3doZWF0Jzog
MHhGNURFQjMsICd3aGl0ZSc6IDB4RkZGRkZGLCAnd2hpdGVzbW9rZSc6IDB4RjVGNUY1LCAneWVs
bG93JzogMHhGRkZGMDAsICd5ZWxsb3dncmVlbic6IDB4OUFDRDMyIH07CisgICAgICAgIH0sCiAK
LSAgICBmdW5jdGlvbiBDb2xvciggciwgZywgYiApIHsKKyAgICAgICAgZnJvbUJ1ZmZlckF0dHJp
YnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7CiAKLSAgICAgICAg
aWYgKCBnID09PSB1bmRlZmluZWQgJiYgYiA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
aWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgLy8gciBpcyBUSFJF
RS5Db2xvciwgaGV4IG9yIHN0cmluZwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KCByICk7
CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhh
cyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTsKIAotICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRoaXMuc2V0UkdCKCByLCBnLCBi
ICk7CisgICAgICAgICAgICB0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WCggaW5kZXggKTsKKyAgICAg
ICAgICAgIHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKCBpbmRleCApOworICAgICAgICAgICAgdGhp
cy56ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7CisgICAgICAgICAgICB0aGlzLncgPSBhdHRy
aWJ1dGUuZ2V0VyggaW5kZXggKTsKIAotICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgT2JqZWN0LmFzc2lnbiggQ29sb3IucHJvdG90eXBlLCB7CisgICAgICAgIH0KIAotICAg
ICAgICBpc0NvbG9yOiB0cnVlLAorICAgIH0gKTsKIAotICAgICAgICByOiAxLCBnOiAxLCBiOiAx
LAorICAgIC8qKgorICAgICAqIEBhdXRob3Igc3ppbWVrIC8gaHR0cHM6Ly9naXRodWIuY29tL3N6
aW1lay8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29t
LworICAgICAqIEBhdXRob3IgTWFyaXVzIEtpbnRlbCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9raW50
ZWwKKyAgICAgKi8KIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgLyoK
KyAgICAgSW4gb3B0aW9ucywgd2UgY2FuIHNwZWNpZnk6CisgICAgICogVGV4dHVyZSBwYXJhbWV0
ZXJzIGZvciBhbiBhdXRvLWdlbmVyYXRlZCB0YXJnZXQgdGV4dHVyZQorICAgICAqIGRlcHRoQnVm
ZmVyL3N0ZW5jaWxCdWZmZXI6IEJvb2xlYW5zIHRvIGluZGljYXRlIGlmIHdlIHNob3VsZCBnZW5l
cmF0ZSB0aGVzZSBidWZmZXJzCisgICAgKi8KKyAgICBmdW5jdGlvbiBXZWJHTFJlbmRlclRhcmdl
dCggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApIHsKIAotICAgICAgICAgICAgaWYgKCB2YWx1ZSAm
JiB2YWx1ZS5pc0NvbG9yICkgeworICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7CisgICAgICAg
IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICAgICAgdGhpcy5jb3B5KCB2YWx1
ZSApOworICAgICAgICB0aGlzLnNjaXNzb3IgPSBuZXcgVmVjdG9yNCggMCwgMCwgd2lkdGgsIGhl
aWdodCApOworICAgICAgICB0aGlzLnNjaXNzb3JUZXN0ID0gZmFsc2U7CiAKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgKSB7CisgICAgICAgIHRoaXMu
dmlld3BvcnQgPSBuZXcgVmVjdG9yNCggMCwgMCwgd2lkdGgsIGhlaWdodCApOwogCi0gICAgICAg
ICAgICAgICAgdGhpcy5zZXRIZXgoIHZhbHVlICk7CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICdzdHJp
bmcnICkgeworICAgICAgICBpZiAoIG9wdGlvbnMubWluRmlsdGVyID09PSB1bmRlZmluZWQgKSBv
cHRpb25zLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKIAotICAgICAgICAgICAgICAgIHRoaXMu
c2V0U3R5bGUoIHZhbHVlICk7CisgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKCB1
bmRlZmluZWQsIHVuZGVmaW5lZCwgb3B0aW9ucy53cmFwUywgb3B0aW9ucy53cmFwVCwgb3B0aW9u
cy5tYWdGaWx0ZXIsIG9wdGlvbnMubWluRmlsdGVyLCBvcHRpb25zLmZvcm1hdCwgb3B0aW9ucy50
eXBlLCBvcHRpb25zLmFuaXNvdHJvcHksIG9wdGlvbnMuZW5jb2RpbmcgKTsKIAotICAgICAgICAg
ICAgfQorICAgICAgICB0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gb3B0aW9ucy5nZW5l
cmF0ZU1pcG1hcHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZ2VuZXJhdGVNaXBtYXBzIDogdHJ1
ZTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHRoaXMuZGVwdGhCdWZmZXIg
PSBvcHRpb25zLmRlcHRoQnVmZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRlcHRoQnVmZmVy
IDogdHJ1ZTsKKyAgICAgICAgdGhpcy5zdGVuY2lsQnVmZmVyID0gb3B0aW9ucy5zdGVuY2lsQnVm
ZmVyICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZW5jaWxCdWZmZXIgOiB0cnVlOworICAgICAg
ICB0aGlzLmRlcHRoVGV4dHVyZSA9IG9wdGlvbnMuZGVwdGhUZXh0dXJlICE9PSB1bmRlZmluZWQg
PyBvcHRpb25zLmRlcHRoVGV4dHVyZSA6IG51bGw7CiAKLSAgICAgICAgfSwKKyAgICB9CiAKLSAg
ICAgICAgc2V0U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHsKKyAgICBXZWJHTFJlbmRlclRh
cmdldC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBFdmVudERpc3Bh
dGNoZXIucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgdGhpcy5yID0gc2NhbGFyOwotICAg
ICAgICAgICAgdGhpcy5nID0gc2NhbGFyOwotICAgICAgICAgICAgdGhpcy5iID0gc2NhbGFyOwor
ICAgICAgICBjb25zdHJ1Y3RvcjogV2ViR0xSZW5kZXJUYXJnZXQsCiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICBpc1dlYkdMUmVuZGVyVGFyZ2V0OiB0cnVlLAogCi0gICAgICAg
IH0sCisgICAgICAgIHNldFNpemU6IGZ1bmN0aW9uICggd2lkdGgsIGhlaWdodCApIHsKIAotICAg
ICAgICBzZXRIZXg6IGZ1bmN0aW9uICggaGV4ICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLndp
ZHRoICE9PSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPT0gaGVpZ2h0ICkgewogCi0gICAgICAgICAg
ICBoZXggPSBNYXRoLmZsb29yKCBoZXggKTsKKyAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0g
d2lkdGg7CisgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAg
ICAgIHRoaXMuciA9ICggaGV4ID4+IDE2ICYgMjU1ICkgLyAyNTU7Ci0gICAgICAgICAgICB0aGlz
LmcgPSAoIGhleCA+PiA4ICYgMjU1ICkgLyAyNTU7Ci0gICAgICAgICAgICB0aGlzLmIgPSAoIGhl
eCAmIDI1NSApIC8gMjU1OworICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZSgpOwogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAg
ICAgICAgdGhpcy52aWV3cG9ydC5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTsKKyAgICAgICAg
ICAgIHRoaXMuc2Npc3Nvci5zZXQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTsKIAotICAgICAgICBz
ZXRSR0I6IGZ1bmN0aW9uICggciwgZywgYiApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
dGhpcy5yID0gcjsKLSAgICAgICAgICAgIHRoaXMuZyA9IGc7Ci0gICAgICAgICAgICB0aGlzLmIg
PSBiOworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRo
aXMgKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIHNldEhTTDogZnVuY3Rpb24gKCkgewotCi0g
ICAgICAgICAgICBmdW5jdGlvbiBodWUycmdiKCBwLCBxLCB0ICkgeworICAgICAgICBjb3B5OiBm
dW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAgICAgICAgIGlmICggdCA8IDAgKSB0ICs9
IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCB0ID4gMSApIHQgLT0gMTsKLSAgICAgICAgICAgICAg
ICBpZiAoIHQgPCAxIC8gNiApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqIHQ7Ci0gICAgICAg
ICAgICAgICAgaWYgKCB0IDwgMSAvIDIgKSByZXR1cm4gcTsKLSAgICAgICAgICAgICAgICBpZiAo
IHQgPCAyIC8gMyApIHJldHVybiBwICsgKCBxIC0gcCApICogNiAqICggMiAvIDMgLSB0ICk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICB0aGlzLndpZHRoID0gc291cmNl
LndpZHRoOworICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBzb3VyY2UuaGVpZ2h0OwogCi0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnZpZXdwb3J0LmNvcHkoIHNvdXJjZS52aWV3cG9y
dCApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0SFNMKCBoLCBzLCBsICkgewor
ICAgICAgICAgICAgdGhpcy50ZXh0dXJlID0gc291cmNlLnRleHR1cmUuY2xvbmUoKTsKIAotICAg
ICAgICAgICAgICAgIC8vIGgscyxsIHJhbmdlcyBhcmUgaW4gMC4wIC0gMS4wCi0gICAgICAgICAg
ICAgICAgaCA9IF9NYXRoLmV1Y2xpZGVhbk1vZHVsbyggaCwgMSApOwotICAgICAgICAgICAgICAg
IHMgPSBfTWF0aC5jbGFtcCggcywgMCwgMSApOwotICAgICAgICAgICAgICAgIGwgPSBfTWF0aC5j
bGFtcCggbCwgMCwgMSApOworICAgICAgICAgICAgdGhpcy5kZXB0aEJ1ZmZlciA9IHNvdXJjZS5k
ZXB0aEJ1ZmZlcjsKKyAgICAgICAgICAgIHRoaXMuc3RlbmNpbEJ1ZmZlciA9IHNvdXJjZS5zdGVu
Y2lsQnVmZmVyOworICAgICAgICAgICAgdGhpcy5kZXB0aFRleHR1cmUgPSBzb3VyY2UuZGVwdGhU
ZXh0dXJlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBzID09PSAwICkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yID0gdGhpcy5nID0gdGhp
cy5iID0gbDsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
IGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGwg
PD0gMC41ID8gbCAqICggMSArIHMgKSA6IGwgKyBzIC0gKCBsICogcyApOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgcSA9ICggMiAqIGwgKSAtIHA7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKIAotICAgICAgICAgICAgICAgICAgICB0aGlz
LnIgPSBodWUycmdiKCBxLCBwLCBoICsgMSAvIDMgKTsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5nID0gaHVlMnJnYiggcSwgcCwgaCApOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSBo
dWUycmdiKCBxLCBwLCBoIC0gMSAvIDMgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
fQorICAgIH0gKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIC8qKgorICAg
ICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20KKyAgICAgKi8K
IAotICAgICAgICAgICAgfTsKKyAgICBmdW5jdGlvbiBXZWJHTFJlbmRlclRhcmdldEN1YmUoIHdp
ZHRoLCBoZWlnaHQsIG9wdGlvbnMgKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICBXZWJHTFJl
bmRlclRhcmdldC5jYWxsKCB0aGlzLCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICk7CiAKLSAgICAg
ICAgc2V0U3R5bGU6IGZ1bmN0aW9uICggc3R5bGUgKSB7CisgICAgICAgIHRoaXMuYWN0aXZlQ3Vi
ZUZhY2UgPSAwOyAvLyBQWCAwLCBOWCAxLCBQWSAyLCBOWSAzLCBQWiA0LCBOWiA1CisgICAgICAg
IHRoaXMuYWN0aXZlTWlwTWFwTGV2ZWwgPSAwOwogCi0gICAgICAgICAgICBmdW5jdGlvbiBoYW5k
bGVBbHBoYSggc3RyaW5nICkgeworICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggc3RyaW5n
ID09PSB1bmRlZmluZWQgKSByZXR1cm47CisgICAgV2ViR0xSZW5kZXJUYXJnZXRDdWJlLnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoIFdlYkdMUmVuZGVyVGFyZ2V0LnByb3RvdHlwZSApOworICAg
IFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXZWJHTFJlbmRl
clRhcmdldEN1YmU7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHBhcnNlRmxvYXQoIHN0cmluZyAp
IDwgMSApIHsKKyAgICBXZWJHTFJlbmRlclRhcmdldEN1YmUucHJvdG90eXBlLmlzV2ViR0xSZW5k
ZXJUYXJnZXRDdWJlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICcgKyBzdHlsZSArICcgd2lsbCBiZSBp
Z25vcmVkLicgKTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2Fs
dGVyZWRxdWFsaWEuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgfQorICAgIGZ1bmN0
aW9uIERhdGFUZXh0dXJlKCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1hcHBp
bmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGFuaXNvdHJvcHksIGVuY29k
aW5nICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgIFRleHR1cmUuY2FsbCggdGhpcywgbnVs
bCwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0
eXBlLCBhbmlzb3Ryb3B5LCBlbmNvZGluZyApOwogCisgICAgICAgIHRoaXMuaW1hZ2UgPSB7IGRh
dGE6IGRhdGEsIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTsKIAotICAgICAgICAgICAg
dmFyIG07CisgICAgICAgIHRoaXMubWFnRmlsdGVyID0gbWFnRmlsdGVyICE9PSB1bmRlZmluZWQg
PyBtYWdGaWx0ZXIgOiBOZWFyZXN0RmlsdGVyOworICAgICAgICB0aGlzLm1pbkZpbHRlciA9IG1p
bkZpbHRlciAhPT0gdW5kZWZpbmVkID8gbWluRmlsdGVyIDogTmVhcmVzdEZpbHRlcjsKIAotICAg
ICAgICAgICAgaWYgKCBtID0gL14oKD86cmdifGhzbClhPylcKFxzKihbXlwpXSopXCkvLmV4ZWMo
IHN0eWxlICkgKSB7CisgICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuZmxpcFkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSAx
OwogCi0gICAgICAgICAgICAgICAgLy8gcmdiIC8gaHNsCisgICAgfQogCi0gICAgICAgICAgICAg
ICAgdmFyIGNvbG9yOwotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbVsgMSBdOwotICAgICAg
ICAgICAgICAgIHZhciBjb21wb25lbnRzID0gbVsgMiBdOworICAgIERhdGFUZXh0dXJlLnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoIFRleHR1cmUucHJvdG90eXBlICk7CisgICAgRGF0YVRleHR1
cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGF0YVRleHR1cmU7CiAKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKCBuYW1lICkgeworICAgIERhdGFUZXh0dXJlLnByb3RvdHlwZS5pc0RhdGFUZXh0
dXJlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdyZ2InOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlICdyZ2JhJzoKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9u
IC8gaHR0cDovL2NsYXJhLmlvCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9n
aXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY29sb3IgPSAvXihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKCxccyooWzAt
OV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyggY29tcG9uZW50cyApICkgeworICAgIGZ1bmN0aW9u
IEJveDMoIG1pbiwgbWF4ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmdi
KDI1NSwwLDApIHJnYmEoMjU1LDAsMCwwLjUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5yID0gTWF0aC5taW4oIDI1NSwgcGFyc2VJbnQoIGNvbG9yWyAxIF0sIDEwICkgKSAvIDI1
NTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmcgPSBNYXRoLm1pbiggMjU1LCBw
YXJzZUludCggY29sb3JbIDIgXSwgMTAgKSApIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYiA9IE1hdGgubWluKCAyNTUsIHBhcnNlSW50KCBjb2xvclsgMyBdLCAxMCAp
ICkgLyAyNTU7CisgICAgICAgIHRoaXMubWluID0gKCBtaW4gIT09IHVuZGVmaW5lZCApID8gbWlu
IDogbmV3IFZlY3RvcjMoICsgSW5maW5pdHksICsgSW5maW5pdHksICsgSW5maW5pdHkgKTsKKyAg
ICAgICAgdGhpcy5tYXggPSAoIG1heCAhPT0gdW5kZWZpbmVkICkgPyBtYXggOiBuZXcgVmVjdG9y
MyggLSBJbmZpbml0eSwgLSBJbmZpbml0eSwgLSBJbmZpbml0eSApOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlQWxwaGEoIGNvbG9yWyA1IF0gKTsKKyAgICB9CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICBPYmplY3QuYXNzaWduKCBC
b3gzLnByb3RvdHlwZSwgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGlz
Qm94MzogdHJ1ZSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb2xvciA9IC9eKFxk
KylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooLFxzKihbMC05XSpcLj9bMC05XSsp
XHMqKT8kLy5leGVjKCBjb21wb25lbnRzICkgKSB7CisgICAgICAgIHNldDogZnVuY3Rpb24gKCBt
aW4sIG1heCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJnYigxMDAlLDAl
LDAlKSByZ2JhKDEwMCUsMCUsMCUsMC41KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuciA9IE1hdGgubWluKCAxMDAsIHBhcnNlSW50KCBjb2xvclsgMSBdLCAxMCApICkgLyAxMDA7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nID0gTWF0aC5taW4oIDEwMCwgcGFy
c2VJbnQoIGNvbG9yWyAyIF0sIDEwICkgKSAvIDEwMDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmIgPSBNYXRoLm1pbiggMTAwLCBwYXJzZUludCggY29sb3JbIDMgXSwgMTAgKSAp
IC8gMTAwOworICAgICAgICAgICAgdGhpcy5taW4uY29weSggbWluICk7CisgICAgICAgICAgICB0
aGlzLm1heC5jb3B5KCBtYXggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZUFscGhhKCBjb2xvclsgNSBdICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAogCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgIHNldEZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJh
eSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2YXIg
bWluWCA9ICsgSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbWluWSA9ICsgSW5maW5pdHk7Cisg
ICAgICAgICAgICB2YXIgbWluWiA9ICsgSW5maW5pdHk7CiAKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnaHNsJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHNsYSc6CisgICAgICAgICAg
ICB2YXIgbWF4WCA9IC0gSW5maW5pdHk7CisgICAgICAgICAgICB2YXIgbWF4WSA9IC0gSW5maW5p
dHk7CisgICAgICAgICAgICB2YXIgbWF4WiA9IC0gSW5maW5pdHk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY29sb3IgPSAvXihbMC05XSpcLj9bMC05XSspXHMqLFxzKihcZCspXCVc
cyosXHMqKFxkKylcJVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQvLmV4ZWMoIGNvbXBv
bmVudHMgKSApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7IGkgKz0gMyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhz
bCgxMjAsNTAlLDUwJSkgaHNsYSgxMjAsNTAlLDUwJSwwLjUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGggPSBwYXJzZUZsb2F0KCBjb2xvclsgMSBdICkgLyAzNjA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBwYXJzZUludCggY29sb3JbIDIgXSwgMTAgKSAv
IDEwMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHBhcnNlSW50KCBjb2xv
clsgMyBdLCAxMCApIC8gMTAwOworICAgICAgICAgICAgICAgIHZhciB4ID0gYXJyYXlbIGkgXTsK
KyAgICAgICAgICAgICAgICB2YXIgeSA9IGFycmF5WyBpICsgMSBdOworICAgICAgICAgICAgICAg
IHZhciB6ID0gYXJyYXlbIGkgKyAyIF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVBbHBoYSggY29sb3JbIDUgXSApOworICAgICAgICAgICAgICAgIGlmICggeCA8IG1pblgg
KSBtaW5YID0geDsKKyAgICAgICAgICAgICAgICBpZiAoIHkgPCBtaW5ZICkgbWluWSA9IHk7Cisg
ICAgICAgICAgICAgICAgaWYgKCB6IDwgbWluWiApIG1pblogPSB6OwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SFNMKCBoLCBzLCBsICk7CisgICAgICAgICAg
ICAgICAgaWYgKCB4ID4gbWF4WCApIG1heFggPSB4OworICAgICAgICAgICAgICAgIGlmICggeSA+
IG1heFkgKSBtYXhZID0geTsKKyAgICAgICAgICAgICAgICBpZiAoIHogPiBtYXhaICkgbWF4WiA9
IHo7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0aGlzLm1pbi5zZXQoIG1pblgs
IG1pblksIG1pblogKTsKKyAgICAgICAgICAgIHRoaXMubWF4LnNldCggbWF4WCwgbWF4WSwgbWF4
WiApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG0gPSAvXlwjKFtBLUZhLWYwLTldKykkLy5leGVjKCBzdHls
ZSApICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgLy8gaGV4IGNvbG9yCisgICAg
ICAgIHNldEZyb21CdWZmZXJBdHRyaWJ1dGU6IGZ1bmN0aW9uICggYXR0cmlidXRlICkgewogCi0g
ICAgICAgICAgICAgICAgdmFyIGhleCA9IG1bIDEgXTsKLSAgICAgICAgICAgICAgICB2YXIgc2l6
ZSA9IGhleC5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHNpemUgPT09IDMgKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gI2ZmMAotICAgICAgICAgICAgICAgICAgICB0aGlzLnIg
PSBwYXJzZUludCggaGV4LmNoYXJBdCggMCApICsgaGV4LmNoYXJBdCggMCApLCAxNiApIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLmcgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMSAp
ICsgaGV4LmNoYXJBdCggMSApLCAxNiApIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICB0aGlz
LmIgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMiApICsgaGV4LmNoYXJBdCggMiApLCAxNiApIC8g
MjU1OworICAgICAgICAgICAgdmFyIG1pblggPSArIEluZmluaXR5OworICAgICAgICAgICAgdmFy
IG1pblkgPSArIEluZmluaXR5OworICAgICAgICAgICAgdmFyIG1pblogPSArIEluZmluaXR5Owog
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdmFyIG1heFgg
PSAtIEluZmluaXR5OworICAgICAgICAgICAgdmFyIG1heFkgPSAtIEluZmluaXR5OworICAgICAg
ICAgICAgdmFyIG1heFogPSAtIEluZmluaXR5OwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggc2l6ZSA9PT0gNiApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGF0dHJp
YnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gI2Zm
MDAwMAotICAgICAgICAgICAgICAgICAgICB0aGlzLnIgPSBwYXJzZUludCggaGV4LmNoYXJBdCgg
MCApICsgaGV4LmNoYXJBdCggMSApLCAxNiApIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICB0
aGlzLmcgPSBwYXJzZUludCggaGV4LmNoYXJBdCggMiApICsgaGV4LmNoYXJBdCggMyApLCAxNiAp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSBwYXJzZUludCggaGV4LmNoYXJB
dCggNCApICsgaGV4LmNoYXJBdCggNSApLCAxNiApIC8gMjU1OworICAgICAgICAgICAgICAgIHZh
ciB4ID0gYXR0cmlidXRlLmdldFgoIGkgKTsKKyAgICAgICAgICAgICAgICB2YXIgeSA9IGF0dHJp
YnV0ZS5nZXRZKCBpICk7CisgICAgICAgICAgICAgICAgdmFyIHogPSBhdHRyaWJ1dGUuZ2V0Wigg
aSApOwogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAg
IGlmICggeCA8IG1pblggKSBtaW5YID0geDsKKyAgICAgICAgICAgICAgICBpZiAoIHkgPCBtaW5Z
ICkgbWluWSA9IHk7CisgICAgICAgICAgICAgICAgaWYgKCB6IDwgbWluWiApIG1pblogPSB6Owog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggeCA+IG1heFggKSBtYXhY
ID0geDsKKyAgICAgICAgICAgICAgICBpZiAoIHkgPiBtYXhZICkgbWF4WSA9IHk7CisgICAgICAg
ICAgICAgICAgaWYgKCB6ID4gbWF4WiApIG1heFogPSB6OwogCiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICggc3R5bGUgJiYgc3R5bGUubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAg
IHRoaXMubWluLnNldCggbWluWCwgbWluWSwgbWluWiApOworICAgICAgICAgICAgdGhpcy5tYXgu
c2V0KCBtYXhYLCBtYXhZLCBtYXhaICk7CiAKLSAgICAgICAgICAgICAgICAvLyBjb2xvciBrZXl3
b3JkcwotICAgICAgICAgICAgICAgIHZhciBoZXggPSBDb2xvcktleXdvcmRzWyBzdHlsZSBdOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGhleCAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlZAot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEhleCggaGV4ICk7CisgICAgICAgIHNldEZyb21Q
b2ludHM6IGZ1bmN0aW9uICggcG9pbnRzICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMubWFrZUVtcHR5KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8g
dW5rbm93biBjb2xvcgotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5D
b2xvcjogVW5rbm93biBjb2xvciAnICsgc3R5bGUgKTsKKyAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgaWwgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRCeVBvaW50KCBwb2ludHNbIGkgXSAp
OwogCiAgICAgICAgICAgICB9CiAKQEAgLTUxMTcsMTE4NTEgKzQ4MjgsMTE3MTUgQEAKIAogICAg
ICAgICB9LAogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNldEZyb21D
ZW50ZXJBbmRTaXplOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhp
cy5jb25zdHJ1Y3RvciggdGhpcy5yLCB0aGlzLmcsIHRoaXMuYiApOworICAgICAgICAgICAgdmFy
IHYxID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIHNldEZyb21DZW50ZXJBbmRTaXplKCBjZW50ZXIsIHNpemUgKSB7CiAKLSAgICAgICAg
Y29weTogZnVuY3Rpb24gKCBjb2xvciApIHsKKyAgICAgICAgICAgICAgICB2YXIgaGFsZlNpemUg
PSB2MS5jb3B5KCBzaXplICkubXVsdGlwbHlTY2FsYXIoIDAuNSApOwogCi0gICAgICAgICAgICB0
aGlzLnIgPSBjb2xvci5yOwotICAgICAgICAgICAgdGhpcy5nID0gY29sb3IuZzsKLSAgICAgICAg
ICAgIHRoaXMuYiA9IGNvbG9yLmI7CisgICAgICAgICAgICAgICAgdGhpcy5taW4uY29weSggY2Vu
dGVyICkuc3ViKCBoYWxmU2l6ZSApOworICAgICAgICAgICAgICAgIHRoaXMubWF4LmNvcHkoIGNl
bnRlciApLmFkZCggaGFsZlNpemUgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH07CiAK
LSAgICAgICAgY29weUdhbW1hVG9MaW5lYXI6IGZ1bmN0aW9uICggY29sb3IsIGdhbW1hRmFjdG9y
ICkgeworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIGlmICggZ2FtbWFGYWN0b3IgPT09IHVu
ZGVmaW5lZCApIGdhbW1hRmFjdG9yID0gMi4wOworICAgICAgICBzZXRGcm9tT2JqZWN0OiBmdW5j
dGlvbiAoIG9iamVjdCApIHsKIAotICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5wb3coIGNvbG9y
LnIsIGdhbW1hRmFjdG9yICk7Ci0gICAgICAgICAgICB0aGlzLmcgPSBNYXRoLnBvdyggY29sb3Iu
ZywgZ2FtbWFGYWN0b3IgKTsKLSAgICAgICAgICAgIHRoaXMuYiA9IE1hdGgucG93KCBjb2xvci5i
LCBnYW1tYUZhY3RvciApOworICAgICAgICAgICAgdGhpcy5tYWtlRW1wdHkoKTsKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRCeU9iamVj
dCggb2JqZWN0ICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5TGluZWFyVG9HYW1tYTog
ZnVuY3Rpb24gKCBjb2xvciwgZ2FtbWFGYWN0b3IgKSB7Ci0KLSAgICAgICAgICAgIGlmICggZ2Ft
bWFGYWN0b3IgPT09IHVuZGVmaW5lZCApIGdhbW1hRmFjdG9yID0gMi4wOwotCi0gICAgICAgICAg
ICB2YXIgc2FmZUludmVyc2UgPSAoIGdhbW1hRmFjdG9yID4gMCApID8gKCAxLjAgLyBnYW1tYUZh
Y3RvciApIDogMS4wOwotCi0gICAgICAgICAgICB0aGlzLnIgPSBNYXRoLnBvdyggY29sb3Iuciwg
c2FmZUludmVyc2UgKTsKLSAgICAgICAgICAgIHRoaXMuZyA9IE1hdGgucG93KCBjb2xvci5nLCBz
YWZlSW52ZXJzZSApOwotICAgICAgICAgICAgdGhpcy5iID0gTWF0aC5wb3coIGNvbG9yLmIsIHNh
ZmVJbnZlcnNlICk7CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCku
Y29weSggdGhpcyApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY29udmVydEdhbW1hVG9MaW5l
YXI6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIHIgPSB0aGlzLnIsIGcgPSB0aGlz
LmcsIGIgPSB0aGlzLmI7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggYm94ICkgewogCi0gICAg
ICAgICAgICB0aGlzLnIgPSByICogcjsKLSAgICAgICAgICAgIHRoaXMuZyA9IGcgKiBnOwotICAg
ICAgICAgICAgdGhpcy5iID0gYiAqIGI7CisgICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBib3gu
bWluICk7CisgICAgICAgICAgICB0aGlzLm1heC5jb3B5KCBib3gubWF4ICk7CiAKICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY29udmVydExpbmVhclRv
R2FtbWE6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbWFrZUVtcHR5OiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIHRoaXMuciA9IE1hdGguc3FydCggdGhpcy5yICk7Ci0gICAgICAgICAgICB0
aGlzLmcgPSBNYXRoLnNxcnQoIHRoaXMuZyApOwotICAgICAgICAgICAgdGhpcy5iID0gTWF0aC5z
cXJ0KCB0aGlzLmIgKTsKKyAgICAgICAgICAgIHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gdGhp
cy5taW4ueiA9ICsgSW5maW5pdHk7CisgICAgICAgICAgICB0aGlzLm1heC54ID0gdGhpcy5tYXgu
eSA9IHRoaXMubWF4LnogPSAtIEluZmluaXR5OwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAogICAgICAgICB9LAogCi0gICAgICAgIGdldEhleDogZnVuY3Rpb24gKCkgewotCi0gICAgICAg
ICAgICByZXR1cm4gKCB0aGlzLnIgKiAyNTUgKSA8PCAxNiBeICggdGhpcy5nICogMjU1ICkgPDwg
OCBeICggdGhpcy5iICogMjU1ICkgPDwgMDsKLQotICAgICAgICB9LAorICAgICAgICBpc0VtcHR5
OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgZ2V0SGV4U3RyaW5nOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAvLyB0aGlzIGlzIGEgbW9yZSByb2J1c3QgY2hlY2sgZm9yIGVtcHR5IHRoYW4g
KCB2b2x1bWUgPD0gMCApIGJlY2F1c2Ugdm9sdW1lIGNhbiBnZXQgcG9zaXRpdmUgd2l0aCB0d28g
bmVnYXRpdmUgYXhlcwogCi0gICAgICAgICAgICByZXR1cm4gKCAnMDAwMDAwJyArIHRoaXMuZ2V0
SGV4KCkudG9TdHJpbmcoIDE2ICkgKS5zbGljZSggLSA2ICk7CisgICAgICAgICAgICByZXR1cm4g
KCB0aGlzLm1heC54IDwgdGhpcy5taW4ueCApIHx8ICggdGhpcy5tYXgueSA8IHRoaXMubWluLnkg
KSB8fCAoIHRoaXMubWF4LnogPCB0aGlzLm1pbi56ICk7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBnZXRIU0w6IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7Ci0KLSAgICAgICAgICAgIC8v
IGgscyxsIHJhbmdlcyBhcmUgaW4gMC4wIC0gMS4wCi0KLSAgICAgICAgICAgIHZhciBoc2wgPSBv
cHRpb25hbFRhcmdldCB8fCB7IGg6IDAsIHM6IDAsIGw6IDAgfTsKLQotICAgICAgICAgICAgdmFy
IHIgPSB0aGlzLnIsIGcgPSB0aGlzLmcsIGIgPSB0aGlzLmI7Ci0KLSAgICAgICAgICAgIHZhciBt
YXggPSBNYXRoLm1heCggciwgZywgYiApOwotICAgICAgICAgICAgdmFyIG1pbiA9IE1hdGgubWlu
KCByLCBnLCBiICk7Ci0KLSAgICAgICAgICAgIHZhciBodWUsIHNhdHVyYXRpb247Ci0gICAgICAg
ICAgICB2YXIgbGlnaHRuZXNzID0gKCBtaW4gKyBtYXggKSAvIDIuMDsKLQotICAgICAgICAgICAg
aWYgKCBtaW4gPT09IG1heCApIHsKKyAgICAgICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoIHRhcmdl
dCApIHsKIAotICAgICAgICAgICAgICAgIGh1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgc2F0dXJh
dGlvbiA9IDA7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LkJveDM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAg
ICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICB2YXIgZGVs
dGEgPSBtYXggLSBtaW47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBzYXR1cmF0
aW9uID0gbGlnaHRuZXNzIDw9IDAuNSA/IGRlbHRhIC8gKCBtYXggKyBtaW4gKSA6IGRlbHRhIC8g
KCAyIC0gbWF4IC0gbWluICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyB0
YXJnZXQuc2V0KCAwLCAwLCAwICkgOiB0YXJnZXQuYWRkVmVjdG9ycyggdGhpcy5taW4sIHRoaXMu
bWF4ICkubXVsdGlwbHlTY2FsYXIoIDAuNSApOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoICgg
bWF4ICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgcjogaHVlID0g
KCBnIC0gYiApIC8gZGVsdGEgKyAoIGcgPCBiID8gNiA6IDAgKTsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgZzogaHVlID0gKCBiIC0gciApIC8gZGVsdGEgKyAyOyBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBiOiBodWUgPSAoIHIgLSBnICkgLyBkZWx0YSArIDQ7IGJy
ZWFrOworICAgICAgICBnZXRTaXplOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICAgICAgICAgICAgICBodWUgLz0gNjsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdU
SFJFRS5Cb3gzOiAuZ2V0U2l6ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBoc2wuaCA9IGh1ZTsKLSAgICAgICAgICAgIGhzbC5zID0gc2F0dXJhdGlvbjsKLSAg
ICAgICAgICAgIGhzbC5sID0gbGlnaHRuZXNzOwotCi0gICAgICAgICAgICByZXR1cm4gaHNsOwot
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2V0U3R5bGU6IGZ1bmN0aW9uICgpIHsKLQotICAgICAg
ICAgICAgcmV0dXJuICdyZ2IoJyArICggKCB0aGlzLnIgKiAyNTUgKSB8IDAgKSArICcsJyArICgg
KCB0aGlzLmcgKiAyNTUgKSB8IDAgKSArICcsJyArICggKCB0aGlzLmIgKiAyNTUgKSB8IDAgKSAr
ICcpJzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5zZXQoIDAs
IDAsIDAgKSA6IHRhcmdldC5zdWJWZWN0b3JzKCB0aGlzLm1heCwgdGhpcy5taW4gKTsKIAogICAg
ICAgICB9LAogCi0gICAgICAgIG9mZnNldEhTTDogZnVuY3Rpb24gKCBoLCBzLCBsICkgewotCi0g
ICAgICAgICAgICB2YXIgaHNsID0gdGhpcy5nZXRIU0woKTsKLQotICAgICAgICAgICAgaHNsLmgg
Kz0gaDsgaHNsLnMgKz0gczsgaHNsLmwgKz0gbDsKKyAgICAgICAgZXhwYW5kQnlQb2ludDogZnVu
Y3Rpb24gKCBwb2ludCApIHsKIAotICAgICAgICAgICAgdGhpcy5zZXRIU0woIGhzbC5oLCBoc2wu
cywgaHNsLmwgKTsKKyAgICAgICAgICAgIHRoaXMubWluLm1pbiggcG9pbnQgKTsKKyAgICAgICAg
ICAgIHRoaXMubWF4Lm1heCggcG9pbnQgKTsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
ICAgICAgICAgfSwKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICggY29sb3IgKSB7CisgICAgICAg
IGV4cGFuZEJ5VmVjdG9yOiBmdW5jdGlvbiAoIHZlY3RvciApIHsKIAotICAgICAgICAgICAgdGhp
cy5yICs9IGNvbG9yLnI7Ci0gICAgICAgICAgICB0aGlzLmcgKz0gY29sb3IuZzsKLSAgICAgICAg
ICAgIHRoaXMuYiArPSBjb2xvci5iOworICAgICAgICAgICAgdGhpcy5taW4uc3ViKCB2ZWN0b3Ig
KTsKKyAgICAgICAgICAgIHRoaXMubWF4LmFkZCggdmVjdG9yICk7CiAKICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgYWRkQ29sb3JzOiBmdW5jdGlvbiAo
IGNvbG9yMSwgY29sb3IyICkgeworICAgICAgICBleHBhbmRCeVNjYWxhcjogZnVuY3Rpb24gKCBz
Y2FsYXIgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuciA9IGNvbG9yMS5yICsgY29sb3IyLnI7Ci0g
ICAgICAgICAgICB0aGlzLmcgPSBjb2xvcjEuZyArIGNvbG9yMi5nOwotICAgICAgICAgICAgdGhp
cy5iID0gY29sb3IxLmIgKyBjb2xvcjIuYjsKKyAgICAgICAgICAgIHRoaXMubWluLmFkZFNjYWxh
ciggLSBzY2FsYXIgKTsKKyAgICAgICAgICAgIHRoaXMubWF4LmFkZFNjYWxhciggc2NhbGFyICk7
CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgYWRk
U2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuciArPSBzOwotICAg
ICAgICAgICAgdGhpcy5nICs9IHM7Ci0gICAgICAgICAgICB0aGlzLmIgKz0gczsKKyAgICAgICAg
ZXhwYW5kQnlPYmplY3Q6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICAvLyBDb21wdXRlcyB0aGUgd29ybGQtYXhpcy1hbGlnbmVkIGJvdW5kaW5n
IGJveCBvZiBhbiBvYmplY3QgKGluY2x1ZGluZyBpdHMgY2hpbGRyZW4pLAorICAgICAgICAgICAg
Ly8gYWNjb3VudGluZyBmb3IgYm90aCB0aGUgb2JqZWN0J3MsIGFuZCBjaGlsZHJlbidzLCB3b3Js
ZCB0cmFuc2Zvcm1zCiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBzY29wZSwgaSwgbDsK
IAotICAgICAgICBzdWI6IGZ1bmN0aW9uKCBjb2xvciApIHsKKyAgICAgICAgICAgIHZhciB2MSA9
IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIHRoaXMuciA9IE1hdGgubWF4KCAwLCB0aGlz
LnIgLSBjb2xvci5yICk7Ci0gICAgICAgICAgICB0aGlzLmcgPSBNYXRoLm1heCggMCwgdGhpcy5n
IC0gY29sb3IuZyApOwotICAgICAgICAgICAgdGhpcy5iID0gTWF0aC5tYXgoIDAsIHRoaXMuYiAt
IGNvbG9yLmIgKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlKCBub2RlICkgewogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBu
b2RlLmdlb21ldHJ5OwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRy
eSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoIGNvbG9y
ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7CiAK
LSAgICAgICAgICAgIHRoaXMuciAqPSBjb2xvci5yOwotICAgICAgICAgICAgdGhpcy5nICo9IGNv
bG9yLmc7Ci0gICAgICAgICAgICB0aGlzLmIgKj0gY29sb3IuYjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB2ZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzOwogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdmVy
dGljZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHYxLmNvcHkoIHZlcnRpY2VzWyBpIF0gKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2MS5hcHBseU1hdHJpeDQoIG5vZGUubWF0cml4V29ybGQgKTsKIAotICAg
ICAgICBtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjb3BlLmV4cGFuZEJ5UG9pbnQoIHYxICk7CiAKLSAgICAgICAgICAgIHRoaXMu
ciAqPSBzOwotICAgICAgICAgICAgdGhpcy5nICo9IHM7Ci0gICAgICAgICAgICB0aGlzLmIgKj0g
czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0
cnkgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1
dGUgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOwogCi0gICAgICAgIGxlcnA6IGZ1bmN0
aW9uICggY29sb3IsIGFscGhhICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhdHRy
aWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgdGhpcy5yICs9ICggY29sb3Iu
ciAtIHRoaXMuciApICogYWxwaGE7Ci0gICAgICAgICAgICB0aGlzLmcgKz0gKCBjb2xvci5nIC0g
dGhpcy5nICkgKiBhbHBoYTsKLSAgICAgICAgICAgIHRoaXMuYiArPSAoIGNvbG9yLmIgLSB0aGlz
LmIgKSAqIGFscGhhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBs
ID0gYXR0cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxLmZyb21CdWZmZXJBdHRy
aWJ1dGUoIGF0dHJpYnV0ZSwgaSApLmFwcGx5TWF0cml4NCggbm9kZS5tYXRyaXhXb3JsZCApOwog
Ci0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmV4cGFu
ZEJ5UG9pbnQoIHYxICk7CiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIGMgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gKCBjLnIgPT09
IHRoaXMuciApICYmICggYy5nID09PSB0aGlzLmcgKSAmJiAoIGMuYiA9PT0gdGhpcy5iICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkgewor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5l
ZCApIG9mZnNldCA9IDA7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMuciA9IGFy
cmF5WyBvZmZzZXQgXTsKLSAgICAgICAgICAgIHRoaXMuZyA9IGFycmF5WyBvZmZzZXQgKyAxIF07
Ci0gICAgICAgICAgICB0aGlzLmIgPSBhcnJheVsgb2Zmc2V0ICsgMiBdOworICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIGV4cGFuZEJ5T2JqZWN0KCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHNjb3BlID0gdGhpczsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgIG9iamVjdC51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApOwogCi0g
ICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKKyAgICAgICAgICAg
ICAgICBvYmplY3QudHJhdmVyc2UoIHRyYXZlcnNlICk7CiAKLSAgICAgICAgICAgIGlmICggYXJy
YXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107Ci0gICAgICAgICAgICBpZiAoIG9mZnNldCA9
PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGhpcy5yOwotICAgICAgICAgICAgYXJy
YXlbIG9mZnNldCArIDEgXSA9IHRoaXMuZzsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAy
IF0gPSB0aGlzLmI7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICByZXR1cm4gYXJyYXk7
CisgICAgICAgIH0oKSwKIAotICAgICAgICB9LAorICAgICAgICBjb250YWluc1BvaW50OiBmdW5j
dGlvbiAoIHBvaW50ICkgewogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHBvaW50LnggPCB0aGlzLm1pbi54IHx8IHBvaW50LnggPiB0aGlzLm1heC54
IHx8CisgICAgICAgICAgICAgICAgcG9pbnQueSA8IHRoaXMubWluLnkgfHwgcG9pbnQueSA+IHRo
aXMubWF4LnkgfHwKKyAgICAgICAgICAgICAgICBwb2ludC56IDwgdGhpcy5taW4ueiB8fCBwb2lu
dC56ID4gdGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZ2V0SGV4KCk7CisgICAgICAgIH0sCiAKLSAgICAgICAgfQorICAgICAgICBjb250YWluc0Jv
eDogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICB9ICk7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5taW4ueCA8PSBib3gubWluLnggJiYgYm94Lm1heC54IDw9IHRoaXMubWF4LnggJiYKKyAgICAg
ICAgICAgICAgICB0aGlzLm1pbi55IDw9IGJveC5taW4ueSAmJiBib3gubWF4LnkgPD0gdGhpcy5t
YXgueSAmJgorICAgICAgICAgICAgICAgIHRoaXMubWluLnogPD0gYm94Lm1pbi56ICYmIGJveC5t
YXgueiA8PSB0aGlzLm1heC56OwogCi0gICAgLyoqCi0gICAgICogVW5pZm9ybXMgbGlicmFyeSBm
b3Igc2hhcmVkIHdlYmdsIHNoYWRlcnMKLSAgICAgKi8KKyAgICAgICAgfSwKIAotICAgIHZhciBV
bmlmb3Jtc0xpYiA9IHsKKyAgICAgICAgZ2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAoIHBvaW50LCB0
YXJnZXQgKSB7CiAKLSAgICAgICAgY29tbW9uOiB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBw
b3RlbnRpYWxseSBoYXZlIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIGJveAorICAgICAgICAgICAg
Ly8gaGFzIGEgc2l6ZSBkaW1lbnNpb24gb2YgMC4KIAotICAgICAgICAgICAgZGlmZnVzZTogeyB2
YWx1ZTogbmV3IENvbG9yKCAweGVlZWVlZSApIH0sCi0gICAgICAgICAgICBvcGFjaXR5OiB7IHZh
bHVlOiAxLjAgfSwKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgICAgIG1hcDogeyB2YWx1ZTogbnVsbCB9LAotICAgICAgICAgICAgb2Zmc2V0UmVw
ZWF0OiB7IHZhbHVlOiBuZXcgVmVjdG9yNCggMCwgMCwgMSwgMSApIH0sCisgICAgICAgICAgICAg
ICAgY29uc29sZS53YXJuKCAnVEhSRUUuQm94MzogLmdldFBhcmFtZXRlcigpIHRhcmdldCBpcyBu
b3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHsgdmFsdWU6IG51bGwgfSwKLSAgICAgICAgICAg
IGFscGhhTWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGVudk1hcDogeyB2YWx1ZTogbnVsbCB9LAotICAgICAgICAgICAgZmxpcEVudk1hcDogeyB2YWx1
ZTogLSAxIH0sCi0gICAgICAgICAgICByZWZsZWN0aXZpdHk6IHsgdmFsdWU6IDEuMCB9LAotICAg
ICAgICAgICAgcmVmcmFjdGlvblJhdGlvOiB7IHZhbHVlOiAwLjk4IH0KKyAgICAgICAgICAgIHJl
dHVybiB0YXJnZXQuc2V0KAorICAgICAgICAgICAgICAgICggcG9pbnQueCAtIHRoaXMubWluLngg
KSAvICggdGhpcy5tYXgueCAtIHRoaXMubWluLnggKSwKKyAgICAgICAgICAgICAgICAoIHBvaW50
LnkgLSB0aGlzLm1pbi55ICkgLyAoIHRoaXMubWF4LnkgLSB0aGlzLm1pbi55ICksCisgICAgICAg
ICAgICAgICAgKCBwb2ludC56IC0gdGhpcy5taW4ueiApIC8gKCB0aGlzLm1heC56IC0gdGhpcy5t
aW4ueiApCisgICAgICAgICAgICApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgYW9tYXA6IHsK
KyAgICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICAgICAgICAg
IGFvTWFwOiB7IHZhbHVlOiBudWxsIH0sCi0gICAgICAgICAgICBhb01hcEludGVuc2l0eTogeyB2
YWx1ZTogMSB9CisgICAgICAgICAgICAvLyB1c2luZyA2IHNwbGl0dGluZyBwbGFuZXMgdG8gcnVs
ZSBvdXQgaW50ZXJzZWN0aW9ucy4KKyAgICAgICAgICAgIHJldHVybiBib3gubWF4LnggPCB0aGlz
Lm1pbi54IHx8IGJveC5taW4ueCA+IHRoaXMubWF4LnggfHwKKyAgICAgICAgICAgICAgICBib3gu
bWF4LnkgPCB0aGlzLm1pbi55IHx8IGJveC5taW4ueSA+IHRoaXMubWF4LnkgfHwKKyAgICAgICAg
ICAgICAgICBib3gubWF4LnogPCB0aGlzLm1pbi56IHx8IGJveC5taW4ueiA+IHRoaXMubWF4Lnog
PyBmYWxzZSA6IHRydWU7CiAKICAgICAgICAgfSwKIAotICAgICAgICBsaWdodG1hcDogeworICAg
ICAgICBpbnRlcnNlY3RzU3BoZXJlOiAoIGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgbGln
aHRNYXA6IHsgdmFsdWU6IG51bGwgfSwKLSAgICAgICAgICAgIGxpZ2h0TWFwSW50ZW5zaXR5OiB7
IHZhbHVlOiAxIH0KKyAgICAgICAgICAgIHZhciBjbG9zZXN0UG9pbnQgPSBuZXcgVmVjdG9yMygp
OwogCi0gICAgICAgIH0sCisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0c1Nw
aGVyZSggc3BoZXJlICkgewogCi0gICAgICAgIGVtaXNzaXZlbWFwOiB7CisgICAgICAgICAgICAg
ICAgLy8gRmluZCB0aGUgcG9pbnQgb24gdGhlIEFBQkIgY2xvc2VzdCB0byB0aGUgc3BoZXJlIGNl
bnRlci4KKyAgICAgICAgICAgICAgICB0aGlzLmNsYW1wUG9pbnQoIHNwaGVyZS5jZW50ZXIsIGNs
b3Nlc3RQb2ludCApOwogCi0gICAgICAgICAgICBlbWlzc2l2ZU1hcDogeyB2YWx1ZTogbnVsbCB9
CisgICAgICAgICAgICAgICAgLy8gSWYgdGhhdCBwb2ludCBpcyBpbnNpZGUgdGhlIHNwaGVyZSwg
dGhlIEFBQkIgYW5kIHNwaGVyZSBpbnRlcnNlY3QuCisgICAgICAgICAgICAgICAgcmV0dXJuIGNs
b3Nlc3RQb2ludC5kaXN0YW5jZVRvU3F1YXJlZCggc3BoZXJlLmNlbnRlciApIDw9ICggc3BoZXJl
LnJhZGl1cyAqIHNwaGVyZS5yYWRpdXMgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfTsK
IAotICAgICAgICBidW1wbWFwOiB7CisgICAgICAgIH0gKSgpLAogCi0gICAgICAgICAgICBidW1w
TWFwOiB7IHZhbHVlOiBudWxsIH0sCi0gICAgICAgICAgICBidW1wU2NhbGU6IHsgdmFsdWU6IDEg
fQorICAgICAgICBpbnRlcnNlY3RzUGxhbmU6IGZ1bmN0aW9uICggcGxhbmUgKSB7CiAKLSAgICAg
ICAgfSwKKyAgICAgICAgICAgIC8vIFdlIGNvbXB1dGUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0g
ZG90IHByb2R1Y3QgdmFsdWVzLiBJZiB0aG9zZSB2YWx1ZXMKKyAgICAgICAgICAgIC8vIGFyZSBv
biB0aGUgc2FtZSBzaWRlIChiYWNrIG9yIGZyb250KSBvZiB0aGUgcGxhbmUsIHRoZW4gdGhlcmUg
aXMgbm8gaW50ZXJzZWN0aW9uLgogCi0gICAgICAgIG5vcm1hbG1hcDogeworICAgICAgICAgICAg
dmFyIG1pbiwgbWF4OwogCi0gICAgICAgICAgICBub3JtYWxNYXA6IHsgdmFsdWU6IG51bGwgfSwK
LSAgICAgICAgICAgIG5vcm1hbFNjYWxlOiB7IHZhbHVlOiBuZXcgVmVjdG9yMiggMSwgMSApIH0K
KyAgICAgICAgICAgIGlmICggcGxhbmUubm9ybWFsLnggPiAwICkgewogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgbWluID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1pbi54OworICAgICAg
ICAgICAgICAgIG1heCA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgueDsKIAotICAgICAgICBk
aXNwbGFjZW1lbnRtYXA6IHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIGRp
c3BsYWNlbWVudE1hcDogeyB2YWx1ZTogbnVsbCB9LAotICAgICAgICAgICAgZGlzcGxhY2VtZW50
U2NhbGU6IHsgdmFsdWU6IDEgfSwKLSAgICAgICAgICAgIGRpc3BsYWNlbWVudEJpYXM6IHsgdmFs
dWU6IDAgfQorICAgICAgICAgICAgICAgIG1pbiA9IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgu
eDsKKyAgICAgICAgICAgICAgICBtYXggPSBwbGFuZS5ub3JtYWwueCAqIHRoaXMubWluLng7CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICByb3VnaG5lc3NtYXA6IHsKKyAg
ICAgICAgICAgIGlmICggcGxhbmUubm9ybWFsLnkgPiAwICkgewogCi0gICAgICAgICAgICByb3Vn
aG5lc3NNYXA6IHsgdmFsdWU6IG51bGwgfQorICAgICAgICAgICAgICAgIG1pbiArPSBwbGFuZS5u
b3JtYWwueSAqIHRoaXMubWluLnk7CisgICAgICAgICAgICAgICAgbWF4ICs9IHBsYW5lLm5vcm1h
bC55ICogdGhpcy5tYXgueTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfSBlbHNlIHsKIAot
ICAgICAgICBtZXRhbG5lc3NtYXA6IHsKKyAgICAgICAgICAgICAgICBtaW4gKz0gcGxhbmUubm9y
bWFsLnkgKiB0aGlzLm1heC55OworICAgICAgICAgICAgICAgIG1heCArPSBwbGFuZS5ub3JtYWwu
eSAqIHRoaXMubWluLnk7CiAKLSAgICAgICAgICAgIG1ldGFsbmVzc01hcDogeyB2YWx1ZTogbnVs
bCB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICggcGxhbmUu
bm9ybWFsLnogPiAwICkgewogCi0gICAgICAgIGdyYWRpZW50bWFwOiB7CisgICAgICAgICAgICAg
ICAgbWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5taW4uejsKKyAgICAgICAgICAgICAgICBt
YXggKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1heC56OwogCi0gICAgICAgICAgICBncmFkaWVu
dE1hcDogeyB2YWx1ZTogbnVsbCB9CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIH0s
CisgICAgICAgICAgICAgICAgbWluICs9IHBsYW5lLm5vcm1hbC56ICogdGhpcy5tYXguejsKKyAg
ICAgICAgICAgICAgICBtYXggKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1pbi56OwogCi0gICAg
ICAgIGZvZzogeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmb2dEZW5zaXR5OiB7IHZh
bHVlOiAwLjAwMDI1IH0sCi0gICAgICAgICAgICBmb2dOZWFyOiB7IHZhbHVlOiAxIH0sCi0gICAg
ICAgICAgICBmb2dGYXI6IHsgdmFsdWU6IDIwMDAgfSwKLSAgICAgICAgICAgIGZvZ0NvbG9yOiB7
IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZmZmZmZmICkgfQorICAgICAgICAgICAgcmV0dXJuICggbWlu
IDw9IHBsYW5lLmNvbnN0YW50ICYmIG1heCA+PSBwbGFuZS5jb25zdGFudCApOwogCiAgICAgICAg
IH0sCiAKLSAgICAgICAgbGlnaHRzOiB7Ci0KLSAgICAgICAgICAgIGFtYmllbnRMaWdodENvbG9y
OiB7IHZhbHVlOiBbXSB9LAotCi0gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0czogeyB2YWx1
ZTogW10sIHByb3BlcnRpZXM6IHsKLSAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHt9LAotICAg
ICAgICAgICAgICAgIGNvbG9yOiB7fSwKKyAgICAgICAgaW50ZXJzZWN0c1RyaWFuZ2xlOiAoIGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIHNoYWRvdzoge30sCi0gICAgICAgICAgICAg
ICAgc2hhZG93Qmlhczoge30sCi0gICAgICAgICAgICAgICAgc2hhZG93UmFkaXVzOiB7fSwKLSAg
ICAgICAgICAgICAgICBzaGFkb3dNYXBTaXplOiB7fQotICAgICAgICAgICAgfSB9LAorICAgICAg
ICAgICAgLy8gdHJpYW5nbGUgY2VudGVyZWQgdmVydGljZXMKKyAgICAgICAgICAgIHZhciB2MCA9
IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgZGlyZWN0aW9u
YWxTaGFkb3dNYXA6IHsgdmFsdWU6IFtdIH0sCi0gICAgICAgICAgICBkaXJlY3Rpb25hbFNoYWRv
d01hdHJpeDogeyB2YWx1ZTogW10gfSwKKyAgICAgICAgICAgIC8vIHRyaWFuZ2xlIGVkZ2UgdmVj
dG9ycworICAgICAgICAgICAgdmFyIGYwID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZh
ciBmMSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgZjIgPSBuZXcgVmVjdG9yMygp
OwogCi0gICAgICAgICAgICBzcG90TGlnaHRzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczogewot
ICAgICAgICAgICAgICAgIGNvbG9yOiB7fSwKLSAgICAgICAgICAgICAgICBwb3NpdGlvbjoge30s
Ci0gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB7fSwKLSAgICAgICAgICAgICAgICBkaXN0YW5j
ZToge30sCi0gICAgICAgICAgICAgICAgY29uZUNvczoge30sCi0gICAgICAgICAgICAgICAgcGVu
dW1icmFDb3M6IHt9LAotICAgICAgICAgICAgICAgIGRlY2F5OiB7fSwKKyAgICAgICAgICAgIHZh
ciB0ZXN0QXhpcyA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICBzaGFkb3c6IHt9
LAotICAgICAgICAgICAgICAgIHNoYWRvd0JpYXM6IHt9LAotICAgICAgICAgICAgICAgIHNoYWRv
d1JhZGl1czoge30sCi0gICAgICAgICAgICAgICAgc2hhZG93TWFwU2l6ZToge30KLSAgICAgICAg
ICAgIH0gfSwKKyAgICAgICAgICAgIHZhciBjZW50ZXIgPSBuZXcgVmVjdG9yMygpOworICAgICAg
ICAgICAgdmFyIGV4dGVudHMgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICBzcG90U2hh
ZG93TWFwOiB7IHZhbHVlOiBbXSB9LAotICAgICAgICAgICAgc3BvdFNoYWRvd01hdHJpeDogeyB2
YWx1ZTogW10gfSwKKyAgICAgICAgICAgIHZhciB0cmlhbmdsZU5vcm1hbCA9IG5ldyBWZWN0b3Iz
KCk7CiAKLSAgICAgICAgICAgIHBvaW50TGlnaHRzOiB7IHZhbHVlOiBbXSwgcHJvcGVydGllczog
ewotICAgICAgICAgICAgICAgIGNvbG9yOiB7fSwKLSAgICAgICAgICAgICAgICBwb3NpdGlvbjog
e30sCi0gICAgICAgICAgICAgICAgZGVjYXk6IHt9LAotICAgICAgICAgICAgICAgIGRpc3RhbmNl
OiB7fSwKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNhdEZvckF4ZXMoIGF4ZXMgKSB7CiAKLSAgICAg
ICAgICAgICAgICBzaGFkb3c6IHt9LAotICAgICAgICAgICAgICAgIHNoYWRvd0JpYXM6IHt9LAot
ICAgICAgICAgICAgICAgIHNoYWRvd1JhZGl1czoge30sCi0gICAgICAgICAgICAgICAgc2hhZG93
TWFwU2l6ZToge30KLSAgICAgICAgICAgIH0gfSwKKyAgICAgICAgICAgICAgICB2YXIgaSwgajsK
IAotICAgICAgICAgICAgcG9pbnRTaGFkb3dNYXA6IHsgdmFsdWU6IFtdIH0sCi0gICAgICAgICAg
ICBwb2ludFNoYWRvd01hdHJpeDogeyB2YWx1ZTogW10gfSwKKyAgICAgICAgICAgICAgICBmb3Ig
KCBpID0gMCwgaiA9IGF4ZXMubGVuZ3RoIC0gMzsgaSA8PSBqOyBpICs9IDMgKSB7CiAKLSAgICAg
ICAgICAgIGhlbWlzcGhlcmVMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0aWVzOiB7Ci0gICAg
ICAgICAgICAgICAgZGlyZWN0aW9uOiB7fSwKLSAgICAgICAgICAgICAgICBza3lDb2xvcjoge30s
Ci0gICAgICAgICAgICAgICAgZ3JvdW5kQ29sb3I6IHt9Ci0gICAgICAgICAgICB9IH0sCisgICAg
ICAgICAgICAgICAgICAgIHRlc3RBeGlzLmZyb21BcnJheSggYXhlcywgaSApOworICAgICAgICAg
ICAgICAgICAgICAvLyBwcm9qZWN0IHRoZSBhYWJiIG9udG8gdGhlIHNlcGVyYXRpbmcgYXhpcwor
ICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGV4dGVudHMueCAqIE1hdGguYWJzKCB0ZXN0QXhp
cy54ICkgKyBleHRlbnRzLnkgKiBNYXRoLmFicyggdGVzdEF4aXMueSApICsgZXh0ZW50cy56ICog
TWF0aC5hYnMoIHRlc3RBeGlzLnogKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvamVjdCBh
bGwgMyB2ZXJ0aWNlcyBvZiB0aGUgdHJpYW5nbGUgb250byB0aGUgc2VwZXJhdGluZyBheGlzCisg
ICAgICAgICAgICAgICAgICAgIHZhciBwMCA9IHYwLmRvdCggdGVzdEF4aXMgKTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHAxID0gdjEuZG90KCB0ZXN0QXhpcyApOworICAgICAgICAgICAgICAg
ICAgICB2YXIgcDIgPSB2Mi5kb3QoIHRlc3RBeGlzICk7CisgICAgICAgICAgICAgICAgICAgIC8v
IGFjdHVhbCB0ZXN0LCBiYXNpY2FsbHkgc2VlIGlmIGVpdGhlciBvZiB0aGUgbW9zdCBleHRyZW1l
IG9mIHRoZSB0cmlhbmdsZSBwb2ludHMgaW50ZXJzZWN0cyByCisgICAgICAgICAgICAgICAgICAg
IGlmICggTWF0aC5tYXgoIC0gTWF0aC5tYXgoIHAwLCBwMSwgcDIgKSwgTWF0aC5taW4oIHAwLCBw
MSwgcDIgKSApID4gciApIHsKIAotICAgICAgICAgICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IFJl
Y3RBcmVhTGlnaHQgQlJERiBkYXRhIG5lZWRzIHRvIGJlIG1vdmVkIGZyb20gZXhhbXBsZSB0byBt
YWluIHNyYwotICAgICAgICAgICAgcmVjdEFyZWFMaWdodHM6IHsgdmFsdWU6IFtdLCBwcm9wZXJ0
aWVzOiB7Ci0gICAgICAgICAgICAgICAgY29sb3I6IHt9LAotICAgICAgICAgICAgICAgIHBvc2l0
aW9uOiB7fSwKLSAgICAgICAgICAgICAgICB3aWR0aDoge30sCi0gICAgICAgICAgICAgICAgaGVp
Z2h0OiB7fQotICAgICAgICAgICAgfSB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2lu
dHMgb2YgdGhlIHByb2plY3RlZCB0cmlhbmdsZSBhcmUgb3V0c2lkZSB0aGUgcHJvamVjdGVkIGhh
bGYtbGVuZ3RoIG9mIHRoZSBhYWJiCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXhp
cyBpcyBzZXBlcmF0aW5nIGFuZCB3ZSBjYW4gZXhpdAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICBwb2ludHM6IHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGRpZmZ1c2U6
IHsgdmFsdWU6IG5ldyBDb2xvciggMHhlZWVlZWUgKSB9LAotICAgICAgICAgICAgb3BhY2l0eTog
eyB2YWx1ZTogMS4wIH0sCi0gICAgICAgICAgICBzaXplOiB7IHZhbHVlOiAxLjAgfSwKLSAgICAg
ICAgICAgIHNjYWxlOiB7IHZhbHVlOiAxLjAgfSwKLSAgICAgICAgICAgIG1hcDogeyB2YWx1ZTog
bnVsbCB9LAotICAgICAgICAgICAgb2Zmc2V0UmVwZWF0OiB7IHZhbHVlOiBuZXcgVmVjdG9yNCgg
MCwgMCwgMSwgMSApIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICB9
CisgICAgICAgICAgICB9CiAKLSAgICB9OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlu
dGVyc2VjdHNUcmlhbmdsZSggdHJpYW5nbGUgKSB7CiAKLSAgICAvKioKLSAgICAgKiBVbmlmb3Jt
IFV0aWxpdGllcwotICAgICAqLworICAgICAgICAgICAgICAgIGlmICggdGhpcy5pc0VtcHR5KCkg
KSB7CiAKLSAgICB2YXIgVW5pZm9ybXNVdGlscyA9IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIG1lcmdlOiBmdW5jdGlvbiAoIHVuaWZvcm1zICkgeworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIG1lcmdlZCA9IHt9OworICAgICAgICAg
ICAgICAgIC8vIGNvbXB1dGUgYm94IGNlbnRlciBhbmQgZXh0ZW50cworICAgICAgICAgICAgICAg
IHRoaXMuZ2V0Q2VudGVyKCBjZW50ZXIgKTsKKyAgICAgICAgICAgICAgICBleHRlbnRzLnN1YlZl
Y3RvcnMoIHRoaXMubWF4LCBjZW50ZXIgKTsKIAotICAgICAgICAgICAgZm9yICggdmFyIHUgPSAw
OyB1IDwgdW5pZm9ybXMubGVuZ3RoOyB1ICsrICkgeworICAgICAgICAgICAgICAgIC8vIHRyYW5z
bGF0ZSB0cmlhbmdsZSB0byBhYWJiIG9yaWdpbgorICAgICAgICAgICAgICAgIHYwLnN1YlZlY3Rv
cnMoIHRyaWFuZ2xlLmEsIGNlbnRlciApOworICAgICAgICAgICAgICAgIHYxLnN1YlZlY3RvcnMo
IHRyaWFuZ2xlLmIsIGNlbnRlciApOworICAgICAgICAgICAgICAgIHYyLnN1YlZlY3RvcnMoIHRy
aWFuZ2xlLmMsIGNlbnRlciApOwogCi0gICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMuY2xv
bmUoIHVuaWZvcm1zWyB1IF0gKTsKKyAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGVkZ2UgdmVj
dG9ycyBmb3IgdHJpYW5nbGUKKyAgICAgICAgICAgICAgICBmMC5zdWJWZWN0b3JzKCB2MSwgdjAg
KTsKKyAgICAgICAgICAgICAgICBmMS5zdWJWZWN0b3JzKCB2MiwgdjEgKTsKKyAgICAgICAgICAg
ICAgICBmMi5zdWJWZWN0b3JzKCB2MCwgdjIgKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBwIGluIHRtcCApIHsKKyAgICAgICAgICAgICAgICAvLyB0ZXN0IGFnYWluc3QgYXhlcyB0aGF0
IGFyZSBnaXZlbiBieSBjcm9zcyBwcm9kdWN0IGNvbWJpbmF0aW9ucyBvZiB0aGUgZWRnZXMgb2Yg
dGhlIHRyaWFuZ2xlIGFuZCB0aGUgZWRnZXMgb2YgdGhlIGFhYmIKKyAgICAgICAgICAgICAgICAv
LyBtYWtlIGFuIGF4aXMgdGVzdGluZyBvZiBlYWNoIG9mIHRoZSAzIHNpZGVzIG9mIHRoZSBhYWJi
IGFnYWluc3QgZWFjaCBvZiB0aGUgMyBzaWRlcyBvZiB0aGUgdHJpYW5nbGUgPSA5IGF4aXMgb2Yg
c2VwYXJhdGlvbgorICAgICAgICAgICAgICAgIC8vIGF4aXNfaWogPSB1X2kgeCBmX2ogKHUwLCB1
MSwgdTIgPSBmYWNlIG5vcm1hbHMgb2YgYWFiYiA9IHgseSx6IGF4ZXMgdmVjdG9ycyBzaW5jZSBh
YWJiIGlzIGF4aXMgYWxpZ25lZCkKKyAgICAgICAgICAgICAgICB2YXIgYXhlcyA9IFsKKyAgICAg
ICAgICAgICAgICAgICAgMCwgLSBmMC56LCBmMC55LCAwLCAtIGYxLnosIGYxLnksIDAsIC0gZjIu
eiwgZjIueSwKKyAgICAgICAgICAgICAgICAgICAgZjAueiwgMCwgLSBmMC54LCBmMS56LCAwLCAt
IGYxLngsIGYyLnosIDAsIC0gZjIueCwKKyAgICAgICAgICAgICAgICAgICAgLSBmMC55LCBmMC54
LCAwLCAtIGYxLnksIGYxLngsIDAsIC0gZjIueSwgZjIueCwgMAorICAgICAgICAgICAgICAgIF07
CisgICAgICAgICAgICAgICAgaWYgKCAhIHNhdEZvckF4ZXMoIGF4ZXMgKSApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBtZXJnZWRbIHAgXSA9IHRtcFsgcCBdOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIG1lcmdlZDsKKyAgICAgICAgICAgICAgICAvLyB0ZXN0IDMgZmFj
ZSBub3JtYWxzIGZyb20gdGhlIGFhYmIKKyAgICAgICAgICAgICAgICBheGVzID0gWyAxLCAwLCAw
LCAwLCAxLCAwLCAwLCAwLCAxIF07CisgICAgICAgICAgICAgICAgaWYgKCAhIHNhdEZvckF4ZXMo
IGF4ZXMgKSApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICggdW5pZm9ybXNfc3JjICkgeworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHVuaWZvcm1zX2RzdCA9IHt9OworICAgICAg
ICAgICAgICAgIC8vIGZpbmFsbHkgdGVzdGluZyB0aGUgZmFjZSBub3JtYWwgb2YgdGhlIHRyaWFu
Z2xlCisgICAgICAgICAgICAgICAgLy8gdXNlIGFscmVhZHkgZXhpc3RpbmcgdHJpYW5nbGUgZWRn
ZSB2ZWN0b3JzIGhlcmUKKyAgICAgICAgICAgICAgICB0cmlhbmdsZU5vcm1hbC5jcm9zc1ZlY3Rv
cnMoIGYwLCBmMSApOworICAgICAgICAgICAgICAgIGF4ZXMgPSBbIHRyaWFuZ2xlTm9ybWFsLngs
IHRyaWFuZ2xlTm9ybWFsLnksIHRyaWFuZ2xlTm9ybWFsLnogXTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2F0Rm9yQXhlcyggYXhlcyApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgdSBpbiB1
bmlmb3Jtc19zcmMgKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdW5pZm9y
bXNfZHN0WyB1IF0gPSB7fTsKKyAgICAgICAgfSApKCksCiAKLSAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgcCBpbiB1bmlmb3Jtc19zcmNbIHUgXSApIHsKKyAgICAgICAgY2xhbXBQb2ludDogZnVu
Y3Rpb24gKCBwb2ludCwgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJh
bWV0ZXJfc3JjID0gdW5pZm9ybXNfc3JjWyB1IF1bIHAgXTsKKyAgICAgICAgICAgIGlmICggdGFy
Z2V0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJhbWV0
ZXJfc3JjICYmICggcGFyYW1ldGVyX3NyYy5pc0NvbG9yIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfc3JjLmlzTWF0cml4MyB8fCBwYXJhbWV0ZXJfc3JjLmlzTWF0cml4NCB8
fAotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3NyYy5pc1ZlY3RvcjIgfHwgcGFy
YW1ldGVyX3NyYy5pc1ZlY3RvcjMgfHwgcGFyYW1ldGVyX3NyYy5pc1ZlY3RvcjQgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9zcmMuaXNUZXh0dXJlICkgKSB7CisgICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuQm94MzogLmNsYW1wUG9pbnQoKSB0YXJnZXQg
aXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3Iz
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zX2RzdFsgdSBdWyBwIF0gPSBw
YXJhbWV0ZXJfc3JjLmNsb25lKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggcGFyYW1ldGVyX3NyYyApICkgeworICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldC5jb3B5KCBwb2ludCApLmNsYW1wKCB0aGlzLm1pbiwgdGhpcy5t
YXggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNfZHN0WyB1IF1bIHAgXSA9
IHBhcmFtZXRlcl9zcmMuc2xpY2UoKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6IGZ1bmN0aW9uICgpIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNfZHN0WyB1IF1bIHAgXSA9IHBhcmFtZXRlcl9z
cmM7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBkaXN0YW5jZVRvUG9pbnQoIHBv
aW50ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBjbGFtcGVk
UG9pbnQgPSB2MS5jb3B5KCBwb2ludCApLmNsYW1wKCB0aGlzLm1pbiwgdGhpcy5tYXggKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2xhbXBlZFBvaW50LnN1YiggcG9pbnQgKS5sZW5ndGgoKTsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgcmV0dXJuIHVu
aWZvcm1zX2RzdDsKKyAgICAgICAgfSgpLAogCi0gICAgICAgIH0KKyAgICAgICAgZ2V0Qm91bmRp
bmdTcGhlcmU6IGZ1bmN0aW9uICgpIHsKIAotICAgIH07CisgICAgICAgICAgICB2YXIgdjEgPSBu
ZXcgVmVjdG9yMygpOwogCi0gICAgdmFyIGFscGhhbWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0Vf
QUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICku
ZztcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRCb3VuZGluZ1Nw
aGVyZSggdGFyZ2V0ICkgewogCi0gICAgdmFyIGFscGhhbWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lm
ZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZlxu
IjsKKyAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAg
dmFyIGFscGhhdGVzdF9mcmFnbWVudCA9ICIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVz
ZUNvbG9yLmEgPCBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmXG4iOworICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gzOiAuZ2V0Qm91bmRpbmdTcGhlcmUoKSB0
YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBu
ZXcgU3BoZXJlKCk7CiAKLSAgICB2YXIgYW9tYXBfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9BT01B
UFxuXHRmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICku
ciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGly
ZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uO1xuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1B
UCApICYmIGRlZmluZWQoIFBIWVNJQ0FMIClcblx0XHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBk
b3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVk
TGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5W
LCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjZW5k
aWZcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICB2YXIgYW9tYXBfcGFyc19m
cmFnbWVudCA9ICIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xu
XHR1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIjsKKyAgICAgICAgICAgICAg
ICB0aGlzLmdldENlbnRlciggdGFyZ2V0LmNlbnRlciApOwogCi0gICAgdmFyIGJlZ2luX3ZlcnRl
eCA9ICJcbnZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApO1xuIjsKKyAgICAgICAg
ICAgICAgICB0YXJnZXQucmFkaXVzID0gdGhpcy5nZXRTaXplKCB2MSApLmxlbmd0aCgpICogMC41
OwogCi0gICAgdmFyIGJlZ2lubm9ybWFsX3ZlcnRleCA9ICJcbnZlYzMgb2JqZWN0Tm9ybWFsID0g
dmVjMyggbm9ybWFsICk7XG4iOworICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAKLSAg
ICB2YXIgYnNkZnMgPSAiZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZh
Y3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2Zm
RGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4
cG9uZW50ID4gMC4wICkge1xuI2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRT
IClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0
YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRv
ZmZGYWN0b3IgPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1
dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdHJldHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0
YW5jZUN1dG9mZkZhY3RvcjtcbiNlbHNlXG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdo
dERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2Vu
ZGlmXG5cdH1cblx0cmV0dXJuIDEuMDtcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNv
bnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRp
ZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29s
b3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAt
NS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0g
c3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dH
WF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25z
dCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9h
dCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7
XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRv
dE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21p
dGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90Tkws
IGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5c
dGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5W
ICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93
MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59
XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5I
ICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93Migg
ZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBh
MiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJ
bmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2Vv
bWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2hu
ZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZE
aXIgPSBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0Rp
ciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5j
aWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3Qo
IGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0g
c2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90
TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7
XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQg
RyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9h
dCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1c
bnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4g
ZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRj
b25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0
Y29uc3QgZmxvYXQgTFVUX0JJQVMgID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IHRoZXRhID0g
YWNvcyggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diA9IHZlYzIoXG5cdFx0c3FydCggc2F0dXJh
dGUoIHJvdWdobmVzcyApICksXG5cdFx0c2F0dXJhdGUoIHRoZXRhIC8gKCAwLjUgKiBQSSApICkg
KTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5m
bG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0
ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAo
IGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29u
c3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEs
IHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODYyNjcgKyAoMC40
OTc4OCArIDAuMDE0MzYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiID0gMy40NTA2OCArICg0LjE4ODE0
ICsgeSkgKiB5O1xuXHRmbG9hdCB2ID0gYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhID0g
KHggPiAwLjApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCAxLjAgLSB4ICogeCApIC0gdjtcblx0
cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZh
bHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAs
IGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5c
dHZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIg
PSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwg
PSBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jk
c1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRU
MSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiA9IC0gY3Jvc3MoIE4s
IFQxICk7XG5cdG1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZSggbWF0MyggVDEsIFQyLCBOICkg
KTtcblx0dmVjMyBjb29yZHNbIDQgXTtcblx0Y29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29y
ZHNbIDAgXSAtIFAgKTtcblx0Y29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAt
IFAgKTtcblx0Y29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTtcblx0
Y29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTtcblx0Y29vcmRzWyAw
IF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7XG5cdGNvb3Jkc1sgMSBdID0gbm9ybWFsaXpl
KCBjb29yZHNbIDEgXSApO1xuXHRjb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0g
KTtcblx0Y29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7XG5cdHZlYzMgdmVj
dG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19F
ZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7XG5cdHZlY3Rv
ckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29v
cmRzWyAyIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0
b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExU
Q19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7XG5cdHZl
YzMgcmVzdWx0ID0gdmVjMyggTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3Jt
RmFjdG9yICkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hf
RW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGlu
IHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9h
dCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0Rp
ciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAw
LjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQg
KTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCA9IG1pbigg
ci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHZlYzIg
QUIgPSB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG5cdHJldHVybiBzcGVjdWxh
ckNvbG9yICogQUIueCArIEFCLnk7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkg
e1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQg
c2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxf
UEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7
XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdo
dCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25z
dCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0
dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21l
dHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5u
b3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCA9IHNhdHVyYXRlKCBkb3QoIGluY2lk
ZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBz
cGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0
KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJl
dHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50
KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIo
IGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50
VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVy
biBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufVxuIjsKKyAgICAgICAg
ICAgIH07CiAKLSAgICB2YXIgYnVtcG1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfQlVN
UE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGJ1bXBT
Y2FsZTtcblx0dmVjMiBkSGR4eV9md2QoKSB7XG5cdFx0dmVjMiBkU1RkeCA9IGRGZHgoIHZVdiAp
O1xuXHRcdHZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTtcblx0XHRmbG9hdCBIbGwgPSBidW1wU2Nh
bGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7XG5cdFx0ZmxvYXQgZEJ4ID0gYnVtcFNj
YWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7XG5cdFx0Zmxv
YXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLngg
LSBIbGw7XG5cdFx0cmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7XG5cdH1cblx0dmVjMyBwZXJ0dXJi
Tm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSApIHtc
blx0XHR2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZf
cG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2U2lnbWFZID0gdmVjMygg
ZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnog
KSApO1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2ln
bWFZLCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9h
dCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0
ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxp
emUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmXG4iOwor
ICAgICAgICB9KCksCiAKLSAgICB2YXIgY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50ID0gIiNpZiBO
VU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQ
UElOR19QTEFORVM7ICsrIGkgKSB7XG5cdFx0dmVjNCBwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBp
IF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyAp
IGRpc2NhcmQ7XG5cdH1cblx0XHRcblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9D
TElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVlO1xuXHRcdGZvciAoIGludCBp
ID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgKysgaSAp
IHtcblx0XHRcdHZlYzQgcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdO1xuXHRcdFx0Y2xpcHBl
ZCA9ICggZG90KCB2Vmlld1Bvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlw
cGVkO1xuXHRcdH1cblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHRcblx0I2VuZGlmXG4j
ZW5kaWZcbiI7CisgICAgICAgIGludGVyc2VjdDogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICB2
YXIgY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQgPSAiI2lmIE5VTV9DTElQUElOR19QTEFO
RVMgPiAwXG5cdCNpZiAhIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYgISBkZWZpbmVkKCBQSE9ORyAp
XG5cdFx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZl
YzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZlxuIjsKKyAg
ICAgICAgICAgIHRoaXMubWluLm1heCggYm94Lm1pbiApOworICAgICAgICAgICAgdGhpcy5tYXgu
bWluKCBib3gubWF4ICk7CiAKLSAgICB2YXIgY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4ID0g
IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMCAmJiAhIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYg
ISBkZWZpbmVkKCBQSE9ORyApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlm
XG4iOworICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCwg
dGhlIHJlc3VsdCBpcyBmdWxseSBlbXB0eSwgbm90IHNsaWdodGx5IGVtcHR5IHdpdGggbm9uLWlu
Zi8raW5mIHZhbHVlcyB0aGF0IHdpbGwgY2F1c2Ugc3Vic2VxdWVuY2UgaW50ZXJzZWN0cyB0byBl
cnJvbmVvdXNseSByZXR1cm4gdmFsaWQgdmFsdWVzLgorICAgICAgICAgICAgaWYgKCB0aGlzLmlz
RW1wdHkoKSApIHRoaXMubWFrZUVtcHR5KCk7CiAKLSAgICB2YXIgY2xpcHBpbmdfcGxhbmVzX3Zl
cnRleCA9ICIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAgJiYgISBkZWZpbmVkKCBQSFlTSUNB
TCApICYmICEgZGVmaW5lZCggUEhPTkcgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9u
Lnh5ejtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgdmFyIGNv
bG9yX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqPSB2
Q29sb3I7XG4jZW5kaWYiOworICAgICAgICB9LAogCi0gICAgdmFyIGNvbG9yX3BhcnNfZnJhZ21l
bnQgPSAiI2lmZGVmIFVTRV9DT0xPUlxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2VuZGlmXG4i
OworICAgICAgICB1bmlvbjogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICB2YXIgY29sb3JfcGFy
c192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9DT0xPUlxuXHR2YXJ5aW5nIHZlYzMgdkNvbG9yO1xuI2Vu
ZGlmIjsKKyAgICAgICAgICAgIHRoaXMubWluLm1pbiggYm94Lm1pbiApOworICAgICAgICAgICAg
dGhpcy5tYXgubWF4KCBib3gubWF4ICk7CiAKLSAgICB2YXIgY29sb3JfdmVydGV4ID0gIiNpZmRl
ZiBVU0VfQ09MT1Jcblx0dkNvbG9yLnh5eiA9IGNvbG9yLnh5ejtcbiNlbmRpZiI7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgIHZhciBjb21tb24gPSAiI2RlZmluZSBQSSAzLjE0MTU5
MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3
OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBS
RUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUg
RVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4j
ZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQg
cG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29u
c3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBm
bG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdl
KCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMz
ICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3Qg
aGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzO1xuXHRo
aWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwg
UEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExp
Z2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtc
bn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZl
YzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGly
ZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0
aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3Jt
RGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3Jt
YWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZl
cnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5c
dHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xu
fVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFu
ZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgPSBkb3QoIHBsYW5l
Tm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBs
YW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwg
aW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBz
aWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMz
IGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGly
ZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0
cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAt
IHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBv
aW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2UoIGNvbnN0IGluIG1hdDMgdiApIHtcblx0bWF0
MyB0bXA7XG5cdHRtcFswXSA9IHZlYzModlswXS54LCB2WzFdLngsIHZbMl0ueCk7XG5cdHRtcFsx
XSA9IHZlYzModlswXS55LCB2WzFdLnksIHZbMl0ueSk7XG5cdHRtcFsyXSA9IHZlYzModlswXS56
LCB2WzFdLnosIHZbMl0ueik7XG5cdHJldHVybiB0bXA7XG59XG4iOworICAgICAgICB9LAogCi0g
ICAgdmFyIGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudCA9ICIjaWZkZWYgRU5WTUFQX1RZUEVf
Q1VCRV9VVlxuI2RlZmluZSBjdWJlVVZfdGV4dHVyZVNpemUgKDEwMjQuMClcbmludCBnZXRGYWNl
RnJvbURpcmVjdGlvbih2ZWMzIGRpcmVjdGlvbikge1xuXHR2ZWMzIGFic0RpcmVjdGlvbiA9IGFi
cyhkaXJlY3Rpb24pO1xuXHRpbnQgZmFjZSA9IC0xO1xuXHRpZiggYWJzRGlyZWN0aW9uLnggPiBh
YnNEaXJlY3Rpb24ueiApIHtcblx0XHRpZihhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55
IClcblx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAgOiAzO1xuXHRcdGVsc2Vcblx0
XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEgOiA0O1xuXHR9XG5cdGVsc2Uge1xuXHRc
dGlmKGFic0RpcmVjdGlvbi56ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSA9IGRpcmVj
dGlvbi56ID4gMC4wID8gMiA6IDU7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi55
ID4gMC4wID8gMSA6IDQ7XG5cdH1cblx0cmV0dXJuIGZhY2U7XG59XG4jZGVmaW5lIGN1YmVVVl9t
YXhMb2RzMSAgKGxvZzIoY3ViZVVWX3RleHR1cmVTaXplKjAuMjUpIC0gMS4wKVxuI2RlZmluZSBj
dWJlVVZfcmFuZ2VDbGFtcCAoZXhwMigoNi4wIC0gMS4wKSAqIDIuMCkpXG52ZWMyIE1pcExldmVs
SW5mbyggdmVjMyB2ZWMsIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCByb3VnaG5lc3MgKSB7
XG5cdGZsb2F0IHNjYWxlID0gZXhwMihjdWJlVVZfbWF4TG9kczEgLSByb3VnaG5lc3NMZXZlbCk7
XG5cdGZsb2F0IGR4Um91Z2huZXNzID0gZEZkeChyb3VnaG5lc3MpO1xuXHRmbG9hdCBkeVJvdWdo
bmVzcyA9IGRGZHkocm91Z2huZXNzKTtcblx0dmVjMyBkeCA9IGRGZHgoIHZlYyAqIHNjYWxlICog
ZHhSb3VnaG5lc3MgKTtcblx0dmVjMyBkeSA9IGRGZHkoIHZlYyAqIHNjYWxlICogZHlSb3VnaG5l
c3MgKTtcblx0ZmxvYXQgZCA9IG1heCggZG90KCBkeCwgZHggKSwgZG90KCBkeSwgZHkgKSApO1xu
XHRkID0gY2xhbXAoZCwgMS4wLCBjdWJlVVZfcmFuZ2VDbGFtcCk7XG5cdGZsb2F0IG1pcExldmVs
ID0gMC41ICogbG9nMihkKTtcblx0cmV0dXJuIHZlYzIoZmxvb3IobWlwTGV2ZWwpLCBmcmFjdCht
aXBMZXZlbCkpO1xufVxuI2RlZmluZSBjdWJlVVZfbWF4TG9kczIgKGxvZzIoY3ViZVVWX3RleHR1
cmVTaXplKjAuMjUpIC0gMi4wKVxuI2RlZmluZSBjdWJlVVZfcmNwVGV4dHVyZVNpemUgKDEuMCAv
IGN1YmVVVl90ZXh0dXJlU2l6ZSlcbnZlYzIgZ2V0Q3ViZVVWKHZlYzMgZGlyZWN0aW9uLCBmbG9h
dCByb3VnaG5lc3NMZXZlbCwgZmxvYXQgbWlwTGV2ZWwpIHtcblx0bWlwTGV2ZWwgPSByb3VnaG5l
c3NMZXZlbCA+IGN1YmVVVl9tYXhMb2RzMiAtIDMuMCA/IDAuMCA6IG1pcExldmVsO1xuXHRmbG9h
dCBhID0gMTYuMCAqIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZTtcblx0dmVjMiBleHAyX3BhY2tlZCA9
IGV4cDIoIHZlYzIoIHJvdWdobmVzc0xldmVsLCBtaXBMZXZlbCApICk7XG5cdHZlYzIgcmNwX2V4
cDJfcGFja2VkID0gdmVjMiggMS4wICkgLyBleHAyX3BhY2tlZDtcblx0ZmxvYXQgcG93U2NhbGUg
PSBleHAyX3BhY2tlZC54ICogZXhwMl9wYWNrZWQueTtcblx0ZmxvYXQgc2NhbGUgPSByY3BfZXhw
Ml9wYWNrZWQueCAqIHJjcF9leHAyX3BhY2tlZC55ICogMC4yNTtcblx0ZmxvYXQgbWlwT2Zmc2V0
ID0gMC43NSooMS4wIC0gcmNwX2V4cDJfcGFja2VkLnkpICogcmNwX2V4cDJfcGFja2VkLng7XG5c
dGJvb2wgYlJlcyA9IG1pcExldmVsID09IDAuMDtcblx0c2NhbGUgPSAgYlJlcyAmJiAoc2NhbGUg
PCBhKSA/IGEgOiBzY2FsZTtcblx0dmVjMyByO1xuXHR2ZWMyIG9mZnNldDtcblx0aW50IGZhY2Ug
PSBnZXRGYWNlRnJvbURpcmVjdGlvbihkaXJlY3Rpb24pO1xuXHRmbG9hdCByY3BQb3dTY2FsZSA9
IDEuMCAvIHBvd1NjYWxlO1xuXHRpZiggZmFjZSA9PSAwKSB7XG5cdFx0ciA9IHZlYzMoZGlyZWN0
aW9uLngsIC1kaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCA9IHZlYzIoMC4w
K21pcE9mZnNldCwwLjc1ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAo
b2Zmc2V0LnkgPCAyLjAqYSkgPyBhIDogb2Zmc2V0Lnk7XG5cdH1cblx0ZWxzZSBpZiggZmFjZSA9
PSAxKSB7XG5cdFx0ciA9IHZlYzMoZGlyZWN0aW9uLnksIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24u
eik7XG5cdFx0b2Zmc2V0ID0gdmVjMihzY2FsZSttaXBPZmZzZXQsIDAuNzUgKiByY3BQb3dTY2Fs
ZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZz
ZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlID09IDIpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rp
b24ueiwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55KTtcblx0XHRvZmZzZXQgPSB2ZWMyKDIuMCpz
Y2FsZSttaXBPZmZzZXQsIDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVz
ICYmIChvZmZzZXQueSA8IDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBm
YWNlID09IDMpIHtcblx0XHRyID0gdmVjMyhkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnosIGRpcmVj
dGlvbi55KTtcblx0XHRvZmZzZXQgPSB2ZWMyKDAuMCttaXBPZmZzZXQsMC41ICogcmNwUG93U2Nh
bGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBv
ZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlID09IDQpIHtcblx0XHRyID0gdmVjMyhkaXJl
Y3Rpb24ueSwgZGlyZWN0aW9uLngsIC1kaXJlY3Rpb24ueik7XG5cdFx0b2Zmc2V0ID0gdmVjMihz
Y2FsZSttaXBPZmZzZXQsIDAuNSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMg
JiYgKG9mZnNldC55IDwgMi4wKmEpID8gMC4wIDogb2Zmc2V0Lnk7XG5cdH1cblx0ZWxzZSB7XG5c
dFx0ciA9IHZlYzMoZGlyZWN0aW9uLnosIC1kaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRc
dG9mZnNldCA9IHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xu
XHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyAwLjAgOiBvZmZzZXQu
eTtcblx0fVxuXHRyID0gbm9ybWFsaXplKHIpO1xuXHRmbG9hdCB0ZXhlbE9mZnNldCA9IDAuNSAq
IGN1YmVVVl9yY3BUZXh0dXJlU2l6ZTtcblx0dmVjMiBzID0gKCByLnl6IC8gYWJzKCByLnggKSAr
IHZlYzIoIDEuMCApICkgKiAwLjU7XG5cdHZlYzIgYmFzZSA9IG9mZnNldCArIHZlYzIoIHRleGVs
T2Zmc2V0ICk7XG5cdHJldHVybiBiYXNlICsgcyAqICggc2NhbGUgLSAyLjAgKiB0ZXhlbE9mZnNl
dCApO1xufVxuI2RlZmluZSBjdWJlVVZfbWF4TG9kczMgKGxvZzIoY3ViZVVWX3RleHR1cmVTaXpl
KjAuMjUpIC0gMy4wKVxudmVjNCB0ZXh0dXJlQ3ViZVVWKHZlYzMgcmVmbGVjdGVkRGlyZWN0aW9u
LCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IHJvdWdobmVzc1ZhbCA9IHJvdWdobmVzcyog
Y3ViZVVWX21heExvZHMzO1xuXHRmbG9hdCByMSA9IGZsb29yKHJvdWdobmVzc1ZhbCk7XG5cdGZs
b2F0IHIyID0gcjEgKyAxLjA7XG5cdGZsb2F0IHQgPSBmcmFjdChyb3VnaG5lc3NWYWwpO1xuXHR2
ZWMyIG1pcEluZm8gPSBNaXBMZXZlbEluZm8ocmVmbGVjdGVkRGlyZWN0aW9uLCByMSwgcm91Z2hu
ZXNzKTtcblx0ZmxvYXQgcyA9IG1pcEluZm8ueTtcblx0ZmxvYXQgbGV2ZWwwID0gbWlwSW5mby54
O1xuXHRmbG9hdCBsZXZlbDEgPSBsZXZlbDAgKyAxLjA7XG5cdGxldmVsMSA9IGxldmVsMSA+IDUu
MCA/IDUuMCA6IGxldmVsMTtcblx0bGV2ZWwwICs9IG1pbiggZmxvb3IoIHMgKyAwLjUgKSwgNS4w
ICk7XG5cdHZlYzIgdXZfMTAgPSBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMSwgbGV2
ZWwwKTtcblx0dmVjNCBjb2xvcjEwID0gZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52
TWFwLCB1dl8xMCkpO1xuXHR2ZWMyIHV2XzIwID0gZ2V0Q3ViZVVWKHJlZmxlY3RlZERpcmVjdGlv
biwgcjIsIGxldmVsMCk7XG5cdHZlYzQgY29sb3IyMCA9IGVudk1hcFRleGVsVG9MaW5lYXIodGV4
dHVyZTJEKGVudk1hcCwgdXZfMjApKTtcblx0dmVjNCByZXN1bHQgPSBtaXgoY29sb3IxMCwgY29s
b3IyMCwgdCk7XG5cdHJldHVybiB2ZWM0KHJlc3VsdC5yZ2IsIDEuMCk7XG59XG4jZW5kaWZcbiI7
CisgICAgICAgIGFwcGx5TWF0cml4NDogZnVuY3Rpb24gKCBtYXRyaXggKSB7CiAKLSAgICB2YXIg
ZGVmYXVsdG5vcm1hbF92ZXJ0ZXggPSAidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1h
dHJpeCAqIG9iamVjdE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9y
bWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIC8vIHRy
YW5zZm9ybSBvZiBlbXB0eSBib3ggaXMgYW4gZW1wdHkgYm94LgorICAgICAgICAgICAgaWYgKCB0
aGlzLmlzRW1wdHkoICkgKSByZXR1cm4gdGhpczsKIAotICAgIHZhciBkaXNwbGFjZW1lbnRtYXBf
cGFyc192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1w
bGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxl
O1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWZcbiI7CisgICAgICAg
ICAgICB2YXIgbSA9IG1hdHJpeC5lbGVtZW50czsKIAotICAgIHZhciBkaXNwbGFjZW1lbnRtYXBf
dmVydGV4ID0gIiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHRyYW5zZm9ybWVkICs9IG5v
cm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB1
diApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZlxu
IjsKKyAgICAgICAgICAgIHZhciB4YXggPSBtWyAwIF0gKiB0aGlzLm1pbi54LCB4YXkgPSBtWyAx
IF0gKiB0aGlzLm1pbi54LCB4YXogPSBtWyAyIF0gKiB0aGlzLm1pbi54OworICAgICAgICAgICAg
dmFyIHhieCA9IG1bIDAgXSAqIHRoaXMubWF4LngsIHhieSA9IG1bIDEgXSAqIHRoaXMubWF4Lngs
IHhieiA9IG1bIDIgXSAqIHRoaXMubWF4Lng7CisgICAgICAgICAgICB2YXIgeWF4ID0gbVsgNCBd
ICogdGhpcy5taW4ueSwgeWF5ID0gbVsgNSBdICogdGhpcy5taW4ueSwgeWF6ID0gbVsgNiBdICog
dGhpcy5taW4ueTsKKyAgICAgICAgICAgIHZhciB5YnggPSBtWyA0IF0gKiB0aGlzLm1heC55LCB5
YnkgPSBtWyA1IF0gKiB0aGlzLm1heC55LCB5YnogPSBtWyA2IF0gKiB0aGlzLm1heC55OworICAg
ICAgICAgICAgdmFyIHpheCA9IG1bIDggXSAqIHRoaXMubWluLnosIHpheSA9IG1bIDkgXSAqIHRo
aXMubWluLnosIHpheiA9IG1bIDEwIF0gKiB0aGlzLm1pbi56OworICAgICAgICAgICAgdmFyIHpi
eCA9IG1bIDggXSAqIHRoaXMubWF4LnosIHpieSA9IG1bIDkgXSAqIHRoaXMubWF4LnosIHpieiA9
IG1bIDEwIF0gKiB0aGlzLm1heC56OwogCi0gICAgdmFyIGVtaXNzaXZlbWFwX2ZyYWdtZW50ID0g
IiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJE
KCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNzaXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBU
ZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICkucmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFu
Y2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICB0aGlzLm1p
bi54ID0gTWF0aC5taW4oIHhheCwgeGJ4ICkgKyBNYXRoLm1pbiggeWF4LCB5YnggKSArIE1hdGgu
bWluKCB6YXgsIHpieCApICsgbVsgMTIgXTsKKyAgICAgICAgICAgIHRoaXMubWluLnkgPSBNYXRo
Lm1pbiggeGF5LCB4YnkgKSArIE1hdGgubWluKCB5YXksIHlieSApICsgTWF0aC5taW4oIHpheSwg
emJ5ICkgKyBtWyAxMyBdOworICAgICAgICAgICAgdGhpcy5taW4ueiA9IE1hdGgubWluKCB4YXos
IHhieiApICsgTWF0aC5taW4oIHlheiwgeWJ6ICkgKyBNYXRoLm1pbiggemF6LCB6YnogKSArIG1b
IDE0IF07CisgICAgICAgICAgICB0aGlzLm1heC54ID0gTWF0aC5tYXgoIHhheCwgeGJ4ICkgKyBN
YXRoLm1heCggeWF4LCB5YnggKSArIE1hdGgubWF4KCB6YXgsIHpieCApICsgbVsgMTIgXTsKKyAg
ICAgICAgICAgIHRoaXMubWF4LnkgPSBNYXRoLm1heCggeGF5LCB4YnkgKSArIE1hdGgubWF4KCB5
YXksIHlieSApICsgTWF0aC5tYXgoIHpheSwgemJ5ICkgKyBtWyAxMyBdOworICAgICAgICAgICAg
dGhpcy5tYXgueiA9IE1hdGgubWF4KCB4YXosIHhieiApICsgTWF0aC5tYXgoIHlheiwgeWJ6ICkg
KyBNYXRoLm1heCggemF6LCB6YnogKSArIG1bIDE0IF07CiAKLSAgICB2YXIgZW1pc3NpdmVtYXBf
cGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxl
cjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmXG4iOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICB2YXIgZW5jb2RpbmdzX2ZyYWdtZW50ID0gIiAgZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9P
dXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7XG4iOworICAgICAgICB9LAogCi0gICAgdmFyIGVu
Y29kaW5nc19wYXJzX2ZyYWdtZW50ID0gIlxudmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2
YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xufVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0
IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFs
dWUueHl6LCB2ZWMzKCBnYW1tYUZhY3RvciApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgTGluZWFy
VG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVy
biB2ZWM0KCBwb3coIHZhbHVlLnh5eiwgdmVjMyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1
ZS53ICk7XG59XG52ZWM0IHNSR0JUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJu
IHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEz
MjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBs
ZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUudyAp
O1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0
KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMygg
MC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJn
YiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLncgKTtcbn1cbnZlYzQgUkdCRVRvTGlu
ZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMigg
dmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSgg
aW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4KCBtYXgoIHZhbHVl
LnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xuXHRmbG9hdCBmRXhwID0gY2xhbXAoIGNlaWwoIGxv
ZzIoIG1heENvbXBvbmVudCApICksIC0xMjguMCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZh
bHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBmRXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52
ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5c
dHJldHVybiB2ZWM0KCB2YWx1ZS54eXogKiB2YWx1ZS53ICogbWF4UmFuZ2UsIDEuMCApO1xufVxu
dmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xu
XHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVlLngsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7
XG5cdGZsb2F0IE0gICAgICA9IGNsYW1wKCBtYXhSR0IgLyBtYXhSYW5nZSwgMC4wLCAxLjAgKTtc
blx0TSAgICAgICAgICAgID0gY2VpbCggTSAqIDI1NS4wICkgLyAyNTUuMDtcblx0cmV0dXJuIHZl
YzQoIHZhbHVlLnJnYiAvICggTSAqIG1heFJhbmdlICksIE0gKTtcbn1cbnZlYzQgUkdCRFRvTGlu
ZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQo
IHZhbHVlLnJnYiAqICggKCBtYXhSYW5nZSAvIDI1NS4wICkgLyB2YWx1ZS5hICksIDEuMCApO1xu
fVxudmVjNCBMaW5lYXJUb1JHQkQoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkg
e1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVlLngsIG1heCggdmFsdWUuZywgdmFsdWUuYiAp
ICk7XG5cdGZsb2F0IEQgICAgICA9IG1heCggbWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHRE
ICAgICAgICAgICAgPSBtaW4oIGZsb29yKCBEICkgLyAyNTUuMCwgMS4wICk7XG5cdHJldHVybiB2
ZWM0KCB2YWx1ZS5yZ2IgKiAoIEQgKiAoIDI1NS4wIC8gbWF4UmFuZ2UgKSApLCBEICk7XG59XG5j
b25zdCBtYXQzIGNMb2dMdXZNID0gbWF0MyggMC4yMjA5LCAwLjMzOTAsIDAuNDE4NCwgMC4xMTM4
LCAwLjY3ODAsIDAuNzMxOSwgMC4wMTAyLCAwLjExMzAsIDAuMjk2OSApO1xudmVjNCBMaW5lYXJU
b0xvZ0x1diggaW4gdmVjNCB2YWx1ZSApICB7XG5cdHZlYzMgWHBfWV9YWVpwID0gdmFsdWUucmdi
ICogY0xvZ0x1dk07XG5cdFhwX1lfWFlacCA9IG1heChYcF9ZX1hZWnAsIHZlYzMoMWUtNiwgMWUt
NiwgMWUtNikpO1xuXHR2ZWM0IHZSZXN1bHQ7XG5cdHZSZXN1bHQueHkgPSBYcF9ZX1hZWnAueHkg
LyBYcF9ZX1hZWnAuejtcblx0ZmxvYXQgTGUgPSAyLjAgKiBsb2cyKFhwX1lfWFlacC55KSArIDEy
Ny4wO1xuXHR2UmVzdWx0LncgPSBmcmFjdChMZSk7XG5cdHZSZXN1bHQueiA9IChMZSAtIChmbG9v
cih2UmVzdWx0LncqMjU1LjApKS8yNTUuMCkvMjU1LjA7XG5cdHJldHVybiB2UmVzdWx0O1xufVxu
Y29uc3QgbWF0MyBjTG9nTHV2SW52ZXJzZU0gPSBtYXQzKCA2LjAwMTQsIC0yLjcwMDgsIC0xLjc5
OTYsIC0xLjMzMjAsIDMuMTAyOSwgLTUuNzcyMSwgMC4zMDA4LCAtMS4wODgyLCA1LjYyNjggKTtc
bnZlYzQgTG9nTHV2VG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdGZsb2F0IExlID0gdmFs
dWUueiAqIDI1NS4wICsgdmFsdWUudztcblx0dmVjMyBYcF9ZX1hZWnA7XG5cdFhwX1lfWFlacC55
ID0gZXhwMigoTGUgLSAxMjcuMCkgLyAyLjApO1xuXHRYcF9ZX1hZWnAueiA9IFhwX1lfWFlacC55
IC8gdmFsdWUueTtcblx0WHBfWV9YWVpwLnggPSB2YWx1ZS54ICogWHBfWV9YWVpwLno7XG5cdHZl
YzMgdlJHQiA9IFhwX1lfWFlacC5yZ2IgKiBjTG9nTHV2SW52ZXJzZU07XG5cdHJldHVybiB2ZWM0
KCBtYXgodlJHQiwgMC4wKSwgMS4wICk7XG59XG4iOworICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0
aW9uICggb2Zmc2V0ICkgewogCi0gICAgdmFyIGVudm1hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNF
X0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9S
TUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXggPSBu
b3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR2ZWMzIHdv
cmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4
ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVj
dFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNl
XG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGRO
b3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZWxzZVxuXHRcdHZlYzMg
cmVmbGVjdFZlYyA9IHZSZWZsZWN0O1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NV
QkVcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgZmxpcE5vcm1hbCAq
IHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQj
ZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHR2ZWMyIHNhbXBsZVVWO1xu
XHRcdHNhbXBsZVVWLnkgPSBhc2luKCBmbGlwTm9ybWFsICogcmVmbGVjdFZlYy55ICkgKiBSRUNJ
UFJPQ0FMX1BJICsgMC41O1xuXHRcdHNhbXBsZVVWLnggPSBhdGFuKCBmbGlwTm9ybWFsICogcmVm
bGVjdFZlYy56LCBmbGlwTm9ybWFsICogcmVmbGVjdFZlYy54ICkgKiBSRUNJUFJPQ0FMX1BJMiAr
IDAuNTtcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHNhbXBsZVVWICk7
XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX1NQSEVSRSApXG5cdFx0dmVjMyByZWZsZWN0
VmlldyA9IGZsaXBOb3JtYWwgKiBub3JtYWxpemUoICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxl
Y3RWZWMsIDAuMCApICkueHl6ICsgdmVjMyggMC4wLCAwLjAsIDEuMCApICk7XG5cdFx0dmVjNCBl
bnZDb2xvciA9IHRleHR1cmUyRCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSAp
O1xuXHQjZWxzZVxuXHRcdHZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTtcblx0I2VuZGlmXG5c
dGVudkNvbG9yID0gZW52TWFwVGV4ZWxUb0xpbmVhciggZW52Q29sb3IgKTtcblx0I2lmZGVmIEVO
Vk1BUF9CTEVORElOR19NVUxUSVBMWVxuXHRcdG91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5n
TGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiBy
ZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApXG5c
dFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVj
dWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9C
TEVORElOR19BREQgKVxuXHRcdG91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3Vs
YXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAg
ICAgICB0aGlzLm1pbi5hZGQoIG9mZnNldCApOworICAgICAgICAgICAgdGhpcy5tYXguYWRkKCBv
ZmZzZXQgKTsKIAotICAgIHZhciBlbnZtYXBfcGFyc19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCgg
VVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIFBIWVNJQ0FMIClcblx0dW5pZm9ybSBmbG9hdCByZWZs
ZWN0aXZpdHk7XG5cdHVuaWZvcm0gZmxvYXQgZW52TWFwSW50ZW5zaXR5O1xuI2VuZGlmXG4jaWZk
ZWYgVVNFX0VOVk1BUFxuXHQjaWYgISBkZWZpbmVkKCBQSFlTSUNBTCApICYmICggZGVmaW5lZCgg
VVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhP
TkcgKSApXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0I2lm
ZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblx0
I2Vsc2Vcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdCNlbmRpZlxuXHR1bmlmb3Jt
IGZsb2F0IGZsaXBFbnZNYXA7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmlu
ZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIHx8IGRlZmluZWQoIFBIWVNJ
Q0FMIClcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2Vsc2Vcblx0XHR2
YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICB2YXIgZW52bWFwX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0Vf
RU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JN
QUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0
aW9uO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0XHR1bmlmb3JtIGZs
b2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAgIH0sCiAK
LSAgICB2YXIgZW52bWFwX3ZlcnRleCA9ICIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5l
ZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCgg
UEhPTkcgKVxuXHRcdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNl
XG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXog
LSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNm
b3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRl
ZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCA9IHJlZmxlY3QoIGNhbWVy
YVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCA9IHJl
ZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5c
dFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICBlcXVhbHM6IGZ1bmN0aW9u
ICggYm94ICkgewogCi0gICAgdmFyIGZvZ192ZXJ0ZXggPSAiXG4jaWZkZWYgVVNFX0ZPR1xuZm9n
RGVwdGggPSAtbXZQb3NpdGlvbi56O1xuI2VuZGlmIjsKKyAgICAgICAgICAgIHJldHVybiBib3gu
bWluLmVxdWFscyggdGhpcy5taW4gKSAmJiBib3gubWF4LmVxdWFscyggdGhpcy5tYXggKTsKIAot
ICAgIHZhciBmb2dfcGFyc192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9GT0dcbiAgdmFyeWluZyBmbG9h
dCBmb2dEZXB0aDtcbiNlbmRpZlxuIjsKKyAgICAgICAgfQogCi0gICAgdmFyIGZvZ19mcmFnbWVu
dCA9ICIjaWZkZWYgVVNFX0ZPR1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHRmbG9hdCBmb2dGYWN0
b3IgPSB3aGl0ZUNvbXBsaW1lbnQoIGV4cDIoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiBm
b2dEZXB0aCAqIGZvZ0RlcHRoICogTE9HMiApICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgZm9nRmFj
dG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBmb2dEZXB0aCApO1xuXHQjZW5kaWZc
blx0Z2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZv
Z0ZhY3RvciApO1xuI2VuZGlmXG4iOworICAgIH0gKTsKIAotICAgIHZhciBmb2dfcGFyc19mcmFn
bWVudCA9ICIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlp
bmcgZmxvYXQgZm9nRGVwdGg7XG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdHVuaWZvcm0gZmxvYXQg
Zm9nRGVuc2l0eTtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ05lYXI7XG5cdFx0dW5p
Zm9ybSBmbG9hdCBmb2dGYXI7XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgIC8qKgorICAgICAq
IEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KKyAgICAgKiBAYXV0aG9yIG1yZG9v
YiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgdmFyIGdyYWRpZW50bWFwX3Bh
cnNfZnJhZ21lbnQgPSAiI2lmZGVmIFRPT05cblx0dW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRN
YXA7XG5cdHZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdo
dERpcmVjdGlvbiApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVj
dGlvbiApO1xuXHRcdHZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7
XG5cdFx0I2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggZ3Jh
ZGllbnRNYXAsIGNvb3JkICkucmdiO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gKCBjb29yZC54
IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4j
ZW5kaWZcbiI7CisgICAgZnVuY3Rpb24gU3BoZXJlKCBjZW50ZXIsIHJhZGl1cyApIHsKIAotICAg
IHZhciBsaWdodG1hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdHJlZmxlY3Rl
ZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBQSSAqIHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIg
KS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZlxuIjsKKyAgICAgICAgdGhpcy5jZW50
ZXIgPSAoIGNlbnRlciAhPT0gdW5kZWZpbmVkICkgPyBjZW50ZXIgOiBuZXcgVmVjdG9yMygpOwor
ICAgICAgICB0aGlzLnJhZGl1cyA9ICggcmFkaXVzICE9PSB1bmRlZmluZWQgKSA/IHJhZGl1cyA6
IDA7CiAKLSAgICB2YXIgbGlnaHRtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0xJR0hU
TUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGxpZ2h0
TWFwSW50ZW5zaXR5O1xuI2VuZGlmIjsKKyAgICB9CiAKLSAgICB2YXIgbGlnaHRzX2xhbWJlcnRf
dmVydGV4ID0gInZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApO1xuR2VvbWV0cmljQ29udGV4dCBn
ZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7XG5nZW9tZXRyeS5u
b3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5nZW9tZXRyeS52aWV3RGly
ID0gbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTtcbkdlb21ldHJpY0NvbnRleHQgYmFja0dl
b21ldHJ5O1xuYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247XG5iYWNr
R2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDtcbmJhY2tHZW9tZXRyeS52aWV3RGly
ID0gZ2VvbWV0cnkudmlld0RpcjtcbnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYg
RE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcbiNlbmRpZlxuSW5jaWRl
bnRMaWdodCBkaXJlY3RMaWdodDtcbmZsb2F0IGRvdE5MO1xudmVjMyBkaXJlY3RMaWdodENvbG9y
X0RpZmZ1c2U7XG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBp
IDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJy
YWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0
ZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5c
dFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0
XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlm
ZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVy
YXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0
fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkg
PCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRp
YW5jZSggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3RO
TCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRk
aXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZM
aWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNl
O1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUo
IC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4j
ZW5kaWZcbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVN
X0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFk
aWFuY2UoIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xu
XHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiAp
O1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0TGlnaHQuY29sb3I7
XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9y
X0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArPSBz
YXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlm
XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0Zm9yICggaW50IGkgPSAw
OyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZMaWdodEZyb250ICs9IGdldEhl
bWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkg
KTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IGdldEhlbWlz
cGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5
ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuIjsKKyAgICBPYmplY3QuYXNzaWduKCBTcGhl
cmUucHJvdG90eXBlLCB7CiAKLSAgICB2YXIgbGlnaHRzX3BhcnMgPSAidW5pZm9ybSB2ZWMzIGFt
YmllbnRMaWdodENvbG9yO1xudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBp
biB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50
TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJy
YWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5V
TV9ESVJfTElHSFRTID4gMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBk
aXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNo
YWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6
ZTtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBO
VU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlh
bmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGlu
IEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0
ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0
XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0
XHRkaXJlY3RMaWdodC52aXNpYmxlID0gdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5U
X0xJR0hUUyA+IDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5c
dFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0
XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFk
aXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0
IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RM
aWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4g
R2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQg
KSB7XG5cdFx0dmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBv
c2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciAp
O1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJl
Y3RMaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3Ig
Kj0gcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5j
ZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExp
Z2h0LnZpc2libGUgPSAoIGRpcmVjdExpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XG5cdH1c
biNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5c
dFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xu
XHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7
XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFk
b3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7
XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBd
O1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdo
dCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNp
ZGVudExpZ2h0IGRpcmVjdExpZ2h0ICApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQu
cG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24g
PSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3Ro
KCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGRpcmVjdExpZ2h0LmRpcmVj
dGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgPiBzcG90TGln
aHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgPSBzbW9vdGhzdGVwKCBzcG90
TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0
ZGlyZWN0TGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5j
b2xvciAqPSBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZh
Y3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkg
KTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0
XHRkaXJlY3RMaWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlz
aWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdI
VFMgPiAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZl
YzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xu
XHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNNYXQ7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNN
YWc7XG5cdHVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJF
QV9MSUdIVFMgXTtcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0c3RydWN0IEhl
bWlzcGhlcmVMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBza3lDb2xvcjtc
blx0XHR2ZWMzIGdyb3VuZENvbG9yO1xuXHR9O1xuXHR1bmlmb3JtIEhlbWlzcGhlcmVMaWdodCBo
ZW1pc3BoZXJlTGlnaHRzWyBOVU1fSEVNSV9MSUdIVFMgXTtcblx0dmVjMyBnZXRIZW1pc3BoZXJl
TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25z
dCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5ICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90
KCBnZW9tZXRyeS5ub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1p
RGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9
IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZm
dXNlV2VpZ2h0ICk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0
XHRpcnJhZGlhbmNlICo9IFBJO1xuXHRcdCNlbmRpZlxuXHRcdHJldHVybiBpcnJhZGlhbmNlO1xu
XHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lD
QUwgKVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdElycmFkaWFuY2UoIGNvbnN0IGluIEdl
b21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0
XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggZ2VvbWV0cnku
bm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRc
dHZlYzMgcXVlcnlWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogd29ybGROb3JtYWwueCwgd29ybGRO
b3JtYWwueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBl
bnZNYXBDb2xvciA9IHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCgg
bWF4TUlQTGV2ZWwgKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9
IHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5VmVjLCBmbG9hdCggbWF4TUlQTGV2ZWwgKSApO1xu
XHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFy
KCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJF
X1VWIClcblx0XHRcdHZlYzMgcXVlcnlWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogd29ybGROb3Jt
YWwueCwgd29ybGROb3JtYWwueXogKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJl
Q3ViZVVWKCBxdWVyeVZlYywgMS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzQgZW52TWFwQ29s
b3IgPSB2ZWM0KCAwLjAgKTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gUEkgKiBlbnZNYXBDb2xv
ci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cblx0ZmxvYXQgZ2V0U3BlY3VsYXJNSVBMZXZl
bCggY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1h
eE1JUExldmVsICkge1xuXHRcdGZsb2F0IG1heE1JUExldmVsU2NhbGFyID0gZmxvYXQoIG1heE1J
UExldmVsICk7XG5cdFx0ZmxvYXQgZGVzaXJlZE1JUExldmVsID0gbWF4TUlQTGV2ZWxTY2FsYXIg
LSAwLjc5MjQ4IC0gMC41ICogbG9nMiggcG93MiggYmxpbm5TaGluaW5lc3NFeHBvbmVudCApICsg
MS4wICk7XG5cdFx0cmV0dXJuIGNsYW1wKCBkZXNpcmVkTUlQTGV2ZWwsIDAuMCwgbWF4TUlQTGV2
ZWxTY2FsYXIgKTtcblx0fVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBj
b25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBmbG9hdCBibGlublNo
aW5pbmVzc0V4cG9uZW50LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0I2lmZGVm
IEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3Qo
IC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0
dmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggLWdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5v
cm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdFx0cmVmbGVjdFZlYyA9IGlu
dmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRm
bG9hdCBzcGVjdWxhck1JUExldmVsID0gZ2V0U3BlY3VsYXJNSVBMZXZlbCggYmxpbm5TaGluaW5l
c3NFeHBvbmVudCwgbWF4TUlQTGV2ZWwgKTtcblx0XHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxu
XHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZl
Yy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0
XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVJl
ZmxlY3RWZWMsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQg
ZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVJlZmxlY3RWZWMsIHNwZWN1
bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52
TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCgg
RU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHF1ZXJ5UmVmbGVjdFZlYyA9IHZlYzMo
IGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKTtcblx0XHRcdHZlYzQg
ZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKHF1ZXJ5UmVmbGVjdFZlYywgQmxpbm5FeHBvbmVu
dFRvR0dYUm91Z2huZXNzKGJsaW5uU2hpbmluZXNzRXhwb25lbnQpKTtcblx0XHQjZWxpZiBkZWZp
bmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHRcdHZlYzIgc2FtcGxlVVY7XG5cdFx0XHRz
YW1wbGVVVi55ID0gc2F0dXJhdGUoIHJlZmxlY3RWZWMueSAqIDAuNSArIDAuNSApO1xuXHRcdFx0
c2FtcGxlVVYueCA9IGF0YW4oIHJlZmxlY3RWZWMueiwgcmVmbGVjdFZlYy54ICkgKiBSRUNJUFJP
Q0FMX1BJMiArIDAuNTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVj
NCBlbnZNYXBDb2xvciA9IHRleHR1cmUyRExvZEVYVCggZW52TWFwLCBzYW1wbGVVViwgc3BlY3Vs
YXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRl
eHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vu
ZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgPSBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBD
b2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRc
dFx0dmVjMyByZWZsZWN0VmlldyA9IG5vcm1hbGl6ZSggKCB2aWV3TWF0cml4ICogdmVjNCggcmVm
bGVjdFZlYywgMC4wICkgKS54eXogKyB2ZWMzKCAwLjAsMC4wLDEuMCApICk7XG5cdFx0XHQjaWZk
ZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRM
b2RFWFQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUsIHNwZWN1bGFyTUlQTGV2
ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQo
IGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUsIHNwZWN1bGFyTUlQTGV2ZWwgKTtc
blx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVh
ciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIGVudk1hcENvbG9y
LnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuI2VuZGlmXG4iOworICAgICAgICBzZXQ6IGZ1
bmN0aW9uICggY2VudGVyLCByYWRpdXMgKSB7CiAKLSAgICB2YXIgbGlnaHRzX3Bob25nX2ZyYWdt
ZW50ID0gIkJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xv
ciA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5tYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7
XG5tYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzcztcbm1hdGVyaWFsLnNwZWN1
bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoO1xuIjsKKyAgICAgICAgICAgIHRoaXMuY2Vu
dGVyLmNvcHkoIGNlbnRlciApOworICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7CiAK
LSAgICB2YXIgbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQgPSAidmFyeWluZyB2ZWMzIHZWaWV3
UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xu
I2VuZGlmXG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjM1x0ZGlmZnVzZUNvbG9y
O1xuXHR2ZWMzXHRzcGVjdWxhckNvbG9yO1xuXHRmbG9hdFx0c3BlY3VsYXJTaGluaW5lc3M7XG5c
dGZsb2F0XHRzcGVjdWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmco
IGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0Nv
bnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5v
dXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdCNpZmRlZiBUT09OXG5cdFx0
dmVjMyBpcnJhZGlhbmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWws
IGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNlbHNlXG5c
dFx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExp
Z2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RM
aWdodC5jb2xvcjtcblx0I2VuZGlmXG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hU
U1xuXHRcdGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJl
Y3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwu
ZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFk
aWFuY2UgKiBCUkRGX1NwZWN1bGFyX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwg
bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1h
dGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlu
blBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRl
eHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQg
UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGly
ZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFs
LmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9C
bGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1
c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCAp
XHQoMClcbiI7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIHZhciBsaWdodHNfcGh5
c2ljYWxfZnJhZ21lbnQgPSAiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRp
ZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciAp
O1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBjbGFtcCggcm91Z2huZXNzRmFjdG9yLCAw
LjA0LCAxLjAgKTtcbiNpZmRlZiBTVEFOREFSRFxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0g
bWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5y
Z2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9
IG1peCggdmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rp
dml0eSApICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlh
bC5jbGVhckNvYXQgPSBzYXR1cmF0ZSggY2xlYXJDb2F0ICk7XHRtYXRlcmlhbC5jbGVhckNvYXRS
b3VnaG5lc3MgPSBjbGFtcCggY2xlYXJDb2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtcbiNlbmRp
ZlxuIjsKKyAgICAgICAgfSwKIAotICAgIHZhciBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVu
dCA9ICJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0
ZmxvYXRcdHNwZWN1bGFyUm91Z2huZXNzO1xuXHR2ZWMzXHRzcGVjdWxhckNvbG9yO1xuXHQjaWZu
ZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0O1xuXHRcdGZsb2F0IGNsZWFyQ29hdFJv
dWdobmVzcztcblx0I2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJ
RU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9h
dCBjbGVhckNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4g
ZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsg
KCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90
TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JF
Q1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBj
b25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0Nv
bnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0
IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2Vv
bWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0
dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSBy
ZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdo
dC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVp
Z2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0Zmxv
YXQgcm91Z2huZXNzID0gbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0
Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGgg
LSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAt
IGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGgg
KyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRo
ICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJv
dWdobmVzcyApO1xuXHRcdGZsb2F0IG5vcm0gPSB0ZXh0dXJlMkQoIGx0Y01hZywgdXYgKS5hO1xu
XHRcdHZlYzQgdCA9IHRleHR1cmUyRCggbHRjTWF0LCB1diApO1xuXHRcdG1hdDMgbUludiA9IG1h
dDMoXG5cdFx0XHR2ZWMzKCAgIDEsICAgMCwgdC55ICksXG5cdFx0XHR2ZWMzKCAgIDAsIHQueiwg
ICAwICksXG5cdFx0XHR2ZWMzKCB0LncsICAgMCwgdC54IClcblx0XHQpO1xuXHRcdHJlZmxlY3Rl
ZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5zcGVjdWxhckNv
bG9yICogbm9ybSAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUlu
diwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGln
aHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2
aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMSApLCByZWN0Q29vcmRzICk7XG5cdH1cbiNlbmRpZlxu
dm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGln
aHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2Fs
TWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkg
e1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0
TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RM
aWdodC5jb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJy
YWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdCNpZm5kZWYgU1RBTkRBUkRcblx0XHRmbG9hdCBj
bGVhckNvYXRESFIgPSBtYXRlcmlhbC5jbGVhckNvYXQgKiBjbGVhckNvYXRESFJBcHByb3goIG1h
dGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzcywgZG90TkwgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBj
bGVhckNvYXRESFIgPSAwLjA7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVj
dWxhciArPSAoIDEuMCAtIGNsZWFyQ29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3Vs
YXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1h
dGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1
c2UgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2Vf
TGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdCNpZm5kZWYgU1RBTkRBUkRcblx0
XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwu
Y2xlYXJDb2F0ICogQlJERl9TcGVjdWxhcl9HR1goIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgdmVj
MyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3Vn
aG5lc3MgKTtcblx0I2VuZGlmXG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCgg
Y29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21l
dHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRM
aWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNl
ICs9IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNv
bG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZl
YzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdl
b21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJp
YWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHQjaWZuZGVmIFNU
QU5EQVJEXG5cdFx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWws
IGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdGZsb2F0IGRvdE5MID0gZG90TlY7XG5cdFx0Zmxv
YXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94
KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0Zmxv
YXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJl
Y3RTcGVjdWxhciArPSAoIDEuMCAtIGNsZWFyQ29hdERIUiApICogcmFkaWFuY2UgKiBCUkRGX1Nw
ZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3Is
IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNpZm5kZWYgU1RBTkRBUkRcblx0XHRy
ZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IGNsZWFyQ29hdFJhZGlhbmNlICogbWF0
ZXJpYWwuY2xlYXJDb2F0ICogQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5
LCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIG1hdGVyaWFsLmNsZWFyQ29h
dFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbn1cbiNkZWZpbmUgUkVfRGlyZWN0XHRcdFx0XHRSRV9E
aXJlY3RfUGh5c2ljYWxcbiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhXHRcdFJFX0RpcmVjdF9S
ZWN0QXJlYV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2VcdFx0UkVfSW5kaXJl
Y3REaWZmdXNlX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXJcdFx0UkVfSW5k
aXJlY3RTcGVjdWxhcl9QaHlzaWNhbFxuI2RlZmluZSBNYXRlcmlhbF9CbGlublNoaW5pbmVzc0V4
cG9uZW50KCBtYXRlcmlhbCApICAgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBtYXRlcmlh
bC5zcGVjdWxhclJvdWdobmVzcyApXG4jZGVmaW5lIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNo
aW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApICAgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50
KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKVxuZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2Nj
bHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1
c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRyZXR1cm4gc2F0dXJhdGUoIHBv
dyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAx
LjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApO1xufVxuIjsKKyAgICAgICAgc2V0RnJv
bVBvaW50czogZnVuY3Rpb24gKCkgewogCi0gICAgdmFyIGxpZ2h0c190ZW1wbGF0ZSA9ICJcbkdl
b21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3Np
dGlvbjtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcbmdlb21ldHJ5LnZpZXdEaXIgPSBub3Jt
YWxpemUoIHZWaWV3UG9zaXRpb24gKTtcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG4jaWYg
KCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFBvaW50
TGlnaHQgcG9pbnRMaWdodDtcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hU
UzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQ
b2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExp
Z2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAq
PSBhbGwoIGJ2ZWMyKCBwb2ludExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkg
PyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dN
YXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2
UG9pbnRTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0
KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9
XG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJl
Y3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1f
U1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdO1xu
XHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRp
cmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5j
b2xvciAqPSBhbGwoIGJ2ZWMyKCBzcG90TGlnaHQuc2hhZG93LCBkaXJlY3RMaWdodC52aXNpYmxl
ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFw
U2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90
U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGly
ZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2Vu
ZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxu
XHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsg
aSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJl
Y3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlh
bmNlKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWZk
ZWYgVVNFX1NIQURPV01BUFxuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRp
cmVjdGlvbmFsTGlnaHQuc2hhZG93LCBkaXJlY3RMaWdodC52aXNpYmxlICkgKSA/IGdldFNoYWRv
dyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBT
aXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93
UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlm
XG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0
ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCAp
ICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApXG5cdFJlY3RBcmVhTGlnaHQgcmVjdEFy
ZWFMaWdodDtcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkg
KysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVf
RGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxl
Y3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVz
ZSApXG5cdHZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmll
bnRMaWdodENvbG9yICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWMzIGxpZ2h0TWFw
SXJyYWRpYW5jZSA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcElu
dGVuc2l0eTtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGxp
Z2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRpcnJhZGlhbmNlICs9IGxp
Z2h0TWFwSXJyYWRpYW5jZTtcblx0I2VuZGlmXG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAg
KVxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0
XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVy
ZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeSApO1xuXHRcdH1cblx0I2VuZGlmXG5cdCNpZiBkZWZpbmVk
KCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiBkZWZpbmVkKCBFTlZNQVBf
VFlQRV9DVUJFX1VWIClcblx0XHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRpcmVjdEly
cmFkaWFuY2UoIGdlb21ldHJ5LCA4ICk7XG5cdCNlbmRpZlxuXHRSRV9JbmRpcmVjdERpZmZ1c2Uo
IGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRp
ZlxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1
bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBn
ZW9tZXRyeSwgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSwgOCAp
O1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0dmVjMyBjbGVhckNvYXRSYWRpYW5jZSA9IGdldExp
Z2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeSwgTWF0ZXJpYWxfQ2xlYXJDb2F0X0Js
aW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIDggKTtcblx0I2Vsc2Vcblx0XHR2ZWMz
IGNsZWFyQ29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG5cdCNlbmRpZlxuXHRSRV9JbmRpcmVj
dFNwZWN1bGFyKCByYWRpYW5jZSwgY2xlYXJDb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlh
bCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIHZhciBib3ggPSBu
ZXcgQm94MygpOwogCi0gICAgdmFyIGxvZ2RlcHRoYnVmX2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVk
KFVTRV9MT0dERVBUSEJVRikgJiYgZGVmaW5lZChVU0VfTE9HREVQVEhCVUZfRVhUKVxuXHRnbF9G
cmFnRGVwdGhFWFQgPSBsb2cyKHZGcmFnRGVwdGgpICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNl
bmRpZiI7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0RnJvbVBvaW50cyggcG9pbnRz
LCBvcHRpb25hbENlbnRlciApIHsKIAotICAgIHZhciBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50
ID0gIiNpZmRlZiBVU0VfTE9HREVQVEhCVUZcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZD
O1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdE
ZXB0aDtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgdmFyIGNlbnRlciA9
IHRoaXMuY2VudGVyOwogCi0gICAgdmFyIGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4ID0gIiNpZmRl
ZiBVU0VfTE9HREVQVEhCVUZcblx0I2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFRcblx0XHR2YXJ5
aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdCNlbmRpZlxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRo
QnVmRkM7XG4jZW5kaWYiOworICAgICAgICAgICAgICAgIGlmICggb3B0aW9uYWxDZW50ZXIgIT09
IHVuZGVmaW5lZCApIHsKIAotICAgIHZhciBsb2dkZXB0aGJ1Zl92ZXJ0ZXggPSAiI2lmZGVmIFVT
RV9MT0dERVBUSEJVRlxuXHRnbF9Qb3NpdGlvbi56ID0gbG9nMihtYXgoIEVQU0lMT04sIGdsX1Bv
c2l0aW9uLncgKyAxLjAgKSkgKiBsb2dEZXB0aEJ1ZkZDO1xuXHQjaWZkZWYgVVNFX0xPR0RFUFRI
QlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxu
XHRcdGdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiAtIDEuMCkgKiBnbF9Qb3NpdGlvbi53
O1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICAgICAgY2VudGVyLmNvcHko
IG9wdGlvbmFsQ2VudGVyICk7CiAKLSAgICB2YXIgbWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0Vf
TUFQXG5cdHZlYzQgdGV4ZWxDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxD
b2xvciA9IG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICo9
IHRleGVsQ29sb3I7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
IHZhciBtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBs
ZXIyRCBtYXA7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgICAgIGJveC5zZXRGcm9tUG9p
bnRzKCBwb2ludHMgKS5nZXRDZW50ZXIoIGNlbnRlciApOwogCi0gICAgdmFyIG1hcF9wYXJ0aWNs
ZV9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IG1hcFRleGVsID0gdGV4dHVyZTJE
KCBtYXAsIHZlYzIoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55ICkgKiBv
ZmZzZXRSZXBlYXQuencgKyBvZmZzZXRSZXBlYXQueHkgKTtcblx0ZGlmZnVzZUNvbG9yICo9IG1h
cFRleGVsVG9MaW5lYXIoIG1hcFRleGVsICk7XG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAg
fQogCi0gICAgdmFyIG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfTUFQ
XG5cdHVuaWZvcm0gdmVjNCBvZmZzZXRSZXBlYXQ7XG5cdHVuaWZvcm0gc2FtcGxlcjJEIG1hcDtc
biNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICB2YXIgbWF4UmFkaXVzU3EgPSAwOwogCi0gICAg
dmFyIG1ldGFsbmVzc21hcF9mcmFnbWVudCA9ICJmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRh
bG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0g
dGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApO1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4
ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgdmFyIG1ldGFs
bmVzc21hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQXG5cdHVuaWZv
cm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcbiNlbmRpZiI7CisgICAgICAgICAgICAgICAgICAg
IG1heFJhZGl1c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1NxLCBjZW50ZXIuZGlzdGFuY2VUb1Nx
dWFyZWQoIHBvaW50c1sgaSBdICkgKTsKIAotICAgIHZhciBtb3JwaG5vcm1hbF92ZXJ0ZXggPSAi
I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICs9ICggbW9ycGhOb3JtYWww
IC0gbm9ybWFsICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0b2JqZWN0Tm9ybWFs
ICs9ICggbW9ycGhOb3JtYWwxIC0gbm9ybWFsICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEg
XTtcblx0b2JqZWN0Tm9ybWFsICs9ICggbW9ycGhOb3JtYWwyIC0gbm9ybWFsICkgKiBtb3JwaFRh
cmdldEluZmx1ZW5jZXNbIDIgXTtcblx0b2JqZWN0Tm9ybWFsICs9ICggbW9ycGhOb3JtYWwzIC0g
bm9ybWFsICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcbiNlbmRpZlxuIjsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICB2YXIgbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXggPSAiI2lmZGVm
IFVTRV9NT1JQSFRBUkdFVFNcblx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdHVuaWZvcm0g
ZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdCNlbHNlXG5cdHVuaWZvcm0gZmxv
YXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdCNlbmRpZlxuI2VuZGlmIjsKKyAgICAg
ICAgICAgICAgICB0aGlzLnJhZGl1cyA9IE1hdGguc3FydCggbWF4UmFkaXVzU3EgKTsKIAotICAg
IHZhciBtb3JwaHRhcmdldF92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFNcblx0dHJh
bnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDAgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZs
dWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQxIC0gcG9zaXRpb24g
KSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1lZCArPSAoIG1vcnBo
VGFyZ2V0MiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0dHJh
bnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDMgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZs
dWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR0cmFuc2Zvcm1lZCAr
PSAoIG1vcnBoVGFyZ2V0NCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQg
XTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDUgLSBwb3NpdGlvbiApICogbW9ycGhU
YXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQ2IC0g
cG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHR0cmFuc2Zvcm1lZCAr
PSAoIG1vcnBoVGFyZ2V0NyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcg
XTtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICB2YXIgbm9ybWFsX2ZsaXAgPSAiI2lmZGVmIERPVUJMRV9TSURFRFxuXHRmbG9hdCBmbGlw
Tm9ybWFsID0gKCBmbG9hdCggZ2xfRnJvbnRGYWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuI2Vsc2Vc
blx0ZmxvYXQgZmxpcE5vcm1hbCA9IDEuMDtcbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIH07CiAK
LSAgICB2YXIgbm9ybWFsX2ZyYWdtZW50ID0gIiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZk
eCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkg
KSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2
Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9z
aXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkg
KSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKSAqIGZsaXBO
b3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdG5vcm1hbCA9IHBlcnR1cmJO
b3JtYWwyQXJiKCAtdlZpZXdQb3NpdGlvbiwgbm9ybWFsICk7XG4jZWxpZiBkZWZpbmVkKCBVU0Vf
QlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC12Vmlld1Bvc2l0aW9uLCBu
b3JtYWwsIGRIZHh5X2Z3ZCgpICk7XG4jZW5kaWZcbiI7CisgICAgICAgIH0oKSwKIAotICAgIHZh
ciBub3JtYWxtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlm
b3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcblx0
dmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSApIHtc
blx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSAp
LCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9z
LnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBz
dDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRc
dHZlYzMgUyA9IG5vcm1hbGl6ZSggcTAgKiBzdDEudCAtIHExICogc3QwLnQgKTtcblx0XHR2ZWMz
IFQgPSBub3JtYWxpemUoIC1xMCAqIHN0MS5zICsgcTEgKiBzdDAucyApO1xuXHRcdHZlYzMgTiA9
IG5vcm1hbGl6ZSggc3VyZl9ub3JtICk7XG5cdFx0dmVjMyBtYXBOID0gdGV4dHVyZTJEKCBub3Jt
YWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0XHRtYXBOLnh5ID0gbm9ybWFsU2NhbGUg
KiBtYXBOLnh5O1xuXHRcdG1hdDMgdHNuID0gbWF0MyggUywgVCwgTiApO1xuXHRcdHJldHVybiBu
b3JtYWxpemUoIHRzbiAqIG1hcE4gKTtcblx0fVxuI2VuZGlmXG4iOworICAgICAgICBjbG9uZTog
ZnVuY3Rpb24gKCkgewogCi0gICAgdmFyIHBhY2tpbmcgPSAidmVjMyBwYWNrTm9ybWFsVG9SR0Io
IGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAq
IDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdi
ICkge1xuXHRyZXR1cm4gMS4wIC0gMi4wICogcmdiLnh5ejtcbn1cbmNvbnN0IGZsb2F0IFBhY2tV
cHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAv
IDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYu
LCAyNTYuICogMjU2LiwgIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFj
a0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRS
aWdodDggPSAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQg
diApIHtcblx0dmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5c
dHIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xu
fVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJu
IGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxuZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0Rl
cHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4g
ZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciAp
O1xufVxuZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5l
YXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRy
ZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7XG59XG5mbG9hdCB2aWV3
WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0
IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICgoIG5lYXIgKyB2aWV3WiAp
ICogZmFyICkgLyAoKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApO1xufVxuZmxvYXQgcGVyc3BlY3Rp
dmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBu
ZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIG5lYXIgKiBmYXIgKSAvICgg
KCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApO1xufVxuIjsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAotICAgIHZhciBwcmVt
dWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50ID0gIiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5c
dGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWZcbiI7CisgICAgICAg
IH0sCiAKLSAgICB2YXIgcHJvamVjdF92ZXJ0ZXggPSAidmVjNCBtdlBvc2l0aW9uID0gbW9kZWxW
aWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuZ2xfUG9zaXRpb24gPSBwcm9q
ZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbiI7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICgg
c3BoZXJlICkgewogCi0gICAgdmFyIGRpdGhlcmluZ19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCgg
RElUSEVSSU5HIClcbiAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9y
LnJnYiApO1xuI2VuZGlmXG4iOworICAgICAgICAgICAgdGhpcy5jZW50ZXIuY29weSggc3BoZXJl
LmNlbnRlciApOworICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSBzcGhlcmUucmFkaXVzOwogCi0g
ICAgdmFyIGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50ID0gIiNpZiBkZWZpbmVkKCBESVRIRVJJTkcg
KVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0
aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdC
ID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0
XHRkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICog
ZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRp
dGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZlxuIjsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgdmFyIHJvdWdobmVzc21hcF9mcmFnbWVudCA9ICJmbG9hdCByb3VnaG5lc3NGYWN0
b3IgPSByb3VnaG5lc3M7XG4jaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91
Z2huZXNzID0gdGV4dHVyZTJEKCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0
b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcbiNlbmRpZlxuIjsKKyAgICAgICAgfSwKIAotICAgIHZh
ciByb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxu
XHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiOworICAgICAgICBlbXB0
eTogZnVuY3Rpb24gKCkgewogCi0gICAgdmFyIHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50ID0gIiNp
ZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0XHR1bmlmb3Jt
IHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0XHR2
YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRTIF07XG5c
dCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJE
IHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3Bv
dFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9J
TlRfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1f
UE9JTlRfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1f
UE9JTlRfTElHSFRTIF07XG5cdCNlbmRpZlxuXHRmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1w
bGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdHJldHVybiBzdGVw
KCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSAp
O1xuXHR9XG5cdGZsb2F0IHRleHR1cmUyRFNoYWRvd0xlcnAoIHNhbXBsZXIyRCBkZXB0aHMsIHZl
YzIgc2l6ZSwgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRjb25zdCB2ZWMyIG9mZnNl
dCA9IHZlYzIoIDAuMCwgMS4wICk7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAv
IHNpemU7XG5cdFx0dmVjMiBjZW50cm9pZFVWID0gZmxvb3IoIHV2ICogc2l6ZSArIDAuNSApIC8g
c2l6ZTtcblx0XHRmbG9hdCBsYiA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRV
ViArIHRleGVsU2l6ZSAqIG9mZnNldC54eCwgY29tcGFyZSApO1xuXHRcdGZsb2F0IGx0ID0gdGV4
dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh5
LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgcmIgPSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNl
bnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueXgsIGNvbXBhcmUgKTtcblx0XHRmbG9hdCBy
dCA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9m
ZnNldC55eSwgY29tcGFyZSApO1xuXHRcdHZlYzIgZiA9IGZyYWN0KCB1diAqIHNpemUgKyAwLjUg
KTtcblx0XHRmbG9hdCBhID0gbWl4KCBsYiwgbHQsIGYueSApO1xuXHRcdGZsb2F0IGIgPSBtaXgo
IHJiLCBydCwgZi55ICk7XG5cdFx0ZmxvYXQgYyA9IG1peCggYSwgYiwgZi54ICk7XG5cdFx0cmV0
dXJuIGM7XG5cdH1cblx0ZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMy
IHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVj
NCBzaGFkb3dDb29yZCApIHtcblx0XHRmbG9hdCBzaGFkb3cgPSAxLjA7XG5cdFx0c2hhZG93Q29v
cmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7XG5cdFx0c2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFz
O1xuXHRcdGJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAs
IHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQu
eSA8PSAxLjAgKTtcblx0XHRib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7XG5c
dFx0YnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56
IDw9IDEuMCApO1xuXHRcdGJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7
XG5cdFx0aWYgKCBmcnVzdHVtVGVzdCApIHtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZ
UEVfUENGIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBT
aXplO1xuXHRcdFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0
XHRcdGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9h
dCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkxID0g
KyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0
dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwg
ZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRv
d01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkg
K1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsg
dmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29t
cGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRv
d0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93
Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNo
YWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56
ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5
ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJE
Q29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNo
YWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hh
ZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkg
KiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9T
T0ZUIClcblx0XHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXpl
O1xuXHRcdFx0ZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRc
dGZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBk
eDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkxID0gKyB0
ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4
dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54
eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUy
RFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2
ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFk
b3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMigg
ZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVy
cCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwg
MC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNo
YWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSAr
XG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwg
c2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRc
dFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRv
d0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0
dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29y
ZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1
cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkg
KyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDku
MCApO1xuXHRcdCNlbHNlXG5cdFx0XHRzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dN
YXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2VuZGlmXG5cdFx0fVxu
XHRcdHJldHVybiBzaGFkb3c7XG5cdH1cblx0dmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0
ZXhlbFNpemVZICkge1xuXHRcdHZlYzMgYWJzViA9IGFicyggdiApO1xuXHRcdGZsb2F0IHNjYWxl
VG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApO1xuXHRc
dGFic1YgKj0gc2NhbGVUb0N1YmU7XG5cdFx0diAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4w
ICogdGV4ZWxTaXplWSApO1xuXHRcdHZlYzIgcGxhbmFyID0gdi54eTtcblx0XHRmbG9hdCBhbG1v
c3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZO1xuXHRcdGZsb2F0IGFsbW9zdE9uZSA9IDEuMCAt
IGFsbW9zdEFUZXhlbDtcblx0XHRpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRp
ZiAoIHYueiA+IDAuMCApXG5cdFx0XHRcdHBsYW5hci54ID0gNC4wIC0gdi54O1xuXHRcdH0gZWxz
ZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWCA9IHNpZ24o
IHYueCApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YO1xuXHRc
dH0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWSA9
IHNpZ24oIHYueSApO1xuXHRcdFx0cGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDtc
blx0XHRcdHBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7XG5cdFx0fVxuXHRcdHJldHVybiB2
ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTtcblx0fVxu
XHRmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dN
YXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93
Q29vcmQgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFw
U2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNo
YWRvd0Nvb3JkLnh5ejtcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlv
biApO1xuXHRcdGZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93
QmlhcyApIC8gMTAwMC4wO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8
fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIG9mZnNldCA9
IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1
cm4gKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNE
ICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENv
bXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUu
eSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9V
ViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0
dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4
ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwg
Y3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRD
b21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXpl
LnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRv
VVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4
dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRl
eGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAs
IGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0
KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21w
YXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRc
dCNlbmRpZlxuXHR9XG4jZW5kaWZcbiI7CisgICAgICAgICAgICByZXR1cm4gKCB0aGlzLnJhZGl1
cyA8PSAwICk7CiAKLSAgICB2YXIgc2hhZG93bWFwX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0Vf
U0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgZGly
ZWN0aW9uYWxTaGFkb3dNYXRyaXhbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0
IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0
I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJp
eFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRb
IE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAw
XG5cdFx0dW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRTIF07
XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRTIF07
XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICB9LAogCi0gICAgdmFyIHNoYWRvd21hcF92
ZXJ0ZXggPSAiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxu
XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHR2RGly
ZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAq
IHdvcmxkUG9zaXRpb247XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAw
XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHR2
U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0
aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0Zm9yICgg
aW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHR2UG9pbnRTaGFk
b3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxkUG9zaXRpb247XG5c
dH1cblx0I2VuZGlmXG4jZW5kaWZcbiI7CisgICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9u
ICggcG9pbnQgKSB7CiAKLSAgICB2YXIgc2hhZG93bWFza19wYXJzX2ZyYWdtZW50ID0gImZsb2F0
IGdldFNoYWRvd01hc2soKSB7XG5cdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0I2lmZGVmIFVTRV9T
SEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0IGRp
cmVjdGlvbmFsTGlnaHQ7XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBp
ICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xu
XHRcdHNoYWRvdyAqPSBib29sKCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdyApID8gZ2V0U2hhZG93
KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNp
emUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dS
YWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjZW5k
aWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0
Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RM
aWdodCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggc3BvdExpZ2h0LnNo
YWRvdyApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dN
YXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNw
b3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9J
TlRfTElHSFRTID4gMFxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdGZvciAoIGludCBpID0g
MDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50
TGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICo9IGJvb2woIHBvaW50TGlnaHQuc2hhZG93ICkgPyBn
ZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBT
aXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9p
bnRTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRy
ZXR1cm4gc2hhZG93O1xufVxuIjsKKyAgICAgICAgICAgIHJldHVybiAoIHBvaW50LmRpc3RhbmNl
VG9TcXVhcmVkKCB0aGlzLmNlbnRlciApIDw9ICggdGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyAp
ICk7CiAKLSAgICB2YXIgc2tpbmJhc2VfdmVydGV4ID0gIiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0
bWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7XG5cdG1hdDQgYm9u
ZU1hdFkgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueSApO1xuXHRtYXQ0IGJvbmVNYXRaID0g
Z2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTtcblx0bWF0NCBib25lTWF0VyA9IGdldEJvbmVN
YXRyaXgoIHNraW5JbmRleC53ICk7XG4jZW5kaWYiOworICAgICAgICB9LAogCi0gICAgdmFyIHNr
aW5uaW5nX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dW5pZm9ybSBtYXQ0
IGJpbmRNYXRyaXg7XG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcblx0I2lmZGVm
IEJPTkVfVEVYVFVSRVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xuXHRcdHVu
aWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0
IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRmbG9hdCBqID0gaSAqIDQuMDtcblx0XHRcdGZsb2F0IHgg
PSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgeSA9IGZs
b29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCBkeCA9IDEu
MCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdGZsb2F0IGR5ID0gMS4wIC8gZmxv
YXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0eSA9IGR5ICogKCB5ICsgMC41ICk7XG5cdFx0
XHR2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUg
KSwgeSApICk7XG5cdFx0XHR2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMigg
ZHggKiAoIHggKyAxLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25l
VGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XG5cdFx0XHR2ZWM0IHY0ID0g
dGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XG5c
dFx0XHRtYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApO1xuXHRcdFx0cmV0dXJuIGJv
bmU7XG5cdFx0fVxuXHQjZWxzZVxuXHRcdHVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9C
T05FUyBdO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0
XHRcdG1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07XG5cdFx0XHRyZXR1cm4gYm9u
ZTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iOworICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6
IGZ1bmN0aW9uICggcG9pbnQgKSB7CiAKLSAgICB2YXIgc2tpbm5pbmdfdmVydGV4ID0gIiNpZmRl
ZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRy
YW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XG5cdHNraW5u
ZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICs9
IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArPSBib25l
TWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFcg
KiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJp
eEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmXG4iOworICAgICAgICAgICAgcmV0dXJu
ICggcG9pbnQuZGlzdGFuY2VUbyggdGhpcy5jZW50ZXIgKSAtIHRoaXMucmFkaXVzICk7CiAKLSAg
ICB2YXIgc2tpbm5vcm1hbF92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNr
aW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBi
b25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tp
bk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArPSBza2lu
V2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgPSBiaW5kTWF0cml4SW52ZXJzZSAq
IHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBza2luTWF0
cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcbiNlbmRpZlxuIjsKKyAgICAg
ICAgfSwKIAotICAgIHZhciBzcGVjdWxhcm1hcF9mcmFnbWVudCA9ICJmbG9hdCBzcGVjdWxhclN0
cmVuZ3RoO1xuI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR2ZWM0IHRleGVsU3BlY3VsYXIgPSB0
ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcblx0c3BlY3VsYXJTdHJlbmd0aCA9IHRleGVs
U3BlY3VsYXIucjtcbiNlbHNlXG5cdHNwZWN1bGFyU3RyZW5ndGggPSAxLjA7XG4jZW5kaWYiOwor
ICAgICAgICBpbnRlcnNlY3RzU3BoZXJlOiBmdW5jdGlvbiAoIHNwaGVyZSApIHsKIAotICAgIHZh
ciBzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0
dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XG4jZW5kaWYiOworICAgICAgICAgICAgdmFy
IHJhZGl1c1N1bSA9IHRoaXMucmFkaXVzICsgc3BoZXJlLnJhZGl1czsKIAotICAgIHZhciB0b25l
bWFwcGluZ19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClcbiAgZ2xfRnJh
Z0NvbG9yLnJnYiA9IHRvbmVNYXBwaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiI7
CisgICAgICAgICAgICByZXR1cm4gc3BoZXJlLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggdGhp
cy5jZW50ZXIgKSA8PSAoIHJhZGl1c1N1bSAqIHJhZGl1c1N1bSApOwogCi0gICAgdmFyIHRvbmVt
YXBwaW5nX3BhcnNfZnJhZ21lbnQgPSAiI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4w
LCAxLjAgKVxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudW5pZm9ybSBmbG9h
dCB0b25lTWFwcGluZ1doaXRlUG9pbnQ7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNv
bG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBS
ZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGlu
Z0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNv
bG9yICkgKTtcbn1cbiNkZWZpbmUgVW5jaGFydGVkMkhlbHBlciggeCApIG1heCggKCAoIHggKiAo
IDAuMTUgKiB4ICsgMC4xMCAqIDAuNTAgKSArIDAuMjAgKiAwLjAyICkgLyAoIHggKiAoIDAuMTUg
KiB4ICsgMC41MCApICsgMC4yMCAqIDAuMzAgKSApIC0gMC4wMiAvIDAuMzAsIHZlYzMoIDAuMCAp
IClcbnZlYzMgVW5jaGFydGVkMlRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAq
PSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIFVuY2hhcnRlZDJIZWxw
ZXIoIGNvbG9yICkgLyBVbmNoYXJ0ZWQySGVscGVyKCB2ZWMzKCB0b25lTWFwcGluZ1doaXRlUG9p
bnQgKSApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9y
ICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVj
MyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4y
ICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAu
MDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbiI7CisgICAgICAgIH0sCiAKLSAgICB2YXIgdXZfcGFy
c19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1Q
TUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxB
Uk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lW
RU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVU
QUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcbiNlbmRpZiI7CisgICAgICAgIGludGVy
c2VjdHNCb3g6IGZ1bmN0aW9uICggYm94ICkgewogCi0gICAgdmFyIHV2X3BhcnNfdmVydGV4ID0g
IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZp
bmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX1NQRUNVTEFSTUFQICkgfHwgZGVm
aW5lZCggVVNFX0FMUEhBTUFQICkgfHwgZGVmaW5lZCggVVNFX0VNSVNTSVZFTUFQICkgfHwgZGVm
aW5lZCggVVNFX1JPVUdITkVTU01BUCApIHx8IGRlZmluZWQoIFVTRV9NRVRBTE5FU1NNQVAgKVxu
XHR2YXJ5aW5nIHZlYzIgdlV2O1xuXHR1bmlmb3JtIHZlYzQgb2Zmc2V0UmVwZWF0O1xuI2VuZGlm
XG4iOworICAgICAgICAgICAgcmV0dXJuIGJveC5pbnRlcnNlY3RzU3BoZXJlKCB0aGlzICk7CiAK
LSAgICB2YXIgdXZfdmVydGV4ID0gIiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCgg
VVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNF
X1NQRUNVTEFSTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkgfHwgZGVmaW5lZCggVVNF
X0VNSVNTSVZFTUFQICkgfHwgZGVmaW5lZCggVVNFX1JPVUdITkVTU01BUCApIHx8IGRlZmluZWQo
IFVTRV9NRVRBTE5FU1NNQVAgKVxuXHR2VXYgPSB1diAqIG9mZnNldFJlcGVhdC56dyArIG9mZnNl
dFJlcGVhdC54eTtcbiNlbmRpZiI7CisgICAgICAgIH0sCiAKLSAgICB2YXIgdXYyX3BhcnNfZnJh
Z21lbnQgPSAiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01B
UCApXG5cdHZhcnlpbmcgdmVjMiB2VXYyO1xuI2VuZGlmIjsKKyAgICAgICAgaW50ZXJzZWN0c1Bs
YW5lOiBmdW5jdGlvbiAoIHBsYW5lICkgewogCi0gICAgdmFyIHV2Ml9wYXJzX3ZlcnRleCA9ICIj
aWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0YXR0
cmlidXRlIHZlYzIgdXYyO1xuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiI7CisgICAgICAg
ICAgICByZXR1cm4gTWF0aC5hYnMoIHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggdGhpcy5jZW50ZXIg
KSApIDw9IHRoaXMucmFkaXVzOwogCi0gICAgdmFyIHV2Ml92ZXJ0ZXggPSAiI2lmIGRlZmluZWQo
IFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdHZVdjIgPSB1djI7XG4j
ZW5kaWYiOworICAgICAgICB9LAogCi0gICAgdmFyIHdvcmxkcG9zX3ZlcnRleCA9ICIjaWYgZGVm
aW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZU0lD
QUwgKSB8fCBkZWZpbmVkKCBMQU1CRVJUICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxu
XHR2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAx
LjAgKTtcbiNlbmRpZlxuIjsKKyAgICAgICAgY2xhbXBQb2ludDogZnVuY3Rpb24gKCBwb2ludCwg
dGFyZ2V0ICkgewogCi0gICAgdmFyIGN1YmVfZnJhZyA9ICJ1bmlmb3JtIHNhbXBsZXJDdWJlIHRD
dWJlO1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlp
bmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7
XG5cdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCB0Q3ViZSwgdmVjMyggdEZsaXAgKiB2V29y
bGRQb3NpdGlvbi54LCB2V29ybGRQb3NpdGlvbi55eiApICk7XG5cdGdsX0ZyYWdDb2xvci5hICo9
IG9wYWNpdHk7XG59XG4iOworICAgICAgICAgICAgdmFyIGRlbHRhTGVuZ3RoU3EgPSB0aGlzLmNl
bnRlci5kaXN0YW5jZVRvU3F1YXJlZCggcG9pbnQgKTsKIAotICAgIHZhciBjdWJlX3ZlcnQgPSAi
dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFp
bigpIHtcblx0dldvcmxkUG9zaXRpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBt
b2RlbE1hdHJpeCApO1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJv
amVjdF92ZXJ0ZXg+XG59XG4iOworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5l
ZCApIHsKIAotICAgIHZhciBkZXB0aF9mcmFnID0gIiNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBc
blx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2lu
Y2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxt
YXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxh
bmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19w
bGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5cdCNp
ZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7XG5c
dCNlbmRpZlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBf
ZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxs
b2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGds
X0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIGdsX0ZyYWdDb29yZC56ICksIG9wYWNpdHkgKTtcblx0
I2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxXG5cdFx0Z2xfRnJhZ0NvbG9yID0gcGFja0RlcHRo
VG9SR0JBKCBnbF9GcmFnQ29vcmQueiApO1xuXHQjZW5kaWZcbn1cbiI7CisgICAgICAgICAgICAg
ICAgY29uc29sZS53YXJuKCAnVEhSRUUuU3BoZXJlOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBu
b3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgIHZhciBkZXB0aF92ZXJ0ID0gIiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZf
cGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2lu
Y2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNs
aXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2
X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQ
TEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNs
dWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4
PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBo
dGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUg
PGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0
I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5l
c192ZXJ0ZXg+XG59XG4iOworICAgICAgICAgICAgfQogCi0gICAgdmFyIGRpc3RhbmNlUkdCQV9m
cmFnID0gInVuaWZvcm0gdmVjMyBsaWdodFBvcztcbnZhcnlpbmcgdmVjNCB2V29ybGRQb3NpdGlv
bjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxjbGlw
cGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIDxj
bGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdC
QSggbGVuZ3RoKCB2V29ybGRQb3NpdGlvbi54eXogLSBsaWdodFBvcy54eXogKSAvIDEwMDAuMCAp
O1xufVxuIjsKKyAgICAgICAgICAgIHRhcmdldC5jb3B5KCBwb2ludCApOwogCi0gICAgdmFyIGRp
c3RhbmNlUkdCQV92ZXJ0ID0gInZhcnlpbmcgdmVjNCB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRl
IDxjb21tb24+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVy
dGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5j
bHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQj
aW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5c
dCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNf
dmVydGV4PlxuXHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb247XG59XG4iOworICAgICAg
ICAgICAgaWYgKCBkZWx0YUxlbmd0aFNxID4gKCB0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzICkg
KSB7CiAKLSAgICB2YXIgZXF1aXJlY3RfZnJhZyA9ICJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJl
Y3Q7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xu
I2luY2x1ZGUgPGNvbW1vbj5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gPSBub3Jt
YWxpemUoIHZXb3JsZFBvc2l0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVY7XG5cdHNhbXBsZVVWLnkg
PSBzYXR1cmF0ZSggdEZsaXAgKiBkaXJlY3Rpb24ueSAqIC0wLjUgKyAwLjUgKTtcblx0c2FtcGxl
VVYueCA9IGF0YW4oIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCApICogUkVDSVBST0NBTF9QSTIg
KyAwLjU7XG5cdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViAp
O1xufVxuIjsKKyAgICAgICAgICAgICAgICB0YXJnZXQuc3ViKCB0aGlzLmNlbnRlciApLm5vcm1h
bGl6ZSgpOworICAgICAgICAgICAgICAgIHRhcmdldC5tdWx0aXBseVNjYWxhciggdGhpcy5yYWRp
dXMgKS5hZGQoIHRoaXMuY2VudGVyICk7CiAKLSAgICB2YXIgZXF1aXJlY3RfdmVydCA9ICJ2YXJ5
aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkg
e1xuXHR2V29ybGRQb3NpdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVs
TWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0
X3ZlcnRleD5cbn1cbiI7CisgICAgICAgICAgICB9CiAKLSAgICB2YXIgbGluZWRhc2hlZF9mcmFn
ID0gInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9y
bSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9h
dCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJz
X2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2Rl
cHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJh
Z21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21l
bnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkg
e1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7
XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5j
bHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5c
blx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciA9IHZl
YzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDxwcmVtdWx0
aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+
XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21l
bnQ+XG59XG4iOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKIAotICAgIHZhciBsaW5lZGFz
aGVkX3ZlcnQgPSAidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlz
dGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxu
I2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19w
bGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0
ZXg+XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0dmVjNCBtdlBv
c2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXHRnbF9Q
b3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSA8bG9n
ZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iOworICAgICAgICB9LAogCi0gICAgdmFyIG1lc2hi
YXNpY19mcmFnID0gInVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5
O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxu
I2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1
ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVu
dD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3Bh
cnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5n
X3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBp
bmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2Us
IG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVk
ZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRl
IDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0
I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0
ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMo
IDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVj
dGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54
eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRp
cmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBf
ZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29s
b3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERp
ZmZ1c2U7XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPGVudm1hcF9mcmFn
bWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9y
LmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNs
dWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVu
dD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiI7CisgICAgICAgIGdldEJvdW5kaW5n
Qm94OiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgIHZhciBtZXNoYmFzaWNfdmVydCA9ICIj
aW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2
Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUg
PG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4
PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5n
X3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRl
eD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5c
dCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpbmNs
dWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3Jt
YWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1
ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0
I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4
PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxh
bmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2df
dmVydGV4PlxufVxuIjsKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7
CiAKLSAgICB2YXIgbWVzaGxhbWJlcnRfZnJhZyA9ICJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVu
aWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVj
MyB2TGlnaHRGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdo
dEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNp
bmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2Zy
YWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFt
YXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1
ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19m
cmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rm
cz5cbiNpbmNsdWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNr
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3Bs
YW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdf
cGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9w
YWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdo
dCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtc
blx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxv
Z2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVk
ZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdt
ZW50PlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0
LmluZGlyZWN0RGlmZnVzZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdo
dENvbG9yICk7XG5cdCNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGln
aHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3Iu
cmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RE
aWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xu
XHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtc
blx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9EaWZmdXNl
X0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTtcblx0I2luY2x1
ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdo
dC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxF
bWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8bm9ybWFsX2ZsaXA+XG5cdCNpbmNsdWRlIDxl
bnZtYXBfZnJhZ21lbnQ+XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRp
ZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0
I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRo
ZXJpbmdfZnJhZ21lbnQ+XG59XG4iOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLlNwaGVyZTogLmdldEJvdW5kaW5nQm94KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsK
KyAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgQm94MygpOwogCi0gICAgdmFyIG1lc2hsYW1i
ZXJ0X3ZlcnQgPSAiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG4j
aWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuI2VuZGlmXG4j
aW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2
Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnM+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0
ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3Bh
cnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNo
YWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5c
dCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVk
ZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5j
bHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4Plxu
XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFs
X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFy
Z2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHBy
b2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVk
ZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5c
blx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92
ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3Zl
cnRleD5cbn1cbiI7CisgICAgICAgICAgICB9CiAKLSAgICB2YXIgbWVzaHBob25nX2ZyYWcgPSAi
I2RlZmluZSBQSE9OR1xudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3Np
dmU7XG51bmlmb3JtIHZlYzMgc3BlY3VsYXI7XG51bmlmb3JtIGZsb2F0IHNoaW5pbmVzcztcbnVu
aWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2lu
Zz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYy
X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzPlxuI2luY2x1ZGUgPGxp
Z2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdt
ZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxt
YXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdf
cGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGlu
Z19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwg
b3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExp
Z2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSAp
O1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8
bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNs
dWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQj
aW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFn
bWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGln
aHRzX3Bob25nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3RlbXBsYXRlPlxuXHQjaW5j
bHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExp
Z2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZs
ZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3Vs
YXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+
XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7
XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5n
c19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11
bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+
XG59XG4iOworICAgICAgICAgICAgdGFyZ2V0LnNldCggdGhpcy5jZW50ZXIsIHRoaXMuY2VudGVy
ICk7CisgICAgICAgICAgICB0YXJnZXQuZXhwYW5kQnlTY2FsYXIoIHRoaXMucmFkaXVzICk7CiAK
LSAgICB2YXIgbWVzaHBob25nX3ZlcnQgPSAiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZW
aWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFs
O1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4Plxu
I2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9y
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3Jw
aHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNp
bmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBt
YWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5c
blx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRl
eD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNl
X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVm
YXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3Jt
YWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3Zl
cnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5u
aW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12
UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8
ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxmb2dfdmVydGV4PlxufVxuIjsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAKLSAgICB2
YXIgbWVzaHBoeXNpY2FsX2ZyYWcgPSAiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2ZWMzIGRp
ZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztc
bnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRl
ZiBTVEFOREFSRFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBmbG9hdCBj
bGVhckNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xu
I2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2lu
Y2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19w
YXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19m
cmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUg
PGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNp
bmNsdWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFn
bWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1w
bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4j
aW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWV0YWxuZXNz
bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtc
blx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29s
b3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3Rl
ZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMygg
MC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1p
c3NpdmU7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1h
cF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxw
aGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdCNpbmNs
dWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDxub3JtYWxfZmxpcD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFn
bWVudD5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGln
aHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3RlbXBsYXRlPlxuXHQj
aW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3Rl
ZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyBy
ZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3Bl
Y3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIG91
dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19m
cmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZv
Z19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5c
dCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59XG4iOworICAgICAgICB9LAogCi0gICAg
dmFyIG1lc2hwaHlzaWNhbF92ZXJ0ID0gIiNkZWZpbmUgUEhZU0lDQUxcbnZhcnlpbmcgdmVjMyB2
Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1h
bDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3Bh
cnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19w
YXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRl
IDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+
XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdf
cGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4
PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0
I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3Zl
cnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3Jt
YWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZM
QVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4j
ZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0
X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3Bs
YWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1
ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0
ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29y
bGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUg
PGZvZ192ZXJ0ZXg+XG59XG4iOworICAgICAgICBhcHBseU1hdHJpeDQ6IGZ1bmN0aW9uICggbWF0
cml4ICkgewogCi0gICAgdmFyIG5vcm1hbF9mcmFnID0gIiNkZWZpbmUgTk9STUFMXG51bmlmb3Jt
IGZsb2F0IG9wYWNpdHk7XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBV
U0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMg
dlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZl
YzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8
bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFn
bWVudD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50Plxu
XHQjaW5jbHVkZSA8bm9ybWFsX2ZsaXA+XG5cdCNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnQ+XG5c
dGdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkg
KTtcbn1cbiI7CisgICAgICAgICAgICB0aGlzLmNlbnRlci5hcHBseU1hdHJpeDQoIG1hdHJpeCAp
OworICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLnJhZGl1cyAqIG1hdHJpeC5nZXRNYXhT
Y2FsZU9uQXhpcygpOwogCi0gICAgdmFyIG5vcm1hbF92ZXJ0ID0gIiNkZWZpbmUgTk9STUFMXG4j
aWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRl
ZmluZWQoIFVTRV9OT1JNQUxNQVAgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNl
bmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRp
ZlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9w
YXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRl
IDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRl
eD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPGJl
Z2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2lu
Y2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4Plxu
XHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5c
dHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2lu
Y2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0
I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92
ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRo
YnVmX3ZlcnRleD5cbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9C
VU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApXG5cdHZWaWV3UG9zaXRpb24gPSAt
IG12UG9zaXRpb24ueHl6O1xuI2VuZGlmXG59XG4iOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICB2YXIgcG9pbnRzX2ZyYWcgPSAidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3Jt
IGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4j
aW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFk
b3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkg
e1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5n
TGlnaHQgPSB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNl
LCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1
ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50Plxu
XHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRvdXRnb2luZ0xpZ2h0ID0gZGlmZnVz
ZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVz
ZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5c
dCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19m
cmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiI7CisgICAgICAgIH0sCiAK
LSAgICB2YXIgcG9pbnRzX3ZlcnQgPSAidW5pZm9ybSBmbG9hdCBzaXplO1xudW5pZm9ybSBmbG9h
dCBzY2FsZTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+
XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3Zl
cnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlw
cGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xv
cl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0
X3ZlcnRleD5cblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRnbF9Qb2ludFNpemUg
PSBzaXplICogKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XG5cdCNlbHNlXG5cdFx0Z2xfUG9p
bnRTaXplID0gc2l6ZTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRw
b3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZv
Z192ZXJ0ZXg+XG59XG4iOworICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICggb2Zmc2V0ICkg
ewogCi0gICAgdmFyIHNoYWRvd19mcmFnID0gInVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNs
dWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNs
dWRlIDxsaWdodHNfcGFycz5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0Zy
YWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRv
d01hc2soKSApICk7XG59XG4iOworICAgICAgICAgICAgdGhpcy5jZW50ZXIuYWRkKCBvZmZzZXQg
KTsKIAotICAgIHZhciBzaGFkb3dfdmVydCA9ICIjaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVy
dGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVk
ZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxzaGFkb3dtYXBfdmVydGV4PlxufVxuIjsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgdmFyIFNoYWRlckNodW5rID0gewotICAgICAgICBhbHBoYW1hcF9mcmFnbWVudDogYWxw
aGFtYXBfZnJhZ21lbnQsCi0gICAgICAgIGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6IGFscGhhbWFw
X3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIGFscGhhdGVzdF9mcmFnbWVudDogYWxwaGF0ZXN0X2Zy
YWdtZW50LAotICAgICAgICBhb21hcF9mcmFnbWVudDogYW9tYXBfZnJhZ21lbnQsCi0gICAgICAg
IGFvbWFwX3BhcnNfZnJhZ21lbnQ6IGFvbWFwX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIGJlZ2lu
X3ZlcnRleDogYmVnaW5fdmVydGV4LAotICAgICAgICBiZWdpbm5vcm1hbF92ZXJ0ZXg6IGJlZ2lu
bm9ybWFsX3ZlcnRleCwKLSAgICAgICAgYnNkZnM6IGJzZGZzLAotICAgICAgICBidW1wbWFwX3Bh
cnNfZnJhZ21lbnQ6IGJ1bXBtYXBfcGFyc19mcmFnbWVudCwKLSAgICAgICAgY2xpcHBpbmdfcGxh
bmVzX2ZyYWdtZW50OiBjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQsCi0gICAgICAgIGNsaXBwaW5n
X3BsYW5lc19wYXJzX2ZyYWdtZW50OiBjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudCwKLSAg
ICAgICAgY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiBjbGlwcGluZ19wbGFuZXNfcGFyc192
ZXJ0ZXgsCi0gICAgICAgIGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg6IGNsaXBwaW5nX3BsYW5lc192
ZXJ0ZXgsCi0gICAgICAgIGNvbG9yX2ZyYWdtZW50OiBjb2xvcl9mcmFnbWVudCwKLSAgICAgICAg
Y29sb3JfcGFyc19mcmFnbWVudDogY29sb3JfcGFyc19mcmFnbWVudCwKLSAgICAgICAgY29sb3Jf
cGFyc192ZXJ0ZXg6IGNvbG9yX3BhcnNfdmVydGV4LAotICAgICAgICBjb2xvcl92ZXJ0ZXg6IGNv
bG9yX3ZlcnRleCwKLSAgICAgICAgY29tbW9uOiBjb21tb24sCi0gICAgICAgIGN1YmVfdXZfcmVm
bGVjdGlvbl9mcmFnbWVudDogY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50LAotICAgICAgICBk
ZWZhdWx0bm9ybWFsX3ZlcnRleDogZGVmYXVsdG5vcm1hbF92ZXJ0ZXgsCi0gICAgICAgIGRpc3Bs
YWNlbWVudG1hcF9wYXJzX3ZlcnRleDogZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4LAotICAg
ICAgICBkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiBkaXNwbGFjZW1lbnRtYXBfdmVydGV4LAotICAg
ICAgICBlbWlzc2l2ZW1hcF9mcmFnbWVudDogZW1pc3NpdmVtYXBfZnJhZ21lbnQsCi0gICAgICAg
IGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ6IGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQsCi0g
ICAgICAgIGVuY29kaW5nc19mcmFnbWVudDogZW5jb2RpbmdzX2ZyYWdtZW50LAotICAgICAgICBl
bmNvZGluZ3NfcGFyc19mcmFnbWVudDogZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsCi0gICAgICAg
IGVudm1hcF9mcmFnbWVudDogZW52bWFwX2ZyYWdtZW50LAotICAgICAgICBlbnZtYXBfcGFyc19m
cmFnbWVudDogZW52bWFwX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIGVudm1hcF9wYXJzX3ZlcnRl
eDogZW52bWFwX3BhcnNfdmVydGV4LAotICAgICAgICBlbnZtYXBfdmVydGV4OiBlbnZtYXBfdmVy
dGV4LAotICAgICAgICBmb2dfdmVydGV4OiBmb2dfdmVydGV4LAotICAgICAgICBmb2dfcGFyc192
ZXJ0ZXg6IGZvZ19wYXJzX3ZlcnRleCwKLSAgICAgICAgZm9nX2ZyYWdtZW50OiBmb2dfZnJhZ21l
bnQsCi0gICAgICAgIGZvZ19wYXJzX2ZyYWdtZW50OiBmb2dfcGFyc19mcmFnbWVudCwKLSAgICAg
ICAgZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDogZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudCwK
LSAgICAgICAgbGlnaHRtYXBfZnJhZ21lbnQ6IGxpZ2h0bWFwX2ZyYWdtZW50LAotICAgICAgICBs
aWdodG1hcF9wYXJzX2ZyYWdtZW50OiBsaWdodG1hcF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBs
aWdodHNfbGFtYmVydF92ZXJ0ZXg6IGxpZ2h0c19sYW1iZXJ0X3ZlcnRleCwKLSAgICAgICAgbGln
aHRzX3BhcnM6IGxpZ2h0c19wYXJzLAotICAgICAgICBsaWdodHNfcGhvbmdfZnJhZ21lbnQ6IGxp
Z2h0c19waG9uZ19mcmFnbWVudCwKLSAgICAgICAgbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ6
IGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50LAotICAgICAgICBsaWdodHNfcGh5c2ljYWxfZnJh
Z21lbnQ6IGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudCwKLSAgICAgICAgbGlnaHRzX3BoeXNpY2Fs
X3BhcnNfZnJhZ21lbnQ6IGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBs
aWdodHNfdGVtcGxhdGU6IGxpZ2h0c190ZW1wbGF0ZSwKLSAgICAgICAgbG9nZGVwdGhidWZfZnJh
Z21lbnQ6IGxvZ2RlcHRoYnVmX2ZyYWdtZW50LAotICAgICAgICBsb2dkZXB0aGJ1Zl9wYXJzX2Zy
YWdtZW50OiBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50LAotICAgICAgICBsb2dkZXB0aGJ1Zl9w
YXJzX3ZlcnRleDogbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXgsCi0gICAgICAgIGxvZ2RlcHRoYnVm
X3ZlcnRleDogbG9nZGVwdGhidWZfdmVydGV4LAotICAgICAgICBtYXBfZnJhZ21lbnQ6IG1hcF9m
cmFnbWVudCwKLSAgICAgICAgbWFwX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJzX2ZyYWdtZW50LAot
ICAgICAgICBtYXBfcGFydGljbGVfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9mcmFnbWVudCwKLSAg
ICAgICAgbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdt
ZW50LAotICAgICAgICBtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9mcmFnbWVu
dCwKLSAgICAgICAgbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9wYXJz
X2ZyYWdtZW50LAotICAgICAgICBtb3JwaG5vcm1hbF92ZXJ0ZXg6IG1vcnBobm9ybWFsX3ZlcnRl
eCwKLSAgICAgICAgbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IG1vcnBodGFyZ2V0X3BhcnNfdmVy
dGV4LAotICAgICAgICBtb3JwaHRhcmdldF92ZXJ0ZXg6IG1vcnBodGFyZ2V0X3ZlcnRleCwKLSAg
ICAgICAgbm9ybWFsX2ZsaXA6IG5vcm1hbF9mbGlwLAotICAgICAgICBub3JtYWxfZnJhZ21lbnQ6
IG5vcm1hbF9mcmFnbWVudCwKLSAgICAgICAgbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IG5vcm1h
bG1hcF9wYXJzX2ZyYWdtZW50LAotICAgICAgICBwYWNraW5nOiBwYWNraW5nLAotICAgICAgICBw
cmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50
LAotICAgICAgICBwcm9qZWN0X3ZlcnRleDogcHJvamVjdF92ZXJ0ZXgsCi0gICAgICAgIGRpdGhl
cmluZ19mcmFnbWVudDogZGl0aGVyaW5nX2ZyYWdtZW50LAotICAgICAgICBkaXRoZXJpbmdfcGFy
c19mcmFnbWVudDogZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIHJvdWdobmVzc21h
cF9mcmFnbWVudDogcm91Z2huZXNzbWFwX2ZyYWdtZW50LAotICAgICAgICByb3VnaG5lc3NtYXBf
cGFyc19mcmFnbWVudDogcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQsCi0gICAgICAgIHNoYWRv
d21hcF9wYXJzX2ZyYWdtZW50OiBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCwKLSAgICAgICAgc2hh
ZG93bWFwX3BhcnNfdmVydGV4OiBzaGFkb3dtYXBfcGFyc192ZXJ0ZXgsCi0gICAgICAgIHNoYWRv
d21hcF92ZXJ0ZXg6IHNoYWRvd21hcF92ZXJ0ZXgsCi0gICAgICAgIHNoYWRvd21hc2tfcGFyc19m
cmFnbWVudDogc2hhZG93bWFza19wYXJzX2ZyYWdtZW50LAotICAgICAgICBza2luYmFzZV92ZXJ0
ZXg6IHNraW5iYXNlX3ZlcnRleCwKLSAgICAgICAgc2tpbm5pbmdfcGFyc192ZXJ0ZXg6IHNraW5u
aW5nX3BhcnNfdmVydGV4LAotICAgICAgICBza2lubmluZ192ZXJ0ZXg6IHNraW5uaW5nX3ZlcnRl
eCwKLSAgICAgICAgc2tpbm5vcm1hbF92ZXJ0ZXg6IHNraW5ub3JtYWxfdmVydGV4LAotICAgICAg
ICBzcGVjdWxhcm1hcF9mcmFnbWVudDogc3BlY3VsYXJtYXBfZnJhZ21lbnQsCi0gICAgICAgIHNw
ZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQsCi0gICAg
ICAgIHRvbmVtYXBwaW5nX2ZyYWdtZW50OiB0b25lbWFwcGluZ19mcmFnbWVudCwKLSAgICAgICAg
dG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDogdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudCwKLSAg
ICAgICAgdXZfcGFyc19mcmFnbWVudDogdXZfcGFyc19mcmFnbWVudCwKLSAgICAgICAgdXZfcGFy
c192ZXJ0ZXg6IHV2X3BhcnNfdmVydGV4LAotICAgICAgICB1dl92ZXJ0ZXg6IHV2X3ZlcnRleCwK
LSAgICAgICAgdXYyX3BhcnNfZnJhZ21lbnQ6IHV2Ml9wYXJzX2ZyYWdtZW50LAotICAgICAgICB1
djJfcGFyc192ZXJ0ZXg6IHV2Ml9wYXJzX3ZlcnRleCwKLSAgICAgICAgdXYyX3ZlcnRleDogdXYy
X3ZlcnRleCwKLSAgICAgICAgd29ybGRwb3NfdmVydGV4OiB3b3JsZHBvc192ZXJ0ZXgsCisgICAg
ICAgIH0sCiAKLSAgICAgICAgY3ViZV9mcmFnOiBjdWJlX2ZyYWcsCi0gICAgICAgIGN1YmVfdmVy
dDogY3ViZV92ZXJ0LAotICAgICAgICBkZXB0aF9mcmFnOiBkZXB0aF9mcmFnLAotICAgICAgICBk
ZXB0aF92ZXJ0OiBkZXB0aF92ZXJ0LAotICAgICAgICBkaXN0YW5jZVJHQkFfZnJhZzogZGlzdGFu
Y2VSR0JBX2ZyYWcsCi0gICAgICAgIGRpc3RhbmNlUkdCQV92ZXJ0OiBkaXN0YW5jZVJHQkFfdmVy
dCwKLSAgICAgICAgZXF1aXJlY3RfZnJhZzogZXF1aXJlY3RfZnJhZywKLSAgICAgICAgZXF1aXJl
Y3RfdmVydDogZXF1aXJlY3RfdmVydCwKLSAgICAgICAgbGluZWRhc2hlZF9mcmFnOiBsaW5lZGFz
aGVkX2ZyYWcsCi0gICAgICAgIGxpbmVkYXNoZWRfdmVydDogbGluZWRhc2hlZF92ZXJ0LAotICAg
ICAgICBtZXNoYmFzaWNfZnJhZzogbWVzaGJhc2ljX2ZyYWcsCi0gICAgICAgIG1lc2hiYXNpY192
ZXJ0OiBtZXNoYmFzaWNfdmVydCwKLSAgICAgICAgbWVzaGxhbWJlcnRfZnJhZzogbWVzaGxhbWJl
cnRfZnJhZywKLSAgICAgICAgbWVzaGxhbWJlcnRfdmVydDogbWVzaGxhbWJlcnRfdmVydCwKLSAg
ICAgICAgbWVzaHBob25nX2ZyYWc6IG1lc2hwaG9uZ19mcmFnLAotICAgICAgICBtZXNocGhvbmdf
dmVydDogbWVzaHBob25nX3ZlcnQsCi0gICAgICAgIG1lc2hwaHlzaWNhbF9mcmFnOiBtZXNocGh5
c2ljYWxfZnJhZywKLSAgICAgICAgbWVzaHBoeXNpY2FsX3ZlcnQ6IG1lc2hwaHlzaWNhbF92ZXJ0
LAotICAgICAgICBub3JtYWxfZnJhZzogbm9ybWFsX2ZyYWcsCi0gICAgICAgIG5vcm1hbF92ZXJ0
OiBub3JtYWxfdmVydCwKLSAgICAgICAgcG9pbnRzX2ZyYWc6IHBvaW50c19mcmFnLAotICAgICAg
ICBwb2ludHNfdmVydDogcG9pbnRzX3ZlcnQsCi0gICAgICAgIHNoYWRvd19mcmFnOiBzaGFkb3df
ZnJhZywKLSAgICAgICAgc2hhZG93X3ZlcnQ6IHNoYWRvd192ZXJ0Ci0gICAgfTsKKyAgICAgICAg
ZXF1YWxzOiBmdW5jdGlvbiAoIHNwaGVyZSApIHsKKworICAgICAgICAgICAgcmV0dXJuIHNwaGVy
ZS5jZW50ZXIuZXF1YWxzKCB0aGlzLmNlbnRlciApICYmICggc3BoZXJlLnJhZGl1cyA9PT0gdGhp
cy5yYWRpdXMgKTsKKworICAgICAgICB9CisKKyAgICB9ICk7CiAKICAgICAvKioKLSAgICAgKiBA
YXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRo
b3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICogQGF1dGhvciBtaWthZWwgZW10
aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDov
L2NsYXJhLmlvCiAgICAgICovCiAKLSAgICB2YXIgU2hhZGVyTGliID0geworICAgIGZ1bmN0aW9u
IFBsYW5lKCBub3JtYWwsIGNvbnN0YW50ICkgewogCi0gICAgICAgIGJhc2ljOiB7CisgICAgICAg
IC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQKIAotICAgICAgICAgICAgdW5p
Zm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xp
Yi5jb21tb24sCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuYW9tYXAsCi0gICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIubGlnaHRtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIu
Zm9nCi0gICAgICAgICAgICBdICksCisgICAgICAgIHRoaXMubm9ybWFsID0gKCBub3JtYWwgIT09
IHVuZGVmaW5lZCApID8gbm9ybWFsIDogbmV3IFZlY3RvcjMoIDEsIDAsIDAgKTsKKyAgICAgICAg
dGhpcy5jb25zdGFudCA9ICggY29uc3RhbnQgIT09IHVuZGVmaW5lZCApID8gY29uc3RhbnQgOiAw
OwogCi0gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hiYXNpY192ZXJ0
LAotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hiYXNpY19mcmFn
CisgICAgfQogCi0gICAgICAgIH0sCisgICAgT2JqZWN0LmFzc2lnbiggUGxhbmUucHJvdG90eXBl
LCB7CiAKLSAgICAgICAgbGFtYmVydDogeworICAgICAgICBzZXQ6IGZ1bmN0aW9uICggbm9ybWFs
LCBjb25zdGFudCApIHsKIAotICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVy
Z2UoIFsKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5jb21tb24sCi0gICAgICAgICAgICAg
ICAgVW5pZm9ybXNMaWIuYW9tYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubGlnaHRt
YXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsCi0gICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIuZm9nLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0
cywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXNzaXZlOiB7IHZh
bHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIF0gKSwKKyAgICAgICAgICAgIHRoaXMubm9ybWFsLmNvcHkoIG5vcm1hbCApOworICAgICAg
ICAgICAgdGhpcy5jb25zdGFudCA9IGNvbnN0YW50OwogCi0gICAgICAgICAgICB2ZXJ0ZXhTaGFk
ZXI6IFNoYWRlckNodW5rLm1lc2hsYW1iZXJ0X3ZlcnQsCi0gICAgICAgICAgICBmcmFnbWVudFNo
YWRlcjogU2hhZGVyQ2h1bmsubWVzaGxhbWJlcnRfZnJhZworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBwaG9uZzogeworICAgICAgICBzZXRDb21wb25l
bnRzOiBmdW5jdGlvbiAoIHgsIHksIHosIHcgKSB7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zOiBV
bmlmb3Jtc1V0aWxzLm1lcmdlKCBbCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuY29tbW9u
LAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmFvbWFwLAotICAgICAgICAgICAgICAgIFVu
aWZvcm1zTGliLmxpZ2h0bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmVtaXNzaXZl
bWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmJ1bXBtYXAsCi0gICAgICAgICAgICAg
ICAgVW5pZm9ybXNMaWIubm9ybWFsbWFwLAotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmRp
c3BsYWNlbWVudG1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5ncmFkaWVudG1hcCwK
LSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2csCi0gICAgICAgICAgICAgICAgVW5pZm9y
bXNMaWIubGlnaHRzLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1p
c3NpdmU6IHsgdmFsdWU6IG5ldyBDb2xvciggMHgwMDAwMDAgKSB9LAotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhcjogeyB2YWx1ZTogbmV3IENvbG9yKCAweDExMTExMSApIH0sCi0gICAgICAg
ICAgICAgICAgICAgIHNoaW5pbmVzczogeyB2YWx1ZTogMzAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIF0gKSwKKyAgICAgICAgICAgIHRoaXMubm9ybWFsLnNldCggeCwgeSwgeiAp
OworICAgICAgICAgICAgdGhpcy5jb25zdGFudCA9IHc7CiAKLSAgICAgICAgICAgIHZlcnRleFNo
YWRlcjogU2hhZGVyQ2h1bmsubWVzaHBob25nX3ZlcnQsCi0gICAgICAgICAgICBmcmFnbWVudFNo
YWRlcjogU2hhZGVyQ2h1bmsubWVzaHBob25nX2ZyYWcKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc3RhbmRhcmQ6IHsKKyAgICAgICAgc2V0RnJvbU5v
cm1hbEFuZENvcGxhbmFyUG9pbnQ6IGZ1bmN0aW9uICggbm9ybWFsLCBwb2ludCApIHsKIAotICAg
ICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAgICAgICAg
ICBVbmlmb3Jtc0xpYi5jb21tb24sCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuYW9tYXAs
Ci0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubGlnaHRtYXAsCi0gICAgICAgICAgICAgICAg
VW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuYnVt
cG1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsCi0gICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLAotICAgICAgICAgICAgICAgIFVuaWZv
cm1zTGliLnJvdWdobmVzc21hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5tZXRhbG5l
c3NtYXAsCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9nLAotICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLmxpZ2h0cywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVtaXNzaXZlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfSwKLSAgICAgICAg
ICAgICAgICAgICAgcm91Z2huZXNzOiB7IHZhbHVlOiAwLjUgfSwKLSAgICAgICAgICAgICAgICAg
ICAgbWV0YWxuZXNzOiB7IHZhbHVlOiAwLjUgfSwKLSAgICAgICAgICAgICAgICAgICAgZW52TWFw
SW50ZW5zaXR5OiB7IHZhbHVlOiAxIH0gLy8gdGVtcG9yYXJ5Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgXSApLAorICAgICAgICAgICAgdGhpcy5ub3JtYWwuY29weSggbm9ybWFsICk7
CisgICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0gLSBwb2ludC5kb3QoIHRoaXMubm9ybWFsICk7
CiAKLSAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2FsX3Zl
cnQsCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNpY2Fs
X2ZyYWcKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAg
cG9pbnRzOiB7CisgICAgICAgIHNldEZyb21Db3BsYW5hclBvaW50czogZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWwotICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLnBvaW50cywKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5m
b2cKLSAgICAgICAgICAgIF0gKSwKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICB2ZXJ0
ZXhTaGFkZXI6IFNoYWRlckNodW5rLnBvaW50c192ZXJ0LAotICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXI6IFNoYWRlckNodW5rLnBvaW50c19mcmFnCisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24gc2V0RnJvbUNvcGxhbmFyUG9pbnRzKCBhLCBiLCBjICkgewogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgdmFyIG5vcm1hbCA9IHYxLnN1YlZlY3RvcnMoIGMsIGIgKS5jcm9zcyggdjIu
c3ViVmVjdG9ycyggYSwgYiApICkubm9ybWFsaXplKCk7CiAKLSAgICAgICAgZGFzaGVkOiB7Cisg
ICAgICAgICAgICAgICAgLy8gUTogc2hvdWxkIGFuIGVycm9yIGJlIHRocm93biBpZiBub3JtYWwg
aXMgemVybyAoZS5nLiBkZWdlbmVyYXRlIHBsYW5lKT8KIAotICAgICAgICAgICAgdW5pZm9ybXM6
IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5jb21t
b24sCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9nLAotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHsgdmFsdWU6IDEgfSwKLSAgICAgICAgICAgICAg
ICAgICAgZGFzaFNpemU6IHsgdmFsdWU6IDEgfSwKLSAgICAgICAgICAgICAgICAgICAgdG90YWxT
aXplOiB7IHZhbHVlOiAyIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdICksCisg
ICAgICAgICAgICAgICAgdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCggbm9ybWFs
LCBhICk7CiAKLSAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubGluZWRhc2hl
ZF92ZXJ0LAotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmxpbmVkYXNo
ZWRfZnJhZworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICB9OwogCi0gICAgICAgIGRlcHRoOiB7CisgICAgICAgIH0oKSwKIAotICAgICAgICAg
ICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAgICAgICAgICBVbmlm
b3Jtc0xpYi5jb21tb24sCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50
bWFwCi0gICAgICAgICAgICBdICksCisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAg
ICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZGVwdGhfdmVydCwKLSAgICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5kZXB0aF9mcmFnCisgICAgICAgICAgICBy
ZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKICAgICAgICAgfSwK
IAotICAgICAgICBub3JtYWw6IHsKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBwbGFuZSApIHsK
IAotICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKLSAgICAgICAg
ICAgICAgICBVbmlmb3Jtc0xpYi5jb21tb24sCi0gICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIu
YnVtcG1hcCwKLSAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsCi0gICAgICAg
ICAgICAgICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLAotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTogMS4wIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBdICksCisgICAgICAgICAgICB0aGlzLm5vcm1hbC5jb3B5KCBw
bGFuZS5ub3JtYWwgKTsKKyAgICAgICAgICAgIHRoaXMuY29uc3RhbnQgPSBwbGFuZS5jb25zdGFu
dDsKIAotICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5ub3JtYWxfdmVydCwK
LSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5ub3JtYWxfZnJhZworICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICAvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgICAgIC8vICBDdWJlIG1hcCBzaGFkZXIKLSAgICAgICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KKyAgICAgICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
Y3ViZTogeworICAgICAgICAgICAgLy8gTm90ZTogd2lsbCBsZWFkIHRvIGEgZGl2aWRlIGJ5IHpl
cm8gaWYgdGhlIHBsYW5lIGlzIGludmFsaWQuCiAKLSAgICAgICAgICAgIHVuaWZvcm1zOiB7Ci0g
ICAgICAgICAgICAgICAgdEN1YmU6IHsgdmFsdWU6IG51bGwgfSwKLSAgICAgICAgICAgICAgICB0
RmxpcDogeyB2YWx1ZTogLSAxIH0sCi0gICAgICAgICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTog
MS4wIH0KLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB2YXIgaW52ZXJzZU5vcm1hbExlbmd0
aCA9IDEuMCAvIHRoaXMubm9ybWFsLmxlbmd0aCgpOworICAgICAgICAgICAgdGhpcy5ub3JtYWwu
bXVsdGlwbHlTY2FsYXIoIGludmVyc2VOb3JtYWxMZW5ndGggKTsKKyAgICAgICAgICAgIHRoaXMu
Y29uc3RhbnQgKj0gaW52ZXJzZU5vcm1hbExlbmd0aDsKIAotICAgICAgICAgICAgdmVydGV4U2hh
ZGVyOiBTaGFkZXJDaHVuay5jdWJlX3ZlcnQsCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlcjog
U2hhZGVyQ2h1bmsuY3ViZV9mcmFnCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gIEN1YmUgbWFw
IHNoYWRlcgotICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0gICAgICAgIGVxdWlyZWN0
OiB7CisgICAgICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB1bmlmb3Jt
czogewotICAgICAgICAgICAgICAgIHRFcXVpcmVjdDogeyB2YWx1ZTogbnVsbCB9LAotICAgICAg
ICAgICAgICAgIHRGbGlwOiB7IHZhbHVlOiAtIDEgfQotICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHRoaXMuY29uc3RhbnQgKj0gLSAxOworICAgICAgICAgICAgdGhpcy5ub3JtYWwubmVnYXRl
KCk7CiAKLSAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfdmVy
dCwKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF9mcmFn
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGRpc3Rh
bmNlUkdCQTogeworICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7
CiAKLSAgICAgICAgICAgIHVuaWZvcm1zOiB7Ci0gICAgICAgICAgICAgICAgbGlnaHRQb3M6IHsg
dmFsdWU6IG5ldyBWZWN0b3IzKCkgfQotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLm5vcm1hbC5kb3QoIHBvaW50ICkgKyB0aGlzLmNvbnN0YW50OwogCi0gICAgICAgICAg
ICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLmRpc3RhbmNlUkdCQV92ZXJ0LAotICAgICAgICAg
ICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmRpc3RhbmNlUkdCQV9mcmFnCisgICAgICAg
IH0sCiAKLSAgICAgICAgfQorICAgICAgICBkaXN0YW5jZVRvU3BoZXJlOiBmdW5jdGlvbiAoIHNw
aGVyZSApIHsKIAotICAgIH07CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9p
bnQoIHNwaGVyZS5jZW50ZXIgKSAtIHNwaGVyZS5yYWRpdXM7CiAKLSAgICBTaGFkZXJMaWIucGh5
c2ljYWwgPSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMu
bWVyZ2UoIFsKLSAgICAgICAgICAgIFNoYWRlckxpYi5zdGFuZGFyZC51bmlmb3JtcywKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjbGVhckNvYXQ6IHsgdmFsdWU6IDAgfSwKLSAgICAg
ICAgICAgICAgICBjbGVhckNvYXRSb3VnaG5lc3M6IHsgdmFsdWU6IDAgfQotICAgICAgICAgICAg
fQotICAgICAgICBdICksCisgICAgICAgIHByb2plY3RQb2ludDogZnVuY3Rpb24gKCBwb2ludCwg
dGFyZ2V0ICkgewogCi0gICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaHBoeXNp
Y2FsX3ZlcnQsCi0gICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5tZXNocGh5c2lj
YWxfZnJhZworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAg
IH07CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuUGxhbmU6IC5wcm9qZWN0
UG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdl
dCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8g
aHR0cDovL2NsYXJhLmlvCi0gICAgICovCisgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBC
b3gyKCBtaW4sIG1heCApIHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29weSggdGhpcy5u
b3JtYWwgKS5tdWx0aXBseVNjYWxhciggLSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSAp
LmFkZCggcG9pbnQgKTsKIAotICAgICAgICB0aGlzLm1pbiA9ICggbWluICE9PSB1bmRlZmluZWQg
KSA/IG1pbiA6IG5ldyBWZWN0b3IyKCArIEluZmluaXR5LCArIEluZmluaXR5ICk7Ci0gICAgICAg
IHRoaXMubWF4ID0gKCBtYXggIT09IHVuZGVmaW5lZCApID8gbWF4IDogbmV3IFZlY3RvcjIoIC0g
SW5maW5pdHksIC0gSW5maW5pdHkgKTsKKyAgICAgICAgfSwKIAotICAgIH0KKyAgICAgICAgaW50
ZXJzZWN0TGluZTogZnVuY3Rpb24gKCkgewogCi0gICAgT2JqZWN0LmFzc2lnbiggQm94Mi5wcm90
b3R5cGUsIHsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAg
c2V0OiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGludGVyc2VjdExpbmUoIGxpbmUsIHRhcmdldCApIHsKIAotICAgICAgICAgICAgdGhpcy5taW4u
Y29weSggbWluICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5jb3B5KCBtYXggKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuUGxhbmU6
IC5pbnRlcnNlY3RMaW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICBzZXRGcm9tUG9pbnRzOiBmdW5jdGlvbiAoIHBvaW50cyApIHsK
KyAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gbGluZS5kZWx0YSggdjEgKTsKIAotICAg
ICAgICAgICAgdGhpcy5tYWtlRW1wdHkoKTsKKyAgICAgICAgICAgICAgICB2YXIgZGVub21pbmF0
b3IgPSB0aGlzLm5vcm1hbC5kb3QoIGRpcmVjdGlvbiApOwogCi0gICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAg
ICAgICAgIGlmICggZGVub21pbmF0b3IgPT09IDAgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlz
LmV4cGFuZEJ5UG9pbnQoIHBvaW50c1sgaSBdICk7CisgICAgICAgICAgICAgICAgICAgIC8vIGxp
bmUgaXMgY29wbGFuYXIsIHJldHVybiBvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0
aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5zdGFydCApID09PSAwICkgewogCi0gICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHkoIGxpbmUuc3Rh
cnQgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAvLyBVbnN1cmUgaWYgdGhpcyBpcyB0
aGUgY29ycmVjdCBtZXRob2QgdG8gaGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKIAotICAgICAgICBzZXRGcm9tQ2VudGVyQW5kU2l6ZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3
IFZlY3RvcjIoKTsKKyAgICAgICAgICAgICAgICB2YXIgdCA9IC0gKCBsaW5lLnN0YXJ0LmRvdCgg
dGhpcy5ub3JtYWwgKSArIHRoaXMuY29uc3RhbnQgKSAvIGRlbm9taW5hdG9yOwogCi0gICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gc2V0RnJvbUNlbnRlckFuZFNpemUoIGNlbnRlciwgc2l6ZSAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIHQgPCAwIHx8IHQgPiAxICkgewogCi0gICAgICAgICAg
ICAgICAgdmFyIGhhbGZTaXplID0gdjEuY29weSggc2l6ZSApLm11bHRpcGx5U2NhbGFyKCAwLjUg
KTsKLSAgICAgICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBjZW50ZXIgKS5zdWIoIGhhbGZTaXpl
ICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5tYXguY29weSggY2VudGVyICkuYWRkKCBoYWxmU2l6
ZSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRhcmdldC5jb3B5KCBkaXJlY3Rpb24gKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCgg
bGluZS5zdGFydCApOwogCiAgICAgICAgICAgICB9OwogCiAgICAgICAgIH0oKSwKIAotICAgICAg
ICBjbG9uZTogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29u
c3RydWN0b3IoKS5jb3B5KCB0aGlzICk7Ci0KLSAgICAgICAgfSwKKyAgICAgICAgaW50ZXJzZWN0
c0xpbmU6IGZ1bmN0aW9uICggbGluZSApIHsKIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIGJv
eCApIHsKKyAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMgdGVzdHMgaWYgYSBsaW5lIGludGVyc2Vj
dHMgdGhlIHBsYW5lLCBub3Qgd2hldGhlciBpdCAob3IgaXRzIGVuZC1wb2ludHMpIGFyZSBjb3Bs
YW5hciB3aXRoIGl0LgogCi0gICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBib3gubWluICk7Ci0g
ICAgICAgICAgICB0aGlzLm1heC5jb3B5KCBib3gubWF4ICk7CisgICAgICAgICAgICB2YXIgc3Rh
cnRTaWduID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIGxpbmUuc3RhcnQgKTsKKyAgICAgICAgICAg
IHZhciBlbmRTaWduID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIGxpbmUuZW5kICk7CiAKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgcmV0dXJuICggc3RhcnRTaWduIDwgMCAm
JiBlbmRTaWduID4gMCApIHx8ICggZW5kU2lnbiA8IDAgJiYgc3RhcnRTaWduID4gMCApOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgbWFrZUVtcHR5OiBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAg
ICAgIHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gKyBJbmZpbml0eTsKLSAgICAgICAgICAgIHRo
aXMubWF4LnggPSB0aGlzLm1heC55ID0gLSBJbmZpbml0eTsKKyAgICAgICAgaW50ZXJzZWN0c0Jv
eDogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgcmV0dXJuIGJveC5pbnRlcnNlY3RzUGxhbmUoIHRoaXMgKTsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgLy8gdGhpcyBp
cyBhIG1vcmUgcm9idXN0IGNoZWNrIGZvciBlbXB0eSB0aGFuICggdm9sdW1lIDw9IDAgKSBiZWNh
dXNlIHZvbHVtZSBjYW4gZ2V0IHBvc2l0aXZlIHdpdGggdHdvIG5lZ2F0aXZlIGF4ZXMKKyAgICAg
ICAgaW50ZXJzZWN0c1NwaGVyZTogZnVuY3Rpb24gKCBzcGhlcmUgKSB7CiAKLSAgICAgICAgICAg
IHJldHVybiAoIHRoaXMubWF4LnggPCB0aGlzLm1pbi54ICkgfHwgKCB0aGlzLm1heC55IDwgdGhp
cy5taW4ueSApOworICAgICAgICAgICAgcmV0dXJuIHNwaGVyZS5pbnRlcnNlY3RzUGxhbmUoIHRo
aXMgKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGdldENlbnRlcjogZnVuY3Rpb24gKCBvcHRp
b25hbFRhcmdldCApIHsKKyAgICAgICAgY29wbGFuYXJQb2ludDogZnVuY3Rpb24gKCB0YXJnZXQg
KSB7CiAKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVj
dG9yMigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gcmVzdWx0LnNldCgg
MCwgMCApIDogcmVzdWx0LmFkZFZlY3RvcnMoIHRoaXMubWluLCB0aGlzLm1heCApLm11bHRpcGx5
U2NhbGFyKCAwLjUgKTsKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5QbGFu
ZTogLmNvcGxhbmFyUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAg
ICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgZ2V0U2l6ZTogZnVuY3Rp
b24gKCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyByZXN1bHQuc2V0KCAwLCAwICkgOiByZXN1bHQuc3ViVmVj
dG9ycyggdGhpcy5tYXgsIHRoaXMubWluICk7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNv
cHkoIHRoaXMubm9ybWFsICkubXVsdGlwbHlTY2FsYXIoIC0gdGhpcy5jb25zdGFudCApOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgZXhwYW5kQnlQb2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsK
KyAgICAgICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMu
bWluLm1pbiggcG9pbnQgKTsKLSAgICAgICAgICAgIHRoaXMubWF4Lm1heCggcG9pbnQgKTsKKyAg
ICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgbTEgPSBu
ZXcgTWF0cml4MygpOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiBhcHBseU1hdHJpeDQoIG1hdHJpeCwgb3B0aW9uYWxOb3JtYWxNYXRyaXgg
KSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFsTWF0cml4ID0gb3B0
aW9uYWxOb3JtYWxNYXRyaXggfHwgbTEuZ2V0Tm9ybWFsTWF0cml4KCBtYXRyaXggKTsKIAotICAg
ICAgICBleHBhbmRCeVZlY3RvcjogZnVuY3Rpb24gKCB2ZWN0b3IgKSB7Ci0KLSAgICAgICAgICAg
IHRoaXMubWluLnN1YiggdmVjdG9yICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5hZGQoIHZlY3Rv
ciApOworICAgICAgICAgICAgICAgIHZhciByZWZlcmVuY2VQb2ludCA9IHRoaXMuY29wbGFuYXJQ
b2ludCggdjEgKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOwogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFsID0gdGhpcy5ub3JtYWwuYXBwbHlNYXRy
aXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIHRoaXMuY29uc3RhbnQgPSAtIHJlZmVyZW5jZVBvaW50LmRvdCggbm9ybWFsICk7CiAK
LSAgICAgICAgZXhwYW5kQnlTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB0aGlzLm1pbi5hZGRTY2FsYXIoIC0g
c2NhbGFyICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5hZGRTY2FsYXIoIHNjYWxhciApOworICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0oKSwKIAot
ICAgICAgICB9LAorICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICggb2Zmc2V0ICkgewogCi0g
ICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7CisgICAgICAgICAgICB0
aGlzLmNvbnN0YW50IC09IG9mZnNldC5kb3QoIHRoaXMubm9ybWFsICk7CiAKLSAgICAgICAgICAg
IHJldHVybiBwb2ludC54IDwgdGhpcy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fAot
ICAgICAgICAgICAgICAgIHBvaW50LnkgPCB0aGlzLm1pbi55IHx8IHBvaW50LnkgPiB0aGlzLm1h
eC55ID8gZmFsc2UgOiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAg
fSwKIAotICAgICAgICBjb250YWluc0JveDogZnVuY3Rpb24gKCBib3ggKSB7CisgICAgICAgIGVx
dWFsczogZnVuY3Rpb24gKCBwbGFuZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubWlu
LnggPD0gYm94Lm1pbi54ICYmIGJveC5tYXgueCA8PSB0aGlzLm1heC54ICYmCi0gICAgICAgICAg
ICAgICAgdGhpcy5taW4ueSA8PSBib3gubWluLnkgJiYgYm94Lm1heC55IDw9IHRoaXMubWF4Lnk7
CisgICAgICAgICAgICByZXR1cm4gcGxhbmUubm9ybWFsLmVxdWFscyggdGhpcy5ub3JtYWwgKSAm
JiAoIHBsYW5lLmNvbnN0YW50ID09PSB0aGlzLmNvbnN0YW50ICk7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgfQogCi0gICAgICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKCBwb2ludCwgb3B0aW9u
YWxUYXJnZXQgKSB7CisgICAgfSApOwogCi0gICAgICAgICAgICAvLyBUaGlzIGNhbiBwb3RlbnRp
YWxseSBoYXZlIGEgZGl2aWRlIGJ5IHplcm8gaWYgdGhlIGJveAotICAgICAgICAgICAgLy8gaGFz
IGEgc2l6ZSBkaW1lbnNpb24gb2YgMC4KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0
ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5p
bworICAgICAqLwogCi0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwg
bmV3IFZlY3RvcjIoKTsKKyAgICBmdW5jdGlvbiBGcnVzdHVtKCBwMCwgcDEsIHAyLCBwMywgcDQs
IHA1ICkgewogCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNldCgKLSAgICAgICAgICAgICAg
ICAoIHBvaW50LnggLSB0aGlzLm1pbi54ICkgLyAoIHRoaXMubWF4LnggLSB0aGlzLm1pbi54ICks
Ci0gICAgICAgICAgICAgICAgKCBwb2ludC55IC0gdGhpcy5taW4ueSApIC8gKCB0aGlzLm1heC55
IC0gdGhpcy5taW4ueSApCi0gICAgICAgICAgICApOworICAgICAgICB0aGlzLnBsYW5lcyA9IFsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgKCBwMCAhPT0gdW5kZWZpbmVkICkgPyBwMCA6IG5l
dyBQbGFuZSgpLAorICAgICAgICAgICAgKCBwMSAhPT0gdW5kZWZpbmVkICkgPyBwMSA6IG5ldyBQ
bGFuZSgpLAorICAgICAgICAgICAgKCBwMiAhPT0gdW5kZWZpbmVkICkgPyBwMiA6IG5ldyBQbGFu
ZSgpLAorICAgICAgICAgICAgKCBwMyAhPT0gdW5kZWZpbmVkICkgPyBwMyA6IG5ldyBQbGFuZSgp
LAorICAgICAgICAgICAgKCBwNCAhPT0gdW5kZWZpbmVkICkgPyBwNCA6IG5ldyBQbGFuZSgpLAor
ICAgICAgICAgICAgKCBwNSAhPT0gdW5kZWZpbmVkICkgPyBwNSA6IG5ldyBQbGFuZSgpCiAKLSAg
ICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24gKCBib3ggKSB7CisgICAgICAgIF07CiAKLSAg
ICAgICAgICAgIC8vIHVzaW5nIDQgc3BsaXR0aW5nIHBsYW5lcyB0byBydWxlIG91dCBpbnRlcnNl
Y3Rpb25zCisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gYm94Lm1heC54IDwgdGhpcy5taW4u
eCB8fCBib3gubWluLnggPiB0aGlzLm1heC54IHx8Ci0gICAgICAgICAgICAgICAgYm94Lm1heC55
IDwgdGhpcy5taW4ueSB8fCBib3gubWluLnkgPiB0aGlzLm1heC55ID8gZmFsc2UgOiB0cnVlOwor
ICAgIE9iamVjdC5hc3NpZ24oIEZydXN0dW0ucHJvdG90eXBlLCB7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgc2V0OiBmdW5jdGlvbiAoIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUgKSB7CisKKyAgICAg
ICAgICAgIHZhciBwbGFuZXMgPSB0aGlzLnBsYW5lczsKIAotICAgICAgICBjbGFtcFBvaW50OiBm
dW5jdGlvbiAoIHBvaW50LCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAgIHBsYW5lc1sg
MCBdLmNvcHkoIHAwICk7CisgICAgICAgICAgICBwbGFuZXNbIDEgXS5jb3B5KCBwMSApOworICAg
ICAgICAgICAgcGxhbmVzWyAyIF0uY29weSggcDIgKTsKKyAgICAgICAgICAgIHBsYW5lc1sgMyBd
LmNvcHkoIHAzICk7CisgICAgICAgICAgICBwbGFuZXNbIDQgXS5jb3B5KCBwNCApOworICAgICAg
ICAgICAgcGxhbmVzWyA1IF0uY29weSggcDUgKTsKIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IyKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0LmNvcHkoIHBvaW50ICkuY2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgdmFyIHYxID0gbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5j
b25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IGRpc3RhbmNlVG9Qb2ludCggcG9pbnQgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICB2YXIgY2xhbXBlZFBvaW50ID0gdjEuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5taW4sIHRo
aXMubWF4ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsYW1wZWRQb2ludC5zdWIoIHBvaW50
ICkubGVuZ3RoKCk7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggZnJ1c3R1bSApIHsKIAotICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBwbGFuZXMgPSB0aGlzLnBsYW5lczsKIAotICAg
ICAgICB9KCksCisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgewog
Ci0gICAgICAgIGludGVyc2VjdDogZnVuY3Rpb24gKCBib3ggKSB7CisgICAgICAgICAgICAgICAg
cGxhbmVzWyBpIF0uY29weSggZnJ1c3R1bS5wbGFuZXNbIGkgXSApOwogCi0gICAgICAgICAgICB0
aGlzLm1pbi5tYXgoIGJveC5taW4gKTsKLSAgICAgICAgICAgIHRoaXMubWF4Lm1pbiggYm94Lm1h
eCApOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIHVuaW9uOiBmdW5jdGlvbiAoIGJveCApIHsKKyAgICAgICAgc2V0RnJv
bU1hdHJpeDogZnVuY3Rpb24gKCBtICkgewogCi0gICAgICAgICAgICB0aGlzLm1pbi5taW4oIGJv
eC5taW4gKTsKLSAgICAgICAgICAgIHRoaXMubWF4Lm1heCggYm94Lm1heCApOworICAgICAgICAg
ICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzOworICAgICAgICAgICAgdmFyIG1lID0gbS5lbGVt
ZW50czsKKyAgICAgICAgICAgIHZhciBtZTAgPSBtZVsgMCBdLCBtZTEgPSBtZVsgMSBdLCBtZTIg
PSBtZVsgMiBdLCBtZTMgPSBtZVsgMyBdOworICAgICAgICAgICAgdmFyIG1lNCA9IG1lWyA0IF0s
IG1lNSA9IG1lWyA1IF0sIG1lNiA9IG1lWyA2IF0sIG1lNyA9IG1lWyA3IF07CisgICAgICAgICAg
ICB2YXIgbWU4ID0gbWVbIDggXSwgbWU5ID0gbWVbIDkgXSwgbWUxMCA9IG1lWyAxMCBdLCBtZTEx
ID0gbWVbIDExIF07CisgICAgICAgICAgICB2YXIgbWUxMiA9IG1lWyAxMiBdLCBtZTEzID0gbWVb
IDEzIF0sIG1lMTQgPSBtZVsgMTQgXSwgbWUxNSA9IG1lWyAxNSBdOworCisgICAgICAgICAgICBw
bGFuZXNbIDAgXS5zZXRDb21wb25lbnRzKCBtZTMgLSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1l
OCwgbWUxNSAtIG1lMTIgKS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHBsYW5lc1sgMSBdLnNl
dENvbXBvbmVudHMoIG1lMyArIG1lMCwgbWU3ICsgbWU0LCBtZTExICsgbWU4LCBtZTE1ICsgbWUx
MiApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgcGxhbmVzWyAyIF0uc2V0Q29tcG9uZW50cygg
bWUzICsgbWUxLCBtZTcgKyBtZTUsIG1lMTEgKyBtZTksIG1lMTUgKyBtZTEzICkubm9ybWFsaXpl
KCk7CisgICAgICAgICAgICBwbGFuZXNbIDMgXS5zZXRDb21wb25lbnRzKCBtZTMgLSBtZTEsIG1l
NyAtIG1lNSwgbWUxMSAtIG1lOSwgbWUxNSAtIG1lMTMgKS5ub3JtYWxpemUoKTsKKyAgICAgICAg
ICAgIHBsYW5lc1sgNCBdLnNldENvbXBvbmVudHMoIG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTEx
IC0gbWUxMCwgbWUxNSAtIG1lMTQgKS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIHBsYW5lc1sg
NSBdLnNldENvbXBvbmVudHMoIG1lMyArIG1lMiwgbWU3ICsgbWU2LCBtZTExICsgbWUxMCwgbWUx
NSArIG1lMTQgKS5ub3JtYWxpemUoKTsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAg
ICAgICAgfSwKIAotICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICggb2Zmc2V0ICkgewotCi0g
ICAgICAgICAgICB0aGlzLm1pbi5hZGQoIG9mZnNldCApOwotICAgICAgICAgICAgdGhpcy5tYXgu
YWRkKCBvZmZzZXQgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGludGVy
c2VjdHNPYmplY3Q6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgdmFy
IHNwaGVyZSA9IG5ldyBTcGhlcmUoKTsKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggYm94
ICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVyc2VjdHNPYmplY3QoIG9iamVj
dCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGJveC5taW4uZXF1YWxzKCB0aGlzLm1pbiApICYm
IGJveC5tYXguZXF1YWxzKCB0aGlzLm1heCApOworICAgICAgICAgICAgICAgIHZhciBnZW9tZXRy
eSA9IG9iamVjdC5nZW9tZXRyeTsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBn
ZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0gbnVsbCApCisgICAgICAgICAgICAgICAgICAgIGdl
b21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOwogCi0gICAgfSApOworICAgICAgICAgICAg
ICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSApCisgICAgICAgICAgICAg
ICAgICAgIC5hcHBseU1hdHJpeDQoIG9iamVjdC5tYXRyaXhXb3JsZCApOwogCi0gICAgLyoqCi0g
ICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KLSAgICAgKiBA
YXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqLworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApOwogCi0g
ICAgZnVuY3Rpb24gTGVuc0ZsYXJlUGx1Z2luKCByZW5kZXJlciwgZmxhcmVzICkgeworICAgICAg
ICAgICAgfTsKIAotICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5jb250ZXh0OwotICAgICAgICB2
YXIgc3RhdGUgPSByZW5kZXJlci5zdGF0ZTsKKyAgICAgICAgfSgpLAogCi0gICAgICAgIHZhciB2
ZXJ0ZXhCdWZmZXIsIGVsZW1lbnRCdWZmZXI7Ci0gICAgICAgIHZhciBzaGFkZXIsIHByb2dyYW0s
IGF0dHJpYnV0ZXMsIHVuaWZvcm1zOworICAgICAgICBpbnRlcnNlY3RzU3ByaXRlOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgdmFyIHRlbXBUZXh0dXJlLCBvY2NsdXNpb25UZXh0dXJlOworICAg
ICAgICAgICAgdmFyIHNwaGVyZSA9IG5ldyBTcGhlcmUoKTsKIAotICAgICAgICBmdW5jdGlvbiBp
bml0KCkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVyc2VjdHNTcHJpdGUoIHNw
cml0ZSApIHsKIAotICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSgg
WwotICAgICAgICAgICAgICAgIC0gMSwgLSAxLCAgMCwgMCwKLSAgICAgICAgICAgICAgICAgMSwg
LSAxLCAgMSwgMCwKLSAgICAgICAgICAgICAgICAgMSwgIDEsICAxLCAxLAotICAgICAgICAgICAg
ICAgIC0gMSwgIDEsICAwLCAxCi0gICAgICAgICAgICBdICk7CisgICAgICAgICAgICAgICAgc3Bo
ZXJlLmNlbnRlci5zZXQoIDAsIDAsIDAgKTsKKyAgICAgICAgICAgICAgICBzcGhlcmUucmFkaXVz
ID0gMC43MDcxMDY3ODExODY1NDc2OworICAgICAgICAgICAgICAgIHNwaGVyZS5hcHBseU1hdHJp
eDQoIHNwcml0ZS5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgICAgICB2YXIgZmFjZXMgPSBuZXcg
VWludDE2QXJyYXkoIFsKLSAgICAgICAgICAgICAgICAwLCAxLCAyLAotICAgICAgICAgICAgICAg
IDAsIDIsIDMKLSAgICAgICAgICAgIF0gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5p
bnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKTsKIAotICAgICAgICAgICAgLy8gYnVmZmVycworICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgdmVydGV4QnVmZmVyICAgICA9IGdsLmNyZWF0ZUJ1
ZmZlcigpOwotICAgICAgICAgICAgZWxlbWVudEJ1ZmZlciAgICA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGdsLkFSUkFZX0JV
RkZFUiwgdmVydGV4QnVmZmVyICk7Ci0gICAgICAgICAgICBnbC5idWZmZXJEYXRhKCBnbC5BUlJB
WV9CVUZGRVIsIHZlcnRpY2VzLCBnbC5TVEFUSUNfRFJBVyApOworICAgICAgICBpbnRlcnNlY3Rz
U3BoZXJlOiBmdW5jdGlvbiAoIHNwaGVyZSApIHsKIAotICAgICAgICAgICAgZ2wuYmluZEJ1ZmZl
ciggZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsZW1lbnRCdWZmZXIgKTsKLSAgICAgICAgICAg
IGdsLmJ1ZmZlckRhdGEoIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBmYWNlcywgZ2wuU1RBVElD
X0RSQVcgKTsKKyAgICAgICAgICAgIHZhciBwbGFuZXMgPSB0aGlzLnBsYW5lczsKKyAgICAgICAg
ICAgIHZhciBjZW50ZXIgPSBzcGhlcmUuY2VudGVyOworICAgICAgICAgICAgdmFyIG5lZ1JhZGl1
cyA9IC0gc3BoZXJlLnJhZGl1czsKIAotICAgICAgICAgICAgLy8gdGV4dHVyZXMKKyAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHRlbXBU
ZXh0dXJlICAgICAgPSBnbC5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgICAgICBvY2NsdXNpb25U
ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgICAgICAgICAgICAgIHZhciBkaXN0YW5j
ZSA9IHBsYW5lc1sgaSBdLmRpc3RhbmNlVG9Qb2ludCggY2VudGVyICk7CiAKLSAgICAgICAgICAg
IHN0YXRlLmJpbmRUZXh0dXJlKCBnbC5URVhUVVJFXzJELCB0ZW1wVGV4dHVyZSApOwotICAgICAg
ICAgICAgZ2wudGV4SW1hZ2UyRCggZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCAxNiwgMTYsIDAs
IGdsLlJHQiwgZ2wuVU5TSUdORURfQllURSwgbnVsbCApOwotICAgICAgICAgICAgZ2wudGV4UGFy
YW1ldGVyaSggZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VE
R0UgKTsKLSAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoIGdsLlRFWFRVUkVfMkQsIGdsLlRF
WFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFICk7Ci0gICAgICAgICAgICBnbC50ZXhQYXJh
bWV0ZXJpKCBnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1Qg
KTsKLSAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoIGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRV
UkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCApOworICAgICAgICAgICAgICAgIGlmICggZGlzdGFu
Y2UgPCBuZWdSYWRpdXMgKSB7CiAKLSAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCBnbC5U
RVhUVVJFXzJELCBvY2NsdXNpb25UZXh0dXJlICk7Ci0gICAgICAgICAgICBnbC50ZXhJbWFnZTJE
KCBnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAxNiwgMTYsIDAsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIG51bGwgKTsKLSAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoIGdsLlRFWFRV
UkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCBnbC5DTEFNUF9UT19FREdFICk7Ci0gICAgICAgICAg
ICBnbC50ZXhQYXJhbWV0ZXJpKCBnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wu
Q0xBTVBfVE9fRURHRSApOwotICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaSggZ2wuVEVYVFVS
RV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUICk7Ci0gICAgICAgICAgICBn
bC50ZXhQYXJhbWV0ZXJpKCBnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGds
Lk5FQVJFU1QgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
ICAgICBzaGFkZXIgPSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmVy
dGV4U2hhZGVyOiBbCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgInVuaWZv
cm0gbG93cCBpbnQgcmVuZGVyVHlwZTsiLAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAgICAgICAgICAgICAgICAgInVuaWZvcm0gdmVjMyBzY3JlZW5Qb3NpdGlvbjsiLAotICAgICAg
ICAgICAgICAgICAgICAidW5pZm9ybSB2ZWMyIHNjYWxlOyIsCi0gICAgICAgICAgICAgICAgICAg
ICJ1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOyIsCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIG9jY2x1c2lvbk1hcDsiLAorICAgICAgICBpbnRlcnNl
Y3RzQm94OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZSB2
ZWMyIHBvc2l0aW9uOyIsCi0gICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiB1djsi
LAorICAgICAgICAgICAgdmFyIHAxID0gbmV3IFZlY3RvcjMoKSwKKyAgICAgICAgICAgICAgICBw
MiA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgInZhcnlpbmcgdmVjMiB2
VVY7IiwKLSAgICAgICAgICAgICAgICAgICAgInZhcnlpbmcgZmxvYXQgdlZpc2liaWxpdHk7IiwK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcnNlY3RzQm94KCBib3ggKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHsiLAorICAgICAgICAgICAgICAgIHZhciBw
bGFuZXMgPSB0aGlzLnBsYW5lczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgInZVViA9IHV2
OyIsCisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyApIHsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgInZlYzIgcG9zID0gcG9zaXRpb247IiwKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHBsYW5lID0gcGxhbmVzWyBpIF07CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICJpZiAoIHJlbmRlclR5cGUgPT0gMiApIHsiLAorICAgICAgICAgICAgICAgICAgICBw
MS54ID0gcGxhbmUubm9ybWFsLnggPiAwID8gYm94Lm1pbi54IDogYm94Lm1heC54OworICAgICAg
ICAgICAgICAgICAgICBwMi54ID0gcGxhbmUubm9ybWFsLnggPiAwID8gYm94Lm1heC54IDogYm94
Lm1pbi54OworICAgICAgICAgICAgICAgICAgICBwMS55ID0gcGxhbmUubm9ybWFsLnkgPiAwID8g
Ym94Lm1pbi55IDogYm94Lm1heC55OworICAgICAgICAgICAgICAgICAgICBwMi55ID0gcGxhbmUu
bm9ybWFsLnkgPiAwID8gYm94Lm1heC55IDogYm94Lm1pbi55OworICAgICAgICAgICAgICAgICAg
ICBwMS56ID0gcGxhbmUubm9ybWFsLnogPiAwID8gYm94Lm1pbi56IDogYm94Lm1heC56OworICAg
ICAgICAgICAgICAgICAgICBwMi56ID0gcGxhbmUubm9ybWFsLnogPiAwID8gYm94Lm1heC56IDog
Ym94Lm1pbi56OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlYzQgdmlzaWJpbGl0
eSA9IHRleHR1cmUyRCggb2NjbHVzaW9uTWFwLCB2ZWMyKCAwLjEsIDAuMSApICk7IiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lv
bk1hcCwgdmVjMiggMC41LCAwLjEgKSApOyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
InZpc2liaWxpdHkgKz0gdGV4dHVyZTJEKCBvY2NsdXNpb25NYXAsIHZlYzIoIDAuOSwgMC4xICkg
KTsiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aXNpYmlsaXR5ICs9IHRleHR1cmUy
RCggb2NjbHVzaW9uTWFwLCB2ZWMyKCAwLjksIDAuNSApICk7IiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMigg
MC45LCAwLjkgKSApOyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInZpc2liaWxpdHkg
Kz0gdGV4dHVyZTJEKCBvY2NsdXNpb25NYXAsIHZlYzIoIDAuNSwgMC45ICkgKTsiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ2aXNpYmlsaXR5ICs9IHRleHR1cmUyRCggb2NjbHVzaW9u
TWFwLCB2ZWMyKCAwLjEsIDAuOSApICk7IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dmlzaWJpbGl0eSArPSB0ZXh0dXJlMkQoIG9jY2x1c2lvbk1hcCwgdmVjMiggMC4xLCAwLjUgKSAp
OyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInZpc2liaWxpdHkgKz0gdGV4dHVyZTJE
KCBvY2NsdXNpb25NYXAsIHZlYzIoIDAuNSwgMC41ICkgKTsiLAorICAgICAgICAgICAgICAgICAg
ICB2YXIgZDEgPSBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIHAxICk7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBkMiA9IHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggcDIgKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ2VmlzaWJpbGl0eSA9ICAgICAgICB2aXNpYmlsaXR5LnIgLyA5LjA7
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidlZpc2liaWxpdHkgKj0gMS4wIC0gdmlz
aWJpbGl0eS5nIC8gOS4wOyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInZWaXNpYmls
aXR5ICo9ICAgICAgIHZpc2liaWxpdHkuYiAvIDkuMDsiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ2VmlzaWJpbGl0eSAqPSAxLjAgLSB2aXNpYmlsaXR5LmEgLyA5LjA7IiwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgYm90aCBvdXRzaWRlIHBsYW5lLCBubyBpbnRlcnNlY3Rpb24K
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3MueCA9IGNvcyggcm90YXRpb24gKSAq
IHBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBwb3NpdGlvbi55OyIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInBvcy55ID0gc2luKCByb3RhdGlvbiApICogcG9zaXRpb24ueCAr
IGNvcyggcm90YXRpb24gKSAqIHBvc2l0aW9uLnk7IiwKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBkMSA8IDAgJiYgZDIgPCAwICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAifSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICJnbF9Qb3NpdGlvbiA9IHZlYzQoICggcG9zICogc2NhbGUgKyBzY3JlZW5Qb3NpdGlv
bi54eSApLnh5LCBzY3JlZW5Qb3NpdGlvbi56LCAxLjAgKTsiLAorICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgIn0iCisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgXS5qb2luKCAiXG4iICksCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogWworICAgICAgICAgICAgfTsKIAot
ICAgICAgICAgICAgICAgICAgICAidW5pZm9ybSBsb3dwIGludCByZW5kZXJUeXBlOyIsCisgICAg
ICAgIH0oKSwKIAotICAgICAgICAgICAgICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgbWFwOyIs
Ci0gICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGZsb2F0IG9wYWNpdHk7IiwKLSAgICAgICAg
ICAgICAgICAgICAgInVuaWZvcm0gdmVjMyBjb2xvcjsiLAorICAgICAgICBjb250YWluc1BvaW50
OiBmdW5jdGlvbiAoIHBvaW50ICkgewogCi0gICAgICAgICAgICAgICAgICAgICJ2YXJ5aW5nIHZl
YzIgdlVWOyIsCi0gICAgICAgICAgICAgICAgICAgICJ2YXJ5aW5nIGZsb2F0IHZWaXNpYmlsaXR5
OyIsCisgICAgICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7CiAKLSAgICAgICAgICAg
ICAgICAgICAgInZvaWQgbWFpbigpIHsiLAorICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwgNjsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGluayBzcXVhcmUK
KyAgICAgICAgICAgICAgICBpZiAoIHBsYW5lc1sgaSBdLmRpc3RhbmNlVG9Qb2ludCggcG9pbnQg
KSA8IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICJpZiAoIHJlbmRlclR5cGUgPT0g
MCApIHsiLAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZ2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDEuMCwgMC4w
ICk7IiwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJl
c3RvcmUKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgIn0gZWxzZSBp
ZiAoIHJlbmRlclR5cGUgPT0gMSApIHsiLAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCBtYXAs
IHZVViApOyIsCisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxhcmUK
KyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICJ9IGVsc2UgeyIsCisgICAgdmFy
IGFscGhhbWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9y
LmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZztcbiNlbmRpZlxuIjsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ2ZWM0IHRleHR1cmUgPSB0ZXh0dXJlMkQoIG1hcCwgdlVW
ICk7IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dHVyZS5hICo9IG9wYWNpdHkg
KiB2VmlzaWJpbGl0eTsiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbF9GcmFnQ29s
b3IgPSB0ZXh0dXJlOyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImdsX0ZyYWdDb2xv
ci5yZ2IgKj0gY29sb3I7IiwKKyAgICB2YXIgYWxwaGFtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZk
ZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmXG4i
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAifSIsCisgICAgdmFyIGFscGhhdGVzdF9mcmFn
bWVudCA9ICIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBBTFBIQVRF
U1QgKSBkaXNjYXJkO1xuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAgICAgICJ9IgorICAg
IHZhciBhb21hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRP
Y2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcElu
dGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmll
bnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZ
U0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFs
LCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1
bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24s
IG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4iOwogCi0g
ICAgICAgICAgICAgICAgXS5qb2luKCAiXG4iICkKKyAgICB2YXIgYW9tYXBfcGFyc19mcmFnbWVu
dCA9ICIjaWZkZWYgVVNFX0FPTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xuXHR1bmlm
b3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5O1xuI2VuZGlmIjsKIAotICAgICAgICAgICAgfTsKKyAg
ICB2YXIgYmVnaW5fdmVydGV4ID0gIlxudmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9u
ICk7XG4iOwogCi0gICAgICAgICAgICBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSggc2hhZGVyICk7
CisgICAgdmFyIGJlZ2lubm9ybWFsX3ZlcnRleCA9ICJcbnZlYzMgb2JqZWN0Tm9ybWFsID0gdmVj
Myggbm9ybWFsICk7XG4iOwogCi0gICAgICAgICAgICBhdHRyaWJ1dGVzID0gewotICAgICAgICAg
ICAgICAgIHZlcnRleDogZ2wuZ2V0QXR0cmliTG9jYXRpb24gKCBwcm9ncmFtLCAicG9zaXRpb24i
ICksCi0gICAgICAgICAgICAgICAgdXY6ICAgICBnbC5nZXRBdHRyaWJMb2NhdGlvbiAoIHByb2dy
YW0sICJ1diIgKQotICAgICAgICAgICAgfTsKKyAgICB2YXIgYnNkZnMgPSAiZmxvYXQgcHVuY3R1
YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHRE
aXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRl
Y2F5RXhwb25lbnQgKSB7XG5cdGlmKCBkZWNheUV4cG9uZW50ID4gMC4wICkge1xuI2lmIGRlZmlu
ZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxv
ZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAx
ICk7XG5cdFx0ZmxvYXQgbWF4RGlzdGFuY2VDdXRvZmZGYWN0b3IgPSBwb3cyKCBzYXR1cmF0ZSgg
MS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdHJl
dHVybiBkaXN0YW5jZUZhbGxvZmYgKiBtYXhEaXN0YW5jZUN1dG9mZkZhY3RvcjtcbiNlbHNlXG5c
dFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2Ug
KyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuI2VuZGlmXG5cdH1cblx0cmV0dXJuIDEuMDtcbn1c
bnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkg
e1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hs
aWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkg
e1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiAp
ICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCAr
IHNwZWN1bGFyQ29sb3I7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxw
aGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0Zmxv
YXQgYTIgPSBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCA9IGRvdE5MICsgc3FydCggYTIgKyAo
IDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2ID0gZG90TlYgKyBzcXJ0
KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICgg
Z2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9h
dCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xu
XHRmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBh
MiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgPSBkb3ROViAq
IHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41
IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxv
YXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiA9IHBvdzIoIGFs
cGhhICk7XG5cdGZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEu
MDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMz
IEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQs
IGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3Vs
YXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBv
dzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGluY2lkZW50TGln
aHQuZGlyZWN0aW9uICsgZ2VvbWV0cnkudmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVy
YXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xu
XHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnku
dmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9y
bWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggPSBzYXR1cmF0ZSggZG90KCBpbmNpZGVu
dExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiA9IEZfU2NobGljayggc3Bl
Y3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyA9IEdfR0dYX1NtaXRoQ29ycmVsYXRlZCgg
YWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCAp
O1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMz
IE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25z
dCBmbG9hdCBMVVRfU0laRSAgPSA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExV
VF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgID0gMC41
IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5c
dHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYg
PSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENf
Q2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9
IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAg
KSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVj
MyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5c
dGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1
ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2
NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0
YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4
LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0
YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMg
ViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVj
dENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jk
c1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xu
XHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5v
cm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xu
XHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtc
blx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VN
YXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNb
IDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1h
dCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVj
dENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sg
MyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0
Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0g
bm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29v
cmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZl
Y3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwg
Y29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1G
YWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9
IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5c
dHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMg
XSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3Jt
RmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1c
bnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0Nv
bnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxv
YXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5
Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdGNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAt
IDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxID0gdmVjNCgg
MSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByID0gcm91Z2huZXNzICogYzAgKyBj
MTtcblx0ZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViAp
ICkgKiByLnggKyByLnk7XG5cdHZlYzIgQUIgPSB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCAr
IHIuenc7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogQUIueCArIEFCLnk7XG59XG5mbG9hdCBH
X0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxp
bm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCAp
IHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICog
cG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9u
ZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRy
aWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGlu
IGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBpbmNpZGVu
dExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBz
YXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RM
SCA9IHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtc
blx0dmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBH
ID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEID0gRF9CbGlublBob25nKCBz
aGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dY
Um91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7
XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7
XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJs
aW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAy
LjAgKSApO1xufVxuIjsKIAotICAgICAgICAgICAgdW5pZm9ybXMgPSB7Ci0gICAgICAgICAgICAg
ICAgcmVuZGVyVHlwZTogICAgIGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgInJlbmRl
clR5cGUiICksCi0gICAgICAgICAgICAgICAgbWFwOiAgICAgICAgICAgIGdsLmdldFVuaWZvcm1M
b2NhdGlvbiggcHJvZ3JhbSwgIm1hcCIgKSwKLSAgICAgICAgICAgICAgICBvY2NsdXNpb25NYXA6
ICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAib2NjbHVzaW9uTWFwIiApLAotICAg
ICAgICAgICAgICAgIG9wYWNpdHk6ICAgICAgICBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dy
YW0sICJvcGFjaXR5IiApLAotICAgICAgICAgICAgICAgIGNvbG9yOiAgICAgICAgICBnbC5nZXRV
bmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICJjb2xvciIgKSwKLSAgICAgICAgICAgICAgICBzY2Fs
ZTogICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAic2NhbGUiICksCi0g
ICAgICAgICAgICAgICAgcm90YXRpb246ICAgICAgIGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJv
Z3JhbSwgInJvdGF0aW9uIiApLAotICAgICAgICAgICAgICAgIHNjcmVlblBvc2l0aW9uOiBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICJzY3JlZW5Qb3NpdGlvbiIgKQotICAgICAgICAg
ICAgfTsKKyAgICB2YXIgYnVtcG1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfQlVNUE1B
UFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwO1xuXHR1bmlmb3JtIGZsb2F0IGJ1bXBTY2Fs
ZTtcblx0dmVjMiBkSGR4eV9md2QoKSB7XG5cdFx0dmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApO1xu
XHRcdHZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTtcblx0XHRmbG9hdCBIbGwgPSBidW1wU2NhbGUg
KiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7XG5cdFx0ZmxvYXQgZEJ4ID0gYnVtcFNjYWxl
ICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7XG5cdFx0ZmxvYXQg
ZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBI
bGw7XG5cdFx0cmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7XG5cdH1cblx0dmVjMyBwZXJ0dXJiTm9y
bWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSApIHtcblx0
XHR2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9z
LnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2U2lnbWFZID0gdmVjMyggZEZk
eSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSAp
O1xuXHRcdHZlYzMgdk4gPSBzdXJmX25vcm07XG5cdFx0dmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZ
LCB2TiApO1xuXHRcdHZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcblx0XHRmbG9hdCBm
RGV0ID0gZG90KCB2U2lnbWFYLCBSMSApO1xuXHRcdGZEZXQgKj0gKCBmbG9hdCggZ2xfRnJvbnRG
YWNpbmcgKSAqIDIuMCAtIDEuMCApO1xuXHRcdHZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAo
IGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xuXHRcdHJldHVybiBub3JtYWxpemUoIGFi
cyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcblx0fVxuI2VuZGlmXG4iOwogCi0gICAg
ICAgIH0KKyAgICB2YXIgY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50ID0gIiNpZiBOVU1fQ0xJUFBJ
TkdfUExBTkVTID4gMFxuXHR2ZWM0IHBsYW5lO1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZv
ciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRw
bGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24s
IHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0I2lmIFVOSU9OX0NMSVBQ
SU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgPSB0cnVl
O1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0XHRmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQ
SU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0XHRwbGFu
ZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRjbGlwcGVkID0gKCBkb3QoIHZWaWV3UG9z
aXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApICYmIGNsaXBwZWQ7XG5cdFx0fVxuXHRcdGlm
ICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4iOwogCi0gICAgICAgIC8q
Ci0gICAgICAgICAqIFJlbmRlciBsZW5zIGZsYXJlcwotICAgICAgICAgKiBNZXRob2Q6IHJlbmRl
cnMgMTZ4MTYgMHhmZjAwZmYtY29sb3JlZCBwb2ludHMgc2NhdHRlcmVkIG92ZXIgdGhlIGxpZ2h0
IHNvdXJjZSBhcmVhLAotICAgICAgICAgKiAgICAgICAgIHJlYWRzIHRoZXNlIGJhY2sgYW5kIGNh
bGN1bGF0ZXMgb2NjbHVzaW9uLgotICAgICAgICAgKi8KKyAgICB2YXIgY2xpcHBpbmdfcGxhbmVz
X3BhcnNfZnJhZ21lbnQgPSAiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdCNpZiAhIGRl
ZmluZWQoIFBIWVNJQ0FMICkgJiYgISBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dmFyeWluZyB2ZWMz
IHZWaWV3UG9zaXRpb247XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNb
IE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZlxuIjsKIAotICAgICAgICB0aGlzLnJlbmRl
ciA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSwgdmlld3BvcnQgKSB7CisgICAgdmFyIGNsaXBw
aW5nX3BsYW5lc19wYXJzX3ZlcnRleCA9ICIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAgJiYg
ISBkZWZpbmVkKCBQSFlTSUNBTCApICYmICEgZGVmaW5lZCggUEhPTkcgKVxuXHR2YXJ5aW5nIHZl
YzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgaWYgKCBmbGFyZXMu
bGVuZ3RoID09PSAwICkgcmV0dXJuOworICAgIHZhciBjbGlwcGluZ19wbGFuZXNfdmVydGV4ID0g
IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMCAmJiAhIGRlZmluZWQoIFBIWVNJQ0FMICkgJiYg
ISBkZWZpbmVkKCBQSE9ORyApXG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xu
I2VuZGlmXG4iOwogCi0gICAgICAgICAgICB2YXIgdGVtcFBvc2l0aW9uID0gbmV3IFZlY3RvcjMo
KTsKKyAgICB2YXIgY29sb3JfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9DT0xPUlxuXHRkaWZmdXNl
Q29sb3IucmdiICo9IHZDb2xvcjtcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgIHZhciBpbnZBc3Bl
Y3QgPSB2aWV3cG9ydC53IC8gdmlld3BvcnQueiwKLSAgICAgICAgICAgICAgICBoYWxmVmlld3Bv
cnRXaWR0aCA9IHZpZXdwb3J0LnogKiAwLjUsCi0gICAgICAgICAgICAgICAgaGFsZlZpZXdwb3J0
SGVpZ2h0ID0gdmlld3BvcnQudyAqIDAuNTsKKyAgICB2YXIgY29sb3JfcGFyc19mcmFnbWVudCA9
ICIjaWZkZWYgVVNFX0NPTE9SXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWZcbiI7CiAK
LSAgICAgICAgICAgIHZhciBzaXplID0gMTYgLyB2aWV3cG9ydC53LAotICAgICAgICAgICAgICAg
IHNjYWxlID0gbmV3IFZlY3RvcjIoIHNpemUgKiBpbnZBc3BlY3QsIHNpemUgKTsKKyAgICB2YXIg
Y29sb3JfcGFyc192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9DT0xPUlxuXHR2YXJ5aW5nIHZlYzMgdkNv
bG9yO1xuI2VuZGlmIjsKIAotICAgICAgICAgICAgdmFyIHNjcmVlblBvc2l0aW9uID0gbmV3IFZl
Y3RvcjMoIDEsIDEsIDAgKSwKLSAgICAgICAgICAgICAgICBzY3JlZW5Qb3NpdGlvblBpeGVscyA9
IG5ldyBWZWN0b3IyKCAxLCAxICk7CisgICAgdmFyIGNvbG9yX3ZlcnRleCA9ICIjaWZkZWYgVVNF
X0NPTE9SXG5cdHZDb2xvci54eXogPSBjb2xvci54eXo7XG4jZW5kaWYiOwogCi0gICAgICAgICAg
ICB2YXIgdmFsaWRBcmVhID0gbmV3IEJveDIoKTsKKyAgICB2YXIgY29tbW9uID0gIiNkZWZpbmUg
UEkgMy4xNDE1OTI2NTM1OVxuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxOFxuI2RlZmluZSBQSV9I
QUxGIDEuNTcwNzk2MzI2Nzk0OVxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MThc
biNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NFxuI2RlZmluZSBMT0cyIDEuNDQyNjk1
XG4jZGVmaW5lIEVQU0lMT04gMWUtNlxuI2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4w
LCAxLjAgKVxuI2RlZmluZSB3aGl0ZUNvbXBsaW1lbnQoYSkgKCAxLjAgLSBzYXR1cmF0ZSggYSAp
IClcbmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH1cbmZsb2F0
IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfVxuZmxvYXQgcG93NCgg
Y29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfVxuZmxv
YXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZl
YzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7
XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTgu
NTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9
IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XG59XG5zdHJ1Y3Qg
SW5jaWRlbnRMaWdodCB7XG5cdHZlYzMgY29sb3I7XG5cdHZlYzMgZGlyZWN0aW9uO1xuXHRib29s
IHZpc2libGU7XG59O1xuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcblx0dmVjMyBkaXJlY3REaWZm
dXNlO1xuXHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xuXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcblx0
dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xufTtcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcblx0
dmVjMyBwb3NpdGlvbjtcblx0dmVjMyBub3JtYWw7XG5cdHZlYzMgdmlld0Rpcjtcbn07XG52ZWMz
IHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRy
ZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1c
bnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0
cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXgg
KS54eXogKTtcbn1cbnZlYzMgcHJvamVjdE9uUGxhbmUoaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBw
b2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdGZsb2F0IGRpc3RhbmNlID0g
ZG90KCBwbGFuZU5vcm1hbCwgcG9pbnQgLSBwb2ludE9uUGxhbmUgKTtcblx0cmV0dXJuIC0gZGlz
dGFuY2UgKiBwbGFuZU5vcm1hbCArIHBvaW50O1xufVxuZmxvYXQgc2lkZU9mUGxhbmUoIGluIHZl
YzMgcG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xu
XHRyZXR1cm4gc2lnbiggZG90KCBwb2ludCAtIHBvaW50T25QbGFuZSwgcGxhbmVOb3JtYWwgKSAp
O1xufVxudmVjMyBsaW5lUGxhbmVJbnRlcnNlY3QoIGluIHZlYzMgcG9pbnRPbkxpbmUsIGluIHZl
YzMgbGluZURpcmVjdGlvbiwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3Jt
YWwgKSB7XG5cdHJldHVybiBsaW5lRGlyZWN0aW9uICogKCBkb3QoIHBsYW5lTm9ybWFsLCBwb2lu
dE9uUGxhbmUgLSBwb2ludE9uTGluZSApIC8gZG90KCBwbGFuZU5vcm1hbCwgbGluZURpcmVjdGlv
biApICkgKyBwb2ludE9uTGluZTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0
MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBd
LngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBt
WyAyIF0ueSApO1xuXHR0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBd
LnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2Uo
IGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwg
MC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59
XG4iOwogCi0gICAgICAgICAgICB2YWxpZEFyZWEubWluLnNldCggdmlld3BvcnQueCwgdmlld3Bv
cnQueSApOwotICAgICAgICAgICAgdmFsaWRBcmVhLm1heC5zZXQoIHZpZXdwb3J0LnggKyAoIHZp
ZXdwb3J0LnogLSAxNiApLCB2aWV3cG9ydC55ICsgKCB2aWV3cG9ydC53IC0gMTYgKSApOworICAg
IHZhciBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQgPSAiI2lmZGVmIEVOVk1BUF9UWVBFX0NV
QkVfVVZcbiNkZWZpbmUgY3ViZVVWX3RleHR1cmVTaXplICgxMDI0LjApXG5pbnQgZ2V0RmFjZUZy
b21EaXJlY3Rpb24odmVjMyBkaXJlY3Rpb24pIHtcblx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMo
ZGlyZWN0aW9uKTtcblx0aW50IGZhY2UgPSAtMTtcblx0aWYoIGFic0RpcmVjdGlvbi54ID4gYWJz
RGlyZWN0aW9uLnogKSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueSAp
XG5cdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwIDogMztcblx0XHRlbHNlXG5cdFx0
XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxIDogNDtcblx0fVxuXHRlbHNlIHtcblx0XHRp
ZihhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdGZhY2UgPSBkaXJlY3Rp
b24ueiA+IDAuMCA/IDIgOiA1O1xuXHRcdGVsc2Vcblx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+
IDAuMCA/IDEgOiA0O1xuXHR9XG5cdHJldHVybiBmYWNlO1xufVxuI2RlZmluZSBjdWJlVVZfbWF4
TG9kczEgIChsb2cyKGN1YmVVVl90ZXh0dXJlU2l6ZSowLjI1KSAtIDEuMClcbiNkZWZpbmUgY3Vi
ZVVWX3JhbmdlQ2xhbXAgKGV4cDIoKDYuMCAtIDEuMCkgKiAyLjApKVxudmVjMiBNaXBMZXZlbElu
Zm8oIHZlYzMgdmVjLCBmbG9hdCByb3VnaG5lc3NMZXZlbCwgZmxvYXQgcm91Z2huZXNzICkge1xu
XHRmbG9hdCBzY2FsZSA9IGV4cDIoY3ViZVVWX21heExvZHMxIC0gcm91Z2huZXNzTGV2ZWwpO1xu
XHRmbG9hdCBkeFJvdWdobmVzcyA9IGRGZHgocm91Z2huZXNzKTtcblx0ZmxvYXQgZHlSb3VnaG5l
c3MgPSBkRmR5KHJvdWdobmVzcyk7XG5cdHZlYzMgZHggPSBkRmR4KCB2ZWMgKiBzY2FsZSAqIGR4
Um91Z2huZXNzICk7XG5cdHZlYzMgZHkgPSBkRmR5KCB2ZWMgKiBzY2FsZSAqIGR5Um91Z2huZXNz
ICk7XG5cdGZsb2F0IGQgPSBtYXgoIGRvdCggZHgsIGR4ICksIGRvdCggZHksIGR5ICkgKTtcblx0
ZCA9IGNsYW1wKGQsIDEuMCwgY3ViZVVWX3JhbmdlQ2xhbXApO1xuXHRmbG9hdCBtaXBMZXZlbCA9
IDAuNSAqIGxvZzIoZCk7XG5cdHJldHVybiB2ZWMyKGZsb29yKG1pcExldmVsKSwgZnJhY3QobWlw
TGV2ZWwpKTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMyIChsb2cyKGN1YmVVVl90ZXh0dXJl
U2l6ZSowLjI1KSAtIDIuMClcbiNkZWZpbmUgY3ViZVVWX3JjcFRleHR1cmVTaXplICgxLjAgLyBj
dWJlVVZfdGV4dHVyZVNpemUpXG52ZWMyIGdldEN1YmVVVih2ZWMzIGRpcmVjdGlvbiwgZmxvYXQg
cm91Z2huZXNzTGV2ZWwsIGZsb2F0IG1pcExldmVsKSB7XG5cdG1pcExldmVsID0gcm91Z2huZXNz
TGV2ZWwgPiBjdWJlVVZfbWF4TG9kczIgLSAzLjAgPyAwLjAgOiBtaXBMZXZlbDtcblx0ZmxvYXQg
YSA9IDE2LjAgKiBjdWJlVVZfcmNwVGV4dHVyZVNpemU7XG5cdHZlYzIgZXhwMl9wYWNrZWQgPSBl
eHAyKCB2ZWMyKCByb3VnaG5lc3NMZXZlbCwgbWlwTGV2ZWwgKSApO1xuXHR2ZWMyIHJjcF9leHAy
X3BhY2tlZCA9IHZlYzIoIDEuMCApIC8gZXhwMl9wYWNrZWQ7XG5cdGZsb2F0IHBvd1NjYWxlID0g
ZXhwMl9wYWNrZWQueCAqIGV4cDJfcGFja2VkLnk7XG5cdGZsb2F0IHNjYWxlID0gcmNwX2V4cDJf
cGFja2VkLnggKiByY3BfZXhwMl9wYWNrZWQueSAqIDAuMjU7XG5cdGZsb2F0IG1pcE9mZnNldCA9
IDAuNzUqKDEuMCAtIHJjcF9leHAyX3BhY2tlZC55KSAqIHJjcF9leHAyX3BhY2tlZC54O1xuXHRi
b29sIGJSZXMgPSBtaXBMZXZlbCA9PSAwLjA7XG5cdHNjYWxlID0gIGJSZXMgJiYgKHNjYWxlIDwg
YSkgPyBhIDogc2NhbGU7XG5cdHZlYzMgcjtcblx0dmVjMiBvZmZzZXQ7XG5cdGludCBmYWNlID0g
Z2V0RmFjZUZyb21EaXJlY3Rpb24oZGlyZWN0aW9uKTtcblx0ZmxvYXQgcmNwUG93U2NhbGUgPSAx
LjAgLyBwb3dTY2FsZTtcblx0aWYoIGZhY2UgPT0gMCkge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlv
bi54LCAtZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55KTtcblx0XHRvZmZzZXQgPSB2ZWMyKDAuMCtt
aXBPZmZzZXQsMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9m
ZnNldC55IDwgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgPT0g
MSkge1xuXHRcdHIgPSB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnop
O1xuXHRcdG9mZnNldCA9IHZlYzIoc2NhbGUrbWlwT2Zmc2V0LCAwLjc1ICogcmNwUG93U2NhbGUp
O1xuXHRcdG9mZnNldC55ID0gYlJlcyAmJiAob2Zmc2V0LnkgPCAyLjAqYSkgPyBhIDogb2Zmc2V0
Lnk7XG5cdH1cblx0ZWxzZSBpZiggZmFjZSA9PSAyKSB7XG5cdFx0ciA9IHZlYzMoZGlyZWN0aW9u
LnosIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigyLjAqc2Nh
bGUrbWlwT2Zmc2V0LCAwLjc1ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55ID0gYlJlcyAm
JiAob2Zmc2V0LnkgPCAyLjAqYSkgPyBhIDogb2Zmc2V0Lnk7XG5cdH1cblx0ZWxzZSBpZiggZmFj
ZSA9PSAzKSB7XG5cdFx0ciA9IHZlYzMoZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56LCBkaXJlY3Rp
b24ueSk7XG5cdFx0b2Zmc2V0ID0gdmVjMigwLjArbWlwT2Zmc2V0LDAuNSAqIHJjcFBvd1NjYWxl
KTtcblx0XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gMC4wIDogb2Zm
c2V0Lnk7XG5cdH1cblx0ZWxzZSBpZiggZmFjZSA9PSA0KSB7XG5cdFx0ciA9IHZlYzMoZGlyZWN0
aW9uLnksIGRpcmVjdGlvbi54LCAtZGlyZWN0aW9uLnopO1xuXHRcdG9mZnNldCA9IHZlYzIoc2Nh
bGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgPSBiUmVzICYm
IChvZmZzZXQueSA8IDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2Uge1xuXHRc
dHIgPSB2ZWMzKGRpcmVjdGlvbi56LCAtZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55KTtcblx0XHRv
ZmZzZXQgPSB2ZWMyKDIuMCpzY2FsZSttaXBPZmZzZXQsIDAuNSAqIHJjcFBvd1NjYWxlKTtcblx0
XHRvZmZzZXQueSA9IGJSZXMgJiYgKG9mZnNldC55IDwgMi4wKmEpID8gMC4wIDogb2Zmc2V0Lnk7
XG5cdH1cblx0ciA9IG5vcm1hbGl6ZShyKTtcblx0ZmxvYXQgdGV4ZWxPZmZzZXQgPSAwLjUgKiBj
dWJlVVZfcmNwVGV4dHVyZVNpemU7XG5cdHZlYzIgcyA9ICggci55eiAvIGFicyggci54ICkgKyB2
ZWMyKCAxLjAgKSApICogMC41O1xuXHR2ZWMyIGJhc2UgPSBvZmZzZXQgKyB2ZWMyKCB0ZXhlbE9m
ZnNldCApO1xuXHRyZXR1cm4gYmFzZSArIHMgKiAoIHNjYWxlIC0gMi4wICogdGV4ZWxPZmZzZXQg
KTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMzIChsb2cyKGN1YmVVVl90ZXh0dXJlU2l6ZSow
LjI1KSAtIDMuMClcbnZlYzQgdGV4dHVyZUN1YmVVVih2ZWMzIHJlZmxlY3RlZERpcmVjdGlvbiwg
ZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCByb3VnaG5lc3NWYWwgPSByb3VnaG5lc3MqIGN1
YmVVVl9tYXhMb2RzMztcblx0ZmxvYXQgcjEgPSBmbG9vcihyb3VnaG5lc3NWYWwpO1xuXHRmbG9h
dCByMiA9IHIxICsgMS4wO1xuXHRmbG9hdCB0ID0gZnJhY3Qocm91Z2huZXNzVmFsKTtcblx0dmVj
MiBtaXBJbmZvID0gTWlwTGV2ZWxJbmZvKHJlZmxlY3RlZERpcmVjdGlvbiwgcjEsIHJvdWdobmVz
cyk7XG5cdGZsb2F0IHMgPSBtaXBJbmZvLnk7XG5cdGZsb2F0IGxldmVsMCA9IG1pcEluZm8ueDtc
blx0ZmxvYXQgbGV2ZWwxID0gbGV2ZWwwICsgMS4wO1xuXHRsZXZlbDEgPSBsZXZlbDEgPiA1LjAg
PyA1LjAgOiBsZXZlbDE7XG5cdGxldmVsMCArPSBtaW4oIGZsb29yKCBzICsgMC41ICksIDUuMCAp
O1xuXHR2ZWMyIHV2XzEwID0gZ2V0Q3ViZVVWKHJlZmxlY3RlZERpcmVjdGlvbiwgcjEsIGxldmVs
MCk7XG5cdHZlYzQgY29sb3IxMCA9IGVudk1hcFRleGVsVG9MaW5lYXIodGV4dHVyZTJEKGVudk1h
cCwgdXZfMTApKTtcblx0dmVjMiB1dl8yMCA9IGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24s
IHIyLCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMjAgPSBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1
cmUyRChlbnZNYXAsIHV2XzIwKSk7XG5cdHZlYzQgcmVzdWx0ID0gbWl4KGNvbG9yMTAsIGNvbG9y
MjAsIHQpO1xuXHRyZXR1cm4gdmVjNChyZXN1bHQucmdiLCAxLjApO1xufVxuI2VuZGlmXG4iOwog
Ci0gICAgICAgICAgICBpZiAoIHByb2dyYW0gPT09IHVuZGVmaW5lZCApIHsKKyAgICB2YXIgZGVm
YXVsdG5vcm1hbF92ZXJ0ZXggPSAidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJp
eCAqIG9iamVjdE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9ybWFs
ID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAgIGlu
aXQoKTsKKyAgICB2YXIgZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4ID0gIiNpZmRlZiBVU0Vf
RElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0
dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFj
ZW1lbnRCaWFzO1xuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICB9CisgICAgdmFyIGRpc3BsYWNl
bWVudG1hcF92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dHJhbnNmb3Jt
ZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICggdGV4dHVyZTJEKCBkaXNwbGFjZW1l
bnRNYXAsIHV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xu
I2VuZGlmXG4iOwogCi0gICAgICAgICAgICBnbC51c2VQcm9ncmFtKCBwcm9ncmFtICk7CisgICAg
dmFyIGVtaXNzaXZlbWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfRU1JU1NJVkVNQVBcblx0dmVj
NCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7XG5cdGVtaXNz
aXZlQ29sb3IucmdiID0gZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyKCBlbWlzc2l2ZUNvbG9yICku
cmdiO1xuXHR0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XG4jZW5k
aWZcbiI7CiAKLSAgICAgICAgICAgIHN0YXRlLmluaXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAg
ICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIGF0dHJpYnV0ZXMudmVydGV4ICk7Ci0gICAgICAgICAg
ICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIGF0dHJpYnV0ZXMudXYgKTsKLSAgICAgICAgICAgIHN0
YXRlLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7CisgICAgdmFyIGVtaXNzaXZlbWFwX3BhcnNf
ZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBl
bWlzc2l2ZU1hcDtcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFs
bCBsZW5zIGZsYXJlcyB0byB1cGRhdGUgdGhlaXIgb2NjbHVzaW9uIGFuZCBwb3NpdGlvbnMKLSAg
ICAgICAgICAgIC8vIHNldHVwIGdsIGFuZCBjb21tb24gdXNlZCBhdHRyaWJzL3VuaWZvcm1zCisg
ICAgdmFyIGVuY29kaW5nc19mcmFnbWVudCA9ICIgIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0
cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApO1xuIjsKIAotICAgICAgICAgICAgZ2wudW5pZm9ybTFp
KCB1bmlmb3Jtcy5vY2NsdXNpb25NYXAsIDAgKTsKLSAgICAgICAgICAgIGdsLnVuaWZvcm0xaSgg
dW5pZm9ybXMubWFwLCAxICk7CisgICAgdmFyIGVuY29kaW5nc19wYXJzX2ZyYWdtZW50ID0gIlxu
dmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xu
fVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3Rv
ciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUueHl6LCB2ZWMzKCBnYW1tYUZhY3RvciAp
ICksIHZhbHVlLncgKTtcbn1cbnZlYzQgTGluZWFyVG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4g
ZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnh5eiwgdmVj
MyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS53ICk7XG59XG52ZWM0IHNSR0JUb0xpbmVh
ciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2Ig
KiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFs
dWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZl
YzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUudyApO1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGlu
IHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMz
KCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIs
IHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICks
IHZhbHVlLncgKTtcbn1cbnZlYzQgUkdCRVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRy
ZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMiggdmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwg
MS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQg
bWF4Q29tcG9uZW50ID0gbWF4KCBtYXgoIHZhbHVlLnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xu
XHRmbG9hdCBmRXhwID0gY2xhbXAoIGNlaWwoIGxvZzIoIG1heENvbXBvbmVudCApICksIC0xMjgu
MCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBm
RXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2
YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS54eXogKiB2
YWx1ZS53ICogbWF4UmFuZ2UsIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQg
dmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZhbHVl
LngsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IE0gICAgICA9IGNsYW1wKCBt
YXhSR0IgLyBtYXhSYW5nZSwgMC4wLCAxLjAgKTtcblx0TSAgICAgICAgICAgID0gY2VpbCggTSAq
IDI1NS4wICkgLyAyNTUuMDtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvICggTSAqIG1heFJh
bmdlICksIE0gKTtcbn1cbnZlYzQgUkdCRFRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9h
dCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggKCBtYXhSYW5nZSAv
IDI1NS4wICkgLyB2YWx1ZS5hICksIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQkQoIGluIHZl
YzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgPSBtYXgoIHZh
bHVlLngsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IEQgICAgICA9IG1heCgg
bWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHREICAgICAgICAgICAgPSBtaW4oIGZsb29yKCBE
ICkgLyAyNTUuMCwgMS4wICk7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiAoIEQgKiAoIDI1
NS4wIC8gbWF4UmFuZ2UgKSApLCBEICk7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZNID0gbWF0Mygg
MC4yMjA5LCAwLjMzOTAsIDAuNDE4NCwgMC4xMTM4LCAwLjY3ODAsIDAuNzMxOSwgMC4wMTAyLCAw
LjExMzAsIDAuMjk2OSApO1xudmVjNCBMaW5lYXJUb0xvZ0x1diggaW4gdmVjNCB2YWx1ZSApICB7
XG5cdHZlYzMgWHBfWV9YWVpwID0gdmFsdWUucmdiICogY0xvZ0x1dk07XG5cdFhwX1lfWFlacCA9
IG1heChYcF9ZX1hZWnAsIHZlYzMoMWUtNiwgMWUtNiwgMWUtNikpO1xuXHR2ZWM0IHZSZXN1bHQ7
XG5cdHZSZXN1bHQueHkgPSBYcF9ZX1hZWnAueHkgLyBYcF9ZX1hZWnAuejtcblx0ZmxvYXQgTGUg
PSAyLjAgKiBsb2cyKFhwX1lfWFlacC55KSArIDEyNy4wO1xuXHR2UmVzdWx0LncgPSBmcmFjdChM
ZSk7XG5cdHZSZXN1bHQueiA9IChMZSAtIChmbG9vcih2UmVzdWx0LncqMjU1LjApKS8yNTUuMCkv
MjU1LjA7XG5cdHJldHVybiB2UmVzdWx0O1xufVxuY29uc3QgbWF0MyBjTG9nTHV2SW52ZXJzZU0g
PSBtYXQzKCA2LjAwMTQsIC0yLjcwMDgsIC0xLjc5OTYsIC0xLjMzMjAsIDMuMTAyOSwgLTUuNzcy
MSwgMC4zMDA4LCAtMS4wODgyLCA1LjYyNjggKTtcbnZlYzQgTG9nTHV2VG9MaW5lYXIoIGluIHZl
YzQgdmFsdWUgKSB7XG5cdGZsb2F0IExlID0gdmFsdWUueiAqIDI1NS4wICsgdmFsdWUudztcblx0
dmVjMyBYcF9ZX1hZWnA7XG5cdFhwX1lfWFlacC55ID0gZXhwMigoTGUgLSAxMjcuMCkgLyAyLjAp
O1xuXHRYcF9ZX1hZWnAueiA9IFhwX1lfWFlacC55IC8gdmFsdWUueTtcblx0WHBfWV9YWVpwLngg
PSB2YWx1ZS54ICogWHBfWV9YWVpwLno7XG5cdHZlYzMgdlJHQiA9IFhwX1lfWFlacC5yZ2IgKiBj
TG9nTHV2SW52ZXJzZU07XG5cdHJldHVybiB2ZWM0KCBtYXgodlJHQiwgMC4wKSwgMS4wICk7XG59
XG4iOwogCi0gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHZlcnRl
eEJ1ZmZlciApOwotICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlciggYXR0cmlidXRl
cy52ZXJ0ZXgsIDIsIGdsLkZMT0FULCBmYWxzZSwgMiAqIDgsIDAgKTsKLSAgICAgICAgICAgIGds
LnZlcnRleEF0dHJpYlBvaW50ZXIoIGF0dHJpYnV0ZXMudXYsIDIsIGdsLkZMT0FULCBmYWxzZSwg
MiAqIDgsIDggKTsKKyAgICB2YXIgZW52bWFwX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfRU5WTUFQ
XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAg
KSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6
ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdHZlYzMgd29ybGROb3Jt
YWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0
XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0g
cmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRc
dHZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwg
cmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbHNlXG5cdFx0dmVjMyByZWZsZWN0
VmVjID0gdlJlZmxlY3Q7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRc
dHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICog
cmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQ
X1RZUEVfRVFVSVJFQyApXG5cdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRyZWZsZWN0VmVjID0gbm9y
bWFsaXplKCByZWZsZWN0VmVjICk7XG5cdFx0c2FtcGxlVVYueSA9IGFzaW4oIGNsYW1wKCByZWZs
ZWN0VmVjLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTtcblx0XHRzYW1w
bGVVVi54ID0gYXRhbiggcmVmbGVjdFZlYy56LCByZWZsZWN0VmVjLnggKSAqIFJFQ0lQUk9DQUxf
UEkyICsgMC41O1xuXHRcdHZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgc2FtcGxl
VVYgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfU1BIRVJFIClcblx0XHRyZWZsZWN0
VmVjID0gbm9ybWFsaXplKCByZWZsZWN0VmVjICk7XG5cdFx0dmVjMyByZWZsZWN0VmlldyA9IG5v
cm1hbGl6ZSggKCB2aWV3TWF0cml4ICogdmVjNCggcmVmbGVjdFZlYywgMC4wICkgKS54eXogKyB2
ZWMzKCAwLjAsIDAuMCwgMS4wICkgKTtcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZTJEKCBl
bnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsgMC41ICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBl
bnZDb2xvciA9IHZlYzQoIDAuMCApO1xuXHQjZW5kaWZcblx0ZW52Q29sb3IgPSBlbnZNYXBUZXhl
bFRvTGluZWFyKCBlbnZDb2xvciApO1xuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZ
XG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAq
IGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxp
ZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4
KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0
aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0
Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2
aXR5O1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcigg
Z2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsZW1lbnRCdWZmZXIgKTsKKyAgICB2YXIgZW52bWFw
X3BhcnNfZnJhZ21lbnQgPSAiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBQ
SFlTSUNBTCApXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHR1bmlmb3JtIGZsb2F0
IGVudk1hcEludGVuc2l0eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmICEgZGVm
aW5lZCggUEhZU0lDQUwgKSAmJiAoIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCgg
VVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgKVxuXHRcdHZhcnlpbmcgdmVjMyB2
V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0
dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBzYW1wbGVy
MkQgZW52TWFwO1xuXHQjZW5kaWZcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHR1bmlm
b3JtIGludCBtYXhNaXBMZXZlbDtcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVm
aW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkgfHwgZGVmaW5lZCggUEhZ
U0lDQUwgKVxuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRc
dHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CiAKLSAgICAgICAg
ICAgIHN0YXRlLmRpc2FibGUoIGdsLkNVTExfRkFDRSApOwotICAgICAgICAgICAgc3RhdGUuYnVm
ZmVycy5kZXB0aC5zZXRNYXNrKCBmYWxzZSApOworICAgIHZhciBlbnZtYXBfcGFyc192ZXJ0ZXgg
PSAiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVm
aW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2YXJ5aW5nIHZl
YzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xu
XHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsK
IAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gZmxhcmVzLmxlbmd0aDsgaSA8IGw7
IGkgKysgKSB7CisgICAgdmFyIGVudm1hcF92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9FTlZNQVBcblx0
I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8
IGRlZmluZWQoIFBIT05HIClcblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6
O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9z
aXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR2ZWMzIHdvcmxkTm9ybWFsID0gaW52
ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTtc
blx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dlJlZmxlY3QgPSByZWZs
ZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dlJl
ZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25S
YXRpbyApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAg
ICAgIHNpemUgPSAxNiAvIHZpZXdwb3J0Lnc7Ci0gICAgICAgICAgICAgICAgc2NhbGUuc2V0KCBz
aXplICogaW52QXNwZWN0LCBzaXplICk7CisgICAgdmFyIGZvZ192ZXJ0ZXggPSAiXG4jaWZkZWYg
VVNFX0ZPR1xuZm9nRGVwdGggPSAtbXZQb3NpdGlvbi56O1xuI2VuZGlmIjsKIAotICAgICAgICAg
ICAgICAgIC8vIGNhbGMgb2JqZWN0IHNjcmVlbiBwb3NpdGlvbgorICAgIHZhciBmb2dfcGFyc192
ZXJ0ZXggPSAiI2lmZGVmIFVTRV9GT0dcbiAgdmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcbiNlbmRp
ZlxuIjsKIAotICAgICAgICAgICAgICAgIHZhciBmbGFyZSA9IGZsYXJlc1sgaSBdOworICAgIHZh
ciBmb2dfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0
ZmxvYXQgZm9nRmFjdG9yID0gd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBm
b2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRc
dGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGgg
KTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2Is
IGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAgIHRl
bXBQb3NpdGlvbi5zZXQoIGZsYXJlLm1hdHJpeFdvcmxkLmVsZW1lbnRzWyAxMiBdLCBmbGFyZS5t
YXRyaXhXb3JsZC5lbGVtZW50c1sgMTMgXSwgZmxhcmUubWF0cml4V29ybGQuZWxlbWVudHNbIDE0
IF0gKTsKKyAgICB2YXIgZm9nX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9GT0dcblx0dW5p
Zm9ybSB2ZWMzIGZvZ0NvbG9yO1xuXHR2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoO1xuXHQjaWZkZWYg
Rk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5p
Zm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZc
biNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAgIHRlbXBQb3NpdGlvbi5hcHBseU1hdHJpeDQo
IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTsKLSAgICAgICAgICAgICAgICB0ZW1wUG9zaXRp
b24uYXBwbHlNYXRyaXg0KCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCApOworICAgIHZhciBncmFk
aWVudG1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBUT09OXG5cdHVuaWZvcm0gc2FtcGxlcjJE
IGdyYWRpZW50TWFwO1xuXHR2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWws
IHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7XG5cdFx0ZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwg
bGlnaHREaXJlY3Rpb24gKTtcblx0XHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAw
LjUsIDAuMCApO1xuXHRcdCNpZmRlZiBVU0VfR1JBRElFTlRNQVBcblx0XHRcdHJldHVybiB0ZXh0
dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnJnYjtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJu
ICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTtcblx0XHQjZW5k
aWZcblx0fVxuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAgLy8gc2V0dXAgYXJyYXlzIGZv
ciBnbCBwcm9ncmFtcworICAgIHZhciBsaWdodG1hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX0xJ
R0hUTUFQXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBQSSAqIHRleHR1cmUy
RCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZlxuIjsK
IAotICAgICAgICAgICAgICAgIHNjcmVlblBvc2l0aW9uLmNvcHkoIHRlbXBQb3NpdGlvbiApOwor
ICAgIHZhciBsaWdodG1hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfTElHSFRNQVBcblx0
dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRl
bnNpdHk7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICAgICAgLy8gaG9yaXpvbnRhbCBhbmQgdmVy
dGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHBpeGVscyB0
byBjb3B5CisgICAgdmFyIGxpZ2h0c19sYW1iZXJ0X3ZlcnRleCA9ICJ2ZWMzIGRpZmZ1c2UgPSB2
ZWMzKCAxLjAgKTtcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlv
biA9IG12UG9zaXRpb24ueHl6O1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zv
cm1lZE5vcm1hbCApO1xuZ2VvbWV0cnkudmlld0RpciA9IG5vcm1hbGl6ZSggLW12UG9zaXRpb24u
eHl6ICk7XG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcbmJhY2tHZW9tZXRyeS5wb3Np
dGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRy
eS5ub3JtYWw7XG5iYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG52TGln
aHRGcm9udCA9IHZlYzMoIDAuMCApO1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2TGlnaHRCYWNr
ID0gdmVjMyggMC4wICk7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG5mbG9h
dCBkb3ROTDtcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuI2lmIE5VTV9QT0lOVF9M
SUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwg
TlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRp
YW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90
TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0
ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2
TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVz
ZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRl
KCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxu
I2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5c
dGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRT
cG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJl
Y3RMaWdodCApO1xuXHRcdGRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0
LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IFBJICogZGlyZWN0
TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJl
Y3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxp
Z2h0QmFjayArPSBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7
XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJh
Z21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBp
ICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rp
b25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRv
dCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RM
aWdodENvbG9yX0RpZmZ1c2UgPSBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZy
b250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRc
dCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC1kb3RO
TCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZc
biNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICgg
aW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZMaWdodEZyb250
ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwg
Z2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9
IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFj
a0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAg
ICAgIHNjcmVlblBvc2l0aW9uUGl4ZWxzLnggPSB2aWV3cG9ydC54ICsgKCBzY3JlZW5Qb3NpdGlv
bi54ICogaGFsZlZpZXdwb3J0V2lkdGggKSArIGhhbGZWaWV3cG9ydFdpZHRoIC0gODsKLSAgICAg
ICAgICAgICAgICBzY3JlZW5Qb3NpdGlvblBpeGVscy55ID0gdmlld3BvcnQueSArICggc2NyZWVu
UG9zaXRpb24ueSAqIGhhbGZWaWV3cG9ydEhlaWdodCApICsgaGFsZlZpZXdwb3J0SGVpZ2h0IC0g
ODsKKyAgICB2YXIgbGlnaHRzX3BhcnNfYmVnaW4gPSAidW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdo
dENvbG9yO1xudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFt
YmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xv
cjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAq
PSBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5VTV9ESVJfTElH
SFRTID4gMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247
XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7
XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0fTtc
blx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJ
R0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25z
dCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJp
Y0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRc
dGRpcmVjdExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RM
aWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0XHRkaXJlY3RM
aWdodC52aXNpYmxlID0gdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+
IDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBj
b2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRpbnQgc2hh
ZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRc
dHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdGZs
b2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGln
aHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RMaWdodElycmFk
aWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmlj
Q29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0
dmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xu
XHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZs
b2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJlY3RMaWdodC5j
b2xvciA9IHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gcHVuY3R1
YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgcG9pbnRM
aWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2li
bGUgPSAoIGRpcmVjdExpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7XG5cdH1cbiNlbmRpZlxu
I2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5cdFx0dmVjMyBw
b3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0
IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7XG5cdFx0Zmxv
YXQgcGVudW1icmFDb3M7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xu
XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5c
dHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHR2b2lk
IGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGln
aHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0
IGRpcmVjdExpZ2h0ICApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24g
LSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxp
emUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9y
ICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgPSBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3Bv
dExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgPiBzcG90TGlnaHQuY29uZUNv
cyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29u
ZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGln
aHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBz
cG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGln
aHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRc
dGRpcmVjdExpZ2h0LnZpc2libGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RM
aWdodC5jb2xvciA9IHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSA9IGZh
bHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5c
dHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRp
b247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1
bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlm
b3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07
XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGln
aHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBn
cm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxp
Z2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRp
YW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0
cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdCggZ2VvbWV0cnku
bm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWln
aHQgPSAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlM
aWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCAp
O1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5j
ZSAqPSBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlm
XG4iOwogCi0gICAgICAgICAgICAgICAgLy8gc2NyZWVuIGN1bGwKKyAgICB2YXIgbGlnaHRzX3Bh
cnNfbWFwcyA9ICIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFBIWVNJQ0FM
IClcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9t
ZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0
dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5v
cm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2
ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9y
bWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52
TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1h
eE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0
ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0
XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52TWFwVGV4ZWxUb0xpbmVhcigg
ZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9V
ViApXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFs
LngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1
YmVVViggcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9y
ID0gdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3Iu
cmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwo
IGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhN
SVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciA9IGZsb2F0KCBtYXhNSVBM
ZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCA9IG1heE1JUExldmVsU2NhbGFyICsg
MC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEu
MCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVs
U2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29u
c3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGlu
aW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBF
TlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCAt
Z2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZl
YzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3Jt
YWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgPSBpbnZl
cnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0Zmxv
YXQgc3BlY3VsYXJNSVBMZXZlbCA9IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNz
RXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0
XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjID0gdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMu
eCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0
XHR2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZs
ZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVu
dk1hcENvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxh
ck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiA9IGVudk1h
cFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVO
Vk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgPSB2ZWMzKCBm
bGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVu
dk1hcENvbG9yID0gdGV4dHVyZUN1YmVVVihxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRU
b0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50KSk7XG5cdFx0I2VsaWYgZGVmaW5l
ZCggRU5WTUFQX1RZUEVfRVFVSVJFQyApXG5cdFx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdFx0c2Ft
cGxlVVYueSA9IGFzaW4oIGNsYW1wKCByZWZsZWN0VmVjLnksIC0gMS4wLCAxLjAgKSApICogUkVD
SVBST0NBTF9QSSArIDAuNTtcblx0XHRcdHNhbXBsZVVWLnggPSBhdGFuKCByZWZsZWN0VmVjLnos
IHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0XHQjaWZkZWYgVEVY
VFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkRMb2RFWFQo
IGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0
XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlMkQoIGVudk1hcCwgc2FtcGxlVVYsIHNwZWN1
bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiID0gZW52
TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCgg
RU5WTUFQX1RZUEVfU1BIRVJFIClcblx0XHRcdHZlYzMgcmVmbGVjdFZpZXcgPSBub3JtYWxpemUo
ICggdmlld01hdHJpeCAqIHZlYzQoIHJlZmxlY3RWZWMsIDAuMCApICkueHl6ICsgdmVjMyggMC4w
LDAuMCwxLjAgKSApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0
IGVudk1hcENvbG9yID0gdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICog
MC41ICsgMC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0
IGVudk1hcENvbG9yID0gdGV4dHVyZTJEKCBlbnZNYXAsIHJlZmxlY3RWaWV3Lnh5ICogMC41ICsg
MC41LCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9y
LnJnYiA9IGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbmRp
ZlxuXHRcdHJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cbiNl
bmRpZlxuIjsKIAotICAgICAgICAgICAgICAgIGlmICggdmFsaWRBcmVhLmNvbnRhaW5zUG9pbnQo
IHNjcmVlblBvc2l0aW9uUGl4ZWxzICkgPT09IHRydWUgKSB7CisgICAgdmFyIGxpZ2h0c19waG9u
Z19mcmFnbWVudCA9ICJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZm
dXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNw
ZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7XG5tYXRlcmlh
bC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtcbiI7CiAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gc2F2ZSBjdXJyZW50IFJHQiB0byB0ZW1wIHRleHR1cmUKKyAgICB2YXIgbGln
aHRzX3Bob25nX3BhcnNfZnJhZ21lbnQgPSAidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4j
aWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG5zdHJ1
Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjM1x0ZGlmZnVzZUNvbG9yO1xuXHR2ZWMzXHRz
cGVjdWxhckNvbG9yO1xuXHRmbG9hdFx0c3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0XHRzcGVj
dWxhclN0cmVuZ3RoO1xufTtcbnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIElu
Y2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0
cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVk
TGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdCNpZmRlZiBUT09OXG5cdFx0dmVjMyBpcnJhZGlh
bmNlID0gZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0
LmRpcmVjdGlvbiApICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgZG90
TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlv
biApICk7XG5cdFx0dmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtc
blx0I2VuZGlmXG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFk
aWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9
IGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9y
ICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRG
X1NwZWN1bGFyX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3Bl
Y3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1
bGFyU3RyZW5ndGg7XG59XG52b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25z
dCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnks
IGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGln
aHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAr
PSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xv
ciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4j
ZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9u
Z1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMClcbiI7CiAK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggZ2wuVEVYVFVSRTAgKTsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIGdsLlRFWFRVUkVfMkQsIG51
bGwgKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggZ2wuVEVYVFVS
RTEgKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIGdsLlRFWFRVUkVf
MkQsIHRlbXBUZXh0dXJlICk7Ci0gICAgICAgICAgICAgICAgICAgIGdsLmNvcHlUZXhJbWFnZTJE
KCBnbC5URVhUVVJFXzJELCAwLCBnbC5SR0IsIHNjcmVlblBvc2l0aW9uUGl4ZWxzLngsIHNjcmVl
blBvc2l0aW9uUGl4ZWxzLnksIDE2LCAxNiwgMCApOworICAgIHZhciBsaWdodHNfcGh5c2ljYWxf
ZnJhZ21lbnQgPSAiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VD
b2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xubWF0
ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgPSBjbGFtcCggcm91Z2huZXNzRmFjdG9yLCAwLjA0LCAx
LjAgKTtcbiNpZmRlZiBTVEFOREFSRFxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2
ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1l
dGFsbmVzc0ZhY3RvciApO1xuI2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCgg
dmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rpdml0eSAp
ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5jbGVh
ckNvYXQgPSBzYXR1cmF0ZSggY2xlYXJDb2F0ICk7XHRtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5l
c3MgPSBjbGFtcCggY2xlYXJDb2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtcbiNlbmRpZlxuIjsK
IAorICAgIHZhciBsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudCA9ICJzdHJ1Y3QgUGh5c2lj
YWxNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyUm91
Z2huZXNzO1xuXHR2ZWMzXHRzcGVjdWxhckNvbG9yO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0
ZmxvYXQgY2xlYXJDb2F0O1xuXHRcdGZsb2F0IGNsZWFyQ29hdFJvdWdobmVzcztcblx0I2VuZGlm
XG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUg
REVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhckNvYXRESFJBcHBy
b3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5c
dHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQ
RUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAx
LjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAw
XG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxp
Z2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNv
bnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJl
ZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRc
dHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdl
b21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0
aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0
dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGln
aHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0
ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0
cmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRy
ZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0
cmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRc
dHJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0
XHR2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZl
YzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgPSB0ZXh0dXJlMkQo
IGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiA9IG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAw
LCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56
LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3Vs
YXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAp
ICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29s
b3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBt
SW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBs
aWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWws
IHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5k
aWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVj
dExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlz
aWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdo
dCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRp
cmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGly
ZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRc
dGlycmFkaWFuY2UgKj0gUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0Zmxv
YXQgY2xlYXJDb2F0REhSID0gbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94
KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0Zmxv
YXQgY2xlYXJDb2F0REhSID0gMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0
U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1Nw
ZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9y
LCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RE
aWZmdXNlICs9ICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZm
dXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJE
XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVy
aWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnks
IHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0
Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2lj
YWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBn
ZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVj
dGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlm
ZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1
c2VDb2xvciApO1xufVxudm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBp
biB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBp
biBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1h
dGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmbmRl
ZiBTVEFOREFSRFxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9y
bWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRmbG9hdCBkb3ROTCA9IGRvdE5WO1xuXHRc
dGZsb2F0IGNsZWFyQ29hdERIUiA9IG1hdGVyaWFsLmNsZWFyQ29hdCAqIGNsZWFyQ29hdERIUkFw
cHJveCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzLCBkb3ROTCApO1xuXHQjZWxzZVxuXHRc
dGZsb2F0IGNsZWFyQ29hdERIUiA9IDAuMDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0Lmlu
ZGlyZWN0U3BlY3VsYXIgKz0gKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIHJhZGlhbmNlICogQlJE
Rl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNv
bG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5c
dFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBjbGVhckNvYXRSYWRpYW5jZSAq
IG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9t
ZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVh
ckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0
UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJl
Y3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0lu
ZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJF
X0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5l
c3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0
ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxp
bm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBv
bmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxh
ck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRP
Y2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRl
KCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNz
IC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn1cbiI7CiAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gcmVuZGVyIHBpbmsgcXVhZAorICAgIHZhciBsaWdodHNfZnJhZ21lbnRf
YmVnaW4gPSAiXG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24g
PSAtIHZWaWV3UG9zaXRpb247XG5nZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XG5nZW9tZXRyeS52
aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5JbmNpZGVudExpZ2h0IGRpcmVj
dExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJl
Y3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0
Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2lu
dExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRp
YW5jZSggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVT
RV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBwb2ludExp
Z2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRQb2ludFNoYWRvdyggcG9p
bnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNo
YWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBd
LCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFy
ICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0
cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiAoIE5VTV9T
UE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3Bv
dExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5V
TV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07
XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0LCBnZW9tZXRyeSwg
ZGlyZWN0TGlnaHQgKTtcblx0XHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHRcdGRpcmVjdExpZ2h0
LmNvbG9yICo9IGFsbCggYnZlYzIoIHNwb3RMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2li
bGUgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dN
YXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNw
b3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBk
aXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4j
ZW5kaWZcbiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCAp
XG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxf
bG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0
XHRkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJl
Y3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnks
IGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdo
dC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdywgZGlyZWN0TGln
aHQudmlzaWJsZSApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRp
cmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFz
LCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRb
IGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdl
b21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBO
VU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEg
KVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bc
blx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5c
dFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1Jl
Y3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0
ICk7XG5cdH1cbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZl
YzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENv
bG9yICk7XG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKVxuXHRcdCNwcmFnbWEgdW5yb2xs
X2xvb3Bcblx0XHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7
XG5cdFx0XHRpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlz
cGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4j
aWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgPSB2ZWMz
KCAwLjAgKTtcblx0dmVjMyBjbGVhckNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuI2VuZGlm
XG4iOwogCi0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xaSggdW5pZm9ybXMucmVuZGVy
VHlwZSwgMCApOwotICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoIHVuaWZvcm1zLnNj
YWxlLCBzY2FsZS54LCBzY2FsZS55ICk7Ci0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0z
ZiggdW5pZm9ybXMuc2NyZWVuUG9zaXRpb24sIHNjcmVlblBvc2l0aW9uLngsIHNjcmVlblBvc2l0
aW9uLnksIHNjcmVlblBvc2l0aW9uLnogKTsKKyAgICB2YXIgbGlnaHRzX2ZyYWdtZW50X21hcHMg
PSAiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdCNpZmRlZiBVU0VfTElHSFRN
QVBcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZV
djIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09S
UkVDVF9MSUdIVFNcblx0XHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0XHQjZW5kaWZc
blx0XHRpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcblx0I2VuZGlmXG5cdCNpZiBk
ZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUEhZU0lDQUwgKSAmJiBkZWZpbmVkKCBF
TlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJbmRp
cmVjdElycmFkaWFuY2UoIGdlb21ldHJ5LCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRp
ZlxuI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1
bGFyIClcblx0cmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21l
dHJ5LCBNYXRlcmlhbF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCBtYXhNaXBM
ZXZlbCApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0Y2xlYXJDb2F0UmFkaWFuY2UgKz0gZ2V0
TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LCBNYXRlcmlhbF9DbGVhckNvYXRf
Qmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSwgbWF4TWlwTGV2ZWwgKTtcblx0I2Vu
ZGlmXG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZGlzYWJsZSggZ2wu
QkxFTkQgKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZW5hYmxlKCBnbC5ERVBUSF9URVNU
ICk7CisgICAgdmFyIGxpZ2h0c19mcmFnbWVudF9lbmQgPSAiI2lmIGRlZmluZWQoIFJFX0luZGly
ZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnks
IG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5k
aXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBjbGVhckNv
YXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlm
XG4iOwogCi0gICAgICAgICAgICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyggZ2wuVFJJQU5HTEVT
LCA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApOworICAgIHZhciBsb2dkZXB0aGJ1Zl9mcmFnbWVu
dCA9ICIjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RF
UFRIQlVGX0VYVCApXG5cdGdsX0ZyYWdEZXB0aEVYVCA9IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxv
Z0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiOwogCisgICAgdmFyIGxvZ2RlcHRoYnVmX3BhcnNf
ZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHR1bmlmb3JtIGZsb2F0IGxvZ0Rl
cHRoQnVmRkM7XG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9h
dCB2RnJhZ0RlcHRoO1xuXHQjZW5kaWZcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAgICAg
ICAvLyBjb3B5IHJlc3VsdCB0byBvY2NsdXNpb25NYXAKKyAgICB2YXIgbG9nZGVwdGhidWZfcGFy
c192ZXJ0ZXggPSAiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRI
QlVGX0VYVFxuXHRcdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcblx0I2VuZGlmXG5cdHVuaWZv
cm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuYWN0aXZlVGV4dHVyZSggZ2wuVEVYVFVSRTAgKTsKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuYmluZFRleHR1cmUoIGdsLlRFWFRVUkVfMkQsIG9jY2x1c2lvblRleHR1cmUgKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2wuY29weVRleEltYWdlMkQoIGdsLlRFWFRVUkVfMkQsIDAsIGds
LlJHQkEsIHNjcmVlblBvc2l0aW9uUGl4ZWxzLngsIHNjcmVlblBvc2l0aW9uUGl4ZWxzLnksIDE2
LCAxNiwgMCApOworICAgIHZhciBsb2dkZXB0aGJ1Zl92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9MT0dE
RVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggPSAx
LjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogPSBsb2cyKCBt
YXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEu
MDtcblx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdCNlbmRpZlxuI2VuZGlm
XG4iOwogCisgICAgdmFyIG1hcF9mcmFnbWVudCA9ICIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHRl
eGVsQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdHRleGVsQ29sb3IgPSBtYXBUZXhl
bFRvTGluZWFyKCB0ZXhlbENvbG9yICk7XG5cdGRpZmZ1c2VDb2xvciAqPSB0ZXhlbENvbG9yO1xu
I2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgZ3JhcGhpY3MKKyAg
ICB2YXIgbWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1w
bGVyMkQgbWFwO1xuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0x
aSggdW5pZm9ybXMucmVuZGVyVHlwZSwgMSApOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5k
aXNhYmxlKCBnbC5ERVBUSF9URVNUICk7CisgICAgdmFyIG1hcF9wYXJ0aWNsZV9mcmFnbWVudCA9
ICIjaWZkZWYgVVNFX01BUFxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1Bv
aW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcblx0dmVjNCBtYXBU
ZXhlbCA9IHRleHR1cmUyRCggbWFwLCB1diApO1xuXHRkaWZmdXNlQ29sb3IgKj0gbWFwVGV4ZWxU
b0xpbmVhciggbWFwVGV4ZWwgKTtcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5hY3RpdmVUZXh0dXJlKCBnbC5URVhUVVJFMSApOwotICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5iaW5kVGV4dHVyZSggZ2wuVEVYVFVSRV8yRCwgdGVtcFRleHR1cmUgKTsKLSAgICAgICAg
ICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKCBnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVE
X1NIT1JULCAwICk7CisgICAgdmFyIG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50ID0gIiNpZmRl
ZiBVU0VfTUFQXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcblx0dW5pZm9ybSBzYW1wbGVy
MkQgbWFwO1xuI2VuZGlmXG4iOwogCisgICAgdmFyIG1ldGFsbmVzc21hcF9mcmFnbWVudCA9ICJm
bG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7XG4jaWZkZWYgVVNFX01FVEFMTkVTU01B
UFxuXHR2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiAp
O1xuXHRtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcbiNlbmRpZlxuIjsKIAot
ICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgb2JqZWN0IHBvc2l0aW9ucworICAgIHZhciBt
ZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudCA9ICIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1
bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICAg
ICAgICAgIGZsYXJlLnBvc2l0aW9uU2NyZWVuLmNvcHkoIHNjcmVlblBvc2l0aW9uICk7CisgICAg
dmFyIG1vcnBobm9ybWFsX3ZlcnRleCA9ICIjaWZkZWYgVVNFX01PUlBITk9STUFMU1xuXHRvYmpl
Y3ROb3JtYWwgKz0gKCBtb3JwaE5vcm1hbDAgLSBub3JtYWwgKSAqIG1vcnBoVGFyZ2V0SW5mbHVl
bmNlc1sgMCBdO1xuXHRvYmplY3ROb3JtYWwgKz0gKCBtb3JwaE5vcm1hbDEgLSBub3JtYWwgKSAq
IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHRvYmplY3ROb3JtYWwgKz0gKCBtb3JwaE5v
cm1hbDIgLSBub3JtYWwgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xuXHRvYmplY3RO
b3JtYWwgKz0gKCBtb3JwaE5vcm1hbDMgLSBub3JtYWwgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNl
c1sgMyBdO1xuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggZmxhcmUuY3Vz
dG9tVXBkYXRlQ2FsbGJhY2sgKSB7CisgICAgdmFyIG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4ID0g
IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR1
bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdO1xuXHQjZWxzZVxuXHR1bmlm
b3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHQjZW5kaWZcbiNlbmRpZiI7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXJlLmN1c3RvbVVwZGF0ZUNhbGxiYWNrKCBm
bGFyZSApOworICAgIHZhciBtb3JwaHRhcmdldF92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9NT1JQSFRB
UkdFVFNcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDAgLSBwb3NpdGlvbiApICogbW9y
cGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9ycGhUYXJnZXQx
IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xuXHR0cmFuc2Zvcm1l
ZCArPSAoIG1vcnBoVGFyZ2V0MiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNb
IDIgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDMgLSBwb3NpdGlvbiApICogbW9y
cGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG5cdCNpZm5kZWYgVVNFX01PUlBITk9STUFMU1xuXHR0
cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NCAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldElu
Zmx1ZW5jZXNbIDQgXTtcblx0dHJhbnNmb3JtZWQgKz0gKCBtb3JwaFRhcmdldDUgLSBwb3NpdGlv
biApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdHRyYW5zZm9ybWVkICs9ICggbW9y
cGhUYXJnZXQ2IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xuXHR0
cmFuc2Zvcm1lZCArPSAoIG1vcnBoVGFyZ2V0NyAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldElu
Zmx1ZW5jZXNbIDcgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICB2YXIgbm9ybWFsX2ZyYWdtZW50X2JlZ2luID0gIiNpZmRlZiBGTEFU
X1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4
KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBm
ZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55
ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXpl
KCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUo
IHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAq
ICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0I2VuZGlmXG4jZW5k
aWZcbiI7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXJlLnVwZGF0ZUxlbnNGbGFyZXMo
KTsKKyAgICB2YXIgbm9ybWFsX2ZyYWdtZW50X21hcHMgPSAiI2lmZGVmIFVTRV9OT1JNQUxNQVBc
blx0I2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRcdG5vcm1hbCA9IHRleHR1cmUyRCgg
bm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0I2lmZGVmIEZMSVBfU0lERURc
blx0XHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHRcdCNlbmRpZlxuXHRcdCNpZmRlZiBET1VCTEVf
U0lERURcblx0XHRcdG5vcm1hbCA9IG5vcm1hbCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkg
KiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0XHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1h
bE1hdHJpeCAqIG5vcm1hbCApO1xuXHQjZWxzZVxuXHRcdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWwy
QXJiKCAtdlZpZXdQb3NpdGlvbiwgbm9ybWFsICk7XG5cdCNlbmRpZlxuI2VsaWYgZGVmaW5lZCgg
VVNFX0JVTVBNQVAgKVxuXHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtdlZpZXdQb3NpdGlv
biwgbm9ybWFsLCBkSGR4eV9md2QoKSApO1xuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICB2YXIgbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9OT1JN
QUxNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xuXHR1bmlmb3JtIHZlYzIgbm9y
bWFsU2NhbGU7XG5cdCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0XHR1bmlmb3JtIG1h
dDMgbm9ybWFsTWF0cml4O1xuXHQjZWxzZVxuXHRcdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZl
YzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0gKSB7XG5cdFx0XHR2ZWMzIHEwID0gdmVjMyggZEZk
eCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xu
XHRcdFx0dmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkg
KSwgZEZkeSggZXllX3Bvcy56ICkgKTtcblx0XHRcdHZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7
XG5cdFx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdFx0ZmxvYXQgc2NhbGUgPSBz
aWduKCBzdDEudCAqIHN0MC5zIC0gc3QwLnQgKiBzdDEucyApO1xuXHRcdFx0dmVjMyBTID0gbm9y
bWFsaXplKCAoIHEwICogc3QxLnQgLSBxMSAqIHN0MC50ICkgKiBzY2FsZSApO1xuXHRcdFx0dmVj
MyBUID0gbm9ybWFsaXplKCAoIC0gcTAgKiBzdDEucyArIHExICogc3QwLnMgKSAqIHNjYWxlICk7
XG5cdFx0XHR2ZWMzIE4gPSBub3JtYWxpemUoIHN1cmZfbm9ybSApO1xuXHRcdFx0bWF0MyB0c24g
PSBtYXQzKCBTLCBULCBOICk7XG5cdFx0XHR2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1h
cCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHRcdFx0bWFwTi54eSAqPSBub3JtYWxTY2FsZTtc
blx0XHRcdG1hcE4ueHkgKj0gKCBmbG9hdCggZ2xfRnJvbnRGYWNpbmcgKSAqIDIuMCAtIDEuMCAp
O1xuXHRcdFx0cmV0dXJuIG5vcm1hbGl6ZSggdHNuICogbWFwTiApO1xuXHRcdH1cblx0I2VuZGlm
XG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVuZGVyIGZsYXJlcworICAg
IHZhciBwYWNraW5nID0gInZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1h
bCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMz
IHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAq
IHJnYi54eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUu
O2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQ
YWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sICAyNTYu
ICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQ
YWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xu
dmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZl
YzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNo
aWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFU
b0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3Rv
cnMgKTtcbn1cbmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQg
dmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0
dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTtcbn1cbmZsb2F0IG9ydGhvZ3Jh
cGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZs
b2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuIGxpbmVhckNsaXBaICog
KCBuZWFyIC0gZmFyICkgLSBuZWFyO1xufVxuZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgo
IGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9h
dCBmYXIgKSB7XG5cdHJldHVybiAoKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCggZmFyIC0g
bmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25z
dCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQg
ZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52
Q2xpcFogLSBmYXIgKTtcbn1cbiI7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFp
KCB1bmlmb3Jtcy5yZW5kZXJUeXBlLCAyICk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVu
YWJsZSggZ2wuQkxFTkQgKTsKKyAgICB2YXIgcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudCA9
ICIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICo9IGdsX0Zy
YWdDb2xvci5hO1xuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBq
ID0gMCwgamwgPSBmbGFyZS5sZW5zRmxhcmVzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgeworICAg
IHZhciBwcm9qZWN0X3ZlcnRleCA9ICJ2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXgg
KiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRy
aXggKiBtdlBvc2l0aW9uO1xuIjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwcml0
ZSA9IGZsYXJlLmxlbnNGbGFyZXNbIGogXTsKKyAgICB2YXIgZGl0aGVyaW5nX2ZyYWdtZW50ID0g
IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuICBnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5n
KCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggc3ByaXRlLm9wYWNpdHkgPiAwLjAwMSAmJiBzcHJpdGUuc2NhbGUgPiAwLjAwMSAp
IHsKKyAgICB2YXIgZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQgPSAiI2lmIGRlZmluZWQoIERJVEhF
UklORyApXG5cdHZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRcdGZsb2F0IGdyaWRf
cG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTtcblx0XHR2ZWMzIGRpdGhlcl9zaGlm
dF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCAp
O1xuXHRcdGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0y
LjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XG5cdFx0cmV0dXJuIGNvbG9y
ICsgZGl0aGVyX3NoaWZ0X1JHQjtcblx0fVxuI2VuZGlmXG4iOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyZWVuUG9zaXRpb24ueCA9IHNwcml0ZS54OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmVlblBvc2l0aW9uLnkgPSBzcHJpdGUueTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JlZW5Qb3NpdGlvbi56ID0gc3ByaXRlLno7CisgICAgdmFyIHJvdWdo
bmVzc21hcF9mcmFnbWVudCA9ICJmbG9hdCByb3VnaG5lc3NGYWN0b3IgPSByb3VnaG5lc3M7XG4j
aWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR2ZWM0IHRleGVsUm91Z2huZXNzID0gdGV4dHVyZTJE
KCByb3VnaG5lc3NNYXAsIHZVdiApO1xuXHRyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5l
c3MuZztcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBz
cHJpdGUuc2l6ZSAqIHNwcml0ZS5zY2FsZSAvIHZpZXdwb3J0Lnc7CisgICAgdmFyIHJvdWdobmVz
c21hcF9wYXJzX2ZyYWdtZW50ID0gIiNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0g
c2FtcGxlcjJEIHJvdWdobmVzc01hcDtcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY2FsZS54ID0gc2l6ZSAqIGludkFzcGVjdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY2FsZS55ID0gc2l6ZTsKKyAgICB2YXIgc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQg
PSAiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRcdHVu
aWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUUyBdO1xu
XHRcdHZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVFMg
XTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1w
bGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0
IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5V
TV9QT0lOVF9MSUdIVFMgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBb
IE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRb
IE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUo
IHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJu
IHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYg
KSApICk7XG5cdH1cblx0ZmxvYXQgdGV4dHVyZTJEU2hhZG93TGVycCggc2FtcGxlcjJEIGRlcHRo
cywgdmVjMiBzaXplLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdGNvbnN0IHZlYzIg
b2Zmc2V0ID0gdmVjMiggMC4wLCAxLjAgKTtcblx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEu
MCApIC8gc2l6ZTtcblx0XHR2ZWMyIGNlbnRyb2lkVVYgPSBmbG9vciggdXYgKiBzaXplICsgMC41
ICkgLyBzaXplO1xuXHRcdGZsb2F0IGxiID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50
cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgbHQg
PSB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZz
ZXQueHksIGNvbXBhcmUgKTtcblx0XHRmbG9hdCByYiA9IHRleHR1cmUyRENvbXBhcmUoIGRlcHRo
cywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC55eCwgY29tcGFyZSApO1xuXHRcdGZs
b2F0IHJ0ID0gdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXpl
ICogb2Zmc2V0Lnl5LCBjb21wYXJlICk7XG5cdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2l6ZSAr
IDAuNSApO1xuXHRcdGZsb2F0IGEgPSBtaXgoIGxiLCBsdCwgZi55ICk7XG5cdFx0ZmxvYXQgYiA9
IG1peCggcmIsIHJ0LCBmLnkgKTtcblx0XHRmbG9hdCBjID0gbWl4KCBhLCBiLCBmLnggKTtcblx0
XHRyZXR1cm4gYztcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAs
IHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVz
LCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyA9IDEuMDtcblx0XHRzaGFk
b3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICs9IHNoYWRv
d0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49
IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dD
b29yZC55IDw9IDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMg
KTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nv
b3JkLnogPD0gMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RW
ZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dN
QVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRv
d01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVz
O1xuXHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRc
dGZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBk
eTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRc
dFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMigg
ZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSgg
c2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3Jk
LnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQu
eHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJl
MkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwg
c2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBz
aGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFy
ZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nv
b3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29v
cmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0
dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEg
KSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFw
LCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRc
dFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVf
UENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01h
cFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xu
XHRcdFx0ZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZs
b2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEg
PSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0c2hhZG93ID0gKFxuXHRcdFx0
XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nv
b3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4
dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54
eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUy
RFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2
ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFk
b3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMigg
ZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVy
cCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQu
eiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBT
aXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSAr
XG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwg
c2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRc
dFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRv
d0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0
dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29y
ZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4w
IC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNo
YWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZW5kaWZcblx0
XHR9XG5cdFx0cmV0dXJuIHNoYWRvdztcblx0fVxuXHR2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZs
b2F0IHRleGVsU2l6ZVkgKSB7XG5cdFx0dmVjMyBhYnNWID0gYWJzKCB2ICk7XG5cdFx0ZmxvYXQg
c2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7
XG5cdFx0YWJzViAqPSBzY2FsZVRvQ3ViZTtcblx0XHR2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAg
LSAyLjAgKiB0ZXhlbFNpemVZICk7XG5cdFx0dmVjMiBwbGFuYXIgPSB2Lnh5O1xuXHRcdGZsb2F0
IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7XG5cdFx0ZmxvYXQgYWxtb3N0T25lID0g
MS4wIC0gYWxtb3N0QVRleGVsO1xuXHRcdGlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHtcblx0
XHRcdGlmICggdi56ID4gMC4wIClcblx0XHRcdFx0cGxhbmFyLnggPSA0LjAgLSB2Lng7XG5cdFx0
fSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNpZ25YID0g
c2lnbiggdi54ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7
XG5cdFx0fSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHtcblx0XHRcdGZsb2F0IHNp
Z25ZID0gc2lnbiggdi55ICk7XG5cdFx0XHRwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsg
Mi4wO1xuXHRcdFx0cGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDtcblx0XHR9XG5cdFx0cmV0
dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApO1xu
XHR9XG5cdGZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNo
YWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBz
aGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFy
ICkge1xuXHRcdHZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUg
KiB2ZWMyKCA0LjAsIDIuMCApICk7XG5cdFx0dmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dD
b29yZC54eXo7XG5cdFx0ZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBz
aGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIg
KTtcdFx0ZHAgKz0gc2hhZG93Qmlhcztcblx0XHR2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0
VG9Qb3NpdGlvbiApO1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBk
ZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIG9mZnNldCA9IHZl
YzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7XG5cdFx0XHRyZXR1cm4g
KFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsg
b2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBh
cmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSAp
LCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VVigg
YmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJl
MkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxT
aXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3Vi
ZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21w
YXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkg
KSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYo
IGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVy
ZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVs
U2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1
YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKVxuXHRcdFx0KSAq
ICggMS4wIC8gOS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRDb21wYXJl
KCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApO1xuXHRcdCNl
bmRpZlxuXHR9XG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC51
bmlmb3JtM2YoIHVuaWZvcm1zLnNjcmVlblBvc2l0aW9uLCBzY3JlZW5Qb3NpdGlvbi54LCBzY3Jl
ZW5Qb3NpdGlvbi55LCBzY3JlZW5Qb3NpdGlvbi56ICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2wudW5pZm9ybTJmKCB1bmlmb3Jtcy5zY2FsZSwgc2NhbGUueCwgc2NhbGUueSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xZiggdW5pZm9ybXMucm90YXRp
b24sIHNwcml0ZS5yb3RhdGlvbiApOworICAgIHZhciBzaGFkb3dtYXBfcGFyc192ZXJ0ZXggPSAi
I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHRcdHVuaWZv
cm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0XHR2
YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRTIF07XG5c
dCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBzcG90
U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RT
aGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5U
X0xJR0hUUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lO
VF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lO
VF9MSUdIVFMgXTtcblx0I2VuZGlmXG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbC51bmlmb3JtMWYoIHVuaWZvcm1zLm9wYWNpdHksIHNwcml0ZS5vcGFjaXR5ICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTNmKCB1bmlmb3Jtcy5jb2xv
ciwgc3ByaXRlLmNvbG9yLnIsIHNwcml0ZS5jb2xvci5nLCBzcHJpdGUuY29sb3IuYiApOworICAg
IHZhciBzaGFkb3dtYXBfdmVydGV4ID0gIiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1f
RElSX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSA9IDA7
IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29y
ZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxkUG9zaXRpb247XG5c
dH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdCNwcmFnbWEgdW5yb2xs
X2xvb3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xu
XHRcdHZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHdvcmxk
UG9zaXRpb247XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTID4gMFxuXHQj
cHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdI
VFM7IGkgKysgKSB7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0
cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4iOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0QmxlbmRpbmcoIHNwcml0ZS5ibGVu
ZGluZywgc3ByaXRlLmJsZW5kRXF1YXRpb24sIHNwcml0ZS5ibGVuZFNyYywgc3ByaXRlLmJsZW5k
RHN0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0VGV4dHVyZTJE
KCBzcHJpdGUudGV4dHVyZSwgMSApOworICAgIHZhciBzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQg
PSAiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZk
ZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgPiAwXG5cdERpcmVjdGlvbmFs
TGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBp
bnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExp
Z2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggZGlyZWN0
aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkg
XSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRv
d0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dD
b29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMg
PiAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9y
ICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdo
dCA9IHNwb3RMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggc3BvdExpZ2h0LnNoYWRv
dyApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBT
aXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RT
aGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRf
TElHSFRTID4gMFxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xv
b3Bcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0
XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKj0gYm9vbCggcG9p
bnRMaWdodC5zaGFkb3cgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBw
b2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdo
dC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93
Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0fVxuXHQj
ZW5kaWZcblx0I2VuZGlmXG5cdHJldHVybiBzaGFkb3c7XG59XG4iOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2wuZHJhd0VsZW1lbnRzKCBnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lH
TkVEX1NIT1JULCAwICk7CisgICAgdmFyIHNraW5iYXNlX3ZlcnRleCA9ICIjaWZkZWYgVVNFX1NL
SU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xu
XHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBi
b25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcg
PSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIjsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgIHZhciBza2lubmluZ19wYXJzX3ZlcnRleCA9ICIjaWZkZWYgVVNF
X1NLSU5OSU5HXG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgYmlu
ZE1hdHJpeEludmVyc2U7XG5cdCNpZmRlZiBCT05FX1RFWFRVUkVcblx0XHR1bmlmb3JtIHNhbXBs
ZXIyRCBib25lVGV4dHVyZTtcblx0XHR1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7XG5cdFx0
bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0ZmxvYXQgaiA9
IGkgKiA0LjA7XG5cdFx0XHRmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXpl
ICkgKTtcblx0XHRcdGZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUg
KSApO1xuXHRcdFx0ZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5c
dFx0XHRmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdHkg
PSBkeSAqICggeSArIDAuNSApO1xuXHRcdFx0dmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1
cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MiA9IHRleHR1
cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xuXHRcdFx0
dmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICks
IHkgKSApO1xuXHRcdFx0dmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4
ICogKCB4ICsgMy41ICksIHkgKSApO1xuXHRcdFx0bWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2
MywgdjQgKTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2Vsc2Vcblx0XHR1bmlmb3Jt
IG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgo
IGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRtYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGlu
dChpKSBdO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuIjsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgdmFyIHNraW5uaW5nX3ZlcnRleCA9ICIjaWZk
ZWYgVVNFX1NLSU5OSU5HXG5cdHZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0
cmFuc2Zvcm1lZCwgMS4wICk7XG5cdHZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApO1xuXHRza2lu
bmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDtcblx0c2tpbm5lZCAr
PSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7XG5cdHNraW5uZWQgKz0gYm9u
ZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56O1xuXHRza2lubmVkICs9IGJvbmVNYXRX
ICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudztcblx0dHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRy
aXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejtcbiNlbmRpZlxuIjsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICB2YXIgc2tpbm5vcm1hbF92ZXJ0ZXggPSAiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRt
YXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0
LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtc
blx0c2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCAr
PSBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgPSBiaW5kTWF0cml4SW52
ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgPSB2ZWM0KCBz
a2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcbiNlbmRpZlxuIjsK
IAotICAgICAgICAgICAgfQorICAgIHZhciBzcGVjdWxhcm1hcF9mcmFnbWVudCA9ICJmbG9hdCBz
cGVjdWxhclN0cmVuZ3RoO1xuI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR2ZWM0IHRleGVsU3Bl
Y3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcblx0c3BlY3VsYXJTdHJlbmd0
aCA9IHRleGVsU3BlY3VsYXIucjtcbiNlbHNlXG5cdHNwZWN1bGFyU3RyZW5ndGggPSAxLjA7XG4j
ZW5kaWYiOwogCi0gICAgICAgICAgICAvLyByZXN0b3JlIGdsCisgICAgdmFyIHNwZWN1bGFybWFw
X3BhcnNfZnJhZ21lbnQgPSAiI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR1bmlmb3JtIHNhbXBs
ZXIyRCBzcGVjdWxhck1hcDtcbiNlbmRpZiI7CiAKLSAgICAgICAgICAgIHN0YXRlLmVuYWJsZSgg
Z2wuQ1VMTF9GQUNFICk7Ci0gICAgICAgICAgICBzdGF0ZS5lbmFibGUoIGdsLkRFUFRIX1RFU1Qg
KTsKLSAgICAgICAgICAgIHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayggdHJ1ZSApOworICAg
IHZhciB0b25lbWFwcGluZ19mcmFnbWVudCA9ICIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClc
biAgZ2xfRnJhZ0NvbG9yLnJnYiA9IHRvbmVNYXBwaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4j
ZW5kaWZcbiI7CiAKLSAgICAgICAgICAgIHJlbmRlcmVyLnJlc2V0R0xTdGF0ZSgpOworICAgIHZh
ciB0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50ID0gIiNpZm5kZWYgc2F0dXJhdGVcblx0I2RlZmlu
ZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG51bmlmb3JtIGZsb2F0
IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nV2hpdGVQb2lu
dDtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25l
TWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZl
YzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBz
YXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxuI2RlZmluZSBV
bmNoYXJ0ZWQySGVscGVyKCB4ICkgbWF4KCAoICggeCAqICggMC4xNSAqIHggKyAwLjEwICogMC41
MCApICsgMC4yMCAqIDAuMDIgKSAvICggeCAqICggMC4xNSAqIHggKyAwLjUwICkgKyAwLjIwICog
MC4zMCApICkgLSAwLjAyIC8gMC4zMCwgdmVjMyggMC4wICkgKVxudmVjMyBVbmNoYXJ0ZWQyVG9u
ZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7
XG5cdHJldHVybiBzYXR1cmF0ZSggVW5jaGFydGVkMkhlbHBlciggY29sb3IgKSAvIFVuY2hhcnRl
ZDJIZWxwZXIoIHZlYzMoIHRvbmVNYXBwaW5nV2hpdGVQb2ludCApICkgKTtcbn1cbnZlYzMgT3B0
aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICo9IHRvbmVN
YXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAw
NCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAo
IGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xu
fVxuIjsKIAotICAgICAgICB9OworICAgIHZhciB1dl9wYXJzX2ZyYWdtZW50ID0gIiNpZiBkZWZp
bmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0Vf
Tk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX1NQRUNVTEFSTUFQICkgfHwgZGVmaW5lZCggVVNF
X0FMUEhBTUFQICkgfHwgZGVmaW5lZCggVVNFX0VNSVNTSVZFTUFQICkgfHwgZGVmaW5lZCggVVNF
X1JPVUdITkVTU01BUCApIHx8IGRlZmluZWQoIFVTRV9NRVRBTE5FU1NNQVAgKVxuXHR2YXJ5aW5n
IHZlYzIgdlV2O1xuI2VuZGlmIjsKIAotICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKCBz
aGFkZXIgKSB7CisgICAgdmFyIHV2X3BhcnNfdmVydGV4ID0gIiNpZiBkZWZpbmVkKCBVU0VfTUFQ
ICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkg
fHwgZGVmaW5lZCggVVNFX1NQRUNVTEFSTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkg
fHwgZGVmaW5lZCggVVNFX0VNSVNTSVZFTUFQICkgfHwgZGVmaW5lZCggVVNFX1JPVUdITkVTU01B
UCApIHx8IGRlZmluZWQoIFVTRV9NRVRBTE5FU1NNQVAgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xu
XHR1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgIHZh
ciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICAgIHZhciB1dl92ZXJ0ZXggPSAiI2lm
IGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQo
IFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVk
KCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVk
KCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZV
diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiOwogCi0gICAg
ICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoIGdsLkZSQUdNRU5U
X1NIQURFUiApOwotICAgICAgICAgICAgdmFyIHZlcnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRl
ciggZ2wuVkVSVEVYX1NIQURFUiApOworICAgIHZhciB1djJfcGFyc19mcmFnbWVudCA9ICIjaWYg
ZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWlu
ZyB2ZWMyIHZVdjI7XG4jZW5kaWYiOwogCi0gICAgICAgICAgICB2YXIgcHJlZml4ID0gInByZWNp
c2lvbiAiICsgcmVuZGVyZXIuZ2V0UHJlY2lzaW9uKCkgKyAiIGZsb2F0O1xuIjsKKyAgICB2YXIg
dXYyX3BhcnNfdmVydGV4ID0gIiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVk
KCBVU0VfQU9NQVAgKVxuXHRhdHRyaWJ1dGUgdmVjMiB1djI7XG5cdHZhcnlpbmcgdmVjMiB2VXYy
O1xuI2VuZGlmIjsKIAotICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKCBmcmFnbWVudFNoYWRl
ciwgcHJlZml4ICsgc2hhZGVyLmZyYWdtZW50U2hhZGVyICk7Ci0gICAgICAgICAgICBnbC5zaGFk
ZXJTb3VyY2UoIHZlcnRleFNoYWRlciwgcHJlZml4ICsgc2hhZGVyLnZlcnRleFNoYWRlciApOwor
ICAgIHZhciB1djJfdmVydGV4ID0gIiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZp
bmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gdXYyO1xuI2VuZGlmIjsKIAotICAgICAgICAgICAg
Z2wuY29tcGlsZVNoYWRlciggZnJhZ21lbnRTaGFkZXIgKTsKLSAgICAgICAgICAgIGdsLmNvbXBp
bGVTaGFkZXIoIHZlcnRleFNoYWRlciApOworICAgIHZhciB3b3JsZHBvc192ZXJ0ZXggPSAiI2lm
IGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQg
KCBVU0VfU0hBRE9XTUFQIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2
ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jZW5kaWZcbiI7CiAKLSAgICAgICAgICAgIGdsLmF0
dGFjaFNoYWRlciggcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIgKTsKLSAgICAgICAgICAgIGdsLmF0
dGFjaFNoYWRlciggcHJvZ3JhbSwgdmVydGV4U2hhZGVyICk7CisgICAgdmFyIGN1YmVfZnJhZyA9
ICJ1bmlmb3JtIHNhbXBsZXJDdWJlIHRDdWJlO1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnVuaWZv
cm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbnZvaWQgbWFp
bigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIHRDdWJlLCB2ZWMzKCB0RmxpcCAq
IHZXb3JsZFBvc2l0aW9uLngsIHZXb3JsZFBvc2l0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9y
LmEgKj0gb3BhY2l0eTtcbn1cbiI7CiAKLSAgICAgICAgICAgIGdsLmxpbmtQcm9ncmFtKCBwcm9n
cmFtICk7CisgICAgdmFyIGN1YmVfdmVydCA9ICJ2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247
XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2V29ybGRQb3NpdGlvbiA9IHRy
YW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxi
ZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24u
eiA9IGdsX1Bvc2l0aW9uLnc7XG59XG4iOwogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbTsK
KyAgICB2YXIgZGVwdGhfZnJhZyA9ICIjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdHVuaWZv
cm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxw
YWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxs
b2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJz
X2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2Zy
YWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhf
UEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZc
blx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50
PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhi
dWZfZnJhZ21lbnQ+XG5cdCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDBcblx0XHRnbF9GcmFnQ29s
b3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBnbF9GcmFnQ29vcmQueiApLCBvcGFjaXR5ICk7XG5cdCNl
bGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMVxuXHRcdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRv
UkdCQSggZ2xfRnJhZ0Nvb3JkLnogKTtcblx0I2VuZGlmXG59XG4iOwogCi0gICAgICAgIH0KKyAg
ICB2YXIgZGVwdGhfdmVydCA9ICIjaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRl
IDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRl
eD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGlu
Z19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0
ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpZmRlZiBVU0VfRElTUExBQ0VN
RU5UTUFQXG5cdFx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8
bW9ycGhub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0
I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdl
dF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkaXNw
bGFjZW1lbnRtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVy
dGV4PlxufVxuIjsKIAotICAgIH0KKyAgICB2YXIgZGlzdGFuY2VSR0JBX2ZyYWcgPSAiI2RlZmlu
ZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9h
dCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMz
IHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxu
I2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+
XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19w
bGFuZXNfcGFyc19mcmFnbWVudD5cbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGlu
Z19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7XG5c
dCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5c
blx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0ZmxvYXQgZGlzdCA9IGxlbmd0aCgg
dldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0ID0gKCBkaXN0IC0g
bmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3Qg
PSBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGRp
c3QgKTtcbn1cbiI7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAv
IGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJl
ZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgdmFyIGRpc3RhbmNlUkdCQV92ZXJ0ID0gIiNkZWZp
bmUgRElTVEFOQ0VcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21t
b24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFw
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1
ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJz
X3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1
ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQj
aW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92
ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2lu
Y2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0
I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92
ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9z
X3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZXb3JsZFBv
c2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG59XG4iOwogCi0gICAgZnVuY3Rpb24gU3ByaXRl
UGx1Z2luKCByZW5kZXJlciwgc3ByaXRlcyApIHsKKyAgICB2YXIgZXF1aXJlY3RfZnJhZyA9ICJ1
bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247
XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5v
cm1hbGl6ZSggdldvcmxkUG9zaXRpb24gKTtcblx0dmVjMiBzYW1wbGVVVjtcblx0c2FtcGxlVVYu
eSA9IGFzaW4oIGNsYW1wKCBkaXJlY3Rpb24ueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FM
X1BJICsgMC41O1xuXHRzYW1wbGVVVi54ID0gYXRhbiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54
ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0
RXF1aXJlY3QsIHNhbXBsZVVWICk7XG59XG4iOwogCi0gICAgICAgIHZhciBnbCA9IHJlbmRlcmVy
LmNvbnRleHQ7Ci0gICAgICAgIHZhciBzdGF0ZSA9IHJlbmRlcmVyLnN0YXRlOworICAgIHZhciBl
cXVpcmVjdF92ZXJ0ID0gInZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIDxj
b21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZFBvc2l0aW9uID0gdHJhbnNmb3JtRGlyZWN0
aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5c
blx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxufVxuIjsKIAotICAgICAgICB2YXIgdmVydGV4
QnVmZmVyLCBlbGVtZW50QnVmZmVyOwotICAgICAgICB2YXIgcHJvZ3JhbSwgYXR0cmlidXRlcywg
dW5pZm9ybXM7CisgICAgdmFyIGxpbmVkYXNoZWRfZnJhZyA9ICJ1bmlmb3JtIHZlYzMgZGlmZnVz
ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlm
b3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNs
dWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxm
b2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xu
XHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHRpZiAoIG1vZCggdkxpbmVE
aXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5c
dHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9
IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdt
ZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZm
dXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZm
dXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5c
blx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2Rpbmdz
X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufVxuIjsKIAotICAgICAgICB2
YXIgdGV4dHVyZTsKKyAgICB2YXIgbGluZWRhc2hlZF92ZXJ0ID0gInVuaWZvcm0gZmxvYXQgc2Nh
bGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURp
c3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192
ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWlu
KCkge1xuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHR2TGluZURpc3RhbmNlID0gc2NhbGUg
KiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZl
YzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICog
bXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUg
PGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIjsK
IAotICAgICAgICAvLyBkZWNvbXBvc2UgbWF0cml4V29ybGQKKyAgICB2YXIgbWVzaGJhc2ljX2Zy
YWcgPSAidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZu
ZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVk
ZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxt
YXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFn
bWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1
ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVz
X3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFu
ZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0
eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBf
ZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhh
bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVk
ZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0
ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICks
IHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHRyZWZsZWN0ZWRMaWdo
dC5pbmRpcmVjdERpZmZ1c2UgKz0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxp
Z2h0TWFwSW50ZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlm
ZnVzZSArPSB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVu
dD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7
XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtc
blx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0
Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRf
YWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2lu
Y2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1c
biI7CiAKLSAgICAgICAgdmFyIHNwcml0ZVBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKLSAgICAg
ICAgdmFyIHNwcml0ZVJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTsKLSAgICAgICAgdmFyIHNw
cml0ZVNjYWxlID0gbmV3IFZlY3RvcjMoKTsKKyAgICB2YXIgbWVzaGJhc2ljX3ZlcnQgPSAiI2lu
Y2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJf
cGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNv
bG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxt
b3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5c
biNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19w
bGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQj
aW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaW5jbHVk
ZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4Plxu
XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFs
X3ZlcnRleD5cblx0I2VuZGlmXG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNp
bmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5c
blx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5l
c192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3Zl
cnRleD5cbn1cbiI7CiAKLSAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHsKKyAgICB2YXIgbWVzaGxh
bWJlcnRfZnJhZyA9ICJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2
ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbiNp
ZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG4jZW5kaWZcbiNp
bmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUg
PHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVk
ZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5c
biNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNf
ZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRl
IDxlbnZtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdo
dHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxz
aGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21l
bnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dk
ZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2Zy
YWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdt
ZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0
UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4w
ICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3Rh
bEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2Zy
YWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJh
Z21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhh
dGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5j
bHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlm
ZnVzZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5c
dCNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD5cblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RE
aWZmdXNlICo9IEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNp
ZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBn
bF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRc
dHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5c
dHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRp
ZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTtcblx0I2luY2x1ZGUgPGFvbWFwX2Zy
YWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZm
dXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlh
bmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0
KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBp
bmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRl
IDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50
PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufVxuIjsKIAotICAgICAgICAgICAg
dmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSggWwotICAgICAgICAgICAgICAgIC0gMC41
LCAtIDAuNSwgIDAsIDAsCi0gICAgICAgICAgICAgICAgICAwLjUsIC0gMC41LCAgMSwgMCwKLSAg
ICAgICAgICAgICAgICAgIDAuNSwgICAwLjUsICAxLCAxLAotICAgICAgICAgICAgICAgIC0gMC41
LCAgIDAuNSwgIDAsIDEKLSAgICAgICAgICAgIF0gKTsKKyAgICB2YXIgbWVzaGxhbWJlcnRfdmVy
dCA9ICIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbiNpZmRlZiBE
T1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRl
IDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNf
dmVydGV4PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxic2Rmcz5c
biNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRl
eD5cbiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hh
ZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4Plxu
I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0
I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNs
dWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5c
dCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxf
dmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJn
ZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8cHJv
amVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4Plxu
XHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3Zl
cnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVy
dGV4PlxufVxuIjsKIAotICAgICAgICAgICAgdmFyIGZhY2VzID0gbmV3IFVpbnQxNkFycmF5KCBb
Ci0gICAgICAgICAgICAgICAgMCwgMSwgMiwKLSAgICAgICAgICAgICAgICAwLCAyLCAzCi0gICAg
ICAgICAgICBdICk7CisgICAgdmFyIG1lc2hwaG9uZ19mcmFnID0gIiNkZWZpbmUgUEhPTkdcbnVu
aWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMz
IHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNp
dHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0
aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1h
cF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4j
aW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFy
c19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rm
cz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNs
dWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJh
Z21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxs
b2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJz
X2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2Zy
YWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtc
blx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMygg
MC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0
b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVm
X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3Jf
ZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFs
cGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQj
aW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdt
ZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUg
PGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdp
bj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRz
X2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdv
aW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQu
aW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0
ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5j
bHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xp
Z2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+
XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21l
bnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVk
ZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufVxuIjsKIAotICAgICAgICAgICAgdmVydGV4QnVmZmVy
ICA9IGdsLmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICAgICAgZWxlbWVudEJ1ZmZlciA9IGdsLmNy
ZWF0ZUJ1ZmZlcigpOworICAgIHZhciBtZXNocGhvbmdfdmVydCA9ICIjZGVmaW5lIFBIT05HXG52
YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWlu
ZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZf
cGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGRpc3Bs
YWNlbWVudG1hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4j
aW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4Plxu
I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3Bh
cnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxs
b2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192
ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVn
aW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5j
bHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5c
dCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0
dk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5j
bHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQj
aW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3Zl
cnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhi
dWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQ
b3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRl
eD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4iOwogCi0gICAgICAgICAgICBnbC5iaW5k
QnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIsIHZlcnRleEJ1ZmZlciApOwotICAgICAgICAgICAgZ2wu
YnVmZmVyRGF0YSggZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0aWNlcywgZ2wuU1RBVElDX0RSQVcgKTsK
KyAgICB2YXIgbWVzaHBoeXNpY2FsX2ZyYWcgPSAiI2RlZmluZSBQSFlTSUNBTFxudW5pZm9ybSB2
ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdo
bmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xu
I2lmbmRlZiBTVEFOREFSRFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyQ29hdDtcblx0dW5pZm9ybSBm
bG9hdCBjbGVhckNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0
aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRp
ZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPGRpdGhl
cmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5j
bHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD5cbiNp
bmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdt
ZW50PlxuI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bGlnaHRtYXBf
cGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PlxuI2lu
Y2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50
PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVu
dD5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19t
YXBzPlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUg
PHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVu
dD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5l
c3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVu
dD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBw
aW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xp
cHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1
c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0
ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4w
ICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1
ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQj
aW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5c
blx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21h
cF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1
ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9t
YXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdo
dHNfcGh5c2ljYWxfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+
XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGxpZ2h0c19m
cmFnbWVudF9lbmQ+XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2lu
Z0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0Lmlu
ZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVk
TGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0Z2xfRnJh
Z0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1
ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50
PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9h
bHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn1cbiI7CiAK
LSAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVt
ZW50QnVmZmVyICk7Ci0gICAgICAgICAgICBnbC5idWZmZXJEYXRhKCBnbC5FTEVNRU5UX0FSUkFZ
X0JVRkZFUiwgZmFjZXMsIGdsLlNUQVRJQ19EUkFXICk7CisgICAgdmFyIG1lc2hwaHlzaWNhbF92
ZXJ0ID0gIiNkZWZpbmUgUEhZU0lDQUxcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lm
bmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1
ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFy
c192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1
ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNs
dWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3Zl
cnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVw
dGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4
Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYy
X3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9y
bWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUg
PHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5j
bHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3Jt
YWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUg
PGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1
ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+
XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3Zl
cnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRp
b24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQj
aW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59XG4i
OwogCi0gICAgICAgICAgICBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSgpOworICAgIHZhciBub3Jt
YWxfZnJhZyA9ICIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRl
ZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCAoIGRlZmlu
ZWQoIFVTRV9OT1JNQUxNQVAgKSAmJiAhIGRlZmluZWQoIE9CSkVDVFNQQUNFX05PUk1BTE1BUCAp
IClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9T
SEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5n
PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2Zy
YWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxv
Z2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxsb2dk
ZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0
I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBw
YWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59XG4iOwogCi0gICAgICAgICAg
ICBhdHRyaWJ1dGVzID0gewotICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAgICAgICAgICAgZ2wu
Z2V0QXR0cmliTG9jYXRpb24gKCBwcm9ncmFtLCAncG9zaXRpb24nICksCi0gICAgICAgICAgICAg
ICAgdXY6ICAgICAgICAgICAgICAgICBnbC5nZXRBdHRyaWJMb2NhdGlvbiAoIHByb2dyYW0sICd1
dicgKQotICAgICAgICAgICAgfTsKKyAgICB2YXIgbm9ybWFsX3ZlcnQgPSAiI2RlZmluZSBOT1JN
QUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkg
fHwgKCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgJiYgISBkZWZpbmVkKCBPQkpFQ1RTUEFDRV9O
T1JNQUxNQVAgKSApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZu
ZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVk
ZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4
PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5n
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4Plxudm9pZCBt
YWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxf
dmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tp
bmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRl
IDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCA9
IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSA8YmVn
aW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8
c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0
I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4
PlxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8
fCAoIGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSAmJiAhIGRlZmluZWQoIE9CSkVDVFNQQUNFX05P
Uk1BTE1BUCApIClcblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZc
bn1cbiI7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zID0gewotICAgICAgICAgICAgICAgIHV2T2Zm
c2V0OiAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAndXZPZmZzZXQn
ICksCi0gICAgICAgICAgICAgICAgdXZTY2FsZTogICAgICAgICAgICBnbC5nZXRVbmlmb3JtTG9j
YXRpb24oIHByb2dyYW0sICd1dlNjYWxlJyApLAorICAgIHZhciBwb2ludHNfZnJhZyA9ICJ1bmlm
b3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21t
b24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50Plxu
I2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJz
X2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVk
ZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNs
dWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZl
YzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkg
KTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3Bh
cnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRl
IDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3Iucmdi
O1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSAp
O1xuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUg
PHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Plxu
XHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxufVxuIjsKIAotICAgICAgICAgICAgICAgIHJvdGF0
aW9uOiAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAncm90YXRpb24n
ICksCi0gICAgICAgICAgICAgICAgc2NhbGU6ICAgICAgICAgICAgICBnbC5nZXRVbmlmb3JtTG9j
YXRpb24oIHByb2dyYW0sICdzY2FsZScgKSwKKyAgICB2YXIgcG9pbnRzX3ZlcnQgPSAidW5pZm9y
bSBmbG9hdCBzaXplO1xudW5pZm9ybSBmbG9hdCBzY2FsZTtcbiNpbmNsdWRlIDxjb21tb24+XG4j
aW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4Plxu
I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVm
X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZv
aWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lu
X3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHBy
b2plY3RfdmVydGV4PlxuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGdsX1BvaW50
U2l6ZSA9IHNpemUgKiAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTtcblx0I2Vsc2Vcblx0XHRn
bF9Qb2ludFNpemUgPSBzaXplO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3Zl
cnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3
b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufVxuIjsKIAotICAgICAg
ICAgICAgICAgIGNvbG9yOiAgICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9n
cmFtLCAnY29sb3InICksCi0gICAgICAgICAgICAgICAgbWFwOiAgICAgICAgICAgICAgICBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdtYXAnICksCi0gICAgICAgICAgICAgICAgb3Bh
Y2l0eTogICAgICAgICAgICBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdvcGFjaXR5
JyApLAorICAgIHZhciBzaGFkb3dfZnJhZyA9ICJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3Jt
IGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4j
aW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8
bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+XG4j
aW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHRnbF9G
cmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygp
ICkgKTtcblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cbn1cbiI7CiAKLSAgICAgICAgICAgICAg
ICBtb2RlbFZpZXdNYXRyaXg6ICAgIGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ21v
ZGVsVmlld01hdHJpeCcgKSwKLSAgICAgICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiAgIGds
LmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ3Byb2plY3Rpb25NYXRyaXgnICksCisgICAg
dmFyIHNoYWRvd192ZXJ0ID0gIiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8
c2hhZG93bWFwX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8YmVnaW5f
dmVydGV4PlxuXHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBv
c192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9n
X3ZlcnRleD5cbn1cbiI7CiAKLSAgICAgICAgICAgICAgICBmb2dUeXBlOiAgICAgICAgICAgIGds
LmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ2ZvZ1R5cGUnICksCi0gICAgICAgICAgICAg
ICAgZm9nRGVuc2l0eTogICAgICAgICBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdm
b2dEZW5zaXR5JyApLAotICAgICAgICAgICAgICAgIGZvZ05lYXI6ICAgICAgICAgICAgZ2wuZ2V0
VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAnZm9nTmVhcicgKSwKLSAgICAgICAgICAgICAgICBm
b2dGYXI6ICAgICAgICAgICAgIGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ2ZvZ0Zh
cicgKSwKLSAgICAgICAgICAgICAgICBmb2dDb2xvcjogICAgICAgICAgIGdsLmdldFVuaWZvcm1M
b2NhdGlvbiggcHJvZ3JhbSwgJ2ZvZ0NvbG9yJyApLAorICAgIHZhciBTaGFkZXJDaHVuayA9IHsK
KyAgICAgICAgYWxwaGFtYXBfZnJhZ21lbnQ6IGFscGhhbWFwX2ZyYWdtZW50LAorICAgICAgICBh
bHBoYW1hcF9wYXJzX2ZyYWdtZW50OiBhbHBoYW1hcF9wYXJzX2ZyYWdtZW50LAorICAgICAgICBh
bHBoYXRlc3RfZnJhZ21lbnQ6IGFscGhhdGVzdF9mcmFnbWVudCwKKyAgICAgICAgYW9tYXBfZnJh
Z21lbnQ6IGFvbWFwX2ZyYWdtZW50LAorICAgICAgICBhb21hcF9wYXJzX2ZyYWdtZW50OiBhb21h
cF9wYXJzX2ZyYWdtZW50LAorICAgICAgICBiZWdpbl92ZXJ0ZXg6IGJlZ2luX3ZlcnRleCwKKyAg
ICAgICAgYmVnaW5ub3JtYWxfdmVydGV4OiBiZWdpbm5vcm1hbF92ZXJ0ZXgsCisgICAgICAgIGJz
ZGZzOiBic2RmcywKKyAgICAgICAgYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiBidW1wbWFwX3BhcnNf
ZnJhZ21lbnQsCisgICAgICAgIGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDogY2xpcHBpbmdfcGxh
bmVzX2ZyYWdtZW50LAorICAgICAgICBjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDogY2xp
cHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIGNsaXBwaW5nX3BsYW5lc19wYXJz
X3ZlcnRleDogY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4LAorICAgICAgICBjbGlwcGluZ19w
bGFuZXNfdmVydGV4OiBjbGlwcGluZ19wbGFuZXNfdmVydGV4LAorICAgICAgICBjb2xvcl9mcmFn
bWVudDogY29sb3JfZnJhZ21lbnQsCisgICAgICAgIGNvbG9yX3BhcnNfZnJhZ21lbnQ6IGNvbG9y
X3BhcnNfZnJhZ21lbnQsCisgICAgICAgIGNvbG9yX3BhcnNfdmVydGV4OiBjb2xvcl9wYXJzX3Zl
cnRleCwKKyAgICAgICAgY29sb3JfdmVydGV4OiBjb2xvcl92ZXJ0ZXgsCisgICAgICAgIGNvbW1v
bjogY29tbW9uLAorICAgICAgICBjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IGN1YmVfdXZf
cmVmbGVjdGlvbl9mcmFnbWVudCwKKyAgICAgICAgZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6IGRlZmF1
bHRub3JtYWxfdmVydGV4LAorICAgICAgICBkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IGRp
c3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleCwKKyAgICAgICAgZGlzcGxhY2VtZW50bWFwX3ZlcnRl
eDogZGlzcGxhY2VtZW50bWFwX3ZlcnRleCwKKyAgICAgICAgZW1pc3NpdmVtYXBfZnJhZ21lbnQ6
IGVtaXNzaXZlbWFwX2ZyYWdtZW50LAorICAgICAgICBlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50
OiBlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50LAorICAgICAgICBlbmNvZGluZ3NfZnJhZ21lbnQ6
IGVuY29kaW5nc19mcmFnbWVudCwKKyAgICAgICAgZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IGVu
Y29kaW5nc19wYXJzX2ZyYWdtZW50LAorICAgICAgICBlbnZtYXBfZnJhZ21lbnQ6IGVudm1hcF9m
cmFnbWVudCwKKyAgICAgICAgZW52bWFwX3BhcnNfZnJhZ21lbnQ6IGVudm1hcF9wYXJzX2ZyYWdt
ZW50LAorICAgICAgICBlbnZtYXBfcGFyc192ZXJ0ZXg6IGVudm1hcF9wYXJzX3ZlcnRleCwKKyAg
ICAgICAgZW52bWFwX3ZlcnRleDogZW52bWFwX3ZlcnRleCwKKyAgICAgICAgZm9nX3ZlcnRleDog
Zm9nX3ZlcnRleCwKKyAgICAgICAgZm9nX3BhcnNfdmVydGV4OiBmb2dfcGFyc192ZXJ0ZXgsCisg
ICAgICAgIGZvZ19mcmFnbWVudDogZm9nX2ZyYWdtZW50LAorICAgICAgICBmb2dfcGFyc19mcmFn
bWVudDogZm9nX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIGdyYWRpZW50bWFwX3BhcnNfZnJhZ21l
bnQ6IGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIGxpZ2h0bWFwX2ZyYWdtZW50
OiBsaWdodG1hcF9mcmFnbWVudCwKKyAgICAgICAgbGlnaHRtYXBfcGFyc19mcmFnbWVudDogbGln
aHRtYXBfcGFyc19mcmFnbWVudCwKKyAgICAgICAgbGlnaHRzX2xhbWJlcnRfdmVydGV4OiBsaWdo
dHNfbGFtYmVydF92ZXJ0ZXgsCisgICAgICAgIGxpZ2h0c19wYXJzX2JlZ2luOiBsaWdodHNfcGFy
c19iZWdpbiwKKyAgICAgICAgbGlnaHRzX3BhcnNfbWFwczogbGlnaHRzX3BhcnNfbWFwcywKKyAg
ICAgICAgbGlnaHRzX3Bob25nX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfZnJhZ21lbnQsCisgICAg
ICAgIGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVu
dCwKKyAgICAgICAgbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OiBsaWdodHNfcGh5c2ljYWxfZnJh
Z21lbnQsCisgICAgICAgIGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiBsaWdodHNfcGh5
c2ljYWxfcGFyc19mcmFnbWVudCwKKyAgICAgICAgbGlnaHRzX2ZyYWdtZW50X2JlZ2luOiBsaWdo
dHNfZnJhZ21lbnRfYmVnaW4sCisgICAgICAgIGxpZ2h0c19mcmFnbWVudF9tYXBzOiBsaWdodHNf
ZnJhZ21lbnRfbWFwcywKKyAgICAgICAgbGlnaHRzX2ZyYWdtZW50X2VuZDogbGlnaHRzX2ZyYWdt
ZW50X2VuZCwKKyAgICAgICAgbG9nZGVwdGhidWZfZnJhZ21lbnQ6IGxvZ2RlcHRoYnVmX2ZyYWdt
ZW50LAorICAgICAgICBsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OiBsb2dkZXB0aGJ1Zl9wYXJz
X2ZyYWdtZW50LAorICAgICAgICBsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDogbG9nZGVwdGhidWZf
cGFyc192ZXJ0ZXgsCisgICAgICAgIGxvZ2RlcHRoYnVmX3ZlcnRleDogbG9nZGVwdGhidWZfdmVy
dGV4LAorICAgICAgICBtYXBfZnJhZ21lbnQ6IG1hcF9mcmFnbWVudCwKKyAgICAgICAgbWFwX3Bh
cnNfZnJhZ21lbnQ6IG1hcF9wYXJzX2ZyYWdtZW50LAorICAgICAgICBtYXBfcGFydGljbGVfZnJh
Z21lbnQ6IG1hcF9wYXJ0aWNsZV9mcmFnbWVudCwKKyAgICAgICAgbWFwX3BhcnRpY2xlX3BhcnNf
ZnJhZ21lbnQ6IG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50LAorICAgICAgICBtZXRhbG5lc3Nt
YXBfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9mcmFnbWVudCwKKyAgICAgICAgbWV0YWxuZXNzbWFw
X3BhcnNfZnJhZ21lbnQ6IG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50LAorICAgICAgICBtb3Jw
aG5vcm1hbF92ZXJ0ZXg6IG1vcnBobm9ybWFsX3ZlcnRleCwKKyAgICAgICAgbW9ycGh0YXJnZXRf
cGFyc192ZXJ0ZXg6IG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4LAorICAgICAgICBtb3JwaHRhcmdl
dF92ZXJ0ZXg6IG1vcnBodGFyZ2V0X3ZlcnRleCwKKyAgICAgICAgbm9ybWFsX2ZyYWdtZW50X2Jl
Z2luOiBub3JtYWxfZnJhZ21lbnRfYmVnaW4sCisgICAgICAgIG5vcm1hbF9mcmFnbWVudF9tYXBz
OiBub3JtYWxfZnJhZ21lbnRfbWFwcywKKyAgICAgICAgbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6
IG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50LAorICAgICAgICBwYWNraW5nOiBwYWNraW5nLAorICAg
ICAgICBwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiBwcmVtdWx0aXBsaWVkX2FscGhhX2Zy
YWdtZW50LAorICAgICAgICBwcm9qZWN0X3ZlcnRleDogcHJvamVjdF92ZXJ0ZXgsCisgICAgICAg
IGRpdGhlcmluZ19mcmFnbWVudDogZGl0aGVyaW5nX2ZyYWdtZW50LAorICAgICAgICBkaXRoZXJp
bmdfcGFyc19mcmFnbWVudDogZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQsCisgICAgICAgIHJvdWdo
bmVzc21hcF9mcmFnbWVudDogcm91Z2huZXNzbWFwX2ZyYWdtZW50LAorICAgICAgICByb3VnaG5l
c3NtYXBfcGFyc19mcmFnbWVudDogcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQsCisgICAgICAg
IHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiBzaGFkb3dtYXBfcGFyc19mcmFnbWVudCwKKyAgICAg
ICAgc2hhZG93bWFwX3BhcnNfdmVydGV4OiBzaGFkb3dtYXBfcGFyc192ZXJ0ZXgsCisgICAgICAg
IHNoYWRvd21hcF92ZXJ0ZXg6IHNoYWRvd21hcF92ZXJ0ZXgsCisgICAgICAgIHNoYWRvd21hc2tf
cGFyc19mcmFnbWVudDogc2hhZG93bWFza19wYXJzX2ZyYWdtZW50LAorICAgICAgICBza2luYmFz
ZV92ZXJ0ZXg6IHNraW5iYXNlX3ZlcnRleCwKKyAgICAgICAgc2tpbm5pbmdfcGFyc192ZXJ0ZXg6
IHNraW5uaW5nX3BhcnNfdmVydGV4LAorICAgICAgICBza2lubmluZ192ZXJ0ZXg6IHNraW5uaW5n
X3ZlcnRleCwKKyAgICAgICAgc2tpbm5vcm1hbF92ZXJ0ZXg6IHNraW5ub3JtYWxfdmVydGV4LAor
ICAgICAgICBzcGVjdWxhcm1hcF9mcmFnbWVudDogc3BlY3VsYXJtYXBfZnJhZ21lbnQsCisgICAg
ICAgIHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQs
CisgICAgICAgIHRvbmVtYXBwaW5nX2ZyYWdtZW50OiB0b25lbWFwcGluZ19mcmFnbWVudCwKKyAg
ICAgICAgdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDogdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVu
dCwKKyAgICAgICAgdXZfcGFyc19mcmFnbWVudDogdXZfcGFyc19mcmFnbWVudCwKKyAgICAgICAg
dXZfcGFyc192ZXJ0ZXg6IHV2X3BhcnNfdmVydGV4LAorICAgICAgICB1dl92ZXJ0ZXg6IHV2X3Zl
cnRleCwKKyAgICAgICAgdXYyX3BhcnNfZnJhZ21lbnQ6IHV2Ml9wYXJzX2ZyYWdtZW50LAorICAg
ICAgICB1djJfcGFyc192ZXJ0ZXg6IHV2Ml9wYXJzX3ZlcnRleCwKKyAgICAgICAgdXYyX3ZlcnRl
eDogdXYyX3ZlcnRleCwKKyAgICAgICAgd29ybGRwb3NfdmVydGV4OiB3b3JsZHBvc192ZXJ0ZXgs
CiAKLSAgICAgICAgICAgICAgICBhbHBoYVRlc3Q6ICAgICAgICAgIGdsLmdldFVuaWZvcm1Mb2Nh
dGlvbiggcHJvZ3JhbSwgJ2FscGhhVGVzdCcgKQotICAgICAgICAgICAgfTsKKyAgICAgICAgY3Vi
ZV9mcmFnOiBjdWJlX2ZyYWcsCisgICAgICAgIGN1YmVfdmVydDogY3ViZV92ZXJ0LAorICAgICAg
ICBkZXB0aF9mcmFnOiBkZXB0aF9mcmFnLAorICAgICAgICBkZXB0aF92ZXJ0OiBkZXB0aF92ZXJ0
LAorICAgICAgICBkaXN0YW5jZVJHQkFfZnJhZzogZGlzdGFuY2VSR0JBX2ZyYWcsCisgICAgICAg
IGRpc3RhbmNlUkdCQV92ZXJ0OiBkaXN0YW5jZVJHQkFfdmVydCwKKyAgICAgICAgZXF1aXJlY3Rf
ZnJhZzogZXF1aXJlY3RfZnJhZywKKyAgICAgICAgZXF1aXJlY3RfdmVydDogZXF1aXJlY3RfdmVy
dCwKKyAgICAgICAgbGluZWRhc2hlZF9mcmFnOiBsaW5lZGFzaGVkX2ZyYWcsCisgICAgICAgIGxp
bmVkYXNoZWRfdmVydDogbGluZWRhc2hlZF92ZXJ0LAorICAgICAgICBtZXNoYmFzaWNfZnJhZzog
bWVzaGJhc2ljX2ZyYWcsCisgICAgICAgIG1lc2hiYXNpY192ZXJ0OiBtZXNoYmFzaWNfdmVydCwK
KyAgICAgICAgbWVzaGxhbWJlcnRfZnJhZzogbWVzaGxhbWJlcnRfZnJhZywKKyAgICAgICAgbWVz
aGxhbWJlcnRfdmVydDogbWVzaGxhbWJlcnRfdmVydCwKKyAgICAgICAgbWVzaHBob25nX2ZyYWc6
IG1lc2hwaG9uZ19mcmFnLAorICAgICAgICBtZXNocGhvbmdfdmVydDogbWVzaHBob25nX3ZlcnQs
CisgICAgICAgIG1lc2hwaHlzaWNhbF9mcmFnOiBtZXNocGh5c2ljYWxfZnJhZywKKyAgICAgICAg
bWVzaHBoeXNpY2FsX3ZlcnQ6IG1lc2hwaHlzaWNhbF92ZXJ0LAorICAgICAgICBub3JtYWxfZnJh
Zzogbm9ybWFsX2ZyYWcsCisgICAgICAgIG5vcm1hbF92ZXJ0OiBub3JtYWxfdmVydCwKKyAgICAg
ICAgcG9pbnRzX2ZyYWc6IHBvaW50c19mcmFnLAorICAgICAgICBwb2ludHNfdmVydDogcG9pbnRz
X3ZlcnQsCisgICAgICAgIHNoYWRvd19mcmFnOiBzaGFkb3dfZnJhZywKKyAgICAgICAgc2hhZG93
X3ZlcnQ6IHNoYWRvd192ZXJ0CisgICAgfTsKIAotICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAn
Y2FudmFzJyApOwotICAgICAgICAgICAgY2FudmFzLndpZHRoID0gODsKLSAgICAgICAgICAgIGNh
bnZhcy5oZWlnaHQgPSA4OworICAgIC8qKgorICAgICAqIFVuaWZvcm0gVXRpbGl0aWVzCisgICAg
ICovCiAKLSAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcg
KTsKLSAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3doaXRlJzsKLSAgICAgICAgICAg
IGNvbnRleHQuZmlsbFJlY3QoIDAsIDAsIDgsIDggKTsKKyAgICB2YXIgVW5pZm9ybXNVdGlscyA9
IHsKIAotICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKCBjYW52YXMgKTsKLSAgICAg
ICAgICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICBtZXJnZTogZnVuY3Rp
b24gKCB1bmlmb3JtcyApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWVyZ2VkID0g
e307CiAKLSAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoIHNjZW5lLCBjYW1lcmEgKSB7
CisgICAgICAgICAgICBmb3IgKCB2YXIgdSA9IDA7IHUgPCB1bmlmb3Jtcy5sZW5ndGg7IHUgKysg
KSB7CiAKLSAgICAgICAgICAgIGlmICggc3ByaXRlcy5sZW5ndGggPT09IDAgKSByZXR1cm47Cisg
ICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMuY2xvbmUoIHVuaWZvcm1zWyB1IF0gKTsKIAot
ICAgICAgICAgICAgLy8gc2V0dXAgZ2wKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgcCBpbiB0
bXAgKSB7CiAKLSAgICAgICAgICAgIGlmICggcHJvZ3JhbSA9PT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgICAgICAgICBtZXJnZWRbIHAgXSA9IHRtcFsgcCBdOwogCi0gICAgICAgICAgICAg
ICAgaW5pdCgpOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBnbC51c2VQcm9ncmFtKCBwcm9ncmFtICk7Ci0KLSAgICAgICAgICAgIHN0YXRlLmluaXRB
dHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIGF0dHJpYnV0
ZXMucG9zaXRpb24gKTsKLSAgICAgICAgICAgIHN0YXRlLmVuYWJsZUF0dHJpYnV0ZSggYXR0cmli
dXRlcy51diApOwotICAgICAgICAgICAgc3RhdGUuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTsK
KyAgICAgICAgICAgIHJldHVybiBtZXJnZWQ7CiAKLSAgICAgICAgICAgIHN0YXRlLmRpc2FibGUo
IGdsLkNVTExfRkFDRSApOwotICAgICAgICAgICAgc3RhdGUuZW5hYmxlKCBnbC5CTEVORCApOwor
ICAgICAgICB9LAogCi0gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBnbC5BUlJBWV9CVUZGRVIs
IHZlcnRleEJ1ZmZlciApOwotICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlciggYXR0
cmlidXRlcy5wb3NpdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAyICogOCwgMCApOwotICAgICAg
ICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlciggYXR0cmlidXRlcy51diwgMiwgZ2wuRkxPQVQs
IGZhbHNlLCAyICogOCwgOCApOworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCB1bmlmb3Jtc19z
cmMgKSB7CiAKLSAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGdsLkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBlbGVtZW50QnVmZmVyICk7CisgICAgICAgICAgICB2YXIgdW5pZm9ybXNfZHN0ID0ge307
CiAKLSAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoIHVuaWZvcm1zLnByb2plY3Rpb25N
YXRyaXgsIGZhbHNlLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyApOworICAgICAg
ICAgICAgZm9yICggdmFyIHUgaW4gdW5pZm9ybXNfc3JjICkgewogCi0gICAgICAgICAgICBzdGF0
ZS5hY3RpdmVUZXh0dXJlKCBnbC5URVhUVVJFMCApOwotICAgICAgICAgICAgZ2wudW5pZm9ybTFp
KCB1bmlmb3Jtcy5tYXAsIDAgKTsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtc19kc3RbIHUgXSA9
IHt9OwogCi0gICAgICAgICAgICB2YXIgb2xkRm9nVHlwZSA9IDA7Ci0gICAgICAgICAgICB2YXIg
c2NlbmVGb2dUeXBlID0gMDsKLSAgICAgICAgICAgIHZhciBmb2cgPSBzY2VuZS5mb2c7CisgICAg
ICAgICAgICAgICAgZm9yICggdmFyIHAgaW4gdW5pZm9ybXNfc3JjWyB1IF0gKSB7CiAKLSAgICAg
ICAgICAgIGlmICggZm9nICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVyX3Ny
YyA9IHVuaWZvcm1zX3NyY1sgdSBdWyBwIF07CiAKLSAgICAgICAgICAgICAgICBnbC51bmlmb3Jt
M2YoIHVuaWZvcm1zLmZvZ0NvbG9yLCBmb2cuY29sb3IuciwgZm9nLmNvbG9yLmcsIGZvZy5jb2xv
ci5iICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggcGFyYW1ldGVyX3NyYyAmJiAoIHBhcmFt
ZXRlcl9zcmMuaXNDb2xvciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3Ny
Yy5pc01hdHJpeDMgfHwgcGFyYW1ldGVyX3NyYy5pc01hdHJpeDQgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9zcmMuaXNWZWN0b3IyIHx8IHBhcmFtZXRlcl9zcmMuaXNWZWN0
b3IzIHx8IHBhcmFtZXRlcl9zcmMuaXNWZWN0b3I0IHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfc3JjLmlzVGV4dHVyZSApICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBm
b2cuaXNGb2cgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc19kc3RbIHUgXVsg
cCBdID0gcGFyYW1ldGVyX3NyYy5jbG9uZSgpOwogCi0gICAgICAgICAgICAgICAgICAgIGdsLnVu
aWZvcm0xZiggdW5pZm9ybXMuZm9nTmVhciwgZm9nLm5lYXIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ2wudW5pZm9ybTFmKCB1bmlmb3Jtcy5mb2dGYXIsIGZvZy5mYXIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggcGFyYW1ldGVyX3NyYyApICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xaSggdW5pZm9ybXMuZm9nVHlwZSwgMSAp
OwotICAgICAgICAgICAgICAgICAgICBvbGRGb2dUeXBlID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgc2NlbmVGb2dUeXBlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zX2Rz
dFsgdSBdWyBwIF0gPSBwYXJhbWV0ZXJfc3JjLnNsaWNlKCk7CiAKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBmb2cuaXNGb2dFeHAyICkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogCi0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xZiggdW5pZm9ybXMuZm9nRGVuc2l0
eSwgZm9nLmRlbnNpdHkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zX2RzdFsg
dSBdWyBwIF0gPSBwYXJhbWV0ZXJfc3JjOwogCi0gICAgICAgICAgICAgICAgICAgIGdsLnVuaWZv
cm0xaSggdW5pZm9ybXMuZm9nVHlwZSwgMiApOwotICAgICAgICAgICAgICAgICAgICBvbGRGb2dU
eXBlID0gMjsKLSAgICAgICAgICAgICAgICAgICAgc2NlbmVGb2dUeXBlID0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFpKCB1bmlmb3Jt
cy5mb2dUeXBlLCAwICk7Ci0gICAgICAgICAgICAgICAgb2xkRm9nVHlwZSA9IDA7Ci0gICAgICAg
ICAgICAgICAgc2NlbmVGb2dUeXBlID0gMDsKKyAgICAgICAgICAgIHJldHVybiB1bmlmb3Jtc19k
c3Q7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAgfTsKIAotICAgICAgICAgICAg
Ly8gdXBkYXRlIHBvc2l0aW9ucyBhbmQgc29ydAorICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJk
b29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IHNwcml0ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICB2YXIgQ29s
b3JLZXl3b3JkcyA9IHsgJ2FsaWNlYmx1ZSc6IDB4RjBGOEZGLCAnYW50aXF1ZXdoaXRlJzogMHhG
QUVCRDcsICdhcXVhJzogMHgwMEZGRkYsICdhcXVhbWFyaW5lJzogMHg3RkZGRDQsICdhenVyZSc6
IDB4RjBGRkZGLAorICAgICAgICAnYmVpZ2UnOiAweEY1RjVEQywgJ2Jpc3F1ZSc6IDB4RkZFNEM0
LCAnYmxhY2snOiAweDAwMDAwMCwgJ2JsYW5jaGVkYWxtb25kJzogMHhGRkVCQ0QsICdibHVlJzog
MHgwMDAwRkYsICdibHVldmlvbGV0JzogMHg4QTJCRTIsCisgICAgICAgICdicm93bic6IDB4QTUy
QTJBLCAnYnVybHl3b29kJzogMHhERUI4ODcsICdjYWRldGJsdWUnOiAweDVGOUVBMCwgJ2NoYXJ0
cmV1c2UnOiAweDdGRkYwMCwgJ2Nob2NvbGF0ZSc6IDB4RDI2OTFFLCAnY29yYWwnOiAweEZGN0Y1
MCwKKyAgICAgICAgJ2Nvcm5mbG93ZXJibHVlJzogMHg2NDk1RUQsICdjb3Juc2lsayc6IDB4RkZG
OERDLCAnY3JpbXNvbic6IDB4REMxNDNDLCAnY3lhbic6IDB4MDBGRkZGLCAnZGFya2JsdWUnOiAw
eDAwMDA4QiwgJ2RhcmtjeWFuJzogMHgwMDhCOEIsCisgICAgICAgICdkYXJrZ29sZGVucm9kJzog
MHhCODg2MEIsICdkYXJrZ3JheSc6IDB4QTlBOUE5LCAnZGFya2dyZWVuJzogMHgwMDY0MDAsICdk
YXJrZ3JleSc6IDB4QTlBOUE5LCAnZGFya2toYWtpJzogMHhCREI3NkIsICdkYXJrbWFnZW50YSc6
IDB4OEIwMDhCLAorICAgICAgICAnZGFya29saXZlZ3JlZW4nOiAweDU1NkIyRiwgJ2RhcmtvcmFu
Z2UnOiAweEZGOEMwMCwgJ2RhcmtvcmNoaWQnOiAweDk5MzJDQywgJ2RhcmtyZWQnOiAweDhCMDAw
MCwgJ2RhcmtzYWxtb24nOiAweEU5OTY3QSwgJ2RhcmtzZWFncmVlbic6IDB4OEZCQzhGLAorICAg
ICAgICAnZGFya3NsYXRlYmx1ZSc6IDB4NDgzRDhCLCAnZGFya3NsYXRlZ3JheSc6IDB4MkY0RjRG
LCAnZGFya3NsYXRlZ3JleSc6IDB4MkY0RjRGLCAnZGFya3R1cnF1b2lzZSc6IDB4MDBDRUQxLCAn
ZGFya3Zpb2xldCc6IDB4OTQwMEQzLAorICAgICAgICAnZGVlcHBpbmsnOiAweEZGMTQ5MywgJ2Rl
ZXBza3libHVlJzogMHgwMEJGRkYsICdkaW1ncmF5JzogMHg2OTY5NjksICdkaW1ncmV5JzogMHg2
OTY5NjksICdkb2RnZXJibHVlJzogMHgxRTkwRkYsICdmaXJlYnJpY2snOiAweEIyMjIyMiwKKyAg
ICAgICAgJ2Zsb3JhbHdoaXRlJzogMHhGRkZBRjAsICdmb3Jlc3RncmVlbic6IDB4MjI4QjIyLCAn
ZnVjaHNpYSc6IDB4RkYwMEZGLCAnZ2FpbnNib3JvJzogMHhEQ0RDREMsICdnaG9zdHdoaXRlJzog
MHhGOEY4RkYsICdnb2xkJzogMHhGRkQ3MDAsCisgICAgICAgICdnb2xkZW5yb2QnOiAweERBQTUy
MCwgJ2dyYXknOiAweDgwODA4MCwgJ2dyZWVuJzogMHgwMDgwMDAsICdncmVlbnllbGxvdyc6IDB4
QURGRjJGLCAnZ3JleSc6IDB4ODA4MDgwLCAnaG9uZXlkZXcnOiAweEYwRkZGMCwgJ2hvdHBpbmsn
OiAweEZGNjlCNCwKKyAgICAgICAgJ2luZGlhbnJlZCc6IDB4Q0Q1QzVDLCAnaW5kaWdvJzogMHg0
QjAwODIsICdpdm9yeSc6IDB4RkZGRkYwLCAna2hha2knOiAweEYwRTY4QywgJ2xhdmVuZGVyJzog
MHhFNkU2RkEsICdsYXZlbmRlcmJsdXNoJzogMHhGRkYwRjUsICdsYXduZ3JlZW4nOiAweDdDRkMw
MCwKKyAgICAgICAgJ2xlbW9uY2hpZmZvbic6IDB4RkZGQUNELCAnbGlnaHRibHVlJzogMHhBREQ4
RTYsICdsaWdodGNvcmFsJzogMHhGMDgwODAsICdsaWdodGN5YW4nOiAweEUwRkZGRiwgJ2xpZ2h0
Z29sZGVucm9keWVsbG93JzogMHhGQUZBRDIsICdsaWdodGdyYXknOiAweEQzRDNEMywKKyAgICAg
ICAgJ2xpZ2h0Z3JlZW4nOiAweDkwRUU5MCwgJ2xpZ2h0Z3JleSc6IDB4RDNEM0QzLCAnbGlnaHRw
aW5rJzogMHhGRkI2QzEsICdsaWdodHNhbG1vbic6IDB4RkZBMDdBLCAnbGlnaHRzZWFncmVlbic6
IDB4MjBCMkFBLCAnbGlnaHRza3libHVlJzogMHg4N0NFRkEsCisgICAgICAgICdsaWdodHNsYXRl
Z3JheSc6IDB4Nzc4ODk5LCAnbGlnaHRzbGF0ZWdyZXknOiAweDc3ODg5OSwgJ2xpZ2h0c3RlZWxi
bHVlJzogMHhCMEM0REUsICdsaWdodHllbGxvdyc6IDB4RkZGRkUwLCAnbGltZSc6IDB4MDBGRjAw
LCAnbGltZWdyZWVuJzogMHgzMkNEMzIsCisgICAgICAgICdsaW5lbic6IDB4RkFGMEU2LCAnbWFn
ZW50YSc6IDB4RkYwMEZGLCAnbWFyb29uJzogMHg4MDAwMDAsICdtZWRpdW1hcXVhbWFyaW5lJzog
MHg2NkNEQUEsICdtZWRpdW1ibHVlJzogMHgwMDAwQ0QsICdtZWRpdW1vcmNoaWQnOiAweEJBNTVE
MywKKyAgICAgICAgJ21lZGl1bXB1cnBsZSc6IDB4OTM3MERCLCAnbWVkaXVtc2VhZ3JlZW4nOiAw
eDNDQjM3MSwgJ21lZGl1bXNsYXRlYmx1ZSc6IDB4N0I2OEVFLCAnbWVkaXVtc3ByaW5nZ3JlZW4n
OiAweDAwRkE5QSwgJ21lZGl1bXR1cnF1b2lzZSc6IDB4NDhEMUNDLAorICAgICAgICAnbWVkaXVt
dmlvbGV0cmVkJzogMHhDNzE1ODUsICdtaWRuaWdodGJsdWUnOiAweDE5MTk3MCwgJ21pbnRjcmVh
bSc6IDB4RjVGRkZBLCAnbWlzdHlyb3NlJzogMHhGRkU0RTEsICdtb2NjYXNpbic6IDB4RkZFNEI1
LCAnbmF2YWpvd2hpdGUnOiAweEZGREVBRCwKKyAgICAgICAgJ25hdnknOiAweDAwMDA4MCwgJ29s
ZGxhY2UnOiAweEZERjVFNiwgJ29saXZlJzogMHg4MDgwMDAsICdvbGl2ZWRyYWInOiAweDZCOEUy
MywgJ29yYW5nZSc6IDB4RkZBNTAwLCAnb3JhbmdlcmVkJzogMHhGRjQ1MDAsICdvcmNoaWQnOiAw
eERBNzBENiwKKyAgICAgICAgJ3BhbGVnb2xkZW5yb2QnOiAweEVFRThBQSwgJ3BhbGVncmVlbic6
IDB4OThGQjk4LCAncGFsZXR1cnF1b2lzZSc6IDB4QUZFRUVFLCAncGFsZXZpb2xldHJlZCc6IDB4
REI3MDkzLCAncGFwYXlhd2hpcCc6IDB4RkZFRkQ1LCAncGVhY2hwdWZmJzogMHhGRkRBQjksCisg
ICAgICAgICdwZXJ1JzogMHhDRDg1M0YsICdwaW5rJzogMHhGRkMwQ0IsICdwbHVtJzogMHhEREEw
REQsICdwb3dkZXJibHVlJzogMHhCMEUwRTYsICdwdXJwbGUnOiAweDgwMDA4MCwgJ3JlYmVjY2Fw
dXJwbGUnOiAweDY2MzM5OSwgJ3JlZCc6IDB4RkYwMDAwLCAncm9zeWJyb3duJzogMHhCQzhGOEYs
CisgICAgICAgICdyb3lhbGJsdWUnOiAweDQxNjlFMSwgJ3NhZGRsZWJyb3duJzogMHg4QjQ1MTMs
ICdzYWxtb24nOiAweEZBODA3MiwgJ3NhbmR5YnJvd24nOiAweEY0QTQ2MCwgJ3NlYWdyZWVuJzog
MHgyRThCNTcsICdzZWFzaGVsbCc6IDB4RkZGNUVFLAorICAgICAgICAnc2llbm5hJzogMHhBMDUy
MkQsICdzaWx2ZXInOiAweEMwQzBDMCwgJ3NreWJsdWUnOiAweDg3Q0VFQiwgJ3NsYXRlYmx1ZSc6
IDB4NkE1QUNELCAnc2xhdGVncmF5JzogMHg3MDgwOTAsICdzbGF0ZWdyZXknOiAweDcwODA5MCwg
J3Nub3cnOiAweEZGRkFGQSwKKyAgICAgICAgJ3NwcmluZ2dyZWVuJzogMHgwMEZGN0YsICdzdGVl
bGJsdWUnOiAweDQ2ODJCNCwgJ3Rhbic6IDB4RDJCNDhDLCAndGVhbCc6IDB4MDA4MDgwLCAndGhp
c3RsZSc6IDB4RDhCRkQ4LCAndG9tYXRvJzogMHhGRjYzNDcsICd0dXJxdW9pc2UnOiAweDQwRTBE
MCwKKyAgICAgICAgJ3Zpb2xldCc6IDB4RUU4MkVFLCAnd2hlYXQnOiAweEY1REVCMywgJ3doaXRl
JzogMHhGRkZGRkYsICd3aGl0ZXNtb2tlJzogMHhGNUY1RjUsICd5ZWxsb3cnOiAweEZGRkYwMCwg
J3llbGxvd2dyZWVuJzogMHg5QUNEMzIgfTsKIAotICAgICAgICAgICAgICAgIHZhciBzcHJpdGUg
PSBzcHJpdGVzWyBpIF07CisgICAgZnVuY3Rpb24gQ29sb3IoIHIsIGcsIGIgKSB7CiAKLSAgICAg
ICAgICAgICAgICBzcHJpdGUubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIGNhbWVy
YS5tYXRyaXhXb3JsZEludmVyc2UsIHNwcml0ZS5tYXRyaXhXb3JsZCApOwotICAgICAgICAgICAg
ICAgIHNwcml0ZS56ID0gLSBzcHJpdGUubW9kZWxWaWV3TWF0cml4LmVsZW1lbnRzWyAxNCBdOwor
ICAgICAgICBpZiAoIGcgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHIgaXMgVEhSRUUuQ29sb3IsIGhleCBvciBzdHJp
bmcKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNldCggciApOwogCi0gICAgICAgICAgICBzcHJp
dGVzLnNvcnQoIHBhaW50ZXJTb3J0U3RhYmxlICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAg
Ly8gcmVuZGVyIGFsbCBzcHJpdGVzCisgICAgICAgIHJldHVybiB0aGlzLnNldFJHQiggciwgZywg
YiApOwogCi0gICAgICAgICAgICB2YXIgc2NhbGUgPSBbXTsKKyAgICB9CiAKLSAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgbCA9IHNwcml0ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAg
ICBPYmplY3QuYXNzaWduKCBDb2xvci5wcm90b3R5cGUsIHsKIAotICAgICAgICAgICAgICAgIHZh
ciBzcHJpdGUgPSBzcHJpdGVzWyBpIF07Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0g
c3ByaXRlLm1hdGVyaWFsOworICAgICAgICBpc0NvbG9yOiB0cnVlLAogCi0gICAgICAgICAgICAg
ICAgaWYgKCBtYXRlcmlhbC52aXNpYmxlID09PSBmYWxzZSApIGNvbnRpbnVlOworICAgICAgICBy
OiAxLCBnOiAxLCBiOiAxLAogCi0gICAgICAgICAgICAgICAgc3ByaXRlLm9uQmVmb3JlUmVuZGVy
KCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdW5kZWZpbmVkLCBtYXRlcmlhbCwgdW5kZWZpbmVk
ICk7CisgICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgICAg
IGdsLnVuaWZvcm0xZiggdW5pZm9ybXMuYWxwaGFUZXN0LCBtYXRlcmlhbC5hbHBoYVRlc3QgKTsK
LSAgICAgICAgICAgICAgICBnbC51bmlmb3JtTWF0cml4NGZ2KCB1bmlmb3Jtcy5tb2RlbFZpZXdN
YXRyaXgsIGZhbHNlLCBzcHJpdGUubW9kZWxWaWV3TWF0cml4LmVsZW1lbnRzICk7CisgICAgICAg
ICAgICBpZiAoIHZhbHVlICYmIHZhbHVlLmlzQ29sb3IgKSB7CiAKLSAgICAgICAgICAgICAgICBz
cHJpdGUubWF0cml4V29ybGQuZGVjb21wb3NlKCBzcHJpdGVQb3NpdGlvbiwgc3ByaXRlUm90YXRp
b24sIHNwcml0ZVNjYWxlICk7CisgICAgICAgICAgICAgICAgdGhpcy5jb3B5KCB2YWx1ZSApOwog
Ci0gICAgICAgICAgICAgICAgc2NhbGVbIDAgXSA9IHNwcml0ZVNjYWxlLng7Ci0gICAgICAgICAg
ICAgICAgc2NhbGVbIDEgXSA9IHNwcml0ZVNjYWxlLnk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGZv
Z1R5cGUgPSAwOworICAgICAgICAgICAgICAgIHRoaXMuc2V0SGV4KCB2YWx1ZSApOwogCi0gICAg
ICAgICAgICAgICAgaWYgKCBzY2VuZS5mb2cgJiYgbWF0ZXJpYWwuZm9nICkgeworICAgICAgICAg
ICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyApIHsKIAotICAgICAgICAg
ICAgICAgICAgICBmb2dUeXBlID0gc2NlbmVGb2dUeXBlOworICAgICAgICAgICAgICAgIHRoaXMu
c2V0U3R5bGUoIHZhbHVlICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAoIG9sZEZvZ1R5cGUgIT09IGZvZ1R5cGUgKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWkoIHVu
aWZvcm1zLmZvZ1R5cGUsIGZvZ1R5cGUgKTsKLSAgICAgICAgICAgICAgICAgICAgb2xkRm9nVHlw
ZSA9IGZvZ1R5cGU7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHNl
dFNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1h
dGVyaWFsLm1hcCAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRoaXMuciA9IHNjYWxhcjsKKyAg
ICAgICAgICAgIHRoaXMuZyA9IHNjYWxhcjsKKyAgICAgICAgICAgIHRoaXMuYiA9IHNjYWxhcjsK
IAotICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoIHVuaWZvcm1zLnV2T2Zmc2V0LCBt
YXRlcmlhbC5tYXAub2Zmc2V0LngsIG1hdGVyaWFsLm1hcC5vZmZzZXQueSApOwotICAgICAgICAg
ICAgICAgICAgICBnbC51bmlmb3JtMmYoIHVuaWZvcm1zLnV2U2NhbGUsIG1hdGVyaWFsLm1hcC5y
ZXBlYXQueCwgbWF0ZXJpYWwubWFwLnJlcGVhdC55ICk7CisgICAgICAgICAgICByZXR1cm4gdGhp
czsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
ICAgICAgICAgZ2wudW5pZm9ybTJmKCB1bmlmb3Jtcy51dk9mZnNldCwgMCwgMCApOwotICAgICAg
ICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoIHVuaWZvcm1zLnV2U2NhbGUsIDEsIDEgKTsKKyAg
ICAgICAgc2V0SGV4OiBmdW5jdGlvbiAoIGhleCApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGhleCA9IE1hdGguZmxvb3IoIGhleCApOwogCi0gICAgICAgICAgICAgICAgZ2wu
dW5pZm9ybTFmKCB1bmlmb3Jtcy5vcGFjaXR5LCBtYXRlcmlhbC5vcGFjaXR5ICk7Ci0gICAgICAg
ICAgICAgICAgZ2wudW5pZm9ybTNmKCB1bmlmb3Jtcy5jb2xvciwgbWF0ZXJpYWwuY29sb3Iuciwg
bWF0ZXJpYWwuY29sb3IuZywgbWF0ZXJpYWwuY29sb3IuYiApOworICAgICAgICAgICAgdGhpcy5y
ID0gKCBoZXggPj4gMTYgJiAyNTUgKSAvIDI1NTsKKyAgICAgICAgICAgIHRoaXMuZyA9ICggaGV4
ID4+IDggJiAyNTUgKSAvIDI1NTsKKyAgICAgICAgICAgIHRoaXMuYiA9ICggaGV4ICYgMjU1ICkg
LyAyNTU7CiAKLSAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWYoIHVuaWZvcm1zLnJvdGF0aW9u
LCBtYXRlcmlhbC5yb3RhdGlvbiApOwotICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZnYoIHVu
aWZvcm1zLnNjYWxlLCBzY2FsZSApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcsIG1hdGVyaWFs
LmJsZW5kRXF1YXRpb24sIG1hdGVyaWFsLmJsZW5kU3JjLCBtYXRlcmlhbC5ibGVuZERzdCwgbWF0
ZXJpYWwuYmxlbmRFcXVhdGlvbkFscGhhLCBtYXRlcmlhbC5ibGVuZFNyY0FscGhhLCBtYXRlcmlh
bC5ibGVuZERzdEFscGhhLCBtYXRlcmlhbC5wcmVtdWx0aXBsaWVkQWxwaGEgKTsKLSAgICAgICAg
ICAgICAgICBzdGF0ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoIG1hdGVyaWFsLmRlcHRoVGVzdCAp
OwotICAgICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayggbWF0ZXJpYWwu
ZGVwdGhXcml0ZSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlh
bC5tYXAgKSB7CisgICAgICAgIHNldFJHQjogZnVuY3Rpb24gKCByLCBnLCBiICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmUyRCggbWF0ZXJpYWwubWFwLCAwICk7
CisgICAgICAgICAgICB0aGlzLnIgPSByOworICAgICAgICAgICAgdGhpcy5nID0gZzsKKyAgICAg
ICAgICAgIHRoaXMuYiA9IGI7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0VGV4dHVy
ZTJEKCB0ZXh0dXJlLCAwICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgIHNldEhTTDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgZ2wuZHJhd0VsZW1l
bnRzKCBnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwICk7CisgICAgICAgICAg
ICBmdW5jdGlvbiBodWUycmdiKCBwLCBxLCB0ICkgewogCi0gICAgICAgICAgICAgICAgc3ByaXRl
Lm9uQWZ0ZXJSZW5kZXIoIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1bmRlZmluZWQsIG1hdGVy
aWFsLCB1bmRlZmluZWQgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHQgPCAwICkgdCArPSAxOwor
ICAgICAgICAgICAgICAgIGlmICggdCA+IDEgKSB0IC09IDE7CisgICAgICAgICAgICAgICAgaWYg
KCB0IDwgMSAvIDYgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiB0OworICAgICAgICAgICAg
ICAgIGlmICggdCA8IDEgLyAyICkgcmV0dXJuIHE7CisgICAgICAgICAgICAgICAgaWYgKCB0IDwg
MiAvIDMgKSByZXR1cm4gcCArICggcSAtIHAgKSAqIDYgKiAoIDIgLyAzIC0gdCApOworICAgICAg
ICAgICAgICAgIHJldHVybiBwOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIHJl
c3RvcmUgZ2wKLQotICAgICAgICAgICAgc3RhdGUuZW5hYmxlKCBnbC5DVUxMX0ZBQ0UgKTsKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRIU0woIGgsIHMsIGwgKSB7CiAKLSAgICAgICAg
ICAgIHJlbmRlcmVyLnJlc2V0R0xTdGF0ZSgpOworICAgICAgICAgICAgICAgIC8vIGgscyxsIHJh
bmdlcyBhcmUgaW4gMC4wIC0gMS4wCisgICAgICAgICAgICAgICAgaCA9IF9NYXRoLmV1Y2xpZGVh
bk1vZHVsbyggaCwgMSApOworICAgICAgICAgICAgICAgIHMgPSBfTWF0aC5jbGFtcCggcywgMCwg
MSApOworICAgICAgICAgICAgICAgIGwgPSBfTWF0aC5jbGFtcCggbCwgMCwgMSApOwogCi0gICAg
ICAgIH07CisgICAgICAgICAgICAgICAgaWYgKCBzID09PSAwICkgewogCi0gICAgICAgIGZ1bmN0
aW9uIGNyZWF0ZVByb2dyYW0oKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuciA9IHRoaXMu
ZyA9IHRoaXMuYiA9IGw7CiAKLSAgICAgICAgICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJv
Z3JhbSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHZhciB2ZXJ0
ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoIGdsLlZFUlRFWF9TSEFERVIgKTsKLSAgICAgICAg
ICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlciggZ2wuRlJBR01FTlRfU0hB
REVSICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBwID0gbCA8PSAwLjUgPyBsICogKCAxICsg
cyApIDogbCArIHMgLSAoIGwgKiBzICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBxID0gKCAy
ICogbCApIC0gcDsKIAotICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKCB2ZXJ0ZXhTaGFkZXIs
IFsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yID0gaHVlMnJnYiggcSwgcCwgaCArIDEgLyAz
ICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZyA9IGh1ZTJyZ2IoIHEsIHAsIGggKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5iID0gaHVlMnJnYiggcSwgcCwgaCAtIDEgLyAzICk7CiAK
LSAgICAgICAgICAgICAgICAncHJlY2lzaW9uICcgKyByZW5kZXJlci5nZXRQcmVjaXNpb24oKSAr
ICcgZmxvYXQ7JywKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAnI2RlZmlu
ZSBTSEFERVJfTkFNRSAnICsgJ1Nwcml0ZU1hdGVyaWFsJywKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4
OycsCi0gICAgICAgICAgICAgICAgJ3VuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OycsCi0g
ICAgICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgcm90YXRpb247JywKLSAgICAgICAgICAgICAg
ICAndW5pZm9ybSB2ZWMyIHNjYWxlOycsCi0gICAgICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMiB1
dk9mZnNldDsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIHZlYzIgdXZTY2FsZTsnLAorICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsn
LAotICAgICAgICAgICAgICAgICdhdHRyaWJ1dGUgdmVjMiB1djsnLAorICAgICAgICB9KCksCiAK
LSAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZVVjsnLAorICAgICAgICBzZXRTdHlsZTog
ZnVuY3Rpb24gKCBzdHlsZSApIHsKIAotICAgICAgICAgICAgICAgICd2b2lkIG1haW4oKSB7JywK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZUFscGhhKCBzdHJpbmcgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgJ3ZVViA9IHV2T2Zmc2V0ICsgdXYgKiB1dlNjYWxlOycsCisgICAgICAgICAg
ICAgICAgaWYgKCBzdHJpbmcgPT09IHVuZGVmaW5lZCApIHJldHVybjsKIAotICAgICAgICAgICAg
ICAgICAgICAndmVjMiBhbGlnbmVkUG9zaXRpb24gPSBwb3NpdGlvbiAqIHNjYWxlOycsCisgICAg
ICAgICAgICAgICAgaWYgKCBwYXJzZUZsb2F0KCBzdHJpbmcgKSA8IDEgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgJ3ZlYzIgcm90YXRlZFBvc2l0aW9uOycsCi0gICAgICAgICAgICAgICAgICAg
ICdyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54
IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7JywKLSAgICAgICAgICAgICAg
ICAgICAgJ3JvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0
aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsnLAorICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9m
ICcgKyBzdHlsZSArICcgd2lsbCBiZSBpZ25vcmVkLicgKTsKIAotICAgICAgICAgICAgICAgICAg
ICAndmVjNCBmaW5hbFBvc2l0aW9uOycsCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgICdmaW5hbFBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAw
LjAsIDAuMCwgMS4wICk7JywKLSAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsUG9zaXRpb24ueHkg
Kz0gcm90YXRlZFBvc2l0aW9uOycsCi0gICAgICAgICAgICAgICAgICAgICdmaW5hbFBvc2l0aW9u
ID0gcHJvamVjdGlvbk1hdHJpeCAqIGZpbmFsUG9zaXRpb247JywKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAnZ2xfUG9zaXRpb24gPSBmaW5hbFBvc2l0aW9uOycsCiAKLSAg
ICAgICAgICAgICAgICAnfScKKyAgICAgICAgICAgIHZhciBtOwogCi0gICAgICAgICAgICBdLmpv
aW4oICdcbicgKSApOworICAgICAgICAgICAgaWYgKCBtID0gL14oKD86cmdifGhzbClhPylcKFxz
KihbXlwpXSopXCkvLmV4ZWMoIHN0eWxlICkgKSB7CiAKLSAgICAgICAgICAgIGdsLnNoYWRlclNv
dXJjZSggZnJhZ21lbnRTaGFkZXIsIFsKKyAgICAgICAgICAgICAgICAvLyByZ2IgLyBoc2wKIAot
ICAgICAgICAgICAgICAgICdwcmVjaXNpb24gJyArIHJlbmRlcmVyLmdldFByZWNpc2lvbigpICsg
JyBmbG9hdDsnLAorICAgICAgICAgICAgICAgIHZhciBjb2xvcjsKKyAgICAgICAgICAgICAgICB2
YXIgbmFtZSA9IG1bIDEgXTsKKyAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IG1bIDIg
XTsKIAotICAgICAgICAgICAgICAgICcjZGVmaW5lIFNIQURFUl9OQU1FICcgKyAnU3ByaXRlTWF0
ZXJpYWwnLAorICAgICAgICAgICAgICAgIHN3aXRjaCAoIG5hbWUgKSB7CiAKLSAgICAgICAgICAg
ICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycsCi0gICAgICAgICAgICAgICAgJ3VuaWZvcm0gc2Ft
cGxlcjJEIG1hcDsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IG9wYWNpdHk7JywK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAncmdiJzoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAncmdiYSc6CiAKLSAgICAgICAgICAgICAgICAndW5pZm9ybSBpbnQgZm9nVHlwZTsnLAotICAg
ICAgICAgICAgICAgICd1bmlmb3JtIHZlYzMgZm9nQ29sb3I7JywKLSAgICAgICAgICAgICAgICAn
dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OycsCi0gICAgICAgICAgICAgICAgJ3VuaWZvcm0gZmxv
YXQgZm9nTmVhcjsnLAotICAgICAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZvZ0ZhcjsnLAot
ICAgICAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjb2xvciA9IC9eKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylc
cyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKCBjb21wb25lbnRzICkgKSB7CiAK
LSAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZVVjsnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHJnYigyNTUsMCwwKSByZ2JhKDI1NSwwLDAsMC41KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuciA9IE1hdGgubWluKCAyNTUsIHBhcnNlSW50KCBjb2xvclsg
MSBdLCAxMCApICkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nID0g
TWF0aC5taW4oIDI1NSwgcGFyc2VJbnQoIGNvbG9yWyAyIF0sIDEwICkgKSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSBNYXRoLm1pbiggMjU1LCBwYXJzZUludCgg
Y29sb3JbIDMgXSwgMTAgKSApIC8gMjU1OwogCi0gICAgICAgICAgICAgICAgJ3ZvaWQgbWFpbigp
IHsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFscGhhKCBjb2xvclsgNSBd
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgJ3ZlYzQgdGV4dHVyZSA9IHRleHR1cmUyRCggbWFw
LCB2VVYgKTsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICAgICAgICAgICdpZiAoIHRleHR1cmUuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAnZ2xf
RnJhZ0NvbG9yID0gdmVjNCggY29sb3IgKiB0ZXh0dXJlLnh5eiwgdGV4dHVyZS5hICogb3BhY2l0
eSApOycsCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbG9yID0gL14oXGQrKVwlXHMq
LFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQv
LmV4ZWMoIGNvbXBvbmVudHMgKSApIHsKIAotICAgICAgICAgICAgICAgICAgICAnaWYgKCBmb2dU
eXBlID4gMCApIHsnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJnYigxMDAlLDAl
LDAlKSByZ2JhKDEwMCUsMCUsMCUsMC41KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuciA9IE1hdGgubWluKCAxMDAsIHBhcnNlSW50KCBjb2xvclsgMSBdLCAxMCApICkgLyAxMDA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nID0gTWF0aC5taW4oIDEwMCwgcGFy
c2VJbnQoIGNvbG9yWyAyIF0sIDEwICkgKSAvIDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmIgPSBNYXRoLm1pbiggMTAwLCBwYXJzZUludCggY29sb3JbIDMgXSwgMTAgKSAp
IC8gMTAwOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAnZmxvYXQgZGVwdGggPSBnbF9GcmFn
Q29vcmQueiAvIGdsX0ZyYWdDb29yZC53OycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZmxv
YXQgZm9nRmFjdG9yID0gMC4wOycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
QWxwaGEoIGNvbG9yWyA1IF0gKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgJ2lmICggZm9n
VHlwZSA9PSAxICkgeycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9nRmFjdG9yID0gc21vb3Roc3RlcCgg
Zm9nTmVhciwgZm9nRmFyLCBkZXB0aCApOycsCisgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICd9IGVsc2UgeycsCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25zdCBmbG9hdCBM
T0cyID0gMS40NDI2OTU7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9nRmFjdG9y
ID0gZXhwMiggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIGRlcHRoICogZGVwdGggKiBMT0cy
ICk7JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9nRmFjdG9yID0gMS4wIC0gY2xh
bXAoIGZvZ0ZhY3RvciwgMC4wLCAxLjAgKTsnLAorICAgICAgICAgICAgICAgICAgICBjYXNlICdo
c2wnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICdoc2xhJzoKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgJ30nLAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb2xvciA9IC9eKFsw
LTldKlwuP1swLTldKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKCxccyooWzAtOV0q
XC4/WzAtOV0rKVxzKik/JC8uZXhlYyggY29tcG9uZW50cyApICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAnZ2xfRnJhZ0NvbG9yID0gbWl4KCBnbF9GcmFnQ29sb3IsIHZlYzQoIGZvZ0Nv
bG9yLCBnbF9GcmFnQ29sb3IudyApLCBmb2dGYWN0b3IgKTsnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhzbCgxMjAsNTAlLDUwJSkgaHNsYSgxMjAsNTAlLDUwJSwwLjUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBwYXJzZUZsb2F0KCBjb2xvclsgMSBdICkg
LyAzNjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBwYXJzZUludCggY29s
b3JbIDIgXSwgMTAgKSAvIDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9
IHBhcnNlSW50KCBjb2xvclsgMyBdLCAxMCApIC8gMTAwOwogCi0gICAgICAgICAgICAgICAgICAg
ICd9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVBbHBoYSggY29sb3JbIDUg
XSApOwogCi0gICAgICAgICAgICAgICAgJ30nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuc2V0SFNMKCBoLCBzLCBsICk7CiAKLSAgICAgICAgICAgIF0uam9pbiggJ1xu
JyApICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGdsLmNvbXBp
bGVTaGFkZXIoIHZlcnRleFNoYWRlciApOwotICAgICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcigg
ZnJhZ21lbnRTaGFkZXIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICBnbC5hdHRhY2hTaGFkZXIoIHByb2dyYW0sIHZlcnRleFNoYWRlciApOwotICAgICAg
ICAgICAgZ2wuYXR0YWNoU2hhZGVyKCBwcm9ncmFtLCBmcmFnbWVudFNoYWRlciApOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2wubGlua1Byb2dyYW0oIHByb2dyYW0gKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG0gPSAvXlwjKFtBLUZhLWYwLTldKykkLy5leGVjKCBzdHls
ZSApICkgewogCi0gICAgICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICAgICAgICAgICAgICAv
LyBoZXggY29sb3IKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGhleCA9IG1bIDEg
XTsKKyAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGhleC5sZW5ndGg7CiAKLSAgICAgICAgZnVu
Y3Rpb24gcGFpbnRlclNvcnRTdGFibGUoIGEsIGIgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBz
aXplID09PSAzICkgewogCi0gICAgICAgICAgICBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVu
ZGVyT3JkZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vICNmZjAKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDAgKSArIGhleC5jaGFyQXQoIDAg
KSwgMTYgKSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5nID0gcGFyc2VJbnQoIGhl
eC5jaGFyQXQoIDEgKSArIGhleC5jaGFyQXQoIDEgKSwgMTYgKSAvIDI1NTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5iID0gcGFyc2VJbnQoIGhleC5jaGFyQXQoIDIgKSArIGhleC5jaGFyQXQo
IDIgKSwgMTYgKSAvIDI1NTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBhLnJlbmRlck9yZGVy
IC0gYi5yZW5kZXJPcmRlcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGEueiAhPT0gYi56ICkgeworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHNpemUgPT09IDYgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gYi56IC0g
YS56OworICAgICAgICAgICAgICAgICAgICAvLyAjZmYwMDAwCisgICAgICAgICAgICAgICAgICAg
IHRoaXMuciA9IHBhcnNlSW50KCBoZXguY2hhckF0KCAwICkgKyBoZXguY2hhckF0KCAxICksIDE2
ICkgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZyA9IHBhcnNlSW50KCBoZXguY2hh
ckF0KCAyICkgKyBoZXguY2hhckF0KCAzICksIDE2ICkgLyAyNTU7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuYiA9IHBhcnNlSW50KCBoZXguY2hhckF0KCA0ICkgKyBoZXguY2hhckF0KCA1ICks
IDE2ICkgLyAyNTU7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGIuaWQgLSBhLmlkOworICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0KLQotICAgIH0KKyAg
ICAgICAgICAgIGlmICggc3R5bGUgJiYgc3R5bGUubGVuZ3RoID4gMCApIHsKIAotICAgIC8qKgot
ICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICogQGF1dGhv
ciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAgKi8KKyAgICAgICAg
ICAgICAgICAvLyBjb2xvciBrZXl3b3JkcworICAgICAgICAgICAgICAgIHZhciBoZXggPSBDb2xv
cktleXdvcmRzWyBzdHlsZSBdOwogCi0gICAgdmFyIG1hdGVyaWFsSWQgPSAwOworICAgICAgICAg
ICAgICAgIGlmICggaGV4ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICBmdW5jdGlvbiBNYXRlcmlh
bCgpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVkCisgICAgICAgICAgICAgICAgICAgIHRo
aXMuc2V0SGV4KCBoZXggKTsKIAotICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMs
ICdpZCcsIHsgdmFsdWU6IG1hdGVyaWFsSWQgKysgfSApOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAKLSAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIHVua25vd24gY29sb3IKKyAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgJyArIHN0eWxlICk7CiAKLSAgICAg
ICAgdGhpcy5uYW1lID0gJyc7Ci0gICAgICAgIHRoaXMudHlwZSA9ICdNYXRlcmlhbCc7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuZm9nID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5s
aWdodHMgPSB0cnVlOworICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuYmxlbmRpbmcgPSBO
b3JtYWxCbGVuZGluZzsKLSAgICAgICAgdGhpcy5zaWRlID0gRnJvbnRTaWRlOwotICAgICAgICB0
aGlzLnNoYWRpbmcgPSBTbW9vdGhTaGFkaW5nOyAvLyBUSFJFRS5GbGF0U2hhZGluZywgVEhSRUUu
U21vb3RoU2hhZGluZwotICAgICAgICB0aGlzLnZlcnRleENvbG9ycyA9IE5vQ29sb3JzOyAvLyBU
SFJFRS5Ob0NvbG9ycywgVEhSRUUuVmVydGV4Q29sb3JzLCBUSFJFRS5GYWNlQ29sb3JzCisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICB0aGlzLm9wYWNpdHkgPSAxOwotICAgICAg
ICB0aGlzLnRyYW5zcGFyZW50ID0gZmFsc2U7CisgICAgICAgIH0sCiAKLSAgICAgICAgdGhpcy5i
bGVuZFNyYyA9IFNyY0FscGhhRmFjdG9yOwotICAgICAgICB0aGlzLmJsZW5kRHN0ID0gT25lTWlu
dXNTcmNBbHBoYUZhY3RvcjsKLSAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gQWRkRXF1YXRp
b247Ci0gICAgICAgIHRoaXMuYmxlbmRTcmNBbHBoYSA9IG51bGw7Ci0gICAgICAgIHRoaXMuYmxl
bmREc3RBbHBoYSA9IG51bGw7Ci0gICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhID0gbnVs
bDsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB0aGlzLmRlcHRoRnVu
YyA9IExlc3NFcXVhbERlcHRoOwotICAgICAgICB0aGlzLmRlcHRoVGVzdCA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuZGVwdGhXcml0ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMu
Y29uc3RydWN0b3IoIHRoaXMuciwgdGhpcy5nLCB0aGlzLmIgKTsKIAotICAgICAgICB0aGlzLmNs
aXBwaW5nUGxhbmVzID0gbnVsbDsKLSAgICAgICAgdGhpcy5jbGlwSW50ZXJzZWN0aW9uID0gZmFs
c2U7Ci0gICAgICAgIHRoaXMuY2xpcFNoYWRvd3MgPSBmYWxzZTsKKyAgICAgICAgfSwKIAotICAg
ICAgICB0aGlzLmNvbG9yV3JpdGUgPSB0cnVlOworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIGNv
bG9yICkgewogCi0gICAgICAgIHRoaXMucHJlY2lzaW9uID0gbnVsbDsgLy8gb3ZlcnJpZGUgdGhl
IHJlbmRlcmVyJ3MgZGVmYXVsdCBwcmVjaXNpb24gZm9yIHRoaXMgbWF0ZXJpYWwKKyAgICAgICAg
ICAgIHRoaXMuciA9IGNvbG9yLnI7CisgICAgICAgICAgICB0aGlzLmcgPSBjb2xvci5nOworICAg
ICAgICAgICAgdGhpcy5iID0gY29sb3IuYjsKIAotICAgICAgICB0aGlzLnBvbHlnb25PZmZzZXQg
PSBmYWxzZTsKLSAgICAgICAgdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMDsKLSAgICAgICAg
dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMgPSAwOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgdGhpcy5kaXRoZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgfSwKIAotICAgICAgICB0
aGlzLmFscGhhVGVzdCA9IDA7Ci0gICAgICAgIHRoaXMucHJlbXVsdGlwbGllZEFscGhhID0gZmFs
c2U7CisgICAgICAgIGNvcHlHYW1tYVRvTGluZWFyOiBmdW5jdGlvbiAoIGNvbG9yLCBnYW1tYUZh
Y3RvciApIHsKIAotICAgICAgICB0aGlzLm92ZXJkcmF3ID0gMDsgLy8gT3ZlcmRyYXduIHBpeGVs
cyAodHlwaWNhbGx5IGJldHdlZW4gMCBhbmQgMSkgZm9yIGZpeGluZyBhbnRpYWxpYXNpbmcgZ2Fw
cyBpbiBDYW52YXNSZW5kZXJlcgorICAgICAgICAgICAgaWYgKCBnYW1tYUZhY3RvciA9PT0gdW5k
ZWZpbmVkICkgZ2FtbWFGYWN0b3IgPSAyLjA7CiAKLSAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRoaXMuciA9IE1hdGgucG93KCBjb2xvci5yLCBnYW1tYUZhY3RvciAp
OworICAgICAgICAgICAgdGhpcy5nID0gTWF0aC5wb3coIGNvbG9yLmcsIGdhbW1hRmFjdG9yICk7
CisgICAgICAgICAgICB0aGlzLmIgPSBNYXRoLnBvdyggY29sb3IuYiwgZ2FtbWFGYWN0b3IgKTsK
IAotICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCi0gICAgfQorICAgICAgICB9LAogCi0gICAgT2JqZWN0LmFzc2lnbiggTWF0ZXJpYWwu
cHJvdG90eXBlLCBFdmVudERpc3BhdGNoZXIucHJvdG90eXBlLCB7CisgICAgICAgIGNvcHlMaW5l
YXJUb0dhbW1hOiBmdW5jdGlvbiAoIGNvbG9yLCBnYW1tYUZhY3RvciApIHsKIAotICAgICAgICBp
c01hdGVyaWFsOiB0cnVlLAorICAgICAgICAgICAgaWYgKCBnYW1tYUZhY3RvciA9PT0gdW5kZWZp
bmVkICkgZ2FtbWFGYWN0b3IgPSAyLjA7CiAKLSAgICAgICAgb25CZWZvcmVDb21waWxlOiBmdW5j
dGlvbiAoKSB7fSwKKyAgICAgICAgICAgIHZhciBzYWZlSW52ZXJzZSA9ICggZ2FtbWFGYWN0b3Ig
PiAwICkgPyAoIDEuMCAvIGdhbW1hRmFjdG9yICkgOiAxLjA7CiAKLSAgICAgICAgc2V0VmFsdWVz
OiBmdW5jdGlvbiAoIHZhbHVlcyApIHsKKyAgICAgICAgICAgIHRoaXMuciA9IE1hdGgucG93KCBj
b2xvci5yLCBzYWZlSW52ZXJzZSApOworICAgICAgICAgICAgdGhpcy5nID0gTWF0aC5wb3coIGNv
bG9yLmcsIHNhZmVJbnZlcnNlICk7CisgICAgICAgICAgICB0aGlzLmIgPSBNYXRoLnBvdyggY29s
b3IuYiwgc2FmZUludmVyc2UgKTsKIAotICAgICAgICAgICAgaWYgKCB2YWx1ZXMgPT09IHVuZGVm
aW5lZCApIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBm
b3IgKCB2YXIga2V5IGluIHZhbHVlcyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAg
IHZhciBuZXdWYWx1ZSA9IHZhbHVlc1sga2V5IF07CisgICAgICAgIGNvbnZlcnRHYW1tYVRvTGlu
ZWFyOiBmdW5jdGlvbiAoIGdhbW1hRmFjdG9yICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBu
ZXdWYWx1ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdGhpcy5jb3B5R2FtbWFUb0xp
bmVhciggdGhpcywgZ2FtbWFGYWN0b3IgKTsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICJUSFJFRS5NYXRlcmlhbDogJyIgKyBrZXkgKyAiJyBwYXJhbWV0ZXIgaXMgdW5kZWZp
bmVkLiIgKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
ICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzWyBrZXkgXTsKKyAgICAgICAgY29udmVydExpbmVh
clRvR2FtbWE6IGZ1bmN0aW9uICggZ2FtbWFGYWN0b3IgKSB7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdGhpcy5jb3B5
TGluZWFyVG9HYW1tYSggdGhpcywgZ2FtbWFGYWN0b3IgKTsKIAotICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLndhcm4oICJUSFJFRS4iICsgdGhpcy50eXBlICsgIjogJyIgKyBrZXkgKyAiJyBp
cyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGlmICggY3VycmVudFZhbHVlICYmIGN1
cnJlbnRWYWx1ZS5pc0NvbG9yICkgeworICAgICAgICBjb3B5U1JHQlRvTGluZWFyOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnNldCggbmV3VmFsdWUg
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIFNSR0JUb0xpbmVhciggYyApIHsKIAotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoICggY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5pc1ZlY3Rv
cjMgKSAmJiAoIG5ld1ZhbHVlICYmIG5ld1ZhbHVlLmlzVmVjdG9yMyApICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAoIGMgPCAwLjA0MDQ1ICkgPyBjICogMC4wNzczOTkzODA4IDogTWF0aC5w
b3coIGMgKiAwLjk0Nzg2NzI5ODYgKyAwLjA1MjEzMjcwMTQsIDIuNCApOwogCi0gICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRWYWx1ZS5jb3B5KCBuZXdWYWx1ZSApOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgga2V5ID09PSAnb3ZlcmRyYXcnICkgeworICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvcHlTUkdCVG9MaW5lYXIoIGNvbG9yICkgewogCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBvdmVyZHJhdyBpcyBiYWNrd2FyZHMtY29tcGF0
aWJsZSB3aXRoIGxlZ2FjeSBib29sZWFuIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgdGhpc1sg
a2V5IF0gPSBOdW1iZXIoIG5ld1ZhbHVlICk7CisgICAgICAgICAgICAgICAgdGhpcy5yID0gU1JH
QlRvTGluZWFyKCBjb2xvci5yICk7CisgICAgICAgICAgICAgICAgdGhpcy5nID0gU1JHQlRvTGlu
ZWFyKCBjb2xvci5nICk7CisgICAgICAgICAgICAgICAgdGhpcy5iID0gU1JHQlRvTGluZWFyKCBj
b2xvci5iICk7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgIHRoaXNbIGtleSBdID0gbmV3VmFsdWU7
CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB9KCksCiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgY29weUxpbmVhclRvU1JHQjogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICBmdW5jdGlvbiBMaW5lYXJUb1NSR0IoIGMgKSB7CiAKLSAg
ICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICggYyA8IDAuMDAzMTMwOCApID8gYyAqIDEyLjkyIDogMS4wNTUgKiAoIE1hdGgucG93KCBjLCAw
LjQxNjY2ICkgKSAtIDAuMDU1OwogCi0gICAgICAgICAgICB2YXIgaXNSb290ID0gbWV0YSA9PT0g
dW5kZWZpbmVkOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGlzUm9vdCApIHsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb3B5TGluZWFyVG9TUkdCKCBjb2xvciApIHsK
IAotICAgICAgICAgICAgICAgIG1ldGEgPSB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmVz
OiB7fSwKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VzOiB7fQotICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgdGhpcy5yID0gTGluZWFyVG9TUkdCKCBjb2xvci5yICk7CisgICAg
ICAgICAgICAgICAgdGhpcy5nID0gTGluZWFyVG9TUkdCKCBjb2xvci5nICk7CisgICAgICAgICAg
ICAgICAgdGhpcy5iID0gTGluZWFyVG9TUkdCKCBjb2xvci5iICk7CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgdmFyIGRhdGEgPSB7
Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgICAgICAgICAgICAgdmVyc2lv
bjogNC41LAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTWF0ZXJpYWwnLAotICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0b3I6ICdNYXRlcmlhbC50b0pTT04nCi0gICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgLy8gc3RhbmRhcmQgTWF0ZXJpYWwgc2Vy
aWFsaXphdGlvbgotICAgICAgICAgICAgZGF0YS51dWlkID0gdGhpcy51dWlkOwotICAgICAgICAg
ICAgZGF0YS50eXBlID0gdGhpcy50eXBlOwotCi0gICAgICAgICAgICBpZiAoIHRoaXMubmFtZSAh
PT0gJycgKSBkYXRhLm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgIH0oKSwKIAotICAgICAgICAg
ICAgaWYgKCB0aGlzLmNvbG9yICYmIHRoaXMuY29sb3IuaXNDb2xvciApIGRhdGEuY29sb3IgPSB0
aGlzLmNvbG9yLmdldEhleCgpOworICAgICAgICBjb252ZXJ0U1JHQlRvTGluZWFyOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCAp
IGRhdGEucm91Z2huZXNzID0gdGhpcy5yb3VnaG5lc3M7Ci0gICAgICAgICAgICBpZiAoIHRoaXMu
bWV0YWxuZXNzICE9PSB1bmRlZmluZWQgKSBkYXRhLm1ldGFsbmVzcyA9IHRoaXMubWV0YWxuZXNz
OworICAgICAgICAgICAgdGhpcy5jb3B5U1JHQlRvTGluZWFyKCB0aGlzICk7CiAKLSAgICAgICAg
ICAgIGlmICggdGhpcy5lbWlzc2l2ZSAmJiB0aGlzLmVtaXNzaXZlLmlzQ29sb3IgKSBkYXRhLmVt
aXNzaXZlID0gdGhpcy5lbWlzc2l2ZS5nZXRIZXgoKTsKLSAgICAgICAgICAgIGlmICggdGhpcy5z
cGVjdWxhciAmJiB0aGlzLnNwZWN1bGFyLmlzQ29sb3IgKSBkYXRhLnNwZWN1bGFyID0gdGhpcy5z
cGVjdWxhci5nZXRIZXgoKTsKLSAgICAgICAgICAgIGlmICggdGhpcy5zaGluaW5lc3MgIT09IHVu
ZGVmaW5lZCApIGRhdGEuc2hpbmluZXNzID0gdGhpcy5zaGluaW5lc3M7Ci0gICAgICAgICAgICBp
ZiAoIHRoaXMuY2xlYXJDb2F0ICE9PSB1bmRlZmluZWQgKSBkYXRhLmNsZWFyQ29hdCA9IHRoaXMu
Y2xlYXJDb2F0OwotICAgICAgICAgICAgaWYgKCB0aGlzLmNsZWFyQ29hdFJvdWdobmVzcyAhPT0g
dW5kZWZpbmVkICkgZGF0YS5jbGVhckNvYXRSb3VnaG5lc3MgPSB0aGlzLmNsZWFyQ29hdFJvdWdo
bmVzczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMu
bWFwICYmIHRoaXMubWFwLmlzVGV4dHVyZSApIGRhdGEubWFwID0gdGhpcy5tYXAudG9KU09OKCBt
ZXRhICkudXVpZDsKLSAgICAgICAgICAgIGlmICggdGhpcy5hbHBoYU1hcCAmJiB0aGlzLmFscGhh
TWFwLmlzVGV4dHVyZSApIGRhdGEuYWxwaGFNYXAgPSB0aGlzLmFscGhhTWFwLnRvSlNPTiggbWV0
YSApLnV1aWQ7Ci0gICAgICAgICAgICBpZiAoIHRoaXMubGlnaHRNYXAgJiYgdGhpcy5saWdodE1h
cC5pc1RleHR1cmUgKSBkYXRhLmxpZ2h0TWFwID0gdGhpcy5saWdodE1hcC50b0pTT04oIG1ldGEg
KS51dWlkOwotICAgICAgICAgICAgaWYgKCB0aGlzLmJ1bXBNYXAgJiYgdGhpcy5idW1wTWFwLmlz
VGV4dHVyZSApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGRhdGEuYnVtcE1hcCA9
IHRoaXMuYnVtcE1hcC50b0pTT04oIG1ldGEgKS51dWlkOwotICAgICAgICAgICAgICAgIGRhdGEu
YnVtcFNjYWxlID0gdGhpcy5idW1wU2NhbGU7CisgICAgICAgIGNvbnZlcnRMaW5lYXJUb1NSR0I6
IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCB0aGlzLm5v
cm1hbE1hcCAmJiB0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUgKSB7CisgICAgICAgICAgICB0aGlz
LmNvcHlMaW5lYXJUb1NSR0IoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIGRhdGEubm9ybWFs
TWFwID0gdGhpcy5ub3JtYWxNYXAudG9KU09OKCBtZXRhICkudXVpZDsKLSAgICAgICAgICAgICAg
ICBkYXRhLm5vcm1hbFNjYWxlID0gdGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCB0aGlz
LmRpc3BsYWNlbWVudE1hcCAmJiB0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUgKSB7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBkYXRhLmRpc3BsYWNlbWVudE1hcCA9IHRoaXMu
ZGlzcGxhY2VtZW50TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7Ci0gICAgICAgICAgICAgICAgZGF0
YS5kaXNwbGFjZW1lbnRTY2FsZSA9IHRoaXMuZGlzcGxhY2VtZW50U2NhbGU7Ci0gICAgICAgICAg
ICAgICAgZGF0YS5kaXNwbGFjZW1lbnRCaWFzID0gdGhpcy5kaXNwbGFjZW1lbnRCaWFzOworICAg
ICAgICBnZXRIZXg6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKCB0aGlzLnJvdWdobmVzc01hcCAmJiB0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUgKSBk
YXRhLnJvdWdobmVzc01hcCA9IHRoaXMucm91Z2huZXNzTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7
Ci0gICAgICAgICAgICBpZiAoIHRoaXMubWV0YWxuZXNzTWFwICYmIHRoaXMubWV0YWxuZXNzTWFw
LmlzVGV4dHVyZSApIGRhdGEubWV0YWxuZXNzTWFwID0gdGhpcy5tZXRhbG5lc3NNYXAudG9KU09O
KCBtZXRhICkudXVpZDsKKyAgICAgICAgICAgIHJldHVybiAoIHRoaXMuciAqIDI1NSApIDw8IDE2
IF4gKCB0aGlzLmcgKiAyNTUgKSA8PCA4IF4gKCB0aGlzLmIgKiAyNTUgKSA8PCAwOwogCi0gICAg
ICAgICAgICBpZiAoIHRoaXMuZW1pc3NpdmVNYXAgJiYgdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1
cmUgKSBkYXRhLmVtaXNzaXZlTWFwID0gdGhpcy5lbWlzc2l2ZU1hcC50b0pTT04oIG1ldGEgKS51
dWlkOwotICAgICAgICAgICAgaWYgKCB0aGlzLnNwZWN1bGFyTWFwICYmIHRoaXMuc3BlY3VsYXJN
YXAuaXNUZXh0dXJlICkgZGF0YS5zcGVjdWxhck1hcCA9IHRoaXMuc3BlY3VsYXJNYXAudG9KU09O
KCBtZXRhICkudXVpZDsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmVudk1h
cCAmJiB0aGlzLmVudk1hcC5pc1RleHR1cmUgKSB7CisgICAgICAgIGdldEhleFN0cmluZzogZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgZGF0YS5lbnZNYXAgPSB0aGlzLmVudk1hcC50
b0pTT04oIG1ldGEgKS51dWlkOwotICAgICAgICAgICAgICAgIGRhdGEucmVmbGVjdGl2aXR5ID0g
dGhpcy5yZWZsZWN0aXZpdHk7IC8vIFNjYWxlIGJlaGluZCBlbnZNYXAKKyAgICAgICAgICAgIHJl
dHVybiAoICcwMDAwMDAnICsgdGhpcy5nZXRIZXgoKS50b1N0cmluZyggMTYgKSApLnNsaWNlKCAt
IDYgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIHRo
aXMuZ3JhZGllbnRNYXAgJiYgdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUgKSB7CisgICAgICAg
IGdldEhTTDogZnVuY3Rpb24gKCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICBkYXRhLmdy
YWRpZW50TWFwID0gdGhpcy5ncmFkaWVudE1hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAg
ICAgICAgLy8gaCxzLGwgcmFuZ2VzIGFyZSBpbiAwLjAgLSAxLjAKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAg
aWYgKCB0aGlzLnNpemUgIT09IHVuZGVmaW5lZCApIGRhdGEuc2l6ZSA9IHRoaXMuc2l6ZTsKLSAg
ICAgICAgICAgIGlmICggdGhpcy5zaXplQXR0ZW51YXRpb24gIT09IHVuZGVmaW5lZCApIGRhdGEu
c2l6ZUF0dGVudWF0aW9uID0gdGhpcy5zaXplQXR0ZW51YXRpb247CisgICAgICAgICAgICAgICAg
Y29uc29sZS53YXJuKCAnVEhSRUUuQ29sb3I6IC5nZXRIU0woKSB0YXJnZXQgaXMgbm93IHJlcXVp
cmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9IHsgaDogMCwgczogMCwgbDogMCB9Owog
Ci0gICAgICAgICAgICBpZiAoIHRoaXMuYmxlbmRpbmcgIT09IE5vcm1hbEJsZW5kaW5nICkgZGF0
YS5ibGVuZGluZyA9IHRoaXMuYmxlbmRpbmc7Ci0gICAgICAgICAgICBpZiAoIHRoaXMuc2hhZGlu
ZyAhPT0gU21vb3RoU2hhZGluZyApIGRhdGEuc2hhZGluZyA9IHRoaXMuc2hhZGluZzsKLSAgICAg
ICAgICAgIGlmICggdGhpcy5zaWRlICE9PSBGcm9udFNpZGUgKSBkYXRhLnNpZGUgPSB0aGlzLnNp
ZGU7Ci0gICAgICAgICAgICBpZiAoIHRoaXMudmVydGV4Q29sb3JzICE9PSBOb0NvbG9ycyApIGRh
dGEudmVydGV4Q29sb3JzID0gdGhpcy52ZXJ0ZXhDb2xvcnM7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICggdGhpcy5vcGFjaXR5IDwgMSApIGRhdGEub3BhY2l0eSA9IHRoaXMub3Bh
Y2l0eTsKLSAgICAgICAgICAgIGlmICggdGhpcy50cmFuc3BhcmVudCA9PT0gdHJ1ZSApIGRhdGEu
dHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50OworICAgICAgICAgICAgdmFyIHIgPSB0aGlz
LnIsIGcgPSB0aGlzLmcsIGIgPSB0aGlzLmI7CiAKLSAgICAgICAgICAgIGRhdGEuZGVwdGhGdW5j
ID0gdGhpcy5kZXB0aEZ1bmM7Ci0gICAgICAgICAgICBkYXRhLmRlcHRoVGVzdCA9IHRoaXMuZGVw
dGhUZXN0OwotICAgICAgICAgICAgZGF0YS5kZXB0aFdyaXRlID0gdGhpcy5kZXB0aFdyaXRlOwor
ICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KCByLCBnLCBiICk7CisgICAgICAgICAgICB2
YXIgbWluID0gTWF0aC5taW4oIHIsIGcsIGIgKTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmFs
cGhhVGVzdCA+IDAgKSBkYXRhLmFscGhhVGVzdCA9IHRoaXMuYWxwaGFUZXN0OwotICAgICAgICAg
ICAgaWYgKCB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9PT0gdHJ1ZSApIGRhdGEucHJlbXVsdGlw
bGllZEFscGhhID0gdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE7Ci0gICAgICAgICAgICBpZiAoIHRo
aXMud2lyZWZyYW1lID09PSB0cnVlICkgZGF0YS53aXJlZnJhbWUgPSB0aGlzLndpcmVmcmFtZTsK
LSAgICAgICAgICAgIGlmICggdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPiAxICkgZGF0YS53aXJl
ZnJhbWVMaW5ld2lkdGggPSB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aDsKLSAgICAgICAgICAgIGlm
ICggdGhpcy53aXJlZnJhbWVMaW5lY2FwICE9PSAncm91bmQnICkgZGF0YS53aXJlZnJhbWVMaW5l
Y2FwID0gdGhpcy53aXJlZnJhbWVMaW5lY2FwOwotICAgICAgICAgICAgaWYgKCB0aGlzLndpcmVm
cmFtZUxpbmVqb2luICE9PSAncm91bmQnICkgZGF0YS53aXJlZnJhbWVMaW5lam9pbiA9IHRoaXMu
d2lyZWZyYW1lTGluZWpvaW47CisgICAgICAgICAgICB2YXIgaHVlLCBzYXR1cmF0aW9uOworICAg
ICAgICAgICAgdmFyIGxpZ2h0bmVzcyA9ICggbWluICsgbWF4ICkgLyAyLjA7CiAKLSAgICAgICAg
ICAgIGRhdGEuc2tpbm5pbmcgPSB0aGlzLnNraW5uaW5nOwotICAgICAgICAgICAgZGF0YS5tb3Jw
aFRhcmdldHMgPSB0aGlzLm1vcnBoVGFyZ2V0czsKKyAgICAgICAgICAgIGlmICggbWluID09PSBt
YXggKSB7CiAKLSAgICAgICAgICAgIGRhdGEuZGl0aGVyaW5nID0gdGhpcy5kaXRoZXJpbmc7Cisg
ICAgICAgICAgICAgICAgaHVlID0gMDsKKyAgICAgICAgICAgICAgICBzYXR1cmF0aW9uID0gMDsK
IAotICAgICAgICAgICAgLy8gVE9ETzogQ29waWVkIGZyb20gT2JqZWN0M0QudG9KU09OCisgICAg
ICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBmdW5jdGlvbiBleHRyYWN0RnJvbUNhY2hl
KCBjYWNoZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBtYXggLSBtaW47CiAKLSAg
ICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CisgICAgICAgICAgICAgICAgc2F0dXJhdGlv
biA9IGxpZ2h0bmVzcyA8PSAwLjUgPyBkZWx0YSAvICggbWF4ICsgbWluICkgOiBkZWx0YSAvICgg
MiAtIG1heCAtIG1pbiApOwogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBjYWNo
ZSApIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCBtYXggKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGRhdGEgPSBjYWNoZVsga2V5IF07Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBkYXRhLm1ldGFkYXRhOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggZGF0YSAp
OworICAgICAgICAgICAgICAgICAgICBjYXNlIHI6IGh1ZSA9ICggZyAtIGIgKSAvIGRlbHRhICsg
KCBnIDwgYiA/IDYgOiAwICk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIGc6IGh1
ZSA9ICggYiAtIHIgKSAvIGRlbHRhICsgMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgYjogaHVlID0gKCByIC0gZyApIC8gZGVsdGEgKyA0OyBicmVhazsKIAogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICAgICAg
aHVlIC89IDY7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBpc1Jvb3QgKSB7
CisgICAgICAgICAgICB0YXJnZXQuaCA9IGh1ZTsKKyAgICAgICAgICAgIHRhcmdldC5zID0gc2F0
dXJhdGlvbjsKKyAgICAgICAgICAgIHRhcmdldC5sID0gbGlnaHRuZXNzOwogCi0gICAgICAgICAg
ICAgICAgdmFyIHRleHR1cmVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS50ZXh0dXJlcyApOwot
ICAgICAgICAgICAgICAgIHZhciBpbWFnZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLmltYWdl
cyApOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKIAotICAgICAgICAgICAgICAgIGlmICgg
dGV4dHVyZXMubGVuZ3RoID4gMCApIGRhdGEudGV4dHVyZXMgPSB0ZXh0dXJlczsKLSAgICAgICAg
ICAgICAgICBpZiAoIGltYWdlcy5sZW5ndGggPiAwICkgZGF0YS5pbWFnZXMgPSBpbWFnZXM7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgZ2V0U3R5bGU6IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICByZXR1cm4gJ3JnYign
ICsgKCAoIHRoaXMuciAqIDI1NSApIHwgMCApICsgJywnICsgKCAoIHRoaXMuZyAqIDI1NSApIHwg
MCApICsgJywnICsgKCAoIHRoaXMuYiAqIDI1NSApIHwgMCApICsgJyknOwogCiAgICAgICAgIH0s
CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgb2Zmc2V0SFNMOiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNv
cHkoIHRoaXMgKTsKKyAgICAgICAgICAgIHZhciBoc2wgPSB7fTsKIAotICAgICAgICB9LAorICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICggaCwgcywgbCApIHsKIAotICAgICAgICBjb3B5OiBm
dW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmdldEhTTCggaHNsICk7
CiAKLSAgICAgICAgICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lOworICAgICAgICAgICAgICAg
IGhzbC5oICs9IGg7IGhzbC5zICs9IHM7IGhzbC5sICs9IGw7CiAKLSAgICAgICAgICAgIHRoaXMu
Zm9nID0gc291cmNlLmZvZzsKLSAgICAgICAgICAgIHRoaXMubGlnaHRzID0gc291cmNlLmxpZ2h0
czsKKyAgICAgICAgICAgICAgICB0aGlzLnNldEhTTCggaHNsLmgsIGhzbC5zLCBoc2wubCApOwog
Ci0gICAgICAgICAgICB0aGlzLmJsZW5kaW5nID0gc291cmNlLmJsZW5kaW5nOwotICAgICAgICAg
ICAgdGhpcy5zaWRlID0gc291cmNlLnNpZGU7Ci0gICAgICAgICAgICB0aGlzLnNoYWRpbmcgPSBz
b3VyY2Uuc2hhZGluZzsKLSAgICAgICAgICAgIHRoaXMudmVydGV4Q29sb3JzID0gc291cmNlLnZl
cnRleENvbG9yczsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAg
dGhpcy5vcGFjaXR5ID0gc291cmNlLm9wYWNpdHk7Ci0gICAgICAgICAgICB0aGlzLnRyYW5zcGFy
ZW50ID0gc291cmNlLnRyYW5zcGFyZW50OworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAg
dGhpcy5ibGVuZFNyYyA9IHNvdXJjZS5ibGVuZFNyYzsKLSAgICAgICAgICAgIHRoaXMuYmxlbmRE
c3QgPSBzb3VyY2UuYmxlbmREc3Q7Ci0gICAgICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24gPSBz
b3VyY2UuYmxlbmRFcXVhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuYmxlbmRTcmNBbHBoYSA9IHNv
dXJjZS5ibGVuZFNyY0FscGhhOwotICAgICAgICAgICAgdGhpcy5ibGVuZERzdEFscGhhID0gc291
cmNlLmJsZW5kRHN0QWxwaGE7Ci0gICAgICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb25BbHBoYSA9
IHNvdXJjZS5ibGVuZEVxdWF0aW9uQWxwaGE7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAg
dGhpcy5kZXB0aEZ1bmMgPSBzb3VyY2UuZGVwdGhGdW5jOwotICAgICAgICAgICAgdGhpcy5kZXB0
aFRlc3QgPSBzb3VyY2UuZGVwdGhUZXN0OwotICAgICAgICAgICAgdGhpcy5kZXB0aFdyaXRlID0g
c291cmNlLmRlcHRoV3JpdGU7Ci0KLSAgICAgICAgICAgIHRoaXMuY29sb3JXcml0ZSA9IHNvdXJj
ZS5jb2xvcldyaXRlOworICAgICAgICBhZGQ6IGZ1bmN0aW9uICggY29sb3IgKSB7CiAKLSAgICAg
ICAgICAgIHRoaXMucHJlY2lzaW9uID0gc291cmNlLnByZWNpc2lvbjsKKyAgICAgICAgICAgIHRo
aXMuciArPSBjb2xvci5yOworICAgICAgICAgICAgdGhpcy5nICs9IGNvbG9yLmc7CisgICAgICAg
ICAgICB0aGlzLmIgKz0gY29sb3IuYjsKIAotICAgICAgICAgICAgdGhpcy5wb2x5Z29uT2Zmc2V0
ID0gc291cmNlLnBvbHlnb25PZmZzZXQ7Ci0gICAgICAgICAgICB0aGlzLnBvbHlnb25PZmZzZXRG
YWN0b3IgPSBzb3VyY2UucG9seWdvbk9mZnNldEZhY3RvcjsKLSAgICAgICAgICAgIHRoaXMucG9s
eWdvbk9mZnNldFVuaXRzID0gc291cmNlLnBvbHlnb25PZmZzZXRVbml0czsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB0aGlzLmRpdGhlcmluZyA9IHNvdXJjZS5kaXRo
ZXJpbmc7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHRoaXMuYWxwaGFUZXN0ID0gc291cmNl
LmFscGhhVGVzdDsKKyAgICAgICAgYWRkQ29sb3JzOiBmdW5jdGlvbiAoIGNvbG9yMSwgY29sb3Iy
ICkgewogCi0gICAgICAgICAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHNvdXJjZS5wcmVt
dWx0aXBsaWVkQWxwaGE7CisgICAgICAgICAgICB0aGlzLnIgPSBjb2xvcjEuciArIGNvbG9yMi5y
OworICAgICAgICAgICAgdGhpcy5nID0gY29sb3IxLmcgKyBjb2xvcjIuZzsKKyAgICAgICAgICAg
IHRoaXMuYiA9IGNvbG9yMS5iICsgY29sb3IyLmI7CiAKLSAgICAgICAgICAgIHRoaXMub3ZlcmRy
YXcgPSBzb3VyY2Uub3ZlcmRyYXc7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAg
ICAgICAgdGhpcy52aXNpYmxlID0gc291cmNlLnZpc2libGU7Ci0gICAgICAgICAgICB0aGlzLmNs
aXBTaGFkb3dzID0gc291cmNlLmNsaXBTaGFkb3dzOwotICAgICAgICAgICAgdGhpcy5jbGlwSW50
ZXJzZWN0aW9uID0gc291cmNlLmNsaXBJbnRlcnNlY3Rpb247CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIHZhciBzcmNQbGFuZXMgPSBzb3VyY2UuY2xpcHBpbmdQbGFuZXMsCi0gICAgICAgICAg
ICAgICAgZHN0UGxhbmVzID0gbnVsbDsKKyAgICAgICAgYWRkU2NhbGFyOiBmdW5jdGlvbiAoIHMg
KSB7CiAKLSAgICAgICAgICAgIGlmICggc3JjUGxhbmVzICE9PSBudWxsICkgeworICAgICAgICAg
ICAgdGhpcy5yICs9IHM7CisgICAgICAgICAgICB0aGlzLmcgKz0gczsKKyAgICAgICAgICAgIHRo
aXMuYiArPSBzOwogCi0gICAgICAgICAgICAgICAgdmFyIG4gPSBzcmNQbGFuZXMubGVuZ3RoOwot
ICAgICAgICAgICAgICAgIGRzdFBsYW5lcyA9IG5ldyBBcnJheSggbiApOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IG47
ICsrIGkgKQotICAgICAgICAgICAgICAgICAgICBkc3RQbGFuZXNbIGkgXSA9IHNyY1BsYW5lc1sg
aSBdLmNsb25lKCk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgc3ViOiBm
dW5jdGlvbiAoIGNvbG9yICkgewogCi0gICAgICAgICAgICB0aGlzLmNsaXBwaW5nUGxhbmVzID0g
ZHN0UGxhbmVzOworICAgICAgICAgICAgdGhpcy5yID0gTWF0aC5tYXgoIDAsIHRoaXMuciAtIGNv
bG9yLnIgKTsKKyAgICAgICAgICAgIHRoaXMuZyA9IE1hdGgubWF4KCAwLCB0aGlzLmcgLSBjb2xv
ci5nICk7CisgICAgICAgICAgICB0aGlzLmIgPSBNYXRoLm1heCggMCwgdGhpcy5iIC0gY29sb3Iu
YiApOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAg
IGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7Ci0KLSAgICAgICAgfQotCi0gICAgfSApOworICAgICAg
ICBtdWx0aXBseTogZnVuY3Rpb24gKCBjb2xvciApIHsKIAotICAgIC8qKgotICAgICAqIEBhdXRo
b3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICoKLSAgICAgKiBw
YXJhbWV0ZXJzID0gewotICAgICAqICBkZWZpbmVzOiB7ICJsYWJlbCIgOiAidmFsdWUiIH0sCi0g
ICAgICogIHVuaWZvcm1zOiB7ICJwYXJhbWV0ZXIxIjogeyB2YWx1ZTogMS4wIH0sICJwYXJhbWV0
ZXIyIjogeyB2YWx1ZTI6IDIgfSB9LAotICAgICAqCi0gICAgICogIGZyYWdtZW50U2hhZGVyOiA8
c3RyaW5nPiwKLSAgICAgKiAgdmVydGV4U2hhZGVyOiA8c3RyaW5nPiwKLSAgICAgKgotICAgICAq
ICB3aXJlZnJhbWU6IDxib29sZWFuPiwKLSAgICAgKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8Zmxv
YXQ+LAotICAgICAqCi0gICAgICogIGxpZ2h0czogPGJvb2w+LAotICAgICAqCi0gICAgICogIHNr
aW5uaW5nOiA8Ym9vbD4sCi0gICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAotICAgICAqICBt
b3JwaE5vcm1hbHM6IDxib29sPgotICAgICAqIH0KLSAgICAgKi8KKyAgICAgICAgICAgIHRoaXMu
ciAqPSBjb2xvci5yOworICAgICAgICAgICAgdGhpcy5nICo9IGNvbG9yLmc7CisgICAgICAgICAg
ICB0aGlzLmIgKj0gY29sb3IuYjsKIAotICAgIGZ1bmN0aW9uIFNoYWRlck1hdGVyaWFsKCBwYXJh
bWV0ZXJzICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgTWF0ZXJpYWwu
Y2FsbCggdGhpcyApOworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMudHlwZSA9ICdTaGFkZXJN
YXRlcmlhbCc7CisgICAgICAgIG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7CiAKLSAg
ICAgICAgdGhpcy5kZWZpbmVzID0ge307Ci0gICAgICAgIHRoaXMudW5pZm9ybXMgPSB7fTsKKyAg
ICAgICAgICAgIHRoaXMuciAqPSBzOworICAgICAgICAgICAgdGhpcy5nICo9IHM7CisgICAgICAg
ICAgICB0aGlzLmIgKj0gczsKIAotICAgICAgICB0aGlzLnZlcnRleFNoYWRlciA9ICd2b2lkIG1h
aW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJp
eCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0nOwotICAgICAgICB0aGlzLmZyYWdtZW50U2hh
ZGVyID0gJ3ZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAu
MCwgMS4wICk7XG59JzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHRoaXMu
bGluZXdpZHRoID0gMTsKKyAgICAgICAgfSwKIAotICAgICAgICB0aGlzLndpcmVmcmFtZSA9IGZh
bHNlOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7CisgICAgICAgIGxlcnA6
IGZ1bmN0aW9uICggY29sb3IsIGFscGhhICkgewogCi0gICAgICAgIHRoaXMuZm9nID0gZmFsc2U7
IC8vIHNldCB0byB1c2Ugc2NlbmUgZm9nCi0gICAgICAgIHRoaXMubGlnaHRzID0gZmFsc2U7IC8v
IHNldCB0byB1c2Ugc2NlbmUgbGlnaHRzCi0gICAgICAgIHRoaXMuY2xpcHBpbmcgPSBmYWxzZTsg
Ly8gc2V0IHRvIHVzZSB1c2VyLWRlZmluZWQgY2xpcHBpbmcgcGxhbmVzCisgICAgICAgICAgICB0
aGlzLnIgKz0gKCBjb2xvci5yIC0gdGhpcy5yICkgKiBhbHBoYTsKKyAgICAgICAgICAgIHRoaXMu
ZyArPSAoIGNvbG9yLmcgLSB0aGlzLmcgKSAqIGFscGhhOworICAgICAgICAgICAgdGhpcy5iICs9
ICggY29sb3IuYiAtIHRoaXMuYiApICogYWxwaGE7CiAKLSAgICAgICAgdGhpcy5za2lubmluZyA9
IGZhbHNlOyAvLyBzZXQgdG8gdXNlIHNraW5uaW5nIGF0dHJpYnV0ZSBzdHJlYW1zCi0gICAgICAg
IHRoaXMubW9ycGhUYXJnZXRzID0gZmFsc2U7IC8vIHNldCB0byB1c2UgbW9ycGggdGFyZ2V0cwot
ICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOyAvLyBzZXQgdG8gdXNlIG1vcnBoIG5v
cm1hbHMKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHRoaXMuZXh0ZW5zaW9u
cyA9IHsKLSAgICAgICAgICAgIGRlcml2YXRpdmVzOiBmYWxzZSwgLy8gc2V0IHRvIHVzZSBkZXJp
dmF0aXZlcwotICAgICAgICAgICAgZnJhZ0RlcHRoOiBmYWxzZSwgLy8gc2V0IHRvIHVzZSBmcmFn
bWVudCBkZXB0aCB2YWx1ZXMKLSAgICAgICAgICAgIGRyYXdCdWZmZXJzOiBmYWxzZSwgLy8gc2V0
IHRvIHVzZSBkcmF3IGJ1ZmZlcnMKLSAgICAgICAgICAgIHNoYWRlclRleHR1cmVMT0Q6IGZhbHNl
IC8vIHNldCB0byB1c2Ugc2hhZGVyIHRleHR1cmUgTE9ECi0gICAgICAgIH07CisgICAgICAgIH0s
CiAKLSAgICAgICAgLy8gV2hlbiByZW5kZXJlZCBnZW9tZXRyeSBkb2Vzbid0IGluY2x1ZGUgdGhl
c2UgYXR0cmlidXRlcyBidXQgdGhlIG1hdGVyaWFsIGRvZXMsCi0gICAgICAgIC8vIHVzZSB0aGVz
ZSBkZWZhdWx0IHZhbHVlcyBpbiBXZWJHTC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gYnVmZmVy
IGRhdGEgaXMgbWlzc2luZy4KLSAgICAgICAgdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzID0g
ewotICAgICAgICAgICAgJ2NvbG9yJzogWyAxLCAxLCAxIF0sCi0gICAgICAgICAgICAndXYnOiBb
IDAsIDAgXSwKLSAgICAgICAgICAgICd1djInOiBbIDAsIDAgXQotICAgICAgICB9OworICAgICAg
ICBlcXVhbHM6IGZ1bmN0aW9uICggYyApIHsKIAotICAgICAgICB0aGlzLmluZGV4MEF0dHJpYnV0
ZU5hbWUgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICByZXR1cm4gKCBjLnIgPT09IHRoaXMuciAp
ICYmICggYy5nID09PSB0aGlzLmcgKSAmJiAoIGMuYiA9PT0gdGhpcy5iICk7CiAKLSAgICAgICAg
aWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgIGlmICggcGFyYW1ldGVycy5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
IGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICAg
ICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3Vs
ZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLicgKTsKKyAg
ICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwogCi0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnIgPSBhcnJheVsgb2Zmc2V0IF07CisgICAgICAg
ICAgICB0aGlzLmcgPSBhcnJheVsgb2Zmc2V0ICsgMSBdOworICAgICAgICAgICAgdGhpcy5iID0g
YXJyYXlbIG9mZnNldCArIDIgXTsKIAotICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFt
ZXRlcnMgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIH0KKyAgICAgICAg
fSwKIAotICAgIH0KKyAgICAgICAgdG9BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkg
ewogCi0gICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWF0ZXJp
YWwucHJvdG90eXBlICk7Ci0gICAgU2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gU2hhZGVyTWF0ZXJpYWw7CisgICAgICAgICAgICBpZiAoIGFycmF5ID09PSB1bmRlZmluZWQg
KSBhcnJheSA9IFtdOworICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9m
ZnNldCA9IDA7CiAKLSAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlh
bCA9IHRydWU7CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLnI7CisgICAgICAg
ICAgICBhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy5nOworICAgICAgICAgICAgYXJyYXlbIG9m
ZnNldCArIDIgXSA9IHRoaXMuYjsKIAotICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5jb3B5
ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAKLSAg
ICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgdGhpcy5mcmFnbWVudFNoYWRlciA9IHNvdXJjZS5mcmFnbWVudFNo
YWRlcjsKLSAgICAgICAgdGhpcy52ZXJ0ZXhTaGFkZXIgPSBzb3VyY2UudmVydGV4U2hhZGVyOwor
ICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB0aGlzLnVuaWZvcm1zID0g
VW5pZm9ybXNVdGlscy5jbG9uZSggc291cmNlLnVuaWZvcm1zICk7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5nZXRIZXgoKTsKIAotICAgICAgICB0aGlzLmRlZmluZXMgPSBzb3VyY2UuZGVmaW5l
czsKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFt
ZTsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGlu
ZXdpZHRoOworICAgIH0gKTsKIAotICAgICAgICB0aGlzLmxpZ2h0cyA9IHNvdXJjZS5saWdodHM7
Ci0gICAgICAgIHRoaXMuY2xpcHBpbmcgPSBzb3VyY2UuY2xpcHBpbmc7CisgICAgLyoqCisgICAg
ICogVW5pZm9ybXMgbGlicmFyeSBmb3Igc2hhcmVkIHdlYmdsIHNoYWRlcnMKKyAgICAgKi8KIAot
ICAgICAgICB0aGlzLnNraW5uaW5nID0gc291cmNlLnNraW5uaW5nOworICAgIHZhciBVbmlmb3Jt
c0xpYiA9IHsKIAotICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IHNvdXJjZS5tb3JwaFRhcmdl
dHM7Ci0gICAgICAgIHRoaXMubW9ycGhOb3JtYWxzID0gc291cmNlLm1vcnBoTm9ybWFsczsKKyAg
ICAgICAgY29tbW9uOiB7CiAKLSAgICAgICAgdGhpcy5leHRlbnNpb25zID0gc291cmNlLmV4dGVu
c2lvbnM7CisgICAgICAgICAgICBkaWZmdXNlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZWVlZWVl
ICkgfSwKKyAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9LAogCi0gICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgbWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAgICAg
ICB1dlRyYW5zZm9ybTogeyB2YWx1ZTogbmV3IE1hdHJpeDMoKSB9LAogCi0gICAgfTsKKyAgICAg
ICAgICAgIGFscGhhTWFwOiB7IHZhbHVlOiBudWxsIH0sCiAKLSAgICBTaGFkZXJNYXRlcmlhbC5w
cm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCBtZXRhICkgeworICAgICAgICB9LAogCi0gICAg
ICAgIHZhciBkYXRhID0gTWF0ZXJpYWwucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzLCBtZXRh
ICk7CisgICAgICAgIHNwZWN1bGFybWFwOiB7CiAKLSAgICAgICAgZGF0YS51bmlmb3JtcyA9IHRo
aXMudW5pZm9ybXM7Ci0gICAgICAgIGRhdGEudmVydGV4U2hhZGVyID0gdGhpcy52ZXJ0ZXhTaGFk
ZXI7Ci0gICAgICAgIGRhdGEuZnJhZ21lbnRTaGFkZXIgPSB0aGlzLmZyYWdtZW50U2hhZGVyOwor
ICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHsgdmFsdWU6IG51bGwgfSwKIAotICAgICAgICByZXR1
cm4gZGF0YTsKKyAgICAgICAgfSwKIAotICAgIH07CisgICAgICAgIGVudm1hcDogewogCi0gICAg
LyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBA
YXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRo
b3IgYmhvdXN0b24gLyBodHRwczovL2NsYXJhLmlvCi0gICAgICogQGF1dGhvciBXZXN0TGFuZ2xl
eSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgICoKLSAgICAgKiBwYXJhbWV0
ZXJzID0gewotICAgICAqCi0gICAgICogIG9wYWNpdHk6IDxmbG9hdD4sCi0gICAgICoKLSAgICAg
KiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqCi0gICAgICogIGFs
cGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqCi0gICAgICogIGRp
c3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKiAgZGlz
cGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sCi0gICAgICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9h
dD4sCi0gICAgICoKLSAgICAgKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sCi0gICAgICogIHdpcmVm
cmFtZUxpbmV3aWR0aDogPGZsb2F0PgotICAgICAqIH0KLSAgICAgKi8KKyAgICAgICAgICAgIGVu
dk1hcDogeyB2YWx1ZTogbnVsbCB9LAorICAgICAgICAgICAgZmxpcEVudk1hcDogeyB2YWx1ZTog
LSAxIH0sCisgICAgICAgICAgICByZWZsZWN0aXZpdHk6IHsgdmFsdWU6IDEuMCB9LAorICAgICAg
ICAgICAgcmVmcmFjdGlvblJhdGlvOiB7IHZhbHVlOiAwLjk4IH0sCisgICAgICAgICAgICBtYXhN
aXBMZXZlbDogeyB2YWx1ZTogMCB9CiAKLSAgICBmdW5jdGlvbiBNZXNoRGVwdGhNYXRlcmlhbCgg
cGFyYW1ldGVycyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICBNYXRlcmlhbC5jYWxsKCB0aGlz
ICk7CisgICAgICAgIGFvbWFwOiB7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ01lc2hEZXB0aE1h
dGVyaWFsJzsKKyAgICAgICAgICAgIGFvTWFwOiB7IHZhbHVlOiBudWxsIH0sCisgICAgICAgICAg
ICBhb01hcEludGVuc2l0eTogeyB2YWx1ZTogMSB9CiAKLSAgICAgICAgdGhpcy5kZXB0aFBhY2tp
bmcgPSBCYXNpY0RlcHRoUGFja2luZzsKKyAgICAgICAgfSwKIAotICAgICAgICB0aGlzLnNraW5u
aW5nID0gZmFsc2U7Ci0gICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gZmFsc2U7CisgICAgICAg
IGxpZ2h0bWFwOiB7CiAKLSAgICAgICAgdGhpcy5tYXAgPSBudWxsOworICAgICAgICAgICAgbGln
aHRNYXA6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIGxpZ2h0TWFwSW50ZW5zaXR5OiB7
IHZhbHVlOiAxIH0KIAotICAgICAgICB0aGlzLmFscGhhTWFwID0gbnVsbDsKKyAgICAgICAgfSwK
IAotICAgICAgICB0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZGlz
cGxhY2VtZW50U2NhbGUgPSAxOwotICAgICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwOwor
ICAgICAgICBlbWlzc2l2ZW1hcDogewogCi0gICAgICAgIHRoaXMud2lyZWZyYW1lID0gZmFsc2U7
Ci0gICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTsKKyAgICAgICAgICAgIGVtaXNz
aXZlTWFwOiB7IHZhbHVlOiBudWxsIH0KIAotICAgICAgICB0aGlzLmZvZyA9IGZhbHNlOwotICAg
ICAgICB0aGlzLmxpZ2h0cyA9IGZhbHNlOworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMuc2V0
VmFsdWVzKCBwYXJhbWV0ZXJzICk7CisgICAgICAgIGJ1bXBtYXA6IHsKIAotICAgIH0KKyAgICAg
ICAgICAgIGJ1bXBNYXA6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIGJ1bXBTY2FsZTog
eyB2YWx1ZTogMSB9CiAKLSAgICBNZXNoRGVwdGhNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3Qu
Y3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUgKTsKLSAgICBNZXNoRGVwdGhNYXRlcmlhbC5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoRGVwdGhNYXRlcmlhbDsKKyAgICAgICAgfSwKIAotICAg
IE1lc2hEZXB0aE1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsID0gdHJ1ZTsK
KyAgICAgICAgbm9ybWFsbWFwOiB7CiAKLSAgICBNZXNoRGVwdGhNYXRlcmlhbC5wcm90b3R5cGUu
Y29weSA9IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICAgICAgbm9ybWFsTWFwOiB7IHZh
bHVlOiBudWxsIH0sCisgICAgICAgICAgICBub3JtYWxTY2FsZTogeyB2YWx1ZTogbmV3IFZlY3Rv
cjIoIDEsIDEgKSB9CiAKLSAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCggdGhp
cywgc291cmNlICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgdGhpcy5kZXB0aFBhY2tpbmcgPSBz
b3VyY2UuZGVwdGhQYWNraW5nOworICAgICAgICBkaXNwbGFjZW1lbnRtYXA6IHsKIAotICAgICAg
ICB0aGlzLnNraW5uaW5nID0gc291cmNlLnNraW5uaW5nOwotICAgICAgICB0aGlzLm1vcnBoVGFy
Z2V0cyA9IHNvdXJjZS5tb3JwaFRhcmdldHM7CisgICAgICAgICAgICBkaXNwbGFjZW1lbnRNYXA6
IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIGRpc3BsYWNlbWVudFNjYWxlOiB7IHZhbHVl
OiAxIH0sCisgICAgICAgICAgICBkaXNwbGFjZW1lbnRCaWFzOiB7IHZhbHVlOiAwIH0KIAotICAg
ICAgICB0aGlzLm1hcCA9IHNvdXJjZS5tYXA7CisgICAgICAgIH0sCiAKLSAgICAgICAgdGhpcy5h
bHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDsKKyAgICAgICAgcm91Z2huZXNzbWFwOiB7CiAKLSAg
ICAgICAgdGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwOwotICAg
ICAgICB0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlOwot
ICAgICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhczsK
KyAgICAgICAgICAgIHJvdWdobmVzc01hcDogeyB2YWx1ZTogbnVsbCB9CiAKLSAgICAgICAgdGhp
cy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxp
bmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIG1ldGFsbmVzc21hcDogewogCi0gICAgfTsKKyAgICAg
ICAgICAgIG1ldGFsbmVzc01hcDogeyB2YWx1ZTogbnVsbCB9CiAKLSAgICAvKioKLSAgICAgKiBA
YXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICogQGF1dGhvciBXZXN0TGFu
Z2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgICovCisgICAgICAgIH0s
CiAKLSAgICBmdW5jdGlvbiBCb3gzKCBtaW4sIG1heCApIHsKKyAgICAgICAgZ3JhZGllbnRtYXA6
IHsKIAotICAgICAgICB0aGlzLm1pbiA9ICggbWluICE9PSB1bmRlZmluZWQgKSA/IG1pbiA6IG5l
dyBWZWN0b3IzKCArIEluZmluaXR5LCArIEluZmluaXR5LCArIEluZmluaXR5ICk7Ci0gICAgICAg
IHRoaXMubWF4ID0gKCBtYXggIT09IHVuZGVmaW5lZCApID8gbWF4IDogbmV3IFZlY3RvcjMoIC0g
SW5maW5pdHksIC0gSW5maW5pdHksIC0gSW5maW5pdHkgKTsKKyAgICAgICAgICAgIGdyYWRpZW50
TWFwOiB7IHZhbHVlOiBudWxsIH0KIAotICAgIH0KKyAgICAgICAgfSwKIAotICAgIE9iamVjdC5h
c3NpZ24oIEJveDMucHJvdG90eXBlLCB7CisgICAgICAgIGZvZzogewogCi0gICAgICAgIGlzQm94
MzogdHJ1ZSwKKyAgICAgICAgICAgIGZvZ0RlbnNpdHk6IHsgdmFsdWU6IDAuMDAwMjUgfSwKKyAg
ICAgICAgICAgIGZvZ05lYXI6IHsgdmFsdWU6IDEgfSwKKyAgICAgICAgICAgIGZvZ0ZhcjogeyB2
YWx1ZTogMjAwMCB9LAorICAgICAgICAgICAgZm9nQ29sb3I6IHsgdmFsdWU6IG5ldyBDb2xvcigg
MHhmZmZmZmYgKSB9CiAKLSAgICAgICAgc2V0OiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgeworICAg
ICAgICB9LAogCi0gICAgICAgICAgICB0aGlzLm1pbi5jb3B5KCBtaW4gKTsKLSAgICAgICAgICAg
IHRoaXMubWF4LmNvcHkoIG1heCApOworICAgICAgICBsaWdodHM6IHsKIAotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICBhbWJpZW50TGlnaHRDb2xvcjogeyB2YWx1ZTogW10g
fSwKIAotICAgICAgICB9LAorICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodHM6IHsgdmFsdWU6
IFtdLCBwcm9wZXJ0aWVzOiB7CisgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB7fSwKKyAgICAg
ICAgICAgICAgICBjb2xvcjoge30sCiAKLSAgICAgICAgc2V0RnJvbUFycmF5OiBmdW5jdGlvbiAo
IGFycmF5ICkgeworICAgICAgICAgICAgICAgIHNoYWRvdzoge30sCisgICAgICAgICAgICAgICAg
c2hhZG93Qmlhczoge30sCisgICAgICAgICAgICAgICAgc2hhZG93UmFkaXVzOiB7fSwKKyAgICAg
ICAgICAgICAgICBzaGFkb3dNYXBTaXplOiB7fQorICAgICAgICAgICAgfSB9LAogCi0gICAgICAg
ICAgICB2YXIgbWluWCA9ICsgSW5maW5pdHk7Ci0gICAgICAgICAgICB2YXIgbWluWSA9ICsgSW5m
aW5pdHk7Ci0gICAgICAgICAgICB2YXIgbWluWiA9ICsgSW5maW5pdHk7CisgICAgICAgICAgICBk
aXJlY3Rpb25hbFNoYWRvd01hcDogeyB2YWx1ZTogW10gfSwKKyAgICAgICAgICAgIGRpcmVjdGlv
bmFsU2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LAogCi0gICAgICAgICAgICB2YXIgbWF4WCA9
IC0gSW5maW5pdHk7Ci0gICAgICAgICAgICB2YXIgbWF4WSA9IC0gSW5maW5pdHk7Ci0gICAgICAg
ICAgICB2YXIgbWF4WiA9IC0gSW5maW5pdHk7CisgICAgICAgICAgICBzcG90TGlnaHRzOiB7IHZh
bHVlOiBbXSwgcHJvcGVydGllczogeworICAgICAgICAgICAgICAgIGNvbG9yOiB7fSwKKyAgICAg
ICAgICAgICAgICBwb3NpdGlvbjoge30sCisgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB7fSwK
KyAgICAgICAgICAgICAgICBkaXN0YW5jZToge30sCisgICAgICAgICAgICAgICAgY29uZUNvczog
e30sCisgICAgICAgICAgICAgICAgcGVudW1icmFDb3M6IHt9LAorICAgICAgICAgICAgICAgIGRl
Y2F5OiB7fSwKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3Ro
OyBpIDwgbDsgaSArPSAzICkgeworICAgICAgICAgICAgICAgIHNoYWRvdzoge30sCisgICAgICAg
ICAgICAgICAgc2hhZG93Qmlhczoge30sCisgICAgICAgICAgICAgICAgc2hhZG93UmFkaXVzOiB7
fSwKKyAgICAgICAgICAgICAgICBzaGFkb3dNYXBTaXplOiB7fQorICAgICAgICAgICAgfSB9LAog
Ci0gICAgICAgICAgICAgICAgdmFyIHggPSBhcnJheVsgaSBdOwotICAgICAgICAgICAgICAgIHZh
ciB5ID0gYXJyYXlbIGkgKyAxIF07Ci0gICAgICAgICAgICAgICAgdmFyIHogPSBhcnJheVsgaSAr
IDIgXTsKKyAgICAgICAgICAgIHNwb3RTaGFkb3dNYXA6IHsgdmFsdWU6IFtdIH0sCisgICAgICAg
ICAgICBzcG90U2hhZG93TWF0cml4OiB7IHZhbHVlOiBbXSB9LAogCi0gICAgICAgICAgICAgICAg
aWYgKCB4IDwgbWluWCApIG1pblggPSB4OwotICAgICAgICAgICAgICAgIGlmICggeSA8IG1pblkg
KSBtaW5ZID0geTsKLSAgICAgICAgICAgICAgICBpZiAoIHogPCBtaW5aICkgbWluWiA9IHo7Cisg
ICAgICAgICAgICBwb2ludExpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHsKKyAgICAg
ICAgICAgICAgICBjb2xvcjoge30sCisgICAgICAgICAgICAgICAgcG9zaXRpb246IHt9LAorICAg
ICAgICAgICAgICAgIGRlY2F5OiB7fSwKKyAgICAgICAgICAgICAgICBkaXN0YW5jZToge30sCiAK
LSAgICAgICAgICAgICAgICBpZiAoIHggPiBtYXhYICkgbWF4WCA9IHg7Ci0gICAgICAgICAgICAg
ICAgaWYgKCB5ID4gbWF4WSApIG1heFkgPSB5OwotICAgICAgICAgICAgICAgIGlmICggeiA+IG1h
eFogKSBtYXhaID0gejsKKyAgICAgICAgICAgICAgICBzaGFkb3c6IHt9LAorICAgICAgICAgICAg
ICAgIHNoYWRvd0JpYXM6IHt9LAorICAgICAgICAgICAgICAgIHNoYWRvd1JhZGl1czoge30sCisg
ICAgICAgICAgICAgICAgc2hhZG93TWFwU2l6ZToge30sCisgICAgICAgICAgICAgICAgc2hhZG93
Q2FtZXJhTmVhcjoge30sCisgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhRmFyOiB7fQorICAg
ICAgICAgICAgfSB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBwb2ludFNoYWRvd01h
cDogeyB2YWx1ZTogW10gfSwKKyAgICAgICAgICAgIHBvaW50U2hhZG93TWF0cml4OiB7IHZhbHVl
OiBbXSB9LAogCi0gICAgICAgICAgICB0aGlzLm1pbi5zZXQoIG1pblgsIG1pblksIG1pblogKTsK
LSAgICAgICAgICAgIHRoaXMubWF4LnNldCggbWF4WCwgbWF4WSwgbWF4WiApOworICAgICAgICAg
ICAgaGVtaXNwaGVyZUxpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRpZXM6IHsKKyAgICAgICAg
ICAgICAgICBkaXJlY3Rpb246IHt9LAorICAgICAgICAgICAgICAgIHNreUNvbG9yOiB7fSwKKyAg
ICAgICAgICAgICAgICBncm91bmRDb2xvcjoge30KKyAgICAgICAgICAgIH0gfSwKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAvLyBUT0RPIChhYmVsbmF0aW9uKTogUmVj
dEFyZWFMaWdodCBCUkRGIGRhdGEgbmVlZHMgdG8gYmUgbW92ZWQgZnJvbSBleGFtcGxlIHRvIG1h
aW4gc3JjCisgICAgICAgICAgICByZWN0QXJlYUxpZ2h0czogeyB2YWx1ZTogW10sIHByb3BlcnRp
ZXM6IHsKKyAgICAgICAgICAgICAgICBjb2xvcjoge30sCisgICAgICAgICAgICAgICAgcG9zaXRp
b246IHt9LAorICAgICAgICAgICAgICAgIHdpZHRoOiB7fSwKKyAgICAgICAgICAgICAgICBoZWln
aHQ6IHt9CisgICAgICAgICAgICB9IH0KIAogICAgICAgICB9LAogCi0gICAgICAgIHNldEZyb21C
dWZmZXJBdHRyaWJ1dGU6IGZ1bmN0aW9uICggYXR0cmlidXRlICkgewotCi0gICAgICAgICAgICB2
YXIgbWluWCA9ICsgSW5maW5pdHk7Ci0gICAgICAgICAgICB2YXIgbWluWSA9ICsgSW5maW5pdHk7
Ci0gICAgICAgICAgICB2YXIgbWluWiA9ICsgSW5maW5pdHk7CisgICAgICAgIHBvaW50czogewog
Ci0gICAgICAgICAgICB2YXIgbWF4WCA9IC0gSW5maW5pdHk7Ci0gICAgICAgICAgICB2YXIgbWF4
WSA9IC0gSW5maW5pdHk7Ci0gICAgICAgICAgICB2YXIgbWF4WiA9IC0gSW5maW5pdHk7CisgICAg
ICAgICAgICBkaWZmdXNlOiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4ZWVlZWVlICkgfSwKKyAgICAg
ICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEuMCB9LAorICAgICAgICAgICAgc2l6ZTogeyB2YWx1
ZTogMS4wIH0sCisgICAgICAgICAgICBzY2FsZTogeyB2YWx1ZTogMS4wIH0sCisgICAgICAgICAg
ICBtYXA6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIHV2VHJhbnNmb3JtOiB7IHZhbHVl
OiBuZXcgTWF0cml4MygpIH0KIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gYXR0
cmlidXRlLmNvdW50OyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgdmFyIHggPSBhdHRyaWJ1dGUuZ2V0WCggaSApOwotICAgICAgICAgICAgICAgIHZhciB5ID0g
YXR0cmlidXRlLmdldFkoIGkgKTsKLSAgICAgICAgICAgICAgICB2YXIgeiA9IGF0dHJpYnV0ZS5n
ZXRaKCBpICk7CisgICAgfTsKIAotICAgICAgICAgICAgICAgIGlmICggeCA8IG1pblggKSBtaW5Y
ID0geDsKLSAgICAgICAgICAgICAgICBpZiAoIHkgPCBtaW5ZICkgbWluWSA9IHk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCB6IDwgbWluWiApIG1pblogPSB6OworICAgIC8qKgorICAgICAqIEBhdXRo
b3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdl
ciAvIGh0dHA6Ly9nb21vLnNlLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgaWYgKCB4ID4g
bWF4WCApIG1heFggPSB4OwotICAgICAgICAgICAgICAgIGlmICggeSA+IG1heFkgKSBtYXhZID0g
eTsKLSAgICAgICAgICAgICAgICBpZiAoIHogPiBtYXhaICkgbWF4WiA9IHo7CisgICAgdmFyIFNo
YWRlckxpYiA9IHsKIAotICAgICAgICAgICAgfQorICAgICAgICBiYXNpYzogewogCi0gICAgICAg
ICAgICB0aGlzLm1pbi5zZXQoIG1pblgsIG1pblksIG1pblogKTsKLSAgICAgICAgICAgIHRoaXMu
bWF4LnNldCggbWF4WCwgbWF4WSwgbWF4WiApOworICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZv
cm1zVXRpbHMubWVyZ2UoIFsKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5jb21tb24sCisg
ICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuc3BlY3VsYXJtYXAsCisgICAgICAgICAgICAgICAg
VW5pZm9ybXNMaWIuZW52bWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmFvbWFwLAor
ICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxpZ2h0bWFwLAorICAgICAgICAgICAgICAgIFVu
aWZvcm1zTGliLmZvZworICAgICAgICAgICAgXSApLAogCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGJhc2ljX3ZlcnQs
CisgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubWVzaGJhc2ljX2ZyYWcK
IAogICAgICAgICB9LAogCi0gICAgICAgIHNldEZyb21Qb2ludHM6IGZ1bmN0aW9uICggcG9pbnRz
ICkgeworICAgICAgICBsYW1iZXJ0OiB7CiAKLSAgICAgICAgICAgIHRoaXMubWFrZUVtcHR5KCk7
CisgICAgICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWworICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLmNvbW1vbiwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5z
cGVjdWxhcm1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5lbnZtYXAsCisgICAgICAg
ICAgICAgICAgVW5pZm9ybXNMaWIuYW9tYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIu
bGlnaHRtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsCisgICAg
ICAgICAgICAgICAgVW5pZm9ybXNMaWIuZm9nLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGli
LmxpZ2h0cywKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVtaXNzaXZl
OiB7IHZhbHVlOiBuZXcgQ29sb3IoIDB4MDAwMDAwICkgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIF0gKSwKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHBvaW50
cy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hh
ZGVyQ2h1bmsubWVzaGxhbWJlcnRfdmVydCwKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBT
aGFkZXJDaHVuay5tZXNobGFtYmVydF9mcmFnCiAKLSAgICAgICAgICAgICAgICB0aGlzLmV4cGFu
ZEJ5UG9pbnQoIHBvaW50c1sgaSBdICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgcGhvbmc6IHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB1
bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWworICAgICAgICAgICAgICAgIFVuaWZvcm1z
TGliLmNvbW1vbiwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5zcGVjdWxhcm1hcCwKKyAg
ICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5lbnZtYXAsCisgICAgICAgICAgICAgICAgVW5pZm9y
bXNMaWIuYW9tYXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubGlnaHRtYXAsCisgICAg
ICAgICAgICAgICAgVW5pZm9ybXNMaWIuZW1pc3NpdmVtYXAsCisgICAgICAgICAgICAgICAgVW5p
Zm9ybXNMaWIuYnVtcG1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5ub3JtYWxtYXAs
CisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLAorICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLmdyYWRpZW50bWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1z
TGliLmZvZywKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5saWdodHMsCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbWlzc2l2ZTogeyB2YWx1ZTogbmV3IENvbG9y
KCAweDAwMDAwMCApIH0sCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGFyOiB7IHZhbHVlOiBu
ZXcgQ29sb3IoIDB4MTExMTExICkgfSwKKyAgICAgICAgICAgICAgICAgICAgc2hpbmluZXNzOiB7
IHZhbHVlOiAzMCB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSApLAorCisgICAg
ICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaG9uZ192ZXJ0LAorICAgICAg
ICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hwaG9uZ19mcmFnCiAKICAgICAg
ICAgfSwKIAotICAgICAgICBzZXRGcm9tQ2VudGVyQW5kU2l6ZTogZnVuY3Rpb24gKCkgeworICAg
ICAgICBzdGFuZGFyZDogewogCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwor
ICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKKyAgICAgICAgICAg
ICAgICBVbmlmb3Jtc0xpYi5jb21tb24sCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZW52
bWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmFvbWFwLAorICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLmxpZ2h0bWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmVtaXNz
aXZlbWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmJ1bXBtYXAsCisgICAgICAgICAg
ICAgICAgVW5pZm9ybXNMaWIubm9ybWFsbWFwLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGli
LmRpc3BsYWNlbWVudG1hcCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5yb3VnaG5lc3Nt
YXAsCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIubWV0YWxuZXNzbWFwLAorICAgICAgICAg
ICAgICAgIFVuaWZvcm1zTGliLmZvZywKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5saWdo
dHMsCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbWlzc2l2ZTogeyB2
YWx1ZTogbmV3IENvbG9yKCAweDAwMDAwMCApIH0sCisgICAgICAgICAgICAgICAgICAgIHJvdWdo
bmVzczogeyB2YWx1ZTogMC41IH0sCisgICAgICAgICAgICAgICAgICAgIG1ldGFsbmVzczogeyB2
YWx1ZTogMC41IH0sCisgICAgICAgICAgICAgICAgICAgIGVudk1hcEludGVuc2l0eTogeyB2YWx1
ZTogMSB9IC8vIHRlbXBvcmFyeQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0gKSwK
IAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEZyb21DZW50ZXJBbmRTaXplKCBjZW50
ZXIsIHNpemUgKSB7CisgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLm1lc2hw
aHlzaWNhbF92ZXJ0LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLm1l
c2hwaHlzaWNhbF9mcmFnCiAKLSAgICAgICAgICAgICAgICB2YXIgaGFsZlNpemUgPSB2MS5jb3B5
KCBzaXplICkubXVsdGlwbHlTY2FsYXIoIDAuNSApOworICAgICAgICB9LAogCi0gICAgICAgICAg
ICAgICAgdGhpcy5taW4uY29weSggY2VudGVyICkuc3ViKCBoYWxmU2l6ZSApOwotICAgICAgICAg
ICAgICAgIHRoaXMubWF4LmNvcHkoIGNlbnRlciApLmFkZCggaGFsZlNpemUgKTsKKyAgICAgICAg
cG9pbnRzOiB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHVu
aWZvcm1zOiBVbmlmb3Jtc1V0aWxzLm1lcmdlKCBbCisgICAgICAgICAgICAgICAgVW5pZm9ybXNM
aWIucG9pbnRzLAorICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmZvZworICAgICAgICAgICAg
XSApLAogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJD
aHVuay5wb2ludHNfdmVydCwKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVu
ay5wb2ludHNfZnJhZwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgfSwKIAotICAgICAgICBzZXRG
cm9tT2JqZWN0OiBmdW5jdGlvbiAoIG9iamVjdCApIHsKKyAgICAgICAgZGFzaGVkOiB7CiAKLSAg
ICAgICAgICAgIHRoaXMubWFrZUVtcHR5KCk7CisgICAgICAgICAgICB1bmlmb3JtczogVW5pZm9y
bXNVdGlscy5tZXJnZSggWworICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmNvbW1vbiwKKyAg
ICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2csCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzY2FsZTogeyB2YWx1ZTogMSB9LAorICAgICAgICAgICAgICAgICAgICBk
YXNoU2l6ZTogeyB2YWx1ZTogMSB9LAorICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHsg
dmFsdWU6IDIgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0gKSwKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kQnlPYmplY3QoIG9iamVjdCApOworICAgICAgICAgICAg
dmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5saW5lZGFzaGVkX3ZlcnQsCisgICAgICAgICAgICBm
cmFnbWVudFNoYWRlcjogU2hhZGVyQ2h1bmsubGluZWRhc2hlZF9mcmFnCiAKICAgICAgICAgfSwK
IAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICBkZXB0aDogewogCi0gICAg
ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CisgICAg
ICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWworICAgICAgICAgICAgICAg
IFVuaWZvcm1zTGliLmNvbW1vbiwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5kaXNwbGFj
ZW1lbnRtYXAKKyAgICAgICAgICAgIF0gKSwKKworICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBT
aGFkZXJDaHVuay5kZXB0aF92ZXJ0LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRl
ckNodW5rLmRlcHRoX2ZyYWcKIAogICAgICAgICB9LAogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9u
ICggYm94ICkgeworICAgICAgICBub3JtYWw6IHsKIAotICAgICAgICAgICAgdGhpcy5taW4uY29w
eSggYm94Lm1pbiApOwotICAgICAgICAgICAgdGhpcy5tYXguY29weSggYm94Lm1heCApOworICAg
ICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKKyAgICAgICAgICAgICAg
ICBVbmlmb3Jtc0xpYi5jb21tb24sCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuYnVtcG1h
cCwKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5ub3JtYWxtYXAsCisgICAgICAgICAgICAg
ICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLAorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTogMS4wIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBdICksCiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVuay5ub3JtYWxfdmVydCwKKyAgICAgICAgICAgIGZy
YWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5ub3JtYWxfZnJhZwogCiAgICAgICAgIH0sCiAKLSAg
ICAgICAgbWFrZUVtcHR5OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAgICAgLy8gIEN1YmUgbWFwIHNoYWRlcgorICAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwogCi0gICAgICAgICAgICB0aGlzLm1pbi54ID0gdGhpcy5taW4ueSA9IHRoaXMubWluLnog
PSArIEluZmluaXR5OwotICAgICAgICAgICAgdGhpcy5tYXgueCA9IHRoaXMubWF4LnkgPSB0aGlz
Lm1heC56ID0gLSBJbmZpbml0eTsKKyAgICAgICAgY3ViZTogewogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIHVuaWZvcm1zOiB7CisgICAgICAgICAgICAgICAgdEN1YmU6
IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgICAgICB0RmxpcDogeyB2YWx1ZTogLSAxIH0s
CisgICAgICAgICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTogMS4wIH0KKyAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuY3ViZV92ZXJ0LAorICAg
ICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLmN1YmVfZnJhZwogCiAgICAgICAg
IH0sCiAKLSAgICAgICAgaXNFbXB0eTogZnVuY3Rpb24gKCkgeworICAgICAgICBlcXVpcmVjdDog
ewogCi0gICAgICAgICAgICAvLyB0aGlzIGlzIGEgbW9yZSByb2J1c3QgY2hlY2sgZm9yIGVtcHR5
IHRoYW4gKCB2b2x1bWUgPD0gMCApIGJlY2F1c2Ugdm9sdW1lIGNhbiBnZXQgcG9zaXRpdmUgd2l0
aCB0d28gbmVnYXRpdmUgYXhlcworICAgICAgICAgICAgdW5pZm9ybXM6IHsKKyAgICAgICAgICAg
ICAgICB0RXF1aXJlY3Q6IHsgdmFsdWU6IG51bGwgfSwKKyAgICAgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIHJldHVybiAoIHRoaXMubWF4LnggPCB0aGlzLm1pbi54ICkgfHwgKCB0aGlzLm1heC55
IDwgdGhpcy5taW4ueSApIHx8ICggdGhpcy5tYXgueiA8IHRoaXMubWluLnogKTsKKyAgICAgICAg
ICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1bmsuZXF1aXJlY3RfdmVydCwKKyAgICAgICAgICAg
IGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5lcXVpcmVjdF9mcmFnCiAKICAgICAgICAgfSwK
IAotICAgICAgICBnZXRDZW50ZXI6IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7Ci0KLSAg
ICAgICAgICAgIHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOwot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gcmVzdWx0LnNldCggMCwgMCwgMCAp
IDogcmVzdWx0LmFkZFZlY3RvcnMoIHRoaXMubWluLCB0aGlzLm1heCApLm11bHRpcGx5U2NhbGFy
KCAwLjUgKTsKLQotICAgICAgICB9LAorICAgICAgICBkaXN0YW5jZVJHQkE6IHsKIAotICAgICAg
ICBnZXRTaXplOiBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgdW5p
Zm9ybXM6IFVuaWZvcm1zVXRpbHMubWVyZ2UoIFsKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xp
Yi5jb21tb24sCisgICAgICAgICAgICAgICAgVW5pZm9ybXNMaWIuZGlzcGxhY2VtZW50bWFwLAor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9zaXRpb246
IHsgdmFsdWU6IG5ldyBWZWN0b3IzKCkgfSwKKyAgICAgICAgICAgICAgICAgICAgbmVhckRpc3Rh
bmNlOiB7IHZhbHVlOiAxIH0sCisgICAgICAgICAgICAgICAgICAgIGZhckRpc3RhbmNlOiB7IHZh
bHVlOiAxMDAwIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdICksCiAKLSAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpID8gcmVzdWx0LnNldCggMCwgMCwgMCApIDog
cmVzdWx0LnN1YlZlY3RvcnMoIHRoaXMubWF4LCB0aGlzLm1pbiApOworICAgICAgICAgICAgdmVy
dGV4U2hhZGVyOiBTaGFkZXJDaHVuay5kaXN0YW5jZVJHQkFfdmVydCwKKyAgICAgICAgICAgIGZy
YWdtZW50U2hhZGVyOiBTaGFkZXJDaHVuay5kaXN0YW5jZVJHQkFfZnJhZwogCiAgICAgICAgIH0s
CiAKLSAgICAgICAgZXhwYW5kQnlQb2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKLQotICAgICAg
ICAgICAgdGhpcy5taW4ubWluKCBwb2ludCApOwotICAgICAgICAgICAgdGhpcy5tYXgubWF4KCBw
b2ludCApOworICAgICAgICBzaGFkb3c6IHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5tZXJnZSggWworICAgICAgICAgICAg
ICAgIFVuaWZvcm1zTGliLmxpZ2h0cywKKyAgICAgICAgICAgICAgICBVbmlmb3Jtc0xpYi5mb2cs
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb2xvcjogeyB2YWx1ZTog
bmV3IENvbG9yKCAweDAwMDAwICkgfSwKKyAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogeyB2
YWx1ZTogMS4wIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgXSApLAogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckNodW5rLnNoYWRvd192ZXJ0
LAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rLnNoYWRvd19mcmFnCiAK
LSAgICAgICAgZXhwYW5kQnlWZWN0b3I6IGZ1bmN0aW9uICggdmVjdG9yICkgeworICAgICAgICB9
CiAKLSAgICAgICAgICAgIHRoaXMubWluLnN1YiggdmVjdG9yICk7Ci0gICAgICAgICAgICB0aGlz
Lm1heC5hZGQoIHZlY3RvciApOworICAgIH07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIFNoYWRlckxpYi5waHlzaWNhbCA9IHsKIAotICAgICAgICB9LAorICAgICAgICB1bmlmb3Jt
czogVW5pZm9ybXNVdGlscy5tZXJnZSggWworICAgICAgICAgICAgU2hhZGVyTGliLnN0YW5kYXJk
LnVuaWZvcm1zLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsZWFyQ29hdDogeyB2
YWx1ZTogMCB9LAorICAgICAgICAgICAgICAgIGNsZWFyQ29hdFJvdWdobmVzczogeyB2YWx1ZTog
MCB9CisgICAgICAgICAgICB9CisgICAgICAgIF0gKSwKIAotICAgICAgICBleHBhbmRCeVNjYWxh
cjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7CisgICAgICAgIHZlcnRleFNoYWRlcjogU2hhZGVyQ2h1
bmsubWVzaHBoeXNpY2FsX3ZlcnQsCisgICAgICAgIGZyYWdtZW50U2hhZGVyOiBTaGFkZXJDaHVu
ay5tZXNocGh5c2ljYWxfZnJhZwogCi0gICAgICAgICAgICB0aGlzLm1pbi5hZGRTY2FsYXIoIC0g
c2NhbGFyICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5hZGRTY2FsYXIoIHNjYWxhciApOworICAg
IH07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIC8qKgorICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgfSwKKyAgICBm
dW5jdGlvbiBXZWJHTEFuaW1hdGlvbigpIHsKIAotICAgICAgICBleHBhbmRCeU9iamVjdDogZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgY29udGV4dCA9IG51bGw7CisgICAgICAgIHZhciBpc0Fu
aW1hdGluZyA9IGZhbHNlOworICAgICAgICB2YXIgYW5pbWF0aW9uTG9vcCA9IG51bGw7CiAKLSAg
ICAgICAgICAgIC8vIENvbXB1dGVzIHRoZSB3b3JsZC1heGlzLWFsaWduZWQgYm91bmRpbmcgYm94
IG9mIGFuIG9iamVjdCAoaW5jbHVkaW5nIGl0cyBjaGlsZHJlbiksCi0gICAgICAgICAgICAvLyBh
Y2NvdW50aW5nIGZvciBib3RoIHRoZSBvYmplY3QncywgYW5kIGNoaWxkcmVuJ3MsIHdvcmxkIHRy
YW5zZm9ybXMKKyAgICAgICAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggdGltZSwgZnJhbWUg
KSB7CiAKLSAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICBp
ZiAoIGlzQW5pbWF0aW5nID09PSBmYWxzZSApIHJldHVybjsKIAotICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uIGV4cGFuZEJ5T2JqZWN0KCBvYmplY3QgKSB7CisgICAgICAgICAgICBhbmltYXRp
b25Mb29wKCB0aW1lLCBmcmFtZSApOwogCi0gICAgICAgICAgICAgICAgdmFyIHNjb3BlID0gdGhp
czsKKyAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBvbkFuaW1hdGlv
bkZyYW1lICk7CiAKLSAgICAgICAgICAgICAgICBvYmplY3QudXBkYXRlTWF0cml4V29ybGQoIHRy
dWUgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgb2JqZWN0LnRyYXZlcnNlKCBmdW5j
dGlvbiAoIG5vZGUgKSB7CisgICAgICAgIHJldHVybiB7CiAKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGksIGw7CisgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG5vZGUuZ2VvbWV0cnk7CisgICAgICAgICAgICAgICAg
aWYgKCBpc0FuaW1hdGluZyA9PT0gdHJ1ZSApIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAo
IGFuaW1hdGlvbkxvb3AgPT09IG51bGwgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBvbkFuaW1hdGlvbkZyYW1lICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKKyAgICAgICAgICAgICAg
ICBpc0FuaW1hdGluZyA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNlczsKKyAgICAgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8
IGw7IGkgKysgKSB7CisgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdjEuY29weSggdmVydGljZXNbIGkgXSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2MS5hcHBseU1hdHJpeDQoIG5vZGUubWF0cml4V29y
bGQgKTsKKyAgICAgICAgICAgICAgICBpc0FuaW1hdGluZyA9IGZhbHNlOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmV4cGFuZEJ5UG9pbnQoIHYxICk7CisgICAgICAg
ICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0
QW5pbWF0aW9uTG9vcDogZnVuY3Rpb24gKCBjYWxsYmFjayApIHsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKKyAgICAg
ICAgICAgICAgICBhbmltYXRpb25Mb29wID0gY2FsbGJhY2s7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsK
KyAgICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGF0dHJp
YnV0ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgc2V0Q29udGV4dDogZnVuY3Rpb24g
KCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0g
MCwgbCA9IGF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dCA9IHZhbHVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
MS5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGkgKS5hcHBseU1hdHJpeDQoIG5vZGUu
bWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2NvcGUuZXhwYW5kQnlQb2ludCggdjEgKTsKKyAgICAgICAgfTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21y
ZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICBmdW5j
dGlvbiBXZWJHTEF0dHJpYnV0ZXMoIGdsICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgdmFyIGJ1ZmZlcnMgPSBuZXcgV2Vha01hcCgpOwogCi0gICAgICAgICAgICAgICAgfSAp
OworICAgICAgICBmdW5jdGlvbiBjcmVhdGVCdWZmZXIoIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSAp
IHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdmFyIGFycmF5
ID0gYXR0cmlidXRlLmFycmF5OworICAgICAgICAgICAgdmFyIHVzYWdlID0gYXR0cmlidXRlLmR5
bmFtaWMgPyBnbC5EWU5BTUlDX0RSQVcgOiBnbC5TVEFUSUNfRFJBVzsKIAotICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIHZhciBidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKIAotICAgICAg
ICB9KCksCisgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKCBidWZmZXJUeXBlLCBidWZmZXIgKTsK
KyAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoIGJ1ZmZlclR5cGUsIGFycmF5LCB1c2FnZSApOwog
Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7CisgICAgICAgICAg
ICBhdHRyaWJ1dGUub25VcGxvYWRDYWxsYmFjaygpOwogCi0gICAgICAgICAgICByZXR1cm4gcG9p
bnQueCA8IHRoaXMubWluLnggfHwgcG9pbnQueCA+IHRoaXMubWF4LnggfHwKLSAgICAgICAgICAg
ICAgICBwb2ludC55IDwgdGhpcy5taW4ueSB8fCBwb2ludC55ID4gdGhpcy5tYXgueSB8fAotICAg
ICAgICAgICAgICAgIHBvaW50LnogPCB0aGlzLm1pbi56IHx8IHBvaW50LnogPiB0aGlzLm1heC56
ID8gZmFsc2UgOiB0cnVlOworICAgICAgICAgICAgdmFyIHR5cGUgPSBnbC5GTE9BVDsKIAotICAg
ICAgICB9LAorICAgICAgICAgICAgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSAp
IHsKIAotICAgICAgICBjb250YWluc0JveDogZnVuY3Rpb24gKCBib3ggKSB7CisgICAgICAgICAg
ICAgICAgdHlwZSA9IGdsLkZMT0FUOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5taW4ueCA8
PSBib3gubWluLnggJiYgYm94Lm1heC54IDw9IHRoaXMubWF4LnggJiYKLSAgICAgICAgICAgICAg
ICB0aGlzLm1pbi55IDw9IGJveC5taW4ueSAmJiBib3gubWF4LnkgPD0gdGhpcy5tYXgueSAmJgot
ICAgICAgICAgICAgICAgIHRoaXMubWluLnogPD0gYm94Lm1pbi56ICYmIGJveC5tYXgueiA8PSB0
aGlzLm1heC56OworICAgICAgICAgICAgfSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBGbG9h
dDY0QXJyYXkgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDog
RmxvYXQ2NEFycmF5LicgKTsKIAotICAgICAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uICggcG9p
bnQsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgfSBlbHNlIGlmICggYXJyYXkgaW5z
dGFuY2VvZiBVaW50MTZBcnJheSApIHsKIAotICAgICAgICAgICAgLy8gVGhpcyBjYW4gcG90ZW50
aWFsbHkgaGF2ZSBhIGRpdmlkZSBieSB6ZXJvIGlmIHRoZSBib3gKLSAgICAgICAgICAgIC8vIGhh
cyBhIHNpemUgZGltZW5zaW9uIG9mIDAuCisgICAgICAgICAgICAgICAgdHlwZSA9IGdsLlVOU0lH
TkVEX1NIT1JUOwogCi0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwg
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2Yg
SW50MTZBcnJheSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXQoCi0gICAgICAg
ICAgICAgICAgKCBwb2ludC54IC0gdGhpcy5taW4ueCApIC8gKCB0aGlzLm1heC54IC0gdGhpcy5t
aW4ueCApLAotICAgICAgICAgICAgICAgICggcG9pbnQueSAtIHRoaXMubWluLnkgKSAvICggdGhp
cy5tYXgueSAtIHRoaXMubWluLnkgKSwKLSAgICAgICAgICAgICAgICAoIHBvaW50LnogLSB0aGlz
Lm1pbi56ICkgLyAoIHRoaXMubWF4LnogLSB0aGlzLm1pbi56ICkKLSAgICAgICAgICAgICk7Cisg
ICAgICAgICAgICAgICAgdHlwZSA9IGdsLlNIT1JUOwogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ICkgewogCi0gICAgICAg
IGludGVyc2VjdHNCb3g6IGZ1bmN0aW9uICggYm94ICkgeworICAgICAgICAgICAgICAgIHR5cGUg
PSBnbC5VTlNJR05FRF9JTlQ7CiAKLSAgICAgICAgICAgIC8vIHVzaW5nIDYgc3BsaXR0aW5nIHBs
YW5lcyB0byBydWxlIG91dCBpbnRlcnNlY3Rpb25zLgotICAgICAgICAgICAgcmV0dXJuIGJveC5t
YXgueCA8IHRoaXMubWluLnggfHwgYm94Lm1pbi54ID4gdGhpcy5tYXgueCB8fAotICAgICAgICAg
ICAgICAgIGJveC5tYXgueSA8IHRoaXMubWluLnkgfHwgYm94Lm1pbi55ID4gdGhpcy5tYXgueSB8
fAotICAgICAgICAgICAgICAgIGJveC5tYXgueiA8IHRoaXMubWluLnogfHwgYm94Lm1pbi56ID4g
dGhpcy5tYXgueiA/IGZhbHNlIDogdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFycmF5
IGluc3RhbmNlb2YgSW50MzJBcnJheSApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
IHR5cGUgPSBnbC5JTlQ7CiAKLSAgICAgICAgaW50ZXJzZWN0c1NwaGVyZTogKCBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSAp
IHsKIAotICAgICAgICAgICAgdmFyIGNsb3Nlc3RQb2ludCA9IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgICAgICAgICAgdHlwZSA9IGdsLkJZVEU7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBpbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBh
cnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgKSB7CiAKLSAgICAgICAgICAgICAgICAvLyBGaW5k
IHRoZSBwb2ludCBvbiB0aGUgQUFCQiBjbG9zZXN0IHRvIHRoZSBzcGhlcmUgY2VudGVyLgotICAg
ICAgICAgICAgICAgIHRoaXMuY2xhbXBQb2ludCggc3BoZXJlLmNlbnRlciwgY2xvc2VzdFBvaW50
ICk7CisgICAgICAgICAgICAgICAgdHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CiAKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGF0IHBvaW50IGlzIGluc2lkZSB0aGUgc3BoZXJlLCB0aGUgQUFCQiBh
bmQgc3BoZXJlIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdFBvaW50
LmRpc3RhbmNlVG9TcXVhcmVkKCBzcGhlcmUuY2VudGVyICkgPD0gKCBzcGhlcmUucmFkaXVzICog
c3BoZXJlLnJhZGl1cyApOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLAorICAgICAgICAgICAgICAgIHR5cGU6IHR5
cGUsCisgICAgICAgICAgICAgICAgYnl0ZXNQZXJFbGVtZW50OiBhcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwKKyAgICAgICAgICAgICAgICB2ZXJzaW9uOiBhdHRyaWJ1dGUudmVyc2lvbgogICAgICAg
ICAgICAgfTsKIAotICAgICAgICB9ICkoKSwKKyAgICAgICAgfQogCi0gICAgICAgIGludGVyc2Vj
dHNQbGFuZTogZnVuY3Rpb24gKCBwbGFuZSApIHsKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRlQnVm
ZmVyKCBidWZmZXIsIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHsKIAotICAgICAgICAgICAgLy8g
V2UgY29tcHV0ZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBkb3QgcHJvZHVjdCB2YWx1ZXMuIElm
IHRob3NlIHZhbHVlcwotICAgICAgICAgICAgLy8gYXJlIG9uIHRoZSBzYW1lIHNpZGUgKGJhY2sg
b3IgZnJvbnQpIG9mIHRoZSBwbGFuZSwgdGhlbiB0aGVyZSBpcyBubyBpbnRlcnNlY3Rpb24uCisg
ICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGUuYXJyYXk7CisgICAgICAgICAgICB2YXIg
dXBkYXRlUmFuZ2UgPSBhdHRyaWJ1dGUudXBkYXRlUmFuZ2U7CiAKLSAgICAgICAgICAgIHZhciBt
aW4sIG1heDsKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGJ1ZmZlclR5cGUsIGJ1ZmZlciAp
OwogCi0gICAgICAgICAgICBpZiAoIHBsYW5lLm5vcm1hbC54ID4gMCApIHsKKyAgICAgICAgICAg
IGlmICggYXR0cmlidXRlLmR5bmFtaWMgPT09IGZhbHNlICkgewogCi0gICAgICAgICAgICAgICAg
bWluID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1pbi54OwotICAgICAgICAgICAgICAgIG1heCA9
IHBsYW5lLm5vcm1hbC54ICogdGhpcy5tYXgueDsKKyAgICAgICAgICAgICAgICBnbC5idWZmZXJE
YXRhKCBidWZmZXJUeXBlLCBhcnJheSwgZ2wuU1RBVElDX0RSQVcgKTsKIAotICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHVwZGF0ZVJhbmdlLmNvdW50ID09PSAt
IDEgKSB7CiAKLSAgICAgICAgICAgICAgICBtaW4gPSBwbGFuZS5ub3JtYWwueCAqIHRoaXMubWF4
Lng7Ci0gICAgICAgICAgICAgICAgbWF4ID0gcGxhbmUubm9ybWFsLnggKiB0aGlzLm1pbi54Owor
ICAgICAgICAgICAgICAgIC8vIE5vdCB1c2luZyB1cGRhdGUgcmFuZ2VzCiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBnbC5idWZmZXJTdWJEYXRhKCBidWZmZXJUeXBlLCAwLCBhcnJh
eSApOwogCi0gICAgICAgICAgICBpZiAoIHBsYW5lLm5vcm1hbC55ID4gMCApIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHVwZGF0ZVJhbmdlLmNvdW50ID09PSAwICkgewogCi0gICAgICAgICAg
ICAgICAgbWluICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5taW4ueTsKLSAgICAgICAgICAgICAg
ICBtYXggKz0gcGxhbmUubm9ybWFsLnkgKiB0aGlzLm1heC55OworICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRI
UkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdl
LmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5n
IG1hbnVhbGx5LicgKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAg
IG1pbiArPSBwbGFuZS5ub3JtYWwueSAqIHRoaXMubWF4Lnk7Ci0gICAgICAgICAgICAgICAgbWF4
ICs9IHBsYW5lLm5vcm1hbC55ICogdGhpcy5taW4ueTsKKyAgICAgICAgICAgICAgICBnbC5idWZm
ZXJTdWJEYXRhKCBidWZmZXJUeXBlLCB1cGRhdGVSYW5nZS5vZmZzZXQgKiBhcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3ViYXJyYXkoIHVwZGF0ZVJh
bmdlLm9mZnNldCwgdXBkYXRlUmFuZ2Uub2Zmc2V0ICsgdXBkYXRlUmFuZ2UuY291bnQgKSApOwog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2UuY291bnQgPSAtIDE7
IC8vIHJlc2V0IHJhbmdlCiAKLSAgICAgICAgICAgIGlmICggcGxhbmUubm9ybWFsLnogPiAwICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbWluICs9IHBsYW5lLm5vcm1hbC56
ICogdGhpcy5taW4uejsKLSAgICAgICAgICAgICAgICBtYXggKz0gcGxhbmUubm9ybWFsLnogKiB0
aGlzLm1heC56OworICAgICAgICB9CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8v
CiAKLSAgICAgICAgICAgICAgICBtaW4gKz0gcGxhbmUubm9ybWFsLnogKiB0aGlzLm1heC56Owot
ICAgICAgICAgICAgICAgIG1heCArPSBwbGFuZS5ub3JtYWwueiAqIHRoaXMubWluLno7CisgICAg
ICAgIGZ1bmN0aW9uIGdldCggYXR0cmlidXRlICkgewogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlICkgYXR0cmli
dXRlID0gYXR0cmlidXRlLmRhdGE7CiAKLSAgICAgICAgICAgIHJldHVybiAoIG1pbiA8PSBwbGFu
ZS5jb25zdGFudCAmJiBtYXggPj0gcGxhbmUuY29uc3RhbnQgKTsKKyAgICAgICAgICAgIHJldHVy
biBidWZmZXJzLmdldCggYXR0cmlidXRlICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgfQogCi0g
ICAgICAgIGNsYW1wUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQsIG9wdGlvbmFsVGFyZ2V0ICkgewor
ICAgICAgICBmdW5jdGlvbiByZW1vdmUoIGF0dHJpYnV0ZSApIHsKIAotICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0LmNvcHkoIHBvaW50ICkuY2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApOwor
ICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSAp
IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS5kYXRhOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB2
YXIgZGF0YSA9IGJ1ZmZlcnMuZ2V0KCBhdHRyaWJ1dGUgKTsKIAotICAgICAgICBkaXN0YW5jZVRv
UG9pbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICggZGF0YSApIHsKIAotICAgICAg
ICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICBnbC5kZWxldGVC
dWZmZXIoIGRhdGEuYnVmZmVyICk7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBkaXN0
YW5jZVRvUG9pbnQoIHBvaW50ICkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcnMuZGVsZXRlKCBh
dHRyaWJ1dGUgKTsKIAotICAgICAgICAgICAgICAgIHZhciBjbGFtcGVkUG9pbnQgPSB2MS5jb3B5
KCBwb2ludCApLmNsYW1wKCB0aGlzLm1pbiwgdGhpcy5tYXggKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY2xhbXBlZFBvaW50LnN1YiggcG9pbnQgKS5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAgICAgIH0oKSwKKyAgICAgICAgZnVu
Y3Rpb24gdXBkYXRlKCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUgKSB7CiAKLSAgICAgICAgZ2V0Qm91
bmRpbmdTcGhlcmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICggYXR0cmlidXRlLmlz
SW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTsK
IAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBk
YXRhID0gYnVmZmVycy5nZXQoIGF0dHJpYnV0ZSApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gZ2V0Qm91bmRpbmdTcGhlcmUoIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAg
aWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFNwaGVyZSgpOworICAgICAgICAgICAgICAgIGJ1ZmZl
cnMuc2V0KCBhdHRyaWJ1dGUsIGNyZWF0ZUJ1ZmZlciggYXR0cmlidXRlLCBidWZmZXJUeXBlICkg
KTsKIAotICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2VudGVyKCByZXN1bHQuY2VudGVyICk7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBkYXRhLnZlcnNpb24gPCBhdHRyaWJ1dGUudmVyc2lvbiAp
IHsKIAotICAgICAgICAgICAgICAgIHJlc3VsdC5yYWRpdXMgPSB0aGlzLmdldFNpemUoIHYxICku
bGVuZ3RoKCkgKiAwLjU7CisgICAgICAgICAgICAgICAgdXBkYXRlQnVmZmVyKCBkYXRhLmJ1ZmZl
ciwgYXR0cmlidXRlLCBidWZmZXJUeXBlICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgIGRhdGEudmVyc2lvbiA9IGF0dHJpYnV0ZS52ZXJzaW9uOwog
Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogCi0gICAgICAgIH0oKSwKKyAgICAgICAg
fQogCi0gICAgICAgIGludGVyc2VjdDogZnVuY3Rpb24gKCBib3ggKSB7CisgICAgICAgIHJldHVy
biB7CiAKLSAgICAgICAgICAgIHRoaXMubWluLm1heCggYm94Lm1pbiApOwotICAgICAgICAgICAg
dGhpcy5tYXgubWluKCBib3gubWF4ICk7CisgICAgICAgICAgICBnZXQ6IGdldCwKKyAgICAgICAg
ICAgIHJlbW92ZTogcmVtb3ZlLAorICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUKIAotICAgICAg
ICAgICAgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCwgdGhlIHJlc3VsdCBp
cyBmdWxseSBlbXB0eSwgbm90IHNsaWdodGx5IGVtcHR5IHdpdGggbm9uLWluZi8raW5mIHZhbHVl
cyB0aGF0IHdpbGwgY2F1c2Ugc3Vic2VxdWVuY2UgaW50ZXJzZWN0cyB0byBlcnJvbmVvdXNseSBy
ZXR1cm4gdmFsaWQgdmFsdWVzLgotICAgICAgICAgICAgaWYoIHRoaXMuaXNFbXB0eSgpICkgdGhp
cy5tYWtlRW1wdHkoKTsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfQogCi0gICAgICAgIH0sCisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1
Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJh
LmlvCisgICAgICovCiAKLSAgICAgICAgdW5pb246IGZ1bmN0aW9uICggYm94ICkgeworICAgIGZ1
bmN0aW9uIEV1bGVyKCB4LCB5LCB6LCBvcmRlciApIHsKIAotICAgICAgICAgICAgdGhpcy5taW4u
bWluKCBib3gubWluICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5tYXgoIGJveC5tYXggKTsKKyAg
ICAgICAgdGhpcy5feCA9IHggfHwgMDsKKyAgICAgICAgdGhpcy5feSA9IHkgfHwgMDsKKyAgICAg
ICAgdGhpcy5feiA9IHogfHwgMDsKKyAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlciB8fCBFdWxl
ci5EZWZhdWx0T3JkZXI7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KIAotICAg
ICAgICB9LAorICAgIEV1bGVyLlJvdGF0aW9uT3JkZXJzID0gWyAnWFlaJywgJ1laWCcsICdaWFkn
LCAnWFpZJywgJ1lYWicsICdaWVgnIF07CiAKLSAgICAgICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlv
biAoKSB7CisgICAgRXVsZXIuRGVmYXVsdE9yZGVyID0gJ1hZWic7CiAKLSAgICAgICAgICAgIHZh
ciBwb2ludHMgPSBbCi0gICAgICAgICAgICAgICAgbmV3IFZlY3RvcjMoKSwKLSAgICAgICAgICAg
ICAgICBuZXcgVmVjdG9yMygpLAotICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IzKCksCi0gICAg
ICAgICAgICAgICAgbmV3IFZlY3RvcjMoKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMygp
LAotICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IzKCksCi0gICAgICAgICAgICAgICAgbmV3IFZl
Y3RvcjMoKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMygpCi0gICAgICAgICAgICBdOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBFdWxlci5wcm90b3R5cGUsIHsKIAotICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFwcGx5TWF0cml4NCggbWF0cml4ICkgeworICAgICAgICB4
OiB7CiAKLSAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0gb2YgZW1wdHkgYm94IGlzIGFuIGVt
cHR5IGJveC4KLSAgICAgICAgICAgICAgICBpZiggdGhpcy5pc0VtcHR5KCkgKSByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgLy8g
Tk9URTogSSBhbSB1c2luZyBhIGJpbmFyeSBwYXR0ZXJuIHRvIHNwZWNpZnkgYWxsIDJeMyBjb21i
aW5hdGlvbnMgYmVsb3cKLSAgICAgICAgICAgICAgICBwb2ludHNbIDAgXS5zZXQoIHRoaXMubWlu
LngsIHRoaXMubWluLnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAw
MDAKLSAgICAgICAgICAgICAgICBwb2ludHNbIDEgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWlu
LnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMDEKLSAgICAgICAg
ICAgICAgICBwb2ludHNbIDIgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWlu
LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMTAKLSAgICAgICAgICAgICAgICBwb2lu
dHNbIDMgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWF4LnksIHRoaXMubWF4LnogKS5hcHBseU1h
dHJpeDQoIG1hdHJpeCApOyAvLyAwMTEKLSAgICAgICAgICAgICAgICBwb2ludHNbIDQgXS5zZXQo
IHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJp
eCApOyAvLyAxMDAKLSAgICAgICAgICAgICAgICBwb2ludHNbIDUgXS5zZXQoIHRoaXMubWF4Lngs
IHRoaXMubWluLnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMDEK
LSAgICAgICAgICAgICAgICBwb2ludHNbIDYgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWF4Lnks
IHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMTAKLSAgICAgICAgICAg
ICAgICBwb2ludHNbIDcgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWF4LnksIHRoaXMubWF4Lnog
KS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAgIC8vIDExMQorICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl94OwogCi0gICAgICAgICAgICAgICAgdGhpcy5zZXRGcm9tUG9pbnRzKCBwb2ludHMg
KTsKKyAgICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgIHNldDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl94ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5n
ZUNhbGxiYWNrKCk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgfQogCi0gICAgICAgIHRy
YW5zbGF0ZTogZnVuY3Rpb24gKCBvZmZzZXQgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
IHRoaXMubWluLmFkZCggb2Zmc2V0ICk7Ci0gICAgICAgICAgICB0aGlzLm1heC5hZGQoIG9mZnNl
dCApOworICAgICAgICB5OiB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5feTsKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggYm94ICkgeworICAgICAg
ICAgICAgfSwKIAotICAgICAgICAgICAgcmV0dXJuIGJveC5taW4uZXF1YWxzKCB0aGlzLm1pbiAp
ICYmIGJveC5tYXguZXF1YWxzKCB0aGlzLm1heCApOworICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biAoIHZhbHVlICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl95ID0gdmFs
dWU7CisgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CiAKLSAgICB9ICk7
CisgICAgICAgICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0
cDovL2NsYXJhLmlvCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8K
LSAgICAgKi8KKyAgICAgICAgfSwKIAotICAgIGZ1bmN0aW9uIFNwaGVyZSggY2VudGVyLCByYWRp
dXMgKSB7CisgICAgICAgIHo6IHsKIAotICAgICAgICB0aGlzLmNlbnRlciA9ICggY2VudGVyICE9
PSB1bmRlZmluZWQgKSA/IGNlbnRlciA6IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgIHRoaXMucmFk
aXVzID0gKCByYWRpdXMgIT09IHVuZGVmaW5lZCApID8gcmFkaXVzIDogMDsKKyAgICAgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgewogCi0gICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll96OwogCi0gICAgT2JqZWN0LmFzc2lnbiggU3BoZXJlLnByb3RvdHlwZSwgeworICAgICAgICAg
ICAgfSwKIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggY2VudGVyLCByYWRpdXMgKSB7CisgICAg
ICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuY2Vu
dGVyLmNvcHkoIGNlbnRlciApOwotICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7Cisg
ICAgICAgICAgICAgICAgdGhpcy5feiA9IHZhbHVlOworICAgICAgICAgICAgICAgIHRoaXMub25D
aGFuZ2VDYWxsYmFjaygpOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
IH0KIAogICAgICAgICB9LAogCi0gICAgICAgIHNldEZyb21Qb2ludHM6IGZ1bmN0aW9uICgpIHsK
LQotICAgICAgICAgICAgdmFyIGJveCA9IG5ldyBCb3gzKCk7CisgICAgICAgIG9yZGVyOiB7CiAK
LSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRGcm9tUG9pbnRzKCBwb2ludHMsIG9wdGlv
bmFsQ2VudGVyICkgeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgICAgICB2YXIgY2VudGVyID0gdGhpcy5jZW50ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX29yZGVyOwogCi0gICAgICAgICAgICAgICAgaWYgKCBvcHRpb25hbENlbnRlciAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICBjZW50
ZXIuY29weSggb3B0aW9uYWxDZW50ZXIgKTsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCB2
YWx1ZSApIHsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fb3JkZXIgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2so
KTsKIAotICAgICAgICAgICAgICAgICAgICBib3guc2V0RnJvbVBvaW50cyggcG9pbnRzICkuZ2V0
Q2VudGVyKCBjZW50ZXIgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIG1heFJhZGl1c1NxID0gMDsKKyAgICB9ICk7
CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsg
aSA8IGlsOyBpICsrICkgeworICAgIE9iamVjdC5hc3NpZ24oIEV1bGVyLnByb3RvdHlwZSwgewog
Ci0gICAgICAgICAgICAgICAgICAgIG1heFJhZGl1c1NxID0gTWF0aC5tYXgoIG1heFJhZGl1c1Nx
LCBjZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQoIHBvaW50c1sgaSBdICkgKTsKKyAgICAgICAgaXNF
dWxlcjogdHJ1ZSwKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgc2V0OiBmdW5jdGlvbiAo
IHgsIHksIHosIG9yZGVyICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSBNYXRo
LnNxcnQoIG1heFJhZGl1c1NxICk7CisgICAgICAgICAgICB0aGlzLl94ID0geDsKKyAgICAgICAg
ICAgIHRoaXMuX3kgPSB5OworICAgICAgICAgICAgdGhpcy5feiA9IHo7CisgICAgICAgICAgICB0
aGlzLl9vcmRlciA9IG9yZGVyIHx8IHRoaXMuX29yZGVyOwogCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKIAotICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIH0oKSwKKyAgICAg
ICAgfSwKIAogICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3osIHRoaXMu
X29yZGVyICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNwaGVy
ZSApIHsKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBldWxlciApIHsKIAotICAgICAgICAgICAg
dGhpcy5jZW50ZXIuY29weSggc3BoZXJlLmNlbnRlciApOwotICAgICAgICAgICAgdGhpcy5yYWRp
dXMgPSBzcGhlcmUucmFkaXVzOworICAgICAgICAgICAgdGhpcy5feCA9IGV1bGVyLl94OworICAg
ICAgICAgICAgdGhpcy5feSA9IGV1bGVyLl95OworICAgICAgICAgICAgdGhpcy5feiA9IGV1bGVy
Ll96OworICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBldWxlci5fb3JkZXI7CisKKyAgICAgICAg
ICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsK
IAogICAgICAgICB9LAogCi0gICAgICAgIGVtcHR5OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNl
dEZyb21Sb3RhdGlvbk1hdHJpeDogZnVuY3Rpb24gKCBtLCBvcmRlciwgdXBkYXRlICkgewogCi0g
ICAgICAgICAgICByZXR1cm4gKCB0aGlzLnJhZGl1cyA8PSAwICk7CisgICAgICAgICAgICB2YXIg
Y2xhbXAgPSBfTWF0aC5jbGFtcDsKIAotICAgICAgICB9LAorICAgICAgICAgICAgLy8gYXNzdW1l
cyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNj
YWxlZCkKIAotICAgICAgICBjb250YWluc1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkgeworICAg
ICAgICAgICAgdmFyIHRlID0gbS5lbGVtZW50czsKKyAgICAgICAgICAgIHZhciBtMTEgPSB0ZVsg
MCBdLCBtMTIgPSB0ZVsgNCBdLCBtMTMgPSB0ZVsgOCBdOworICAgICAgICAgICAgdmFyIG0yMSA9
IHRlWyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF07CisgICAgICAgICAgICB2YXIg
bTMxID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEwIF07CiAKLSAgICAgICAg
ICAgIHJldHVybiAoIHBvaW50LmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlzLmNlbnRlciApIDw9ICgg
dGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyApICk7CisgICAgICAgICAgICBvcmRlciA9IG9yZGVy
IHx8IHRoaXMuX29yZGVyOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIG9yZGVyID09
PSAnWFlaJyApIHsKIAotICAgICAgICBkaXN0YW5jZVRvUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQg
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGguYXNpbiggY2xhbXAoIG0xMywgLSAx
LCAxICkgKTsKIAotICAgICAgICAgICAgcmV0dXJuICggcG9pbnQuZGlzdGFuY2VUbyggdGhpcy5j
ZW50ZXIgKSAtIHRoaXMucmFkaXVzICk7CisgICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicygg
bTEzICkgPCAwLjk5OTk5ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3ggPSBNYXRoLmF0YW4yKCAtIG0yMywgbTMzICk7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTExICk7CiAKLSAgICAgICAgaW50ZXJzZWN0c1Nw
aGVyZTogZnVuY3Rpb24gKCBzcGhlcmUgKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAot
ICAgICAgICAgICAgdmFyIHJhZGl1c1N1bSA9IHRoaXMucmFkaXVzICsgc3BoZXJlLnJhZGl1czsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIoIG0zMiwgbTIyICk7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3ogPSAwOwogCi0gICAgICAgICAgICByZXR1cm4gc3Bo
ZXJlLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggdGhpcy5jZW50ZXIgKSA8PSAoIHJhZGl1c1N1
bSAqIHJhZGl1c1N1bSApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAg
ICAgICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICdZWFonICkgewogCi0gICAgICAgIGludGVyc2Vj
dHNCb3g6IGZ1bmN0aW9uICggYm94ICkgeworICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBNYXRo
LmFzaW4oIC0gY2xhbXAoIG0yMywgLSAxLCAxICkgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGJv
eC5pbnRlcnNlY3RzU3BoZXJlKCB0aGlzICk7CisgICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFi
cyggbTIzICkgPCAwLjk5OTk5ICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3kgPSBNYXRoLmF0YW4yKCBtMTMsIG0zMyApOworICAgICAgICAgICAgICAgICAgICB0
aGlzLl96ID0gTWF0aC5hdGFuMiggbTIxLCBtMjIgKTsKIAotICAgICAgICBpbnRlcnNlY3RzUGxh
bmU6IGZ1bmN0aW9uICggcGxhbmUgKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICAgICAgLy8gV2UgdXNlIHRoZSBmb2xsb3dpbmcgZXF1YXRpb24gdG8gY29tcHV0ZSB0aGUg
c2lnbmVkIGRpc3RhbmNlIGZyb20KLSAgICAgICAgICAgIC8vIHRoZSBjZW50ZXIgb2YgdGhlIHNw
aGVyZSB0byB0aGUgcGxhbmUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gZGlzdGFu
Y2UgPSBxICogbiAtIGQKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJZiB0aGlzIGRp
c3RhbmNlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmFkaXVzIG9mIHRoZSBzcGhlcmUsCi0gICAgICAg
ICAgICAvLyB0aGVuIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5feSA9IE1hdGguYXRhbjIoIC0gbTMxLCBtMTEgKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5feiA9IDA7CiAKLSAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyggdGhpcy5jZW50
ZXIuZG90KCBwbGFuZS5ub3JtYWwgKSAtIHBsYW5lLmNvbnN0YW50ICkgPD0gdGhpcy5yYWRpdXM7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICB9IGVsc2UgaWYg
KCBvcmRlciA9PT0gJ1pYWScgKSB7CiAKLSAgICAgICAgY2xhbXBQb2ludDogZnVuY3Rpb24gKCBw
b2ludCwgb3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGgu
YXNpbiggY2xhbXAoIG0zMiwgLSAxLCAxICkgKTsKIAotICAgICAgICAgICAgdmFyIGRlbHRhTGVu
Z3RoU3EgPSB0aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggcG9pbnQgKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIE1hdGguYWJzKCBtMzIgKSA8IDAuOTk5OTkgKSB7CiAKLSAgICAgICAgICAg
IHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl95ID0gTWF0aC5hdGFuMiggLSBtMzEsIG0zMyApOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl96ID0gTWF0aC5hdGFuMiggLSBtMTIsIG0yMiApOwogCi0gICAgICAg
ICAgICByZXN1bHQuY29weSggcG9pbnQgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICBpZiAoIGRlbHRhTGVuZ3RoU3EgPiAoIHRoaXMucmFkaXVzICogdGhpcy5yYWRp
dXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBtMjEsIG0xMSApOwogCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnN1YiggdGhpcy5jZW50ZXIgKS5ub3JtYWxpemUoKTsKLSAgICAgICAgICAgICAg
ICByZXN1bHQubXVsdGlwbHlTY2FsYXIoIHRoaXMucmFkaXVzICkuYWRkKCB0aGlzLmNlbnRlciAp
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmICggb3JkZXIgPT09ICdaWVgnICkgewogCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmFzaW4oIC0gY2xhbXAoIG0zMSwgLSAxLCAx
ICkgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGlmICggTWF0aC5hYnMoIG0zMSAp
IDwgMC45OTk5OSApIHsKIAotICAgICAgICBnZXRCb3VuZGluZ0JveDogZnVuY3Rpb24gKCBvcHRp
b25hbFRhcmdldCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IE1hdGguYXRhbjIo
IG0zMiwgbTMzICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBt
MjEsIG0xMSApOwogCi0gICAgICAgICAgICB2YXIgYm94ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3
IEJveDMoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBib3guc2V0
KCB0aGlzLmNlbnRlciwgdGhpcy5jZW50ZXIgKTsKLSAgICAgICAgICAgIGJveC5leHBhbmRCeVNj
YWxhciggdGhpcy5yYWRpdXMgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTIyICk7CiAK
LSAgICAgICAgICAgIHJldHVybiBib3g7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0s
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9PT0gJ1laWCcgKSB7CiAKLSAgICAgICAg
YXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoIG1hdHJpeCApIHsKKyAgICAgICAgICAgICAgICB0aGlz
Ll96ID0gTWF0aC5hc2luKCBjbGFtcCggbTIxLCAtIDEsIDEgKSApOwogCi0gICAgICAgICAgICB0
aGlzLmNlbnRlci5hcHBseU1hdHJpeDQoIG1hdHJpeCApOwotICAgICAgICAgICAgdGhpcy5yYWRp
dXMgPSB0aGlzLnJhZGl1cyAqIG1hdHJpeC5nZXRNYXhTY2FsZU9uQXhpcygpOworICAgICAgICAg
ICAgICAgIGlmICggTWF0aC5hYnMoIG0yMSApIDwgMC45OTk5OSApIHsKIAotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBNYXRoLmF0YW4yKCAt
IG0yMywgbTIyICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAt
IG0zMSwgbTExICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKCBvZmZzZXQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3ggPSAwOworICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gTWF0aC5hdGFu
MiggbTEzLCBtMzMgKTsKIAotICAgICAgICAgICAgdGhpcy5jZW50ZXIuYWRkKCBvZmZzZXQgKTsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICdYWlknICkgewogCi0gICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgdGhpcy5feiA9IE1hdGguYXNpbiggLSBjbGFtcCggbTEyLCAtIDEsIDEgKSApOwog
Ci0gICAgICAgIGVxdWFsczogZnVuY3Rpb24gKCBzcGhlcmUgKSB7CisgICAgICAgICAgICAgICAg
aWYgKCBNYXRoLmFicyggbTEyICkgPCAwLjk5OTk5ICkgewogCi0gICAgICAgICAgICByZXR1cm4g
c3BoZXJlLmNlbnRlci5lcXVhbHMoIHRoaXMuY2VudGVyICkgJiYgKCBzcGhlcmUucmFkaXVzID09
PSB0aGlzLnJhZGl1cyApOworICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gTWF0aC5hdGFu
MiggbTMyLCBtMjIgKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGguYXRhbjIo
IG0xMywgbTExICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAg
ICB9ICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBNYXRoLmF0YW4yKCAtIG0yMywg
bTMzICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSAwOwogCi0gICAgLyoqCi0gICAg
ICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAgKiBA
YXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKLSAgICAg
KiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICogQGF1dGhvciB0c2No
dwotICAgICAqLworICAgICAgICAgICAgICAgIH0KIAotICAgIGZ1bmN0aW9uIE1hdHJpeDMoKSB7
CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbCisgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25N
YXRyaXgoKSBnaXZlbiB1bnN1cHBvcnRlZCBvcmRlcjogJyArIG9yZGVyICk7CiAKLSAgICAgICAg
ICAgIDEsIDAsIDAsCi0gICAgICAgICAgICAwLCAxLCAwLAotICAgICAgICAgICAgMCwgMCwgMQor
ICAgICAgICAgICAgfQogCi0gICAgICAgIF07Ci0KLSAgICAgICAgaWYgKCBhcmd1bWVudHMubGVu
Z3RoID4gMCApIHsKKyAgICAgICAgICAgIHRoaXMuX29yZGVyID0gb3JkZXI7CiAKLSAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9u
Z2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLicgKTsKKyAgICAgICAgICAg
IGlmICggdXBkYXRlICE9PSBmYWxzZSApIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOwogCi0gICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgfQorICAgICAgICB9LAogCi0g
ICAgT2JqZWN0LmFzc2lnbiggTWF0cml4My5wcm90b3R5cGUsIHsKKyAgICAgICAgc2V0RnJvbVF1
YXRlcm5pb246IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBpc01hdHJpeDM6IHRydWUsCisgICAg
ICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICBzZXQ6IGZ1bmN0
aW9uICggbjExLCBuMTIsIG4xMywgbjIxLCBuMjIsIG4yMywgbjMxLCBuMzIsIG4zMyApIHsKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRGcm9tUXVhdGVybmlvbiggcSwgb3JkZXIsIHVw
ZGF0ZSApIHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAg
ICAgICAgICBtYXRyaXgubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHEgKTsKIAotICAgICAg
ICAgICAgdGVbIDAgXSA9IG4xMTsgdGVbIDEgXSA9IG4yMTsgdGVbIDIgXSA9IG4zMTsKLSAgICAg
ICAgICAgIHRlWyAzIF0gPSBuMTI7IHRlWyA0IF0gPSBuMjI7IHRlWyA1IF0gPSBuMzI7Ci0gICAg
ICAgICAgICB0ZVsgNiBdID0gbjEzOyB0ZVsgNyBdID0gbjIzOyB0ZVsgOCBdID0gbjMzOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbWF0cml4LCBv
cmRlciwgdXBkYXRlICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
fTsKIAotICAgICAgICB9LAorICAgICAgICB9KCksCiAKLSAgICAgICAgaWRlbnRpdHk6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgc2V0RnJvbVZlY3RvcjM6IGZ1bmN0aW9uICggdiwgb3JkZXIgKSB7
CiAKLSAgICAgICAgICAgIHRoaXMuc2V0KAorICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KCB2
LngsIHYueSwgdi56LCBvcmRlciB8fCB0aGlzLl9vcmRlciApOwogCi0gICAgICAgICAgICAgICAg
MSwgMCwgMCwKLSAgICAgICAgICAgICAgICAwLCAxLCAwLAotICAgICAgICAgICAgICAgIDAsIDAs
IDEKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgKTsKKyAgICAgICAgcmVvcmRlcjogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIC8vIFdBUk5J
Tkc6IHRoaXMgZGlzY2FyZHMgcmV2b2x1dGlvbiBpbmZvcm1hdGlvbiAtYmhvdXN0b24KIAotICAg
ICAgICB9LAorICAgICAgICAgICAgdmFyIHEgPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAgICAg
IGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVvcmRl
ciggbmV3T3JkZXIgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rv
cigpLmZyb21BcnJheSggdGhpcy5lbGVtZW50cyApOworICAgICAgICAgICAgICAgIHEuc2V0RnJv
bUV1bGVyKCB0aGlzICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5zZXRGcm9tUXVhdGVybmlvbiggcSwgbmV3T3JkZXIgKTsKIAotICAgICAgICBjb3B5OiBmdW5j
dGlvbiAoIG0gKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlz
LmVsZW1lbnRzOwotICAgICAgICAgICAgdmFyIG1lID0gbS5lbGVtZW50czsKKyAgICAgICAgfSgp
LAogCi0gICAgICAgICAgICB0ZVsgMCBdID0gbWVbIDAgXTsgdGVbIDEgXSA9IG1lWyAxIF07IHRl
WyAyIF0gPSBtZVsgMiBdOwotICAgICAgICAgICAgdGVbIDMgXSA9IG1lWyAzIF07IHRlWyA0IF0g
PSBtZVsgNCBdOyB0ZVsgNSBdID0gbWVbIDUgXTsKLSAgICAgICAgICAgIHRlWyA2IF0gPSBtZVsg
NiBdOyB0ZVsgNyBdID0gbWVbIDcgXTsgdGVbIDggXSA9IG1lWyA4IF07CisgICAgICAgIGVxdWFs
czogZnVuY3Rpb24gKCBldWxlciApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICByZXR1cm4gKCBldWxlci5feCA9PT0gdGhpcy5feCApICYmICggZXVsZXIuX3kgPT09
IHRoaXMuX3kgKSAmJiAoIGV1bGVyLl96ID09PSB0aGlzLl96ICkgJiYgKCBldWxlci5fb3JkZXIg
PT09IHRoaXMuX29yZGVyICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBzZXRGcm9tTWF0cml4
NDogZnVuY3Rpb24gKCBtICkgewotCi0gICAgICAgICAgICB2YXIgbWUgPSBtLmVsZW1lbnRzOwot
Ci0gICAgICAgICAgICB0aGlzLnNldCgKKyAgICAgICAgZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFy
cmF5ICkgewogCi0gICAgICAgICAgICAgICAgbWVbIDAgXSwgbWVbIDQgXSwgbWVbICA4IF0sCi0g
ICAgICAgICAgICAgICAgbWVbIDEgXSwgbWVbIDUgXSwgbWVbICA5IF0sCi0gICAgICAgICAgICAg
ICAgbWVbIDIgXSwgbWVbIDYgXSwgbWVbIDEwIF0KKyAgICAgICAgICAgIHRoaXMuX3ggPSBhcnJh
eVsgMCBdOworICAgICAgICAgICAgdGhpcy5feSA9IGFycmF5WyAxIF07CisgICAgICAgICAgICB0
aGlzLl96ID0gYXJyYXlbIDIgXTsKKyAgICAgICAgICAgIGlmICggYXJyYXlbIDMgXSAhPT0gdW5k
ZWZpbmVkICkgdGhpcy5fb3JkZXIgPSBhcnJheVsgMyBdOwogCi0gICAgICAgICAgICApOworICAg
ICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CiAKICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTogZnVu
Y3Rpb24gKCkgewotCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwotCi0gICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRl
ICkgeworICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBhdHRyaWJ1dGUuY291bnQ7IGkgPCBs
OyBpICsrICkgeworICAgICAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkg
PSBbXTsKKyAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAw
OwogCi0gICAgICAgICAgICAgICAgICAgIHYxLnggPSBhdHRyaWJ1dGUuZ2V0WCggaSApOwotICAg
ICAgICAgICAgICAgICAgICB2MS55ID0gYXR0cmlidXRlLmdldFkoIGkgKTsKLSAgICAgICAgICAg
ICAgICAgICAgdjEueiA9IGF0dHJpYnV0ZS5nZXRaKCBpICk7CisgICAgICAgICAgICBhcnJheVsg
b2Zmc2V0IF0gPSB0aGlzLl94OworICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDEgXSA9IHRo
aXMuX3k7CisgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy5fejsKKyAgICAg
ICAgICAgIGFycmF5WyBvZmZzZXQgKyAzIF0gPSB0aGlzLl9vcmRlcjsKIAotICAgICAgICAgICAg
ICAgICAgICB2MS5hcHBseU1hdHJpeDMoIHRoaXMgKTsKKyAgICAgICAgICAgIHJldHVybiBhcnJh
eTsKIAotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuc2V0WFlaKCBpLCB2MS54LCB2MS55
LCB2MS56ICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHRvVmVj
dG9yMzogZnVuY3Rpb24gKCBvcHRpb25hbFJlc3VsdCApIHsKIAotICAgICAgICAgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGU7CisgICAgICAgICAgICBpZiAoIG9wdGlvbmFsUmVzdWx0ICkgewogCi0g
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25hbFJlc3VsdC5zZXQo
IHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3ogKTsKIAotICAgICAgICB9KCksCisgICAgICAgICAg
ICB9IGVsc2UgewogCi0gICAgICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoIG0gKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96ICk7
CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoIHRoaXMsIG0gKTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICB9LAogCi0gICAgICAgIHByZW11bHRpcGx5OiBmdW5j
dGlvbiAoIG0gKSB7CisgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgewog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCBtLCB0aGlzICk7Cisg
ICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBjYWxsYmFjazsKKworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBtdWx0aXBseU1hdHJpY2Vz
OiBmdW5jdGlvbiAoIGEsIGIgKSB7CisgICAgICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IGZ1bmN0aW9u
ICgpIHt9CiAKLSAgICAgICAgICAgIHZhciBhZSA9IGEuZWxlbWVudHM7Ci0gICAgICAgICAgICB2
YXIgYmUgPSBiLmVsZW1lbnRzOwotICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50czsK
KyAgICB9ICk7CiAKLSAgICAgICAgICAgIHZhciBhMTEgPSBhZVsgMCBdLCBhMTIgPSBhZVsgMyBd
LCBhMTMgPSBhZVsgNiBdOwotICAgICAgICAgICAgdmFyIGEyMSA9IGFlWyAxIF0sIGEyMiA9IGFl
WyA0IF0sIGEyMyA9IGFlWyA3IF07Ci0gICAgICAgICAgICB2YXIgYTMxID0gYWVbIDIgXSwgYTMy
ID0gYWVbIDUgXSwgYTMzID0gYWVbIDggXTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9v
YiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICB2YXIgYjExID0g
YmVbIDAgXSwgYjEyID0gYmVbIDMgXSwgYjEzID0gYmVbIDYgXTsKLSAgICAgICAgICAgIHZhciBi
MjEgPSBiZVsgMSBdLCBiMjIgPSBiZVsgNCBdLCBiMjMgPSBiZVsgNyBdOwotICAgICAgICAgICAg
dmFyIGIzMSA9IGJlWyAyIF0sIGIzMiA9IGJlWyA1IF0sIGIzMyA9IGJlWyA4IF07CisgICAgZnVu
Y3Rpb24gTGF5ZXJzKCkgewogCi0gICAgICAgICAgICB0ZVsgMCBdID0gYTExICogYjExICsgYTEy
ICogYjIxICsgYTEzICogYjMxOwotICAgICAgICAgICAgdGVbIDMgXSA9IGExMSAqIGIxMiArIGEx
MiAqIGIyMiArIGExMyAqIGIzMjsKLSAgICAgICAgICAgIHRlWyA2IF0gPSBhMTEgKiBiMTMgKyBh
MTIgKiBiMjMgKyBhMTMgKiBiMzM7CisgICAgICAgIHRoaXMubWFzayA9IDEgfCAwOwogCi0gICAg
ICAgICAgICB0ZVsgMSBdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxOwotICAg
ICAgICAgICAgdGVbIDQgXSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMjsKLSAg
ICAgICAgICAgIHRlWyA3IF0gPSBhMjEgKiBiMTMgKyBhMjIgKiBiMjMgKyBhMjMgKiBiMzM7Cisg
ICAgfQogCi0gICAgICAgICAgICB0ZVsgMiBdID0gYTMxICogYjExICsgYTMyICogYjIxICsgYTMz
ICogYjMxOwotICAgICAgICAgICAgdGVbIDUgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEz
MyAqIGIzMjsKLSAgICAgICAgICAgIHRlWyA4IF0gPSBhMzEgKiBiMTMgKyBhMzIgKiBiMjMgKyBh
MzMgKiBiMzM7CisgICAgT2JqZWN0LmFzc2lnbiggTGF5ZXJzLnByb3RvdHlwZSwgewogCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoIGNoYW5uZWwgKSB7
CisKKyAgICAgICAgICAgIHRoaXMubWFzayA9IDEgPDwgY2hhbm5lbCB8IDA7CiAKICAgICAgICAg
fSwKIAotICAgICAgICBtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzICkgeworICAgICAgICBl
bmFibGU6IGZ1bmN0aW9uICggY2hhbm5lbCApIHsKIAotICAgICAgICAgICAgdmFyIHRlID0gdGhp
cy5lbGVtZW50czsKKyAgICAgICAgICAgIHRoaXMubWFzayB8PSAxIDw8IGNoYW5uZWwgfCAwOwog
Ci0gICAgICAgICAgICB0ZVsgMCBdICo9IHM7IHRlWyAzIF0gKj0gczsgdGVbIDYgXSAqPSBzOwot
ICAgICAgICAgICAgdGVbIDEgXSAqPSBzOyB0ZVsgNCBdICo9IHM7IHRlWyA3IF0gKj0gczsKLSAg
ICAgICAgICAgIHRlWyAyIF0gKj0gczsgdGVbIDUgXSAqPSBzOyB0ZVsgOCBdICo9IHM7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0b2dnbGU6IGZ1bmN0
aW9uICggY2hhbm5lbCApIHsKKworICAgICAgICAgICAgdGhpcy5tYXNrIF49IDEgPDwgY2hhbm5l
bCB8IDA7CiAKICAgICAgICAgfSwKIAotICAgICAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkg
eworICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbiAoIGNoYW5uZWwgKSB7CiAKLSAgICAgICAgICAg
IHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7CisgICAgICAgICAgICB0aGlzLm1hc2sgJj0gfiAoIDEg
PDwgY2hhbm5lbCB8IDAgKTsKIAotICAgICAgICAgICAgdmFyIGEgPSB0ZVsgMCBdLCBiID0gdGVb
IDEgXSwgYyA9IHRlWyAyIF0sCi0gICAgICAgICAgICAgICAgZCA9IHRlWyAzIF0sIGUgPSB0ZVsg
NCBdLCBmID0gdGVbIDUgXSwKLSAgICAgICAgICAgICAgICBnID0gdGVbIDYgXSwgaCA9IHRlWyA3
IF0sIGkgPSB0ZVsgOCBdOworICAgICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4gYSAqIGUg
KiBpIC0gYSAqIGYgKiBoIC0gYiAqIGQgKiBpICsgYiAqIGYgKiBnICsgYyAqIGQgKiBoIC0gYyAq
IGUgKiBnOworICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoIGxheWVycyApIHsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgcmV0dXJuICggdGhpcy5tYXNrICYgbGF5ZXJzLm1hc2sgKSAhPT0gMDsK
IAotICAgICAgICBnZXRJbnZlcnNlOiBmdW5jdGlvbiAoIG1hdHJpeCwgdGhyb3dPbkRlZ2VuZXJh
dGUgKSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBtYXRyaXggJiYgbWF0cml4Lmlz
TWF0cml4NCApIHsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAi
VEhSRUUuTWF0cml4My5nZXRJbnZlcnNlIG5vIGxvbmdlciB0YWtlcyBhIE1hdHJpeDQgYXJndW1l
bnQuIiApOworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5j
b20vCisgICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KKyAg
ICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAq
IEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleQorICAg
ICAqIEBhdXRob3IgZWxlcGhhbnRhdHdvcmsgLyB3d3cuZWxlcGhhbnRhdHdvcmsuY2gKKyAgICAg
Ki8KIAotICAgICAgICAgICAgfQorICAgIHZhciBvYmplY3QzRElkID0gMDsKIAotICAgICAgICAg
ICAgdmFyIG1lID0gbWF0cml4LmVsZW1lbnRzLAotICAgICAgICAgICAgICAgIHRlID0gdGhpcy5l
bGVtZW50cywKKyAgICBmdW5jdGlvbiBPYmplY3QzRCgpIHsKIAotICAgICAgICAgICAgICAgIG4x
MSA9IG1lWyAwIF0sIG4yMSA9IG1lWyAxIF0sIG4zMSA9IG1lWyAyIF0sCi0gICAgICAgICAgICAg
ICAgbjEyID0gbWVbIDMgXSwgbjIyID0gbWVbIDQgXSwgbjMyID0gbWVbIDUgXSwKLSAgICAgICAg
ICAgICAgICBuMTMgPSBtZVsgNiBdLCBuMjMgPSBtZVsgNyBdLCBuMzMgPSBtZVsgOCBdLAorICAg
ICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IG9iamVjdDNE
SWQgKysgfSApOwogCi0gICAgICAgICAgICAgICAgdDExID0gbjMzICogbjIyIC0gbjMyICogbjIz
LAotICAgICAgICAgICAgICAgIHQxMiA9IG4zMiAqIG4xMyAtIG4zMyAqIG4xMiwKLSAgICAgICAg
ICAgICAgICB0MTMgPSBuMjMgKiBuMTIgLSBuMjIgKiBuMTMsCisgICAgICAgIHRoaXMudXVpZCA9
IF9NYXRoLmdlbmVyYXRlVVVJRCgpOwogCi0gICAgICAgICAgICAgICAgZGV0ID0gbjExICogdDEx
ICsgbjIxICogdDEyICsgbjMxICogdDEzOworICAgICAgICB0aGlzLm5hbWUgPSAnJzsKKyAgICAg
ICAgdGhpcy50eXBlID0gJ09iamVjdDNEJzsKIAotICAgICAgICAgICAgaWYgKCBkZXQgPT09IDAg
KSB7CisgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5jaGlsZHJlbiA9
IFtdOwogCi0gICAgICAgICAgICAgICAgdmFyIG1zZyA9ICJUSFJFRS5NYXRyaXgzLmdldEludmVy
c2UoKTogY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCI7CisgICAgICAgIHRo
aXMudXAgPSBPYmplY3QzRC5EZWZhdWx0VXAuY2xvbmUoKTsKIAotICAgICAgICAgICAgICAgIGlm
ICggdGhyb3dPbkRlZ2VuZXJhdGUgPT09IHRydWUgKSB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9
IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHZhciByb3RhdGlvbiA9IG5ldyBFdWxlcigpOworICAg
ICAgICB2YXIgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7CisgICAgICAgIHZhciBzY2Fs
ZSA9IG5ldyBWZWN0b3IzKCAxLCAxLCAxICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCBtc2cgKTsKKyAgICAgICAgZnVuY3Rpb24gb25Sb3RhdGlvbkNoYW5nZSgpIHsK
IAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBxdWF0ZXJuaW9uLnNldEZy
b21FdWxlciggcm90YXRpb24sIGZhbHNlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCBtc2cgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBm
dW5jdGlvbiBvblF1YXRlcm5pb25DaGFuZ2UoKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5pZGVudGl0eSgpOworICAgICAgICAgICAgcm90YXRpb24uc2V0RnJvbVF1YXRlcm5pb24o
IHF1YXRlcm5pb24sIHVuZGVmaW5lZCwgZmFsc2UgKTsKKworICAgICAgICB9CisKKyAgICAgICAg
cm90YXRpb24ub25DaGFuZ2UoIG9uUm90YXRpb25DaGFuZ2UgKTsKKyAgICAgICAgcXVhdGVybmlv
bi5vbkNoYW5nZSggb25RdWF0ZXJuaW9uQ2hhbmdlICk7CiAKKyAgICAgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnRpZXMoIHRoaXMsIHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiB7CisgICAgICAgICAg
ICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogcG9zaXRpb24K
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICByb3RhdGlvbjogeworICAgICAgICAgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgdmFsdWU6IHJvdGF0aW9uCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgcXVhdGVybmlvbjogeworICAgICAgICAgICAgICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgdmFsdWU6IHF1YXRlcm5pb24KKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBzY2FsZTogeworICAgICAgICAgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgICAgICAgICAgdmFsdWU6IHNjYWxlCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgbW9kZWxWaWV3TWF0cml4OiB7CisgICAgICAgICAgICAgICAgdmFsdWU6IG5l
dyBNYXRyaXg0KCkKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBub3JtYWxNYXRyaXg6IHsK
KyAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IE1hdHJpeDMoKQogICAgICAgICAgICAgfQorICAg
ICAgICB9ICk7CiAKLSAgICAgICAgICAgIHZhciBkZXRJbnYgPSAxIC8gZGV0OworICAgICAgICB0
aGlzLm1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIHRoaXMubWF0cml4V29ybGQgPSBu
ZXcgTWF0cml4NCgpOwogCi0gICAgICAgICAgICB0ZVsgMCBdID0gdDExICogZGV0SW52OwotICAg
ICAgICAgICAgdGVbIDEgXSA9ICggbjMxICogbjIzIC0gbjMzICogbjIxICkgKiBkZXRJbnY7Ci0g
ICAgICAgICAgICB0ZVsgMiBdID0gKCBuMzIgKiBuMjEgLSBuMzEgKiBuMjIgKSAqIGRldEludjsK
KyAgICAgICAgdGhpcy5tYXRyaXhBdXRvVXBkYXRlID0gT2JqZWN0M0QuRGVmYXVsdE1hdHJpeEF1
dG9VcGRhdGU7CisgICAgICAgIHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IGZhbHNlOwog
Ci0gICAgICAgICAgICB0ZVsgMyBdID0gdDEyICogZGV0SW52OwotICAgICAgICAgICAgdGVbIDQg
XSA9ICggbjMzICogbjExIC0gbjMxICogbjEzICkgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsg
NSBdID0gKCBuMzEgKiBuMTIgLSBuMzIgKiBuMTEgKSAqIGRldEludjsKKyAgICAgICAgdGhpcy5s
YXllcnMgPSBuZXcgTGF5ZXJzKCk7CisgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAKLSAg
ICAgICAgICAgIHRlWyA2IF0gPSB0MTMgKiBkZXRJbnY7Ci0gICAgICAgICAgICB0ZVsgNyBdID0g
KCBuMjEgKiBuMTMgLSBuMjMgKiBuMTEgKSAqIGRldEludjsKLSAgICAgICAgICAgIHRlWyA4IF0g
PSAoIG4yMiAqIG4xMSAtIG4yMSAqIG4xMiApICogZGV0SW52OworICAgICAgICB0aGlzLmNhc3RT
aGFkb3cgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gZmFsc2U7CiAKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0aGlzLmZydXN0dW1DdWxsZWQgPSB0cnVl
OworICAgICAgICB0aGlzLnJlbmRlck9yZGVyID0gMDsKIAotICAgICAgICB9LAorICAgICAgICB0
aGlzLnVzZXJEYXRhID0ge307CiAKLSAgICAgICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7Cisg
ICAgfQogCi0gICAgICAgICAgICB2YXIgdG1wLCBtID0gdGhpcy5lbGVtZW50czsKKyAgICBPYmpl
Y3QzRC5EZWZhdWx0VXAgPSBuZXcgVmVjdG9yMyggMCwgMSwgMCApOworICAgIE9iamVjdDNELkRl
ZmF1bHRNYXRyaXhBdXRvVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICAgICAgdG1wID0gbVsgMSBd
OyBtWyAxIF0gPSBtWyAzIF07IG1bIDMgXSA9IHRtcDsKLSAgICAgICAgICAgIHRtcCA9IG1bIDIg
XTsgbVsgMiBdID0gbVsgNiBdOyBtWyA2IF0gPSB0bXA7Ci0gICAgICAgICAgICB0bXAgPSBtWyA1
IF07IG1bIDUgXSA9IG1bIDcgXTsgbVsgNyBdID0gdG1wOworICAgIE9iamVjdDNELnByb3RvdHlw
ZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5
cGUgKSwgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgY29uc3RydWN0b3I6
IE9iamVjdDNELAogCi0gICAgICAgIH0sCisgICAgICAgIGlzT2JqZWN0M0Q6IHRydWUsCiAKLSAg
ICAgICAgZ2V0Tm9ybWFsTWF0cml4OiBmdW5jdGlvbiAoIG1hdHJpeDQgKSB7CisgICAgICAgIG9u
QmVmb3JlUmVuZGVyOiBmdW5jdGlvbiAoKSB7fSwKKyAgICAgICAgb25BZnRlclJlbmRlcjogZnVu
Y3Rpb24gKCkge30sCiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KCBt
YXRyaXg0ICkuZ2V0SW52ZXJzZSggdGhpcyApLnRyYW5zcG9zZSgpOworICAgICAgICBhcHBseU1h
dHJpeDogZnVuY3Rpb24gKCBtYXRyaXggKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHRo
aXMubWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIG1hdHJpeCwgdGhpcy5tYXRyaXggKTsKIAotICAg
ICAgICB0cmFuc3Bvc2VJbnRvQXJyYXk6IGZ1bmN0aW9uICggciApIHsKKyAgICAgICAgICAgIHRo
aXMubWF0cml4LmRlY29tcG9zZSggdGhpcy5wb3NpdGlvbiwgdGhpcy5xdWF0ZXJuaW9uLCB0aGlz
LnNjYWxlICk7CiAKLSAgICAgICAgICAgIHZhciBtID0gdGhpcy5lbGVtZW50czsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgclsgMCBdID0gbVsgMCBdOwotICAgICAgICAgICAgclsgMSBdID0g
bVsgMyBdOwotICAgICAgICAgICAgclsgMiBdID0gbVsgNiBdOwotICAgICAgICAgICAgclsgMyBd
ID0gbVsgMSBdOwotICAgICAgICAgICAgclsgNCBdID0gbVsgNCBdOwotICAgICAgICAgICAgclsg
NSBdID0gbVsgNyBdOwotICAgICAgICAgICAgclsgNiBdID0gbVsgMiBdOwotICAgICAgICAgICAg
clsgNyBdID0gbVsgNSBdOwotICAgICAgICAgICAgclsgOCBdID0gbVsgOCBdOworICAgICAgICBh
cHBseVF1YXRlcm5pb246IGZ1bmN0aW9uICggcSApIHsKKworICAgICAgICAgICAgdGhpcy5xdWF0
ZXJuaW9uLnByZW11bHRpcGx5KCBxICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIG1hdHJpeCApIHsKKyAgICAg
ICAgc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOiBmdW5jdGlvbiAoIGF4aXMsIGFuZ2xlICkgewog
Ci0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOwotICAgICAgICAgICAgdmFyIG1l
ID0gbWF0cml4LmVsZW1lbnRzOworICAgICAgICAgICAgLy8gYXNzdW1lcyBheGlzIGlzIG5vcm1h
bGl6ZWQKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgOTsgaSArKyApIHsKKyAg
ICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSAp
OwogCi0gICAgICAgICAgICAgICAgaWYgKCB0ZVsgaSBdICE9PSBtZVsgaSBdICkgcmV0dXJuIGZh
bHNlOworICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgIHNldFJvdGF0aW9uRnJv
bUV1bGVyOiBmdW5jdGlvbiAoIGV1bGVyICkgewogCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoIGV1bGVyLCB0cnVlICk7
CiAKICAgICAgICAgfSwKIAotICAgICAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9m
ZnNldCApIHsKKyAgICAgICAgc2V0Um90YXRpb25Gcm9tTWF0cml4OiBmdW5jdGlvbiAoIG0gKSB7
CiAKLSAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwOwor
ICAgICAgICAgICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0
aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZCkKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgOTsgaSArKyApIHsKKyAgICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90
YXRpb25NYXRyaXgoIG0gKTsKIAotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbIGkgXSA9
IGFycmF5WyBpICsgb2Zmc2V0IF07CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjogZnVuY3Rpb24gKCBxICkgewogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIC8vIGFzc3VtZXMgcSBpcyBub3JtYWxpemVk
CisKKyAgICAgICAgICAgIHRoaXMucXVhdGVybmlvbi5jb3B5KCBxICk7CiAKICAgICAgICAgfSwK
IAotICAgICAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7CisgICAgICAg
IHJvdGF0ZU9uQXhpczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBpZiAoIGFycmF5ID09
PSB1bmRlZmluZWQgKSBhcnJheSA9IFtdOwotICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVu
ZGVmaW5lZCApIG9mZnNldCA9IDA7CisgICAgICAgICAgICAvLyByb3RhdGUgb2JqZWN0IG9uIGF4
aXMgaW4gb2JqZWN0IHNwYWNlCisgICAgICAgICAgICAvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUg
bm9ybWFsaXplZAogCi0gICAgICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzOworICAgICAg
ICAgICAgdmFyIHExID0gbmV3IFF1YXRlcm5pb24oKTsKIAotICAgICAgICAgICAgYXJyYXlbIG9m
ZnNldCBdID0gdGVbIDAgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAxIF0gPSB0ZVsg
MSBdOwotICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDIgXSA9IHRlWyAyIF07CisgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlT25BeGlzKCBheGlzLCBhbmdsZSApIHsKIAotICAg
ICAgICAgICAgYXJyYXlbIG9mZnNldCArIDMgXSA9IHRlWyAzIF07Ci0gICAgICAgICAgICBhcnJh
eVsgb2Zmc2V0ICsgNCBdID0gdGVbIDQgXTsKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA1
IF0gPSB0ZVsgNSBdOworICAgICAgICAgICAgICAgIHExLnNldEZyb21BeGlzQW5nbGUoIGF4aXMs
IGFuZ2xlICk7CiAKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyA2IF0gPSB0ZVsgNiBdOwot
ICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArIDcgXSA9IHRlWyA3IF07Ci0gICAgICAgICAgICBh
cnJheVsgb2Zmc2V0ICsgOCBdID0gdGVbIDggXTsKKyAgICAgICAgICAgICAgICB0aGlzLnF1YXRl
cm5pb24ubXVsdGlwbHkoIHExICk7CiAKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICB9CisgICAgICAgICAgICB9OwogCi0g
ICAgfSApOworICAgICAgICB9KCksCiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGJob3VzdG9u
IC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICovCisgICAgICAgIHJvdGF0ZU9uV29ybGRBeGlzOiBm
dW5jdGlvbiAoKSB7CiAKLSAgICBmdW5jdGlvbiBQbGFuZSggbm9ybWFsLCBjb25zdGFudCApIHsK
KyAgICAgICAgICAgIC8vIHJvdGF0ZSBvYmplY3Qgb24gYXhpcyBpbiB3b3JsZCBzcGFjZQorICAg
ICAgICAgICAgLy8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQKKyAgICAgICAgICAg
IC8vIG1ldGhvZCBhc3N1bWVzIG5vIHJvdGF0ZWQgcGFyZW50CiAKLSAgICAgICAgdGhpcy5ub3Jt
YWwgPSAoIG5vcm1hbCAhPT0gdW5kZWZpbmVkICkgPyBub3JtYWwgOiBuZXcgVmVjdG9yMyggMSwg
MCwgMCApOwotICAgICAgICB0aGlzLmNvbnN0YW50ID0gKCBjb25zdGFudCAhPT0gdW5kZWZpbmVk
ICkgPyBjb25zdGFudCA6IDA7CisgICAgICAgICAgICB2YXIgcTEgPSBuZXcgUXVhdGVybmlvbigp
OwogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJvdGF0ZU9uV29ybGRBeGlz
KCBheGlzLCBhbmdsZSApIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIFBsYW5lLnByb3RvdHlwZSwg
eworICAgICAgICAgICAgICAgIHExLnNldEZyb21BeGlzQW5nbGUoIGF4aXMsIGFuZ2xlICk7CiAK
LSAgICAgICAgc2V0OiBmdW5jdGlvbiAoIG5vcm1hbCwgY29uc3RhbnQgKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KCBxMSApOwogCi0gICAgICAgICAgICB0
aGlzLm5vcm1hbC5jb3B5KCBub3JtYWwgKTsKLSAgICAgICAgICAgIHRoaXMuY29uc3RhbnQgPSBj
b25zdGFudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICB9OwogCi0gICAgICAgIH0sCisgICAgICAgIH0oKSwKIAot
ICAgICAgICBzZXRDb21wb25lbnRzOiBmdW5jdGlvbiAoIHgsIHksIHosIHcgKSB7CisgICAgICAg
IHJvdGF0ZVg6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgdGhpcy5ub3JtYWwuc2V0KCB4
LCB5LCB6ICk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0gdzsKKyAgICAgICAgICAgIHZh
ciB2MSA9IG5ldyBWZWN0b3IzKCAxLCAwLCAwICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJvdGF0ZVgoIGFuZ2xlICkgewogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm90YXRlT25BeGlzKCB2MSwgYW5n
bGUgKTsKIAotICAgICAgICBzZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludDogZnVuY3Rpb24g
KCBub3JtYWwsIHBvaW50ICkgeworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5u
b3JtYWwuY29weSggbm9ybWFsICk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0gLSBwb2lu
dC5kb3QoIHRoaXMubm9ybWFsICk7IC8vIG11c3QgYmUgdGhpcy5ub3JtYWwsIG5vdCBub3JtYWws
IGFzIHRoaXMubm9ybWFsIGlzIG5vcm1hbGl6ZWQKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgcm90YXRlWTogZnVuY3Rpb24gKCkgewogCi0gICAgICAg
IH0sCisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMyggMCwgMSwgMCApOwogCi0gICAg
ICAgIHNldEZyb21Db3BsYW5hclBvaW50czogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIHJvdGF0ZVkoIGFuZ2xlICkgewogCi0gICAgICAgICAgICB2YXIgdjEgPSBu
ZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoIHYxLCBhbmdsZSApOwogCi0gICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0RnJvbUNvcGxhbmFyUG9pbnRzKCBhLCBiLCBjICkg
eworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIHZhciBub3JtYWwgPSB2MS5zdWJW
ZWN0b3JzKCBjLCBiICkuY3Jvc3MoIHYyLnN1YlZlY3RvcnMoIGEsIGIgKSApLm5vcm1hbGl6ZSgp
OworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICAvLyBROiBzaG91bGQgYW4gZXJyb3Ig
YmUgdGhyb3duIGlmIG5vcm1hbCBpcyB6ZXJvIChlLmcuIGRlZ2VuZXJhdGUgcGxhbmUpPworICAg
ICAgICByb3RhdGVaOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnNldEZy
b21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KCBub3JtYWwsIGEgKTsKKyAgICAgICAgICAgIHZhciB2
MSA9IG5ldyBWZWN0b3IzKCAwLCAwLCAxICk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVaKCBhbmdsZSApIHsKKworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyggdjEsIGFuZ2xlICk7CiAKICAg
ICAgICAgICAgIH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHRyYW5zbGF0ZU9uQXhpczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAg
ICAvLyB0cmFuc2xhdGUgb2JqZWN0IGJ5IGRpc3RhbmNlIGFsb25nIGF4aXMgaW4gb2JqZWN0IHNw
YWNlCisgICAgICAgICAgICAvLyBheGlzIGlzIGFzc3VtZWQgdG8gYmUgbm9ybWFsaXplZAogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAg
IGNvcHk6IGZ1bmN0aW9uICggcGxhbmUgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
dHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIHsKIAotICAgICAgICAgICAgdGhpcy5u
b3JtYWwuY29weSggcGxhbmUubm9ybWFsICk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN0YW50ID0g
cGxhbmUuY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgdjEuY29weSggYXhpcyApLmFwcGx5UXVh
dGVybmlvbiggdGhpcy5xdWF0ZXJuaW9uICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uYWRkKCB2MS5tdWx0aXBseVNjYWxhciggZGlz
dGFuY2UgKSApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9OwogCi0gICAg
ICAgICAgICAvLyBOb3RlOiB3aWxsIGxlYWQgdG8gYSBkaXZpZGUgYnkgemVybyBpZiB0aGUgcGxh
bmUgaXMgaW52YWxpZC4KKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICB2YXIgaW52ZXJzZU5v
cm1hbExlbmd0aCA9IDEuMCAvIHRoaXMubm9ybWFsLmxlbmd0aCgpOwotICAgICAgICAgICAgdGhp
cy5ub3JtYWwubXVsdGlwbHlTY2FsYXIoIGludmVyc2VOb3JtYWxMZW5ndGggKTsKLSAgICAgICAg
ICAgIHRoaXMuY29uc3RhbnQgKj0gaW52ZXJzZU5vcm1hbExlbmd0aDsKKyAgICAgICAgdHJhbnNs
YXRlWDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCAxLCAwLCAwICk7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiB0cmFuc2xhdGVYKCBkaXN0YW5jZSApIHsKIAotICAgICAg
ICBuZWdhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFu
c2xhdGVPbkF4aXMoIHYxLCBkaXN0YW5jZSApOwogCi0gICAgICAgICAgICB0aGlzLmNvbnN0YW50
ICo9IC0gMTsKLSAgICAgICAgICAgIHRoaXMubm9ybWFsLm5lZ2F0ZSgpOworICAgICAgICAgICAg
fTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0oKSwKIAotICAgICAgICB9
LAorICAgICAgICB0cmFuc2xhdGVZOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgZGlzdGFuY2VU
b1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkgeworICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZl
Y3RvcjMoIDAsIDEsIDAgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsLmRvdCgg
cG9pbnQgKSArIHRoaXMuY29uc3RhbnQ7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdHJh
bnNsYXRlWSggZGlzdGFuY2UgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIHYxLCBkaXN0YW5jZSApOwogCi0gICAgICAgIGRpc3Rh
bmNlVG9TcGhlcmU6IGZ1bmN0aW9uICggc3BoZXJlICkgeworICAgICAgICAgICAgfTsKIAotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KCBzcGhlcmUuY2VudGVyICkgLSBz
cGhlcmUucmFkaXVzOworICAgICAgICB9KCksCiAKLSAgICAgICAgfSwKKyAgICAgICAgdHJhbnNs
YXRlWjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIHByb2plY3RQb2ludDogZnVuY3Rpb24gKCBw
b2ludCwgb3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9y
MyggMCwgMCwgMSApOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5vcnRob1BvaW50KCBwb2lu
dCwgb3B0aW9uYWxUYXJnZXQgKS5zdWIoIHBvaW50ICkubmVnYXRlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gdHJhbnNsYXRlWiggZGlzdGFuY2UgKSB7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIHYxLCBkaXN0YW5jZSAp
OworCisgICAgICAgICAgICB9OwogCi0gICAgICAgIG9ydGhvUG9pbnQ6IGZ1bmN0aW9uICggcG9p
bnQsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIHZhciBw
ZXJwZW5kaWN1bGFyTWFnbml0dWRlID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoIHBvaW50ICk7Cisg
ICAgICAgIGxvY2FsVG9Xb3JsZDogZnVuY3Rpb24gKCB2ZWN0b3IgKSB7CiAKLSAgICAgICAgICAg
IHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5jb3B5KCB0aGlzLm5vcm1hbCApLm11bHRpcGx5U2NhbGFyKCBwZXJw
ZW5kaWN1bGFyTWFnbml0dWRlICk7CisgICAgICAgICAgICByZXR1cm4gdmVjdG9yLmFwcGx5TWF0
cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgaW50ZXJz
ZWN0TGluZTogZnVuY3Rpb24gKCkgeworICAgICAgICB3b3JsZFRvTG9jYWw6IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZh
ciBtMSA9IG5ldyBNYXRyaXg0KCk7CisKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB3b3Js
ZFRvTG9jYWwoIHZlY3RvciApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVy
c2VjdExpbmUoIGxpbmUsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHJldHVy
biB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtMS5nZXRJbnZlcnNlKCB0aGlzLm1hdHJpeFdvcmxkICkg
KTsKIAotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rp
b24gPSBsaW5lLmRlbHRhKCB2MSApOworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICB2
YXIgZGVub21pbmF0b3IgPSB0aGlzLm5vcm1hbC5kb3QoIGRpcmVjdGlvbiApOworICAgICAgICBs
b29rQXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIGlmICggZGVub21pbmF0b3Ig
PT09IDAgKSB7CisgICAgICAgICAgICAvLyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IG9i
amVjdHMgd2l0aCByb3RhdGVkIGFuZC9vciB0cmFuc2xhdGVkIHBhcmVudChzKQogCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGxpbmUgaXMgY29wbGFuYXIsIHJldHVybiBvcmlnaW4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5zdGFydCApID09PSAw
ICkgeworICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgICAgIHZh
ciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0LmNvcHkoIGxpbmUuc3RhcnQgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBsb29rQXQoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICggeC5pc1ZlY3RvcjMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gVW5z
dXJlIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgbWV0aG9kIHRvIGhhbmRsZSB0aGlzIGNhc2UuCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAg
IHZlY3Rvci5jb3B5KCB4ICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAg
ICAgICAgICAgICAgIHZlY3Rvci5zZXQoIHgsIHksIHogKTsKIAogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHZhciB0ID0gLSAoIGxpbmUuc3RhcnQuZG90KCB0aGlzLm5vcm1h
bCApICsgdGhpcy5jb25zdGFudCApIC8gZGVub21pbmF0b3I7CisgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLmlzQ2FtZXJhICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCB0IDwgMCB8fCB0ID4g
MSApIHsKKyAgICAgICAgICAgICAgICAgICAgbTEubG9va0F0KCB0aGlzLnBvc2l0aW9uLCB2ZWN0
b3IsIHRoaXMudXAgKTsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgbTEubG9va0F0
KCB2ZWN0b3IsIHRoaXMucG9zaXRpb24sIHRoaXMudXAgKTsKIAogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuY29weSggZGlyZWN0aW9uICkubXVsdGlw
bHlTY2FsYXIoIHQgKS5hZGQoIGxpbmUuc3RhcnQgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnF1
YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBtMSApOwogCiAgICAgICAgICAgICB9Owog
CiAgICAgICAgIH0oKSwKIAotICAgICAgICBpbnRlcnNlY3RzTGluZTogZnVuY3Rpb24gKCBsaW5l
ICkgeworICAgICAgICBhZGQ6IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCi0gICAgICAgICAgICAv
LyBOb3RlOiB0aGlzIHRlc3RzIGlmIGEgbGluZSBpbnRlcnNlY3RzIHRoZSBwbGFuZSwgbm90IHdo
ZXRoZXIgaXQgKG9yIGl0cyBlbmQtcG9pbnRzKSBhcmUgY29wbGFuYXIgd2l0aCBpdC4KKyAgICAg
ICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDEgKSB7CiAKLSAgICAgICAgICAgIHZhciBz
dGFydFNpZ24gPSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5zdGFydCApOwotICAgICAgICAg
ICAgdmFyIGVuZFNpZ24gPSB0aGlzLmRpc3RhbmNlVG9Qb2ludCggbGluZS5lbmQgKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICsrICkg
ewogCi0gICAgICAgICAgICByZXR1cm4gKCBzdGFydFNpZ24gPCAwICYmIGVuZFNpZ24gPiAwICkg
fHwgKCBlbmRTaWduIDwgMCAmJiBzdGFydFNpZ24gPiAwICk7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuYWRkKCBhcmd1bWVudHNbIGkgXSApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIGludGVyc2VjdHNCb3g6IGZ1bmN0aW9uICggYm94ICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICByZXR1cm4gYm94LmludGVyc2Vj
dHNQbGFuZSggdGhpcyApOworICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICBpZiAoIG9iamVjdCA9PT0gdGhpcyApIHsKIAotICAgICAgICBpbnRlcnNlY3RzU3BoZXJlOiBm
dW5jdGlvbiAoIHNwaGVyZSApIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAiVEhS
RUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNl
bGYuIiwgb2JqZWN0ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgIHJldHVybiBzcGhlcmUuaW50ZXJzZWN0c1BsYW5lKCB0aGlzICk7Ci0KLSAgICAgICAgfSwK
LQotICAgICAgICBjb3BsYW5hclBvaW50OiBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkgewot
Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMo
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuY29weSggdGhpcy5ub3JtYWwgKS5tdWx0aXBs
eVNjYWxhciggLSB0aGlzLmNvbnN0YW50ICk7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBhcHBs
eU1hdHJpeDQ6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3Rv
cjMoKTsKLSAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXgzKCk7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBhcHBseU1hdHJpeDQoIG1hdHJpeCwgb3B0
aW9uYWxOb3JtYWxNYXRyaXggKSB7CisgICAgICAgICAgICBpZiAoICggb2JqZWN0ICYmIG9iamVj
dC5pc09iamVjdDNEICkgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNlUG9pbnQg
PSB0aGlzLmNvcGxhbmFyUG9pbnQoIHYxICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIG9iamVjdC5wYXJlbnQgIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAg
ICAgICAvLyB0cmFuc2Zvcm0gbm9ybWFsIGJhc2VkIG9uIHRoZW9yeSBoZXJlOgotICAgICAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cuc29uZ2hvLmNhL29wZW5nbC9nbF9ub3JtYWx0cmFuc2Zvcm0u
aHRtbAotICAgICAgICAgICAgICAgIHZhciBub3JtYWxNYXRyaXggPSBvcHRpb25hbE5vcm1hbE1h
dHJpeCB8fCBtMS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApOwotICAgICAgICAgICAgICAgIHZh
ciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoIG5vcm1hbE1hdHJpeCApLm5vcm1h
bGl6ZSgpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50LnJlbW92ZSggb2JqZWN0
ICk7CiAKLSAgICAgICAgICAgICAgICAvLyByZWNhbGN1bGF0ZSBjb25zdGFudCAobGlrZSBpbiBz
ZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCkKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnN0
YW50ID0gLSByZWZlcmVuY2VQb2ludC5kb3QoIG5vcm1hbCApOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIG9iamVjdC5w
YXJlbnQgPSB0aGlzOworICAgICAgICAgICAgICAgIG9iamVjdC5kaXNwYXRjaEV2ZW50KCB7IHR5
cGU6ICdhZGRlZCcgfSApOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHRoaXMu
Y2hpbGRyZW4ucHVzaCggb2JqZWN0ICk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgfSBl
bHNlIHsKIAotICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uICggb2Zmc2V0ICkgeworICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3Qg
YW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIiwgb2JqZWN0ICk7CiAKLSAgICAgICAgICAg
IHRoaXMuY29uc3RhbnQgPSB0aGlzLmNvbnN0YW50IC0gb2Zmc2V0LmRvdCggdGhpcy5ub3JtYWwg
KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAg
fSwKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggcGxhbmUgKSB7Ci0KLSAgICAgICAgICAg
IHJldHVybiBwbGFuZS5ub3JtYWwuZXF1YWxzKCB0aGlzLm5vcm1hbCApICYmICggcGxhbmUuY29u
c3RhbnQgPT09IHRoaXMuY29uc3RhbnQgKTsKKyAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiAoIG9i
amVjdCApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGgg
PiAxICkgewogCi0gICAgfSApOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRw
Oi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9j
bGFyYS5pbwotICAgICAqLworICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSggYXJndW1l
bnRzWyBpIF0gKTsKIAotICAgIGZ1bmN0aW9uIEZydXN0dW0oIHAwLCBwMSwgcDIsIHAzLCBwNCwg
cDUgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucGxhbmVzID0gWworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAoIHAwICE9PSB1bmRlZmlu
ZWQgKSA/IHAwIDogbmV3IFBsYW5lKCksCi0gICAgICAgICAgICAoIHAxICE9PSB1bmRlZmluZWQg
KSA/IHAxIDogbmV3IFBsYW5lKCksCi0gICAgICAgICAgICAoIHAyICE9PSB1bmRlZmluZWQgKSA/
IHAyIDogbmV3IFBsYW5lKCksCi0gICAgICAgICAgICAoIHAzICE9PSB1bmRlZmluZWQgKSA/IHAz
IDogbmV3IFBsYW5lKCksCi0gICAgICAgICAgICAoIHA0ICE9PSB1bmRlZmluZWQgKSA/IHA0IDog
bmV3IFBsYW5lKCksCi0gICAgICAgICAgICAoIHA1ICE9PSB1bmRlZmluZWQgKSA/IHA1IDogbmV3
IFBsYW5lKCkKKyAgICAgICAgICAgIH0KIAotICAgICAgICBdOworICAgICAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKCBvYmplY3QgKTsKIAotICAgIH0KKyAgICAgICAg
ICAgIGlmICggaW5kZXggIT09IC0gMSApIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIEZydXN0dW0u
cHJvdG90eXBlLCB7CisgICAgICAgICAgICAgICAgb2JqZWN0LnBhcmVudCA9IG51bGw7CiAKLSAg
ICAgICAgc2V0OiBmdW5jdGlvbiAoIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUgKSB7CisgICAgICAg
ICAgICAgICAgb2JqZWN0LmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ3JlbW92ZWQnIH0gKTsKIAot
ICAgICAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzOworICAgICAgICAgICAgICAgIHRo
aXMuY2hpbGRyZW4uc3BsaWNlKCBpbmRleCwgMSApOwogCi0gICAgICAgICAgICBwbGFuZXNbIDAg
XS5jb3B5KCBwMCApOwotICAgICAgICAgICAgcGxhbmVzWyAxIF0uY29weSggcDEgKTsKLSAgICAg
ICAgICAgIHBsYW5lc1sgMiBdLmNvcHkoIHAyICk7Ci0gICAgICAgICAgICBwbGFuZXNbIDMgXS5j
b3B5KCBwMyApOwotICAgICAgICAgICAgcGxhbmVzWyA0IF0uY29weSggcDQgKTsKLSAgICAgICAg
ICAgIHBsYW5lc1sgNSBdLmNvcHkoIHA1ICk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgZ2V0T2JqZWN0QnlJZDogZnVuY3Rpb24gKCBpZCApIHsKIAotICAgICAgICAg
ICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSggJ2lkJywgaWQgKTsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggZnJ1c3R1bSApIHsKKyAgICAgICAgZ2V0
T2JqZWN0QnlOYW1lOiBmdW5jdGlvbiAoIG5hbWUgKSB7CiAKLSAgICAgICAgICAgIHZhciBwbGFu
ZXMgPSB0aGlzLnBsYW5lczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdEJ5UHJv
cGVydHkoICduYW1lJywgbmFtZSApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkg
PCA2OyBpICsrICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgcGxhbmVzWyBpIF0u
Y29weSggZnJ1c3R1bS5wbGFuZXNbIGkgXSApOworICAgICAgICBnZXRPYmplY3RCeVByb3BlcnR5
OiBmdW5jdGlvbiAoIG5hbWUsIHZhbHVlICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIHRoaXNbIG5hbWUgXSA9PT0gdmFsdWUgKSByZXR1cm4gdGhpczsKIAotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmNo
aWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuWyBpIF07CisgICAgICAgICAgICAgICAgdmFy
IG9iamVjdCA9IGNoaWxkLmdldE9iamVjdEJ5UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7CiAKLSAg
ICAgICAgc2V0RnJvbU1hdHJpeDogZnVuY3Rpb24gKCBtICkgeworICAgICAgICAgICAgICAgIGlm
ICggb2JqZWN0ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHZhciBwbGFuZXMgPSB0
aGlzLnBsYW5lczsKLSAgICAgICAgICAgIHZhciBtZSA9IG0uZWxlbWVudHM7Ci0gICAgICAgICAg
ICB2YXIgbWUwID0gbWVbIDAgXSwgbWUxID0gbWVbIDEgXSwgbWUyID0gbWVbIDIgXSwgbWUzID0g
bWVbIDMgXTsKLSAgICAgICAgICAgIHZhciBtZTQgPSBtZVsgNCBdLCBtZTUgPSBtZVsgNSBdLCBt
ZTYgPSBtZVsgNiBdLCBtZTcgPSBtZVsgNyBdOwotICAgICAgICAgICAgdmFyIG1lOCA9IG1lWyA4
IF0sIG1lOSA9IG1lWyA5IF0sIG1lMTAgPSBtZVsgMTAgXSwgbWUxMSA9IG1lWyAxMSBdOwotICAg
ICAgICAgICAgdmFyIG1lMTIgPSBtZVsgMTIgXSwgbWUxMyA9IG1lWyAxMyBdLCBtZTE0ID0gbWVb
IDE0IF0sIG1lMTUgPSBtZVsgMTUgXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKIAotICAgICAgICAgICAgcGxhbmVzWyAwIF0uc2V0Q29tcG9uZW50cyggbWUzIC0gbWUwLCBt
ZTcgLSBtZTQsIG1lMTEgLSBtZTgsIG1lMTUgLSBtZTEyICkubm9ybWFsaXplKCk7Ci0gICAgICAg
ICAgICBwbGFuZXNbIDEgXS5zZXRDb21wb25lbnRzKCBtZTMgKyBtZTAsIG1lNyArIG1lNCwgbWUx
MSArIG1lOCwgbWUxNSArIG1lMTIgKS5ub3JtYWxpemUoKTsKLSAgICAgICAgICAgIHBsYW5lc1sg
MiBdLnNldENvbXBvbmVudHMoIG1lMyArIG1lMSwgbWU3ICsgbWU1LCBtZTExICsgbWU5LCBtZTE1
ICsgbWUxMyApLm5vcm1hbGl6ZSgpOwotICAgICAgICAgICAgcGxhbmVzWyAzIF0uc2V0Q29tcG9u
ZW50cyggbWUzIC0gbWUxLCBtZTcgLSBtZTUsIG1lMTEgLSBtZTksIG1lMTUgLSBtZTEzICkubm9y
bWFsaXplKCk7Ci0gICAgICAgICAgICBwbGFuZXNbIDQgXS5zZXRDb21wb25lbnRzKCBtZTMgLSBt
ZTIsIG1lNyAtIG1lNiwgbWUxMSAtIG1lMTAsIG1lMTUgLSBtZTE0ICkubm9ybWFsaXplKCk7Ci0g
ICAgICAgICAgICBwbGFuZXNbIDUgXS5zZXRDb21wb25lbnRzKCBtZTMgKyBtZTIsIG1lNyArIG1l
NiwgbWUxMSArIG1lMTAsIG1lMTUgKyBtZTE0ICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKIAogICAgICAgICB9LAogCi0gICAgICAgIGludGVyc2Vj
dHNPYmplY3Q6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rp
b24gKCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7
CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0c09iamVjdCggb2JqZWN0ICkgeworICAgICAgICAg
ICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRQb3NpdGlvbigp
IHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3
IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9t
ZXRyeTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91
bmRpbmdTcGhlcmUgPT09IG51bGwgKQotICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb21w
dXRlQm91bmRpbmdTcGhlcmUoKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4V29ybGQo
IHRydWUgKTsKIAotICAgICAgICAgICAgICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGlu
Z1NwaGVyZSApCi0gICAgICAgICAgICAgICAgICAgIC5hcHBseU1hdHJpeDQoIG9iamVjdC5tYXRy
aXhXb3JsZCApOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5zZXRGcm9tTWF0cml4UG9zaXRp
b24oIHRoaXMubWF0cml4V29ybGQgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlu
dGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICB9Owor
ICAgICAgICBnZXRXb3JsZFF1YXRlcm5pb246IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB9KCks
CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAg
dmFyIHNjYWxlID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICBpbnRlcnNlY3RzU3ByaXRlOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0V29ybGRRdWF0ZXJu
aW9uKCB0YXJnZXQgKSB7CiAKLSAgICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7
CisgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVyc2VjdHNTcHJpdGUoIHNwcml0ZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFF1
YXRlcm5pb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAgICAgICAgICAgICAgc3BoZXJlLmNl
bnRlci5zZXQoIDAsIDAsIDAgKTsKLSAgICAgICAgICAgICAgICBzcGhlcmUucmFkaXVzID0gMC43
MDcxMDY3ODExODY1NDc2OwotICAgICAgICAgICAgICAgIHNwaGVyZS5hcHBseU1hdHJpeDQoIHNw
cml0ZS5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApOworICAgICAgICAgICAgICAg
IHRoaXMudXBkYXRlTWF0cml4V29ybGQoIHRydWUgKTsKKworICAgICAgICAgICAgICAgIHRoaXMu
bWF0cml4V29ybGQuZGVjb21wb3NlKCBwb3NpdGlvbiwgdGFyZ2V0LCBzY2FsZSApOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKIAogICAgICAgICAgICAgfTsKIAogICAgICAgICB9
KCksCiAKLSAgICAgICAgaW50ZXJzZWN0c1NwaGVyZTogZnVuY3Rpb24gKCBzcGhlcmUgKSB7Ci0K
LSAgICAgICAgICAgIHZhciBwbGFuZXMgPSB0aGlzLnBsYW5lczsKLSAgICAgICAgICAgIHZhciBj
ZW50ZXIgPSBzcGhlcmUuY2VudGVyOwotICAgICAgICAgICAgdmFyIG5lZ1JhZGl1cyA9IC0gc3Bo
ZXJlLnJhZGl1czsKKyAgICAgICAgZ2V0V29ybGRTY2FsZTogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgeworICAgICAgICAgICAgdmFy
IHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBxdWF0ZXJuaW9uID0g
bmV3IFF1YXRlcm5pb24oKTsKIAotICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IHBsYW5l
c1sgaSBdLmRpc3RhbmNlVG9Qb2ludCggY2VudGVyICk7CisgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gZ2V0V29ybGRTY2FsZSggdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBk
aXN0YW5jZSA8IG5lZ1JhZGl1cyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0g
dW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFNj
YWxlKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gbmV3IFZlY3RvcjMoKTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB9LAotCi0gICAgICAgIGlu
dGVyc2VjdHNCb3g6IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIHAxID0gbmV3IFZl
Y3RvcjMoKSwKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBWZWN0b3IzKCk7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcnNlY3RzQm94KCBib3ggKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApOwogCi0gICAgICAgICAgICAgICAgdmFy
IHBsYW5lcyA9IHRoaXMucGxhbmVzOworICAgICAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGQu
ZGVjb21wb3NlKCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgdGFyZ2V0ICk7CiAKLSAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXQ7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBsYW5lID0gcGxhbmVzWyBp
IF07CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIHAxLnggPSBwbGFuZS5u
b3JtYWwueCA+IDAgPyBib3gubWluLnggOiBib3gubWF4Lng7Ci0gICAgICAgICAgICAgICAgICAg
IHAyLnggPSBwbGFuZS5ub3JtYWwueCA+IDAgPyBib3gubWF4LnggOiBib3gubWluLng7Ci0gICAg
ICAgICAgICAgICAgICAgIHAxLnkgPSBwbGFuZS5ub3JtYWwueSA+IDAgPyBib3gubWluLnkgOiBi
b3gubWF4Lnk7Ci0gICAgICAgICAgICAgICAgICAgIHAyLnkgPSBwbGFuZS5ub3JtYWwueSA+IDAg
PyBib3gubWF4LnkgOiBib3gubWluLnk7Ci0gICAgICAgICAgICAgICAgICAgIHAxLnogPSBwbGFu
ZS5ub3JtYWwueiA+IDAgPyBib3gubWluLnogOiBib3gubWF4Lno7Ci0gICAgICAgICAgICAgICAg
ICAgIHAyLnogPSBwbGFuZS5ub3JtYWwueiA+IDAgPyBib3gubWF4LnogOiBib3gubWluLno7Cisg
ICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZDEgPSBwbGFuZS5kaXN0YW5j
ZVRvUG9pbnQoIHAxICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkMiA9IHBsYW5lLmRpc3Rh
bmNlVG9Qb2ludCggcDIgKTsKKyAgICAgICAgZ2V0V29ybGREaXJlY3Rpb246IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgICAgICAgICAvLyBpZiBib3RoIG91dHNpZGUgcGxhbmUsIG5vIGlu
dGVyc2VjdGlvbgorICAgICAgICAgICAgdmFyIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigp
OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggZDEgPCAwICYmIGQyIDwgMCApIHsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRXb3JsZERpcmVjdGlvbiggdGFyZ2V0ICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYg
KCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRE
aXJlY3Rpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAgICAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5nZXRXb3JsZFF1YXRl
cm5pb24oIHF1YXRlcm5pb24gKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2V0
KCAwLCAwLCAxICkuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICk7CiAKICAgICAgICAgICAg
IH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICgg
cG9pbnQgKSB7CisgICAgICAgIHJheWNhc3Q6IGZ1bmN0aW9uICgpIHt9LAogCi0gICAgICAgICAg
ICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7CisgICAgICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAo
IGNhbGxiYWNrICkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsr
ICkgeworICAgICAgICAgICAgY2FsbGJhY2soIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIGlm
ICggcGxhbmVzWyBpIF0uZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIDwgMCApIHsKKyAgICAgICAg
ICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47CiAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4u
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBjaGlsZHJlblsgaSBdLnRyYXZlcnNlKCBjYWxsYmFjayApOwogCiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAot
ICAgIH0gKTsKKyAgICAgICAgdHJhdmVyc2VWaXNpYmxlOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkg
ewogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVh
bGlhLmNvbS8KLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAg
ICAqLworICAgICAgICAgICAgaWYgKCB0aGlzLnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuOwog
Ci0gICAgZnVuY3Rpb24gV2ViR0xTaGFkb3dNYXAoIF9yZW5kZXJlciwgX2xpZ2h0cywgX29iamVj
dHMsIGNhcGFiaWxpdGllcyApIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKCB0aGlzICk7CiAKLSAg
ICAgICAgdmFyIF9nbCA9IF9yZW5kZXJlci5jb250ZXh0LAotICAgICAgICAgICAgX3N0YXRlID0g
X3JlbmRlcmVyLnN0YXRlLAotICAgICAgICAgICAgX2ZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpLAot
ICAgICAgICAgICAgX3Byb2pTY3JlZW5NYXRyaXggPSBuZXcgTWF0cml4NCgpLAorICAgICAgICAg
ICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjsKIAotICAgICAgICAgICAgX2xpZ2h0U2hh
ZG93cyA9IF9saWdodHMuc2hhZG93cywKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9
IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIF9zaGFkb3dN
YXBTaXplID0gbmV3IFZlY3RvcjIoKSwKLSAgICAgICAgICAgIF9tYXhTaGFkb3dNYXBTaXplID0g
bmV3IFZlY3RvcjIoIGNhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSwgY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplICksCisgICAgICAgICAgICAgICAgY2hpbGRyZW5bIGkgXS50cmF2ZXJzZVZp
c2libGUoIGNhbGxiYWNrICk7CiAKLSAgICAgICAgICAgIF9sb29rVGFyZ2V0ID0gbmV3IFZlY3Rv
cjMoKSwKLSAgICAgICAgICAgIF9saWdodFBvc2l0aW9uV29ybGQgPSBuZXcgVmVjdG9yMygpLAor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBfTW9ycGhpbmdGbGFnID0gMSwKLSAgICAgICAg
ICAgIF9Ta2lubmluZ0ZsYWcgPSAyLAorICAgICAgICB9LAogCi0gICAgICAgICAgICBfTnVtYmVy
T2ZNYXRlcmlhbFZhcmlhbnRzID0gKCBfTW9ycGhpbmdGbGFnIHwgX1NraW5uaW5nRmxhZyApICsg
MSwKKyAgICAgICAgdHJhdmVyc2VBbmNlc3RvcnM6IGZ1bmN0aW9uICggY2FsbGJhY2sgKSB7CiAK
LSAgICAgICAgICAgIF9kZXB0aE1hdGVyaWFscyA9IG5ldyBBcnJheSggX051bWJlck9mTWF0ZXJp
YWxWYXJpYW50cyApLAotICAgICAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzID0gbmV3IEFycmF5
KCBfTnVtYmVyT2ZNYXRlcmlhbFZhcmlhbnRzICksCisgICAgICAgICAgICB2YXIgcGFyZW50ID0g
dGhpcy5wYXJlbnQ7CiAKLSAgICAgICAgICAgIF9tYXRlcmlhbENhY2hlID0ge307CisgICAgICAg
ICAgICBpZiAoIHBhcmVudCAhPT0gbnVsbCApIHsKIAotICAgICAgICB2YXIgY3ViZURpcmVjdGlv
bnMgPSBbCi0gICAgICAgICAgICBuZXcgVmVjdG9yMyggMSwgMCwgMCApLCBuZXcgVmVjdG9yMygg
LSAxLCAwLCAwICksIG5ldyBWZWN0b3IzKCAwLCAwLCAxICksCi0gICAgICAgICAgICBuZXcgVmVj
dG9yMyggMCwgMCwgLSAxICksIG5ldyBWZWN0b3IzKCAwLCAxLCAwICksIG5ldyBWZWN0b3IzKCAw
LCAtIDEsIDAgKQotICAgICAgICBdOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCBwYXJlbnQg
KTsKIAotICAgICAgICB2YXIgY3ViZVVwcyA9IFsKLSAgICAgICAgICAgIG5ldyBWZWN0b3IzKCAw
LCAxLCAwICksIG5ldyBWZWN0b3IzKCAwLCAxLCAwICksIG5ldyBWZWN0b3IzKCAwLCAxLCAwICks
Ci0gICAgICAgICAgICBuZXcgVmVjdG9yMyggMCwgMSwgMCApLCBuZXcgVmVjdG9yMyggMCwgMCwg
MSApLCBuZXcgVmVjdG9yMyggMCwgMCwgLSAxICkKLSAgICAgICAgXTsKKyAgICAgICAgICAgICAg
ICBwYXJlbnQudHJhdmVyc2VBbmNlc3RvcnMoIGNhbGxiYWNrICk7CiAKLSAgICAgICAgdmFyIGN1
YmUyRFZpZXdQb3J0cyA9IFsKLSAgICAgICAgICAgIG5ldyBWZWN0b3I0KCksIG5ldyBWZWN0b3I0
KCksIG5ldyBWZWN0b3I0KCksCi0gICAgICAgICAgICBuZXcgVmVjdG9yNCgpLCBuZXcgVmVjdG9y
NCgpLCBuZXcgVmVjdG9yNCgpCi0gICAgICAgIF07CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
Ly8gaW5pdAorICAgICAgICB9LAogCi0gICAgICAgIHZhciBkZXB0aE1hdGVyaWFsVGVtcGxhdGUg
PSBuZXcgTWVzaERlcHRoTWF0ZXJpYWwoKTsKLSAgICAgICAgZGVwdGhNYXRlcmlhbFRlbXBsYXRl
LmRlcHRoUGFja2luZyA9IFJHQkFEZXB0aFBhY2tpbmc7Ci0gICAgICAgIGRlcHRoTWF0ZXJpYWxU
ZW1wbGF0ZS5jbGlwcGluZyA9IHRydWU7CisgICAgICAgIHVwZGF0ZU1hdHJpeDogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgIHZhciBkaXN0YW5jZVNoYWRlciA9IFNoYWRlckxpYlsgImRpc3RhbmNl
UkdCQSIgXTsKLSAgICAgICAgdmFyIGRpc3RhbmNlVW5pZm9ybXMgPSBVbmlmb3Jtc1V0aWxzLmNs
b25lKCBkaXN0YW5jZVNoYWRlci51bmlmb3JtcyApOworICAgICAgICAgICAgdGhpcy5tYXRyaXgu
Y29tcG9zZSggdGhpcy5wb3NpdGlvbiwgdGhpcy5xdWF0ZXJuaW9uLCB0aGlzLnNjYWxlICk7CiAK
LSAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpICE9PSBfTnVtYmVyT2ZNYXRlcmlhbFZhcmlhbnRz
OyArKyBpICkgeworICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1
ZTsKIAotICAgICAgICAgICAgdmFyIHVzZU1vcnBoaW5nID0gKCBpICYgX01vcnBoaW5nRmxhZyAp
ICE9PSAwOwotICAgICAgICAgICAgdmFyIHVzZVNraW5uaW5nID0gKCBpICYgX1NraW5uaW5nRmxh
ZyApICE9PSAwOworICAgICAgICB9LAogCi0gICAgICAgICAgICB2YXIgZGVwdGhNYXRlcmlhbCA9
IGRlcHRoTWF0ZXJpYWxUZW1wbGF0ZS5jbG9uZSgpOwotICAgICAgICAgICAgZGVwdGhNYXRlcmlh
bC5tb3JwaFRhcmdldHMgPSB1c2VNb3JwaGluZzsKLSAgICAgICAgICAgIGRlcHRoTWF0ZXJpYWwu
c2tpbm5pbmcgPSB1c2VTa2lubmluZzsKKyAgICAgICAgdXBkYXRlTWF0cml4V29ybGQ6IGZ1bmN0
aW9uICggZm9yY2UgKSB7CiAKLSAgICAgICAgICAgIF9kZXB0aE1hdGVyaWFsc1sgaSBdID0gZGVw
dGhNYXRlcmlhbDsKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXRyaXhBdXRvVXBkYXRlICkgdGhp
cy51cGRhdGVNYXRyaXgoKTsKIAotICAgICAgICAgICAgdmFyIGRpc3RhbmNlTWF0ZXJpYWwgPSBu
ZXcgU2hhZGVyTWF0ZXJpYWwoIHsKLSAgICAgICAgICAgICAgICBkZWZpbmVzOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICdVU0VfU0hBRE9XTUFQJzogJycKLSAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgIHVuaWZvcm1zOiBkaXN0YW5jZVVuaWZvcm1zLAotICAgICAgICAgICAgICAg
IHZlcnRleFNoYWRlcjogZGlzdGFuY2VTaGFkZXIudmVydGV4U2hhZGVyLAotICAgICAgICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyOiBkaXN0YW5jZVNoYWRlci5mcmFnbWVudFNoYWRlciwKLSAgICAg
ICAgICAgICAgICBtb3JwaFRhcmdldHM6IHVzZU1vcnBoaW5nLAotICAgICAgICAgICAgICAgIHNr
aW5uaW5nOiB1c2VTa2lubmluZywKLSAgICAgICAgICAgICAgICBjbGlwcGluZzogdHJ1ZQotICAg
ICAgICAgICAgfSApOworICAgICAgICAgICAgaWYgKCB0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRh
dGUgfHwgZm9yY2UgKSB7CiAKLSAgICAgICAgICAgIF9kaXN0YW5jZU1hdGVyaWFsc1sgaSBdID0g
ZGlzdGFuY2VNYXRlcmlhbDsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50ID09PSBu
dWxsICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3Js
ZC5jb3B5KCB0aGlzLm1hdHJpeCApOwogCi0gICAgICAgIC8vCisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKIAotICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICAgICAgICAgICAgICB0
aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoIHRoaXMucGFyZW50Lm1hdHJpeFdvcmxk
LCB0aGlzLm1hdHJpeCApOwogCi0gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlOwotICAgICAgICB0
aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3Js
ZE5lZWRzVXBkYXRlID0gZmFsc2U7CiAKLSAgICAgICAgdGhpcy50eXBlID0gUENGU2hhZG93TWFw
OworICAgICAgICAgICAgICAgIGZvcmNlID0gdHJ1ZTsKIAotICAgICAgICB0aGlzLnJlbmRlclJl
dmVyc2VTaWRlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMucmVuZGVyU2luZ2xlU2lkZWQgPSB0cnVl
OworICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBzY2Vu
ZSwgY2FtZXJhICkgeworICAgICAgICAgICAgLy8gdXBkYXRlIGNoaWxkcmVuCiAKLSAgICAgICAg
ICAgIGlmICggc2NvcGUuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47Ci0gICAgICAgICAgICBp
ZiAoIHNjb3BlLmF1dG9VcGRhdGUgPT09IGZhbHNlICYmIHNjb3BlLm5lZWRzVXBkYXRlID09PSBm
YWxzZSApIHJldHVybjsKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47
CiAKLSAgICAgICAgICAgIGlmICggX2xpZ2h0U2hhZG93cy5sZW5ndGggPT09IDAgKSByZXR1cm47
CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBs
OyBpICsrICkgewogCi0gICAgICAgICAgICAvLyBTZXQgR0wgc3RhdGUgZm9yIGRlcHRoIG1hcC4K
LSAgICAgICAgICAgIF9zdGF0ZS5kaXNhYmxlKCBfZ2wuQkxFTkQgKTsKLSAgICAgICAgICAgIF9z
dGF0ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKCAxLCAxLCAxLCAxICk7Ci0gICAgICAgICAgICBf
c3RhdGUuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCB0cnVlICk7Ci0gICAgICAgICAgICBfc3RhdGUu
c2V0U2Npc3NvclRlc3QoIGZhbHNlICk7CisgICAgICAgICAgICAgICAgY2hpbGRyZW5bIGkgXS51
cGRhdGVNYXRyaXhXb3JsZCggZm9yY2UgKTsKIAotICAgICAgICAgICAgLy8gcmVuZGVyIGRlcHRo
IG1hcAorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgZmFjZUNvdW50OworICAgICAg
ICB9LAogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gX2xpZ2h0U2hhZG93cy5s
ZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEg
KSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBfbGlnaHRTaGFkb3dzWyBpIF07Ci0g
ICAgICAgICAgICAgICAgdmFyIHNoYWRvdyA9IGxpZ2h0LnNoYWRvdzsKLSAgICAgICAgICAgICAg
ICB2YXIgaXNQb2ludExpZ2h0ID0gbGlnaHQgJiYgbGlnaHQuaXNQb2ludExpZ2h0OworICAgICAg
ICAgICAgLy8gbWV0YSBpcyBhIHN0cmluZyB3aGVuIGNhbGxlZCBmcm9tIEpTT04uc3RyaW5naWZ5
CisgICAgICAgICAgICB2YXIgaXNSb290T2JqZWN0ID0gKCBtZXRhID09PSB1bmRlZmluZWQgfHwg
dHlwZW9mIG1ldGEgPT09ICdzdHJpbmcnICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHNoYWRv
dyA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdmFyIG91dHB1dCA9IHt9OwogCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMU2hhZG93TWFwOicsIGxp
Z2h0LCAnaGFzIG5vIHNoYWRvdy4nICk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgLy8gbWV0YSBpcyBhIGhhc2ggdXNlZCB0byBjb2xsZWN0IGdlb21ldHJpZXMs
IG1hdGVyaWFscy4KKyAgICAgICAgICAgIC8vIG5vdCBwcm92aWRpbmcgaXQgaW1wbGllcyB0aGF0
IHRoaXMgaXMgdGhlIHJvb3Qgb2JqZWN0CisgICAgICAgICAgICAvLyBiZWluZyBzZXJpYWxpemVk
LgorICAgICAgICAgICAgaWYgKCBpc1Jvb3RPYmplY3QgKSB7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBtZXRhIG9iagorICAgICAgICAgICAgICAg
IG1ldGEgPSB7CisgICAgICAgICAgICAgICAgICAgIGdlb21ldHJpZXM6IHt9LAorICAgICAgICAg
ICAgICAgICAgICBtYXRlcmlhbHM6IHt9LAorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlczog
e30sCisgICAgICAgICAgICAgICAgICAgIGltYWdlczoge30sCisgICAgICAgICAgICAgICAgICAg
IHNoYXBlczoge30KKyAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdmFyIHNo
YWRvd0NhbWVyYSA9IHNoYWRvdy5jYW1lcmE7CisgICAgICAgICAgICAgICAgb3V0cHV0Lm1ldGFk
YXRhID0geworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiA0LjUsCisgICAgICAgICAgICAg
ICAgICAgIHR5cGU6ICdPYmplY3QnLAorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdP
YmplY3QzRC50b0pTT04nCisgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIF9z
aGFkb3dNYXBTaXplLmNvcHkoIHNoYWRvdy5tYXBTaXplICk7Ci0gICAgICAgICAgICAgICAgX3No
YWRvd01hcFNpemUubWluKCBfbWF4U2hhZG93TWFwU2l6ZSApOworICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgaWYgKCBpc1BvaW50TGlnaHQgKSB7CisgICAgICAgICAgICAvLyBzdGFu
ZGFyZCBPYmplY3QzRCBzZXJpYWxpemF0aW9uCiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZw
V2lkdGggPSBfc2hhZG93TWFwU2l6ZS54OwotICAgICAgICAgICAgICAgICAgICB2YXIgdnBIZWln
aHQgPSBfc2hhZG93TWFwU2l6ZS55OworICAgICAgICAgICAgdmFyIG9iamVjdCA9IHt9OwogCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIHZpZXdwb3J0cyBtYXAgYSBjdWJlLW1hcCBvbnRv
IGEgMkQgdGV4dHVyZSB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcg
b3JpZW50YXRpb246Ci0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAg
IC8vICB4elhaCi0gICAgICAgICAgICAgICAgICAgIC8vICAgeSBZCi0gICAgICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFggLSBQb3NpdGl2ZSB4IGRpcmVjdGlvbgot
ICAgICAgICAgICAgICAgICAgICAvLyB4IC0gTmVnYXRpdmUgeCBkaXJlY3Rpb24KLSAgICAgICAg
ICAgICAgICAgICAgLy8gWSAtIFBvc2l0aXZlIHkgZGlyZWN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHkgLSBOZWdhdGl2ZSB5IGRpcmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBa
IC0gUG9zaXRpdmUgeiBkaXJlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8geiAtIE5lZ2F0
aXZlIHogZGlyZWN0aW9uCisgICAgICAgICAgICBvYmplY3QudXVpZCA9IHRoaXMudXVpZDsKKyAg
ICAgICAgICAgIG9iamVjdC50eXBlID0gdGhpcy50eXBlOwogCi0gICAgICAgICAgICAgICAgICAg
IC8vIHBvc2l0aXZlIFgKLSAgICAgICAgICAgICAgICAgICAgY3ViZTJEVmlld1BvcnRzWyAwIF0u
c2V0KCB2cFdpZHRoICogMiwgdnBIZWlnaHQsIHZwV2lkdGgsIHZwSGVpZ2h0ICk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIFgKLSAgICAgICAgICAgICAgICAgICAgY3ViZTJEVmll
d1BvcnRzWyAxIF0uc2V0KCAwLCB2cEhlaWdodCwgdnBXaWR0aCwgdnBIZWlnaHQgKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcG9zaXRpdmUgWgotICAgICAgICAgICAgICAgICAgICBjdWJlMkRW
aWV3UG9ydHNbIDIgXS5zZXQoIHZwV2lkdGggKiAzLCB2cEhlaWdodCwgdnBXaWR0aCwgdnBIZWln
aHQgKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgWgotICAgICAgICAgICAgICAg
ICAgICBjdWJlMkRWaWV3UG9ydHNbIDMgXS5zZXQoIHZwV2lkdGgsIHZwSGVpZ2h0LCB2cFdpZHRo
LCB2cEhlaWdodCApOwotICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGl2ZSBZCi0gICAgICAg
ICAgICAgICAgICAgIGN1YmUyRFZpZXdQb3J0c1sgNCBdLnNldCggdnBXaWR0aCAqIDMsIDAsIHZw
V2lkdGgsIHZwSGVpZ2h0ICk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIFkKLSAg
ICAgICAgICAgICAgICAgICAgY3ViZTJEVmlld1BvcnRzWyA1IF0uc2V0KCB2cFdpZHRoLCAwLCB2
cFdpZHRoLCB2cEhlaWdodCApOworICAgICAgICAgICAgaWYgKCB0aGlzLm5hbWUgIT09ICcnICkg
b2JqZWN0Lm5hbWUgPSB0aGlzLm5hbWU7CisgICAgICAgICAgICBpZiAoIHRoaXMuY2FzdFNoYWRv
dyA9PT0gdHJ1ZSApIG9iamVjdC5jYXN0U2hhZG93ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICgg
dGhpcy5yZWNlaXZlU2hhZG93ID09PSB0cnVlICkgb2JqZWN0LnJlY2VpdmVTaGFkb3cgPSB0cnVl
OworICAgICAgICAgICAgaWYgKCB0aGlzLnZpc2libGUgPT09IGZhbHNlICkgb2JqZWN0LnZpc2li
bGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICggdGhpcy5mcnVzdHVtQ3VsbGVkID09PSBmYWxz
ZSApIG9iamVjdC5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIHRoaXMu
cmVuZGVyT3JkZXIgIT09IDAgKSBvYmplY3QucmVuZGVyT3JkZXIgPSB0aGlzLnJlbmRlck9yZGVy
OworICAgICAgICAgICAgaWYgKCBKU09OLnN0cmluZ2lmeSggdGhpcy51c2VyRGF0YSApICE9PSAn
e30nICkgb2JqZWN0LnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTsKIAotICAgICAgICAgICAgICAg
ICAgICBfc2hhZG93TWFwU2l6ZS54ICo9IDQuMDsKLSAgICAgICAgICAgICAgICAgICAgX3NoYWRv
d01hcFNpemUueSAqPSAyLjA7CisgICAgICAgICAgICBvYmplY3QubGF5ZXJzID0gdGhpcy5sYXll
cnMubWFzazsKKyAgICAgICAgICAgIG9iamVjdC5tYXRyaXggPSB0aGlzLm1hdHJpeC50b0FycmF5
KCk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHRoaXMubWF0cml4QXV0
b1VwZGF0ZSA9PT0gZmFsc2UgKSBvYmplY3QubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlOwogCi0g
ICAgICAgICAgICAgICAgaWYgKCBzaGFkb3cubWFwID09PSBudWxsICkgeworICAgICAgICAgICAg
Ly8KIAotICAgICAgICAgICAgICAgICAgICB2YXIgcGFycyA9IHsgbWluRmlsdGVyOiBOZWFyZXN0
RmlsdGVyLCBtYWdGaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsIGZvcm1hdDogUkdCQUZvcm1hdCB9Owor
ICAgICAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplKCBsaWJyYXJ5LCBlbGVtZW50ICkgewogCi0g
ICAgICAgICAgICAgICAgICAgIHNoYWRvdy5tYXAgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoIF9z
aGFkb3dNYXBTaXplLngsIF9zaGFkb3dNYXBTaXplLnksIHBhcnMgKTsKLSAgICAgICAgICAgICAg
ICAgICAgc2hhZG93Lm1hcC50ZXh0dXJlLm5hbWUgPSBsaWdodC5uYW1lICsgIi5zaGFkb3dNYXAi
OworICAgICAgICAgICAgICAgIGlmICggbGlicmFyeVsgZWxlbWVudC51dWlkIF0gPT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmEudXBkYXRlUHJvamVj
dGlvbk1hdHJpeCgpOworICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5WyBlbGVtZW50LnV1aWQg
XSA9IGVsZW1lbnQudG9KU09OKCBtZXRhICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBpZiAoIHNoYWRvdy5pc1Nwb3RMaWdodFNoYWRvdyApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudC51dWlkOwogCi0gICAgICAgICAgICAgICAgICAgIHNoYWRvdy51
cGRhdGUoIGxpZ2h0ICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIHRoaXMuZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAg
ICAgICAgIHZhciBzaGFkb3dNYXAgPSBzaGFkb3cubWFwOwotICAgICAgICAgICAgICAgIHZhciBz
aGFkb3dNYXRyaXggPSBzaGFkb3cubWF0cml4OworICAgICAgICAgICAgICAgIG9iamVjdC5nZW9t
ZXRyeSA9IHNlcmlhbGl6ZSggbWV0YS5nZW9tZXRyaWVzLCB0aGlzLmdlb21ldHJ5ICk7CiAKLSAg
ICAgICAgICAgICAgICBfbGlnaHRQb3NpdGlvbldvcmxkLnNldEZyb21NYXRyaXhQb3NpdGlvbigg
bGlnaHQubWF0cml4V29ybGQgKTsKLSAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmEucG9zaXRp
b24uY29weSggX2xpZ2h0UG9zaXRpb25Xb3JsZCApOworICAgICAgICAgICAgICAgIHZhciBwYXJh
bWV0ZXJzID0gdGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzOwogCi0gICAgICAgICAgICAgICAgaWYg
KCBpc1BvaW50TGlnaHQgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzICE9PSB1
bmRlZmluZWQgJiYgcGFyYW1ldGVycy5zaGFwZXMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBmYWNlQ291bnQgPSA2OworICAgICAgICAgICAgICAgICAgICB2YXIgc2hh
cGVzID0gcGFyYW1ldGVycy5zaGFwZXM7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHBv
aW50IGxpZ2h0cyB3ZSBzZXQgdGhlIHNoYWRvdyBtYXRyaXggdG8gYmUgYSB0cmFuc2xhdGlvbi1v
bmx5IG1hdHJpeAotICAgICAgICAgICAgICAgICAgICAvLyBlcXVhbCB0byBpbnZlcnNlIG9mIHRo
ZSBsaWdodCdzIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJh
eSggc2hhcGVzICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93TWF0cml4Lm1ha2VU
cmFuc2xhdGlvbiggLSBfbGlnaHRQb3NpdGlvbldvcmxkLngsIC0gX2xpZ2h0UG9zaXRpb25Xb3Js
ZC55LCAtIF9saWdodFBvc2l0aW9uV29ybGQueiApOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
aGFwZSA9IHNoYXBlc1sgaSBdOwogCi0gICAgICAgICAgICAgICAgICAgIGZhY2VDb3VudCA9IDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKCBtZXRhLnNoYXBlcywgc2hh
cGUgKTsKIAotICAgICAgICAgICAgICAgICAgICBfbG9va1RhcmdldC5zZXRGcm9tTWF0cml4UG9z
aXRpb24oIGxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApOwotICAgICAgICAgICAgICAgICAgICBz
aGFkb3dDYW1lcmEubG9va0F0KCBfbG9va1RhcmdldCApOwotICAgICAgICAgICAgICAgICAgICBz
aGFkb3dDYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHNoYWRvdyBtYXRyaXgKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICBzaGFkb3dNYXRy
aXguc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgMC41LCAwLjAsIDAuMCwgMC41LAotICAg
ICAgICAgICAgICAgICAgICAgICAgMC4wLCAwLjUsIDAuMCwgMC41LAotICAgICAgICAgICAgICAg
ICAgICAgICAgMC4wLCAwLjAsIDAuNSwgMC41LAotICAgICAgICAgICAgICAgICAgICAgICAgMC4w
LCAwLjAsIDAuMCwgMS4wCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXJpYWxpemUoIG1ldGEuc2hhcGVzLCBzaGFwZXMgKTsKIAotICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dNYXRyaXgubXVsdGlwbHkoIHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0
cml4ICk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd01hdHJpeC5tdWx0aXBseSggc2hhZG93
Q2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBfcmVuZGVyZXIuc2V0UmVuZGVyVGFy
Z2V0KCBzaGFkb3dNYXAgKTsKLSAgICAgICAgICAgICAgICBfcmVuZGVyZXIuY2xlYXIoKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIHJlbmRlciBzaGFkb3cgbWFwIGZvciBl
YWNoIGN1YmUgZmFjZSAoaWYgb21uaS1kaXJlY3Rpb25hbCkgb3IKLSAgICAgICAgICAgICAgICAv
LyBydW4gYSBzaW5nbGUgcGFzcyBpZiBub3QKKyAgICAgICAgICAgIGlmICggdGhpcy5tYXRlcmlh
bCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGZhY2UgPSAw
OyBmYWNlIDwgZmFjZUNvdW50OyBmYWNlICsrICkgeworICAgICAgICAgICAgICAgIGlmICggQXJy
YXkuaXNBcnJheSggdGhpcy5tYXRlcmlhbCApICkgewogCi0gICAgICAgICAgICAgICAgICAgIGlm
ICggaXNQb2ludExpZ2h0ICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdXVpZHMgPSBbXTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgX2xvb2tUYXJnZXQuY29weSggc2hhZG93Q2FtZXJh
LnBvc2l0aW9uICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfbG9va1RhcmdldC5hZGQoIGN1
YmVEaXJlY3Rpb25zWyBmYWNlIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nh
bWVyYS51cC5jb3B5KCBjdWJlVXBzWyBmYWNlIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNoYWRvd0NhbWVyYS5sb29rQXQoIF9sb29rVGFyZ2V0ICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dDYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5tYXRlcmlhbC5sZW5ndGg7IGkgPCBsOyBpICsr
ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdnBEaW1lbnNpb25zID0gY3ViZTJE
Vmlld1BvcnRzWyBmYWNlIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBfc3RhdGUudmlld3Bv
cnQoIHZwRGltZW5zaW9ucyApOworICAgICAgICAgICAgICAgICAgICAgICAgdXVpZHMucHVzaCgg
c2VyaWFsaXplKCBtZXRhLm1hdGVyaWFscywgdGhpcy5tYXRlcmlhbFsgaSBdICkgKTsKIAogICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGNhbWVy
YSBtYXRyaWNlcyBhbmQgZnJ1c3R1bQotCi0gICAgICAgICAgICAgICAgICAgIF9wcm9qU2NyZWVu
TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCBz
aGFkb3dDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7Ci0gICAgICAgICAgICAgICAgICAgIF9m
cnVzdHVtLnNldEZyb21NYXRyaXgoIF9wcm9qU2NyZWVuTWF0cml4ICk7CisgICAgICAgICAgICAg
ICAgICAgIG9iamVjdC5tYXRlcmlhbCA9IHV1aWRzOwogCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNldCBvYmplY3QgbWF0cmljZXMgJiBmcnVzdHVtIGN1bGxpbmcKKyAgICAgICAgICAgICAgICB9
IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdCggc2NlbmUsIGNhbWVy
YSwgc2hhZG93Q2FtZXJhLCBpc1BvaW50TGlnaHQgKTsKKyAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0Lm1hdGVyaWFsID0gc2VyaWFsaXplKCBtZXRhLm1hdGVyaWFscywgdGhpcy5tYXRlcmlhbCAp
OwogCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8v
IFJlc3RvcmUgR0wgc3RhdGUuCi0gICAgICAgICAgICB2YXIgY2xlYXJDb2xvciA9IF9yZW5kZXJl
ci5nZXRDbGVhckNvbG9yKCk7Ci0gICAgICAgICAgICB2YXIgY2xlYXJBbHBoYSA9IF9yZW5kZXJl
ci5nZXRDbGVhckFscGhhKCk7Ci0gICAgICAgICAgICBfcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigg
Y2xlYXJDb2xvciwgY2xlYXJBbHBoYSApOworICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAg
c2NvcGUubmVlZHNVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICggdGhpcy5jaGlsZHJl
bi5sZW5ndGggPiAwICkgewogCi0gICAgICAgIH07CisgICAgICAgICAgICAgICAgb2JqZWN0LmNo
aWxkcmVuID0gW107CiAKLSAgICAgICAgZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbCggb2JqZWN0
LCBtYXRlcmlhbCwgaXNQb2ludExpZ2h0LCBsaWdodFBvc2l0aW9uV29ybGQgKSB7CisgICAgICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgKysg
KSB7CiAKLSAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLnB1c2goIHRoaXMuY2hpbGRyZW5bIGkgXS50
b0pTT04oIG1ldGEgKS5vYmplY3QgKTsKIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgbWF0ZXJpYWxWYXJpYW50cyA9
IF9kZXB0aE1hdGVyaWFsczsKLSAgICAgICAgICAgIHZhciBjdXN0b21NYXRlcmlhbCA9IG9iamVj
dC5jdXN0b21EZXB0aE1hdGVyaWFsOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IGlzUG9pbnRMaWdodCApIHsKKyAgICAgICAgICAgIGlmICggaXNSb290T2JqZWN0ICkgewogCi0g
ICAgICAgICAgICAgICAgbWF0ZXJpYWxWYXJpYW50cyA9IF9kaXN0YW5jZU1hdGVyaWFsczsKLSAg
ICAgICAgICAgICAgICBjdXN0b21NYXRlcmlhbCA9IG9iamVjdC5jdXN0b21EaXN0YW5jZU1hdGVy
aWFsOworICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyaWVzID0gZXh0cmFjdEZyb21DYWNoZSgg
bWV0YS5nZW9tZXRyaWVzICk7CisgICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFscyA9IGV4dHJh
Y3RGcm9tQ2FjaGUoIG1ldGEubWF0ZXJpYWxzICk7CisgICAgICAgICAgICAgICAgdmFyIHRleHR1
cmVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS50ZXh0dXJlcyApOworICAgICAgICAgICAgICAg
IHZhciBpbWFnZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLmltYWdlcyApOworICAgICAgICAg
ICAgICAgIHZhciBzaGFwZXMgPSBleHRyYWN0RnJvbUNhY2hlKCBtZXRhLnNoYXBlcyApOworCisg
ICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyaWVzLmxlbmd0aCA+IDAgKSBvdXRwdXQuZ2VvbWV0
cmllcyA9IGdlb21ldHJpZXM7CisgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbHMubGVuZ3Ro
ID4gMCApIG91dHB1dC5tYXRlcmlhbHMgPSBtYXRlcmlhbHM7CisgICAgICAgICAgICAgICAgaWYg
KCB0ZXh0dXJlcy5sZW5ndGggPiAwICkgb3V0cHV0LnRleHR1cmVzID0gdGV4dHVyZXM7CisgICAg
ICAgICAgICAgICAgaWYgKCBpbWFnZXMubGVuZ3RoID4gMCApIG91dHB1dC5pbWFnZXMgPSBpbWFn
ZXM7CisgICAgICAgICAgICAgICAgaWYgKCBzaGFwZXMubGVuZ3RoID4gMCApIG91dHB1dC5zaGFw
ZXMgPSBzaGFwZXM7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCAhIGN1c3Rv
bU1hdGVyaWFsICkgeworICAgICAgICAgICAgb3V0cHV0Lm9iamVjdCA9IG9iamVjdDsKIAotICAg
ICAgICAgICAgICAgIHZhciB1c2VNb3JwaGluZyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IG91dHB1dDsKIAotICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubW9ycGhUYXJnZXRzICkg
eworICAgICAgICAgICAgLy8gZXh0cmFjdCBkYXRhIGZyb20gdGhlIGNhY2hlIGhhc2gKKyAgICAg
ICAgICAgIC8vIHJlbW92ZSBtZXRhZGF0YSBvbiBlYWNoIGl0ZW0KKyAgICAgICAgICAgIC8vIGFu
ZCByZXR1cm4gYXMgYXJyYXkKKyAgICAgICAgICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tQ2FjaGUo
IGNhY2hlICkgewogCi0gICAgICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0
cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107
CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBjYWNoZSApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlTW9ycGhpbmcgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMgJiYg
Z2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uICYmIGdlb21ldHJ5Lm1vcnBoQXR0cmli
dXRlcy5wb3NpdGlvbi5sZW5ndGggPiAwOworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9
IGNhY2hlWyBrZXkgXTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGEubWV0YWRhdGE7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCBkYXRhICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlTW9ycGhpbmcgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHMg
JiYgZ2VvbWV0cnkubW9ycGhUYXJnZXRzLmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICBjbG9uZTogZnVuY3Rpb24gKCByZWN1cnNpdmUgKSB7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIG9iamVjdC5pc1NraW5uZWRNZXNoICYmIG1hdGVyaWFsLnNraW5uaW5nID09PSBmYWxzZSAp
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMs
IHJlY3Vyc2l2ZSApOwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5n
IHNldCB0byBmYWxzZTonLCBvYmplY3QgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHsKIAotICAg
ICAgICAgICAgICAgIHZhciB1c2VTa2lubmluZyA9IG9iamVjdC5pc1NraW5uZWRNZXNoICYmIG1h
dGVyaWFsLnNraW5uaW5nOworICAgICAgICAgICAgaWYgKCByZWN1cnNpdmUgPT09IHVuZGVmaW5l
ZCApIHJlY3Vyc2l2ZSA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICB2YXIgdmFyaWFudEluZGV4
ID0gMDsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lOwogCi0gICAgICAgICAg
ICAgICAgaWYgKCB1c2VNb3JwaGluZyApIHZhcmlhbnRJbmRleCB8PSBfTW9ycGhpbmdGbGFnOwot
ICAgICAgICAgICAgICAgIGlmICggdXNlU2tpbm5pbmcgKSB2YXJpYW50SW5kZXggfD0gX1NraW5u
aW5nRmxhZzsKKyAgICAgICAgICAgIHRoaXMudXAuY29weSggc291cmNlLnVwICk7CiAKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtYXRlcmlhbFZhcmlhbnRzWyB2YXJpYW50SW5kZXggXTsKKyAg
ICAgICAgICAgIHRoaXMucG9zaXRpb24uY29weSggc291cmNlLnBvc2l0aW9uICk7CisgICAgICAg
ICAgICB0aGlzLnF1YXRlcm5pb24uY29weSggc291cmNlLnF1YXRlcm5pb24gKTsKKyAgICAgICAg
ICAgIHRoaXMuc2NhbGUuY29weSggc291cmNlLnNjYWxlICk7CiAKLSAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLm1hdHJpeC5jb3B5KCBzb3VyY2UubWF0cml4ICk7CisgICAg
ICAgICAgICB0aGlzLm1hdHJpeFdvcmxkLmNvcHkoIHNvdXJjZS5tYXRyaXhXb3JsZCApOwogCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VzdG9tTWF0ZXJpYWw7CisgICAgICAgICAgICB0aGlz
Lm1hdHJpeEF1dG9VcGRhdGUgPSBzb3VyY2UubWF0cml4QXV0b1VwZGF0ZTsKKyAgICAgICAgICAg
IHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhXb3JsZE5lZWRzVXBk
YXRlOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmxheWVycy5tYXNrID0gc291
cmNlLmxheWVycy5tYXNrOworICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gc291cmNlLnZpc2li
bGU7CiAKLSAgICAgICAgICAgIGlmICggX3JlbmRlcmVyLmxvY2FsQ2xpcHBpbmdFbmFibGVkICYm
Ci0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNsaXBTaGFkb3dzID09PSB0cnVlICYmCi0g
ICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNsaXBwaW5nUGxhbmVzLmxlbmd0aCAhPT0gMCAp
IHsKKyAgICAgICAgICAgIHRoaXMuY2FzdFNoYWRvdyA9IHNvdXJjZS5jYXN0U2hhZG93OworICAg
ICAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gc291cmNlLnJlY2VpdmVTaGFkb3c7CiAKLSAg
ICAgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgbmVlZCBhIHVuaXF1ZSBtYXRlcmlhbCBp
bnN0YW5jZSByZWZsZWN0aW5nIHRoZQotICAgICAgICAgICAgICAgIC8vIGFwcHJvcHJpYXRlIHN0
YXRlCi0KLSAgICAgICAgICAgICAgICB2YXIga2V5QSA9IHJlc3VsdC51dWlkLCBrZXlCID0gbWF0
ZXJpYWwudXVpZDsKLQotICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbHNGb3JWYXJpYW50ID0g
X21hdGVyaWFsQ2FjaGVbIGtleUEgXTsKLQotICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxz
Rm9yVmFyaWFudCA9PT0gdW5kZWZpbmVkICkgewotCi0gICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsc0ZvclZhcmlhbnQgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgX21hdGVyaWFsQ2FjaGVb
IGtleUEgXSA9IG1hdGVyaWFsc0ZvclZhcmlhbnQ7CisgICAgICAgICAgICB0aGlzLmZydXN0dW1D
dWxsZWQgPSBzb3VyY2UuZnJ1c3R1bUN1bGxlZDsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyT3Jk
ZXIgPSBzb3VyY2UucmVuZGVyT3JkZXI7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLnVzZXJEYXRhID0gSlNPTi5wYXJzZSggSlNPTi5zdHJpbmdpZnkoIHNvdXJjZS51c2Vy
RGF0YSApICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgY2FjaGVkTWF0ZXJpYWwgPSBtYXRlcmlh
bHNGb3JWYXJpYW50WyBrZXlCIF07CisgICAgICAgICAgICBpZiAoIHJlY3Vyc2l2ZSA9PT0gdHJ1
ZSApIHsKIAotICAgICAgICAgICAgICAgIGlmICggY2FjaGVkTWF0ZXJpYWwgPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBzb3VyY2UuY2hpbGRy
ZW4ubGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlZE1hdGVyaWFs
ID0gcmVzdWx0LmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsc0ZvclZhcmlh
bnRbIGtleUIgXSA9IGNhY2hlZE1hdGVyaWFsOworICAgICAgICAgICAgICAgICAgICB2YXIgY2hp
bGQgPSBzb3VyY2UuY2hpbGRyZW5bIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQo
IGNoaWxkLmNsb25lKCkgKTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGNhY2hlZE1hdGVyaWFsOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJlc3VsdC52aXNpYmxlID0gbWF0ZXJpYWwudmlzaWJsZTsKLSAgICAgICAgICAgIHJlc3VsdC53
aXJlZnJhbWUgPSBtYXRlcmlhbC53aXJlZnJhbWU7Ci0KLSAgICAgICAgICAgIHZhciBzaWRlID0g
bWF0ZXJpYWwuc2lkZTsKLQotICAgICAgICAgICAgaWYgKCBzY29wZS5yZW5kZXJTaW5nbGVTaWRl
ZCAmJiBzaWRlID09IERvdWJsZVNpZGUgKSB7Ci0KLSAgICAgICAgICAgICAgICBzaWRlID0gRnJv
bnRTaWRlOwotCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggc2NvcGUucmVuZGVy
UmV2ZXJzZVNpZGVkICkgewotCi0gICAgICAgICAgICAgICAgaWYgKCBzaWRlID09PSBGcm9udFNp
ZGUgKSBzaWRlID0gQmFja1NpZGU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHNpZGUgPT09
IEJhY2tTaWRlICkgc2lkZSA9IEZyb250U2lkZTsKLQotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIHJlc3VsdC5zaWRlID0gc2lkZTsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICByZXN1bHQuY2xpcFNoYWRvd3MgPSBtYXRlcmlhbC5jbGlwU2hh
ZG93czsKLSAgICAgICAgICAgIHJlc3VsdC5jbGlwcGluZ1BsYW5lcyA9IG1hdGVyaWFsLmNsaXBw
aW5nUGxhbmVzOworICAgIH0gKTsKIAotICAgICAgICAgICAgcmVzdWx0LndpcmVmcmFtZUxpbmV3
aWR0aCA9IG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aDsKLSAgICAgICAgICAgIHJlc3VsdC5s
aW5ld2lkdGggPSBtYXRlcmlhbC5saW5ld2lkdGg7CisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdl
ciAvIGh0dHA6Ly9nb21vLnNlLworICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8v
Z2l0aHViLmNvbS9XZXN0TGFuZ2xleQorICAgICovCiAKLSAgICAgICAgICAgIGlmICggaXNQb2lu
dExpZ2h0ICYmIHJlc3VsdC51bmlmb3Jtcy5saWdodFBvcyAhPT0gdW5kZWZpbmVkICkgeworICAg
IGZ1bmN0aW9uIENhbWVyYSgpIHsKIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmlmb3Jtcy5s
aWdodFBvcy52YWx1ZS5jb3B5KCBsaWdodFBvc2l0aW9uV29ybGQgKTsKKyAgICAgICAgT2JqZWN0
M0QuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHRoaXMudHlwZSA9ICdD
YW1lcmEnOwogCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB0aGlzLm1hdHJp
eFdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIHRoaXMucHJvamVjdGlvbk1h
dHJpeCA9IG5ldyBNYXRyaXg0KCk7CiAKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICBmdW5j
dGlvbiByZW5kZXJPYmplY3QoIG9iamVjdCwgY2FtZXJhLCBzaGFkb3dDYW1lcmEsIGlzUG9pbnRM
aWdodCApIHsKKyAgICBDYW1lcmEucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNy
ZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgaWYgKCBvYmplY3Qu
dmlzaWJsZSA9PT0gZmFsc2UgKSByZXR1cm47CisgICAgICAgIGNvbnN0cnVjdG9yOiBDYW1lcmEs
CiAKLSAgICAgICAgICAgIHZhciB2aXNpYmxlID0gb2JqZWN0LmxheWVycy50ZXN0KCBjYW1lcmEu
bGF5ZXJzICk7CisgICAgICAgIGlzQ2FtZXJhOiB0cnVlLAogCi0gICAgICAgICAgICBpZiAoIHZp
c2libGUgJiYgKCBvYmplY3QuaXNNZXNoIHx8IG9iamVjdC5pc0xpbmUgfHwgb2JqZWN0LmlzUG9p
bnRzICkgKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlLCByZWN1cnNpdmUgKSB7
CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9iamVjdC5jYXN0U2hhZG93ICYmICggISBvYmplY3Qu
ZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KCBvYmplY3QgKSApICkg
eworICAgICAgICAgICAgT2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNl
LCByZWN1cnNpdmUgKTsKIAotICAgICAgICAgICAgICAgICAgICBvYmplY3QubW9kZWxWaWV3TWF0
cml4Lm11bHRpcGx5TWF0cmljZXMoIHNoYWRvd0NhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIG9i
amVjdC5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZEludmVyc2Uu
Y29weSggc291cmNlLm1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAgICAgICAgdGhpcy5wcm9q
ZWN0aW9uTWF0cml4LmNvcHkoIHNvdXJjZS5wcm9qZWN0aW9uTWF0cml4ICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gX29iamVjdHMudXBkYXRlKCBvYmplY3QgKTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0Fy
cmF5KCBtYXRlcmlhbCApICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzOworICAgICAgICBnZXRXb3JsZERpcmVjdGlv
bjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgayA9
IDAsIGtsID0gZ3JvdXBzLmxlbmd0aDsgayA8IGtsOyBrICsrICkgeworICAgICAgICAgICAgdmFy
IHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzWyBrIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdOwor
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldFdvcmxkRGlyZWN0aW9uKCB0YXJnZXQgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdyb3VwTWF0ZXJpYWwgJiYgZ3Jv
dXBNYXRlcmlhbC52aXNpYmxlICkgeworICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlcHRo
TWF0ZXJpYWwgPSBnZXREZXB0aE1hdGVyaWFsKCBvYmplY3QsIGdyb3VwTWF0ZXJpYWwsIGlzUG9p
bnRMaWdodCwgX2xpZ2h0UG9zaXRpb25Xb3JsZCApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KCBzaGFkb3dDYW1lcmEsIG51bGws
IGdlb21ldHJ5LCBkZXB0aE1hdGVyaWFsLCBvYmplY3QsIGdyb3VwICk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkNhbWVyYTogLmdldFdvcmxkRGlyZWN0aW9uKCkg
dGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0g
bmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
aGlzLmdldFdvcmxkUXVhdGVybmlvbiggcXVhdGVybmlvbiApOwogCi0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLnZpc2libGUgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRhcmdldC5zZXQoIDAsIDAsIC0gMSApLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiAp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwdGhNYXRlcmlhbCA9IGdldERlcHRo
TWF0ZXJpYWwoIG9iamVjdCwgbWF0ZXJpYWwsIGlzUG9pbnRMaWdodCwgX2xpZ2h0UG9zaXRpb25X
b3JsZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgX3JlbmRlcmVyLnJlbmRlckJ1ZmZlckRp
cmVjdCggc2hhZG93Q2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgZGVwdGhNYXRlcmlhbCwgb2JqZWN0
LCBudWxsICk7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfSgpLAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB1cGRhdGVNYXRyaXhXb3JsZDog
ZnVuY3Rpb24gKCBmb3JjZSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0
M0QucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwoIHRoaXMsIGZvcmNlICk7CiAKLSAg
ICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjsKKyAgICAgICAgICAgIHRo
aXMubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UoIHRoaXMubWF0cml4V29ybGQgKTsKIAot
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdCggY2hp
bGRyZW5bIGkgXSwgY2FtZXJhLCBzaGFkb3dDYW1lcmEsIGlzUG9pbnRMaWdodCApOworICAgICAg
ICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CiAKICAgICAgICAgfQogCi0g
ICAgfQorICAgIH0gKTsKIAogICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDov
L21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVh
bGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIGFyb3NlIC8gaHR0cDovL2dpdGh1Yi5jb20vYXJvc2UK
ICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIFdlYkdMQXR0cmlidXRlcyggZ2wgKSB7CisgICAgZnVu
Y3Rpb24gT3J0aG9ncmFwaGljQ2FtZXJhKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIs
IGZhciApIHsKIAotICAgICAgICB2YXIgYnVmZmVycyA9IHt9OworICAgICAgICBDYW1lcmEuY2Fs
bCggdGhpcyApOwogCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciggYXR0cmlidXRlLCBi
dWZmZXJUeXBlICkgeworICAgICAgICB0aGlzLnR5cGUgPSAnT3J0aG9ncmFwaGljQ2FtZXJhJzsK
IAotICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlLmFycmF5OwotICAgICAgICAgICAg
dmFyIHVzYWdlID0gYXR0cmlidXRlLmR5bmFtaWMgPyBnbC5EWU5BTUlDX0RSQVcgOiBnbC5TVEFU
SUNfRFJBVzsKKyAgICAgICAgdGhpcy56b29tID0gMTsKKyAgICAgICAgdGhpcy52aWV3ID0gbnVs
bDsKIAotICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgICAg
ICB0aGlzLmxlZnQgPSBsZWZ0OworICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisgICAgICAg
IHRoaXMudG9wID0gdG9wOworICAgICAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTsKIAotICAgICAg
ICAgICAgZ2wuYmluZEJ1ZmZlciggYnVmZmVyVHlwZSwgYnVmZmVyICk7Ci0gICAgICAgICAgICBn
bC5idWZmZXJEYXRhKCBidWZmZXJUeXBlLCBhcnJheSwgdXNhZ2UgKTsKKyAgICAgICAgdGhpcy5u
ZWFyID0gKCBuZWFyICE9PSB1bmRlZmluZWQgKSA/IG5lYXIgOiAwLjE7CisgICAgICAgIHRoaXMu
ZmFyID0gKCBmYXIgIT09IHVuZGVmaW5lZCApID8gZmFyIDogMjAwMDsKIAotICAgICAgICAgICAg
YXR0cmlidXRlLm9uVXBsb2FkQ2FsbGJhY2soKTsKKyAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0
aW9uTWF0cml4KCk7CiAKLSAgICAgICAgICAgIHZhciB0eXBlID0gZ2wuRkxPQVQ7CisgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIGFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ICkgeworICAg
IE9ydGhvZ3JhcGhpY0NhbWVyYS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3Jl
YXRlKCBDYW1lcmEucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgICAgIHR5cGUgPSBnbC5G
TE9BVDsKKyAgICAgICAgY29uc3RydWN0b3I6IE9ydGhvZ3JhcGhpY0NhbWVyYSwKIAotICAgICAg
ICAgICAgfSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkgKSB7CisgICAg
ICAgIGlzT3J0aG9ncmFwaGljQ2FtZXJhOiB0cnVlLAogCi0gICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBm
b3JtYXQ6IEZsb2F0NjRBcnJheS4nICk7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNl
LCByZWN1cnNpdmUgKSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFycmF5IGluc3RhbmNl
b2YgVWludDE2QXJyYXkgKSB7CisgICAgICAgICAgICBDYW1lcmEucHJvdG90eXBlLmNvcHkuY2Fs
bCggdGhpcywgc291cmNlLCByZWN1cnNpdmUgKTsKIAotICAgICAgICAgICAgICAgIHR5cGUgPSBn
bC5VTlNJR05FRF9TSE9SVDsKKyAgICAgICAgICAgIHRoaXMubGVmdCA9IHNvdXJjZS5sZWZ0Owor
ICAgICAgICAgICAgdGhpcy5yaWdodCA9IHNvdXJjZS5yaWdodDsKKyAgICAgICAgICAgIHRoaXMu
dG9wID0gc291cmNlLnRvcDsKKyAgICAgICAgICAgIHRoaXMuYm90dG9tID0gc291cmNlLmJvdHRv
bTsKKyAgICAgICAgICAgIHRoaXMubmVhciA9IHNvdXJjZS5uZWFyOworICAgICAgICAgICAgdGhp
cy5mYXIgPSBzb3VyY2UuZmFyOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBhcnJheSBpbnN0
YW5jZW9mIEludDE2QXJyYXkgKSB7CisgICAgICAgICAgICB0aGlzLnpvb20gPSBzb3VyY2Uuem9v
bTsKKyAgICAgICAgICAgIHRoaXMudmlldyA9IHNvdXJjZS52aWV3ID09PSBudWxsID8gbnVsbCA6
IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UudmlldyApOwogCi0gICAgICAgICAgICAgICAgdHlw
ZSA9IGdsLlNIT1JUOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkgKSB7CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgICAgICB0eXBlID0gZ2wuVU5TSUdORURfSU5UOworICAgICAgICBzZXRWaWV3
T2Zmc2V0OiBmdW5jdGlvbiAoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgeCwgeSwgd2lkdGgsIGhl
aWdodCApIHsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggYXJyYXkgaW5zdGFuY2VvZiBJbnQz
MkFycmF5ICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgPT09IG51bGwgKSB7CiAKLSAg
ICAgICAgICAgICAgICB0eXBlID0gZ2wuSU5UOworICAgICAgICAgICAgICAgIHRoaXMudmlldyA9
IHsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgZnVsbFdpZHRoOiAxLAorICAgICAgICAgICAgICAgICAgICBmdWxsSGVpZ2h0OiAxLAorICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRYOiAwLAorICAgICAgICAgICAgICAgICAgICBvZmZzZXRZ
OiAwLAorICAgICAgICAgICAgICAgICAgICB3aWR0aDogMSwKKyAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0OiAxCisgICAgICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICgg
YXJyYXkgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB0eXBlID0gZ2wuQllURTsKKyAgICAgICAgICAgIHRoaXMudmlldy5lbmFibGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHRoaXMudmlldy5mdWxsV2lkdGggPSBmdWxsV2lkdGg7CisgICAg
ICAgICAgICB0aGlzLnZpZXcuZnVsbEhlaWdodCA9IGZ1bGxIZWlnaHQ7CisgICAgICAgICAgICB0
aGlzLnZpZXcub2Zmc2V0WCA9IHg7CisgICAgICAgICAgICB0aGlzLnZpZXcub2Zmc2V0WSA9IHk7
CisgICAgICAgICAgICB0aGlzLnZpZXcud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHRoaXMu
dmlldy5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFycmF5IGlu
c3RhbmNlb2YgVWludDhBcnJheSApIHsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlv
bk1hdHJpeCgpOwogCi0gICAgICAgICAgICAgICAgdHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2xlYXJWaWV3T2Zmc2V0OiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
OiBidWZmZXIsCi0gICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAgICAgICBi
eXRlc1BlckVsZW1lbnQ6IGFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULAotICAgICAgICAgICAgICAg
IHZlcnNpb246IGF0dHJpYnV0ZS52ZXJzaW9uCi0gICAgICAgICAgICB9OworICAgICAgICAgICAg
aWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMudmlldy5lbmFibGVkID0gZmFsc2U7CiAKLSAgICAgICAgZnVuY3Rpb24gdXBkYXRlQnVm
ZmVyKCBidWZmZXIsIGF0dHJpYnV0ZSwgYnVmZmVyVHlwZSApIHsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlLmFycmF5OwotICAgICAgICAgICAgdmFy
IHVwZGF0ZVJhbmdlID0gYXR0cmlidXRlLnVwZGF0ZVJhbmdlOworICAgICAgICAgICAgdGhpcy51
cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CiAKLSAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGJ1
ZmZlclR5cGUsIGJ1ZmZlciApOworICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIGF0dHJp
YnV0ZS5keW5hbWljID09PSBmYWxzZSApIHsKKyAgICAgICAgdXBkYXRlUHJvamVjdGlvbk1hdHJp
eDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YSggYnVmZmVy
VHlwZSwgYXJyYXksIGdsLlNUQVRJQ19EUkFXICk7CisgICAgICAgICAgICB2YXIgZHggPSAoIHRo
aXMucmlnaHQgLSB0aGlzLmxlZnQgKSAvICggMiAqIHRoaXMuem9vbSApOworICAgICAgICAgICAg
dmFyIGR5ID0gKCB0aGlzLnRvcCAtIHRoaXMuYm90dG9tICkgLyAoIDIgKiB0aGlzLnpvb20gKTsK
KyAgICAgICAgICAgIHZhciBjeCA9ICggdGhpcy5yaWdodCArIHRoaXMubGVmdCApIC8gMjsKKyAg
ICAgICAgICAgIHZhciBjeSA9ICggdGhpcy50b3AgKyB0aGlzLmJvdHRvbSApIC8gMjsKIAotICAg
ICAgICAgICAgfSBlbHNlIGlmICggdXBkYXRlUmFuZ2UuY291bnQgPT09IC0gMSApIHsKKyAgICAg
ICAgICAgIHZhciBsZWZ0ID0gY3ggLSBkeDsKKyAgICAgICAgICAgIHZhciByaWdodCA9IGN4ICsg
ZHg7CisgICAgICAgICAgICB2YXIgdG9wID0gY3kgKyBkeTsKKyAgICAgICAgICAgIHZhciBib3R0
b20gPSBjeSAtIGR5OwogCi0gICAgICAgICAgICAgICAgLy8gTm90IHVzaW5nIHVwZGF0ZSByYW5n
ZXMKKyAgICAgICAgICAgIGlmICggdGhpcy52aWV3ICE9PSBudWxsICYmIHRoaXMudmlldy5lbmFi
bGVkICkgewogCi0gICAgICAgICAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YSggYnVmZmVyVHlwZSwg
MCwgYXJyYXkgKTsKKyAgICAgICAgICAgICAgICB2YXIgem9vbVcgPSB0aGlzLnpvb20gLyAoIHRo
aXMudmlldy53aWR0aCAvIHRoaXMudmlldy5mdWxsV2lkdGggKTsKKyAgICAgICAgICAgICAgICB2
YXIgem9vbUggPSB0aGlzLnpvb20gLyAoIHRoaXMudmlldy5oZWlnaHQgLyB0aGlzLnZpZXcuZnVs
bEhlaWdodCApOworICAgICAgICAgICAgICAgIHZhciBzY2FsZVcgPSAoIHRoaXMucmlnaHQgLSB0
aGlzLmxlZnQgKSAvIHRoaXMudmlldy53aWR0aDsKKyAgICAgICAgICAgICAgICB2YXIgc2NhbGVI
ID0gKCB0aGlzLnRvcCAtIHRoaXMuYm90dG9tICkgLyB0aGlzLnZpZXcuaGVpZ2h0OwogCi0gICAg
ICAgICAgICB9IGVsc2UgaWYgKCB1cGRhdGVSYW5nZS5jb3VudCA9PT0gMCApIHsKKyAgICAgICAg
ICAgICAgICBsZWZ0ICs9IHNjYWxlVyAqICggdGhpcy52aWV3Lm9mZnNldFggLyB6b29tVyApOwor
ICAgICAgICAgICAgICAgIHJpZ2h0ID0gbGVmdCArIHNjYWxlVyAqICggdGhpcy52aWV3LndpZHRo
IC8gem9vbVcgKTsKKyAgICAgICAgICAgICAgICB0b3AgLT0gc2NhbGVIICogKCB0aGlzLnZpZXcu
b2Zmc2V0WSAvIHpvb21IICk7CisgICAgICAgICAgICAgICAgYm90dG9tID0gdG9wIC0gc2NhbGVI
ICogKCB0aGlzLnZpZXcuaGVpZ2h0IC8gem9vbUggKTsKIAotICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVF
LkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNv
dW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1h
bnVhbGx5LicgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKCBsZWZ0LCByaWdo
dCwgdG9wLCBib3R0b20sIHRoaXMubmVhciwgdGhpcy5mYXIgKTsKIAotICAgICAgICAgICAgICAg
IGdsLmJ1ZmZlclN1YkRhdGEoIGJ1ZmZlclR5cGUsIHVwZGF0ZVJhbmdlLm9mZnNldCAqIGFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULAotICAgICAgICAgICAgICAgICAgICBhcnJheS5zdWJhcnJheSgg
dXBkYXRlUmFuZ2Uub2Zmc2V0LCB1cGRhdGVSYW5nZS5vZmZzZXQgKyB1cGRhdGVSYW5nZS5jb3Vu
dCApICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZS5jb3VudCA9
IC0xOyAvLyByZXNldCByYW5nZQorICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5
cGUudG9KU09OLmNhbGwoIHRoaXMsIG1ldGEgKTsKIAotICAgICAgICB9CisgICAgICAgICAgICBk
YXRhLm9iamVjdC56b29tID0gdGhpcy56b29tOworICAgICAgICAgICAgZGF0YS5vYmplY3QubGVm
dCA9IHRoaXMubGVmdDsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LnJpZ2h0ID0gdGhpcy5yaWdo
dDsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LnRvcCA9IHRoaXMudG9wOworICAgICAgICAgICAg
ZGF0YS5vYmplY3QuYm90dG9tID0gdGhpcy5ib3R0b207CisgICAgICAgICAgICBkYXRhLm9iamVj
dC5uZWFyID0gdGhpcy5uZWFyOworICAgICAgICAgICAgZGF0YS5vYmplY3QuZmFyID0gdGhpcy5m
YXI7CiAKLSAgICAgICAgLy8KKyAgICAgICAgICAgIGlmICggdGhpcy52aWV3ICE9PSBudWxsICkg
ZGF0YS5vYmplY3QudmlldyA9IE9iamVjdC5hc3NpZ24oIHt9LCB0aGlzLnZpZXcgKTsKIAotICAg
ICAgICBmdW5jdGlvbiBnZXQoIGF0dHJpYnV0ZSApIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRh
OwogCi0gICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmli
dXRlICkgYXR0cmlidXRlID0gYXR0cmlidXRlLmRhdGE7CisgICAgICAgIH0KIAotICAgICAgICAg
ICAgcmV0dXJuIGJ1ZmZlcnNbIGF0dHJpYnV0ZS51dWlkIF07CisgICAgfSApOwogCi0gICAgICAg
IH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwor
ICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAg
ICovCiAKLSAgICAgICAgZnVuY3Rpb24gcmVtb3ZlKCBhdHRyaWJ1dGUgKSB7CisgICAgZnVuY3Rp
b24gRmFjZTMoIGEsIGIsIGMsIG5vcm1hbCwgY29sb3IsIG1hdGVyaWFsSW5kZXggKSB7CiAKLSAg
ICAgICAgICAgIGlmICggYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTsKKyAgICAgICAgdGhpcy5hID0gYTsKKyAgICAgICAg
dGhpcy5iID0gYjsKKyAgICAgICAgdGhpcy5jID0gYzsKIAotICAgICAgICAgICAgdmFyIGRhdGEg
PSBidWZmZXJzWyBhdHRyaWJ1dGUudXVpZCBdOworICAgICAgICB0aGlzLm5vcm1hbCA9ICggbm9y
bWFsICYmIG5vcm1hbC5pc1ZlY3RvcjMgKSA/IG5vcm1hbCA6IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgIHRoaXMudmVydGV4Tm9ybWFscyA9IEFycmF5LmlzQXJyYXkoIG5vcm1hbCApID8gbm9ybWFs
IDogW107CiAKLSAgICAgICAgICAgIGlmICggZGF0YSApIHsKKyAgICAgICAgdGhpcy5jb2xvciA9
ICggY29sb3IgJiYgY29sb3IuaXNDb2xvciApID8gY29sb3IgOiBuZXcgQ29sb3IoKTsKKyAgICAg
ICAgdGhpcy52ZXJ0ZXhDb2xvcnMgPSBBcnJheS5pc0FycmF5KCBjb2xvciApID8gY29sb3IgOiBb
XTsKIAotICAgICAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlciggZGF0YS5idWZmZXIgKTsKKyAg
ICAgICAgdGhpcy5tYXRlcmlhbEluZGV4ID0gbWF0ZXJpYWxJbmRleCAhPT0gdW5kZWZpbmVkID8g
bWF0ZXJpYWxJbmRleCA6IDA7CiAKLSAgICAgICAgICAgICAgICBkZWxldGUgYnVmZmVyc1sgYXR0
cmlidXRlLnV1aWQgXTsKKyAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICBPYmplY3QuYXNzaWdu
KCBGYWNlMy5wcm90b3R5cGUsIHsKIAotICAgICAgICB9CisgICAgICAgIGNsb25lOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCBhdHRyaWJ1dGUsIGJ1ZmZlclR5cGUg
KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlz
ICk7CiAKLSAgICAgICAgICAgIGlmICggYXR0cmlidXRlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRy
aWJ1dGUgKSBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuZGF0YTsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgdmFyIGRhdGEgPSBidWZmZXJzWyBhdHRyaWJ1dGUudXVpZCBdOworICAgICAgICBjb3B5
OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAgICAgaWYgKCBkYXRhID09PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICB0aGlzLmEgPSBzb3VyY2UuYTsKKyAgICAgICAgICAgIHRo
aXMuYiA9IHNvdXJjZS5iOworICAgICAgICAgICAgdGhpcy5jID0gc291cmNlLmM7CiAKLSAgICAg
ICAgICAgICAgICBidWZmZXJzWyBhdHRyaWJ1dGUudXVpZCBdID0gY3JlYXRlQnVmZmVyKCBhdHRy
aWJ1dGUsIGJ1ZmZlclR5cGUgKTsKKyAgICAgICAgICAgIHRoaXMubm9ybWFsLmNvcHkoIHNvdXJj
ZS5ub3JtYWwgKTsKKyAgICAgICAgICAgIHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7
CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRhdGEudmVyc2lvbiA8IGF0dHJpYnV0ZS52ZXJz
aW9uICkgeworICAgICAgICAgICAgdGhpcy5tYXRlcmlhbEluZGV4ID0gc291cmNlLm1hdGVyaWFs
SW5kZXg7CiAKLSAgICAgICAgICAgICAgICB1cGRhdGVCdWZmZXIoIGRhdGEuYnVmZmVyLCBhdHRy
aWJ1dGUsIGJ1ZmZlclR5cGUgKTsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBz
b3VyY2UudmVydGV4Tm9ybWFscy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAg
ICAgICAgIGRhdGEudmVyc2lvbiA9IGF0dHJpYnV0ZS52ZXJzaW9uOworICAgICAgICAgICAgICAg
IHRoaXMudmVydGV4Tm9ybWFsc1sgaSBdID0gc291cmNlLnZlcnRleE5vcm1hbHNbIGkgXS5jbG9u
ZSgpOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfQorICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBpbCA9IHNvdXJjZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7
CiAKLSAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZlcnRleENvbG9yc1sg
aSBdID0gc291cmNlLnZlcnRleENvbG9yc1sgaSBdLmNsb25lKCk7CiAKLSAgICAgICAgICAgIGdl
dDogZ2V0LAotICAgICAgICAgICAgcmVtb3ZlOiByZW1vdmUsCi0gICAgICAgICAgICB1cGRhdGU6
IHVwZGF0ZQorICAgICAgICAgICAgfQogCi0gICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAotICAgIH0KKyAgICAgICAgfQorCisgICAgfSApOwogCiAgICAgLyoqCiAgICAgICog
QGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIFdlc3RM
YW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKiBAYXV0aG9yIGtp
bGUgLyBodHRwOi8va2lsZS5zdHJhdmFnYW56YS5vcmcvCisgICAgICogQGF1dGhvciBhbHRlcmVk
cSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIG1pa2FlbCBlbXRp
bmdlciAvIGh0dHA6Ly9nb21vLnNlLworICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHA6Ly93d3cu
bGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKICAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDov
L2NsYXJhLmlvCiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBFdWxlciggeCwgeSwgeiwgb3JkZXIg
KSB7CisgICAgdmFyIGdlb21ldHJ5SWQgPSAwOyAvLyBHZW9tZXRyeSB1c2VzIGV2ZW4gbnVtYmVy
cyBhcyBJZAogCi0gICAgICAgIHRoaXMuX3ggPSB4IHx8IDA7Ci0gICAgICAgIHRoaXMuX3kgPSB5
IHx8IDA7Ci0gICAgICAgIHRoaXMuX3ogPSB6IHx8IDA7Ci0gICAgICAgIHRoaXMuX29yZGVyID0g
b3JkZXIgfHwgRXVsZXIuRGVmYXVsdE9yZGVyOworICAgIGZ1bmN0aW9uIEdlb21ldHJ5KCkgewog
Ci0gICAgfQorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFs
dWU6IGdlb21ldHJ5SWQgKz0gMiB9ICk7CiAKLSAgICBFdWxlci5Sb3RhdGlvbk9yZGVycyA9IFsg
J1hZWicsICdZWlgnLCAnWlhZJywgJ1haWScsICdZWFonLCAnWllYJyBdOworICAgICAgICB0aGlz
LnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQoKTsKIAotICAgIEV1bGVyLkRlZmF1bHRPcmRlciA9
ICdYWVonOworICAgICAgICB0aGlzLm5hbWUgPSAnJzsKKyAgICAgICAgdGhpcy50eXBlID0gJ0dl
b21ldHJ5JzsKIAotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBFdWxlci5wcm90b3R5cGUs
IHsKKyAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtdOworICAgICAgICB0aGlzLmNvbG9ycyA9IFtd
OworICAgICAgICB0aGlzLmZhY2VzID0gW107CisgICAgICAgIHRoaXMuZmFjZVZlcnRleFV2cyA9
IFtbXV07CiAKLSAgICAgICAgeDogeworICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IFtdOwor
ICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IFtdOwogCi0gICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGhpcy5za2luV2VpZ2h0cyA9IFtdOworICAgICAgICB0aGlzLnNr
aW5JbmRpY2VzID0gW107CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDsKKyAgICAg
ICAgdGhpcy5saW5lRGlzdGFuY2VzID0gW107CiAKLSAgICAgICAgICAgIH0sCisgICAgICAgIHRo
aXMuYm91bmRpbmdCb3ggPSBudWxsOworICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVs
bDsKIAotICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAvLyB1
cGRhdGUgZmxhZ3MKIAotICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKKyAgICAgICAgdGhpcy5lbGVtZW50c05l
ZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy52ZXJ0aWNlc05lZWRVcGRhdGUgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy51dnNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHRoaXMubm9y
bWFsc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5jb2xvcnNOZWVkVXBkYXRlID0g
ZmFsc2U7CisgICAgICAgIHRoaXMubGluZURpc3RhbmNlc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5ncm91cHNOZWVkVXBkYXRlID0gZmFsc2U7CiAKLSAgICAgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgfSwKKyAgICBHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWdu
KCBPYmplY3QuY3JlYXRlKCBFdmVudERpc3BhdGNoZXIucHJvdG90eXBlICksIHsKIAotICAgICAg
ICB5OiB7CisgICAgICAgIGNvbnN0cnVjdG9yOiBHZW9tZXRyeSwKIAotICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlzR2VvbWV0cnk6IHRydWUsCiAKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5feTsKKyAgICAgICAgYXBwbHlNYXRyaXg6IGZ1bmN0aW9uICggbWF0
cml4ICkgewogCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCA9
IG5ldyBNYXRyaXgzKCkuZ2V0Tm9ybWFsTWF0cml4KCBtYXRyaXggKTsKIAotICAgICAgICAgICAg
c2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBp
bCA9IHRoaXMudmVydGljZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICB0aGlzLl95ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxi
YWNrKCk7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHRoaXMudmVydGljZXNbIGkgXTsK
KyAgICAgICAgICAgICAgICB2ZXJ0ZXguYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKIAogICAgICAg
ICAgICAgfQogCi0gICAgICAgIH0sCi0KLSAgICAgICAgejogewotCi0gICAgICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSB0aGlzLmZh
Y2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3o7CisgICAgICAgICAgICAgICAgdmFyIGZhY2UgPSB0aGlzLmZhY2VzWyBpIF07CisgICAg
ICAgICAgICAgICAgZmFjZS5ub3JtYWwuYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXggKS5ub3Jt
YWxpemUoKTsKIAotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9
IDAsIGpsID0gZmFjZS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgewogCi0g
ICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAg
IGZhY2UudmVydGV4Tm9ybWFsc1sgaiBdLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9y
bWFsaXplKCk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLl96ID0gdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgfSwKLQotICAgICAgICBvcmRlcjogewotCi0gICAgICAgICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ib3VuZGluZ0JveCAh
PT0gbnVsbCApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmRlcjsKKyAgICAg
ICAgICAgICAgICB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpOwogCi0gICAgICAgICAgICB9LAor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7Cisg
ICAgICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CiAKLSAgICAg
ICAgICAgICAgICB0aGlzLl9vcmRlciA9IHZhbHVlOwotICAgICAgICAgICAgICAgIHRoaXMub25D
aGFuZ2VDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUJvdW5kaW5nU3Bo
ZXJlKCk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnZl
cnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLm5vcm1hbHNOZWVkVXBk
YXRlID0gdHJ1ZTsKIAotICAgIH0gKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
T2JqZWN0LmFzc2lnbiggRXVsZXIucHJvdG90eXBlLCB7CisgICAgICAgIH0sCiAKLSAgICAgICAg
aXNFdWxlcjogdHJ1ZSwKKyAgICAgICAgcm90YXRlWDogZnVuY3Rpb24gKCkgewogCi0gICAgICAg
IHNldDogZnVuY3Rpb24gKCB4LCB5LCB6LCBvcmRlciApIHsKKyAgICAgICAgICAgIC8vIHJvdGF0
ZSBnZW9tZXRyeSBhcm91bmQgd29ybGQgeC1heGlzCiAKLSAgICAgICAgICAgIHRoaXMuX3ggPSB4
OwotICAgICAgICAgICAgdGhpcy5feSA9IHk7Ci0gICAgICAgICAgICB0aGlzLl96ID0gejsKLSAg
ICAgICAgICAgIHRoaXMuX29yZGVyID0gb3JkZXIgfHwgdGhpcy5fb3JkZXI7CisgICAgICAgICAg
ICB2YXIgbTEgPSBuZXcgTWF0cml4NCgpOwogCi0gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2Fs
bGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVYKCBhbmdsZSApIHsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgbTEubWFrZVJvdGF0
aW9uWCggYW5nbGUgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlN
YXRyaXgoIG0xICk7CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj
dG9yKCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96LCB0aGlzLl9vcmRlciApOworICAgICAgICAg
ICAgfTsKIAotICAgICAgICB9LAorICAgICAgICB9KCksCiAKLSAgICAgICAgY29weTogZnVuY3Rp
b24gKCBldWxlciApIHsKKyAgICAgICAgcm90YXRlWTogZnVuY3Rpb24gKCkgewogCi0gICAgICAg
ICAgICB0aGlzLl94ID0gZXVsZXIuX3g7Ci0gICAgICAgICAgICB0aGlzLl95ID0gZXVsZXIuX3k7
Ci0gICAgICAgICAgICB0aGlzLl96ID0gZXVsZXIuX3o7Ci0gICAgICAgICAgICB0aGlzLl9vcmRl
ciA9IGV1bGVyLl9vcmRlcjsKKyAgICAgICAgICAgIC8vIHJvdGF0ZSBnZW9tZXRyeSBhcm91bmQg
d29ybGQgeS1heGlzCiAKLSAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjaygpOworICAg
ICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlWSggYW5nbGUgKSB7CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBtMS5tYWtlUm90YXRpb25ZKCBhbmdsZSApOwogCi0g
ICAgICAgIHNldEZyb21Sb3RhdGlvbk1hdHJpeDogZnVuY3Rpb24gKCBtLCBvcmRlciwgdXBkYXRl
ICkgeworICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7CiAKLSAgICAgICAg
ICAgIHZhciBjbGFtcCA9IF9NYXRoLmNsYW1wOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUg
cm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKQorICAgICAgICAgICAgfTsKIAotICAgICAg
ICAgICAgdmFyIHRlID0gbS5lbGVtZW50czsKLSAgICAgICAgICAgIHZhciBtMTEgPSB0ZVsgMCBd
LCBtMTIgPSB0ZVsgNCBdLCBtMTMgPSB0ZVsgOCBdOwotICAgICAgICAgICAgdmFyIG0yMSA9IHRl
WyAxIF0sIG0yMiA9IHRlWyA1IF0sIG0yMyA9IHRlWyA5IF07Ci0gICAgICAgICAgICB2YXIgbTMx
ID0gdGVbIDIgXSwgbTMyID0gdGVbIDYgXSwgbTMzID0gdGVbIDEwIF07CisgICAgICAgIH0oKSwK
IAotICAgICAgICAgICAgb3JkZXIgPSBvcmRlciB8fCB0aGlzLl9vcmRlcjsKKyAgICAgICAgcm90
YXRlWjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBpZiAoIG9yZGVyID09PSAnWFlaJyAp
IHsKKyAgICAgICAgICAgIC8vIHJvdGF0ZSBnZW9tZXRyeSBhcm91bmQgd29ybGQgei1heGlzCiAK
LSAgICAgICAgICAgICAgICB0aGlzLl95ID0gTWF0aC5hc2luKCBjbGFtcCggbTEzLCAtIDEsIDEg
KSApOworICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAg
ICAgIGlmICggTWF0aC5hYnMoIG0xMyApIDwgMC45OTk5OSApIHsKKyAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiByb3RhdGVaKCBhbmdsZSApIHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll94ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0zMyApOwotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll96ID0gTWF0aC5hdGFuMiggLSBtMTIsIG0xMSApOworICAgICAgICAgICAgICAgIG0xLm1ha2VS
b3RhdGlvblooIGFuZ2xlICk7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5feCA9IE1hdGguYXRhbjIoIG0zMiwgbTIyICk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
X3ogPSAwOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggb3JkZXIgPT09ICdZ
WFonICkgeworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICB0aGlzLl94ID0gTWF0aC5h
c2luKCAtIGNsYW1wKCBtMjMsIC0gMSwgMSApICk7CisgICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTIzICkgPCAwLjk5OTk5
ICkgeworICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGdlb21ldHJ5CiAKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5feSA9IE1hdGguYXRhbjIoIG0xMywgbTMzICk7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCBtMjEsIG0yMiApOworICAgICAgICAgICAgdmFyIG0x
ID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gdHJhbnNsYXRlKCB4LCB5LCB6ICkgewogCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3kgPSBNYXRoLmF0YW4yKCAtIG0zMSwgbTExICk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3ogPSAwOworICAgICAgICAgICAgICAgIG0xLm1ha2VUcmFuc2xhdGlvbigg
eCwgeSwgeiApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuYXBw
bHlNYXRyaXgoIG0xICk7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWlhZ
JyApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIHRo
aXMuX3ggPSBNYXRoLmFzaW4oIGNsYW1wKCBtMzIsIC0gMSwgMSApICk7CisgICAgICAgICAgICB9
OwogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTMyICkgPCAwLjk5OTk5ICkgewor
ICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IE1hdGguYXRhbjIo
IC0gbTMxLCBtMzMgKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feiA9IE1hdGguYXRhbjIo
IC0gbTEyLCBtMjIgKTsKKyAgICAgICAgc2NhbGU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBzY2FsZSBnZW9tZXRyeQogCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3kgPSAwOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl96ID0g
TWF0aC5hdGFuMiggbTIxLCBtMTEgKTsKKyAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXg0
KCk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2Nh
bGUoIHgsIHksIHogKSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWllY
JyApIHsKKyAgICAgICAgICAgICAgICBtMS5tYWtlU2NhbGUoIHgsIHksIHogKTsKIAotICAgICAg
ICAgICAgICAgIHRoaXMuX3kgPSBNYXRoLmFzaW4oIC0gY2xhbXAoIG0zMSwgLSAxLCAxICkgKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOwogCi0gICAgICAgICAgICAg
ICAgaWYgKCBNYXRoLmFicyggbTMxICkgPCAwLjk5OTk5ICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBNYXRoLmF0YW4yKCBt
MzIsIG0zMyApOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0aC5hdGFuMiggbTIx
LCBtMTEgKTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3ogPSBNYXRoLmF0YW4yKCAtIG0xMiwgbTIyICk7CisgICAgICAgIGxv
b2tBdDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IG9iaiA9IG5ldyBPYmplY3QzRCgpOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBvcmRlciA9
PT0gJ1laWCcgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbG9va0F0KCB2ZWN0b3Ig
KSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLl96ID0gTWF0aC5hc2luKCBjbGFtcCggbTIxLCAt
IDEsIDEgKSApOworICAgICAgICAgICAgICAgIG9iai5sb29rQXQoIHZlY3RvciApOwogCi0gICAg
ICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbTIxICkgPCAwLjk5OTk5ICkgeworICAgICAgICAg
ICAgICAgIG9iai51cGRhdGVNYXRyaXgoKTsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLl94
ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0yMiApOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl95
ID0gTWF0aC5hdGFuMiggLSBtMzEsIG0xMSApOworICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlN
YXRyaXgoIG9iai5tYXRyaXggKTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSAwOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl95ID0gTWF0aC5hdGFuMiggbTEzLCBtMzMgKTsKKyAgICAgICAgfSgpLAog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBmcm9tQnVmZmVyR2VvbWV0cnk6IGZ1bmN0aW9u
ICggZ2VvbWV0cnkgKSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIG9yZGVyID09PSAnWFpZ
JyApIHsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICAgICAgICAgICAgICB0
aGlzLl96ID0gTWF0aC5hc2luKCAtIGNsYW1wKCBtMTIsIC0gMSwgMSApICk7CisgICAgICAgICAg
ICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGV4ICE9PSBudWxsID8gZ2VvbWV0cnkuaW5kZXgu
YXJyYXkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5
LmF0dHJpYnV0ZXM7CiAKLSAgICAgICAgICAgICAgICBpZiAoIE1hdGguYWJzKCBtMTIgKSA8IDAu
OTk5OTkgKSB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlv
bi5hcnJheTsKKyAgICAgICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwgIT09
IHVuZGVmaW5lZCA/IGF0dHJpYnV0ZXMubm9ybWFsLmFycmF5IDogdW5kZWZpbmVkOworICAgICAg
ICAgICAgdmFyIGNvbG9ycyA9IGF0dHJpYnV0ZXMuY29sb3IgIT09IHVuZGVmaW5lZCA/IGF0dHJp
YnV0ZXMuY29sb3IuYXJyYXkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICB2YXIgdXZzID0gYXR0
cmlidXRlcy51diAhPT0gdW5kZWZpbmVkID8gYXR0cmlidXRlcy51di5hcnJheSA6IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgIHZhciB1dnMyID0gYXR0cmlidXRlcy51djIgIT09IHVuZGVmaW5lZCA/
IGF0dHJpYnV0ZXMudXYyLmFycmF5IDogdW5kZWZpbmVkOwogCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX3ggPSBNYXRoLmF0YW4yKCBtMzIsIG0yMiApOwotICAgICAgICAgICAgICAgICAgICB0
aGlzLl95ID0gTWF0aC5hdGFuMiggbTEzLCBtMTEgKTsKKyAgICAgICAgICAgIGlmICggdXZzMiAh
PT0gdW5kZWZpbmVkICkgdGhpcy5mYWNlVmVydGV4VXZzWyAxIF0gPSBbXTsKIAotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgdGVtcE5vcm1hbHMgPSBbXTsKKyAgICAg
ICAgICAgIHZhciB0ZW1wVVZzID0gW107CisgICAgICAgICAgICB2YXIgdGVtcFVWczIgPSBbXTsK
IAotICAgICAgICAgICAgICAgICAgICB0aGlzLl94ID0gTWF0aC5hdGFuMiggLSBtMjMsIG0zMyAp
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLl95ID0gMDsKKyAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgaiA9IDA7IGkgPCBwb3NpdGlvbnMubGVuZ3RoOyBpICs9IDMsIGogKz0gMiApIHsK
KworICAgICAgICAgICAgICAgIHNjb3BlLnZlcnRpY2VzLnB1c2goIG5ldyBWZWN0b3IzKCBwb3Np
dGlvbnNbIGkgXSwgcG9zaXRpb25zWyBpICsgMSBdLCBwb3NpdGlvbnNbIGkgKyAyIF0gKSApOwor
CisgICAgICAgICAgICAgICAgaWYgKCBub3JtYWxzICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcE5vcm1hbHMucHVzaCggbmV3IFZlY3RvcjMoIG5vcm1hbHNbIGkg
XSwgbm9ybWFsc1sgaSArIDEgXSwgbm9ybWFsc1sgaSArIDIgXSApICk7CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCBjb2xv
cnMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZ2l2ZW4gdW5zdXBwb3J0ZWQgb3Jk
ZXI6ICcgKyBvcmRlciApOworICAgICAgICAgICAgICAgICAgICBzY29wZS5jb2xvcnMucHVzaCgg
bmV3IENvbG9yKCBjb2xvcnNbIGkgXSwgY29sb3JzWyBpICsgMSBdLCBjb2xvcnNbIGkgKyAyIF0g
KSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0
aGlzLl9vcmRlciA9IG9yZGVyOworICAgICAgICAgICAgICAgIGlmICggdXZzICE9PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgICAgIGlmICggdXBkYXRlICE9PSBmYWxzZSApIHRoaXMub25DaGFu
Z2VDYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICB0ZW1wVVZzLnB1c2goIG5ldyBWZWN0
b3IyKCB1dnNbIGogXSwgdXZzWyBqICsgMSBdICkgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYg
KCB1dnMyICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgc2V0RnJvbVF1YXRlcm5pb246IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcFVWczIucHVzaCggbmV3IFZlY3Rv
cjIoIHV2czJbIGogXSwgdXZzMlsgaiArIDEgXSApICk7CiAKLSAgICAgICAgICAgIHZhciBtYXRy
aXggPSBuZXcgTWF0cml4NCgpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIHNldEZyb21RdWF0ZXJuaW9uKCBxLCBvcmRlciwgdXBkYXRlICkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbWF0cml4Lm1ha2VSb3RhdGlvbkZyb21RdWF0
ZXJuaW9uKCBxICk7CisgICAgICAgICAgICBmdW5jdGlvbiBhZGRGYWNlKCBhLCBiLCBjLCBtYXRl
cmlhbEluZGV4ICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJvbVJvdGF0
aW9uTWF0cml4KCBtYXRyaXgsIG9yZGVyLCB1cGRhdGUgKTsKKyAgICAgICAgICAgICAgICB2YXIg
dmVydGV4Tm9ybWFscyA9IG5vcm1hbHMgIT09IHVuZGVmaW5lZCA/IFsgdGVtcE5vcm1hbHNbIGEg
XS5jbG9uZSgpLCB0ZW1wTm9ybWFsc1sgYiBdLmNsb25lKCksIHRlbXBOb3JtYWxzWyBjIF0uY2xv
bmUoKSBdIDogW107CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleENvbG9ycyA9IGNvbG9ycyAh
PT0gdW5kZWZpbmVkID8gWyBzY29wZS5jb2xvcnNbIGEgXS5jbG9uZSgpLCBzY29wZS5jb2xvcnNb
IGIgXS5jbG9uZSgpLCBzY29wZS5jb2xvcnNbIGMgXS5jbG9uZSgpIF0gOiBbXTsKIAotICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IG5ldyBGYWNlMyggYSwgYiwgYywg
dmVydGV4Tm9ybWFscywgdmVydGV4Q29sb3JzLCBtYXRlcmlhbEluZGV4ICk7CiAKLSAgICAgICAg
fSgpLAorICAgICAgICAgICAgICAgIHNjb3BlLmZhY2VzLnB1c2goIGZhY2UgKTsKIAotICAgICAg
ICBzZXRGcm9tVmVjdG9yMzogZnVuY3Rpb24gKCB2LCBvcmRlciApIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIHV2cyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5z
ZXQoIHYueCwgdi55LCB2LnosIG9yZGVyIHx8IHRoaXMuX29yZGVyICk7CisgICAgICAgICAgICAg
ICAgICAgIHNjb3BlLmZhY2VWZXJ0ZXhVdnNbIDAgXS5wdXNoKCBbIHRlbXBVVnNbIGEgXS5jbG9u
ZSgpLCB0ZW1wVVZzWyBiIF0uY2xvbmUoKSwgdGVtcFVWc1sgYyBdLmNsb25lKCkgXSApOwogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHJlb3JkZXI6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHV2czIgIT09IHVuZGVmaW5lZCApIHsKIAotICAg
ICAgICAgICAgLy8gV0FSTklORzogdGhpcyBkaXNjYXJkcyByZXZvbHV0aW9uIGluZm9ybWF0aW9u
IC1iaG91c3RvbgorICAgICAgICAgICAgICAgICAgICBzY29wZS5mYWNlVmVydGV4VXZzWyAxIF0u
cHVzaCggWyB0ZW1wVVZzMlsgYSBdLmNsb25lKCksIHRlbXBVVnMyWyBiIF0uY2xvbmUoKSwgdGVt
cFVWczJbIGMgXS5jbG9uZSgpIF0gKTsKIAotICAgICAgICAgICAgdmFyIHEgPSBuZXcgUXVhdGVy
bmlvbigpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IHJlb3JkZXIoIG5ld09yZGVyICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
cS5zZXRGcm9tRXVsZXIoIHRoaXMgKTsKKyAgICAgICAgICAgIHZhciBncm91cHMgPSBnZW9tZXRy
eS5ncm91cHM7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlv
biggcSwgbmV3T3JkZXIgKTsKKyAgICAgICAgICAgIGlmICggZ3JvdXBzLmxlbmd0aCA+IDAgKSB7
CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
Z3JvdXBzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAg
ICAgIHZhciBncm91cCA9IGdyb3Vwc1sgaSBdOwogCi0gICAgICAgIGVxdWFsczogZnVuY3Rpb24g
KCBldWxlciApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZ3JvdXAuc3RhcnQ7
CisgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGdyb3VwLmNvdW50OwogCi0gICAgICAg
ICAgICByZXR1cm4gKCBldWxlci5feCA9PT0gdGhpcy5feCApICYmICggZXVsZXIuX3kgPT09IHRo
aXMuX3kgKSAmJiAoIGV1bGVyLl96ID09PSB0aGlzLl96ICkgJiYgKCBldWxlci5fb3JkZXIgPT09
IHRoaXMuX29yZGVyICk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gc3RhcnQs
IGpsID0gc3RhcnQgKyBjb3VudDsgaiA8IGpsOyBqICs9IDMgKSB7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kaWNlcyAhPT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRGYWNlKCBpbmRpY2VzWyBqIF0sIGluZGljZXNbIGogKyAxIF0sIGluZGlj
ZXNbIGogKyAyIF0sIGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKIAotICAgICAgICAgICAgdGhpcy5f
eCA9IGFycmF5WyAwIF07Ci0gICAgICAgICAgICB0aGlzLl95ID0gYXJyYXlbIDEgXTsKLSAgICAg
ICAgICAgIHRoaXMuX3ogPSBhcnJheVsgMiBdOwotICAgICAgICAgICAgaWYgKCBhcnJheVsgMyBd
ICE9PSB1bmRlZmluZWQgKSB0aGlzLl9vcmRlciA9IGFycmF5WyAzIF07CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWNlKCBqLCBqICsgMSwgaiArIDIs
IGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFy
cmF5ID0gW107Ci0gICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQg
XSA9IHRoaXMuX3g7Ci0gICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy5feTsK
LSAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0aGlzLl96OwotICAgICAgICAgICAg
YXJyYXlbIG9mZnNldCArIDMgXSA9IHRoaXMuX29yZGVyOworICAgICAgICAgICAgICAgIGlmICgg
aW5kaWNlcyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBp
ICs9IDMgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZhY2Uo
IGluZGljZXNbIGkgXSwgaW5kaWNlc1sgaSArIDEgXSwgaW5kaWNlc1sgaSArIDIgXSApOwogCi0g
ICAgICAgIHRvVmVjdG9yMzogZnVuY3Rpb24gKCBvcHRpb25hbFJlc3VsdCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG9wdGlvbmFsUmVzdWx0ICkgeworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uYWxS
ZXN1bHQuc2V0KCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl96ICk7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGggLyAzOyBpICs9IDMgKSB7
CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWNl
KCBpLCBpICsgMSwgaSArIDIgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9y
MyggdGhpcy5feCwgdGhpcy5feSwgdGhpcy5feiApOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAg
ICAgICAgdGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKTsKIAotICAgICAgICBvbkNoYW5nZTogZnVu
Y3Rpb24gKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdC
b3ggIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGNh
bGxiYWNrOworICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3Vu
ZGluZ0JveC5jbG9uZSgpOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZ2Vv
bWV0cnkuYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CisKKyAgICAgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nU3BoZXJlID0gZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuY2xvbmUoKTsKKworICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0g
ICAgICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHt9CisgICAgICAgIGNlbnRlcjog
ZnVuY3Rpb24gKCkgewogCi0gICAgfSApOworICAgICAgICAgICAgdmFyIG9mZnNldCA9IG5ldyBW
ZWN0b3IzKCk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRv
b2IuY29tLwotICAgICAqLworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNlbnRlcigpIHsK
IAotICAgIGZ1bmN0aW9uIExheWVycygpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVC
b3VuZGluZ0JveCgpOwogCi0gICAgICAgIHRoaXMubWFzayA9IDEgfCAwOworICAgICAgICAgICAg
ICAgIHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKCBvZmZzZXQgKS5uZWdhdGUoKTsKIAotICAg
IH0KKyAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSggb2Zmc2V0LngsIG9mZnNldC55LCBv
ZmZzZXQueiApOwogCi0gICAgT2JqZWN0LmFzc2lnbiggTGF5ZXJzLnByb3RvdHlwZSwgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHNldDogZnVuY3Rpb24gKCBjaGFu
bmVsICkgeworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5tYXNrID0gMSA8PCBj
aGFubmVsIHwgMDsKKyAgICAgICAgfSgpLAogCi0gICAgICAgIH0sCisgICAgICAgIG5vcm1hbGl6
ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCBjaGFubmVsICkg
eworICAgICAgICAgICAgdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsKIAotICAgICAgICAg
ICAgdGhpcy5tYXNrIHw9IDEgPDwgY2hhbm5lbCB8IDA7CisgICAgICAgICAgICB2YXIgY2VudGVy
ID0gdGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7CisgICAgICAgICAgICB2YXIgcmFkaXVzID0g
dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZh
ciBzID0gcmFkaXVzID09PSAwID8gMSA6IDEuMCAvIHJhZGl1czsKIAotICAgICAgICB0b2dnbGU6
IGZ1bmN0aW9uICggY2hhbm5lbCApIHsKKyAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0
cml4NCgpOworICAgICAgICAgICAgbWF0cml4LnNldCgKKyAgICAgICAgICAgICAgICBzLCAwLCAw
LCAtIHMgKiBjZW50ZXIueCwKKyAgICAgICAgICAgICAgICAwLCBzLCAwLCAtIHMgKiBjZW50ZXIu
eSwKKyAgICAgICAgICAgICAgICAwLCAwLCBzLCAtIHMgKiBjZW50ZXIueiwKKyAgICAgICAgICAg
ICAgICAwLCAwLCAwLCAxCisgICAgICAgICAgICApOwogCi0gICAgICAgICAgICB0aGlzLm1hc2sg
Xj0gMSA8PCBjaGFubmVsIHwgMDsKKyAgICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG1hdHJp
eCApOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAg
IGRpc2FibGU6IGZ1bmN0aW9uICggY2hhbm5lbCApIHsKKyAgICAgICAgY29tcHV0ZUZhY2VOb3Jt
YWxzOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMubWFzayAmPSB+ICggMSA8PCBj
aGFubmVsIHwgMCApOworICAgICAgICAgICAgdmFyIGNiID0gbmV3IFZlY3RvcjMoKSwgYWIgPSBu
ZXcgVmVjdG9yMygpOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBmb3IgKCB2YXIgZiA9IDAs
IGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAgICB0ZXN0
OiBmdW5jdGlvbiAoIGxheWVycyApIHsKKyAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IHRoaXMu
ZmFjZXNbIGYgXTsKIAotICAgICAgICAgICAgcmV0dXJuICggdGhpcy5tYXNrICYgbGF5ZXJzLm1h
c2sgKSAhPT0gMDsKKyAgICAgICAgICAgICAgICB2YXIgdkEgPSB0aGlzLnZlcnRpY2VzWyBmYWNl
LmEgXTsKKyAgICAgICAgICAgICAgICB2YXIgdkIgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmIgXTsK
KyAgICAgICAgICAgICAgICB2YXIgdkMgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmMgXTsKIAotICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY2Iuc3ViVmVjdG9ycyggdkMsIHZCICk7CisgICAgICAg
ICAgICAgICAgYWIuc3ViVmVjdG9ycyggdkEsIHZCICk7CisgICAgICAgICAgICAgICAgY2IuY3Jv
c3MoIGFiICk7CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgY2Iubm9ybWFsaXplKCk7CiAK
LSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAg
ICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCi0gICAgICogQGF1
dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAgKiBAYXV0aG9y
IFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKLSAgICAgKiBAYXV0
aG9yIGVsZXBoYW50YXR3b3JrIC8gd3d3LmVsZXBoYW50YXR3b3JrLmNoCi0gICAgICovCisgICAg
ICAgICAgICAgICAgZmFjZS5ub3JtYWwuY29weSggY2IgKTsKIAotICAgIHZhciBvYmplY3QzRElk
ID0gMDsKKyAgICAgICAgICAgIH0KIAotICAgIGZ1bmN0aW9uIE9iamVjdDNEKCkgeworICAgICAg
ICB9LAogCi0gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1
ZTogb2JqZWN0M0RJZCArKyB9ICk7CisgICAgICAgIGNvbXB1dGVWZXJ0ZXhOb3JtYWxzOiBmdW5j
dGlvbiAoIGFyZWFXZWlnaHRlZCApIHsKIAotICAgICAgICB0aGlzLnV1aWQgPSBfTWF0aC5nZW5l
cmF0ZVVVSUQoKTsKKyAgICAgICAgICAgIGlmICggYXJlYVdlaWdodGVkID09PSB1bmRlZmluZWQg
KSBhcmVhV2VpZ2h0ZWQgPSB0cnVlOwogCi0gICAgICAgIHRoaXMubmFtZSA9ICcnOwotICAgICAg
ICB0aGlzLnR5cGUgPSAnT2JqZWN0M0QnOworICAgICAgICAgICAgdmFyIHYsIHZsLCBmLCBmbCwg
ZmFjZSwgdmVydGljZXM7CiAKLSAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOwotICAgICAgICB0
aGlzLmNoaWxkcmVuID0gW107CisgICAgICAgICAgICB2ZXJ0aWNlcyA9IG5ldyBBcnJheSggdGhp
cy52ZXJ0aWNlcy5sZW5ndGggKTsKIAotICAgICAgICB0aGlzLnVwID0gT2JqZWN0M0QuRGVmYXVs
dFVwLmNsb25lKCk7CisgICAgICAgICAgICBmb3IgKCB2ID0gMCwgdmwgPSB0aGlzLnZlcnRpY2Vz
Lmxlbmd0aDsgdiA8IHZsOyB2ICsrICkgewogCi0gICAgICAgIHZhciBwb3NpdGlvbiA9IG5ldyBW
ZWN0b3IzKCk7Ci0gICAgICAgIHZhciByb3RhdGlvbiA9IG5ldyBFdWxlcigpOwotICAgICAgICB2
YXIgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7Ci0gICAgICAgIHZhciBzY2FsZSA9IG5l
dyBWZWN0b3IzKCAxLCAxLCAxICk7CisgICAgICAgICAgICAgICAgdmVydGljZXNbIHYgXSA9IG5l
dyBWZWN0b3IzKCk7CiAKLSAgICAgICAgZnVuY3Rpb24gb25Sb3RhdGlvbkNoYW5nZSgpIHsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgcXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoIHJvdGF0
aW9uLCBmYWxzZSApOworICAgICAgICAgICAgaWYgKCBhcmVhV2VpZ2h0ZWQgKSB7CiAKLSAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIHZlcnRleCBub3JtYWxzIHdlaWdodGVkIGJ5IHRyaWFu
Z2xlIGFyZWFzCisgICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5pcXVpbGV6bGVzLm9yZy93
d3cvYXJ0aWNsZXMvbm9ybWFscy9ub3JtYWxzLmh0bQogCi0gICAgICAgIGZ1bmN0aW9uIG9uUXVh
dGVybmlvbkNoYW5nZSgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdkEsIHZCLCB2QzsKKyAgICAg
ICAgICAgICAgICB2YXIgY2IgPSBuZXcgVmVjdG9yMygpLCBhYiA9IG5ldyBWZWN0b3IzKCk7CiAK
LSAgICAgICAgICAgIHJvdGF0aW9uLnNldEZyb21RdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLCB1bmRl
ZmluZWQsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgZm9yICggZiA9IDAsIGZsID0gdGhpcy5m
YWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CiAKLSAgICAgICAgcm90YXRpb24ub25DaGFu
Z2UoIG9uUm90YXRpb25DaGFuZ2UgKTsKLSAgICAgICAgcXVhdGVybmlvbi5vbkNoYW5nZSggb25R
dWF0ZXJuaW9uQ2hhbmdlICk7CisgICAgICAgICAgICAgICAgICAgIHZBID0gdGhpcy52ZXJ0aWNl
c1sgZmFjZS5hIF07CisgICAgICAgICAgICAgICAgICAgIHZCID0gdGhpcy52ZXJ0aWNlc1sgZmFj
ZS5iIF07CisgICAgICAgICAgICAgICAgICAgIHZDID0gdGhpcy52ZXJ0aWNlc1sgZmFjZS5jIF07
CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIHRoaXMsIHsKLSAgICAgICAgICAg
IHBvc2l0aW9uOiB7Ci0gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKLSAgICAgICAg
ICAgICAgICB2YWx1ZTogcG9zaXRpb24KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICByb3Rh
dGlvbjogewotICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAg
ICAgdmFsdWU6IHJvdGF0aW9uCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcXVhdGVybmlv
bjogewotICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAg
dmFsdWU6IHF1YXRlcm5pb24KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzY2FsZTogewot
ICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgdmFsdWU6
IHNjYWxlCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgbW9kZWxWaWV3TWF0cml4OiB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXRyaXg0KCkKLSAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBub3JtYWxNYXRyaXg6IHsKLSAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IE1hdHJp
eDMoKQotICAgICAgICAgICAgfQotICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgIGNi
LnN1YlZlY3RvcnMoIHZDLCB2QiApOworICAgICAgICAgICAgICAgICAgICBhYi5zdWJWZWN0b3Jz
KCB2QSwgdkIgKTsKKyAgICAgICAgICAgICAgICAgICAgY2IuY3Jvc3MoIGFiICk7CiAKLSAgICAg
ICAgdGhpcy5tYXRyaXggPSBuZXcgTWF0cml4NCgpOwotICAgICAgICB0aGlzLm1hdHJpeFdvcmxk
ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYSBd
LmFkZCggY2IgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYiBdLmFkZCgg
Y2IgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXNbIGZhY2UuYyBdLmFkZCggY2IgKTsK
IAotICAgICAgICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBPYmplY3QzRC5EZWZhdWx0TWF0cml4
QXV0b1VwZGF0ZTsKLSAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMubGF5ZXJzID0gbmV3IExheWVycygp
OwotICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKIAot
ICAgICAgICB0aGlzLmNhc3RTaGFkb3cgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5yZWNlaXZlU2hh
ZG93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKTsK
IAotICAgICAgICB0aGlzLmZydXN0dW1DdWxsZWQgPSB0cnVlOwotICAgICAgICB0aGlzLnJlbmRl
ck9yZGVyID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2Vz
Lmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewogCi0gICAgICAgIHRoaXMudXNlckRhdGEgPSB7fTsK
LSAgICB9CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CiAKLSAg
ICBPYmplY3QzRC5EZWZhdWx0VXAgPSBuZXcgVmVjdG9yMyggMCwgMSwgMCApOwotICAgIE9iamVj
dDNELkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dmVydGljZXNbIGZhY2UuYSBdLmFkZCggZmFjZS5ub3JtYWwgKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmVydGljZXNbIGZhY2UuYiBdLmFkZCggZmFjZS5ub3JtYWwgKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmVydGljZXNbIGZhY2UuYyBdLmFkZCggZmFjZS5ub3JtYWwgKTsKIAotICAgIE9iamVj
dC5hc3NpZ24oIE9iamVjdDNELnByb3RvdHlwZSwgRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZSwg
eworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBpc09iamVjdDNEOiB0cnVlLAorICAgICAg
ICAgICAgfQogCi0gICAgICAgIG9uQmVmb3JlUmVuZGVyOiBmdW5jdGlvbiAoKSB7fSwKLSAgICAg
ICAgb25BZnRlclJlbmRlcjogZnVuY3Rpb24gKCkge30sCisgICAgICAgICAgICBmb3IgKCB2ID0g
MCwgdmwgPSB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICsrICkgewogCi0gICAgICAg
IGFwcGx5TWF0cml4OiBmdW5jdGlvbiAoIG1hdHJpeCApIHsKKyAgICAgICAgICAgICAgICB2ZXJ0
aWNlc1sgdiBdLm5vcm1hbGl6ZSgpOwogCi0gICAgICAgICAgICB0aGlzLm1hdHJpeC5tdWx0aXBs
eU1hdHJpY2VzKCBtYXRyaXgsIHRoaXMubWF0cml4ICk7CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHRoaXMubWF0cml4LmRlY29tcG9zZSggdGhpcy5wb3NpdGlvbiwgdGhpcy5xdWF0ZXJu
aW9uLCB0aGlzLnNjYWxlICk7CisgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZh
Y2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgZmFjZSA9IHRoaXMuZmFjZXNbIGYgXTsKIAotICAgICAgICBhcHBseVF1YXRlcm5pb246IGZ1
bmN0aW9uICggcSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdmVydGV4Tm9ybWFscyA9IGZhY2Uu
dmVydGV4Tm9ybWFsczsKIAotICAgICAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5
KCBxICk7CisgICAgICAgICAgICAgICAgaWYgKCB2ZXJ0ZXhOb3JtYWxzLmxlbmd0aCA9PT0gMyAp
IHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIHZlcnRl
eE5vcm1hbHNbIDAgXS5jb3B5KCB2ZXJ0aWNlc1sgZmFjZS5hIF0gKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdLmNvcHkoIHZlcnRpY2VzWyBmYWNlLmIgXSApOworICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAyIF0uY29weSggdmVydGljZXNbIGZhY2Uu
YyBdICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
IHNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZTogZnVuY3Rpb24gKCBheGlzLCBhbmdsZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMCBdID0gdmVydGljZXNbIGZhY2UuYSBd
LmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDEgXSA9IHZlcnRp
Y2VzWyBmYWNlLmIgXS5jbG9uZSgpOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxz
WyAyIF0gPSB2ZXJ0aWNlc1sgZmFjZS5jIF0uY2xvbmUoKTsKIAotICAgICAgICAgICAgLy8gYXNz
dW1lcyBheGlzIGlzIG5vcm1hbGl6ZWQKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHRoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApOworICAgICAg
ICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIHRoaXMuZmFjZXMubGVuZ3Ro
ID4gMCApIHsKIAotICAgICAgICBzZXRSb3RhdGlvbkZyb21FdWxlcjogZnVuY3Rpb24gKCBldWxl
ciApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbHNOZWVkVXBkYXRlID0gdHJ1ZTsKIAot
ICAgICAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlciggZXVsZXIsIHRydWUgKTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICB9LAogCi0gICAgICAgIHNldFJvdGF0aW9uRnJvbU1h
dHJpeDogZnVuY3Rpb24gKCBtICkgeworICAgICAgICBjb21wdXRlRmxhdFZlcnRleE5vcm1hbHM6
IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9m
IG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZCkKKyAgICAgICAgICAg
IHZhciBmLCBmbCwgZmFjZTsKIAotICAgICAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21S
b3RhdGlvbk1hdHJpeCggbSApOworICAgICAgICAgICAgdGhpcy5jb21wdXRlRmFjZU5vcm1hbHMo
KTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgZm9yICggZiA9IDAsIGZsID0gdGhpcy5mYWNl
cy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAgICBzZXRSb3RhdGlvbkZyb21RdWF0
ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7CisgICAgICAgICAgICAgICAgZmFjZSA9IHRoaXMuZmFj
ZXNbIGYgXTsKIAotICAgICAgICAgICAgLy8gYXNzdW1lcyBxIGlzIG5vcm1hbGl6ZWQKKyAgICAg
ICAgICAgICAgICB2YXIgdmVydGV4Tm9ybWFscyA9IGZhY2UudmVydGV4Tm9ybWFsczsKIAotICAg
ICAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLmNvcHkoIHEgKTsKKyAgICAgICAgICAgICAgICBpZiAo
IHZlcnRleE5vcm1hbHMubGVuZ3RoID09PSAzICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDAgXS5jb3B5KCBmYWNlLm5vcm1hbCApOworICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAxIF0uY29weSggZmFjZS5ub3JtYWwgKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMiBdLmNvcHkoIGZhY2Uubm9ybWFsICk7
CiAKLSAgICAgICAgcm90YXRlT25BeGlzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKIAotICAgICAgICAgICAgLy8gcm90YXRlIG9iamVjdCBvbiBheGlzIGluIG9iamVj
dCBzcGFjZQotICAgICAgICAgICAgLy8gYXhpcyBpcyBhc3N1bWVkIHRvIGJlIG5vcm1hbGl6ZWQK
KyAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMCBdID0gZmFjZS5ub3JtYWwuY2xv
bmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdID0gZmFjZS5ub3Jt
YWwuY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMiBdID0gZmFj
ZS5ub3JtYWwuY2xvbmUoKTsKIAotICAgICAgICAgICAgdmFyIHExID0gbmV3IFF1YXRlcm5pb24o
KTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3Rh
dGVPbkF4aXMoIGF4aXMsIGFuZ2xlICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgcTEuc2V0RnJvbUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKTsKKyAgICAgICAgICAgIGlmICgg
dGhpcy5mYWNlcy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5xdWF0ZXJu
aW9uLm11bHRpcGx5KCBxMSApOworICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsc05lZWRVcGRh
dGUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIH07CisgICAgICAgIH0sCiAKLSAgICAgICAgfSgpLAorICAgICAgICBj
b21wdXRlTW9ycGhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgcm90YXRlWDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIGksIGlsLCBmLCBmbCwgZmFjZTsKIAotICAgICAg
ICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoIDEsIDAsIDAgKTsKKyAgICAgICAgICAgIC8vIHNh
dmUgb3JpZ2luYWwgbm9ybWFscworICAgICAgICAgICAgLy8gLSBjcmVhdGUgdGVtcCB2YXJpYWJs
ZXMgb24gZmlyc3QgYWNjZXNzCisgICAgICAgICAgICAvLyAgIG90aGVyd2lzZSBqdXN0IGNvcHkg
KGZvciBmYXN0ZXIgcmVwZWF0ZWQgY2FsbHMpCiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biByb3RhdGVYKCBhbmdsZSApIHsKKyAgICAgICAgICAgIGZvciAoIGYgPSAwLCBmbCA9IHRoaXMu
ZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5yb3RhdGVPbkF4aXMoIHYxLCBhbmdsZSApOworICAgICAgICAgICAgICAgIGZhY2UgPSB0
aGlzLmZhY2VzWyBmIF07CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKCAh
IGZhY2UuX19vcmlnaW5hbEZhY2VOb3JtYWwgKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAg
ICAgICAgICAgICBmYWNlLl9fb3JpZ2luYWxGYWNlTm9ybWFsID0gZmFjZS5ub3JtYWwuY2xvbmUo
KTsKIAotICAgICAgICByb3RhdGVZOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoIDAsIDEsIDAgKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmFjZS5fX29yaWdpbmFsRmFjZU5vcm1hbC5jb3B5KCBmYWNlLm5v
cm1hbCApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlWSggYW5nbGUgKSB7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm90YXRl
T25BeGlzKCB2MSwgYW5nbGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoICEgZmFjZS5fX29yaWdp
bmFsVmVydGV4Tm9ybWFscyApIGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHMgPSBbXTsKIAot
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBmYWNlLnZl
cnRleE5vcm1hbHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgfSgpLAorICAg
ICAgICAgICAgICAgICAgICBpZiAoICEgZmFjZS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1sgaSBd
ICkgewogCi0gICAgICAgIHJvdGF0ZVo6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHNbIGkgXSA9IGZhY2UudmVydGV4Tm9y
bWFsc1sgaSBdLmNsb25lKCk7CiAKLSAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCAw
LCAwLCAxICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiByb3RhdGVaKCBhbmdsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHNbIGkgXS5jb3B5KCBmYWNlLnZlcnRleE5vcm1h
bHNbIGkgXSApOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm90YXRlT25BeGlzKCB2
MSwgYW5nbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICB9KCksCisgICAgICAgICAgICB9CiAKLSAgICAgICAg
dHJhbnNsYXRlT25BeGlzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyB1c2UgdGVtcCBn
ZW9tZXRyeSB0byBjb21wdXRlIGZhY2UgYW5kIHZlcnRleCBub3JtYWxzIGZvciBlYWNoIG1vcnBo
CiAKLSAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSBvYmplY3QgYnkgZGlzdGFuY2UgYWxvbmcgYXhp
cyBpbiBvYmplY3Qgc3BhY2UKLSAgICAgICAgICAgIC8vIGF4aXMgaXMgYXNzdW1lZCB0byBiZSBu
b3JtYWxpemVkCisgICAgICAgICAgICB2YXIgdG1wR2VvID0gbmV3IEdlb21ldHJ5KCk7CisgICAg
ICAgICAgICB0bXBHZW8uZmFjZXMgPSB0aGlzLmZhY2VzOwogCi0gICAgICAgICAgICB2YXIgdjEg
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy5tb3Jw
aFRhcmdldHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiB0cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgeworICAgICAgICAgICAg
ICAgIC8vIGNyZWF0ZSBvbiBmaXJzdCBhY2Nlc3MKIAotICAgICAgICAgICAgICAgIHYxLmNvcHko
IGF4aXMgKS5hcHBseVF1YXRlcm5pb24oIHRoaXMucXVhdGVybmlvbiApOworICAgICAgICAgICAg
ICAgIGlmICggISB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdICkgewogCi0gICAgICAgICAgICAgICAg
dGhpcy5wb3NpdGlvbi5hZGQoIHYxLm11bHRpcGx5U2NhbGFyKCBkaXN0YW5jZSApICk7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMubW9ycGhOb3JtYWxzWyBpIF0gPSB7fTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHNbIGkgXS5mYWNlTm9ybWFscyA9IFtdOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdLnZlcnRleE5vcm1hbHMgPSBbXTsK
IAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICB2YXIg
ZHN0Tm9ybWFsc0ZhY2UgPSB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzOworICAg
ICAgICAgICAgICAgICAgICB2YXIgZHN0Tm9ybWFsc1ZlcnRleCA9IHRoaXMubW9ycGhOb3JtYWxz
WyBpIF0udmVydGV4Tm9ybWFsczsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGZhY2VOb3JtYWwsIHZlcnRleE5vcm1hbHM7CiAKLSAgICAgICAgfSgpLAorICAgICAg
ICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZs
OyBmICsrICkgewogCi0gICAgICAgIHRyYW5zbGF0ZVg6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZhY2VOb3JtYWwgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmVydGV4Tm9ybWFscyA9IHsgYTogbmV3IFZlY3RvcjMoKSwgYjogbmV3IFZl
Y3RvcjMoKSwgYzogbmV3IFZlY3RvcjMoKSB9OwogCi0gICAgICAgICAgICB2YXIgdjEgPSBuZXcg
VmVjdG9yMyggMSwgMCwgMCApOworICAgICAgICAgICAgICAgICAgICAgICAgZHN0Tm9ybWFsc0Zh
Y2UucHVzaCggZmFjZU5vcm1hbCApOworICAgICAgICAgICAgICAgICAgICAgICAgZHN0Tm9ybWFs
c1ZlcnRleC5wdXNoKCB2ZXJ0ZXhOb3JtYWxzICk7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiB0cmFuc2xhdGVYKCBkaXN0YW5jZSApIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKCB2MSwgZGlzdGFuY2Ug
KTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
dmFyIG1vcnBoTm9ybWFscyA9IHRoaXMubW9ycGhOb3JtYWxzWyBpIF07CiAKLSAgICAgICAgfSgp
LAorICAgICAgICAgICAgICAgIC8vIHNldCB2ZXJ0aWNlcyB0byBtb3JwaCB0YXJnZXQKIAotICAg
ICAgICB0cmFuc2xhdGVZOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdG1wR2VvLnZl
cnRpY2VzID0gdGhpcy5tb3JwaFRhcmdldHNbIGkgXS52ZXJ0aWNlczsKIAotICAgICAgICAgICAg
dmFyIHYxID0gbmV3IFZlY3RvcjMoIDAsIDEsIDAgKTsKKyAgICAgICAgICAgICAgICAvLyBjb21w
dXRlIG1vcnBoIG5vcm1hbHMKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zbGF0
ZVkoIGRpc3RhbmNlICkgeworICAgICAgICAgICAgICAgIHRtcEdlby5jb21wdXRlRmFjZU5vcm1h
bHMoKTsKKyAgICAgICAgICAgICAgICB0bXBHZW8uY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKIAot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyggdjEsIGRpc3RhbmNl
ICk7CisgICAgICAgICAgICAgICAgLy8gc3RvcmUgbW9ycGggbm9ybWFscwogCi0gICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIHZhciBmYWNlTm9ybWFsLCB2ZXJ0ZXhOb3JtYWxzOwogCi0g
ICAgICAgIH0oKSwKKyAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2Vz
Lmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewogCi0gICAgICAgIHRyYW5zbGF0ZVo6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHRoaXMuZmFjZXNbIGYgXTsKIAotICAg
ICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoIDAsIDAsIDEgKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmFjZU5vcm1hbCA9IG1vcnBoTm9ybWFscy5mYWNlTm9ybWFsc1sgZiBdOworICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzID0gbW9ycGhOb3JtYWxzLnZlcnRleE5vcm1hbHNb
IGYgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zbGF0ZVooIGRpc3RhbmNl
ICkgeworICAgICAgICAgICAgICAgICAgICBmYWNlTm9ybWFsLmNvcHkoIGZhY2Uubm9ybWFsICk7
CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoIHYxLCBkaXN0
YW5jZSApOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzLmEuY29weSggZmFjZS52
ZXJ0ZXhOb3JtYWxzWyAwIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFscy5i
LmNvcHkoIGZhY2UudmVydGV4Tm9ybWFsc1sgMSBdICk7CisgICAgICAgICAgICAgICAgICAgIHZl
cnRleE5vcm1hbHMuYy5jb3B5KCBmYWNlLnZlcnRleE5vcm1hbHNbIDIgXSApOwogCi0gICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9KCksCisgICAgICAgICAgICB9
CiAKLSAgICAgICAgbG9jYWxUb1dvcmxkOiBmdW5jdGlvbiAoIHZlY3RvciApIHsKKyAgICAgICAg
ICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbm9ybWFscwogCi0gICAgICAgICAgICByZXR1cm4gdmVj
dG9yLmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAgZm9yICgg
ZiA9IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CiAKLSAgICAgICAg
d29ybGRUb0xvY2FsOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgZmFjZS5ub3JtYWwg
PSBmYWNlLl9fb3JpZ2luYWxGYWNlTm9ybWFsOworICAgICAgICAgICAgICAgIGZhY2UudmVydGV4
Tm9ybWFscyA9IGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHM7CiAKLSAgICAgICAgICAgIHZh
ciBtMSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiB3b3JsZFRvTG9jYWwoIHZlY3RvciApIHsKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtMS5nZXRJbnZlcnNlKCB0aGlz
Lm1hdHJpeFdvcmxkICkgKTsKKyAgICAgICAgY29tcHV0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAo
KSB7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdCb3gg
PT09IG51bGwgKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgIHRoaXMuYm91bmRp
bmdCb3ggPSBuZXcgQm94MygpOwogCi0gICAgICAgIGxvb2tBdDogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0
IG9iamVjdHMgd2l0aCByb3RhdGVkIGFuZC9vciB0cmFuc2xhdGVkIHBhcmVudChzKQorICAgICAg
ICAgICAgdGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tUG9pbnRzKCB0aGlzLnZlcnRpY2VzICk7CiAK
LSAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBsb29rQXQoIHZlY3RvciApIHsKKyAgICAgICAgY29tcHV0
ZUJvdW5kaW5nU3BoZXJlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRo
aXMuaXNDYW1lcmEgKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgPT09
IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgbTEubG9va0F0KCB0aGlzLnBvc2l0aW9u
LCB2ZWN0b3IsIHRoaXMudXAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJl
ID0gbmV3IFNwaGVyZSgpOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICBtMS5sb29rQXQoIHZlY3RvciwgdGhpcy5wb3NpdGlv
biwgdGhpcy51cCApOworICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9p
bnRzKCB0aGlzLnZlcnRpY2VzICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgICAgICB0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KCBt
MSApOworICAgICAgICBtZXJnZTogZnVuY3Rpb24gKCBnZW9tZXRyeSwgbWF0cml4LCBtYXRlcmlh
bEluZGV4T2Zmc2V0ICkgewogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKCAhICgg
Z2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNHZW9tZXRyeSApICkgewogCi0gICAgICAgIH0oKSwKLQot
ICAgICAgICBhZGQ6IGZ1bmN0aW9uICggb2JqZWN0ICkgeworICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5HZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFu
Y2Ugb2YgVEhSRUUuR2VvbWV0cnkuJywgZ2VvbWV0cnkgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDEgKSB7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMu
bGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCwKKyAgICAgICAg
ICAgICAgICB2ZXJ0ZXhPZmZzZXQgPSB0aGlzLnZlcnRpY2VzLmxlbmd0aCwKKyAgICAgICAgICAg
ICAgICB2ZXJ0aWNlczEgPSB0aGlzLnZlcnRpY2VzLAorICAgICAgICAgICAgICAgIHZlcnRpY2Vz
MiA9IGdlb21ldHJ5LnZlcnRpY2VzLAorICAgICAgICAgICAgICAgIGZhY2VzMSA9IHRoaXMuZmFj
ZXMsCisgICAgICAgICAgICAgICAgZmFjZXMyID0gZ2VvbWV0cnkuZmFjZXMsCisgICAgICAgICAg
ICAgICAgdXZzMSA9IHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdLAorICAgICAgICAgICAgICAgIHV2
czIgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWyAwIF0sCisgICAgICAgICAgICAgICAgY29sb3Jz
MSA9IHRoaXMuY29sb3JzLAorICAgICAgICAgICAgICAgIGNvbG9yczIgPSBnZW9tZXRyeS5jb2xv
cnM7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQoIGFyZ3VtZW50c1sgaSBdICk7Cisg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsSW5kZXhPZmZzZXQgPT09IHVuZGVmaW5lZCApIG1hdGVy
aWFsSW5kZXhPZmZzZXQgPSAwOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCBtYXRyaXggIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgICAgIG5vcm1hbE1hdHJpeCA9IG5ldyBNYXRyaXgzKCkuZ2V0Tm9ybWFs
TWF0cml4KCBtYXRyaXggKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG9i
amVjdCA9PT0gdGhpcyApIHsKLQotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICJUSFJF
RS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2Vs
Zi4iLCBvYmplY3QgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
IC8vIHZlcnRpY2VzCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgaWwgPSB2ZXJ0aWNlczIubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
IGlmICggKCBvYmplY3QgJiYgb2JqZWN0LmlzT2JqZWN0M0QgKSApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgdmVydGV4ID0gdmVydGljZXMyWyBpIF07CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9i
amVjdC5wYXJlbnQgIT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgdmFyIHZlcnRleENvcHkg
PSB2ZXJ0ZXguY2xvbmUoKTsKIAotICAgICAgICAgICAgICAgICAgICBvYmplY3QucGFyZW50LnJl
bW92ZSggb2JqZWN0ICk7CisgICAgICAgICAgICAgICAgaWYgKCBtYXRyaXggIT09IHVuZGVmaW5l
ZCApIHZlcnRleENvcHkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2ZXJ0aWNlczEucHVzaCggdmVydGV4Q29weSApOwogCi0gICAg
ICAgICAgICAgICAgb2JqZWN0LnBhcmVudCA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgb2JqZWN0
LmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2FkZGVkJyB9ICk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goIG9iamVjdCApOworICAgICAgICAgICAg
Ly8gY29sb3JzCiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGlsID0gY29sb3JzMi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoICJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4g
aW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIiwgb2JqZWN0ICk7CisgICAgICAgICAgICAgICAg
Y29sb3JzMS5wdXNoKCBjb2xvcnMyWyBpIF0uY2xvbmUoKSApOwogCiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgLy8gZmFjZXMKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gZmFjZXMyLmxlbmd0aDsgaSA8IGls
OyBpICsrICkgewogCi0gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCBvYmplY3QgKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGZhY2UgPSBmYWNlczJbIGkgXSwgZmFjZUNvcHksIG5vcm1hbCwgY29s
b3IsCisgICAgICAgICAgICAgICAgICAgIGZhY2VWZXJ0ZXhOb3JtYWxzID0gZmFjZS52ZXJ0ZXhO
b3JtYWxzLAorICAgICAgICAgICAgICAgICAgICBmYWNlVmVydGV4Q29sb3JzID0gZmFjZS52ZXJ0
ZXhDb2xvcnM7CiAKLSAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDEgKSB7Cisg
ICAgICAgICAgICAgICAgZmFjZUNvcHkgPSBuZXcgRmFjZTMoIGZhY2UuYSArIHZlcnRleE9mZnNl
dCwgZmFjZS5iICsgdmVydGV4T2Zmc2V0LCBmYWNlLmMgKyB2ZXJ0ZXhPZmZzZXQgKTsKKyAgICAg
ICAgICAgICAgICBmYWNlQ29weS5ub3JtYWwuY29weSggZmFjZS5ub3JtYWwgKTsKIAotICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKysgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBub3JtYWxNYXRyaXggIT09IHVuZGVmaW5lZCApIHsKIAot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSggYXJndW1lbnRzWyBpIF0gKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFjZUNvcHkubm9ybWFsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4
ICkubm9ybWFsaXplKCk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGpsID0gZmFjZVZl
cnRleE5vcm1hbHMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgbm9ybWFsID0gZmFjZVZlcnRleE5vcm1hbHNbIGogXS5jbG9uZSgp
OwogCi0gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoIG9iamVj
dCApOworICAgICAgICAgICAgICAgICAgICBpZiAoIG5vcm1hbE1hdHJpeCAhPT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICBpZiAoIGluZGV4ICE9PSAtIDEgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub3JtYWwuYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUo
KTsKIAotICAgICAgICAgICAgICAgIG9iamVjdC5wYXJlbnQgPSBudWxsOworICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBvYmplY3QuZGlzcGF0Y2hFdmVudCggeyB0eXBl
OiAncmVtb3ZlZCcgfSApOworICAgICAgICAgICAgICAgICAgICBmYWNlQ29weS52ZXJ0ZXhOb3Jt
YWxzLnB1c2goIG5vcm1hbCApOwogCi0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxp
Y2UoIGluZGV4LCAxICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZmFjZUNvcHkuY29sb3IuY29weSggZmFjZS5jb2xvciApOwogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGpsID0g
ZmFjZVZlcnRleENvbG9ycy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGZhY2VWZXJ0ZXhDb2xvcnNbIGogXTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFjZUNvcHkudmVydGV4Q29sb3JzLnB1c2goIGNvbG9yLmNsb25lKCkg
KTsKIAotICAgICAgICBnZXRPYmplY3RCeUlkOiBmdW5jdGlvbiAoIGlkICkgeworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgg
J2lkJywgaWQgKTsKKyAgICAgICAgICAgICAgICBmYWNlQ29weS5tYXRlcmlhbEluZGV4ID0gZmFj
ZS5tYXRlcmlhbEluZGV4ICsgbWF0ZXJpYWxJbmRleE9mZnNldDsKIAotICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIGZhY2VzMS5wdXNoKCBmYWNlQ29weSApOwogCi0gICAgICAgIGdldE9iamVj
dEJ5TmFtZTogZnVuY3Rpb24gKCBuYW1lICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCAnbmFtZScsIG5hbWUgKTsKKyAgICAg
ICAgICAgIC8vIHV2cwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwg
PSB1dnMyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgIGdldE9iamVjdEJ5UHJv
cGVydHk6IGZ1bmN0aW9uICggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIHV2
ID0gdXZzMlsgaSBdLCB1dkNvcHkgPSBbXTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzWyBuYW1l
IF0gPT09IHZhbHVlICkgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgaWYgKCB1diA9PT0g
dW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmNo
aWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlblsgaSBdOwot
ICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSBjaGlsZC5nZXRPYmplY3RCeVByb3BlcnR5KCBu
YW1lLCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICgg
b2JqZWN0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAw
LCBqbCA9IHV2Lmxlbmd0aDsgaiA8IGpsOyBqICsrICkgewogCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICAgICAgICAgIHV2Q29weS5wdXNoKCB1dlsgaiBd
LmNsb25lKCkgKTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHV2czEucHVzaCggdXZDb3B5ICk7CiAKLSAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CisgICAgICAgICAgICB9CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRXb3JsZFBv
c2l0aW9uOiBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICBtZXJnZU1lc2g6
IGZ1bmN0aW9uICggbWVzaCApIHsKIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFs
VGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICBpZiAoICEgKCBtZXNoICYmIG1l
c2guaXNNZXNoICkgKSB7CiAKLSAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4V29ybGQoIHRy
dWUgKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuR2VvbWV0cnkubWVy
Z2VNZXNoKCk6IG1lc2ggbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk1lc2guJywgbWVzaCApOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXRG
cm9tTWF0cml4UG9zaXRpb24oIHRoaXMubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCBtZXNoLm1hdHJpeEF1dG9VcGRhdGUgKSBtZXNo
LnVwZGF0ZU1hdHJpeCgpOwogCi0gICAgICAgIGdldFdvcmxkUXVhdGVybmlvbjogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdGhpcy5tZXJnZSggbWVzaC5nZW9tZXRyeSwgbWVzaC5tYXRyaXgg
KTsKIAotICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAg
ICAgIHZhciBzY2FsZSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbiBnZXRXb3JsZFF1YXRlcm5pb24oIG9wdGlvbmFsVGFyZ2V0ICkgewor
ICAgICAgICAvKgorICAgICAgICAgKiBDaGVja3MgZm9yIGR1cGxpY2F0ZSB2ZXJ0aWNlcyB3aXRo
IGhhc2htYXAuCisgICAgICAgICAqIER1cGxpY2F0ZWQgdmVydGljZXMgYXJlIHJlbW92ZWQKKyAg
ICAgICAgICogYW5kIGZhY2VzJyB2ZXJ0aWNlcyBhcmUgdXBkYXRlZC4KKyAgICAgICAgICovCiAK
LSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFF1YXRl
cm5pb24oKTsKKyAgICAgICAgbWVyZ2VWZXJ0aWNlczogZnVuY3Rpb24gKCkgewogCi0gICAgICAg
ICAgICAgICAgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApOworICAgICAgICAgICAgdmFy
IHZlcnRpY2VzTWFwID0ge307IC8vIEhhc2htYXAgZm9yIGxvb2tpbmcgdXAgdmVydGljZXMgYnkg
cG9zaXRpb24gY29vcmRpbmF0ZXMgKGFuZCBtYWtpbmcgc3VyZSB0aGV5IGFyZSB1bmlxdWUpCisg
ICAgICAgICAgICB2YXIgdW5pcXVlID0gW10sIGNoYW5nZXMgPSBbXTsKIAotICAgICAgICAgICAg
ICAgIHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKCBwb3NpdGlvbiwgcmVzdWx0LCBzY2FsZSAp
OworICAgICAgICAgICAgdmFyIHYsIGtleTsKKyAgICAgICAgICAgIHZhciBwcmVjaXNpb25Qb2lu
dHMgPSA0OyAvLyBudW1iZXIgb2YgZGVjaW1hbCBwb2ludHMsIGUuZy4gNCBmb3IgZXBzaWxvbiBv
ZiAwLjAwMDEKKyAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBNYXRoLnBvdyggMTAsIHByZWNp
c2lvblBvaW50cyApOworICAgICAgICAgICAgdmFyIGksIGlsLCBmYWNlOworICAgICAgICAgICAg
dmFyIGluZGljZXMsIGosIGpsOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHRoaXMudmVydGljZXMubGVuZ3RoOyBpIDwgaWw7
IGkgKysgKSB7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdiA9IHRoaXMudmVy
dGljZXNbIGkgXTsKKyAgICAgICAgICAgICAgICBrZXkgPSBNYXRoLnJvdW5kKCB2LnggKiBwcmVj
aXNpb24gKSArICdfJyArIE1hdGgucm91bmQoIHYueSAqIHByZWNpc2lvbiApICsgJ18nICsgTWF0
aC5yb3VuZCggdi56ICogcHJlY2lzaW9uICk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAg
ICAgIGlmICggdmVydGljZXNNYXBbIGtleSBdID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAg
Z2V0V29ybGRSb3RhdGlvbjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB2ZXJ0
aWNlc01hcFsga2V5IF0gPSBpOworICAgICAgICAgICAgICAgICAgICB1bmlxdWUucHVzaCggdGhp
cy52ZXJ0aWNlc1sgaSBdICk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNbIGkgXSA9IHVu
aXF1ZS5sZW5ndGggLSAxOwogCi0gICAgICAgICAgICB2YXIgcXVhdGVybmlvbiA9IG5ldyBRdWF0
ZXJuaW9uKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uIGdldFdvcmxkUm90YXRpb24oIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAg
ICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdEdXBsaWNhdGUgdmVydGV4IGZvdW5kLiAnLCBpLCAn
IGNvdWxkIGJlIHVzaW5nICcsIHZlcnRpY2VzTWFwW2tleV0pOworICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VzWyBpIF0gPSBjaGFuZ2VzWyB2ZXJ0aWNlc01hcFsga2V5IF0gXTsKIAotICAgICAg
ICAgICAgICAgIHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgRXVsZXIoKTsKKyAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmdldFdvcmxkUXVhdGVybmlv
biggcXVhdGVybmlvbiApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5zZXRGcm9tUXVhdGVybmlvbiggcXVhdGVybmlvbiwgdGhpcy5yb3RhdGlvbi5vcmRl
ciwgZmFsc2UgKTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIGlmIGZhY2VzIGFy
ZSBjb21wbGV0ZWx5IGRlZ2VuZXJhdGUgYWZ0ZXIgbWVyZ2luZyB2ZXJ0aWNlcywgd2UKKyAgICAg
ICAgICAgIC8vIGhhdmUgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZ2VvbWV0cnkuCisgICAgICAg
ICAgICB2YXIgZmFjZUluZGljZXNUb1JlbW92ZSA9IFtdOwogCi0gICAgICAgIH0oKSwKKyAgICAg
ICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHRoaXMuZmFjZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysg
KSB7CiAKLSAgICAgICAgZ2V0V29ybGRTY2FsZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBpIF07CiAKLSAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9
IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJu
aW9uKCk7CisgICAgICAgICAgICAgICAgZmFjZS5hID0gY2hhbmdlc1sgZmFjZS5hIF07CisgICAg
ICAgICAgICAgICAgZmFjZS5iID0gY2hhbmdlc1sgZmFjZS5iIF07CisgICAgICAgICAgICAgICAg
ZmFjZS5jID0gY2hhbmdlc1sgZmFjZS5jIF07CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBnZXRXb3JsZFNjYWxlKCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAgICAgICBpbmRp
Y2VzID0gWyBmYWNlLmEsIGZhY2UuYiwgZmFjZS5jIF07CiAKLSAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAg
ICAvLyBpZiBhbnkgZHVwbGljYXRlIHZlcnRpY2VzIGFyZSBmb3VuZCBpbiBhIEZhY2UzCisgICAg
ICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byByZW1vdmUgdGhlIGZhY2UgYXMgbm90aGluZyBjYW4g
YmUgc2F2ZWQKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbiA9IDA7IG4gPCAzOyBuICsrICkg
ewogCi0gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaXhXb3JsZCggdHJ1ZSApOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIGluZGljZXNbIG4gXSA9PT0gaW5kaWNlc1sgKCBuICsgMSAp
ICUgMyBdICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uo
IHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCByZXN1bHQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZhY2VJbmRpY2VzVG9SZW1vdmUucHVzaCggaSApOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0o
KSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBnZXRXb3JsZERpcmVjdGlvbjogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgZm9yICggaSA9IGZhY2VJbmRpY2VzVG9SZW1vdmUubGVuZ3RoIC0g
MTsgaSA+PSAwOyBpIC0tICkgewogCi0gICAgICAgICAgICB2YXIgcXVhdGVybmlvbiA9IG5ldyBR
dWF0ZXJuaW9uKCk7CisgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZhY2VJbmRpY2VzVG9SZW1v
dmVbIGkgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldFdvcmxkRGlyZWN0aW9u
KCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmZhY2VzLnNwbGljZSgg
aWR4LCAxICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQg
fHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKCBqID0gMCwgamwgPSB0aGlz
LmZhY2VWZXJ0ZXhVdnMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAg
ICB0aGlzLmdldFdvcmxkUXVhdGVybmlvbiggcXVhdGVybmlvbiApOworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmZhY2VWZXJ0ZXhVdnNbIGogXS5zcGxpY2UoIGlkeCwgMSApOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXQoIDAsIDAsIDEgKS5hcHBseVF1YXRlcm5pb24oIHF1
YXRlcm5pb24gKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgLy8gVXNlIHVuaXF1ZSBzZXQgb2Yg
dmVydGljZXMKIAotICAgICAgICByYXljYXN0OiBmdW5jdGlvbiAoKSB7fSwKKyAgICAgICAgICAg
IHZhciBkaWZmID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGggLSB1bmlxdWUubGVuZ3RoOworICAgICAg
ICAgICAgdGhpcy52ZXJ0aWNlcyA9IHVuaXF1ZTsKKyAgICAgICAgICAgIHJldHVybiBkaWZmOwog
Ci0gICAgICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgeworICAgICAgICB9LAog
Ci0gICAgICAgICAgICBjYWxsYmFjayggdGhpcyApOworICAgICAgICBzZXRGcm9tUG9pbnRzOiBm
dW5jdGlvbiAoIHBvaW50cyApIHsKIAotICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5j
aGlsZHJlbjsKKyAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSBbXTsKIAotICAgICAgICAgICAg
Zm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsr
ICkgewogCi0gICAgICAgICAgICAgICAgY2hpbGRyZW5bIGkgXS50cmF2ZXJzZSggY2FsbGJhY2sg
KTsKKyAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwb2ludHNbIGkgXTsKKyAgICAgICAgICAg
ICAgICB0aGlzLnZlcnRpY2VzLnB1c2goIG5ldyBWZWN0b3IzKCBwb2ludC54LCBwb2ludC55LCBw
b2ludC56IHx8IDAgKSApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHRyYXZlcnNlVmlzaWJsZTogZnVuY3Rpb24gKCBj
YWxsYmFjayApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnZpc2libGUg
PT09IGZhbHNlICkgcmV0dXJuOworICAgICAgICBzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgY2FsbGJhY2soIHRoaXMgKTsKKyAgICAgICAgICAg
IHZhciBmYWNlcyA9IHRoaXMuZmFjZXM7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gZmFjZXMu
bGVuZ3RoOwogCi0gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOworICAg
ICAgICAgICAgLy8gdGFnIGZhY2VzCiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9
IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICBjaGlsZHJlblsg
aSBdLnRyYXZlcnNlVmlzaWJsZSggY2FsbGJhY2sgKTsKKyAgICAgICAgICAgICAgICBmYWNlc1sg
aSBdLl9pZCA9IGk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAg
Ly8gc29ydCBmYWNlcwogCi0gICAgICAgIHRyYXZlcnNlQW5jZXN0b3JzOiBmdW5jdGlvbiAoIGNh
bGxiYWNrICkgeworICAgICAgICAgICAgZnVuY3Rpb24gbWF0ZXJpYWxJbmRleFNvcnQoIGEsIGIg
KSB7CiAKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYS5tYXRlcmlhbEluZGV4IC0gYi5tYXRlcmlhbEluZGV4OwogCi0gICAgICAg
ICAgICBpZiAoIHBhcmVudCAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCBwYXJlbnQgKTsKKyAgICAgICAgICAgIGZhY2VzLnNvcnQoIG1hdGVy
aWFsSW5kZXhTb3J0ICk7CiAKLSAgICAgICAgICAgICAgICBwYXJlbnQudHJhdmVyc2VBbmNlc3Rv
cnMoIGNhbGxiYWNrICk7CisgICAgICAgICAgICAvLyBzb3J0IHV2cwogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgdXZzMSA9IHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdOworICAgICAg
ICAgICAgdmFyIHV2czIgPSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDEgXTsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgdmFyIG5ld1V2czEsIG5ld1V2czI7CiAKLSAgICAgICAgdXBkYXRlTWF0cml4
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIHV2czEgJiYgdXZzMS5sZW5ndGggPT09
IGxlbmd0aCApIG5ld1V2czEgPSBbXTsKKyAgICAgICAgICAgIGlmICggdXZzMiAmJiB1dnMyLmxl
bmd0aCA9PT0gbGVuZ3RoICkgbmV3VXZzMiA9IFtdOwogCi0gICAgICAgICAgICB0aGlzLm1hdHJp
eC5jb21wb3NlKCB0aGlzLnBvc2l0aW9uLCB0aGlzLnF1YXRlcm5pb24sIHRoaXMuc2NhbGUgKTsK
KyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArKyApIHsKIAotICAg
ICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB2YXIgaWQgPSBmYWNlc1sgaSBdLl9pZDsKKworICAgICAgICAgICAgICAgIGlmICggbmV3
VXZzMSApIG5ld1V2czEucHVzaCggdXZzMVsgaWQgXSApOworICAgICAgICAgICAgICAgIGlmICgg
bmV3VXZzMiApIG5ld1V2czIucHVzaCggdXZzMlsgaWQgXSApOworCisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICggbmV3VXZzMSApIHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdID0gbmV3
VXZzMTsKKyAgICAgICAgICAgIGlmICggbmV3VXZzMiApIHRoaXMuZmFjZVZlcnRleFV2c1sgMSBd
ID0gbmV3VXZzMjsKIAogICAgICAgICB9LAogCi0gICAgICAgIHVwZGF0ZU1hdHJpeFdvcmxkOiBm
dW5jdGlvbiAoIGZvcmNlICkgeworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAotICAg
ICAgICAgICAgaWYgKCB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgKSB0aGlzLnVwZGF0ZU1hdHJpeCgp
OworICAgICAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsK
KyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogNC41LAorICAgICAgICAgICAgICAgICAgICB0
eXBlOiAnR2VvbWV0cnknLAorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdHZW9tZXRy
eS50b0pTT04nCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKIAotICAgICAgICAg
ICAgaWYgKCB0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgfHwgZm9yY2UgKSB7CisgICAgICAg
ICAgICAvLyBzdGFuZGFyZCBHZW9tZXRyeSBzZXJpYWxpemF0aW9uCiAKLSAgICAgICAgICAgICAg
ICBpZiAoIHRoaXMucGFyZW50ID09PSBudWxsICkgeworICAgICAgICAgICAgZGF0YS51dWlkID0g
dGhpcy51dWlkOworICAgICAgICAgICAgZGF0YS50eXBlID0gdGhpcy50eXBlOworICAgICAgICAg
ICAgaWYgKCB0aGlzLm5hbWUgIT09ICcnICkgZGF0YS5uYW1lID0gdGhpcy5uYW1lOwogCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGQuY29weSggdGhpcy5tYXRyaXggKTsKKyAg
ICAgICAgICAgIGlmICggdGhpcy5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhp
cy5wYXJhbWV0ZXJzOwogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0cml4V29ybGQubXVs
dGlwbHlNYXRyaWNlcyggdGhpcy5wYXJlbnQubWF0cml4V29ybGQsIHRoaXMubWF0cml4ICk7Cisg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBwYXJhbWV0ZXJzICkgewogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnNbIGtleSBdICE9
PSB1bmRlZmluZWQgKSBkYXRhWyBrZXkgXSA9IHBhcmFtZXRlcnNbIGtleSBdOwogCi0gICAgICAg
ICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgZm9yY2UgPSB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIHVwZGF0ZSBj
aGlsZHJlbgotCi0gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOworICAg
ICAgICAgICAgdmFyIHZlcnRpY2VzID0gW107CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgICAgIGNoaWxkcmVuWyBpIF0udXBkYXRlTWF0cml4V29ybGQoIGZvcmNlICk7CisgICAg
ICAgICAgICAgICAgdmFyIHZlcnRleCA9IHRoaXMudmVydGljZXNbIGkgXTsKKyAgICAgICAgICAg
ICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgdmFyIGZhY2VzID0gW107Cisg
ICAgICAgICAgICB2YXIgbm9ybWFscyA9IFtdOworICAgICAgICAgICAgdmFyIG5vcm1hbHNIYXNo
ID0ge307CisgICAgICAgICAgICB2YXIgY29sb3JzID0gW107CisgICAgICAgICAgICB2YXIgY29s
b3JzSGFzaCA9IHt9OworICAgICAgICAgICAgdmFyIHV2cyA9IFtdOworICAgICAgICAgICAgdmFy
IHV2c0hhc2ggPSB7fTsKIAotICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKKyAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMuZmFjZXMubGVuZ3RoOyBpICsrICkg
ewogCi0gICAgICAgICAgICAvLyBtZXRhIGlzICcnIHdoZW4gY2FsbGVkIGZyb20gSlNPTi5zdHJp
bmdpZnkKLSAgICAgICAgICAgIHZhciBpc1Jvb3RPYmplY3QgPSAoIG1ldGEgPT09IHVuZGVmaW5l
ZCB8fCBtZXRhID09PSAnJyApOworICAgICAgICAgICAgICAgIHZhciBmYWNlID0gdGhpcy5mYWNl
c1sgaSBdOwogCi0gICAgICAgICAgICB2YXIgb3V0cHV0ID0ge307CisgICAgICAgICAgICAgICAg
dmFyIGhhc01hdGVyaWFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2YXIgaGFzRmFjZVV2ID0g
ZmFsc2U7IC8vIGRlcHJlY2F0ZWQKKyAgICAgICAgICAgICAgICB2YXIgaGFzRmFjZVZlcnRleFV2
ID0gdGhpcy5mYWNlVmVydGV4VXZzWyAwIF1bIGkgXSAhPT0gdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgIHZhciBoYXNGYWNlTm9ybWFsID0gZmFjZS5ub3JtYWwubGVuZ3RoKCkgPiAwOworICAg
ICAgICAgICAgICAgIHZhciBoYXNGYWNlVmVydGV4Tm9ybWFsID0gZmFjZS52ZXJ0ZXhOb3JtYWxz
Lmxlbmd0aCA+IDA7CisgICAgICAgICAgICAgICAgdmFyIGhhc0ZhY2VDb2xvciA9IGZhY2UuY29s
b3IuciAhPT0gMSB8fCBmYWNlLmNvbG9yLmcgIT09IDEgfHwgZmFjZS5jb2xvci5iICE9PSAxOwor
ICAgICAgICAgICAgICAgIHZhciBoYXNGYWNlVmVydGV4Q29sb3IgPSBmYWNlLnZlcnRleENvbG9y
cy5sZW5ndGggPiAwOwogCi0gICAgICAgICAgICAvLyBtZXRhIGlzIGEgaGFzaCB1c2VkIHRvIGNv
bGxlY3QgZ2VvbWV0cmllcywgbWF0ZXJpYWxzLgotICAgICAgICAgICAgLy8gbm90IHByb3ZpZGlu
ZyBpdCBpbXBsaWVzIHRoYXQgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3QKLSAgICAgICAgICAgIC8v
IGJlaW5nIHNlcmlhbGl6ZWQuCi0gICAgICAgICAgICBpZiAoIGlzUm9vdE9iamVjdCApIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZmFjZVR5cGUgPSAwOwogCi0gICAgICAgICAgICAgICAgLy8gaW5p
dGlhbGl6ZSBtZXRhIG9iagotICAgICAgICAgICAgICAgIG1ldGEgPSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGdlb21ldHJpZXM6IHt9LAotICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbHM6IHt9
LAotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlczoge30sCi0gICAgICAgICAgICAgICAgICAg
IGltYWdlczoge30KLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGZhY2VUeXBl
ID0gc2V0Qml0KCBmYWNlVHlwZSwgMCwgMCApOyAvLyBpc1F1YWQKKyAgICAgICAgICAgICAgICBm
YWNlVHlwZSA9IHNldEJpdCggZmFjZVR5cGUsIDEsIGhhc01hdGVyaWFsICk7CisgICAgICAgICAg
ICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCAyLCBoYXNGYWNlVXYgKTsKKyAgICAg
ICAgICAgICAgICBmYWNlVHlwZSA9IHNldEJpdCggZmFjZVR5cGUsIDMsIGhhc0ZhY2VWZXJ0ZXhV
diApOworICAgICAgICAgICAgICAgIGZhY2VUeXBlID0gc2V0Qml0KCBmYWNlVHlwZSwgNCwgaGFz
RmFjZU5vcm1hbCApOworICAgICAgICAgICAgICAgIGZhY2VUeXBlID0gc2V0Qml0KCBmYWNlVHlw
ZSwgNSwgaGFzRmFjZVZlcnRleE5vcm1hbCApOworICAgICAgICAgICAgICAgIGZhY2VUeXBlID0g
c2V0Qml0KCBmYWNlVHlwZSwgNiwgaGFzRmFjZUNvbG9yICk7CisgICAgICAgICAgICAgICAgZmFj
ZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCA3LCBoYXNGYWNlVmVydGV4Q29sb3IgKTsKIAotICAg
ICAgICAgICAgICAgIG91dHB1dC5tZXRhZGF0YSA9IHsKLSAgICAgICAgICAgICAgICAgICAgdmVy
c2lvbjogNC41LAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT2JqZWN0JywKLSAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yOiAnT2JqZWN0M0QudG9KU09OJwotICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgZmFjZXMucHVzaCggZmFjZVR5cGUgKTsKKyAgICAgICAgICAg
ICAgICBmYWNlcy5wdXNoKCBmYWNlLmEsIGZhY2UuYiwgZmFjZS5jICk7CisgICAgICAgICAgICAg
ICAgZmFjZXMucHVzaCggZmFjZS5tYXRlcmlhbEluZGV4ICk7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiApIHsKIAotICAgICAgICAgICAgLy8g
c3RhbmRhcmQgT2JqZWN0M0Qgc2VyaWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICB2YXIg
ZmFjZVZlcnRleFV2cyA9IHRoaXMuZmFjZVZlcnRleFV2c1sgMCBdWyBpIF07CiAKLSAgICAgICAg
ICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdldFV2SW5kZXgoIGZhY2VWZXJ0ZXhVdnNbIDAgXSApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VXZJbmRleCggZmFjZVZlcnRleFV2c1sgMSBdICks
CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRVdkluZGV4KCBmYWNlVmVydGV4VXZzWyAyIF0g
KQorICAgICAgICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICBvYmplY3QudXVpZCA9IHRo
aXMudXVpZDsKLSAgICAgICAgICAgIG9iamVjdC50eXBlID0gdGhpcy50eXBlOworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0aGlzLm5hbWUgIT09ICcnICkgb2JqZWN0Lm5h
bWUgPSB0aGlzLm5hbWU7Ci0gICAgICAgICAgICBpZiAoIEpTT04uc3RyaW5naWZ5KCB0aGlzLnVz
ZXJEYXRhICkgIT09ICd7fScgKSBvYmplY3QudXNlckRhdGEgPSB0aGlzLnVzZXJEYXRhOwotICAg
ICAgICAgICAgaWYgKCB0aGlzLmNhc3RTaGFkb3cgPT09IHRydWUgKSBvYmplY3QuY2FzdFNoYWRv
dyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIHRoaXMucmVjZWl2ZVNoYWRvdyA9PT0gdHJ1ZSAp
IG9iamVjdC5yZWNlaXZlU2hhZG93ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICggdGhpcy52aXNp
YmxlID09PSBmYWxzZSApIG9iamVjdC52aXNpYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKCBoYXNGYWNlTm9ybWFsICkgewogCi0gICAgICAgICAgICBvYmplY3QubWF0cml4ID0gdGhp
cy5tYXRyaXgudG9BcnJheSgpOworICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKCBnZXRO
b3JtYWxJbmRleCggZmFjZS5ub3JtYWwgKSApOwogCi0gICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplKCBsaWJyYXJ5LCBlbGVt
ZW50ICkgeworICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRleE5vcm1hbCApIHsKIAot
ICAgICAgICAgICAgICAgIGlmICggbGlicmFyeVsgZWxlbWVudC51dWlkIF0gPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRleE5vcm1hbHMgPSBmYWNlLnZlcnRl
eE5vcm1hbHM7CiAKLSAgICAgICAgICAgICAgICAgICAgbGlicmFyeVsgZWxlbWVudC51dWlkIF0g
PSBlbGVtZW50LnRvSlNPTiggbWV0YSApOworICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNo
KAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZlcnRleE5vcm1hbHNb
IDAgXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZlcnRleE5v
cm1hbHNbIDEgXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZl
cnRleE5vcm1hbHNbIDIgXSApCisgICAgICAgICAgICAgICAgICAgICk7CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51dWlkOworICAgICAgICAg
ICAgICAgIGlmICggaGFzRmFjZUNvbG9yICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGZhY2VzLnB1c2goIGdldENvbG9ySW5kZXgoIGZhY2UuY29sb3IgKSApOwogCi0g
ICAgICAgICAgICBpZiAoIHRoaXMuZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBvYmplY3QuZ2VvbWV0cnkgPSBzZXJpYWxpemUo
IG1ldGEuZ2VvbWV0cmllcywgdGhpcy5nZW9tZXRyeSApOworICAgICAgICAgICAgICAgIGlmICgg
aGFzRmFjZVZlcnRleENvbG9yICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHZhciB2ZXJ0ZXhDb2xvcnMgPSBmYWNlLnZlcnRleENvbG9yczsKIAotICAgICAgICAgICAg
aWYgKCB0aGlzLm1hdGVyaWFsICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
IGZhY2VzLnB1c2goCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb2xvckluZGV4KCB2ZXJ0
ZXhDb2xvcnNbIDAgXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3JJbmRleCgg
dmVydGV4Q29sb3JzWyAxIF0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbG9ySW5k
ZXgoIHZlcnRleENvbG9yc1sgMiBdICkKKyAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAg
ICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggdGhpcy5tYXRlcmlhbCApICkgeworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2YXIgdXVpZHMgPSBbXTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlz
Lm1hdGVyaWFsLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBz
ZXRCaXQoIHZhbHVlLCBwb3NpdGlvbiwgZW5hYmxlZCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgdXVpZHMucHVzaCggc2VyaWFsaXplKCBtZXRhLm1hdGVyaWFscywgdGhpcy5tYXRlcmlh
bFsgaSBdICkgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZCA/IHZhbHVlIHwgKCAx
IDw8IHBvc2l0aW9uICkgOiB2YWx1ZSAmICggfiAoIDEgPDwgcG9zaXRpb24gKSApOwogCi0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBv
YmplY3QubWF0ZXJpYWwgPSB1dWlkczsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGdldE5vcm1hbElu
ZGV4KCBub3JtYWwgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBoYXNoID0gbm9ybWFsLngudG9TdHJpbmcoKSArIG5vcm1hbC55LnRvU3RyaW5nKCkg
KyBub3JtYWwuei50b1N0cmluZygpOwogCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdC5tYXRl
cmlhbCA9IHNlcmlhbGl6ZSggbWV0YS5tYXRlcmlhbHMsIHRoaXMubWF0ZXJpYWwgKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIG5vcm1hbHNIYXNoWyBoYXNoIF0gIT09IHVuZGVmaW5lZCApIHsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbHNIYXNo
WyBoYXNoIF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgbm9ybWFsc0hhc2hbIGhhc2ggXSA9IG5vcm1hbHMubGVu
Z3RoIC8gMzsKKyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwu
eSwgbm9ybWFsLnogKTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+
IDAgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbHNIYXNoWyBoYXNoIF07CiAKLSAg
ICAgICAgICAgICAgICBvYmplY3QuY2hpbGRyZW4gPSBbXTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBp
ICsrICkgeworICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29sb3JJbmRleCggY29sb3IgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLnB1c2goIHRoaXMuY2hpbGRyZW5b
IGkgXS50b0pTT04oIG1ldGEgKS5vYmplY3QgKTsKKyAgICAgICAgICAgICAgICB2YXIgaGFzaCA9
IGNvbG9yLnIudG9TdHJpbmcoKSArIGNvbG9yLmcudG9TdHJpbmcoKSArIGNvbG9yLmIudG9TdHJp
bmcoKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGNvbG9yc0hh
c2hbIGhhc2ggXSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb2xvcnNIYXNoWyBoYXNoIF07CiAKLSAgICAgICAgICAgIGlmICgg
aXNSb290T2JqZWN0ICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZh
ciBnZW9tZXRyaWVzID0gZXh0cmFjdEZyb21DYWNoZSggbWV0YS5nZW9tZXRyaWVzICk7Ci0gICAg
ICAgICAgICAgICAgdmFyIG1hdGVyaWFscyA9IGV4dHJhY3RGcm9tQ2FjaGUoIG1ldGEubWF0ZXJp
YWxzICk7Ci0gICAgICAgICAgICAgICAgdmFyIHRleHR1cmVzID0gZXh0cmFjdEZyb21DYWNoZSgg
bWV0YS50ZXh0dXJlcyApOwotICAgICAgICAgICAgICAgIHZhciBpbWFnZXMgPSBleHRyYWN0RnJv
bUNhY2hlKCBtZXRhLmltYWdlcyApOworICAgICAgICAgICAgICAgIGNvbG9yc0hhc2hbIGhhc2gg
XSA9IGNvbG9ycy5sZW5ndGg7CisgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goIGNvbG9yLmdl
dEhleCgpICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJpZXMubGVuZ3RoID4gMCAp
IG91dHB1dC5nZW9tZXRyaWVzID0gZ2VvbWV0cmllczsKLSAgICAgICAgICAgICAgICBpZiAoIG1h
dGVyaWFscy5sZW5ndGggPiAwICkgb3V0cHV0Lm1hdGVyaWFscyA9IG1hdGVyaWFsczsKLSAgICAg
ICAgICAgICAgICBpZiAoIHRleHR1cmVzLmxlbmd0aCA+IDAgKSBvdXRwdXQudGV4dHVyZXMgPSB0
ZXh0dXJlczsKLSAgICAgICAgICAgICAgICBpZiAoIGltYWdlcy5sZW5ndGggPiAwICkgb3V0cHV0
LmltYWdlcyA9IGltYWdlczsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29sb3JzSGFzaFsgaGFz
aCBdOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG91dHB1dC5vYmplY3QgPSBvYmpl
Y3Q7Ci0KLSAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CisgICAgICAgICAgICBmdW5jdGlvbiBn
ZXRVdkluZGV4KCB1diApIHsKIAotICAgICAgICAgICAgLy8gZXh0cmFjdCBkYXRhIGZyb20gdGhl
IGNhY2hlIGhhc2gKLSAgICAgICAgICAgIC8vIHJlbW92ZSBtZXRhZGF0YSBvbiBlYWNoIGl0ZW0K
LSAgICAgICAgICAgIC8vIGFuZCByZXR1cm4gYXMgYXJyYXkKLSAgICAgICAgICAgIGZ1bmN0aW9u
IGV4dHJhY3RGcm9tQ2FjaGUoIGNhY2hlICkgeworICAgICAgICAgICAgICAgIHZhciBoYXNoID0g
dXYueC50b1N0cmluZygpICsgdXYueS50b1N0cmluZygpOwogCi0gICAgICAgICAgICAgICAgdmFy
IHZhbHVlcyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gY2FjaGUgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCB1dnNIYXNoWyBoYXNoIF0gIT09IHVuZGVmaW5lZCApIHsK
IAotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGNhY2hlWyBrZXkgXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGRhdGEubWV0YWRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIHZh
bHVlcy5wdXNoKCBkYXRhICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB1dnNIYXNoWyBo
YXNoIF07CiAKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
czsKKworICAgICAgICAgICAgICAgIHV2c0hhc2hbIGhhc2ggXSA9IHV2cy5sZW5ndGggLyAyOwor
ICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1di54LCB1di55ICk7CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdXZzSGFzaFsgaGFzaCBdOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgIGRhdGEuZGF0YSA9IHt9OwogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAo
IHJlY3Vyc2l2ZSApIHsKKyAgICAgICAgICAgIGRhdGEuZGF0YS52ZXJ0aWNlcyA9IHZlcnRpY2Vz
OworICAgICAgICAgICAgZGF0YS5kYXRhLm5vcm1hbHMgPSBub3JtYWxzOworICAgICAgICAgICAg
aWYgKCBjb2xvcnMubGVuZ3RoID4gMCApIGRhdGEuZGF0YS5jb2xvcnMgPSBjb2xvcnM7CisgICAg
ICAgICAgICBpZiAoIHV2cy5sZW5ndGggPiAwICkgZGF0YS5kYXRhLnV2cyA9IFsgdXZzIF07IC8v
IHRlbXBvcmFsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgIGRhdGEuZGF0YS5m
YWNlcyA9IGZhY2VzOwogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3Io
KS5jb3B5KCB0aGlzLCByZWN1cnNpdmUgKTsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vyc2l2ZSAp
IHsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCByZWN1
cnNpdmUgPT09IHVuZGVmaW5lZCApIHJlY3Vyc2l2ZSA9IHRydWU7CisgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzCiAKLSAgICAgICAgICAgIHRoaXMubmFt
ZSA9IHNvdXJjZS5uYW1lOworICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5wYXJh
bWV0ZXJzOwogCi0gICAgICAgICAgICB0aGlzLnVwLmNvcHkoIHNvdXJjZS51cCApOworICAgICAg
ICAgICAgIGlmICggcGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB0
aGlzLnBvc2l0aW9uLmNvcHkoIHNvdXJjZS5wb3NpdGlvbiApOwotICAgICAgICAgICAgdGhpcy5x
dWF0ZXJuaW9uLmNvcHkoIHNvdXJjZS5xdWF0ZXJuaW9uICk7Ci0gICAgICAgICAgICB0aGlzLnNj
YWxlLmNvcHkoIHNvdXJjZS5zY2FsZSApOworICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsK
IAotICAgICAgICAgICAgdGhpcy5tYXRyaXguY29weSggc291cmNlLm1hdHJpeCApOwotICAgICAg
ICAgICAgdGhpcy5tYXRyaXhXb3JsZC5jb3B5KCBzb3VyY2UubWF0cml4V29ybGQgKTsKKyAgICAg
ICAgICAgICBmb3IgKCB2YXIga2V5IGluIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgICAgIHRo
aXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRyaXhBdXRvVXBkYXRlOwotICAgICAgICAg
ICAgdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gc291cmNlLm1hdHJpeFdvcmxkTmVlZHNV
cGRhdGU7CisgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHBhcmFtZXRlcnNbIGtleSBdICk7CiAK
LSAgICAgICAgICAgIHRoaXMubGF5ZXJzLm1hc2sgPSBzb3VyY2UubGF5ZXJzLm1hc2s7Ci0gICAg
ICAgICAgICB0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTsKKyAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHRoaXMuY2FzdFNoYWRvdyA9IHNvdXJjZS5jYXN0U2hhZG93OwotICAgICAg
ICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gc291cmNlLnJlY2VpdmVTaGFkb3c7CisgICAgICAg
ICAgICAgdmFyIGdlb21ldHJ5ID0gT2JqZWN0LmNyZWF0ZSggdGhpcy5jb25zdHJ1Y3Rvci5wcm90
b3R5cGUgKTsKKyAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmFwcGx5KCBnZW9tZXRyeSwg
dmFsdWVzICk7CisgICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5OwogCi0gICAgICAgICAgICB0
aGlzLmZydXN0dW1DdWxsZWQgPSBzb3VyY2UuZnJ1c3R1bUN1bGxlZDsKLSAgICAgICAgICAgIHRo
aXMucmVuZGVyT3JkZXIgPSBzb3VyY2UucmVuZGVyT3JkZXI7CisgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0gSlNPTi5wYXJzZSggSlNPTi5zdHJpbmdpZnkoIHNv
dXJjZS51c2VyRGF0YSApICk7CisgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj
dG9yKCkuY29weSggdGhpcyApOworICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIGlmICgg
cmVjdXJzaXZlID09PSB0cnVlICkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBHZW9tZXRyeSgp
LmNvcHkoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHNv
dXJjZS5jaGlsZHJlbi5sZW5ndGg7IGkgKysgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGNoaWxkID0gc291cmNlLmNoaWxkcmVuWyBpIF07Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkKCBjaGlsZC5jbG9uZSgpICk7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9u
ICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGksIGls
LCBqLCBqbCwgaywga2w7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJlc2V0CiAK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtd
OworICAgICAgICAgICAgdGhpcy5jb2xvcnMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZmFjZXMg
PSBbXTsKKyAgICAgICAgICAgIHRoaXMuZmFjZVZlcnRleFV2cyA9IFtbXV07CisgICAgICAgICAg
ICB0aGlzLm1vcnBoVGFyZ2V0cyA9IFtdOworICAgICAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMg
PSBbXTsKKyAgICAgICAgICAgIHRoaXMuc2tpbldlaWdodHMgPSBbXTsKKyAgICAgICAgICAgIHRo
aXMuc2tpbkluZGljZXMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMubGluZURpc3RhbmNlcyA9IFtd
OworICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG51bGw7CisgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nU3BoZXJlID0gbnVsbDsKIAotICAgICAgICB9CisgICAgICAgICAgICAvLyBuYW1l
CiAKLSAgICB9ICk7CisgICAgICAgICAgICB0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTsKIAotICAg
IC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICog
QGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KLSAgICAgKiBAYXV0aG9y
IFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKLSAgICAqLworICAg
ICAgICAgICAgLy8gdmVydGljZXMKIAotICAgIGZ1bmN0aW9uIENhbWVyYSgpIHsKKyAgICAgICAg
ICAgIHZhciB2ZXJ0aWNlcyA9IHNvdXJjZS52ZXJ0aWNlczsKIAotICAgICAgICBPYmplY3QzRC5j
YWxsKCB0aGlzICk7CisgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSB2ZXJ0aWNlcy5sZW5n
dGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnQ2FtZXJhJzsKKyAg
ICAgICAgICAgICAgICB0aGlzLnZlcnRpY2VzLnB1c2goIHZlcnRpY2VzWyBpIF0uY2xvbmUoKSAp
OwogCi0gICAgICAgIHRoaXMubWF0cml4V29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTsKLSAg
ICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgICAg
IH0KIAotICAgIH0KKyAgICAgICAgICAgIC8vIGNvbG9ycwogCi0gICAgQ2FtZXJhLnByb3RvdHlw
ZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIE9iamVjdDNELnByb3RvdHlwZSApLCB7
CisgICAgICAgICAgICB2YXIgY29sb3JzID0gc291cmNlLmNvbG9yczsKIAotICAgICAgICBjb25z
dHJ1Y3RvcjogQ2FtZXJhLAorICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gY29sb3JzLmxl
bmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgIGlzQ2FtZXJhOiB0cnVlLAorICAgICAg
ICAgICAgICAgIHRoaXMuY29sb3JzLnB1c2goIGNvbG9yc1sgaSBdLmNsb25lKCkgKTsKIAotICAg
ICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSwgcmVjdXJzaXZlICkgeworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBPYmplY3QzRC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3Vy
Y2UsIHJlY3Vyc2l2ZSApOworICAgICAgICAgICAgLy8gZmFjZXMKIAotICAgICAgICAgICAgdGhp
cy5tYXRyaXhXb3JsZEludmVyc2UuY29weSggc291cmNlLm1hdHJpeFdvcmxkSW52ZXJzZSApOwot
ICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkoIHNvdXJjZS5wcm9qZWN0aW9u
TWF0cml4ICk7CisgICAgICAgICAgICB2YXIgZmFjZXMgPSBzb3VyY2UuZmFjZXM7CiAKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gZmFjZXMu
bGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB0
aGlzLmZhY2VzLnB1c2goIGZhY2VzWyBpIF0uY2xvbmUoKSApOwogCi0gICAgICAgIGdldFdvcmxk
RGlyZWN0aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZh
ciBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTsKKyAgICAgICAgICAgIC8vIGZhY2UgdmVy
dGV4IHV2cwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0V29ybGREaXJlY3Rpb24o
IG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gc291cmNl
LmZhY2VWZXJ0ZXhVdnMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAg
ICAgICAgICB2YXIgZmFjZVZlcnRleFV2cyA9IHNvdXJjZS5mYWNlVmVydGV4VXZzWyBpIF07CiAK
LSAgICAgICAgICAgICAgICB0aGlzLmdldFdvcmxkUXVhdGVybmlvbiggcXVhdGVybmlvbiApOwor
ICAgICAgICAgICAgICAgIGlmICggdGhpcy5mYWNlVmVydGV4VXZzWyBpIF0gPT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2V0KCAwLCAwLCAtIDEgKS5h
cHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5m
YWNlVmVydGV4VXZzWyBpIF0gPSBbXTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgIGZvciAoIGogPSAwLCBqbCA9IGZh
Y2VWZXJ0ZXhVdnMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgdXBkYXRlTWF0
cml4V29ybGQ6IGZ1bmN0aW9uICggZm9yY2UgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB1
dnMgPSBmYWNlVmVydGV4VXZzWyBqIF0sIHV2c0NvcHkgPSBbXTsKIAotICAgICAgICAgICAgT2Jq
ZWN0M0QucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwoIHRoaXMsIGZvcmNlICk7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGsgPSAwLCBrbCA9IHV2cy5sZW5ndGg7IGsgPCBrbDsg
ayArKyApIHsKIAotICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJz
ZSggdGhpcy5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHV2ID0g
dXZzWyBrIF07CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2c0NvcHku
cHVzaCggdXYuY2xvbmUoKSApOwogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj
dG9yKCkuY29weSggdGhpcyApOworICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY2VWZXJ0ZXhV
dnNbIGkgXS5wdXNoKCB1dnNDb3B5ICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
IAotICAgIH0gKTsKKyAgICAgICAgICAgIH0KIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0
ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBhcm9zZSAv
IGh0dHA6Ly9naXRodWIuY29tL2Fyb3NlCi0gICAgICovCisgICAgICAgICAgICAvLyBtb3JwaCB0
YXJnZXRzCiAKLSAgICBmdW5jdGlvbiBPcnRob2dyYXBoaWNDYW1lcmEoIGxlZnQsIHJpZ2h0LCB0
b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgeworICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0cyA9
IHNvdXJjZS5tb3JwaFRhcmdldHM7CiAKLSAgICAgICAgQ2FtZXJhLmNhbGwoIHRoaXMgKTsKKyAg
ICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsg
aSArKyApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnT3J0aG9ncmFwaGljQ2FtZXJhJzsKKyAg
ICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXQgPSB7fTsKKyAgICAgICAgICAgICAgICBtb3Jw
aFRhcmdldC5uYW1lID0gbW9ycGhUYXJnZXRzWyBpIF0ubmFtZTsKIAotICAgICAgICB0aGlzLnpv
b20gPSAxOwotICAgICAgICB0aGlzLnZpZXcgPSBudWxsOworICAgICAgICAgICAgICAgIC8vIHZl
cnRpY2VzCiAKLSAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKLSAgICAgICAgdGhpcy5yaWdodCA9
IHJpZ2h0OwotICAgICAgICB0aGlzLnRvcCA9IHRvcDsKLSAgICAgICAgdGhpcy5ib3R0b20gPSBi
b3R0b207CisgICAgICAgICAgICAgICAgaWYgKCBtb3JwaFRhcmdldHNbIGkgXS52ZXJ0aWNlcyAh
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIHRoaXMubmVhciA9ICggbmVhciAhPT0gdW5kZWZp
bmVkICkgPyBuZWFyIDogMC4xOwotICAgICAgICB0aGlzLmZhciA9ICggZmFyICE9PSB1bmRlZmlu
ZWQgKSA/IGZhciA6IDIwMDA7CisgICAgICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0LnZlcnRp
Y2VzID0gW107CiAKLSAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIGogPSAwLCBqbCA9IG1vcnBoVGFyZ2V0c1sgaSBdLnZlcnRp
Y2VzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgbW9ycGhUYXJnZXQudmVydGljZXMucHVzaCggbW9ycGhUYXJnZXRzWyBpIF0udmVydGlj
ZXNbIGogXS5jbG9uZSgpICk7CiAKLSAgICBPcnRob2dyYXBoaWNDYW1lcmEucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggQ2FtZXJhLnByb3RvdHlwZSApLCB7CisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBjb25zdHJ1Y3RvcjogT3J0aG9ncmFwaGljQ2Ft
ZXJhLAorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBpc09ydGhvZ3JhcGhpY0NhbWVyYTog
dHJ1ZSwKKyAgICAgICAgICAgICAgICAvLyBub3JtYWxzCiAKLSAgICAgICAgY29weTogZnVuY3Rp
b24gKCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG1vcnBoVGFy
Z2V0c1sgaSBdLm5vcm1hbHMgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgQ2FtZXJh
LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSwgcmVjdXJzaXZlICk7CisgICAgICAg
ICAgICAgICAgICAgIG1vcnBoVGFyZ2V0Lm5vcm1hbHMgPSBbXTsKIAotICAgICAgICAgICAgdGhp
cy5sZWZ0ID0gc291cmNlLmxlZnQ7Ci0gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gc291cmNlLnJp
Z2h0OwotICAgICAgICAgICAgdGhpcy50b3AgPSBzb3VyY2UudG9wOwotICAgICAgICAgICAgdGhp
cy5ib3R0b20gPSBzb3VyY2UuYm90dG9tOwotICAgICAgICAgICAgdGhpcy5uZWFyID0gc291cmNl
Lm5lYXI7Ci0gICAgICAgICAgICB0aGlzLmZhciA9IHNvdXJjZS5mYXI7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGogPSAwLCBqbCA9IG1vcnBoVGFyZ2V0c1sgaSBdLm5vcm1hbHMubGVuZ3Ro
OyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuem9vbSA9IHNvdXJjZS56b29t
OwotICAgICAgICAgICAgdGhpcy52aWV3ID0gc291cmNlLnZpZXcgPT09IG51bGwgPyBudWxsIDog
T2JqZWN0LmFzc2lnbigge30sIHNvdXJjZS52aWV3ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtb3JwaFRhcmdldC5ub3JtYWxzLnB1c2goIG1vcnBoVGFyZ2V0c1sgaSBdLm5vcm1hbHNbIGog
XS5jbG9uZSgpICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgc2V0Vmll
d09mZnNldDogZnVuY3Rpb24oIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgeCwgeSwgd2lkdGgsIGhl
aWdodCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKCBtb3JwaFRh
cmdldCApOwogCi0gICAgICAgICAgICB0aGlzLnZpZXcgPSB7Ci0gICAgICAgICAgICAgICAgZnVs
bFdpZHRoOiBmdWxsV2lkdGgsCi0gICAgICAgICAgICAgICAgZnVsbEhlaWdodDogZnVsbEhlaWdo
dCwKLSAgICAgICAgICAgICAgICBvZmZzZXRYOiB4LAotICAgICAgICAgICAgICAgIG9mZnNldFk6
IHksCi0gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLAotICAgICAgICAgICAgICAgIGhlaWdo
dDogaGVpZ2h0Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0
aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKKyAgICAgICAgICAgIC8vIG1vcnBoIG5vcm1h
bHMKIAotICAgICAgICB9LAorICAgICAgICAgICAgdmFyIG1vcnBoTm9ybWFscyA9IHNvdXJjZS5t
b3JwaE5vcm1hbHM7CiAKLSAgICAgICAgY2xlYXJWaWV3T2Zmc2V0OiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IG1vcnBoTm9ybWFscy5sZW5ndGg7IGkgPCBpbDsg
aSArKyApIHsKIAotICAgICAgICAgICAgdGhpcy52aWV3ID0gbnVsbDsKLSAgICAgICAgICAgIHRo
aXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOworICAgICAgICAgICAgICAgIHZhciBtb3JwaE5v
cm1hbCA9IHt9OwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gdmVydGV4IG5vcm1h
bHMKIAotICAgICAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBtb3JwaE5vcm1hbHNbIGkgXS52ZXJ0ZXhOb3JtYWxzICE9PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICAgICAgICAgIHZhciBkeCA9ICggdGhpcy5yaWdodCAtIHRoaXMubGVm
dCApIC8gKCAyICogdGhpcy56b29tICk7Ci0gICAgICAgICAgICB2YXIgZHkgPSAoIHRoaXMudG9w
IC0gdGhpcy5ib3R0b20gKSAvICggMiAqIHRoaXMuem9vbSApOwotICAgICAgICAgICAgdmFyIGN4
ID0gKCB0aGlzLnJpZ2h0ICsgdGhpcy5sZWZ0ICkgLyAyOwotICAgICAgICAgICAgdmFyIGN5ID0g
KCB0aGlzLnRvcCArIHRoaXMuYm90dG9tICkgLyAyOworICAgICAgICAgICAgICAgICAgICBtb3Jw
aE5vcm1hbC52ZXJ0ZXhOb3JtYWxzID0gW107CiAKLSAgICAgICAgICAgIHZhciBsZWZ0ID0gY3gg
LSBkeDsKLSAgICAgICAgICAgIHZhciByaWdodCA9IGN4ICsgZHg7Ci0gICAgICAgICAgICB2YXIg
dG9wID0gY3kgKyBkeTsKLSAgICAgICAgICAgIHZhciBib3R0b20gPSBjeSAtIGR5OworICAgICAg
ICAgICAgICAgICAgICBmb3IgKCBqID0gMCwgamwgPSBtb3JwaE5vcm1hbHNbIGkgXS52ZXJ0ZXhO
b3JtYWxzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgewogCi0gICAgICAgICAgICBpZiAoIHRoaXMu
dmlldyAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmNWZXJ0ZXhO
b3JtYWwgPSBtb3JwaE5vcm1hbHNbIGkgXS52ZXJ0ZXhOb3JtYWxzWyBqIF07CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZGVzdFZlcnRleE5vcm1hbCA9IHt9OwogCi0gICAgICAgICAgICAg
ICAgdmFyIHpvb21XID0gdGhpcy56b29tIC8gKCB0aGlzLnZpZXcud2lkdGggLyB0aGlzLnZpZXcu
ZnVsbFdpZHRoICk7Ci0gICAgICAgICAgICAgICAgdmFyIHpvb21IID0gdGhpcy56b29tIC8gKCB0
aGlzLnZpZXcuaGVpZ2h0IC8gdGhpcy52aWV3LmZ1bGxIZWlnaHQgKTsKLSAgICAgICAgICAgICAg
ICB2YXIgc2NhbGVXID0gKCB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0ICkgLyB0aGlzLnZpZXcud2lk
dGg7Ci0gICAgICAgICAgICAgICAgdmFyIHNjYWxlSCA9ICggdGhpcy50b3AgLSB0aGlzLmJvdHRv
bSApIC8gdGhpcy52aWV3LmhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RWZXJ0
ZXhOb3JtYWwuYSA9IHNyY1ZlcnRleE5vcm1hbC5hLmNsb25lKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0VmVydGV4Tm9ybWFsLmIgPSBzcmNWZXJ0ZXhOb3JtYWwuYi5jbG9uZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFZlcnRleE5vcm1hbC5jID0gc3JjVmVydGV4Tm9y
bWFsLmMuY2xvbmUoKTsKIAotICAgICAgICAgICAgICAgIGxlZnQgKz0gc2NhbGVXICogKCB0aGlz
LnZpZXcub2Zmc2V0WCAvIHpvb21XICk7Ci0gICAgICAgICAgICAgICAgcmlnaHQgPSBsZWZ0ICsg
c2NhbGVXICogKCB0aGlzLnZpZXcud2lkdGggLyB6b29tVyApOwotICAgICAgICAgICAgICAgIHRv
cCAtPSBzY2FsZUggKiAoIHRoaXMudmlldy5vZmZzZXRZIC8gem9vbUggKTsKLSAgICAgICAgICAg
ICAgICBib3R0b20gPSB0b3AgLSBzY2FsZUggKiAoIHRoaXMudmlldy5oZWlnaHQgLyB6b29tSCAp
OworICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhOb3JtYWwudmVydGV4Tm9ybWFscy5wdXNo
KCBkZXN0VmVydGV4Tm9ybWFsICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhp
YyggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0aGlzLm5lYXIsIHRoaXMuZmFyICk7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gZmFjZSBub3Jt
YWxzCiAKLSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBtb3JwaE5vcm1hbHNbIGkgXS5mYWNlTm9ybWFscyAhPT0gdW5kZWZpbmVkICkgewog
Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04uY2FsbCgg
dGhpcywgbWV0YSApOworICAgICAgICAgICAgICAgICAgICBtb3JwaE5vcm1hbC5mYWNlTm9ybWFs
cyA9IFtdOwogCi0gICAgICAgICAgICBkYXRhLm9iamVjdC56b29tID0gdGhpcy56b29tOwotICAg
ICAgICAgICAgZGF0YS5vYmplY3QubGVmdCA9IHRoaXMubGVmdDsKLSAgICAgICAgICAgIGRhdGEu
b2JqZWN0LnJpZ2h0ID0gdGhpcy5yaWdodDsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0LnRvcCA9
IHRoaXMudG9wOwotICAgICAgICAgICAgZGF0YS5vYmplY3QuYm90dG9tID0gdGhpcy5ib3R0b207
Ci0gICAgICAgICAgICBkYXRhLm9iamVjdC5uZWFyID0gdGhpcy5uZWFyOwotICAgICAgICAgICAg
ZGF0YS5vYmplY3QuZmFyID0gdGhpcy5mYXI7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGog
PSAwLCBqbCA9IG1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzLmxlbmd0aDsgaiA8IGpsOyBq
ICsrICkgewogCi0gICAgICAgICAgICBpZiAoIHRoaXMudmlldyAhPT0gbnVsbCApIGRhdGEub2Jq
ZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwgdGhpcy52aWV3ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtb3JwaE5vcm1hbC5mYWNlTm9ybWFscy5wdXNoKCBtb3JwaE5vcm1hbHNbIGkg
XS5mYWNlTm9ybWFsc1sgaiBdLmNsb25lKCkgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgfSApOworICAgICAgICAgICAgICAgIHRoaXMubW9ycGhOb3JtYWxzLnB1c2goIG1vcnBo
Tm9ybWFsICk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRv
b2IuY29tLwotICAgICAqIEBhdXRob3IgZ3JlZ2dtYW4gLyBodHRwOi8vZ2FtZXMuZ3JlZ2dtYW4u
Y29tLwotICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1
L2Jsb2cKLSAgICAgKiBAYXV0aG9yIHRzY2h3Ci0gICAgICovCisgICAgICAgICAgICB9CiAKLSAg
ICBmdW5jdGlvbiBQZXJzcGVjdGl2ZUNhbWVyYSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApIHsK
KyAgICAgICAgICAgIC8vIHNraW4gd2VpZ2h0cwogCi0gICAgICAgIENhbWVyYS5jYWxsKCB0aGlz
ICk7CisgICAgICAgICAgICB2YXIgc2tpbldlaWdodHMgPSBzb3VyY2Uuc2tpbldlaWdodHM7CiAK
LSAgICAgICAgdGhpcy50eXBlID0gJ1BlcnNwZWN0aXZlQ2FtZXJhJzsKKyAgICAgICAgICAgIGZv
ciAoIGkgPSAwLCBpbCA9IHNraW5XZWlnaHRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0g
ICAgICAgIHRoaXMuZm92ID0gZm92ICE9PSB1bmRlZmluZWQgPyBmb3YgOiA1MDsKLSAgICAgICAg
dGhpcy56b29tID0gMTsKKyAgICAgICAgICAgICAgICB0aGlzLnNraW5XZWlnaHRzLnB1c2goIHNr
aW5XZWlnaHRzWyBpIF0uY2xvbmUoKSApOwogCi0gICAgICAgIHRoaXMubmVhciA9IG5lYXIgIT09
IHVuZGVmaW5lZCA/IG5lYXIgOiAwLjE7Ci0gICAgICAgIHRoaXMuZmFyID0gZmFyICE9PSB1bmRl
ZmluZWQgPyBmYXIgOiAyMDAwOwotICAgICAgICB0aGlzLmZvY3VzID0gMTA7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgdGhpcy5hc3BlY3QgPSBhc3BlY3QgIT09IHVuZGVmaW5lZCA/IGFzcGVj
dCA6IDE7Ci0gICAgICAgIHRoaXMudmlldyA9IG51bGw7CisgICAgICAgICAgICAvLyBza2luIGlu
ZGljZXMKIAotICAgICAgICB0aGlzLmZpbG1HYXVnZSA9IDM1OyAgICAvLyB3aWR0aCBvZiB0aGUg
ZmlsbSAoZGVmYXVsdCBpbiBtaWxsaW1ldGVycykKLSAgICAgICAgdGhpcy5maWxtT2Zmc2V0ID0g
MDsgICAgLy8gaG9yaXpvbnRhbCBmaWxtIG9mZnNldCAoc2FtZSB1bml0IGFzIGdhdWdlKQorICAg
ICAgICAgICAgdmFyIHNraW5JbmRpY2VzID0gc291cmNlLnNraW5JbmRpY2VzOwogCi0gICAgICAg
IHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOworICAgICAgICAgICAgZm9yICggaSA9IDAs
IGlsID0gc2tpbkluZGljZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICB9CisgICAg
ICAgICAgICAgICAgdGhpcy5za2luSW5kaWNlcy5wdXNoKCBza2luSW5kaWNlc1sgaSBdLmNsb25l
KCkgKTsKIAotICAgIFBlcnNwZWN0aXZlQ2FtZXJhLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24o
IE9iamVjdC5jcmVhdGUoIENhbWVyYS5wcm90b3R5cGUgKSwgeworICAgICAgICAgICAgfQogCi0g
ICAgICAgIGNvbnN0cnVjdG9yOiBQZXJzcGVjdGl2ZUNhbWVyYSwKKyAgICAgICAgICAgIC8vIGxp
bmUgZGlzdGFuY2VzCiAKLSAgICAgICAgaXNQZXJzcGVjdGl2ZUNhbWVyYTogdHJ1ZSwKKyAgICAg
ICAgICAgIHZhciBsaW5lRGlzdGFuY2VzID0gc291cmNlLmxpbmVEaXN0YW5jZXM7CiAKLSAgICAg
ICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHsKKyAgICAgICAgICAgIGZv
ciAoIGkgPSAwLCBpbCA9IGxpbmVEaXN0YW5jZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAK
LSAgICAgICAgICAgIENhbWVyYS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UsIHJl
Y3Vyc2l2ZSApOworICAgICAgICAgICAgICAgIHRoaXMubGluZURpc3RhbmNlcy5wdXNoKCBsaW5l
RGlzdGFuY2VzWyBpIF0gKTsKIAotICAgICAgICAgICAgdGhpcy5mb3YgPSBzb3VyY2UuZm92Owot
ICAgICAgICAgICAgdGhpcy56b29tID0gc291cmNlLnpvb207CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHRoaXMubmVhciA9IHNvdXJjZS5uZWFyOwotICAgICAgICAgICAgdGhpcy5mYXIg
PSBzb3VyY2UuZmFyOwotICAgICAgICAgICAgdGhpcy5mb2N1cyA9IHNvdXJjZS5mb2N1czsKKyAg
ICAgICAgICAgIC8vIGJvdW5kaW5nIGJveAogCi0gICAgICAgICAgICB0aGlzLmFzcGVjdCA9IHNv
dXJjZS5hc3BlY3Q7Ci0gICAgICAgICAgICB0aGlzLnZpZXcgPSBzb3VyY2UudmlldyA9PT0gbnVs
bCA/IG51bGwgOiBPYmplY3QuYXNzaWduKCB7fSwgc291cmNlLnZpZXcgKTsKKyAgICAgICAgICAg
IHZhciBib3VuZGluZ0JveCA9IHNvdXJjZS5ib3VuZGluZ0JveDsKIAotICAgICAgICAgICAgdGhp
cy5maWxtR2F1Z2UgPSBzb3VyY2UuZmlsbUdhdWdlOwotICAgICAgICAgICAgdGhpcy5maWxtT2Zm
c2V0ID0gc291cmNlLmZpbG1PZmZzZXQ7CisgICAgICAgICAgICBpZiAoIGJvdW5kaW5nQm94ICE9
PSBudWxsICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB0
aGlzLmJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3guY2xvbmUoKTsKIAotICAgICAgICB9LAorICAg
ICAgICAgICAgfQogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBGT1YgYnkgZm9j
YWwgbGVuZ3RoIGluIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgLmZpbG1HYXVnZS4KLSAgICAgICAg
ICoKLSAgICAgICAgICogVGhlIGRlZmF1bHQgZmlsbSBnYXVnZSBpcyAzNSwgc28gdGhhdCB0aGUg
Zm9jYWwgbGVuZ3RoIGNhbiBiZSBzcGVjaWZpZWQgZm9yCi0gICAgICAgICAqIGEgMzVtbSAoZnVs
bCBmcmFtZSkgY2FtZXJhLgotICAgICAgICAgKgotICAgICAgICAgKiBWYWx1ZXMgZm9yIGZvY2Fs
IGxlbmd0aCBhbmQgZmlsbSBnYXVnZSBtdXN0IGhhdmUgdGhlIHNhbWUgdW5pdC4KLSAgICAgICAg
ICovCi0gICAgICAgIHNldEZvY2FsTGVuZ3RoOiBmdW5jdGlvbiAoIGZvY2FsTGVuZ3RoICkgewor
ICAgICAgICAgICAgLy8gYm91bmRpbmcgc3BoZXJlCiAKLSAgICAgICAgICAgIC8vIHNlZSBodHRw
Oi8vd3d3LmJvYmF0a2lucy5jb20vcGhvdG9ncmFwaHkvdGVjaG5pY2FsL2ZpZWxkX29mX3ZpZXcu
aHRtbAotICAgICAgICAgICAgdmFyIHZFeHRlbnRTbG9wZSA9IDAuNSAqIHRoaXMuZ2V0RmlsbUhl
aWdodCgpIC8gZm9jYWxMZW5ndGg7CisgICAgICAgICAgICB2YXIgYm91bmRpbmdTcGhlcmUgPSBz
b3VyY2UuYm91bmRpbmdTcGhlcmU7CiAKLSAgICAgICAgICAgIHRoaXMuZm92ID0gX01hdGguUkFE
MkRFRyAqIDIgKiBNYXRoLmF0YW4oIHZFeHRlbnRTbG9wZSApOwotICAgICAgICAgICAgdGhpcy51
cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CisgICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJl
ICE9PSBudWxsICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGlu
Z1NwaGVyZSA9IGJvdW5kaW5nU3BoZXJlLmNsb25lKCk7CiAKLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIENhbGN1bGF0ZXMgdGhlIGZvY2FsIGxlbmd0aCBmcm9tIHRoZSBjdXJyZW50IC5mb3YgYW5k
IC5maWxtR2F1Z2UuCi0gICAgICAgICAqLwotICAgICAgICBnZXRGb2NhbExlbmd0aDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgdkV4dGVudFNsb3BlID0g
TWF0aC50YW4oIF9NYXRoLkRFRzJSQUQgKiAwLjUgKiB0aGlzLmZvdiApOworICAgICAgICAgICAg
Ly8gdXBkYXRlIGZsYWdzCiAKLSAgICAgICAgICAgIHJldHVybiAwLjUgKiB0aGlzLmdldEZpbG1I
ZWlnaHQoKSAvIHZFeHRlbnRTbG9wZTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudHNOZWVkVXBk
YXRlID0gc291cmNlLmVsZW1lbnRzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMudmVydGlj
ZXNOZWVkVXBkYXRlID0gc291cmNlLnZlcnRpY2VzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRo
aXMudXZzTmVlZFVwZGF0ZSA9IHNvdXJjZS51dnNOZWVkVXBkYXRlOworICAgICAgICAgICAgdGhp
cy5ub3JtYWxzTmVlZFVwZGF0ZSA9IHNvdXJjZS5ub3JtYWxzTmVlZFVwZGF0ZTsKKyAgICAgICAg
ICAgIHRoaXMuY29sb3JzTmVlZFVwZGF0ZSA9IHNvdXJjZS5jb2xvcnNOZWVkVXBkYXRlOworICAg
ICAgICAgICAgdGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSA9IHNvdXJjZS5saW5lRGlzdGFu
Y2VzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IHNvdXJj
ZS5ncm91cHNOZWVkVXBkYXRlOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIGdldEVmZmVjdGl2ZUZPVjogZnVuY3Rpb24gKCkgeworICAgICAgICBk
aXNwb3NlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBfTWF0aC5SQUQyREVH
ICogMiAqIE1hdGguYXRhbigKLSAgICAgICAgICAgICAgICAgICAgTWF0aC50YW4oIF9NYXRoLkRF
RzJSQUQgKiAwLjUgKiB0aGlzLmZvdiApIC8gdGhpcy56b29tICk7CisgICAgICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKIAotICAgICAgICB9LAorICAg
ICAgICB9CiAKLSAgICAgICAgZ2V0RmlsbVdpZHRoOiBmdW5jdGlvbiAoKSB7CisgICAgfSApOwog
Ci0gICAgICAgICAgICAvLyBmaWxtIG5vdCBjb21wbGV0ZWx5IGNvdmVyZWQgaW4gcG9ydHJhaXQg
Zm9ybWF0IChhc3BlY3QgPCAxKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsbUdhdWdlICog
TWF0aC5taW4oIHRoaXMuYXNwZWN0LCAxICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRv
b2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICB9LAorICAgIGZ1bmN0
aW9uIEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkgewogCi0g
ICAgICAgIGdldEZpbG1IZWlnaHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCBBcnJheS5p
c0FycmF5KCBhcnJheSApICkgewogCi0gICAgICAgICAgICAvLyBmaWxtIG5vdCBjb21wbGV0ZWx5
IGNvdmVyZWQgaW4gbGFuZHNjYXBlIGZvcm1hdCAoYXNwZWN0ID4gMSkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbG1HYXVnZSAvIE1hdGgubWF4KCB0aGlzLmFzcGVjdCwgMSApOworICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvciggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkg
c2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuJyApOwogCi0gICAgICAgIH0sCisgICAgICAgIH0KIAot
ICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyBhbiBvZmZzZXQgaW4gYSBsYXJnZXIgZnJ1c3R1
bS4gVGhpcyBpcyB1c2VmdWwgZm9yIG11bHRpLXdpbmRvdyBvcgotICAgICAgICAgKiBtdWx0aS1t
b25pdG9yL211bHRpLW1hY2hpbmUgc2V0dXBzLgotICAgICAgICAgKgotICAgICAgICAgKiBGb3Ig
ZXhhbXBsZSwgaWYgeW91IGhhdmUgM3gyIG1vbml0b3JzIGFuZCBlYWNoIG1vbml0b3IgaXMgMTky
MHgxMDgwIGFuZAotICAgICAgICAgKiB0aGUgbW9uaXRvcnMgYXJlIGluIGdyaWQgbGlrZSB0aGlz
Ci0gICAgICAgICAqCi0gICAgICAgICAqICAgKy0tLSstLS0rLS0tKwotICAgICAgICAgKiAgIHwg
QSB8IEIgfCBDIHwKLSAgICAgICAgICogICArLS0tKy0tLSstLS0rCi0gICAgICAgICAqICAgfCBE
IHwgRSB8IEYgfAotICAgICAgICAgKiAgICstLS0rLS0tKy0tLSsKLSAgICAgICAgICoKLSAgICAg
ICAgICogdGhlbiBmb3IgZWFjaCBtb25pdG9yIHlvdSB3b3VsZCBjYWxsIGl0IGxpa2UgdGhpcwot
ICAgICAgICAgKgotICAgICAgICAgKiAgIHZhciB3ID0gMTkyMDsKLSAgICAgICAgICogICB2YXIg
aCA9IDEwODA7Ci0gICAgICAgICAqICAgdmFyIGZ1bGxXaWR0aCA9IHcgKiAzOwotICAgICAgICAg
KiAgIHZhciBmdWxsSGVpZ2h0ID0gaCAqIDI7Ci0gICAgICAgICAqCi0gICAgICAgICAqICAgLS1B
LS0KLSAgICAgICAgICogICBjYW1lcmEuc2V0T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQs
IHcgKiAwLCBoICogMCwgdywgaCApOwotICAgICAgICAgKiAgIC0tQi0tCi0gICAgICAgICAqICAg
Y2FtZXJhLnNldE9mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMSwgaCAqIDAsIHcs
IGggKTsKLSAgICAgICAgICogICAtLUMtLQotICAgICAgICAgKiAgIGNhbWVyYS5zZXRPZmZzZXQo
IGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDIsIGggKiAwLCB3LCBoICk7Ci0gICAgICAgICAq
ICAgLS1ELS0KLSAgICAgICAgICogICBjYW1lcmEuc2V0T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxI
ZWlnaHQsIHcgKiAwLCBoICogMSwgdywgaCApOwotICAgICAgICAgKiAgIC0tRS0tCi0gICAgICAg
ICAqICAgY2FtZXJhLnNldE9mZnNldCggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB3ICogMSwgaCAq
IDEsIHcsIGggKTsKLSAgICAgICAgICogICAtLUYtLQotICAgICAgICAgKiAgIGNhbWVyYS5zZXRP
ZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDIsIGggKiAxLCB3LCBoICk7Ci0gICAg
ICAgICAqCi0gICAgICAgICAqICAgTm90ZSB0aGVyZSBpcyBubyByZWFzb24gbW9uaXRvcnMgaGF2
ZSB0byBiZSB0aGUgc2FtZSBzaXplIG9yIGluIGEgZ3JpZC4KLSAgICAgICAgICovCi0gICAgICAg
IHNldFZpZXdPZmZzZXQ6IGZ1bmN0aW9uICggZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0ICkgeworICAgICAgICB0aGlzLm5hbWUgPSAnJzsKIAotICAgICAgICAgICAg
dGhpcy5hc3BlY3QgPSBmdWxsV2lkdGggLyBmdWxsSGVpZ2h0OworICAgICAgICB0aGlzLmFycmF5
ID0gYXJyYXk7CisgICAgICAgIHRoaXMuaXRlbVNpemUgPSBpdGVtU2l6ZTsKKyAgICAgICAgdGhp
cy5jb3VudCA9IGFycmF5ICE9PSB1bmRlZmluZWQgPyBhcnJheS5sZW5ndGggLyBpdGVtU2l6ZSA6
IDA7CisgICAgICAgIHRoaXMubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQgPT09IHRydWU7CiAKLSAg
ICAgICAgICAgIHRoaXMudmlldyA9IHsKLSAgICAgICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxX
aWR0aCwKLSAgICAgICAgICAgICAgICBmdWxsSGVpZ2h0OiBmdWxsSGVpZ2h0LAotICAgICAgICAg
ICAgICAgIG9mZnNldFg6IHgsCi0gICAgICAgICAgICAgICAgb2Zmc2V0WTogeSwKLSAgICAgICAg
ICAgICAgICB3aWR0aDogd2lkdGgsCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQKLSAg
ICAgICAgICAgIH07CisgICAgICAgIHRoaXMuZHluYW1pYyA9IGZhbHNlOworICAgICAgICB0aGlz
LnVwZGF0ZVJhbmdlID0geyBvZmZzZXQ6IDAsIGNvdW50OiAtIDEgfTsKIAotICAgICAgICAgICAg
dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CisgICAgICAgIHRoaXMudmVyc2lvbiA9IDA7
CiAKLSAgICAgICAgfSwKKyAgICB9CiAKLSAgICAgICAgY2xlYXJWaWV3T2Zmc2V0OiBmdW5jdGlv
biAoKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90
eXBlLCAnbmVlZHNVcGRhdGUnLCB7CiAKLSAgICAgICAgICAgIHRoaXMudmlldyA9IG51bGw7Ci0g
ICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIHZhbHVl
ID09PSB0cnVlICkgdGhpcy52ZXJzaW9uICsrOwogCi0gICAgICAgIHVwZGF0ZVByb2plY3Rpb25N
YXRyaXg6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgbmVhciA9
IHRoaXMubmVhciwKLSAgICAgICAgICAgICAgICB0b3AgPSBuZWFyICogTWF0aC50YW4oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBfTWF0aC5ERUcyUkFEICogMC41ICogdGhpcy5mb3YgKSAvIHRo
aXMuem9vbSwKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSAyICogdG9wLAotICAgICAgICAgICAg
ICAgIHdpZHRoID0gdGhpcy5hc3BlY3QgKiBoZWlnaHQsCi0gICAgICAgICAgICAgICAgbGVmdCA9
IC0gMC41ICogd2lkdGgsCi0gICAgICAgICAgICAgICAgdmlldyA9IHRoaXMudmlldzsKKyAgICB9
ICk7CiAKLSAgICAgICAgICAgIGlmICggdmlldyAhPT0gbnVsbCApIHsKKyAgICBPYmplY3QuYXNz
aWduKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICB2YXIg
ZnVsbFdpZHRoID0gdmlldy5mdWxsV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgIGZ1bGxIZWln
aHQgPSB2aWV3LmZ1bGxIZWlnaHQ7CisgICAgICAgIGlzQnVmZmVyQXR0cmlidXRlOiB0cnVlLAog
Ci0gICAgICAgICAgICAgICAgbGVmdCArPSB2aWV3Lm9mZnNldFggKiB3aWR0aCAvIGZ1bGxXaWR0
aDsKLSAgICAgICAgICAgICAgICB0b3AgLT0gdmlldy5vZmZzZXRZICogaGVpZ2h0IC8gZnVsbEhl
aWdodDsKLSAgICAgICAgICAgICAgICB3aWR0aCAqPSB2aWV3LndpZHRoIC8gZnVsbFdpZHRoOwot
ICAgICAgICAgICAgICAgIGhlaWdodCAqPSB2aWV3LmhlaWdodCAvIGZ1bGxIZWlnaHQ7CisgICAg
ICAgIG9uVXBsb2FkQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHt9LAorCisgICAgICAgIHNldEFycmF5
OiBmdW5jdGlvbiAoIGFycmF5ICkgeworCisgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXko
IGFycmF5ICkgKSB7CisKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCAnVEhS
RUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4nICk7CiAK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHNrZXcgPSB0aGlzLmZpbG1PZmZzZXQ7
Ci0gICAgICAgICAgICBpZiAoIHNrZXcgIT09IDAgKSBsZWZ0ICs9IG5lYXIgKiBza2V3IC8gdGhp
cy5nZXRGaWxtV2lkdGgoKTsKKyAgICAgICAgICAgIHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5k
ZWZpbmVkID8gYXJyYXkubGVuZ3RoIC8gdGhpcy5pdGVtU2l6ZSA6IDA7CisgICAgICAgICAgICB0
aGlzLmFycmF5ID0gYXJyYXk7CiAKLSAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5t
YWtlUGVyc3BlY3RpdmUoIGxlZnQsIGxlZnQgKyB3aWR0aCwgdG9wLCB0b3AgLSBoZWlnaHQsIG5l
YXIsIHRoaXMuZmFyICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRhICkgewotCi0gICAgICAgICAgICB2YXIg
ZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOworICAg
ICAgICBzZXREeW5hbWljOiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICBkYXRh
Lm9iamVjdC5mb3YgPSB0aGlzLmZvdjsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0Lnpvb20gPSB0
aGlzLnpvb207CisgICAgICAgICAgICB0aGlzLmR5bmFtaWMgPSB2YWx1ZTsKIAotICAgICAgICAg
ICAgZGF0YS5vYmplY3QubmVhciA9IHRoaXMubmVhcjsKLSAgICAgICAgICAgIGRhdGEub2JqZWN0
LmZhciA9IHRoaXMuZmFyOwotICAgICAgICAgICAgZGF0YS5vYmplY3QuZm9jdXMgPSB0aGlzLmZv
Y3VzOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGRhdGEub2JqZWN0
LmFzcGVjdCA9IHRoaXMuYXNwZWN0OworICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAoIHRo
aXMudmlldyAhPT0gbnVsbCApIGRhdGEub2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwg
dGhpcy52aWV3ICk7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAg
ICAgICAgICBkYXRhLm9iamVjdC5maWxtR2F1Z2UgPSB0aGlzLmZpbG1HYXVnZTsKLSAgICAgICAg
ICAgIGRhdGEub2JqZWN0LmZpbG1PZmZzZXQgPSB0aGlzLmZpbG1PZmZzZXQ7CisgICAgICAgICAg
ICB0aGlzLm5hbWUgPSBzb3VyY2UubmFtZTsKKyAgICAgICAgICAgIHRoaXMuYXJyYXkgPSBuZXcg
c291cmNlLmFycmF5LmNvbnN0cnVjdG9yKCBzb3VyY2UuYXJyYXkgKTsKKyAgICAgICAgICAgIHRo
aXMuaXRlbVNpemUgPSBzb3VyY2UuaXRlbVNpemU7CisgICAgICAgICAgICB0aGlzLmNvdW50ID0g
c291cmNlLmNvdW50OworICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVkID0gc291cmNlLm5vcm1h
bGl6ZWQ7CiAKLSAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgdGhpcy5keW5h
bWljID0gc291cmNlLmR5bmFtaWM7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICB9ICk7CisgICAgICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRw
Oi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgICAgIGNvcHlBdDogZnVuY3Rpb24g
KCBpbmRleDEsIGF0dHJpYnV0ZSwgaW5kZXgyICkgewogCi0gICAgZnVuY3Rpb24gRmFjZTMoIGEs
IGIsIGMsIG5vcm1hbCwgY29sb3IsIG1hdGVyaWFsSW5kZXggKSB7CisgICAgICAgICAgICBpbmRl
eDEgKj0gdGhpcy5pdGVtU2l6ZTsKKyAgICAgICAgICAgIGluZGV4MiAqPSBhdHRyaWJ1dGUuaXRl
bVNpemU7CiAKLSAgICAgICAgdGhpcy5hID0gYTsKLSAgICAgICAgdGhpcy5iID0gYjsKLSAgICAg
ICAgdGhpcy5jID0gYzsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMuaXRl
bVNpemU7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgIHRoaXMubm9ybWFsID0gKCBub3JtYWwg
JiYgbm9ybWFsLmlzVmVjdG9yMyApID8gbm9ybWFsIDogbmV3IFZlY3RvcjMoKTsKLSAgICAgICAg
dGhpcy52ZXJ0ZXhOb3JtYWxzID0gQXJyYXkuaXNBcnJheSggbm9ybWFsICkgPyBub3JtYWwgOiBb
XTsKKyAgICAgICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleDEgKyBpIF0gPSBhdHRyaWJ1dGUu
YXJyYXlbIGluZGV4MiArIGkgXTsKIAotICAgICAgICB0aGlzLmNvbG9yID0gKCBjb2xvciAmJiBj
b2xvci5pc0NvbG9yICkgPyBjb2xvciA6IG5ldyBDb2xvcigpOwotICAgICAgICB0aGlzLnZlcnRl
eENvbG9ycyA9IEFycmF5LmlzQXJyYXkoIGNvbG9yICkgPyBjb2xvciA6IFtdOworICAgICAgICAg
ICAgfQogCi0gICAgICAgIHRoaXMubWF0ZXJpYWxJbmRleCA9IG1hdGVyaWFsSW5kZXggIT09IHVu
ZGVmaW5lZCA/IG1hdGVyaWFsSW5kZXggOiAwOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICB9CisgICAgICAgIH0sCiAKLSAgICBPYmplY3QuYXNzaWduKCBGYWNlMy5wcm90b3R5cGUs
IHsKKyAgICAgICAgY29weUFycmF5OiBmdW5jdGlvbiAoIGFycmF5ICkgewogCi0gICAgICAgIGNs
b25lOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLmFycmF5LnNldCggYXJyYXkgKTsK
IAotICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyAp
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb3B5
OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKLQotICAgICAgICAgICAgdGhpcy5hID0gc291cmNlLmE7
Ci0gICAgICAgICAgICB0aGlzLmIgPSBzb3VyY2UuYjsKLSAgICAgICAgICAgIHRoaXMuYyA9IHNv
dXJjZS5jOworICAgICAgICBjb3B5Q29sb3JzQXJyYXk6IGZ1bmN0aW9uICggY29sb3JzICkgewog
Ci0gICAgICAgICAgICB0aGlzLm5vcm1hbC5jb3B5KCBzb3VyY2Uubm9ybWFsICk7Ci0gICAgICAg
ICAgICB0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApOworICAgICAgICAgICAgdmFyIGFy
cmF5ID0gdGhpcy5hcnJheSwgb2Zmc2V0ID0gMDsKIAotICAgICAgICAgICAgdGhpcy5tYXRlcmlh
bEluZGV4ID0gc291cmNlLm1hdGVyaWFsSW5kZXg7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGwgPSBjb2xvcnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBpbCA9IHNvdXJjZS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDsgaSA8IGlsOyBp
ICsrICkgeworICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGNvbG9yc1sgaSBdOwogCi0gICAg
ICAgICAgICAgICAgdGhpcy52ZXJ0ZXhOb3JtYWxzWyBpIF0gPSBzb3VyY2UudmVydGV4Tm9ybWFs
c1sgaSBdLmNsb25lKCk7CisgICAgICAgICAgICAgICAgaWYgKCBjb2xvciA9PT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
J1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZp
bmVkJywgaSApOworICAgICAgICAgICAgICAgICAgICBjb2xvciA9IG5ldyBDb2xvcigpOwogCi0g
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gc291cmNlLnZlcnRleENvbG9ycy5sZW5n
dGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICB0aGlzLnZlcnRleENvbG9yc1sgaSBdID0gc291cmNlLnZlcnRleENvbG9yc1sgaSBdLmNsb25l
KCk7CisgICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gY29sb3IucjsKKyAgICAg
ICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSBjb2xvci5nOworICAgICAgICAgICAgICAg
IGFycmF5WyBvZmZzZXQgKysgXSA9IGNvbG9yLmI7CiAKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgfSApOwor
ICAgICAgICBjb3B5VmVjdG9yMnNBcnJheTogZnVuY3Rpb24gKCB2ZWN0b3JzICkgewogCi0gICAg
LyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBA
YXV0aG9yIGtpbGUgLyBodHRwOi8va2lsZS5zdHJhdmFnYW56YS5vcmcvCi0gICAgICogQGF1dGhv
ciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KLSAgICAgKiBAYXV0aG9yIG1p
a2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRob3Igeno4NSAvIGh0
dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKLSAgICAgKiBAYXV0aG9yIGJob3VzdG9u
IC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICovCisgICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlz
LmFycmF5LCBvZmZzZXQgPSAwOwogCi0gICAgdmFyIGNvdW50ID0gMDsKLSAgICBmdW5jdGlvbiBH
ZW9tZXRyeUlkQ291bnQoKSB7IHJldHVybiBjb3VudCsrOyB9CisgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICBmdW5j
dGlvbiBHZW9tZXRyeSgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmVjdG9yID0gdmVjdG9yc1sg
aSBdOwogCi0gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ2lkJywgeyB2YWx1
ZTogR2VvbWV0cnlJZENvdW50KCkgfSApOworICAgICAgICAgICAgICAgIGlmICggdmVjdG9yID09
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlE
KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckF0dHJp
YnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSApOworICAg
ICAgICAgICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yMigpOwogCi0gICAgICAgIHRoaXMu
bmFtZSA9ICcnOwotICAgICAgICB0aGlzLnR5cGUgPSAnR2VvbWV0cnknOworICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICB0aGlzLnZlcnRpY2VzID0gW107Ci0gICAgICAgIHRoaXMuY29sb3Jz
ID0gW107Ci0gICAgICAgIHRoaXMuZmFjZXMgPSBbXTsKLSAgICAgICAgdGhpcy5mYWNlVmVydGV4
VXZzID0gW1tdXTsKKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3Iu
eDsKKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueTsKIAotICAg
ICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IFtdOwotICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9
IFtdOworICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuc2tpbldlaWdodHMgPSBbXTsKLSAg
ICAgICAgdGhpcy5za2luSW5kaWNlcyA9IFtdOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgdGhpcy5saW5lRGlzdGFuY2VzID0gW107CisgICAgICAgIH0sCiAKLSAgICAgICAg
dGhpcy5ib3VuZGluZ0JveCA9IG51bGw7Ci0gICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUgPSBu
dWxsOwotCi0gICAgICAgIC8vIHVwZGF0ZSBmbGFncwotCi0gICAgICAgIHRoaXMuZWxlbWVudHNO
ZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHRoaXMudmVydGljZXNOZWVkVXBkYXRlID0gZmFs
c2U7Ci0gICAgICAgIHRoaXMudXZzTmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB0aGlzLm5v
cm1hbHNOZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuY29sb3JzTmVlZFVwZGF0ZSA9
IGZhbHNlOwotICAgICAgICB0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlID0gZmFsc2U7Ci0g
ICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICBjb3B5VmVjdG9y
M3NBcnJheTogZnVuY3Rpb24gKCB2ZWN0b3JzICkgewogCi0gICAgfQorICAgICAgICAgICAgdmFy
IGFycmF5ID0gdGhpcy5hcnJheSwgb2Zmc2V0ID0gMDsKIAotICAgIE9iamVjdC5hc3NpZ24oIEdl
b21ldHJ5LnByb3RvdHlwZSwgRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZSwgeworICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewog
Ci0gICAgICAgIGlzR2VvbWV0cnk6IHRydWUsCisgICAgICAgICAgICAgICAgdmFyIHZlY3RvciA9
IHZlY3RvcnNbIGkgXTsKIAotICAgICAgICBhcHBseU1hdHJpeDogZnVuY3Rpb24gKCBtYXRyaXgg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCB2ZWN0b3IgPT09IHVuZGVmaW5lZCApIHsKIAotICAg
ICAgICAgICAgdmFyIG5vcm1hbE1hdHJpeCA9IG5ldyBNYXRyaXgzKCkuZ2V0Tm9ybWFsTWF0cml4
KCBtYXRyaXggKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuQnVm
ZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQnLCBp
ICk7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgaSA8IGls
OyBpICsrICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciB2ZXJ0
ZXggPSB0aGlzLnZlcnRpY2VzWyBpIF07Ci0gICAgICAgICAgICAgICAgdmVydGV4LmFwcGx5TWF0
cml4NCggbWF0cml4ICk7CisgICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVj
dG9yLng7CisgICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLnk7Cisg
ICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gdmVjdG9yLno7CiAKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHRoaXMuZmFjZXMubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IHRoaXMu
ZmFjZXNbIGkgXTsKLSAgICAgICAgICAgICAgICBmYWNlLm5vcm1hbC5hcHBseU1hdHJpeDMoIG5v
cm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGpsID0gZmFjZS52ZXJ0ZXhOb3JtYWxzLmxl
bmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAg
IGZhY2UudmVydGV4Tm9ybWFsc1sgaiBdLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9y
bWFsaXplKCk7CisgICAgICAgIGNvcHlWZWN0b3I0c0FycmF5OiBmdW5jdGlvbiAoIHZlY3RvcnMg
KSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLmFy
cmF5LCBvZmZzZXQgPSAwOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
IGlmICggdGhpcy5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICB2YXIg
dmVjdG9yID0gdmVjdG9yc1sgaSBdOwogCi0gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlQm91
bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICBpZiAoIHZlY3RvciA9PT0gdW5kZWZpbmVkICkg
ewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZp
bmVkJywgaSApOworICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yNCgpOwog
Ci0gICAgICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlQm91bmRpbmdTcGhl
cmUoKTsKKyAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueDsKKyAg
ICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueTsKKyAgICAgICAgICAg
ICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IuejsKKyAgICAgICAgICAgICAgICBhcnJh
eVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IudzsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLm5vcm1h
bHNOZWVkVXBkYXRlID0gdHJ1ZTsKLQogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAg
ICAgfSwKIAotICAgICAgICByb3RhdGVYOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNldDogZnVu
Y3Rpb24gKCB2YWx1ZSwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0
cnkgYXJvdW5kIHdvcmxkIHgtYXhpcworICAgICAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVm
aW5lZCApIG9mZnNldCA9IDA7CiAKLSAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXg0KCk7
CisgICAgICAgICAgICB0aGlzLmFycmF5LnNldCggdmFsdWUsIG9mZnNldCApOwogCi0gICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlWCggYW5nbGUgKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIG0xLm1ha2VSb3RhdGlvblgoIGFuZ2xlICk7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOworICAg
ICAgICBnZXRYOiBmdW5jdGlvbiAoIGluZGV4ICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1T
aXplIF07CiAKLSAgICAgICAgICAgIH07CisgICAgICAgIH0sCiAKLSAgICAgICAgfSgpLAorICAg
ICAgICBzZXRYOiBmdW5jdGlvbiAoIGluZGV4LCB4ICkgewogCi0gICAgICAgIHJvdGF0ZVk6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6
ZSBdID0geDsKIAotICAgICAgICAgICAgLy8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3b3JsZCB5
LWF4aXMKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB2YXIgbTEgPSBu
ZXcgTWF0cml4NCgpOworICAgICAgICB9LAogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
cm90YXRlWSggYW5nbGUgKSB7CisgICAgICAgIGdldFk6IGZ1bmN0aW9uICggaW5kZXggKSB7CiAK
LSAgICAgICAgICAgICAgICBtMS5tYWtlUm90YXRpb25ZKCBhbmdsZSApOworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDEgXTsKIAotICAgICAg
ICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7CisgICAgICAgIH0sCiAKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgc2V0WTogZnVuY3Rpb24gKCBpbmRleCwgeSAp
IHsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICogdGhp
cy5pdGVtU2l6ZSArIDEgXSA9IHk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKLSAgICAgICAgcm90YXRlWjogZnVuY3Rpb24gKCkgeworICAgICAgICB9LAogCi0g
ICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHotYXhpcworICAgICAg
ICBnZXRaOiBmdW5jdGlvbiAoIGluZGV4ICkgewogCi0gICAgICAgICAgICB2YXIgbTEgPSBuZXcg
TWF0cml4NCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5p
dGVtU2l6ZSArIDIgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJvdGF0ZVooIGFu
Z2xlICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgbTEubWFrZVJvdGF0aW9uWigg
YW5nbGUgKTsKKyAgICAgICAgc2V0WjogZnVuY3Rpb24gKCBpbmRleCwgeiApIHsKIAotICAgICAg
ICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7CisgICAgICAgICAgICB0aGlzLmFycmF5
WyBpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyIF0gPSB6OwogCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKIAotICAgICAgICB9KCksCisgICAgICAgIGdldFc6IGZ1bmN0aW9uICggaW5kZXgg
KSB7CiAKLSAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMyBdOwogCi0gICAgICAgICAg
ICAvLyB0cmFuc2xhdGUgZ2VvbWV0cnkKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIG0x
ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgc2V0VzogZnVuY3Rpb24gKCBpbmRleCwgdyApIHsK
IAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zbGF0ZSggeCwgeSwgeiApIHsKKyAg
ICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDMgXSA9IHc7CiAK
LSAgICAgICAgICAgICAgICBtMS5tYWtlVHJhbnNsYXRpb24oIHgsIHksIHogKTsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdGhpcy5hcHBseU1hdHJpeCggbTEg
KTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICBz
ZXRYWTogZnVuY3Rpb24gKCBpbmRleCwgeCwgeSApIHsKIAotICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGluZGV4ICo9IHRoaXMuaXRlbVNpemU7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAg
ICAgdGhpcy5hcnJheVsgaW5kZXggKyAwIF0gPSB4OworICAgICAgICAgICAgdGhpcy5hcnJheVsg
aW5kZXggKyAxIF0gPSB5OwogCi0gICAgICAgIHNjYWxlOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgLy8gc2NhbGUgZ2VvbWV0cnkKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgc2V0
WFlaOiBmdW5jdGlvbiAoIGluZGV4LCB4LCB5LCB6ICkgewogCi0gICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gc2NhbGUoIHgsIHksIHogKSB7CisgICAgICAgICAgICBpbmRleCAqPSB0aGlzLml0
ZW1TaXplOwogCi0gICAgICAgICAgICAgICAgbTEubWFrZVNjYWxlKCB4LCB5LCB6ICk7CisgICAg
ICAgICAgICB0aGlzLmFycmF5WyBpbmRleCArIDAgXSA9IHg7CisgICAgICAgICAgICB0aGlzLmFy
cmF5WyBpbmRleCArIDEgXSA9IHk7CisgICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCArIDIg
XSA9IHo7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgc2V0WFlaVzogZnVuY3Rpb24gKCBpbmRl
eCwgeCwgeSwgeiwgdyApIHsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICBpbmRleCAqPSB0
aGlzLml0ZW1TaXplOwogCi0gICAgICAgIGxvb2tBdDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdGhpcy5hcnJheVsgaW5kZXggKyAwIF0gPSB4OworICAgICAgICAgICAgdGhpcy5hcnJheVsg
aW5kZXggKyAxIF0gPSB5OworICAgICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXggKyAyIF0gPSB6
OworICAgICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXggKyAzIF0gPSB3OwogCi0gICAgICAgICAg
ICB2YXIgb2JqID0gbmV3IE9iamVjdDNEKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGxvb2tBdCggdmVjdG9yICkgeworICAgICAgICB9
LAogCi0gICAgICAgICAgICAgICAgb2JqLmxvb2tBdCggdmVjdG9yICk7CisgICAgICAgIG9uVXBs
b2FkOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgewogCi0gICAgICAgICAgICAgICAgb2JqLnVwZGF0
ZU1hdHJpeCgpOworICAgICAgICAgICAgdGhpcy5vblVwbG9hZENhbGxiYWNrID0gY2FsbGJhY2s7
CiAKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBvYmoubWF0cml4ICk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKIAotICAg
ICAgICB9KCksCisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgZnJvbUJ1
ZmZlckdlb21ldHJ5OiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmFycmF5LCB0aGlzLml0ZW1TaXplICkuY29weSgg
dGhpcyApOwogCi0gICAgICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kZXggIT09IG51bGwgPyBnZW9tZXRy
eS5pbmRleC5hcnJheSA6IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0g
Z2VvbWV0cnkuYXR0cmlidXRlczsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIHZhciBwb3NpdGlv
bnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5OwotICAgICAgICAgICAgdmFyIG5vcm1hbHMg
PSBhdHRyaWJ1dGVzLm5vcm1hbCAhPT0gdW5kZWZpbmVkID8gYXR0cmlidXRlcy5ub3JtYWwuYXJy
YXkgOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB2YXIgY29sb3JzID0gYXR0cmlidXRlcy5jb2xv
ciAhPT0gdW5kZWZpbmVkID8gYXR0cmlidXRlcy5jb2xvci5hcnJheSA6IHVuZGVmaW5lZDsKLSAg
ICAgICAgICAgIHZhciB1dnMgPSBhdHRyaWJ1dGVzLnV2ICE9PSB1bmRlZmluZWQgPyBhdHRyaWJ1
dGVzLnV2LmFycmF5IDogdW5kZWZpbmVkOwotICAgICAgICAgICAgdmFyIHV2czIgPSBhdHRyaWJ1
dGVzLnV2MiAhPT0gdW5kZWZpbmVkID8gYXR0cmlidXRlcy51djIuYXJyYXkgOiB1bmRlZmluZWQ7
CisgICAgLy8KIAotICAgICAgICAgICAgaWYgKCB1dnMyICE9PSB1bmRlZmluZWQgKSB0aGlzLmZh
Y2VWZXJ0ZXhVdnNbIDEgXSA9IFtdOworICAgIGZ1bmN0aW9uIEludDhCdWZmZXJBdHRyaWJ1dGUo
IGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKIAotICAgICAgICAgICAgdmFyIHRlbXBO
b3JtYWxzID0gW107Ci0gICAgICAgICAgICB2YXIgdGVtcFVWcyA9IFtdOwotICAgICAgICAgICAg
dmFyIHRlbXBVVnMyID0gW107CisgICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBu
ZXcgSW50OEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOwogCi0gICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSAz
LCBqICs9IDIgKSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgc2NvcGUudmVydGljZXMucHVz
aCggbmV3IFZlY3RvcjMoIHBvc2l0aW9uc1sgaSBdLCBwb3NpdGlvbnNbIGkgKyAxIF0sIHBvc2l0
aW9uc1sgaSArIDIgXSApICk7CisgICAgSW50OEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7CisgICAgSW50OEJ1ZmZl
ckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnQ4QnVmZmVyQXR0cmlidXRlOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCBub3JtYWxzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdGVtcE5vcm1hbHMucHVzaCggbmV3IFZlY3RvcjMoIG5vcm1hbHNbIGkg
XSwgbm9ybWFsc1sgaSArIDEgXSwgbm9ybWFsc1sgaSArIDIgXSApICk7CisgICAgZnVuY3Rpb24g
VWludDhCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5l
dyBVaW50OEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOwogCi0gICAgICAg
ICAgICAgICAgaWYgKCBjb2xvcnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgc2NvcGUuY29sb3JzLnB1c2goIG5ldyBDb2xvciggY29sb3JzWyBpIF0sIGNv
bG9yc1sgaSArIDEgXSwgY29sb3JzWyBpICsgMiBdICkgKTsKKyAgICBVaW50OEJ1ZmZlckF0dHJp
YnV0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBl
ICk7CisgICAgVWludDhCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVWlu
dDhCdWZmZXJBdHRyaWJ1dGU7CiAKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIHV2cyAhPT0gdW5kZWZpbmVkICkgeworICAgIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEJ1
ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkgewogCi0gICAgICAg
ICAgICAgICAgICAgIHRlbXBVVnMucHVzaCggbmV3IFZlY3RvcjIoIHV2c1sgaiBdLCB1dnNbIGog
KyAxIF0gKSApOworICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgbmV3IFVpbnQ4
Q2xhbXBlZEFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApOwogCi0gICAgICAg
ICAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggdXZzMiAhPT0gdW5kZWZp
bmVkICkgeworICAgIFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7CisgICAgVWludDhDbGFtcGVk
QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQ4Q2xhbXBlZEJ1ZmZl
ckF0dHJpYnV0ZTsKIAotICAgICAgICAgICAgICAgICAgICB0ZW1wVVZzMi5wdXNoKCBuZXcgVmVj
dG9yMiggdXZzMlsgaiBdLCB1dnMyWyBqICsgMSBdICkgKTsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICBmdW5jdGlvbiBJbnQxNkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3Jt
YWxpemVkICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxs
KCB0aGlzLCBuZXcgSW50MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKTsK
IAotICAgICAgICAgICAgZnVuY3Rpb24gYWRkRmFjZSggYSwgYiwgYywgbWF0ZXJpYWxJbmRleCAp
IHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgdmVydGV4Tm9ybWFscyA9IG5vcm1hbHMg
IT09IHVuZGVmaW5lZCA/IFsgdGVtcE5vcm1hbHNbIGEgXS5jbG9uZSgpLCB0ZW1wTm9ybWFsc1sg
YiBdLmNsb25lKCksIHRlbXBOb3JtYWxzWyBjIF0uY2xvbmUoKSBdIDogW107Ci0gICAgICAgICAg
ICAgICAgdmFyIHZlcnRleENvbG9ycyA9IGNvbG9ycyAhPT0gdW5kZWZpbmVkID8gWyBzY29wZS5j
b2xvcnNbIGEgXS5jbG9uZSgpLCBzY29wZS5jb2xvcnNbIGIgXS5jbG9uZSgpLCBzY29wZS5jb2xv
cnNbIGMgXS5jbG9uZSgpIF0gOiBbXTsKKyAgICBJbnQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7CisgICAgSW50
MTZCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50MTZCdWZmZXJBdHRy
aWJ1dGU7CiAKLSAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IG5ldyBGYWNlMyggYSwgYiwgYywg
dmVydGV4Tm9ybWFscywgdmVydGV4Q29sb3JzLCBtYXRlcmlhbEluZGV4ICk7CiAKLSAgICAgICAg
ICAgICAgICBzY29wZS5mYWNlcy5wdXNoKCBmYWNlICk7CisgICAgZnVuY3Rpb24gVWludDE2QnVm
ZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUsIG5vcm1hbGl6ZWQgKSB7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIHV2cyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICBCdWZmZXJBdHRyaWJ1
dGUuY2FsbCggdGhpcywgbmV3IFVpbnQxNkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSwgbm9ybWFs
aXplZCApOwogCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlLmZhY2VWZXJ0ZXhVdnNbIDAgXS5w
dXNoKCBbIHRlbXBVVnNbIGEgXS5jbG9uZSgpLCB0ZW1wVVZzWyBiIF0uY2xvbmUoKSwgdGVtcFVW
c1sgYyBdLmNsb25lKCkgXSApOworICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICBVaW50
MTZCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmli
dXRlLnByb3RvdHlwZSApOworICAgIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29u
c3RydWN0b3IgPSBVaW50MTZCdWZmZXJBdHRyaWJ1dGU7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IHV2czIgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICBzY29wZS5mYWNl
VmVydGV4VXZzWyAxIF0ucHVzaCggWyB0ZW1wVVZzMlsgYSBdLmNsb25lKCksIHRlbXBVVnMyWyBi
IF0uY2xvbmUoKSwgdGVtcFVWczJbIGMgXS5jbG9uZSgpIF0gKTsKKyAgICBmdW5jdGlvbiBJbnQz
MkJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplLCBub3JtYWxpemVkICkgewogCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgbmV3IElu
dDMyQXJyYXkoIGFycmF5ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7CiAKLSAgICAgICAgICAg
IH0KKyAgICB9CiAKLSAgICAgICAgICAgIHZhciBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7Cisg
ICAgSW50MzJCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVy
QXR0cmlidXRlLnByb3RvdHlwZSApOworICAgIEludDMyQnVmZmVyQXR0cmlidXRlLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9IEludDMyQnVmZmVyQXR0cmlidXRlOwogCi0gICAgICAgICAgICBpZiAo
IGdyb3Vwcy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSArKyApIHsKKyAgICBmdW5jdGlvbiBVaW50MzJCdWZmZXJB
dHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSwgbm9ybWFsaXplZCApIHsKIAotICAgICAgICAgICAg
ICAgICAgICB2YXIgZ3JvdXAgPSBncm91cHNbIGkgXTsKKyAgICAgICAgQnVmZmVyQXR0cmlidXRl
LmNhbGwoIHRoaXMsIG5ldyBVaW50MzJBcnJheSggYXJyYXkgKSwgaXRlbVNpemUsIG5vcm1hbGl6
ZWQgKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBncm91cC5zdGFydDsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZ3JvdXAuY291bnQ7CisgICAgfQogCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gc3RhcnQsIGpsID0gc3RhcnQgKyBjb3VudDsg
aiA8IGpsOyBqICs9IDMgKSB7CisgICAgVWludDMyQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSA9
IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUgKTsKKyAgICBVaW50MzJC
dWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVWludDMyQnVmZmVyQXR0cmli
dXRlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGljZXMgIT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZhY2UoIGluZGljZXNbIGog
XSwgaW5kaWNlc1sgaiArIDEgXSwgaW5kaWNlc1sgaiArIDIgXSwgZ3JvdXAubWF0ZXJpYWxJbmRl
eCApOworICAgIGZ1bmN0aW9uIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6
ZSwgbm9ybWFsaXplZCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBGbG9hdDMyQXJyYXkoIGFycmF5
ICksIGl0ZW1TaXplLCBub3JtYWxpemVkICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRGYWNlKCBqLCBqICsgMSwgaiArIDIsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKKyAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICBGbG9hdDMyQnVmZmVyQXR0cmlidXRl
LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUgKTsK
KyAgICBGbG9hdDMyQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZsb2F0
MzJCdWZmZXJBdHRyaWJ1dGU7CiAKLSAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgfQorICAgIGZ1bmN0aW9uIEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVt
U2l6ZSwgbm9ybWFsaXplZCApIHsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgQnVm
ZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBGbG9hdDY0QXJyYXkoIGFycmF5ICksIGl0ZW1T
aXplLCBub3JtYWxpemVkICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGluZGljZXMgIT09IHVu
ZGVmaW5lZCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMyApIHsKKyAgICBGbG9hdDY0QnVmZmVyQXR0cmli
dXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUg
KTsKKyAgICBGbG9hdDY0QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZs
b2F0NjRCdWZmZXJBdHRyaWJ1dGU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZhY2Uo
IGluZGljZXNbIGkgXSwgaW5kaWNlc1sgaSArIDEgXSwgaW5kaWNlc1sgaSArIDIgXSApOworICAg
IC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICov
CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIERpcmVjdEdlb21ldHJ5KCkg
ewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IFtd
OworICAgICAgICB0aGlzLm5vcm1hbHMgPSBbXTsKKyAgICAgICAgdGhpcy5jb2xvcnMgPSBbXTsK
KyAgICAgICAgdGhpcy51dnMgPSBbXTsKKyAgICAgICAgdGhpcy51dnMyID0gW107CiAKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aCAvIDM7
IGkgKz0gMyApIHsKKyAgICAgICAgdGhpcy5ncm91cHMgPSBbXTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkRmFjZSggaSwgaSArIDEsIGkgKyAyICk7CisgICAgICAgIHRoaXMubW9ycGhU
YXJnZXRzID0ge307CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB0aGlzLnNraW5X
ZWlnaHRzID0gW107CisgICAgICAgIHRoaXMuc2tpbkluZGljZXMgPSBbXTsKIAotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgLy8gdGhpcy5saW5lRGlzdGFuY2VzID0gW107CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG51bGw7CisgICAgICAgIHRoaXMuYm91
bmRpbmdTcGhlcmUgPSBudWxsOwogCi0gICAgICAgICAgICB0aGlzLmNvbXB1dGVGYWNlTm9ybWFs
cygpOworICAgICAgICAvLyB1cGRhdGUgZmxhZ3MKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRy
eS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKKyAgICAgICAgdGhpcy52ZXJ0aWNlc05lZWRVcGRh
dGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5ub3JtYWxzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAg
ICAgICB0aGlzLmNvbG9yc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy51dnNOZWVk
VXBkYXRlID0gZmFsc2U7CisgICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZhbHNlOwog
Ci0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGdlb21ldHJ5LmJvdW5kaW5nQm94
LmNsb25lKCk7CisgICAgfQogCi0gICAgICAgICAgICB9CisgICAgT2JqZWN0LmFzc2lnbiggRGly
ZWN0R2VvbWV0cnkucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91
bmRpbmdTcGhlcmUgIT09IG51bGwgKSB7CisgICAgICAgIGNvbXB1dGVHcm91cHM6IGZ1bmN0aW9u
ICggZ2VvbWV0cnkgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0g
Z2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuY2xvbmUoKTsKKyAgICAgICAgICAgIHZhciBncm91cDsK
KyAgICAgICAgICAgIHZhciBncm91cHMgPSBbXTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbElu
ZGV4ID0gdW5kZWZpbmVkOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZmFjZXMg
PSBnZW9tZXRyeS5mYWNlczsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBmYWNlcy5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGZhY2VzWyBpIF07CiAKLSAgICAgICAgY2Vu
dGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gbWF0ZXJpYWxzCiAKLSAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgaWYgKCBm
YWNlLm1hdGVyaWFsSW5kZXggIT09IG1hdGVyaWFsSW5kZXggKSB7CiAKLSAgICAgICAgICAgIHZh
ciBvZmZzZXQgPSB0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcigpLm5lZ2F0ZSgpOworICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4ID0gZmFjZS5tYXRlcmlhbEluZGV4OwogCi0gICAg
ICAgICAgICB0aGlzLnRyYW5zbGF0ZSggb2Zmc2V0LngsIG9mZnNldC55LCBvZmZzZXQueiApOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIGdyb3VwICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5jb3Vu
dCA9ICggaSAqIDMgKSAtIGdyb3VwLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgZ3Jv
dXBzLnB1c2goIGdyb3VwICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBn
cm91cCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBpICogMywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXgKKyAgICAgICAgICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBjZW50ZXIgPSB0aGlzLmJvdW5k
aW5nU3BoZXJlLmNlbnRlcjsKLSAgICAgICAgICAgIHZhciByYWRpdXMgPSB0aGlzLmJvdW5kaW5n
U3BoZXJlLnJhZGl1czsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHMgPSByYWRp
dXMgPT09IDAgPyAxIDogMS4wIC8gcmFkaXVzOworICAgICAgICAgICAgaWYgKCBncm91cCAhPT0g
dW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTsK
LSAgICAgICAgICAgIG1hdHJpeC5zZXQoCi0gICAgICAgICAgICAgICAgcywgMCwgMCwgLSBzICog
Y2VudGVyLngsCi0gICAgICAgICAgICAgICAgMCwgcywgMCwgLSBzICogY2VudGVyLnksCi0gICAg
ICAgICAgICAgICAgMCwgMCwgcywgLSBzICogY2VudGVyLnosCi0gICAgICAgICAgICAgICAgMCwg
MCwgMCwgMQotICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBncm91cC5jb3VudCA9ICgg
aSAqIDMgKSAtIGdyb3VwLnN0YXJ0OworICAgICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCBncm91
cCApOwogCi0gICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtYXRyaXggKTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB0aGlzLmdyb3Vw
cyA9IGdyb3VwczsKIAogICAgICAgICB9LAogCi0gICAgICAgIGNvbXB1dGVGYWNlTm9ybWFsczog
ZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICB2YXIgY2IgPSBuZXcgVmVjdG9yMygpLCBhYiA9
IG5ldyBWZWN0b3IzKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIHZhciBmID0gMCwgZmwgPSB0aGlz
LmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgewotCi0gICAgICAgICAgICAgICAgdmFyIGZh
Y2UgPSB0aGlzLmZhY2VzWyBmIF07Ci0KLSAgICAgICAgICAgICAgICB2YXIgdkEgPSB0aGlzLnZl
cnRpY2VzWyBmYWNlLmEgXTsKLSAgICAgICAgICAgICAgICB2YXIgdkIgPSB0aGlzLnZlcnRpY2Vz
WyBmYWNlLmIgXTsKLSAgICAgICAgICAgICAgICB2YXIgdkMgPSB0aGlzLnZlcnRpY2VzWyBmYWNl
LmMgXTsKKyAgICAgICAgZnJvbUdlb21ldHJ5OiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgewogCi0g
ICAgICAgICAgICAgICAgY2Iuc3ViVmVjdG9ycyggdkMsIHZCICk7Ci0gICAgICAgICAgICAgICAg
YWIuc3ViVmVjdG9ycyggdkEsIHZCICk7Ci0gICAgICAgICAgICAgICAgY2IuY3Jvc3MoIGFiICk7
CisgICAgICAgICAgICB2YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKKyAgICAgICAgICAgIHZh
ciB2ZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzOworICAgICAgICAgICAgdmFyIGZhY2VWZXJ0
ZXhVdnMgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzOwogCi0gICAgICAgICAgICAgICAgY2Iubm9y
bWFsaXplKCk7CisgICAgICAgICAgICB2YXIgaGFzRmFjZVZlcnRleFV2ID0gZmFjZVZlcnRleFV2
c1sgMCBdICYmIGZhY2VWZXJ0ZXhVdnNbIDAgXS5sZW5ndGggPiAwOworICAgICAgICAgICAgdmFy
IGhhc0ZhY2VWZXJ0ZXhVdjIgPSBmYWNlVmVydGV4VXZzWyAxIF0gJiYgZmFjZVZlcnRleFV2c1sg
MSBdLmxlbmd0aCA+IDA7CiAKLSAgICAgICAgICAgICAgICBmYWNlLm5vcm1hbC5jb3B5KCBjYiAp
OworICAgICAgICAgICAgLy8gbW9ycGhzCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7CisgICAgICAgICAgICB2YXIg
bW9ycGhUYXJnZXRzTGVuZ3RoID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0c1Bvc2l0aW9uOwogCi0gICAgICAgIGNvbXB1dGVW
ZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoIGFyZWFXZWlnaHRlZCApIHsKKyAgICAgICAgICAgIGlm
ICggbW9ycGhUYXJnZXRzTGVuZ3RoID4gMCApIHsKIAotICAgICAgICAgICAgaWYgKCBhcmVhV2Vp
Z2h0ZWQgPT09IHVuZGVmaW5lZCApIGFyZWFXZWlnaHRlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgbW9ycGhUYXJnZXRzUG9zaXRpb24gPSBbXTsKIAotICAgICAgICAgICAgdmFyIHYsIHZsLCBm
LCBmbCwgZmFjZSwgdmVydGljZXM7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwgbW9ycGhUYXJnZXRzTGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgICAgICB2ZXJ0aWNlcyA9
IG5ldyBBcnJheSggdGhpcy52ZXJ0aWNlcy5sZW5ndGggKTsKKyAgICAgICAgICAgICAgICAgICAg
bW9ycGhUYXJnZXRzUG9zaXRpb25bIGkgXSA9IFtdOwogCi0gICAgICAgICAgICBmb3IgKCB2ID0g
MCwgdmwgPSB0aGlzLnZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICsrICkgeworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZlcnRpY2VzWyB2IF0gPSBuZXcgVmVjdG9yMygp
OworICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzLnBvc2l0aW9uID0gbW9ycGhUYXJn
ZXRzUG9zaXRpb247CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBhcmVhV2Vp
Z2h0ZWQgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyB2ZXJ0ZXggbm9ybWFscyB3ZWlnaHRlZCBi
eSB0cmlhbmdsZSBhcmVhcwotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuaXF1aWxlemxl
cy5vcmcvd3d3L2FydGljbGVzL25vcm1hbHMvbm9ybWFscy5odG0KLQotICAgICAgICAgICAgICAg
IHZhciB2QSwgdkIsIHZDOwotICAgICAgICAgICAgICAgIHZhciBjYiA9IG5ldyBWZWN0b3IzKCks
IGFiID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBtb3JwaE5vcm1hbHMgPSBnZW9t
ZXRyeS5tb3JwaE5vcm1hbHM7CisgICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWxzTGVuZ3RoID0g
bW9ycGhOb3JtYWxzLmxlbmd0aDsKIAotICAgICAgICAgICAgICAgIGZvciAoIGYgPSAwLCBmbCA9
IHRoaXMuZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7CisgICAgICAgICAgICB2YXIgbW9y
cGhUYXJnZXRzTm9ybWFsOwogCi0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2Vz
WyBmIF07CisgICAgICAgICAgICBpZiAoIG1vcnBoTm9ybWFsc0xlbmd0aCA+IDAgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgdkEgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmEgXTsKLSAgICAgICAg
ICAgICAgICAgICAgdkIgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmIgXTsKLSAgICAgICAgICAgICAg
ICAgICAgdkMgPSB0aGlzLnZlcnRpY2VzWyBmYWNlLmMgXTsKKyAgICAgICAgICAgICAgICBtb3Jw
aFRhcmdldHNOb3JtYWwgPSBbXTsKIAotICAgICAgICAgICAgICAgICAgICBjYi5zdWJWZWN0b3Jz
KCB2QywgdkIgKTsKLSAgICAgICAgICAgICAgICAgICAgYWIuc3ViVmVjdG9ycyggdkEsIHZCICk7
Ci0gICAgICAgICAgICAgICAgICAgIGNiLmNyb3NzKCBhYiApOworICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMDsgaSA8IG1vcnBoTm9ybWFsc0xlbmd0aDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgICAgICAgICB2ZXJ0aWNlc1sgZmFjZS5hIF0uYWRkKCBjYiApOwotICAgICAgICAgICAg
ICAgICAgICB2ZXJ0aWNlc1sgZmFjZS5iIF0uYWRkKCBjYiApOwotICAgICAgICAgICAgICAgICAg
ICB2ZXJ0aWNlc1sgZmFjZS5jIF0uYWRkKCBjYiApOworICAgICAgICAgICAgICAgICAgICBtb3Jw
aFRhcmdldHNOb3JtYWxbIGkgXSA9IFtdOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlRmFjZU5vcm1hbHMo
KTsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWwgPSBtb3JwaFRhcmdl
dHNOb3JtYWw7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0aGlzLmZhY2Vz
Lmxlbmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CisgICAgICAgICAgICAvLyBza2lucwogCi0g
ICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmEgXS5hZGQoIGZhY2Uubm9ybWFsICk7
Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmIgXS5hZGQoIGZhY2Uubm9ybWFs
ICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzWyBmYWNlLmMgXS5hZGQoIGZhY2Uubm9y
bWFsICk7CisgICAgICAgICAgICB2YXIgc2tpbkluZGljZXMgPSBnZW9tZXRyeS5za2luSW5kaWNl
czsKKyAgICAgICAgICAgIHZhciBza2luV2VpZ2h0cyA9IGdlb21ldHJ5LnNraW5XZWlnaHRzOwog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGhhc1NraW5JbmRpY2VzID0gc2tp
bkluZGljZXMubGVuZ3RoID09PSB2ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAgICAgICB2YXIgaGFz
U2tpbldlaWdodHMgPSBza2luV2VpZ2h0cy5sZW5ndGggPT09IHZlcnRpY2VzLmxlbmd0aDsKIAot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgZm9yICggdiA9IDAs
IHZsID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHsKKyAgICAgICAgICAg
IGlmICggdmVydGljZXMubGVuZ3RoID4gMCAmJiBmYWNlcy5sZW5ndGggPT09IDAgKSB7CiAKLSAg
ICAgICAgICAgICAgICB2ZXJ0aWNlc1sgdiBdLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoICdUSFJFRS5EaXJlY3RHZW9tZXRyeTogRmFjZWxlc3MgZ2VvbWV0cmll
cyBhcmUgbm90IHN1cHBvcnRlZC4nICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Zm9yICggZiA9IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKKyAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGZhY2VzLmxlbmd0aDsgaSArKyApIHsKIAot
ICAgICAgICAgICAgICAgIGZhY2UgPSB0aGlzLmZhY2VzWyBmIF07CisgICAgICAgICAgICAgICAg
dmFyIGZhY2UgPSBmYWNlc1sgaSBdOworCisgICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcy5w
dXNoKCB2ZXJ0aWNlc1sgZmFjZS5hIF0sIHZlcnRpY2VzWyBmYWNlLmIgXSwgdmVydGljZXNbIGZh
Y2UuYyBdICk7CiAKICAgICAgICAgICAgICAgICB2YXIgdmVydGV4Tm9ybWFscyA9IGZhY2UudmVy
dGV4Tm9ybWFsczsKIAogICAgICAgICAgICAgICAgIGlmICggdmVydGV4Tm9ybWFscy5sZW5ndGgg
PT09IDMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMCBdLmNvcHko
IHZlcnRpY2VzWyBmYWNlLmEgXSApOwotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxz
WyAxIF0uY29weSggdmVydGljZXNbIGZhY2UuYiBdICk7Ci0gICAgICAgICAgICAgICAgICAgIHZl
cnRleE5vcm1hbHNbIDIgXS5jb3B5KCB2ZXJ0aWNlc1sgZmFjZS5jIF0gKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5ub3JtYWxzLnB1c2goIHZlcnRleE5vcm1hbHNbIDAgXSwgdmVydGV4Tm9y
bWFsc1sgMSBdLCB2ZXJ0ZXhOb3JtYWxzWyAyIF0gKTsKIAogICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMCBdID0gdmVydGljZXNb
IGZhY2UuYSBdLmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDEg
XSA9IHZlcnRpY2VzWyBmYWNlLmIgXS5jbG9uZSgpOwotICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXhOb3JtYWxzWyAyIF0gPSB2ZXJ0aWNlc1sgZmFjZS5jIF0uY2xvbmUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG5vcm1hbCA9IGZhY2Uubm9ybWFsOworCisgICAgICAgICAgICAgICAgICAg
IHRoaXMubm9ybWFscy5wdXNoKCBub3JtYWwsIG5vcm1hbCwgbm9ybWFsICk7CiAKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdmVydGV4Q29s
b3JzID0gZmFjZS52ZXJ0ZXhDb2xvcnM7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5mYWNlcy5s
ZW5ndGggPiAwICkgeworICAgICAgICAgICAgICAgIGlmICggdmVydGV4Q29sb3JzLmxlbmd0aCA9
PT0gMyApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsc05lZWRVcGRhdGUgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9ycy5wdXNoKCB2ZXJ0ZXhDb2xvcnNbIDAg
XSwgdmVydGV4Q29sb3JzWyAxIF0sIHZlcnRleENvbG9yc1sgMiBdICk7CiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgICAgIHZhciBjb2xvciA9IGZhY2UuY29sb3I7CiAKLSAgICAgICAgY29tcHV0ZUZsYXRWZXJ0
ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3Jz
LnB1c2goIGNvbG9yLCBjb2xvciwgY29sb3IgKTsKIAotICAgICAgICAgICAgdmFyIGYsIGZsLCBm
YWNlOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5jb21wdXRlRmFjZU5v
cm1hbHMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiA9PT0gdHJ1ZSAp
IHsKIAotICAgICAgICAgICAgZm9yICggZiA9IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYg
PCBmbDsgZiArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRleFV2cyA9IGZhY2VW
ZXJ0ZXhVdnNbIDAgXVsgaSBdOwogCi0gICAgICAgICAgICAgICAgZmFjZSA9IHRoaXMuZmFjZXNb
IGYgXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2ZXJ0ZXhVdnMgIT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhOb3JtYWxzID0gZmFjZS52ZXJ0ZXhOb3Jt
YWxzOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dnMucHVzaCggdmVydGV4VXZzWyAw
IF0sIHZlcnRleFV2c1sgMSBdLCB2ZXJ0ZXhVdnNbIDIgXSApOwogCi0gICAgICAgICAgICAgICAg
aWYgKCB2ZXJ0ZXhOb3JtYWxzLmxlbmd0aCA9PT0gMyApIHsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhOb3JtYWxzWyAwIF0uY29weSgg
ZmFjZS5ub3JtYWwgKTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFsc1sgMSBdLmNv
cHkoIGZhY2Uubm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDIg
XS5jb3B5KCBmYWNlLm5vcm1hbCApOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuRGlyZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2ZXJ0
ZXhVdiAnLCBpICk7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy51dnMucHVzaCggbmV3IFZlY3RvcjIoKSwgbmV3IFZlY3RvcjIoKSwgbmV3
IFZlY3RvcjIoKSApOwogCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNbIDAgXSA9
IGZhY2Uubm9ybWFsLmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHNb
IDEgXSA9IGZhY2Uubm9ybWFsLmNsb25lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5v
cm1hbHNbIDIgXSA9IGZhY2Uubm9ybWFsLmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
IHRoaXMuZmFjZXMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VW
ZXJ0ZXhVdjIgPT09IHRydWUgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbHNOZWVk
VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRleFV2cyA9IGZhY2VW
ZXJ0ZXhVdnNbIDEgXVsgaSBdOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICggdmVydGV4VXZzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudXZzMi5wdXNoKCB2ZXJ0ZXhVdnNbIDAgXSwgdmVydGV4VXZz
WyAxIF0sIHZlcnRleFV2c1sgMiBdICk7CiAKLSAgICAgICAgY29tcHV0ZU1vcnBoTm9ybWFsczog
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAg
ICB2YXIgaSwgaWwsIGYsIGZsLCBmYWNlOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuRGlyZWN0R2VvbWV0cnkuZnJvbUdlb21ldHJ5KCk6IFVuZGVmaW5lZCB2
ZXJ0ZXhVdjIgJywgaSApOwogCi0gICAgICAgICAgICAvLyBzYXZlIG9yaWdpbmFsIG5vcm1hbHMK
LSAgICAgICAgICAgIC8vIC0gY3JlYXRlIHRlbXAgdmFyaWFibGVzIG9uIGZpcnN0IGFjY2Vzcwot
ICAgICAgICAgICAgLy8gICBvdGhlcndpc2UganVzdCBjb3B5IChmb3IgZmFzdGVyIHJlcGVhdGVk
IGNhbGxzKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dnMyLnB1c2goIG5ldyBWZWN0
b3IyKCksIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCkgKTsKIAotICAgICAgICAgICAgZm9y
ICggZiA9IDAsIGZsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZmFjZSA9IHRoaXMuZmFjZXNbIGYg
XTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoICEgZmFjZS5fX29y
aWdpbmFsRmFjZU5vcm1hbCApIHsKKyAgICAgICAgICAgICAgICAvLyBtb3JwaHMKIAotICAgICAg
ICAgICAgICAgICAgICBmYWNlLl9fb3JpZ2luYWxGYWNlTm9ybWFsID0gZmFjZS5ub3JtYWwuY2xv
bmUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCBtb3JwaFRhcmdldHNM
ZW5ndGg7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgbW9ycGhUYXJnZXQgPSBtb3JwaFRhcmdldHNbIGogXS52ZXJ0aWNlczsKIAot
ICAgICAgICAgICAgICAgICAgICBmYWNlLl9fb3JpZ2luYWxGYWNlTm9ybWFsLmNvcHkoIGZhY2Uu
bm9ybWFsICk7CisgICAgICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1Bvc2l0aW9uWyBqIF0u
cHVzaCggbW9ycGhUYXJnZXRbIGZhY2UuYSBdLCBtb3JwaFRhcmdldFsgZmFjZS5iIF0sIG1vcnBo
VGFyZ2V0WyBmYWNlLmMgXSApOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKCAhIGZhY2UuX19vcmlnaW5hbFZlcnRleE5vcm1hbHMgKSBmYWNlLl9fb3JpZ2luYWxW
ZXJ0ZXhOb3JtYWxzID0gW107CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqIDwg
bW9ycGhOb3JtYWxzTGVuZ3RoOyBqICsrICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggaSA9
IDAsIGlsID0gZmFjZS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWwgPSBtb3JwaE5vcm1hbHNbIGogXS52ZXJ0
ZXhOb3JtYWxzWyBpIF07CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGZhY2UuX19vcmln
aW5hbFZlcnRleE5vcm1hbHNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJn
ZXRzTm9ybWFsWyBqIF0ucHVzaCggbW9ycGhOb3JtYWwuYSwgbW9ycGhOb3JtYWwuYiwgbW9ycGhO
b3JtYWwuYyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlLl9fb3JpZ2luYWxWZXJ0
ZXhOb3JtYWxzWyBpIF0gPSBmYWNlLnZlcnRleE5vcm1hbHNbIGkgXS5jbG9uZSgpOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIHNraW5zCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UuX19vcmlnaW5hbFZl
cnRleE5vcm1hbHNbIGkgXS5jb3B5KCBmYWNlLnZlcnRleE5vcm1hbHNbIGkgXSApOworICAgICAg
ICAgICAgICAgIGlmICggaGFzU2tpbkluZGljZXMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB0aGlzLnNraW5JbmRpY2VzLnB1c2goIHNraW5JbmRpY2Vz
WyBmYWNlLmEgXSwgc2tpbkluZGljZXNbIGZhY2UuYiBdLCBza2luSW5kaWNlc1sgZmFjZS5jIF0g
KTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICggaGFzU2tpbldlaWdodHMgKSB7CiAKLSAgICAgICAgICAgIC8vIHVzZSB0ZW1wIGdlb21l
dHJ5IHRvIGNvbXB1dGUgZmFjZSBhbmQgdmVydGV4IG5vcm1hbHMgZm9yIGVhY2ggbW9ycGgKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5za2luV2VpZ2h0cy5wdXNoKCBza2luV2VpZ2h0c1sgZmFj
ZS5hIF0sIHNraW5XZWlnaHRzWyBmYWNlLmIgXSwgc2tpbldlaWdodHNbIGZhY2UuYyBdICk7CiAK
LSAgICAgICAgICAgIHZhciB0bXBHZW8gPSBuZXcgR2VvbWV0cnkoKTsKLSAgICAgICAgICAgIHRt
cEdlby5mYWNlcyA9IHRoaXMuZmFjZXM7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBmb3IgKCBpID0gMCwgaWwgPSB0aGlzLm1vcnBoVGFyZ2V0cy5sZW5ndGg7IGkgPCBpbDsgaSAr
KyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBvbiBmaXJz
dCBhY2Nlc3MKKyAgICAgICAgICAgIHRoaXMuY29tcHV0ZUdyb3VwcyggZ2VvbWV0cnkgKTsKIAot
ICAgICAgICAgICAgICAgIGlmICggISB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdICkgeworICAgICAg
ICAgICAgdGhpcy52ZXJ0aWNlc05lZWRVcGRhdGUgPSBnZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRh
dGU7CisgICAgICAgICAgICB0aGlzLm5vcm1hbHNOZWVkVXBkYXRlID0gZ2VvbWV0cnkubm9ybWFs
c05lZWRVcGRhdGU7CisgICAgICAgICAgICB0aGlzLmNvbG9yc05lZWRVcGRhdGUgPSBnZW9tZXRy
eS5jb2xvcnNOZWVkVXBkYXRlOworICAgICAgICAgICAgdGhpcy51dnNOZWVkVXBkYXRlID0gZ2Vv
bWV0cnkudXZzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9
IGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGU7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5t
b3JwaE5vcm1hbHNbIGkgXSA9IHt9OwotICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoTm9y
bWFsc1sgaSBdLmZhY2VOb3JtYWxzID0gW107Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubW9y
cGhOb3JtYWxzWyBpIF0udmVydGV4Tm9ybWFscyA9IFtdOworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRzdE5vcm1hbHNGYWNlID0gdGhpcy5tb3Jw
aE5vcm1hbHNbIGkgXS5mYWNlTm9ybWFsczsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRzdE5v
cm1hbHNWZXJ0ZXggPSB0aGlzLm1vcnBoTm9ybWFsc1sgaSBdLnZlcnRleE5vcm1hbHM7CisgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZU5vcm1hbCwgdmVydGV4Tm9ybWFs
czsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICggZiA9IDAsIGZsID0gdGhp
cy5mYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9y
IG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmYWNlTm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnRleE5vcm1hbHMgPSB7IGE6IG5ldyBWZWN0b3IzKCksIGI6IG5ldyBWZWN0b3IzKCks
IGM6IG5ldyBWZWN0b3IzKCkgfTsKKyAgICBmdW5jdGlvbiBhcnJheU1heCggYXJyYXkgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRzdE5vcm1hbHNGYWNlLnB1c2goIGZhY2VOb3JtYWwg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRzdE5vcm1hbHNWZXJ0ZXgucHVzaCggdmVydGV4
Tm9ybWFscyApOworICAgICAgICBpZiAoIGFycmF5Lmxlbmd0aCA9PT0gMCApIHJldHVybiAtIElu
ZmluaXR5OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdmFyIG1heCA9IGFycmF5
WyAwIF07CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGZvciAoIHZhciBpID0gMSwgbCA9
IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsrIGkgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgbW9y
cGhOb3JtYWxzID0gdGhpcy5tb3JwaE5vcm1hbHNbIGkgXTsKKyAgICAgICAgICAgIGlmICggYXJy
YXlbIGkgXSA+IG1heCApIG1heCA9IGFycmF5WyBpIF07CiAKLSAgICAgICAgICAgICAgICAvLyBz
ZXQgdmVydGljZXMgdG8gbW9ycGggdGFyZ2V0CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHRtcEdlby52ZXJ0aWNlcyA9IHRoaXMubW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXM7CisgICAg
ICAgIHJldHVybiBtYXg7CiAKLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIG1vcnBoIG5vcm1h
bHMKKyAgICB9CiAKLSAgICAgICAgICAgICAgICB0bXBHZW8uY29tcHV0ZUZhY2VOb3JtYWxzKCk7
Ci0gICAgICAgICAgICAgICAgdG1wR2VvLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7CisgICAgLyoq
CisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAg
ICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAg
ICAgICAgICAgICAgLy8gc3RvcmUgbW9ycGggbm9ybWFscworICAgIHZhciBidWZmZXJHZW9tZXRy
eUlkID0gMTsgLy8gQnVmZmVyR2VvbWV0cnkgdXNlcyBvZGQgbnVtYmVycyBhcyBJZAogCi0gICAg
ICAgICAgICAgICAgdmFyIGZhY2VOb3JtYWwsIHZlcnRleE5vcm1hbHM7CisgICAgZnVuY3Rpb24g
QnVmZmVyR2VvbWV0cnkoKSB7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBmID0gMCwgZmwgPSB0
aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IGJ1ZmZlckdlb21ldHJ5SWQgKz0gMiB9ICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZSA9IHRoaXMuZmFjZXNbIGYgXTsKKyAgICAgICAg
dGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ZmFjZU5vcm1hbCA9IG1vcnBoTm9ybWFscy5mYWNlTm9ybWFsc1sgZiBdOwotICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhOb3JtYWxzID0gbW9ycGhOb3JtYWxzLnZlcnRleE5vcm1hbHNbIGYgXTsK
KyAgICAgICAgdGhpcy5uYW1lID0gJyc7CisgICAgICAgIHRoaXMudHlwZSA9ICdCdWZmZXJHZW9t
ZXRyeSc7CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZU5vcm1hbC5jb3B5KCBmYWNlLm5vcm1h
bCApOworICAgICAgICB0aGlzLmluZGV4ID0gbnVsbDsKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVz
ID0ge307CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Tm9ybWFscy5hLmNvcHkoIGZhY2Uu
dmVydGV4Tm9ybWFsc1sgMCBdICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleE5vcm1hbHMu
Yi5jb3B5KCBmYWNlLnZlcnRleE5vcm1hbHNbIDEgXSApOwotICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhOb3JtYWxzLmMuY29weSggZmFjZS52ZXJ0ZXhOb3JtYWxzWyAyIF0gKTsKKyAgICAgICAg
dGhpcy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
dGhpcy5ncm91cHMgPSBbXTsKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLmJvdW5kaW5n
Qm94ID0gbnVsbDsKKyAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7CiAKLSAgICAg
ICAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbm9ybWFscworICAgICAgICB0aGlzLmRyYXdSYW5n
ZSA9IHsgc3RhcnQ6IDAsIGNvdW50OiBJbmZpbml0eSB9OwogCi0gICAgICAgICAgICBmb3IgKCBm
ID0gMCwgZmwgPSB0aGlzLmZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgICAgICB0
aGlzLnVzZXJEYXRhID0ge307CiAKLSAgICAgICAgICAgICAgICBmYWNlID0gdGhpcy5mYWNlc1sg
ZiBdOworICAgIH0KIAotICAgICAgICAgICAgICAgIGZhY2Uubm9ybWFsID0gZmFjZS5fX29yaWdp
bmFsRmFjZU5vcm1hbDsKLSAgICAgICAgICAgICAgICBmYWNlLnZlcnRleE5vcm1hbHMgPSBmYWNl
Ll9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzOworICAgIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9
IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUg
KSwgewogCi0gICAgICAgICAgICB9CisgICAgICAgIGNvbnN0cnVjdG9yOiBCdWZmZXJHZW9tZXRy
eSwKIAotICAgICAgICB9LAorICAgICAgICBpc0J1ZmZlckdlb21ldHJ5OiB0cnVlLAogCi0gICAg
ICAgIGNvbXB1dGVMaW5lRGlzdGFuY2VzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGdldEluZGV4
OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciBkID0gMDsKLSAgICAgICAgICAgIHZh
ciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRl
eDsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IHZlcnRpY2VzLmxlbmd0aDsg
aSA8IGlsOyBpICsrICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgaWYgKCBpID4g
MCApIHsKKyAgICAgICAgc2V0SW5kZXg6IGZ1bmN0aW9uICggaW5kZXggKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgZCArPSB2ZXJ0aWNlc1sgaSBdLmRpc3RhbmNlVG8oIHZlcnRpY2VzWyBpIC0g
MSBdICk7CisgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIGluZGV4ICkgKSB7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IG5ldyAoIGFycmF5
TWF4KCBpbmRleCApID4gNjU1MzUgPyBVaW50MzJCdWZmZXJBdHRyaWJ1dGUgOiBVaW50MTZCdWZm
ZXJBdHRyaWJ1dGUgKSggaW5kZXgsIDEgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMubGluZURp
c3RhbmNlc1sgaSBdID0gZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAg
ICB0aGlzLmluZGV4ID0gaW5kZXg7CiAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9LAogCi0g
ICAgICAgIGNvbXB1dGVCb3VuZGluZ0JveDogZnVuY3Rpb24gKCkgeworICAgICAgICBhZGRBdHRy
aWJ1dGU6IGZ1bmN0aW9uICggbmFtZSwgYXR0cmlidXRlICkgewogCi0gICAgICAgICAgICBpZiAo
IHRoaXMuYm91bmRpbmdCb3ggPT09IG51bGwgKSB7CisgICAgICAgICAgICBpZiAoICEgKCBhdHRy
aWJ1dGUgJiYgYXR0cmlidXRlLmlzQnVmZmVyQXR0cmlidXRlICkgJiYgISAoIGF0dHJpYnV0ZSAm
JiBhdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApICkgewogCi0gICAgICAg
ICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3gzKCk7CisgICAgICAgICAgICAgICAg
Y29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cg
ZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLicgKTsKKworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmFkZEF0dHJpYnV0ZSggbmFtZSwgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggYXJndW1lbnRz
WyAxIF0sIGFyZ3VtZW50c1sgMiBdICkgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB0aGlzLmJvdW5kaW5nQm94LnNldEZyb21Qb2ludHMoIHRoaXMudmVydGljZXMgKTsKKyAgICAg
ICAgICAgIGlmICggbmFtZSA9PT0gJ2luZGV4JyApIHsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTog
VXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuJyApOworICAgICAgICAgICAgICAg
IHRoaXMuc2V0SW5kZXgoIGF0dHJpYnV0ZSApOwogCi0gICAgICAgIGNvbXB1dGVCb3VuZGluZ1Nw
aGVyZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSB7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbmV3IFNwaGVyZSgp
OworICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzWyBuYW1lIF0gPSBhdHRyaWJ1dGU7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB0aGlz
LmJvdW5kaW5nU3BoZXJlLnNldEZyb21Qb2ludHMoIHRoaXMudmVydGljZXMgKTsKKyAgICAgICAg
fSwKKworICAgICAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uICggbmFtZSApIHsKKworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1sgbmFtZSBdOwogCiAgICAgICAgIH0sCiAKLSAg
ICAgICAgbWVyZ2U6IGZ1bmN0aW9uICggZ2VvbWV0cnksIG1hdHJpeCwgbWF0ZXJpYWxJbmRleE9m
ZnNldCApIHsKKyAgICAgICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAoIG5hbWUgKSB7CiAK
LSAgICAgICAgICAgIGlmICggISAoIGdlb21ldHJ5ICYmIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSAp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbIG5hbWUgXTsKIAotICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5HZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRy
eSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuR2VvbWV0cnkuJywgZ2VvbWV0cnkgKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAg
ICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICB2YXIgbm9ybWFsTWF0cml4LAotICAgICAg
ICAgICAgICAgIHZlcnRleE9mZnNldCA9IHRoaXMudmVydGljZXMubGVuZ3RoLAotICAgICAgICAg
ICAgICAgIHZlcnRpY2VzMSA9IHRoaXMudmVydGljZXMsCi0gICAgICAgICAgICAgICAgdmVydGlj
ZXMyID0gZ2VvbWV0cnkudmVydGljZXMsCi0gICAgICAgICAgICAgICAgZmFjZXMxID0gdGhpcy5m
YWNlcywKLSAgICAgICAgICAgICAgICBmYWNlczIgPSBnZW9tZXRyeS5mYWNlcywKLSAgICAgICAg
ICAgICAgICB1dnMxID0gdGhpcy5mYWNlVmVydGV4VXZzWyAwIF0sCi0gICAgICAgICAgICAgICAg
dXZzMiA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIDAgXSwKLSAgICAgICAgICAgICAgICBjb2xv
cnMxID0gdGhpcy5jb2xvcnMsCi0gICAgICAgICAgICAgICAgY29sb3JzMiA9IGdlb21ldHJ5LmNv
bG9yczsKKyAgICAgICAgYWRkR3JvdXA6IGZ1bmN0aW9uICggc3RhcnQsIGNvdW50LCBtYXRlcmlh
bEluZGV4ICkgewogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFsSW5kZXhPZmZzZXQgPT09IHVu
ZGVmaW5lZCApIG1hdGVyaWFsSW5kZXhPZmZzZXQgPSAwOworICAgICAgICAgICAgdGhpcy5ncm91
cHMucHVzaCggewogCi0gICAgICAgICAgICBpZiAoIG1hdHJpeCAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBjb3VudDogY291
bnQsCisgICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleDogbWF0ZXJpYWxJbmRleCAhPT0gdW5k
ZWZpbmVkID8gbWF0ZXJpYWxJbmRleCA6IDAKIAotICAgICAgICAgICAgICAgIG5vcm1hbE1hdHJp
eCA9IG5ldyBNYXRyaXgzKCkuZ2V0Tm9ybWFsTWF0cml4KCBtYXRyaXggKTsKKyAgICAgICAgICAg
IH0gKTsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAvLyB2ZXJ0
aWNlcworICAgICAgICBjbGVhckdyb3VwczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGlsID0gdmVydGljZXMyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewor
ICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBbXTsKIAotICAgICAgICAgICAgICAgIHZhciB2ZXJ0
ZXggPSB2ZXJ0aWNlczJbIGkgXTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHZhciB2
ZXJ0ZXhDb3B5ID0gdmVydGV4LmNsb25lKCk7CisgICAgICAgIHNldERyYXdSYW5nZTogZnVuY3Rp
b24gKCBzdGFydCwgY291bnQgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1hdHJpeCAhPT0g
dW5kZWZpbmVkICkgdmVydGV4Q29weS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOworICAgICAgICAg
ICAgdGhpcy5kcmF3UmFuZ2Uuc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgIHRoaXMuZHJhd1Jh
bmdlLmNvdW50ID0gY291bnQ7CiAKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlczEucHVzaCggdmVy
dGV4Q29weSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgIGFwcGx5TWF0
cml4OiBmdW5jdGlvbiAoIG1hdHJpeCApIHsKIAotICAgICAgICAgICAgLy8gY29sb3JzCisgICAg
ICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247CiAKLSAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjb2xvcnMyLmxlbmd0aDsgaSA8IGlsOyBpICsr
ICkgeworICAgICAgICAgICAgaWYgKCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkgewogCi0gICAg
ICAgICAgICAgICAgY29sb3JzMS5wdXNoKCBjb2xvcnMyWyBpIF0uY2xvbmUoKSApOworICAgICAg
ICAgICAgICAgIG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApOworICAg
ICAgICAgICAgICAgIHBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBmYWNlcworICAgICAgICAgICAgdmFyIG5vcm1hbCA9IHRoaXMu
YXR0cmlidXRlcy5ub3JtYWw7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGZhY2Vz
Mi5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgIGlmICggbm9ybWFsICE9PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGZhY2VzMlsgaSBdLCBm
YWNlQ29weSwgbm9ybWFsLCBjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgZmFjZVZlcnRleE5v
cm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHMsCi0gICAgICAgICAgICAgICAgICAgIGZhY2VWZXJ0
ZXhDb2xvcnMgPSBmYWNlLnZlcnRleENvbG9yczsKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFs
TWF0cml4ID0gbmV3IE1hdHJpeDMoKS5nZXROb3JtYWxNYXRyaXgoIG1hdHJpeCApOwogCi0gICAg
ICAgICAgICAgICAgZmFjZUNvcHkgPSBuZXcgRmFjZTMoIGZhY2UuYSArIHZlcnRleE9mZnNldCwg
ZmFjZS5iICsgdmVydGV4T2Zmc2V0LCBmYWNlLmMgKyB2ZXJ0ZXhPZmZzZXQgKTsKLSAgICAgICAg
ICAgICAgICBmYWNlQ29weS5ub3JtYWwuY29weSggZmFjZS5ub3JtYWwgKTsKKyAgICAgICAgICAg
ICAgICBub3JtYWxNYXRyaXguYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggbm9ybWFsICk7CisgICAg
ICAgICAgICAgICAgbm9ybWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAg
IGlmICggbm9ybWFsTWF0cml4ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgZmFjZUNvcHkubm9ybWFsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0
cml4ICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdCb3ggIT09
IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5jb21w
dXRlQm91bmRpbmdCb3goKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwg
PSBmYWNlVmVydGV4Tm9ybWFscy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICBub3JtYWwgPSBmYWNlVmVydGV4Tm9ybWFsc1sgaiBd
LmNsb25lKCk7CisgICAgICAgICAgICBpZiAoIHRoaXMuYm91bmRpbmdTcGhlcmUgIT09IG51bGwg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBub3JtYWxNYXRyaXggIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwuYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXgg
KS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlQ29weS52
ZXJ0ZXhOb3JtYWxzLnB1c2goIG5vcm1hbCApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAg
ICAgfQorICAgICAgICByb3RhdGVYOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICBm
YWNlQ29weS5jb2xvci5jb3B5KCBmYWNlLmNvbG9yICk7CisgICAgICAgICAgICAvLyByb3RhdGUg
Z2VvbWV0cnkgYXJvdW5kIHdvcmxkIHgtYXhpcwogCi0gICAgICAgICAgICAgICAgZm9yICggdmFy
IGogPSAwLCBqbCA9IGZhY2VWZXJ0ZXhDb2xvcnMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7Cisg
ICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4NCgpOwogCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9yID0gZmFjZVZlcnRleENvbG9yc1sgaiBdOwotICAgICAgICAgICAgICAgICAgICBmYWNl
Q29weS52ZXJ0ZXhDb2xvcnMucHVzaCggY29sb3IuY2xvbmUoKSApOworICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIHJvdGF0ZVgoIGFuZ2xlICkgewogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG0xLm1ha2VSb3RhdGlvblgoIGFuZ2xlICk7CiAKLSAgICAgICAgICAgICAg
ICBmYWNlQ29weS5tYXRlcmlhbEluZGV4ID0gZmFjZS5tYXRlcmlhbEluZGV4ICsgbWF0ZXJpYWxJ
bmRleE9mZnNldDsKKyAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOwogCi0g
ICAgICAgICAgICAgICAgZmFjZXMxLnB1c2goIGZhY2VDb3B5ICk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CiAKLSAgICAgICAg
ICAgIC8vIHV2cworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9
IHV2czIubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgIHJvdGF0ZVk6IGZ1bmN0aW9u
ICgpIHsKIAotICAgICAgICAgICAgICAgIHZhciB1diA9IHV2czJbIGkgXSwgdXZDb3B5ID0gW107
CisgICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdvcmxkIHktYXhpcwogCi0g
ICAgICAgICAgICAgICAgaWYgKCB1diA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdmFy
IG0xID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByb3RhdGVZKCBhbmdsZSApIHsKIAotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtMS5tYWtlUm90YXRpb25ZKCBhbmdsZSApOwogCi0g
ICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBqbCA9IHV2Lmxlbmd0aDsgaiA8IGpsOyBq
ICsrICkgeworICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdXZDb3B5LnB1c2goIHV2WyBqIF0uY2xvbmUoKSApOworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgIHV2czEucHVzaCggdXZDb3B5ICk7CisgICAgICAgIH0oKSwKIAot
ICAgICAgICAgICAgfQorICAgICAgICByb3RhdGVaOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgIC8vIHJvdGF0ZSBnZW9tZXRyeSBhcm91bmQgd29ybGQgei1heGlzCiAK
LSAgICAgICAgbWVyZ2VNZXNoOiBmdW5jdGlvbiAoIG1lc2ggKSB7CisgICAgICAgICAgICB2YXIg
bTEgPSBuZXcgTWF0cml4NCgpOwogCi0gICAgICAgICAgICBpZiAoICEgKCBtZXNoICYmIG1lc2gu
aXNNZXNoICkgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlWiggYW5nbGUg
KSB7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuR2VvbWV0cnkubWVy
Z2VNZXNoKCk6IG1lc2ggbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk1lc2guJywgbWVzaCApOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtMS5tYWtlUm90YXRpb25a
KCBhbmdsZSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5hcHBseU1h
dHJpeCggbTEgKTsKIAotICAgICAgICAgICAgbWVzaC5tYXRyaXhBdXRvVXBkYXRlICYmIG1lc2gu
dXBkYXRlTWF0cml4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgIHRoaXMubWVyZ2UoIG1lc2guZ2VvbWV0cnksIG1lc2gubWF0cml4ICk7CisgICAgICAgICAg
ICB9OwogCi0gICAgICAgIH0sCisgICAgICAgIH0oKSwKIAotICAgICAgICAvKgotICAgICAgICAg
KiBDaGVja3MgZm9yIGR1cGxpY2F0ZSB2ZXJ0aWNlcyB3aXRoIGhhc2htYXAuCi0gICAgICAgICAq
IER1cGxpY2F0ZWQgdmVydGljZXMgYXJlIHJlbW92ZWQKLSAgICAgICAgICogYW5kIGZhY2VzJyB2
ZXJ0aWNlcyBhcmUgdXBkYXRlZC4KLSAgICAgICAgICovCisgICAgICAgIHRyYW5zbGF0ZTogZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgIG1lcmdlVmVydGljZXM6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIC8vIHRyYW5zbGF0ZSBnZW9tZXRyeQogCi0gICAgICAgICAgICB2YXIgdmVydGljZXNN
YXAgPSB7fTsgLy8gSGFzaG1hcCBmb3IgbG9va2luZyB1cCB2ZXJ0aWNlcyBieSBwb3NpdGlvbiBj
b29yZGluYXRlcyAoYW5kIG1ha2luZyBzdXJlIHRoZXkgYXJlIHVuaXF1ZSkKLSAgICAgICAgICAg
IHZhciB1bmlxdWUgPSBbXSwgY2hhbmdlcyA9IFtdOworICAgICAgICAgICAgdmFyIG0xID0gbmV3
IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgdmFyIHYsIGtleTsKLSAgICAgICAgICAgIHZhciBw
cmVjaXNpb25Qb2ludHMgPSA0OyAvLyBudW1iZXIgb2YgZGVjaW1hbCBwb2ludHMsIGUuZy4gNCBm
b3IgZXBzaWxvbiBvZiAwLjAwMDEKLSAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBNYXRoLnBv
dyggMTAsIHByZWNpc2lvblBvaW50cyApOwotICAgICAgICAgICAgdmFyIGksIGlsLCBmYWNlOwot
ICAgICAgICAgICAgdmFyIGluZGljZXMsIGosIGpsOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uIHRyYW5zbGF0ZSggeCwgeSwgeiApIHsKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGls
ID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgICAg
ICBtMS5tYWtlVHJhbnNsYXRpb24oIHgsIHksIHogKTsKIAotICAgICAgICAgICAgICAgIHYgPSB0
aGlzLnZlcnRpY2VzWyBpIF07Ci0gICAgICAgICAgICAgICAga2V5ID0gTWF0aC5yb3VuZCggdi54
ICogcHJlY2lzaW9uICkgKyAnXycgKyBNYXRoLnJvdW5kKCB2LnkgKiBwcmVjaXNpb24gKSArICdf
JyArIE1hdGgucm91bmQoIHYueiAqIHByZWNpc2lvbiApOworICAgICAgICAgICAgICAgIHRoaXMu
YXBwbHlNYXRyaXgoIG0xICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHZlcnRpY2VzTWFwWyBr
ZXkgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzTWFwWyBrZXkgXSA9IGk7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuaXF1ZS5wdXNoKCB0aGlzLnZlcnRpY2VzWyBpIF0gKTsKLSAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlc1sgaSBdID0gdW5pcXVlLmxlbmd0aCAtIDE7CisgICAgICAgICAgICB9Owog
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICAg
ICAgICAgIC8vY29uc29sZS5sb2coJ0R1cGxpY2F0ZSB2ZXJ0ZXggZm91bmQuICcsIGksICcgY291
bGQgYmUgdXNpbmcgJywgdmVydGljZXNNYXBba2V5XSk7Ci0gICAgICAgICAgICAgICAgICAgIGNo
YW5nZXNbIGkgXSA9IGNoYW5nZXNbIHZlcnRpY2VzTWFwWyBrZXkgXSBdOworICAgICAgICBzY2Fs
ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc2Nh
bGUgZ2VvbWV0cnkKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG0xID0gbmV3IE1h
dHJpeDQoKTsKIAorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNjYWxlKCB4LCB5LCB6ICkg
ewogCi0gICAgICAgICAgICAvLyBpZiBmYWNlcyBhcmUgY29tcGxldGVseSBkZWdlbmVyYXRlIGFm
dGVyIG1lcmdpbmcgdmVydGljZXMsIHdlCi0gICAgICAgICAgICAvLyBoYXZlIHRvIHJlbW92ZSB0
aGVtIGZyb20gdGhlIGdlb21ldHJ5LgotICAgICAgICAgICAgdmFyIGZhY2VJbmRpY2VzVG9SZW1v
dmUgPSBbXTsKKyAgICAgICAgICAgICAgICBtMS5tYWtlU2NhbGUoIHgsIHksIHogKTsKIAotICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy5mYWNlcy5sZW5ndGg7IGkgPCBpbDsgaSAr
KyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBtMSApOwogCi0gICAgICAg
ICAgICAgICAgZmFjZSA9IHRoaXMuZmFjZXNbIGkgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAotICAgICAgICAgICAgICAgIGZhY2UuYSA9IGNoYW5nZXNbIGZhY2UuYSBdOwotICAg
ICAgICAgICAgICAgIGZhY2UuYiA9IGNoYW5nZXNbIGZhY2UuYiBdOwotICAgICAgICAgICAgICAg
IGZhY2UuYyA9IGNoYW5nZXNbIGZhY2UuYyBdOworICAgICAgICAgICAgfTsKIAotICAgICAgICAg
ICAgICAgIGluZGljZXMgPSBbIGZhY2UuYSwgZmFjZS5iLCBmYWNlLmMgXTsKKyAgICAgICAgfSgp
LAogCi0gICAgICAgICAgICAgICAgLy8gaWYgYW55IGR1cGxpY2F0ZSB2ZXJ0aWNlcyBhcmUgZm91
bmQgaW4gYSBGYWNlMwotICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBm
YWNlIGFzIG5vdGhpbmcgY2FuIGJlIHNhdmVkCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIG4g
PSAwOyBuIDwgMzsgbiArKyApIHsKKyAgICAgICAgbG9va0F0OiBmdW5jdGlvbiAoKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpbmRpY2VzWyBuIF0gPT09IGluZGljZXNbICggbiArIDEg
KSAlIDMgXSApIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBuZXcgT2JqZWN0M0QoKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgZmFjZUluZGljZXNUb1JlbW92ZS5wdXNoKCBpICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBs
b29rQXQoIHZlY3RvciApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgb2JqLmxvb2tBdCggdmVjdG9yICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgb2JqLnVwZGF0ZU1hdHJpeCgpOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdGhpcy5hcHBseU1hdHJpeCggb2JqLm1hdHJpeCApOwogCi0gICAgICAgICAgICBmb3IgKCBp
ID0gZmFjZUluZGljZXNUb1JlbW92ZS5sZW5ndGggLSAxOyBpID49IDA7IGkgLS0gKSB7CisgICAg
ICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZhY2VJbmRpY2VzVG9SZW1v
dmVbIGkgXTsKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICAgICAgdGhpcy5mYWNlcy5zcGxp
Y2UoIGlkeCwgMSApOworICAgICAgICBjZW50ZXI6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgICAgIGZvciAoIGogPSAwLCBqbCA9IHRoaXMuZmFjZVZlcnRleFV2cy5sZW5ndGg7IGogPCBq
bDsgaiArKyApIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBuZXcgVmVjdG9yMygpOwogCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjZVZlcnRleFV2c1sgaiBdLnNwbGljZSggaWR4LCAx
ICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY2VudGVyKCkgewogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcigg
b2Zmc2V0ICkubmVnYXRlKCk7CiAKLSAgICAgICAgICAgIC8vIFVzZSB1bmlxdWUgc2V0IG9mIHZl
cnRpY2VzCisgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUoIG9mZnNldC54LCBvZmZzZXQu
eSwgb2Zmc2V0LnogKTsKIAotICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLnZlcnRpY2VzLmxl
bmd0aCAtIHVuaXF1ZS5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLnZlcnRpY2VzID0gdW5pcXVl
OwotICAgICAgICAgICAgcmV0dXJuIGRpZmY7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgc29ydEZhY2VzQnlNYXRl
cmlhbEluZGV4OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgdmFy
IGZhY2VzID0gdGhpcy5mYWNlczsKLSAgICAgICAgICAgIHZhciBsZW5ndGggPSBmYWNlcy5sZW5n
dGg7CisgICAgICAgIHNldEZyb21PYmplY3Q6IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCi0gICAg
ICAgICAgICAvLyB0YWcgZmFjZXMKKyAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCAnVEhSRUUu
QnVmZmVyR2VvbWV0cnkuc2V0RnJvbU9iamVjdCgpLiBDb252ZXJ0aW5nJywgb2JqZWN0LCB0aGlz
ICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArKyApIHsK
KyAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKIAotICAgICAgICAg
ICAgICAgIGZhY2VzWyBpIF0uX2lkID0gaTsKKyAgICAgICAgICAgIGlmICggb2JqZWN0LmlzUG9p
bnRzIHx8IG9iamVjdC5pc0xpbmUgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGdlb21ldHJ5LnZl
cnRpY2VzLmxlbmd0aCAqIDMsIDMgKTsKKyAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3
IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIGdlb21ldHJ5LmNvbG9ycy5sZW5ndGggKiAzLCAzICk7
CiAKLSAgICAgICAgICAgIC8vIHNvcnQgZmFjZXMKKyAgICAgICAgICAgICAgICB0aGlzLmFkZEF0
dHJpYnV0ZSggJ3Bvc2l0aW9uJywgcG9zaXRpb25zLmNvcHlWZWN0b3Izc0FycmF5KCBnZW9tZXRy
eS52ZXJ0aWNlcyApICk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdjb2xv
cicsIGNvbG9ycy5jb3B5Q29sb3JzQXJyYXkoIGdlb21ldHJ5LmNvbG9ycyApICk7CiAKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIG1hdGVyaWFsSW5kZXhTb3J0KCBhLCBiICkgeworICAgICAgICAgICAg
ICAgIGlmICggZ2VvbWV0cnkubGluZURpc3RhbmNlcyAmJiBnZW9tZXRyeS5saW5lRGlzdGFuY2Vz
Lmxlbmd0aCA9PT0gZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoICkgewogCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGEubWF0ZXJpYWxJbmRleCAtIGIubWF0ZXJpYWxJbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGxpbmVEaXN0YW5jZXMgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgg
Z2VvbWV0cnkubGluZURpc3RhbmNlcy5sZW5ndGgsIDEgKTsKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ2xpbmVEaXN0YW5jZScsIGxpbmVE
aXN0YW5jZXMuY29weUFycmF5KCBnZW9tZXRyeS5saW5lRGlzdGFuY2VzICkgKTsKIAotICAgICAg
ICAgICAgZmFjZXMuc29ydCggbWF0ZXJpYWxJbmRleFNvcnQgKTsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIC8vIHNvcnQgdXZzCisgICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRy
eS5ib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAgdmFyIHV2czEgPSB0
aGlzLmZhY2VWZXJ0ZXhVdnNbIDAgXTsKLSAgICAgICAgICAgIHZhciB1dnMyID0gdGhpcy5mYWNl
VmVydGV4VXZzWyAxIF07CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhlcmUg
PSBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpOwogCi0gICAgICAgICAgICB2YXIgbmV3
VXZzMSwgbmV3VXZzMjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggdXZz
MSAmJiB1dnMxLmxlbmd0aCA9PT0gbGVuZ3RoICkgbmV3VXZzMSA9IFtdOwotICAgICAgICAgICAg
aWYgKCB1dnMyICYmIHV2czIubGVuZ3RoID09PSBsZW5ndGggKSBuZXdVdnMyID0gW107CisgICAg
ICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ0JveCAhPT0gbnVsbCApIHsKIAotICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gZ2VvbWV0cnkuYm91bmRpbmdCb3guY2xvbmUo
KTsKIAotICAgICAgICAgICAgICAgIHZhciBpZCA9IGZhY2VzWyBpIF0uX2lkOworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggbmV3VXZzMSApIG5ld1V2czEucHVzaCgg
dXZzMVsgaWQgXSApOwotICAgICAgICAgICAgICAgIGlmICggbmV3VXZzMiApIG5ld1V2czIucHVz
aCggdXZzMlsgaWQgXSApOworICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTWVzaCAp
IHsKKworICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNHZW9tZXRy
eSApIHsKKworICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21HZW9tZXRyeSggZ2VvbWV0cnkg
KTsKKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIG5ld1V2czEgKSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDAgXSA9IG5ld1V2czE7Ci0gICAgICAg
ICAgICBpZiAoIG5ld1V2czIgKSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDEgXSA9IG5ld1V2czI7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIHRvSlNPTjog
ZnVuY3Rpb24gKCkgeworICAgICAgICBzZXRGcm9tUG9pbnRzOiBmdW5jdGlvbiAoIHBvaW50cyAp
IHsKIAotICAgICAgICAgICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogNC41LAotICAgICAgICAgICAgICAgICAg
ICB0eXBlOiAnR2VvbWV0cnknLAotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdHZW9t
ZXRyeS50b0pTT04nCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIHZhciBwb3NpdGlvbiA9IFtdOwogCi0gICAgICAgICAgICAvLyBzdGFuZGFyZCBHZW9tZXRy
eSBzZXJpYWxpemF0aW9uCisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb2ludHMu
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgZGF0YS51dWlkID0gdGhpcy51
dWlkOwotICAgICAgICAgICAgZGF0YS50eXBlID0gdGhpcy50eXBlOwotICAgICAgICAgICAgaWYg
KCB0aGlzLm5hbWUgIT09ICcnICkgZGF0YS5uYW1lID0gdGhpcy5uYW1lOworICAgICAgICAgICAg
ICAgIHZhciBwb2ludCA9IHBvaW50c1sgaSBdOworICAgICAgICAgICAgICAgIHBvc2l0aW9uLnB1
c2goIHBvaW50LngsIHBvaW50LnksIHBvaW50LnogfHwgMCApOwogCi0gICAgICAgICAgICBpZiAo
IHRoaXMucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnM7CisgICAgICAgICAg
ICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1
dGUoIHBvc2l0aW9uLCAzICkgKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4g
cGFyYW1ldGVycyApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggcGFyYW1ldGVyc1sga2V5IF0gIT09IHVuZGVmaW5lZCApIGRhdGFbIGtleSBd
ID0gcGFyYW1ldGVyc1sga2V5IF07CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIHVwZGF0ZUZyb21PYmplY3Q6IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBvYmplY3Qu
Z2VvbWV0cnk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb2JqZWN0LmlzTWVz
aCApIHsKIAotICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgICAgICAgICAg
dmFyIGRpcmVjdCA9IGdlb21ldHJ5Ll9fZGlyZWN0R2VvbWV0cnk7CiAKLSAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMDsgaSA8IHRoaXMudmVydGljZXMubGVuZ3RoOyBpICsrICkgeworICAgICAg
ICAgICAgICAgIGlmICggZ2VvbWV0cnkuZWxlbWVudHNOZWVkVXBkYXRlID09PSB0cnVlICkgewog
Ci0gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHRoaXMudmVydGljZXNbIGkgXTsKLSAgICAg
ICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7
CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdCA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICAgICAgZ2VvbWV0cnkuZWxlbWVudHNOZWVkVXBkYXRlID0gZmFsc2U7CiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBmYWNlcyA9IFtdOwotICAg
ICAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKLSAgICAgICAgICAgIHZhciBub3JtYWxzSGFzaCA9
IHt9OwotICAgICAgICAgICAgdmFyIGNvbG9ycyA9IFtdOwotICAgICAgICAgICAgdmFyIGNvbG9y
c0hhc2ggPSB7fTsKLSAgICAgICAgICAgIHZhciB1dnMgPSBbXTsKLSAgICAgICAgICAgIHZhciB1
dnNIYXNoID0ge307CisgICAgICAgICAgICAgICAgaWYgKCBkaXJlY3QgPT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5mYWNlcy5sZW5ndGg7
IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21HZW9tZXRyeSgg
Z2VvbWV0cnkgKTsKIAotICAgICAgICAgICAgICAgIHZhciBmYWNlID0gdGhpcy5mYWNlc1sgaSBd
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciBoYXNNYXRlcmlhbCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc0ZhY2VVdiA9IGZhbHNlOyAvLyBkZXByZWNh
dGVkCi0gICAgICAgICAgICAgICAgdmFyIGhhc0ZhY2VWZXJ0ZXhVdiA9IHRoaXMuZmFjZVZlcnRl
eFV2c1sgMCBdWyBpIF0gIT09IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB2YXIgaGFzRmFj
ZU5vcm1hbCA9IGZhY2Uubm9ybWFsLmxlbmd0aCgpID4gMDsKLSAgICAgICAgICAgICAgICB2YXIg
aGFzRmFjZVZlcnRleE5vcm1hbCA9IGZhY2UudmVydGV4Tm9ybWFscy5sZW5ndGggPiAwOwotICAg
ICAgICAgICAgICAgIHZhciBoYXNGYWNlQ29sb3IgPSBmYWNlLmNvbG9yLnIgIT09IDEgfHwgZmFj
ZS5jb2xvci5nICE9PSAxIHx8IGZhY2UuY29sb3IuYiAhPT0gMTsKLSAgICAgICAgICAgICAgICB2
YXIgaGFzRmFjZVZlcnRleENvbG9yID0gZmFjZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoID4gMDsKKyAg
ICAgICAgICAgICAgICBkaXJlY3QudmVydGljZXNOZWVkVXBkYXRlID0gZ2VvbWV0cnkudmVydGlj
ZXNOZWVkVXBkYXRlOworICAgICAgICAgICAgICAgIGRpcmVjdC5ub3JtYWxzTmVlZFVwZGF0ZSA9
IGdlb21ldHJ5Lm5vcm1hbHNOZWVkVXBkYXRlOworICAgICAgICAgICAgICAgIGRpcmVjdC5jb2xv
cnNOZWVkVXBkYXRlID0gZ2VvbWV0cnkuY29sb3JzTmVlZFVwZGF0ZTsKKyAgICAgICAgICAgICAg
ICBkaXJlY3QudXZzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5LnV2c05lZWRVcGRhdGU7CisgICAgICAg
ICAgICAgICAgZGlyZWN0Lmdyb3Vwc05lZWRVcGRhdGUgPSBnZW9tZXRyeS5ncm91cHNOZWVkVXBk
YXRlOwogCi0gICAgICAgICAgICAgICAgdmFyIGZhY2VUeXBlID0gMDsKKyAgICAgICAgICAgICAg
ICBnZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBn
ZW9tZXRyeS5ub3JtYWxzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGdlb21l
dHJ5LmNvbG9yc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS51
dnNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZ3JvdXBzTmVl
ZFVwZGF0ZSA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZh
Y2VUeXBlLCAwLCAwICk7IC8vIGlzUXVhZAotICAgICAgICAgICAgICAgIGZhY2VUeXBlID0gc2V0
Qml0KCBmYWNlVHlwZSwgMSwgaGFzTWF0ZXJpYWwgKTsKLSAgICAgICAgICAgICAgICBmYWNlVHlw
ZSA9IHNldEJpdCggZmFjZVR5cGUsIDIsIGhhc0ZhY2VVdiApOwotICAgICAgICAgICAgICAgIGZh
Y2VUeXBlID0gc2V0Qml0KCBmYWNlVHlwZSwgMywgaGFzRmFjZVZlcnRleFV2ICk7Ci0gICAgICAg
ICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCA0LCBoYXNGYWNlTm9ybWFsICk7
Ci0gICAgICAgICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VUeXBlLCA1LCBoYXNGYWNl
VmVydGV4Tm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgZmFjZVR5cGUgPSBzZXRCaXQoIGZhY2VU
eXBlLCA2LCBoYXNGYWNlQ29sb3IgKTsKLSAgICAgICAgICAgICAgICBmYWNlVHlwZSA9IHNldEJp
dCggZmFjZVR5cGUsIDcsIGhhc0ZhY2VWZXJ0ZXhDb2xvciApOworICAgICAgICAgICAgICAgIGdl
b21ldHJ5ID0gZGlyZWN0OwogCi0gICAgICAgICAgICAgICAgZmFjZXMucHVzaCggZmFjZVR5cGUg
KTsKLSAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKCBmYWNlLmEsIGZhY2UuYiwgZmFjZS5jICk7
Ci0gICAgICAgICAgICAgICAgZmFjZXMucHVzaCggZmFjZS5tYXRlcmlhbEluZGV4ICk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiApIHsKKyAg
ICAgICAgICAgIHZhciBhdHRyaWJ1dGU7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2VW
ZXJ0ZXhVdnMgPSB0aGlzLmZhY2VWZXJ0ZXhVdnNbIDAgXVsgaSBdOworICAgICAgICAgICAgaWYg
KCBnZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGUgPT09IHRydWUgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgZmFjZXMucHVzaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFV2SW5kZXgo
IGZhY2VWZXJ0ZXhVdnNbIDAgXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VXZJbmRl
eCggZmFjZVZlcnRleFV2c1sgMSBdICksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRVdklu
ZGV4KCBmYWNlVmVydGV4VXZzWyAyIF0gKQotICAgICAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjsKKworICAgICAg
ICAgICAgICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCBnZW9tZXRyeS52ZXJ0aWNlcyAp
OworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlOwogCiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlTm9ybWFsICkg
eworICAgICAgICAgICAgICAgIGdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IGZhbHNlOwog
Ci0gICAgICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goIGdldE5vcm1hbEluZGV4KCBmYWNlLm5v
cm1hbCApICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIGdlb21ldHJ5Lm5vcm1hbHNOZWVkVXBkYXRlID09PSB0cnVlICkgewogCi0gICAgICAg
ICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4Tm9ybWFsICkgeworICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7CiAKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHZlcnRleE5vcm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7CisgICAgICAgICAgICAgICAg
aWYgKCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICBm
YWNlcy5wdXNoKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgoIHZlcnRl
eE5vcm1hbHNbIDAgXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFsSW5kZXgo
IHZlcnRleE5vcm1hbHNbIDEgXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9ybWFs
SW5kZXgoIHZlcnRleE5vcm1hbHNbIDIgXSApCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSggZ2VvbWV0cnkubm9y
bWFscyApOworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVl
OwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlQ29s
b3IgKSB7CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkubm9ybWFsc05lZWRVcGRhdGUgPSBmYWxz
ZTsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKCBnZXRDb2xvckluZGV4KCBmYWNl
LmNvbG9yICkgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICggZ2VvbWV0cnkuY29sb3JzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKIAotICAgICAg
ICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRleENvbG9yICkgeworICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5jb2xvcjsKIAotICAgICAgICAgICAgICAgICAgICB2
YXIgdmVydGV4Q29sb3JzID0gZmFjZS52ZXJ0ZXhDb2xvcnM7CisgICAgICAgICAgICAgICAgaWYg
KCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICBmYWNl
cy5wdXNoKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3JJbmRleCggdmVydGV4Q29s
b3JzWyAwIF0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbG9ySW5kZXgoIHZlcnRl
eENvbG9yc1sgMSBdICksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb2xvckluZGV4KCB2
ZXJ0ZXhDb2xvcnNbIDIgXSApCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoIGdlb21ldHJ5LmNvbG9ycyApOworICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlOwogCiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHNldEJp
dCggdmFsdWUsIHBvc2l0aW9uLCBlbmFibGVkICkgewotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGVuYWJsZWQgPyB2YWx1ZSB8ICggMSA8PCBwb3NpdGlvbiApIDogdmFsdWUgJiAoIH4gKCAxIDw8
IHBvc2l0aW9uICkgKTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRl
ID0gZmFsc2U7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm9y
bWFsSW5kZXgoIG5vcm1hbCApIHsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnkudXZzTmVlZFVw
ZGF0ZSApIHsKIAotICAgICAgICAgICAgICAgIHZhciBoYXNoID0gbm9ybWFsLngudG9TdHJpbmco
KSArIG5vcm1hbC55LnRvU3RyaW5nKCkgKyBub3JtYWwuei50b1N0cmluZygpOworICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy51djsKIAotICAgICAgICAgICAgICAg
IGlmICggbm9ybWFsc0hhc2hbIGhhc2ggXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgIGlmICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vcm1hbHNIYXNoWyBoYXNoIF07CisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZS5jb3B5VmVjdG9yMnNBcnJheSggZ2VvbWV0cnkudXZzICk7CisgICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZS5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBub3JtYWxzSGFzaFsgaGFzaCBdID0gbm9ybWFscy5sZW5ndGggLyAz
OwotICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3Jt
YWwueiApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbHNIYXNoWyBoYXNoIF07Cisg
ICAgICAgICAgICAgICAgZ2VvbWV0cnkudXZzTmVlZFVwZGF0ZSA9IGZhbHNlOwogCiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGdldENvbG9ySW5kZXgoIGNvbG9yICkgewor
ICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSApIHsKIAot
ICAgICAgICAgICAgICAgIHZhciBoYXNoID0gY29sb3Iuci50b1N0cmluZygpICsgY29sb3IuZy50
b1N0cmluZygpICsgY29sb3IuYi50b1N0cmluZygpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSA9IHRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2U7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IGNvbG9yc0hhc2hbIGhhc2ggXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGlm
ICggYXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbG9yc0hhc2hbIGhhc2ggXTsKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLmNv
cHlBcnJheSggZ2VvbWV0cnkubGluZURpc3RhbmNlcyApOworICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUubmVlZHNVcGRhdGUgPSB0cnVlOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgY29sb3JzSGFzaFsgaGFzaCBdID0gY29sb3JzLmxlbmd0aDsKLSAgICAgICAg
ICAgICAgICBjb2xvcnMucHVzaCggY29sb3IuZ2V0SGV4KCkgKTsKLQotICAgICAgICAgICAgICAg
IHJldHVybiBjb2xvcnNIYXNoWyBoYXNoIF07CisgICAgICAgICAgICAgICAgZ2VvbWV0cnkubGlu
ZURpc3RhbmNlc05lZWRVcGRhdGUgPSBmYWxzZTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBmdW5jdGlvbiBnZXRVdkluZGV4KCB1diApIHsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0
cnkuZ3JvdXBzTmVlZFVwZGF0ZSApIHsKIAotICAgICAgICAgICAgICAgIHZhciBoYXNoID0gdXYu
eC50b1N0cmluZygpICsgdXYueS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIGdlb21ldHJ5
LmNvbXB1dGVHcm91cHMoIG9iamVjdC5nZW9tZXRyeSApOworICAgICAgICAgICAgICAgIHRoaXMu
Z3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzOwogCi0gICAgICAgICAgICAgICAgaWYgKCB1dnNIYXNo
WyBoYXNoIF0gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5ncm91
cHNOZWVkVXBkYXRlID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV2c0hh
c2hbIGhhc2ggXTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdXZzSGFzaFsgaGFzaCBdID0gdXZz
Lmxlbmd0aCAvIDI7Ci0gICAgICAgICAgICAgICAgdXZzLnB1c2goIHV2LngsIHV2LnkgKTsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHJldHVybiB1dnNIYXNoWyBoYXNoIF07CisgICAg
ICAgIGZyb21HZW9tZXRyeTogZnVuY3Rpb24gKCBnZW9tZXRyeSApIHsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgZ2VvbWV0cnkuX19kaXJlY3RHZW9tZXRyeSA9IG5ldyBEaXJlY3RHZW9t
ZXRyeSgpLmZyb21HZW9tZXRyeSggZ2VvbWV0cnkgKTsKIAotICAgICAgICAgICAgZGF0YS5kYXRh
ID0ge307CisgICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tRGlyZWN0R2VvbWV0cnkoIGdlb21l
dHJ5Ll9fZGlyZWN0R2VvbWV0cnkgKTsKIAotICAgICAgICAgICAgZGF0YS5kYXRhLnZlcnRpY2Vz
ID0gdmVydGljZXM7Ci0gICAgICAgICAgICBkYXRhLmRhdGEubm9ybWFscyA9IG5vcm1hbHM7Ci0g
ICAgICAgICAgICBpZiAoIGNvbG9ycy5sZW5ndGggPiAwICkgZGF0YS5kYXRhLmNvbG9ycyA9IGNv
bG9yczsKLSAgICAgICAgICAgIGlmICggdXZzLmxlbmd0aCA+IDAgKSBkYXRhLmRhdGEudXZzID0g
WyB1dnMgXTsgLy8gdGVtcG9yYWwgYmFja3dhcmQgY29tcGF0aWJpbGl0eQotICAgICAgICAgICAg
ZGF0YS5kYXRhLmZhY2VzID0gZmFjZXM7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgIHJldHVy
biBkYXRhOworICAgICAgICBmcm9tRGlyZWN0R2VvbWV0cnk6IGZ1bmN0aW9uICggZ2VvbWV0cnkg
KSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgRmxvYXQz
MkFycmF5KCBnZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGggKiAzICk7CisgICAgICAgICAgICB0aGlz
LmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25z
LCAzICkuY29weVZlY3RvcjNzQXJyYXkoIGdlb21ldHJ5LnZlcnRpY2VzICkgKTsKIAotICAgICAg
ICBjbG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ub3JtYWxz
Lmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgLy8gSGFuZGxl
IHByaW1pdGl2ZXMKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFscyA9IG5ldyBGbG9hdDMyQXJy
YXkoIGdlb21ldHJ5Lm5vcm1hbHMubGVuZ3RoICogMyApOworICAgICAgICAgICAgICAgIHRoaXMu
YWRkQXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyAp
LmNvcHlWZWN0b3Izc0FycmF5KCBnZW9tZXRyeS5ub3JtYWxzICkgKTsKIAotICAgICAgICAgICAg
IHZhciBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBp
ZiAoIGdlb21ldHJ5LmNvbG9ycy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICAgdmFyIHZh
bHVlcyA9IFtdOworICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5
KCBnZW9tZXRyeS5jb2xvcnMubGVuZ3RoICogMyApOworICAgICAgICAgICAgICAgIHRoaXMuYWRk
QXR0cmlidXRlKCAnY29sb3InLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBjb2xvcnMsIDMgKS5jb3B5
Q29sb3JzQXJyYXkoIGdlb21ldHJ5LmNvbG9ycyApICk7CiAKLSAgICAgICAgICAgICBmb3IgKCB2
YXIga2V5IGluIHBhcmFtZXRlcnMgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICB2
YWx1ZXMucHVzaCggcGFyYW1ldGVyc1sga2V5IF0gKTsKKyAgICAgICAgICAgIGlmICggZ2VvbWV0
cnkudXZzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIHV2cyA9IG5ldyBGbG9hdDMyQXJyYXkoIGdlb21ldHJ5LnV2cy5sZW5ndGggKiAyICk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dicsIG5ldyBCdWZmZXJBdHRyaWJ1
dGUoIHV2cywgMiApLmNvcHlWZWN0b3Iyc0FycmF5KCBnZW9tZXRyeS51dnMgKSApOwogCi0gICAg
ICAgICAgICAgdmFyIGdlb21ldHJ5ID0gT2JqZWN0LmNyZWF0ZSggdGhpcy5jb25zdHJ1Y3Rvci5w
cm90b3R5cGUgKTsKLSAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmFwcGx5KCBnZW9tZXRy
eSwgdmFsdWVzICk7Ci0gICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5OworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS51dnMyLmxlbmd0
aCA+IDAgKSB7CiAKLSAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5j
b3B5KCB0aGlzICk7Ci0gICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB2YXIgdXZzMiA9
IG5ldyBGbG9hdDMyQXJyYXkoIGdlb21ldHJ5LnV2czIubGVuZ3RoICogMiApOworICAgICAgICAg
ICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYyJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggdXZz
MiwgMiApLmNvcHlWZWN0b3Iyc0FycmF5KCBnZW9tZXRyeS51dnMyICkgKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBHZW9tZXRyeSgpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICB9LAorICAgICAgICAgICAgLy8gZ3JvdXBzCiAKLSAgICAgICAgY29weTogZnVuY3Rp
b24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICB0aGlzLmdyb3VwcyA9IGdlb21ldHJ5Lmdyb3Vw
czsKIAotICAgICAgICAgICAgdmFyIGksIGlsLCBqLCBqbCwgaywga2w7CisgICAgICAgICAgICAv
LyBtb3JwaHMKIAotICAgICAgICAgICAgLy8gcmVzZXQKKyAgICAgICAgICAgIGZvciAoIHZhciBu
YW1lIGluIGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cyApIHsKIAotICAgICAgICAgICAgdGhpcy52ZXJ0
aWNlcyA9IFtdOwotICAgICAgICAgICAgdGhpcy5jb2xvcnMgPSBbXTsKLSAgICAgICAgICAgIHRo
aXMuZmFjZXMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuZmFjZVZlcnRleFV2cyA9IFtbXV07Ci0g
ICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IFtdOwotICAgICAgICAgICAgdGhpcy5tb3Jw
aE5vcm1hbHMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuc2tpbldlaWdodHMgPSBbXTsKLSAgICAg
ICAgICAgIHRoaXMuc2tpbkluZGljZXMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMubGluZURpc3Rh
bmNlcyA9IFtdOwotICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG51bGw7Ci0gICAgICAg
ICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbnVsbDsKKyAgICAgICAgICAgICAgICB2YXIgYXJy
YXkgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9y
cGhUYXJnZXRzWyBuYW1lIF07CiAKLSAgICAgICAgICAgIC8vIG5hbWUKKyAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBtb3JwaFRhcmdldHMubGVuZ3RoOyBpIDwgbDsgaSArKyAp
IHsKIAotICAgICAgICAgICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0c1sgaSBdOwogCi0gICAgICAgICAg
ICAvLyB2ZXJ0aWNlcworICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gbmV3IEZs
b2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG1vcnBoVGFyZ2V0Lmxlbmd0aCAqIDMsIDMgKTsKIAotICAg
ICAgICAgICAgdmFyIHZlcnRpY2VzID0gc291cmNlLnZlcnRpY2VzOworICAgICAgICAgICAgICAg
ICAgICBhcnJheS5wdXNoKCBhdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoIG1vcnBoVGFyZ2V0
ICkgKTsKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdmVydGljZXMubGVuZ3RoOyBp
IDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGhp
cy52ZXJ0aWNlcy5wdXNoKCB2ZXJ0aWNlc1sgaSBdLmNsb25lKCkgKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLm1vcnBoQXR0cmlidXRlc1sgbmFtZSBdID0gYXJyYXk7CiAKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgLy8gY29sb3JzCi0KLSAgICAgICAgICAgIHZhciBjb2xvcnMgPSBzb3Vy
Y2UuY29sb3JzOworICAgICAgICAgICAgLy8gc2tpbm5pbmcKIAotICAgICAgICAgICAgZm9yICgg
aSA9IDAsIGlsID0gY29sb3JzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeS5za2luSW5kaWNlcy5sZW5ndGggPiAwICkgewogCi0gICAgICAgICAgICAg
ICAgdGhpcy5jb2xvcnMucHVzaCggY29sb3JzWyBpIF0uY2xvbmUoKSApOworICAgICAgICAgICAg
ICAgIHZhciBza2luSW5kaWNlcyA9IG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBnZW9tZXRy
eS5za2luSW5kaWNlcy5sZW5ndGggKiA0LCA0ICk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRB
dHRyaWJ1dGUoICdza2luSW5kZXgnLCBza2luSW5kaWNlcy5jb3B5VmVjdG9yNHNBcnJheSggZ2Vv
bWV0cnkuc2tpbkluZGljZXMgKSApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8v
IGZhY2VzCisgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LnNraW5XZWlnaHRzLmxlbmd0aCA+IDAg
KSB7CiAKLSAgICAgICAgICAgIHZhciBmYWNlcyA9IHNvdXJjZS5mYWNlczsKKyAgICAgICAgICAg
ICAgICB2YXIgc2tpbldlaWdodHMgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0
cnkuc2tpbldlaWdodHMubGVuZ3RoICogNCwgNCApOworICAgICAgICAgICAgICAgIHRoaXMuYWRk
QXR0cmlidXRlKCAnc2tpbldlaWdodCcsIHNraW5XZWlnaHRzLmNvcHlWZWN0b3I0c0FycmF5KCBn
ZW9tZXRyeS5za2luV2VpZ2h0cyApICk7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9
IGZhY2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdGhpcy5mYWNlcy5wdXNoKCBmYWNlc1sgaSBdLmNsb25lKCkgKTsKKyAgICAgICAg
ICAgIC8vCisKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgIT09IG51
bGwgKSB7CisKKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gZ2VvbWV0cnku
Ym91bmRpbmdTcGhlcmUuY2xvbmUoKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAv
LyBmYWNlIHZlcnRleCB1dnMKKyAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdCb3gg
IT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHNvdXJjZS5mYWNl
VmVydGV4VXZzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgIHRoaXMu
Ym91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3VuZGluZ0JveC5jbG9uZSgpOwogCi0gICAgICAgICAg
ICAgICAgdmFyIGZhY2VWZXJ0ZXhVdnMgPSBzb3VyY2UuZmFjZVZlcnRleFV2c1sgaSBdOworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCB0aGlzLmZhY2VWZXJ0ZXhVdnNbIGkg
XSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5mYWNlVmVydGV4VXZzWyBpIF0gPSBbXTsKKyAgICAgICAgfSwKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgY29tcHV0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAo
KSB7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBqID0gMCwgamwgPSBmYWNlVmVydGV4VXZzLmxl
bmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmJvdW5kaW5nQm94
ID09PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciB1dnMgPSBmYWNlVmVydGV4
VXZzWyBqIF0sIHV2c0NvcHkgPSBbXTsKKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94
ID0gbmV3IEJveDMoKTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBrID0gMCwga2wgPSB1
dnMubGVuZ3RoOyBrIDwga2w7IGsgKysgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB1diA9IHV2c1sgayBdOworICAgICAgICAgICAgdmFyIHBvc2l0aW9u
ID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB1
dnNDb3B5LnB1c2goIHV2LmNsb25lKCkgKTsKKyAgICAgICAgICAgIGlmICggcG9zaXRpb24gIT09
IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiApOwogCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjZVZlcnRleFV2c1sgaSBdLnB1c2goIHV2c0NvcHkg
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsKIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAvLyBtb3JwaCB0YXJnZXRzCi0KLSAgICAgICAgICAgIHZhciBtb3JwaFRhcmdl
dHMgPSBzb3VyY2UubW9ycGhUYXJnZXRzOworICAgICAgICAgICAgaWYgKCBpc05hTiggdGhpcy5i
b3VuZGluZ0JveC5taW4ueCApIHx8IGlzTmFOKCB0aGlzLmJvdW5kaW5nQm94Lm1pbi55ICkgfHwg
aXNOYU4oIHRoaXMuYm91bmRpbmdCb3gubWluLnogKSApIHsKIAotICAgICAgICAgICAgZm9yICgg
aSA9IDAsIGlsID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91
bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9u
IiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLCB0aGlzICk7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXQgPSB7fTsKLSAgICAgICAgICAgICAgICBtb3Jw
aFRhcmdldC5uYW1lID0gbW9ycGhUYXJnZXRzWyBpIF0ubmFtZTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIC8vIHZlcnRpY2VzCisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICBpZiAoIG1vcnBoVGFyZ2V0c1sgaSBdLnZlcnRpY2VzICE9PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgIGNvbXB1dGVCb3VuZGluZ1NwaGVyZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAg
ICAgICAgIG1vcnBoVGFyZ2V0LnZlcnRpY2VzID0gW107CisgICAgICAgICAgICB2YXIgYm94ID0g
bmV3IEJveDMoKTsKKyAgICAgICAgICAgIHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwogCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwLCBqbCA9IG1vcnBoVGFyZ2V0c1sgaSBdLnZl
cnRpY2VzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uIGNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
bW9ycGhUYXJnZXQudmVydGljZXMucHVzaCggbW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXNbIGog
XS5jbG9uZSgpICk7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmJvdW5kaW5nU3BoZXJlID09
PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG5ldyBTcGhlcmUoKTsKIAogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIC8vIG5vcm1hbHMKLQotICAgICAgICAgICAgICAgIGlmICggbW9y
cGhUYXJnZXRzWyBpIF0ubm9ybWFscyAhPT0gdW5kZWZpbmVkICkgewotCi0gICAgICAgICAgICAg
ICAgICAgIG1vcnBoVGFyZ2V0Lm5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgcG9z
aXRpb24gPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247CiAKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICggaiA9IDAsIGpsID0gbW9ycGhUYXJnZXRzWyBpIF0ubm9ybWFscy5sZW5ndGg7IGogPCBq
bDsgaiArKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHBvc2l0aW9uICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldC5ub3JtYWxzLnB1c2goIG1vcnBoVGFyZ2V0c1sg
aSBdLm5vcm1hbHNbIGogXS5jbG9uZSgpICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBjZW50
ZXIgPSB0aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlv
biApOworICAgICAgICAgICAgICAgICAgICBib3guZ2V0Q2VudGVyKCBjZW50ZXIgKTsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gaG9waW5nIHRvIGZpbmQgYSBi
b3VuZGluZ1NwaGVyZSB3aXRoIGEgcmFkaXVzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYm91bmRpbmdTcGhlcmUgb2YgdGhlIGJvdW5kaW5nQm94OiBzcXJ0KDMpIHNt
YWxsZXIgaW4gdGhlIGJlc3QgY2FzZQogCi0gICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdl
dHMucHVzaCggbW9ycGhUYXJnZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1heFJhZGl1
c1NxID0gMDsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGlsID0gcG9zaXRpb24uY291bnQ7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAg
ICAgLy8gbW9ycGggbm9ybWFscworICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnggPSBw
b3NpdGlvbi5nZXRYKCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IueSA9IHBv
c2l0aW9uLmdldFkoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvci56ID0gcG9z
aXRpb24uZ2V0WiggaSApOworICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmFkaXVzU3EgPSBN
YXRoLm1heCggbWF4UmFkaXVzU3EsIGNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCggdmVjdG9yICkg
KTsKIAotICAgICAgICAgICAgdmFyIG1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3JwaE5vcm1hbHM7
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0g
bW9ycGhOb3JtYWxzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cyA9IE1hdGguc3FydCggbWF4UmFkaXVzU3EgKTsK
IAotICAgICAgICAgICAgICAgIHZhciBtb3JwaE5vcm1hbCA9IHt9OworICAgICAgICAgICAgICAg
ICAgICBpZiAoIGlzTmFOKCB0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cyApICkgewogCi0gICAg
ICAgICAgICAgICAgLy8gdmVydGV4IG5vcm1hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUo
KTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxp
a2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJywgdGhpcyApOwogCi0gICAgICAgICAgICAgICAgaWYg
KCBtb3JwaE5vcm1hbHNbIGkgXS52ZXJ0ZXhOb3JtYWxzICE9PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtb3JwaE5vcm1hbC52ZXJ0
ZXhOb3JtYWxzID0gW107CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoIGogPSAwLCBqbCA9IG1vcnBoTm9ybWFsc1sgaSBdLnZlcnRleE5vcm1hbHMubGVuZ3Ro
OyBqIDwgamw7IGogKysgKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3JjVmVydGV4Tm9ybWFsID0gbW9ycGhOb3JtYWxzWyBpIF0udmVydGV4Tm9ybWFs
c1sgaiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3RWZXJ0ZXhOb3JtYWwgPSB7
fTsKKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0VmVydGV4Tm9y
bWFsLmEgPSBzcmNWZXJ0ZXhOb3JtYWwuYS5jbG9uZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFZlcnRleE5vcm1hbC5iID0gc3JjVmVydGV4Tm9ybWFsLmIuY2xvbmUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RWZXJ0ZXhOb3JtYWwuYyA9IHNyY1ZlcnRleE5vcm1hbC5j
LmNsb25lKCk7CisgICAgICAgIGNvbXB1dGVGYWNlTm9ybWFsczogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtb3JwaE5vcm1hbC52ZXJ0ZXhOb3JtYWxzLnB1c2goIGRl
c3RWZXJ0ZXhOb3JtYWwgKTsKKyAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICBjb21wdXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCkgewogCi0gICAgICAg
ICAgICAgICAgLy8gZmFjZSBub3JtYWxzCisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmlu
ZGV4OworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7CisgICAg
ICAgICAgICB2YXIgZ3JvdXBzID0gdGhpcy5ncm91cHM7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IG1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICBpZiAoIGF0dHJpYnV0ZXMucG9zaXRpb24gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
bW9ycGhOb3JtYWwuZmFjZU5vcm1hbHMgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRp
b25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTsKIAotICAgICAgICAgICAgICAgICAgICBm
b3IgKCBqID0gMCwgamwgPSBtb3JwaE5vcm1hbHNbIGkgXS5mYWNlTm9ybWFscy5sZW5ndGg7IGog
PCBqbDsgaiArKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZXMubm9ybWFsID09
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoTm9ybWFsLmZh
Y2VOb3JtYWxzLnB1c2goIG1vcnBoTm9ybWFsc1sgaSBdLmZhY2VOb3JtYWxzWyBqIF0uY2xvbmUo
KSApOworICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5l
dyBCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIHBvc2l0aW9ucy5sZW5ndGggKSwg
MyApICk7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGV4aXN0
aW5nIG5vcm1hbHMgdG8gemVybwogCi0gICAgICAgICAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMu
cHVzaCggbW9ycGhOb3JtYWwgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0
cmlidXRlcy5ub3JtYWwuYXJyYXk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewog
Ci0gICAgICAgICAgICAvLyBza2luIHdlaWdodHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFy
cmF5WyBpIF0gPSAwOwogCi0gICAgICAgICAgICB2YXIgc2tpbldlaWdodHMgPSBzb3VyY2Uuc2tp
bldlaWdodHM7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICggaSA9
IDAsIGlsID0gc2tpbldlaWdodHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGhpcy5za2luV2VpZ2h0cy5wdXNoKCBza2luV2Vp
Z2h0c1sgaSBdLmNsb25lKCkgKTsKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJp
YnV0ZXMubm9ybWFsLmFycmF5OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IHZBLCB2QiwgdkM7CisgICAgICAgICAgICAgICAgdmFyIHBBID0gbmV3IFZlY3RvcjMoKSwgcEIg
PSBuZXcgVmVjdG9yMygpLCBwQyA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgdmFy
IGNiID0gbmV3IFZlY3RvcjMoKSwgYWIgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAv
LyBza2luIGluZGljZXMKKyAgICAgICAgICAgICAgICAvLyBpbmRleGVkIGVsZW1lbnRzCiAKLSAg
ICAgICAgICAgIHZhciBza2luSW5kaWNlcyA9IHNvdXJjZS5za2luSW5kaWNlczsKKyAgICAgICAg
ICAgICAgICBpZiAoIGluZGV4ICkgewogCi0gICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBz
a2luSW5kaWNlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGluZGljZXMgPSBpbmRleC5hcnJheTsKIAotICAgICAgICAgICAgICAgIHRoaXMuc2tpbklu
ZGljZXMucHVzaCggc2tpbkluZGljZXNbIGkgXS5jbG9uZSgpICk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggZ3JvdXBzLmxlbmd0aCA9PT0gMCApIHsKIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cCggMCwgaW5kaWNlcy5sZW5ndGggKTsKIAot
ICAgICAgICAgICAgLy8gbGluZSBkaXN0YW5jZXMKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB2YXIgbGluZURpc3RhbmNlcyA9IHNvdXJjZS5saW5lRGlzdGFuY2VzOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDAsIGpsID0gZ3JvdXBzLmxlbmd0aDsgaiA8
IGpsOyArKyBqICkgewogCi0gICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBsaW5lRGlzdGFu
Y2VzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGdyb3VwID0gZ3JvdXBzWyBqIF07CiAKLSAgICAgICAgICAgICAgICB0aGlzLmxpbmVEaXN0YW5j
ZXMucHVzaCggbGluZURpc3RhbmNlc1sgaSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgc3RhcnQgPSBncm91cC5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3Vu
dCA9IGdyb3VwLmNvdW50OwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IHN0YXJ0LCBpbCA9IHN0YXJ0ICsgY291bnQ7IGkgPCBpbDsgaSArPSAz
ICkgewogCi0gICAgICAgICAgICAvLyBib3VuZGluZyBib3gKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2QSA9IGluZGljZXNbIGkgKyAwIF0gKiAzOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZCID0gaW5kaWNlc1sgaSArIDEgXSAqIDM7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdkMgPSBpbmRpY2VzWyBpICsgMiBdICogMzsKIAotICAgICAgICAgICAgdmFyIGJvdW5k
aW5nQm94ID0gc291cmNlLmJvdW5kaW5nQm94OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBBLmZyb21BcnJheSggcG9zaXRpb25zLCB2QSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBCLmZyb21BcnJheSggcG9zaXRpb25zLCB2QiApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBDLmZyb21BcnJheSggcG9zaXRpb25zLCB2QyApOwogCi0gICAgICAgICAgICBpZiAo
IGJvdW5kaW5nQm94ICE9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNi
LnN1YlZlY3RvcnMoIHBDLCBwQiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFiLnN1
YlZlY3RvcnMoIHBBLCBwQiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiLmNyb3Nz
KCBhYiApOwogCi0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGJvdW5kaW5nQm94
LmNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgdkEgXSArPSBj
Yi54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZBICsgMSBdICs9IGNi
Lnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgdkEgKyAyIF0gKz0gY2Iu
ejsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNb
IHZCIF0gKz0gY2IueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QiAr
IDEgXSArPSBjYi55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZCICsg
MiBdICs9IGNiLno7CiAKLSAgICAgICAgICAgIC8vIGJvdW5kaW5nIHNwaGVyZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZDIF0gKz0gY2IueDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzWyB2QyArIDEgXSArPSBjYi55OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHNbIHZDICsgMiBdICs9IGNiLno7CiAKLSAgICAgICAgICAgIHZh
ciBib3VuZGluZ1NwaGVyZSA9IHNvdXJjZS5ib3VuZGluZ1NwaGVyZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGlu
Z1NwaGVyZSA9IGJvdW5kaW5nU3BoZXJlLmNsb25lKCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBub24taW5kZXhlZCBl
bGVtZW50cyAodW5jb25uZWN0ZWQgdHJpYW5nbGUgc291cCkKIAotICAgICAgICAgICAgLy8gdXBk
YXRlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBwb3Np
dGlvbnMubGVuZ3RoOyBpIDwgaWw7IGkgKz0gOSApIHsKIAotICAgICAgICAgICAgdGhpcy5lbGVt
ZW50c05lZWRVcGRhdGUgPSBzb3VyY2UuZWxlbWVudHNOZWVkVXBkYXRlOwotICAgICAgICAgICAg
dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGUgPSBzb3VyY2UudmVydGljZXNOZWVkVXBkYXRlOwotICAg
ICAgICAgICAgdGhpcy51dnNOZWVkVXBkYXRlID0gc291cmNlLnV2c05lZWRVcGRhdGU7Ci0gICAg
ICAgICAgICB0aGlzLm5vcm1hbHNOZWVkVXBkYXRlID0gc291cmNlLm5vcm1hbHNOZWVkVXBkYXRl
OwotICAgICAgICAgICAgdGhpcy5jb2xvcnNOZWVkVXBkYXRlID0gc291cmNlLmNvbG9yc05lZWRV
cGRhdGU7Ci0gICAgICAgICAgICB0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlID0gc291cmNl
LmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlOwotICAgICAgICAgICAgdGhpcy5ncm91cHNOZWVkVXBk
YXRlID0gc291cmNlLmdyb3Vwc05lZWRVcGRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBw
QS5mcm9tQXJyYXkoIHBvc2l0aW9ucywgaSApOworICAgICAgICAgICAgICAgICAgICAgICAgcEIu
ZnJvbUFycmF5KCBwb3NpdGlvbnMsIGkgKyAzICk7CisgICAgICAgICAgICAgICAgICAgICAgICBw
Qy5mcm9tQXJyYXkoIHBvc2l0aW9ucywgaSArIDYgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgICAgICAgICBjYi5zdWJWZWN0b3JzKCBwQywgcEIgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFiLnN1YlZlY3RvcnMoIHBBLCBwQiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2IuY3Jvc3MoIGFiICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHNbIGkgXSA9IGNiLng7CisgICAgICAgICAgICAgICAgICAgICAg
ICBub3JtYWxzWyBpICsgMSBdID0gY2IueTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bHNbIGkgKyAyIF0gPSBjYi56OwogCi0gICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgKyAzIF0gPSBjYi54OworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsc1sgaSArIDQgXSA9IGNiLnk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBub3JtYWxzWyBpICsgNSBdID0gY2IuejsKIAotICAgICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBub3JtYWxzWyBpICsgNiBdID0gY2IueDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bHNbIGkgKyA3IF0gPSBjYi55OworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSAr
IDggXSA9IGNiLno7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICB9
ICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2Ig
LyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgICAgICAgICB0aGlzLm5vcm1h
bGl6ZU5vcm1hbHMoKTsKIAotICAgIGZ1bmN0aW9uIEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0
ZW1TaXplLCBub3JtYWxpemVkICkgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubm9ybWFs
Lm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIGFycmF5
ICkgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
ICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5Licg
KTsKKyAgICAgICAgfSwKIAotICAgICAgICB9CisgICAgICAgIG1lcmdlOiBmdW5jdGlvbiAoIGdl
b21ldHJ5LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVV
VUlEKCk7Ci0gICAgICAgIHRoaXMubmFtZSA9ICcnOworICAgICAgICAgICAgaWYgKCAhICggZ2Vv
bWV0cnkgJiYgZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApICkgewogCi0gICAgICAgIHRoaXMu
YXJyYXkgPSBhcnJheTsKLSAgICAgICAgdGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplOwotICAgICAg
ICB0aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0aCAvIGl0ZW1T
aXplIDogMDsKLSAgICAgICAgdGhpcy5ub3JtYWxpemVkID0gbm9ybWFsaXplZCA9PT0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVy
Z2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5Lics
IGdlb21ldHJ5ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuZHlu
YW1pYyA9IGZhbHNlOwotICAgICAgICB0aGlzLnVwZGF0ZVJhbmdlID0geyBvZmZzZXQ6IDAsIGNv
dW50OiAtIDEgfTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLm9uVXBsb2FkQ2FsbGJh
Y2sgPSBmdW5jdGlvbiAoKSB7fTsKKyAgICAgICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAgICAgICAgICAgICAgICBvZmZz
ZXQgPSAwOwogCi0gICAgfQorICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigKKyAgICAgICAg
ICAgICAgICAgICAgJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9y
aWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gJworICAgICAgICAgICAgICAg
ICAgICArICdVc2UgQnVmZmVyR2VvbWV0cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBm
b3IgbG9zc2xlc3MgbWVyZ2UuJworICAgICAgICAgICAgICAgICk7CiAKLSAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUsICduZWVkc1VwZGF0ZScsIHsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAg
ICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKIAotICAgICAgICAgICAg
aWYgKCB2YWx1ZSA9PT0gdHJ1ZSApIHRoaXMudmVyc2lvbiArKzsKKyAgICAgICAgICAgIGZvciAo
IHZhciBrZXkgaW4gYXR0cmlidXRlcyApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeS5hdHRyaWJ1dGVzWyBrZXkgXSA9PT0gdW5kZWZpbmVkICkgY29udGludWU7
CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZTEgPSBhdHRyaWJ1dGVz
WyBrZXkgXTsKKyAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlQXJyYXkxID0gYXR0cmlidXRl
MS5hcnJheTsKIAotICAgIE9iamVjdC5hc3NpZ24oIEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUs
IHsKKyAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlMiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNb
IGtleSBdOworICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheTIgPSBhdHRyaWJ1dGUy
LmFycmF5OwogCi0gICAgICAgIGlzQnVmZmVyQXR0cmlidXRlOiB0cnVlLAorICAgICAgICAgICAg
ICAgIHZhciBhdHRyaWJ1dGVTaXplID0gYXR0cmlidXRlMi5pdGVtU2l6ZTsKIAotICAgICAgICBz
ZXRBcnJheTogZnVuY3Rpb24gKCBhcnJheSApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGogPSBhdHRyaWJ1dGVTaXplICogb2Zmc2V0OyBpIDwgYXR0cmlidXRlQXJyYXkyLmxl
bmd0aDsgaSArKywgaiArKyApIHsKIAotICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBh
cnJheSApICkgeworICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheTFbIGogXSA9IGF0
dHJpYnV0ZUFycmF5MlsgaSBdOwogCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
ciggJ1RIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXku
JyApOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0
aGlzLmNvdW50ID0gYXJyYXkgIT09IHVuZGVmaW5lZCA/IGFycmF5Lmxlbmd0aCAvIHRoaXMuaXRl
bVNpemUgOiAwOwotICAgICAgICAgICAgdGhpcy5hcnJheSA9IGFycmF5OworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBzZXREeW5hbWljOiBmdW5jdGlv
biAoIHZhbHVlICkgeworICAgICAgICBub3JtYWxpemVOb3JtYWxzOiBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgIHRoaXMuZHluYW1pYyA9IHZhbHVlOworICAgICAgICAgICAgdmFyIHZlY3Rv
ciA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uIG5vcm1hbGl6ZU5vcm1hbHMoKSB7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICB2YXIgbm9ybWFscyA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7CiAKLSAg
ICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBpbCA9IG5vcm1hbHMuY291bnQ7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgdGhpcy5hcnJheSA9IG5ldyBzb3VyY2UuYXJyYXkuY29uc3RydWN0b3IoIHNvdXJjZS5h
cnJheSApOwotICAgICAgICAgICAgdGhpcy5pdGVtU2l6ZSA9IHNvdXJjZS5pdGVtU2l6ZTsKLSAg
ICAgICAgICAgIHRoaXMuY291bnQgPSBzb3VyY2UuY291bnQ7Ci0gICAgICAgICAgICB0aGlzLm5v
cm1hbGl6ZWQgPSBzb3VyY2Uubm9ybWFsaXplZDsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9y
LnggPSBub3JtYWxzLmdldFgoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnkgPSBu
b3JtYWxzLmdldFkoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnogPSBub3JtYWxz
LmdldFooIGkgKTsKIAotICAgICAgICAgICAgdGhpcy5keW5hbWljID0gc291cmNlLmR5bmFtaWM7
CisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbHMuc2V0WFlaKCBpLCB2ZWN0
b3IueCwgdmVjdG9yLnksIHZlY3Rvci56ICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgY29weUF0OiBmdW5jdGlvbiAoIGluZGV4MSwgYXR0cmlidXRlLCBpbmRl
eDIgKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpbmRleDEgKj0gdGhpcy5pdGVt
U2l6ZTsKLSAgICAgICAgICAgIGluZGV4MiAqPSBhdHRyaWJ1dGUuaXRlbVNpemU7CisgICAgICAg
IH0oKSwKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5pdGVtU2l6ZTsg
aSA8IGw7IGkgKysgKSB7CisgICAgICAgIHRvTm9uSW5kZXhlZDogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXgxICsgaSBdID0gYXR0cmlidXRlLmFycmF5
WyBpbmRleDIgKyBpIF07CisgICAgICAgICAgICBpZiAoIHRoaXMuaW5kZXggPT09IG51bGwgKSB7
CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRyeS50
b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4nICk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkyID0gbmV3IEJ1ZmZlckdlb21l
dHJ5KCk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRl
eC5hcnJheTsKKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzOwog
Ci0gICAgICAgIGNvcHlBcnJheTogZnVuY3Rpb24gKCBhcnJheSApIHsKKyAgICAgICAgICAgIGZv
ciAoIHZhciBuYW1lIGluIGF0dHJpYnV0ZXMgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuYXJyYXku
c2V0KCBhcnJheSApOworICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVz
WyBuYW1lIF07CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHZh
ciBhcnJheSA9IGF0dHJpYnV0ZS5hcnJheTsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbVNpemUg
PSBhdHRyaWJ1dGUuaXRlbVNpemU7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB2YXIg
YXJyYXkyID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKCBpbmRpY2VzLmxlbmd0aCAqIGl0ZW1TaXpl
ICk7CiAKLSAgICAgICAgY29weUNvbG9yc0FycmF5OiBmdW5jdGlvbiAoIGNvbG9ycyApIHsKKyAg
ICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwLCBpbmRleDIgPSAwOwogCi0gICAgICAgICAgICB2
YXIgYXJyYXkgPSB0aGlzLmFycmF5LCBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGluZGljZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY29sb3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7
CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kaWNlc1sgaSBdICogaXRlbVNpemU7CiAK
LSAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBjb2xvcnNbIGkgXTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGogPSAwOyBqIDwgaXRlbVNpemU7IGogKysgKSB7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIGNvbG9yID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhcnJheTJbIGluZGV4MiArKyBdID0gYXJyYXlbIGluZGV4ICsrIF07CiAKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xv
cnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQnLCBpICk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbG9yID0gbmV3IENvbG9yKCk7CisgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IGNvbG9yLnI7
Ci0gICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCArKyBdID0gY29sb3IuZzsKLSAgICAgICAg
ICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSBjb2xvci5iOworICAgICAgICAgICAgICAgIGdl
b21ldHJ5Mi5hZGRBdHRyaWJ1dGUoIG5hbWUsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIGFycmF5Miwg
aXRlbVNpemUgKSApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzOwogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBncm91cHMubGVuZ3RoOyBpIDwgbDsgaSAr
KyApIHsKIAotICAgICAgICBjb3B5SW5kaWNlc0FycmF5OiBmdW5jdGlvbiAoIGluZGljZXMgKSB7
CisgICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzWyBpIF07CisgICAgICAgICAgICAg
ICAgZ2VvbWV0cnkyLmFkZEdyb3VwKCBncm91cC5zdGFydCwgZ3JvdXAuY291bnQsIGdyb3VwLm1h
dGVyaWFsSW5kZXggKTsKIAotICAgICAgICAgICAgdmFyIGFycmF5ID0gdGhpcy5hcnJheSwgb2Zm
c2V0ID0gMDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gaW5kaWNlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewotCi0gICAgICAgICAgICAgICAgdmFy
IGluZGV4ID0gaW5kaWNlc1sgaSBdOwotCi0gICAgICAgICAgICAgICAgYXJyYXlbIG9mZnNldCAr
KyBdID0gaW5kZXguYTsKLSAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSBpbmRl
eC5iOwotICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IGluZGV4LmM7CisgICAg
ICAgICAgICByZXR1cm4gZ2VvbWV0cnkyOwogCi0gICAgICAgICAgICB9CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICAgICAg
bWV0YWRhdGE6IHsKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogNC41LAorICAgICAgICAg
ICAgICAgICAgICB0eXBlOiAnQnVmZmVyR2VvbWV0cnknLAorICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3I6ICdCdWZmZXJHZW9tZXRyeS50b0pTT04nCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKIAotICAgICAgICBjb3B5VmVjdG9yMnNBcnJheTogZnVuY3Rpb24gKCB2ZWN0
b3JzICkgeworICAgICAgICAgICAgLy8gc3RhbmRhcmQgQnVmZmVyR2VvbWV0cnkgc2VyaWFsaXph
dGlvbgogCi0gICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLmFycmF5LCBvZmZzZXQgPSAwOwor
ICAgICAgICAgICAgZGF0YS51dWlkID0gdGhpcy51dWlkOworICAgICAgICAgICAgZGF0YS50eXBl
ID0gdGhpcy50eXBlOworICAgICAgICAgICAgaWYgKCB0aGlzLm5hbWUgIT09ICcnICkgZGF0YS5u
YW1lID0gdGhpcy5uYW1lOworICAgICAgICAgICAgaWYgKCBPYmplY3Qua2V5cyggdGhpcy51c2Vy
RGF0YSApLmxlbmd0aCA+IDAgKSBkYXRhLnVzZXJEYXRhID0gdGhpcy51c2VyRGF0YTsKIAotICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpICsr
ICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCApIHsK
IAotICAgICAgICAgICAgICAgIHZhciB2ZWN0b3IgPSB2ZWN0b3JzWyBpIF07CisgICAgICAgICAg
ICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnM7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIHZlY3RvciA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBrZXkgaW4gcGFyYW1ldGVycyApIHsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlz
IHVuZGVmaW5lZCcsIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgdmVjdG9yID0gbmV3IFZlY3Rv
cjIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzWyBrZXkgXSAhPT0gdW5k
ZWZpbmVkICkgZGF0YVsga2V5IF0gPSBwYXJhbWV0ZXJzWyBrZXkgXTsKIAogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci54Owot
ICAgICAgICAgICAgICAgIGFycmF5WyBvZmZzZXQgKysgXSA9IHZlY3Rvci55OworICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgZGF0YS5kYXRhID0geyBhdHRyaWJ1dGVzOiB7fSB9OwogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4OwogCi0gICAgICAg
IGNvcHlWZWN0b3Izc0FycmF5OiBmdW5jdGlvbiAoIHZlY3RvcnMgKSB7CisgICAgICAgICAgICBp
ZiAoIGluZGV4ICE9PSBudWxsICkgewogCi0gICAgICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLmFy
cmF5LCBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKCBpbmRleC5hcnJheSApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSB2ZWN0b3JzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAg
ICAgZGF0YS5kYXRhLmluZGV4ID0geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBpbmRleC5h
cnJheS5jb25zdHJ1Y3Rvci5uYW1lLAorICAgICAgICAgICAgICAgICAgICBhcnJheTogYXJyYXkK
KyAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdmFyIHZlY3RvciA9IHZlY3Rv
cnNbIGkgXTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggdmVjdG9yID09
PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmli
dXRlczsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJB
dHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCcsIGkgKTsK
LSAgICAgICAgICAgICAgICAgICAgdmVjdG9yID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAg
IGZvciAoIHZhciBrZXkgaW4gYXR0cmlidXRlcyApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gYXR0cmlidXRlc1sga2V5IF07CiAKLSAgICAg
ICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueDsKLSAgICAgICAgICAgICAg
ICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueTsKLSAgICAgICAgICAgICAgICBhcnJheVsg
b2Zmc2V0ICsrIF0gPSB2ZWN0b3IuejsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXR0cmlidXRlLmFycmF5ICk7CisKKyAgICAgICAgICAg
ICAgICBkYXRhLmRhdGEuYXR0cmlidXRlc1sga2V5IF0gPSB7CisgICAgICAgICAgICAgICAgICAg
IGl0ZW1TaXplOiBhdHRyaWJ1dGUuaXRlbVNpemUsCisgICAgICAgICAgICAgICAgICAgIHR5cGU6
IGF0dHJpYnV0ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLAorICAgICAgICAgICAgICAgICAgICBh
cnJheTogYXJyYXksCisgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQ6IGF0dHJpYnV0ZS5u
b3JtYWxpemVkCisgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHZhciBncm91cHMgPSB0aGlzLmdyb3VwczsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCBncm91cHMubGVuZ3RoID4gMCApIHsKIAot
ICAgICAgICBjb3B5VmVjdG9yNHNBcnJheTogZnVuY3Rpb24gKCB2ZWN0b3JzICkgeworICAgICAg
ICAgICAgICAgIGRhdGEuZGF0YS5ncm91cHMgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSgg
Z3JvdXBzICkgKTsKIAotICAgICAgICAgICAgdmFyIGFycmF5ID0gdGhpcy5hcnJheSwgb2Zmc2V0
ID0gMDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
dmVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5n
U3BoZXJlID0gdGhpcy5ib3VuZGluZ1NwaGVyZTsKIAotICAgICAgICAgICAgICAgIHZhciB2ZWN0
b3IgPSB2ZWN0b3JzWyBpIF07CisgICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBu
dWxsICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCB2ZWN0b3IgPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICBkYXRhLmRhdGEuYm91bmRpbmdTcGhlcmUgPSB7CisgICAgICAgICAg
ICAgICAgICAgIGNlbnRlcjogYm91bmRpbmdTcGhlcmUuY2VudGVyLnRvQXJyYXkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgcmFkaXVzOiBib3VuZGluZ1NwaGVyZS5yYWRpdXMKKyAgICAgICAgICAg
ICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkJ1ZmZl
ckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkJywgaSAp
OwotICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yNCgpOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAg
ICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueDsKLSAgICAgICAgICAg
ICAgICBhcnJheVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IueTsKLSAgICAgICAgICAgICAgICBhcnJh
eVsgb2Zmc2V0ICsrIF0gPSB2ZWN0b3IuejsKLSAgICAgICAgICAgICAgICBhcnJheVsgb2Zmc2V0
ICsrIF0gPSB2ZWN0b3IudzsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAgICAgICBj
bG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzOwogCi0gICAgICAg
IHNldDogZnVuY3Rpb24gKCB2YWx1ZSwgb2Zmc2V0ICkgeworICAgICAgICAgICAgIGlmICggcGFy
YW1ldGVycyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICBpZiAoIG9mZnNldCA9PT0g
dW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CiAK
LSAgICAgICAgICAgIHRoaXMuYXJyYXkuc2V0KCB2YWx1ZSwgb2Zmc2V0ICk7CisgICAgICAgICAg
ICAgZm9yICggdmFyIGtleSBpbiBwYXJhbWV0ZXJzICkgewogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgICB2YWx1ZXMucHVzaCggcGFyYW1ldGVyc1sga2V5IF0gKTsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgIH0KIAotICAgICAgICBnZXRYOiBmdW5jdGlvbiAoIGlu
ZGV4ICkgeworICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IE9iamVjdC5jcmVhdGUoIHRoaXMu
Y29uc3RydWN0b3IucHJvdG90eXBlICk7CisgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5h
cHBseSggZ2VvbWV0cnksIHZhbHVlcyApOworICAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSBd
OworICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1
Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICByZXR1
cm4gbmV3IEJ1ZmZlckdlb21ldHJ5KCkuY29weSggdGhpcyApOwogCiAgICAgICAgIH0sCiAKLSAg
ICAgICAgc2V0WDogZnVuY3Rpb24gKCBpbmRleCwgeCApIHsKKyAgICAgICAgY29weTogZnVuY3Rp
b24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5p
dGVtU2l6ZSBdID0geDsKKyAgICAgICAgICAgIHZhciBuYW1lLCBpLCBsOwogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIC8vIHJlc2V0CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgIHRoaXMuaW5kZXggPSBudWxsOworICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0g
e307CisgICAgICAgICAgICB0aGlzLm1vcnBoQXR0cmlidXRlcyA9IHt9OworICAgICAgICAgICAg
dGhpcy5ncm91cHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxsOwor
ICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7CiAKLSAgICAgICAgZ2V0WTog
ZnVuY3Rpb24gKCBpbmRleCApIHsKKyAgICAgICAgICAgIC8vIG5hbWUKIAotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDEgXTsKKyAgICAgICAg
ICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICAv
LyBpbmRleAogCi0gICAgICAgIHNldFk6IGZ1bmN0aW9uICggaW5kZXgsIHkgKSB7CisgICAgICAg
ICAgICB2YXIgaW5kZXggPSBzb3VyY2UuaW5kZXg7CiAKLSAgICAgICAgICAgIHRoaXMuYXJyYXlb
IGluZGV4ICogdGhpcy5pdGVtU2l6ZSArIDEgXSA9IHk7CisgICAgICAgICAgICBpZiAoIGluZGV4
ICE9PSBudWxsICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAg
ICB0aGlzLnNldEluZGV4KCBpbmRleC5jbG9uZSgpICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICBnZXRaOiBmdW5jdGlvbiAoIGluZGV4ICkgeworICAgICAgICAgICAg
Ly8gYXR0cmlidXRlcwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsgaW5kZXggKiB0
aGlzLml0ZW1TaXplICsgMiBdOworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzb3VyY2Uu
YXR0cmlidXRlczsKIAotICAgICAgICB9LAorICAgICAgICAgICAgZm9yICggbmFtZSBpbiBhdHRy
aWJ1dGVzICkgewogCi0gICAgICAgIHNldFo6IGZ1bmN0aW9uICggaW5kZXgsIHogKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbIG5hbWUgXTsKKyAgICAgICAg
ICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggbmFtZSwgYXR0cmlidXRlLmNsb25lKCkgKTsKIAot
ICAgICAgICAgICAgdGhpcy5hcnJheVsgaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMiBdID0gejsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAv
LyBtb3JwaCBhdHRyaWJ1dGVzCiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBtb3JwaEF0
dHJpYnV0ZXMgPSBzb3VyY2UubW9ycGhBdHRyaWJ1dGVzOwogCi0gICAgICAgIGdldFc6IGZ1bmN0
aW9uICggaW5kZXggKSB7CisgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG1vcnBoQXR0cmlidXRl
cyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVt
U2l6ZSArIDMgXTsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICAgICAgICAg
ICAgICB2YXIgbW9ycGhBdHRyaWJ1dGUgPSBtb3JwaEF0dHJpYnV0ZXNbIG5hbWUgXTsgLy8gbW9y
cGhBdHRyaWJ1dGU6IGFycmF5IG9mIEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGVzCiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0
aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgc2V0VzogZnVuY3Rpb24gKCBpbmRleCwgdyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCggbW9ycGhBdHRyaWJ1dGVbIGkgXS5j
bG9uZSgpICk7CiAKLSAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICogdGhpcy5pdGVtU2l6
ZSArIDMgXSA9IHc7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoQXR0cmlidXRlc1sgbmFtZSBdID0gYXJyYXk7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBzZXRYWTogZnVuY3Rpb24g
KCBpbmRleCwgeCwgeSApIHsKKyAgICAgICAgICAgIC8vIGdyb3VwcwogCi0gICAgICAgICAgICBp
bmRleCAqPSB0aGlzLml0ZW1TaXplOworICAgICAgICAgICAgdmFyIGdyb3VwcyA9IHNvdXJjZS5n
cm91cHM7CiAKLSAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKLSAgICAg
ICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMSBdID0geTsKKyAgICAgICAgICAgIGZvciAoIGkg
PSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgICAgIHZhciBncm91cCA9IGdyb3Vwc1sgaSBdOworICAg
ICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3Jv
dXAubWF0ZXJpYWxJbmRleCApOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgc2V0WFlaOiBmdW5jdGlvbiAoIGluZGV4LCB4LCB5LCB6ICkgeworICAgICAgICAgICAgLy8g
Ym91bmRpbmcgYm94CiAKLSAgICAgICAgICAgIGluZGV4ICo9IHRoaXMuaXRlbVNpemU7CisgICAg
ICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzb3VyY2UuYm91bmRpbmdCb3g7CiAKLSAgICAgICAg
ICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMCBdID0geDsKLSAgICAgICAgICAgIHRoaXMuYXJyYXlb
IGluZGV4ICsgMSBdID0geTsKLSAgICAgICAgICAgIHRoaXMuYXJyYXlbIGluZGV4ICsgMiBdID0g
ejsKKyAgICAgICAgICAgIGlmICggYm91bmRpbmdCb3ggIT09IG51bGwgKSB7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBib3Vu
ZGluZ0JveC5jbG9uZSgpOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB9CiAKLSAgICAgICAg
c2V0WFlaVzogZnVuY3Rpb24gKCBpbmRleCwgeCwgeSwgeiwgdyApIHsKKyAgICAgICAgICAgIC8v
IGJvdW5kaW5nIHNwaGVyZQogCi0gICAgICAgICAgICBpbmRleCAqPSB0aGlzLml0ZW1TaXplOwor
ICAgICAgICAgICAgdmFyIGJvdW5kaW5nU3BoZXJlID0gc291cmNlLmJvdW5kaW5nU3BoZXJlOwog
Ci0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCArIDAgXSA9IHg7Ci0gICAgICAgICAgICB0
aGlzLmFycmF5WyBpbmRleCArIDEgXSA9IHk7Ci0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRl
eCArIDIgXSA9IHo7Ci0gICAgICAgICAgICB0aGlzLmFycmF5WyBpbmRleCArIDMgXSA9IHc7Cisg
ICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlICE9PSBudWxsICkgewogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gYm91
bmRpbmdTcGhlcmUuY2xvbmUoKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0gICAg
ICAgIG9uVXBsb2FkOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgLy8gZHJh
dyByYW5nZQogCi0gICAgICAgICAgICB0aGlzLm9uVXBsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjazsK
KyAgICAgICAgICAgIHRoaXMuZHJhd1JhbmdlLnN0YXJ0ID0gc291cmNlLmRyYXdSYW5nZS5zdGFy
dDsKKyAgICAgICAgICAgIHRoaXMuZHJhd1JhbmdlLmNvdW50ID0gc291cmNlLmRyYXdSYW5nZS5j
b3VudDsKKworICAgICAgICAgICAgLy8gdXNlciBkYXRhCisKKyAgICAgICAgICAgIHRoaXMudXNl
ckRhdGEgPSBzb3VyY2UudXNlckRhdGE7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGlzcG9z
ZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0
b3IoIHRoaXMuYXJyYXksIHRoaXMuaXRlbVNpemUgKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsKIAogICAgICAgICB9
CiAKICAgICB9ICk7CiAKLSAgICAvLwotCi0gICAgZnVuY3Rpb24gSW50OEJ1ZmZlckF0dHJpYnV0
ZSggYXJyYXksIGl0ZW1TaXplICkgeworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8g
aHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRo
dWIuY29tL011Z2VuODcKKyAgICAgKi8KIAotICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCgg
dGhpcywgbmV3IEludDhBcnJheSggYXJyYXkgKSwgaXRlbVNpemUgKTsKKyAgICAvLyBCb3hHZW9t
ZXRyeQogCi0gICAgfQorICAgIGZ1bmN0aW9uIEJveEdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIGRlcHRoU2VnbWVudHMgKSB7CiAK
LSAgICBJbnQ4QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZl
ckF0dHJpYnV0ZS5wcm90b3R5cGUgKTsKLSAgICBJbnQ4QnVmZmVyQXR0cmlidXRlLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9IEludDhCdWZmZXJBdHRyaWJ1dGU7CisgICAgICAgIEdlb21ldHJ5LmNh
bGwoIHRoaXMgKTsKIAorICAgICAgICB0aGlzLnR5cGUgPSAnQm94R2VvbWV0cnknOwogCi0gICAg
ZnVuY3Rpb24gVWludDhCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSApIHsKKyAgICAg
ICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAg
ICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICBkZXB0aDogZGVwdGgsCisgICAgICAg
ICAgICB3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLAorICAgICAgICAgICAgaGVpZ2h0U2Vn
bWVudHM6IGhlaWdodFNlZ21lbnRzLAorICAgICAgICAgICAgZGVwdGhTZWdtZW50czogZGVwdGhT
ZWdtZW50cworICAgICAgICB9OwogCi0gICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlz
LCBuZXcgVWludDhBcnJheSggYXJyYXkgKSwgaXRlbVNpemUgKTsKKyAgICAgICAgdGhpcy5mcm9t
QnVmZmVyR2VvbWV0cnkoIG5ldyBCb3hCdWZmZXJHZW9tZXRyeSggd2lkdGgsIGhlaWdodCwgZGVw
dGgsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBkZXB0aFNlZ21lbnRzICkgKTsKKyAg
ICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CiAKICAgICB9CiAKLSAgICBVaW50OEJ1ZmZlckF0
dHJpYnV0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90
eXBlICk7Ci0gICAgVWludDhCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
VWludDhCdWZmZXJBdHRyaWJ1dGU7CisgICAgQm94R2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgQm94R2VvbWV0cnkucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gQm94R2VvbWV0cnk7CiAKKyAgICAvLyBCb3hCdWZmZXJHZW9tZXRyeQog
Ci0gICAgZnVuY3Rpb24gVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNp
emUgKSB7CisgICAgZnVuY3Rpb24gQm94QnVmZmVyR2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgZGVwdGhTZWdtZW50cyApIHsKIAot
ICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5
KCBhcnJheSApLCBpdGVtU2l6ZSApOworICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlz
ICk7CiAKLSAgICB9CisgICAgICAgIHRoaXMudHlwZSA9ICdCb3hCdWZmZXJHZW9tZXRyeSc7CiAK
LSAgICBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0
ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSApOwotICAgIFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0
dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1
dGU7CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0
aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICAgICAgZGVwdGg6IGRlcHRo
LAorICAgICAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cywKKyAgICAgICAgICAg
IGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cywKKyAgICAgICAgICAgIGRlcHRoU2VnbWVu
dHM6IGRlcHRoU2VnbWVudHMKKyAgICAgICAgfTsKIAorICAgICAgICB2YXIgc2NvcGUgPSB0aGlz
OwogCi0gICAgZnVuY3Rpb24gSW50MTZCdWZmZXJBdHRyaWJ1dGUoIGFycmF5LCBpdGVtU2l6ZSAp
IHsKKyAgICAgICAgd2lkdGggPSB3aWR0aCB8fCAxOworICAgICAgICBoZWlnaHQgPSBoZWlnaHQg
fHwgMTsKKyAgICAgICAgZGVwdGggPSBkZXB0aCB8fCAxOwogCi0gICAgICAgIEJ1ZmZlckF0dHJp
YnV0ZS5jYWxsKCB0aGlzLCBuZXcgSW50MTZBcnJheSggYXJyYXkgKSwgaXRlbVNpemUgKTsKKyAg
ICAgICAgLy8gc2VnbWVudHMKIAotICAgIH0KKyAgICAgICAgd2lkdGhTZWdtZW50cyA9IE1hdGgu
Zmxvb3IoIHdpZHRoU2VnbWVudHMgKSB8fCAxOworICAgICAgICBoZWlnaHRTZWdtZW50cyA9IE1h
dGguZmxvb3IoIGhlaWdodFNlZ21lbnRzICkgfHwgMTsKKyAgICAgICAgZGVwdGhTZWdtZW50cyA9
IE1hdGguZmxvb3IoIGRlcHRoU2VnbWVudHMgKSB8fCAxOwogCi0gICAgSW50MTZCdWZmZXJBdHRy
aWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlw
ZSApOwotICAgIEludDE2QnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IElu
dDE2QnVmZmVyQXR0cmlidXRlOworICAgICAgICAvLyBidWZmZXJzCiAKKyAgICAgICAgdmFyIGlu
ZGljZXMgPSBbXTsKKyAgICAgICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3Jt
YWxzID0gW107CisgICAgICAgIHZhciB1dnMgPSBbXTsKIAotICAgIGZ1bmN0aW9uIFVpbnQxNkJ1
ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkgeworICAgICAgICAvLyBoZWxwZXIgdmFy
aWFibGVzCiAKLSAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBVaW50MTZB
cnJheSggYXJyYXkgKSwgaXRlbVNpemUgKTsKKyAgICAgICAgdmFyIG51bWJlck9mVmVydGljZXMg
PSAwOworICAgICAgICB2YXIgZ3JvdXBTdGFydCA9IDA7CiAKLSAgICB9CisgICAgICAgIC8vIGJ1
aWxkIGVhY2ggc2lkZSBvZiB0aGUgYm94IGdlb21ldHJ5CiAKLSAgICBVaW50MTZCdWZmZXJBdHRy
aWJ1dGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlw
ZSApOwotICAgIFVpbnQxNkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBV
aW50MTZCdWZmZXJBdHRyaWJ1dGU7CisgICAgICAgIGJ1aWxkUGxhbmUoICd6JywgJ3knLCAneCcs
IC0gMSwgLSAxLCBkZXB0aCwgaGVpZ2h0LCB3aWR0aCwgZGVwdGhTZWdtZW50cywgaGVpZ2h0U2Vn
bWVudHMsIDAgKTsgLy8gcHgKKyAgICAgICAgYnVpbGRQbGFuZSggJ3onLCAneScsICd4JywgMSwg
LSAxLCBkZXB0aCwgaGVpZ2h0LCAtIHdpZHRoLCBkZXB0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50
cywgMSApOyAvLyBueAorICAgICAgICBidWlsZFBsYW5lKCAneCcsICd6JywgJ3knLCAxLCAxLCB3
aWR0aCwgZGVwdGgsIGhlaWdodCwgd2lkdGhTZWdtZW50cywgZGVwdGhTZWdtZW50cywgMiApOyAv
LyBweQorICAgICAgICBidWlsZFBsYW5lKCAneCcsICd6JywgJ3knLCAxLCAtIDEsIHdpZHRoLCBk
ZXB0aCwgLSBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGRlcHRoU2VnbWVudHMsIDMgKTsgLy8gbnkK
KyAgICAgICAgYnVpbGRQbGFuZSggJ3gnLCAneScsICd6JywgMSwgLSAxLCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIDQgKTsgLy8gcHoKKyAgICAg
ICAgYnVpbGRQbGFuZSggJ3gnLCAneScsICd6JywgLSAxLCAtIDEsIHdpZHRoLCBoZWlnaHQsIC0g
ZGVwdGgsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCA1ICk7IC8vIG56CiAKKyAgICAg
ICAgLy8gYnVpbGQgZ2VvbWV0cnkKIAotICAgIGZ1bmN0aW9uIEludDMyQnVmZmVyQXR0cmlidXRl
KCBhcnJheSwgaXRlbVNpemUgKSB7CisgICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsK
KyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVy
QXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAn
bm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApOworICAg
ICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUo
IHV2cywgMiApICk7CiAKLSAgICAgICAgQnVmZmVyQXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBJ
bnQzMkFycmF5KCBhcnJheSApLCBpdGVtU2l6ZSApOworICAgICAgICBmdW5jdGlvbiBidWlsZFBs
YW5lKCB1LCB2LCB3LCB1ZGlyLCB2ZGlyLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZ3JpZFgsIGdy
aWRZLCBtYXRlcmlhbEluZGV4ICkgewogCi0gICAgfQorICAgICAgICAgICAgdmFyIHNlZ21lbnRX
aWR0aCA9IHdpZHRoIC8gZ3JpZFg7CisgICAgICAgICAgICB2YXIgc2VnbWVudEhlaWdodCA9IGhl
aWdodCAvIGdyaWRZOwogCi0gICAgSW50MzJCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZSggQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZSApOwotICAgIEludDMyQnVmZmVy
QXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludDMyQnVmZmVyQXR0cmlidXRlOwor
ICAgICAgICAgICAgdmFyIHdpZHRoSGFsZiA9IHdpZHRoIC8gMjsKKyAgICAgICAgICAgIHZhciBo
ZWlnaHRIYWxmID0gaGVpZ2h0IC8gMjsKKyAgICAgICAgICAgIHZhciBkZXB0aEhhbGYgPSBkZXB0
aCAvIDI7CiAKKyAgICAgICAgICAgIHZhciBncmlkWDEgPSBncmlkWCArIDE7CisgICAgICAgICAg
ICB2YXIgZ3JpZFkxID0gZ3JpZFkgKyAxOwogCi0gICAgZnVuY3Rpb24gVWludDMyQnVmZmVyQXR0
cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7CisgICAgICAgICAgICB2YXIgdmVydGV4Q291bnRl
ciA9IDA7CisgICAgICAgICAgICB2YXIgZ3JvdXBDb3VudCA9IDA7CiAKLSAgICAgICAgQnVmZmVy
QXR0cmlidXRlLmNhbGwoIHRoaXMsIG5ldyBVaW50MzJBcnJheSggYXJyYXkgKSwgaXRlbVNpemUg
KTsKKyAgICAgICAgICAgIHZhciBpeCwgaXk7CiAKLSAgICB9CisgICAgICAgICAgICB2YXIgdmVj
dG9yID0gbmV3IFZlY3RvcjMoKTsKIAotICAgIFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBlICk7Ci0gICAgVWlu
dDMyQnVmZmVyQXR0cmlidXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVpbnQzMkJ1ZmZlckF0
dHJpYnV0ZTsKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1
dnMKIAorICAgICAgICAgICAgZm9yICggaXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkgKysgKSB7CiAK
LSAgICBmdW5jdGlvbiBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBhcnJheSwgaXRlbVNpemUgKSB7
CisgICAgICAgICAgICAgICAgdmFyIHkgPSBpeSAqIHNlZ21lbnRIZWlnaHQgLSBoZWlnaHRIYWxm
OwogCi0gICAgICAgIEJ1ZmZlckF0dHJpYnV0ZS5jYWxsKCB0aGlzLCBuZXcgRmxvYXQzMkFycmF5
KCBhcnJheSApLCBpdGVtU2l6ZSApOworICAgICAgICAgICAgICAgIGZvciAoIGl4ID0gMDsgaXgg
PCBncmlkWDE7IGl4ICsrICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgeCA9
IGl4ICogc2VnbWVudFdpZHRoIC0gd2lkdGhIYWxmOwogCi0gICAgRmxvYXQzMkJ1ZmZlckF0dHJp
YnV0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRyaWJ1dGUucHJvdG90eXBl
ICk7Ci0gICAgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBG
bG9hdDMyQnVmZmVyQXR0cmlidXRlOworICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWVz
IHRvIGNvcnJlY3QgdmVjdG9yIGNvbXBvbmVudAogCisgICAgICAgICAgICAgICAgICAgIHZlY3Rv
clsgdSBdID0geCAqIHVkaXI7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvclsgdiBdID0geSAq
IHZkaXI7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvclsgdyBdID0gZGVwdGhIYWxmOwogCi0g
ICAgZnVuY3Rpb24gRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSggYXJyYXksIGl0ZW1TaXplICkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBub3cgYXBwbHkgdmVjdG9yIHRvIHZlcnRleCBidWZmZXIK
IAotICAgICAgICBCdWZmZXJBdHRyaWJ1dGUuY2FsbCggdGhpcywgbmV3IEZsb2F0NjRBcnJheSgg
YXJyYXkgKSwgaXRlbVNpemUgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXMucHVzaCgg
dmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3IueiApOwogCi0gICAgfQorICAgICAgICAgICAgICAg
ICAgICAvLyBzZXQgdmFsdWVzIHRvIGNvcnJlY3QgdmVjdG9yIGNvbXBvbmVudAogCi0gICAgRmxv
YXQ2NEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJBdHRy
aWJ1dGUucHJvdG90eXBlICk7Ci0gICAgRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZS5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBGbG9hdDY0QnVmZmVyQXR0cmlidXRlOworICAgICAgICAgICAgICAgICAg
ICB2ZWN0b3JbIHUgXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHZlY3RvclsgdiBdID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgdmVjdG9yWyB3IF0gPSBkZXB0aCA+IDAgPyAxIDogLSAxOwog
Ci0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAg
ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLy8gbm93IGFwcGx5IHZlY3RvciB0byBub3JtYWwg
YnVmZmVyCiAKLSAgICBmdW5jdGlvbiBEaXJlY3RHZW9tZXRyeSgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9ybWFscy5wdXNoKCB2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56ICk7CiAKLSAg
ICAgICAgdGhpcy5pbmRpY2VzID0gW107Ci0gICAgICAgIHRoaXMudmVydGljZXMgPSBbXTsKLSAg
ICAgICAgdGhpcy5ub3JtYWxzID0gW107Ci0gICAgICAgIHRoaXMuY29sb3JzID0gW107Ci0gICAg
ICAgIHRoaXMudXZzID0gW107Ci0gICAgICAgIHRoaXMudXZzMiA9IFtdOworICAgICAgICAgICAg
ICAgICAgICAvLyB1dnMKIAotICAgICAgICB0aGlzLmdyb3VwcyA9IFtdOworICAgICAgICAgICAg
ICAgICAgICB1dnMucHVzaCggaXggLyBncmlkWCApOworICAgICAgICAgICAgICAgICAgICB1dnMu
cHVzaCggMSAtICggaXkgLyBncmlkWSApICk7CiAKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMg
PSB7fTsKKyAgICAgICAgICAgICAgICAgICAgLy8gY291bnRlcnMKIAotICAgICAgICB0aGlzLnNr
aW5XZWlnaHRzID0gW107Ci0gICAgICAgIHRoaXMuc2tpbkluZGljZXMgPSBbXTsKKyAgICAgICAg
ICAgICAgICAgICAgdmVydGV4Q291bnRlciArPSAxOwogCi0gICAgICAgIC8vIHRoaXMubGluZURp
c3RhbmNlcyA9IFtdOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmJvdW5kaW5n
Qm94ID0gbnVsbDsKLSAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgLy8gdXBkYXRlIGZsYWdzCisgICAgICAgICAgICAvLyBpbmRpY2Vz
CiAKLSAgICAgICAgdGhpcy52ZXJ0aWNlc05lZWRVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAgdGhp
cy5ub3JtYWxzTmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICB0aGlzLmNvbG9yc05lZWRVcGRh
dGUgPSBmYWxzZTsKLSAgICAgICAgdGhpcy51dnNOZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgICAg
IHRoaXMuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgLy8gMS4geW91IG5l
ZWQgdGhyZWUgaW5kaWNlcyB0byBkcmF3IGEgc2luZ2xlIGZhY2UKKyAgICAgICAgICAgIC8vIDIu
IGEgc2luZ2xlIHNlZ21lbnQgY29uc2lzdHMgb2YgdHdvIGZhY2VzCisgICAgICAgICAgICAvLyAz
LiBzbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHNpeCAoMiozKSBpbmRpY2VzIHBlciBzZWdtZW50CiAK
LSAgICB9CisgICAgICAgICAgICBmb3IgKCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5ICsrICkgewog
Ci0gICAgT2JqZWN0LmFzc2lnbiggRGlyZWN0R2VvbWV0cnkucHJvdG90eXBlLCB7CisgICAgICAg
ICAgICAgICAgZm9yICggaXggPSAwOyBpeCA8IGdyaWRYOyBpeCArKyApIHsKIAotICAgICAgICBj
b21wdXRlR3JvdXBzOiBmdW5jdGlvbiAoIGdlb21ldHJ5ICkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgYSA9IG51bWJlck9mVmVydGljZXMgKyBpeCArIGdyaWRYMSAqIGl5OworICAgICAgICAg
ICAgICAgICAgICB2YXIgYiA9IG51bWJlck9mVmVydGljZXMgKyBpeCArIGdyaWRYMSAqICggaXkg
KyAxICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBjID0gbnVtYmVyT2ZWZXJ0aWNlcyArICgg
aXggKyAxICkgKyBncmlkWDEgKiAoIGl5ICsgMSApOworICAgICAgICAgICAgICAgICAgICB2YXIg
ZCA9IG51bWJlck9mVmVydGljZXMgKyAoIGl4ICsgMSApICsgZ3JpZFgxICogaXk7CiAKLSAgICAg
ICAgICAgIHZhciBncm91cDsKLSAgICAgICAgICAgIHZhciBncm91cHMgPSBbXTsKLSAgICAgICAg
ICAgIHZhciBtYXRlcmlhbEluZGV4ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAv
LyBmYWNlcwogCi0gICAgICAgICAgICB2YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKKyAgICAg
ICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7CisgICAgICAgICAgICAgICAg
ICAgIGluZGljZXMucHVzaCggYiwgYywgZCApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDA7IGkgPCBmYWNlcy5sZW5ndGg7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGlu
Y3JlYXNlIGNvdW50ZXIKIAotICAgICAgICAgICAgICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsK
KyAgICAgICAgICAgICAgICAgICAgZ3JvdXBDb3VudCArPSA2OwogCi0gICAgICAgICAgICAgICAg
Ly8gbWF0ZXJpYWxzCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBm
YWNlLm1hdGVyaWFsSW5kZXggIT09IG1hdGVyaWFsSW5kZXggKSB7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleCA9IGZhY2UubWF0ZXJpYWxJbmRleDsK
KyAgICAgICAgICAgIC8vIGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVu
c3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBn
cm91cCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgc2NvcGUuYWRkR3JvdXAoIGdyb3Vw
U3RhcnQsIGdyb3VwQ291bnQsIG1hdGVyaWFsSW5kZXggKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JvdXAuY291bnQgPSAoIGkgKiAzICkgLSBncm91cC5zdGFydDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCBncm91cCApOworICAgICAgICAgICAgLy8gY2FsY3Vs
YXRlIG5ldyBzdGFydCB2YWx1ZSBmb3IgZ3JvdXBzCiAKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ3JvdXBTdGFydCArPSBncm91cENvdW50OwogCi0gICAgICAgICAgICAgICAg
ICAgIGdyb3VwID0gewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGkgKiAzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxJbmRleDogbWF0ZXJpYWxJbmRleAotICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgLy8gdXBkYXRlIHRvdGFsIG51bWJlciBvZiB2
ZXJ0aWNlcwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtYmVyT2ZWZXJ0aWNl
cyArPSB2ZXJ0ZXhDb3VudGVyOwogCi0gICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCBncm91cCAhPT0gdW5kZWZpbmVkICkgeworICAgIH0KIAotICAgICAgICAgICAg
ICAgIGdyb3VwLmNvdW50ID0gKCBpICogMyApIC0gZ3JvdXAuc3RhcnQ7Ci0gICAgICAgICAgICAg
ICAgZ3JvdXBzLnB1c2goIGdyb3VwICk7CisgICAgQm94QnVmZmVyR2VvbWV0cnkucHJvdG90eXBl
ID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgQm94QnVm
ZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQm94QnVmZmVyR2VvbWV0cnk7CiAK
LSAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9t
cmRvb2IuY29tLworICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9N
dWdlbjg3CisgICAgICovCiAKLSAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzOworICAg
IC8vIFBsYW5lR2VvbWV0cnkKIAotICAgICAgICB9LAorICAgIGZ1bmN0aW9uIFBsYW5lR2VvbWV0
cnkoIHdpZHRoLCBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzICkgewogCi0g
ICAgICAgIGZyb21HZW9tZXRyeTogZnVuY3Rpb24gKCBnZW9tZXRyeSApIHsKKyAgICAgICAgR2Vv
bWV0cnkuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICB2YXIgZmFjZXMgPSBnZW9tZXRyeS5m
YWNlczsKLSAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzOwotICAg
ICAgICAgICAgdmFyIGZhY2VWZXJ0ZXhVdnMgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzOworICAg
ICAgICB0aGlzLnR5cGUgPSAnUGxhbmVHZW9tZXRyeSc7CiAKLSAgICAgICAgICAgIHZhciBoYXNG
YWNlVmVydGV4VXYgPSBmYWNlVmVydGV4VXZzWyAwIF0gJiYgZmFjZVZlcnRleFV2c1sgMCBdLmxl
bmd0aCA+IDA7Ci0gICAgICAgICAgICB2YXIgaGFzRmFjZVZlcnRleFV2MiA9IGZhY2VWZXJ0ZXhV
dnNbIDEgXSAmJiBmYWNlVmVydGV4VXZzWyAxIF0ubGVuZ3RoID4gMDsKKyAgICAgICAgdGhpcy5w
YXJhbWV0ZXJzID0geworICAgICAgICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgaGVp
Z2h0OiBoZWlnaHQsCisgICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLAor
ICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzCisgICAgICAgIH07CiAK
LSAgICAgICAgICAgIC8vIG1vcnBocworICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSgg
bmV3IFBsYW5lQnVmZmVyR2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGhl
aWdodFNlZ21lbnRzICkgKTsKKyAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CiAKLSAgICAg
ICAgICAgIHZhciBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7Ci0gICAgICAg
ICAgICB2YXIgbW9ycGhUYXJnZXRzTGVuZ3RoID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsKKyAgICB9
CiAKLSAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldHNQb3NpdGlvbjsKKyAgICBQbGFuZUdlb21l
dHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOworICAg
IFBsYW5lR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmVHZW9tZXRyeTsKIAot
ICAgICAgICAgICAgaWYgKCBtb3JwaFRhcmdldHNMZW5ndGggPiAwICkgeworICAgIC8vIFBsYW5l
QnVmZmVyR2VvbWV0cnkKIAotICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c1Bvc2l0aW9uID0g
W107CisgICAgZnVuY3Rpb24gUGxhbmVCdWZmZXJHZW9tZXRyeSggd2lkdGgsIGhlaWdodCwgd2lk
dGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMgKSB7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDA7IGkgPCBtb3JwaFRhcmdldHNMZW5ndGg7IGkgKysgKSB7CisgICAgICAgIEJ1ZmZl
ckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgICAgICBtb3JwaFRhcmdl
dHNQb3NpdGlvblsgaSBdID0gW107CisgICAgICAgIHRoaXMudHlwZSA9ICdQbGFuZUJ1ZmZlckdl
b21ldHJ5JzsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0g
eworICAgICAgICAgICAgd2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQs
CisgICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLAorICAgICAgICAgICAg
aGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzCisgICAgICAgIH07CiAKLSAgICAgICAgICAg
ICAgICB0aGlzLm1vcnBoVGFyZ2V0cy5wb3NpdGlvbiA9IG1vcnBoVGFyZ2V0c1Bvc2l0aW9uOwor
ICAgICAgICB3aWR0aCA9IHdpZHRoIHx8IDE7CisgICAgICAgIGhlaWdodCA9IGhlaWdodCB8fCAx
OwogCi0gICAgICAgICAgICB9CisgICAgICAgIHZhciB3aWR0aF9oYWxmID0gd2lkdGggLyAyOwor
ICAgICAgICB2YXIgaGVpZ2h0X2hhbGYgPSBoZWlnaHQgLyAyOwogCi0gICAgICAgICAgICB2YXIg
bW9ycGhOb3JtYWxzID0gZ2VvbWV0cnkubW9ycGhOb3JtYWxzOwotICAgICAgICAgICAgdmFyIG1v
cnBoTm9ybWFsc0xlbmd0aCA9IG1vcnBoTm9ybWFscy5sZW5ndGg7CisgICAgICAgIHZhciBncmlk
WCA9IE1hdGguZmxvb3IoIHdpZHRoU2VnbWVudHMgKSB8fCAxOworICAgICAgICB2YXIgZ3JpZFkg
PSBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApIHx8IDE7CiAKLSAgICAgICAgICAgIHZhciBt
b3JwaFRhcmdldHNOb3JtYWw7CisgICAgICAgIHZhciBncmlkWDEgPSBncmlkWCArIDE7CisgICAg
ICAgIHZhciBncmlkWTEgPSBncmlkWSArIDE7CiAKLSAgICAgICAgICAgIGlmICggbW9ycGhOb3Jt
YWxzTGVuZ3RoID4gMCApIHsKKyAgICAgICAgdmFyIHNlZ21lbnRfd2lkdGggPSB3aWR0aCAvIGdy
aWRYOworICAgICAgICB2YXIgc2VnbWVudF9oZWlnaHQgPSBoZWlnaHQgLyBncmlkWTsKIAotICAg
ICAgICAgICAgICAgIG1vcnBoVGFyZ2V0c05vcm1hbCA9IFtdOworICAgICAgICB2YXIgaXgsIGl5
OwogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbW9ycGhOb3JtYWxzTGVu
Z3RoOyBpICsrICkgeworICAgICAgICAvLyBidWZmZXJzCiAKLSAgICAgICAgICAgICAgICAgICAg
bW9ycGhUYXJnZXRzTm9ybWFsWyBpIF0gPSBbXTsKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsK
KyAgICAgICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxzID0gW107Cisg
ICAgICAgIHZhciB1dnMgPSBbXTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gZ2Vu
ZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2cwogCi0gICAgICAgICAgICAgICAgdGhpcy5t
b3JwaFRhcmdldHMubm9ybWFsID0gbW9ycGhUYXJnZXRzTm9ybWFsOworICAgICAgICBmb3IgKCBp
eSA9IDA7IGl5IDwgZ3JpZFkxOyBpeSArKyApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdmFyIHkgPSBpeSAqIHNlZ21lbnRfaGVpZ2h0IC0gaGVpZ2h0X2hhbGY7CiAKLSAgICAgICAg
ICAgIC8vIHNraW5zCisgICAgICAgICAgICBmb3IgKCBpeCA9IDA7IGl4IDwgZ3JpZFgxOyBpeCAr
KyApIHsKIAotICAgICAgICAgICAgdmFyIHNraW5JbmRpY2VzID0gZ2VvbWV0cnkuc2tpbkluZGlj
ZXM7Ci0gICAgICAgICAgICB2YXIgc2tpbldlaWdodHMgPSBnZW9tZXRyeS5za2luV2VpZ2h0czsK
KyAgICAgICAgICAgICAgICB2YXIgeCA9IGl4ICogc2VnbWVudF93aWR0aCAtIHdpZHRoX2hhbGY7
CiAKLSAgICAgICAgICAgIHZhciBoYXNTa2luSW5kaWNlcyA9IHNraW5JbmRpY2VzLmxlbmd0aCA9
PT0gdmVydGljZXMubGVuZ3RoOwotICAgICAgICAgICAgdmFyIGhhc1NraW5XZWlnaHRzID0gc2tp
bldlaWdodHMubGVuZ3RoID09PSB2ZXJ0aWNlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgdmVy
dGljZXMucHVzaCggeCwgLSB5LCAwICk7CiAKLSAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgbm9ybWFscy5wdXNoKCAwLCAwLCAxICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSA8IGZhY2VzLmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICB1dnMucHVzaCgg
aXggLyBncmlkWCApOworICAgICAgICAgICAgICAgIHV2cy5wdXNoKCAxIC0gKCBpeSAvIGdyaWRZ
ICkgKTsKIAotICAgICAgICAgICAgICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHRoaXMudmVydGljZXMucHVzaCggdmVydGljZXNbIGZh
Y2UuYSBdLCB2ZXJ0aWNlc1sgZmFjZS5iIF0sIHZlcnRpY2VzWyBmYWNlLmMgXSApOworICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgdmVydGV4Tm9ybWFscyA9IGZhY2UudmVydGV4Tm9y
bWFsczsKKyAgICAgICAgLy8gaW5kaWNlcwogCi0gICAgICAgICAgICAgICAgaWYgKCB2ZXJ0ZXhO
b3JtYWxzLmxlbmd0aCA9PT0gMyApIHsKKyAgICAgICAgZm9yICggaXkgPSAwOyBpeSA8IGdyaWRZ
OyBpeSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLm5vcm1hbHMucHVzaCggdmVy
dGV4Tm9ybWFsc1sgMCBdLCB2ZXJ0ZXhOb3JtYWxzWyAxIF0sIHZlcnRleE5vcm1hbHNbIDIgXSAp
OwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIg
bm9ybWFsID0gZmFjZS5ub3JtYWw7CisgICAgICAgICAgICBmb3IgKCBpeCA9IDA7IGl4IDwgZ3Jp
ZFg7IGl4ICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMubm9ybWFscy5wdXNoKCBu
b3JtYWwsIG5vcm1hbCwgbm9ybWFsICk7CisgICAgICAgICAgICAgICAgdmFyIGEgPSBpeCArIGdy
aWRYMSAqIGl5OworICAgICAgICAgICAgICAgIHZhciBiID0gaXggKyBncmlkWDEgKiAoIGl5ICsg
MSApOworICAgICAgICAgICAgICAgIHZhciBjID0gKCBpeCArIDEgKSArIGdyaWRYMSAqICggaXkg
KyAxICk7CisgICAgICAgICAgICAgICAgdmFyIGQgPSAoIGl4ICsgMSApICsgZ3JpZFgxICogaXk7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gZmFjZXMKIAotICAgICAg
ICAgICAgICAgIHZhciB2ZXJ0ZXhDb2xvcnMgPSBmYWNlLnZlcnRleENvbG9yczsKKyAgICAgICAg
ICAgICAgICBpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKKyAgICAgICAgICAgICAgICBpbmRpY2Vz
LnB1c2goIGIsIGMsIGQgKTsKIAotICAgICAgICAgICAgICAgIGlmICggdmVydGV4Q29sb3JzLmxl
bmd0aCA9PT0gMyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB0aGlz
LmNvbG9ycy5wdXNoKCB2ZXJ0ZXhDb2xvcnNbIDAgXSwgdmVydGV4Q29sb3JzWyAxIF0sIHZlcnRl
eENvbG9yc1sgMiBdICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9y
ID0gZmFjZS5jb2xvcjsKKyAgICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOworICAgICAg
ICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1
dGUoIHZlcnRpY2VzLCAzICkgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwn
LCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7CisgICAgICAgIHRo
aXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAy
ICkgKTsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9ycy5wdXNoKCBjb2xvciwgY29s
b3IsIGNvbG9yICk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAgIFBsYW5lQnVmZmVy
R2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90
eXBlICk7CisgICAgUGxhbmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQ
bGFuZUJ1ZmZlckdlb21ldHJ5OwogCi0gICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4
VXYgPT09IHRydWUgKSB7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8v
bXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFs
aWEuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXhVdnMgPSBm
YWNlVmVydGV4VXZzWyAwIF1bIGkgXTsKKyAgICB2YXIgbWF0ZXJpYWxJZCA9IDA7CiAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCB2ZXJ0ZXhVdnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICBmdW5j
dGlvbiBNYXRlcmlhbCgpIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dnMucHVz
aCggdmVydGV4VXZzWyAwIF0sIHZlcnRleFV2c1sgMSBdLCB2ZXJ0ZXhVdnNbIDIgXSApOworICAg
ICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IG1hdGVyaWFs
SWQgKysgfSApOwogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMu
dXVpZCA9IF9NYXRoLmdlbmVyYXRlVVVJRCgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLndhcm4oICdUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZp
bmVkIHZlcnRleFV2ICcsIGkgKTsKKyAgICAgICAgdGhpcy5uYW1lID0gJyc7CisgICAgICAgIHRo
aXMudHlwZSA9ICdNYXRlcmlhbCc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXZz
LnB1c2goIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCkgKTsKKyAg
ICAgICAgdGhpcy5mb2cgPSB0cnVlOworICAgICAgICB0aGlzLmxpZ2h0cyA9IHRydWU7CiAKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICB0aGlzLmJsZW5kaW5nID0gTm9ybWFsQmxlbmRp
bmc7CisgICAgICAgIHRoaXMuc2lkZSA9IEZyb250U2lkZTsKKyAgICAgICAgdGhpcy5mbGF0U2hh
ZGluZyA9IGZhbHNlOworICAgICAgICB0aGlzLnZlcnRleENvbG9ycyA9IE5vQ29sb3JzOyAvLyBU
SFJFRS5Ob0NvbG9ycywgVEhSRUUuVmVydGV4Q29sb3JzLCBUSFJFRS5GYWNlQ29sb3JzCiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMub3BhY2l0eSA9IDE7CisgICAgICAgIHRoaXMu
dHJhbnNwYXJlbnQgPSBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRl
eFV2MiA9PT0gdHJ1ZSApIHsKKyAgICAgICAgdGhpcy5ibGVuZFNyYyA9IFNyY0FscGhhRmFjdG9y
OworICAgICAgICB0aGlzLmJsZW5kRHN0ID0gT25lTWludXNTcmNBbHBoYUZhY3RvcjsKKyAgICAg
ICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gQWRkRXF1YXRpb247CisgICAgICAgIHRoaXMuYmxlbmRT
cmNBbHBoYSA9IG51bGw7CisgICAgICAgIHRoaXMuYmxlbmREc3RBbHBoYSA9IG51bGw7CisgICAg
ICAgIHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhID0gbnVsbDsKIAotICAgICAgICAgICAgICAgICAg
ICB2YXIgdmVydGV4VXZzID0gZmFjZVZlcnRleFV2c1sgMSBdWyBpIF07CisgICAgICAgIHRoaXMu
ZGVwdGhGdW5jID0gTGVzc0VxdWFsRGVwdGg7CisgICAgICAgIHRoaXMuZGVwdGhUZXN0ID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5kZXB0aFdyaXRlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHZlcnRleFV2cyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICB0aGlzLmNsaXBwaW5n
UGxhbmVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5jbGlwSW50ZXJzZWN0aW9uID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuY2xpcFNoYWRvd3MgPSBmYWxzZTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy51dnMyLnB1c2goIHZlcnRleFV2c1sgMCBdLCB2ZXJ0ZXhVdnNbIDEgXSwgdmVydGV4
VXZzWyAyIF0gKTsKKyAgICAgICAgdGhpcy5zaGFkb3dTaWRlID0gbnVsbDsKIAotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmNvbG9yV3JpdGUgPSB0cnVlOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5EaXJlY3RHZW9tZXRy
eS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2MiAnLCBpICk7CisgICAgICAgIHRo
aXMucHJlY2lzaW9uID0gbnVsbDsgLy8gb3ZlcnJpZGUgdGhlIHJlbmRlcmVyJ3MgZGVmYXVsdCBw
cmVjaXNpb24gZm9yIHRoaXMgbWF0ZXJpYWwKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy51dnMyLnB1c2goIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCksIG5ldyBWZWN0b3IyKCkg
KTsKKyAgICAgICAgdGhpcy5wb2x5Z29uT2Zmc2V0ID0gZmFsc2U7CisgICAgICAgIHRoaXMucG9s
eWdvbk9mZnNldEZhY3RvciA9IDA7CisgICAgICAgIHRoaXMucG9seWdvbk9mZnNldFVuaXRzID0g
MDsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMuZGl0aGVyaW5nID0gZmFs
c2U7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMuYWxwaGFUZXN0ID0gMDsKKyAg
ICAgICAgdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBmYWxzZTsKIAotICAgICAgICAgICAgICAg
IC8vIG1vcnBocworICAgICAgICB0aGlzLm92ZXJkcmF3ID0gMDsgLy8gT3ZlcmRyYXduIHBpeGVs
cyAodHlwaWNhbGx5IGJldHdlZW4gMCBhbmQgMSkgZm9yIGZpeGluZyBhbnRpYWxpYXNpbmcgZ2Fw
cyBpbiBDYW52YXNSZW5kZXJlcgogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBq
IDwgbW9ycGhUYXJnZXRzTGVuZ3RoOyBqICsrICkgeworICAgICAgICB0aGlzLnZpc2libGUgPSB0
cnVlOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0
c1sgaiBdLnZlcnRpY2VzOworICAgICAgICB0aGlzLnVzZXJEYXRhID0ge307CiAKLSAgICAgICAg
ICAgICAgICAgICAgbW9ycGhUYXJnZXRzUG9zaXRpb25bIGogXS5wdXNoKCBtb3JwaFRhcmdldFsg
ZmFjZS5hIF0sIG1vcnBoVGFyZ2V0WyBmYWNlLmIgXSwgbW9ycGhUYXJnZXRbIGZhY2UuYyBdICk7
CisgICAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgfQor
ICAgIH0KIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsgaiA8IG1vcnBoTm9ybWFs
c0xlbmd0aDsgaiArKyApIHsKKyAgICBNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWdu
KCBPYmplY3QuY3JlYXRlKCBFdmVudERpc3BhdGNoZXIucHJvdG90eXBlICksIHsKIAotICAgICAg
ICAgICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWwgPSBtb3JwaE5vcm1hbHNbIGogXS52ZXJ0ZXhO
b3JtYWxzWyBpIF07CisgICAgICAgIGNvbnN0cnVjdG9yOiBNYXRlcmlhbCwKIAotICAgICAgICAg
ICAgICAgICAgICBtb3JwaFRhcmdldHNOb3JtYWxbIGogXS5wdXNoKCBtb3JwaE5vcm1hbC5hLCBt
b3JwaE5vcm1hbC5iLCBtb3JwaE5vcm1hbC5jICk7CisgICAgICAgIGlzTWF0ZXJpYWw6IHRydWUs
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIG9uQmVmb3JlQ29tcGlsZTogZnVuY3Rpb24g
KCkge30sCiAKLSAgICAgICAgICAgICAgICAvLyBza2lucworICAgICAgICBzZXRWYWx1ZXM6IGZ1
bmN0aW9uICggdmFsdWVzICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBoYXNTa2luSW5kaWNl
cyApIHsKKyAgICAgICAgICAgIGlmICggdmFsdWVzID09PSB1bmRlZmluZWQgKSByZXR1cm47CiAK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5za2luSW5kaWNlcy5wdXNoKCBza2luSW5kaWNlc1sg
ZmFjZS5hIF0sIHNraW5JbmRpY2VzWyBmYWNlLmIgXSwgc2tpbkluZGljZXNbIGZhY2UuYyBdICk7
CisgICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIHZhbHVlcyApIHsKIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB2YWx1ZXNbIGtleSBdOwogCi0g
ICAgICAgICAgICAgICAgaWYgKCBoYXNTa2luV2VpZ2h0cyApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5za2luV2VpZ2h0cy5wdXNoKCBza2luV2VpZ2h0c1sgZmFjZS5hIF0sIHNraW5XZWlnaHRzWyBm
YWNlLmIgXSwgc2tpbldlaWdodHNbIGZhY2UuYyBdICk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggIlRIUkVFLk1hdGVyaWFsOiAnIiArIGtleSArICInIHBhcmFtZXRlciBpcyB1
bmRlZmluZWQuIiApOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLmNvbXB1dGVHcm91
cHMoIGdlb21ldHJ5ICk7Ci0KLSAgICAgICAgICAgIHRoaXMudmVydGljZXNOZWVkVXBkYXRlID0g
Z2VvbWV0cnkudmVydGljZXNOZWVkVXBkYXRlOwotICAgICAgICAgICAgdGhpcy5ub3JtYWxzTmVl
ZFVwZGF0ZSA9IGdlb21ldHJ5Lm5vcm1hbHNOZWVkVXBkYXRlOwotICAgICAgICAgICAgdGhpcy5j
b2xvcnNOZWVkVXBkYXRlID0gZ2VvbWV0cnkuY29sb3JzTmVlZFVwZGF0ZTsKLSAgICAgICAgICAg
IHRoaXMudXZzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5LnV2c05lZWRVcGRhdGU7Ci0gICAgICAgICAg
ICB0aGlzLmdyb3Vwc05lZWRVcGRhdGUgPSBnZW9tZXRyeS5ncm91cHNOZWVkVXBkYXRlOwotCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAvLyBmb3IgYmFja3dhcmQg
Y29tcGF0YWJpbGl0eSBpZiBzaGFkaW5nIGlzIHNldCBpbiB0aGUgY29uc3RydWN0b3IKKyAgICAg
ICAgICAgICAgICBpZiAoIGtleSA9PT0gJ3NoYWRpbmcnICkgewogCi0gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5z
aGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5z
dGVhZC4nICk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdFNoYWRpbmcgPSAoIG5ld1Zh
bHVlID09PSBGbGF0U2hhZGluZyApID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgIH0gKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlv
biBhcnJheU1heCggYXJyYXkgKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9
IHRoaXNbIGtleSBdOwogCi0gICAgICAgIGlmICggYXJyYXkubGVuZ3RoID09PSAwICkgcmV0dXJu
IC0gSW5maW5pdHk7CisgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50VmFsdWUgPT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICB2YXIgbWF4ID0gYXJyYXlbIDAgXTsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS53YXJuKCAiVEhSRUUuIiArIHRoaXMudHlwZSArICI6ICciICsga2V5ICsg
IicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iICk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGZvciAoIHZhciBpID0gMSwgbCA9IGFycmF5Lmxl
bmd0aDsgaSA8IGw7ICsrIGkgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIGFycmF5WyBpIF0gPiBtYXggKSBtYXggPSBhcnJheVsgaSBdOworICAgICAgICAgICAgICAg
IGlmICggY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5pc0NvbG9yICkgewogCi0gICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnNldCggbmV3VmFsdWUgKTsKIAot
ICAgICAgICByZXR1cm4gbWF4OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICggY3VycmVu
dFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5pc1ZlY3RvcjMgKSAmJiAoIG5ld1ZhbHVlICYmIG5ld1Zh
bHVlLmlzVmVjdG9yMyApICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
VmFsdWUuY29weSggbmV3VmFsdWUgKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0ZXJl
ZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBo
dHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBr
ZXkgPT09ICdvdmVyZHJhdycgKSB7CiAKLSAgICBmdW5jdGlvbiBCdWZmZXJHZW9tZXRyeSgpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIG92ZXJkcmF3IGlzIGJhY2t3YXJkcy1jb21w
YXRpYmxlIHdpdGggbGVnYWN5IGJvb2xlYW4gdHlwZQorICAgICAgICAgICAgICAgICAgICB0aGlz
WyBrZXkgXSA9IE51bWJlciggbmV3VmFsdWUgKTsKIAotICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoIHRoaXMsICdpZCcsIHsgdmFsdWU6IEdlb21ldHJ5SWRDb3VudCgpIH0gKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIHRoaXMudXVpZCA9IF9NYXRoLmdlbmVyYXRl
VVVJRCgpOworICAgICAgICAgICAgICAgICAgICB0aGlzWyBrZXkgXSA9IG5ld1ZhbHVlOwogCi0g
ICAgICAgIHRoaXMubmFtZSA9ICcnOwotICAgICAgICB0aGlzLnR5cGUgPSAnQnVmZmVyR2VvbWV0
cnknOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmluZGV4ID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhp
cy5tb3JwaEF0dHJpYnV0ZXMgPSB7fTsKKyAgICAgICAgfSwKIAotICAgICAgICB0aGlzLmdyb3Vw
cyA9IFtdOworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKIAotICAgICAgICB0
aGlzLmJvdW5kaW5nQm94ID0gbnVsbDsKLSAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51
bGw7CisgICAgICAgICAgICB2YXIgaXNSb290ID0gKCBtZXRhID09PSB1bmRlZmluZWQgfHwgdHlw
ZW9mIG1ldGEgPT09ICdzdHJpbmcnICk7CiAKLSAgICAgICAgdGhpcy5kcmF3UmFuZ2UgPSB7IHN0
YXJ0OiAwLCBjb3VudDogSW5maW5pdHkgfTsKKyAgICAgICAgICAgIGlmICggaXNSb290ICkgewog
Ci0gICAgfQorICAgICAgICAgICAgICAgIG1ldGEgPSB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVzOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzOiB7fQorICAgICAgICAgICAg
ICAgIH07CiAKLSAgICBCdWZmZXJHZW9tZXRyeS5NYXhJbmRleCA9IDY1NTM1OworICAgICAgICAg
ICAgfQogCi0gICAgT2JqZWN0LmFzc2lnbiggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLCBFdmVu
dERpc3BhdGNoZXIucHJvdG90eXBlLCB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAg
ICAgICAgICAgICBtZXRhZGF0YTogeworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiA0LjUs
CisgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdNYXRlcmlhbCcsCisgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvcjogJ01hdGVyaWFsLnRvSlNPTicKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OwogCi0gICAgICAgIGlzQnVmZmVyR2VvbWV0cnk6IHRydWUsCisgICAgICAgICAg
ICAvLyBzdGFuZGFyZCBNYXRlcmlhbCBzZXJpYWxpemF0aW9uCisgICAgICAgICAgICBkYXRhLnV1
aWQgPSB0aGlzLnV1aWQ7CisgICAgICAgICAgICBkYXRhLnR5cGUgPSB0aGlzLnR5cGU7CiAKLSAg
ICAgICAgZ2V0SW5kZXg6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5uYW1l
ICE9PSAnJyApIGRhdGEubmFtZSA9IHRoaXMubmFtZTsKIAotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuaW5kZXg7CisgICAgICAgICAgICBpZiAoIHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvci5pc0Nv
bG9yICkgZGF0YS5jb2xvciA9IHRoaXMuY29sb3IuZ2V0SGV4KCk7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgIGlmICggdGhpcy5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIGRhdGEucm91Z2hu
ZXNzID0gdGhpcy5yb3VnaG5lc3M7CisgICAgICAgICAgICBpZiAoIHRoaXMubWV0YWxuZXNzICE9
PSB1bmRlZmluZWQgKSBkYXRhLm1ldGFsbmVzcyA9IHRoaXMubWV0YWxuZXNzOwogCi0gICAgICAg
IHNldEluZGV4OiBmdW5jdGlvbiAoIGluZGV4ICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmVt
aXNzaXZlICYmIHRoaXMuZW1pc3NpdmUuaXNDb2xvciApIGRhdGEuZW1pc3NpdmUgPSB0aGlzLmVt
aXNzaXZlLmdldEhleCgpOworICAgICAgICAgICAgaWYgKCB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5
ICE9PSAxICkgZGF0YS5lbWlzc2l2ZUludGVuc2l0eSA9IHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk7
CiAKLSAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggaW5kZXggKSApIHsKKyAgICAgICAg
ICAgIGlmICggdGhpcy5zcGVjdWxhciAmJiB0aGlzLnNwZWN1bGFyLmlzQ29sb3IgKSBkYXRhLnNw
ZWN1bGFyID0gdGhpcy5zcGVjdWxhci5nZXRIZXgoKTsKKyAgICAgICAgICAgIGlmICggdGhpcy5z
aGluaW5lc3MgIT09IHVuZGVmaW5lZCApIGRhdGEuc2hpbmluZXNzID0gdGhpcy5zaGluaW5lc3M7
CisgICAgICAgICAgICBpZiAoIHRoaXMuY2xlYXJDb2F0ICE9PSB1bmRlZmluZWQgKSBkYXRhLmNs
ZWFyQ29hdCA9IHRoaXMuY2xlYXJDb2F0OworICAgICAgICAgICAgaWYgKCB0aGlzLmNsZWFyQ29h
dFJvdWdobmVzcyAhPT0gdW5kZWZpbmVkICkgZGF0YS5jbGVhckNvYXRSb3VnaG5lc3MgPSB0aGlz
LmNsZWFyQ29hdFJvdWdobmVzczsKIAotICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXcg
KCBhcnJheU1heCggaW5kZXggKSA+IDY1NTM1ID8gVWludDMyQnVmZmVyQXR0cmlidXRlIDogVWlu
dDE2QnVmZmVyQXR0cmlidXRlICkoIGluZGV4LCAxICk7CisgICAgICAgICAgICBpZiAoIHRoaXMu
bWFwICYmIHRoaXMubWFwLmlzVGV4dHVyZSApIGRhdGEubWFwID0gdGhpcy5tYXAudG9KU09OKCBt
ZXRhICkudXVpZDsKKyAgICAgICAgICAgIGlmICggdGhpcy5hbHBoYU1hcCAmJiB0aGlzLmFscGhh
TWFwLmlzVGV4dHVyZSApIGRhdGEuYWxwaGFNYXAgPSB0aGlzLmFscGhhTWFwLnRvSlNPTiggbWV0
YSApLnV1aWQ7CisgICAgICAgICAgICBpZiAoIHRoaXMubGlnaHRNYXAgJiYgdGhpcy5saWdodE1h
cC5pc1RleHR1cmUgKSBkYXRhLmxpZ2h0TWFwID0gdGhpcy5saWdodE1hcC50b0pTT04oIG1ldGEg
KS51dWlkOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCB0aGlzLmFv
TWFwICYmIHRoaXMuYW9NYXAuaXNUZXh0dXJlICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5p
bmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGRhdGEuYW9NYXAgPSB0aGlzLmFvTWFwLnRv
SlNPTiggbWV0YSApLnV1aWQ7CisgICAgICAgICAgICAgICAgZGF0YS5hb01hcEludGVuc2l0eSA9
IHRoaXMuYW9NYXBJbnRlbnNpdHk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAotCi0g
ICAgICAgIGFkZEF0dHJpYnV0ZTogZnVuY3Rpb24gKCBuYW1lLCBhdHRyaWJ1dGUgKSB7Ci0KLSAg
ICAgICAgICAgIGlmICggISAoIGF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuaXNCdWZmZXJBdHRyaWJ1
dGUgKSAmJiAhICggYXR0cmlidXRlICYmIGF0dHJpYnV0ZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0
cmlidXRlICkgKSB7Ci0KLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5CdWZm
ZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRl
ICkuJyApOwotCi0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoIG5hbWUsIG5ldyBC
dWZmZXJBdHRyaWJ1dGUoIGFyZ3VtZW50c1sgMSBdLCBhcmd1bWVudHNbIDIgXSApICk7CisgICAg
ICAgICAgICBpZiAoIHRoaXMuYnVtcE1hcCAmJiB0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlICkgewog
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRhdGEuYnVtcE1hcCA9
IHRoaXMuYnVtcE1hcC50b0pTT04oIG1ldGEgKS51dWlkOworICAgICAgICAgICAgICAgIGRhdGEu
YnVtcFNjYWxlID0gdGhpcy5idW1wU2NhbGU7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCBuYW1lID09PSAnaW5kZXgnICkgewotCi0gICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkg
Zm9yIGluZGV4IGF0dHJpYnV0ZS4nICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRleCgg
YXR0cmlidXRlICk7CisgICAgICAgICAgICBpZiAoIHRoaXMubm9ybWFsTWFwICYmIHRoaXMubm9y
bWFsTWFwLmlzVGV4dHVyZSApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBkYXRhLm5vcm1hbE1hcCA9IHRoaXMubm9ybWFsTWFwLnRvSlNPTiggbWV0YSApLnV1
aWQ7CisgICAgICAgICAgICAgICAgZGF0YS5ub3JtYWxNYXBUeXBlID0gdGhpcy5ub3JtYWxNYXBU
eXBlOworICAgICAgICAgICAgICAgIGRhdGEubm9ybWFsU2NhbGUgPSB0aGlzLm5vcm1hbFNjYWxl
LnRvQXJyYXkoKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmF0dHJpYnV0
ZXNbIG5hbWUgXSA9IGF0dHJpYnV0ZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICBpZiAoIHRoaXMuZGlzcGxhY2VtZW50TWFwICYmIHRoaXMuZGlzcGxhY2VtZW50TWFw
LmlzVGV4dHVyZSApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIGRhdGEuZGlzcGxh
Y2VtZW50TWFwID0gdGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKCBtZXRhICkudXVpZDsKKyAg
ICAgICAgICAgICAgICBkYXRhLmRpc3BsYWNlbWVudFNjYWxlID0gdGhpcy5kaXNwbGFjZW1lbnRT
Y2FsZTsKKyAgICAgICAgICAgICAgICBkYXRhLmRpc3BsYWNlbWVudEJpYXMgPSB0aGlzLmRpc3Bs
YWNlbWVudEJpYXM7CiAKLSAgICAgICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAoIG5hbWUgKSB7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXNbIG5h
bWUgXTsKKyAgICAgICAgICAgIGlmICggdGhpcy5yb3VnaG5lc3NNYXAgJiYgdGhpcy5yb3VnaG5l
c3NNYXAuaXNUZXh0dXJlICkgZGF0YS5yb3VnaG5lc3NNYXAgPSB0aGlzLnJvdWdobmVzc01hcC50
b0pTT04oIG1ldGEgKS51dWlkOworICAgICAgICAgICAgaWYgKCB0aGlzLm1ldGFsbmVzc01hcCAm
JiB0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUgKSBkYXRhLm1ldGFsbmVzc01hcCA9IHRoaXMu
bWV0YWxuZXNzTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgIGlmICggdGhpcy5lbWlzc2l2ZU1hcCAmJiB0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSAp
IGRhdGEuZW1pc3NpdmVNYXAgPSB0aGlzLmVtaXNzaXZlTWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7
CisgICAgICAgICAgICBpZiAoIHRoaXMuc3BlY3VsYXJNYXAgJiYgdGhpcy5zcGVjdWxhck1hcC5p
c1RleHR1cmUgKSBkYXRhLnNwZWN1bGFyTWFwID0gdGhpcy5zcGVjdWxhck1hcC50b0pTT04oIG1l
dGEgKS51dWlkOwogCi0gICAgICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKCBuYW1lICkg
eworICAgICAgICAgICAgaWYgKCB0aGlzLmVudk1hcCAmJiB0aGlzLmVudk1hcC5pc1RleHR1cmUg
KSB7CiAKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbIG5hbWUgXTsKKyAgICAg
ICAgICAgICAgICBkYXRhLmVudk1hcCA9IHRoaXMuZW52TWFwLnRvSlNPTiggbWV0YSApLnV1aWQ7
CisgICAgICAgICAgICAgICAgZGF0YS5yZWZsZWN0aXZpdHkgPSB0aGlzLnJlZmxlY3Rpdml0eTsg
Ly8gU2NhbGUgYmVoaW5kIGVudk1hcAogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCB0aGlzLmdyYWRpZW50TWFw
ICYmIHRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlICkgewogCi0gICAgICAgIGFkZEdyb3VwOiBm
dW5jdGlvbiAoIHN0YXJ0LCBjb3VudCwgbWF0ZXJpYWxJbmRleCApIHsKKyAgICAgICAgICAgICAg
ICBkYXRhLmdyYWRpZW50TWFwID0gdGhpcy5ncmFkaWVudE1hcC50b0pTT04oIG1ldGEgKS51dWlk
OwogCi0gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKCB7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgY291bnQ6IGNvdW50
LAotICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXg6IG1hdGVyaWFsSW5kZXggIT09IHVuZGVm
aW5lZCA/IG1hdGVyaWFsSW5kZXggOiAwCisgICAgICAgICAgICBpZiAoIHRoaXMuc2l6ZSAhPT0g
dW5kZWZpbmVkICkgZGF0YS5zaXplID0gdGhpcy5zaXplOworICAgICAgICAgICAgaWYgKCB0aGlz
LnNpemVBdHRlbnVhdGlvbiAhPT0gdW5kZWZpbmVkICkgZGF0YS5zaXplQXR0ZW51YXRpb24gPSB0
aGlzLnNpemVBdHRlbnVhdGlvbjsKIAotICAgICAgICAgICAgfSApOworICAgICAgICAgICAgaWYg
KCB0aGlzLmJsZW5kaW5nICE9PSBOb3JtYWxCbGVuZGluZyApIGRhdGEuYmxlbmRpbmcgPSB0aGlz
LmJsZW5kaW5nOworICAgICAgICAgICAgaWYgKCB0aGlzLmZsYXRTaGFkaW5nID09PSB0cnVlICkg
ZGF0YS5mbGF0U2hhZGluZyA9IHRoaXMuZmxhdFNoYWRpbmc7CisgICAgICAgICAgICBpZiAoIHRo
aXMuc2lkZSAhPT0gRnJvbnRTaWRlICkgZGF0YS5zaWRlID0gdGhpcy5zaWRlOworICAgICAgICAg
ICAgaWYgKCB0aGlzLnZlcnRleENvbG9ycyAhPT0gTm9Db2xvcnMgKSBkYXRhLnZlcnRleENvbG9y
cyA9IHRoaXMudmVydGV4Q29sb3JzOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIHRo
aXMub3BhY2l0eSA8IDEgKSBkYXRhLm9wYWNpdHkgPSB0aGlzLm9wYWNpdHk7CisgICAgICAgICAg
ICBpZiAoIHRoaXMudHJhbnNwYXJlbnQgPT09IHRydWUgKSBkYXRhLnRyYW5zcGFyZW50ID0gdGhp
cy50cmFuc3BhcmVudDsKIAotICAgICAgICBjbGVhckdyb3VwczogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgZGF0YS5kZXB0aEZ1bmMgPSB0aGlzLmRlcHRoRnVuYzsKKyAgICAgICAgICAgIGRh
dGEuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7CisgICAgICAgICAgICBkYXRhLmRlcHRoV3Jp
dGUgPSB0aGlzLmRlcHRoV3JpdGU7CiAKLSAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gW107Cisg
ICAgICAgICAgICAvLyByb3RhdGlvbiAoU3ByaXRlTWF0ZXJpYWwpCisgICAgICAgICAgICBpZiAo
IHRoaXMucm90YXRpb24gIT09IDAgKSBkYXRhLnJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCB0aGlzLmxpbmV3aWR0aCAhPT0gMSApIGRhdGEu
bGluZXdpZHRoID0gdGhpcy5saW5ld2lkdGg7CisgICAgICAgICAgICBpZiAoIHRoaXMuZGFzaFNp
emUgIT09IHVuZGVmaW5lZCApIGRhdGEuZGFzaFNpemUgPSB0aGlzLmRhc2hTaXplOworICAgICAg
ICAgICAgaWYgKCB0aGlzLmdhcFNpemUgIT09IHVuZGVmaW5lZCApIGRhdGEuZ2FwU2l6ZSA9IHRo
aXMuZ2FwU2l6ZTsKKyAgICAgICAgICAgIGlmICggdGhpcy5zY2FsZSAhPT0gdW5kZWZpbmVkICkg
ZGF0YS5zY2FsZSA9IHRoaXMuc2NhbGU7CiAKLSAgICAgICAgc2V0RHJhd1JhbmdlOiBmdW5jdGlv
biAoIHN0YXJ0LCBjb3VudCApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5kaXRoZXJpbmcgPT09
IHRydWUgKSBkYXRhLmRpdGhlcmluZyA9IHRydWU7CiAKLSAgICAgICAgICAgIHRoaXMuZHJhd1Jh
bmdlLnN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAgICB0aGlzLmRyYXdSYW5nZS5jb3VudCA9IGNv
dW50OworICAgICAgICAgICAgaWYgKCB0aGlzLmFscGhhVGVzdCA+IDAgKSBkYXRhLmFscGhhVGVz
dCA9IHRoaXMuYWxwaGFUZXN0OworICAgICAgICAgICAgaWYgKCB0aGlzLnByZW11bHRpcGxpZWRB
bHBoYSA9PT0gdHJ1ZSApIGRhdGEucHJlbXVsdGlwbGllZEFscGhhID0gdGhpcy5wcmVtdWx0aXBs
aWVkQWxwaGE7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICggdGhpcy53aXJlZnJhbWUg
PT09IHRydWUgKSBkYXRhLndpcmVmcmFtZSA9IHRoaXMud2lyZWZyYW1lOworICAgICAgICAgICAg
aWYgKCB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA+IDEgKSBkYXRhLndpcmVmcmFtZUxpbmV3aWR0
aCA9IHRoaXMud2lyZWZyYW1lTGluZXdpZHRoOworICAgICAgICAgICAgaWYgKCB0aGlzLndpcmVm
cmFtZUxpbmVjYXAgIT09ICdyb3VuZCcgKSBkYXRhLndpcmVmcmFtZUxpbmVjYXAgPSB0aGlzLndp
cmVmcmFtZUxpbmVjYXA7CisgICAgICAgICAgICBpZiAoIHRoaXMud2lyZWZyYW1lTGluZWpvaW4g
IT09ICdyb3VuZCcgKSBkYXRhLndpcmVmcmFtZUxpbmVqb2luID0gdGhpcy53aXJlZnJhbWVMaW5l
am9pbjsKIAotICAgICAgICBhcHBseU1hdHJpeDogZnVuY3Rpb24gKCBtYXRyaXggKSB7CisgICAg
ICAgICAgICBpZiAoIHRoaXMubW9ycGhUYXJnZXRzID09PSB0cnVlICkgZGF0YS5tb3JwaFRhcmdl
dHMgPSB0cnVlOworICAgICAgICAgICAgaWYgKCB0aGlzLnNraW5uaW5nID09PSB0cnVlICkgZGF0
YS5za2lubmluZyA9IHRydWU7CiAKLSAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuYXR0
cmlidXRlcy5wb3NpdGlvbjsKKyAgICAgICAgICAgIGlmICggdGhpcy52aXNpYmxlID09PSBmYWxz
ZSApIGRhdGEudmlzaWJsZSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCBKU09OLnN0cmluZ2lm
eSggdGhpcy51c2VyRGF0YSApICE9PSAne30nICkgZGF0YS51c2VyRGF0YSA9IHRoaXMudXNlckRh
dGE7CiAKLSAgICAgICAgICAgIGlmICggcG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgIC8vIFRPRE86IENvcGllZCBmcm9tIE9iamVjdDNELnRvSlNPTgogCi0gICAgICAgICAg
ICAgICAgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uICk7Ci0gICAgICAg
ICAgICAgICAgcG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAgZnVuY3Rp
b24gZXh0cmFjdEZyb21DYWNoZSggY2FjaGUgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB2YXIgdmFsdWVzID0gW107CiAKLSAgICAgICAgICAgIHZhciBub3JtYWwgPSB0aGlz
LmF0dHJpYnV0ZXMubm9ybWFsOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gY2Fj
aGUgKSB7CiAKLSAgICAgICAgICAgIGlmICggbm9ybWFsICE9PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBkYXRhID0gY2FjaGVbIGtleSBdOworICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgZGF0YS5tZXRhZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1
c2goIGRhdGEgKTsKIAotICAgICAgICAgICAgICAgIHZhciBub3JtYWxNYXRyaXggPSBuZXcgTWF0
cml4MygpLmdldE5vcm1hbE1hdHJpeCggbWF0cml4ICk7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbm9ybWFsTWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIG5vcm1h
bCApOwotICAgICAgICAgICAgICAgIG5vcm1hbC5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlczsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIHRoaXMuYm91bmRpbmdCb3ggIT09IG51bGwgKSB7Ci0KLSAgICAgICAgICAgICAgICB0aGlz
LmNvbXB1dGVCb3VuZGluZ0JveCgpOwotCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IGlzUm9vdCApIHsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmJvdW5kaW5nU3BoZXJlICE9PSBu
dWxsICkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlcyA9IGV4dHJhY3RGcm9tQ2FjaGUo
IG1ldGEudGV4dHVyZXMgKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1hZ2VzID0gZXh0cmFjdEZy
b21DYWNoZSggbWV0YS5pbWFnZXMgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUJv
dW5kaW5nU3BoZXJlKCk7CisgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlcy5sZW5ndGggPiAw
ICkgZGF0YS50ZXh0dXJlcyA9IHRleHR1cmVzOworICAgICAgICAgICAgICAgIGlmICggaW1hZ2Vz
Lmxlbmd0aCA+IDAgKSBkYXRhLmltYWdlcyA9IGltYWdlczsKIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAg
ICAgIH0sCiAKLSAgICAgICAgcm90YXRlWDogZnVuY3Rpb24gKCkgeworICAgICAgICBjbG9uZTog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0cnkgYXJvdW5kIHdv
cmxkIHgtYXhpcworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29w
eSggdGhpcyApOwogCi0gICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4NCgpOworICAgICAg
ICB9LAogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRlWCggYW5nbGUgKSB7Cisg
ICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAgbTEu
bWFrZVJvdGF0aW9uWCggYW5nbGUgKTsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IHNvdXJjZS5u
YW1lOwogCi0gICAgICAgICAgICAgICAgdGhpcy5hcHBseU1hdHJpeCggbTEgKTsKKyAgICAgICAg
ICAgIHRoaXMuZm9nID0gc291cmNlLmZvZzsKKyAgICAgICAgICAgIHRoaXMubGlnaHRzID0gc291
cmNlLmxpZ2h0czsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
dGhpcy5ibGVuZGluZyA9IHNvdXJjZS5ibGVuZGluZzsKKyAgICAgICAgICAgIHRoaXMuc2lkZSA9
IHNvdXJjZS5zaWRlOworICAgICAgICAgICAgdGhpcy5mbGF0U2hhZGluZyA9IHNvdXJjZS5mbGF0
U2hhZGluZzsKKyAgICAgICAgICAgIHRoaXMudmVydGV4Q29sb3JzID0gc291cmNlLnZlcnRleENv
bG9yczsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRoaXMub3BhY2l0eSA9IHNvdXJj
ZS5vcGFjaXR5OworICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVudCA9IHNvdXJjZS50cmFuc3Bh
cmVudDsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICB0aGlzLmJsZW5kU3JjID0gc291cmNl
LmJsZW5kU3JjOworICAgICAgICAgICAgdGhpcy5ibGVuZERzdCA9IHNvdXJjZS5ibGVuZERzdDsK
KyAgICAgICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbiA9IHNvdXJjZS5ibGVuZEVxdWF0aW9uOwor
ICAgICAgICAgICAgdGhpcy5ibGVuZFNyY0FscGhhID0gc291cmNlLmJsZW5kU3JjQWxwaGE7Cisg
ICAgICAgICAgICB0aGlzLmJsZW5kRHN0QWxwaGEgPSBzb3VyY2UuYmxlbmREc3RBbHBoYTsKKyAg
ICAgICAgICAgIHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhID0gc291cmNlLmJsZW5kRXF1YXRpb25B
bHBoYTsKIAotICAgICAgICByb3RhdGVZOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlz
LmRlcHRoRnVuYyA9IHNvdXJjZS5kZXB0aEZ1bmM7CisgICAgICAgICAgICB0aGlzLmRlcHRoVGVz
dCA9IHNvdXJjZS5kZXB0aFRlc3Q7CisgICAgICAgICAgICB0aGlzLmRlcHRoV3JpdGUgPSBzb3Vy
Y2UuZGVwdGhXcml0ZTsKIAotICAgICAgICAgICAgLy8gcm90YXRlIGdlb21ldHJ5IGFyb3VuZCB3
b3JsZCB5LWF4aXMKKyAgICAgICAgICAgIHRoaXMuY29sb3JXcml0ZSA9IHNvdXJjZS5jb2xvcldy
aXRlOwogCi0gICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4NCgpOworICAgICAgICAgICAg
dGhpcy5wcmVjaXNpb24gPSBzb3VyY2UucHJlY2lzaW9uOwogCi0gICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24gcm90YXRlWSggYW5nbGUgKSB7CisgICAgICAgICAgICB0aGlzLnBvbHlnb25PZmZz
ZXQgPSBzb3VyY2UucG9seWdvbk9mZnNldDsKKyAgICAgICAgICAgIHRoaXMucG9seWdvbk9mZnNl
dEZhY3RvciA9IHNvdXJjZS5wb2x5Z29uT2Zmc2V0RmFjdG9yOworICAgICAgICAgICAgdGhpcy5w
b2x5Z29uT2Zmc2V0VW5pdHMgPSBzb3VyY2UucG9seWdvbk9mZnNldFVuaXRzOwogCi0gICAgICAg
ICAgICAgICAgbTEubWFrZVJvdGF0aW9uWSggYW5nbGUgKTsKKyAgICAgICAgICAgIHRoaXMuZGl0
aGVyaW5nID0gc291cmNlLmRpdGhlcmluZzsKIAotICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlN
YXRyaXgoIG0xICk7CisgICAgICAgICAgICB0aGlzLmFscGhhVGVzdCA9IHNvdXJjZS5hbHBoYVRl
c3Q7CisgICAgICAgICAgICB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSA9IHNvdXJjZS5wcmVtdWx0
aXBsaWVkQWxwaGE7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
IHRoaXMub3ZlcmRyYXcgPSBzb3VyY2Uub3ZlcmRyYXc7CiAKLSAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB0aGlzLnZpc2libGUgPSBzb3VyY2UudmlzaWJsZTsKKyAgICAgICAgICAgIHRoaXMu
dXNlckRhdGEgPSBKU09OLnBhcnNlKCBKU09OLnN0cmluZ2lmeSggc291cmNlLnVzZXJEYXRhICkg
KTsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICB0aGlzLmNsaXBTaGFkb3dzID0gc291cmNl
LmNsaXBTaGFkb3dzOworICAgICAgICAgICAgdGhpcy5jbGlwSW50ZXJzZWN0aW9uID0gc291cmNl
LmNsaXBJbnRlcnNlY3Rpb247CiAKLSAgICAgICAgcm90YXRlWjogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgdmFyIHNyY1BsYW5lcyA9IHNvdXJjZS5jbGlwcGluZ1BsYW5lcywKKyAgICAgICAg
ICAgICAgICBkc3RQbGFuZXMgPSBudWxsOwogCi0gICAgICAgICAgICAvLyByb3RhdGUgZ2VvbWV0
cnkgYXJvdW5kIHdvcmxkIHotYXhpcworICAgICAgICAgICAgaWYgKCBzcmNQbGFuZXMgIT09IG51
bGwgKSB7CiAKLSAgICAgICAgICAgIHZhciBtMSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAg
ICAgICAgdmFyIG4gPSBzcmNQbGFuZXMubGVuZ3RoOworICAgICAgICAgICAgICAgIGRzdFBsYW5l
cyA9IG5ldyBBcnJheSggbiApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcm90YXRl
WiggYW5nbGUgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpICE9PSBuOyAr
KyBpICkKKyAgICAgICAgICAgICAgICAgICAgZHN0UGxhbmVzWyBpIF0gPSBzcmNQbGFuZXNbIGkg
XS5jbG9uZSgpOwogCi0gICAgICAgICAgICAgICAgbTEubWFrZVJvdGF0aW9uWiggYW5nbGUgKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlNYXRyaXgoIG0xICk7
CisgICAgICAgICAgICB0aGlzLmNsaXBwaW5nUGxhbmVzID0gZHN0UGxhbmVzOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB0aGlzLnNoYWRvd1NpZGUgPSBzb3Vy
Y2Uuc2hhZG93U2lkZTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgfSwKIAotICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAv
LyB0cmFuc2xhdGUgZ2VvbWV0cnkKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCggeyB0
eXBlOiAnZGlzcG9zZScgfSApOwogCi0gICAgICAgICAgICB2YXIgbTEgPSBuZXcgTWF0cml4NCgp
OworICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0cmFuc2xhdGUoIHgs
IHksIHogKSB7CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgbTEubWFrZVRyYW5zbGF0aW9u
KCB4LCB5LCB6ICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJk
b29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEu
Y29tLworICAgICAqCisgICAgICogcGFyYW1ldGVycyA9IHsKKyAgICAgKiAgY29sb3I6IDxoZXg+
LAorICAgICAqICBvcGFjaXR5OiA8ZmxvYXQ+LAorICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0
dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0
dXJlKCA8SW1hZ2U+ICksCisgICAgICogIGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+CisgICAg
ICoKKyAgICAgKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICog
IGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+CisgICAgICoKKyAgICAgKiAgc3BlY3VsYXJNYXA6IG5l
dyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgYWxwaGFNYXA6IG5l
dyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgZW52TWFwOiBuZXcg
VEhSRUUuQ3ViZVRleHR1cmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSAp
LAorICAgICAqICBjb21iaW5lOiBUSFJFRS5NdWx0aXBseSwKKyAgICAgKiAgcmVmbGVjdGl2aXR5
OiA8ZmxvYXQ+LAorICAgICAqICByZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sCisgICAgICoKKyAg
ICAgKiAgZGVwdGhUZXN0OiA8Ym9vbD4sCisgICAgICogIGRlcHRoV3JpdGU6IDxib29sPiwKKyAg
ICAgKgorICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKKyAgICAgKiAgd2lyZWZyYW1lTGlu
ZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqCisgICAgICogIHNraW5uaW5nOiA8Ym9vbD4sCisgICAg
ICogIG1vcnBoVGFyZ2V0czogPGJvb2w+CisgICAgICogfQorICAgICAqLwogCi0gICAgICAgICAg
ICAgICAgdGhpcy5hcHBseU1hdHJpeCggbTEgKTsKKyAgICBmdW5jdGlvbiBNZXNoQmFzaWNNYXRl
cmlhbCggcGFyYW1ldGVycyApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICBNYXRlcmlhbC5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgIHRo
aXMudHlwZSA9ICdNZXNoQmFzaWNNYXRlcmlhbCc7CiAKLSAgICAgICAgfSgpLAorICAgICAgICB0
aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBlbWlzc2l2ZQogCi0gICAgICAg
IHNjYWxlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubWFwID0gbnVsbDsKIAotICAgICAg
ICAgICAgLy8gc2NhbGUgZ2VvbWV0cnkKKyAgICAgICAgdGhpcy5saWdodE1hcCA9IG51bGw7Cisg
ICAgICAgIHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7CiAKLSAgICAgICAgICAgIHZhciBt
MSA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIHRoaXMuYW9NYXAgPSBudWxsOworICAgICAgICB0
aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
c2NhbGUoIHgsIHksIHogKSB7CisgICAgICAgIHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsOwogCi0g
ICAgICAgICAgICAgICAgbTEubWFrZVNjYWxlKCB4LCB5LCB6ICk7CisgICAgICAgIHRoaXMuYWxw
aGFNYXAgPSBudWxsOwogCi0gICAgICAgICAgICAgICAgdGhpcy5hcHBseU1hdHJpeCggbTEgKTsK
KyAgICAgICAgdGhpcy5lbnZNYXAgPSBudWxsOworICAgICAgICB0aGlzLmNvbWJpbmUgPSBNdWx0
aXBseU9wZXJhdGlvbjsKKyAgICAgICAgdGhpcy5yZWZsZWN0aXZpdHkgPSAxOworICAgICAgICB0
aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53aXJlZnJh
bWVMaW5ld2lkdGggPSAxOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQn
OworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJzsKIAotICAgICAgICAg
ICAgfTsKKyAgICAgICAgdGhpcy5za2lubmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLm1vcnBo
VGFyZ2V0cyA9IGZhbHNlOwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgdGhpcy5saWdodHMgPSBm
YWxzZTsKIAotICAgICAgICBsb29rQXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5zZXRW
YWx1ZXMoIHBhcmFtZXRlcnMgKTsKIAotICAgICAgICAgICAgdmFyIG9iaiA9IG5ldyBPYmplY3Qz
RCgpOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGxvb2tBdCggdmVjdG9y
ICkgeworICAgIE1lc2hCYXNpY01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1h
dGVyaWFsLnByb3RvdHlwZSApOworICAgIE1lc2hCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9IE1lc2hCYXNpY01hdGVyaWFsOwogCi0gICAgICAgICAgICAgICAgb2JqLmxvb2tB
dCggdmVjdG9yICk7CisgICAgTWVzaEJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaEJhc2lj
TWF0ZXJpYWwgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgb2JqLnVwZGF0ZU1hdHJpeCgpOwor
ICAgIE1lc2hCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2Ug
KSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5TWF0cml4KCBvYmoubWF0cml4ICk7Cisg
ICAgICAgIE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0g
ICAgICAgICAgICB9OworICAgICAgICB0aGlzLmNvbG9yLmNvcHkoIHNvdXJjZS5jb2xvciApOwog
Ci0gICAgICAgIH0oKSwKKyAgICAgICAgdGhpcy5tYXAgPSBzb3VyY2UubWFwOwogCi0gICAgICAg
IGNlbnRlcjogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxp
Z2h0TWFwOworICAgICAgICB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFw
SW50ZW5zaXR5OwogCi0gICAgICAgICAgICB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpOworICAg
ICAgICB0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwOworICAgICAgICB0aGlzLmFvTWFwSW50ZW5z
aXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5OwogCi0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0g
dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoKS5uZWdhdGUoKTsKKyAgICAgICAgdGhpcy5zcGVj
dWxhck1hcCA9IHNvdXJjZS5zcGVjdWxhck1hcDsKIAotICAgICAgICAgICAgdGhpcy50cmFuc2xh
dGUoIG9mZnNldC54LCBvZmZzZXQueSwgb2Zmc2V0LnogKTsKKyAgICAgICAgdGhpcy5hbHBoYU1h
cCA9IHNvdXJjZS5hbHBoYU1hcDsKIAotICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAg
ICAgdGhpcy5lbnZNYXAgPSBzb3VyY2UuZW52TWFwOworICAgICAgICB0aGlzLmNvbWJpbmUgPSBz
b3VyY2UuY29tYmluZTsKKyAgICAgICAgdGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVj
dGl2aXR5OworICAgICAgICB0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9u
UmF0aW87CiAKLSAgICAgICAgfSwKKyAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2ly
ZWZyYW1lOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJh
bWVMaW5ld2lkdGg7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJl
ZnJhbWVMaW5lY2FwOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndp
cmVmcmFtZUxpbmVqb2luOwogCi0gICAgICAgIHNldEZyb21PYmplY3Q6IGZ1bmN0aW9uICggb2Jq
ZWN0ICkgeworICAgICAgICB0aGlzLnNraW5uaW5nID0gc291cmNlLnNraW5uaW5nOworICAgICAg
ICB0aGlzLm1vcnBoVGFyZ2V0cyA9IHNvdXJjZS5tb3JwaFRhcmdldHM7CiAKLSAgICAgICAgICAg
IC8vIGNvbnNvbGUubG9nKCAnVEhSRUUuQnVmZmVyR2VvbWV0cnkuc2V0RnJvbU9iamVjdCgpLiBD
b252ZXJ0aW5nJywgb2JqZWN0LCB0aGlzICk7CisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICB2YXIgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7CisgICAgfTsKIAotICAgICAg
ICAgICAgaWYgKCBvYmplY3QuaXNQb2ludHMgfHwgb2JqZWN0LmlzTGluZSApIHsKLQotICAgICAg
ICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2Vv
bWV0cnkudmVydGljZXMubGVuZ3RoICogMywgMyApOwotICAgICAgICAgICAgICAgIHZhciBjb2xv
cnMgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0cnkuY29sb3JzLmxlbmd0aCAq
IDMsIDMgKTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVy
ZWRxdWFsaWEuY29tLworICAgICAqCisgICAgICogcGFyYW1ldGVycyA9IHsKKyAgICAgKiAgZGVm
aW5lczogeyAibGFiZWwiIDogInZhbHVlIiB9LAorICAgICAqICB1bmlmb3JtczogeyAicGFyYW1l
dGVyMSI6IHsgdmFsdWU6IDEuMCB9LCAicGFyYW1ldGVyMiI6IHsgdmFsdWUyOiAyIH0gfSwKKyAg
ICAgKgorICAgICAqICBmcmFnbWVudFNoYWRlcjogPHN0cmluZz4sCisgICAgICogIHZlcnRleFNo
YWRlcjogPHN0cmluZz4sCisgICAgICoKKyAgICAgKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sCisg
ICAgICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICBsaWdo
dHM6IDxib29sPiwKKyAgICAgKgorICAgICAqICBza2lubmluZzogPGJvb2w+LAorICAgICAqICBt
b3JwaFRhcmdldHM6IDxib29sPiwKKyAgICAgKiAgbW9ycGhOb3JtYWxzOiA8Ym9vbD4KKyAgICAg
KiB9CisgICAgICovCiAKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0
aW9uJywgcG9zaXRpb25zLmNvcHlWZWN0b3Izc0FycmF5KCBnZW9tZXRyeS52ZXJ0aWNlcyApICk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdjb2xvcicsIGNvbG9ycy5jb3B5
Q29sb3JzQXJyYXkoIGdlb21ldHJ5LmNvbG9ycyApICk7CisgICAgZnVuY3Rpb24gU2hhZGVyTWF0
ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lmxp
bmVEaXN0YW5jZXMgJiYgZ2VvbWV0cnkubGluZURpc3RhbmNlcy5sZW5ndGggPT09IGdlb21ldHJ5
LnZlcnRpY2VzLmxlbmd0aCApIHsKKyAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhpcyApOwogCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBsaW5lRGlzdGFuY2VzID0gbmV3IEZsb2F0MzJCdWZmZXJB
dHRyaWJ1dGUoIGdlb21ldHJ5LmxpbmVEaXN0YW5jZXMubGVuZ3RoLCAxICk7CisgICAgICAgIHRo
aXMudHlwZSA9ICdTaGFkZXJNYXRlcmlhbCc7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5h
ZGRBdHRyaWJ1dGUoICdsaW5lRGlzdGFuY2UnLCBsaW5lRGlzdGFuY2VzLmNvcHlBcnJheSggZ2Vv
bWV0cnkubGluZURpc3RhbmNlcyApICk7CisgICAgICAgIHRoaXMuZGVmaW5lcyA9IHt9OworICAg
ICAgICB0aGlzLnVuaWZvcm1zID0ge307CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHRo
aXMudmVydGV4U2hhZGVyID0gJ3ZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0
aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSc7
CisgICAgICAgIHRoaXMuZnJhZ21lbnRTaGFkZXIgPSAndm9pZCBtYWluKCkge1xuXHRnbF9GcmFn
Q29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0nOwogCi0gICAgICAgICAgICAg
ICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsKKyAgICAgICAgdGhp
cy5saW5ld2lkdGggPSAxOwogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhl
cmUgPSBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpOworICAgICAgICB0aGlzLndpcmVm
cmFtZSA9IGZhbHNlOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMuZm9nID0gZmFsc2U7IC8vIHNldCB0byB1c2Ug
c2NlbmUgZm9nCisgICAgICAgIHRoaXMubGlnaHRzID0gZmFsc2U7IC8vIHNldCB0byB1c2Ugc2Nl
bmUgbGlnaHRzCisgICAgICAgIHRoaXMuY2xpcHBpbmcgPSBmYWxzZTsgLy8gc2V0IHRvIHVzZSB1
c2VyLWRlZmluZWQgY2xpcHBpbmcgcGxhbmVzCiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21l
dHJ5LmJvdW5kaW5nQm94ICE9PSBudWxsICkgeworICAgICAgICB0aGlzLnNraW5uaW5nID0gZmFs
c2U7IC8vIHNldCB0byB1c2Ugc2tpbm5pbmcgYXR0cmlidXRlIHN0cmVhbXMKKyAgICAgICAgdGhp
cy5tb3JwaFRhcmdldHMgPSBmYWxzZTsgLy8gc2V0IHRvIHVzZSBtb3JwaCB0YXJnZXRzCisgICAg
ICAgIHRoaXMubW9ycGhOb3JtYWxzID0gZmFsc2U7IC8vIHNldCB0byB1c2UgbW9ycGggbm9ybWFs
cwogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3Vu
ZGluZ0JveC5jbG9uZSgpOworICAgICAgICB0aGlzLmV4dGVuc2lvbnMgPSB7CisgICAgICAgICAg
ICBkZXJpdmF0aXZlczogZmFsc2UsIC8vIHNldCB0byB1c2UgZGVyaXZhdGl2ZXMKKyAgICAgICAg
ICAgIGZyYWdEZXB0aDogZmFsc2UsIC8vIHNldCB0byB1c2UgZnJhZ21lbnQgZGVwdGggdmFsdWVz
CisgICAgICAgICAgICBkcmF3QnVmZmVyczogZmFsc2UsIC8vIHNldCB0byB1c2UgZHJhdyBidWZm
ZXJzCisgICAgICAgICAgICBzaGFkZXJUZXh0dXJlTE9EOiBmYWxzZSAvLyBzZXQgdG8gdXNlIHNo
YWRlciB0ZXh0dXJlIExPRAorICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAvLyBXaGVuIHJlbmRlcmVkIGdlb21ldHJ5IGRvZXNuJ3QgaW5jbHVkZSB0aGVzZSBhdHRyaWJ1
dGVzIGJ1dCB0aGUgbWF0ZXJpYWwgZG9lcywKKyAgICAgICAgLy8gdXNlIHRoZXNlIGRlZmF1bHQg
dmFsdWVzIGluIFdlYkdMLiBUaGlzIGF2b2lkcyBlcnJvcnMgd2hlbiBidWZmZXIgZGF0YSBpcyBt
aXNzaW5nLgorICAgICAgICB0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXMgPSB7CisgICAgICAg
ICAgICAnY29sb3InOiBbIDEsIDEsIDEgXSwKKyAgICAgICAgICAgICd1dic6IFsgMCwgMCBdLAor
ICAgICAgICAgICAgJ3V2Mic6IFsgMCwgMCBdCisgICAgICAgIH07CiAKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIG9iamVjdC5pc01lc2ggKSB7CisgICAgICAgIHRoaXMuaW5kZXgwQXR0cmlidXRl
TmFtZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy51bmlmb3Jtc05lZWRVcGRhdGUgPSBmYWxz
ZTsKIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNHZW9tZXRy
eSApIHsKKyAgICAgICAgaWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5mcm9tR2VvbWV0cnkoIGdlb21ldHJ5ICk7CisgICAgICAgICAg
ICBpZiAoIHBhcmFtZXRlcnMuYXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5TaGFkZXJN
YXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVy
R2VvbWV0cnkgaW5zdGVhZC4nICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICB1cGRhdGVGcm9tT2JqZWN0OiBmdW5j
dGlvbiAoIG9iamVjdCApIHsKLQotICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gb2JqZWN0Lmdl
b21ldHJ5OworICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTsKIAotICAg
ICAgICAgICAgaWYgKCBvYmplY3QuaXNNZXNoICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB2YXIgZGlyZWN0ID0gZ2VvbWV0cnkuX19kaXJlY3RHZW9tZXRyeTsKKyAgICB9CiAKLSAg
ICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmVsZW1lbnRzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSAp
IHsKKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlh
bC5wcm90b3R5cGUgKTsKKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBTaGFkZXJNYXRlcmlhbDsKIAotICAgICAgICAgICAgICAgICAgICBkaXJlY3QgPSB1bmRlZmlu
ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmVsZW1lbnRzTmVlZFVwZGF0ZSA9IGZh
bHNlOworICAgIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsID0gdHJ1
ZTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUuY29w
eSA9IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBkaXJlY3Qg
PT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCgg
dGhpcywgc291cmNlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUdl
b21ldHJ5KCBnZW9tZXRyeSApOworICAgICAgICB0aGlzLmZyYWdtZW50U2hhZGVyID0gc291cmNl
LmZyYWdtZW50U2hhZGVyOworICAgICAgICB0aGlzLnZlcnRleFNoYWRlciA9IHNvdXJjZS52ZXJ0
ZXhTaGFkZXI7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMudW5pZm9ybXMgPSBV
bmlmb3Jtc1V0aWxzLmNsb25lKCBzb3VyY2UudW5pZm9ybXMgKTsKIAotICAgICAgICAgICAgICAg
IGRpcmVjdC52ZXJ0aWNlc05lZWRVcGRhdGUgPSBnZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGU7
Ci0gICAgICAgICAgICAgICAgZGlyZWN0Lm5vcm1hbHNOZWVkVXBkYXRlID0gZ2VvbWV0cnkubm9y
bWFsc05lZWRVcGRhdGU7Ci0gICAgICAgICAgICAgICAgZGlyZWN0LmNvbG9yc05lZWRVcGRhdGUg
PSBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRlOwotICAgICAgICAgICAgICAgIGRpcmVjdC51dnNO
ZWVkVXBkYXRlID0gZ2VvbWV0cnkudXZzTmVlZFVwZGF0ZTsKLSAgICAgICAgICAgICAgICBkaXJl
Y3QuZ3JvdXBzTmVlZFVwZGF0ZSA9IGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGU7CisgICAgICAg
IHRoaXMuZGVmaW5lcyA9IE9iamVjdC5hc3NpZ24oIHt9LCBzb3VyY2UuZGVmaW5lcyApOwogCi0g
ICAgICAgICAgICAgICAgZ2VvbWV0cnkudmVydGljZXNOZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgZ2VvbWV0cnkubm9ybWFsc05lZWRVcGRhdGUgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgZ2VvbWV0cnkudXZzTmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGdlb21l
dHJ5Lmdyb3Vwc05lZWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBz
b3VyY2Uud2lyZWZyYW1lOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJj
ZS53aXJlZnJhbWVMaW5ld2lkdGg7CiAKLSAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IGRpcmVj
dDsKKyAgICAgICAgdGhpcy5saWdodHMgPSBzb3VyY2UubGlnaHRzOworICAgICAgICB0aGlzLmNs
aXBwaW5nID0gc291cmNlLmNsaXBwaW5nOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHRoaXMu
c2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7CiAKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGU7
CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0czsKKyAgICAg
ICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBzb3VyY2UubW9ycGhOb3JtYWxzOwogCi0gICAgICAgICAg
ICBpZiAoIGdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsKKyAgICAgICAg
dGhpcy5leHRlbnNpb25zID0gc291cmNlLmV4dGVuc2lvbnM7CiAKLSAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247CisgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKKyAg
ICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgg
Z2VvbWV0cnkudmVydGljZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLm5lZWRz
VXBkYXRlID0gdHJ1ZTsKKyAgICBTaGFkZXJNYXRlcmlhbC5wcm90b3R5cGUudG9KU09OID0gZnVu
Y3Rpb24gKCBtZXRhICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB2YXIgZGF0YSA9
IE1hdGVyaWFsLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOwogCi0gICAgICAg
ICAgICAgICAgZ2VvbWV0cnkudmVydGljZXNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAgIGRh
dGEudW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zOworICAgICAgICBkYXRhLnZlcnRleFNoYWRlciA9
IHRoaXMudmVydGV4U2hhZGVyOworICAgICAgICBkYXRhLmZyYWdtZW50U2hhZGVyID0gdGhpcy5m
cmFnbWVudFNoYWRlcjsKIAotICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKIAot
ICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ub3JtYWxzTmVlZFVwZGF0ZSA9PT0gdHJ1ZSApIHsK
KyAgICB9OwogCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzLm5v
cm1hbDsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlv
CisgICAgICovCiAKLSAgICAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVk
ICkgeworICAgIGZ1bmN0aW9uIFJheSggb3JpZ2luLCBkaXJlY3Rpb24gKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCBnZW9tZXRyeS5ub3JtYWxz
ICk7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5uZWVkc1VwZGF0ZSA9IHRydWU7Cisg
ICAgICAgIHRoaXMub3JpZ2luID0gKCBvcmlnaW4gIT09IHVuZGVmaW5lZCApID8gb3JpZ2luIDog
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAoIGRpcmVjdGlvbiAhPT0g
dW5kZWZpbmVkICkgPyBkaXJlY3Rpb24gOiBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICAgICAgICAgIGdlb21ldHJ5Lm5vcm1hbHNOZWVkVXBkYXRl
ID0gZmFsc2U7CisgICAgT2JqZWN0LmFzc2lnbiggUmF5LnByb3RvdHlwZSwgewogCi0gICAgICAg
ICAgICB9CisgICAgICAgIHNldDogZnVuY3Rpb24gKCBvcmlnaW4sIGRpcmVjdGlvbiApIHsKIAot
ICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5jb2xvcnNOZWVkVXBkYXRlID09PSB0cnVlICkgewor
ICAgICAgICAgICAgdGhpcy5vcmlnaW4uY29weSggb3JpZ2luICk7CisgICAgICAgICAgICB0aGlz
LmRpcmVjdGlvbi5jb3B5KCBkaXJlY3Rpb24gKTsKIAotICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSA9IHRoaXMuYXR0cmlidXRlcy5jb2xvcjsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCBnZW9t
ZXRyeS5jb2xvcnMgKTsKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLm5lZWRzVXBkYXRl
ID0gdHJ1ZTsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMg
KTsKIAotICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbG9yc05lZWRVcGRhdGUgPSBmYWxzZTsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHJh
eSApIHsKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS51dnNOZWVkVXBkYXRlICkgeworICAg
ICAgICAgICAgdGhpcy5vcmlnaW4uY29weSggcmF5Lm9yaWdpbiApOworICAgICAgICAgICAgdGhp
cy5kaXJlY3Rpb24uY29weSggcmF5LmRpcmVjdGlvbiApOwogCi0gICAgICAgICAgICAgICAgYXR0
cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzLnV2OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAg
ICB9LAogCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgg
Z2VvbWV0cnkudXZzICk7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5uZWVkc1VwZGF0
ZSA9IHRydWU7CisgICAgICAgIGF0OiBmdW5jdGlvbiAoIHQsIHRhcmdldCApIHsKIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgICAgICAgICBnZW9tZXRyeS51dnNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuUmF5OiAuYXQoKSB0YXJnZXQgaXMgbm93IHJl
cXVpcmVkJyApOworICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5saW5lRGlzdGFuY2VzTmVl
ZFVwZGF0ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29weSggdGhpcy5kaXJlY3Rp
b24gKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy5vcmlnaW4gKTsKIAotICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2U7CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZSAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICBsb29rQXQ6IGZ1bmN0aW9uICggdiApIHsKIAotICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUuY29weUFycmF5KCBnZW9tZXRyeS5saW5lRGlzdGFuY2VzICk7Ci0gICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZS5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICB0aGlz
LmRpcmVjdGlvbi5jb3B5KCB2ICkuc3ViKCB0aGlzLm9yaWdpbiApLm5vcm1hbGl6ZSgpOwogCi0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAg
ICAgICBnZW9tZXRyeS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICB9
LAogCi0gICAgICAgICAgICB9CisgICAgICAgIHJlY2FzdDogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICBpZiAoIGdlb21ldHJ5Lmdyb3Vwc05lZWRVcGRhdGUgKSB7CisgICAgICAgICAgICB2
YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgZ2VvbWV0cnkuY29tcHV0
ZUdyb3Vwcyggb2JqZWN0Lmdlb21ldHJ5ICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5ncm91cHMg
PSBnZW9tZXRyeS5ncm91cHM7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVjYXN0KCB0
ICkgewogCi0gICAgICAgICAgICAgICAgZ2VvbWV0cnkuZ3JvdXBzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luLmNvcHkoIHRoaXMuYXQoIHQsIHYxICkgKTsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgfSwKKyAgICAgICAg
fSgpLAogCi0gICAgICAgIGZyb21HZW9tZXRyeTogZnVuY3Rpb24gKCBnZW9tZXRyeSApIHsKKyAg
ICAgICAgY2xvc2VzdFBvaW50VG9Qb2ludDogZnVuY3Rpb24gKCBwb2ludCwgdGFyZ2V0ICkgewog
Ci0gICAgICAgICAgICBnZW9tZXRyeS5fX2RpcmVjdEdlb21ldHJ5ID0gbmV3IERpcmVjdEdlb21l
dHJ5KCkuZnJvbUdlb21ldHJ5KCBnZW9tZXRyeSApOworICAgICAgICAgICAgaWYgKCB0YXJnZXQg
PT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbURpcmVjdEdl
b21ldHJ5KCBnZW9tZXRyeS5fX2RpcmVjdEdlb21ldHJ5ICk7CisgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBu
b3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0gICAgICAgIGZyb21EaXJlY3RHZW9tZXRy
eTogZnVuY3Rpb24gKCBnZW9tZXRyeSApIHsKKyAgICAgICAgICAgIHRhcmdldC5zdWJWZWN0b3Jz
KCBwb2ludCwgdGhpcy5vcmlnaW4gKTsKIAotICAgICAgICAgICAgdmFyIHBvc2l0aW9ucyA9IG5l
dyBGbG9hdDMyQXJyYXkoIGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCAqIDMgKTsKLSAgICAgICAg
ICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBw
b3NpdGlvbnMsIDMgKS5jb3B5VmVjdG9yM3NBcnJheSggZ2VvbWV0cnkudmVydGljZXMgKSApOwor
ICAgICAgICAgICAgdmFyIGRpcmVjdGlvbkRpc3RhbmNlID0gdGFyZ2V0LmRvdCggdGhpcy5kaXJl
Y3Rpb24gKTsKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ub3JtYWxzLmxlbmd0aCA+IDAg
KSB7CisgICAgICAgICAgICBpZiAoIGRpcmVjdGlvbkRpc3RhbmNlIDwgMCApIHsKIAotICAgICAg
ICAgICAgICAgIHZhciBub3JtYWxzID0gbmV3IEZsb2F0MzJBcnJheSggZ2VvbWV0cnkubm9ybWFs
cy5sZW5ndGggKiAzICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3Jt
YWwnLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkuY29weVZlY3RvcjNzQXJyYXko
IGdlb21ldHJ5Lm5vcm1hbHMgKSApOworICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY29w
eSggdGhpcy5vcmlnaW4gKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGdl
b21ldHJ5LmNvbG9ycy5sZW5ndGggPiAwICkgeworICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5j
b3B5KCB0aGlzLmRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFyKCBkaXJlY3Rpb25EaXN0YW5jZSAp
LmFkZCggdGhpcy5vcmlnaW4gKTsKIAotICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBuZXcg
RmxvYXQzMkFycmF5KCBnZW9tZXRyeS5jb2xvcnMubGVuZ3RoICogMyApOwotICAgICAgICAgICAg
ICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnY29sb3InLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBjb2xv
cnMsIDMgKS5jb3B5Q29sb3JzQXJyYXkoIGdlb21ldHJ5LmNvbG9ycyApICk7CisgICAgICAgIH0s
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbiAoIHBv
aW50ICkgewogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5LnV2cy5sZW5ndGggPiAwICkgewor
ICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCggcG9p
bnQgKSApOwogCi0gICAgICAgICAgICAgICAgdmFyIHV2cyA9IG5ldyBGbG9hdDMyQXJyYXkoIGdl
b21ldHJ5LnV2cy5sZW5ndGggKiAyICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1
dGUoICd1dicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApLmNvcHlWZWN0b3Iyc0FycmF5
KCBnZW9tZXRyeS51dnMgKSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAg
IGRpc3RhbmNlU3FUb1BvaW50OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGlmICggZ2Vv
bWV0cnkudXZzMi5sZW5ndGggPiAwICkgeworICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3Rv
cjMoKTsKIAotICAgICAgICAgICAgICAgIHZhciB1dnMyID0gbmV3IEZsb2F0MzJBcnJheSggZ2Vv
bWV0cnkudXZzMi5sZW5ndGggKiAyICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1
dGUoICd1djInLCBuZXcgQnVmZmVyQXR0cmlidXRlKCB1dnMyLCAyICkuY29weVZlY3RvcjJzQXJy
YXkoIGdlb21ldHJ5LnV2czIgKSApOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRpc3Rh
bmNlU3FUb1BvaW50KCBwb2ludCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciBkaXJlY3Rpb25EaXN0YW5jZSA9IHYxLnN1YlZlY3RvcnMoIHBvaW50LCB0aGlzLm9yaWdp
biApLmRvdCggdGhpcy5kaXJlY3Rpb24gKTsKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5p
bmRpY2VzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gcG9pbnQgYmVoaW5kIHRo
ZSByYXkKIAotICAgICAgICAgICAgICAgIHZhciBUeXBlQXJyYXkgPSBhcnJheU1heCggZ2VvbWV0
cnkuaW5kaWNlcyApID4gNjU1MzUgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5OwotICAgICAg
ICAgICAgICAgIHZhciBpbmRpY2VzID0gbmV3IFR5cGVBcnJheSggZ2VvbWV0cnkuaW5kaWNlcy5s
ZW5ndGggKiAzICk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXRJbmRleCggbmV3IEJ1ZmZlckF0
dHJpYnV0ZSggaW5kaWNlcywgMSApLmNvcHlJbmRpY2VzQXJyYXkoIGdlb21ldHJ5LmluZGljZXMg
KSApOworICAgICAgICAgICAgICAgIGlmICggZGlyZWN0aW9uRGlzdGFuY2UgPCAwICkgewogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbi5kaXN0
YW5jZVRvU3F1YXJlZCggcG9pbnQgKTsKIAotICAgICAgICAgICAgLy8gZ3JvdXBzCisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwczsK
KyAgICAgICAgICAgICAgICB2MS5jb3B5KCB0aGlzLmRpcmVjdGlvbiApLm11bHRpcGx5U2NhbGFy
KCBkaXJlY3Rpb25EaXN0YW5jZSApLmFkZCggdGhpcy5vcmlnaW4gKTsKIAotICAgICAgICAgICAg
Ly8gbW9ycGhzCisgICAgICAgICAgICAgICAgcmV0dXJuIHYxLmRpc3RhbmNlVG9TcXVhcmVkKCBw
b2ludCApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBnZW9tZXRyeS5tb3JwaFRh
cmdldHMgKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0g
W107Ci0gICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFy
Z2V0c1sgbmFtZSBdOworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSBtb3JwaFRhcmdldHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAg
ZGlzdGFuY2VTcVRvU2VnbWVudDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgICAg
IHZhciBtb3JwaFRhcmdldCA9IG1vcnBoVGFyZ2V0c1sgaSBdOworICAgICAgICAgICAgdmFyIHNl
Z0NlbnRlciA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgc2VnRGlyID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBkaWZmID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAg
ICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUo
IG1vcnBoVGFyZ2V0Lmxlbmd0aCAqIDMsIDMgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biBkaXN0YW5jZVNxVG9TZWdtZW50KCB2MCwgdjEsIG9wdGlvbmFsUG9pbnRPblJheSwgb3B0aW9u
YWxQb2ludE9uU2VnbWVudCApIHsKIAotICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKCBh
dHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoIG1vcnBoVGFyZ2V0ICkgKTsKKyAgICAgICAgICAg
ICAgICAvLyBmcm9tIGh0dHA6Ly93d3cuZ2VvbWV0cmljdG9vbHMuY29tL0dURW5naW5lL0luY2x1
ZGUvTWF0aGVtYXRpY3MvR3RlRGlzdFJheVNlZ21lbnQuaAorICAgICAgICAgICAgICAgIC8vIEl0
IHJldHVybnMgdGhlIG1pbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSByYXkgYW5kIHRoZSBzZWdtZW50
CisgICAgICAgICAgICAgICAgLy8gZGVmaW5lZCBieSB2MCBhbmQgdjEKKyAgICAgICAgICAgICAg
ICAvLyBJdCBjYW4gYWxzbyBzZXQgdHdvIG9wdGlvbmFsIHRhcmdldHMgOgorICAgICAgICAgICAg
ICAgIC8vIC0gVGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIHJheQorICAgICAgICAgICAgICAgIC8v
IC0gVGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIHNlZ21lbnQKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzZWdDZW50ZXIuY29weSggdjAgKS5hZGQoIHYxICkubXVsdGlwbHlT
Y2FsYXIoIDAuNSApOworICAgICAgICAgICAgICAgIHNlZ0Rpci5jb3B5KCB2MSApLnN1YiggdjAg
KS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICBkaWZmLmNvcHkoIHRoaXMub3JpZ2luICku
c3ViKCBzZWdDZW50ZXIgKTsKIAotICAgICAgICAgICAgICAgIHRoaXMubW9ycGhBdHRyaWJ1dGVz
WyBuYW1lIF0gPSBhcnJheTsKKyAgICAgICAgICAgICAgICB2YXIgc2VnRXh0ZW50ID0gdjAuZGlz
dGFuY2VUbyggdjEgKSAqIDAuNTsKKyAgICAgICAgICAgICAgICB2YXIgYTAxID0gLSB0aGlzLmRp
cmVjdGlvbi5kb3QoIHNlZ0RpciApOworICAgICAgICAgICAgICAgIHZhciBiMCA9IGRpZmYuZG90
KCB0aGlzLmRpcmVjdGlvbiApOworICAgICAgICAgICAgICAgIHZhciBiMSA9IC0gZGlmZi5kb3Qo
IHNlZ0RpciApOworICAgICAgICAgICAgICAgIHZhciBjID0gZGlmZi5sZW5ndGhTcSgpOworICAg
ICAgICAgICAgICAgIHZhciBkZXQgPSBNYXRoLmFicyggMSAtIGEwMSAqIGEwMSApOworICAgICAg
ICAgICAgICAgIHZhciBzMCwgczEsIHNxckRpc3QsIGV4dERldDsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICggZGV0ID4gMCApIHsKIAotICAgICAgICAgICAgLy8gc2tpbm5p
bmcKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJheSBhbmQgc2VnbWVudCBhcmUgbm90IHBh
cmFsbGVsLgogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5LnNraW5JbmRpY2VzLmxlbmd0aCA+
IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIHMwID0gYTAxICogYjEgLSBiMDsKKyAgICAgICAg
ICAgICAgICAgICAgczEgPSBhMDEgKiBiMCAtIGIxOworICAgICAgICAgICAgICAgICAgICBleHRE
ZXQgPSBzZWdFeHRlbnQgKiBkZXQ7CiAKLSAgICAgICAgICAgICAgICB2YXIgc2tpbkluZGljZXMg
PSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0cnkuc2tpbkluZGljZXMubGVuZ3Ro
ICogNCwgNCApOwotICAgICAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnc2tpbkluZGV4
Jywgc2tpbkluZGljZXMuY29weVZlY3RvcjRzQXJyYXkoIGdlb21ldHJ5LnNraW5JbmRpY2VzICkg
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzMCA+PSAwICkgewogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMxID49IC0gZXh0RGV0ICkgewogCi0gICAg
ICAgICAgICBpZiAoIGdlb21ldHJ5LnNraW5XZWlnaHRzLmxlbmd0aCA+IDAgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzMSA8PSBleHREZXQgKSB7CiAKLSAgICAgICAgICAg
ICAgICB2YXIgc2tpbldlaWdodHMgPSBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggZ2VvbWV0
cnkuc2tpbldlaWdodHMubGVuZ3RoICogNCwgNCApOwotICAgICAgICAgICAgICAgIHRoaXMuYWRk
QXR0cmlidXRlKCAnc2tpbldlaWdodCcsIHNraW5XZWlnaHRzLmNvcHlWZWN0b3I0c0FycmF5KCBn
ZW9tZXRyeS5za2luV2VpZ2h0cyApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJlZ2lvbiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pbmltdW0g
YXQgaW50ZXJpb3IgcG9pbnRzIG9mIHJheSBhbmQgc2VnbWVudC4KIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW52RGV0ID0gMSAvIGRldDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgKj0gaW52RGV0OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzMSAqPSBpbnZEZXQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNxckRpc3QgPSBzMCAqICggczAgKyBhMDEgKiBzMSArIDIgKiBiMCApICsgczEg
KiAoIGEwMSAqIHMwICsgczEgKyAyICogYjEgKSArIGM7CiAKLSAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgaWYgKCBnZW9t
ZXRyeS5ib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcmVnaW9uIDEKIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdTcGhl
cmUgPSBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzMSA9IHNlZ0V4dGVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgczAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHMxICsgYjAgKSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMxICsg
MiAqIGIxICkgKyBjOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBudWxsICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIHRo
aXMuYm91bmRpbmdCb3ggPSBnZW9tZXRyeS5ib3VuZGluZ0JveC5jbG9uZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiA1CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzMSA9IC0gc2VnRXh0ZW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMwID0gTWF0aC5tYXgoIDAsIC0gKCBhMDEgKiBzMSArIGIwICkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMxICsg
MiAqIGIxICkgKyBjOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
Ci0gICAgICAgIGNvbXB1dGVCb3VuZGluZ0JveDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzMSA8PSAtIGV4dERldCApIHsKIAotICAgICAgICAgICAgaWYgKCB0
aGlzLmJvdW5kaW5nQm94ID09PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJlZ2lvbiA0CiAKLSAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJv
eDMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IE1hdGgubWF4KCAwLCAtICgg
LSBhMDEgKiBzZWdFeHRlbnQgKyBiMCApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
czEgPSAoIHMwID4gMCApID8gLSBzZWdFeHRlbnQgOiBNYXRoLm1pbiggTWF0aC5tYXgoIC0gc2Vn
RXh0ZW50LCAtIGIxICksIHNlZ0V4dGVudCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNxckRpc3QgPSAtIHMwICogczAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7CiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHMxIDw9IGV4dERl
dCApIHsKIAotICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0
aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiAzCiAKLSAgICAgICAg
ICAgIGlmICggcG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzMCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBNYXRoLm1p
biggTWF0aC5tYXgoIC0gc2VnRXh0ZW50LCAtIGIxICksIHNlZ0V4dGVudCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNxckRpc3QgPSBzMSAqICggczEgKyAyICogYjEgKSArIGM7CiAK
LSAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUo
IHBvc2l0aW9uICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiAyCiAK
LSAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMwID0gTWF0aC5tYXgoIDAsIC0gKCBhMDEgKiBzZWdFeHRlbnQg
KyBiMCApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSAoIHMwID4gMCApID8g
c2VnRXh0ZW50IDogTWF0aC5taW4oIE1hdGgubWF4KCAtIHNlZ0V4dGVudCwgLSBiMSApLCBzZWdF
eHRlbnQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBzMCAqIHMw
ICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggaXNOYU4oIHRoaXMuYm91bmRpbmdC
b3gubWluLnggKSB8fCBpc05hTiggdGhpcy5ib3VuZGluZ0JveC5taW4ueSApIHx8IGlzTmFOKCB0
aGlzLmJvdW5kaW5nQm94Lm1pbi56ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRl
Qm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0
aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLCB0aGlzICk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAvLyBSYXkgYW5kIHNlZ21lbnQgYXJlIHBhcmFsbGVsLgogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIHMxID0gKCBhMDEgPiAwICkgPyAtIHNlZ0V4dGVudCA6IHNlZ0V4dGVu
dDsKKyAgICAgICAgICAgICAgICAgICAgczAgPSBNYXRoLm1heCggMCwgLSAoIGEwMSAqIHMxICsg
YjAgKSApOworICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAo
IHMxICsgMiAqIGIxICkgKyBjOwogCi0gICAgICAgIGNvbXB1dGVCb3VuZGluZ1NwaGVyZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGJveCA9IG5l
dyBCb3gzKCk7Ci0gICAgICAgICAgICB2YXIgdmVjdG9yID0gbmV3IFZlY3RvcjMoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIG9wdGlvbmFsUG9pbnRPblJheSApIHsKIAotICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIGNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgb3B0aW9uYWxQb2ludE9uUmF5LmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVsdGlwbHlTY2Fs
YXIoIHMwICkuYWRkKCB0aGlzLm9yaWdpbiApOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0aGlz
LmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nU3BoZXJlID0gbmV3IFNwaGVyZSgpOworICAgICAg
ICAgICAgICAgIGlmICggb3B0aW9uYWxQb2ludE9uU2VnbWVudCApIHsKKworICAgICAgICAgICAg
ICAgICAgICBvcHRpb25hbFBvaW50T25TZWdtZW50LmNvcHkoIHNlZ0RpciApLm11bHRpcGx5U2Nh
bGFyKCBzMSApLmFkZCggc2VnQ2VudGVyICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNxckRpc3Q7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHBvc2l0
aW9uICkgeworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgY2VudGVy
ID0gdGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7CisgICAgICAgIH0oKSwKIAotICAgICAgICAg
ICAgICAgICAgICBib3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24gKTsKLSAgICAg
ICAgICAgICAgICAgICAgYm94LmdldENlbnRlciggY2VudGVyICk7CisgICAgICAgIGludGVyc2Vj
dFNwaGVyZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgICAgIC8vIGhvcGluZyB0
byBmaW5kIGEgYm91bmRpbmdTcGhlcmUgd2l0aCBhIHJhZGl1cyBzbWFsbGVyIHRoYW4gdGhlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGJvdW5kaW5nU3BoZXJlIG9mIHRoZSBib3VuZGluZ0JveDog
c3FydCgzKSBzbWFsbGVyIGluIHRoZSBiZXN0IGNhc2UKKyAgICAgICAgICAgIHZhciB2MSA9IG5l
dyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1heFJhZGl1c1NxID0gMDsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBpbnRlcnNlY3RTcGhlcmUoIHNwaGVyZSwgdGFy
Z2V0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBwb3Np
dGlvbi5jb3VudDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgIHYxLnN1YlZlY3Rv
cnMoIHNwaGVyZS5jZW50ZXIsIHRoaXMub3JpZ2luICk7CisgICAgICAgICAgICAgICAgdmFyIHRj
YSA9IHYxLmRvdCggdGhpcy5kaXJlY3Rpb24gKTsKKyAgICAgICAgICAgICAgICB2YXIgZDIgPSB2
MS5kb3QoIHYxICkgLSB0Y2EgKiB0Y2E7CisgICAgICAgICAgICAgICAgdmFyIHJhZGl1czIgPSBz
cGhlcmUucmFkaXVzICogc3BoZXJlLnJhZGl1czsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
dmVjdG9yLnggPSBwb3NpdGlvbi5nZXRYKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
ZWN0b3IueSA9IHBvc2l0aW9uLmdldFkoIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZl
Y3Rvci56ID0gcG9zaXRpb24uZ2V0WiggaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4
UmFkaXVzU3EgPSBNYXRoLm1heCggbWF4UmFkaXVzU3EsIGNlbnRlci5kaXN0YW5jZVRvU3F1YXJl
ZCggdmVjdG9yICkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGQyID4gcmFkaXVzMiApIHJldHVy
biBudWxsOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdGhj
ID0gTWF0aC5zcXJ0KCByYWRpdXMyIC0gZDIgKTsKIAotICAgICAgICAgICAgICAgICAgICB0aGlz
LmJvdW5kaW5nU3BoZXJlLnJhZGl1cyA9IE1hdGguc3FydCggbWF4UmFkaXVzU3EgKTsKKyAgICAg
ICAgICAgICAgICAvLyB0MCA9IGZpcnN0IGludGVyc2VjdCBwb2ludCAtIGVudHJhbmNlIG9uIGZy
b250IG9mIHNwaGVyZQorICAgICAgICAgICAgICAgIHZhciB0MCA9IHRjYSAtIHRoYzsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoIGlzTmFOKCB0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cyAp
ICkgeworICAgICAgICAgICAgICAgIC8vIHQxID0gc2Vjb25kIGludGVyc2VjdCBwb2ludCAtIGV4
aXQgcG9pbnQgb24gYmFjayBvZiBzcGhlcmUKKyAgICAgICAgICAgICAgICB2YXIgdDEgPSB0Y2Eg
KyB0aGM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5C
dWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlz
IE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1
ZXMuJywgdGhpcyApOworICAgICAgICAgICAgICAgIC8vIHRlc3QgdG8gc2VlIGlmIGJvdGggdDAg
YW5kIHQxIGFyZSBiZWhpbmQgdGhlIHJheSAtIGlmIHNvLCByZXR1cm4gbnVsbAorICAgICAgICAg
ICAgICAgIGlmICggdDAgPCAwICYmIHQxIDwgMCApIHJldHVybiBudWxsOwogCi0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyB0ZXN0IHRvIHNlZSBpZiB0MCBpcyBiZWhp
bmQgdGhlIHJheToKKyAgICAgICAgICAgICAgICAvLyBpZiBpdCBpcywgdGhlIHJheSBpcyBpbnNp
ZGUgdGhlIHNwaGVyZSwgc28gcmV0dXJuIHRoZSBzZWNvbmQgZXhpdCBwb2ludCBzY2FsZWQgYnkg
dDEsCisgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gYWx3YXlzIHJldHVybiBhbiBpbnRl
cnNlY3QgcG9pbnQgdGhhdCBpcyBpbiBmcm9udCBvZiB0aGUgcmF5LgorICAgICAgICAgICAgICAg
IGlmICggdDAgPCAwICkgcmV0dXJuIHRoaXMuYXQoIHQxLCB0YXJnZXQgKTsKIAotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBlbHNlIHQwIGlzIGluIGZyb250IG9mIHRoZSBy
YXksIHNvIHJldHVybiB0aGUgZmlyc3QgY29sbGlzaW9uIHBvaW50IHNjYWxlZCBieSB0MAorICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0KCB0MCwgdGFyZ2V0ICk7CiAKICAgICAgICAgICAg
IH07CiAKICAgICAgICAgfSgpLAogCi0gICAgICAgIGNvbXB1dGVGYWNlTm9ybWFsczogZnVuY3Rp
b24gKCkgeworICAgICAgICBpbnRlcnNlY3RzU3BoZXJlOiBmdW5jdGlvbiAoIHNwaGVyZSApIHsK
IAotICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCggc3BoZXJlLmNlbnRlciApIDw9IHNwaGVyZS5yYWRp
dXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBjb21wdXRlVmVydGV4Tm9ybWFsczogZnVuY3Rp
b24gKCkgeworICAgICAgICBkaXN0YW5jZVRvUGxhbmU6IGZ1bmN0aW9uICggcGxhbmUgKSB7CiAK
LSAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICB2YXIgYXR0
cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlczsKLSAgICAgICAgICAgIHZhciBncm91cHMgPSB0aGlz
Lmdyb3VwczsKKyAgICAgICAgICAgIHZhciBkZW5vbWluYXRvciA9IHBsYW5lLm5vcm1hbC5kb3Qo
IHRoaXMuZGlyZWN0aW9uICk7CiAKLSAgICAgICAgICAgIGlmICggYXR0cmlidXRlcy5wb3NpdGlv
biApIHsKKyAgICAgICAgICAgIGlmICggZGVub21pbmF0b3IgPT09IDAgKSB7CiAKLSAgICAgICAg
ICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTsKKyAgICAg
ICAgICAgICAgICAvLyBsaW5lIGlzIGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luCisgICAgICAgICAg
ICAgICAgaWYgKCBwbGFuZS5kaXN0YW5jZVRvUG9pbnQoIHRoaXMub3JpZ2luICkgPT09IDAgKSB7
CiAKLSAgICAgICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZXMubm9ybWFsID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMuYWRkQXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSggbmV3IEZs
b2F0MzJBcnJheSggcG9zaXRpb25zLmxlbmd0aCApLCAzICkgKTsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE51bGwgaXMg
cHJlZmVyYWJsZSB0byB1bmRlZmluZWQgc2luY2UgdW5kZWZpbmVkIG1lYW5zLi4uLiBpdCBpcyB1
bmRlZmluZWQKIAotICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBleGlzdGluZyBub3JtYWxz
IHRvIHplcm8KKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgICAg
ICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gYXJyYXkubGVuZ3Ro
OyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICB2YXIgdCA9IC0gKCB0aGlzLm9yaWdpbi5k
b3QoIHBsYW5lLm5vcm1hbCApICsgcGxhbmUuY29uc3RhbnQgKSAvIGRlbm9taW5hdG9yOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhcnJheVsgaSBdID0gMDsKKyAgICAgICAgICAgIC8vIFJl
dHVybiBpZiB0aGUgcmF5IG5ldmVyIGludGVyc2VjdHMgdGhlIHBsYW5lCiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHQgPj0gMCA/IHQgOiBudWxsOwogCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdmFyIG5vcm1hbHMg
PSBhdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTsKKyAgICAgICAgaW50ZXJzZWN0UGxhbmU6IGZ1bmN0
aW9uICggcGxhbmUsIHRhcmdldCApIHsKIAotICAgICAgICAgICAgICAgIHZhciB2QSwgdkIsIHZD
OwotICAgICAgICAgICAgICAgIHZhciBwQSA9IG5ldyBWZWN0b3IzKCksIHBCID0gbmV3IFZlY3Rv
cjMoKSwgcEMgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgICAgIHZhciBjYiA9IG5ldyBW
ZWN0b3IzKCksIGFiID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB0ID0gdGhpcy5k
aXN0YW5jZVRvUGxhbmUoIHBsYW5lICk7CiAKLSAgICAgICAgICAgICAgICAvLyBpbmRleGVkIGVs
ZW1lbnRzCisgICAgICAgICAgICBpZiAoIHQgPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIGluZGV4ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAg
ICAgICAgICAgICAgIHZhciBpbmRpY2VzID0gaW5kZXguYXJyYXk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBncm91cHMubGVuZ3RoID09PSAwICkgeworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXQoIHQsIHRhcmdldCApOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmFkZEdyb3VwKCAwLCBpbmRpY2VzLmxlbmd0aCApOworICAgICAgICB9LAogCi0g
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaW50ZXJzZWN0c1BsYW5lOiBmdW5jdGlvbiAo
IHBsYW5lICkgewogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwgPSBn
cm91cHMubGVuZ3RoOyBqIDwgamw7ICsrIGogKSB7CisgICAgICAgICAgICAvLyBjaGVjayBpZiB0
aGUgcmF5IGxpZXMgb24gdGhlIHBsYW5lIGZpcnN0CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBncm91cCA9IGdyb3Vwc1sgaiBdOworICAgICAgICAgICAgdmFyIGRpc3RUb1BvaW50ID0g
cGxhbmUuZGlzdGFuY2VUb1BvaW50KCB0aGlzLm9yaWdpbiApOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgc3RhcnQgPSBncm91cC5zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBjb3VudCA9IGdyb3VwLmNvdW50OworICAgICAgICAgICAgaWYgKCBkaXN0VG9Qb2ludCA9
PT0gMCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBzdGFydCwg
aWwgPSBzdGFydCArIGNvdW50OyBpIDwgaWw7IGkgKz0gMyApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZBID0gaW5kaWNlc1sg
aSArIDAgXSAqIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdkIgPSBpbmRpY2VzWyBp
ICsgMSBdICogMzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2QyA9IGluZGljZXNbIGkg
KyAyIF0gKiAzOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cEEuZnJvbUFycmF5KCBwb3NpdGlvbnMsIHZBICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcEIuZnJvbUFycmF5KCBwb3NpdGlvbnMsIHZCICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcEMuZnJvbUFycmF5KCBwb3NpdGlvbnMsIHZDICk7CisgICAgICAgICAgICB2YXIgZGVu
b21pbmF0b3IgPSBwbGFuZS5ub3JtYWwuZG90KCB0aGlzLmRpcmVjdGlvbiApOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2Iuc3ViVmVjdG9ycyggcEMsIHBCICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWIuc3ViVmVjdG9ycyggcEEsIHBCICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2IuY3Jvc3MoIGFiICk7CisgICAgICAgICAgICBpZiAoIGRlbm9taW5h
dG9yICogZGlzdFRvUG9pbnQgPCAwICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1sgdkEgXSArPSBjYi54OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bHNbIHZBICsgMSBdICs9IGNiLnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFs
c1sgdkEgKyAyIF0gKz0gY2IuejsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZCIF0gKz0gY2IueDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QiArIDEgXSArPSBjYi55OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIHZCICsgMiBdICs9IGNiLno7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QyBdICs9IGNiLng7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgdkMgKyAxIF0gKz0gY2IueTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyB2QyArIDIgXSArPSBjYi56Owor
ICAgICAgICAgICAgLy8gcmF5IG9yaWdpbiBpcyBiZWhpbmQgdGhlIHBsYW5lIChhbmQgaXMgcG9p
bnRpbmcgYmVoaW5kIGl0KQogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJzZWN0Qm94OiBmdW5jdGlvbiAo
IGJveCwgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vbi1pbmRleGVkIGVs
ZW1lbnRzICh1bmNvbm5lY3RlZCB0cmlhbmdsZSBzb3VwKQorICAgICAgICAgICAgdmFyIHRtaW4s
IHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4OwogCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgaWwgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgaWw7IGkgKz0gOSAp
IHsKKyAgICAgICAgICAgIHZhciBpbnZkaXJ4ID0gMSAvIHRoaXMuZGlyZWN0aW9uLngsCisgICAg
ICAgICAgICAgICAgaW52ZGlyeSA9IDEgLyB0aGlzLmRpcmVjdGlvbi55LAorICAgICAgICAgICAg
ICAgIGludmRpcnogPSAxIC8gdGhpcy5kaXJlY3Rpb24uejsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgcEEuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGkgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBCLmZyb21BcnJheSggcG9zaXRpb25zLCBpICsgMyApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcEMuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGkgKyA2ICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNiLnN1YlZlY3RvcnMoIHBDLCBwQiApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYWIuc3ViVmVjdG9ycyggcEEsIHBCICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYi5j
cm9zcyggYWIgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSBdID0gY2Iu
eDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgKyAxIF0gPSBjYi55OwotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSArIDIgXSA9IGNiLno7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgKyAzIF0gPSBjYi54OwotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsc1sgaSArIDQgXSA9IGNiLnk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub3JtYWxzWyBpICsgNSBdID0gY2IuejsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsc1sgaSArIDYgXSA9IGNiLng7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBp
ICsgNyBdID0gY2IueTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgKyA4IF0g
PSBjYi56OworICAgICAgICAgICAgdmFyIG9yaWdpbiA9IHRoaXMub3JpZ2luOwogCi0gICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggaW52ZGlyeCA+PSAwICkgewogCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRtaW4gPSAoIGJveC5taW4ueCAtIG9yaWdp
bi54ICkgKiBpbnZkaXJ4OworICAgICAgICAgICAgICAgIHRtYXggPSAoIGJveC5tYXgueCAtIG9y
aWdpbi54ICkgKiBpbnZkaXJ4OwogCi0gICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVOb3Jt
YWxzKCk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgYXR0cmlidXRl
cy5ub3JtYWwubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIHRtaW4gPSAoIGJv
eC5tYXgueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4OworICAgICAgICAgICAgICAgIHRtYXggPSAo
IGJveC5taW4ueCAtIG9yaWdpbi54ICkgKiBpbnZkaXJ4OwogCiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgICAgIGlmICggaW52ZGlyeSA+PSAwICkgewogCi0gICAgICAgIG1l
cmdlOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCBvZmZzZXQgKSB7CisgICAgICAgICAgICAgICAgdHlt
aW4gPSAoIGJveC5taW4ueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5OworICAgICAgICAgICAgICAg
IHR5bWF4ID0gKCBib3gubWF4LnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTsKIAotICAgICAgICAg
ICAgaWYgKCAhICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApICkgewor
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdU
SFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2Yg
VEhSRUUuQnVmZmVyR2VvbWV0cnkuJywgZ2VvbWV0cnkgKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgdHltaW4gPSAoIGJveC5tYXgueSAtIG9yaWdpbi55ICkgKiBp
bnZkaXJ5OworICAgICAgICAgICAgICAgIHR5bWF4ID0gKCBib3gubWluLnkgLSBvcmlnaW4ueSAp
ICogaW52ZGlyeTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG9mZnNldCA9
PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDsKLQotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSB0aGlzLmF0dHJpYnV0ZXM7Ci0KLSAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gYXR0cmli
dXRlcyApIHsKKyAgICAgICAgICAgIGlmICggKCB0bWluID4gdHltYXggKSB8fCAoIHR5bWluID4g
dG1heCApICkgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmF0
dHJpYnV0ZXNbIGtleSBdID09PSB1bmRlZmluZWQgKSBjb250aW51ZTsKKyAgICAgICAgICAgIC8v
IFRoZXNlIGxpbmVzIGFsc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRtaW4gb3IgdG1heCBpcyBO
YU4KKyAgICAgICAgICAgIC8vIChyZXN1bHQgb2YgMCAqIEluZmluaXR5KS4geCAhPT0geCByZXR1
cm5zIHRydWUgaWYgeCBpcyBOYU4KIAotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUxID0g
YXR0cmlidXRlc1sga2V5IF07Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5MSA9
IGF0dHJpYnV0ZTEuYXJyYXk7CisgICAgICAgICAgICBpZiAoIHR5bWluID4gdG1pbiB8fCB0bWlu
ICE9PSB0bWluICkgdG1pbiA9IHR5bWluOwogCi0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0
ZTIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzWyBrZXkgXTsKLSAgICAgICAgICAgICAgICB2YXIgYXR0
cmlidXRlQXJyYXkyID0gYXR0cmlidXRlMi5hcnJheTsKKyAgICAgICAgICAgIGlmICggdHltYXgg
PCB0bWF4IHx8IHRtYXggIT09IHRtYXggKSB0bWF4ID0gdHltYXg7CiAKLSAgICAgICAgICAgICAg
ICB2YXIgYXR0cmlidXRlU2l6ZSA9IGF0dHJpYnV0ZTIuaXRlbVNpemU7CisgICAgICAgICAgICBp
ZiAoIGludmRpcnogPj0gMCApIHsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
aiA9IGF0dHJpYnV0ZVNpemUgKiBvZmZzZXQ7IGkgPCBhdHRyaWJ1dGVBcnJheTIubGVuZ3RoOyBp
ICsrLCBqICsrICkgeworICAgICAgICAgICAgICAgIHR6bWluID0gKCBib3gubWluLnogLSBvcmln
aW4ueiApICogaW52ZGlyejsKKyAgICAgICAgICAgICAgICB0em1heCA9ICggYm94Lm1heC56IC0g
b3JpZ2luLnogKSAqIGludmRpcno7CiAKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQXJy
YXkxWyBqIF0gPSBhdHRyaWJ1dGVBcnJheTJbIGkgXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHptaW4gPSAoIGJveC5tYXgueiAt
IG9yaWdpbi56ICkgKiBpbnZkaXJ6OworICAgICAgICAgICAgICAgIHR6bWF4ID0gKCBib3gubWlu
LnogLSBvcmlnaW4ueiApICogaW52ZGlyejsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLQotICAgICAgICB9LAotCi0gICAgICAgIG5vcm1hbGl6ZU5vcm1hbHM6
IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgdmFyIG5vcm1hbHMgPSB0aGlzLmF0dHJpYnV0
ZXMubm9ybWFsOwotCi0gICAgICAgICAgICB2YXIgeCwgeSwgeiwgbjsKKyAgICAgICAgICAgIGlm
ICggKCB0bWluID4gdHptYXggKSB8fCAoIHR6bWluID4gdG1heCApICkgcmV0dXJuIG51bGw7CiAK
LSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBub3JtYWxzLmNvdW50OyBpIDwgaWw7
IGkgKysgKSB7CisgICAgICAgICAgICBpZiAoIHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWlu
ICkgdG1pbiA9IHR6bWluOwogCi0gICAgICAgICAgICAgICAgeCA9IG5vcm1hbHMuZ2V0WCggaSAp
OwotICAgICAgICAgICAgICAgIHkgPSBub3JtYWxzLmdldFkoIGkgKTsKLSAgICAgICAgICAgICAg
ICB6ID0gbm9ybWFscy5nZXRaKCBpICk7CisgICAgICAgICAgICBpZiAoIHR6bWF4IDwgdG1heCB8
fCB0bWF4ICE9PSB0bWF4ICkgdG1heCA9IHR6bWF4OwogCi0gICAgICAgICAgICAgICAgbiA9IDEu
MCAvIE1hdGguc3FydCggeCAqIHggKyB5ICogeSArIHogKiB6ICk7CisgICAgICAgICAgICAvL3Jl
dHVybiBwb2ludCBjbG9zZXN0IHRvIHRoZSByYXkgKHBvc2l0aXZlIHNpZGUpCiAKLSAgICAgICAg
ICAgICAgICBub3JtYWxzLnNldFhZWiggaSwgeCAqIG4sIHkgKiBuLCB6ICogbiApOworICAgICAg
ICAgICAgaWYgKCB0bWF4IDwgMCApIHJldHVybiBudWxsOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5hdCggdG1pbiA+PSAwID8gdG1pbiA6IHRtYXgsIHRhcmdldCAp
OwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgdG9Ob25JbmRleGVkOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGludGVyc2VjdHNCb3g6ICggZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBpZiAo
IHRoaXMuaW5kZXggPT09IG51bGwgKSB7CisgICAgICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3Iz
KCk7CiAKLSAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5CdWZmZXJHZW9tZXRy
eS50b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4nICk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
aW50ZXJzZWN0c0JveCggYm94ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KCBib3gsIHYgKSAhPT0gbnVsbDsKIAotICAgICAgICAg
ICAgdmFyIGdlb21ldHJ5MiA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGV4LmFycmF5OwotICAgICAgICAg
ICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7CisgICAgICAgIH0gKSgpLAogCi0g
ICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBhdHRyaWJ1dGVzICkgeworICAgICAgICBpbnRl
cnNlY3RUcmlhbmdsZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgdmFyIGF0dHJp
YnV0ZSA9IGF0dHJpYnV0ZXNbIG5hbWUgXTsKKyAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9m
ZnNldCBvcmlnaW4sIGVkZ2VzLCBhbmQgbm9ybWFsLgorICAgICAgICAgICAgdmFyIGRpZmYgPSBu
ZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGVkZ2UxID0gbmV3IFZlY3RvcjMoKTsKKyAg
ICAgICAgICAgIHZhciBlZGdlMiA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgbm9y
bWFsID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IGF0dHJp
YnV0ZS5hcnJheTsKLSAgICAgICAgICAgICAgICB2YXIgaXRlbVNpemUgPSBhdHRyaWJ1dGUuaXRl
bVNpemU7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gaW50ZXJzZWN0VHJpYW5nbGUoIGEs
IGIsIGMsIGJhY2tmYWNlQ3VsbGluZywgdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAgICAgdmFy
IGFycmF5MiA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvciggaW5kaWNlcy5sZW5ndGggKiBpdGVtU2l6
ZSApOworICAgICAgICAgICAgICAgIC8vIGZyb20gaHR0cDovL3d3dy5nZW9tZXRyaWN0b29scy5j
b20vR1RFbmdpbmUvSW5jbHVkZS9NYXRoZW1hdGljcy9HdGVJbnRyUmF5M1RyaWFuZ2xlMy5oCiAK
LSAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwLCBpbmRleDIgPSAwOworICAgICAgICAgICAg
ICAgIGVkZ2UxLnN1YlZlY3RvcnMoIGIsIGEgKTsKKyAgICAgICAgICAgICAgICBlZGdlMi5zdWJW
ZWN0b3JzKCBjLCBhICk7CisgICAgICAgICAgICAgICAgbm9ybWFsLmNyb3NzVmVjdG9ycyggZWRn
ZTEsIGVkZ2UyICk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbmRp
Y2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgLy8gU29sdmUgUSAr
IHQqRCA9IGIxKkUxICsgYjIqRTIgKFEgPSBrRGlmZiwgRCA9IHJheSBkaXJlY3Rpb24sCisgICAg
ICAgICAgICAgICAgLy8gRTEgPSBrRWRnZTEsIEUyID0ga0VkZ2UyLCBOID0gQ3Jvc3MoRTEsRTIp
KSBieQorICAgICAgICAgICAgICAgIC8vICAgfERvdChELE4pfCpiMSA9IHNpZ24oRG90KEQsTikp
KkRvdChELENyb3NzKFEsRTIpKQorICAgICAgICAgICAgICAgIC8vICAgfERvdChELE4pfCpiMiA9
IHNpZ24oRG90KEQsTikpKkRvdChELENyb3NzKEUxLFEpKQorICAgICAgICAgICAgICAgIC8vICAg
fERvdChELE4pfCp0ID0gLXNpZ24oRG90KEQsTikpKkRvdChRLE4pCisgICAgICAgICAgICAgICAg
dmFyIERkTiA9IHRoaXMuZGlyZWN0aW9uLmRvdCggbm9ybWFsICk7CisgICAgICAgICAgICAgICAg
dmFyIHNpZ247CiAKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRpY2VzWyBpIF0gKiBp
dGVtU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoIERkTiA+IDAgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqIDwgaXRlbVNpemU7IGogKysgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggYmFja2ZhY2VDdWxsaW5nICkgcmV0dXJuIG51bGw7CisgICAgICAg
ICAgICAgICAgICAgIHNpZ24gPSAxOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheTJb
IGluZGV4MiArKyBdID0gYXJyYXlbIGluZGV4ICsrIF07CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggRGROIDwgMCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHNpZ24gPSAtIDE7CisgICAgICAgICAgICAgICAgICAgIERkTiA9IC0gRGROOwogCi0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAg
ICAgICBnZW9tZXRyeTIuYWRkQXR0cmlidXRlKCBuYW1lLCBuZXcgQnVmZmVyQXR0cmlidXRlKCBh
cnJheTIsIGl0ZW1TaXplICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBn
ZW9tZXRyeTI7CisgICAgICAgICAgICAgICAgZGlmZi5zdWJWZWN0b3JzKCB0aGlzLm9yaWdpbiwg
YSApOworICAgICAgICAgICAgICAgIHZhciBEZFF4RTIgPSBzaWduICogdGhpcy5kaXJlY3Rpb24u
ZG90KCBlZGdlMi5jcm9zc1ZlY3RvcnMoIGRpZmYsIGVkZ2UyICkgKTsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIC8vIGIxIDwgMCwgbm8gaW50ZXJzZWN0aW9uCisgICAgICAgICAgICAg
ICAgaWYgKCBEZFF4RTIgPCAwICkgewogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgdmFyIGRhdGEg
PSB7Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgICAgICAgICAgICAgdmVy
c2lvbjogNC41LAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnVmZmVyR2VvbWV0cnknLAot
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdCdWZmZXJHZW9tZXRyeS50b0pTT04nCiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgLy8gc3RhbmRh
cmQgQnVmZmVyR2VvbWV0cnkgc2VyaWFsaXphdGlvbgorICAgICAgICAgICAgICAgIHZhciBEZEUx
eFEgPSBzaWduICogdGhpcy5kaXJlY3Rpb24uZG90KCBlZGdlMS5jcm9zcyggZGlmZiApICk7CiAK
LSAgICAgICAgICAgIGRhdGEudXVpZCA9IHRoaXMudXVpZDsKLSAgICAgICAgICAgIGRhdGEudHlw
ZSA9IHRoaXMudHlwZTsKLSAgICAgICAgICAgIGlmICggdGhpcy5uYW1lICE9PSAnJyApIGRhdGEu
bmFtZSA9IHRoaXMubmFtZTsKKyAgICAgICAgICAgICAgICAvLyBiMiA8IDAsIG5vIGludGVyc2Vj
dGlvbgorICAgICAgICAgICAgICAgIGlmICggRGRFMXhRIDwgMCApIHsKIAotICAgICAgICAgICAg
aWYgKCB0aGlzLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMu
cGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2
YXIga2V5IGluIHBhcmFtZXRlcnMgKSB7CisgICAgICAgICAgICAgICAgLy8gYjErYjIgPiAxLCBu
byBpbnRlcnNlY3Rpb24KKyAgICAgICAgICAgICAgICBpZiAoIERkUXhFMiArIERkRTF4USA+IERk
TiApIHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnNbIGtleSBdICE9PSB1
bmRlZmluZWQgKSBkYXRhWyBrZXkgXSA9IHBhcmFtZXRlcnNbIGtleSBdOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIC8vIExpbmUgaW50ZXJzZWN0cyB0cmlh
bmdsZSwgY2hlY2sgaWYgcmF5IGRvZXMuCisgICAgICAgICAgICAgICAgdmFyIFFkTiA9IC0gc2ln
biAqIGRpZmYuZG90KCBub3JtYWwgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIHQgPCAwLCBubyBpbnRlcnNlY3Rpb24KKyAgICAgICAgICAgICAgICBpZiAoIFFkTiA8IDAg
KSB7CiAKLSAgICAgICAgICAgIGRhdGEuZGF0YSA9IHsgYXR0cmlidXRlczoge30gfTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgICAgIHZhciBpbmRleCA9IHRo
aXMuaW5kZXg7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGluZGV4ICE9
PSBudWxsICkgeworICAgICAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3RzIHRyaWFuZ2xlLgor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0KCBRZE4gLyBEZE4sIHRhcmdldCApOwogCi0g
ICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGlu
ZGV4LmFycmF5ICk7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgZGF0YS5kYXRh
LmluZGV4ID0gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBpbmRleC5hcnJheS5jb25zdHJ1
Y3Rvci5uYW1lLAotICAgICAgICAgICAgICAgICAgICBhcnJheTogYXJyYXkKLSAgICAgICAgICAg
ICAgICB9OworICAgICAgICB9KCksCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgYXBwbHlNYXRy
aXg0OiBmdW5jdGlvbiAoIG1hdHJpeDQgKSB7CiAKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVz
ID0gdGhpcy5hdHRyaWJ1dGVzOworICAgICAgICAgICAgdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0
KCBtYXRyaXg0ICk7CisgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rp
b24oIG1hdHJpeDQgKTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiBhdHRyaWJ1dGVz
ICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICB2YXIgYXR0
cmlidXRlID0gYXR0cmlidXRlc1sga2V5IF07CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAg
ICB2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXR0cmlidXRlLmFycmF5
ICk7CisgICAgICAgIGVxdWFsczogZnVuY3Rpb24gKCByYXkgKSB7CiAKLSAgICAgICAgICAgICAg
ICBkYXRhLmRhdGEuYXR0cmlidXRlc1sga2V5IF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0
ZW1TaXplOiBhdHRyaWJ1dGUuaXRlbVNpemUsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6IGF0
dHJpYnV0ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLAotICAgICAgICAgICAgICAgICAgICBhcnJh
eTogYXJyYXksCi0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQ6IGF0dHJpYnV0ZS5ub3Jt
YWxpemVkCi0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiByYXkub3JpZ2lu
LmVxdWFscyggdGhpcy5vcmlnaW4gKSAmJiByYXkuZGlyZWN0aW9uLmVxdWFscyggdGhpcy5kaXJl
Y3Rpb24gKTsKIAotICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBn
cm91cHMgPSB0aGlzLmdyb3VwczsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIGlmICggZ3JvdXBz
Lmxlbmd0aCA+IDAgKSB7CisgICAgLyoqCisgICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6
Ly9jbGFyYS5pbworICAgICAqLwogCi0gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmdyb3VwcyA9
IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCBncm91cHMgKSApOworICAgIGZ1bmN0aW9uIExp
bmUzKCBzdGFydCwgZW5kICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgIHRoaXMuc3RhcnQg
PSAoIHN0YXJ0ICE9PSB1bmRlZmluZWQgKSA/IHN0YXJ0IDogbmV3IFZlY3RvcjMoKTsKKyAgICAg
ICAgdGhpcy5lbmQgPSAoIGVuZCAhPT0gdW5kZWZpbmVkICkgPyBlbmQgOiBuZXcgVmVjdG9yMygp
OwogCi0gICAgICAgICAgICB2YXIgYm91bmRpbmdTcGhlcmUgPSB0aGlzLmJvdW5kaW5nU3BoZXJl
OworICAgIH0KIAotICAgICAgICAgICAgaWYgKCBib3VuZGluZ1NwaGVyZSAhPT0gbnVsbCApIHsK
KyAgICBPYmplY3QuYXNzaWduKCBMaW5lMy5wcm90b3R5cGUsIHsKIAotICAgICAgICAgICAgICAg
IGRhdGEuZGF0YS5ib3VuZGluZ1NwaGVyZSA9IHsKLSAgICAgICAgICAgICAgICAgICAgY2VudGVy
OiBib3VuZGluZ1NwaGVyZS5jZW50ZXIudG9BcnJheSgpLAotICAgICAgICAgICAgICAgICAgICBy
YWRpdXM6IGJvdW5kaW5nU3BoZXJlLnJhZGl1cwotICAgICAgICAgICAgICAgIH07CisgICAgICAg
IHNldDogZnVuY3Rpb24gKCBzdGFydCwgZW5kICkgewogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLnN0YXJ0LmNvcHkoIHN0YXJ0ICk7CisgICAgICAgICAgICB0aGlzLmVuZC5jb3B5
KCBlbmQgKTsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKIAogICAgICAgICB9LAogCiAgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAg
ICAgICAgICAgIC8qCi0gICAgICAgICAgICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAotICAgICAg
ICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzOworICAgICAgICB9LAogCi0g
ICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIGNv
cHk6IGZ1bmN0aW9uICggbGluZSApIHsKIAotICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsK
KyAgICAgICAgICAgIHRoaXMuc3RhcnQuY29weSggbGluZS5zdGFydCApOworICAgICAgICAgICAg
dGhpcy5lbmQuY29weSggbGluZS5lbmQgKTsKIAotICAgICAgICAgICAgIGZvciAoIHZhciBrZXkg
aW4gcGFyYW1ldGVycyApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAg
ICAgdmFsdWVzLnB1c2goIHBhcmFtZXRlcnNbIGtleSBdICk7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgICB9CisgICAgICAgIGdldENlbnRlcjogZnVuY3Rpb24gKCB0YXJnZXQgKSB7CiAKLSAg
ICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBPYmplY3QuY3JlYXRlKCB0aGlzLmNvbnN0cnVjdG9y
LnByb3RvdHlwZSApOwotICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuYXBwbHkoIGdlb21l
dHJ5LCB2YWx1ZXMgKTsKLSAgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7CisgICAgICAgICAg
ICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmUzOiAuZ2V0Q2VudGVyKCkgdGFyZ2V0
IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9y
MygpOwogCi0gICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSgg
dGhpcyApOwotICAgICAgICAgICAgICovCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgQnVmZmVyR2VvbWV0cnkoKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICByZXR1
cm4gdGFyZ2V0LmFkZFZlY3RvcnMoIHRoaXMuc3RhcnQsIHRoaXMuZW5kICkubXVsdGlwbHlTY2Fs
YXIoIDAuNSApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3Vy
Y2UgKSB7CisgICAgICAgIGRlbHRhOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgICAgICAg
ICAgdmFyIG5hbWUsIGksIGw7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICAvLyByZXNldAorICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLkxpbmUzOiAuZGVsdGEoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAg
ICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgIHRoaXMu
aW5kZXggPSBudWxsOwotICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307Ci0gICAgICAg
ICAgICB0aGlzLm1vcnBoQXR0cmlidXRlcyA9IHt9OwotICAgICAgICAgICAgdGhpcy5ncm91cHMg
PSBbXTsKLSAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBudWxsOwotICAgICAgICAgICAg
dGhpcy5ib3VuZGluZ1NwaGVyZSA9IG51bGw7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IC8vIG5hbWUKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc3ViVmVjdG9ycyggdGhpcy5lbmQs
IHRoaXMuc3RhcnQgKTsKIAotICAgICAgICAgICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgICAgIC8vIGluZGV4CisgICAgICAgIGRpc3RhbmNlU3E6IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgdmFyIGluZGV4ID0gc291cmNlLmluZGV4OworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQoIHRoaXMuZW5kICk7
CiAKLSAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CisgICAgICAgIH0sCiAKLSAg
ICAgICAgICAgICAgICB0aGlzLnNldEluZGV4KCBpbmRleC5jbG9uZSgpICk7CisgICAgICAgIGRp
c3RhbmNlOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8oIHRoaXMuZW5kICk7CiAKLSAgICAgICAgICAgIC8vIGF0
dHJpYnV0ZXMKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzb3Vy
Y2UuYXR0cmlidXRlczsKKyAgICAgICAgYXQ6IGZ1bmN0aW9uICggdCwgdGFyZ2V0ICkgewogCi0g
ICAgICAgICAgICBmb3IgKCBuYW1lIGluIGF0dHJpYnV0ZXMgKSB7CisgICAgICAgICAgICBpZiAo
IHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0
ZSA9IGF0dHJpYnV0ZXNbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEF0dHJpYnV0
ZSggbmFtZSwgYXR0cmlidXRlLmNsb25lKCkgKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5MaW5lMzogLmF0KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAg
ICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwogCiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIC8vIG1vcnBoIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRl
bHRhKCB0YXJnZXQgKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy5zdGFydCApOwogCi0g
ICAgICAgICAgICB2YXIgbW9ycGhBdHRyaWJ1dGVzID0gc291cmNlLm1vcnBoQXR0cmlidXRlczsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgZm9yICggbmFtZSBpbiBtb3JwaEF0dHJpYnV0ZXMg
KSB7CisgICAgICAgIGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6IGZ1bmN0aW9uICgpIHsK
IAotICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBt
b3JwaEF0dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1sgbmFtZSBdOyAvLyBtb3JwaEF0dHJpYnV0
ZTogYXJyYXkgb2YgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHZhciBzdGFy
dFAgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIHN0YXJ0RW5kID0gbmV3IFZlY3Rv
cjMoKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gbW9ycGhBdHRyaWJ1dGUu
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjbG9z
ZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKCBwb2ludCwgY2xhbXBUb0xpbmUgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgYXJyYXkucHVzaCggbW9ycGhBdHRyaWJ1dGVbIGkgXS5jbG9uZSgpICk7
CisgICAgICAgICAgICAgICAgc3RhcnRQLnN1YlZlY3RvcnMoIHBvaW50LCB0aGlzLnN0YXJ0ICk7
CisgICAgICAgICAgICAgICAgc3RhcnRFbmQuc3ViVmVjdG9ycyggdGhpcy5lbmQsIHRoaXMuc3Rh
cnQgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgc3RhcnRFbmQy
ID0gc3RhcnRFbmQuZG90KCBzdGFydEVuZCApOworICAgICAgICAgICAgICAgIHZhciBzdGFydEVu
ZF9zdGFydFAgPSBzdGFydEVuZC5kb3QoIHN0YXJ0UCApOwogCi0gICAgICAgICAgICAgICAgdGhp
cy5tb3JwaEF0dHJpYnV0ZXNbIG5hbWUgXSA9IGFycmF5OworICAgICAgICAgICAgICAgIHZhciB0
ID0gc3RhcnRFbmRfc3RhcnRQIC8gc3RhcnRFbmQyOwogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCBjbGFtcFRvTGluZSApIHsKIAotICAgICAgICAgICAgLy8gZ3JvdXBzCisg
ICAgICAgICAgICAgICAgICAgIHQgPSBfTWF0aC5jbGFtcCggdCwgMCwgMSApOwogCi0gICAgICAg
ICAgICB2YXIgZ3JvdXBzID0gc291cmNlLmdyb3VwczsKKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAKLSAgICAgICAgICAgICAgICB2YXIgZ3JvdXAg
PSBncm91cHNbIGkgXTsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwKCBncm91cC5zdGFy
dCwgZ3JvdXAuY291bnQsIGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKKyAgICAgICAgICAgIH07CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgfSgpLAogCi0gICAgICAgICAgICAvLyBib3VuZGluZyBi
b3gKKyAgICAgICAgY2xvc2VzdFBvaW50VG9Qb2ludDogZnVuY3Rpb24gKCBwb2ludCwgY2xhbXBU
b0xpbmUsIHRhcmdldCApIHsKIAotICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gc291cmNl
LmJvdW5kaW5nQm94OworICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmNsb3Nlc3RQb2ludFRvUG9p
bnRQYXJhbWV0ZXIoIHBvaW50LCBjbGFtcFRvTGluZSApOwogCi0gICAgICAgICAgICBpZiAoIGJv
dW5kaW5nQm94ICE9PSBudWxsICkgeworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBib3VuZGluZ0Jv
eC5jbG9uZSgpOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkxpbmUzOiAu
Y2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAvLyBib3VuZGluZyBzcGhlcmUKLQotICAgICAgICAgICAgdmFyIGJvdW5kaW5nU3Bo
ZXJlID0gc291cmNlLmJvdW5kaW5nU3BoZXJlOwotCi0gICAgICAgICAgICBpZiAoIGJvdW5kaW5n
U3BoZXJlICE9PSBudWxsICkgewotCi0gICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ1NwaGVy
ZSA9IGJvdW5kaW5nU3BoZXJlLmNsb25lKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWx0
YSggdGFyZ2V0ICkubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMuc3RhcnQgKTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAvLyBkcmF3IHJhbmdlCisgICAg
ICAgIGFwcGx5TWF0cml4NDogZnVuY3Rpb24gKCBtYXRyaXggKSB7CiAKLSAgICAgICAgICAgIHRo
aXMuZHJhd1JhbmdlLnN0YXJ0ID0gc291cmNlLmRyYXdSYW5nZS5zdGFydDsKLSAgICAgICAgICAg
IHRoaXMuZHJhd1JhbmdlLmNvdW50ID0gc291cmNlLmRyYXdSYW5nZS5jb3VudDsKKyAgICAgICAg
ICAgIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKKyAgICAgICAgICAgIHRoaXMu
ZW5kLmFwcGx5TWF0cml4NCggbWF0cml4ICk7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwog
CiAgICAgICAgIH0sCiAKLSAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24gKCkgeworICAgICAgICBl
cXVhbHM6IGZ1bmN0aW9uICggbGluZSApIHsKIAotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7CisgICAgICAgICAgICByZXR1cm4gbGluZS5zdGFy
dC5lcXVhbHMoIHRoaXMuc3RhcnQgKSAmJiBsaW5lLmVuZC5lcXVhbHMoIHRoaXMuZW5kICk7CiAK
ICAgICAgICAgfQogCiAgICAgfSApOwogCiAgICAgLyoqCisgICAgICogQGF1dGhvciBiaG91c3Rv
biAvIGh0dHA6Ly9jbGFyYS5pbwogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCi0gICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2Vu
ODcKICAgICAgKi8KIAotICAgIC8vIEJveEdlb21ldHJ5CisgICAgZnVuY3Rpb24gVHJpYW5nbGUo
IGEsIGIsIGMgKSB7CiAKLSAgICBmdW5jdGlvbiBCb3hHZW9tZXRyeSggd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBkZXB0aFNlZ21lbnRzICkgewor
ICAgICAgICB0aGlzLmEgPSAoIGEgIT09IHVuZGVmaW5lZCApID8gYSA6IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgIHRoaXMuYiA9ICggYiAhPT0gdW5kZWZpbmVkICkgPyBiIDogbmV3IFZlY3RvcjMo
KTsKKyAgICAgICAgdGhpcy5jID0gKCBjICE9PSB1bmRlZmluZWQgKSA/IGMgOiBuZXcgVmVjdG9y
MygpOwogCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICB9CiAKLSAgICAgICAg
dGhpcy50eXBlID0gJ0JveEdlb21ldHJ5JzsKKyAgICBPYmplY3QuYXNzaWduKCBUcmlhbmdsZSwg
ewogCi0gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHdpZHRoOiB3aWR0
aCwKLSAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAotICAgICAgICAgICAgZGVwdGg6IGRlcHRo
LAotICAgICAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cywKLSAgICAgICAgICAg
IGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cywKLSAgICAgICAgICAgIGRlcHRoU2VnbWVu
dHM6IGRlcHRoU2VnbWVudHMKLSAgICAgICAgfTsKKyAgICAgICAgZ2V0Tm9ybWFsOiBmdW5jdGlv
biAoKSB7CiAKLSAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBCb3hCdWZmZXJH
ZW9tZXRyeSggd2lkdGgsIGhlaWdodCwgZGVwdGgsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21l
bnRzLCBkZXB0aFNlZ21lbnRzICkgKTsKLSAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7Cisg
ICAgICAgICAgICB2YXIgdjAgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIGdldE5vcm1hbCggYSwgYiwgYywgdGFyZ2V0ICkgewogCi0gICAgQm94
R2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7
Ci0gICAgQm94R2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQm94R2VvbWV0cnk7Cisg
ICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCApIHsKIAotICAgIC8vIEJv
eEJ1ZmZlckdlb21ldHJ5CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LlRyaWFuZ2xlOiAuZ2V0Tm9ybWFsKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgIGZ1bmN0aW9uIEJv
eEJ1ZmZlckdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgd2lkdGhTZWdtZW50cywgaGVp
Z2h0U2VnbWVudHMsIGRlcHRoU2VnbWVudHMgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQu
c3ViVmVjdG9ycyggYywgYiApOworICAgICAgICAgICAgICAgIHYwLnN1YlZlY3RvcnMoIGEsIGIg
KTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuY3Jvc3MoIHYwICk7CiAKLSAgICAgICAgdGhpcy50
eXBlID0gJ0JveEJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TGVu
Z3RoU3EgPSB0YXJnZXQubGVuZ3RoU3EoKTsKKyAgICAgICAgICAgICAgICBpZiAoIHRhcmdldExl
bmd0aFNxID4gMCApIHsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAg
ICB3aWR0aDogd2lkdGgsCi0gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKLSAgICAgICAgICAg
IGRlcHRoOiBkZXB0aCwKLSAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMs
Ci0gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsCi0gICAgICAgICAg
ICBkZXB0aFNlZ21lbnRzOiBkZXB0aFNlZ21lbnRzCi0gICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0YXJnZXQubXVsdGlwbHlTY2FsYXIoIDEgLyBNYXRoLnNxcnQoIHRhcmdl
dExlbmd0aFNxICkgKTsKIAotICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAvLyBzZWdtZW50cworICAgICAgICAgICAgICAgIHJldHVybiB0YXJn
ZXQuc2V0KCAwLCAwLCAwICk7CiAKLSAgICAgICAgd2lkdGhTZWdtZW50cyA9IE1hdGguZmxvb3Io
IHdpZHRoU2VnbWVudHMgKSB8fCAxOwotICAgICAgICBoZWlnaHRTZWdtZW50cyA9IE1hdGguZmxv
b3IoIGhlaWdodFNlZ21lbnRzICkgfHwgMTsKLSAgICAgICAgZGVwdGhTZWdtZW50cyA9IE1hdGgu
Zmxvb3IoIGRlcHRoU2VnbWVudHMgKSB8fCAxOworICAgICAgICAgICAgfTsKIAotICAgICAgICAv
LyBidWZmZXJzCisgICAgICAgIH0oKSwKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwotICAg
ICAgICB2YXIgdmVydGljZXMgPSBbXTsKLSAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKLSAgICAg
ICAgdmFyIHV2cyA9IFtdOworICAgICAgICAvLyBzdGF0aWMvaW5zdGFuY2UgbWV0aG9kIHRvIGNh
bGN1bGF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcworICAgICAgICAvLyBiYXNlZCBvbjogaHR0
cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L2RlZmF1bHQuaHRtbAorICAg
ICAgICBnZXRCYXJ5Y29vcmQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAvLyBoZWxwZXIgdmFy
aWFibGVzCisgICAgICAgICAgICB2YXIgdjAgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAg
dmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2MiA9IG5ldyBWZWN0b3Iz
KCk7CiAKLSAgICAgICAgdmFyIG51bWJlck9mVmVydGljZXMgPSAwOwotICAgICAgICB2YXIgZ3Jv
dXBTdGFydCA9IDA7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZ2V0QmFyeWNvb3JkKCBw
b2ludCwgYSwgYiwgYywgdGFyZ2V0ICkgewogCi0gICAgICAgIC8vIGJ1aWxkIGVhY2ggc2lkZSBv
ZiB0aGUgYm94IGdlb21ldHJ5CisgICAgICAgICAgICAgICAgdjAuc3ViVmVjdG9ycyggYywgYSAp
OworICAgICAgICAgICAgICAgIHYxLnN1YlZlY3RvcnMoIGIsIGEgKTsKKyAgICAgICAgICAgICAg
ICB2Mi5zdWJWZWN0b3JzKCBwb2ludCwgYSApOwogCi0gICAgICAgIGJ1aWxkUGxhbmUoICd6Jywg
J3knLCAneCcsIC0gMSwgLSAxLCBkZXB0aCwgaGVpZ2h0LCAgIHdpZHRoLCAgZGVwdGhTZWdtZW50
cywgaGVpZ2h0U2VnbWVudHMsIDAgKTsgLy8gcHgKLSAgICAgICAgYnVpbGRQbGFuZSggJ3onLCAn
eScsICd4JywgICAxLCAtIDEsIGRlcHRoLCBoZWlnaHQsIC0gd2lkdGgsICBkZXB0aFNlZ21lbnRz
LCBoZWlnaHRTZWdtZW50cywgMSApOyAvLyBueAotICAgICAgICBidWlsZFBsYW5lKCAneCcsICd6
JywgJ3knLCAgIDEsICAgMSwgd2lkdGgsIGRlcHRoLCAgICBoZWlnaHQsIHdpZHRoU2VnbWVudHMs
IGRlcHRoU2VnbWVudHMsICAyICk7IC8vIHB5Ci0gICAgICAgIGJ1aWxkUGxhbmUoICd4JywgJ3on
LCAneScsICAgMSwgLSAxLCB3aWR0aCwgZGVwdGgsICAtIGhlaWdodCwgd2lkdGhTZWdtZW50cywg
ZGVwdGhTZWdtZW50cywgIDMgKTsgLy8gbnkKLSAgICAgICAgYnVpbGRQbGFuZSggJ3gnLCAneScs
ICd6JywgICAxLCAtIDEsIHdpZHRoLCBoZWlnaHQsICAgZGVwdGgsICB3aWR0aFNlZ21lbnRzLCBo
ZWlnaHRTZWdtZW50cywgNCApOyAvLyBwegotICAgICAgICBidWlsZFBsYW5lKCAneCcsICd5Jywg
J3onLCAtIDEsIC0gMSwgd2lkdGgsIGhlaWdodCwgLSBkZXB0aCwgIHdpZHRoU2VnbWVudHMsIGhl
aWdodFNlZ21lbnRzLCA1ICk7IC8vIG56CisgICAgICAgICAgICAgICAgdmFyIGRvdDAwID0gdjAu
ZG90KCB2MCApOworICAgICAgICAgICAgICAgIHZhciBkb3QwMSA9IHYwLmRvdCggdjEgKTsKKyAg
ICAgICAgICAgICAgICB2YXIgZG90MDIgPSB2MC5kb3QoIHYyICk7CisgICAgICAgICAgICAgICAg
dmFyIGRvdDExID0gdjEuZG90KCB2MSApOworICAgICAgICAgICAgICAgIHZhciBkb3QxMiA9IHYx
LmRvdCggdjIgKTsKIAotICAgICAgICAvLyBidWlsZCBnZW9tZXRyeQorICAgICAgICAgICAgICAg
IHZhciBkZW5vbSA9ICggZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDEgKTsKIAotICAgICAg
ICB0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAn
cG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApOwot
ICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0
cmlidXRlKCBub3JtYWxzLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dics
IG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApOworICAgICAgICAgICAgICAg
IGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgZnVuY3Rpb24gYnVpbGRQ
bGFuZSggdSwgdiwgdywgdWRpciwgdmRpciwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGdyaWRYLCBn
cmlkWSwgbWF0ZXJpYWxJbmRleCApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuVHJpYW5nbGU6IC5nZXRCYXJ5Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVk
JyApOworICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAg
ICAgICAgICB2YXIgc2VnbWVudFdpZHRoID0gd2lkdGggLyBncmlkWDsKLSAgICAgICAgICAgIHZh
ciBzZWdtZW50SGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB2YXIgd2lkdGhIYWxmID0gd2lkdGggLyAyOwotICAgICAgICAgICAgdmFyIGhl
aWdodEhhbGYgPSBoZWlnaHQgLyAyOwotICAgICAgICAgICAgdmFyIGRlcHRoSGFsZiA9IGRlcHRo
IC8gMjsKKyAgICAgICAgICAgICAgICAvLyBjb2xsaW5lYXIgb3Igc2luZ3VsYXIgdHJpYW5nbGUK
KyAgICAgICAgICAgICAgICBpZiAoIGRlbm9tID09PSAwICkgewogCi0gICAgICAgICAgICB2YXIg
Z3JpZFgxID0gZ3JpZFggKyAxOwotICAgICAgICAgICAgdmFyIGdyaWRZMSA9IGdyaWRZICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgLy8gYXJiaXRyYXJ5IGxvY2F0aW9uIG91dHNpZGUgb2YgdHJp
YW5nbGU/CisgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGJl
c3QgaWRlYSwgbWF5YmUgc2hvdWxkIGJlIHJldHVybmluZyB1bmRlZmluZWQKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRhcmdldC5zZXQoIC0gMiwgLSAxLCAtIDEgKTsKIAotICAgICAgICAg
ICAgdmFyIHZlcnRleENvdW50ZXIgPSAwOwotICAgICAgICAgICAgdmFyIGdyb3VwQ291bnQgPSAw
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGl4LCBpeTsKKyAgICAgICAg
ICAgICAgICB2YXIgaW52RGVub20gPSAxIC8gZGVub207CisgICAgICAgICAgICAgICAgdmFyIHUg
PSAoIGRvdDExICogZG90MDIgLSBkb3QwMSAqIGRvdDEyICkgKiBpbnZEZW5vbTsKKyAgICAgICAg
ICAgICAgICB2YXIgdiA9ICggZG90MDAgKiBkb3QxMiAtIGRvdDAxICogZG90MDIgKSAqIGludkRl
bm9tOwogCi0gICAgICAgICAgICB2YXIgdmVjdG9yID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAg
ICAgICAgICAvLyBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBtdXN0IGFsd2F5cyBzdW0gdG8gMQor
ICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc2V0KCAxIC0gdSAtIHYsIHYsIHUgKTsKIAot
ICAgICAgICAgICAgLy8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2cworICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgZm9yICggaXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkgKysg
KSB7CisgICAgICAgIH0oKSwKIAotICAgICAgICAgICAgICAgIHZhciB5ID0gaXkgKiBzZWdtZW50
SGVpZ2h0IC0gaGVpZ2h0SGFsZjsKKyAgICAgICAgY29udGFpbnNQb2ludDogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICAgICAgZm9yICggaXggPSAwOyBpeCA8IGdyaWRYMTsgaXggKysgKSB7
CisgICAgICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAg
ICAgIHZhciB4ID0gaXggKiBzZWdtZW50V2lkdGggLSB3aWR0aEhhbGY7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gY29udGFpbnNQb2ludCggcG9pbnQsIGEsIGIsIGMgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlcyB0byBjb3JyZWN0IHZlY3RvciBjb21wb25lbnQK
KyAgICAgICAgICAgICAgICBUcmlhbmdsZS5nZXRCYXJ5Y29vcmQoIHBvaW50LCBhLCBiLCBjLCB2
MSApOwogCi0gICAgICAgICAgICAgICAgICAgIHZlY3RvclsgdSBdID0geCAqIHVkaXI7Ci0gICAg
ICAgICAgICAgICAgICAgIHZlY3RvclsgdiBdID0geSAqIHZkaXI7Ci0gICAgICAgICAgICAgICAg
ICAgIHZlY3RvclsgdyBdID0gZGVwdGhIYWxmOworICAgICAgICAgICAgICAgIHJldHVybiAoIHYx
LnggPj0gMCApICYmICggdjEueSA+PSAwICkgJiYgKCAoIHYxLnggKyB2MS55ICkgPD0gMSApOwog
Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vdyBhcHBseSB2ZWN0b3IgdG8gdmVydGV4IGJ1ZmZl
cgorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2
ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56ICk7CisgICAgICAgIH0oKQogCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHNldCB2YWx1ZXMgdG8gY29ycmVjdCB2ZWN0b3IgY29tcG9uZW50CisgICAg
fSApOwogCi0gICAgICAgICAgICAgICAgICAgIHZlY3RvclsgdSBdID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yWyB2IF0gPSAwOwotICAgICAgICAgICAgICAgICAgICB2ZWN0b3JbIHcg
XSA9IGRlcHRoID4gMCA/IDEgOiAtIDE7CisgICAgT2JqZWN0LmFzc2lnbiggVHJpYW5nbGUucHJv
dG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gbm93IGFwcGx5IHZlY3RvciB0byBu
b3JtYWwgYnVmZmVyCisgICAgICAgIHNldDogZnVuY3Rpb24gKCBhLCBiLCBjICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCggdmVjdG9yLngsIHZlY3Rvci55LCB2ZWN0b3Iu
eiApOworICAgICAgICAgICAgdGhpcy5hLmNvcHkoIGEgKTsKKyAgICAgICAgICAgIHRoaXMuYi5j
b3B5KCBiICk7CisgICAgICAgICAgICB0aGlzLmMuY29weSggYyApOwogCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHV2cworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAg
ICAgICAgdXZzLnB1c2goIGl4IC8gZ3JpZFggKTsKLSAgICAgICAgICAgICAgICAgICAgdXZzLnB1
c2goIDEgLSAoIGl5IC8gZ3JpZFkgKSApOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGNvdW50ZXJzCisgICAgICAgIHNldEZyb21Qb2ludHNBbmRJbmRpY2VzOiBmdW5jdGlv
biAoIHBvaW50cywgaTAsIGkxLCBpMiApIHsKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhD
b3VudGVyICs9IDE7CisgICAgICAgICAgICB0aGlzLmEuY29weSggcG9pbnRzWyBpMCBdICk7Cisg
ICAgICAgICAgICB0aGlzLmIuY29weSggcG9pbnRzWyBpMSBdICk7CisgICAgICAgICAgICB0aGlz
LmMuY29weSggcG9pbnRzWyBpMiBdICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAg
ICAvLyBpbmRpY2VzCisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAg
IC8vIDEuIHlvdSBuZWVkIHRocmVlIGluZGljZXMgdG8gZHJhdyBhIHNpbmdsZSBmYWNlCi0gICAg
ICAgICAgICAvLyAyLiBhIHNpbmdsZSBzZWdtZW50IGNvbnNpc3RzIG9mIHR3byBmYWNlcwotICAg
ICAgICAgICAgLy8gMy4gc28gd2UgbmVlZCB0byBnZW5lcmF0ZSBzaXggKDIqMykgaW5kaWNlcyBw
ZXIgc2VnbWVudAorICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29w
eSggdGhpcyApOwogCi0gICAgICAgICAgICBmb3IgKCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5ICsr
ICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgZm9yICggaXggPSAwOyBpeCA8IGdy
aWRYOyBpeCArKyApIHsKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCB0cmlhbmdsZSApIHsKIAot
ICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG51bWJlck9mVmVydGljZXMgKyBpeCArIGdyaWRY
MSAqIGl5OwotICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IG51bWJlck9mVmVydGljZXMgKyBp
eCArIGdyaWRYMSAqICggaXkgKyAxICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjID0gbnVt
YmVyT2ZWZXJ0aWNlcyArICggaXggKyAxICkgKyBncmlkWDEgKiAoIGl5ICsgMSApOwotICAgICAg
ICAgICAgICAgICAgICB2YXIgZCA9IG51bWJlck9mVmVydGljZXMgKyAoIGl4ICsgMSApICsgZ3Jp
ZFgxICogaXk7CisgICAgICAgICAgICB0aGlzLmEuY29weSggdHJpYW5nbGUuYSApOworICAgICAg
ICAgICAgdGhpcy5iLmNvcHkoIHRyaWFuZ2xlLmIgKTsKKyAgICAgICAgICAgIHRoaXMuYy5jb3B5
KCB0cmlhbmdsZS5jICk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFjZXMKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYSwg
YiwgZCApOwotICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTsKKyAg
ICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBjb3VudGVyCisgICAg
ICAgIGdldEFyZWE6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICBncm91cENv
dW50ICs9IDY7CisgICAgICAgICAgICB2YXIgdjAgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAg
ICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiBnZXRBcmVhKCkgewogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdjAuc3ViVmVjdG9ycyggdGhpcy5jLCB0aGlzLmIgKTsKKyAgICAgICAgICAgICAg
ICB2MS5zdWJWZWN0b3JzKCB0aGlzLmEsIHRoaXMuYiApOwogCi0gICAgICAgICAgICAvLyBhZGQg
YSBncm91cCB0byB0aGUgZ2VvbWV0cnkuIHRoaXMgd2lsbCBlbnN1cmUgbXVsdGkgbWF0ZXJpYWwg
c3VwcG9ydAorICAgICAgICAgICAgICAgIHJldHVybiB2MC5jcm9zcyggdjEgKS5sZW5ndGgoKSAq
IDAuNTsKIAotICAgICAgICAgICAgc2NvcGUuYWRkR3JvdXAoIGdyb3VwU3RhcnQsIGdyb3VwQ291
bnQsIG1hdGVyaWFsSW5kZXggKTsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIC8vIGNh
bGN1bGF0ZSBuZXcgc3RhcnQgdmFsdWUgZm9yIGdyb3VwcworICAgICAgICB9KCksCiAKLSAgICAg
ICAgICAgIGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3VudDsKKyAgICAgICAgZ2V0TWlkcG9pbnQ6IGZ1
bmN0aW9uICggdGFyZ2V0ICkgewogCi0gICAgICAgICAgICAvLyB1cGRhdGUgdG90YWwgbnVtYmVy
IG9mIHZlcnRpY2VzCisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewog
Ci0gICAgICAgICAgICBudW1iZXJPZlZlcnRpY2VzICs9IHZlcnRleENvdW50ZXI7CisgICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5nZXRNaWRwb2ludCgpIHRh
cmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZl
Y3RvcjMoKTsKIAotICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdGFyZ2V0LmFkZFZlY3RvcnMoIHRoaXMuYSwgdGhpcy5iICkuYWRkKCB0aGlzLmMg
KS5tdWx0aXBseVNjYWxhciggMSAvIDMgKTsKIAotICAgIEJveEJ1ZmZlckdlb21ldHJ5LnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIEJv
eEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJveEJ1ZmZlckdlb21ldHJ5
OworICAgICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8v
bXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20v
TXVnZW44NwotICAgICAqLworICAgICAgICBnZXROb3JtYWw6IGZ1bmN0aW9uICggdGFyZ2V0ICkg
ewogCi0gICAgLy8gUGxhbmVHZW9tZXRyeQorICAgICAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmdl
dE5vcm1hbCggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYywgdGFyZ2V0ICk7CiAKLSAgICBmdW5jdGlv
biBQbGFuZUdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdt
ZW50cyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7Cisg
ICAgICAgIGdldFBsYW5lOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgICAgICB0aGlzLnR5
cGUgPSAnUGxhbmVHZW9tZXRyeSc7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZp
bmVkICkgewogCi0gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHdpZHRo
OiB3aWR0aCwKLSAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAotICAgICAgICAgICAgd2lkdGhT
ZWdtZW50czogd2lkdGhTZWdtZW50cywKLSAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWln
aHRTZWdtZW50cwotICAgICAgICB9OworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLlRyaWFuZ2xlOiAuZ2V0UGxhbmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyApOworICAg
ICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgdGhpcy5mcm9t
QnVmZmVyR2VvbWV0cnkoIG5ldyBQbGFuZUJ1ZmZlckdlb21ldHJ5KCB3aWR0aCwgaGVpZ2h0LCB3
aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cyApICk7Ci0gICAgICAgIHRoaXMubWVyZ2VWZXJ0
aWNlcygpOworICAgICAgICAgICAgfQogCi0gICAgfQorICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dC5zZXRGcm9tQ29wbGFuYXJQb2ludHMoIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMgKTsKIAotICAg
IFBsYW5lR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90
eXBlICk7Ci0gICAgUGxhbmVHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbGFuZUdl
b21ldHJ5OworICAgICAgICB9LAogCi0gICAgLy8gUGxhbmVCdWZmZXJHZW9tZXRyeQorICAgICAg
ICBnZXRCYXJ5Y29vcmQ6IGZ1bmN0aW9uICggcG9pbnQsIHRhcmdldCApIHsKIAotICAgIGZ1bmN0
aW9uIFBsYW5lQnVmZmVyR2VvbWV0cnkoIHdpZHRoLCBoZWlnaHQsIHdpZHRoU2VnbWVudHMsIGhl
aWdodFNlZ21lbnRzICkgeworICAgICAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmdldEJhcnljb29y
ZCggcG9pbnQsIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIHRhcmdldCApOwogCi0gICAgICAgIEJ1
ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgfSwKIAotICAgICAgICB0aGlzLnR5
cGUgPSAnUGxhbmVCdWZmZXJHZW9tZXRyeSc7CisgICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0
aW9uICggcG9pbnQgKSB7CiAKLSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAg
ICAgd2lkdGg6IHdpZHRoLAotICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCi0gICAgICAgICAg
ICB3aWR0aFNlZ21lbnRzOiB3aWR0aFNlZ21lbnRzLAotICAgICAgICAgICAgaGVpZ2h0U2VnbWVu
dHM6IGhlaWdodFNlZ21lbnRzCi0gICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gVHJpYW5n
bGUuY29udGFpbnNQb2ludCggcG9pbnQsIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMgKTsKIAotICAg
ICAgICB2YXIgd2lkdGhfaGFsZiA9IHdpZHRoIC8gMjsKLSAgICAgICAgdmFyIGhlaWdodF9oYWxm
ID0gaGVpZ2h0IC8gMjsKKyAgICAgICAgfSwKIAotICAgICAgICB2YXIgZ3JpZFggPSBNYXRoLmZs
b29yKCB3aWR0aFNlZ21lbnRzICkgfHwgMTsKLSAgICAgICAgdmFyIGdyaWRZID0gTWF0aC5mbG9v
ciggaGVpZ2h0U2VnbWVudHMgKSB8fCAxOworICAgICAgICBpbnRlcnNlY3RzQm94OiBmdW5jdGlv
biAoIGJveCApIHsKIAotICAgICAgICB2YXIgZ3JpZFgxID0gZ3JpZFggKyAxOwotICAgICAgICB2
YXIgZ3JpZFkxID0gZ3JpZFkgKyAxOworICAgICAgICAgICAgcmV0dXJuIGJveC5pbnRlcnNlY3Rz
VHJpYW5nbGUoIHRoaXMgKTsKIAotICAgICAgICB2YXIgc2VnbWVudF93aWR0aCA9IHdpZHRoIC8g
Z3JpZFg7Ci0gICAgICAgIHZhciBzZWdtZW50X2hlaWdodCA9IGhlaWdodCAvIGdyaWRZOworICAg
ICAgICB9LAogCi0gICAgICAgIHZhciBpeCwgaXk7CisgICAgICAgIGNsb3Nlc3RQb2ludFRvUG9p
bnQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAvLyBidWZmZXJzCisgICAgICAgICAgICB2YXIg
cGxhbmUgPSBuZXcgUGxhbmUoKTsKKyAgICAgICAgICAgIHZhciBlZGdlTGlzdCA9IFsgbmV3IExp
bmUzKCksIG5ldyBMaW5lMygpLCBuZXcgTGluZTMoKSBdOworICAgICAgICAgICAgdmFyIHByb2pl
Y3RlZFBvaW50ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBjbG9zZXN0UG9pbnQg
PSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgIHZhciBpbmRpY2VzID0gW107Ci0gICAgICAgIHZh
ciB2ZXJ0aWNlcyA9IFtdOwotICAgICAgICB2YXIgbm9ybWFscyA9IFtdOwotICAgICAgICB2YXIg
dXZzID0gW107CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY2xvc2VzdFBvaW50VG9Qb2lu
dCggcG9pbnQsIHRhcmdldCApIHsKIAotICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9y
bWFscyBhbmQgdXZzCisgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICBmb3IgKCBpeSA9IDA7IGl5IDwgZ3JpZFkxOyBpeSArKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5jbG9zZXN0UG9p
bnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCcgKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgdmFyIHkgPSBpeSAqIHNl
Z21lbnRfaGVpZ2h0IC0gaGVpZ2h0X2hhbGY7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBmb3IgKCBpeCA9IDA7IGl4IDwgZ3JpZFgxOyBpeCArKyApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eTsKIAotICAgICAgICAgICAgICAgIHZhciB4ID0g
aXggKiBzZWdtZW50X3dpZHRoIC0gd2lkdGhfaGFsZjsKKyAgICAgICAgICAgICAgICAvLyBwcm9q
ZWN0IHRoZSBwb2ludCBvbnRvIHRoZSBwbGFuZSBvZiB0aGUgdHJpYW5nbGUKIAotICAgICAgICAg
ICAgICAgIHZlcnRpY2VzLnB1c2goIHgsIC0geSwgMCApOworICAgICAgICAgICAgICAgIHBsYW5l
LnNldEZyb21Db3BsYW5hclBvaW50cyggdGhpcy5hLCB0aGlzLmIsIHRoaXMuYyApOworICAgICAg
ICAgICAgICAgIHBsYW5lLnByb2plY3RQb2ludCggcG9pbnQsIHByb2plY3RlZFBvaW50ICk7CiAK
LSAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIDAsIDAsIDEgKTsKKyAgICAgICAgICAgICAg
ICAvLyBjaGVjayBpZiB0aGUgcHJvamVjdGlvbiBsaWVzIHdpdGhpbiB0aGUgdHJpYW5nbGUKIAot
ICAgICAgICAgICAgICAgIHV2cy5wdXNoKCBpeCAvIGdyaWRYICk7Ci0gICAgICAgICAgICAgICAg
dXZzLnB1c2goIDEgLSAoIGl5IC8gZ3JpZFkgKSApOworICAgICAgICAgICAgICAgIGlmICggdGhp
cy5jb250YWluc1BvaW50KCBwcm9qZWN0ZWRQb2ludCApID09PSB0cnVlICkgewogCi0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHNvLCB0aGlzIGlzIHRoZSBjbG9zZXN0
IHBvaW50CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuY29weSggcHJv
amVjdGVkUG9pbnQgKTsKIAotICAgICAgICAvLyBpbmRpY2VzCisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKIAotICAgICAgICBmb3IgKCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5ICsrICkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHRoZSBwb2ludCBmYWxscyBvdXRzaWRlIHRoZSB0
cmlhbmdsZS4gdGhlIHRhcmdldCBpcyB0aGUgY2xvc2VzdCBwb2ludCB0byB0aGUgdHJpYW5nbGUn
cyBlZGdlcyBvciB2ZXJ0aWNlcwogCi0gICAgICAgICAgICBmb3IgKCBpeCA9IDA7IGl4IDwgZ3Jp
ZFg7IGl4ICsrICkgeworICAgICAgICAgICAgICAgICAgICBlZGdlTGlzdFsgMCBdLnNldCggdGhp
cy5hLCB0aGlzLmIgKTsKKyAgICAgICAgICAgICAgICAgICAgZWRnZUxpc3RbIDEgXS5zZXQoIHRo
aXMuYiwgdGhpcy5jICk7CisgICAgICAgICAgICAgICAgICAgIGVkZ2VMaXN0WyAyIF0uc2V0KCB0
aGlzLmMsIHRoaXMuYSApOwogCi0gICAgICAgICAgICAgICAgdmFyIGEgPSBpeCArIGdyaWRYMSAq
IGl5OwotICAgICAgICAgICAgICAgIHZhciBiID0gaXggKyBncmlkWDEgKiAoIGl5ICsgMSApOwot
ICAgICAgICAgICAgICAgIHZhciBjID0gKCBpeCArIDEgKSArIGdyaWRYMSAqICggaXkgKyAxICk7
Ci0gICAgICAgICAgICAgICAgdmFyIGQgPSAoIGl4ICsgMSApICsgZ3JpZFgxICogaXk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGVkZ2VMaXN0Lmxlbmd0aDsgaSAr
KyApIHsKIAotICAgICAgICAgICAgICAgIC8vIGZhY2VzCisgICAgICAgICAgICAgICAgICAgICAg
ICBlZGdlTGlzdFsgaSBdLmNsb3Nlc3RQb2ludFRvUG9pbnQoIHByb2plY3RlZFBvaW50LCB0cnVl
LCBjbG9zZXN0UG9pbnQgKTsKIAotICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYSwgYiwg
ZCApOwotICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYiwgYywgZCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gcHJvamVjdGVkUG9pbnQuZGlzdGFuY2VUb1Nx
dWFyZWQoIGNsb3Nlc3RQb2ludCApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGRpc3RhbmNlIDwgbWluRGlzdGFuY2UgKSB7CiAKLSAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7CiAKLSAgICAg
ICAgLy8gYnVpbGQgZ2VvbWV0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQu
Y29weSggY2xvc2VzdFBvaW50ICk7CiAKLSAgICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyAp
OwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZm
ZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUo
ICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7Ci0g
ICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0
ZSggdXZzLCAyICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgUGxhbmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAgICBQbGFuZUJ1ZmZl
ckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsYW5lQnVmZmVyR2VvbWV0cnk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKworICAg
ICAgICAgICAgfTsKKworICAgICAgICB9KCksCisKKyAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAo
IHRyaWFuZ2xlICkgeworCisgICAgICAgICAgICByZXR1cm4gdHJpYW5nbGUuYS5lcXVhbHMoIHRo
aXMuYSApICYmIHRyaWFuZ2xlLmIuZXF1YWxzKCB0aGlzLmIgKSAmJiB0cmlhbmdsZS5jLmVxdWFs
cyggdGhpcy5jICk7CisKKyAgICAgICAgfQorCisgICAgfSApOwogCiAgICAgLyoqCiAgICAgICog
QGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KICAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqCi0gICAgICogcGFyYW1ldGVy
cyA9IHsKLSAgICAgKiAgY29sb3I6IDxoZXg+LAotICAgICAqICBvcGFjaXR5OiA8ZmxvYXQ+LAot
ICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICoKLSAgICAg
KiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICogIGxpZ2h0
TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+Ci0gICAgICoKLSAgICAgKiAgYW9NYXA6IG5ldyBUSFJFRS5U
ZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICogIGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+Ci0gICAg
ICoKLSAgICAgKiAgc3BlY3VsYXJNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0g
ICAgICoKLSAgICAgKiAgYWxwaGFNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0g
ICAgICoKLSAgICAgKiAgZW52TWFwOiBuZXcgVEhSRUUuVGV4dHVyZUN1YmUoIFtwb3N4LCBuZWd4
LCBwb3N5LCBuZWd5LCBwb3N6LCBuZWd6XSApLAotICAgICAqICBjb21iaW5lOiBUSFJFRS5NdWx0
aXBseSwKLSAgICAgKiAgcmVmbGVjdGl2aXR5OiA8ZmxvYXQ+LAotICAgICAqICByZWZyYWN0aW9u
UmF0aW86IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgc2hhZGluZzogVEhSRUUuU21vb3RoU2hh
ZGluZywKLSAgICAgKiAgZGVwdGhUZXN0OiA8Ym9vbD4sCi0gICAgICogIGRlcHRoV3JpdGU6IDxi
b29sPiwKLSAgICAgKgotICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKLSAgICAgKiAgd2ly
ZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LAotICAgICAqCi0gICAgICogIHNraW5uaW5nOiA8Ym9v
bD4sCi0gICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+Ci0gICAgICogfQorICAgICAqIEBhdXRo
b3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhvciBqb25v
YnIxIC8gaHR0cDovL2pvbm9icjEuY29tLwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gTWVzaEJh
c2ljTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7Ci0KLSAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhp
cyApOworICAgIGZ1bmN0aW9uIE1lc2goIGdlb21ldHJ5LCBtYXRlcmlhbCApIHsKIAotICAgICAg
ICB0aGlzLnR5cGUgPSAnTWVzaEJhc2ljTWF0ZXJpYWwnOworICAgICAgICBPYmplY3QzRC5jYWxs
KCB0aGlzICk7CiAKLSAgICAgICAgdGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTsg
Ly8gZW1pc3NpdmUKKyAgICAgICAgdGhpcy50eXBlID0gJ01lc2gnOwogCi0gICAgICAgIHRoaXMu
bWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5ICE9PSB1bmRlZmlu
ZWQgPyBnZW9tZXRyeSA6IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworICAgICAgICB0aGlzLm1hdGVy
aWFsID0gbWF0ZXJpYWwgIT09IHVuZGVmaW5lZCA/IG1hdGVyaWFsIDogbmV3IE1lc2hCYXNpY01h
dGVyaWFsKCB7IGNvbG9yOiBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmYgfSApOwogCi0gICAgICAg
IHRoaXMubGlnaHRNYXAgPSBudWxsOwotICAgICAgICB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0g
MS4wOworICAgICAgICB0aGlzLmRyYXdNb2RlID0gVHJpYW5nbGVzRHJhd01vZGU7CiAKLSAgICAg
ICAgdGhpcy5hb01hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7
CisgICAgICAgIHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCk7CiAKLSAgICAgICAgdGhpcy5zcGVj
dWxhck1hcCA9IG51bGw7CisgICAgfQogCi0gICAgICAgIHRoaXMuYWxwaGFNYXAgPSBudWxsOwor
ICAgIE1lc2gucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0
M0QucHJvdG90eXBlICksIHsKIAotICAgICAgICB0aGlzLmVudk1hcCA9IG51bGw7Ci0gICAgICAg
IHRoaXMuY29tYmluZSA9IE11bHRpcGx5T3BlcmF0aW9uOwotICAgICAgICB0aGlzLnJlZmxlY3Rp
dml0eSA9IDE7Ci0gICAgICAgIHRoaXMucmVmcmFjdGlvblJhdGlvID0gMC45ODsKKyAgICAgICAg
Y29uc3RydWN0b3I6IE1lc2gsCiAKLSAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBmYWxzZTsKLSAg
ICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxOwotICAgICAgICB0aGlzLndpcmVmcmFt
ZUxpbmVjYXAgPSAncm91bmQnOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3Jv
dW5kJzsKKyAgICAgICAgaXNNZXNoOiB0cnVlLAogCi0gICAgICAgIHRoaXMuc2tpbm5pbmcgPSBm
YWxzZTsKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBmYWxzZTsKKyAgICAgICAgc2V0RHJh
d01vZGU6IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgdGhpcy5saWdodHMgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHRoaXMuZHJhd01vZGUgPSB2YWx1ZTsKIAotICAgICAgICB0aGlzLnNl
dFZhbHVlcyggcGFyYW1ldGVycyApOworICAgICAgICB9LAogCi0gICAgfQorICAgICAgICBjb3B5
OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgIE1lc2hCYXNpY01hdGVyaWFsLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSApOwotICAgIE1lc2hCYXNpY01h
dGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hCYXNpY01hdGVyaWFsOworICAgICAg
ICAgICAgT2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CiAKLSAg
ICBNZXNoQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbCA9IHRydWU7
CisgICAgICAgICAgICB0aGlzLmRyYXdNb2RlID0gc291cmNlLmRyYXdNb2RlOwogCi0gICAgTWVz
aEJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAg
ICAgICAgICAgIGlmICggc291cmNlLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyAhPT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgIE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJj
ZSApOworICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0gc291cmNl
Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpOwogCi0gICAgICAgIHRoaXMuY29sb3IuY29w
eSggc291cmNlLmNvbG9yICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5tYXAgPSBz
b3VyY2UubWFwOworICAgICAgICAgICAgaWYgKCBzb3VyY2UubW9ycGhUYXJnZXREaWN0aW9uYXJ5
ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdGhpcy5saWdodE1hcCA9IHNvdXJjZS5saWdo
dE1hcDsKLSAgICAgICAgdGhpcy5saWdodE1hcEludGVuc2l0eSA9IHNvdXJjZS5saWdodE1hcElu
dGVuc2l0eTsKKyAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IE9i
amVjdC5hc3NpZ24oIHt9LCBzb3VyY2UubW9ycGhUYXJnZXREaWN0aW9uYXJ5ICk7CiAKLSAgICAg
ICAgdGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDsKLSAgICAgICAgdGhpcy5hb01hcEludGVuc2l0
eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlz
LnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwOworICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICAgICAgdGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDsKKyAgICAgICAg
fSwKIAotICAgICAgICB0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7Ci0gICAgICAgIHRoaXMu
Y29tYmluZSA9IHNvdXJjZS5jb21iaW5lOwotICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IHNv
dXJjZS5yZWZsZWN0aXZpdHk7Ci0gICAgICAgIHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNl
LnJlZnJhY3Rpb25SYXRpbzsKKyAgICAgICAgdXBkYXRlTW9ycGhUYXJnZXRzOiBmdW5jdGlvbiAo
KSB7CiAKLSAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lOwotICAgICAg
ICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7Ci0g
ICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwOwot
ICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2lu
OworICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTsKKyAgICAgICAgICAg
IHZhciBtLCBtbCwgbmFtZTsKIAotICAgICAgICB0aGlzLnNraW5uaW5nID0gc291cmNlLnNraW5u
aW5nOwotICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IHNvdXJjZS5tb3JwaFRhcmdldHM7Cisg
ICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7CiAKLSAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgdmFyIG1vcnBoQXR0cmlidXRlcyA9IGdlb21l
dHJ5Lm1vcnBoQXR0cmlidXRlczsKKyAgICAgICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5r
ZXlzKCBtb3JwaEF0dHJpYnV0ZXMgKTsKIAotICAgIH07CisgICAgICAgICAgICAgICAgaWYgKCBr
ZXlzLmxlbmd0aCA+IDAgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGJob3VzdG9uIC8g
aHR0cDovL2NsYXJhLmlvCi0gICAgICovCisgICAgICAgICAgICAgICAgICAgIHZhciBtb3JwaEF0
dHJpYnV0ZSA9IG1vcnBoQXR0cmlidXRlc1sga2V5c1sgMCBdIF07CiAKLSAgICBmdW5jdGlvbiBS
YXkoIG9yaWdpbiwgZGlyZWN0aW9uICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIG1vcnBo
QXR0cmlidXRlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdGhpcy5vcmlnaW4gPSAoIG9y
aWdpbiAhPT0gdW5kZWZpbmVkICkgPyBvcmlnaW4gOiBuZXcgVmVjdG9yMygpOwotICAgICAgICB0
aGlzLmRpcmVjdGlvbiA9ICggZGlyZWN0aW9uICE9PSB1bmRlZmluZWQgKSA/IGRpcmVjdGlvbiA6
IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0
SW5mbHVlbmNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdl
dERpY3Rpb25hcnkgPSB7fTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IG0gPSAwLCBtbCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgbSA8IG1sOyBtICsrICkgewogCi0g
ICAgT2JqZWN0LmFzc2lnbiggUmF5LnByb3RvdHlwZSwgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgPSBtb3JwaEF0dHJpYnV0ZVsgbSBdLm5hbWUgfHwgU3RyaW5nKCBtICk7CiAK
LSAgICAgICAgc2V0OiBmdW5jdGlvbiAoIG9yaWdpbiwgZGlyZWN0aW9uICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goIDAgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVsg
bmFtZSBdID0gbTsKIAotICAgICAgICAgICAgdGhpcy5vcmlnaW4uY29weSggb3JpZ2luICk7Ci0g
ICAgICAgICAgICB0aGlzLmRpcmVjdGlvbi5jb3B5KCBkaXJlY3Rpb24gKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBjbG9u
ZTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgcmV0
dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApOworICAgICAgICAgICAgICAg
IHZhciBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICBpZiAoIG1vcnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICYmIG1vcnBo
VGFyZ2V0cy5sZW5ndGggPiAwICkgewogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggcmF5ICkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyA9IFtdOwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IHt9OwogCi0g
ICAgICAgICAgICB0aGlzLm9yaWdpbi5jb3B5KCByYXkub3JpZ2luICk7Ci0gICAgICAgICAgICB0
aGlzLmRpcmVjdGlvbi5jb3B5KCByYXkuZGlyZWN0aW9uICk7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoIG0gPSAwLCBtbCA9IG1vcnBoVGFyZ2V0cy5sZW5ndGg7IG0gPCBtbDsgbSArKyApIHsK
IAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
ID0gbW9ycGhUYXJnZXRzWyBtIF0ubmFtZSB8fCBTdHJpbmcoIG0gKTsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgg
MCApOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlb
IG5hbWUgXSA9IG07CiAKLSAgICAgICAgYXQ6IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQg
KSB7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9w
dGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0LmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVsdGlwbHlTY2Fs
YXIoIHQgKS5hZGQoIHRoaXMub3JpZ2luICk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgfSwK
IAotICAgICAgICBsb29rQXQ6IGZ1bmN0aW9uICggdiApIHsKKyAgICAgICAgcmF5Y2FzdDogKCBm
dW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmNvcHkoIHYgKS5zdWIo
IHRoaXMub3JpZ2luICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICB2YXIgaW52ZXJzZU1hdHJp
eCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpOworICAg
ICAgICAgICAgdmFyIHNwaGVyZSA9IG5ldyBTcGhlcmUoKTsKIAotICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICB2YXIgdkEgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAg
dmFyIHZCID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2QyA9IG5ldyBWZWN0b3Iz
KCk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciB0ZW1wQSA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICB2YXIgdGVtcEIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFy
IHRlbXBDID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICByZWNhc3Q6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciB1dkEgPSBuZXcgVmVjdG9yMigpOworICAgICAgICAgICAgdmFyIHV2
QiA9IG5ldyBWZWN0b3IyKCk7CisgICAgICAgICAgICB2YXIgdXZDID0gbmV3IFZlY3RvcjIoKTsK
IAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBi
YXJ5Y29vcmQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24g
cmVjYXN0KCB0ICkgeworICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvblBvaW50ID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb25Qb2ludFdvcmxkID0gbmV3IFZl
Y3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luLmNvcHkoIHRoaXMuYXQoIHQs
IHYxICkgKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHV2SW50ZXJzZWN0aW9uKCBwb2ludCwgcDEs
IHAyLCBwMywgdXYxLCB1djIsIHV2MyApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICAgICAgICAgIFRyaWFuZ2xlLmdldEJhcnljb29yZCggcG9pbnQsIHAxLCBwMiwg
cDMsIGJhcnljb29yZCApOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHV2MS5t
dWx0aXBseVNjYWxhciggYmFyeWNvb3JkLnggKTsKKyAgICAgICAgICAgICAgICB1djIubXVsdGlw
bHlTY2FsYXIoIGJhcnljb29yZC55ICk7CisgICAgICAgICAgICAgICAgdXYzLm11bHRpcGx5U2Nh
bGFyKCBiYXJ5Y29vcmQueiApOwogCi0gICAgICAgIH0oKSwKKyAgICAgICAgICAgICAgICB1djEu
YWRkKCB1djIgKS5hZGQoIHV2MyApOwogCi0gICAgICAgIGNsb3Nlc3RQb2ludFRvUG9pbnQ6IGZ1
bmN0aW9uICggcG9pbnQsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIHJldHVy
biB1djEuY2xvbmUoKTsKIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0
IHx8IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICByZXN1bHQuc3ViVmVjdG9ycyggcG9pbnQs
IHRoaXMub3JpZ2luICk7Ci0gICAgICAgICAgICB2YXIgZGlyZWN0aW9uRGlzdGFuY2UgPSByZXN1
bHQuZG90KCB0aGlzLmRpcmVjdGlvbiApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIGRpcmVjdGlvbkRpc3RhbmNlIDwgMCApIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNr
SW50ZXJzZWN0aW9uKCBvYmplY3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgcEEsIHBCLCBw
QywgcG9pbnQgKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmNvcHkoIHRoaXMu
b3JpZ2luICk7CisgICAgICAgICAgICAgICAgdmFyIGludGVyc2VjdDsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB7CiAK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQuY29weSggdGhpcy5kaXJlY3Rpb24gKS5tdWx0aXBs
eVNjYWxhciggZGlyZWN0aW9uRGlzdGFuY2UgKS5hZGQoIHRoaXMub3JpZ2luICk7CisgICAgICAg
ICAgICAgICAgICAgIGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSggcEMsIHBCLCBw
QSwgdHJ1ZSwgcG9pbnQgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkgeworICAgICAg
ICAgICAgICAgICAgICBpbnRlcnNlY3QgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUoIHBBLCBwQiwg
cEMsIG1hdGVyaWFsLnNpZGUgIT09IERvdWJsZVNpZGUsIHBvaW50ICk7CiAKLSAgICAgICAgICAg
IHJldHVybiBNYXRoLnNxcnQoIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoIHBvaW50ICkgKTsKKyAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBpZiAoIGludGVy
c2VjdCA9PT0gbnVsbCApIHJldHVybiBudWxsOwogCi0gICAgICAgIGRpc3RhbmNlU3FUb1BvaW50
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5j
b3B5KCBwb2ludCApOworICAgICAgICAgICAgICAgIGludGVyc2VjdGlvblBvaW50V29ybGQuYXBw
bHlNYXRyaXg0KCBvYmplY3QubWF0cml4V29ybGQgKTsKIAotICAgICAgICAgICAgdmFyIHYxID0g
bmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIu
cmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBpbnRlcnNlY3Rpb25Qb2ludFdvcmxkICk7CiAKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBkaXN0YW5jZVNxVG9Qb2ludCggcG9pbnQgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBkaXN0YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4g
cmF5Y2FzdGVyLmZhciApIHJldHVybiBudWxsOwogCi0gICAgICAgICAgICAgICAgdmFyIGRpcmVj
dGlvbkRpc3RhbmNlID0gdjEuc3ViVmVjdG9ycyggcG9pbnQsIHRoaXMub3JpZ2luICkuZG90KCB0
aGlzLmRpcmVjdGlvbiApOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgcG9pbnQ6IGlu
dGVyc2VjdGlvblBvaW50V29ybGQuY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
OiBvYmplY3QKKyAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgLy8gcG9pbnQg
YmVoaW5kIHRoZSByYXkKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggZGly
ZWN0aW9uRGlzdGFuY2UgPCAwICkgeworICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tCdWZmZXJH
ZW9tZXRyeUludGVyc2VjdGlvbiggb2JqZWN0LCBtYXRlcmlhbCwgcmF5Y2FzdGVyLCByYXksIHBv
c2l0aW9uLCB1diwgYSwgYiwgYyApIHsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoIHBvaW50ICk7CisgICAgICAgICAgICAgICAgdkEu
ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGEgKTsKKyAgICAgICAgICAgICAgICB2Qi5m
cm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgYiApOworICAgICAgICAgICAgICAgIHZDLmZy
b21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBjICk7CiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGNoZWNrSW50ZXJzZWN0aW9uKCBvYmpl
Y3QsIG1hdGVyaWFsLCByYXljYXN0ZXIsIHJheSwgdkEsIHZCLCB2QywgaW50ZXJzZWN0aW9uUG9p
bnQgKTsKIAotICAgICAgICAgICAgICAgIHYxLmNvcHkoIHRoaXMuZGlyZWN0aW9uICkubXVsdGlw
bHlTY2FsYXIoIGRpcmVjdGlvbkRpc3RhbmNlICkuYWRkKCB0aGlzLm9yaWdpbiApOworICAgICAg
ICAgICAgICAgIGlmICggaW50ZXJzZWN0aW9uICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHYxLmRpc3RhbmNlVG9TcXVhcmVkKCBwb2ludCApOworICAgICAgICAgICAgICAgICAgICBpZiAo
IHV2ICkgewogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgdXZBLmZy
b21CdWZmZXJBdHRyaWJ1dGUoIHV2LCBhICk7CisgICAgICAgICAgICAgICAgICAgICAgICB1dkIu
ZnJvbUJ1ZmZlckF0dHJpYnV0ZSggdXYsIGIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHV2
Qy5mcm9tQnVmZmVyQXR0cmlidXRlKCB1diwgYyApOwogCi0gICAgICAgIH0oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi51diA9IHV2SW50ZXJzZWN0aW9uKCBpbnRlcnNl
Y3Rpb25Qb2ludCwgdkEsIHZCLCB2QywgdXZBLCB1dkIsIHV2QyApOwogCi0gICAgICAgIGRpc3Rh
bmNlU3FUb1NlZ21lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB2YXIgc2VnQ2VudGVyID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZh
ciBzZWdEaXIgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIGRpZmYgPSBuZXcgVmVj
dG9yMygpOworICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IG5ldyBGYWNlMyggYSwgYiwg
YyApOworICAgICAgICAgICAgICAgICAgICBUcmlhbmdsZS5nZXROb3JtYWwoIHZBLCB2QiwgdkMs
IGZhY2Uubm9ybWFsICk7CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBkaXN0YW5jZVNx
VG9TZWdtZW50KCB2MCwgdjEsIG9wdGlvbmFsUG9pbnRPblJheSwgb3B0aW9uYWxQb2ludE9uU2Vn
bWVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2UgPSBmYWNlOwog
Ci0gICAgICAgICAgICAgICAgLy8gZnJvbSBodHRwOi8vd3d3Lmdlb21ldHJpY3Rvb2xzLmNvbS9H
VEVuZ2luZS9JbmNsdWRlL01hdGhlbWF0aWNzL0d0ZURpc3RSYXlTZWdtZW50LmgKLSAgICAgICAg
ICAgICAgICAvLyBJdCByZXR1cm5zIHRoZSBtaW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcmF5IGFu
ZCB0aGUgc2VnbWVudAotICAgICAgICAgICAgICAgIC8vIGRlZmluZWQgYnkgdjAgYW5kIHYxCi0g
ICAgICAgICAgICAgICAgLy8gSXQgY2FuIGFsc28gc2V0IHR3byBvcHRpb25hbCB0YXJnZXRzIDoK
LSAgICAgICAgICAgICAgICAvLyAtIFRoZSBjbG9zZXN0IHBvaW50IG9uIHRoZSByYXkKLSAgICAg
ICAgICAgICAgICAvLyAtIFRoZSBjbG9zZXN0IHBvaW50IG9uIHRoZSBzZWdtZW50CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2VnQ2VudGVyLmNvcHkoIHYwICkuYWRkKCB2
MSApLm11bHRpcGx5U2NhbGFyKCAwLjUgKTsKLSAgICAgICAgICAgICAgICBzZWdEaXIuY29weSgg
djEgKS5zdWIoIHYwICkubm9ybWFsaXplKCk7Ci0gICAgICAgICAgICAgICAgZGlmZi5jb3B5KCB0
aGlzLm9yaWdpbiApLnN1Yiggc2VnQ2VudGVyICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlu
dGVyc2VjdGlvbjsKIAotICAgICAgICAgICAgICAgIHZhciBzZWdFeHRlbnQgPSB2MC5kaXN0YW5j
ZVRvKCB2MSApICogMC41OwotICAgICAgICAgICAgICAgIHZhciBhMDEgPSAtIHRoaXMuZGlyZWN0
aW9uLmRvdCggc2VnRGlyICk7Ci0gICAgICAgICAgICAgICAgdmFyIGIwID0gZGlmZi5kb3QoIHRo
aXMuZGlyZWN0aW9uICk7Ci0gICAgICAgICAgICAgICAgdmFyIGIxID0gLSBkaWZmLmRvdCggc2Vn
RGlyICk7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBkaWZmLmxlbmd0aFNxKCk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGRldCA9IE1hdGguYWJzKCAxIC0gYTAxICogYTAxICk7Ci0gICAgICAgICAg
ICAgICAgdmFyIHMwLCBzMSwgc3FyRGlzdCwgZXh0RGV0OworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgaWYgKCBkZXQgPiAwICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
IHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgcmF5IGFuZCBzZWdtZW50IGFyZSBub3QgcGFyYWxsZWwuCisgICAgICAgICAgICAg
ICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTsKKyAgICAgICAgICAgICAgICB2YXIgbWF0
ZXJpYWwgPSB0aGlzLm1hdGVyaWFsOworICAgICAgICAgICAgICAgIHZhciBtYXRyaXhXb3JsZCA9
IHRoaXMubWF0cml4V29ybGQ7CiAKLSAgICAgICAgICAgICAgICAgICAgczAgPSBhMDEgKiBiMSAt
IGIwOwotICAgICAgICAgICAgICAgICAgICBzMSA9IGEwMSAqIGIwIC0gYjE7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4dERldCA9IHNlZ0V4dGVudCAqIGRldDsKKyAgICAgICAgICAgICAgICBpZiAo
IG1hdGVyaWFsID09PSB1bmRlZmluZWQgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBzMCA+PSAwICkgeworICAgICAgICAgICAgICAgIC8vIENoZWNraW5nIGJvdW5kaW5nU3Bo
ZXJlIGRpc3RhbmNlIHRvIHJheQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMxID49
IC0gZXh0RGV0ICkgeworICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhl
cmUgPT09IG51bGwgKSBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggczEgPD0gZXh0RGV0ICkgeworICAgICAgICAgICAg
ICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSApOworICAgICAgICAgICAg
ICAgIHNwaGVyZS5hcHBseU1hdHJpeDQoIG1hdHJpeFdvcmxkICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVnaW9uIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTWluaW11bSBhdCBpbnRlcmlvciBwb2ludHMgb2YgcmF5IGFuZCBzZWdtZW50Lgor
ICAgICAgICAgICAgICAgIGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBzcGhl
cmUgKSA9PT0gZmFsc2UgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGludkRldCA9IDEgLyBkZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHMwICo9IGludkRldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgKj0gaW52
RGV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXJEaXN0ID0gczAgKiAoIHMw
ICsgYTAxICogczEgKyAyICogYjAgKSArIHMxICogKCBhMDEgKiBzMCArIHMxICsgMiAqIGIxICkg
KyBjOworICAgICAgICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGludmVyc2VNYXRyaXguZ2V0SW52ZXJzZSggbWF0cml4
V29ybGQgKTsKKyAgICAgICAgICAgICAgICByYXkuY29weSggcmF5Y2FzdGVyLnJheSApLmFwcGx5
TWF0cml4NCggaW52ZXJzZU1hdHJpeCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJlZ2lvbiAxCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgYm91bmRpbmdCb3ggYmVm
b3JlIGNvbnRpbnVpbmcKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHNl
Z0V4dGVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBNYXRoLm1heCgg
MCwgLSAoIGEwMSAqIHMxICsgYjAgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcXJEaXN0ID0gLSBzMCAqIHMwICsgczEgKiAoIHMxICsgMiAqIGIxICkgKyBjOworICAgICAg
ICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdCb3ggIT09IG51bGwgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggcmF5Lmlu
dGVyc2VjdHNCb3goIGdlb21ldHJ5LmJvdW5kaW5nQm94ICkgPT09IGZhbHNlICkgcmV0dXJuOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiA1CisgICAgICAgICAgICAgICAg
dmFyIGludGVyc2VjdGlvbjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gLSBz
ZWdFeHRlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBNYXRoLm1heCggMCwg
LSAoIGEwMSAqIHMxICsgYjAgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxckRp
c3QgPSAtIHMwICogczAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7CisgICAgICAgICAgICAg
ICAgaWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBhLCBiLCBjOworICAgICAgICAgICAg
ICAgICAgICB2YXIgaW5kZXggPSBnZW9tZXRyeS5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHV2ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwczsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGRyYXdSYW5nZSA9IGdlb21ldHJ5LmRyYXdSYW5nZTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGksIGosIGlsLCBqbDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwLCBncm91cE1h
dGVyaWFsOworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQsIGVuZDsKIAotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBu
dWxsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMxIDw9IC0gZXh0RGV0ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXhlZCBidWZmZXIgZ2VvbWV0cnkKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiA0CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICkgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzMCA9IE1hdGgubWF4KCAwLCAtICggLSBhMDEgKiBzZWdFeHRlbnQg
KyBiMCApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSAoIHMwID4gMCApID8g
LSBzZWdFeHRlbnQgOiBNYXRoLm1pbiggTWF0aC5tYXgoIC0gc2VnRXh0ZW50LCAtIGIxICksIHNl
Z0V4dGVudCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxckRpc3QgPSAtIHMwICog
czAgKyBzMSAqICggczEgKyAyICogYjEgKSArIGM7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDAsIGlsID0gZ3JvdXBzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzMSA8PSBleHREZXQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBzWyBpIF07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAu
bWF0ZXJpYWxJbmRleCBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaW9u
IDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1heCggZ3Jv
dXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQgPSBNYXRoLm1pbiggKCBncm91cC5zdGFydCArIGdyb3VwLmNvdW50ICksICggZHJh
d1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IE1hdGgu
bWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEgKSwgc2VnRXh0ZW50ICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3FyRGlzdCA9IHMxICogKCBzMSArIDIgKiBiMSApICsgYzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHN0YXJ0LCBqbCA9IGVu
ZDsgaiA8IGpsOyBqICs9IDMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gaW5kZXguZ2V0WCggaSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGluZGV4LmdldFgoIGkg
KyAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gaW5kZXguZ2V0
WCggaSArIDIgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lvbiAyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24gPSBjaGVja0J1
ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCB0aGlzLCBncm91cE1hdGVyaWFsLCByYXljYXN0ZXIs
IHJheSwgcG9zaXRpb24sIHV2LCBhLCBiLCBjICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzMCA9IE1hdGgubWF4KCAwLCAtICggYTAxICogc2VnRXh0ZW50ICsgYjAgKSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gKCBzMCA+IDAgKSA/IHNlZ0V4dGVudCA6IE1h
dGgubWluKCBNYXRoLm1heCggLSBzZWdFeHRlbnQsIC0gYjEgKSwgc2VnRXh0ZW50ICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3FyRGlzdCA9IC0gczAgKiBzMCArIHMxICogKCBzMSAr
IDIgKiBiMSApICsgYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aW50ZXJzZWN0aW9uICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1h
dGguZmxvb3IoIGkgLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1ZmZlciBz
ZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNl
Y3RzLnB1c2goIGludGVyc2VjdGlvbiApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICAvLyBSYXkgYW5kIHNlZ21lbnQgYXJlIHBhcmFsbGVsLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBzMSA9ICggYTAxID4gMCApID8gLSBz
ZWdFeHRlbnQgOiBzZWdFeHRlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHMwID0gTWF0aC5tYXgo
IDAsIC0gKCBhMDEgKiBzMSArIGIwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgc3FyRGlzdCA9
IC0gczAgKiBzMCArIHMxICogKCBzMSArIDIgKiBiMSApICsgYzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kID0gTWF0aC5taW4oIGluZGV4LmNvdW50LCAoIGRyYXdS
YW5nZS5zdGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IG9wdGlvbmFsUG9pbnRPblJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBpID0gc3RhcnQsIGlsID0gZW5kOyBpIDwgaWw7IGkgKz0gMyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICBvcHRpb25hbFBvaW50T25SYXkuY29weSggdGhpcy5kaXJlY3Rpb24gKS5tdWx0aXBs
eVNjYWxhciggczAgKS5hZGQoIHRoaXMub3JpZ2luICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGEgPSBpbmRleC5nZXRYKCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGIgPSBpbmRleC5nZXRYKCBpICsgMSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjID0gaW5kZXguZ2V0WCggaSArIDIgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJH
ZW9tZXRyeUludGVyc2VjdGlvbiggdGhpcywgbWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5LCBwb3Np
dGlvbiwgdXYsIGEsIGIsIGMgKTsKIAotICAgICAgICAgICAgICAgIGlmICggb3B0aW9uYWxQb2lu
dE9uU2VnbWVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRl
cnNlY3Rpb24gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxQb2ludE9uU2VnbWVu
dC5jb3B5KCBzZWdEaXIgKS5tdWx0aXBseVNjYWxhciggczEgKS5hZGQoIHNlZ0NlbnRlciApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRl
eCA9IE1hdGguZmxvb3IoIGkgLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRleGVkIGJ1
ZmZlciBzZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
c2VjdHMucHVzaCggaW50ZXJzZWN0aW9uICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBzcXJE
aXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgaW50
ZXJzZWN0U3BoZXJlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBu
b24taW5kZXhlZCBidWZmZXIgZ2VvbWV0cnkKIAotICAgICAgICAgICAgdmFyIHYxID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggbWF0
ZXJpYWwgKSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVyc2VjdFNwaGVy
ZSggc3BoZXJlLCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgaWwgPSBncm91cHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAg
ICAgICAgICAgICAgICB2MS5zdWJWZWN0b3JzKCBzcGhlcmUuY2VudGVyLCB0aGlzLm9yaWdpbiAp
OwotICAgICAgICAgICAgICAgIHZhciB0Y2EgPSB2MS5kb3QoIHRoaXMuZGlyZWN0aW9uICk7Ci0g
ICAgICAgICAgICAgICAgdmFyIGQyID0gdjEuZG90KCB2MSApIC0gdGNhICogdGNhOwotICAgICAg
ICAgICAgICAgIHZhciByYWRpdXMyID0gc3BoZXJlLnJhZGl1cyAqIHNwaGVyZS5yYWRpdXM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBzWyBpIF07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3Jv
dXAubWF0ZXJpYWxJbmRleCBdOwogCi0gICAgICAgICAgICAgICAgaWYgKCBkMiA+IHJhZGl1czIg
KSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBN
YXRoLm1heCggZ3JvdXAuc3RhcnQsIGRyYXdSYW5nZS5zdGFydCApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQgPSBNYXRoLm1pbiggKCBncm91cC5zdGFydCArIGdyb3VwLmNv
dW50ICksICggZHJhd1JhbmdlLnN0YXJ0ICsgZHJhd1JhbmdlLmNvdW50ICkgKTsKIAotICAgICAg
ICAgICAgICAgIHZhciB0aGMgPSBNYXRoLnNxcnQoIHJhZGl1czIgLSBkMiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gc3RhcnQsIGpsID0gZW5kOyBqIDwgamw7
IGogKz0gMyApIHsKIAotICAgICAgICAgICAgICAgIC8vIHQwID0gZmlyc3QgaW50ZXJzZWN0IHBv
aW50IC0gZW50cmFuY2Ugb24gZnJvbnQgb2Ygc3BoZXJlCi0gICAgICAgICAgICAgICAgdmFyIHQw
ID0gdGNhIC0gdGhjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGo7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gaiArIDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gaiArIDI7CiAKLSAgICAgICAgICAgICAg
ICAvLyB0MSA9IHNlY29uZCBpbnRlcnNlY3QgcG9pbnQgLSBleGl0IHBvaW50IG9uIGJhY2sgb2Yg
c3BoZXJlCi0gICAgICAgICAgICAgICAgdmFyIHQxID0gdGNhICsgdGhjOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRy
eUludGVyc2VjdGlvbiggdGhpcywgZ3JvdXBNYXRlcmlhbCwgcmF5Y2FzdGVyLCByYXksIHBvc2l0
aW9uLCB1diwgYSwgYiwgYyApOwogCi0gICAgICAgICAgICAgICAgLy8gdGVzdCB0byBzZWUgaWYg
Ym90aCB0MCBhbmQgdDEgYXJlIGJlaGluZCB0aGUgcmF5IC0gaWYgc28sIHJldHVybiBudWxsCi0g
ICAgICAgICAgICAgICAgaWYgKCB0MCA8IDAgJiYgdDEgPCAwICkgcmV0dXJuIG51bGw7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKIAot
ICAgICAgICAgICAgICAgIC8vIHRlc3QgdG8gc2VlIGlmIHQwIGlzIGJlaGluZCB0aGUgcmF5Ogot
ICAgICAgICAgICAgICAgIC8vIGlmIGl0IGlzLCB0aGUgcmF5IGlzIGluc2lkZSB0aGUgc3BoZXJl
LCBzbyByZXR1cm4gdGhlIHNlY29uZCBleGl0IHBvaW50IHNjYWxlZCBieSB0MSwKLSAgICAgICAg
ICAgICAgICAvLyBpbiBvcmRlciB0byBhbHdheXMgcmV0dXJuIGFuIGludGVyc2VjdCBwb2ludCB0
aGF0IGlzIGluIGZyb250IG9mIHRoZSByYXkuCi0gICAgICAgICAgICAgICAgaWYgKCB0MCA8IDAg
KSByZXR1cm4gdGhpcy5hdCggdDEsIG9wdGlvbmFsVGFyZ2V0ICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGguZmxv
b3IoIGkgLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBub24taW5kZXhlZCBidWZmZXIgc2Vt
YW50aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0
cy5wdXNoKCBpbnRlcnNlY3Rpb24gKTsKIAotICAgICAgICAgICAgICAgIC8vIGVsc2UgdDAgaXMg
aW4gZnJvbnQgb2YgdGhlIHJheSwgc28gcmV0dXJuIHRoZSBmaXJzdCBjb2xsaXNpb24gcG9pbnQg
c2NhbGVkIGJ5IHQwCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXQoIHQwLCBvcHRpb25h
bFRhcmdldCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
fSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBpbnRlcnNlY3Rz
U3BoZXJlOiBmdW5jdGlvbiAoIHNwaGVyZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCggc3BoZXJl
LmNlbnRlciApIDw9IHNwaGVyZS5yYWRpdXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnQgPSBNYXRoLm1heCggMCwgZHJhd1JhbmdlLnN0YXJ0ICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kID0gTWF0aC5taW4oIHBvc2l0aW9uLmNvdW50LCAoIGRyYXdSYW5nZS5z
dGFydCArIGRyYXdSYW5nZS5jb3VudCApICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCBpID0gc3RhcnQsIGlsID0gZW5kOyBpIDwgaWw7IGkgKz0gMyAp
IHsKIAotICAgICAgICBkaXN0YW5jZVRvUGxhbmU6IGZ1bmN0aW9uICggcGxhbmUgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMg
PSBpICsgMjsKIAotICAgICAgICAgICAgdmFyIGRlbm9taW5hdG9yID0gcGxhbmUubm9ybWFsLmRv
dCggdGhpcy5kaXJlY3Rpb24gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiggdGhpcywgbWF0ZXJp
YWwsIHJheWNhc3RlciwgcmF5LCBwb3NpdGlvbiwgdXYsIGEsIGIsIGMgKTsKIAotICAgICAgICAg
ICAgaWYgKCBkZW5vbWluYXRvciA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CiAKLSAgICAgICAgICAgICAgICAvLyBsaW5lIGlz
IGNvcGxhbmFyLCByZXR1cm4gb3JpZ2luCi0gICAgICAgICAgICAgICAgaWYgKCBwbGFuZS5kaXN0
YW5jZVRvUG9pbnQoIHRoaXMub3JpZ2luICkgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gTWF0aC5mbG9vciggaSAv
IDMgKTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIG5vbi1pbmRleGVkIGJ1ZmZlciBzZW1hbnRpY3MK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaCggaW50
ZXJzZWN0aW9uICk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBOdWxsIGlzIHByZWZlcmFi
bGUgdG8gdW5kZWZpbmVkIHNpbmNlIHVuZGVmaW5lZCBtZWFucy4uLi4gaXQgaXMgdW5kZWZpbmVk
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHZhciB0ID0gLSAoIHRoaXMub3JpZ2luLmRvdCggcGxhbmUubm9ybWFsICkgKyBwbGFuZS5jb25z
dGFudCApIC8gZGVub21pbmF0b3I7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZ2VvbWV0
cnkuaXNHZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSByYXkgbmV2
ZXIgaW50ZXJzZWN0cyB0aGUgcGxhbmUKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZ2QSwgZnZC
LCBmdkM7CisgICAgICAgICAgICAgICAgICAgIHZhciBpc011bHRpTWF0ZXJpYWwgPSBBcnJheS5p
c0FycmF5KCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICByZXR1cm4gdCA+PSAwID8gdCA6ICBu
dWxsOworICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNl
czsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2VzID0gZ2VvbWV0cnkuZmFjZXM7CisgICAg
ICAgICAgICAgICAgICAgIHZhciB1dnM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGZhY2VWZXJ0ZXhVdnMgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWyAwIF07CisgICAg
ICAgICAgICAgICAgICAgIGlmICggZmFjZVZlcnRleFV2cy5sZW5ndGggPiAwICkgdXZzID0gZmFj
ZVZlcnRleFV2czsKIAotICAgICAgICBpbnRlcnNlY3RQbGFuZTogZnVuY3Rpb24gKCBwbGFuZSwg
b3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBmID0gMCwg
ZmwgPSBmYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHsKIAotICAgICAgICAgICAgdmFyIHQg
PSB0aGlzLmRpc3RhbmNlVG9QbGFuZSggcGxhbmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBmYWNlID0gZmFjZXNbIGYgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWNl
TWF0ZXJpYWwgPSBpc011bHRpTWF0ZXJpYWwgPyBtYXRlcmlhbFsgZmFjZS5tYXRlcmlhbEluZGV4
IF0gOiBtYXRlcmlhbDsKIAotICAgICAgICAgICAgaWYgKCB0ID09PSBudWxsICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBmYWNlTWF0ZXJpYWwgPT09IHVuZGVmaW5lZCApIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmdkEgPSB2ZXJ0aWNlc1sgZmFjZS5hIF07CisgICAgICAgICAgICAgICAgICAgICAgICBm
dkIgPSB2ZXJ0aWNlc1sgZmFjZS5iIF07CisgICAgICAgICAgICAgICAgICAgICAgICBmdkMgPSB2
ZXJ0aWNlc1sgZmFjZS5jIF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZmFjZU1hdGVyaWFsLm1vcnBoVGFyZ2V0cyA9PT0gdHJ1ZSApIHsKIAotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYXQoIHQsIG9wdGlvbmFsVGFyZ2V0ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0cyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0czsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhJbmZsdWVuY2VzID0gdGhpcy5t
b3JwaFRhcmdldEluZmx1ZW5jZXM7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2QS5zZXQoIDAsIDAsIDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
Qi5zZXQoIDAsIDAsIDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Qy5zZXQoIDAs
IDAsIDAgKTsKIAotICAgICAgICBpbnRlcnNlY3RzUGxhbmU6IGZ1bmN0aW9uICggcGxhbmUgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHQgPSAwLCB0bCA9IG1vcnBo
VGFyZ2V0cy5sZW5ndGg7IHQgPCB0bDsgdCArKyApIHsKIAotICAgICAgICAgICAgLy8gY2hlY2sg
aWYgdGhlIHJheSBsaWVzIG9uIHRoZSBwbGFuZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgaW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzWyB0IF07CiAKLSAgICAg
ICAgICAgIHZhciBkaXN0VG9Qb2ludCA9IHBsYW5lLmRpc3RhbmNlVG9Qb2ludCggdGhpcy5vcmln
aW4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmZsdWVuY2UgPT09
IDAgKSBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKCBkaXN0VG9Qb2ludCA9PT0gMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldHMgPSBtb3JwaFRhcmdl
dHNbIHQgXS52ZXJ0aWNlczsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2QS5hZGRTY2FsZWRWZWN0b3IoIHRlbXBBLnN1YlZl
Y3RvcnMoIHRhcmdldHNbIGZhY2UuYSBdLCBmdkEgKSwgaW5mbHVlbmNlICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZCLmFkZFNjYWxlZFZlY3RvciggdGVtcEIuc3ViVmVjdG9y
cyggdGFyZ2V0c1sgZmFjZS5iIF0sIGZ2QiApLCBpbmZsdWVuY2UgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdkMuYWRkU2NhbGVkVmVjdG9yKCB0ZW1wQy5zdWJWZWN0b3JzKCB0
YXJnZXRzWyBmYWNlLmMgXSwgZnZDICksIGluZmx1ZW5jZSApOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgZGVub21pbmF0
b3IgPSBwbGFuZS5ub3JtYWwuZG90KCB0aGlzLmRpcmVjdGlvbiApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZBLmFkZCggZnZBICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dkIuYWRkKCBmdkIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Qy5hZGQoIGZ2QyAp
OwogCi0gICAgICAgICAgICBpZiAoIGRlbm9taW5hdG9yICogZGlzdFRvUG9pbnQgPCAwICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2QSA9IHZBOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ2QiA9IHZCOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2QyA9IHZD
OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlv
biA9IGNoZWNrSW50ZXJzZWN0aW9uKCB0aGlzLCBmYWNlTWF0ZXJpYWwsIHJheWNhc3RlciwgcmF5
LCBmdkEsIGZ2QiwgZnZDLCBpbnRlcnNlY3Rpb25Qb2ludCApOwogCi0gICAgICAgICAgICAvLyBy
YXkgb3JpZ2luIGlzIGJlaGluZCB0aGUgcGxhbmUgKGFuZCBpcyBwb2ludGluZyBiZWhpbmQgaXQp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKIAotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdXZz
ICYmIHV2c1sgZiBdICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB1dnNfZiA9IHV2c1sgZiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1dkEuY29weSggdXZzX2ZbIDAgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1dkIuY29weSggdXZzX2ZbIDEgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1dkMuY29weSggdXZzX2ZbIDIgXSApOwogCi0gICAgICAgIGludGVyc2VjdEJveDogZnVu
Y3Rpb24gKCBib3gsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3Rpb24udXYgPSB1dkludGVyc2VjdGlvbiggaW50ZXJzZWN0aW9uUG9p
bnQsIGZ2QSwgZnZCLCBmdkMsIHV2QSwgdXZCLCB1dkMgKTsKIAotICAgICAgICAgICAgdmFyIHRt
aW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGludmRpcnggPSAxIC8gdGhpcy5kaXJlY3Rp
b24ueCwKLSAgICAgICAgICAgICAgICBpbnZkaXJ5ID0gMSAvIHRoaXMuZGlyZWN0aW9uLnksCi0g
ICAgICAgICAgICAgICAgaW52ZGlyeiA9IDEgLyB0aGlzLmRpcmVjdGlvbi56OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gZjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goIGludGVyc2VjdGlvbiApOwogCi0gICAg
ICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW47CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICggaW52ZGlyeCA+PSAwICkgeworICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0bWluID0gKCBib3gubWluLnggLSBvcmlnaW4ueCAp
ICogaW52ZGlyeDsKLSAgICAgICAgICAgICAgICB0bWF4ID0gKCBib3gubWF4LnggLSBvcmlnaW4u
eCApICogaW52ZGlyeDsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgdG1pbiA9ICggYm94Lm1heC54IC0g
b3JpZ2luLnggKSAqIGludmRpcng7Ci0gICAgICAgICAgICAgICAgdG1heCA9ICggYm94Lm1pbi54
IC0gb3JpZ2luLnggKSAqIGludmRpcng7CisgICAgICAgIH0oKSApLAogCi0gICAgICAgICAgICB9
CisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGlmICggaW52ZGly
eSA+PSAwICkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlz
Lmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsICkuY29weSggdGhpcyApOwogCi0gICAgICAgICAgICAg
ICAgdHltaW4gPSAoIGJveC5taW4ueSAtIG9yaWdpbi55ICkgKiBpbnZkaXJ5OwotICAgICAgICAg
ICAgICAgIHR5bWF4ID0gKCBib3gubWF4LnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgIH0gKTsKIAotICAgICAgICAgICAgICAg
IHR5bWluID0gKCBib3gubWF4LnkgLSBvcmlnaW4ueSApICogaW52ZGlyeTsKLSAgICAgICAgICAg
ICAgICB0eW1heCA9ICggYm94Lm1pbi55IC0gb3JpZ2luLnkgKSAqIGludmRpcnk7CisgICAgLyoq
CisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAot
ICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIFdlYkdMQmFja2dyb3VuZCggcmVuZGVyZXIsIHN0
YXRlLCBvYmplY3RzLCBwcmVtdWx0aXBsaWVkQWxwaGEgKSB7CiAKLSAgICAgICAgICAgIGlmICgg
KCB0bWluID4gdHltYXggKSB8fCAoIHR5bWluID4gdG1heCApICkgcmV0dXJuIG51bGw7CisgICAg
ICAgIHZhciBjbGVhckNvbG9yID0gbmV3IENvbG9yKCAweDAwMDAwMCApOworICAgICAgICB2YXIg
Y2xlYXJBbHBoYSA9IDA7CiAKLSAgICAgICAgICAgIC8vIFRoZXNlIGxpbmVzIGFsc28gaGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHRtaW4gb3IgdG1heCBpcyBOYU4KLSAgICAgICAgICAgIC8vIChyZXN1
bHQgb2YgMCAqIEluZmluaXR5KS4geCAhPT0geCByZXR1cm5zIHRydWUgaWYgeCBpcyBOYU4KKyAg
ICAgICAgdmFyIHBsYW5lQ2FtZXJhLCBwbGFuZU1lc2g7CisgICAgICAgIHZhciBib3hNZXNoOwog
Ci0gICAgICAgICAgICBpZiAoIHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluICkgdG1pbiA9
IHR5bWluOworICAgICAgICBmdW5jdGlvbiByZW5kZXIoIHJlbmRlckxpc3QsIHNjZW5lLCBjYW1l
cmEsIGZvcmNlQ2xlYXIgKSB7CiAKLSAgICAgICAgICAgIGlmICggdHltYXggPCB0bWF4IHx8IHRt
YXggIT09IHRtYXggKSB0bWF4ID0gdHltYXg7CisgICAgICAgICAgICB2YXIgYmFja2dyb3VuZCA9
IHNjZW5lLmJhY2tncm91bmQ7CiAKLSAgICAgICAgICAgIGlmICggaW52ZGlyeiA+PSAwICkgewor
ICAgICAgICAgICAgaWYgKCBiYWNrZ3JvdW5kID09PSBudWxsICkgewogCi0gICAgICAgICAgICAg
ICAgdHptaW4gPSAoIGJveC5taW4ueiAtIG9yaWdpbi56ICkgKiBpbnZkaXJ6OwotICAgICAgICAg
ICAgICAgIHR6bWF4ID0gKCBib3gubWF4LnogLSBvcmlnaW4ueiApICogaW52ZGlyejsKKyAgICAg
ICAgICAgICAgICBzZXRDbGVhciggY2xlYXJDb2xvciwgY2xlYXJBbHBoYSApOwogCi0gICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIGlmICggYmFja2dyb3VuZCAmJiBiYWNr
Z3JvdW5kLmlzQ29sb3IgKSB7CiAKLSAgICAgICAgICAgICAgICB0em1pbiA9ICggYm94Lm1heC56
IC0gb3JpZ2luLnogKSAqIGludmRpcno7Ci0gICAgICAgICAgICAgICAgdHptYXggPSAoIGJveC5t
aW4ueiAtIG9yaWdpbi56ICkgKiBpbnZkaXJ6OworICAgICAgICAgICAgICAgIHNldENsZWFyKCBi
YWNrZ3JvdW5kLCAxICk7CisgICAgICAgICAgICAgICAgZm9yY2VDbGVhciA9IHRydWU7CiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCAoIHRtaW4gPiB0em1heCApIHx8ICggdHpt
aW4gPiB0bWF4ICkgKSByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKCB0em1pbiA+IHRt
aW4gfHwgdG1pbiAhPT0gdG1pbiApIHRtaW4gPSB0em1pbjsKLQotICAgICAgICAgICAgaWYgKCB0
em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCApIHRtYXggPSB0em1heDsKLQotICAgICAgICAg
ICAgLy9yZXR1cm4gcG9pbnQgY2xvc2VzdCB0byB0aGUgcmF5IChwb3NpdGl2ZSBzaWRlKQotCi0g
ICAgICAgICAgICBpZiAoIHRtYXggPCAwICkgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmF0KCB0bWluID49IDAgPyB0bWluIDogdG1heCwgb3B0aW9uYWxUYXJnZXQgKTsK
LQotICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCByZW5kZXJlci5hdXRvQ2xlYXIgfHwgZm9y
Y2VDbGVhciApIHsKIAotICAgICAgICBpbnRlcnNlY3RzQm94OiAoIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICByZW5kZXJlci5jbGVhciggcmVuZGVyZXIuYXV0b0NsZWFyQ29sb3IsIHJl
bmRlcmVyLmF1dG9DbGVhckRlcHRoLCByZW5kZXJlci5hdXRvQ2xlYXJTdGVuY2lsICk7CiAKLSAg
ICAgICAgICAgIHZhciB2ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludGVyc2VjdHNCb3goIGJveCApIHsKKyAgICAgICAgICAg
IGlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzQ3ViZVRleHR1cmUgKSB7CiAKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3goIGJveCwgdiApICE9PSBudWxsOwor
ICAgICAgICAgICAgICAgIGlmICggYm94TWVzaCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBib3hNZXNoID0gbmV3IE1lc2goCisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXcgQm94QnVmZmVyR2VvbWV0cnkoIDEsIDEsIDEgKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBTaGFkZXJNYXRlcmlhbCggeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaWZvcm1zOiBTaGFkZXJMaWIuY3ViZS51bmlmb3JtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IFNoYWRlckxpYi5jdWJlLnZlcnRleFNo
YWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogU2hhZGVy
TGliLmN1YmUuZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lk
ZTogQmFja1NpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0OiB0cnVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvZzogZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gKQorICAgICAgICAgICAgICAgICAgICApOwogCi0gICAgICAgIH0gKSgpLAorICAgICAgICAg
ICAgICAgICAgICBib3hNZXNoLmdlb21ldHJ5LnJlbW92ZUF0dHJpYnV0ZSggJ25vcm1hbCcgKTsK
KyAgICAgICAgICAgICAgICAgICAgYm94TWVzaC5nZW9tZXRyeS5yZW1vdmVBdHRyaWJ1dGUoICd1
dicgKTsKIAotICAgICAgICBpbnRlcnNlY3RUcmlhbmdsZTogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICBib3hNZXNoLm9uQmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKCByZW5kZXJl
ciwgc2NlbmUsIGNhbWVyYSApIHsKIAotICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
IG9yaWdpbiwgZWRnZXMsIGFuZCBub3JtYWwuCi0gICAgICAgICAgICB2YXIgZGlmZiA9IG5ldyBW
ZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgZWRnZTEgPSBuZXcgVmVjdG9yMygpOwotICAgICAg
ICAgICAgdmFyIGVkZ2UyID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBub3JtYWwg
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRyaXhXb3Js
ZC5jb3B5UG9zaXRpb24oIGNhbWVyYS5tYXRyaXhXb3JsZCApOwogCi0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gaW50ZXJzZWN0VHJpYW5nbGUoIGEsIGIsIGMsIGJhY2tmYWNlQ3VsbGluZywg
b3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAg
ICAgICAvLyBmcm9tIGh0dHA6Ly93d3cuZ2VvbWV0cmljdG9vbHMuY29tL0dURW5naW5lL0luY2x1
ZGUvTWF0aGVtYXRpY3MvR3RlSW50clJheTNUcmlhbmdsZTMuaAorICAgICAgICAgICAgICAgICAg
ICBvYmplY3RzLnVwZGF0ZSggYm94TWVzaCApOwogCi0gICAgICAgICAgICAgICAgZWRnZTEuc3Vi
VmVjdG9ycyggYiwgYSApOwotICAgICAgICAgICAgICAgIGVkZ2UyLnN1YlZlY3RvcnMoIGMsIGEg
KTsKLSAgICAgICAgICAgICAgICBub3JtYWwuY3Jvc3NWZWN0b3JzKCBlZGdlMSwgZWRnZTIgKTsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBTb2x2ZSBRICsgdCpEID0g
YjEqRTEgKyBiMipFMiAoUSA9IGtEaWZmLCBEID0gcmF5IGRpcmVjdGlvbiwKLSAgICAgICAgICAg
ICAgICAvLyBFMSA9IGtFZGdlMSwgRTIgPSBrRWRnZTIsIE4gPSBDcm9zcyhFMSxFMikpIGJ5Ci0g
ICAgICAgICAgICAgICAgLy8gICB8RG90KEQsTil8KmIxID0gc2lnbihEb3QoRCxOKSkqRG90KEQs
Q3Jvc3MoUSxFMikpCi0gICAgICAgICAgICAgICAgLy8gICB8RG90KEQsTil8KmIyID0gc2lnbihE
b3QoRCxOKSkqRG90KEQsQ3Jvc3MoRTEsUSkpCi0gICAgICAgICAgICAgICAgLy8gICB8RG90KEQs
Til8KnQgPSAtc2lnbihEb3QoRCxOKSkqRG90KFEsTikKLSAgICAgICAgICAgICAgICB2YXIgRGRO
ID0gdGhpcy5kaXJlY3Rpb24uZG90KCBub3JtYWwgKTsKLSAgICAgICAgICAgICAgICB2YXIgc2ln
bjsKKyAgICAgICAgICAgICAgICBib3hNZXNoLm1hdGVyaWFsLnVuaWZvcm1zLnRDdWJlLnZhbHVl
ID0gYmFja2dyb3VuZDsKIAotICAgICAgICAgICAgICAgIGlmICggRGROID4gMCApIHsKKyAgICAg
ICAgICAgICAgICByZW5kZXJMaXN0LnB1c2goIGJveE1lc2gsIGJveE1lc2guZ2VvbWV0cnksIGJv
eE1lc2gubWF0ZXJpYWwsIDAsIG51bGwgKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGJh
Y2tmYWNlQ3VsbGluZyApIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICBzaWduID0g
MTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc1Rl
eHR1cmUgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBEZE4gPCAwICkgeworICAg
ICAgICAgICAgICAgIGlmICggcGxhbmVDYW1lcmEgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBzaWduID0gLSAxOwotICAgICAgICAgICAgICAgICAgICBEZE4gPSAtIERk
TjsKKyAgICAgICAgICAgICAgICAgICAgcGxhbmVDYW1lcmEgPSBuZXcgT3J0aG9ncmFwaGljQ2Ft
ZXJhKCAtIDEsIDEsIDEsIC0gMSwgMCwgMSApOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcGxhbmVNZXNoID0gbmV3IE1lc2goCisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgUGxhbmVCdWZmZXJHZW9tZXRyeSggMiwgMiApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKCB7IGRlcHRoVGVzdDogZmFsc2UsIGRl
cHRoV3JpdGU6IGZhbHNlLCBmb2c6IGZhbHNlIH0gKQorICAgICAgICAgICAgICAgICAgICApOwog
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICBv
YmplY3RzLnVwZGF0ZSggcGxhbmVNZXNoICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBkaWZmLnN1YlZlY3RvcnMoIHRoaXMub3JpZ2luLCBhICk7Ci0gICAgICAgICAg
ICAgICAgdmFyIERkUXhFMiA9IHNpZ24gKiB0aGlzLmRpcmVjdGlvbi5kb3QoIGVkZ2UyLmNyb3Nz
VmVjdG9ycyggZGlmZiwgZWRnZTIgKSApOworICAgICAgICAgICAgICAgIHBsYW5lTWVzaC5tYXRl
cmlhbC5tYXAgPSBiYWNrZ3JvdW5kOwogCi0gICAgICAgICAgICAgICAgLy8gYjEgPCAwLCBubyBp
bnRlcnNlY3Rpb24KLSAgICAgICAgICAgICAgICBpZiAoIERkUXhFMiA8IDAgKSB7CisgICAgICAg
ICAgICAgICAgLy8gVE9ETyBQdXNoIHRoaXMgdG8gcmVuZGVyTGlzdAogCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlckJ1ZmZl
ckRpcmVjdCggcGxhbmVDYW1lcmEsIG51bGwsIHBsYW5lTWVzaC5nZW9tZXRyeSwgcGxhbmVNZXNo
Lm1hdGVyaWFsLCBwbGFuZU1lc2gsIG51bGwgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciBEZEUxeFEgPSBzaWduICogdGhpcy5kaXJl
Y3Rpb24uZG90KCBlZGdlMS5jcm9zcyggZGlmZiApICk7CisgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIC8vIGIyIDwgMCwgbm8gaW50ZXJzZWN0aW9uCi0gICAgICAgICAgICAgICAgaWYgKCBE
ZEUxeFEgPCAwICkgeworICAgICAgICBmdW5jdGlvbiBzZXRDbGVhciggY29sb3IsIGFscGhhICkg
ewogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgc3RhdGUu
YnVmZmVycy5jb2xvci5zZXRDbGVhciggY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgYWxwaGEs
IHByZW11bHRpcGxpZWRBbHBoYSApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAvLyBiMStiMiA+IDEsIG5vIGludGVyc2VjdGlvbgotICAgICAgICAg
ICAgICAgIGlmICggRGRReEUyICsgRGRFMXhRID4gRGROICkgeworICAgICAgICByZXR1cm4gewog
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgZ2V0Q2xlYXJD
b2xvcjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBjbGVhckNvbG9yOwogCi0gICAgICAgICAgICAgICAgLy8gTGluZSBpbnRlcnNlY3Rz
IHRyaWFuZ2xlLCBjaGVjayBpZiByYXkgZG9lcy4KLSAgICAgICAgICAgICAgICB2YXIgUWROID0g
LSBzaWduICogZGlmZi5kb3QoIG5vcm1hbCApOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IHNldENsZWFyQ29sb3I6IGZ1bmN0aW9uICggY29sb3IsIGFscGhhICkgewogCi0gICAgICAgICAg
ICAgICAgLy8gdCA8IDAsIG5vIGludGVyc2VjdGlvbgotICAgICAgICAgICAgICAgIGlmICggUWRO
IDwgMCApIHsKKyAgICAgICAgICAgICAgICBjbGVhckNvbG9yLnNldCggY29sb3IgKTsKKyAgICAg
ICAgICAgICAgICBjbGVhckFscGhhID0gYWxwaGEgIT09IHVuZGVmaW5lZCA/IGFscGhhIDogMTsK
KyAgICAgICAgICAgICAgICBzZXRDbGVhciggY2xlYXJDb2xvciwgY2xlYXJBbHBoYSApOwogCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIGdldENsZWFyQWxwaGE6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2xlYXJBbHBoYTsKIAotICAgICAgICAgICAgICAgIC8vIFJh
eSBpbnRlcnNlY3RzIHRyaWFuZ2xlLgotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0KCBR
ZE4gLyBEZE4sIG9wdGlvbmFsVGFyZ2V0ICk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
c2V0Q2xlYXJBbHBoYTogZnVuY3Rpb24gKCBhbHBoYSApIHsKIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICBjbGVhckFscGhhID0gYWxwaGE7CisgICAgICAgICAgICAgICAgc2V0Q2xl
YXIoIGNsZWFyQ29sb3IsIGNsZWFyQWxwaGEgKTsKIAotICAgICAgICB9KCksCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgcmVuZGVyOiByZW5kZXIKIAotICAgICAgICBhcHBseU1hdHJpeDQ6
IGZ1bmN0aW9uICggbWF0cml4NCApIHsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5v
cmlnaW4uYXBwbHlNYXRyaXg0KCBtYXRyaXg0ICk7Ci0gICAgICAgICAgICB0aGlzLmRpcmVjdGlv
bi50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeDQgKTsKKyAgICB9CiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCisgICAgICovCiAKLSAgICAgICAgfSwKKyAgICBmdW5jdGlvbiBXZWJHTEJ1ZmZlclJl
bmRlcmVyKCBnbCwgZXh0ZW5zaW9ucywgaW5mbyApIHsKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0
aW9uICggcmF5ICkgeworICAgICAgICB2YXIgbW9kZTsKIAotICAgICAgICAgICAgcmV0dXJuIHJh
eS5vcmlnaW4uZXF1YWxzKCB0aGlzLm9yaWdpbiApICYmIHJheS5kaXJlY3Rpb24uZXF1YWxzKCB0
aGlzLmRpcmVjdGlvbiApOworICAgICAgICBmdW5jdGlvbiBzZXRNb2RlKCB2YWx1ZSApIHsKKwor
ICAgICAgICAgICAgbW9kZSA9IHZhbHVlOwogCiAgICAgICAgIH0KIAotICAgIH0gKTsKKyAgICAg
ICAgZnVuY3Rpb24gcmVuZGVyKCBzdGFydCwgY291bnQgKSB7CiAKLSAgICAvKioKLSAgICAgKiBA
YXV0aG9yIGJob3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvCi0gICAgICovCisgICAgICAgICAgICBn
bC5kcmF3QXJyYXlzKCBtb2RlLCBzdGFydCwgY291bnQgKTsKIAotICAgIGZ1bmN0aW9uIExpbmUz
KCBzdGFydCwgZW5kICkgeworICAgICAgICAgICAgaW5mby51cGRhdGUoIGNvdW50LCBtb2RlICk7
CiAKLSAgICAgICAgdGhpcy5zdGFydCA9ICggc3RhcnQgIT09IHVuZGVmaW5lZCApID8gc3RhcnQg
OiBuZXcgVmVjdG9yMygpOwotICAgICAgICB0aGlzLmVuZCA9ICggZW5kICE9PSB1bmRlZmluZWQg
KSA/IGVuZCA6IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgZnVu
Y3Rpb24gcmVuZGVySW5zdGFuY2VzKCBnZW9tZXRyeSwgc3RhcnQsIGNvdW50ICkgewogCi0gICAg
T2JqZWN0LmFzc2lnbiggTGluZTMucHJvdG90eXBlLCB7CisgICAgICAgICAgICB2YXIgZXh0ZW5z
aW9uID0gZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApOwogCi0gICAg
ICAgIHNldDogZnVuY3Rpb24gKCBzdGFydCwgZW5kICkgeworICAgICAgICAgICAgaWYgKCBleHRl
bnNpb24gPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuc3RhcnQuY29weSggc3RhcnQg
KTsKLSAgICAgICAgICAgIHRoaXMuZW5kLmNvcHkoIGVuZCApOworICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0
YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNp
b24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4nICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB9LAor
ICAgICAgICAgICAgZXh0ZW5zaW9uLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSggbW9kZSwgc3Rh
cnQsIGNvdW50LCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCApOwogCi0gICAgICAgIGNsb25l
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpbmZvLnVwZGF0ZSggY291bnQsIG1vZGUsIGdl
b21ldHJ5Lm1heEluc3RhbmNlZENvdW50ICk7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhp
cy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgfQogCi0gICAgICAgIH0sCisg
ICAgICAgIC8vCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCBsaW5lICkgeworICAgICAgICB0
aGlzLnNldE1vZGUgPSBzZXRNb2RlOworICAgICAgICB0aGlzLnJlbmRlciA9IHJlbmRlcjsKKyAg
ICAgICAgdGhpcy5yZW5kZXJJbnN0YW5jZXMgPSByZW5kZXJJbnN0YW5jZXM7CiAKLSAgICAgICAg
ICAgIHRoaXMuc3RhcnQuY29weSggbGluZS5zdGFydCApOwotICAgICAgICAgICAgdGhpcy5lbmQu
Y29weSggbGluZS5lbmQgKTsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
IC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICov
CiAKLSAgICAgICAgfSwKKyAgICBmdW5jdGlvbiBXZWJHTENhcGFiaWxpdGllcyggZ2wsIGV4dGVu
c2lvbnMsIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoIG9w
dGlvbmFsVGFyZ2V0ICkgeworICAgICAgICB2YXIgbWF4QW5pc290cm9weTsKIAotICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LmFkZFZlY3RvcnMoIHRoaXMuc3RhcnQsIHRoaXMuZW5kICkubXVs
dGlwbHlTY2FsYXIoIDAuNSApOworICAgICAgICBmdW5jdGlvbiBnZXRNYXhBbmlzb3Ryb3B5KCkg
ewogCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIG1heEFuaXNvdHJvcHkgIT09IHVuZGVm
aW5lZCApIHJldHVybiBtYXhBbmlzb3Ryb3B5OwogCi0gICAgICAgIGRlbHRhOiBmdW5jdGlvbiAo
IG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lv
bnMuZ2V0KCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApOwogCi0gICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQuc3ViVmVjdG9ycyggdGhpcy5lbmQsIHRoaXMuc3RhcnQgKTsKKyAg
ICAgICAgICAgIGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkgewogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgbWF4QW5pc290cm9weSA9IGdsLmdldFBhcmFtZXRlciggZXh0ZW5zaW9uLk1B
WF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCApOwogCi0gICAgICAgIGRpc3RhbmNlU3E6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKCB0aGlzLmVuZCApOworICAgICAgICAgICAgICAg
IG1heEFuaXNvdHJvcHkgPSAwOwogCi0gICAgICAgIH0sCisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgZGlzdGFuY2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBtYXhBbmlzb3Ry
b3B5OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKCB0aGlzLmVu
ZCApOworICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24gZ2V0TWF4UHJl
Y2lzaW9uKCBwcmVjaXNpb24gKSB7CiAKLSAgICAgICAgYXQ6IGZ1bmN0aW9uICggdCwgb3B0aW9u
YWxUYXJnZXQgKSB7CisgICAgICAgICAgICBpZiAoIHByZWNpc2lvbiA9PT0gJ2hpZ2hwJyApIHsK
IAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3Iz
KCk7CisgICAgICAgICAgICAgICAgaWYgKCBnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoIGds
LlZFUlRFWF9TSEFERVIsIGdsLkhJR0hfRkxPQVQgKS5wcmVjaXNpb24gPiAwICYmCisgICAgICAg
ICAgICAgICAgICAgICBnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoIGdsLkZSQUdNRU5UX1NI
QURFUiwgZ2wuSElHSF9GTE9BVCApLnByZWNpc2lvbiA+IDAgKSB7CiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmRlbHRhKCByZXN1bHQgKS5tdWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy5z
dGFydCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpZ2hwJzsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBjbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1l
dGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gJ21lZGl1bXAn
OwogCi0gICAgICAgICAgICB2YXIgc3RhcnRQID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAg
IHZhciBzdGFydEVuZCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiBjbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKCBwb2ludCwg
Y2xhbXBUb0xpbmUgKSB7CisgICAgICAgICAgICBpZiAoIHByZWNpc2lvbiA9PT0gJ21lZGl1bXAn
ICkgewogCi0gICAgICAgICAgICAgICAgc3RhcnRQLnN1YlZlY3RvcnMoIHBvaW50LCB0aGlzLnN0
YXJ0ICk7Ci0gICAgICAgICAgICAgICAgc3RhcnRFbmQuc3ViVmVjdG9ycyggdGhpcy5lbmQsIHRo
aXMuc3RhcnQgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGdsLmdldFNoYWRlclByZWNpc2lvbkZv
cm1hdCggZ2wuVkVSVEVYX1NIQURFUiwgZ2wuTUVESVVNX0ZMT0FUICkucHJlY2lzaW9uID4gMCAm
JgorICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCBnbC5G
UkFHTUVOVF9TSEFERVIsIGdsLk1FRElVTV9GTE9BVCApLnByZWNpc2lvbiA+IDAgKSB7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgc3RhcnRFbmQyID0gc3RhcnRFbmQuZG90KCBzdGFydEVuZCApOwot
ICAgICAgICAgICAgICAgIHZhciBzdGFydEVuZF9zdGFydFAgPSBzdGFydEVuZC5kb3QoIHN0YXJ0
UCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ21lZGl1bXAnOwogCi0gICAgICAgICAg
ICAgICAgdmFyIHQgPSBzdGFydEVuZF9zdGFydFAgLyBzdGFydEVuZDI7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBjbGFtcFRvTGluZSApIHsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICB0ID0gX01hdGguY2xhbXAoIHQsIDAsIDEgKTsKKyAg
ICAgICAgICAgIHJldHVybiAnbG93cCc7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHJldHVybiB0OworICAgICAgICB2YXIgcHJlY2lzaW9uID0gcGFy
YW1ldGVycy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlY2lzaW9uIDog
J2hpZ2hwJzsKKyAgICAgICAgdmFyIG1heFByZWNpc2lvbiA9IGdldE1heFByZWNpc2lvbiggcHJl
Y2lzaW9uICk7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgIGlmICggbWF4UHJlY2lzaW9uICE9
PSBwcmVjaXNpb24gKSB7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuV2ViR0xSZW5kZXJlcjonLCBwcmVjaXNpb24sICdub3Qgc3VwcG9ydGVkLCB1c2lu
ZycsIG1heFByZWNpc2lvbiwgJ2luc3RlYWQuJyApOworICAgICAgICAgICAgcHJlY2lzaW9uID0g
bWF4UHJlY2lzaW9uOwogCi0gICAgICAgIGNsb3Nlc3RQb2ludFRvUG9pbnQ6IGZ1bmN0aW9uICgg
cG9pbnQsIGNsYW1wVG9MaW5lLCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICB2YXIgdCA9IHRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlciggcG9pbnQs
IGNsYW1wVG9MaW5lICk7CisgICAgICAgIHZhciBsb2dhcml0aG1pY0RlcHRoQnVmZmVyID0gcGFy
YW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyID09PSB0cnVlOwogCi0gICAgICAgICAgICB2
YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdmFy
IG1heFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklU
UyApOworICAgICAgICB2YXIgbWF4VmVydGV4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIGds
Lk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyApOworICAgICAgICB2YXIgbWF4VGV4dHVy
ZVNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLk1BWF9URVhUVVJFX1NJWkUgKTsKKyAgICAgICAg
dmFyIG1heEN1YmVtYXBTaXplID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRlbHRhKCByZXN1bHQgKS5t
dWx0aXBseVNjYWxhciggdCApLmFkZCggdGhpcy5zdGFydCApOworICAgICAgICB2YXIgbWF4QXR0
cmlidXRlcyA9IGdsLmdldFBhcmFtZXRlciggZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTICk7CisgICAg
ICAgIHZhciBtYXhWZXJ0ZXhVbmlmb3JtcyA9IGdsLmdldFBhcmFtZXRlciggZ2wuTUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlMgKTsKKyAgICAgICAgdmFyIG1heFZhcnlpbmdzID0gZ2wuZ2V0UGFy
YW1ldGVyKCBnbC5NQVhfVkFSWUlOR19WRUNUT1JTICk7CisgICAgICAgIHZhciBtYXhGcmFnbWVu
dFVuaWZvcm1zID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgdmFyIHZlcnRleFRleHR1cmVzID0gbWF4VmVy
dGV4VGV4dHVyZXMgPiAwOworICAgICAgICB2YXIgZmxvYXRGcmFnbWVudFRleHR1cmVzID0gISEg
ZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKTsKKyAgICAgICAgdmFyIGZsb2F0
VmVydGV4VGV4dHVyZXMgPSB2ZXJ0ZXhUZXh0dXJlcyAmJiBmbG9hdEZyYWdtZW50VGV4dHVyZXM7
CiAKLSAgICAgICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoIG1hdHJpeCApIHsKKyAgICAgICAg
cmV0dXJuIHsKIAotICAgICAgICAgICAgdGhpcy5zdGFydC5hcHBseU1hdHJpeDQoIG1hdHJpeCAp
OwotICAgICAgICAgICAgdGhpcy5lbmQuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsKKyAgICAgICAg
ICAgIGdldE1heEFuaXNvdHJvcHk6IGdldE1heEFuaXNvdHJvcHksCisgICAgICAgICAgICBnZXRN
YXhQcmVjaXNpb246IGdldE1heFByZWNpc2lvbiwKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICBwcmVjaXNpb246IHByZWNpc2lvbiwKKyAgICAgICAgICAgIGxvZ2FyaXRo
bWljRGVwdGhCdWZmZXI6IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIsCiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgIG1heFRleHR1cmVzOiBtYXhUZXh0dXJlcywKKyAgICAgICAgICAgIG1heFZlcnRl
eFRleHR1cmVzOiBtYXhWZXJ0ZXhUZXh0dXJlcywKKyAgICAgICAgICAgIG1heFRleHR1cmVTaXpl
OiBtYXhUZXh0dXJlU2l6ZSwKKyAgICAgICAgICAgIG1heEN1YmVtYXBTaXplOiBtYXhDdWJlbWFw
U2l6ZSwKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0aW9uICggbGluZSApIHsKKyAgICAgICAgICAg
IG1heEF0dHJpYnV0ZXM6IG1heEF0dHJpYnV0ZXMsCisgICAgICAgICAgICBtYXhWZXJ0ZXhVbmlm
b3JtczogbWF4VmVydGV4VW5pZm9ybXMsCisgICAgICAgICAgICBtYXhWYXJ5aW5nczogbWF4VmFy
eWluZ3MsCisgICAgICAgICAgICBtYXhGcmFnbWVudFVuaWZvcm1zOiBtYXhGcmFnbWVudFVuaWZv
cm1zLAogCi0gICAgICAgICAgICByZXR1cm4gbGluZS5zdGFydC5lcXVhbHMoIHRoaXMuc3RhcnQg
KSAmJiBsaW5lLmVuZC5lcXVhbHMoIHRoaXMuZW5kICk7CisgICAgICAgICAgICB2ZXJ0ZXhUZXh0
dXJlczogdmVydGV4VGV4dHVyZXMsCisgICAgICAgICAgICBmbG9hdEZyYWdtZW50VGV4dHVyZXM6
IGZsb2F0RnJhZ21lbnRUZXh0dXJlcywKKyAgICAgICAgICAgIGZsb2F0VmVydGV4VGV4dHVyZXM6
IGZsb2F0VmVydGV4VGV4dHVyZXMKIAotICAgICAgICB9CisgICAgICAgIH07CiAKLSAgICB9ICk7
CisgICAgfQogCiAgICAgLyoqCi0gICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFy
YS5pbwotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICog
QGF1dGhvciB0c2NodwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gVHJpYW5nbGUoIGEsIGIsIGMg
KSB7CisgICAgZnVuY3Rpb24gV2ViR0xDbGlwcGluZygpIHsKIAotICAgICAgICB0aGlzLmEgPSAo
IGEgIT09IHVuZGVmaW5lZCApID8gYSA6IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgIHRoaXMuYiA9
ICggYiAhPT0gdW5kZWZpbmVkICkgPyBiIDogbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgdGhpcy5j
ID0gKCBjICE9PSB1bmRlZmluZWQgKSA/IGMgOiBuZXcgVmVjdG9yMygpOworICAgICAgICB2YXIg
c2NvcGUgPSB0aGlzLAogCi0gICAgfQorICAgICAgICAgICAgZ2xvYmFsU3RhdGUgPSBudWxsLAor
ICAgICAgICAgICAgbnVtR2xvYmFsUGxhbmVzID0gMCwKKyAgICAgICAgICAgIGxvY2FsQ2xpcHBp
bmdFbmFibGVkID0gZmFsc2UsCisgICAgICAgICAgICByZW5kZXJpbmdTaGFkb3dzID0gZmFsc2Us
CiAKLSAgICBPYmplY3QuYXNzaWduKCBUcmlhbmdsZSwgeworICAgICAgICAgICAgcGxhbmUgPSBu
ZXcgUGxhbmUoKSwKKyAgICAgICAgICAgIHZpZXdOb3JtYWxNYXRyaXggPSBuZXcgTWF0cml4Mygp
LAogCi0gICAgICAgIG5vcm1hbDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdW5pZm9ybSA9
IHsgdmFsdWU6IG51bGwsIG5lZWRzVXBkYXRlOiBmYWxzZSB9OwogCi0gICAgICAgICAgICB2YXIg
djAgPSBuZXcgVmVjdG9yMygpOworICAgICAgICB0aGlzLnVuaWZvcm0gPSB1bmlmb3JtOworICAg
ICAgICB0aGlzLm51bVBsYW5lcyA9IDA7CisgICAgICAgIHRoaXMubnVtSW50ZXJzZWN0aW9uID0g
MDsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5vcm1hbCggYSwgYiwgYywgb3B0aW9u
YWxUYXJnZXQgKSB7CisgICAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uICggcGxhbmVzLCBlbmFi
bGVMb2NhbENsaXBwaW5nLCBjYW1lcmEgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBlbmFi
bGVkID0KKyAgICAgICAgICAgICAgICBwbGFuZXMubGVuZ3RoICE9PSAwIHx8CisgICAgICAgICAg
ICAgICAgZW5hYmxlTG9jYWxDbGlwcGluZyB8fAorICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBz
dGF0ZSBvZiBwcmV2aW91cyBmcmFtZSAtIHRoZSBjbGlwcGluZyBjb2RlIGhhcyB0bworICAgICAg
ICAgICAgICAgIC8vIHJ1biBhbm90aGVyIGZyYW1lIGluIG9yZGVyIHRvIHJlc2V0IHRoZSBzdGF0
ZToKKyAgICAgICAgICAgICAgICBudW1HbG9iYWxQbGFuZXMgIT09IDAgfHwKKyAgICAgICAgICAg
ICAgICBsb2NhbENsaXBwaW5nRW5hYmxlZDsKIAotICAgICAgICAgICAgICAgIHJlc3VsdC5zdWJW
ZWN0b3JzKCBjLCBiICk7Ci0gICAgICAgICAgICAgICAgdjAuc3ViVmVjdG9ycyggYSwgYiApOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC5jcm9zcyggdjAgKTsKKyAgICAgICAgICAgIGxvY2FsQ2xp
cHBpbmdFbmFibGVkID0gZW5hYmxlTG9jYWxDbGlwcGluZzsKIAotICAgICAgICAgICAgICAgIHZh
ciByZXN1bHRMZW5ndGhTcSA9IHJlc3VsdC5sZW5ndGhTcSgpOwotICAgICAgICAgICAgICAgIGlm
ICggcmVzdWx0TGVuZ3RoU3EgPiAwICkgeworICAgICAgICAgICAgZ2xvYmFsU3RhdGUgPSBwcm9q
ZWN0UGxhbmVzKCBwbGFuZXMsIGNhbWVyYSwgMCApOworICAgICAgICAgICAgbnVtR2xvYmFsUGxh
bmVzID0gcGxhbmVzLmxlbmd0aDsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
Lm11bHRpcGx5U2NhbGFyKCAxIC8gTWF0aC5zcXJ0KCByZXN1bHRMZW5ndGhTcSApICk7CisgICAg
ICAgICAgICByZXR1cm4gZW5hYmxlZDsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2V0KCAwLCAwLCAwICk7CisgICAgICAg
IHRoaXMuYmVnaW5TaGFkb3dzID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB9OworICAg
ICAgICAgICAgcmVuZGVyaW5nU2hhZG93cyA9IHRydWU7CisgICAgICAgICAgICBwcm9qZWN0UGxh
bmVzKCBudWxsICk7CiAKLSAgICAgICAgfSgpLAorICAgICAgICB9OwogCi0gICAgICAgIC8vIHN0
YXRpYy9pbnN0YW5jZSBtZXRob2QgdG8gY2FsY3VsYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVz
Ci0gICAgICAgIC8vIGJhc2VkIG9uOiBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9p
bnRpbnBvbHkvZGVmYXVsdC5odG1sCi0gICAgICAgIGJhcnljb29yZEZyb21Qb2ludDogZnVuY3Rp
b24gKCkgeworICAgICAgICB0aGlzLmVuZFNoYWRvd3MgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgIHZhciB2MCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgdjEgPSBuZXcg
VmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAg
ICAgIHJlbmRlcmluZ1NoYWRvd3MgPSBmYWxzZTsKKyAgICAgICAgICAgIHJlc2V0R2xvYmFsU3Rh
dGUoKTsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGJhcnljb29yZEZyb21Qb2ludCgg
cG9pbnQsIGEsIGIsIGMsIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgICAgICB9OwogCi0gICAgICAg
ICAgICAgICAgdjAuc3ViVmVjdG9ycyggYywgYSApOwotICAgICAgICAgICAgICAgIHYxLnN1YlZl
Y3RvcnMoIGIsIGEgKTsKLSAgICAgICAgICAgICAgICB2Mi5zdWJWZWN0b3JzKCBwb2ludCwgYSAp
OworICAgICAgICB0aGlzLnNldFN0YXRlID0gZnVuY3Rpb24gKCBwbGFuZXMsIGNsaXBJbnRlcnNl
Y3Rpb24sIGNsaXBTaGFkb3dzLCBjYW1lcmEsIGNhY2hlLCBmcm9tQ2FjaGUgKSB7CiAKLSAgICAg
ICAgICAgICAgICB2YXIgZG90MDAgPSB2MC5kb3QoIHYwICk7Ci0gICAgICAgICAgICAgICAgdmFy
IGRvdDAxID0gdjAuZG90KCB2MSApOwotICAgICAgICAgICAgICAgIHZhciBkb3QwMiA9IHYwLmRv
dCggdjIgKTsKLSAgICAgICAgICAgICAgICB2YXIgZG90MTEgPSB2MS5kb3QoIHYxICk7Ci0gICAg
ICAgICAgICAgICAgdmFyIGRvdDEyID0gdjEuZG90KCB2MiApOworICAgICAgICAgICAgaWYgKCAh
IGxvY2FsQ2xpcHBpbmdFbmFibGVkIHx8IHBsYW5lcyA9PT0gbnVsbCB8fCBwbGFuZXMubGVuZ3Ro
ID09PSAwIHx8IHJlbmRlcmluZ1NoYWRvd3MgJiYgISBjbGlwU2hhZG93cyApIHsKIAotICAgICAg
ICAgICAgICAgIHZhciBkZW5vbSA9ICggZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDEgKTsK
KyAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGxvY2FsIGNsaXBwaW5nCiAKLSAgICAgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIHJlbmRlcmluZ1NoYWRvd3MgKSB7CiAKLSAgICAgICAgICAgICAg
ICAvLyBjb2xsaW5lYXIgb3Igc2luZ3VsYXIgdHJpYW5nbGUKLSAgICAgICAgICAgICAgICBpZiAo
IGRlbm9tID09PSAwICkgeworICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGdsb2Jh
bCBjbGlwcGluZwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyYml0cmFyeSBsb2NhdGlvbiBv
dXRzaWRlIG9mIHRyaWFuZ2xlPwotICAgICAgICAgICAgICAgICAgICAvLyBub3Qgc3VyZSBpZiB0
aGlzIGlzIHRoZSBiZXN0IGlkZWEsIG1heWJlIHNob3VsZCBiZSByZXR1cm5pbmcgdW5kZWZpbmVk
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2V0KCAtIDIsIC0gMSwgLSAxICk7
CisgICAgICAgICAgICAgICAgICAgIHByb2plY3RQbGFuZXMoIG51bGwgKTsKIAotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgdmFy
IGludkRlbm9tID0gMSAvIGRlbm9tOwotICAgICAgICAgICAgICAgIHZhciB1ID0gKCBkb3QxMSAq
IGRvdDAyIC0gZG90MDEgKiBkb3QxMiApICogaW52RGVub207Ci0gICAgICAgICAgICAgICAgdmFy
IHYgPSAoIGRvdDAwICogZG90MTIgLSBkb3QwMSAqIGRvdDAyICkgKiBpbnZEZW5vbTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzZXRHbG9iYWxTdGF0ZSgpOwogCi0gICAgICAgICAgICAgICAgLy8g
YmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMgbXVzdCBhbHdheXMgc3VtIHRvIDEKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnNldCggMSAtIHUgLSB2LCB2LCB1ICk7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICB9
KCksCisgICAgICAgICAgICAgICAgdmFyIG5HbG9iYWwgPSByZW5kZXJpbmdTaGFkb3dzID8gMCA6
IG51bUdsb2JhbFBsYW5lcywKKyAgICAgICAgICAgICAgICAgICAgbEdsb2JhbCA9IG5HbG9iYWwg
KiA0LAogCi0gICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZHN0QXJyYXkgPSBjYWNoZS5jbGlwcGluZ1N0YXRlIHx8IG51bGw7CiAKLSAgICAg
ICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgdW5pZm9ybS52
YWx1ZSA9IGRzdEFycmF5OyAvLyBlbnN1cmUgdW5pcXVlIHN0YXRlCiAKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiBjb250YWluc1BvaW50KCBwb2ludCwgYSwgYiwgYyApIHsKKyAgICAgICAg
ICAgICAgICBkc3RBcnJheSA9IHByb2plY3RQbGFuZXMoIHBsYW5lcywgY2FtZXJhLCBsR2xvYmFs
LCBmcm9tQ2FjaGUgKTsKIAotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBUcmlhbmdsZS5i
YXJ5Y29vcmRGcm9tUG9pbnQoIHBvaW50LCBhLCBiLCBjLCB2MSApOworICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMDsgaSAhPT0gbEdsb2JhbDsgKysgaSApIHsKIAotICAgICAgICAgICAg
ICAgIHJldHVybiAoIHJlc3VsdC54ID49IDAgKSAmJiAoIHJlc3VsdC55ID49IDAgKSAmJiAoICgg
cmVzdWx0LnggKyByZXN1bHQueSApIDw9IDEgKTsKKyAgICAgICAgICAgICAgICAgICAgZHN0QXJy
YXlbIGkgXSA9IGdsb2JhbFN0YXRlWyBpIF07CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgIH0oKQorICAgICAgICAgICAgICAgIGNhY2hlLmNsaXBwaW5nU3Rh
dGUgPSBkc3RBcnJheTsKKyAgICAgICAgICAgICAgICB0aGlzLm51bUludGVyc2VjdGlvbiA9IGNs
aXBJbnRlcnNlY3Rpb24gPyB0aGlzLm51bVBsYW5lcyA6IDA7CisgICAgICAgICAgICAgICAgdGhp
cy5udW1QbGFuZXMgKz0gbkdsb2JhbDsKIAotICAgIH0gKTsKKyAgICAgICAgICAgIH0KIAotICAg
IE9iamVjdC5hc3NpZ24oIFRyaWFuZ2xlLnByb3RvdHlwZSwgewogCi0gICAgICAgIHNldDogZnVu
Y3Rpb24gKCBhLCBiLCBjICkgeworICAgICAgICB9OwogCi0gICAgICAgICAgICB0aGlzLmEuY29w
eSggYSApOwotICAgICAgICAgICAgdGhpcy5iLmNvcHkoIGIgKTsKLSAgICAgICAgICAgIHRoaXMu
Yy5jb3B5KCBjICk7CisgICAgICAgIGZ1bmN0aW9uIHJlc2V0R2xvYmFsU3RhdGUoKSB7CiAKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgaWYgKCB1bmlmb3JtLnZhbHVlICE9
PSBnbG9iYWxTdGF0ZSApIHsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHVuaWZvcm0u
dmFsdWUgPSBnbG9iYWxTdGF0ZTsKKyAgICAgICAgICAgICAgICB1bmlmb3JtLm5lZWRzVXBkYXRl
ID0gbnVtR2xvYmFsUGxhbmVzID4gMDsKIAotICAgICAgICBzZXRGcm9tUG9pbnRzQW5kSW5kaWNl
czogZnVuY3Rpb24gKCBwb2ludHMsIGkwLCBpMSwgaTIgKSB7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHRoaXMuYS5jb3B5KCBwb2ludHNbIGkwIF0gKTsKLSAgICAgICAgICAgIHRoaXMu
Yi5jb3B5KCBwb2ludHNbIGkxIF0gKTsKLSAgICAgICAgICAgIHRoaXMuYy5jb3B5KCBwb2ludHNb
IGkyIF0gKTsKKyAgICAgICAgICAgIHNjb3BlLm51bVBsYW5lcyA9IG51bUdsb2JhbFBsYW5lczsK
KyAgICAgICAgICAgIHNjb3BlLm51bUludGVyc2VjdGlvbiA9IDA7CiAKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24gcHJv
amVjdFBsYW5lcyggcGxhbmVzLCBjYW1lcmEsIGRzdE9mZnNldCwgc2tpcFRyYW5zZm9ybSApIHsK
IAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewotCi0gICAgICAgICAgICByZXR1cm4gbmV3
IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICB2YXIgblBsYW5l
cyA9IHBsYW5lcyAhPT0gbnVsbCA/IHBsYW5lcy5sZW5ndGggOiAwLAorICAgICAgICAgICAgICAg
IGRzdEFycmF5ID0gbnVsbDsKIAotICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCBuUGxhbmVz
ICE9PSAwICkgewogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggdHJpYW5nbGUgKSB7CisgICAg
ICAgICAgICAgICAgZHN0QXJyYXkgPSB1bmlmb3JtLnZhbHVlOwogCi0gICAgICAgICAgICB0aGlz
LmEuY29weSggdHJpYW5nbGUuYSApOwotICAgICAgICAgICAgdGhpcy5iLmNvcHkoIHRyaWFuZ2xl
LmIgKTsKLSAgICAgICAgICAgIHRoaXMuYy5jb3B5KCB0cmlhbmdsZS5jICk7CisgICAgICAgICAg
ICAgICAgaWYgKCBza2lwVHJhbnNmb3JtICE9PSB0cnVlIHx8IGRzdEFycmF5ID09PSBudWxsICkg
ewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZs
YXRTaXplID0gZHN0T2Zmc2V0ICsgblBsYW5lcyAqIDQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB2aWV3TWF0cml4ID0gY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZTsKIAotICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICB2aWV3Tm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCggdmll
d01hdHJpeCApOwogCi0gICAgICAgIGFyZWE6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBkc3RBcnJheSA9PT0gbnVsbCB8fCBkc3RBcnJheS5sZW5ndGggPCBmbGF0U2l6
ZSApIHsKIAotICAgICAgICAgICAgdmFyIHYwID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAg
IHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkc3RBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkoIGZsYXRTaXplICk7CiAKLSAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiBhcmVhKCkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICB2MC5zdWJWZWN0b3JzKCB0aGlzLmMsIHRoaXMuYiApOwotICAgICAgICAgICAgICAgIHYxLnN1
YlZlY3RvcnMoIHRoaXMuYSwgdGhpcy5iICk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgaTQgPSBkc3RPZmZzZXQ7IGkgIT09IG5QbGFuZXM7ICsrIGksIGk0ICs9IDQgKSB7
CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdjAuY3Jvc3MoIHYxICkubGVuZ3RoKCkgKiAwLjU7
CisgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZS5jb3B5KCBwbGFuZXNbIGkgXSApLmFwcGx5
TWF0cml4NCggdmlld01hdHJpeCwgdmlld05vcm1hbE1hdHJpeCApOwogCi0gICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUubm9ybWFsLnRvQXJyYXkoIGRzdEFycmF5
LCBpNCApOworICAgICAgICAgICAgICAgICAgICAgICAgZHN0QXJyYXlbIGk0ICsgMyBdID0gcGxh
bmUuY29uc3RhbnQ7CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgbWlkcG9pbnQ6IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3
IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkVmVjdG9ycyggdGhpcy5h
LCB0aGlzLmIgKS5hZGQoIHRoaXMuYyApLm11bHRpcGx5U2NhbGFyKCAxIC8gMyApOworICAgICAg
ICAgICAgICAgIHVuaWZvcm0udmFsdWUgPSBkc3RBcnJheTsKKyAgICAgICAgICAgICAgICB1bmlm
b3JtLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgfQogCi0g
ICAgICAgIG5vcm1hbDogZnVuY3Rpb24gKCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAgICAgICAg
IHNjb3BlLm51bVBsYW5lcyA9IG5QbGFuZXM7CiAKLSAgICAgICAgICAgIHJldHVybiBUcmlhbmds
ZS5ub3JtYWwoIHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIG9wdGlvbmFsVGFyZ2V0ICk7CisgICAg
ICAgICAgICByZXR1cm4gZHN0QXJyYXk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgfQogCi0gICAg
ICAgIHBsYW5lOiBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkgeworICAgIH0KIAotICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBQbGFuZSgpOworICAgIC8q
KgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCiAK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKCB0aGlzLmEs
IHRoaXMuYiwgdGhpcy5jICk7CisgICAgZnVuY3Rpb24gV2ViR0xFeHRlbnNpb25zKCBnbCApIHsK
IAotICAgICAgICB9LAorICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9OwogCi0gICAgICAgIGJh
cnljb29yZEZyb21Qb2ludDogZnVuY3Rpb24gKCBwb2ludCwgb3B0aW9uYWxUYXJnZXQgKSB7Cisg
ICAgICAgIHJldHVybiB7CiAKLSAgICAgICAgICAgIHJldHVybiBUcmlhbmdsZS5iYXJ5Y29vcmRG
cm9tUG9pbnQoIHBvaW50LCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5jLCBvcHRpb25hbFRhcmdldCAp
OworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoIG5hbWUgKSB7CiAKLSAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbnNbIG5hbWUgXSAhPT0gdW5kZWZpbmVkICkgewog
Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBleHRlbnNpb25zWyBuYW1lIF07CiAKLSAgICAgICAgICAgIHJldHVy
biBUcmlhbmdsZS5jb250YWluc1BvaW50KCBwb2ludCwgdGhpcy5hLCB0aGlzLmIsIHRoaXMuYyAp
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHZhciBl
eHRlbnNpb247CiAKLSAgICAgICAgY2xvc2VzdFBvaW50VG9Qb2ludDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoIG5hbWUgKSB7CiAKLSAgICAgICAgICAgIHZhciBwbGFu
ZSA9IG5ldyBQbGFuZSgpOwotICAgICAgICAgICAgdmFyIGVkZ2VMaXN0ID0gWyBuZXcgTGluZTMo
KSwgbmV3IExpbmUzKCksIG5ldyBMaW5lMygpIF07Ci0gICAgICAgICAgICB2YXIgcHJvamVjdGVk
UG9pbnQgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIGNsb3Nlc3RQb2ludCA9IG5l
dyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dFQkdMX2RlcHRoX3RleHR1
cmUnOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9u
KCAnV0VCR0xfZGVwdGhfdGV4dHVyZScgKSB8fCBnbC5nZXRFeHRlbnNpb24oICdNT1pfV0VCR0xf
ZGVwdGhfdGV4dHVyZScgKSB8fCBnbC5nZXRFeHRlbnNpb24oICdXRUJLSVRfV0VCR0xfZGVwdGhf
dGV4dHVyZScgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gY2xvc2VzdFBvaW50VG9Qb2ludCggcG9pbnQsIG9wdGlvbmFsVGFy
Z2V0ICkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMnOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0
ZW5zaW9uKCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyApIHx8IGdsLmdldEV4dGVu
c2lvbiggJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnICkgfHwgZ2wuZ2V0RXh0
ZW5zaW9uKCAnV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1p
bkRpc3RhbmNlID0gSW5maW5pdHk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dFQkdMX2Nv
bXByZXNzZWRfdGV4dHVyZV9zM3RjJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lv
biA9IGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApIHx8
IGdsLmdldEV4dGVuc2lvbiggJ01PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKSB8
fCBnbC5nZXRFeHRlbnNpb24oICdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMn
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIC8v
IHByb2plY3QgdGhlIHBvaW50IG9udG8gdGhlIHBsYW5lIG9mIHRoZSB0cmlhbmdsZQorICAgICAg
ICAgICAgICAgICAgICBjYXNlICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ1dFQktJVF9X
RUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgICAgIHBsYW5lLnNldEZyb21Db3BsYW5hclBvaW50cygg
dGhpcy5hLCB0aGlzLmIsIHRoaXMuYyApOwotICAgICAgICAgICAgICAgIHBsYW5lLnByb2plY3RQ
b2ludCggcG9pbnQsIHByb2plY3RlZFBvaW50ICk7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24o
IG5hbWUgKTsKIAotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBwcm9qZWN0aW9uIGxp
ZXMgd2l0aGluIHRoZSB0cmlhbmdsZQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmKCB0aGlzLmNvbnRhaW5zUG9pbnQoIHByb2plY3RlZFBvaW50ICkgPT09IHRydWUgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBleHRlbnNpb24gPT09IG51bGwgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gaWYgc28sIHRoaXMgaXMgdGhlIGNsb3Nlc3QgcG9pbnQKKyAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogJyArIG5hbWUg
KyAnIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLicgKTsKIAotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuY29weSggcHJvamVjdGVkUG9pbnQgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNbIG5hbWUgXSA9
IGV4dGVuc2lvbjsKIAotICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHRoZSBwb2ludCBm
YWxscyBvdXRzaWRlIHRoZSB0cmlhbmdsZS4gdGhlIHJlc3VsdCBpcyB0aGUgY2xvc2VzdCBwb2lu
dCB0byB0aGUgdHJpYW5nbGUncyBlZGdlcyBvciB2ZXJ0aWNlcworICAgICAgICAgICAgICAgIHJl
dHVybiBleHRlbnNpb247CiAKLSAgICAgICAgICAgICAgICAgICAgZWRnZUxpc3RbIDAgXS5zZXQo
IHRoaXMuYSwgdGhpcy5iICk7Ci0gICAgICAgICAgICAgICAgICAgIGVkZ2VMaXN0WyAxIF0uc2V0
KCB0aGlzLmIsIHRoaXMuYyApOwotICAgICAgICAgICAgICAgICAgICBlZGdlTGlzdFsgMiBdLnNl
dCggdGhpcy5jLCB0aGlzLmEgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICBmb3IoIHZhciBpID0gMDsgaSA8IGVkZ2VMaXN0Lmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAg
fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZUxpc3RbIGkgXS5jbG9zZXN0UG9pbnRU
b1BvaW50KCBwcm9qZWN0ZWRQb2ludCwgdHJ1ZSwgY2xvc2VzdFBvaW50ICk7CisgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBwcm9qZWN0ZWRQb2ludC5kaXN0
YW5jZVRvU3F1YXJlZCggY2xvc2VzdFBvaW50ICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoIGRpc3RhbmNlIDwgbWluRGlzdGFuY2UgKSB7CisgICAgZnVuY3Rpb24gV2ViR0xH
ZW9tZXRyaWVzKCBnbCwgYXR0cmlidXRlcywgaW5mbyApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgIHZhciBnZW9tZXRyaWVz
ID0ge307CisgICAgICAgIHZhciB3aXJlZnJhbWVBdHRyaWJ1dGVzID0ge307CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuY29weSggY2xvc2VzdFBvaW50ICk7CisgICAgICAg
IGZ1bmN0aW9uIG9uR2VvbWV0cnlEaXNwb3NlKCBldmVudCApIHsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gZXZlbnQudGFyZ2V0OworICAg
ICAgICAgICAgdmFyIGJ1ZmZlcmdlb21ldHJ5ID0gZ2VvbWV0cmllc1sgZ2VvbWV0cnkuaWQgXTsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGJ1ZmZlcmdlb21ldHJ5
LmluZGV4ICE9PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZXMucmVtb3ZlKCBidWZmZXJnZW9tZXRyeS5pbmRleCApOwogCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIGJ1ZmZlcmdlb21ldHJ5LmF0dHJpYnV0ZXMgKSB7
CiAKLSAgICAgICAgfSgpLAorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucmVtb3ZlKCBidWZm
ZXJnZW9tZXRyeS5hdHRyaWJ1dGVzWyBuYW1lIF0gKTsKIAotICAgICAgICBlcXVhbHM6IGZ1bmN0
aW9uICggdHJpYW5nbGUgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB0
cmlhbmdsZS5hLmVxdWFscyggdGhpcy5hICkgJiYgdHJpYW5nbGUuYi5lcXVhbHMoIHRoaXMuYiAp
ICYmIHRyaWFuZ2xlLmMuZXF1YWxzKCB0aGlzLmMgKTsKKyAgICAgICAgICAgIGdlb21ldHJ5LnJl
bW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25HZW9tZXRyeURpc3Bvc2UgKTsKIAotICAg
ICAgICB9CisgICAgICAgICAgICBkZWxldGUgZ2VvbWV0cmllc1sgZ2VvbWV0cnkuaWQgXTsKIAot
ICAgIH0gKTsKKyAgICAgICAgICAgIC8vIFRPRE8gUmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCiAKLSAg
ICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAq
IEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1
dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KLSAgICAgKiBAYXV0aG9yIGpv
bm9icjEgLyBodHRwOi8vam9ub2JyMS5jb20vCi0gICAgICovCisgICAgICAgICAgICB2YXIgYXR0
cmlidXRlID0gd2lyZWZyYW1lQXR0cmlidXRlc1sgZ2VvbWV0cnkuaWQgXTsKIAotICAgIGZ1bmN0
aW9uIE1lc2goIGdlb21ldHJ5LCBtYXRlcmlhbCApIHsKKyAgICAgICAgICAgIGlmICggYXR0cmli
dXRlICkgewogCi0gICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzLnJlbW92ZSggYXR0cmlidXRlICk7CisgICAgICAgICAgICAgICAgZGVsZXRl
IHdpcmVmcmFtZUF0dHJpYnV0ZXNbIGdlb21ldHJ5LmlkIF07CiAKLSAgICAgICAgdGhpcy50eXBl
ID0gJ01lc2gnOworICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuZ2VvbWV0cnkgPSBnZW9t
ZXRyeSAhPT0gdW5kZWZpbmVkID8gZ2VvbWV0cnkgOiBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKLSAg
ICAgICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsICE9PSB1bmRlZmluZWQgPyBtYXRlcmlhbCA6
IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZm
IH0gKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSA9IHdpcmVmcmFtZUF0dHJpYnV0ZXNbIGJ1ZmZl
cmdlb21ldHJ5LmlkIF07CiAKLSAgICAgICAgdGhpcy5kcmF3TW9kZSA9IFRyaWFuZ2xlc0RyYXdN
b2RlOworICAgICAgICAgICAgaWYgKCBhdHRyaWJ1dGUgKSB7CiAKLSAgICAgICAgdGhpcy51cGRh
dGVNb3JwaFRhcmdldHMoKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlbW92ZSggYXR0
cmlidXRlICk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHdpcmVmcmFtZUF0dHJpYnV0ZXNbIGJ1
ZmZlcmdlb21ldHJ5LmlkIF07CiAKLSAgICB9CisgICAgICAgICAgICB9CiAKLSAgICBNZXNoLnBy
b3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIE9iamVjdDNELnByb3RvdHlw
ZSApLCB7CisgICAgICAgICAgICAvLwogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBNZXNoLAorICAg
ICAgICAgICAgaW5mby5tZW1vcnkuZ2VvbWV0cmllcyAtLTsKIAotICAgICAgICBpc01lc2g6IHRy
dWUsCisgICAgICAgIH0KIAotICAgICAgICBzZXREcmF3TW9kZTogZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKKyAgICAgICAgZnVuY3Rpb24gZ2V0KCBvYmplY3QsIGdlb21ldHJ5ICkgewogCi0gICAgICAg
ICAgICB0aGlzLmRyYXdNb2RlID0gdmFsdWU7CisgICAgICAgICAgICB2YXIgYnVmZmVyZ2VvbWV0
cnkgPSBnZW9tZXRyaWVzWyBnZW9tZXRyeS5pZCBdOwogCi0gICAgICAgIH0sCisgICAgICAgICAg
ICBpZiAoIGJ1ZmZlcmdlb21ldHJ5ICkgcmV0dXJuIGJ1ZmZlcmdlb21ldHJ5OwogCi0gICAgICAg
IGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICAgICAgZ2VvbWV0cnkuYWRkRXZl
bnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvbkdlb21ldHJ5RGlzcG9zZSApOwogCi0gICAgICAgICAg
ICBPYmplY3QzRC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAg
ICAgIGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgdGhp
cy5kcmF3TW9kZSA9IHNvdXJjZS5kcmF3TW9kZTsKKyAgICAgICAgICAgICAgICBidWZmZXJnZW9t
ZXRyeSA9IGdlb21ldHJ5OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBpZiAoIGdlb21ldHJ5Ll9idWZmZXJHZW9tZXRyeSA9PT0gdW5kZWZpbmVkICkg
ewogCi0gICAgICAgIHVwZGF0ZU1vcnBoVGFyZ2V0czogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgICAgICBnZW9tZXRyeS5fYnVmZmVyR2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnko
KS5zZXRGcm9tT2JqZWN0KCBvYmplY3QgKTsKIAotICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0g
dGhpcy5nZW9tZXRyeTsKLSAgICAgICAgICAgIHZhciBtLCBtbCwgbmFtZTsKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsK
KyAgICAgICAgICAgICAgICBidWZmZXJnZW9tZXRyeSA9IGdlb21ldHJ5Ll9idWZmZXJHZW9tZXRy
eTsKIAotICAgICAgICAgICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3Jw
aEF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyggbW9y
cGhBdHRyaWJ1dGVzICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGtl
eXMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgIGdlb21ldHJpZXNbIGdlb21ldHJ5LmlkIF0g
PSBidWZmZXJnZW9tZXRyeTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhBdHRyaWJ1
dGUgPSBtb3JwaEF0dHJpYnV0ZXNbIGtleXNbIDAgXSBdOworICAgICAgICAgICAgaW5mby5tZW1v
cnkuZ2VvbWV0cmllcyArKzsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIG1vcnBoQXR0cmli
dXRlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyZ2VvbWV0cnk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzID0g
W107Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9
IHt9OworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG0gPSAwLCBt
bCA9IG1vcnBoQXR0cmlidXRlLmxlbmd0aDsgbSA8IG1sOyBtICsrICkgeworICAgICAgICBmdW5j
dGlvbiB1cGRhdGUoIGdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSA9IG1vcnBoQXR0cmlidXRlWyBtIF0ubmFtZSB8fCBTdHJpbmcoIG0gKTsKKyAgICAgICAg
ICAgIHZhciBpbmRleCA9IGdlb21ldHJ5LmluZGV4OworICAgICAgICAgICAgdmFyIGdlb21ldHJ5
QXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKCAwICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbIG5hbWUgXSA9IG07
CisgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYXR0cmlidXRlcy51cGRhdGUoIGluZGV4LCBnbC5F
TEVNRU5UX0FSUkFZX0JVRkZFUiApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGlu
IGdlb21ldHJ5QXR0cmlidXRlcyApIHsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGVzLnVwZGF0ZSggZ2VvbWV0cnlBdHRyaWJ1dGVzWyBuYW1lIF0sIGds
LkFSUkFZX0JVRkZFUiApOwogCi0gICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0cyA9IGdl
b21ldHJ5Lm1vcnBoVGFyZ2V0czsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlm
ICggbW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgJiYgbW9ycGhUYXJnZXRzLmxlbmd0aCA+IDAg
KSB7CisgICAgICAgICAgICAvLyBtb3JwaCB0YXJnZXRzCiAKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB7fTsKKyAgICAgICAgICAgIHZhciBtb3JwaEF0dHJp
YnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7CiAKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICggbSA9IDAsIG1sID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgbSA8IG1sOyBtICsrICkgewor
ICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gbW9ycGhBdHRyaWJ1dGVzICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lID0gbW9ycGhUYXJnZXRzWyBtIF0ubmFtZSB8fCBTdHJp
bmcoIG0gKTsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBtb3JwaEF0dHJpYnV0ZXNbIG5h
bWUgXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldEluZmx1ZW5j
ZXMucHVzaCggMCApOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaFRhcmdldERp
Y3Rpb25hcnlbIG5hbWUgXSA9IG07CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudXBkYXRlKCBhcnJheVsgaSBdLCBnbC5B
UlJBWV9CVUZGRVIgKTsKIAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgIH0sCi0KLSAgICAgICAgcmF5Y2FzdDogKCBmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAg
ICAgIHZhciBpbnZlcnNlTWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKLSAgICAgICAgICAgIHZhciBy
YXkgPSBuZXcgUmF5KCk7Ci0gICAgICAgICAgICB2YXIgc3BoZXJlID0gbmV3IFNwaGVyZSgpOwor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciB2QSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAg
ICAgICB2YXIgdkIgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHZDID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgZnVuY3Rpb24gZ2V0V2lyZWZyYW1lQXR0cmlidXRlKCBnZW9tZXRy
eSApIHsKIAotICAgICAgICAgICAgdmFyIHRlbXBBID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAg
ICAgIHZhciB0ZW1wQiA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgdGVtcEMgPSBu
ZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHdpcmVmcmFtZUF0dHJp
YnV0ZXNbIGdlb21ldHJ5LmlkIF07CiAKLSAgICAgICAgICAgIHZhciB1dkEgPSBuZXcgVmVjdG9y
MigpOwotICAgICAgICAgICAgdmFyIHV2QiA9IG5ldyBWZWN0b3IyKCk7Ci0gICAgICAgICAgICB2
YXIgdXZDID0gbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgICAgIGlmICggYXR0cmlidXRlICkgcmV0
dXJuIGF0dHJpYnV0ZTsKIAotICAgICAgICAgICAgdmFyIGJhcnljb29yZCA9IG5ldyBWZWN0b3Iz
KCk7CisgICAgICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwogCi0gICAgICAgICAgICB2YXIgaW50
ZXJzZWN0aW9uUG9pbnQgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIGludGVyc2Vj
dGlvblBvaW50V29ybGQgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGdlb21ldHJ5
SW5kZXggPSBnZW9tZXRyeS5pbmRleDsKKyAgICAgICAgICAgIHZhciBnZW9tZXRyeUF0dHJpYnV0
ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzOwogCi0gICAgICAgICAgICBmdW5jdGlvbiB1dkludGVy
c2VjdGlvbiggcG9pbnQsIHAxLCBwMiwgcDMsIHV2MSwgdXYyLCB1djMgKSB7CisgICAgICAgICAg
ICAvLyBjb25zb2xlLnRpbWUoICd3aXJlZnJhbWUnICk7CiAKLSAgICAgICAgICAgICAgICBUcmlh
bmdsZS5iYXJ5Y29vcmRGcm9tUG9pbnQoIHBvaW50LCBwMSwgcDIsIHAzLCBiYXJ5Y29vcmQgKTsK
KyAgICAgICAgICAgIGlmICggZ2VvbWV0cnlJbmRleCAhPT0gbnVsbCApIHsKIAotICAgICAgICAg
ICAgICAgIHV2MS5tdWx0aXBseVNjYWxhciggYmFyeWNvb3JkLnggKTsKLSAgICAgICAgICAgICAg
ICB1djIubXVsdGlwbHlTY2FsYXIoIGJhcnljb29yZC55ICk7Ci0gICAgICAgICAgICAgICAgdXYz
Lm11bHRpcGx5U2NhbGFyKCBiYXJ5Y29vcmQueiApOworICAgICAgICAgICAgICAgIHZhciBhcnJh
eSA9IGdlb21ldHJ5SW5kZXguYXJyYXk7CiAKLSAgICAgICAgICAgICAgICB1djEuYWRkKCB1djIg
KS5hZGQoIHV2MyApOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGFycmF5
Lmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHsKIAotICAgICAgICAgICAgICAgIHJldHVybiB1djEu
Y2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBhcnJheVsgaSArIDAgXTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGIgPSBhcnJheVsgaSArIDEgXTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGMgPSBhcnJheVsgaSArIDIgXTsKIAotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpbmRpY2VzLnB1c2goIGEsIGIsIGIsIGMsIGMsIGEgKTsKIAotICAgICAgICAg
ICAgZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24oIG9iamVjdCwgcmF5Y2FzdGVyLCByYXksIHBB
LCBwQiwgcEMsIHBvaW50ICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHZhciBpbnRlcnNlY3Q7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gb2JqZWN0Lm1h
dGVyaWFsOworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGlmICggbWF0
ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0g
Z2VvbWV0cnlBdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5OwogCi0gICAgICAgICAgICAgICAgICAg
IGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSggcEMsIHBCLCBwQSwgdHJ1ZSwgcG9p
bnQgKTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSAoIGFycmF5Lmxlbmd0
aCAvIDMgKSAtIDE7IGkgPCBsOyBpICs9IDMgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGkgKyAwOworICAgICAgICAgICAgICAgICAg
ICB2YXIgYiA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGkgKyAyOwogCi0g
ICAgICAgICAgICAgICAgICAgIGludGVyc2VjdCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSggcEEs
IHBCLCBwQywgbWF0ZXJpYWwuc2lkZSAhPT0gRG91YmxlU2lkZSwgcG9pbnQgKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBhLCBiLCBiLCBjLCBjLCBhICk7CiAKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdCA9PT0gbnVsbCApIHJl
dHVybiBudWxsOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9u
UG9pbnRXb3JsZC5jb3B5KCBwb2ludCApOwotICAgICAgICAgICAgICAgIGludGVyc2VjdGlvblBv
aW50V29ybGQuYXBwbHlNYXRyaXg0KCBvYmplY3QubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAg
IC8vIGNvbnNvbGUudGltZUVuZCggJ3dpcmVmcmFtZScgKTsKIAotICAgICAgICAgICAgICAgIHZh
ciBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oIGludGVyc2VjdGlv
blBvaW50V29ybGQgKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZSA9IG5ldyAoIGFycmF5TWF4KCBp
bmRpY2VzICkgPiA2NTUzNSA/IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA6IFVpbnQxNkJ1ZmZlckF0
dHJpYnV0ZSApKCBpbmRpY2VzLCAxICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGRpc3RhbmNl
IDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgcmV0dXJuIG51
bGw7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnVwZGF0ZSggYXR0cmlidXRlLCBnbC5FTEVNRU5U
X0FSUkFZX0JVRkZFUiApOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICBwb2ludDog
aW50ZXJzZWN0aW9uUG9pbnRXb3JsZC5jbG9uZSgpLAotICAgICAgICAgICAgICAgICAgICBvYmpl
Y3Q6IG9iamVjdAotICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB3aXJlZnJhbWVBdHRy
aWJ1dGVzWyBnZW9tZXRyeS5pZCBdID0gYXR0cmlidXRlOwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gYXR0cmlidXRlOwogCi0gICAgICAgICAgICBmdW5jdGlvbiBjaGVja0J1
ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCBvYmplY3QsIHJheWNhc3RlciwgcmF5LCBwb3NpdGlv
biwgdXYsIGEsIGIsIGMgKSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZBLmZyb21C
dWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBhICk7Ci0gICAgICAgICAgICAgICAgdkIuZnJvbUJ1
ZmZlckF0dHJpYnV0ZSggcG9zaXRpb24sIGIgKTsKLSAgICAgICAgICAgICAgICB2Qy5mcm9tQnVm
ZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgYyApOworICAgICAgICByZXR1cm4gewogCi0gICAgICAg
ICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGNoZWNrSW50ZXJzZWN0aW9uKCBvYmplY3QsIHJh
eWNhc3RlciwgcmF5LCB2QSwgdkIsIHZDLCBpbnRlcnNlY3Rpb25Qb2ludCApOworICAgICAgICAg
ICAgZ2V0OiBnZXQsCisgICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZSwKIAotICAgICAgICAgICAg
ICAgIGlmICggaW50ZXJzZWN0aW9uICkgeworICAgICAgICAgICAgZ2V0V2lyZWZyYW1lQXR0cmli
dXRlOiBnZXRXaXJlZnJhbWVBdHRyaWJ1dGUKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHV2
ICkgeworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICB1dkEuZnJvbUJ1ZmZl
ckF0dHJpYnV0ZSggdXYsIGEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHV2Qi5mcm9tQnVm
ZmVyQXR0cmlidXRlKCB1diwgYiApOwotICAgICAgICAgICAgICAgICAgICAgICAgdXZDLmZyb21C
dWZmZXJBdHRyaWJ1dGUoIHV2LCBjICk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcnNlY3Rpb24udXYgPSB1dkludGVyc2VjdGlvbiggaW50ZXJzZWN0aW9uUG9pbnQsIHZB
LCB2QiwgdkMsIHV2QSwgdXZCLCB1dkMgKTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9v
YiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICBmdW5jdGlvbiBXZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlciggZ2wsIGV4dGVuc2lvbnMs
IGluZm8gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2UgPSBuZXcg
RmFjZTMoIGEsIGIsIGMsIFRyaWFuZ2xlLm5vcm1hbCggdkEsIHZCLCB2QyApICk7Ci0gICAgICAg
ICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlSW5kZXggPSBhOworICAgICAgICB2YXIgbW9k
ZTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc2V0TW9kZSggdmFsdWUg
KSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uOworICAgICAgICAgICAg
bW9kZSA9IHZhbHVlOwogCi0gICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIHJheWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApIHsKKyAgICAg
ICAgdmFyIHR5cGUsIGJ5dGVzUGVyRWxlbWVudDsKIAotICAgICAgICAgICAgICAgIHZhciBnZW9t
ZXRyeSA9IHRoaXMuZ2VvbWV0cnk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gdGhp
cy5tYXRlcmlhbDsKLSAgICAgICAgICAgICAgICB2YXIgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJp
eFdvcmxkOworICAgICAgICBmdW5jdGlvbiBzZXRJbmRleCggdmFsdWUgKSB7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIG1hdGVyaWFsID09PSB1bmRlZmluZWQgKSByZXR1cm47CisgICAgICAgICAg
ICB0eXBlID0gdmFsdWUudHlwZTsKKyAgICAgICAgICAgIGJ5dGVzUGVyRWxlbWVudCA9IHZhbHVl
LmJ5dGVzUGVyRWxlbWVudDsKIAotICAgICAgICAgICAgICAgIC8vIENoZWNraW5nIGJvdW5kaW5n
U3BoZXJlIGRpc3RhbmNlIHRvIHJheQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAo
IGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5k
aW5nU3BoZXJlKCk7CisgICAgICAgIGZ1bmN0aW9uIHJlbmRlciggc3RhcnQsIGNvdW50ICkgewog
Ci0gICAgICAgICAgICAgICAgc3BoZXJlLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICk7
Ci0gICAgICAgICAgICAgICAgc3BoZXJlLmFwcGx5TWF0cml4NCggbWF0cml4V29ybGQgKTsKKyAg
ICAgICAgICAgIGdsLmRyYXdFbGVtZW50cyggbW9kZSwgY291bnQsIHR5cGUsIHN0YXJ0ICogYnl0
ZXNQZXJFbGVtZW50ICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHJheWNhc3Rlci5yYXkuaW50
ZXJzZWN0c1NwaGVyZSggc3BoZXJlICkgPT09IGZhbHNlICkgcmV0dXJuOworICAgICAgICAgICAg
aW5mby51cGRhdGUoIGNvdW50LCBtb2RlICk7CiAKLSAgICAgICAgICAgICAgICAvLworICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpbnZlcnNlTWF0cml4LmdldEludmVyc2UoIG1hdHJpeFdv
cmxkICk7Ci0gICAgICAgICAgICAgICAgcmF5LmNvcHkoIHJheWNhc3Rlci5yYXkgKS5hcHBseU1h
dHJpeDQoIGludmVyc2VNYXRyaXggKTsKKyAgICAgICAgZnVuY3Rpb24gcmVuZGVySW5zdGFuY2Vz
KCBnZW9tZXRyeSwgc3RhcnQsIGNvdW50ICkgewogCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sg
Ym91bmRpbmdCb3ggYmVmb3JlIGNvbnRpbnVpbmcKKyAgICAgICAgICAgIHZhciBleHRlbnNpb24g
PSBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nQm94ICE9PSBudWxsICkgeworICAgICAgICAg
ICAgaWYgKCBleHRlbnNpb24gPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCByYXkuaW50ZXJzZWN0c0JveCggZ2VvbWV0cnkuYm91bmRpbmdCb3ggKSA9PT0gZmFsc2UgKSBy
ZXR1cm47CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMSW5kZXhl
ZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQg
aGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5
cy4nICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIGludGVyc2VjdGlvbjsKKyAgICAgICAg
ICAgIGV4dGVuc2lvbi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSggbW9kZSwgY291bnQsIHR5
cGUsIHN0YXJ0ICogYnl0ZXNQZXJFbGVtZW50LCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCAp
OwogCi0gICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewor
ICAgICAgICAgICAgaW5mby51cGRhdGUoIGNvdW50LCBtb2RlLCBnZW9tZXRyeS5tYXhJbnN0YW5j
ZWRDb3VudCApOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBhLCBiLCBjOwotICAgICAgICAg
ICAgICAgICAgICB2YXIgaW5kZXggPSBnZW9tZXRyeS5pbmRleDsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHV2ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy51djsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGksIGw7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IGluZGV4ICE9PSBudWxsICkgeworICAgICAgICAvLwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpbmRleGVkIGJ1ZmZlciBnZW9tZXRyeQorICAgICAgICB0aGlzLnNldE1vZGUgPSBzZXRN
b2RlOworICAgICAgICB0aGlzLnNldEluZGV4ID0gc2V0SW5kZXg7CisgICAgICAgIHRoaXMucmVu
ZGVyID0gcmVuZGVyOworICAgICAgICB0aGlzLnJlbmRlckluc3RhbmNlcyA9IHJlbmRlckluc3Rh
bmNlczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBpbmRleC5j
b3VudDsgaSA8IGw7IGkgKz0gMyApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhID0gaW5kZXguZ2V0WCggaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIg
PSBpbmRleC5nZXRYKCBpICsgMSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBp
bmRleC5nZXRYKCBpICsgMiApOworICAgIC8qKgorICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0
dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3Rpb24gPSBjaGVja0J1ZmZlckdlb21ldHJ5SW50ZXJzZWN0aW9uKCB0
aGlzLCByYXljYXN0ZXIsIHJheSwgcG9zaXRpb24sIHV2LCBhLCBiLCBjICk7CisgICAgZnVuY3Rp
b24gV2ViR0xJbmZvKCBnbCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aW50ZXJzZWN0aW9uICkgeworICAgICAgICB2YXIgbWVtb3J5ID0geworICAgICAgICAgICAgZ2Vv
bWV0cmllczogMCwKKyAgICAgICAgICAgIHRleHR1cmVzOiAwCisgICAgICAgIH07CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmZhY2VJbmRleCA9IE1hdGgu
Zmxvb3IoIGkgLyAzICk7IC8vIHRyaWFuZ2xlIG51bWJlciBpbiBpbmRpY2VzIGJ1ZmZlciBzZW1h
bnRpY3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKCBp
bnRlcnNlY3Rpb24gKTsKKyAgICAgICAgdmFyIHJlbmRlciA9IHsKKyAgICAgICAgICAgIGZyYW1l
OiAwLAorICAgICAgICAgICAgY2FsbHM6IDAsCisgICAgICAgICAgICB0cmlhbmdsZXM6IDAsCisg
ICAgICAgICAgICBwb2ludHM6IDAsCisgICAgICAgICAgICBsaW5lczogMAorICAgICAgICB9Owog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiB1cGRhdGUo
IGNvdW50LCBtb2RlLCBpbnN0YW5jZUNvdW50ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VDb3VudCB8fCAxOwogCi0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZW5kZXIuY2FsbHMgKys7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1pbmRleGVkIGJ1ZmZlciBnZW9tZXRy
eQorICAgICAgICAgICAgc3dpdGNoICggbW9kZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDAsIGwgPSBwb3NpdGlvbi5jb3VudDsgaSA8IGw7IGkgKz0gMyApIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIGdsLlRSSUFOR0xFUzoKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyLnRyaWFuZ2xlcyArPSBpbnN0YW5jZUNvdW50ICogKCBjb3VudCAvIDMgKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gaTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gaSArIDE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYyA9IGkgKyAyOworICAgICAgICAgICAgICAgIGNhc2UgZ2wuVFJJQU5HTEVf
U1RSSVA6CisgICAgICAgICAgICAgICAgY2FzZSBnbC5UUklBTkdMRV9GQU46CisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlci50cmlhbmdsZXMgKz0gaW5zdGFuY2VDb3VudCAqICggY291bnQgLSAy
ICk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tCdWZmZXJHZW9tZXRyeUludGVyc2VjdGlvbiggdGhp
cywgcmF5Y2FzdGVyLCByYXksIHBvc2l0aW9uLCB1diwgYSwgYiwgYyApOworICAgICAgICAgICAg
ICAgIGNhc2UgZ2wuTElORVM6CisgICAgICAgICAgICAgICAgICAgIHJlbmRlci5saW5lcyArPSBp
bnN0YW5jZUNvdW50ICogKCBjb3VudCAvIDIgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVyc2VjdGlvbiApIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIGdsLkxJTkVfU1RSSVA6CisgICAgICAgICAgICAgICAgICAgIHJl
bmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogKCBjb3VudCAtIDEgKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJz
ZWN0aW9uLmluZGV4ID0gYTsgLy8gdHJpYW5nbGUgbnVtYmVyIGluIHBvc2l0aW9ucyBidWZmZXIg
c2VtYW50aWNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVz
aCggaW50ZXJzZWN0aW9uICk7CisgICAgICAgICAgICAgICAgY2FzZSBnbC5MSU5FX0xPT1A6Cisg
ICAgICAgICAgICAgICAgICAgIHJlbmRlci5saW5lcyArPSBpbnN0YW5jZUNvdW50ICogY291bnQ7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGNhc2UgZ2wuUE9JTlRTOgorICAgICAgICAgICAgICAgICAg
ICByZW5kZXIucG9pbnRzICs9IGluc3RhbmNlQ291bnQgKiBjb3VudDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2Vi
R0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZTonLCBtb2RlICk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7CisgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICB2YXIgZnZBLCBmdkIsIGZ2QzsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGlzTXVsdGlNYXRlcmlhbCA9IEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICk7Cisg
ICAgICAgIGZ1bmN0aW9uIHJlc2V0KCkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0
aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzOwotICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZXMg
PSBnZW9tZXRyeS5mYWNlczsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHV2czsKKyAgICAgICAg
ICAgIHJlbmRlci5mcmFtZSArKzsKKyAgICAgICAgICAgIHJlbmRlci5jYWxscyA9IDA7CisgICAg
ICAgICAgICByZW5kZXIudHJpYW5nbGVzID0gMDsKKyAgICAgICAgICAgIHJlbmRlci5wb2ludHMg
PSAwOworICAgICAgICAgICAgcmVuZGVyLmxpbmVzID0gMDsKIAotICAgICAgICAgICAgICAgICAg
ICB2YXIgZmFjZVZlcnRleFV2cyA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIDAgXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBmYWNlVmVydGV4VXZzLmxlbmd0aCA+IDAgKSB1dnMgPSBmYWNl
VmVydGV4VXZzOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGYg
PSAwLCBmbCA9IGZhY2VzLmxlbmd0aDsgZiA8IGZsOyBmICsrICkgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgbWVtb3J5OiBtZW1vcnksCisgICAgICAgICAgICByZW5kZXI6IHJlbmRl
ciwKKyAgICAgICAgICAgIHByb2dyYW1zOiBudWxsLAorICAgICAgICAgICAgYXV0b1Jlc2V0OiB0
cnVlLAorICAgICAgICAgICAgcmVzZXQ6IHJlc2V0LAorICAgICAgICAgICAgdXBkYXRlOiB1cGRh
dGUKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBmYWNl
c1sgZiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2VNYXRlcmlhbCA9IGlzTXVs
dGlNYXRlcmlhbCA/IG1hdGVyaWFsWyBmYWNlLm1hdGVyaWFsSW5kZXggXSA6IG1hdGVyaWFsOwor
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmYWNlTWF0ZXJpYWwgPT09IHVu
ZGVmaW5lZCApIGNvbnRpbnVlOworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0
cDovL21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ2QSA9
IHZlcnRpY2VzWyBmYWNlLmEgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ2QiA9IHZlcnRp
Y2VzWyBmYWNlLmIgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ2QyA9IHZlcnRpY2VzWyBm
YWNlLmMgXTsKKyAgICBmdW5jdGlvbiBhYnNOdW1lcmljYWxTb3J0KCBhLCBiICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGZhY2VNYXRlcmlhbC5tb3JwaFRhcmdldHMgPT09IHRy
dWUgKSB7CisgICAgICAgIHJldHVybiBNYXRoLmFicyggYlsgMSBdICkgLSBNYXRoLmFicyggYVsg
MSBdICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9ycGhUYXJnZXRzID0g
Z2VvbWV0cnkubW9ycGhUYXJnZXRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBt
b3JwaEluZmx1ZW5jZXMgPSB0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlczsKKyAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2QS5zZXQoIDAsIDAsIDAgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2Qi5zZXQoIDAsIDAsIDAgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2Qy5zZXQoIDAsIDAsIDAgKTsKKyAgICBmdW5jdGlvbiBXZWJHTE1vcnBodGFyZ2V0
cyggZ2wgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdCA9IDAs
IHRsID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgdCA8IHRsOyB0ICsrICkgeworICAgICAgICB2YXIg
aW5mbHVlbmNlc0xpc3QgPSB7fTsKKyAgICAgICAgdmFyIG1vcnBoSW5mbHVlbmNlcyA9IG5ldyBG
bG9hdDMyQXJyYXkoIDggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
aW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzWyB0IF07CisgICAgICAgIGZ1bmN0aW9uIHVwZGF0
ZSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHByb2dyYW0gKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmZsdWVuY2UgPT09IDAgKSBjb250aW51ZTsKKyAg
ICAgICAgICAgIHZhciBvYmplY3RJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVl
bmNlczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0cyA9IG1v
cnBoVGFyZ2V0c1sgdCBdLnZlcnRpY2VzOworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG9iamVj
dEluZmx1ZW5jZXMubGVuZ3RoOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZB
LmFkZFNjYWxlZFZlY3RvciggdGVtcEEuc3ViVmVjdG9ycyggdGFyZ2V0c1sgZmFjZS5hIF0sIGZ2
QSApLCBpbmZsdWVuY2UgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdkIuYWRk
U2NhbGVkVmVjdG9yKCB0ZW1wQi5zdWJWZWN0b3JzKCB0YXJnZXRzWyBmYWNlLmIgXSwgZnZCICks
IGluZmx1ZW5jZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Qy5hZGRTY2Fs
ZWRWZWN0b3IoIHRlbXBDLnN1YlZlY3RvcnMoIHRhcmdldHNbIGZhY2UuYyBdLCBmdkMgKSwgaW5m
bHVlbmNlICk7CisgICAgICAgICAgICB2YXIgaW5mbHVlbmNlcyA9IGluZmx1ZW5jZXNMaXN0WyBn
ZW9tZXRyeS5pZCBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCBpbmZsdWVuY2VzID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2QS5hZGQoIGZ2QSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZC
LmFkZCggZnZCICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdkMuYWRkKCBmdkMgKTsK
KyAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXNlIGxpc3QKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ2QSA9IHZBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2QiA9IHZC
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2QyA9IHZDOworICAgICAgICAgICAgICAg
IGluZmx1ZW5jZXMgPSBbXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gY2hlY2tJbnRlcnNlY3Rpb24oIHRoaXMsIHJh
eWNhc3RlciwgcmF5LCBmdkEsIGZ2QiwgZnZDLCBpbnRlcnNlY3Rpb25Qb2ludCApOworICAgICAg
ICAgICAgICAgICAgICBpbmZsdWVuY2VzWyBpIF0gPSBbIGksIDAgXTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24gKSB7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1dnMgJiYgdXZzWyBmIF0gKSB7CisgICAg
ICAgICAgICAgICAgaW5mbHVlbmNlc0xpc3RbIGdlb21ldHJ5LmlkIF0gPSBpbmZsdWVuY2VzOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1dnNfZiA9IHV2c1sgZiBdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dkEuY29weSggdXZzX2ZbIDAgXSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dkIuY29weSggdXZzX2ZbIDEgXSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dkMuY29weSggdXZzX2ZbIDIgXSApOwor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2Vj
dGlvbi51diA9IHV2SW50ZXJzZWN0aW9uKCBpbnRlcnNlY3Rpb25Qb2ludCwgZnZBLCBmdkIsIGZ2
QywgdXZBLCB1dkIsIHV2QyApOworICAgICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0cyA9IG1hdGVy
aWFsLm1vcnBoVGFyZ2V0cyAmJiBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247Cisg
ICAgICAgICAgICB2YXIgbW9ycGhOb3JtYWxzID0gbWF0ZXJpYWwubW9ycGhOb3JtYWxzICYmIGdl
b21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBSZW1vdmUgY3VycmVudCBtb3JwaEF0dHJpYnV0ZXMKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbi5mYWNlID0gZmFjZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uZmFjZUluZGV4ID0gZjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goIGludGVyc2VjdGlvbiAp
OworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGluZmx1ZW5jZSA9
IGluZmx1ZW5jZXNbIGkgXTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCBpbmZsdWVuY2VbIDEgXSAhPT0gMCApIHsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1vcnBoVGFyZ2V0cyApIGdlb21ldHJ5LnJlbW92ZUF0dHJpYnV0ZSggJ21vcnBoVGFyZ2V0
JyArIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb3JwaE5vcm1hbHMgKSBnZW9tZXRy
eS5yZW1vdmVBdHRyaWJ1dGUoICdtb3JwaE5vcm1hbCcgKyBpICk7CiAKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAKLSAgICAgICAgfSgpICksCisg
ICAgICAgICAgICAvLyBDb2xsZWN0IGluZmx1ZW5jZXMKIAotICAgICAgICBjbG9uZTogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICsrICkg
ewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuZ2VvbWV0
cnksIHRoaXMubWF0ZXJpYWwgKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICAgICAgdmFyIGlu
Zmx1ZW5jZSA9IGluZmx1ZW5jZXNbIGkgXTsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAg
aW5mbHVlbmNlWyAwIF0gPSBpOworICAgICAgICAgICAgICAgIGluZmx1ZW5jZVsgMSBdID0gb2Jq
ZWN0SW5mbHVlbmNlc1sgaSBdOwogCi0gICAgfSApOworICAgICAgICAgICAgfQogCi0gICAgLyoq
Ci0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAg
ICAgICAgICAgIGluZmx1ZW5jZXMuc29ydCggYWJzTnVtZXJpY2FsU29ydCApOwogCi0gICAgZnVu
Y3Rpb24gV2ViR0xCYWNrZ3JvdW5kKCByZW5kZXJlciwgc3RhdGUsIG9iamVjdHMsIHByZW11bHRp
cGxpZWRBbHBoYSApIHsKKyAgICAgICAgICAgIC8vIEFkZCBtb3JwaEF0dHJpYnV0ZXMKIAotICAg
ICAgICB2YXIgY2xlYXJDb2xvciA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTsKLSAgICAgICAgdmFy
IGNsZWFyQWxwaGEgPSAwOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgODsgaSAr
KyApIHsKIAotICAgICAgICB2YXIgcGxhbmVDYW1lcmEsIHBsYW5lTWVzaDsKLSAgICAgICAgdmFy
IGJveENhbWVyYSwgYm94TWVzaDsKKyAgICAgICAgICAgICAgICB2YXIgaW5mbHVlbmNlID0gaW5m
bHVlbmNlc1sgaSBdOwogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlciggc2NlbmUsIGNhbWVyYSwg
Zm9yY2VDbGVhciApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGluZmx1ZW5jZSApIHsKIAotICAg
ICAgICAgICAgdmFyIGJhY2tncm91bmQgPSBzY2VuZS5iYWNrZ3JvdW5kOworICAgICAgICAgICAg
ICAgICAgICB2YXIgaW5kZXggPSBpbmZsdWVuY2VbIDAgXTsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHZhbHVlID0gaW5mbHVlbmNlWyAxIF07CiAKLSAgICAgICAgICAgIGlmICggYmFja2dyb3Vu
ZCA9PT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSApIHsKIAotICAg
ICAgICAgICAgICAgIHNldENsZWFyKCBjbGVhckNvbG9yLCBjbGVhckFscGhhICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1vcnBoVGFyZ2V0cyApIGdlb21ldHJ5LmFkZEF0dHJpYnV0
ZSggJ21vcnBoVGFyZ2V0JyArIGksIG1vcnBoVGFyZ2V0c1sgaW5kZXggXSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBtb3JwaE5vcm1hbHMgKSBnZW9tZXRyeS5hZGRBdHRyaWJ1dGUo
ICdtb3JwaE5vcm1hbCcgKyBpLCBtb3JwaE5vcm1hbHNbIGluZGV4IF0gKTsKIAotICAgICAgICAg
ICAgfSBlbHNlIGlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5kLmlzQ29sb3IgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtb3JwaEluZmx1ZW5jZXNbIGkgXSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBzZXRDbGVhcigg
YmFja2dyb3VuZCwgMSApOwotICAgICAgICAgICAgICAgIGZvcmNlQ2xlYXIgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBtb3JwaEluZmx1ZW5jZXNbIGkgXSA9IDA7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCByZW5kZXJlci5hdXRvQ2xlYXIgfHwgZm9yY2VDbGVhciApIHsKKyAgICAgICAgICAg
IHByb2dyYW0uZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZSggZ2wsICdtb3JwaFRhcmdldEluZmx1ZW5j
ZXMnLCBtb3JwaEluZmx1ZW5jZXMgKTsKIAotICAgICAgICAgICAgICAgIHJlbmRlcmVyLmNsZWFy
KCByZW5kZXJlci5hdXRvQ2xlYXJDb2xvciwgcmVuZGVyZXIuYXV0b0NsZWFyRGVwdGgsIHJlbmRl
cmVyLmF1dG9DbGVhclN0ZW5jaWwgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7CiAKLSAgICAgICAgICAgIGlmICggYmFja2dyb3VuZCAmJiBiYWNrZ3JvdW5k
LmlzQ3ViZVRleHR1cmUgKSB7CisgICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZQogCi0gICAgICAg
ICAgICAgICAgaWYgKCBib3hDYW1lcmEgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgfTsKIAot
ICAgICAgICAgICAgICAgICAgICBib3hDYW1lcmEgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTsK
KyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYm94TWVzaCA9IG5ldyBNZXNoKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IEJveEJ1ZmZlckdlb21ldHJ5KCA1LCA1LCA1ICksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgU2hhZGVyTWF0ZXJpYWwoIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlmb3JtczogU2hhZGVyTGliLmN1YmUudW5pZm9ybXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJMaWIuY3ViZS52ZXJ0ZXhT
aGFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRl
ckxpYi5jdWJlLmZyYWdtZW50U2hhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
ZGU6IEJhY2tTaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFs
c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhXcml0ZTogZmFsc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9nOiBmYWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgfSApCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIH0K
KyAgICBmdW5jdGlvbiBXZWJHTE9iamVjdHMoIGdlb21ldHJpZXMsIGluZm8gKSB7CiAKLSAgICAg
ICAgICAgICAgICBib3hDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KCBjYW1lcmEucHJvamVj
dGlvbk1hdHJpeCApOworICAgICAgICB2YXIgdXBkYXRlTGlzdCA9IHt9OwogCi0gICAgICAgICAg
ICAgICAgYm94Q2FtZXJhLm1hdHJpeFdvcmxkLmV4dHJhY3RSb3RhdGlvbiggY2FtZXJhLm1hdHJp
eFdvcmxkICk7Ci0gICAgICAgICAgICAgICAgYm94Q2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5n
ZXRJbnZlcnNlKCBib3hDYW1lcmEubWF0cml4V29ybGQgKTsKKyAgICAgICAgZnVuY3Rpb24gdXBk
YXRlKCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAgICAgICBib3hNZXNoLm1hdGVyaWFsLnVuaWZv
cm1zWyAidEN1YmUiIF0udmFsdWUgPSBiYWNrZ3JvdW5kOwotICAgICAgICAgICAgICAgIGJveE1l
c2gubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIGJveENhbWVyYS5tYXRyaXhXb3Js
ZEludmVyc2UsIGJveE1lc2gubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgIHZhciBmcmFtZSA9
IGluZm8ucmVuZGVyLmZyYW1lOwogCi0gICAgICAgICAgICAgICAgb2JqZWN0cy51cGRhdGUoIGJv
eE1lc2ggKTsKKyAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKKyAg
ICAgICAgICAgIHZhciBidWZmZXJnZW9tZXRyeSA9IGdlb21ldHJpZXMuZ2V0KCBvYmplY3QsIGdl
b21ldHJ5ICk7CiAKLSAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJCdWZmZXJEaXJlY3Qo
IGJveENhbWVyYSwgbnVsbCwgYm94TWVzaC5nZW9tZXRyeSwgYm94TWVzaC5tYXRlcmlhbCwgYm94
TWVzaCwgbnVsbCApOworICAgICAgICAgICAgLy8gVXBkYXRlIG9uY2UgcGVyIGZyYW1lCiAKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc1RleHR1cmUg
KSB7CisgICAgICAgICAgICBpZiAoIHVwZGF0ZUxpc3RbIGJ1ZmZlcmdlb21ldHJ5LmlkIF0gIT09
IGZyYW1lICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBwbGFuZUNhbWVyYSA9PT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKIAot
ICAgICAgICAgICAgICAgICAgICBwbGFuZUNhbWVyYSA9IG5ldyBPcnRob2dyYXBoaWNDYW1lcmEo
IC0gMSwgMSwgMSwgLSAxLCAwLCAxICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcGxhbmVNZXNo
ID0gbmV3IE1lc2goCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUGxhbmVCdWZmZXJHZW9t
ZXRyeSggMiwgMiApLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1lc2hCYXNpY01hdGVy
aWFsKCB7IGRlcHRoVGVzdDogZmFsc2UsIGRlcHRoV3JpdGU6IGZhbHNlLCBmb2c6IGZhbHNlIH0g
KQotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBidWZmZXJnZW9t
ZXRyeS51cGRhdGVGcm9tT2JqZWN0KCBvYmplY3QgKTsKIAogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHBsYW5lTWVzaC5tYXRlcmlhbC5tYXAgPSBiYWNrZ3JvdW5kOwotCi0g
ICAgICAgICAgICAgICAgb2JqZWN0cy51cGRhdGUoIHBsYW5lTWVzaCApOworICAgICAgICAgICAg
ICAgIGdlb21ldHJpZXMudXBkYXRlKCBidWZmZXJnZW9tZXRyeSApOwogCi0gICAgICAgICAgICAg
ICAgcmVuZGVyZXIucmVuZGVyQnVmZmVyRGlyZWN0KCBwbGFuZUNhbWVyYSwgbnVsbCwgcGxhbmVN
ZXNoLmdlb21ldHJ5LCBwbGFuZU1lc2gubWF0ZXJpYWwsIHBsYW5lTWVzaCwgbnVsbCApOworICAg
ICAgICAgICAgICAgIHVwZGF0ZUxpc3RbIGJ1ZmZlcmdlb21ldHJ5LmlkIF0gPSBmcmFtZTsKIAog
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICByZXR1cm4gYnVmZmVyZ2VvbWV0cnk7CisKICAg
ICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHNldENsZWFyKCBjb2xvciwgYWxwaGEgKSB7Cisg
ICAgICAgIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7CiAKLSAgICAgICAgICAgIHN0YXRlLmJ1ZmZlcnMu
Y29sb3Iuc2V0Q2xlYXIoIGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGFscGhhLCBwcmVtdWx0
aXBsaWVkQWxwaGEgKTsKKyAgICAgICAgICAgIHVwZGF0ZUxpc3QgPSB7fTsKIAogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHsKIAotICAgICAgICAgICAgZ2V0Q2xlYXJDb2xvcjogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsCisgICAgICAgICAgICBkaXNwb3Nl
OiBkaXNwb3NlCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJDb2xvcjsKKyAgICAgICAg
fTsKIAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHNldENsZWFyQ29sb3I6IGZ1bmN0aW9u
ICggY29sb3IsIGFscGhhICkgeworICAgIH0KIAotICAgICAgICAgICAgICAgIGNsZWFyQ29sb3Iu
c2V0KCBjb2xvciApOwotICAgICAgICAgICAgICAgIGNsZWFyQWxwaGEgPSBhbHBoYSAhPT0gdW5k
ZWZpbmVkID8gYWxwaGEgOiAxOwotICAgICAgICAgICAgICAgIHNldENsZWFyKCBjbGVhckNvbG9y
LCBjbGVhckFscGhhICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8v
bXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGdldENs
ZWFyQWxwaGE6IGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBDdWJlVGV4dHVyZSggaW1hZ2Vz
LCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5
cGUsIGFuaXNvdHJvcHksIGVuY29kaW5nICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNs
ZWFyQWxwaGE7CisgICAgICAgIGltYWdlcyA9IGltYWdlcyAhPT0gdW5kZWZpbmVkID8gaW1hZ2Vz
IDogW107CisgICAgICAgIG1hcHBpbmcgPSBtYXBwaW5nICE9PSB1bmRlZmluZWQgPyBtYXBwaW5n
IDogQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOwogCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
c2V0Q2xlYXJBbHBoYTogZnVuY3Rpb24gKCBhbHBoYSApIHsKKyAgICAgICAgVGV4dHVyZS5jYWxs
KCB0aGlzLCBpbWFnZXMsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0
ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKTsKIAotICAgICAgICAgICAg
ICAgIGNsZWFyQWxwaGEgPSBhbHBoYTsKLSAgICAgICAgICAgICAgICBzZXRDbGVhciggY2xlYXJD
b2xvciwgY2xlYXJBbHBoYSApOworICAgICAgICB0aGlzLmZsaXBZID0gZmFsc2U7CiAKLSAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICByZW5kZXI6IHJlbmRlcgorICAgIH0KIAotICAgICAgICB9
OworICAgIEN1YmVUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRleHR1cmUucHJv
dG90eXBlICk7CisgICAgQ3ViZVRleHR1cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ3ViZVRl
eHR1cmU7CiAKLSAgICB9CisgICAgQ3ViZVRleHR1cmUucHJvdG90eXBlLmlzQ3ViZVRleHR1cmUg
PSB0cnVlOworCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBDdWJlVGV4dHVyZS5wcm90b3R5
cGUsICdpbWFnZXMnLCB7CisKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmltYWdlOworCisgICAgICAgIH0sCisKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAgICB0aGlzLmltYWdlID0gdmFsdWU7CisKKyAg
ICAgICAgfQorCisgICAgfSApOwogCiAgICAgLyoqCisgICAgICogQGF1dGhvciB0c2NodworICAg
ICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3CiAgICAgICog
QGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKgorICAgICAqIFVuaWZv
cm1zIG9mIGEgcHJvZ3JhbS4KKyAgICAgKiBUaG9zZSBmb3JtIGEgdHJlZSBzdHJ1Y3R1cmUgd2l0
aCBhIHNwZWNpYWwgdG9wLWxldmVsIGNvbnRhaW5lciBmb3IgdGhlIHJvb3QsCisgICAgICogd2hp
Y2ggeW91IGdldCBieSBjYWxsaW5nICduZXcgV2ViR0xVbmlmb3JtcyggZ2wsIHByb2dyYW0sIHJl
bmRlcmVyICknLgorICAgICAqCisgICAgICoKKyAgICAgKiBQcm9wZXJ0aWVzIG9mIGlubmVyIG5v
ZGVzIGluY2x1ZGluZyB0aGUgdG9wLWxldmVsIGNvbnRhaW5lcjoKKyAgICAgKgorICAgICAqIC5z
ZXEgLSBhcnJheSBvZiBuZXN0ZWQgdW5pZm9ybXMKKyAgICAgKiAubWFwIC0gbmVzdGVkIHVuaWZv
cm1zIGJ5IG5hbWUKKyAgICAgKgorICAgICAqCisgICAgICogTWV0aG9kcyBvZiBhbGwgbm9kZXMg
ZXhjZXB0IHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyOgorICAgICAqCisgICAgICogLnNldFZhbHVl
KCBnbCwgdmFsdWUsIFtyZW5kZXJlcl0gKQorICAgICAqCisgICAgICogICAgICB1cGxvYWRzIGEg
dW5pZm9ybSB2YWx1ZShzKQorICAgICAqICAgICAgdGhlICdyZW5kZXJlcicgcGFyYW1ldGVyIGlz
IG5lZWRlZCBmb3Igc2FtcGxlciB1bmlmb3JtcworICAgICAqCisgICAgICoKKyAgICAgKiBTdGF0
aWMgbWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAocmVuZGVyZXIgZmFjdG9yaXph
dGlvbnMpOgorICAgICAqCisgICAgICogLnVwbG9hZCggZ2wsIHNlcSwgdmFsdWVzLCByZW5kZXJl
ciApCisgICAgICoKKyAgICAgKiAgICAgIHNldHMgdW5pZm9ybXMgaW4gJ3NlcScgdG8gJ3ZhbHVl
c1tpZF0udmFsdWUnCisgICAgICoKKyAgICAgKiAuc2VxV2l0aFZhbHVlKCBzZXEsIHZhbHVlcyAp
IDogZmlsdGVyZWRTZXEKKyAgICAgKgorICAgICAqICAgICAgZmlsdGVycyAnc2VxJyBlbnRyaWVz
IHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2YWx1ZXMKKyAgICAgKgorICAgICAqCisgICAg
ICogTWV0aG9kcyBvZiB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciAocmVuZGVyZXIgZmFjdG9yaXph
dGlvbnMpOgorICAgICAqCisgICAgICogLnNldFZhbHVlKCBnbCwgbmFtZSwgdmFsdWUgKQorICAg
ICAqCisgICAgICogICAgICBzZXRzIHVuaWZvcm0gd2l0aCAgbmFtZSAnbmFtZScgdG8gJ3ZhbHVl
JworICAgICAqCisgICAgICogLnNldCggZ2wsIG9iaiwgcHJvcCApCisgICAgICoKKyAgICAgKiAg
ICAgIHNldHMgdW5pZm9ybSBmcm9tIG9iamVjdCBhbmQgcHJvcGVydHkgd2l0aCBzYW1lIG5hbWUg
dGhhbiB1bmlmb3JtCisgICAgICoKKyAgICAgKiAuc2V0T3B0aW9uYWwoIGdsLCBvYmosIHByb3Ag
KQorICAgICAqCisgICAgICogICAgICBsaWtlIC5zZXQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5
IG9mIHRoZSBvYmplY3QKKyAgICAgKgogICAgICAqLwogCi0gICAgZnVuY3Rpb24gcGFpbnRlclNv
cnRTdGFibGUoIGEsIGIgKSB7CisgICAgdmFyIGVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKCk7
CisgICAgdmFyIGVtcHR5Q3ViZVRleHR1cmUgPSBuZXcgQ3ViZVRleHR1cmUoKTsKIAotICAgICAg
ICBpZiAoIGEucmVuZGVyT3JkZXIgIT09IGIucmVuZGVyT3JkZXIgKSB7CisgICAgLy8gLS0tIEJh
c2UgZm9yIGlubmVyIG5vZGVzIChpbmNsdWRpbmcgdGhlIHJvb3QpIC0tLQogCi0gICAgICAgICAg
ICByZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7CisgICAgZnVuY3Rpb24gVW5p
Zm9ybUNvbnRhaW5lcigpIHsKIAotICAgICAgICB9IGVsc2UgaWYgKCBhLnByb2dyYW0gJiYgYi5w
cm9ncmFtICYmIGEucHJvZ3JhbSAhPT0gYi5wcm9ncmFtICkgeworICAgICAgICB0aGlzLnNlcSA9
IFtdOworICAgICAgICB0aGlzLm1hcCA9IHt9OwogCi0gICAgICAgICAgICByZXR1cm4gYS5wcm9n
cmFtLmlkIC0gYi5wcm9ncmFtLmlkOworICAgIH0KIAotICAgICAgICB9IGVsc2UgaWYgKCBhLm1h
dGVyaWFsLmlkICE9PSBiLm1hdGVyaWFsLmlkICkgeworICAgIC8vIC0tLSBVdGlsaXRpZXMgLS0t
CiAKLSAgICAgICAgICAgIHJldHVybiBhLm1hdGVyaWFsLmlkIC0gYi5tYXRlcmlhbC5pZDsKKyAg
ICAvLyBBcnJheSBDYWNoZXMgKHByb3ZpZGUgdHlwZWQgYXJyYXlzIGZvciB0ZW1wb3JhcnkgYnkg
c2l6ZSkKIAotICAgICAgICB9IGVsc2UgaWYgKCBhLnogIT09IGIueiApIHsKKyAgICB2YXIgYXJy
YXlDYWNoZUYzMiA9IFtdOworICAgIHZhciBhcnJheUNhY2hlSTMyID0gW107CiAKLSAgICAgICAg
ICAgIHJldHVybiBhLnogLSBiLno7CisgICAgLy8gRmxvYXQzMkFycmF5IGNhY2hlcyB1c2VkIGZv
ciB1cGxvYWRpbmcgTWF0cml4IHVuaWZvcm1zCiAKLSAgICAgICAgfSBlbHNlIHsKKyAgICB2YXIg
bWF0NGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSggMTYgKTsKKyAgICB2YXIgbWF0M2FycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSggOSApOworICAgIHZhciBtYXQyYXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KCA0ICk7CiAKLSAgICAgICAgICAgIHJldHVybiBhLmlkIC0gYi5pZDsKKyAgICAvLyBGbGF0
dGVuaW5nIGZvciBhcnJheXMgb2YgdmVjdG9ycyBhbmQgbWF0cmljZXMKIAotICAgICAgICB9Cisg
ICAgZnVuY3Rpb24gZmxhdHRlbiggYXJyYXksIG5CbG9ja3MsIGJsb2NrU2l6ZSApIHsKIAotICAg
IH0KKyAgICAgICAgdmFyIGZpcnN0RWxlbSA9IGFycmF5WyAwIF07CiAKLSAgICBmdW5jdGlvbiBy
ZXZlcnNlUGFpbnRlclNvcnRTdGFibGUoIGEsIGIgKSB7CisgICAgICAgIGlmICggZmlyc3RFbGVt
IDw9IDAgfHwgZmlyc3RFbGVtID4gMCApIHJldHVybiBhcnJheTsKKyAgICAgICAgLy8gdW5vcHRp
bWl6ZWQ6ICEgaXNOYU4oIGZpcnN0RWxlbSApCisgICAgICAgIC8vIHNlZSBodHRwOi8vamFja3Nv
bmR1bnN0YW4uY29tL2FydGljbGVzLzk4MwogCi0gICAgICAgIGlmICggYS5yZW5kZXJPcmRlciAh
PT0gYi5yZW5kZXJPcmRlciApIHsKKyAgICAgICAgdmFyIG4gPSBuQmxvY2tzICogYmxvY2tTaXpl
LAorICAgICAgICAgICAgciA9IGFycmF5Q2FjaGVGMzJbIG4gXTsKIAotICAgICAgICAgICAgcmV0
dXJuIGEucmVuZGVyT3JkZXIgLSBiLnJlbmRlck9yZGVyOworICAgICAgICBpZiAoIHIgPT09IHVu
ZGVmaW5lZCApIHsKIAotICAgICAgICB9IGlmICggYS56ICE9PSBiLnogKSB7CisgICAgICAgICAg
ICByID0gbmV3IEZsb2F0MzJBcnJheSggbiApOworICAgICAgICAgICAgYXJyYXlDYWNoZUYzMlsg
biBdID0gcjsKIAotICAgICAgICAgICAgcmV0dXJuIGIueiAtIGEuejsKKyAgICAgICAgfQogCi0g
ICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICggbkJsb2NrcyAhPT0gMCApIHsKIAotICAgICAg
ICAgICAgcmV0dXJuIGEuaWQgLSBiLmlkOworICAgICAgICAgICAgZmlyc3RFbGVtLnRvQXJyYXko
IHIsIDAgKTsKKworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAxLCBvZmZzZXQgPSAwOyBpICE9
PSBuQmxvY2tzOyArKyBpICkgeworCisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGJsb2NrU2l6
ZTsKKyAgICAgICAgICAgICAgICBhcnJheVsgaSBdLnRvQXJyYXkoIHIsIG9mZnNldCApOworCisg
ICAgICAgICAgICB9CiAKICAgICAgICAgfQogCi0gICAgfQorICAgICAgICByZXR1cm4gcjsKIAot
ICAgIGZ1bmN0aW9uIFdlYkdMUmVuZGVyTGlzdCgpIHsKKyAgICB9CiAKLSAgICAgICAgdmFyIG9w
YXF1ZSA9IFtdOwotICAgICAgICB2YXIgb3BhcXVlTGFzdEluZGV4ID0gLSAxOworICAgIGZ1bmN0
aW9uIGFycmF5c0VxdWFsKCBhLCBiICkgewogCi0gICAgICAgIHZhciB0cmFuc3BhcmVudCA9IFtd
OwotICAgICAgICB2YXIgdHJhbnNwYXJlbnRMYXN0SW5kZXggPSAtIDE7CisgICAgICAgIGlmICgg
YS5sZW5ndGggIT09IGIubGVuZ3RoICkgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGZ1bmN0aW9u
IGluaXQoKSB7CisgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGEubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKIAotICAgICAgICAgICAgb3BhcXVlTGFzdEluZGV4ID0gLSAxOwotICAgICAgICAg
ICAgdHJhbnNwYXJlbnRMYXN0SW5kZXggPSAtIDE7CisgICAgICAgICAgICBpZiAoIGFbIGkgXSAh
PT0gYlsgaSBdICkgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlv
biBwdXNoKCBvYmplY3QsIGdlb21ldHJ5LCBtYXRlcmlhbCwgeiwgZ3JvdXAgKSB7CisgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICB2YXIgYXJyYXksIGluZGV4OworICAgIH0KIAot
ICAgICAgICAgICAgLy8gYWxsb2NhdGUgdGhlIG5leHQgcG9zaXRpb24gaW4gdGhlIGFwcHJvcHJp
YXRlIGFycmF5CisgICAgZnVuY3Rpb24gY29weUFycmF5KCBhLCBiICkgewogCi0gICAgICAgICAg
ICBpZiAoIG1hdGVyaWFsLnRyYW5zcGFyZW50ICkgeworICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGwgPSBiLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICBhcnJheSA9
IHRyYW5zcGFyZW50OwotICAgICAgICAgICAgICAgIGluZGV4ID0gKysgdHJhbnNwYXJlbnRMYXN0
SW5kZXg7CisgICAgICAgICAgICBhWyBpIF0gPSBiWyBpIF07CiAKLSAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGFycmF5ID0gb3BhcXVlOwotICAgICAg
ICAgICAgICAgIGluZGV4ID0gKysgb3BhcXVlTGFzdEluZGV4OworICAgIH0KIAotICAgICAgICAg
ICAgfQorICAgIC8vIFRleHR1cmUgdW5pdCBhbGxvY2F0aW9uCiAKLSAgICAgICAgICAgIC8vIHJl
Y3ljbGUgZXhpc3RpbmcgcmVuZGVyIGl0ZW0gb3IgZ3JvdyB0aGUgYXJyYXkKKyAgICBmdW5jdGlv
biBhbGxvY1RleFVuaXRzKCByZW5kZXJlciwgbiApIHsKIAotICAgICAgICAgICAgdmFyIHJlbmRl
ckl0ZW0gPSBhcnJheVsgaW5kZXggXTsKKyAgICAgICAgdmFyIHIgPSBhcnJheUNhY2hlSTMyWyBu
IF07CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVySXRlbSApIHsKKyAgICAgICAgaWYgKCByID09
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICByZW5kZXJJdGVtLmlkID0gb2JqZWN0
LmlkOwotICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0ub2JqZWN0ID0gb2JqZWN0OwotICAgICAg
ICAgICAgICAgIHJlbmRlckl0ZW0uZ2VvbWV0cnkgPSBnZW9tZXRyeTsKLSAgICAgICAgICAgICAg
ICByZW5kZXJJdGVtLm1hdGVyaWFsID0gbWF0ZXJpYWw7Ci0gICAgICAgICAgICAgICAgcmVuZGVy
SXRlbS5wcm9ncmFtID0gbWF0ZXJpYWwucHJvZ3JhbTsKLSAgICAgICAgICAgICAgICByZW5kZXJJ
dGVtLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyOwotICAgICAgICAgICAgICAgIHJl
bmRlckl0ZW0ueiA9IHo7Ci0gICAgICAgICAgICAgICAgcmVuZGVySXRlbS5ncm91cCA9IGdyb3Vw
OworICAgICAgICAgICAgciA9IG5ldyBJbnQzMkFycmF5KCBuICk7CisgICAgICAgICAgICBhcnJh
eUNhY2hlSTMyWyBuIF0gPSByOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICByZW5kZXJJdGVtID0gewotICAgICAgICAgICAgICAgICAgICBpZDog
b2JqZWN0LmlkLAotICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LAotICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbDogbWF0ZXJpYWwsCi0gICAgICAgICAgICAgICAgICAgIHByb2dyYW06IG1hdGVyaWFsLnBy
b2dyYW0sCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlck9yZGVyOiBvYmplY3QucmVuZGVyT3Jk
ZXIsCi0gICAgICAgICAgICAgICAgICAgIHo6IHosCi0gICAgICAgICAgICAgICAgICAgIGdyb3Vw
OiBncm91cAotICAgICAgICAgICAgICAgIH07CisgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSAh
PT0gbjsgKysgaSApCisgICAgICAgICAgICByWyBpIF0gPSByZW5kZXJlci5hbGxvY1RleHR1cmVV
bml0KCk7CiAKLSAgICAgICAgICAgICAgICAvLyBhc3NlcnQoIGluZGV4ID09PSBhcnJheS5sZW5n
dGggKTsKLSAgICAgICAgICAgICAgICBhcnJheS5wdXNoKCByZW5kZXJJdGVtICk7CisgICAgICAg
IHJldHVybiByOwogCi0gICAgICAgICAgICB9CisgICAgfQogCi0gICAgICAgIH0KKyAgICAvLyAt
LS0gU2V0dGVycyAtLS0KIAotICAgICAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgLy8gTm90
ZTogRGVmaW5pbmcgdGhlc2UgbWV0aG9kcyBleHRlcm5hbGx5LCBiZWNhdXNlIHRoZXkgY29tZSBp
biBhIGJ1bmNoCisgICAgLy8gYW5kIHRoaXMgd2F5IHRoZWlyIG5hbWVzIG1pbmlmeS4KIAotICAg
ICAgICAgICAgb3BhcXVlLmxlbmd0aCA9IG9wYXF1ZUxhc3RJbmRleCArIDE7Ci0gICAgICAgICAg
ICB0cmFuc3BhcmVudC5sZW5ndGggPSB0cmFuc3BhcmVudExhc3RJbmRleCArIDE7CisgICAgLy8g
U2luZ2xlIHNjYWxhcgogCi0gICAgICAgIH0KKyAgICBmdW5jdGlvbiBzZXRWYWx1ZTFmKCBnbCwg
diApIHsKIAotICAgICAgICBmdW5jdGlvbiBzb3J0KCkgeworICAgICAgICB2YXIgY2FjaGUgPSB0
aGlzLmNhY2hlOwogCi0gICAgICAgICAgICBvcGFxdWUuc29ydCggcGFpbnRlclNvcnRTdGFibGUg
KTsKLSAgICAgICAgICAgIHRyYW5zcGFyZW50LnNvcnQoIHJldmVyc2VQYWludGVyU29ydFN0YWJs
ZSApOworICAgICAgICBpZiAoIGNhY2hlWyAwIF0gPT09IHYgKSByZXR1cm47CiAKLSAgICAgICAg
fQorICAgICAgICBnbC51bmlmb3JtMWYoIHRoaXMuYWRkciwgdiApOwogCi0gICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICBvcGFxdWU6IG9wYXF1ZSwKLSAgICAgICAgICAgIHRyYW5zcGFyZW50
OiB0cmFuc3BhcmVudCwKKyAgICAgICAgY2FjaGVbIDAgXSA9IHY7CiAKLSAgICAgICAgICAgIGlu
aXQ6IGluaXQsCi0gICAgICAgICAgICBwdXNoOiBwdXNoLAotICAgICAgICAgICAgZmluaXNoOiBm
aW5pc2gsCisgICAgfQogCi0gICAgICAgICAgICBzb3J0OiBzb3J0Ci0gICAgICAgIH07CisgICAg
ZnVuY3Rpb24gc2V0VmFsdWUxaSggZ2wsIHYgKSB7CisKKyAgICAgICAgdmFyIGNhY2hlID0gdGhp
cy5jYWNoZTsKKworICAgICAgICBpZiAoIGNhY2hlWyAwIF0gPT09IHYgKSByZXR1cm47CisKKyAg
ICAgICAgZ2wudW5pZm9ybTFpKCB0aGlzLmFkZHIsIHYgKTsKKworICAgICAgICBjYWNoZVsgMCBd
ID0gdjsKIAogICAgIH0KIAotICAgIGZ1bmN0aW9uIFdlYkdMUmVuZGVyTGlzdHMoKSB7CisgICAg
Ly8gU2luZ2xlIGZsb2F0IHZlY3RvciAoZnJvbSBmbGF0IGFycmF5IG9yIFRIUkVFLlZlY3Rvck4p
CiAKLSAgICAgICAgdmFyIGxpc3RzID0ge307CisgICAgZnVuY3Rpb24gc2V0VmFsdWUyZnYoIGds
LCB2ICkgewogCi0gICAgICAgIGZ1bmN0aW9uIGdldCggc2NlbmUsIGNhbWVyYSApIHsKKyAgICAg
ICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKIAotICAgICAgICAgICAgdmFyIGhhc2ggPSBzY2Vu
ZS5pZCArICcsJyArIGNhbWVyYS5pZDsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gbGlzdHNbIGhh
c2ggXTsKKyAgICAgICAgaWYgKCB2LnggIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAg
aWYgKCBsaXN0ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIGNhY2hlWyAwIF0g
IT09IHYueCB8fCBjYWNoZVsgMSBdICE9PSB2LnkgKSB7CiAKLSAgICAgICAgICAgICAgICAvLyBj
b25zb2xlLmxvZyggJ1RIUkVFLldlYkdMUmVuZGVyTGlzdHM6JywgaGFzaCApOworICAgICAgICAg
ICAgICAgIGdsLnVuaWZvcm0yZiggdGhpcy5hZGRyLCB2LngsIHYueSApOwogCi0gICAgICAgICAg
ICAgICAgbGlzdCA9IG5ldyBXZWJHTFJlbmRlckxpc3QoKTsKLSAgICAgICAgICAgICAgICBsaXN0
c1sgaGFzaCBdID0gbGlzdDsKKyAgICAgICAgICAgICAgICBjYWNoZVsgMCBdID0gdi54OworICAg
ICAgICAgICAgICAgIGNhY2hlWyAxIF0gPSB2Lnk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjsKIAotICAgICAgICBm
dW5jdGlvbiBkaXNwb3NlKCkgeworICAgICAgICAgICAgZ2wudW5pZm9ybTJmdiggdGhpcy5hZGRy
LCB2ICk7CiAKLSAgICAgICAgICAgIGxpc3RzID0ge307CisgICAgICAgICAgICBjb3B5QXJyYXko
IGNhY2hlLCB2ICk7CiAKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICBnZXQ6IGdldCwKLSAgICAgICAgICAgIGRpc3Bvc2U6IGRpc3Bvc2UKLSAgICAgICAgfTsKLQog
ICAgIH0KIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5j
b20vCi0gICAgICovCisgICAgZnVuY3Rpb24gc2V0VmFsdWUzZnYoIGdsLCB2ICkgewogCi0gICAg
ZnVuY3Rpb24gV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXIoIGdsLCBleHRlbnNpb25zLCBpbmZv
UmVuZGVyICkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogCi0gICAgICAgIHZh
ciBtb2RlOworICAgICAgICBpZiAoIHYueCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIGZ1
bmN0aW9uIHNldE1vZGUoIHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBjYWNoZVsgMCBdICE9
PSB2LnggfHwgY2FjaGVbIDEgXSAhPT0gdi55IHx8IGNhY2hlWyAyIF0gIT09IHYueiApIHsKIAot
ICAgICAgICAgICAgbW9kZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0zZigg
dGhpcy5hZGRyLCB2LngsIHYueSwgdi56ICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhY2hlWyAwIF0gPSB2Lng7CisgICAgICAgICAgICAgICAgY2FjaGVbIDEgXSA9IHYueTsKKyAg
ICAgICAgICAgICAgICBjYWNoZVsgMiBdID0gdi56OwogCi0gICAgICAgIHZhciB0eXBlLCBieXRl
c1BlckVsZW1lbnQ7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gc2V0SW5kZXgo
IHZhbHVlICkgeworICAgICAgICB9IGVsc2UgaWYgKCB2LnIgIT09IHVuZGVmaW5lZCApIHsKIAot
ICAgICAgICAgICAgdHlwZSA9IHZhbHVlLnR5cGU7Ci0gICAgICAgICAgICBieXRlc1BlckVsZW1l
bnQgPSB2YWx1ZS5ieXRlc1BlckVsZW1lbnQ7CisgICAgICAgICAgICBpZiAoIGNhY2hlWyAwIF0g
IT09IHYuciB8fCBjYWNoZVsgMSBdICE9PSB2LmcgfHwgY2FjaGVbIDIgXSAhPT0gdi5iICkgewog
Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBnbC51bmlmb3JtM2YoIHRoaXMuYWRkciwgdi5y
LCB2LmcsIHYuYiApOwogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlciggc3RhcnQsIGNvdW50ICkg
eworICAgICAgICAgICAgICAgIGNhY2hlWyAwIF0gPSB2LnI7CisgICAgICAgICAgICAgICAgY2Fj
aGVbIDEgXSA9IHYuZzsKKyAgICAgICAgICAgICAgICBjYWNoZVsgMiBdID0gdi5iOwogCi0gICAg
ICAgICAgICBnbC5kcmF3RWxlbWVudHMoIG1vZGUsIGNvdW50LCB0eXBlLCBzdGFydCAqIGJ5dGVz
UGVyRWxlbWVudCApOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CiAKLSAgICAg
ICAgICAgIGluZm9SZW5kZXIuY2FsbHMgKys7Ci0gICAgICAgICAgICBpbmZvUmVuZGVyLnZlcnRp
Y2VzICs9IGNvdW50OworICAgICAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSAp
IHJldHVybjsKIAotICAgICAgICAgICAgaWYgKCBtb2RlID09PSBnbC5UUklBTkdMRVMgKSBpbmZv
UmVuZGVyLmZhY2VzICs9IGNvdW50IC8gMzsKKyAgICAgICAgICAgIGdsLnVuaWZvcm0zZnYoIHRo
aXMuYWRkciwgdiApOworCisgICAgICAgICAgICBjb3B5QXJyYXkoIGNhY2hlLCB2ICk7CiAKICAg
ICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlckluc3RhbmNlcyggZ2VvbWV0cnksIHN0
YXJ0LCBjb3VudCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBleHRl
bnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7CisgICAgZnVuY3Rpb24gc2V0
VmFsdWU0ZnYoIGdsLCB2ICkgewogCi0gICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiA9PT0gbnVs
bCApIHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKIAotICAgICAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcg
VEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBv
cnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuJyApOwotICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCB2LnggIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAg
ICAgaWYgKCBjYWNoZVsgMCBdICE9PSB2LnggfHwgY2FjaGVbIDEgXSAhPT0gdi55IHx8IGNhY2hl
WyAyIF0gIT09IHYueiB8fCBjYWNoZVsgMyBdICE9PSB2LncgKSB7CisKKyAgICAgICAgICAgICAg
ICBnbC51bmlmb3JtNGYoIHRoaXMuYWRkciwgdi54LCB2LnksIHYueiwgdi53ICk7CisKKyAgICAg
ICAgICAgICAgICBjYWNoZVsgMCBdID0gdi54OworICAgICAgICAgICAgICAgIGNhY2hlWyAxIF0g
PSB2Lnk7CisgICAgICAgICAgICAgICAgY2FjaGVbIDIgXSA9IHYuejsKKyAgICAgICAgICAgICAg
ICBjYWNoZVsgMyBdID0gdi53OwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGV4dGVu
c2lvbi5kcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSggbW9kZSwgY291bnQsIHR5cGUsIHN0YXJ0
ICogYnl0ZXNQZXJFbGVtZW50LCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCApOworICAgICAg
ICB9IGVsc2UgewogCi0gICAgICAgICAgICBpbmZvUmVuZGVyLmNhbGxzICsrOwotICAgICAgICAg
ICAgaW5mb1JlbmRlci52ZXJ0aWNlcyArPSBjb3VudCAqIGdlb21ldHJ5Lm1heEluc3RhbmNlZENv
dW50OworICAgICAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjsK
IAotICAgICAgICAgICAgaWYgKCBtb2RlID09PSBnbC5UUklBTkdMRVMgKSBpbmZvUmVuZGVyLmZh
Y2VzICs9IGdlb21ldHJ5Lm1heEluc3RhbmNlZENvdW50ICogY291bnQgLyAzOworICAgICAgICAg
ICAgZ2wudW5pZm9ybTRmdiggdGhpcy5hZGRyLCB2ICk7CisKKyAgICAgICAgICAgIGNvcHlBcnJh
eSggY2FjaGUsIHYgKTsKIAogICAgICAgICB9CiAKLSAgICAgICAgLy8KKyAgICB9CiAKLSAgICAg
ICAgdGhpcy5zZXRNb2RlID0gc2V0TW9kZTsKLSAgICAgICAgdGhpcy5zZXRJbmRleCA9IHNldElu
ZGV4OwotICAgICAgICB0aGlzLnJlbmRlciA9IHJlbmRlcjsKLSAgICAgICAgdGhpcy5yZW5kZXJJ
bnN0YW5jZXMgPSByZW5kZXJJbnN0YW5jZXM7CisgICAgLy8gU2luZ2xlIG1hdHJpeCAoZnJvbSBm
bGF0IGFycmF5IG9yIE1hdHJpeE4pCiAKLSAgICB9CisgICAgZnVuY3Rpb24gc2V0VmFsdWUyZm0o
IGdsLCB2ICkgewogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJk
b29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKKyAgICAg
ICAgdmFyIGVsZW1lbnRzID0gdi5lbGVtZW50czsKIAotICAgIGZ1bmN0aW9uIFdlYkdMQnVmZmVy
UmVuZGVyZXIoIGdsLCBleHRlbnNpb25zLCBpbmZvUmVuZGVyICkgeworICAgICAgICBpZiAoIGVs
ZW1lbnRzID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdmFyIG1vZGU7CisgICAgICAgICAg
ICBpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuOwogCi0gICAgICAgIGZ1bmN0
aW9uIHNldE1vZGUoIHZhbHVlICkgeworICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDJmdigg
dGhpcy5hZGRyLCBmYWxzZSwgdiApOwogCi0gICAgICAgICAgICBtb2RlID0gdmFsdWU7CisgICAg
ICAgICAgICBjb3B5QXJyYXkoIGNhY2hlLCB2ICk7CiAKLSAgICAgICAgfQorICAgICAgICB9IGVs
c2UgewogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlciggc3RhcnQsIGNvdW50ICkgeworICAgICAg
ICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIGVsZW1lbnRzICkgKSByZXR1cm47CiAKLSAg
ICAgICAgICAgIGdsLmRyYXdBcnJheXMoIG1vZGUsIHN0YXJ0LCBjb3VudCApOworICAgICAgICAg
ICAgbWF0MmFycmF5LnNldCggZWxlbWVudHMgKTsKIAotICAgICAgICAgICAgaW5mb1JlbmRlci5j
YWxscyArKzsKLSAgICAgICAgICAgIGluZm9SZW5kZXIudmVydGljZXMgKz0gY291bnQ7CisgICAg
ICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBtYXQyYXJyYXkg
KTsKIAotICAgICAgICAgICAgaWYgKCBtb2RlID09PSBnbC5UUklBTkdMRVMgKSBpbmZvUmVuZGVy
LmZhY2VzICs9IGNvdW50IC8gMzsKKyAgICAgICAgICAgIGNvcHlBcnJheSggY2FjaGUsIGVsZW1l
bnRzICk7CiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlckluc3RhbmNlcygg
Z2VvbWV0cnksIHN0YXJ0LCBjb3VudCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgIHZhciBleHRl
bnNpb24gPSBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7CisgICAg
ZnVuY3Rpb24gc2V0VmFsdWUzZm0oIGdsLCB2ICkgewogCi0gICAgICAgICAgICBpZiAoIGV4dGVu
c2lvbiA9PT0gbnVsbCApIHsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKKyAgICAg
ICAgdmFyIGVsZW1lbnRzID0gdi5lbGVtZW50czsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoICdUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRC
dWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5H
TEVfaW5zdGFuY2VkX2FycmF5cy4nICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoIGVsZW1lbnRzID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47CiAKLSAgICAgICAg
ICAgIHZhciBwb3NpdGlvbiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CisgICAgICAg
ICAgICBnbC51bmlmb3JtTWF0cml4M2Z2KCB0aGlzLmFkZHIsIGZhbHNlLCB2ICk7CiAKLSAgICAg
ICAgICAgIGlmICggcG9zaXRpb24uaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIHsKKyAg
ICAgICAgICAgIGNvcHlBcnJheSggY2FjaGUsIHYgKTsKIAotICAgICAgICAgICAgICAgIGNvdW50
ID0gcG9zaXRpb24uZGF0YS5jb3VudDsKKyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAg
ICAgIGV4dGVuc2lvbi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoIG1vZGUsIDAsIGNvdW50LCBn
ZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCApOworICAgICAgICAgICAgaWYgKCBhcnJheXNFcXVh
bCggY2FjaGUsIGVsZW1lbnRzICkgKSByZXR1cm47CiAKLSAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtYXQzYXJyYXkuc2V0KCBlbGVtZW50cyApOwogCi0gICAgICAgICAgICAgICAg
ZXh0ZW5zaW9uLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSggbW9kZSwgc3RhcnQsIGNvdW50LCBn
ZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCApOworICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJp
eDNmdiggdGhpcy5hZGRyLCBmYWxzZSwgbWF0M2FycmF5ICk7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNvcHlBcnJheSggY2FjaGUsIGVsZW1lbnRzICk7CiAKLSAgICAgICAgICAgIGlu
Zm9SZW5kZXIuY2FsbHMgKys7Ci0gICAgICAgICAgICBpbmZvUmVuZGVyLnZlcnRpY2VzICs9IGNv
dW50ICogZ2VvbWV0cnkubWF4SW5zdGFuY2VkQ291bnQ7CisgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCBtb2RlID09PSBnbC5UUklBTkdMRVMgKSBpbmZvUmVuZGVyLmZhY2VzICs9IGdlb21l
dHJ5Lm1heEluc3RhbmNlZENvdW50ICogY291bnQgLyAzOworICAgIH0KIAotICAgICAgICB9Cisg
ICAgZnVuY3Rpb24gc2V0VmFsdWU0Zm0oIGdsLCB2ICkgewogCi0gICAgICAgIC8vCisgICAgICAg
IHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CisgICAgICAgIHZhciBlbGVtZW50cyA9IHYuZWxlbWVu
dHM7CiAKLSAgICAgICAgdGhpcy5zZXRNb2RlID0gc2V0TW9kZTsKLSAgICAgICAgdGhpcy5yZW5k
ZXIgPSByZW5kZXI7Ci0gICAgICAgIHRoaXMucmVuZGVySW5zdGFuY2VzID0gcmVuZGVySW5zdGFu
Y2VzOworICAgICAgICBpZiAoIGVsZW1lbnRzID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICB9Cisg
ICAgICAgICAgICBpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgdiApICkgcmV0dXJuOwogCi0gICAg
LyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8K
KyAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoIHRoaXMuYWRkciwgZmFsc2UsIHYgKTsK
IAotICAgIGZ1bmN0aW9uIFdlYkdMR2VvbWV0cmllcyggZ2wsIGF0dHJpYnV0ZXMsIGluZm9NZW1v
cnkgKSB7CisgICAgICAgICAgICBjb3B5QXJyYXkoIGNhY2hlLCB2ICk7CiAKLSAgICAgICAgdmFy
IGdlb21ldHJpZXMgPSB7fTsKLSAgICAgICAgdmFyIHdpcmVmcmFtZUF0dHJpYnV0ZXMgPSB7fTsK
KyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICBmdW5jdGlvbiBvbkdlb21ldHJ5RGlzcG9zZSgg
ZXZlbnQgKSB7CisgICAgICAgICAgICBpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgZWxlbWVudHMg
KSApIHJldHVybjsKIAotICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gZXZlbnQudGFyZ2V0Owot
ICAgICAgICAgICAgdmFyIGJ1ZmZlcmdlb21ldHJ5ID0gZ2VvbWV0cmllc1sgZ2VvbWV0cnkuaWQg
XTsKKyAgICAgICAgICAgIG1hdDRhcnJheS5zZXQoIGVsZW1lbnRzICk7CiAKLSAgICAgICAgICAg
IGlmICggYnVmZmVyZ2VvbWV0cnkuaW5kZXggIT09IG51bGwgKSB7CisgICAgICAgICAgICBnbC51
bmlmb3JtTWF0cml4NGZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBtYXQ0YXJyYXkgKTsKIAotICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMucmVtb3ZlKCBidWZmZXJnZW9tZXRyeS5pbmRleCApOworICAg
ICAgICAgICAgY29weUFycmF5KCBjYWNoZSwgZWxlbWVudHMgKTsKIAotICAgICAgICAgICAgfQor
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBuYW1lIGluIGJ1ZmZlcmdlb21ldHJ5
LmF0dHJpYnV0ZXMgKSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlcy5yZW1v
dmUoIGJ1ZmZlcmdlb21ldHJ5LmF0dHJpYnV0ZXNbIG5hbWUgXSApOworICAgIC8vIFNpbmdsZSB0
ZXh0dXJlICgyRCAvIEN1YmUpCiAKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBzZXRWYWx1
ZVQxKCBnbCwgdiwgcmVuZGVyZXIgKSB7CiAKLSAgICAgICAgICAgIGdlb21ldHJ5LnJlbW92ZUV2
ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25HZW9tZXRyeURpc3Bvc2UgKTsKKyAgICAgICAgdmFy
IGNhY2hlID0gdGhpcy5jYWNoZTsKKyAgICAgICAgdmFyIHVuaXQgPSByZW5kZXJlci5hbGxvY1Rl
eHR1cmVVbml0KCk7CiAKLSAgICAgICAgICAgIGRlbGV0ZSBnZW9tZXRyaWVzWyBnZW9tZXRyeS5p
ZCBdOworICAgICAgICBpZiAoIGNhY2hlWyAwIF0gIT09IHVuaXQgKSB7CiAKLSAgICAgICAgICAg
IC8vIFRPRE8gUmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCisgICAgICAgICAgICBnbC51bmlmb3JtMWko
IHRoaXMuYWRkciwgdW5pdCApOworICAgICAgICAgICAgY2FjaGVbIDAgXSA9IHVuaXQ7CiAKLSAg
ICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzWyBnZW9tZXRyeS5p
ZCBdOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggYXR0cmlidXRlICkgeworICAgICAg
ICByZW5kZXJlci5zZXRUZXh0dXJlMkQoIHYgfHwgZW1wdHlUZXh0dXJlLCB1bml0ICk7CiAKLSAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlbW92ZSggYXR0cmlidXRlICk7Ci0gICAgICAgICAg
ICAgICAgZGVsZXRlIHdpcmVmcmFtZUF0dHJpYnV0ZXNbIGdlb21ldHJ5LmlkIF07CisgICAgfQog
Ci0gICAgICAgICAgICB9CisgICAgZnVuY3Rpb24gc2V0VmFsdWVUNiggZ2wsIHYsIHJlbmRlcmVy
ICkgewogCi0gICAgICAgICAgICBhdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVzWyBidWZm
ZXJnZW9tZXRyeS5pZCBdOworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOworICAgICAg
ICB2YXIgdW5pdCA9IHJlbmRlcmVyLmFsbG9jVGV4dHVyZVVuaXQoKTsKIAotICAgICAgICAgICAg
aWYgKCBhdHRyaWJ1dGUgKSB7CisgICAgICAgIGlmICggY2FjaGVbIDAgXSAhPT0gdW5pdCApIHsK
IAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucmVtb3ZlKCBhdHRyaWJ1dGUgKTsKLSAgICAg
ICAgICAgICAgICBkZWxldGUgd2lyZWZyYW1lQXR0cmlidXRlc1sgYnVmZmVyZ2VvbWV0cnkuaWQg
XTsKKyAgICAgICAgICAgIGdsLnVuaWZvcm0xaSggdGhpcy5hZGRyLCB1bml0ICk7CisgICAgICAg
ICAgICBjYWNoZVsgMCBdID0gdW5pdDsKIAotICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAg
ICAgICAgICAgIC8vCisgICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmVDdWJlKCB2IHx8IGVtcHR5
Q3ViZVRleHR1cmUsIHVuaXQgKTsKIAotICAgICAgICAgICAgaW5mb01lbW9yeS5nZW9tZXRyaWVz
IC0tOworICAgIH0KIAotICAgICAgICB9CisgICAgLy8gSW50ZWdlciAvIEJvb2xlYW4gdmVjdG9y
cyBvciBhcnJheXMgdGhlcmVvZiAoYWx3YXlzIGZsYXQgYXJyYXlzKQogCi0gICAgICAgIGZ1bmN0
aW9uIGdldCggb2JqZWN0LCBnZW9tZXRyeSApIHsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZTJpdigg
Z2wsIHYgKSB7CiAKLSAgICAgICAgICAgIHZhciBidWZmZXJnZW9tZXRyeSA9IGdlb21ldHJpZXNb
IGdlb21ldHJ5LmlkIF07CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CiAKLSAgICAg
ICAgICAgIGlmICggYnVmZmVyZ2VvbWV0cnkgKSByZXR1cm4gYnVmZmVyZ2VvbWV0cnk7CisgICAg
ICAgIGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47CiAKLSAgICAgICAgICAg
IGdlb21ldHJ5LmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25HZW9tZXRyeURpc3Bvc2Ug
KTsKKyAgICAgICAgZ2wudW5pZm9ybTJpdiggdGhpcy5hZGRyLCB2ICk7CiAKLSAgICAgICAgICAg
IGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKKyAgICAgICAgY29weUFycmF5KCBj
YWNoZSwgdiApOwogCi0gICAgICAgICAgICAgICAgYnVmZmVyZ2VvbWV0cnkgPSBnZW9tZXRyeTsK
KyAgICB9CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGdlb21ldHJ5LmlzR2VvbWV0cnkgKSB7
CisgICAgZnVuY3Rpb24gc2V0VmFsdWUzaXYoIGdsLCB2ICkgewogCi0gICAgICAgICAgICAgICAg
aWYgKCBnZW9tZXRyeS5fYnVmZmVyR2VvbWV0cnkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
dmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKIAotICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5f
YnVmZmVyR2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKS5zZXRGcm9tT2JqZWN0KCBvYmpl
Y3QgKTsKKyAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZ2wudW5pZm9ybTNpdiggdGhpcy5hZGRyLCB2ICk7
CiAKLSAgICAgICAgICAgICAgICBidWZmZXJnZW9tZXRyeSA9IGdlb21ldHJ5Ll9idWZmZXJHZW9t
ZXRyeTsKKyAgICAgICAgY29weUFycmF5KCBjYWNoZSwgdiApOwogCi0gICAgICAgICAgICB9Cisg
ICAgfQogCi0gICAgICAgICAgICBnZW9tZXRyaWVzWyBnZW9tZXRyeS5pZCBdID0gYnVmZmVyZ2Vv
bWV0cnk7CisgICAgZnVuY3Rpb24gc2V0VmFsdWU0aXYoIGdsLCB2ICkgewogCi0gICAgICAgICAg
ICBpbmZvTWVtb3J5Lmdlb21ldHJpZXMgKys7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2Fj
aGU7CiAKLSAgICAgICAgICAgIHJldHVybiBidWZmZXJnZW9tZXRyeTsKKyAgICAgICAgaWYgKCBh
cnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjsKIAotICAgICAgICB9CisgICAgICAgIGds
LnVuaWZvcm00aXYoIHRoaXMuYWRkciwgdiApOwogCi0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgg
Z2VvbWV0cnkgKSB7CisgICAgICAgIGNvcHlBcnJheSggY2FjaGUsIHYgKTsKIAotICAgICAgICAg
ICAgdmFyIGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7Ci0gICAgICAgICAgICB2YXIgZ2VvbWV0cnlB
dHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlczsKKyAgICB9CiAKLSAgICAgICAgICAgIGlm
ICggaW5kZXggIT09IG51bGwgKSB7CisgICAgLy8gSGVscGVyIHRvIHBpY2sgdGhlIHJpZ2h0IHNl
dHRlciBmb3IgdGhlIHNpbmd1bGFyIGNhc2UKIAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMu
dXBkYXRlKCBpbmRleCwgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIgKTsKKyAgICBmdW5jdGlvbiBn
ZXRTaW5ndWxhclNldHRlciggdHlwZSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICBzd2l0
Y2ggKCB0eXBlICkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBnZW9tZXRyeUF0
dHJpYnV0ZXMgKSB7CisgICAgICAgICAgICBjYXNlIDB4MTQwNjogcmV0dXJuIHNldFZhbHVlMWY7
IC8vIEZMT0FUCisgICAgICAgICAgICBjYXNlIDB4OGI1MDogcmV0dXJuIHNldFZhbHVlMmZ2OyAv
LyBfVkVDMgorICAgICAgICAgICAgY2FzZSAweDhiNTE6IHJldHVybiBzZXRWYWx1ZTNmdjsgLy8g
X1ZFQzMKKyAgICAgICAgICAgIGNhc2UgMHg4YjUyOiByZXR1cm4gc2V0VmFsdWU0ZnY7IC8vIF9W
RUM0CiAKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnVwZGF0ZSggZ2VvbWV0cnlBdHRyaWJ1
dGVzWyBuYW1lIF0sIGdsLkFSUkFZX0JVRkZFUiApOworICAgICAgICAgICAgY2FzZSAweDhiNWE6
IHJldHVybiBzZXRWYWx1ZTJmbTsgLy8gX01BVDIKKyAgICAgICAgICAgIGNhc2UgMHg4YjViOiBy
ZXR1cm4gc2V0VmFsdWUzZm07IC8vIF9NQVQzCisgICAgICAgICAgICBjYXNlIDB4OGI1YzogcmV0
dXJuIHNldFZhbHVlNGZtOyAvLyBfTUFUNAogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIDB4OGI1ZTogY2FzZSAweDhkNjY6IHJldHVybiBzZXRWYWx1ZVQxOyAvLyBTQU1QTEVSXzJE
LCBTQU1QTEVSX0VYVEVSTkFMX09FUworICAgICAgICAgICAgY2FzZSAweDhiNjA6IHJldHVybiBz
ZXRWYWx1ZVQ2OyAvLyBTQU1QTEVSX0NVQkUKIAotICAgICAgICAgICAgLy8gbW9ycGggdGFyZ2V0
cworICAgICAgICAgICAgY2FzZSAweDE0MDQ6IGNhc2UgMHg4YjU2OiByZXR1cm4gc2V0VmFsdWUx
aTsgLy8gSU5ULCBCT09MCisgICAgICAgICAgICBjYXNlIDB4OGI1MzogY2FzZSAweDhiNTc6IHJl
dHVybiBzZXRWYWx1ZTJpdjsgLy8gX1ZFQzIKKyAgICAgICAgICAgIGNhc2UgMHg4YjU0OiBjYXNl
IDB4OGI1ODogcmV0dXJuIHNldFZhbHVlM2l2OyAvLyBfVkVDMworICAgICAgICAgICAgY2FzZSAw
eDhiNTU6IGNhc2UgMHg4YjU5OiByZXR1cm4gc2V0VmFsdWU0aXY7IC8vIF9WRUM0CiAKLSAgICAg
ICAgICAgIHZhciBtb3JwaEF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXM7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gbW9ycGhBdHRyaWJ1dGVz
ICkgeworICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG1vcnBoQXR0cmlidXRl
c1sgbmFtZSBdOworICAgIC8vIEFycmF5IG9mIHNjYWxhcnMKIAotICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgZnVu
Y3Rpb24gc2V0VmFsdWUxZnYoIGdsLCB2ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMudXBkYXRlKCBhcnJheVsgaSBdLCBnbC5BUlJBWV9CVUZGRVIgKTsKKyAgICAgICAgdmFy
IGNhY2hlID0gdGhpcy5jYWNoZTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCBh
cnJheXNFcXVhbCggY2FjaGUsIHYgKSApIHJldHVybjsKIAotICAgICAgICAgICAgfQorICAgICAg
ICBnbC51bmlmb3JtMWZ2KCB0aGlzLmFkZHIsIHYgKTsKIAotICAgICAgICB9CisgICAgICAgIGNv
cHlBcnJheSggY2FjaGUsIHYgKTsKIAotICAgICAgICBmdW5jdGlvbiBnZXRXaXJlZnJhbWVBdHRy
aWJ1dGUoIGdlb21ldHJ5ICkgeworICAgIH0KKyAgICBmdW5jdGlvbiBzZXRWYWx1ZTFpdiggZ2ws
IHYgKSB7CiAKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB3aXJlZnJhbWVBdHRyaWJ1dGVz
WyBnZW9tZXRyeS5pZCBdOworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOwogCi0gICAg
ICAgICAgICBpZiAoIGF0dHJpYnV0ZSApIHJldHVybiBhdHRyaWJ1dGU7CisgICAgICAgIGlmICgg
YXJyYXlzRXF1YWwoIGNhY2hlLCB2ICkgKSByZXR1cm47CiAKLSAgICAgICAgICAgIHZhciBpbmRp
Y2VzID0gW107CisgICAgICAgIGdsLnVuaWZvcm0xaXYoIHRoaXMuYWRkciwgdiApOwogCi0gICAg
ICAgICAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IGdlb21ldHJ5LmluZGV4OwotICAgICAgICAgICAg
dmFyIGdlb21ldHJ5QXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7CisgICAgICAgIGNv
cHlBcnJheSggY2FjaGUsIHYgKTsKIAotICAgICAgICAgICAgLy8gY29uc29sZS50aW1lKCAnd2ly
ZWZyYW1lJyApOworICAgIH0KIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeUluZGV4ICE9PSBu
dWxsICkgeworICAgIC8vIEFycmF5IG9mIHZlY3RvcnMgKGZsYXQgb3IgZnJvbSBUSFJFRSBjbGFz
c2VzKQogCi0gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gZ2VvbWV0cnlJbmRleC5hcnJheTsK
KyAgICBmdW5jdGlvbiBzZXRWYWx1ZVYyYSggZ2wsIHYgKSB7CiAKLSAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpICs9IDMgKSB7CisgICAg
ICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CisgICAgICAgIHZhciBkYXRhID0gZmxhdHRlbigg
diwgdGhpcy5zaXplLCAyICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBhcnJheVsg
aSArIDAgXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBhcnJheVsgaSArIDEgXTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGMgPSBhcnJheVsgaSArIDIgXTsKKyAgICAgICAgaWYgKCBh
cnJheXNFcXVhbCggY2FjaGUsIGRhdGEgKSApIHJldHVybjsKIAotICAgICAgICAgICAgICAgICAg
ICBpbmRpY2VzLnB1c2goIGEsIGIsIGIsIGMsIGMsIGEgKTsKKyAgICAgICAgZ2wudW5pZm9ybTJm
diggdGhpcy5hZGRyLCBkYXRhICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMu
dXBkYXRlQ2FjaGUoIGRhdGEgKTsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICB9CiAKLSAg
ICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBnZW9tZXRyeUF0dHJpYnV0ZXMucG9zaXRpb24uYXJy
YXk7CisgICAgZnVuY3Rpb24gc2V0VmFsdWVWM2EoIGdsLCB2ICkgewogCi0gICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gKCBhcnJheS5sZW5ndGggLyAzICkgLSAxOyBpIDwgbDsg
aSArPSAzICkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOworICAgICAgICB2YXIg
ZGF0YSA9IGZsYXR0ZW4oIHYsIHRoaXMuc2l6ZSwgMyApOwogCi0gICAgICAgICAgICAgICAgICAg
IHZhciBhID0gaSArIDA7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBiID0gaSArIDE7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjID0gaSArIDI7CisgICAgICAgIGlmICggYXJyYXlzRXF1YWwo
IGNhY2hlLCBkYXRhICkgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgaW5kaWNlcy5w
dXNoKCBhLCBiLCBiLCBjLCBjLCBhICk7CisgICAgICAgIGdsLnVuaWZvcm0zZnYoIHRoaXMuYWRk
ciwgZGF0YSApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0ZUNhY2hl
KCBkYXRhICk7CiAKLSAgICAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIC8vIGNvbnNv
bGUudGltZUVuZCggJ3dpcmVmcmFtZScgKTsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZVY0YSggZ2ws
IHYgKSB7CiAKLSAgICAgICAgICAgIGF0dHJpYnV0ZSA9IG5ldyAoIGFycmF5TWF4KCBpbmRpY2Vz
ICkgPiA2NTUzNSA/IFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSA6IFVpbnQxNkJ1ZmZlckF0dHJpYnV0
ZSApKCBpbmRpY2VzLCAxICk7CisgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7CisgICAg
ICAgIHZhciBkYXRhID0gZmxhdHRlbiggdiwgdGhpcy5zaXplLCA0ICk7CiAKLSAgICAgICAgICAg
IGF0dHJpYnV0ZXMudXBkYXRlKCBhdHRyaWJ1dGUsIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSICk7
CisgICAgICAgIGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCBkYXRhICkgKSByZXR1cm47CiAKLSAg
ICAgICAgICAgIHdpcmVmcmFtZUF0dHJpYnV0ZXNbIGdlb21ldHJ5LmlkIF0gPSBhdHRyaWJ1dGU7
CisgICAgICAgIGdsLnVuaWZvcm00ZnYoIHRoaXMuYWRkciwgZGF0YSApOwogCi0gICAgICAgICAg
ICByZXR1cm4gYXR0cmlidXRlOworICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCBkYXRhICk7CiAK
LSAgICAgICAgfQorICAgIH0KIAotICAgICAgICByZXR1cm4geworICAgIC8vIEFycmF5IG9mIG1h
dHJpY2VzIChmbGF0IG9yIGZyb20gVEhSRUUgY2xhc2VzKQogCi0gICAgICAgICAgICBnZXQ6IGdl
dCwKLSAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLAorICAgIGZ1bmN0aW9uIHNldFZhbHVlTTJh
KCBnbCwgdiApIHsKIAotICAgICAgICAgICAgZ2V0V2lyZWZyYW1lQXR0cmlidXRlOiBnZXRXaXJl
ZnJhbWVBdHRyaWJ1dGUKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKKyAgICAgICAg
dmFyIGRhdGEgPSBmbGF0dGVuKCB2LCB0aGlzLnNpemUsIDQgKTsKIAotICAgICAgICB9OworICAg
ICAgICBpZiAoIGFycmF5c0VxdWFsKCBjYWNoZSwgZGF0YSApICkgcmV0dXJuOwogCi0gICAgfQor
ICAgICAgICBnbC51bmlmb3JtTWF0cml4MmZ2KCB0aGlzLmFkZHIsIGZhbHNlLCBkYXRhICk7CiAK
LSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAg
ICAqLworICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCBkYXRhICk7CiAKLSAgICBmdW5jdGlvbiBX
ZWJHTExpZ2h0cygpIHsKKyAgICB9CiAKLSAgICAgICAgdmFyIGxpZ2h0cyA9IHt9OworICAgIGZ1
bmN0aW9uIHNldFZhbHVlTTNhKCBnbCwgdiApIHsKIAotICAgICAgICByZXR1cm4geworICAgICAg
ICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOworICAgICAgICB2YXIgZGF0YSA9IGZsYXR0ZW4oIHYs
IHRoaXMuc2l6ZSwgOSApOwogCi0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICggbGlnaHQgKSB7
CisgICAgICAgIGlmICggYXJyYXlzRXF1YWwoIGNhY2hlLCBkYXRhICkgKSByZXR1cm47CiAKLSAg
ICAgICAgICAgICAgICBpZiAoIGxpZ2h0c1sgbGlnaHQuaWQgXSAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICBnbC51bmlmb3JtTWF0cml4M2Z2KCB0aGlzLmFkZHIsIGZhbHNlLCBkYXRhICk7CiAK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpZ2h0c1sgbGlnaHQuaWQgXTsKKyAgICAgICAg
dGhpcy51cGRhdGVDYWNoZSggZGF0YSApOwogCi0gICAgICAgICAgICAgICAgfQorICAgIH0KIAot
ICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtczsKKyAgICBmdW5jdGlvbiBzZXRWYWx1ZU00YSgg
Z2wsIHYgKSB7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBsaWdodC50eXBlICkgeworICAg
ICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOworICAgICAgICB2YXIgZGF0YSA9IGZsYXR0ZW4o
IHYsIHRoaXMuc2l6ZSwgMTYgKTsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdEaXJlY3Rp
b25hbExpZ2h0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zID0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogbmV3IFZlY3RvcjMoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2xvcjogbmV3IENvbG9yKCksCisgICAgICAgIGlmICggYXJy
YXlzRXF1YWwoIGNhY2hlLCBkYXRhICkgKSByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaGFkb3c6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRv
d0JpYXM6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UmFkaXVzOiAxLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd01hcFNpemU6IG5ldyBWZWN0b3IyKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdiggdGhpcy5hZGRyLCBmYWxzZSwgZGF0YSAp
OwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1Nwb3RMaWdodCc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1bmlmb3JtcyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Np
dGlvbjogbmV3IFZlY3RvcjMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rp
b246IG5ldyBWZWN0b3IzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IG5l
dyBDb2xvcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmVDb3M6IDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGVudW1icmFDb3M6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj
YXk6IDAsCisgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoIGRhdGEgKTsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoYWRvdzogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93QmlhczogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dSYWRp
dXM6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93TWFwU2l6ZTogbmV3IFZl
Y3RvcjIoKQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdQb2ludExpZ2h0
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zID0gewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVjdG9yMygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbG9yOiBuZXcgQ29sb3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXN0YW5jZTogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNheTogMCwKKyAg
ICAvLyBBcnJheSBvZiB0ZXh0dXJlcyAoMkQgLyBDdWJlKQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93OiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFk
b3dCaWFzOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1JhZGl1czogMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgZnVuY3Rpb24gc2V0VmFsdWVUMWEoIGdsLCB2LCByZW5kZXJlciApIHsKIAotICAg
ICAgICAgICAgICAgICAgICBjYXNlICdIZW1pc3BoZXJlTGlnaHQnOgotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5pZm9ybXMgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0
aW9uOiBuZXcgVmVjdG9yMygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNreUNvbG9y
OiBuZXcgQ29sb3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91bmRDb2xvcjog
bmV3IENvbG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKKyAgICAgICAg
dmFyIG4gPSB2Lmxlbmd0aDsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdSZWN0QXJlYUxp
Z2h0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zID0gewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yOiBuZXcgQ29sb3IoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYWxmV2lkdGg6IG5ldyBWZWN0b3IzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFsZkhlaWdodDogbmV3IFZlY3RvcjMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRPRE8gKGFiZWxuYXRpb24pOiBzZXQgUmVjdEFyZWFMaWdodCBzaGFkb3cgdW5pZm9ybXMK
LSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgdmFyIHVuaXRzID0gYWxsb2NUZXhVbml0cyggcmVuZGVyZXIsIG4gKTsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKCBhcnJheXNFcXVhbCggY2FjaGUsIHVuaXRz
ICkgPT09IGZhbHNlICkgewogCi0gICAgICAgICAgICAgICAgbGlnaHRzWyBsaWdodC5pZCBdID0g
dW5pZm9ybXM7CisgICAgICAgICAgICBnbC51bmlmb3JtMWl2KCB0aGlzLmFkZHIsIHVuaXRzICk7
CisgICAgICAgICAgICBjb3B5QXJyYXkoIGNhY2hlLCB1bml0cyApOwogCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHVuaWZvcm1zOworICAgICAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
Zm9yICggdmFyIGkgPSAwOyBpICE9PSBuOyArKyBpICkgewogCi0gICAgICAgIH07CisgICAgICAg
ICAgICByZW5kZXJlci5zZXRUZXh0dXJlMkQoIHZbIGkgXSB8fCBlbXB0eVRleHR1cmUsIHVuaXRz
WyBpIF0gKTsKKworICAgICAgICB9CiAKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9y
IG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgIGZ1bmN0aW9uIHNldFZh
bHVlVDZhKCBnbCwgdiwgcmVuZGVyZXIgKSB7CiAKLSAgICBmdW5jdGlvbiBXZWJHTE9iamVjdHMo
IGdsLCBnZW9tZXRyaWVzLCBpbmZvUmVuZGVyICkgeworICAgICAgICB2YXIgY2FjaGUgPSB0aGlz
LmNhY2hlOworICAgICAgICB2YXIgbiA9IHYubGVuZ3RoOwogCi0gICAgICAgIHZhciB1cGRhdGVM
aXN0ID0ge307CisgICAgICAgIHZhciB1bml0cyA9IGFsbG9jVGV4VW5pdHMoIHJlbmRlcmVyLCBu
ICk7CiAKLSAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCBvYmplY3QgKSB7CisgICAgICAgIGlmICgg
YXJyYXlzRXF1YWwoIGNhY2hlLCB1bml0cyApID09PSBmYWxzZSApIHsKIAotICAgICAgICAgICAg
dmFyIGZyYW1lID0gaW5mb1JlbmRlci5mcmFtZTsKKyAgICAgICAgICAgIGdsLnVuaWZvcm0xaXYo
IHRoaXMuYWRkciwgdW5pdHMgKTsKKyAgICAgICAgICAgIGNvcHlBcnJheSggY2FjaGUsIHVuaXRz
ICk7CiAKLSAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKLSAgICAg
ICAgICAgIHZhciBidWZmZXJnZW9tZXRyeSA9IGdlb21ldHJpZXMuZ2V0KCBvYmplY3QsIGdlb21l
dHJ5ICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gVXBkYXRlIG9uY2UgcGVyIGZyYW1l
CisgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSAhPT0gbjsgKysgaSApIHsKIAotICAgICAgICAg
ICAgaWYgKCB1cGRhdGVMaXN0WyBidWZmZXJnZW9tZXRyeS5pZCBdICE9PSBmcmFtZSApIHsKKyAg
ICAgICAgICAgIHJlbmRlcmVyLnNldFRleHR1cmVDdWJlKCB2WyBpIF0gfHwgZW1wdHlDdWJlVGV4
dHVyZSwgdW5pdHNbIGkgXSApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5pc0dl
b21ldHJ5ICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyZ2VvbWV0
cnkudXBkYXRlRnJvbU9iamVjdCggb2JqZWN0ICk7CisgICAgfQogCi0gICAgICAgICAgICAgICAg
fQorICAgIC8vIEhlbHBlciB0byBwaWNrIHRoZSByaWdodCBzZXR0ZXIgZm9yIGEgcHVyZSAoYm90
dG9tLWxldmVsKSBhcnJheQogCi0gICAgICAgICAgICAgICAgZ2VvbWV0cmllcy51cGRhdGUoIGJ1
ZmZlcmdlb21ldHJ5ICk7CisgICAgZnVuY3Rpb24gZ2V0UHVyZUFycmF5U2V0dGVyKCB0eXBlICkg
ewogCi0gICAgICAgICAgICAgICAgdXBkYXRlTGlzdFsgYnVmZmVyZ2VvbWV0cnkuaWQgXSA9IGZy
YW1lOworICAgICAgICBzd2l0Y2ggKCB0eXBlICkgewogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIDB4MTQwNjogcmV0dXJuIHNldFZhbHVlMWZ2OyAvLyBGTE9BVAorICAgICAgICAg
ICAgY2FzZSAweDhiNTA6IHJldHVybiBzZXRWYWx1ZVYyYTsgLy8gX1ZFQzIKKyAgICAgICAgICAg
IGNhc2UgMHg4YjUxOiByZXR1cm4gc2V0VmFsdWVWM2E7IC8vIF9WRUMzCisgICAgICAgICAgICBj
YXNlIDB4OGI1MjogcmV0dXJuIHNldFZhbHVlVjRhOyAvLyBfVkVDNAogCi0gICAgICAgICAgICBy
ZXR1cm4gYnVmZmVyZ2VvbWV0cnk7CisgICAgICAgICAgICBjYXNlIDB4OGI1YTogcmV0dXJuIHNl
dFZhbHVlTTJhOyAvLyBfTUFUMgorICAgICAgICAgICAgY2FzZSAweDhiNWI6IHJldHVybiBzZXRW
YWx1ZU0zYTsgLy8gX01BVDMKKyAgICAgICAgICAgIGNhc2UgMHg4YjVjOiByZXR1cm4gc2V0VmFs
dWVNNGE7IC8vIF9NQVQ0CisKKyAgICAgICAgICAgIGNhc2UgMHg4YjVlOiByZXR1cm4gc2V0VmFs
dWVUMWE7IC8vIFNBTVBMRVJfMkQKKyAgICAgICAgICAgIGNhc2UgMHg4YjYwOiByZXR1cm4gc2V0
VmFsdWVUNmE7IC8vIFNBTVBMRVJfQ1VCRQorCisgICAgICAgICAgICBjYXNlIDB4MTQwNDogY2Fz
ZSAweDhiNTY6IHJldHVybiBzZXRWYWx1ZTFpdjsgLy8gSU5ULCBCT09MCisgICAgICAgICAgICBj
YXNlIDB4OGI1MzogY2FzZSAweDhiNTc6IHJldHVybiBzZXRWYWx1ZTJpdjsgLy8gX1ZFQzIKKyAg
ICAgICAgICAgIGNhc2UgMHg4YjU0OiBjYXNlIDB4OGI1ODogcmV0dXJuIHNldFZhbHVlM2l2OyAv
LyBfVkVDMworICAgICAgICAgICAgY2FzZSAweDhiNTU6IGNhc2UgMHg4YjU5OiByZXR1cm4gc2V0
VmFsdWU0aXY7IC8vIF9WRUM0CiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGNsZWFy
KCkgeworICAgIH0KIAotICAgICAgICAgICAgdXBkYXRlTGlzdCA9IHt9OworICAgIC8vIC0tLSBV
bmlmb3JtIENsYXNzZXMgLS0tCisKKyAgICBmdW5jdGlvbiBTaW5nbGVVbmlmb3JtKCBpZCwgYWN0
aXZlSW5mbywgYWRkciApIHsKKworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRoaXMu
YWRkciA9IGFkZHI7CisgICAgICAgIHRoaXMuY2FjaGUgPSBbXTsKKyAgICAgICAgdGhpcy5zZXRW
YWx1ZSA9IGdldFNpbmd1bGFyU2V0dGVyKCBhY3RpdmVJbmZvLnR5cGUgKTsKKworICAgICAgICAv
LyB0aGlzLnBhdGggPSBhY3RpdmVJbmZvLm5hbWU7IC8vIERFQlVHCisKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBQdXJlQXJyYXlVbmlmb3JtKCBpZCwgYWN0aXZlSW5mbywgYWRkciApIHsKKworICAg
ICAgICB0aGlzLmlkID0gaWQ7CisgICAgICAgIHRoaXMuYWRkciA9IGFkZHI7CisgICAgICAgIHRo
aXMuY2FjaGUgPSBbXTsKKyAgICAgICAgdGhpcy5zaXplID0gYWN0aXZlSW5mby5zaXplOworICAg
ICAgICB0aGlzLnNldFZhbHVlID0gZ2V0UHVyZUFycmF5U2V0dGVyKCBhY3RpdmVJbmZvLnR5cGUg
KTsKKworICAgICAgICAvLyB0aGlzLnBhdGggPSBhY3RpdmVJbmZvLm5hbWU7IC8vIERFQlVHCisK
KyAgICB9CisKKyAgICBQdXJlQXJyYXlVbmlmb3JtLnByb3RvdHlwZS51cGRhdGVDYWNoZSA9IGZ1
bmN0aW9uICggZGF0YSApIHsKKworICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlOworCisg
ICAgICAgIGlmICggZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSAmJiBjYWNoZS5sZW5ndGgg
IT09IGRhdGEubGVuZ3RoICkgeworCisgICAgICAgICAgICB0aGlzLmNhY2hlID0gbmV3IEZsb2F0
MzJBcnJheSggZGF0YS5sZW5ndGggKTsKIAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgY29weUFycmF5KCBjYWNoZSwgZGF0YSApOwogCi0gICAgICAgICAgICB1cGRhdGU6
IHVwZGF0ZSwKLSAgICAgICAgICAgIGNsZWFyOiBjbGVhcgorICAgIH07CiAKLSAgICAgICAgfTsK
KyAgICBmdW5jdGlvbiBTdHJ1Y3R1cmVkVW5pZm9ybSggaWQgKSB7CisKKyAgICAgICAgdGhpcy5p
ZCA9IGlkOworCisgICAgICAgIFVuaWZvcm1Db250YWluZXIuY2FsbCggdGhpcyApOyAvLyBtaXgt
aW4KIAogICAgIH0KIAorICAgIFN0cnVjdHVyZWRVbmlmb3JtLnByb3RvdHlwZS5zZXRWYWx1ZSA9
IGZ1bmN0aW9uICggZ2wsIHZhbHVlICkgeworCisgICAgICAgIC8vIE5vdGU6IERvbid0IG5lZWQg
YW4gZXh0cmEgJ3JlbmRlcmVyJyBwYXJhbWV0ZXIsIHNpbmNlIHNhbXBsZXJzCisgICAgICAgIC8v
IGFyZSBub3QgYWxsb3dlZCBpbiBzdHJ1Y3R1cmVkIHVuaWZvcm1zLgorCisgICAgICAgIHZhciBz
ZXEgPSB0aGlzLnNlcTsKKworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSBzZXEubGVuZ3Ro
OyBpICE9PSBuOyArKyBpICkgeworCisgICAgICAgICAgICB2YXIgdSA9IHNlcVsgaSBdOworICAg
ICAgICAgICAgdS5zZXRWYWx1ZSggZ2wsIHZhbHVlWyB1LmlkIF0gKTsKKworICAgICAgICB9CisK
KyAgICB9OworCisgICAgLy8gLS0tIFRvcC1sZXZlbCAtLS0KKworICAgIC8vIFBhcnNlciAtIGJ1
aWxkcyB1cCB0aGUgcHJvcGVydHkgdHJlZSBmcm9tIHRoZSBwYXRoIHN0cmluZ3MKKworICAgIHZh
ciBSZVBhdGhQYXJ0ID0gLyhbXHdcZF9dKykoXF0pPyhcW3xcLik/L2c7CisKKyAgICAvLyBleHRy
YWN0cworICAgIC8vICAtIHRoZSBpZGVudGlmaWVyIChtZW1iZXIgbmFtZSBvciBhcnJheSBpbmRl
eCkKKyAgICAvLyAgLSBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCByaWdodCBicmFja2V0IChmb3Vu
ZCB3aGVuIGFycmF5IGluZGV4KQorICAgIC8vICAtIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGxl
ZnQgYnJhY2tldCBvciBkb3QgKHR5cGUgb2Ygc3Vic2NyaXB0KQorICAgIC8vCisgICAgLy8gTm90
ZTogVGhlc2UgcG9ydGlvbnMgY2FuIGJlIHJlYWQgaW4gYSBub24tb3ZlcmxhcHBpbmcgZmFzaGlv
biBhbmQKKyAgICAvLyBhbGxvdyBzdHJhaWdodGZvcndhcmQgcGFyc2luZyBvZiB0aGUgaGllcmFy
Y2h5IHRoYXQgV2ViR0wgZW5jb2RlcworICAgIC8vIGluIHRoZSB1bmlmb3JtIG5hbWVzLgorCisg
ICAgZnVuY3Rpb24gYWRkVW5pZm9ybSggY29udGFpbmVyLCB1bmlmb3JtT2JqZWN0ICkgeworCisg
ICAgICAgIGNvbnRhaW5lci5zZXEucHVzaCggdW5pZm9ybU9iamVjdCApOworICAgICAgICBjb250
YWluZXIubWFwWyB1bmlmb3JtT2JqZWN0LmlkIF0gPSB1bmlmb3JtT2JqZWN0OworCisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VVbmlmb3JtKCBhY3RpdmVJbmZvLCBhZGRyLCBjb250YWluZXIg
KSB7CisKKyAgICAgICAgdmFyIHBhdGggPSBhY3RpdmVJbmZvLm5hbWUsCisgICAgICAgICAgICBw
YXRoTGVuZ3RoID0gcGF0aC5sZW5ndGg7CisKKyAgICAgICAgLy8gcmVzZXQgUmVnRXhwIG9iamVj
dCwgYmVjYXVzZSBvZiB0aGUgZWFybHkgZXhpdCBvZiBhIHByZXZpb3VzIHJ1bgorICAgICAgICBS
ZVBhdGhQYXJ0Lmxhc3RJbmRleCA9IDA7CisKKyAgICAgICAgd2hpbGUgKCB0cnVlICkgeworCisg
ICAgICAgICAgICB2YXIgbWF0Y2ggPSBSZVBhdGhQYXJ0LmV4ZWMoIHBhdGggKSwKKyAgICAgICAg
ICAgICAgICBtYXRjaEVuZCA9IFJlUGF0aFBhcnQubGFzdEluZGV4LAorCisgICAgICAgICAgICAg
ICAgaWQgPSBtYXRjaFsgMSBdLAorICAgICAgICAgICAgICAgIGlkSXNJbmRleCA9IG1hdGNoWyAy
IF0gPT09ICddJywKKyAgICAgICAgICAgICAgICBzdWJzY3JpcHQgPSBtYXRjaFsgMyBdOworCisg
ICAgICAgICAgICBpZiAoIGlkSXNJbmRleCApIGlkID0gaWQgfCAwOyAvLyBjb252ZXJ0IHRvIGlu
dGVnZXIKKworICAgICAgICAgICAgaWYgKCBzdWJzY3JpcHQgPT09IHVuZGVmaW5lZCB8fCBzdWJz
Y3JpcHQgPT09ICdbJyAmJiBtYXRjaEVuZCArIDIgPT09IHBhdGhMZW5ndGggKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBiYXJlIG5hbWUgb3IgInB1cmUiIGJvdHRvbS1sZXZlbCBhcnJheSAiWzBd
IiBzdWZmaXgKKworICAgICAgICAgICAgICAgIGFkZFVuaWZvcm0oIGNvbnRhaW5lciwgc3Vic2Ny
aXB0ID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgICAgICBuZXcgU2luZ2xlVW5pZm9y
bSggaWQsIGFjdGl2ZUluZm8sIGFkZHIgKSA6CisgICAgICAgICAgICAgICAgICAgIG5ldyBQdXJl
QXJyYXlVbmlmb3JtKCBpZCwgYWN0aXZlSW5mbywgYWRkciApICk7CisKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIC8vIHN0
ZXAgaW50byBpbm5lciBub2RlIC8gY3JlYXRlIGl0IGluIGNhc2UgaXQgZG9lc24ndCBleGlzdAor
CisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IGNvbnRhaW5lci5tYXAsIG5leHQgPSBtYXBbIGlk
IF07CisKKyAgICAgICAgICAgICAgICBpZiAoIG5leHQgPT09IHVuZGVmaW5lZCApIHsKKworICAg
ICAgICAgICAgICAgICAgICBuZXh0ID0gbmV3IFN0cnVjdHVyZWRVbmlmb3JtKCBpZCApOworICAg
ICAgICAgICAgICAgICAgICBhZGRVbmlmb3JtKCBjb250YWluZXIsIG5leHQgKTsKKworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5leHQ7CisKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9CisKKyAgICB9CisKKyAgICAvLyBSb290IENvbnRhaW5lcgor
CisgICAgZnVuY3Rpb24gV2ViR0xVbmlmb3JtcyggZ2wsIHByb2dyYW0sIHJlbmRlcmVyICkgewor
CisgICAgICAgIFVuaWZvcm1Db250YWluZXIuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMu
cmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgICAgICB2YXIgbiA9IGdsLmdldFByb2dyYW1QYXJh
bWV0ZXIoIHByb2dyYW0sIGdsLkFDVElWRV9VTklGT1JNUyApOworCisgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IG47ICsrIGkgKSB7CisKKyAgICAgICAgICAgIHZhciBpbmZvID0gZ2wuZ2V0
QWN0aXZlVW5pZm9ybSggcHJvZ3JhbSwgaSApLAorICAgICAgICAgICAgICAgIGFkZHIgPSBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sIGluZm8ubmFtZSApOworCisgICAgICAgICAgICBw
YXJzZVVuaWZvcm0oIGluZm8sIGFkZHIsIHRoaXMgKTsKKworICAgICAgICB9CisKKyAgICB9CisK
KyAgICBXZWJHTFVuaWZvcm1zLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICggZ2wsIG5h
bWUsIHZhbHVlICkgeworCisgICAgICAgIHZhciB1ID0gdGhpcy5tYXBbIG5hbWUgXTsKKworICAg
ICAgICBpZiAoIHUgIT09IHVuZGVmaW5lZCApIHUuc2V0VmFsdWUoIGdsLCB2YWx1ZSwgdGhpcy5y
ZW5kZXJlciApOworCisgICAgfTsKKworICAgIFdlYkdMVW5pZm9ybXMucHJvdG90eXBlLnNldE9w
dGlvbmFsID0gZnVuY3Rpb24gKCBnbCwgb2JqZWN0LCBuYW1lICkgeworCisgICAgICAgIHZhciB2
ID0gb2JqZWN0WyBuYW1lIF07CisKKyAgICAgICAgaWYgKCB2ICE9PSB1bmRlZmluZWQgKSB0aGlz
LnNldFZhbHVlKCBnbCwgbmFtZSwgdiApOworCisgICAgfTsKKworCisgICAgLy8gU3RhdGljIGlu
dGVyZmFjZQorCisgICAgV2ViR0xVbmlmb3Jtcy51cGxvYWQgPSBmdW5jdGlvbiAoIGdsLCBzZXEs
IHZhbHVlcywgcmVuZGVyZXIgKSB7CisKKyAgICAgICAgZm9yICggdmFyIGkgPSAwLCBuID0gc2Vx
Lmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHsKKworICAgICAgICAgICAgdmFyIHUgPSBzZXFbIGkg
XSwKKyAgICAgICAgICAgICAgICB2ID0gdmFsdWVzWyB1LmlkIF07CisKKyAgICAgICAgICAgIGlm
ICggdi5uZWVkc1VwZGF0ZSAhPT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBub3Rl
OiBhbHdheXMgdXBkYXRpbmcgd2hlbiAubmVlZHNVcGRhdGUgaXMgdW5kZWZpbmVkCisgICAgICAg
ICAgICAgICAgdS5zZXRWYWx1ZSggZ2wsIHYudmFsdWUsIHJlbmRlcmVyICk7CisKKyAgICAgICAg
ICAgIH0KKworICAgICAgICB9CisKKyAgICB9OworCisgICAgV2ViR0xVbmlmb3Jtcy5zZXFXaXRo
VmFsdWUgPSBmdW5jdGlvbiAoIHNlcSwgdmFsdWVzICkgeworCisgICAgICAgIHZhciByID0gW107
CisKKyAgICAgICAgZm9yICggdmFyIGkgPSAwLCBuID0gc2VxLmxlbmd0aDsgaSAhPT0gbjsgKysg
aSApIHsKKworICAgICAgICAgICAgdmFyIHUgPSBzZXFbIGkgXTsKKyAgICAgICAgICAgIGlmICgg
dS5pZCBpbiB2YWx1ZXMgKSByLnB1c2goIHUgKTsKKworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHI7CisKKyAgICB9OworCiAgICAgLyoqCiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KICAgICAgKi8KQEAgLTE3MDE3LDE5ICsxNjU5MiwxOSBAQAogICAgICAg
ICBzd2l0Y2ggKCBlbmNvZGluZyApIHsKIAogICAgICAgICAgICAgY2FzZSBMaW5lYXJFbmNvZGlu
ZzoKLSAgICAgICAgICAgICAgICByZXR1cm4gWyAnTGluZWFyJywnKCB2YWx1ZSApJyBdOworICAg
ICAgICAgICAgICAgIHJldHVybiBbICdMaW5lYXInLCAnKCB2YWx1ZSApJyBdOwogICAgICAgICAg
ICAgY2FzZSBzUkdCRW5jb2Rpbmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFsgJ3NSR0InLCco
IHZhbHVlICknIF07CisgICAgICAgICAgICAgICAgcmV0dXJuIFsgJ3NSR0InLCAnKCB2YWx1ZSAp
JyBdOwogICAgICAgICAgICAgY2FzZSBSR0JFRW5jb2Rpbmc6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFsgJ1JHQkUnLCcoIHZhbHVlICknIF07CisgICAgICAgICAgICAgICAgcmV0dXJuIFsgJ1JH
QkUnLCAnKCB2YWx1ZSApJyBdOwogICAgICAgICAgICAgY2FzZSBSR0JNN0VuY29kaW5nOgotICAg
ICAgICAgICAgICAgIHJldHVybiBbICdSR0JNJywnKCB2YWx1ZSwgNy4wICknIF07CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFsgJ1JHQk0nLCAnKCB2YWx1ZSwgNy4wICknIF07CiAgICAgICAgICAg
ICBjYXNlIFJHQk0xNkVuY29kaW5nOgotICAgICAgICAgICAgICAgIHJldHVybiBbICdSR0JNJywn
KCB2YWx1ZSwgMTYuMCApJyBdOworICAgICAgICAgICAgICAgIHJldHVybiBbICdSR0JNJywgJygg
dmFsdWUsIDE2LjAgKScgXTsKICAgICAgICAgICAgIGNhc2UgUkdCREVuY29kaW5nOgotICAgICAg
ICAgICAgICAgIHJldHVybiBbICdSR0JEJywnKCB2YWx1ZSwgMjU2LjAgKScgXTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gWyAnUkdCRCcsICcoIHZhbHVlLCAyNTYuMCApJyBdOwogICAgICAgICAg
ICAgY2FzZSBHYW1tYUVuY29kaW5nOgotICAgICAgICAgICAgICAgIHJldHVybiBbICdHYW1tYScs
JyggdmFsdWUsIGZsb2F0KCBHQU1NQV9GQUNUT1IgKSApJyBdOworICAgICAgICAgICAgICAgIHJl
dHVybiBbICdHYW1tYScsICcoIHZhbHVlLCBmbG9hdCggR0FNTUFfRkFDVE9SICkgKScgXTsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAndW5z
dXBwb3J0ZWQgZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyApOwogCkBAIC0xNzA0MCwxNCArMTY2MTUs
MTQgQEAKICAgICBmdW5jdGlvbiBnZXRUZXhlbERlY29kaW5nRnVuY3Rpb24oIGZ1bmN0aW9uTmFt
ZSwgZW5jb2RpbmcgKSB7CiAKICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBnZXRFbmNvZGluZ0Nv
bXBvbmVudHMoIGVuY29kaW5nICk7Ci0gICAgICAgIHJldHVybiAidmVjNCAiICsgZnVuY3Rpb25O
YW1lICsgIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIgKyBjb21wb25lbnRzWyAwIF0gKyAiVG9M
aW5lYXIiICsgY29tcG9uZW50c1sgMSBdICsgIjsgfSI7CisgICAgICAgIHJldHVybiAndmVjNCAn
ICsgZnVuY3Rpb25OYW1lICsgJyggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICcgKyBjb21wb25lbnRz
WyAwIF0gKyAnVG9MaW5lYXInICsgY29tcG9uZW50c1sgMSBdICsgJzsgfSc7CiAKICAgICB9CiAK
ICAgICBmdW5jdGlvbiBnZXRUZXhlbEVuY29kaW5nRnVuY3Rpb24oIGZ1bmN0aW9uTmFtZSwgZW5j
b2RpbmcgKSB7CiAKICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBnZXRFbmNvZGluZ0NvbXBvbmVu
dHMoIGVuY29kaW5nICk7Ci0gICAgICAgIHJldHVybiAidmVjNCAiICsgZnVuY3Rpb25OYW1lICsg
IiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIiArIGNvbXBvbmVudHNbIDAgXSArIGNv
bXBvbmVudHNbIDEgXSArICI7IH0iOworICAgICAgICByZXR1cm4gJ3ZlYzQgJyArIGZ1bmN0aW9u
TmFtZSArICcoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbycgKyBjb21wb25lbnRzWyAw
IF0gKyBjb21wb25lbnRzWyAxIF0gKyAnOyB9JzsKIAogICAgIH0KIApAQCAtMTcwNTgsMTkgKzE2
NjMzLDE5IEBACiAgICAgICAgIHN3aXRjaCAoIHRvbmVNYXBwaW5nICkgewogCiAgICAgICAgICAg
ICBjYXNlIExpbmVhclRvbmVNYXBwaW5nOgotICAgICAgICAgICAgICAgIHRvbmVNYXBwaW5nTmFt
ZSA9ICJMaW5lYXIiOworICAgICAgICAgICAgICAgIHRvbmVNYXBwaW5nTmFtZSA9ICdMaW5lYXIn
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFJlaW5oYXJkVG9u
ZU1hcHBpbmc6Ci0gICAgICAgICAgICAgICAgdG9uZU1hcHBpbmdOYW1lID0gIlJlaW5oYXJkIjsK
KyAgICAgICAgICAgICAgICB0b25lTWFwcGluZ05hbWUgPSAnUmVpbmhhcmQnOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFVuY2hhcnRlZDJUb25lTWFwcGluZzoK
LSAgICAgICAgICAgICAgICB0b25lTWFwcGluZ05hbWUgPSAiVW5jaGFydGVkMiI7CisgICAgICAg
ICAgICAgICAgdG9uZU1hcHBpbmdOYW1lID0gJ1VuY2hhcnRlZDInOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIENpbmVvblRvbmVNYXBwaW5nOgotICAgICAgICAg
ICAgICAgIHRvbmVNYXBwaW5nTmFtZSA9ICJPcHRpbWl6ZWRDaW5lb24iOworICAgICAgICAgICAg
ICAgIHRvbmVNYXBwaW5nTmFtZSA9ICdPcHRpbWl6ZWRDaW5lb24nOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTcwNzgsNyArMTY2NTMsNyBAQAog
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gInZlYzMgIiArIGZ1bmN0aW9uTmFtZSArICIo
IHZlYzMgY29sb3IgKSB7IHJldHVybiAiICsgdG9uZU1hcHBpbmdOYW1lICsgIlRvbmVNYXBwaW5n
KCBjb2xvciApOyB9IjsKKyAgICAgICAgcmV0dXJuICd2ZWMzICcgKyBmdW5jdGlvbk5hbWUgKyAn
KCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gJyArIHRvbmVNYXBwaW5nTmFtZSArICdUb25lTWFwcGlu
ZyggY29sb3IgKTsgfSc7CiAKICAgICB9CiAKQEAgLTE3MDg3LDcgKzE2NjYyLDcgQEAKICAgICAg
ICAgZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMgfHwge307CiAKICAgICAgICAgdmFyIGNodW5rcyA9
IFsKLSAgICAgICAgICAgICggZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyB8fCBwYXJhbWV0ZXJzLmVu
dk1hcEN1YmVVViB8fCBwYXJhbWV0ZXJzLmJ1bXBNYXAgfHwgcGFyYW1ldGVycy5ub3JtYWxNYXAg
fHwgcGFyYW1ldGVycy5mbGF0U2hhZGluZyApID8gJyNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIDogZW5hYmxlJyA6ICcnLAorICAgICAgICAgICAgKCBleHRlbnNpb25zLmRl
cml2YXRpdmVzIHx8IHBhcmFtZXRlcnMuZW52TWFwQ3ViZVVWIHx8IHBhcmFtZXRlcnMuYnVtcE1h
cCB8fCAoIHBhcmFtZXRlcnMubm9ybWFsTWFwICYmICEgcGFyYW1ldGVycy5vYmplY3RTcGFjZU5v
cm1hbE1hcCApIHx8IHBhcmFtZXRlcnMuZmxhdFNoYWRpbmcgKSA/ICcjZXh0ZW5zaW9uIEdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZScgOiAnJywKICAgICAgICAgICAgICggZXh0
ZW5zaW9ucy5mcmFnRGVwdGggfHwgcGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICkg
JiYgcmVuZGVyZXJFeHRlbnNpb25zLmdldCggJ0VYVF9mcmFnX2RlcHRoJyApID8gJyNleHRlbnNp
b24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUnIDogJycsCiAgICAgICAgICAgICAoIGV4dGVu
c2lvbnMuZHJhd0J1ZmZlcnMgKSAmJiByZW5kZXJlckV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfZHJh
d19idWZmZXJzJyApID8gJyNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUn
IDogJycsCiAgICAgICAgICAgICAoIGV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCB8fCBwYXJh
bWV0ZXJzLmVudk1hcCApICYmIHJlbmRlcmVyRXh0ZW5zaW9ucy5nZXQoICdFWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kJyApID8gJyNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVu
YWJsZScgOiAnJwpAQCAtMTcxMTUsNyArMTY2OTAsNyBAQAogCiAgICAgfQogCi0gICAgZnVuY3Rp
b24gZmV0Y2hBdHRyaWJ1dGVMb2NhdGlvbnMoIGdsLCBwcm9ncmFtLCBpZGVudGlmaWVycyApIHsK
KyAgICBmdW5jdGlvbiBmZXRjaEF0dHJpYnV0ZUxvY2F0aW9ucyggZ2wsIHByb2dyYW0gKSB7CiAK
ICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTsKIApAQCAtMTcxMjYsNyArMTY3MDEsNyBAQAog
ICAgICAgICAgICAgdmFyIGluZm8gPSBnbC5nZXRBY3RpdmVBdHRyaWIoIHByb2dyYW0sIGkgKTsK
ICAgICAgICAgICAgIHZhciBuYW1lID0gaW5mby5uYW1lOwogCi0gICAgICAgICAgICAvLyBjb25z
b2xlLmxvZygiVEhSRUUuV2ViR0xQcm9ncmFtOiBBQ1RJVkUgVkVSVEVYIEFUVFJJQlVURToiLCBu
YW1lLCBpICk7CisgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyggJ1RIUkVFLldlYkdMUHJvZ3Jh
bTogQUNUSVZFIFZFUlRFWCBBVFRSSUJVVEU6JywgbmFtZSwgaSApOwogCiAgICAgICAgICAgICBh
dHRyaWJ1dGVzWyBuYW1lIF0gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbiggcHJvZ3JhbSwgbmFtZSAp
OwogCkBAIC0xNzE1Myw2ICsxNjcyOCwxNCBAQAogCiAgICAgfQogCisgICAgZnVuY3Rpb24gcmVw
bGFjZUNsaXBwaW5nUGxhbmVOdW1zKCBzdHJpbmcsIHBhcmFtZXRlcnMgKSB7CisKKyAgICAgICAg
cmV0dXJuIHN0cmluZworICAgICAgICAgICAgLnJlcGxhY2UoIC9OVU1fQ0xJUFBJTkdfUExBTkVT
L2csIHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXMgKQorICAgICAgICAgICAgLnJlcGxhY2Uo
IC9VTklPTl9DTElQUElOR19QTEFORVMvZywgKCBwYXJhbWV0ZXJzLm51bUNsaXBwaW5nUGxhbmVz
IC0gcGFyYW1ldGVycy5udW1DbGlwSW50ZXJzZWN0aW9uICkgKTsKKworICAgIH0KKwogICAgIGZ1
bmN0aW9uIHBhcnNlSW5jbHVkZXMoIHN0cmluZyApIHsKIAogICAgICAgICB2YXIgcGF0dGVybiA9
IC9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuXSspPi9nbTsKQEAgLTE3MTc3LDcgKzE2NzYwLDcg
QEAKIAogICAgIGZ1bmN0aW9uIHVucm9sbExvb3BzKCBzdHJpbmcgKSB7CiAKLSAgICAgICAgdmFy
IHBhdHRlcm4gPSAvZm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwp
IFx7KFtcc1xTXSs/KSg/PVx9KVx9L2c7CisgICAgICAgIHZhciBwYXR0ZXJuID0gLyNwcmFnbWEg
dW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwr
XCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZzsKIAogICAgICAgICBmdW5jdGlvbiByZXBsYWNl
KCBtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCApIHsKIApAQCAtMTcxOTcsMTEgKzE2NzgwLDEw
IEBACiAKICAgICB9CiAKLSAgICBmdW5jdGlvbiBXZWJHTFByb2dyYW0oIHJlbmRlcmVyLCBjb2Rl
LCBtYXRlcmlhbCwgc2hhZGVyLCBwYXJhbWV0ZXJzICkgeworICAgIGZ1bmN0aW9uIFdlYkdMUHJv
Z3JhbSggcmVuZGVyZXIsIGV4dGVuc2lvbnMsIGNvZGUsIG1hdGVyaWFsLCBzaGFkZXIsIHBhcmFt
ZXRlcnMgKSB7CiAKICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuY29udGV4dDsKIAotICAgICAg
ICB2YXIgZXh0ZW5zaW9ucyA9IG1hdGVyaWFsLmV4dGVuc2lvbnM7CiAgICAgICAgIHZhciBkZWZp
bmVzID0gbWF0ZXJpYWwuZGVmaW5lczsKIAogICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gc2hh
ZGVyLnZlcnRleFNoYWRlcjsKQEAgLTE3MjgxLDcgKzE2ODYzLDcgQEAKIAogICAgICAgICAvLwog
Ci0gICAgICAgIHZhciBjdXN0b21FeHRlbnNpb25zID0gZ2VuZXJhdGVFeHRlbnNpb25zKCBleHRl
bnNpb25zLCBwYXJhbWV0ZXJzLCByZW5kZXJlci5leHRlbnNpb25zICk7CisgICAgICAgIHZhciBj
dXN0b21FeHRlbnNpb25zID0gZ2VuZXJhdGVFeHRlbnNpb25zKCBtYXRlcmlhbC5leHRlbnNpb25z
LCBwYXJhbWV0ZXJzLCBleHRlbnNpb25zICk7CiAKICAgICAgICAgdmFyIGN1c3RvbURlZmluZXMg
PSBnZW5lcmF0ZURlZmluZXMoIGRlZmluZXMgKTsKIApAQCAtMTcyOTUsMjEgKzE2ODc3LDI5IEBA
CiAKICAgICAgICAgICAgIHByZWZpeFZlcnRleCA9IFsKIAotICAgICAgICAgICAgICAgIGN1c3Rv
bURlZmluZXMsCi0KLSAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgY3VzdG9t
RGVmaW5lcwogCiAgICAgICAgICAgICBdLmZpbHRlciggZmlsdGVyRW1wdHlMaW5lICkuam9pbigg
J1xuJyApOwogCisgICAgICAgICAgICBpZiAoIHByZWZpeFZlcnRleC5sZW5ndGggPiAwICkgewor
CisgICAgICAgICAgICAgICAgcHJlZml4VmVydGV4ICs9ICdcbic7CisKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgcHJlZml4RnJhZ21lbnQgPSBbCiAKICAgICAgICAgICAgICAgICBjdXN0
b21FeHRlbnNpb25zLAotICAgICAgICAgICAgICAgIGN1c3RvbURlZmluZXMsCi0KLSAgICAgICAg
ICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgY3VzdG9tRGVmaW5lcwogCiAgICAgICAgICAg
ICBdLmZpbHRlciggZmlsdGVyRW1wdHlMaW5lICkuam9pbiggJ1xuJyApOwogCisgICAgICAgICAg
ICBpZiAoIHByZWZpeEZyYWdtZW50Lmxlbmd0aCA+IDAgKSB7CisKKyAgICAgICAgICAgICAgICBw
cmVmaXhGcmFnbWVudCArPSAnXG4nOworCisgICAgICAgICAgICB9CisKICAgICAgICAgfSBlbHNl
IHsKIAogICAgICAgICAgICAgcHJlZml4VmVydGV4ID0gWwpAQCAtMTczMzcsNiArMTY5MjcsNyBA
QAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZW1pc3NpdmVNYXAgPyAnI2RlZmluZSBVU0Vf
RU1JU1NJVkVNQVAnIDogJycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5idW1wTWFwID8g
JyNkZWZpbmUgVVNFX0JVTVBNQVAnIDogJycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5u
b3JtYWxNYXAgPyAnI2RlZmluZSBVU0VfTk9STUFMTUFQJyA6ICcnLAorICAgICAgICAgICAgICAg
ICggcGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1h
cCApID8gJyNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQJyA6ICcnLAogICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcnMuZGlzcGxhY2VtZW50TWFwICYmIHBhcmFtZXRlcnMuc3VwcG9ydHNWZXJ0
ZXhUZXh0dXJlcyA/ICcjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAnIDogJycsCiAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVycy5zcGVjdWxhck1hcCA/ICcjZGVmaW5lIFVTRV9TUEVDVUxBUk1B
UCcgOiAnJywKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnJvdWdobmVzc01hcCA/ICcjZGVm
aW5lIFVTRV9ST1VHSE5FU1NNQVAnIDogJycsCkBAIC0xNzM1NCwxNSArMTY5NDUsMTMgQEAKICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmRvdWJsZVNpZGVkID8gJyNkZWZpbmUgRE9VQkxFX1NJ
REVEJyA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZmxpcFNpZGVkID8gJyNkZWZp
bmUgRkxJUF9TSURFRCcgOiAnJywKIAotICAgICAgICAgICAgICAgICcjZGVmaW5lIE5VTV9DTElQ
UElOR19QTEFORVMgJyArIHBhcmFtZXRlcnMubnVtQ2xpcHBpbmdQbGFuZXMsCi0KICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLnNoYWRvd01hcEVuYWJsZWQgPyAnI2RlZmluZSBVU0VfU0hBRE9X
TUFQJyA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCA/
ICcjZGVmaW5lICcgKyBzaGFkb3dNYXBUeXBlRGVmaW5lIDogJycsCiAKICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJzLnNpemVBdHRlbnVhdGlvbiA/ICcjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJ
T04nIDogJycsCiAKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhC
dWZmZXIgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUYnIDogJycsCi0gICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICYmIHJlbmRlcmVyLmV4dGVuc2lvbnMu
Z2V0KCAnRVhUX2ZyYWdfZGVwdGgnICkgPyAnI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUJyA6
ICcnLAorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciAm
JiBleHRlbnNpb25zLmdldCggJ0VYVF9mcmFnX2RlcHRoJyApID8gJyNkZWZpbmUgVVNFX0xPR0RF
UFRIQlVGX0VYVCcgOiAnJywKIAogICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgbW9kZWxN
YXRyaXg7JywKICAgICAgICAgICAgICAgICAndW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsn
LApAQCAtMTc0MjgsNyArMTcwMTcsNyBAQAogCiAgICAgICAgICAgICAgICAgY3VzdG9tRGVmaW5l
cywKIAotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYWxwaGFUZXN0ID8gJyNkZWZpbmUgQUxQ
SEFURVNUICcgKyBwYXJhbWV0ZXJzLmFscGhhVGVzdCA6ICcnLAorICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnMuYWxwaGFUZXN0ID8gJyNkZWZpbmUgQUxQSEFURVNUICcgKyBwYXJhbWV0ZXJzLmFs
cGhhVGVzdCArICggcGFyYW1ldGVycy5hbHBoYVRlc3QgJSAxID8gJycgOiAnLjAnICkgOiAnJywg
Ly8gYWRkICcuMCcgaWYgaW50ZWdlcgogCiAgICAgICAgICAgICAgICAgJyNkZWZpbmUgR0FNTUFf
RkFDVE9SICcgKyBnYW1tYUZhY3RvckRlZmluZSwKIApAQCAtMTc0NDUsNiArMTcwMzQsNyBAQAog
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZW1pc3NpdmVNYXAgPyAnI2RlZmluZSBVU0VfRU1J
U1NJVkVNQVAnIDogJycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5idW1wTWFwID8gJyNk
ZWZpbmUgVVNFX0JVTVBNQVAnIDogJycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5ub3Jt
YWxNYXAgPyAnI2RlZmluZSBVU0VfTk9STUFMTUFQJyA6ICcnLAorICAgICAgICAgICAgICAgICgg
cGFyYW1ldGVycy5ub3JtYWxNYXAgJiYgcGFyYW1ldGVycy5vYmplY3RTcGFjZU5vcm1hbE1hcCAp
ID8gJyNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQJyA6ICcnLAogICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnMuc3BlY3VsYXJNYXAgPyAnI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAnIDogJycs
CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5yb3VnaG5lc3NNYXAgPyAnI2RlZmluZSBVU0Vf
Uk9VR0hORVNTTUFQJyA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMubWV0YWxuZXNz
TWFwID8gJyNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCcgOiAnJywKQEAgLTE3NDU4LDI3ICsxNzA0
OCwyNCBAQAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZG91YmxlU2lkZWQgPyAnI2RlZmlu
ZSBET1VCTEVfU0lERUQnIDogJycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mbGlwU2lk
ZWQgPyAnI2RlZmluZSBGTElQX1NJREVEJyA6ICcnLAogCi0gICAgICAgICAgICAgICAgJyNkZWZp
bmUgTlVNX0NMSVBQSU5HX1BMQU5FUyAnICsgcGFyYW1ldGVycy5udW1DbGlwcGluZ1BsYW5lcywK
LSAgICAgICAgICAgICAgICAnI2RlZmluZSBVTklPTl9DTElQUElOR19QTEFORVMgJyArIChwYXJh
bWV0ZXJzLm51bUNsaXBwaW5nUGxhbmVzIC0gcGFyYW1ldGVycy5udW1DbGlwSW50ZXJzZWN0aW9u
KSwKLQogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuc2hhZG93TWFwRW5hYmxlZCA/ICcjZGVm
aW5lIFVTRV9TSEFET1dNQVAnIDogJycsCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5zaGFk
b3dNYXBFbmFibGVkID8gJyNkZWZpbmUgJyArIHNoYWRvd01hcFR5cGVEZWZpbmUgOiAnJywKIAot
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhID8gIiNkZWZpbmUg
UFJFTVVMVElQTElFRF9BTFBIQSIgOiAnJywKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnBy
ZW11bHRpcGxpZWRBbHBoYSA/ICcjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEnIDogJycsCiAK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID8gIiNk
ZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyIgOiAnJywKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzID8gJyNkZWZpbmUgUEhZU0lDQUxMWV9D
T1JSRUNUX0xJR0hUUycgOiAnJywKIAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMubG9nYXJp
dGhtaWNEZXB0aEJ1ZmZlciA/ICcjZGVmaW5lIFVTRV9MT0dERVBUSEJVRicgOiAnJywKLSAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgJiYgcmVuZGVyZXIu
ZXh0ZW5zaW9ucy5nZXQoICdFWFRfZnJhZ19kZXB0aCcgKSA/ICcjZGVmaW5lIFVTRV9MT0dERVBU
SEJVRl9FWFQnIDogJycsCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5sb2dhcml0aG1pY0Rl
cHRoQnVmZmVyICYmIGV4dGVuc2lvbnMuZ2V0KCAnRVhUX2ZyYWdfZGVwdGgnICkgPyAnI2RlZmlu
ZSBVU0VfTE9HREVQVEhCVUZfRVhUJyA6ICcnLAogCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVy
cy5lbnZNYXAgJiYgcmVuZGVyZXIuZXh0ZW5zaW9ucy5nZXQoICdFWFRfc2hhZGVyX3RleHR1cmVf
bG9kJyApID8gJyNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUJyA6ICcnLAorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnMuZW52TWFwICYmIGV4dGVuc2lvbnMuZ2V0KCAnRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCcgKSA/ICcjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCcgOiAnJywKIAogICAgICAgICAgICAg
ICAgICd1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsnLAogICAgICAgICAgICAgICAgICd1bmlmb3Jt
IHZlYzMgY2FtZXJhUG9zaXRpb247JywKIAotICAgICAgICAgICAgICAgICggcGFyYW1ldGVycy50
b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyApID8gIiNkZWZpbmUgVE9ORV9NQVBQSU5HIiA6
ICcnLAotICAgICAgICAgICAgICAgICggcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25l
TWFwcGluZyApID8gU2hhZGVyQ2h1bmtbICd0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50JyBdIDog
JycsICAvLyB0aGlzIGNvZGUgaXMgcmVxdWlyZWQgaGVyZSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkg
dGhlIHRvbmVNYXBwaW5nKCkgZnVuY3Rpb24gZGVmaW5lZCBiZWxvdwotICAgICAgICAgICAgICAg
ICggcGFyYW1ldGVycy50b25lTWFwcGluZyAhPT0gTm9Ub25lTWFwcGluZyApID8gZ2V0VG9uZU1h
cHBpbmdGdW5jdGlvbiggInRvbmVNYXBwaW5nIiwgcGFyYW1ldGVycy50b25lTWFwcGluZyApIDog
JycsCisgICAgICAgICAgICAgICAgKCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICE9PSBOb1RvbmVN
YXBwaW5nICkgPyAnI2RlZmluZSBUT05FX01BUFBJTkcnIDogJycsCisgICAgICAgICAgICAgICAg
KCBwYXJhbWV0ZXJzLnRvbmVNYXBwaW5nICE9PSBOb1RvbmVNYXBwaW5nICkgPyBTaGFkZXJDaHVu
a1sgJ3RvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQnIF0gOiAnJywgLy8gdGhpcyBjb2RlIGlzIHJl
cXVpcmVkIGhlcmUgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IHRoZSB0b25lTWFwcGluZygpIGZ1bmN0
aW9uIGRlZmluZWQgYmVsb3cKKyAgICAgICAgICAgICAgICAoIHBhcmFtZXRlcnMudG9uZU1hcHBp
bmcgIT09IE5vVG9uZU1hcHBpbmcgKSA/IGdldFRvbmVNYXBwaW5nRnVuY3Rpb24oICd0b25lTWFw
cGluZycsIHBhcmFtZXRlcnMudG9uZU1hcHBpbmcgKSA6ICcnLAogCiAgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5kaXRoZXJpbmcgPyAnI2RlZmluZSBESVRIRVJJTkcnIDogJycsCiAKQEAgLTE3
NDg2LDkgKzE3MDczLDkgQEAKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLm1hcEVuY29kaW5n
ID8gZ2V0VGV4ZWxEZWNvZGluZ0Z1bmN0aW9uKCAnbWFwVGV4ZWxUb0xpbmVhcicsIHBhcmFtZXRl
cnMubWFwRW5jb2RpbmcgKSA6ICcnLAogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZW52TWFw
RW5jb2RpbmcgPyBnZXRUZXhlbERlY29kaW5nRnVuY3Rpb24oICdlbnZNYXBUZXhlbFRvTGluZWFy
JywgcGFyYW1ldGVycy5lbnZNYXBFbmNvZGluZyApIDogJycsCiAgICAgICAgICAgICAgICAgcGFy
YW1ldGVycy5lbWlzc2l2ZU1hcEVuY29kaW5nID8gZ2V0VGV4ZWxEZWNvZGluZ0Z1bmN0aW9uKCAn
ZW1pc3NpdmVNYXBUZXhlbFRvTGluZWFyJywgcGFyYW1ldGVycy5lbWlzc2l2ZU1hcEVuY29kaW5n
ICkgOiAnJywKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLm91dHB1dEVuY29kaW5nID8gZ2V0
VGV4ZWxFbmNvZGluZ0Z1bmN0aW9uKCAibGluZWFyVG9PdXRwdXRUZXhlbCIsIHBhcmFtZXRlcnMu
b3V0cHV0RW5jb2RpbmcgKSA6ICcnLAorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMub3V0cHV0
RW5jb2RpbmcgPyBnZXRUZXhlbEVuY29kaW5nRnVuY3Rpb24oICdsaW5lYXJUb091dHB1dFRleGVs
JywgcGFyYW1ldGVycy5vdXRwdXRFbmNvZGluZyApIDogJycsCiAKLSAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlcHRoUGFja2luZyA/ICIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIiArIG1hdGVy
aWFsLmRlcHRoUGFja2luZyA6ICcnLAorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVwdGhQ
YWNraW5nID8gJyNkZWZpbmUgREVQVEhfUEFDS0lORyAnICsgbWF0ZXJpYWwuZGVwdGhQYWNraW5n
IDogJycsCiAKICAgICAgICAgICAgICAgICAnXG4nCiAKQEAgLTE3NDk4LDE2ICsxNzA4NSwxNCBA
QAogCiAgICAgICAgIHZlcnRleFNoYWRlciA9IHBhcnNlSW5jbHVkZXMoIHZlcnRleFNoYWRlciAp
OwogICAgICAgICB2ZXJ0ZXhTaGFkZXIgPSByZXBsYWNlTGlnaHROdW1zKCB2ZXJ0ZXhTaGFkZXIs
IHBhcmFtZXRlcnMgKTsKKyAgICAgICAgdmVydGV4U2hhZGVyID0gcmVwbGFjZUNsaXBwaW5nUGxh
bmVOdW1zKCB2ZXJ0ZXhTaGFkZXIsIHBhcmFtZXRlcnMgKTsKIAogICAgICAgICBmcmFnbWVudFNo
YWRlciA9IHBhcnNlSW5jbHVkZXMoIGZyYWdtZW50U2hhZGVyICk7CiAgICAgICAgIGZyYWdtZW50
U2hhZGVyID0gcmVwbGFjZUxpZ2h0TnVtcyggZnJhZ21lbnRTaGFkZXIsIHBhcmFtZXRlcnMgKTsK
KyAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSByZXBsYWNlQ2xpcHBpbmdQbGFuZU51bXMoIGZyYWdt
ZW50U2hhZGVyLCBwYXJhbWV0ZXJzICk7CiAKLSAgICAgICAgaWYgKCAhIG1hdGVyaWFsLmlzU2hh
ZGVyTWF0ZXJpYWwgKSB7Ci0KLSAgICAgICAgICAgIHZlcnRleFNoYWRlciA9IHVucm9sbExvb3Bz
KCB2ZXJ0ZXhTaGFkZXIgKTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gdW5yb2xsTG9v
cHMoIGZyYWdtZW50U2hhZGVyICk7Ci0KLSAgICAgICAgfQorICAgICAgICB2ZXJ0ZXhTaGFkZXIg
PSB1bnJvbGxMb29wcyggdmVydGV4U2hhZGVyICk7CisgICAgICAgIGZyYWdtZW50U2hhZGVyID0g
dW5yb2xsTG9vcHMoIGZyYWdtZW50U2hhZGVyICk7CiAKICAgICAgICAgdmFyIHZlcnRleEdsc2wg
PSBwcmVmaXhWZXJ0ZXggKyB2ZXJ0ZXhTaGFkZXI7CiAgICAgICAgIHZhciBmcmFnbWVudEdsc2wg
PSBwcmVmaXhGcmFnbWVudCArIGZyYWdtZW50U2hhZGVyOwpAQCAtMTc1MzYsOSArMTcxMjEsOSBA
QAogCiAgICAgICAgIGdsLmxpbmtQcm9ncmFtKCBwcm9ncmFtICk7CiAKLSAgICAgICAgdmFyIHBy
b2dyYW1Mb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyggcHJvZ3JhbSApOwotICAgICAgICB2YXIg
dmVydGV4TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyggZ2xWZXJ0ZXhTaGFkZXIgKTsKLSAgICAg
ICAgdmFyIGZyYWdtZW50TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyggZ2xGcmFnbWVudFNoYWRl
ciApOworICAgICAgICB2YXIgcHJvZ3JhbUxvZyA9IGdsLmdldFByb2dyYW1JbmZvTG9nKCBwcm9n
cmFtICkudHJpbSgpOworICAgICAgICB2YXIgdmVydGV4TG9nID0gZ2wuZ2V0U2hhZGVySW5mb0xv
ZyggZ2xWZXJ0ZXhTaGFkZXIgKS50cmltKCk7CisgICAgICAgIHZhciBmcmFnbWVudExvZyA9IGds
LmdldFNoYWRlckluZm9Mb2coIGdsRnJhZ21lbnRTaGFkZXIgKS50cmltKCk7CiAKICAgICAgICAg
dmFyIHJ1bm5hYmxlID0gdHJ1ZTsKICAgICAgICAgdmFyIGhhdmVEaWFnbm9zdGljcyA9IHRydWU7
CkBAIC0xNzU5OCwxMiArMTcxODMsMTEgQEAKIAogICAgICAgICB2YXIgY2FjaGVkVW5pZm9ybXM7
CiAKLSAgICAgICAgdGhpcy5nZXRVbmlmb3JtcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LmdldFVuaWZvcm1zID0gZnVuY3Rpb24gKCkgewogCiAgICAgICAgICAgICBpZiAoIGNhY2hlZFVu
aWZvcm1zID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBjYWNoZWRVbmlmb3Jt
cyA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBXZWJHTFVuaWZvcm1zKCBnbCwgcHJvZ3JhbSwg
cmVuZGVyZXIgKTsKKyAgICAgICAgICAgICAgICBjYWNoZWRVbmlmb3JtcyA9IG5ldyBXZWJHTFVu
aWZvcm1zKCBnbCwgcHJvZ3JhbSwgcmVuZGVyZXIgKTsKIAogICAgICAgICAgICAgfQogCkBAIC0x
NzYxNSw3ICsxNzE5OSw3IEBACiAKICAgICAgICAgdmFyIGNhY2hlZEF0dHJpYnV0ZXM7CiAKLSAg
ICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuZ2V0
QXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgaWYgKCBjYWNoZWRBdHRy
aWJ1dGVzID09PSB1bmRlZmluZWQgKSB7CiAKQEAgLTE3NjI5LDcgKzE3MjEzLDcgQEAKIAogICAg
ICAgICAvLyBmcmVlIHJlc291cmNlCiAKLSAgICAgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAg
Z2wuZGVsZXRlUHJvZ3JhbSggcHJvZ3JhbSApOwogICAgICAgICAgICAgdGhpcy5wcm9ncmFtID0g
dW5kZWZpbmVkOwpAQCAtMTc2NDEsNyArMTcyMjUsNyBAQAogICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydGllcyggdGhpcywgewogCiAgICAgICAgICAgICB1bmlmb3JtczogewotICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAo
KSB7CiAKICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xQcm9n
cmFtOiAudW5pZm9ybXMgaXMgbm93IC5nZXRVbmlmb3JtcygpLicgKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5pZm9ybXMoKTsKQEAgLTE3NjUwLDcgKzE3MjM0LDcgQEAK
ICAgICAgICAgICAgIH0sCiAKICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsKLSAgICAgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkg
ewogCiAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUHJvZ3Jh
bTogLmF0dHJpYnV0ZXMgaXMgbm93IC5nZXRBdHRyaWJ1dGVzKCkuJyApOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7CkBAIC0xNzY2Myw2ICsxNzI0Nyw3
IEBACiAKICAgICAgICAgLy8KIAorICAgICAgICB0aGlzLm5hbWUgPSBzaGFkZXIubmFtZTsKICAg
ICAgICAgdGhpcy5pZCA9IHByb2dyYW1JZENvdW50ICsrOwogICAgICAgICB0aGlzLmNvZGUgPSBj
b2RlOwogICAgICAgICB0aGlzLnVzZWRUaW1lcyA9IDE7CkBAIC0xNzY3OCwxMiArMTcyNjMsMTMg
QEAKICAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqLwog
Ci0gICAgZnVuY3Rpb24gV2ViR0xQcm9ncmFtcyggcmVuZGVyZXIsIGNhcGFiaWxpdGllcyApIHsK
KyAgICBmdW5jdGlvbiBXZWJHTFByb2dyYW1zKCByZW5kZXJlciwgZXh0ZW5zaW9ucywgY2FwYWJp
bGl0aWVzICkgewogCiAgICAgICAgIHZhciBwcm9ncmFtcyA9IFtdOwogCiAgICAgICAgIHZhciBz
aGFkZXJJRHMgPSB7CiAgICAgICAgICAgICBNZXNoRGVwdGhNYXRlcmlhbDogJ2RlcHRoJywKKyAg
ICAgICAgICAgIE1lc2hEaXN0YW5jZU1hdGVyaWFsOiAnZGlzdGFuY2VSR0JBJywKICAgICAgICAg
ICAgIE1lc2hOb3JtYWxNYXRlcmlhbDogJ25vcm1hbCcsCiAgICAgICAgICAgICBNZXNoQmFzaWNN
YXRlcmlhbDogJ2Jhc2ljJywKICAgICAgICAgICAgIE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ICdsYW1i
ZXJ0JywKQEAgLTE3NjkzLDEyICsxNzI3OSwxMyBAQAogICAgICAgICAgICAgTWVzaFBoeXNpY2Fs
TWF0ZXJpYWw6ICdwaHlzaWNhbCcsCiAgICAgICAgICAgICBMaW5lQmFzaWNNYXRlcmlhbDogJ2Jh
c2ljJywKICAgICAgICAgICAgIExpbmVEYXNoZWRNYXRlcmlhbDogJ2Rhc2hlZCcsCi0gICAgICAg
ICAgICBQb2ludHNNYXRlcmlhbDogJ3BvaW50cycKKyAgICAgICAgICAgIFBvaW50c01hdGVyaWFs
OiAncG9pbnRzJywKKyAgICAgICAgICAgIFNoYWRvd01hdGVyaWFsOiAnc2hhZG93JwogICAgICAg
ICB9OwogCiAgICAgICAgIHZhciBwYXJhbWV0ZXJOYW1lcyA9IFsKICAgICAgICAgICAgICJwcmVj
aXNpb24iLCAic3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyIsICJtYXAiLCAibWFwRW5jb2RpbmciLCAi
ZW52TWFwIiwgImVudk1hcE1vZGUiLCAiZW52TWFwRW5jb2RpbmciLAotICAgICAgICAgICAgImxp
Z2h0TWFwIiwgImFvTWFwIiwgImVtaXNzaXZlTWFwIiwgImVtaXNzaXZlTWFwRW5jb2RpbmciLCAi
YnVtcE1hcCIsICJub3JtYWxNYXAiLCAiZGlzcGxhY2VtZW50TWFwIiwgInNwZWN1bGFyTWFwIiwK
KyAgICAgICAgICAgICJsaWdodE1hcCIsICJhb01hcCIsICJlbWlzc2l2ZU1hcCIsICJlbWlzc2l2
ZU1hcEVuY29kaW5nIiwgImJ1bXBNYXAiLCAibm9ybWFsTWFwIiwgIm9iamVjdFNwYWNlTm9ybWFs
TWFwIiwgImRpc3BsYWNlbWVudE1hcCIsICJzcGVjdWxhck1hcCIsCiAgICAgICAgICAgICAicm91
Z2huZXNzTWFwIiwgIm1ldGFsbmVzc01hcCIsICJncmFkaWVudE1hcCIsCiAgICAgICAgICAgICAi
YWxwaGFNYXAiLCAiY29tYmluZSIsICJ2ZXJ0ZXhDb2xvcnMiLCAiZm9nIiwgInVzZUZvZyIsICJm
b2dFeHAiLAogICAgICAgICAgICAgImZsYXRTaGFkaW5nIiwgInNpemVBdHRlbnVhdGlvbiIsICJs
b2dhcml0aG1pY0RlcHRoQnVmZmVyIiwgInNraW5uaW5nIiwKQEAgLTE3Nzc2LDcgKzE3MzYzLDcg
QEAKIAogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5nZXRQYXJhbWV0ZXJzID0gZnVuY3Rpb24g
KCBtYXRlcmlhbCwgbGlnaHRzLCBmb2csIG5DbGlwUGxhbmVzLCBuQ2xpcEludGVyc2VjdGlvbiwg
b2JqZWN0ICkgeworICAgICAgICB0aGlzLmdldFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAoIG1hdGVy
aWFsLCBsaWdodHMsIHNoYWRvd3MsIGZvZywgbkNsaXBQbGFuZXMsIG5DbGlwSW50ZXJzZWN0aW9u
LCBvYmplY3QgKSB7CiAKICAgICAgICAgICAgIHZhciBzaGFkZXJJRCA9IHNoYWRlcklEc1sgbWF0
ZXJpYWwudHlwZSBdOwogCkBAIC0xNzc4NCw3ICsxNzM3MSw3IEBACiAgICAgICAgICAgICAvLyAo
bm90IHRvIGJsb3cgb3ZlciBtYXhMaWdodHMgYnVkZ2V0KQogCiAgICAgICAgICAgICB2YXIgbWF4
Qm9uZXMgPSBvYmplY3QuaXNTa2lubmVkTWVzaCA/IGFsbG9jYXRlQm9uZXMoIG9iamVjdCApIDog
MDsKLSAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSByZW5kZXJlci5nZXRQcmVjaXNpb24oKTsK
KyAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBjYXBhYmlsaXRpZXMucHJlY2lzaW9uOwogCiAg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsLnByZWNpc2lvbiAhPT0gbnVsbCApIHsKIApAQCAtMTc4
MTksNiArMTc0MDYsNyBAQAogICAgICAgICAgICAgICAgIGVtaXNzaXZlTWFwRW5jb2Rpbmc6IGdl
dFRleHR1cmVFbmNvZGluZ0Zyb21NYXAoIG1hdGVyaWFsLmVtaXNzaXZlTWFwLCByZW5kZXJlci5n
YW1tYUlucHV0ICksCiAgICAgICAgICAgICAgICAgYnVtcE1hcDogISEgbWF0ZXJpYWwuYnVtcE1h
cCwKICAgICAgICAgICAgICAgICBub3JtYWxNYXA6ICEhIG1hdGVyaWFsLm5vcm1hbE1hcCwKKyAg
ICAgICAgICAgICAgICBvYmplY3RTcGFjZU5vcm1hbE1hcDogbWF0ZXJpYWwubm9ybWFsTWFwVHlw
ZSA9PT0gT2JqZWN0U3BhY2VOb3JtYWxNYXAsCiAgICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50
TWFwOiAhISBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAsCiAgICAgICAgICAgICAgICAgcm91Z2hu
ZXNzTWFwOiAhISBtYXRlcmlhbC5yb3VnaG5lc3NNYXAsCiAgICAgICAgICAgICAgICAgbWV0YWxu
ZXNzTWFwOiAhISBtYXRlcmlhbC5tZXRhbG5lc3NNYXAsCkBAIC0xNzgzNSw3ICsxNzQyMyw3IEBA
CiAgICAgICAgICAgICAgICAgdXNlRm9nOiBtYXRlcmlhbC5mb2csCiAgICAgICAgICAgICAgICAg
Zm9nRXhwOiAoIGZvZyAmJiBmb2cuaXNGb2dFeHAyICksCiAKLSAgICAgICAgICAgICAgICBmbGF0
U2hhZGluZzogbWF0ZXJpYWwuc2hhZGluZyA9PT0gRmxhdFNoYWRpbmcsCisgICAgICAgICAgICAg
ICAgZmxhdFNoYWRpbmc6IG1hdGVyaWFsLmZsYXRTaGFkaW5nLAogCiAgICAgICAgICAgICAgICAg
c2l6ZUF0dGVudWF0aW9uOiBtYXRlcmlhbC5zaXplQXR0ZW51YXRpb24sCiAgICAgICAgICAgICAg
ICAgbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjogY2FwYWJpbGl0aWVzLmxvZ2FyaXRobWljRGVwdGhC
dWZmZXIsCkBAIC0xNzg2MCw3ICsxNzQ0OCw3IEBACiAKICAgICAgICAgICAgICAgICBkaXRoZXJp
bmc6IG1hdGVyaWFsLmRpdGhlcmluZywKIAotICAgICAgICAgICAgICAgIHNoYWRvd01hcEVuYWJs
ZWQ6IHJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkICYmIG9iamVjdC5yZWNlaXZlU2hhZG93ICYm
IGxpZ2h0cy5zaGFkb3dzLmxlbmd0aCA+IDAsCisgICAgICAgICAgICAgICAgc2hhZG93TWFwRW5h
YmxlZDogcmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgJiYgb2JqZWN0LnJlY2VpdmVTaGFkb3cg
JiYgc2hhZG93cy5sZW5ndGggPiAwLAogICAgICAgICAgICAgICAgIHNoYWRvd01hcFR5cGU6IHJl
bmRlcmVyLnNoYWRvd01hcC50eXBlLAogCiAgICAgICAgICAgICAgICAgdG9uZU1hcHBpbmc6IHJl
bmRlcmVyLnRvbmVNYXBwaW5nLApAQCAtMTc5NDIsNyArMTc1MzAsNyBAQAogCiAgICAgICAgICAg
ICBpZiAoIHByb2dyYW0gPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHByb2dy
YW0gPSBuZXcgV2ViR0xQcm9ncmFtKCByZW5kZXJlciwgY29kZSwgbWF0ZXJpYWwsIHNoYWRlciwg
cGFyYW1ldGVycyApOworICAgICAgICAgICAgICAgIHByb2dyYW0gPSBuZXcgV2ViR0xQcm9ncmFt
KCByZW5kZXJlciwgZXh0ZW5zaW9ucywgY29kZSwgbWF0ZXJpYWwsIHNoYWRlciwgcGFyYW1ldGVy
cyApOwogICAgICAgICAgICAgICAgIHByb2dyYW1zLnB1c2goIHByb2dyYW0gKTsKIAogICAgICAg
ICAgICAgfQpAQCAtMTc5NzMsOTM5ICsxNzU2MSwxNzA4IEBACiAgICAgfQogCiAgICAgLyoqCi0g
ICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9y
IGZvcmRhY2lvdXMgLyBmb3JkYWNpb3VzLmdpdGh1Yi5pbwogICAgICAqLwogCi0gICAgZnVuY3Rp
b24gV2ViR0xUZXh0dXJlcyggX2dsLCBleHRlbnNpb25zLCBzdGF0ZSwgcHJvcGVydGllcywgY2Fw
YWJpbGl0aWVzLCBwYXJhbVRocmVlVG9HTCwgaW5mb01lbW9yeSApIHsKLQotICAgICAgICB2YXIg
X2lzV2ViR0wyID0gKCB0eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCAhPT0gJ3VuZGVmaW5l
ZCcgJiYgX2dsIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCApOwotCi0gICAgICAg
IC8vCi0KLSAgICAgICAgZnVuY3Rpb24gY2xhbXBUb01heFNpemUoIGltYWdlLCBtYXhTaXplICkg
ewotCi0gICAgICAgICAgICBpZiAoIGltYWdlLndpZHRoID4gbWF4U2l6ZSB8fCBpbWFnZS5oZWln
aHQgPiBtYXhTaXplICkgewotCi0gICAgICAgICAgICAgICAgLy8gV2FybmluZzogU2NhbGluZyB0
aHJvdWdoIHRoZSBjYW52YXMgd2lsbCBvbmx5IHdvcmsgd2l0aCBpbWFnZXMgdGhhdCB1c2UKLSAg
ICAgICAgICAgICAgICAvLyBwcmVtdWx0aXBsaWVkIGFscGhhLgorICAgIGZ1bmN0aW9uIFdlYkdM
UHJvcGVydGllcygpIHsKIAotICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IG1heFNpemUgLyBN
YXRoLm1heCggaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApOworICAgICAgICB2YXIgcHJvcGVy
dGllcyA9IG5ldyBXZWFrTWFwKCk7CiAKLSAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudE5TKCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdj
YW52YXMnICk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gTWF0aC5mbG9vciggaW1h
Z2Uud2lkdGggKiBzY2FsZSApOwotICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBNYXRo
LmZsb29yKCBpbWFnZS5oZWlnaHQgKiBzY2FsZSApOworICAgICAgICBmdW5jdGlvbiBnZXQoIG9i
amVjdCApIHsKIAotICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoICcyZCcgKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAs
IDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFz
LmhlaWdodCApOworICAgICAgICAgICAgdmFyIG1hcCA9IHByb3BlcnRpZXMuZ2V0KCBvYmplY3Qg
KTsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6
IGltYWdlIGlzIHRvbyBiaWcgKCcgKyBpbWFnZS53aWR0aCArICd4JyArIGltYWdlLmhlaWdodCAr
ICcpLiBSZXNpemVkIHRvICcgKyBjYW52YXMud2lkdGggKyAneCcgKyBjYW52YXMuaGVpZ2h0LCBp
bWFnZSApOworICAgICAgICAgICAgaWYgKCBtYXAgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAg
ICAgICAgICAgIHJldHVybiBjYW52YXM7CisgICAgICAgICAgICAgICAgbWFwID0ge307CisgICAg
ICAgICAgICAgICAgcHJvcGVydGllcy5zZXQoIG9iamVjdCwgbWFwICk7CiAKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgICAgICAgICAgcmV0dXJuIG1hcDsK
IAogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gaXNQb3dlck9mVHdvKCBpbWFnZSApIHsK
KyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlKCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAgIHJldHVy
biBfTWF0aC5pc1Bvd2VyT2ZUd28oIGltYWdlLndpZHRoICkgJiYgX01hdGguaXNQb3dlck9mVHdv
KCBpbWFnZS5oZWlnaHQgKTsKKyAgICAgICAgICAgIHByb3BlcnRpZXMuZGVsZXRlKCBvYmplY3Qg
KTsKIAogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gbWFrZVBvd2VyT2ZUd28oIGltYWdl
ICkgewotCi0gICAgICAgICAgICBpZiAoIGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVu
dCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50ICkgeworICAgICAgICBmdW5j
dGlvbiB1cGRhdGUoIG9iamVjdCwga2V5LCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgICAgIHZh
ciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoICdodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sJywgJ2NhbnZhcycgKTsKLSAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBf
TWF0aC5uZWFyZXN0UG93ZXJPZlR3byggaW1hZ2Uud2lkdGggKTsKLSAgICAgICAgICAgICAgICBj
YW52YXMuaGVpZ2h0ID0gX01hdGgubmVhcmVzdFBvd2VyT2ZUd28oIGltYWdlLmhlaWdodCApOwor
ICAgICAgICAgICAgcHJvcGVydGllcy5nZXQoIG9iamVjdCApWyBrZXkgXSA9IHZhbHVlOwogCi0g
ICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCggJzJkJyApOwot
ICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgMCwgY2FudmFzLndp
ZHRoLCBjYW52YXMuaGVpZ2h0ICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNvbnNv
bGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IGltYWdlIGlzIG5vdCBwb3dlciBvZiB0d28g
KCcgKyBpbWFnZS53aWR0aCArICd4JyArIGltYWdlLmhlaWdodCArICcpLiBSZXNpemVkIHRvICcg
KyBjYW52YXMud2lkdGggKyAneCcgKyBjYW52YXMuaGVpZ2h0LCBpbWFnZSApOworICAgICAgICBm
dW5jdGlvbiBkaXNwb3NlKCkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhczsKKyAg
ICAgICAgICAgIHByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgZ2V0OiBnZXQsCisgICAgICAgICAgICByZW1vdmU6IHJlbW92ZSwKKyAgICAg
ICAgICAgIHVwZGF0ZTogdXBkYXRlLAorICAgICAgICAgICAgZGlzcG9zZTogZGlzcG9zZQorICAg
ICAgICB9OwogCi0gICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gdGV4dHVyZU5l
ZWRzUG93ZXJPZlR3byggdGV4dHVyZSApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9v
YiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICByZXR1cm4gKCB0
ZXh0dXJlLndyYXBTICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgIT09
IENsYW1wVG9FZGdlV3JhcHBpbmcgKSB8fAotICAgICAgICAgICAgICAgICggdGV4dHVyZS5taW5G
aWx0ZXIgIT09IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZp
bHRlciApOworICAgIGZ1bmN0aW9uIHBhaW50ZXJTb3J0U3RhYmxlKCBhLCBiICkgewogCi0gICAg
ICAgIH0KKyAgICAgICAgaWYgKCBhLnJlbmRlck9yZGVyICE9PSBiLnJlbmRlck9yZGVyICkgewog
Ci0gICAgICAgIGZ1bmN0aW9uIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwg
aXNQb3dlck9mVHdvICkgeworICAgICAgICAgICAgcmV0dXJuIGEucmVuZGVyT3JkZXIgLSBiLnJl
bmRlck9yZGVyOwogCi0gICAgICAgICAgICByZXR1cm4gdGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMg
JiYgaXNQb3dlck9mVHdvICYmCi0gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgIT09
IE5lYXJlc3RGaWx0ZXIgJiYgdGV4dHVyZS5taW5GaWx0ZXIgIT09IExpbmVhckZpbHRlcjsKKyAg
ICAgICAgfSBlbHNlIGlmICggYS5wcm9ncmFtICYmIGIucHJvZ3JhbSAmJiBhLnByb2dyYW0gIT09
IGIucHJvZ3JhbSApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYS5wcm9ncmFt
LmlkIC0gYi5wcm9ncmFtLmlkOwogCi0gICAgICAgIC8vIEZhbGxiYWNrIGZpbHRlcnMgZm9yIG5v
bi1wb3dlci1vZi0yIHRleHR1cmVzCisgICAgICAgIH0gZWxzZSBpZiAoIGEubWF0ZXJpYWwuaWQg
IT09IGIubWF0ZXJpYWwuaWQgKSB7CiAKLSAgICAgICAgZnVuY3Rpb24gZmlsdGVyRmFsbGJhY2so
IGYgKSB7CisgICAgICAgICAgICByZXR1cm4gYS5tYXRlcmlhbC5pZCAtIGIubWF0ZXJpYWwuaWQ7
CiAKLSAgICAgICAgICAgIGlmICggZiA9PT0gTmVhcmVzdEZpbHRlciB8fCBmID09PSBOZWFyZXN0
TWlwTWFwTmVhcmVzdEZpbHRlciB8fCBmID09PSBOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyICkg
eworICAgICAgICB9IGVsc2UgaWYgKCBhLnogIT09IGIueiApIHsKIAotICAgICAgICAgICAgICAg
IHJldHVybiBfZ2wuTkVBUkVTVDsKKyAgICAgICAgICAgIHJldHVybiBhLnogLSBiLno7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgcmV0dXJuIF9nbC5M
SU5FQVI7CisgICAgICAgICAgICByZXR1cm4gYS5pZCAtIGIuaWQ7CiAKICAgICAgICAgfQogCi0g
ICAgICAgIC8vCisgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIG9uVGV4dHVyZURpc3Bvc2UoIGV2
ZW50ICkgeworICAgIGZ1bmN0aW9uIHJldmVyc2VQYWludGVyU29ydFN0YWJsZSggYSwgYiApIHsK
IAotICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGlmICgg
YS5yZW5kZXJPcmRlciAhPT0gYi5yZW5kZXJPcmRlciApIHsKIAotICAgICAgICAgICAgdGV4dHVy
ZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTsKKyAg
ICAgICAgICAgIHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5kZXJPcmRlcjsKIAotICAgICAg
ICAgICAgZGVhbGxvY2F0ZVRleHR1cmUoIHRleHR1cmUgKTsKKyAgICAgICAgfSBpZiAoIGEueiAh
PT0gYi56ICkgeworCisgICAgICAgICAgICByZXR1cm4gYi56IC0gYS56OwogCi0gICAgICAgICAg
ICBpbmZvTWVtb3J5LnRleHR1cmVzIC0tOworICAgICAgICB9IGVsc2UgewogCisgICAgICAgICAg
ICByZXR1cm4gYS5pZCAtIGIuaWQ7CiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIG9u
UmVuZGVyVGFyZ2V0RGlzcG9zZSggZXZlbnQgKSB7Ci0KLSAgICAgICAgICAgIHZhciByZW5kZXJU
YXJnZXQgPSBldmVudC50YXJnZXQ7CisgICAgfQogCi0gICAgICAgICAgICByZW5kZXJUYXJnZXQu
cmVtb3ZlRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblJlbmRlclRhcmdldERpc3Bvc2UgKTsK
KyAgICBmdW5jdGlvbiBXZWJHTFJlbmRlckxpc3QoKSB7CiAKLSAgICAgICAgICAgIGRlYWxsb2Nh
dGVSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApOworICAgICAgICB2YXIgcmVuZGVySXRlbXMg
PSBbXTsKKyAgICAgICAgdmFyIHJlbmRlckl0ZW1zSW5kZXggPSAwOwogCi0gICAgICAgICAgICBp
bmZvTWVtb3J5LnRleHR1cmVzIC0tOworICAgICAgICB2YXIgb3BhcXVlID0gW107CisgICAgICAg
IHZhciB0cmFuc3BhcmVudCA9IFtdOwogCi0gICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gaW5p
dCgpIHsKIAotICAgICAgICAvLworICAgICAgICAgICAgcmVuZGVySXRlbXNJbmRleCA9IDA7CiAK
LSAgICAgICAgZnVuY3Rpb24gZGVhbGxvY2F0ZVRleHR1cmUoIHRleHR1cmUgKSB7CisgICAgICAg
ICAgICBvcGFxdWUubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHRyYW5zcGFyZW50Lmxlbmd0aCA9
IDA7CiAKLSAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0
KCB0ZXh0dXJlICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmltYWdl
ICYmIHRleHR1cmVQcm9wZXJ0aWVzLl9faW1hZ2VfX3dlYmdsVGV4dHVyZUN1YmUgKSB7CisgICAg
ICAgIGZ1bmN0aW9uIHB1c2goIG9iamVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCB6LCBncm91cCAp
IHsKIAotICAgICAgICAgICAgICAgIC8vIGN1YmUgdGV4dHVyZQorICAgICAgICAgICAgdmFyIHJl
bmRlckl0ZW0gPSByZW5kZXJJdGVtc1sgcmVuZGVySXRlbXNJbmRleCBdOwogCi0gICAgICAgICAg
ICAgICAgX2dsLmRlbGV0ZVRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLl9faW1hZ2VfX3dlYmds
VGV4dHVyZUN1YmUgKTsKKyAgICAgICAgICAgIGlmICggcmVuZGVySXRlbSA9PT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0g
PSB7CisgICAgICAgICAgICAgICAgICAgIGlkOiBvYmplY3QuaWQsCisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0
cnksCisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCwKKyAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbTogbWF0ZXJpYWwucHJvZ3JhbSwKKyAgICAgICAgICAgICAgICAgICAg
cmVuZGVyT3JkZXI6IG9iamVjdC5yZW5kZXJPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgejog
eiwKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IGdyb3VwCisgICAgICAgICAgICAgICAgfTsK
IAotICAgICAgICAgICAgICAgIC8vIDJEIHRleHR1cmUKKyAgICAgICAgICAgICAgICByZW5kZXJJ
dGVtc1sgcmVuZGVySXRlbXNJbmRleCBdID0gcmVuZGVySXRlbTsKIAotICAgICAgICAgICAgICAg
IGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5lZCApIHJldHVy
bjsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlVGV4
dHVyZSggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTsKKyAgICAgICAgICAgICAg
ICByZW5kZXJJdGVtLmlkID0gb2JqZWN0LmlkOworICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0u
b2JqZWN0ID0gb2JqZWN0OworICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0uZ2VvbWV0cnkgPSBn
ZW9tZXRyeTsKKyAgICAgICAgICAgICAgICByZW5kZXJJdGVtLm1hdGVyaWFsID0gbWF0ZXJpYWw7
CisgICAgICAgICAgICAgICAgcmVuZGVySXRlbS5wcm9ncmFtID0gbWF0ZXJpYWwucHJvZ3JhbTsK
KyAgICAgICAgICAgICAgICByZW5kZXJJdGVtLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9y
ZGVyOworICAgICAgICAgICAgICAgIHJlbmRlckl0ZW0ueiA9IHo7CisgICAgICAgICAgICAgICAg
cmVuZGVySXRlbS5ncm91cCA9IGdyb3VwOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IC8vIHJlbW92ZSBhbGwgd2ViZ2wgcHJvcGVydGllcwotICAgICAgICAgICAgcHJvcGVydGllcy5y
ZW1vdmUoIHRleHR1cmUgKTsKKyAgICAgICAgICAgICggbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09
IHRydWUgPyB0cmFuc3BhcmVudCA6IG9wYXF1ZSApLnB1c2goIHJlbmRlckl0ZW0gKTsKIAotICAg
ICAgICB9CisgICAgICAgICAgICByZW5kZXJJdGVtc0luZGV4ICsrOwogCi0gICAgICAgIGZ1bmN0
aW9uIGRlYWxsb2NhdGVSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApIHsKKyAgICAgICAgfQog
Ci0gICAgICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0
KCByZW5kZXJUYXJnZXQgKTsKLSAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHBy
b3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSApOworICAgICAgICBmdW5jdGlvbiBz
b3J0KCkgewogCi0gICAgICAgICAgICBpZiAoICEgcmVuZGVyVGFyZ2V0ICkgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKCBvcGFxdWUubGVuZ3RoID4gMSApIG9wYXF1ZS5zb3J0KCBwYWludGVyU29y
dFN0YWJsZSApOworICAgICAgICAgICAgaWYgKCB0cmFuc3BhcmVudC5sZW5ndGggPiAxICkgdHJh
bnNwYXJlbnQuc29ydCggcmV2ZXJzZVBhaW50ZXJTb3J0U3RhYmxlICk7CiAKLSAgICAgICAgICAg
IGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgIT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZVRleHR1cmUoIHRleHR1cmVQ
cm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICBvcGFxdWU6IG9wYXF1ZSwKKyAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cmFuc3BhcmVudCwK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5pdDogaW5pdCwKKyAgICAgICAgICAgIHB1
c2g6IHB1c2gsCiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSAp
IHsKKyAgICAgICAgICAgIHNvcnQ6IHNvcnQKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAg
IHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZGlzcG9zZSgpOworICAgIH0KIAotICAgICAgICAg
ICAgfQorICAgIGZ1bmN0aW9uIFdlYkdMUmVuZGVyTGlzdHMoKSB7CiAKLSAgICAgICAgICAgIGlm
ICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlICkgeworICAgICAgICB2YXIg
bGlzdHMgPSB7fTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkg
KysgKSB7CisgICAgICAgIGZ1bmN0aW9uIGdldCggc2NlbmUsIGNhbWVyYSApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBfZ2wuZGVsZXRlRnJhbWVidWZmZXIoIHJlbmRlclRhcmdldFByb3BlcnRp
ZXMuX193ZWJnbEZyYW1lYnVmZmVyWyBpIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciApIF9nbC5kZWxldGVSZW5k
ZXJidWZmZXIoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyWyBpIF0g
KTsKKyAgICAgICAgICAgIHZhciBoYXNoID0gc2NlbmUuaWQgKyAnLCcgKyBjYW1lcmEuaWQ7Cisg
ICAgICAgICAgICB2YXIgbGlzdCA9IGxpc3RzWyBoYXNoIF07CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIGxpc3QgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyggJ1RIUkVFLldlYkdMUmVu
ZGVyTGlzdHM6JywgaGFzaCApOwogCi0gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVm
ZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciApOwotICAgICAg
ICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhidWZmZXIg
KSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xE
ZXB0aGJ1ZmZlciApOworICAgICAgICAgICAgICAgIGxpc3QgPSBuZXcgV2ViR0xSZW5kZXJMaXN0
KCk7CisgICAgICAgICAgICAgICAgbGlzdHNbIGhhc2ggXSA9IGxpc3Q7CiAKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgcHJvcGVydGllcy5yZW1vdmUoIHJlbmRlclRhcmdldC50ZXh0dXJl
ICk7Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzLnJlbW92ZSggcmVuZGVyVGFyZ2V0ICk7CisgICAg
ICAgICAgICByZXR1cm4gbGlzdDsKIAogICAgICAgICB9CiAKLSAgICAgICAgLy8KLQorICAgICAg
ICBmdW5jdGlvbiBkaXNwb3NlKCkgewogCisgICAgICAgICAgICBsaXN0cyA9IHt9OwogCi0gICAg
ICAgIGZ1bmN0aW9uIHNldFRleHR1cmUyRCggdGV4dHVyZSwgc2xvdCApIHsKKyAgICAgICAgfQog
Ci0gICAgICAgICAgICB2YXIgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4
dHVyZSApOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZ2V0OiBnZXQsCisgICAgICAg
ICAgICBkaXNwb3NlOiBkaXNwb3NlCisgICAgICAgIH07CiAKLSAgICAgICAgICAgIGlmICggdGV4
dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3ZlcnNpb24gIT09IHRleHR1
cmUudmVyc2lvbiApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0ZXh0
dXJlLmltYWdlOworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAgICAgICBpZiAoIGltYWdlID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgZnVuY3Rpb24gVW5pZm9ybXNDYWNoZSgpIHsKIAotICAgICAgICAgICAgICAg
ICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBm
b3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQnLCB0ZXh0dXJlICk7CisgICAgICAgIHZh
ciBsaWdodHMgPSB7fTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGltYWdlLmNvbXBs
ZXRlID09PSBmYWxzZSApIHsKKyAgICAgICAgcmV0dXJuIHsKIAotICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3Ig
dXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlJywgdGV4dHVyZSApOworICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbiAoIGxpZ2h0ICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIGxpZ2h0c1sgbGlnaHQuaWQgXSAhPT0gdW5kZWZpbmVkICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIHVwbG9hZFRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0
ZXh0dXJlLCBzbG90ICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxpZ2h0c1sgbGlnaHQuaWQgXTsKIAogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtczsKIAotICAgICAg
ICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggX2dsLlRFWFRVUkUwICsgc2xvdCApOwotICAgICAg
ICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5URVhUVVJFXzJELCB0ZXh0dXJlUHJvcGVydGll
cy5fX3dlYmdsVGV4dHVyZSApOworICAgICAgICAgICAgICAgIHN3aXRjaCAoIGxpZ2h0LnR5cGUg
KSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYXNlICdEaXJlY3Rpb25hbExp
Z2h0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogbmV3IFZlY3RvcjMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvcjogbmV3IENvbG9yKCksCiAKLSAgICAgICAgZnVuY3Rpb24gc2V0
VGV4dHVyZUN1YmUoIHRleHR1cmUsIHNsb3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dCaWFz
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1JhZGl1czogMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dNYXBTaXplOiBuZXcgVmVjdG9yMigpCisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0
dXJlICk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1Nwb3RMaWdodCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlmb3JtcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3NpdGlvbjogbmV3IFZlY3RvcjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJl
Y3Rpb246IG5ldyBWZWN0b3IzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6
IG5ldyBDb2xvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmVDb3M6IDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGVudW1icmFDb3M6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjYXk6IDAsCiAKLSAgICAgICAgICAgIGlmICggdGV4dHVyZS5pbWFnZS5sZW5ndGggPT09IDYg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93OiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dCaWFzOiAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1JhZGl1czogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFk
b3dNYXBTaXplOiBuZXcgVmVjdG9yMigpCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRleHR1
cmUudmVyc2lvbiA+IDAgJiYgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uICE9PSB0ZXh0dXJl
LnZlcnNpb24gKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BvaW50TGlnaHQnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29sb3I6IG5ldyBDb2xvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rh
bmNlOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2F5OiAwLAogCi0gICAgICAg
ICAgICAgICAgICAgIGlmICggISB0ZXh0dXJlUHJvcGVydGllcy5fX2ltYWdlX193ZWJnbFRleHR1
cmVDdWJlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvdzogZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93QmlhczogMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaGFkb3dSYWRpdXM6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93TWFwU2l6ZTogbmV3IFZlY3RvcjIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dDYW1lcmFOZWFyOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YWRvd0NhbWVyYUZhcjogMTAwMAorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSApOworICAgICAg
ICAgICAgICAgICAgICBjYXNlICdIZW1pc3BoZXJlTGlnaHQnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgdW5pZm9ybXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9u
OiBuZXcgVmVjdG9yMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNreUNvbG9yOiBu
ZXcgQ29sb3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91bmRDb2xvcjogbmV3
IENvbG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb3BlcnRpZXMu
X19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSA9IF9nbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ1JlY3RBcmVhTGlnaHQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdW5pZm9ybXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IG5ldyBD
b2xvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVjdG9y
MygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbGZXaWR0aDogbmV3IFZlY3RvcjMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmSGVpZ2h0OiBuZXcgVmVjdG9yMygp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IHNldCBS
ZWN0QXJlYUxpZ2h0IHNoYWRvdyB1bmlmb3JtcworICAgICAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbmZvTWVtb3J5LnRleHR1cmVzICsrOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlnaHRzWyBsaWdodC5pZCBdID0gdW5pZm9y
bXM7CiAKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggX2dsLlRFWFRV
UkUwICsgc2xvdCApOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggX2ds
LlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmVQcm9wZXJ0aWVzLl9faW1hZ2VfX3dlYmdsVGV4dHVy
ZUN1YmUgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pZm9ybXM7CiAKLSAgICAgICAgICAg
ICAgICAgICAgX2dsLnBpeGVsU3RvcmVpKCBfZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgdGV4dHVy
ZS5mbGlwWSApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHZhciBpc0Nv
bXByZXNzZWQgPSAoIHRleHR1cmUgJiYgdGV4dHVyZS5pc0NvbXByZXNzZWRUZXh0dXJlICk7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFUZXh0dXJlID0gKCB0ZXh0dXJlLmltYWdlWyAw
IF0gJiYgdGV4dHVyZS5pbWFnZVsgMCBdLmlzRGF0YVRleHR1cmUgKTsKKyAgICAgICAgfTsKIAot
ICAgICAgICAgICAgICAgICAgICB2YXIgY3ViZUltYWdlID0gW107CisgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CisgICAgdmFyIGNv
dW50ID0gMDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGlzQ29tcHJlc3NlZCAm
JiAhIGlzRGF0YVRleHR1cmUgKSB7CisgICAgZnVuY3Rpb24gV2ViR0xMaWdodHMoKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJlSW1hZ2VbIGkgXSA9IGNsYW1wVG9NYXhTaXpl
KCB0ZXh0dXJlLmltYWdlWyBpIF0sIGNhcGFiaWxpdGllcy5tYXhDdWJlbWFwU2l6ZSApOworICAg
ICAgICB2YXIgY2FjaGUgPSBuZXcgVW5pZm9ybXNDYWNoZSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgc3RhdGUgPSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdWJlSW1hZ2VbIGkgXSA9IGlzRGF0YVRleHR1cmUgPyB0ZXh0dXJlLmlt
YWdlWyBpIF0uaW1hZ2UgOiB0ZXh0dXJlLmltYWdlWyBpIF07CisgICAgICAgICAgICBpZDogY291
bnQgKyssCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhc2g6ICcn
LAogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFtYmllbnQ6IFsgMCwgMCwg
MCBdLAorICAgICAgICAgICAgZGlyZWN0aW9uYWw6IFtdLAorICAgICAgICAgICAgZGlyZWN0aW9u
YWxTaGFkb3dNYXA6IFtdLAorICAgICAgICAgICAgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6IFtd
LAorICAgICAgICAgICAgc3BvdDogW10sCisgICAgICAgICAgICBzcG90U2hhZG93TWFwOiBbXSwK
KyAgICAgICAgICAgIHNwb3RTaGFkb3dNYXRyaXg6IFtdLAorICAgICAgICAgICAgcmVjdEFyZWE6
IFtdLAorICAgICAgICAgICAgcG9pbnQ6IFtdLAorICAgICAgICAgICAgcG9pbnRTaGFkb3dNYXA6
IFtdLAorICAgICAgICAgICAgcG9pbnRTaGFkb3dNYXRyaXg6IFtdLAorICAgICAgICAgICAgaGVt
aTogW10KIAotICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBjdWJlSW1hZ2VbIDAgXSwK
LSAgICAgICAgICAgICAgICAgICAgaXNQb3dlck9mVHdvSW1hZ2UgPSBpc1Bvd2VyT2ZUd28oIGlt
YWdlICksCi0gICAgICAgICAgICAgICAgICAgIGdsRm9ybWF0ID0gcGFyYW1UaHJlZVRvR0woIHRl
eHR1cmUuZm9ybWF0ICksCi0gICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IHBhcmFtVGhyZWVU
b0dMKCB0ZXh0dXJlLnR5cGUgKTsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBz
ZXRUZXh0dXJlUGFyYW1ldGVycyggX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmUsIGlzUG93
ZXJPZlR3b0ltYWdlICk7CisgICAgICAgIHZhciB2ZWN0b3IzID0gbmV3IFZlY3RvcjMoKTsKKyAg
ICAgICAgdmFyIG1hdHJpeDQgPSBuZXcgTWF0cml4NCgpOworICAgICAgICB2YXIgbWF0cml4NDIg
PSBuZXcgTWF0cml4NCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsg
aSA8IDY7IGkgKysgKSB7CisgICAgICAgIGZ1bmN0aW9uIHNldHVwKCBsaWdodHMsIHNoYWRvd3Ms
IGNhbWVyYSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGlzQ29tcHJlc3Nl
ZCApIHsKKyAgICAgICAgICAgIHZhciByID0gMCwgZyA9IDAsIGIgPSAwOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpc0RhdGFUZXh0dXJlICkgeworICAgICAgICAgICAgdmFy
IGRpcmVjdGlvbmFsTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHZhciBwb2ludExlbmd0aCA9IDA7
CisgICAgICAgICAgICB2YXIgc3BvdExlbmd0aCA9IDA7CisgICAgICAgICAgICB2YXIgcmVjdEFy
ZWFMZW5ndGggPSAwOworICAgICAgICAgICAgdmFyIGhlbWlMZW5ndGggPSAwOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9nbC5URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBnbEZvcm1hdCwgY3ViZUltYWdlWyBpIF0ud2lkdGgs
IGN1YmVJbWFnZVsgaSBdLmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgY3ViZUltYWdlWyBp
IF0uZGF0YSApOworICAgICAgICAgICAgdmFyIHZpZXdNYXRyaXggPSBjYW1lcmEubWF0cml4V29y
bGRJbnZlcnNlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGxpZ2h0cy5sZW5ndGg7IGkgPCBsOyBpICsrICkg
ewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9n
bC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBnbEZvcm1hdCwgZ2xGb3JtYXQs
IGdsVHlwZSwgY3ViZUltYWdlWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBs
aWdodHNbIGkgXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB2YXIgY29sb3IgPSBsaWdodC5jb2xvcjsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZW5z
aXR5ID0gbGlnaHQuaW50ZW5zaXR5OworICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGxp
Z2h0LmRpc3RhbmNlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHZhciBzaGFkb3dNYXAgPSAoIGxpZ2h0LnNoYWRvdyAmJiBsaWdodC5zaGFkb3cu
bWFwICkgPyBsaWdodC5zaGFkb3cubWFwLnRleHR1cmUgOiBudWxsOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG1pcG1hcCwgbWlwbWFwcyA9IGN1YmVJbWFnZVsgaSBdLm1pcG1h
cHM7CisgICAgICAgICAgICAgICAgaWYgKCBsaWdodC5pc0FtYmllbnRMaWdodCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwgPSBtaXBtYXBzLmxl
bmd0aDsgaiA8IGpsOyBqICsrICkgeworICAgICAgICAgICAgICAgICAgICByICs9IGNvbG9yLnIg
KiBpbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgICAgIGcgKz0gY29sb3IuZyAqIGludGVuc2l0
eTsKKyAgICAgICAgICAgICAgICAgICAgYiArPSBjb2xvci5iICogaW50ZW5zaXR5OwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcCA9IG1pcG1hcHNbIGogXTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBsaWdodC5pc0RpcmVjdGlvbmFsTGlnaHQgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmZvcm1hdCAhPT0gUkdC
QUZvcm1hdCAmJiB0ZXh0dXJlLmZvcm1hdCAhPT0gUkdCRm9ybWF0ICkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgdW5pZm9ybXMgPSBjYWNoZS5nZXQoIGxpZ2h0ICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUuZ2V0Q29tcHJlc3NlZFRleHR1cmVG
b3JtYXRzKCkuaW5kZXhPZiggZ2xGb3JtYXQgKSA+IC0gMSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdW5pZm9ybXMuY29sb3IuY29weSggbGlnaHQuY29sb3IgKS5tdWx0aXBseVNjYWxhciggbGln
aHQuaW50ZW5zaXR5ICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpcmVjdGlvbi5z
ZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICAg
ICAgICAgIHZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC50YXJnZXQubWF0cml4
V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uLnN1YiggdmVj
dG9yMyApOworICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXJlY3Rpb24udHJhbnNmb3Jt
RGlyZWN0aW9uKCB2aWV3TWF0cml4ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCggX2dsLlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGksIGosIGdsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWln
aHQsIDAsIG1pcG1hcC5kYXRhICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNoYWRv
dyA9IGxpZ2h0LmNhc3RTaGFkb3c7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggbGlnaHQuY2FzdFNoYWRvdyAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHNoYWRvdyA9IGxpZ2h0LnNoYWRvdzsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9y
bXMuc2hhZG93QmlhcyA9IHNoYWRvdy5iaWFzOworICAgICAgICAgICAgICAgICAgICAgICAgdW5p
Zm9ybXMuc2hhZG93UmFkaXVzID0gc2hhZG93LnJhZGl1czsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaWZvcm1zLnNoYWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9n
bC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqLCBnbEZvcm1hdCwgbWlwbWFwLndp
ZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBtaXBtYXAuZGF0YSApOwor
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcFsgZGlyZWN0aW9u
YWxMZW5ndGggXSA9IHNoYWRvd01hcDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuZGlyZWN0
aW9uYWxTaGFkb3dNYXRyaXhbIGRpcmVjdGlvbmFsTGVuZ3RoIF0gPSBsaWdodC5zaGFkb3cubWF0
cml4OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5kaXJlY3Rpb25hbFsgZGlyZWN0aW9uYWxM
ZW5ndGggXSA9IHVuaWZvcm1zOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMZW5ndGggKys7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbGlnaHQuaXNT
cG90TGlnaHQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHVuaWZvcm1zID0gY2FjaGUuZ2V0KCBsaWdodCApOwogCi0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMucG9zaXRpb24uc2V0RnJvbU1h
dHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoIHZpZXdNYXRyaXggKTsKIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgaXNQ
b3dlck9mVHdvSW1hZ2UgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuY29sb3Iu
Y29weSggY29sb3IgKS5tdWx0aXBseVNjYWxhciggaW50ZW5zaXR5ICk7CisgICAgICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLmRpc3RhbmNlID0gZGlzdGFuY2U7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcCggX2dsLlRFWFRVUkVfQ1VCRV9NQVAgKTsKKyAgICAg
ICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbigg
bGlnaHQubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yMy5zZXRGcm9t
TWF0cml4UG9zaXRpb24oIGxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAg
ICAgICAgICB1bmlmb3Jtcy5kaXJlY3Rpb24uc3ViKCB2ZWN0b3IzICk7CisgICAgICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oIHZpZXdNYXRyaXgg
KTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1z
LmNvbmVDb3MgPSBNYXRoLmNvcyggbGlnaHQuYW5nbGUgKTsKKyAgICAgICAgICAgICAgICAgICAg
dW5pZm9ybXMucGVudW1icmFDb3MgPSBNYXRoLmNvcyggbGlnaHQuYW5nbGUgKiAoIDEgLSBsaWdo
dC5wZW51bWJyYSApICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRlY2F5ID0gKCBs
aWdodC5kaXN0YW5jZSA9PT0gMCApID8gMC4wIDogbGlnaHQuZGVjYXk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID0gdGV4dHVyZS52ZXJzaW9uOwor
ICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3cgPSBsaWdodC5jYXN0U2hhZG93Owog
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZS5vblVwZGF0ZSApIHRleHR1cmUub25V
cGRhdGUoIHRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBsaWdodC5jYXN0U2hh
ZG93ICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzaGFkb3cgPSBsaWdodC5zaGFkb3c7CiAKLSAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuYWN0aXZlVGV4dHVyZSggX2dsLlRFWFRVUkUwICsgc2xvdCApOwotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmVQcm9w
ZXJ0aWVzLl9faW1hZ2VfX3dlYmdsVGV4dHVyZUN1YmUgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaWZvcm1zLnNoYWRvd0JpYXMgPSBzaGFkb3cuYmlhczsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLnNoYWRvd1JhZGl1cyA9IHNoYWRvdy5yYWRpdXM7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3dNYXBTaXplID0gc2hhZG93Lm1hcFNpemU7CiAK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zcG90U2hhZG93TWFwWyBzcG90TGVuZ3RoIF0g
PSBzaGFkb3dNYXA7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNwb3RTaGFkb3dNYXRyaXhb
IHNwb3RMZW5ndGggXSA9IGxpZ2h0LnNoYWRvdy5tYXRyaXg7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnNwb3RbIHNwb3RMZW5ndGggXSA9IHVuaWZvcm1zOwogCi0gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgc3BvdExlbmd0aCArKzsKIAotICAgICAgICBmdW5jdGlvbiBzZXRUZXh0
dXJlQ3ViZUR5bmFtaWMoIHRleHR1cmUsIHNsb3QgKSB7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggbGlnaHQuaXNSZWN0QXJlYUxpZ2h0ICkgewogCi0gICAgICAgICAgICBzdGF0ZS5hY3Rp
dmVUZXh0dXJlKCBfZ2wuVEVYVFVSRTAgKyBzbG90ICk7Ci0gICAgICAgICAgICBzdGF0ZS5iaW5k
VGV4dHVyZSggX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICku
X193ZWJnbFRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1zID0gY2Fj
aGUuZ2V0KCBsaWdodCApOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gKGEp
IGludGVuc2l0eSBpcyB0aGUgdG90YWwgdmlzaWJsZSBsaWdodCBlbWl0dGVkCisgICAgICAgICAg
ICAgICAgICAgIC8vdW5pZm9ybXMuY29sb3IuY29weSggY29sb3IgKS5tdWx0aXBseVNjYWxhcigg
aW50ZW5zaXR5IC8gKCBsaWdodC53aWR0aCAqIGxpZ2h0LmhlaWdodCAqIE1hdGguUEkgKSApOwog
Ci0gICAgICAgIGZ1bmN0aW9uIHNldFRleHR1cmVQYXJhbWV0ZXJzKCB0ZXh0dXJlVHlwZSwgdGV4
dHVyZSwgaXNQb3dlck9mVHdvSW1hZ2UgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIChiKSBp
bnRlbnNpdHkgaXMgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIGxpZ2h0CisgICAgICAgICAgICAgICAg
ICAgIHVuaWZvcm1zLmNvbG9yLmNvcHkoIGNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0
eSApOwogCi0gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uOworICAgICAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxk
ICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnBvc2l0aW9uLmFwcGx5TWF0cml4NCgg
dmlld01hdHJpeCApOwogCi0gICAgICAgICAgICBpZiAoIGlzUG93ZXJPZlR3b0ltYWdlICkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0IGxvY2FsIHJvdGF0aW9uIG9mIGxpZ2h0IHRv
IGRlcml2ZSB3aWR0aC9oZWlnaHQgaGFsZiB2ZWN0b3JzCisgICAgICAgICAgICAgICAgICAgIG1h
dHJpeDQyLmlkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgICAgIG1hdHJpeDQuY29weSggbGln
aHQubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0cml4NC5wcmVtdWx0aXBs
eSggdmlld01hdHJpeCApOworICAgICAgICAgICAgICAgICAgICBtYXRyaXg0Mi5leHRyYWN0Um90
YXRpb24oIG1hdHJpeDQgKTsKIAotICAgICAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0
ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfV1JBUF9TLCBwYXJhbVRocmVlVG9HTCggdGV4dHVyZS53
cmFwUyApICk7Ci0gICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBl
LCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHBhcmFtVGhyZWVUb0dMKCB0ZXh0dXJlLndyYXBUICkgKTsK
KyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuaGFsZldpZHRoLnNldCggbGlnaHQud2lkdGgg
KiAwLjUsIDAuMCwgMC4wICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmhhbGZIZWln
aHQuc2V0KCAwLjAsIGxpZ2h0LmhlaWdodCAqIDAuNSwgMC4wICk7CiAKLSAgICAgICAgICAgICAg
ICBfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01BR19GSUxURVIs
IHBhcmFtVGhyZWVUb0dMKCB0ZXh0dXJlLm1hZ0ZpbHRlciApICk7Ci0gICAgICAgICAgICAgICAg
X2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBw
YXJhbVRocmVlVG9HTCggdGV4dHVyZS5taW5GaWx0ZXIgKSApOworICAgICAgICAgICAgICAgICAg
ICB1bmlmb3Jtcy5oYWxmV2lkdGguYXBwbHlNYXRyaXg0KCBtYXRyaXg0MiApOworICAgICAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NCggbWF0cml4NDIgKTsK
IAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyAoYWJl
bG5hdGlvbik6IFJlY3RBcmVhTGlnaHQgZGlzdGFuY2U/CisgICAgICAgICAgICAgICAgICAgIC8v
IHVuaWZvcm1zLmRpc3RhbmNlID0gZGlzdGFuY2U7CiAKLSAgICAgICAgICAgICAgICBfZ2wudGV4
UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX1dSQVBfUywgX2dsLkNMQU1QX1RP
X0VER0UgKTsKLSAgICAgICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUs
IF9nbC5URVhUVVJFX1dSQVBfVCwgX2dsLkNMQU1QX1RPX0VER0UgKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUucmVjdEFyZWFbIHJlY3RBcmVhTGVuZ3RoIF0gPSB1bmlmb3JtczsKIAotICAg
ICAgICAgICAgICAgIGlmICggdGV4dHVyZS53cmFwUyAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGluZyB8
fCB0ZXh0dXJlLndyYXBUICE9PSBDbGFtcFRvRWRnZVdyYXBwaW5nICkgeworICAgICAgICAgICAg
ICAgICAgICByZWN0QXJlYUxlbmd0aCArKzsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28u
IFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5D
bGFtcFRvRWRnZVdyYXBwaW5nLicsIHRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBsaWdodC5pc1BvaW50TGlnaHQgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IGNhY2hlLmdldCggbGlnaHQgKTsKIAotICAgICAg
ICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlwZSwgX2dsLlRFWFRVUkVfTUFH
X0ZJTFRFUiwgZmlsdGVyRmFsbGJhY2soIHRleHR1cmUubWFnRmlsdGVyICkgKTsKLSAgICAgICAg
ICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIF9nbC5URVhUVVJFX01JTl9G
SUxURVIsIGZpbHRlckZhbGxiYWNrKCB0ZXh0dXJlLm1pbkZpbHRlciApICk7CisgICAgICAgICAg
ICAgICAgICAgIHVuaWZvcm1zLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQu
bWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMucG9zaXRpb24uYXBw
bHlNYXRyaXg0KCB2aWV3TWF0cml4ICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmUu
bWluRmlsdGVyICE9PSBOZWFyZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5l
YXJGaWx0ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmNvbG9yLmNvcHkoIGxp
Z2h0LmNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGxpZ2h0LmludGVuc2l0eSApOworICAgICAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5kaXN0YW5jZSA9IGxpZ2h0LmRpc3RhbmNlOworICAgICAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5kZWNheSA9ICggbGlnaHQuZGlzdGFuY2UgPT09IDAgKSA/IDAu
MCA6IGxpZ2h0LmRlY2F5OwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5t
aW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxp
bmVhckZpbHRlci4nLCB0ZXh0dXJlICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNo
YWRvdyA9IGxpZ2h0LmNhc3RTaGFkb3c7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmICggbGlnaHQuY2FzdFNoYWRvdyApIHsKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRvdyA9IGxpZ2h0LnNoYWRvdzsKIAotICAgICAg
ICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMnICk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3dCaWFz
ID0gc2hhZG93LmJpYXM7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3dS
YWRpdXMgPSBzaGFkb3cucmFkaXVzOworICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMu
c2hhZG93TWFwU2l6ZSA9IHNoYWRvdy5tYXBTaXplOworICAgICAgICAgICAgICAgICAgICAgICAg
dW5pZm9ybXMuc2hhZG93Q2FtZXJhTmVhciA9IHNoYWRvdy5jYW1lcmEubmVhcjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNoYWRvd0NhbWVyYUZhciA9IHNoYWRvdy5jYW1lcmEu
ZmFyOwogCi0gICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSAm
JiBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicgKSA9PT0gbnVsbCAp
IHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmUudHlwZSA9PT0gSGFsZkZsb2F0
VHlwZSAmJiBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyAp
ID09PSBudWxsICkgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wb2ludFNoYWRv
d01hcFsgcG9pbnRMZW5ndGggXSA9IHNoYWRvd01hcDsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUucG9pbnRTaGFkb3dNYXRyaXhbIHBvaW50TGVuZ3RoIF0gPSBsaWdodC5zaGFkb3cubWF0cml4
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wb2ludFsgcG9pbnRMZW5ndGggXSA9IHVuaWZv
cm1zOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmFuaXNvdHJvcHkgPiAxIHx8IHBy
b3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICkuX19jdXJyZW50QW5pc290cm9weSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcG9pbnRMZW5ndGggKys7CiAKLSAgICAgICAgICAgICAgICAgICAgX2dsLnRl
eFBhcmFtZXRlcmYoIHRleHR1cmVUeXBlLCBleHRlbnNpb24uVEVYVFVSRV9NQVhfQU5JU09UUk9Q
WV9FWFQsIE1hdGgubWluKCB0ZXh0dXJlLmFuaXNvdHJvcHksIGNhcGFiaWxpdGllcy5nZXRNYXhB
bmlzb3Ryb3B5KCkgKSApOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldCggdGV4
dHVyZSApLl9fY3VycmVudEFuaXNvdHJvcHkgPSB0ZXh0dXJlLmFuaXNvdHJvcHk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggbGlnaHQuaXNIZW1pc3BoZXJlTGlnaHQgKSB7CiAKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IGNhY2hlLmdl
dCggbGlnaHQgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB1bmlmb3Jt
cy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApOwor
ICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9u
KCB2aWV3TWF0cml4ICk7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpcmVjdGlvbi5u
b3JtYWxpemUoKTsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNr
eUNvbG9yLmNvcHkoIGxpZ2h0LmNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSApOwor
ICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5ncm91bmRDb2xvci5jb3B5KCBsaWdodC5ncm91
bmRDb2xvciApLm11bHRpcGx5U2NhbGFyKCBpbnRlbnNpdHkgKTsKIAotICAgICAgICBmdW5jdGlv
biB1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwgc2xvdCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuaGVtaVsgaGVtaUxlbmd0aCBdID0gdW5pZm9ybXM7CiAK
LSAgICAgICAgICAgIGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaGVtaUxlbmd0aCArKzsKIAotICAgICAgICAg
ICAgICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLmFkZEV2ZW50TGlzdGVuZXIoICdkaXNw
b3NlJywgb25UZXh0dXJlRGlzcG9zZSApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgp
OworICAgICAgICAgICAgc3RhdGUuYW1iaWVudFsgMCBdID0gcjsKKyAgICAgICAgICAgIHN0YXRl
LmFtYmllbnRbIDEgXSA9IGc7CisgICAgICAgICAgICBzdGF0ZS5hbWJpZW50WyAyIF0gPSBiOwog
Ci0gICAgICAgICAgICAgICAgaW5mb01lbW9yeS50ZXh0dXJlcyArKzsKKyAgICAgICAgICAgIHN0
YXRlLmRpcmVjdGlvbmFsLmxlbmd0aCA9IGRpcmVjdGlvbmFsTGVuZ3RoOworICAgICAgICAgICAg
c3RhdGUuc3BvdC5sZW5ndGggPSBzcG90TGVuZ3RoOworICAgICAgICAgICAgc3RhdGUucmVjdEFy
ZWEubGVuZ3RoID0gcmVjdEFyZWFMZW5ndGg7CisgICAgICAgICAgICBzdGF0ZS5wb2ludC5sZW5n
dGggPSBwb2ludExlbmd0aDsKKyAgICAgICAgICAgIHN0YXRlLmhlbWkubGVuZ3RoID0gaGVtaUxl
bmd0aDsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUuaGFzaCA9IHN0YXRlLmlk
ICsgJywnICsgZGlyZWN0aW9uYWxMZW5ndGggKyAnLCcgKyBwb2ludExlbmd0aCArICcsJyArIHNw
b3RMZW5ndGggKyAnLCcgKyByZWN0QXJlYUxlbmd0aCArICcsJyArIGhlbWlMZW5ndGggKyAnLCcg
KyBzaGFkb3dzLmxlbmd0aDsKIAotICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGV4dHVyZSggX2ds
LlRFWFRVUkUwICsgc2xvdCApOwotICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5U
RVhUVVJFXzJELCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSApOworICAgICAgICB9
CiAKLSAgICAgICAgICAgIF9nbC5waXhlbFN0b3JlaSggX2dsLlVOUEFDS19GTElQX1lfV0VCR0ws
IHRleHR1cmUuZmxpcFkgKTsKLSAgICAgICAgICAgIF9nbC5waXhlbFN0b3JlaSggX2dsLlVOUEFD
S19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGV4dHVyZS5wcmVtdWx0aXBseUFscGhhICk7Ci0g
ICAgICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoIF9nbC5VTlBBQ0tfQUxJR05NRU5ULCB0ZXh0dXJl
LnVucGFja0FsaWdubWVudCApOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc2V0dXA6
IHNldHVwLAorICAgICAgICAgICAgc3RhdGU6IHN0YXRlCisgICAgICAgIH07CiAKLSAgICAgICAg
ICAgIHZhciBpbWFnZSA9IGNsYW1wVG9NYXhTaXplKCB0ZXh0dXJlLmltYWdlLCBjYXBhYmlsaXRp
ZXMubWF4VGV4dHVyZVNpemUgKTsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmICggdGV4dHVyZU5l
ZWRzUG93ZXJPZlR3byggdGV4dHVyZSApICYmIGlzUG93ZXJPZlR3byggaW1hZ2UgKSA9PT0gZmFs
c2UgKSB7CisgICAgLyoqCisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIu
Y29tL011Z2VuODcKKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIGltYWdlID0gbWFrZVBvd2Vy
T2ZUd28oIGltYWdlICk7CisgICAgZnVuY3Rpb24gV2ViR0xSZW5kZXJTdGF0ZSgpIHsKIAotICAg
ICAgICAgICAgfQorICAgICAgICB2YXIgbGlnaHRzID0gbmV3IFdlYkdMTGlnaHRzKCk7CiAKLSAg
ICAgICAgICAgIHZhciBpc1Bvd2VyT2ZUd29JbWFnZSA9IGlzUG93ZXJPZlR3byggaW1hZ2UgKSwK
LSAgICAgICAgICAgIGdsRm9ybWF0ID0gcGFyYW1UaHJlZVRvR0woIHRleHR1cmUuZm9ybWF0ICks
Ci0gICAgICAgICAgICBnbFR5cGUgPSBwYXJhbVRocmVlVG9HTCggdGV4dHVyZS50eXBlICk7Cisg
ICAgICAgIHZhciBsaWdodHNBcnJheSA9IFtdOworICAgICAgICB2YXIgc2hhZG93c0FycmF5ID0g
W107CisgICAgICAgIHZhciBzcHJpdGVzQXJyYXkgPSBbXTsKIAotICAgICAgICAgICAgc2V0VGV4
dHVyZVBhcmFtZXRlcnMoIF9nbC5URVhUVVJFXzJELCB0ZXh0dXJlLCBpc1Bvd2VyT2ZUd29JbWFn
ZSApOworICAgICAgICBmdW5jdGlvbiBpbml0KCkgewogCi0gICAgICAgICAgICB2YXIgbWlwbWFw
LCBtaXBtYXBzID0gdGV4dHVyZS5taXBtYXBzOworICAgICAgICAgICAgbGlnaHRzQXJyYXkubGVu
Z3RoID0gMDsKKyAgICAgICAgICAgIHNoYWRvd3NBcnJheS5sZW5ndGggPSAwOworICAgICAgICAg
ICAgc3ByaXRlc0FycmF5Lmxlbmd0aCA9IDA7CiAKLSAgICAgICAgICAgIGlmICggdGV4dHVyZS5p
c0RlcHRoVGV4dHVyZSApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gcG9wdWxh
dGUgZGVwdGggdGV4dHVyZSB3aXRoIGR1bW15IGRhdGEKKyAgICAgICAgZnVuY3Rpb24gcHVzaExp
Z2h0KCBsaWdodCApIHsKIAotICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZvcm1hdCA9IF9n
bC5ERVBUSF9DT01QT05FTlQ7CisgICAgICAgICAgICBsaWdodHNBcnJheS5wdXNoKCBsaWdodCAp
OwogCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLnR5cGUgPT09IEZsb2F0VHlwZSApIHsK
KyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICggIV9pc1dlYkdMMiApIHRocm93
IG5ldyBFcnJvcignRmxvYXQgRGVwdGggVGV4dHVyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJHTDIu
MCcpOwotICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01Q
T05FTlQzMkY7CisgICAgICAgIGZ1bmN0aW9uIHB1c2hTaGFkb3coIHNoYWRvd0xpZ2h0ICkgewog
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggX2lzV2ViR0wyICkgeworICAgICAgICAgICAg
c2hhZG93c0FycmF5LnB1c2goIHNoYWRvd0xpZ2h0ICk7CiAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gV2ViR0wgMi4wIHJlcXVpcmVzIHNpZ25lZCBpbnRlcm5hbGZvcm1hdCBmb3IgZ2xUZXhJbWFn
ZTJECi0gICAgICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gX2dsLkRFUFRIX0NPTVBP
TkVOVDE2OworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9u
IHB1c2hTcHJpdGUoIHNwcml0ZSApIHsKIAotICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZS5m
b3JtYXQgPT09IERlcHRoRm9ybWF0ICYmIGludGVybmFsRm9ybWF0ID09PSBfZ2wuREVQVEhfQ09N
UE9ORU5UICkgeworICAgICAgICAgICAgc3ByaXRlc0FycmF5LnB1c2goIHNwcml0ZSApOwogCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlcnJvciBJTlZBTElEX09QRVJBVElPTiBpcyBnZW5l
cmF0ZWQgYnkgdGV4SW1hZ2UyRCBpZiBmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IGFyZQotICAg
ICAgICAgICAgICAgICAgICAvLyBERVBUSF9DT01QT05FTlQgYW5kIHR5cGUgaXMgbm90IFVOU0lH
TkVEX1NIT1JUIG9yIFVOU0lHTkVEX0lOVAotICAgICAgICAgICAgICAgICAgICAvLyAoaHR0cHM6
Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9XRUJHTF9kZXB0aF90
ZXh0dXJlLykKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLnR5cGUgIT09IFVuc2ln
bmVkU2hvcnRUeXBlICYmIHRleHR1cmUudHlwZSAhPT0gVW5zaWduZWRJbnRUeXBlICkgeworICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJF
RS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBl
IGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuJyApOworICAgICAgICBmdW5jdGlvbiBzZXR1
cExpZ2h0cyggY2FtZXJhICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5
cGUgPSBVbnNpZ25lZFNob3J0VHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9
IHBhcmFtVGhyZWVUb0dMKCB0ZXh0dXJlLnR5cGUgKTsKKyAgICAgICAgICAgIGxpZ2h0cy5zZXR1
cCggbGlnaHRzQXJyYXksIHNoYWRvd3NBcnJheSwgY2FtZXJhICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIHZhciBzdGF0
ZSA9IHsKKyAgICAgICAgICAgIGxpZ2h0c0FycmF5OiBsaWdodHNBcnJheSwKKyAgICAgICAgICAg
IHNoYWRvd3NBcnJheTogc2hhZG93c0FycmF5LAorICAgICAgICAgICAgc3ByaXRlc0FycmF5OiBz
cHJpdGVzQXJyYXksCiAKLSAgICAgICAgICAgICAgICAvLyBEZXB0aCBzdGVuY2lsIHRleHR1cmVz
IG5lZWQgdGhlIERFUFRIX1NURU5DSUwgaW50ZXJuYWwgZm9ybWF0Ci0gICAgICAgICAgICAgICAg
Ly8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VC
R0xfZGVwdGhfdGV4dHVyZS8pCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmZvcm1hdCA9
PT0gRGVwdGhTdGVuY2lsRm9ybWF0ICkgeworICAgICAgICAgICAgbGlnaHRzOiBsaWdodHMKKyAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBU
SF9TVEVOQ0lMOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgaW5pdDogaW5pdCwKKyAg
ICAgICAgICAgIHN0YXRlOiBzdGF0ZSwKKyAgICAgICAgICAgIHNldHVwTGlnaHRzOiBzZXR1cExp
Z2h0cywKIAotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJ
T04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1h
dCBhcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gREVQVEhfU1RFTkNJTCBhbmQgdHlwZSBpcyBu
b3QgVU5TSUdORURfSU5UXzI0XzhfV0VCR0wuCi0gICAgICAgICAgICAgICAgICAgIC8vIChodHRw
czovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL1dFQkdMX2RlcHRo
X3RleHR1cmUvKQotICAgICAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmUudHlwZSAhPT0gVW5z
aWduZWRJbnQyNDhUeXBlICkgeworICAgICAgICAgICAgcHVzaExpZ2h0OiBwdXNoTGlnaHQsCisg
ICAgICAgICAgICBwdXNoU2hhZG93OiBwdXNoU2hhZG93LAorICAgICAgICAgICAgcHVzaFNwcml0
ZTogcHVzaFNwcml0ZQorICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZv
ciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLicgKTsKKyAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUudHlwZSA9IFVuc2lnbmVkSW50MjQ4VHlwZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IHBhcmFtVGhyZWVUb0dMKCB0ZXh0dXJlLnR5cGUg
KTsKKyAgICBmdW5jdGlvbiBXZWJHTFJlbmRlclN0YXRlcygpIHsKIAotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgIHZhciByZW5kZXJTdGF0ZXMgPSB7fTsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgZnVuY3Rpb24gZ2V0KCBzY2VuZSwgY2FtZXJhICkgewogCi0gICAgICAgICAg
ICAgICAgc3RhdGUudGV4SW1hZ2UyRCggX2dsLlRFWFRVUkVfMkQsIDAsIGludGVybmFsRm9ybWF0
LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7
CisgICAgICAgICAgICB2YXIgaGFzaCA9IHNjZW5lLmlkICsgJywnICsgY2FtZXJhLmlkOwogCi0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUgKSB7CisgICAgICAg
ICAgICB2YXIgcmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZXNbIGhhc2ggXTsKIAotICAgICAgICAg
ICAgICAgIC8vIHVzZSBtYW51YWxseSBjcmVhdGVkIG1pcG1hcHMgaWYgYXZhaWxhYmxlCi0gICAg
ICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1hbnVhbCBtaXBtYXBzCi0gICAgICAgICAg
ICAgICAgLy8gc2V0IDAgbGV2ZWwgbWlwbWFwIGFuZCB0aGVuIHVzZSBHTCB0byBnZW5lcmF0ZSBv
dGhlciBtaXBtYXAgbGV2ZWxzCisgICAgICAgICAgICBpZiAoIHJlbmRlclN0YXRlID09PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1pcG1hcHMubGVuZ3RoID4gMCAmJiBp
c1Bvd2VyT2ZUd29JbWFnZSApIHsKKyAgICAgICAgICAgICAgICByZW5kZXJTdGF0ZSA9IG5ldyBX
ZWJHTFJlbmRlclN0YXRlKCk7CisgICAgICAgICAgICAgICAgcmVuZGVyU3RhdGVzWyBoYXNoIF0g
PSByZW5kZXJTdGF0ZTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGls
ID0gbWlwbWFwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgICAgICAgICAgbWlwbWFwID0gbWlwbWFwc1sgaSBdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UyRCggX2dsLlRFWFRVUkVfMkQsIGksIGdsRm9ybWF0
LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1h
cC5kYXRhICk7CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyU3RhdGU7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5nZW5l
cmF0ZU1pcG1hcHMgPSBmYWxzZTsKKyAgICAgICAgZnVuY3Rpb24gZGlzcG9zZSgpIHsKIAotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZW5kZXJTdGF0ZXMgPSB7fTsKIAot
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFnZTJEKCBfZ2wuVEVYVFVSRV8yRCwgMCwg
Z2xGb3JtYXQsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUs
IGltYWdlLmRhdGEgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgZ2V0OiBnZXQsCisgICAgICAgICAgICBkaXNwb3NlOiBkaXNw
b3NlCisgICAgICAgIH07CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRleHR1cmUuaXNDb21w
cmVzc2VkVGV4dHVyZSApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGlsID0gbWlwbWFwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAvKioKKyAgICAg
KiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0
ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICogQGF1dGhvciBiaG91c3Rv
biAvIGh0dHBzOi8vY2xhcmEuaW8KKyAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDov
L2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKgorICAgICAqIHBhcmFtZXRlcnMgPSB7Cisg
ICAgICoKKyAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICBtYXA6IG5l
dyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgYWxwaGFNYXA6IG5l
dyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgZGlzcGxhY2VtZW50
TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAorICAgICAqICBkaXNwbGFjZW1lbnRT
Y2FsZTogPGZsb2F0PiwKKyAgICAgKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PiwKKyAgICAg
KgorICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKKyAgICAgKiAgd2lyZWZyYW1lTGluZXdp
ZHRoOiA8ZmxvYXQ+CisgICAgICogfQorICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgIG1p
cG1hcCA9IG1pcG1hcHNbIGkgXTsKKyAgICBmdW5jdGlvbiBNZXNoRGVwdGhNYXRlcmlhbCggcGFy
YW1ldGVycyApIHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmUuZm9ybWF0ICE9
PSBSR0JBRm9ybWF0ICYmIHRleHR1cmUuZm9ybWF0ICE9PSBSR0JGb3JtYXQgKSB7CisgICAgICAg
IE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
dGF0ZS5nZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRleE9mKCBnbEZvcm1hdCApID4g
LSAxICkgeworICAgICAgICB0aGlzLnR5cGUgPSAnTWVzaERlcHRoTWF0ZXJpYWwnOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQoIF9nbC5U
RVhUVVJFXzJELCBpLCBnbEZvcm1hdCwgbWlwbWFwLndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBt
aXBtYXAuZGF0YSApOworICAgICAgICB0aGlzLmRlcHRoUGFja2luZyA9IEJhc2ljRGVwdGhQYWNr
aW5nOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnNr
aW5uaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gZmFsc2U7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5XZWJHTFJlbmRl
cmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1h
dCBpbiAudXBsb2FkVGV4dHVyZSgpIiApOworICAgICAgICB0aGlzLm1hcCA9IG51bGw7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5hbHBoYU1hcCA9IG51bGw7CiAK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRN
YXAgPSBudWxsOworICAgICAgICB0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gMTsKKyAgICAgICAg
dGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUudGV4SW1hZ2UyRCggX2dsLlRFWFRVUkVfMkQsIGksIGdsRm9ybWF0LCBtaXBtYXAud2lkdGgs
IG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhICk7CisgICAg
ICAgIHRoaXMud2lyZWZyYW1lID0gZmFsc2U7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdp
ZHRoID0gMTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMuZm9nID0gZmFs
c2U7CisgICAgICAgIHRoaXMubGlnaHRzID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CiAKLSAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gcmVndWxhciBUZXh0dXJlIChpbWFnZSwg
dmlkZW8sIGNhbnZhcykKKyAgICBNZXNoRGVwdGhNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3Qu
Y3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUgKTsKKyAgICBNZXNoRGVwdGhNYXRlcmlhbC5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoRGVwdGhNYXRlcmlhbDsKIAotICAgICAgICAgICAgICAg
IC8vIHVzZSBtYW51YWxseSBjcmVhdGVkIG1pcG1hcHMgaWYgYXZhaWxhYmxlCi0gICAgICAgICAg
ICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1hbnVhbCBtaXBtYXBzCi0gICAgICAgICAgICAgICAg
Ly8gc2V0IDAgbGV2ZWwgbWlwbWFwIGFuZCB0aGVuIHVzZSBHTCB0byBnZW5lcmF0ZSBvdGhlciBt
aXBtYXAgbGV2ZWxzCisgICAgTWVzaERlcHRoTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaERlcHRo
TWF0ZXJpYWwgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBtaXBtYXBzLmxlbmd0aCA+
IDAgJiYgaXNQb3dlck9mVHdvSW1hZ2UgKSB7CisgICAgTWVzaERlcHRoTWF0ZXJpYWwucHJvdG90
eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGlsID0gbWlwbWFwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAg
ICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcCA9IG1pcG1hcHNbIGkgXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9nbC5URVhUVVJFXzJELCBpLCBnbEZvcm1h
dCwgZ2xGb3JtYXQsIGdsVHlwZSwgbWlwbWFwICk7CisgICAgICAgIHRoaXMuZGVwdGhQYWNraW5n
ID0gc291cmNlLmRlcHRoUGFja2luZzsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
IHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7CisgICAgICAgIHRoaXMubW9ycGhUYXJn
ZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0czsKIAotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlOworICAgICAgICB0aGlzLm1hcCA9IHNvdXJjZS5tYXA7
CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmFscGhhTWFwID0gc291
cmNlLmFscGhhTWFwOwogCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9n
bC5URVhUVVJFXzJELCAwLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1hZ2UgKTsKKyAg
ICAgICAgdGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwOworICAg
ICAgICB0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlOwor
ICAgICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhczsK
IAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2ly
ZWZyYW1lOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJh
bWVMaW5ld2lkdGg7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAg
ICAgICAgICAgIGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBpc1Bv
d2VyT2ZUd29JbWFnZSApICkgX2dsLmdlbmVyYXRlTWlwbWFwKCBfZ2wuVEVYVFVSRV8yRCApOwor
ICAgIH07CiAKLSAgICAgICAgICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9IHRleHR1
cmUudmVyc2lvbjsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDov
L2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKgorICAgICAqIHBhcmFtZXRlcnMgPSB7Cisg
ICAgICoKKyAgICAgKiAgcmVmZXJlbmNlUG9zaXRpb246IDxmbG9hdD4sCisgICAgICogIG5lYXJE
aXN0YW5jZTogPGZsb2F0PiwKKyAgICAgKiAgZmFyRGlzdGFuY2U6IDxmbG9hdD4sCisgICAgICoK
KyAgICAgKiAgc2tpbm5pbmc6IDxib29sPiwKKyAgICAgKiAgbW9ycGhUYXJnZXRzOiA8Ym9vbD4s
CisgICAgICoKKyAgICAgKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAorICAg
ICAqCisgICAgICogIGFscGhhTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAorICAg
ICAqCisgICAgICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4g
KSwKKyAgICAgKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sCisgICAgICogIGRpc3BsYWNl
bWVudEJpYXM6IDxmbG9hdD4KKyAgICAgKgorICAgICAqIH0KKyAgICAgKi8KIAotICAgICAgICAg
ICAgaWYgKCB0ZXh0dXJlLm9uVXBkYXRlICkgdGV4dHVyZS5vblVwZGF0ZSggdGV4dHVyZSApOwor
ICAgIGZ1bmN0aW9uIE1lc2hEaXN0YW5jZU1hdGVyaWFsKCBwYXJhbWV0ZXJzICkgewogCi0gICAg
ICAgIH0KKyAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhpcyApOwogCi0gICAgICAgIC8vIFJlbmRl
ciB0YXJnZXRzCisgICAgICAgIHRoaXMudHlwZSA9ICdNZXNoRGlzdGFuY2VNYXRlcmlhbCc7CiAK
LSAgICAgICAgLy8gU2V0dXAgc3RvcmFnZSBmb3IgdGFyZ2V0IHRleHR1cmUgYW5kIGJpbmQgaXQg
dG8gY29ycmVjdCBmcmFtZWJ1ZmZlcgotICAgICAgICBmdW5jdGlvbiBzZXR1cEZyYW1lQnVmZmVy
VGV4dHVyZSggZnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVyZVRh
cmdldCApIHsKKyAgICAgICAgdGhpcy5yZWZlcmVuY2VQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgIHRoaXMubmVhckRpc3RhbmNlID0gMTsKKyAgICAgICAgdGhpcy5mYXJEaXN0YW5j
ZSA9IDEwMDA7CiAKLSAgICAgICAgICAgIHZhciBnbEZvcm1hdCA9IHBhcmFtVGhyZWVUb0dMKCBy
ZW5kZXJUYXJnZXQudGV4dHVyZS5mb3JtYXQgKTsKLSAgICAgICAgICAgIHZhciBnbFR5cGUgPSBw
YXJhbVRocmVlVG9HTCggcmVuZGVyVGFyZ2V0LnRleHR1cmUudHlwZSApOwotICAgICAgICAgICAg
c3RhdGUudGV4SW1hZ2UyRCggdGV4dHVyZVRhcmdldCwgMCwgZ2xGb3JtYXQsIHJlbmRlclRhcmdl
dC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgbnVsbCAp
OwotICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBmcmFt
ZWJ1ZmZlciApOwotICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCBfZ2wuRlJB
TUVCVUZGRVIsIGF0dGFjaG1lbnQsIHRleHR1cmVUYXJnZXQsIHByb3BlcnRpZXMuZ2V0KCByZW5k
ZXJUYXJnZXQudGV4dHVyZSApLl9fd2ViZ2xUZXh0dXJlLCAwICk7Ci0gICAgICAgICAgICBfZ2wu
YmluZEZyYW1lYnVmZmVyKCBfZ2wuRlJBTUVCVUZGRVIsIG51bGwgKTsKKyAgICAgICAgdGhpcy5z
a2lubmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IGZhbHNlOwogCi0g
ICAgICAgIH0KKyAgICAgICAgdGhpcy5tYXAgPSBudWxsOwogCi0gICAgICAgIC8vIFNldHVwIHN0
b3JhZ2UgZm9yIGludGVybmFsIGRlcHRoL3N0ZW5jaWwgYnVmZmVycyBhbmQgYmluZCB0byBjb3Jy
ZWN0IGZyYW1lYnVmZmVyCi0gICAgICAgIGZ1bmN0aW9uIHNldHVwUmVuZGVyQnVmZmVyU3RvcmFn
ZSggcmVuZGVyYnVmZmVyLCByZW5kZXJUYXJnZXQgKSB7CisgICAgICAgIHRoaXMuYWxwaGFNYXAg
PSBudWxsOwogCi0gICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlciggX2dsLlJFTkRFUkJV
RkZFUiwgcmVuZGVyYnVmZmVyICk7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50TWFwID0gbnVs
bDsKKyAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IDE7CisgICAgICAgIHRoaXMuZGlz
cGxhY2VtZW50QmlhcyA9IDA7CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0LmRlcHRo
QnVmZmVyICYmICEgcmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIgKSB7CisgICAgICAgIHRoaXMu
Zm9nID0gZmFsc2U7CisgICAgICAgIHRoaXMubGlnaHRzID0gZmFsc2U7CiAKLSAgICAgICAgICAg
ICAgICBfZ2wucmVuZGVyYnVmZmVyU3RvcmFnZSggX2dsLlJFTkRFUkJVRkZFUiwgX2dsLkRFUFRI
X0NPTVBPTkVOVDE2LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTsK
LSAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoIF9nbC5GUkFNRUJV
RkZFUiwgX2dsLkRFUFRIX0FUVEFDSE1FTlQsIF9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZl
ciApOworICAgICAgICB0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOwogCi0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgcmVuZGVyVGFyZ2V0LnN0
ZW5jaWxCdWZmZXIgKSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZl
clN0b3JhZ2UoIF9nbC5SRU5ERVJCVUZGRVIsIF9nbC5ERVBUSF9TVEVOQ0lMLCByZW5kZXJUYXJn
ZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTsKLSAgICAgICAgICAgICAgICBfZ2wuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoIF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCwgX2dsLlJFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyICk7CisgICAgTWVzaERp
c3RhbmNlTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWF0ZXJpYWwucHJvdG90
eXBlICk7CisgICAgTWVzaERpc3RhbmNlTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
TWVzaERpc3RhbmNlTWF0ZXJpYWw7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgTWVzaERp
c3RhbmNlTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwgPSB0cnVlOwog
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IHN1cHBvcnQgIWRlcHRoICFzdGVu
Y2lsCi0gICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoIF9nbC5SRU5ERVJC
VUZGRVIsIF9nbC5SR0JBNCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0
ICk7CisgICAgTWVzaERpc3RhbmNlTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAo
IHNvdXJjZSApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICBNYXRlcmlhbC5wcm90b3R5cGUu
Y29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJi
dWZmZXIoIF9nbC5SRU5ERVJCVUZGRVIsIG51bGwgKTsKKyAgICAgICAgdGhpcy5yZWZlcmVuY2VQ
b3NpdGlvbi5jb3B5KCBzb3VyY2UucmVmZXJlbmNlUG9zaXRpb24gKTsKKyAgICAgICAgdGhpcy5u
ZWFyRGlzdGFuY2UgPSBzb3VyY2UubmVhckRpc3RhbmNlOworICAgICAgICB0aGlzLmZhckRpc3Rh
bmNlID0gc291cmNlLmZhckRpc3RhbmNlOwogCi0gICAgICAgIH0KKyAgICAgICAgdGhpcy5za2lu
bmluZyA9IHNvdXJjZS5za2lubmluZzsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBzb3Vy
Y2UubW9ycGhUYXJnZXRzOwogCi0gICAgICAgIC8vIFNldHVwIHJlc291cmNlcyBmb3IgYSBEZXB0
aCBUZXh0dXJlIGZvciBhIEZCTyAobmVlZHMgYW4gZXh0ZW5zaW9uKQotICAgICAgICBmdW5jdGlv
biBzZXR1cERlcHRoVGV4dHVyZSggZnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCApIHsKKyAgICAg
ICAgdGhpcy5tYXAgPSBzb3VyY2UubWFwOwogCi0gICAgICAgICAgICB2YXIgaXNDdWJlID0gKCBy
ZW5kZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlICk7Ci0g
ICAgICAgICAgICBpZiAoIGlzQ3ViZSApIHRocm93IG5ldyBFcnJvcignRGVwdGggVGV4dHVyZSB3
aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCEnKTsKKyAgICAgICAgdGhp
cy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1hcDsKIAotICAgICAgICAgICAgX2dsLmJpbmRGcmFt
ZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlciApOworICAgICAgICB0aGlzLmRp
c3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7CisgICAgICAgIHRoaXMuZGlz
cGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7CisgICAgICAgIHRoaXMu
ZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzOwogCi0gICAgICAgICAg
ICBpZiAoICEoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgJiYgcmVuZGVyVGFyZ2V0LmRlcHRo
VGV4dHVyZS5pc0RlcHRoVGV4dHVyZSApICkgeworICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBt
dXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZScpOworICAgIH07CiAKLSAg
ICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2Fs
dGVyZWRxdWFsaWEuY29tLworICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5j
b20vCisgICAgICovCiAKLSAgICAgICAgICAgIC8vIHVwbG9hZCBhbiBlbXB0eSBkZXB0aCB0ZXh0
dXJlIHdpdGggZnJhbWVidWZmZXIgc2l6ZQotICAgICAgICAgICAgaWYgKCAhcHJvcGVydGllcy5n
ZXQoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSB8fAotICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoICE9PSBy
ZW5kZXJUYXJnZXQud2lkdGggfHwKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmRl
cHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQgIT09IHJlbmRlclRhcmdldC5oZWlnaHQgKSB7Ci0gICAg
ICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCA9IHJlbmRl
clRhcmdldC53aWR0aDsKLSAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJl
LmltYWdlLmhlaWdodCA9IHJlbmRlclRhcmdldC5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9
CisgICAgZnVuY3Rpb24gV2ViR0xTaGFkb3dNYXAoIF9yZW5kZXJlciwgX29iamVjdHMsIG1heFRl
eHR1cmVTaXplICkgewogCi0gICAgICAgICAgICBzZXRUZXh0dXJlMkQoIHJlbmRlclRhcmdldC5k
ZXB0aFRleHR1cmUsIDAgKTsKKyAgICAgICAgdmFyIF9mcnVzdHVtID0gbmV3IEZydXN0dW0oKSwK
KyAgICAgICAgICAgIF9wcm9qU2NyZWVuTWF0cml4ID0gbmV3IE1hdHJpeDQoKSwKIAotICAgICAg
ICAgICAgdmFyIHdlYmdsRGVwdGhUZXh0dXJlID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdl
dC5kZXB0aFRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZTsKKyAgICAgICAgICAgIF9zaGFkb3dNYXBT
aXplID0gbmV3IFZlY3RvcjIoKSwKKyAgICAgICAgICAgIF9tYXhTaGFkb3dNYXBTaXplID0gbmV3
IFZlY3RvcjIoIG1heFRleHR1cmVTaXplLCBtYXhUZXh0dXJlU2l6ZSApLAogCi0gICAgICAgICAg
ICBpZiAoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZm9ybWF0ID09PSBEZXB0aEZvcm1hdCAp
IHsKKyAgICAgICAgICAgIF9sb29rVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKSwKKyAgICAgICAgICAg
IF9saWdodFBvc2l0aW9uV29ybGQgPSBuZXcgVmVjdG9yMygpLAogCi0gICAgICAgICAgICAgICAg
X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCBfZ2wuRlJBTUVCVUZGRVIsIF9nbC5ERVBUSF9BVFRB
Q0hNRU5ULCBfZ2wuVEVYVFVSRV8yRCwgd2ViZ2xEZXB0aFRleHR1cmUsIDAgKTsKKyAgICAgICAg
ICAgIF9Nb3JwaGluZ0ZsYWcgPSAxLAorICAgICAgICAgICAgX1NraW5uaW5nRmxhZyA9IDIsCiAK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZm9ybWF0
ID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQgKSB7CisgICAgICAgICAgICBfTnVtYmVyT2ZNYXRlcmlh
bFZhcmlhbnRzID0gKCBfTW9ycGhpbmdGbGFnIHwgX1NraW5uaW5nRmxhZyApICsgMSwKIAotICAg
ICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCggX2dsLkZSQU1FQlVGRkVSLCBf
Z2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBfZ2wuVEVYVFVSRV8yRCwgd2ViZ2xEZXB0aFRl
eHR1cmUsIDAgKTsKKyAgICAgICAgICAgIF9kZXB0aE1hdGVyaWFscyA9IG5ldyBBcnJheSggX051
bWJlck9mTWF0ZXJpYWxWYXJpYW50cyApLAorICAgICAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxz
ID0gbmV3IEFycmF5KCBfTnVtYmVyT2ZNYXRlcmlhbFZhcmlhbnRzICksCiAKLSAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBfbWF0ZXJpYWxDYWNoZSA9IHt9OwogCi0gICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQnKQorICAg
ICAgICB2YXIgc2hhZG93U2lkZSA9IHsgMDogQmFja1NpZGUsIDE6IEZyb250U2lkZSwgMjogRG91
YmxlU2lkZSB9OwogCi0gICAgICAgICAgICB9CisgICAgICAgIHZhciBjdWJlRGlyZWN0aW9ucyA9
IFsKKyAgICAgICAgICAgIG5ldyBWZWN0b3IzKCAxLCAwLCAwICksIG5ldyBWZWN0b3IzKCAtIDEs
IDAsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIDAsIDEgKSwKKyAgICAgICAgICAgIG5ldyBWZWN0b3Iz
KCAwLCAwLCAtIDEgKSwgbmV3IFZlY3RvcjMoIDAsIDEsIDAgKSwgbmV3IFZlY3RvcjMoIDAsIC0g
MSwgMCApCisgICAgICAgIF07CiAKLSAgICAgICAgfQorICAgICAgICB2YXIgY3ViZVVwcyA9IFsK
KyAgICAgICAgICAgIG5ldyBWZWN0b3IzKCAwLCAxLCAwICksIG5ldyBWZWN0b3IzKCAwLCAxLCAw
ICksIG5ldyBWZWN0b3IzKCAwLCAxLCAwICksCisgICAgICAgICAgICBuZXcgVmVjdG9yMyggMCwg
MSwgMCApLCBuZXcgVmVjdG9yMyggMCwgMCwgMSApLCBuZXcgVmVjdG9yMyggMCwgMCwgLSAxICkK
KyAgICAgICAgXTsKIAotICAgICAgICAvLyBTZXR1cCBHTCByZXNvdXJjZXMgZm9yIGEgbm9uLXRl
eHR1cmUgZGVwdGggYnVmZmVyCi0gICAgICAgIGZ1bmN0aW9uIHNldHVwRGVwdGhSZW5kZXJidWZm
ZXIoIHJlbmRlclRhcmdldCApIHsKKyAgICAgICAgdmFyIGN1YmUyRFZpZXdQb3J0cyA9IFsKKyAg
ICAgICAgICAgIG5ldyBWZWN0b3I0KCksIG5ldyBWZWN0b3I0KCksIG5ldyBWZWN0b3I0KCksCisg
ICAgICAgICAgICBuZXcgVmVjdG9yNCgpLCBuZXcgVmVjdG9yNCgpLCBuZXcgVmVjdG9yNCgpCisg
ICAgICAgIF07CiAKLSAgICAgICAgICAgIHZhciByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJv
cGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApOworICAgICAgICAvLyBpbml0CiAKLSAgICAgICAg
ICAgIHZhciBpc0N1YmUgPSAoIHJlbmRlclRhcmdldC5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSA9
PT0gdHJ1ZSApOworICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IF9OdW1iZXJPZk1hdGVy
aWFsVmFyaWFudHM7ICsrIGkgKSB7CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0LmRl
cHRoVGV4dHVyZSApIHsKKyAgICAgICAgICAgIHZhciB1c2VNb3JwaGluZyA9ICggaSAmIF9Nb3Jw
aGluZ0ZsYWcgKSAhPT0gMDsKKyAgICAgICAgICAgIHZhciB1c2VTa2lubmluZyA9ICggaSAmIF9T
a2lubmluZ0ZsYWcgKSAhPT0gMDsKIAotICAgICAgICAgICAgICAgIGlmICggaXNDdWJlICkgdGhy
b3cgbmV3IEVycm9yKCd0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSBy
ZW5kZXIgdGFyZ2V0cycpOworICAgICAgICAgICAgdmFyIGRlcHRoTWF0ZXJpYWwgPSBuZXcgTWVz
aERlcHRoTWF0ZXJpYWwoIHsKIAotICAgICAgICAgICAgICAgIHNldHVwRGVwdGhUZXh0dXJlKCBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0ICk7
CisgICAgICAgICAgICAgICAgZGVwdGhQYWNraW5nOiBSR0JBRGVwdGhQYWNraW5nLAogCi0gICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0czogdXNlTW9ycGhp
bmcsCisgICAgICAgICAgICAgICAgc2tpbm5pbmc6IHVzZVNraW5uaW5nCiAKLSAgICAgICAgICAg
ICAgICBpZiAoIGlzQ3ViZSApIHsKKyAgICAgICAgICAgIH0gKTsKIAotICAgICAgICAgICAgICAg
ICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciA9IFtdOworICAg
ICAgICAgICAgX2RlcHRoTWF0ZXJpYWxzWyBpIF0gPSBkZXB0aE1hdGVyaWFsOwogCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CisgICAgICAgICAg
ICAvLwogCi0gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCBfZ2wu
RlJBTUVCVUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyWyBp
IF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193
ZWJnbERlcHRoYnVmZmVyWyBpIF0gPSBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzZXR1cFJlbmRlckJ1ZmZlclN0b3JhZ2UoIHJlbmRlclRhcmdldFBy
b3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVyWyBpIF0sIHJlbmRlclRhcmdldCApOworICAgICAg
ICAgICAgdmFyIGRpc3RhbmNlTWF0ZXJpYWwgPSBuZXcgTWVzaERpc3RhbmNlTWF0ZXJpYWwoIHsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzOiB1
c2VNb3JwaGluZywKKyAgICAgICAgICAgICAgICBza2lubmluZzogdXNlU2tpbm5pbmcKIAotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9ICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCByZW5kZXJUYXJnZXRQ
cm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciApOwotICAgICAgICAgICAgICAgICAgICByZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciA9IF9nbC5jcmVhdGVSZW5kZXJi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCBy
ZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlciwgcmVuZGVyVGFyZ2V0ICk7
CisgICAgICAgICAgICBfZGlzdGFuY2VNYXRlcmlhbHNbIGkgXSA9IGRpc3RhbmNlTWF0ZXJpYWw7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAg
ICAvLwogCi0gICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCBfZ2wuRlJBTUVCVUZGRVIs
IG51bGwgKTsKKyAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKIAotICAgICAgICB9CisgICAgICAg
IHRoaXMuZW5hYmxlZCA9IGZhbHNlOwogCi0gICAgICAgIC8vIFNldCB1cCBHTCByZXNvdXJjZXMg
Zm9yIHRoZSByZW5kZXIgdGFyZ2V0Ci0gICAgICAgIGZ1bmN0aW9uIHNldHVwUmVuZGVyVGFyZ2V0
KCByZW5kZXJUYXJnZXQgKSB7CisgICAgICAgIHRoaXMuYXV0b1VwZGF0ZSA9IHRydWU7CisgICAg
ICAgIHRoaXMubmVlZHNVcGRhdGUgPSBmYWxzZTsKIAotICAgICAgICAgICAgdmFyIHJlbmRlclRh
cmdldFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0ICk7Ci0gICAgICAg
ICAgICB2YXIgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0
LnRleHR1cmUgKTsKKyAgICAgICAgdGhpcy50eXBlID0gUENGU2hhZG93TWFwOwogCi0gICAgICAg
ICAgICByZW5kZXJUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lciggJ2Rpc3Bvc2UnLCBvblJlbmRlclRh
cmdldERpc3Bvc2UgKTsKKyAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoIGxpZ2h0cywg
c2NlbmUsIGNhbWVyYSApIHsKIAotICAgICAgICAgICAgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJn
bFRleHR1cmUgPSBfZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCBzY29wZS5l
bmFibGVkID09PSBmYWxzZSApIHJldHVybjsKKyAgICAgICAgICAgIGlmICggc2NvcGUuYXV0b1Vw
ZGF0ZSA9PT0gZmFsc2UgJiYgc2NvcGUubmVlZHNVcGRhdGUgPT09IGZhbHNlICkgcmV0dXJuOwog
Ci0gICAgICAgICAgICBpbmZvTWVtb3J5LnRleHR1cmVzICsrOworICAgICAgICAgICAgaWYgKCBs
aWdodHMubGVuZ3RoID09PSAwICkgcmV0dXJuOwogCi0gICAgICAgICAgICB2YXIgaXNDdWJlID0g
KCByZW5kZXJUYXJnZXQuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUgPT09IHRydWUgKTsKLSAgICAg
ICAgICAgIHZhciBpc1RhcmdldFBvd2VyT2ZUd28gPSBpc1Bvd2VyT2ZUd28oIHJlbmRlclRhcmdl
dCApOworICAgICAgICAgICAgLy8gVE9ETyBDbGVhbiB1cCAobmVlZGVkIGluIGNhc2Ugb2YgY29u
dGV4dGxvc3QpCisgICAgICAgICAgICB2YXIgX2dsID0gX3JlbmRlcmVyLmNvbnRleHQ7CisgICAg
ICAgICAgICB2YXIgX3N0YXRlID0gX3JlbmRlcmVyLnN0YXRlOwogCi0gICAgICAgICAgICAvLyBT
ZXR1cCBmcmFtZWJ1ZmZlcgorICAgICAgICAgICAgLy8gU2V0IEdMIHN0YXRlIGZvciBkZXB0aCBt
YXAuCisgICAgICAgICAgICBfc3RhdGUuZGlzYWJsZSggX2dsLkJMRU5EICk7CisgICAgICAgICAg
ICBfc3RhdGUuYnVmZmVycy5jb2xvci5zZXRDbGVhciggMSwgMSwgMSwgMSApOworICAgICAgICAg
ICAgX3N0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCggdHJ1ZSApOworICAgICAgICAgICAgX3N0
YXRlLnNldFNjaXNzb3JUZXN0KCBmYWxzZSApOwogCi0gICAgICAgICAgICBpZiAoIGlzQ3ViZSAp
IHsKKyAgICAgICAgICAgIC8vIHJlbmRlciBkZXB0aCBtYXAKIAotICAgICAgICAgICAgICAgIHJl
bmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gW107CisgICAgICAgICAg
ICB2YXIgZmFjZUNvdW50OwogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
NjsgaSArKyApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBsaWdodHMubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbIGkgXSA9IF9nbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpOworICAgICAgICAgICAgICAgIHZhciBsaWdodCA9IGxpZ2h0c1sgaSBdOworICAgICAgICAg
ICAgICAgIHZhciBzaGFkb3cgPSBsaWdodC5zaGFkb3c7CisgICAgICAgICAgICAgICAgdmFyIGlz
UG9pbnRMaWdodCA9IGxpZ2h0ICYmIGxpZ2h0LmlzUG9pbnRMaWdodDsKIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIHNoYWRvdyA9PT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdU
SFJFRS5XZWJHTFNoYWRvd01hcDonLCBsaWdodCwgJ2hhcyBubyBzaGFkb3cuJyApOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFBy
b3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHNo
YWRvd0NhbWVyYSA9IHNoYWRvdy5jYW1lcmE7CiAKLSAgICAgICAgICAgIC8vIFNldHVwIGNvbG9y
IGJ1ZmZlcgorICAgICAgICAgICAgICAgIF9zaGFkb3dNYXBTaXplLmNvcHkoIHNoYWRvdy5tYXBT
aXplICk7CisgICAgICAgICAgICAgICAgX3NoYWRvd01hcFNpemUubWluKCBfbWF4U2hhZG93TWFw
U2l6ZSApOwogCi0gICAgICAgICAgICBpZiAoIGlzQ3ViZSApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGlzUG9pbnRMaWdodCApIHsKIAotICAgICAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJl
KCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUg
KTsKLSAgICAgICAgICAgICAgICBzZXRUZXh0dXJlUGFyYW1ldGVycyggX2dsLlRFWFRVUkVfQ1VC
RV9NQVAsIHJlbmRlclRhcmdldC50ZXh0dXJlLCBpc1RhcmdldFBvd2VyT2ZUd28gKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHZwV2lkdGggPSBfc2hhZG93TWFwU2l6ZS54OworICAgICAgICAg
ICAgICAgICAgICB2YXIgdnBIZWlnaHQgPSBfc2hhZG93TWFwU2l6ZS55OwogCi0gICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlc2Ugdmlld3BvcnRzIG1hcCBhIGN1YmUtbWFwIG9udG8gYSAyRCB0ZXh0dXJlIHdp
dGggdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGZvbGxvd2luZyBvcmllbnRhdGlvbjoKKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gIHh6WFoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICB5IFkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gWCAtIFBvc2l0aXZlIHggZGlyZWN0aW9uCisgICAgICAgICAgICAgICAg
ICAgIC8vIHggLSBOZWdhdGl2ZSB4IGRpcmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyBZ
IC0gUG9zaXRpdmUgeSBkaXJlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8geSAtIE5lZ2F0
aXZlIHkgZGlyZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIFogLSBQb3NpdGl2ZSB6IGRp
cmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB6IC0gTmVnYXRpdmUgeiBkaXJlY3Rpb24K
IAotICAgICAgICAgICAgICAgICAgICBzZXR1cEZyYW1lQnVmZmVyVGV4dHVyZSggcmVuZGVyVGFy
Z2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXJbIGkgXSwgcmVuZGVyVGFyZ2V0LCBfZ2wu
Q09MT1JfQVRUQUNITUVOVDAsIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpICk7
CisgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aXZlIFgKKyAgICAgICAgICAgICAgICAgICAg
Y3ViZTJEVmlld1BvcnRzWyAwIF0uc2V0KCB2cFdpZHRoICogMiwgdnBIZWlnaHQsIHZwV2lkdGgs
IHZwSGVpZ2h0ICk7CisgICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIFgKKyAgICAgICAg
ICAgICAgICAgICAgY3ViZTJEVmlld1BvcnRzWyAxIF0uc2V0KCAwLCB2cEhlaWdodCwgdnBXaWR0
aCwgdnBIZWlnaHQgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpdmUgWgorICAgICAg
ICAgICAgICAgICAgICBjdWJlMkRWaWV3UG9ydHNbIDIgXS5zZXQoIHZwV2lkdGggKiAzLCB2cEhl
aWdodCwgdnBXaWR0aCwgdnBIZWlnaHQgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRp
dmUgWgorICAgICAgICAgICAgICAgICAgICBjdWJlMkRWaWV3UG9ydHNbIDMgXS5zZXQoIHZwV2lk
dGgsIHZwSGVpZ2h0LCB2cFdpZHRoLCB2cEhlaWdodCApOworICAgICAgICAgICAgICAgICAgICAv
LyBwb3NpdGl2ZSBZCisgICAgICAgICAgICAgICAgICAgIGN1YmUyRFZpZXdQb3J0c1sgNCBdLnNl
dCggdnBXaWR0aCAqIDMsIDAsIHZwV2lkdGgsIHZwSGVpZ2h0ICk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIG5lZ2F0aXZlIFkKKyAgICAgICAgICAgICAgICAgICAgY3ViZTJEVmlld1BvcnRzWyA1
IF0uc2V0KCB2cFdpZHRoLCAwLCB2cFdpZHRoLCB2cEhlaWdodCApOworCisgICAgICAgICAgICAg
ICAgICAgIF9zaGFkb3dNYXBTaXplLnggKj0gNC4wOworICAgICAgICAgICAgICAgICAgICBfc2hh
ZG93TWFwU2l6ZS55ICo9IDIuMDsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCByZW5kZXJUYXJnZXQudGV4dHVy
ZSwgaXNUYXJnZXRQb3dlck9mVHdvICkgKSBfZ2wuZ2VuZXJhdGVNaXBtYXAoIF9nbC5URVhUVVJF
X0NVQkVfTUFQICk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5URVhU
VVJFX0NVQkVfTUFQLCBudWxsICk7CisgICAgICAgICAgICAgICAgaWYgKCBzaGFkb3cubWFwID09
PSBudWxsICkgewogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2
YXIgcGFycyA9IHsgbWluRmlsdGVyOiBOZWFyZXN0RmlsdGVyLCBtYWdGaWx0ZXI6IE5lYXJlc3RG
aWx0ZXIsIGZvcm1hdDogUkdCQUZvcm1hdCB9OwogCi0gICAgICAgICAgICAgICAgc3RhdGUuYmlu
ZFRleHR1cmUoIF9nbC5URVhUVVJFXzJELCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVy
ZSApOwotICAgICAgICAgICAgICAgIHNldFRleHR1cmVQYXJhbWV0ZXJzKCBfZ2wuVEVYVFVSRV8y
RCwgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIGlzVGFyZ2V0UG93ZXJPZlR3byApOwotICAgICAgICAg
ICAgICAgIHNldHVwRnJhbWVCdWZmZXJUZXh0dXJlKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9f
d2ViZ2xGcmFtZWJ1ZmZlciwgcmVuZGVyVGFyZ2V0LCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIF9n
bC5URVhUVVJFXzJEICk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvdy5tYXAgPSBuZXcgV2Vi
R0xSZW5kZXJUYXJnZXQoIF9zaGFkb3dNYXBTaXplLngsIF9zaGFkb3dNYXBTaXplLnksIHBhcnMg
KTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93Lm1hcC50ZXh0dXJlLm5hbWUgPSBsaWdodC5u
YW1lICsgIi5zaGFkb3dNYXAiOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlTmVlZHNH
ZW5lcmF0ZU1pcG1hcHMoIHJlbmRlclRhcmdldC50ZXh0dXJlLCBpc1RhcmdldFBvd2VyT2ZUd28g
KSApIF9nbC5nZW5lcmF0ZU1pcG1hcCggX2dsLlRFWFRVUkVfMkQgKTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfMkQsIG51bGwgKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2hhZG93Q2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gU2V0dXAgZGVwdGgg
YW5kIHN0ZW5jaWwgYnVmZmVycworICAgICAgICAgICAgICAgIGlmICggc2hhZG93LmlzU3BvdExp
Z2h0U2hhZG93ICkgewogCi0gICAgICAgICAgICBpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZl
ciApIHsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93LnVwZGF0ZSggbGlnaHQgKTsKIAotICAg
ICAgICAgICAgICAgIHNldHVwRGVwdGhSZW5kZXJidWZmZXIoIHJlbmRlclRhcmdldCApOworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzaGFk
b3dNYXAgPSBzaGFkb3cubWFwOworICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXRyaXggPSBz
aGFkb3cubWF0cml4OwogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBfbGlnaHRQb3NpdGlv
bldvcmxkLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTsKKyAgICAg
ICAgICAgICAgICBzaGFkb3dDYW1lcmEucG9zaXRpb24uY29weSggX2xpZ2h0UG9zaXRpb25Xb3Js
ZCApOwogCi0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCggcmVuZGVy
VGFyZ2V0ICkgeworICAgICAgICAgICAgICAgIGlmICggaXNQb2ludExpZ2h0ICkgewogCi0gICAg
ICAgICAgICB2YXIgdGV4dHVyZSA9IHJlbmRlclRhcmdldC50ZXh0dXJlOwotICAgICAgICAgICAg
dmFyIGlzVGFyZ2V0UG93ZXJPZlR3byA9IGlzUG93ZXJPZlR3byggcmVuZGVyVGFyZ2V0ICk7Cisg
ICAgICAgICAgICAgICAgICAgIGZhY2VDb3VudCA9IDY7CiAKLSAgICAgICAgICAgIGlmICggdGV4
dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBpc1RhcmdldFBvd2VyT2ZUd28gKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHBvaW50IGxpZ2h0cyB3ZSBzZXQgdGhlIHNo
YWRvdyBtYXRyaXggdG8gYmUgYSB0cmFuc2xhdGlvbi1vbmx5IG1hdHJpeAorICAgICAgICAgICAg
ICAgICAgICAvLyBlcXVhbCB0byBpbnZlcnNlIG9mIHRoZSBsaWdodCdzIHBvc2l0aW9uCiAKLSAg
ICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJn
ZXRDdWJlID8gX2dsLlRFWFRVUkVfQ1VCRV9NQVAgOiBfZ2wuVEVYVFVSRV8yRDsKLSAgICAgICAg
ICAgICAgICB2YXIgd2ViZ2xUZXh0dXJlID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKS5fX3dl
YmdsVGV4dHVyZTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93TWF0cml4Lm1ha2VUcmFuc2xh
dGlvbiggLSBfbGlnaHRQb3NpdGlvbldvcmxkLngsIC0gX2xpZ2h0UG9zaXRpb25Xb3JsZC55LCAt
IF9saWdodFBvc2l0aW9uV29ybGQueiApOwogCi0gICAgICAgICAgICAgICAgc3RhdGUuYmluZFRl
eHR1cmUoIHRhcmdldCwgd2ViZ2xUZXh0dXJlICk7Ci0gICAgICAgICAgICAgICAgX2dsLmdlbmVy
YXRlTWlwbWFwKCB0YXJnZXQgKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSgg
dGFyZ2V0LCBudWxsICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBmYWNlQ291bnQgPSAxOwogCi0gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgX2xvb2tUYXJnZXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC50
YXJnZXQubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhLmxv
b2tBdCggX2xvb2tUYXJnZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhLnVw
ZGF0ZU1hdHJpeFdvcmxkKCk7CiAKLSAgICAgICAgdGhpcy5zZXRUZXh0dXJlMkQgPSBzZXRUZXh0
dXJlMkQ7Ci0gICAgICAgIHRoaXMuc2V0VGV4dHVyZUN1YmUgPSBzZXRUZXh0dXJlQ3ViZTsKLSAg
ICAgICAgdGhpcy5zZXRUZXh0dXJlQ3ViZUR5bmFtaWMgPSBzZXRUZXh0dXJlQ3ViZUR5bmFtaWM7
Ci0gICAgICAgIHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQgPSBzZXR1cFJlbmRlclRhcmdldDsKLSAg
ICAgICAgdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAgPSB1cGRhdGVSZW5kZXJUYXJnZXRN
aXBtYXA7CisgICAgICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgc2hhZG93IG1hdHJpeAogCi0g
ICAgfQorICAgICAgICAgICAgICAgICAgICBzaGFkb3dNYXRyaXguc2V0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgMC41LCAwLjAsIDAuMCwgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAg
MC4wLCAwLjUsIDAuMCwgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsIDAu
NSwgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsIDAuMCwgMS4wCisgICAg
ICAgICAgICAgICAgICAgICk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGZvcmRhY2lvdXMg
LyBmb3JkYWNpb3VzLmdpdGh1Yi5pbwotICAgICAqLworICAgICAgICAgICAgICAgICAgICBzaGFk
b3dNYXRyaXgubXVsdGlwbHkoIHNoYWRvd0NhbWVyYS5wcm9qZWN0aW9uTWF0cml4ICk7CisgICAg
ICAgICAgICAgICAgICAgIHNoYWRvd01hdHJpeC5tdWx0aXBseSggc2hhZG93Q2FtZXJhLm1hdHJp
eFdvcmxkSW52ZXJzZSApOwogCi0gICAgZnVuY3Rpb24gV2ViR0xQcm9wZXJ0aWVzKCkgeworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9OworICAgICAgICAg
ICAgICAgIF9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoIHNoYWRvd01hcCApOworICAgICAgICAg
ICAgICAgIF9yZW5kZXJlci5jbGVhcigpOwogCi0gICAgICAgIGZ1bmN0aW9uIGdldCggb2JqZWN0
ICkgeworICAgICAgICAgICAgICAgIC8vIHJlbmRlciBzaGFkb3cgbWFwIGZvciBlYWNoIGN1YmUg
ZmFjZSAoaWYgb21uaS1kaXJlY3Rpb25hbCkgb3IKKyAgICAgICAgICAgICAgICAvLyBydW4gYSBz
aW5nbGUgcGFzcyBpZiBub3QKIAotICAgICAgICAgICAgdmFyIHV1aWQgPSBvYmplY3QudXVpZDsK
LSAgICAgICAgICAgIHZhciBtYXAgPSBwcm9wZXJ0aWVzWyB1dWlkIF07CisgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGZhY2UgPSAwOyBmYWNlIDwgZmFjZUNvdW50OyBmYWNlICsrICkgewogCi0g
ICAgICAgICAgICBpZiAoIG1hcCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGlzUG9pbnRMaWdodCApIHsKIAotICAgICAgICAgICAgICAgIG1hcCA9IHt9OwotICAg
ICAgICAgICAgICAgIHByb3BlcnRpZXNbIHV1aWQgXSA9IG1hcDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9sb29rVGFyZ2V0LmNvcHkoIHNoYWRvd0NhbWVyYS5wb3NpdGlvbiApOworICAgICAg
ICAgICAgICAgICAgICAgICAgX2xvb2tUYXJnZXQuYWRkKCBjdWJlRGlyZWN0aW9uc1sgZmFjZSBd
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmEudXAuY29weSggY3ViZVVw
c1sgZmFjZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmEubG9va0F0
KCBfbG9va1RhcmdldCApOworICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhLnVw
ZGF0ZU1hdHJpeFdvcmxkKCk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB2cERpbWVuc2lvbnMgPSBjdWJlMkRWaWV3UG9ydHNbIGZhY2UgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIF9zdGF0ZS52aWV3cG9ydCggdnBEaW1lbnNpb25zICk7CiAKLSAgICAg
ICAgICAgIHJldHVybiBtYXA7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjYW1lcmEgbWF0cmljZXMgYW5kIGZydXN0dW0K
IAotICAgICAgICBmdW5jdGlvbiByZW1vdmUoIG9iamVjdCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgX3Byb2pTY3JlZW5NYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggc2hhZG93Q2FtZXJhLnByb2pl
Y3Rpb25NYXRyaXgsIHNoYWRvd0NhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTsKKyAgICAgICAg
ICAgICAgICAgICAgX2ZydXN0dW0uc2V0RnJvbU1hdHJpeCggX3Byb2pTY3JlZW5NYXRyaXggKTsK
IAotICAgICAgICAgICAgZGVsZXRlIHByb3BlcnRpZXNbIG9iamVjdC51dWlkIF07CisgICAgICAg
ICAgICAgICAgICAgIC8vIHNldCBvYmplY3QgbWF0cmljZXMgJiBmcnVzdHVtIGN1bGxpbmcKIAot
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdCggc2NlbmUsIGNhbWVy
YSwgc2hhZG93Q2FtZXJhLCBpc1BvaW50TGlnaHQgKTsKIAotICAgICAgICBmdW5jdGlvbiBjbGVh
cigpIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICB9CisgICAgICAgICAgICBzY29wZS5uZWVkc1VwZGF0
ZSA9IGZhbHNlOwogCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBnZXQ6IGdldCwKLSAg
ICAgICAgICAgIHJlbW92ZTogcmVtb3ZlLAotICAgICAgICAgICAgY2xlYXI6IGNsZWFyCiAgICAg
ICAgIH07CiAKLSAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdldERlcHRoTWF0ZXJpYWwoIG9iamVj
dCwgbWF0ZXJpYWwsIGlzUG9pbnRMaWdodCwgbGlnaHRQb3NpdGlvbldvcmxkLCBzaGFkb3dDYW1l
cmFOZWFyLCBzaGFkb3dDYW1lcmFGYXIgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICAgICAgdmFyIGdlb21l
dHJ5ID0gb2JqZWN0Lmdlb21ldHJ5OwogCi0gICAgZnVuY3Rpb24gV2ViR0xTdGF0ZSggZ2wsIGV4
dGVuc2lvbnMsIHBhcmFtVGhyZWVUb0dMICkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG51
bGw7CiAKLSAgICAgICAgZnVuY3Rpb24gQ29sb3JCdWZmZXIoKSB7CisgICAgICAgICAgICB2YXIg
bWF0ZXJpYWxWYXJpYW50cyA9IF9kZXB0aE1hdGVyaWFsczsKKyAgICAgICAgICAgIHZhciBjdXN0
b21NYXRlcmlhbCA9IG9iamVjdC5jdXN0b21EZXB0aE1hdGVyaWFsOwogCi0gICAgICAgICAgICB2
YXIgbG9ja2VkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIGlzUG9pbnRMaWdodCApIHsKIAot
ICAgICAgICAgICAgdmFyIGNvbG9yID0gbmV3IFZlY3RvcjQoKTsKLSAgICAgICAgICAgIHZhciBj
dXJyZW50Q29sb3JNYXNrID0gbnVsbDsKLSAgICAgICAgICAgIHZhciBjdXJyZW50Q29sb3JDbGVh
ciA9IG5ldyBWZWN0b3I0KCk7CisgICAgICAgICAgICAgICAgbWF0ZXJpYWxWYXJpYW50cyA9IF9k
aXN0YW5jZU1hdGVyaWFsczsKKyAgICAgICAgICAgICAgICBjdXN0b21NYXRlcmlhbCA9IG9iamVj
dC5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOwogCi0gICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2V0TWFzazogZnVuY3Rpb24gKCBjb2xvck1hc2sg
KSB7CisgICAgICAgICAgICBpZiAoICEgY3VzdG9tTWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjdXJyZW50Q29sb3JNYXNrICE9PSBjb2xvck1hc2sgJiYgISBsb2NrZWQg
KSB7CisgICAgICAgICAgICAgICAgdmFyIHVzZU1vcnBoaW5nID0gZmFsc2U7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayggY29sb3JNYXNrLCBjb2xvck1hc2ssIGNvbG9y
TWFzaywgY29sb3JNYXNrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29sb3JN
YXNrID0gY29sb3JNYXNrOworICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubW9ycGhUYXJn
ZXRzICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZU1vcnBoaW5nID0gZ2VvbWV0cnku
bW9ycGhBdHRyaWJ1dGVzICYmIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiAmJiBn
ZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoID4gMDsKIAotICAgICAgICAg
ICAgICAgIHNldExvY2tlZDogZnVuY3Rpb24gKCBsb2NrICkgeworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0dlb21ldHJ5ICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIGxvY2tlZCA9IGxvY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB1
c2VNb3JwaGluZyA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cyAmJiBnZW9tZXRyeS5tb3JwaFRhcmdl
dHMubGVuZ3RoID4gMDsKIAotICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIHNldENsZWFyOiBmdW5jdGlvbiAoIHIsIGcsIGIsIGEsIHBy
ZW11bHRpcGxpZWRBbHBoYSApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwcmVtdWx0aXBsaWVkQWxwaGEgPT09IHRydWUgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBvYmplY3QuaXNTa2lubmVkTWVzaCAmJiBtYXRlcmlhbC5za2lubmluZyA9PT0gZmFs
c2UgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgKj0gYTsgZyAqPSBhOyBiICo9IGE7
CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMU2hhZG93TWFw
OiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZTon
LCBvYmplY3QgKTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yLnNldCggciwgZywgYiwgYSApOworICAgICAgICAg
ICAgICAgIHZhciB1c2VTa2lubmluZyA9IG9iamVjdC5pc1NraW5uZWRNZXNoICYmIG1hdGVyaWFs
LnNraW5uaW5nOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudENvbG9yQ2xlYXIu
ZXF1YWxzKCBjb2xvciApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFyaWFu
dEluZGV4ID0gMDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZ2wuY2xlYXJDb2xvciggciwg
ZywgYiwgYSApOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbG9yQ2xlYXIuY29w
eSggY29sb3IgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHVzZU1vcnBoaW5nICkgdmFyaWFudElu
ZGV4IHw9IF9Nb3JwaGluZ0ZsYWc7CisgICAgICAgICAgICAgICAgaWYgKCB1c2VTa2lubmluZyAp
IHZhcmlhbnRJbmRleCB8PSBfU2tpbm5pbmdGbGFnOwogCi0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXRlcmlhbFZhcmlhbnRzWyB2YXJpYW50SW5kZXgg
XTsKIAotICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
ICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBj
dXN0b21NYXRlcmlhbDsKIAotICAgICAgICAgICAgICAgICAgICBsb2NrZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29sb3JNYXNrID0gbnVs
bDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbG9yQ2xlYXIuc2V0KCAwLCAwLCAwLCAx
ICk7CisgICAgICAgICAgICBpZiAoIF9yZW5kZXJlci5sb2NhbENsaXBwaW5nRW5hYmxlZCAmJgor
ICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5jbGlwU2hhZG93cyA9PT0gdHJ1ZSAmJgorICAg
ICAgICAgICAgICAgICAgICBtYXRlcmlhbC5jbGlwcGluZ1BsYW5lcy5sZW5ndGggIT09IDAgKSB7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdl
IG5lZWQgYSB1bmlxdWUgbWF0ZXJpYWwgaW5zdGFuY2UgcmVmbGVjdGluZyB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBhcHByb3ByaWF0ZSBzdGF0ZQogCi0gICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIHZhciBrZXlBID0gcmVzdWx0LnV1aWQsIGtleUIgPSBtYXRlcmlhbC51dWlkOwogCi0g
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWxzRm9yVmFyaWFudCA9IF9tYXRl
cmlhbENhY2hlWyBrZXlBIF07CiAKLSAgICAgICAgZnVuY3Rpb24gRGVwdGhCdWZmZXIoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbHNGb3JWYXJpYW50ID09PSB1bmRlZmluZWQgKSB7
CiAKLSAgICAgICAgICAgIHZhciBsb2NrZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
bWF0ZXJpYWxzRm9yVmFyaWFudCA9IHt9OworICAgICAgICAgICAgICAgICAgICBfbWF0ZXJpYWxD
YWNoZVsga2V5QSBdID0gbWF0ZXJpYWxzRm9yVmFyaWFudDsKIAotICAgICAgICAgICAgdmFyIGN1
cnJlbnREZXB0aE1hc2sgPSBudWxsOwotICAgICAgICAgICAgdmFyIGN1cnJlbnREZXB0aEZ1bmMg
PSBudWxsOwotICAgICAgICAgICAgdmFyIGN1cnJlbnREZXB0aENsZWFyID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdmFy
IGNhY2hlZE1hdGVyaWFsID0gbWF0ZXJpYWxzRm9yVmFyaWFudFsga2V5QiBdOwogCi0gICAgICAg
ICAgICAgICAgc2V0VGVzdDogZnVuY3Rpb24gKCBkZXB0aFRlc3QgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBjYWNoZWRNYXRlcmlhbCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggZGVwdGhUZXN0ICkgeworICAgICAgICAgICAgICAgICAgICBjYWNoZWRNYXRl
cmlhbCA9IHJlc3VsdC5jbG9uZSgpOworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbHNGb3JW
YXJpYW50WyBrZXlCIF0gPSBjYWNoZWRNYXRlcmlhbDsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlKCBnbC5ERVBUSF9URVNUICk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FjaGVkTWF0
ZXJpYWw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUoIGdsLkRFUFRIX1RFU1Qg
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXN1bHQudmlzaWJsZSA9IG1hdGVyaWFsLnZpc2libGU7CisgICAgICAgICAgICByZXN1bHQud2ly
ZWZyYW1lID0gbWF0ZXJpYWwud2lyZWZyYW1lOwogCi0gICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHJlc3VsdC5zaWRlID0gKCBtYXRlcmlhbC5zaGFkb3dTaWRlICE9IG51bGwgKSA/IG1h
dGVyaWFsLnNoYWRvd1NpZGUgOiBzaGFkb3dTaWRlWyBtYXRlcmlhbC5zaWRlIF07CiAKLSAgICAg
ICAgICAgICAgICBzZXRNYXNrOiBmdW5jdGlvbiAoIGRlcHRoTWFzayApIHsKKyAgICAgICAgICAg
IHJlc3VsdC5jbGlwU2hhZG93cyA9IG1hdGVyaWFsLmNsaXBTaGFkb3dzOworICAgICAgICAgICAg
cmVzdWx0LmNsaXBwaW5nUGxhbmVzID0gbWF0ZXJpYWwuY2xpcHBpbmdQbGFuZXM7CisgICAgICAg
ICAgICByZXN1bHQuY2xpcEludGVyc2VjdGlvbiA9IG1hdGVyaWFsLmNsaXBJbnRlcnNlY3Rpb247
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50RGVwdGhNYXNrICE9PSBkZXB0aE1h
c2sgJiYgISBsb2NrZWQgKSB7CisgICAgICAgICAgICByZXN1bHQud2lyZWZyYW1lTGluZXdpZHRo
ID0gbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoOworICAgICAgICAgICAgcmVzdWx0LmxpbmV3
aWR0aCA9IG1hdGVyaWFsLmxpbmV3aWR0aDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZ2wu
ZGVwdGhNYXNrKCBkZXB0aE1hc2sgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRE
ZXB0aE1hc2sgPSBkZXB0aE1hc2s7CisgICAgICAgICAgICBpZiAoIGlzUG9pbnRMaWdodCAmJiBy
ZXN1bHQuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmVzdWx0LnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkoIGxpZ2h0UG9z
aXRpb25Xb3JsZCApOworICAgICAgICAgICAgICAgIHJlc3VsdC5uZWFyRGlzdGFuY2UgPSBzaGFk
b3dDYW1lcmFOZWFyOworICAgICAgICAgICAgICAgIHJlc3VsdC5mYXJEaXN0YW5jZSA9IHNoYWRv
d0NhbWVyYUZhcjsKIAotICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJl
bmRlck9iamVjdCggb2JqZWN0LCBjYW1lcmEsIHNoYWRvd0NhbWVyYSwgaXNQb2ludExpZ2h0ICkg
eworCisgICAgICAgICAgICBpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjsK
KworICAgICAgICAgICAgdmFyIHZpc2libGUgPSBvYmplY3QubGF5ZXJzLnRlc3QoIGNhbWVyYS5s
YXllcnMgKTsKKworICAgICAgICAgICAgaWYgKCB2aXNpYmxlICYmICggb2JqZWN0LmlzTWVzaCB8
fCBvYmplY3QuaXNMaW5lIHx8IG9iamVjdC5pc1BvaW50cyApICkgeworCisgICAgICAgICAgICAg
ICAgaWYgKCBvYmplY3QuY2FzdFNoYWRvdyAmJiAoICEgb2JqZWN0LmZydXN0dW1DdWxsZWQgfHwg
X2ZydXN0dW0uaW50ZXJzZWN0c09iamVjdCggb2JqZWN0ICkgKSApIHsKKworICAgICAgICAgICAg
ICAgICAgICBvYmplY3QubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIHNoYWRvd0Nh
bWVyYS5tYXRyaXhXb3JsZEludmVyc2UsIG9iamVjdC5tYXRyaXhXb3JsZCApOworCisgICAgICAg
ICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IF9vYmplY3RzLnVwZGF0ZSggb2JqZWN0ICk7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIG1hdGVyaWFsICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrID0gMCwga2wgPSBncm91cHMubGVuZ3Ro
OyBrIDwga2w7IGsgKysgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3Jv
dXAgPSBncm91cHNbIGsgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBN
YXRlcmlhbCA9IG1hdGVyaWFsWyBncm91cC5tYXRlcmlhbEluZGV4IF07CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGdyb3VwTWF0ZXJpYWwgJiYgZ3JvdXBNYXRlcmlhbC52aXNp
YmxlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aE1hdGVy
aWFsID0gZ2V0RGVwdGhNYXRlcmlhbCggb2JqZWN0LCBncm91cE1hdGVyaWFsLCBpc1BvaW50TGln
aHQsIF9saWdodFBvc2l0aW9uV29ybGQsIHNoYWRvd0NhbWVyYS5uZWFyLCBzaGFkb3dDYW1lcmEu
ZmFyICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZW5kZXJlci5yZW5kZXJC
dWZmZXJEaXJlY3QoIHNoYWRvd0NhbWVyYSwgbnVsbCwgZ2VvbWV0cnksIGRlcHRoTWF0ZXJpYWws
IG9iamVjdCwgZ3JvdXAgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IG1hdGVyaWFsLnZpc2libGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0
aE1hdGVyaWFsID0gZ2V0RGVwdGhNYXRlcmlhbCggb2JqZWN0LCBtYXRlcmlhbCwgaXNQb2ludExp
Z2h0LCBfbGlnaHRQb3NpdGlvbldvcmxkLCBzaGFkb3dDYW1lcmEubmVhciwgc2hhZG93Q2FtZXJh
LmZhciApOworICAgICAgICAgICAgICAgICAgICAgICAgX3JlbmRlcmVyLnJlbmRlckJ1ZmZlckRp
cmVjdCggc2hhZG93Q2FtZXJhLCBudWxsLCBnZW9tZXRyeSwgZGVwdGhNYXRlcmlhbCwgb2JqZWN0
LCBudWxsICk7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG9iamVjdC5jaGls
ZHJlbjsKKworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3Ro
OyBpIDwgbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdCggY2hpbGRy
ZW5bIGkgXSwgY2FtZXJhLCBzaGFkb3dDYW1lcmEsIGlzUG9pbnRMaWdodCApOworCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgfQorCisgICAgfQorCisgICAgLyoqCisgICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIENhbnZh
c1RleHR1cmUoIGNhbnZhcywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZp
bHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICkgeworCisgICAgICAgIFRleHR1cmUuY2Fs
bCggdGhpcywgY2FudmFzLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmls
dGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHkgKTsKKworICAgICAgICB0aGlzLm5lZWRzVXBk
YXRlID0gdHJ1ZTsKKworICAgIH0KKworICAgIENhbnZhc1RleHR1cmUucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZSggVGV4dHVyZS5wcm90b3R5cGUgKTsKKyAgICBDYW52YXNUZXh0dXJlLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1RleHR1cmU7CisgICAgQ2FudmFzVGV4dHVyZS5wcm90
b3R5cGUuaXNDYW52YXNUZXh0dXJlID0gdHJ1ZTsKKworICAgIC8qKgorICAgICAqIEBhdXRob3Ig
bWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhvciBhbHRlcmVk
cSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIFdl
YkdMU3ByaXRlUmVuZGVyZXIoIHJlbmRlcmVyLCBnbCwgc3RhdGUsIHRleHR1cmVzLCBjYXBhYmls
aXRpZXMgKSB7CisKKyAgICAgICAgdmFyIHZlcnRleEJ1ZmZlciwgZWxlbWVudEJ1ZmZlcjsKKyAg
ICAgICAgdmFyIHByb2dyYW0sIGF0dHJpYnV0ZXMsIHVuaWZvcm1zOworCisgICAgICAgIHZhciB0
ZXh0dXJlOworCisgICAgICAgIC8vIGRlY29tcG9zZSBtYXRyaXhXb3JsZAorCisgICAgICAgIHZh
ciBzcHJpdGVQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHZhciBzcHJpdGVSb3Rh
dGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7CisgICAgICAgIHZhciBzcHJpdGVTY2FsZSA9IG5ldyBW
ZWN0b3IzKCk7CisKKyAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHsKKworICAgICAgICAgICAgdmFy
IHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheSggWworICAgICAgICAgICAgICAgIC0gMC41LCAt
IDAuNSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgIDAuNSwgLSAwLjUsIDEsIDAsCisgICAgICAg
ICAgICAgICAgICAwLjUsIDAuNSwgMSwgMSwKKyAgICAgICAgICAgICAgICAtIDAuNSwgMC41LCAw
LCAxCisgICAgICAgICAgICBdICk7CisKKyAgICAgICAgICAgIHZhciBmYWNlcyA9IG5ldyBVaW50
MTZBcnJheSggWworICAgICAgICAgICAgICAgIDAsIDEsIDIsCisgICAgICAgICAgICAgICAgMCwg
MiwgMworICAgICAgICAgICAgXSApOworCisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXIgPSBnbC5j
cmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZm
ZXIoKTsKKworICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlciggZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0
ZXhCdWZmZXIgKTsKKyAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoIGdsLkFSUkFZX0JVRkZFUiwg
dmVydGljZXMsIGdsLlNUQVRJQ19EUkFXICk7CisKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIo
IGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyICk7CisgICAgICAgICAgICBn
bC5idWZmZXJEYXRhKCBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZmFjZXMsIGdsLlNUQVRJQ19E
UkFXICk7CisKKyAgICAgICAgICAgIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKCk7CisKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZXMgPSB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGdsLmdldEF0
dHJpYkxvY2F0aW9uKCBwcm9ncmFtLCAncG9zaXRpb24nICksCisgICAgICAgICAgICAgICAgdXY6
IGdsLmdldEF0dHJpYkxvY2F0aW9uKCBwcm9ncmFtLCAndXYnICkKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIHVuaWZvcm1zID0geworICAgICAgICAgICAgICAgIHV2T2Zmc2V0OiBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICd1dk9mZnNldCcgKSwKKyAgICAgICAgICAgICAg
ICB1dlNjYWxlOiBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICd1dlNjYWxlJyApLAor
CisgICAgICAgICAgICAgICAgcm90YXRpb246IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3Jh
bSwgJ3JvdGF0aW9uJyApLAorICAgICAgICAgICAgICAgIGNlbnRlcjogZ2wuZ2V0VW5pZm9ybUxv
Y2F0aW9uKCBwcm9ncmFtLCAnY2VudGVyJyApLAorICAgICAgICAgICAgICAgIHNjYWxlOiBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdzY2FsZScgKSwKKworICAgICAgICAgICAgICAg
IGNvbG9yOiBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdjb2xvcicgKSwKKyAgICAg
ICAgICAgICAgICBtYXA6IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ21hcCcgKSwK
KyAgICAgICAgICAgICAgICBvcGFjaXR5OiBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0s
ICdvcGFjaXR5JyApLAorCisgICAgICAgICAgICAgICAgbW9kZWxWaWV3TWF0cml4OiBnbC5nZXRV
bmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdtb2RlbFZpZXdNYXRyaXgnICksCisgICAgICAgICAg
ICAgICAgcHJvamVjdGlvbk1hdHJpeDogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAn
cHJvamVjdGlvbk1hdHJpeCcgKSwKKworICAgICAgICAgICAgICAgIGZvZ1R5cGU6IGdsLmdldFVu
aWZvcm1Mb2NhdGlvbiggcHJvZ3JhbSwgJ2ZvZ1R5cGUnICksCisgICAgICAgICAgICAgICAgZm9n
RGVuc2l0eTogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAnZm9nRGVuc2l0eScgKSwK
KyAgICAgICAgICAgICAgICBmb2dOZWFyOiBnbC5nZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0s
ICdmb2dOZWFyJyApLAorICAgICAgICAgICAgICAgIGZvZ0ZhcjogZ2wuZ2V0VW5pZm9ybUxvY2F0
aW9uKCBwcm9ncmFtLCAnZm9nRmFyJyApLAorICAgICAgICAgICAgICAgIGZvZ0NvbG9yOiBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24oIHByb2dyYW0sICdmb2dDb2xvcicgKSwKKyAgICAgICAgICAgICAg
ICBmb2dEZXB0aDogZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKCBwcm9ncmFtLCAnZm9nRGVwdGgnICks
CisKKyAgICAgICAgICAgICAgICBhbHBoYVRlc3Q6IGdsLmdldFVuaWZvcm1Mb2NhdGlvbiggcHJv
Z3JhbSwgJ2FscGhhVGVzdCcgKQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdmFyIGNh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwnLCAnY2FudmFzJyApOworICAgICAgICAgICAgY2FudmFzLndpZHRoID0gODsKKyAgICAg
ICAgICAgIGNhbnZhcy5oZWlnaHQgPSA4OworCisgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNh
bnZhcy5nZXRDb250ZXh0KCAnMmQnICk7CisgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9
ICd3aGl0ZSc7CisgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KCAwLCAwLCA4LCA4ICk7CisK
KyAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgQ2FudmFzVGV4dHVyZSggY2FudmFzICk7CisKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBzcHJpdGVzLCBzY2Vu
ZSwgY2FtZXJhICkgeworCisgICAgICAgICAgICBpZiAoIHNwcml0ZXMubGVuZ3RoID09PSAwICkg
cmV0dXJuOworCisgICAgICAgICAgICAvLyBzZXR1cCBnbAorCisgICAgICAgICAgICBpZiAoIHBy
b2dyYW0gPT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIGluaXQoKTsKKworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS51c2VQcm9ncmFtKCBwcm9ncmFtICk7CisK
KyAgICAgICAgICAgIHN0YXRlLmluaXRBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICBzdGF0ZS5l
bmFibGVBdHRyaWJ1dGUoIGF0dHJpYnV0ZXMucG9zaXRpb24gKTsKKyAgICAgICAgICAgIHN0YXRl
LmVuYWJsZUF0dHJpYnV0ZSggYXR0cmlidXRlcy51diApOworICAgICAgICAgICAgc3RhdGUuZGlz
YWJsZVVudXNlZEF0dHJpYnV0ZXMoKTsKKworICAgICAgICAgICAgc3RhdGUuZGlzYWJsZSggZ2wu
Q1VMTF9GQUNFICk7CisgICAgICAgICAgICBzdGF0ZS5lbmFibGUoIGdsLkJMRU5EICk7CisKKyAg
ICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4QnVmZmVyICk7
CisgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKCBhdHRyaWJ1dGVzLnBvc2l0aW9u
LCAyLCBnbC5GTE9BVCwgZmFsc2UsIDIgKiA4LCAwICk7CisgICAgICAgICAgICBnbC52ZXJ0ZXhB
dHRyaWJQb2ludGVyKCBhdHRyaWJ1dGVzLnV2LCAyLCBnbC5GTE9BVCwgZmFsc2UsIDIgKiA4LCA4
ICk7CisKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVS
LCBlbGVtZW50QnVmZmVyICk7CisKKyAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoIHVu
aWZvcm1zLnByb2plY3Rpb25NYXRyaXgsIGZhbHNlLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5l
bGVtZW50cyApOworCisgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUZXh0dXJlKCBnbC5URVhUVVJF
MCApOworICAgICAgICAgICAgZ2wudW5pZm9ybTFpKCB1bmlmb3Jtcy5tYXAsIDAgKTsKKworICAg
ICAgICAgICAgdmFyIG9sZEZvZ1R5cGUgPSAwOworICAgICAgICAgICAgdmFyIHNjZW5lRm9nVHlw
ZSA9IDA7CisgICAgICAgICAgICB2YXIgZm9nID0gc2NlbmUuZm9nOworCisgICAgICAgICAgICBp
ZiAoIGZvZyApIHsKKworICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0zZiggdW5pZm9ybXMuZm9n
Q29sb3IsIGZvZy5jb2xvci5yLCBmb2cuY29sb3IuZywgZm9nLmNvbG9yLmIgKTsKKworICAgICAg
ICAgICAgICAgIGlmICggZm9nLmlzRm9nICkgeworCisgICAgICAgICAgICAgICAgICAgIGdsLnVu
aWZvcm0xZiggdW5pZm9ybXMuZm9nTmVhciwgZm9nLm5lYXIgKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2wudW5pZm9ybTFmKCB1bmlmb3Jtcy5mb2dGYXIsIGZvZy5mYXIgKTsKKworICAgICAgICAg
ICAgICAgICAgICBnbC51bmlmb3JtMWkoIHVuaWZvcm1zLmZvZ1R5cGUsIDEgKTsKKyAgICAgICAg
ICAgICAgICAgICAgb2xkRm9nVHlwZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIHNjZW5lRm9n
VHlwZSA9IDE7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBmb2cuaXNGb2dFeHAyICkg
eworCisgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0xZiggdW5pZm9ybXMuZm9nRGVuc2l0
eSwgZm9nLmRlbnNpdHkgKTsKKworICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWkoIHVu
aWZvcm1zLmZvZ1R5cGUsIDIgKTsKKyAgICAgICAgICAgICAgICAgICAgb2xkRm9nVHlwZSA9IDI7
CisgICAgICAgICAgICAgICAgICAgIHNjZW5lRm9nVHlwZSA9IDI7CisKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICBnbC51bmlmb3Jt
MWkoIHVuaWZvcm1zLmZvZ1R5cGUsIDAgKTsKKyAgICAgICAgICAgICAgICBvbGRGb2dUeXBlID0g
MDsKKyAgICAgICAgICAgICAgICBzY2VuZUZvZ1R5cGUgPSAwOworCisgICAgICAgICAgICB9CisK
KworICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9ucyBhbmQgc29ydAorCisgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBzcHJpdGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisK
KyAgICAgICAgICAgICAgICB2YXIgc3ByaXRlID0gc3ByaXRlc1sgaSBdOworCisgICAgICAgICAg
ICAgICAgc3ByaXRlLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBjYW1lcmEubWF0
cml4V29ybGRJbnZlcnNlLCBzcHJpdGUubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICBz
cHJpdGUueiA9IC0gc3ByaXRlLm1vZGVsVmlld01hdHJpeC5lbGVtZW50c1sgMTQgXTsKKworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzcHJpdGVzLnNvcnQoIHBhaW50ZXJTb3J0U3RhYmxl
ICk7CisKKyAgICAgICAgICAgIC8vIHJlbmRlciBhbGwgc3ByaXRlcworCisgICAgICAgICAgICB2
YXIgc2NhbGUgPSBbXTsKKyAgICAgICAgICAgIHZhciBjZW50ZXIgPSBbXTsKKworICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gc3ByaXRlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewor
CisgICAgICAgICAgICAgICAgdmFyIHNwcml0ZSA9IHNwcml0ZXNbIGkgXTsKKyAgICAgICAgICAg
ICAgICB2YXIgbWF0ZXJpYWwgPSBzcHJpdGUubWF0ZXJpYWw7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIG1hdGVyaWFsLnZpc2libGUgPT09IGZhbHNlICkgY29udGludWU7CisKKyAgICAgICAgICAg
ICAgICBzcHJpdGUub25CZWZvcmVSZW5kZXIoIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1bmRl
ZmluZWQsIG1hdGVyaWFsLCB1bmRlZmluZWQgKTsKKworICAgICAgICAgICAgICAgIGdsLnVuaWZv
cm0xZiggdW5pZm9ybXMuYWxwaGFUZXN0LCBtYXRlcmlhbC5hbHBoYVRlc3QgKTsKKyAgICAgICAg
ICAgICAgICBnbC51bmlmb3JtTWF0cml4NGZ2KCB1bmlmb3Jtcy5tb2RlbFZpZXdNYXRyaXgsIGZh
bHNlLCBzcHJpdGUubW9kZWxWaWV3TWF0cml4LmVsZW1lbnRzICk7CisKKyAgICAgICAgICAgICAg
ICBzcHJpdGUubWF0cml4V29ybGQuZGVjb21wb3NlKCBzcHJpdGVQb3NpdGlvbiwgc3ByaXRlUm90
YXRpb24sIHNwcml0ZVNjYWxlICk7CisKKyAgICAgICAgICAgICAgICBzY2FsZVsgMCBdID0gc3By
aXRlU2NhbGUueDsKKyAgICAgICAgICAgICAgICBzY2FsZVsgMSBdID0gc3ByaXRlU2NhbGUueTsK
KworICAgICAgICAgICAgICAgIGNlbnRlclsgMCBdID0gc3ByaXRlLmNlbnRlci54IC0gMC41Owor
ICAgICAgICAgICAgICAgIGNlbnRlclsgMSBdID0gc3ByaXRlLmNlbnRlci55IC0gMC41OworCisg
ICAgICAgICAgICAgICAgdmFyIGZvZ1R5cGUgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKCBz
Y2VuZS5mb2cgJiYgbWF0ZXJpYWwuZm9nICkgeworCisgICAgICAgICAgICAgICAgICAgIGZvZ1R5
cGUgPSBzY2VuZUZvZ1R5cGU7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIG9sZEZvZ1R5cGUgIT09IGZvZ1R5cGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Z2wudW5pZm9ybTFpKCB1bmlmb3Jtcy5mb2dUeXBlLCBmb2dUeXBlICk7CisgICAgICAgICAgICAg
ICAgICAgIG9sZEZvZ1R5cGUgPSBmb2dUeXBlOworCisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5tYXAgIT09IG51bGwgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgZ2wudW5pZm9ybTJmKCB1bmlmb3Jtcy51dk9mZnNldCwgbWF0ZXJpYWwubWFwLm9m
ZnNldC54LCBtYXRlcmlhbC5tYXAub2Zmc2V0LnkgKTsKKyAgICAgICAgICAgICAgICAgICAgZ2wu
dW5pZm9ybTJmKCB1bmlmb3Jtcy51dlNjYWxlLCBtYXRlcmlhbC5tYXAucmVwZWF0LngsIG1hdGVy
aWFsLm1hcC5yZXBlYXQueSApOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAg
ICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoIHVuaWZvcm1zLnV2T2Zmc2V0LCAwLCAwICk7Cisg
ICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZiggdW5pZm9ybXMudXZTY2FsZSwgMSwgMSAp
OworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFmKCB1
bmlmb3Jtcy5vcGFjaXR5LCBtYXRlcmlhbC5vcGFjaXR5ICk7CisgICAgICAgICAgICAgICAgZ2wu
dW5pZm9ybTNmKCB1bmlmb3Jtcy5jb2xvciwgbWF0ZXJpYWwuY29sb3IuciwgbWF0ZXJpYWwuY29s
b3IuZywgbWF0ZXJpYWwuY29sb3IuYiApOworCisgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFm
KCB1bmlmb3Jtcy5yb3RhdGlvbiwgbWF0ZXJpYWwucm90YXRpb24gKTsKKyAgICAgICAgICAgICAg
ICBnbC51bmlmb3JtMmZ2KCB1bmlmb3Jtcy5jZW50ZXIsIGNlbnRlciApOworICAgICAgICAgICAg
ICAgIGdsLnVuaWZvcm0yZnYoIHVuaWZvcm1zLnNjYWxlLCBzY2FsZSApOworCisgICAgICAgICAg
ICAgICAgc3RhdGUuc2V0QmxlbmRpbmcoIG1hdGVyaWFsLmJsZW5kaW5nLCBtYXRlcmlhbC5ibGVu
ZEVxdWF0aW9uLCBtYXRlcmlhbC5ibGVuZFNyYywgbWF0ZXJpYWwuYmxlbmREc3QsIG1hdGVyaWFs
LmJsZW5kRXF1YXRpb25BbHBoYSwgbWF0ZXJpYWwuYmxlbmRTcmNBbHBoYSwgbWF0ZXJpYWwuYmxl
bmREc3RBbHBoYSwgbWF0ZXJpYWwucHJlbXVsdGlwbGllZEFscGhhICk7CisgICAgICAgICAgICAg
ICAgc3RhdGUuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCBtYXRlcmlhbC5kZXB0aFRlc3QgKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2soIG1hdGVyaWFsLmRlcHRo
V3JpdGUgKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJzLmNvbG9yLnNldE1hc2soIG1h
dGVyaWFsLmNvbG9yV3JpdGUgKTsKKworICAgICAgICAgICAgICAgIHRleHR1cmVzLnNldFRleHR1
cmUyRCggbWF0ZXJpYWwubWFwIHx8IHRleHR1cmUsIDAgKTsKKworICAgICAgICAgICAgICAgIGds
LmRyYXdFbGVtZW50cyggZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9TSE9SVCwgMCApOwor
CisgICAgICAgICAgICAgICAgc3ByaXRlLm9uQWZ0ZXJSZW5kZXIoIHJlbmRlcmVyLCBzY2VuZSwg
Y2FtZXJhLCB1bmRlZmluZWQsIG1hdGVyaWFsLCB1bmRlZmluZWQgKTsKKworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyByZXN0b3JlIGdsCisKKyAgICAgICAgICAgIHN0YXRlLmVuYWJs
ZSggZ2wuQ1VMTF9GQUNFICk7CisKKyAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7CisKKyAgICAg
ICAgfTsKKworICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKCkgeworCisgICAgICAgICAg
ICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKworICAgICAgICAgICAgdmFyIHZl
cnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlciggZ2wuVkVSVEVYX1NIQURFUiApOworICAgICAg
ICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKCBnbC5GUkFHTUVOVF9T
SEFERVIgKTsKKworICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKCB2ZXJ0ZXhTaGFkZXIsIFsK
KworICAgICAgICAgICAgICAgICdwcmVjaXNpb24gJyArIGNhcGFiaWxpdGllcy5wcmVjaXNpb24g
KyAnIGZsb2F0OycsCisKKyAgICAgICAgICAgICAgICAnI2RlZmluZSBTSEFERVJfTkFNRSAnICsg
J1Nwcml0ZU1hdGVyaWFsJywKKworICAgICAgICAgICAgICAgICd1bmlmb3JtIG1hdDQgbW9kZWxW
aWV3TWF0cml4OycsCisgICAgICAgICAgICAgICAgJ3VuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0
cml4OycsCisgICAgICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgcm90YXRpb247JywKKyAgICAg
ICAgICAgICAgICAndW5pZm9ybSB2ZWMyIGNlbnRlcjsnLAorICAgICAgICAgICAgICAgICd1bmlm
b3JtIHZlYzIgc2NhbGU7JywKKyAgICAgICAgICAgICAgICAndW5pZm9ybSB2ZWMyIHV2T2Zmc2V0
OycsCisgICAgICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMiB1dlNjYWxlOycsCisKKyAgICAgICAg
ICAgICAgICAnYXR0cmlidXRlIHZlYzIgcG9zaXRpb247JywKKyAgICAgICAgICAgICAgICAnYXR0
cmlidXRlIHZlYzIgdXY7JywKKworICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlVWOycs
CisgICAgICAgICAgICAgICAgJ3ZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7JywKKworICAgICAgICAg
ICAgICAgICd2b2lkIG1haW4oKSB7JywKKworICAgICAgICAgICAgICAgICcgICB2VVYgPSB1dk9m
ZnNldCArIHV2ICogdXZTY2FsZTsnLAorCisgICAgICAgICAgICAgICAgJyAgIHZlYzIgYWxpZ25l
ZFBvc2l0aW9uID0gKCBwb3NpdGlvbiAtIGNlbnRlciApICogc2NhbGU7JywKKworICAgICAgICAg
ICAgICAgICcgICB2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsnLAorICAgICAgICAgICAgICAgICcgICBy
b3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0g
c2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7JywKKyAgICAgICAgICAgICAgICAn
ICAgcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24u
eCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OycsCisKKyAgICAgICAgICAg
ICAgICAnICAgdmVjNCBtdlBvc2l0aW9uOycsCisKKyAgICAgICAgICAgICAgICAnICAgbXZQb3Np
dGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOycsCisg
ICAgICAgICAgICAgICAgJyAgIG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOycsCisK
KyAgICAgICAgICAgICAgICAnICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQ
b3NpdGlvbjsnLAorCisgICAgICAgICAgICAgICAgJyAgIGZvZ0RlcHRoID0gLSBtdlBvc2l0aW9u
Lno7JywKKworICAgICAgICAgICAgICAgICd9JworCisgICAgICAgICAgICBdLmpvaW4oICdcbicg
KSApOworCisgICAgICAgICAgICBnbC5zaGFkZXJTb3VyY2UoIGZyYWdtZW50U2hhZGVyLCBbCisK
KyAgICAgICAgICAgICAgICAncHJlY2lzaW9uICcgKyBjYXBhYmlsaXRpZXMucHJlY2lzaW9uICsg
JyBmbG9hdDsnLAorCisgICAgICAgICAgICAgICAgJyNkZWZpbmUgU0hBREVSX05BTUUgJyArICdT
cHJpdGVNYXRlcmlhbCcsCisKKyAgICAgICAgICAgICAgICAndW5pZm9ybSB2ZWMzIGNvbG9yOycs
CisgICAgICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIG1hcDsnLAorICAgICAgICAgICAg
ICAgICd1bmlmb3JtIGZsb2F0IG9wYWNpdHk7JywKKworICAgICAgICAgICAgICAgICd1bmlmb3Jt
IGludCBmb2dUeXBlOycsCisgICAgICAgICAgICAgICAgJ3VuaWZvcm0gdmVjMyBmb2dDb2xvcjsn
LAorICAgICAgICAgICAgICAgICd1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7JywKKyAgICAgICAg
ICAgICAgICAndW5pZm9ybSBmbG9hdCBmb2dOZWFyOycsCisgICAgICAgICAgICAgICAgJ3VuaWZv
cm0gZmxvYXQgZm9nRmFyOycsCisgICAgICAgICAgICAgICAgJ3VuaWZvcm0gZmxvYXQgYWxwaGFU
ZXN0OycsCisKKyAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZVVjsnLAorICAgICAgICAg
ICAgICAgICd2YXJ5aW5nIGZsb2F0IGZvZ0RlcHRoOycsCisKKyAgICAgICAgICAgICAgICAndm9p
ZCBtYWluKCkgeycsCisKKyAgICAgICAgICAgICAgICAnICAgdmVjNCB0ZXh0dXJlID0gdGV4dHVy
ZTJEKCBtYXAsIHZVViApOycsCisKKyAgICAgICAgICAgICAgICAnICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNCggY29sb3IgKiB0ZXh0dXJlLnh5eiwgdGV4dHVyZS5hICogb3BhY2l0eSApOycsCisKKyAg
ICAgICAgICAgICAgICAnICAgaWYgKCBnbF9GcmFnQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2Nh
cmQ7JywKKworICAgICAgICAgICAgICAgICcgICBpZiAoIGZvZ1R5cGUgPiAwICkgeycsCisKKyAg
ICAgICAgICAgICAgICAnICAgICAgIGZsb2F0IGZvZ0ZhY3RvciA9IDAuMDsnLAorCisgICAgICAg
ICAgICAgICAgJyAgICAgICBpZiAoIGZvZ1R5cGUgPT0gMSApIHsnLAorCisgICAgICAgICAgICAg
ICAgJyAgICAgICAgICAgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCBm
b2dEZXB0aCApOycsCisKKyAgICAgICAgICAgICAgICAnICAgICAgIH0gZWxzZSB7JywKKworICAg
ICAgICAgICAgICAgICcgICAgICAgICAgIGNvbnN0IGZsb2F0IExPRzIgPSAxLjQ0MjY5NTsnLAor
ICAgICAgICAgICAgICAgICcgICAgICAgICAgIGZvZ0ZhY3RvciA9IGV4cDIoIC0gZm9nRGVuc2l0
eSAqIGZvZ0RlbnNpdHkgKiBmb2dEZXB0aCAqIGZvZ0RlcHRoICogTE9HMiApOycsCisgICAgICAg
ICAgICAgICAgJyAgICAgICAgICAgZm9nRmFjdG9yID0gMS4wIC0gY2xhbXAoIGZvZ0ZhY3Rvciwg
MC4wLCAxLjAgKTsnLAorCisgICAgICAgICAgICAgICAgJyAgICAgICB9JywKKworICAgICAgICAg
ICAgICAgICcgICAgICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwg
Zm9nQ29sb3IsIGZvZ0ZhY3RvciApOycsCisKKyAgICAgICAgICAgICAgICAnICAgfScsCisKKyAg
ICAgICAgICAgICAgICAnfScKKworICAgICAgICAgICAgXS5qb2luKCAnXG4nICkgKTsKKworICAg
ICAgICAgICAgZ2wuY29tcGlsZVNoYWRlciggdmVydGV4U2hhZGVyICk7CisgICAgICAgICAgICBn
bC5jb21waWxlU2hhZGVyKCBmcmFnbWVudFNoYWRlciApOworCisgICAgICAgICAgICBnbC5hdHRh
Y2hTaGFkZXIoIHByb2dyYW0sIHZlcnRleFNoYWRlciApOworICAgICAgICAgICAgZ2wuYXR0YWNo
U2hhZGVyKCBwcm9ncmFtLCBmcmFnbWVudFNoYWRlciApOworCisgICAgICAgICAgICBnbC5saW5r
UHJvZ3JhbSggcHJvZ3JhbSApOworCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFpbnRlclNvcnRTdGFibGUoIGEsIGIgKSB7CisK
KyAgICAgICAgICAgIGlmICggYS5yZW5kZXJPcmRlciAhPT0gYi5yZW5kZXJPcmRlciApIHsKKwor
ICAgICAgICAgICAgICAgIHJldHVybiBhLnJlbmRlck9yZGVyIC0gYi5yZW5kZXJPcmRlcjsKKwor
ICAgICAgICAgICAgfSBlbHNlIGlmICggYS56ICE9PSBiLnogKSB7CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYi56IC0gYS56OworCisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGIuaWQgLSBhLmlkOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQor
CisgICAgfQorCisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29i
LmNvbS8KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIFdlYkdMU3RhdGUoIGdsLCBleHRlbnNpb25z
LCB1dGlscyApIHsKKworICAgICAgICBmdW5jdGlvbiBDb2xvckJ1ZmZlcigpIHsKKworICAgICAg
ICAgICAgdmFyIGxvY2tlZCA9IGZhbHNlOworCisgICAgICAgICAgICB2YXIgY29sb3IgPSBuZXcg
VmVjdG9yNCgpOworICAgICAgICAgICAgdmFyIGN1cnJlbnRDb2xvck1hc2sgPSBudWxsOworICAg
ICAgICAgICAgdmFyIGN1cnJlbnRDb2xvckNsZWFyID0gbmV3IFZlY3RvcjQoIDAsIDAsIDAsIDAg
KTsKKworICAgICAgICAgICAgcmV0dXJuIHsKKworICAgICAgICAgICAgICAgIHNldE1hc2s6IGZ1
bmN0aW9uICggY29sb3JNYXNrICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVu
dENvbG9yTWFzayAhPT0gY29sb3JNYXNrICYmICEgbG9ja2VkICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICBnbC5jb2xvck1hc2soIGNvbG9yTWFzaywgY29sb3JNYXNrLCBjb2xvck1hc2ss
IGNvbG9yTWFzayApOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbG9yTWFzayA9
IGNvbG9yTWFzazsKKworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgc2V0TG9ja2VkOiBmdW5jdGlvbiAoIGxvY2sgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgbG9ja2VkID0gbG9jazsKKworICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICBzZXRDbGVhcjogZnVuY3Rpb24gKCByLCBnLCBiLCBhLCBwcmVtdWx0
aXBsaWVkQWxwaGEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwcmVtdWx0aXBsaWVk
QWxwaGEgPT09IHRydWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgKj0gYTsgZyAq
PSBhOyBiICo9IGE7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGNvbG9yLnNldCggciwgZywgYiwgYSApOworCisgICAgICAgICAgICAgICAgICAgIGlmICgg
Y3VycmVudENvbG9yQ2xlYXIuZXF1YWxzKCBjb2xvciApID09PSBmYWxzZSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2wuY2xlYXJDb2xvciggciwgZywgYiwgYSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudENvbG9yQ2xlYXIuY29weSggY29sb3IgKTsKKworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAg
cmVzZXQ6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgICAgICAgICBsb2NrZWQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29sb3JNYXNrID0gbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudENvbG9yQ2xlYXIuc2V0KCAtIDEsIDAsIDAsIDAgKTsgLy8g
c2V0IHRvIGludmFsaWQgc3RhdGUKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
fTsKKworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gRGVwdGhCdWZmZXIoKSB7CisKKyAg
ICAgICAgICAgIHZhciBsb2NrZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgdmFyIGN1cnJlbnRE
ZXB0aE1hc2sgPSBudWxsOworICAgICAgICAgICAgdmFyIGN1cnJlbnREZXB0aEZ1bmMgPSBudWxs
OworICAgICAgICAgICAgdmFyIGN1cnJlbnREZXB0aENsZWFyID0gbnVsbDsKKworICAgICAgICAg
ICAgcmV0dXJuIHsKKworICAgICAgICAgICAgICAgIHNldFRlc3Q6IGZ1bmN0aW9uICggZGVwdGhU
ZXN0ICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggZGVwdGhUZXN0ICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmFibGUoIGdsLkRFUFRIX1RFU1QgKTsKKworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlKCBn
bC5ERVBUSF9URVNUICk7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgICAgIHNldE1hc2s6IGZ1bmN0aW9uICggZGVwdGhNYXNrICkg
eworCisgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudERlcHRoTWFzayAhPT0gZGVwdGhN
YXNrICYmICEgbG9ja2VkICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBnbC5kZXB0aE1h
c2soIGRlcHRoTWFzayApOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERlcHRoTWFz
ayA9IGRlcHRoTWFzazsKKworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICB9LAogCiAgICAgICAgICAgICAgICAgc2V0RnVuYzogZnVuY3Rpb24gKCBkZXB0aEZ1bmMgKSB7
CiAKQEAgLTE5MTI3LDYgKzE5NDg0LDggQEAKIAogICAgICAgICB2YXIgY29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzID0gbnVsbDsKIAorICAgICAgICB2YXIgY3VycmVudFByb2dyYW0gPSBudWxsOwor
CiAgICAgICAgIHZhciBjdXJyZW50QmxlbmRpbmcgPSBudWxsOwogICAgICAgICB2YXIgY3VycmVu
dEJsZW5kRXF1YXRpb24gPSBudWxsOwogICAgICAgICB2YXIgY3VycmVudEJsZW5kU3JjID0gbnVs
bDsKQEAgLTE5MTQ0LDEyICsxOTUwMywyMyBAQAogICAgICAgICB2YXIgY3VycmVudFBvbHlnb25P
ZmZzZXRGYWN0b3IgPSBudWxsOwogICAgICAgICB2YXIgY3VycmVudFBvbHlnb25PZmZzZXRVbml0
cyA9IG51bGw7CiAKLSAgICAgICAgdmFyIGN1cnJlbnRTY2lzc29yVGVzdCA9IG51bGw7Ci0KICAg
ICAgICAgdmFyIG1heFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUyApOwogCi0gICAgICAgIHZhciB2ZXJzaW9uID0gcGFyc2VGbG9h
dCggL15XZWJHTFwgKFswLTldKS8uZXhlYyggZ2wuZ2V0UGFyYW1ldGVyKCBnbC5WRVJTSU9OICkg
KVsgMSBdICk7Ci0gICAgICAgIHZhciBsaW5lV2lkdGhBdmFpbGFibGUgPSBwYXJzZUZsb2F0KCB2
ZXJzaW9uICkgPj0gMS4wOworICAgICAgICB2YXIgbGluZVdpZHRoQXZhaWxhYmxlID0gZmFsc2U7
CisgICAgICAgIHZhciB2ZXJzaW9uID0gMDsKKyAgICAgICAgdmFyIGdsVmVyc2lvbiA9IGdsLmdl
dFBhcmFtZXRlciggZ2wuVkVSU0lPTiApOworCisgICAgICAgIGlmICggZ2xWZXJzaW9uLmluZGV4
T2YoICdXZWJHTCcgKSAhPT0gLSAxICkgeworCisgICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VG
bG9hdCggL15XZWJHTFwgKFswLTldKS8uZXhlYyggZ2xWZXJzaW9uIClbIDEgXSApOworICAgICAg
ICAgICAgbGluZVdpZHRoQXZhaWxhYmxlID0gKCB2ZXJzaW9uID49IDEuMCApOworCisgICAgICAg
IH0gZWxzZSBpZiAoIGdsVmVyc2lvbi5pbmRleE9mKCAnT3BlbkdMIEVTJyApICE9PSAtIDEgKSB7
CisKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZUZsb2F0KCAvXk9wZW5HTFwgRVNcIChbMC05
XSkvLmV4ZWMoIGdsVmVyc2lvbiApWyAxIF0gKTsKKyAgICAgICAgICAgIGxpbmVXaWR0aEF2YWls
YWJsZSA9ICggdmVyc2lvbiA+PSAyLjAgKTsKKworICAgICAgICB9CiAKICAgICAgICAgdmFyIGN1
cnJlbnRUZXh0dXJlU2xvdCA9IG51bGw7CiAgICAgICAgIHZhciBjdXJyZW50Qm91bmRUZXh0dXJl
cyA9IHt9OwpAQCAtMTkxODAsMjUgKzE5NTUwLDIzIEBACiAgICAgICAgIGVtcHR5VGV4dHVyZXNb
IGdsLlRFWFRVUkVfMkQgXSA9IGNyZWF0ZVRleHR1cmUoIGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRV
UkVfMkQsIDEgKTsKICAgICAgICAgZW1wdHlUZXh0dXJlc1sgZ2wuVEVYVFVSRV9DVUJFX01BUCBd
ID0gY3JlYXRlVGV4dHVyZSggZ2wuVEVYVFVSRV9DVUJFX01BUCwgZ2wuVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCA2ICk7CiAKLSAgICAgICAgLy8KLQotICAgICAgICBmdW5jdGlvbiBpbml0
KCkgeworICAgICAgICAvLyBpbml0CiAKLSAgICAgICAgICAgIGNvbG9yQnVmZmVyLnNldENsZWFy
KCAwLCAwLCAwLCAxICk7Ci0gICAgICAgICAgICBkZXB0aEJ1ZmZlci5zZXRDbGVhciggMSApOwot
ICAgICAgICAgICAgc3RlbmNpbEJ1ZmZlci5zZXRDbGVhciggMCApOworICAgICAgICBjb2xvckJ1
ZmZlci5zZXRDbGVhciggMCwgMCwgMCwgMSApOworICAgICAgICBkZXB0aEJ1ZmZlci5zZXRDbGVh
ciggMSApOworICAgICAgICBzdGVuY2lsQnVmZmVyLnNldENsZWFyKCAwICk7CiAKLSAgICAgICAg
ICAgIGVuYWJsZSggZ2wuREVQVEhfVEVTVCApOwotICAgICAgICAgICAgZGVwdGhCdWZmZXIuc2V0
RnVuYyggTGVzc0VxdWFsRGVwdGggKTsKKyAgICAgICAgZW5hYmxlKCBnbC5ERVBUSF9URVNUICk7
CisgICAgICAgIGRlcHRoQnVmZmVyLnNldEZ1bmMoIExlc3NFcXVhbERlcHRoICk7CiAKLSAgICAg
ICAgICAgIHNldEZsaXBTaWRlZCggZmFsc2UgKTsKLSAgICAgICAgICAgIHNldEN1bGxGYWNlKCBD
dWxsRmFjZUJhY2sgKTsKLSAgICAgICAgICAgIGVuYWJsZSggZ2wuQ1VMTF9GQUNFICk7CisgICAg
ICAgIHNldEZsaXBTaWRlZCggZmFsc2UgKTsKKyAgICAgICAgc2V0Q3VsbEZhY2UoIEN1bGxGYWNl
QmFjayApOworICAgICAgICBlbmFibGUoIGdsLkNVTExfRkFDRSApOwogCi0gICAgICAgICAgICBl
bmFibGUoIGdsLkJMRU5EICk7Ci0gICAgICAgICAgICBzZXRCbGVuZGluZyggTm9ybWFsQmxlbmRp
bmcgKTsKKyAgICAgICAgZW5hYmxlKCBnbC5CTEVORCApOworICAgICAgICBzZXRCbGVuZGluZygg
Tm9ybWFsQmxlbmRpbmcgKTsKIAotICAgICAgICB9CisgICAgICAgIC8vCiAKICAgICAgICAgZnVu
Y3Rpb24gaW5pdEF0dHJpYnV0ZXMoKSB7CiAKQEAgLTE5MjEyLDYgKzE5NTgwLDEyIEBACiAKICAg
ICAgICAgZnVuY3Rpb24gZW5hYmxlQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSB7CiAKKyAgICAgICAg
ICAgIGVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoIGF0dHJpYnV0ZSwgMCApOworCisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKCBhdHRyaWJ1
dGUsIG1lc2hQZXJBdHRyaWJ1dGUgKSB7CisKICAgICAgICAgICAgIG5ld0F0dHJpYnV0ZXNbIGF0
dHJpYnV0ZSBdID0gMTsKIAogICAgICAgICAgICAgaWYgKCBlbmFibGVkQXR0cmlidXRlc1sgYXR0
cmlidXRlIF0gPT09IDAgKSB7CkBAIC0xOTIyMSw0MCArMTk1OTUsMTggQEAKIAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIGF0dHJpYnV0ZURpdmlzb3JzWyBhdHRyaWJ1dGUgXSAh
PT0gMCApIHsKKyAgICAgICAgICAgIGlmICggYXR0cmlidXRlRGl2aXNvcnNbIGF0dHJpYnV0ZSBd
ICE9PSBtZXNoUGVyQXR0cmlidXRlICkgewogCiAgICAgICAgICAgICAgICAgdmFyIGV4dGVuc2lv
biA9IGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKTsKIAotICAgICAg
ICAgICAgICAgIGV4dGVuc2lvbi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIGF0dHJpYnV0ZSwg
MCApOwotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURpdmlzb3JzWyBhdHRyaWJ1dGUgXSA9IDA7
CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSggYXR0
cmlidXRlLCBtZXNoUGVyQXR0cmlidXRlICk7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlRGl2
aXNvcnNbIGF0dHJpYnV0ZSBdID0gbWVzaFBlckF0dHJpYnV0ZTsKIAogICAgICAgICAgICAgfQog
CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29y
KCBhdHRyaWJ1dGUsIG1lc2hQZXJBdHRyaWJ1dGUgKSB7Ci0KLSAgICAgICAgICAgIG5ld0F0dHJp
YnV0ZXNbIGF0dHJpYnV0ZSBdID0gMTsKLQotICAgICAgICAgICAgaWYgKCBlbmFibGVkQXR0cmli
dXRlc1sgYXR0cmlidXRlIF0gPT09IDAgKSB7Ci0KLSAgICAgICAgICAgICAgICBnbC5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSggYXR0cmlidXRlICk7Ci0gICAgICAgICAgICAgICAgZW5hYmxlZEF0
dHJpYnV0ZXNbIGF0dHJpYnV0ZSBdID0gMTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIGF0dHJpYnV0ZURpdmlzb3JzWyBhdHRyaWJ1dGUgXSAhPT0gbWVzaFBlckF0dHJpYnV0
ZSApIHsKLQotICAgICAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgg
J0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7Ci0KLSAgICAgICAgICAgICAgICBleHRlbnNpb24u
dmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCBhdHRyaWJ1dGUsIG1lc2hQZXJBdHRyaWJ1dGUgKTsK
LSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEaXZpc29yc1sgYXR0cmlidXRlIF0gPSBtZXNoUGVy
QXR0cmlidXRlOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCkgeworICAgICAgICBmdW5jdGlvbiBkaXNhYmxl
VW51c2VkQXR0cmlidXRlcygpIHsKIAogICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
ZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpICE9PSBsOyArKyBpICkgewogCkBAIC0xOTI5OSw3
ICsxOTY1MSw4IEBACiAKICAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbnMuZ2V0KCAnV0VC
R0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApIHx8CiAgICAgICAgICAgICAgICAgICAgICBl
eHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9ldGMxJyApICkgeworICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5nZXQoICdXRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMScgKSB8fAorICAgICAgICAgICAgICAgICAgICAgZXh0
ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YycgKSApIHsKIAogICAg
ICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0cyA9IGdsLmdldFBhcmFtZXRlciggZ2wuQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgKTsKIApAQCAtMTkzMTcsNiArMTk2NzAsMjIgQEAKIAogICAg
ICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gdXNlUHJvZ3JhbSggcHJvZ3JhbSApIHsKKworICAg
ICAgICAgICAgaWYgKCBjdXJyZW50UHJvZ3JhbSAhPT0gcHJvZ3JhbSApIHsKKworICAgICAgICAg
ICAgICAgIGdsLnVzZVByb2dyYW0oIHByb2dyYW0gKTsKKworICAgICAgICAgICAgICAgIGN1cnJl
bnRQcm9ncmFtID0gcHJvZ3JhbTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB9CisK
ICAgICAgICAgZnVuY3Rpb24gc2V0QmxlbmRpbmcoIGJsZW5kaW5nLCBibGVuZEVxdWF0aW9uLCBi
bGVuZFNyYywgYmxlbmREc3QsIGJsZW5kRXF1YXRpb25BbHBoYSwgYmxlbmRTcmNBbHBoYSwgYmxl
bmREc3RBbHBoYSwgcHJlbXVsdGlwbGllZEFscGhhICkgewogCiAgICAgICAgICAgICBpZiAoIGJs
ZW5kaW5nICE9PSBOb0JsZW5kaW5nICkgewpAQCAtMTkzMjksNzIgKzE5Njk4LDgzIEBACiAKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCAoIGJsZW5kaW5nICE9PSBDdXN0b21CbGVu
ZGluZyApICYmICggYmxlbmRpbmcgIT09IGN1cnJlbnRCbGVuZGluZyB8fCBwcmVtdWx0aXBsaWVk
QWxwaGEgIT09IGN1cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSApICkgeworICAgICAgICAgICAgaWYg
KCBibGVuZGluZyAhPT0gQ3VzdG9tQmxlbmRpbmcgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IGJsZW5kaW5nID09PSBBZGRpdGl2ZUJsZW5kaW5nICkgeworICAgICAgICAgICAgICAgIGlmICgg
YmxlbmRpbmcgIT09IGN1cnJlbnRCbGVuZGluZyB8fCBwcmVtdWx0aXBsaWVkQWxwaGEgIT09IGN1
cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSApIHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHBy
ZW11bHRpcGxpZWRBbHBoYSApIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggYmxlbmRp
bmcgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0
ZSggZ2wuRlVOQ19BREQsIGdsLkZVTkNfQUREICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
bC5ibGVuZEZ1bmNTZXBhcmF0ZSggZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSwgZ2wuT05FICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFkZGl0aXZlQmxlbmRpbmc6CiAKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBy
ZW11bHRpcGxpZWRBbHBoYSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRF
cXVhdGlvbiggZ2wuRlVOQ19BREQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5k
RnVuYyggZ2wuU1JDX0FMUEhBLCBnbC5PTkUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCBnbC5GVU5DX0FERCwgZ2wuRlVOQ19BREQg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUo
IGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSApOwogCi0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggYmxlbmRpbmcgPT09IFN1YnRyYWN0aXZlQmxlbmRpbmcgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb24oIGdsLkZVTkNfQURE
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRnVuYyggZ2wuU1JD
X0FMUEhBLCBnbC5PTkUgKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHByZW11bHRpcGxp
ZWRBbHBoYSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5k
RXF1YXRpb25TZXBhcmF0ZSggZ2wuRlVOQ19BREQsIGdsLkZVTkNfQUREICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggZ2wuWkVSTywgZ2wuWkVSTywgZ2wu
T05FX01JTlVTX1NSQ19DT0xPUiwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBTdWJ0cmFjdGl2ZUJsZW5kaW5nOgogCi0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcmVtdWx0
aXBsaWVkQWxwaGEgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRp
b24oIGdsLkZVTkNfQUREICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMo
IGdsLlpFUk8sIGdsLk9ORV9NSU5VU19TUkNfQ09MT1IgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCBnbC5GVU5DX0FERCwgZ2wuRlVO
Q19BREQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2Vw
YXJhdGUoIGdsLlpFUk8sIGdsLlpFUk8sIGdsLk9ORV9NSU5VU19TUkNfQ09MT1IsIGdsLk9ORV9N
SU5VU19TUkNfQUxQSEEgKTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGJs
ZW5kaW5nID09PSBNdWx0aXBseUJsZW5kaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKCBnbC5GVU5DX0FERCApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoIGdsLlpFUk8sIGdsLk9ORV9NSU5VU19TUkNf
Q09MT1IgKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHByZW11bHRpcGxpZWRBbHBoYSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb25T
ZXBhcmF0ZSggZ2wuRlVOQ19BREQsIGdsLkZVTkNfQUREICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggZ2wuWkVSTywgZ2wuU1JDX0NPTE9SLCBnbC5aRVJP
LCBnbC5TUkNfQUxQSEEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlwbHlC
bGVuZGluZzoKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcHJlbXVsdGlwbGllZEFscGhhICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKCBnbC5GVU5DX0FERCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZ2wuYmxlbmRGdW5jKCBnbC5aRVJPLCBnbC5TUkNfQ09MT1IgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCBnbC5G
VU5DX0FERCwgZ2wuRlVOQ19BREQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2wuYmxlbmRGdW5jU2VwYXJhdGUoIGdsLlpFUk8sIGdsLlNSQ19DT0xPUiwgZ2wuWkVSTywgZ2wu
U1JDX0FMUEhBICk7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKCBnbC5GVU5DX0FERCApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoIGdsLlpFUk8sIGds
LlNSQ19DT0xPUiApOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggcHJlbXVsdGlwbGllZEFs
cGhhICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVh
dGlvblNlcGFyYXRlKCBnbC5GVU5DX0FERCwgZ2wuRlVOQ19BREQgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKCBnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNf
QUxQSEEsIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJlbXVsdGlwbGllZEFscGhhICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZSggZ2wu
RlVOQ19BREQsIGdsLkZVTkNfQUREICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsLmJsZW5kRnVuY1NlcGFyYXRlKCBnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGds
Lk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSApOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVu
ZEVxdWF0aW9uU2VwYXJhdGUoIGdsLkZVTkNfQURELCBnbC5GVU5DX0FERCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggZ2wuU1JDX0FMUEhB
LCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBnbC5PTkUsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEg
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCBn
bC5GVU5DX0FERCwgZ2wuRlVOQ19BREQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJs
ZW5kRnVuY1NlcGFyYXRlKCBnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGds
Lk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBjdXJyZW50QmxlbmRpbmcgPSBibGVuZGluZzsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50UHJlbXVsdGlwbGVkQWxwaGEgPSBwcmVtdWx0aXBsaWVkQWxwaGE7Ci0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50QmxlbmRFcXVhdGlvbiA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgY3VycmVudEJsZW5kU3JjID0gbnVsbDsKKyAgICAgICAgICAgICAgICBj
dXJyZW50QmxlbmREc3QgPSBudWxsOworICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZEVxdWF0
aW9uQWxwaGEgPSBudWxsOworICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZFNyY0FscGhhID0g
bnVsbDsKKyAgICAgICAgICAgICAgICBjdXJyZW50QmxlbmREc3RBbHBoYSA9IG51bGw7CiAKLSAg
ICAgICAgICAgIGlmICggYmxlbmRpbmcgPT09IEN1c3RvbUJsZW5kaW5nICkgeworICAgICAgICAg
ICAgfSBlbHNlIHsKIAogICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25BbHBoYSA9IGJsZW5k
RXF1YXRpb25BbHBoYSB8fCBibGVuZEVxdWF0aW9uOwogICAgICAgICAgICAgICAgIGJsZW5kU3Jj
QWxwaGEgPSBibGVuZFNyY0FscGhhIHx8IGJsZW5kU3JjOwpAQCAtMTk0MDIsNyArMTk3ODIsNyBA
QAogCiAgICAgICAgICAgICAgICAgaWYgKCBibGVuZEVxdWF0aW9uICE9PSBjdXJyZW50QmxlbmRF
cXVhdGlvbiB8fCBibGVuZEVxdWF0aW9uQWxwaGEgIT09IGN1cnJlbnRCbGVuZEVxdWF0aW9uQWxw
aGEgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKCBw
YXJhbVRocmVlVG9HTCggYmxlbmRFcXVhdGlvbiApLCBwYXJhbVRocmVlVG9HTCggYmxlbmRFcXVh
dGlvbkFscGhhICkgKTsKKyAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFy
YXRlKCB1dGlscy5jb252ZXJ0KCBibGVuZEVxdWF0aW9uICksIHV0aWxzLmNvbnZlcnQoIGJsZW5k
RXF1YXRpb25BbHBoYSApICk7CiAKICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJsZW5kRXF1
YXRpb24gPSBibGVuZEVxdWF0aW9uOwogICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmxlbmRF
cXVhdGlvbkFscGhhID0gYmxlbmRFcXVhdGlvbkFscGhhOwpAQCAtMTk0MTEsNyArMTk3OTEsNyBA
QAogCiAgICAgICAgICAgICAgICAgaWYgKCBibGVuZFNyYyAhPT0gY3VycmVudEJsZW5kU3JjIHx8
IGJsZW5kRHN0ICE9PSBjdXJyZW50QmxlbmREc3QgfHwgYmxlbmRTcmNBbHBoYSAhPT0gY3VycmVu
dEJsZW5kU3JjQWxwaGEgfHwgYmxlbmREc3RBbHBoYSAhPT0gY3VycmVudEJsZW5kRHN0QWxwaGEg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUoIHBhcmFtVGhy
ZWVUb0dMKCBibGVuZFNyYyApLCBwYXJhbVRocmVlVG9HTCggYmxlbmREc3QgKSwgcGFyYW1UaHJl
ZVRvR0woIGJsZW5kU3JjQWxwaGEgKSwgcGFyYW1UaHJlZVRvR0woIGJsZW5kRHN0QWxwaGEgKSAp
OworICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZSggdXRpbHMuY29udmVy
dCggYmxlbmRTcmMgKSwgdXRpbHMuY29udmVydCggYmxlbmREc3QgKSwgdXRpbHMuY29udmVydCgg
YmxlbmRTcmNBbHBoYSApLCB1dGlscy5jb252ZXJ0KCBibGVuZERzdEFscGhhICkgKTsKIAogICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50QmxlbmRTcmMgPSBibGVuZFNyYzsKICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudEJsZW5kRHN0ID0gYmxlbmREc3Q7CkBAIC0xOTQyMCwzMCArMTk4MDAs
MjcgQEAKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfSBlbHNlIHsKLQotICAg
ICAgICAgICAgICAgIGN1cnJlbnRCbGVuZEVxdWF0aW9uID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50QmxlbmRTcmMgPSBudWxsOwotICAgICAgICAgICAgICAgIGN1cnJlbnRCbGVuZERz
dCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgY3VycmVudEJsZW5kRXF1YXRpb25BbHBoYSA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgY3VycmVudEJsZW5kU3JjQWxwaGEgPSBudWxsOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnRCbGVuZERzdEFscGhhID0gbnVsbDsKLQogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBjdXJyZW50QmxlbmRpbmcgPSBibGVuZGluZzsKKyAgICAgICAgICAgIGN1
cnJlbnRQcmVtdWx0aXBsZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTsKKwogICAgICAgICB9
CiAKLSAgICAgICAgZnVuY3Rpb24gc2V0TWF0ZXJpYWwoIG1hdGVyaWFsICkgeworICAgICAgICBm
dW5jdGlvbiBzZXRNYXRlcmlhbCggbWF0ZXJpYWwsIGZyb250RmFjZUNXICkgewogCiAgICAgICAg
ICAgICBtYXRlcmlhbC5zaWRlID09PSBEb3VibGVTaWRlCiAgICAgICAgICAgICAgICAgPyBkaXNh
YmxlKCBnbC5DVUxMX0ZBQ0UgKQogICAgICAgICAgICAgICAgIDogZW5hYmxlKCBnbC5DVUxMX0ZB
Q0UgKTsKIAotICAgICAgICAgICAgc2V0RmxpcFNpZGVkKCBtYXRlcmlhbC5zaWRlID09PSBCYWNr
U2lkZSApOworICAgICAgICAgICAgdmFyIGZsaXBTaWRlZCA9ICggbWF0ZXJpYWwuc2lkZSA9PT0g
QmFja1NpZGUgKTsKKyAgICAgICAgICAgIGlmICggZnJvbnRGYWNlQ1cgKSBmbGlwU2lkZWQgPSAh
IGZsaXBTaWRlZDsKIAotICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IHRydWUK
LSAgICAgICAgICAgICAgICA/IHNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGluZywgbWF0ZXJp
YWwuYmxlbmRFcXVhdGlvbiwgbWF0ZXJpYWwuYmxlbmRTcmMsIG1hdGVyaWFsLmJsZW5kRHN0LCBt
YXRlcmlhbC5ibGVuZEVxdWF0aW9uQWxwaGEsIG1hdGVyaWFsLmJsZW5kU3JjQWxwaGEsIG1hdGVy
aWFsLmJsZW5kRHN0QWxwaGEsIG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSApCi0gICAgICAg
ICAgICAgICAgOiBzZXRCbGVuZGluZyggTm9CbGVuZGluZyApOworICAgICAgICAgICAgc2V0Rmxp
cFNpZGVkKCBmbGlwU2lkZWQgKTsKKworICAgICAgICAgICAgKCBtYXRlcmlhbC5ibGVuZGluZyA9
PT0gTm9ybWFsQmxlbmRpbmcgJiYgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPT09IGZhbHNlICkKKyAg
ICAgICAgICAgICAgICA/IHNldEJsZW5kaW5nKCBOb0JsZW5kaW5nICkKKyAgICAgICAgICAgICAg
ICA6IHNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGluZywgbWF0ZXJpYWwuYmxlbmRFcXVhdGlv
biwgbWF0ZXJpYWwuYmxlbmRTcmMsIG1hdGVyaWFsLmJsZW5kRHN0LCBtYXRlcmlhbC5ibGVuZEVx
dWF0aW9uQWxwaGEsIG1hdGVyaWFsLmJsZW5kU3JjQWxwaGEsIG1hdGVyaWFsLmJsZW5kRHN0QWxw
aGEsIG1hdGVyaWFsLnByZW11bHRpcGxpZWRBbHBoYSApOwogCiAgICAgICAgICAgICBkZXB0aEJ1
ZmZlci5zZXRGdW5jKCBtYXRlcmlhbC5kZXB0aEZ1bmMgKTsKICAgICAgICAgICAgIGRlcHRoQnVm
ZmVyLnNldFRlc3QoIG1hdGVyaWFsLmRlcHRoVGVzdCApOwpAQCAtMTk1NDUsMTYgKzE5OTIyLDgg
QEAKIAogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gZ2V0U2Npc3NvclRlc3QoKSB7Ci0K
LSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2Npc3NvclRlc3Q7Ci0KLSAgICAgICAgfQotCiAg
ICAgICAgIGZ1bmN0aW9uIHNldFNjaXNzb3JUZXN0KCBzY2lzc29yVGVzdCApIHsKIAotICAgICAg
ICAgICAgY3VycmVudFNjaXNzb3JUZXN0ID0gc2Npc3NvclRlc3Q7Ci0KICAgICAgICAgICAgIGlm
ICggc2Npc3NvclRlc3QgKSB7CiAKICAgICAgICAgICAgICAgICBlbmFibGUoIGdsLlNDSVNTT1Jf
VEVTVCApOwpAQCAtMTk2ODQsNiArMjAwNTMsOCBAQAogICAgICAgICAgICAgY3VycmVudFRleHR1
cmVTbG90ID0gbnVsbDsKICAgICAgICAgICAgIGN1cnJlbnRCb3VuZFRleHR1cmVzID0ge307CiAK
KyAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtID0gbnVsbDsKKwogICAgICAgICAgICAgY3VycmVu
dEJsZW5kaW5nID0gbnVsbDsKIAogICAgICAgICAgICAgY3VycmVudEZsaXBTaWRlZCA9IG51bGw7
CkBAIC0xOTcwMyw3ICsyMDA3NCw2IEBACiAgICAgICAgICAgICAgICAgc3RlbmNpbDogc3RlbmNp
bEJ1ZmZlcgogICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgaW5pdDogaW5pdCwKICAgICAg
ICAgICAgIGluaXRBdHRyaWJ1dGVzOiBpbml0QXR0cmlidXRlcywKICAgICAgICAgICAgIGVuYWJs
ZUF0dHJpYnV0ZTogZW5hYmxlQXR0cmlidXRlLAogICAgICAgICAgICAgZW5hYmxlQXR0cmlidXRl
QW5kRGl2aXNvcjogZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvciwKQEAgLTE5NzEyLDYgKzIwMDgy
LDggQEAKICAgICAgICAgICAgIGRpc2FibGU6IGRpc2FibGUsCiAgICAgICAgICAgICBnZXRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdHM6IGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywKIAorICAg
ICAgICAgICAgdXNlUHJvZ3JhbTogdXNlUHJvZ3JhbSwKKwogICAgICAgICAgICAgc2V0QmxlbmRp
bmc6IHNldEJsZW5kaW5nLAogICAgICAgICAgICAgc2V0TWF0ZXJpYWw6IHNldE1hdGVyaWFsLAog
CkBAIC0xOTcyMSw3ICsyMDA5Myw2IEBACiAgICAgICAgICAgICBzZXRMaW5lV2lkdGg6IHNldExp
bmVXaWR0aCwKICAgICAgICAgICAgIHNldFBvbHlnb25PZmZzZXQ6IHNldFBvbHlnb25PZmZzZXQs
CiAKLSAgICAgICAgICAgIGdldFNjaXNzb3JUZXN0OiBnZXRTY2lzc29yVGVzdCwKICAgICAgICAg
ICAgIHNldFNjaXNzb3JUZXN0OiBzZXRTY2lzc29yVGVzdCwKIAogICAgICAgICAgICAgYWN0aXZl
VGV4dHVyZTogYWN0aXZlVGV4dHVyZSwKQEAgLTE5NzQyLDQ1MzAgKzIwMTEzLDQ2MDMgQEAKICAg
ICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqLwogCi0gICAg
ZnVuY3Rpb24gV2ViR0xDYXBhYmlsaXRpZXMoIGdsLCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzICkg
ewotCi0gICAgICAgIHZhciBtYXhBbmlzb3Ryb3B5OwotCi0gICAgICAgIGZ1bmN0aW9uIGdldE1h
eEFuaXNvdHJvcHkoKSB7Ci0KLSAgICAgICAgICAgIGlmICggbWF4QW5pc290cm9weSAhPT0gdW5k
ZWZpbmVkICkgcmV0dXJuIG1heEFuaXNvdHJvcHk7Ci0KLSAgICAgICAgICAgIHZhciBleHRlbnNp
b24gPSBleHRlbnNpb25zLmdldCggJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycgKTsK
LQotICAgICAgICAgICAgaWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7Ci0KLSAgICAgICAgICAg
ICAgICBtYXhBbmlzb3Ryb3B5ID0gZ2wuZ2V0UGFyYW1ldGVyKCBleHRlbnNpb24uTUFYX1RFWFRV
UkVfTUFYX0FOSVNPVFJPUFlfRVhUICk7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAg
ICAgICAgICAgICBtYXhBbmlzb3Ryb3B5ID0gMDsKLQotICAgICAgICAgICAgfQorICAgIGZ1bmN0
aW9uIFdlYkdMVGV4dHVyZXMoIF9nbCwgZXh0ZW5zaW9ucywgc3RhdGUsIHByb3BlcnRpZXMsIGNh
cGFiaWxpdGllcywgdXRpbHMsIGluZm8gKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBtYXhBbmlz
b3Ryb3B5OworICAgICAgICB2YXIgX2lzV2ViR0wyID0gKCB0eXBlb2YgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCAhPT0gJ3VuZGVmaW5lZCcgJiYgX2dsIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCApOyAvKiBnbG9iYWwgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCAqLworICAgICAgICB2
YXIgX3ZpZGVvVGV4dHVyZXMgPSB7fTsKKyAgICAgICAgdmFyIF9jYW52YXM7CiAKLSAgICAgICAg
fQorICAgICAgICAvLwogCi0gICAgICAgIGZ1bmN0aW9uIGdldE1heFByZWNpc2lvbiggcHJlY2lz
aW9uICkgeworICAgICAgICBmdW5jdGlvbiBjbGFtcFRvTWF4U2l6ZSggaW1hZ2UsIG1heFNpemUg
KSB7CiAKLSAgICAgICAgICAgIGlmICggcHJlY2lzaW9uID09PSAnaGlnaHAnICkgeworICAgICAg
ICAgICAgaWYgKCBpbWFnZS53aWR0aCA+IG1heFNpemUgfHwgaW1hZ2UuaGVpZ2h0ID4gbWF4U2l6
ZSApIHsKIAotICAgICAgICAgICAgICAgIGlmICggZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
KCBnbC5WRVJURVhfU0hBREVSLCBnbC5ISUdIX0ZMT0FUICkucHJlY2lzaW9uID4gMCAmJgotICAg
ICAgICAgICAgICAgICAgICAgZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KCBnbC5GUkFHTUVO
VF9TSEFERVIsIGdsLkhJR0hfRkxPQVQgKS5wcmVjaXNpb24gPiAwICkgeworICAgICAgICAgICAg
ICAgIGlmICggJ2RhdGEnIGluIGltYWdlICkgewogCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAnaGlnaHAnOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJH
TFJlbmRlcmVyOiBpbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgnICsgaW1hZ2Uud2lk
dGggKyAneCcgKyBpbWFnZS5oZWlnaHQgKyAnKS4nICk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9
ICdtZWRpdW1wJzsKKyAgICAgICAgICAgICAgICAvLyBXYXJuaW5nOiBTY2FsaW5nIHRocm91Z2gg
dGhlIGNhbnZhcyB3aWxsIG9ubHkgd29yayB3aXRoIGltYWdlcyB0aGF0IHVzZQorICAgICAgICAg
ICAgICAgIC8vIHByZW11bHRpcGxpZWQgYWxwaGEuCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB2YXIgc2NhbGUgPSBtYXhTaXplIC8gTWF0aC5tYXgoIGltYWdlLndpZHRoLCBpbWFn
ZS5oZWlnaHQgKTsKIAotICAgICAgICAgICAgaWYgKCBwcmVjaXNpb24gPT09ICdtZWRpdW1wJyAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5T
KCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdjYW52YXMnICk7CisgICAgICAgICAg
ICAgICAgY2FudmFzLndpZHRoID0gTWF0aC5mbG9vciggaW1hZ2Uud2lkdGggKiBzY2FsZSApOwor
ICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBNYXRoLmZsb29yKCBpbWFnZS5oZWlnaHQg
KiBzY2FsZSApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBnbC5nZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQoIGdsLlZFUlRFWF9TSEFERVIsIGdsLk1FRElVTV9GTE9BVCApLnByZWNpc2lvbiA+IDAg
JiYKLSAgICAgICAgICAgICAgICAgICAgIGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCggZ2wu
RlJBR01FTlRfU0hBREVSLCBnbC5NRURJVU1fRkxPQVQgKS5wcmVjaXNpb24gPiAwICkgeworICAg
ICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRo
LCBpbWFnZS5oZWlnaHQsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCApOwogCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAnbWVkaXVtcCc7CisgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogaW1hZ2UgaXMgdG9vIGJpZyAoJyArIGlt
YWdlLndpZHRoICsgJ3gnICsgaW1hZ2UuaGVpZ2h0ICsgJykuIFJlc2l6ZWQgdG8gJyArIGNhbnZh
cy53aWR0aCArICd4JyArIGNhbnZhcy5oZWlnaHQsIGltYWdlICk7CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhczsKIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXR1cm4gJ2xvd3AnOworICAgICAgICAgICAgcmV0dXJuIGltYWdlOwogCiAg
ICAgICAgIH0KIAotICAgICAgICB2YXIgcHJlY2lzaW9uID0gcGFyYW1ldGVycy5wcmVjaXNpb24g
IT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlY2lzaW9uIDogJ2hpZ2hwJzsKLSAgICAgICAg
dmFyIG1heFByZWNpc2lvbiA9IGdldE1heFByZWNpc2lvbiggcHJlY2lzaW9uICk7Ci0KLSAgICAg
ICAgaWYgKCBtYXhQcmVjaXNpb24gIT09IHByZWNpc2lvbiApIHsKKyAgICAgICAgZnVuY3Rpb24g
aXNQb3dlck9mVHdvKCBpbWFnZSApIHsKIAotICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuV2ViR0xSZW5kZXJlcjonLCBwcmVjaXNpb24sICdub3Qgc3VwcG9ydGVkLCB1c2luZycsIG1h
eFByZWNpc2lvbiwgJ2luc3RlYWQuJyApOwotICAgICAgICAgICAgcHJlY2lzaW9uID0gbWF4UHJl
Y2lzaW9uOworICAgICAgICAgICAgcmV0dXJuIF9NYXRoLmlzUG93ZXJPZlR3byggaW1hZ2Uud2lk
dGggKSAmJiBfTWF0aC5pc1Bvd2VyT2ZUd28oIGltYWdlLmhlaWdodCApOwogCiAgICAgICAgIH0K
IAotICAgICAgICB2YXIgbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciA9IHBhcmFtZXRlcnMubG9nYXJp
dGhtaWNEZXB0aEJ1ZmZlciA9PT0gdHJ1ZSAmJiAhISBleHRlbnNpb25zLmdldCggJ0VYVF9mcmFn
X2RlcHRoJyApOworICAgICAgICBmdW5jdGlvbiBtYWtlUG93ZXJPZlR3byggaW1hZ2UgKSB7CiAK
LSAgICAgICAgdmFyIG1heFRleHR1cmVzID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhfVEVYVFVS
RV9JTUFHRV9VTklUUyApOwotICAgICAgICB2YXIgbWF4VmVydGV4VGV4dHVyZXMgPSBnbC5nZXRQ
YXJhbWV0ZXIoIGdsLk1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyApOwotICAgICAgICB2
YXIgbWF4VGV4dHVyZVNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLk1BWF9URVhUVVJFX1NJWkUg
KTsKLSAgICAgICAgdmFyIG1heEN1YmVtYXBTaXplID0gZ2wuZ2V0UGFyYW1ldGVyKCBnbC5NQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFICk7CisgICAgICAgICAgICBpZiAoIGltYWdlIGluc3RhbmNl
b2YgSFRNTEltYWdlRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50
IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXAgKSB7CiAKLSAgICAgICAgdmFyIG1heEF0
dHJpYnV0ZXMgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLk1BWF9WRVJURVhfQVRUUklCUyApOwotICAg
ICAgICB2YXIgbWF4VmVydGV4VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoIGdsLk1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTICk7Ci0gICAgICAgIHZhciBtYXhWYXJ5aW5ncyA9IGdsLmdldFBh
cmFtZXRlciggZ2wuTUFYX1ZBUllJTkdfVkVDVE9SUyApOwotICAgICAgICB2YXIgbWF4RnJhZ21l
bnRVbmlmb3JtcyA9IGdsLmdldFBhcmFtZXRlciggZ2wuTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUyApOworICAgICAgICAgICAgICAgIGlmICggX2NhbnZhcyA9PT0gdW5kZWZpbmVkICkgX2Nh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwnLCAnY2FudmFzJyApOwogCi0gICAgICAgIHZhciB2ZXJ0ZXhUZXh0dXJlcyA9IG1heFZl
cnRleFRleHR1cmVzID4gMDsKLSAgICAgICAgdmFyIGZsb2F0RnJhZ21lbnRUZXh0dXJlcyA9ICEh
IGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICk7Ci0gICAgICAgIHZhciBmbG9h
dFZlcnRleFRleHR1cmVzID0gdmVydGV4VGV4dHVyZXMgJiYgZmxvYXRGcmFnbWVudFRleHR1cmVz
OworICAgICAgICAgICAgICAgIF9jYW52YXMud2lkdGggPSBfTWF0aC5mbG9vclBvd2VyT2ZUd28o
IGltYWdlLndpZHRoICk7CisgICAgICAgICAgICAgICAgX2NhbnZhcy5oZWlnaHQgPSBfTWF0aC5m
bG9vclBvd2VyT2ZUd28oIGltYWdlLmhlaWdodCApOwogCi0gICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoICcyZCcgKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAsIF9jYW52YXMud2lk
dGgsIF9jYW52YXMuaGVpZ2h0ICk7CiAKLSAgICAgICAgICAgIGdldE1heEFuaXNvdHJvcHk6IGdl
dE1heEFuaXNvdHJvcHksCi0gICAgICAgICAgICBnZXRNYXhQcmVjaXNpb246IGdldE1heFByZWNp
c2lvbiwKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVy
OiBpbWFnZSBpcyBub3QgcG93ZXIgb2YgdHdvICgnICsgaW1hZ2Uud2lkdGggKyAneCcgKyBpbWFn
ZS5oZWlnaHQgKyAnKS4gUmVzaXplZCB0byAnICsgX2NhbnZhcy53aWR0aCArICd4JyArIF9jYW52
YXMuaGVpZ2h0LCBpbWFnZSApOwogCi0gICAgICAgICAgICBwcmVjaXNpb246IHByZWNpc2lvbiwK
LSAgICAgICAgICAgIGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IGxvZ2FyaXRobWljRGVwdGhCdWZm
ZXIsCisgICAgICAgICAgICAgICAgcmV0dXJuIF9jYW52YXM7CiAKLSAgICAgICAgICAgIG1heFRl
eHR1cmVzOiBtYXhUZXh0dXJlcywKLSAgICAgICAgICAgIG1heFZlcnRleFRleHR1cmVzOiBtYXhW
ZXJ0ZXhUZXh0dXJlcywKLSAgICAgICAgICAgIG1heFRleHR1cmVTaXplOiBtYXhUZXh0dXJlU2l6
ZSwKLSAgICAgICAgICAgIG1heEN1YmVtYXBTaXplOiBtYXhDdWJlbWFwU2l6ZSwKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgbWF4QXR0cmlidXRlczogbWF4QXR0cmlidXRlcywKLSAgICAg
ICAgICAgIG1heFZlcnRleFVuaWZvcm1zOiBtYXhWZXJ0ZXhVbmlmb3JtcywKLSAgICAgICAgICAg
IG1heFZhcnlpbmdzOiBtYXhWYXJ5aW5ncywKLSAgICAgICAgICAgIG1heEZyYWdtZW50VW5pZm9y
bXM6IG1heEZyYWdtZW50VW5pZm9ybXMsCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CiAKLSAg
ICAgICAgICAgIHZlcnRleFRleHR1cmVzOiB2ZXJ0ZXhUZXh0dXJlcywKLSAgICAgICAgICAgIGZs
b2F0RnJhZ21lbnRUZXh0dXJlczogZmxvYXRGcmFnbWVudFRleHR1cmVzLAotICAgICAgICAgICAg
ZmxvYXRWZXJ0ZXhUZXh0dXJlczogZmxvYXRWZXJ0ZXhUZXh0dXJlcworICAgICAgICB9CiAKLSAg
ICAgICAgfTsKKyAgICAgICAgZnVuY3Rpb24gdGV4dHVyZU5lZWRzUG93ZXJPZlR3byggdGV4dHVy
ZSApIHsKIAotICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoIHRleHR1cmUud3JhcFMgIT09IENs
YW1wVG9FZGdlV3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwVCAhPT0gQ2xhbXBUb0VkZ2VXcmFwcGlu
ZyApIHx8CisgICAgICAgICAgICAgICAgKCB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZp
bHRlciAmJiB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyICk7CiAKLSAgICAvKioK
LSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAg
ICAgICB9CiAKLSAgICBmdW5jdGlvbiBBcnJheUNhbWVyYSggYXJyYXkgKSB7CisgICAgICAgIGZ1
bmN0aW9uIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgaXNQb3dlck9mVHdv
ICkgewogCi0gICAgICAgIFBlcnNwZWN0aXZlQ2FtZXJhLmNhbGwoIHRoaXMgKTsKKyAgICAgICAg
ICAgIHJldHVybiB0ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcyAmJiBpc1Bvd2VyT2ZUd28gJiYKKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciAhPT0gTmVhcmVzdEZpbHRlciAmJiB0ZXh0
dXJlLm1pbkZpbHRlciAhPT0gTGluZWFyRmlsdGVyOwogCi0gICAgICAgIHRoaXMuY2FtZXJhcyA9
IGFycmF5IHx8IFtdOworICAgICAgICB9CiAKLSAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdlbmVy
YXRlTWlwbWFwKCB0YXJnZXQsIHRleHR1cmUsIHdpZHRoLCBoZWlnaHQgKSB7CiAKLSAgICBBcnJh
eUNhbWVyYS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBQZXJzcGVj
dGl2ZUNhbWVyYS5wcm90b3R5cGUgKSwgeworICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFw
KCB0YXJnZXQgKTsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogQXJyYXlDYW1lcmEsCisgICAgICAg
ICAgICB2YXIgdGV4dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCggdGV4dHVyZSApOwog
Ci0gICAgICAgIGlzQXJyYXlDYW1lcmE6IHRydWUKKyAgICAgICAgICAgIC8vIE5vdGU6IE1hdGgu
bG9nKCB4ICkgKiBNYXRoLkxPRzJFIHVzZWQgaW5zdGVhZCBvZiBNYXRoLmxvZzIoIHggKSB3aGlj
aCBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFMTEKKyAgICAgICAgICAgIHRleHR1cmVQcm9wZXJ0aWVz
Ll9fbWF4TWlwTGV2ZWwgPSBNYXRoLmxvZyggTWF0aC5tYXgoIHdpZHRoLCBoZWlnaHQgKSApICog
TWF0aC5MT0cyRTsKIAotICAgIH0gKTsKKyAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGF1
dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgLy8gRmFs
bGJhY2sgZmlsdGVycyBmb3Igbm9uLXBvd2VyLW9mLTIgdGV4dHVyZXMKIAotICAgIGZ1bmN0aW9u
IFdlYlZSTWFuYWdlciggcmVuZGVyZXIgKSB7CisgICAgICAgIGZ1bmN0aW9uIGZpbHRlckZhbGxi
YWNrKCBmICkgewogCi0gICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgICAgICBpZiAo
IGYgPT09IE5lYXJlc3RGaWx0ZXIgfHwgZiA9PT0gTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXIg
fHwgZiA9PT0gTmVhcmVzdE1pcE1hcExpbmVhckZpbHRlciApIHsKIAotICAgICAgICB2YXIgZGV2
aWNlID0gbnVsbDsKLSAgICAgICAgdmFyIGZyYW1lRGF0YSA9IG51bGw7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIF9nbC5ORUFSRVNUOwogCi0gICAgICAgIGlmICggJ1ZSRnJhbWVEYXRhJyBpbiB3
aW5kb3cgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZyYW1lRGF0YSA9IG5ldyB3
aW5kb3cuVlJGcmFtZURhdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBfZ2wuTElORUFSOwogCiAg
ICAgICAgIH0KIAotICAgICAgICB2YXIgbWF0cml4V29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQo
KTsKKyAgICAgICAgLy8KIAotICAgICAgICB2YXIgc3RhbmRpbmdNYXRyaXggPSBuZXcgTWF0cml4
NCgpOwotICAgICAgICB2YXIgc3RhbmRpbmdNYXRyaXhJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTsK
KyAgICAgICAgZnVuY3Rpb24gb25UZXh0dXJlRGlzcG9zZSggZXZlbnQgKSB7CiAKLSAgICAgICAg
dmFyIGNhbWVyYUwgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTsKLSAgICAgICAgY2FtZXJhTC5i
b3VuZHMgPSBuZXcgVmVjdG9yNCggMC4wLCAwLjAsIDAuNSwgMS4wICk7Ci0gICAgICAgIGNhbWVy
YUwubGF5ZXJzLmVuYWJsZSggMSApOworICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBldmVudC50
YXJnZXQ7CiAKLSAgICAgICAgdmFyIGNhbWVyYVIgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTsK
LSAgICAgICAgY2FtZXJhUi5ib3VuZHMgPSBuZXcgVmVjdG9yNCggMC41LCAwLjAsIDAuNSwgMS4w
ICk7Ci0gICAgICAgIGNhbWVyYVIubGF5ZXJzLmVuYWJsZSggMiApOworICAgICAgICAgICAgdGV4
dHVyZS5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uVGV4dHVyZURpc3Bvc2UgKTsK
IAotICAgICAgICB2YXIgY2FtZXJhVlIgPSBuZXcgQXJyYXlDYW1lcmEoIFsgY2FtZXJhTCwgY2Ft
ZXJhUiBdICk7Ci0gICAgICAgIGNhbWVyYVZSLmxheWVycy5lbmFibGUoIDEgKTsKLSAgICAgICAg
Y2FtZXJhVlIubGF5ZXJzLmVuYWJsZSggMiApOworICAgICAgICAgICAgZGVhbGxvY2F0ZVRleHR1
cmUoIHRleHR1cmUgKTsKIAotICAgICAgICAvLworICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmlz
VmlkZW9UZXh0dXJlICkgewogCi0gICAgICAgIHZhciBjdXJyZW50U2l6ZSwgY3VycmVudFBpeGVs
UmF0aW87CisgICAgICAgICAgICAgICAgZGVsZXRlIF92aWRlb1RleHR1cmVzWyB0ZXh0dXJlLmlk
IF07CiAKLSAgICAgICAgZnVuY3Rpb24gb25WUkRpc3BsYXlQcmVzZW50Q2hhbmdlKCkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGRldmljZS5pc1ByZXNlbnRpbmcgKSB7Cisg
ICAgICAgICAgICBpbmZvLm1lbW9yeS50ZXh0dXJlcyAtLTsKIAotICAgICAgICAgICAgICAgIHZh
ciBleWVQYXJhbWV0ZXJzID0gZGV2aWNlLmdldEV5ZVBhcmFtZXRlcnMoICdsZWZ0JyApOwotICAg
ICAgICAgICAgICAgIHZhciByZW5kZXJXaWR0aCA9IGV5ZVBhcmFtZXRlcnMucmVuZGVyV2lkdGg7
Ci0gICAgICAgICAgICAgICAgdmFyIHJlbmRlckhlaWdodCA9IGV5ZVBhcmFtZXRlcnMucmVuZGVy
SGVpZ2h0OworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBjdXJyZW50UGl4ZWxSYXRpbyA9
IHJlbmRlcmVyLmdldFBpeGVsUmF0aW8oKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50U2l6ZSA9
IHJlbmRlcmVyLmdldFNpemUoKTsKKyAgICAgICAgZnVuY3Rpb24gb25SZW5kZXJUYXJnZXREaXNw
b3NlKCBldmVudCApIHsKIAotICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldERyYXdpbmdCdWZm
ZXJTaXplKCByZW5kZXJXaWR0aCAqIDIsIHJlbmRlckhlaWdodCwgMSApOworICAgICAgICAgICAg
dmFyIHJlbmRlclRhcmdldCA9IGV2ZW50LnRhcmdldDsKIAotICAgICAgICAgICAgfSBlbHNlIGlm
ICggc2NvcGUuZW5hYmxlZCApIHsKKyAgICAgICAgICAgIHJlbmRlclRhcmdldC5yZW1vdmVFdmVu
dExpc3RlbmVyKCAnZGlzcG9zZScsIG9uUmVuZGVyVGFyZ2V0RGlzcG9zZSApOwogCi0gICAgICAg
ICAgICAgICAgcmVuZGVyZXIuc2V0RHJhd2luZ0J1ZmZlclNpemUoIGN1cnJlbnRTaXplLndpZHRo
LCBjdXJyZW50U2l6ZS5oZWlnaHQsIGN1cnJlbnRQaXhlbFJhdGlvICk7CisgICAgICAgICAgICBk
ZWFsbG9jYXRlUmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKTsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW5mby5tZW1vcnkudGV4dHVyZXMgLS07CiAKICAgICAgICAgfQogCi0gICAg
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndnJkaXNwbGF5cHJlc2VudGNoYW5nZScsIG9u
VlJEaXNwbGF5UHJlc2VudENoYW5nZSwgZmFsc2UgKTsKLQogICAgICAgICAvLwogCi0gICAgICAg
IHRoaXMuZW5hYmxlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLnN0YW5kaW5nID0gZmFsc2U7Cisg
ICAgICAgIGZ1bmN0aW9uIGRlYWxsb2NhdGVUZXh0dXJlKCB0ZXh0dXJlICkgewogCi0gICAgICAg
IHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRleHR1cmVQ
cm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHRleHR1cmUgKTsKIAotICAgICAgICAgICAgcmV0
dXJuIGRldmljZTsKKyAgICAgICAgICAgIGlmICggdGV4dHVyZS5pbWFnZSAmJiB0ZXh0dXJlUHJv
cGVydGllcy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlICkgewogCi0gICAgICAgIH07CisgICAg
ICAgICAgICAgICAgLy8gY3ViZSB0ZXh0dXJlCiAKLSAgICAgICAgdGhpcy5zZXREZXZpY2UgPSBm
dW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgICAgIF9nbC5kZWxldGVUZXh0dXJlKCB0
ZXh0dXJlUHJvcGVydGllcy5fX2ltYWdlX193ZWJnbFRleHR1cmVDdWJlICk7CiAKLSAgICAgICAg
ICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIGRldmljZSA9IHZhbHVlOworICAgICAgICAg
ICAgfSBlbHNlIHsKIAotICAgICAgICB9OworICAgICAgICAgICAgICAgIC8vIDJEIHRleHR1cmUK
IAotICAgICAgICB0aGlzLmdldENhbWVyYSA9IGZ1bmN0aW9uICggY2FtZXJhICkgeworICAgICAg
ICAgICAgICAgIGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5l
ZCApIHJldHVybjsKIAotICAgICAgICAgICAgaWYgKCBkZXZpY2UgPT09IG51bGwgKSByZXR1cm4g
Y2FtZXJhOworICAgICAgICAgICAgICAgIF9nbC5kZWxldGVUZXh0dXJlKCB0ZXh0dXJlUHJvcGVy
dGllcy5fX3dlYmdsVGV4dHVyZSApOwogCi0gICAgICAgICAgICBkZXZpY2UuZGVwdGhOZWFyID0g
Y2FtZXJhLm5lYXI7Ci0gICAgICAgICAgICBkZXZpY2UuZGVwdGhGYXIgPSBjYW1lcmEuZmFyOwor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBkZXZpY2UuZ2V0RnJhbWVEYXRhKCBmcmFtZURh
dGEgKTsKKyAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgd2ViZ2wgcHJvcGVydGllcworICAgICAg
ICAgICAgcHJvcGVydGllcy5yZW1vdmUoIHRleHR1cmUgKTsKIAotICAgICAgICAgICAgLy8KKyAg
ICAgICAgfQogCi0gICAgICAgICAgICB2YXIgcG9zZSA9IGZyYW1lRGF0YS5wb3NlOworICAgICAg
ICBmdW5jdGlvbiBkZWFsbG9jYXRlUmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKSB7CiAKLSAg
ICAgICAgICAgIGlmICggcG9zZS5wb3NpdGlvbiAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHZh
ciByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCAp
OworICAgICAgICAgICAgdmFyIHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJl
bmRlclRhcmdldC50ZXh0dXJlICk7CiAKLSAgICAgICAgICAgICAgICBjYW1lcmEucG9zaXRpb24u
ZnJvbUFycmF5KCBwb3NlLnBvc2l0aW9uICk7CisgICAgICAgICAgICBpZiAoICEgcmVuZGVyVGFy
Z2V0ICkgcmV0dXJuOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCB0
ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAg
ICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCggMCwgMCwgMCApOworICAgICAgICAgICAg
ICAgIF9nbC5kZWxldGVUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmdsVGV4dHVyZSAp
OwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggcG9zZS5vcmllbnRhdGlvbiAh
PT0gbnVsbCApIHsKKyAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSAp
IHsKIAotICAgICAgICAgICAgICAgIGNhbWVyYS5xdWF0ZXJuaW9uLmZyb21BcnJheSggcG9zZS5v
cmllbnRhdGlvbiApOworICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUu
ZGlzcG9zZSgpOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhbWVyYS51cGRhdGVN
YXRyaXhXb3JsZCgpOworICAgICAgICAgICAgaWYgKCByZW5kZXJUYXJnZXQuaXNXZWJHTFJlbmRl
clRhcmdldEN1YmUgKSB7CisKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2
OyBpICsrICkgewogCi0gICAgICAgICAgICB2YXIgc3RhZ2VQYXJhbWV0ZXJzID0gZGV2aWNlLnN0
YWdlUGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVy
KCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgaSBdICk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhi
dWZmZXIgKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9f
d2ViZ2xEZXB0aGJ1ZmZlclsgaSBdICk7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5zdGFuZGlu
ZyAmJiBzdGFnZVBhcmFtZXRlcnMgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgc3RhbmRpbmdNYXRyaXguZnJvbUFycmF5KCBzdGFnZVBhcmFtZXRlcnMuc2l0dGluZ1Rv
U3RhbmRpbmdUcmFuc2Zvcm0gKTsKLSAgICAgICAgICAgICAgICBzdGFuZGluZ01hdHJpeEludmVy
c2UuZ2V0SW52ZXJzZSggc3RhbmRpbmdNYXRyaXggKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAK
LSAgICAgICAgICAgICAgICBjYW1lcmEubWF0cml4V29ybGQubXVsdGlwbHkoIHN0YW5kaW5nTWF0
cml4ICk7Ci0gICAgICAgICAgICAgICAgY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5tdWx0aXBs
eSggc3RhbmRpbmdNYXRyaXhJbnZlcnNlICk7CisgICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUZy
YW1lYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlciApOwor
ICAgICAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRGVwdGhi
dWZmZXIgKSBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9f
d2ViZ2xEZXB0aGJ1ZmZlciApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgg
ZGV2aWNlLmlzUHJlc2VudGluZyA9PT0gZmFsc2UgKSByZXR1cm4gY2FtZXJhOworICAgICAgICAg
ICAgcHJvcGVydGllcy5yZW1vdmUoIHJlbmRlclRhcmdldC50ZXh0dXJlICk7CisgICAgICAgICAg
ICBwcm9wZXJ0aWVzLnJlbW92ZSggcmVuZGVyVGFyZ2V0ICk7CiAKLSAgICAgICAgICAgIC8vCisg
ICAgICAgIH0KIAotICAgICAgICAgICAgY2FtZXJhVlIubWF0cml4V29ybGQuY29weSggY2FtZXJh
Lm1hdHJpeFdvcmxkICk7Ci0gICAgICAgICAgICBjYW1lcmFWUi5tYXRyaXhXb3JsZEludmVyc2Uu
Y29weSggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAgICAvLwogCi0gICAgICAg
ICAgICBjYW1lcmFMLm1hdHJpeFdvcmxkSW52ZXJzZS5mcm9tQXJyYXkoIGZyYW1lRGF0YS5sZWZ0
Vmlld01hdHJpeCApOwotICAgICAgICAgICAgY2FtZXJhUi5tYXRyaXhXb3JsZEludmVyc2UuZnJv
bUFycmF5KCBmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4ICk7CiAKLSAgICAgICAgICAgIGlmICgg
dGhpcy5zdGFuZGluZyAmJiBzdGFnZVBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgICAgICAgICBj
YW1lcmFMLm1hdHJpeFdvcmxkSW52ZXJzZS5tdWx0aXBseSggc3RhbmRpbmdNYXRyaXhJbnZlcnNl
ICk7Ci0gICAgICAgICAgICAgICAgY2FtZXJhUi5tYXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHko
IHN0YW5kaW5nTWF0cml4SW52ZXJzZSApOworICAgICAgICBmdW5jdGlvbiBzZXRUZXh0dXJlMkQo
IHRleHR1cmUsIHNsb3QgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0ZXh0
dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICk7CiAKLSAgICAgICAgICAg
IHZhciBwYXJlbnQgPSBjYW1lcmEucGFyZW50OworICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLmlz
VmlkZW9UZXh0dXJlICkgdXBkYXRlVmlkZW9UZXh0dXJlKCB0ZXh0dXJlICk7CiAKLSAgICAgICAg
ICAgIGlmICggcGFyZW50ICE9PSBudWxsICkgeworICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLnZl
cnNpb24gPiAwICYmIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiAhPT0gdGV4dHVyZS52ZXJz
aW9uICkgewogCi0gICAgICAgICAgICAgICAgbWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2Uo
IHBhcmVudC5tYXRyaXhXb3JsZCApOworICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRleHR1
cmUuaW1hZ2U7CiAKLSAgICAgICAgICAgICAgICBjYW1lcmFMLm1hdHJpeFdvcmxkSW52ZXJzZS5t
dWx0aXBseSggbWF0cml4V29ybGRJbnZlcnNlICk7Ci0gICAgICAgICAgICAgICAgY2FtZXJhUi5t
YXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHkoIG1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAg
ICAgICAgICAgIGlmICggaW1hZ2UgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBU
ZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQnLCB0ZXh0dXJl
ICk7CiAKLSAgICAgICAgICAgIC8vIGVudk1hcCBhbmQgTWlycm9yIG5lZWRzIGNhbWVyYS5tYXRy
aXhXb3JsZAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGltYWdlLmNvbXBsZXRlID09PSBm
YWxzZSApIHsKIAotICAgICAgICAgICAgY2FtZXJhTC5tYXRyaXhXb3JsZC5nZXRJbnZlcnNlKCBj
YW1lcmFMLm1hdHJpeFdvcmxkSW52ZXJzZSApOwotICAgICAgICAgICAgY2FtZXJhUi5tYXRyaXhX
b3JsZC5nZXRJbnZlcnNlKCBjYW1lcmFSLm1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1h
cmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlJywgdGV4dHVyZSApOwogCi0g
ICAgICAgICAgICBjYW1lcmFMLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KCBmcmFtZURhdGEu
bGVmdFByb2plY3Rpb25NYXRyaXggKTsKLSAgICAgICAgICAgIGNhbWVyYVIucHJvamVjdGlvbk1h
dHJpeC5mcm9tQXJyYXkoIGZyYW1lRGF0YS5yaWdodFByb2plY3Rpb25NYXRyaXggKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAvLyBIQUNLIEBtcmRvb2IKLSAgICAg
ICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2VidnIvaXNzdWVzLzIwMworICAgICAg
ICAgICAgICAgICAgICB1cGxvYWRUZXh0dXJlKCB0ZXh0dXJlUHJvcGVydGllcywgdGV4dHVyZSwg
c2xvdCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGNhbWVy
YVZSLnByb2plY3Rpb25NYXRyaXguY29weSggY2FtZXJhTC5wcm9qZWN0aW9uTWF0cml4ICk7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB2YXIgbGF5ZXJzID0gZGV2aWNlLmdldExheWVycygpOworICAgICAgICAgICAgc3Rh
dGUuYWN0aXZlVGV4dHVyZSggX2dsLlRFWFRVUkUwICsgc2xvdCApOworICAgICAgICAgICAgc3Rh
dGUuYmluZFRleHR1cmUoIF9nbC5URVhUVVJFXzJELCB0ZXh0dXJlUHJvcGVydGllcy5fX3dlYmds
VGV4dHVyZSApOwogCi0gICAgICAgICAgICBpZiAoIGxheWVycy5sZW5ndGggKSB7CisgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIHZhciBsYXllciA9IGxheWVyc1sgMCBdOworICAgICAgICBm
dW5jdGlvbiBzZXRUZXh0dXJlQ3ViZSggdGV4dHVyZSwgc2xvdCApIHsKIAotICAgICAgICAgICAg
ICAgIGlmICggbGF5ZXIubGVmdEJvdW5kcyAhPT0gbnVsbCAmJiBsYXllci5sZWZ0Qm91bmRzLmxl
bmd0aCA9PT0gNCApIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3Bl
cnRpZXMuZ2V0KCB0ZXh0dXJlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgY2FtZXJhTC5ib3Vu
ZHMuZnJvbUFycmF5KCBsYXllci5sZWZ0Qm91bmRzICk7CisgICAgICAgICAgICBpZiAoIHRleHR1
cmUuaW1hZ2UubGVuZ3RoID09PSA2ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICggdGV4dHVyZS52ZXJzaW9uID4gMCAmJiB0ZXh0dXJlUHJvcGVydGllcy5fX3Zl
cnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHsKIAotICAgICAgICAgICAgICAgIGlmICggbGF5
ZXIucmlnaHRCb3VuZHMgIT09IG51bGwgJiYgbGF5ZXIucmlnaHRCb3VuZHMubGVuZ3RoID09PSA0
ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoICEgdGV4dHVyZVByb3BlcnRpZXMuX19pbWFn
ZV9fd2ViZ2xUZXh0dXJlQ3ViZSApIHsKIAotICAgICAgICAgICAgICAgICAgICBjYW1lcmFSLmJv
dW5kcy5mcm9tQXJyYXkoIGxheWVyLnJpZ2h0Qm91bmRzICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9z
ZSApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZVByb3BlcnRpZXMuX19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSA9IF9nbC5jcmVhdGVUZXh0dXJl
KCk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubWVtb3J5
LnRleHR1cmVzICsrOwogCi0gICAgICAgICAgICByZXR1cm4gY2FtZXJhVlI7CisgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3Rp
dmVUZXh0dXJlKCBfZ2wuVEVYVFVSRTAgKyBzbG90ICk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRlLmJpbmRUZXh0dXJlKCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZVByb3BlcnRpZXMu
X19pbWFnZV9fd2ViZ2xUZXh0dXJlQ3ViZSApOwogCi0gICAgICAgIHRoaXMuZ2V0U3RhbmRpbmdN
YXRyaXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIF9nbC5waXhlbFN0b3Jl
aSggX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRleHR1cmUuZmxpcFkgKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIHN0YW5kaW5nTWF0cml4OworICAgICAgICAgICAgICAgICAgICB2YXIgaXNDb21w
cmVzc2VkID0gKCB0ZXh0dXJlICYmIHRleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSApOworICAg
ICAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVGV4dHVyZSA9ICggdGV4dHVyZS5pbWFnZVsgMCBd
ICYmIHRleHR1cmUuaW1hZ2VbIDAgXS5pc0RhdGFUZXh0dXJlICk7CiAKLSAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGN1YmVJbWFnZSA9IFtdOwogCi0gICAgICAgIHRoaXMuc3Vi
bWl0RnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IDY7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIGlmICggZGV2aWNlICYmIGRldmlj
ZS5pc1ByZXNlbnRpbmcgKSBkZXZpY2Uuc3VibWl0RnJhbWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggISBpc0NvbXByZXNzZWQgJiYgISBpc0RhdGFUZXh0dXJlICkgewogCi0gICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViZUltYWdlWyBpIF0gPSBjbGFt
cFRvTWF4U2l6ZSggdGV4dHVyZS5pbWFnZVsgaSBdLCBjYXBhYmlsaXRpZXMubWF4Q3ViZW1hcFNp
emUgKTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAv
KioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1YmVJbWFnZVsgaSBdID0gaXNEYXRhVGV4dHVy
ZSA/IHRleHR1cmUuaW1hZ2VbIGkgXS5pbWFnZSA6IHRleHR1cmUuaW1hZ2VbIGkgXTsKIAotICAg
IGZ1bmN0aW9uIFdlYkdMRXh0ZW5zaW9ucyggZ2wgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgdmFyIGV4dGVuc2lvbnMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IGN1
YmVJbWFnZVsgMCBdLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNQb3dlck9mVHdvSW1hZ2Ug
PSBpc1Bvd2VyT2ZUd28oIGltYWdlICksCisgICAgICAgICAgICAgICAgICAgICAgICBnbEZvcm1h
dCA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUuZm9ybWF0ICksCisgICAgICAgICAgICAgICAgICAg
ICAgICBnbFR5cGUgPSB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlLnR5cGUgKTsKIAotICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFRleHR1
cmVQYXJhbWV0ZXJzKCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZSwgaXNQb3dlck9mVHdv
SW1hZ2UgKTsKIAotICAgICAgICAgICAgICAgIGlmICggZXh0ZW5zaW9uc1sgbmFtZSBdICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDY7
IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbIG5hbWUg
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISBpc0NvbXByZXNzZWQgKSB7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0RhdGFU
ZXh0dXJlICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGV4dGVuc2lvbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UyRCggX2dsLlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGksIDAsIGdsRm9ybWF0LCBjdWJlSW1hZ2VbIGkgXS53aWR0aCwgY3Vi
ZUltYWdlWyBpIF0uaGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBjdWJlSW1hZ2VbIGkgXS5k
YXRhICk7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBuYW1lICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnV0VC
R0xfZGVwdGhfdGV4dHVyZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBn
bC5nZXRFeHRlbnNpb24oICdXRUJHTF9kZXB0aF90ZXh0dXJlJyApIHx8IGdsLmdldEV4dGVuc2lv
biggJ01PWl9XRUJHTF9kZXB0aF90ZXh0dXJlJyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ1dFQktJ
VF9XRUJHTF9kZXB0aF90ZXh0dXJlJyApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIF9nbC5U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCAwLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGds
VHlwZSwgY3ViZUltYWdlWyBpIF0gKTsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdFWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnOgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0
ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
JyApIHx8IGdsLmdldEV4dGVuc2lvbiggJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMnICkgfHwgZ2wuZ2V0RXh0ZW5zaW9uKCAnV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlz
b3Ryb3BpYycgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdXRUJHTF9jb21w
cmVzc2VkX3RleHR1cmVfczN0Yyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24g
PSBnbC5nZXRFeHRlbnNpb24oICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKSB8fCBn
bC5nZXRFeHRlbnNpb24oICdNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkgfHwg
Z2wuZ2V0RXh0ZW5zaW9uKCAnV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRf
dGV4dHVyZV9wdnJ0Yyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBnbC5n
ZXRFeHRlbnNpb24oICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkgfHwgZ2wuZ2V0
RXh0ZW5zaW9uKCAnV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBtaXBtYXAsIG1pcG1hcHMgPSBjdWJlSW1hZ2VbIGkgXS5taXBtYXBzOwogCi0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbiggJ1dFQkdMX2Nv
bXByZXNzZWRfdGV4dHVyZV9ldGMxJyApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBqbCA9IG1pcG1h
cHMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbigg
bmFtZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXAgPSBtaXBtYXBz
WyBqIF07CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdGV4dHVyZS5mb3JtYXQgIT09IFJHQkFGb3JtYXQgJiYgdGV4dHVyZS5mb3JtYXQg
IT09IFJHQkZvcm1hdCApIHsKIAotICAgICAgICAgICAgICAgIGlmICggZXh0ZW5zaW9uID09PSBu
dWxsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZS5n
ZXRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMoKS5pbmRleE9mKCBnbEZvcm1hdCApID4gLSAxICkg
ewogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVy
ZXI6ICcgKyBuYW1lICsgJyBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4nICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29tcHJlc3NlZFRleEltYWdlMkQo
IF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBqLCBnbEZvcm1hdCwgbWlwbWFw
LndpZHRoLCBtaXBtYXAuaGVpZ2h0LCAwLCBtaXBtYXAuZGF0YSApOwogCi0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICAgICAgICAgIGV4dGVuc2lvbnNbIG5hbWUgXSA9IGV4dGVuc2lvbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJl
bmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZv
cm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKScgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBl
eHRlbnNpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1h
Z2UyRCggX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGosIGdsRm9ybWF0LCBt
aXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5k
YXRhICk7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
IC8qKgotICAgICAqIEBhdXRob3IgdHNjaHcKLSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBXZWJHTENsaXBwaW5nKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgIHZhciBzY29wZSA9IHRoaXMsCisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgZ2xvYmFsU3RhdGUgPSBudWxsLAotICAgICAgICAgICAg
bnVtR2xvYmFsUGxhbmVzID0gMCwKLSAgICAgICAgICAgIGxvY2FsQ2xpcHBpbmdFbmFibGVkID0g
ZmFsc2UsCi0gICAgICAgICAgICByZW5kZXJpbmdTaGFkb3dzID0gZmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgIGlmICggISBpc0NvbXByZXNzZWQgKSB7CiAKLSAgICAgICAgICAgIHBsYW5lID0g
bmV3IFBsYW5lKCksCi0gICAgICAgICAgICB2aWV3Tm9ybWFsTWF0cml4ID0gbmV3IE1hdHJpeDMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fbWF4TWlwTGV2
ZWwgPSAwOwogCi0gICAgICAgICAgICB1bmlmb3JtID0geyB2YWx1ZTogbnVsbCwgbmVlZHNVcGRh
dGU6IGZhbHNlIH07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgdGhp
cy51bmlmb3JtID0gdW5pZm9ybTsKLSAgICAgICAgdGhpcy5udW1QbGFuZXMgPSAwOwotICAgICAg
ICB0aGlzLm51bUludGVyc2VjdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlUHJvcGVydGllcy5fX21heE1pcExldmVsID0gbWlwbWFwcy5sZW5ndGggLSAxOwogCi0gICAg
ICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCBwbGFuZXMsIGVuYWJsZUxvY2FsQ2xpcHBpbmcsIGNh
bWVyYSApIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgZW5hYmxl
ZCA9Ci0gICAgICAgICAgICAgICAgcGxhbmVzLmxlbmd0aCAhPT0gMCB8fAotICAgICAgICAgICAg
ICAgIGVuYWJsZUxvY2FsQ2xpcHBpbmcgfHwKLSAgICAgICAgICAgICAgICAvLyBlbmFibGUgc3Rh
dGUgb2YgcHJldmlvdXMgZnJhbWUgLSB0aGUgY2xpcHBpbmcgY29kZSBoYXMgdG8KLSAgICAgICAg
ICAgICAgICAvLyBydW4gYW5vdGhlciBmcmFtZSBpbiBvcmRlciB0byByZXNldCB0aGUgc3RhdGU6
Ci0gICAgICAgICAgICAgICAgbnVtR2xvYmFsUGxhbmVzICE9PSAwIHx8Ci0gICAgICAgICAgICAg
ICAgbG9jYWxDbGlwcGluZ0VuYWJsZWQ7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGV4dHVy
ZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCB0ZXh0dXJlLCBpc1Bvd2VyT2ZUd29JbWFnZSApICkgewog
Ci0gICAgICAgICAgICBsb2NhbENsaXBwaW5nRW5hYmxlZCA9IGVuYWJsZUxvY2FsQ2xpcHBpbmc7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgaW1hZ2VzIGZvciBjdWJlIG1h
cCBoYXZlIHRoZSBzYW1lIHNpemUuCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU1p
cG1hcCggX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmUsIGltYWdlLndpZHRoLCBpbWFnZS5o
ZWlnaHQgKTsKIAotICAgICAgICAgICAgZ2xvYmFsU3RhdGUgPSBwcm9qZWN0UGxhbmVzKCBwbGFu
ZXMsIGNhbWVyYSwgMCApOwotICAgICAgICAgICAgbnVtR2xvYmFsUGxhbmVzID0gcGxhbmVzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gZW5hYmxl
ZDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb3BlcnRpZXMuX192ZXJzaW9uID0gdGV4
dHVyZS52ZXJzaW9uOwogCi0gICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGlmICggdGV4
dHVyZS5vblVwZGF0ZSApIHRleHR1cmUub25VcGRhdGUoIHRleHR1cmUgKTsKIAotICAgICAgICB0
aGlzLmJlZ2luU2hhZG93cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgICAgIHJlbmRlcmluZ1NoYWRvd3MgPSB0cnVlOwotICAgICAgICAgICAgcHJv
amVjdFBsYW5lcyggbnVsbCApOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUZXh0
dXJlKCBfZ2wuVEVYVFVSRTAgKyBzbG90ICk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmJp
bmRUZXh0dXJlKCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGV4dHVyZVByb3BlcnRpZXMuX19pbWFn
ZV9fd2ViZ2xUZXh0dXJlQ3ViZSApOwogCi0gICAgICAgIH07CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgIHRoaXMuZW5kU2hhZG93cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICByZW5kZXJpbmdTaGFkb3dzID0gZmFsc2U7Ci0gICAgICAgICAgICByZXNl
dEdsb2JhbFN0YXRlKCk7CisgICAgICAgIH0KIAotICAgICAgICB9OworICAgICAgICBmdW5jdGlv
biBzZXRUZXh0dXJlQ3ViZUR5bmFtaWMoIHRleHR1cmUsIHNsb3QgKSB7CisKKyAgICAgICAgICAg
IHN0YXRlLmFjdGl2ZVRleHR1cmUoIF9nbC5URVhUVVJFMCArIHNsb3QgKTsKKyAgICAgICAgICAg
IHN0YXRlLmJpbmRUZXh0dXJlKCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgcHJvcGVydGllcy5nZXQo
IHRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSApOwogCi0gICAgICAgIHRoaXMuc2V0U3RhdGUgPSBm
dW5jdGlvbiggcGxhbmVzLCBjbGlwSW50ZXJzZWN0aW9uLCBjbGlwU2hhZG93cywgY2FtZXJhLCBj
YWNoZSwgZnJvbUNhY2hlICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggISBsb2Nh
bENsaXBwaW5nRW5hYmxlZCB8fAotICAgICAgICAgICAgICAgICAgICBwbGFuZXMgPT09IG51bGwg
fHwgcGxhbmVzLmxlbmd0aCA9PT0gMCB8fAotICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmdT
aGFkb3dzICYmICEgY2xpcFNoYWRvd3MgKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhlcmUncyBu
byBsb2NhbCBjbGlwcGluZworICAgICAgICBmdW5jdGlvbiBzZXRUZXh0dXJlUGFyYW1ldGVycygg
dGV4dHVyZVR5cGUsIHRleHR1cmUsIGlzUG93ZXJPZlR3b0ltYWdlICkgewogCi0gICAgICAgICAg
ICAgICAgaWYgKCByZW5kZXJpbmdTaGFkb3dzICkgewotICAgICAgICAgICAgICAgICAgICAvLyB0
aGVyZSdzIG5vIGdsb2JhbCBjbGlwcGluZworICAgICAgICAgICAgdmFyIGV4dGVuc2lvbjsKIAot
ICAgICAgICAgICAgICAgICAgICBwcm9qZWN0UGxhbmVzKCBudWxsICk7CisgICAgICAgICAgICBp
ZiAoIGlzUG93ZXJPZlR3b0ltYWdlICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaSggdGV4dHVyZVR5cGUsIF9nbC5URVhUVVJF
X1dSQVBfUywgdXRpbHMuY29udmVydCggdGV4dHVyZS53cmFwUyApICk7CisgICAgICAgICAgICAg
ICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHV0
aWxzLmNvbnZlcnQoIHRleHR1cmUud3JhcFQgKSApOwogCi0gICAgICAgICAgICAgICAgICAgIHJl
c2V0R2xvYmFsU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX2ds
LnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB1dGls
cy5jb252ZXJ0KCB0ZXh0dXJlLm1hZ0ZpbHRlciApICk7CisgICAgICAgICAgICAgICAgX2dsLnRl
eFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCB1dGlscy5j
b252ZXJ0KCB0ZXh0dXJlLm1pbkZpbHRlciApICk7CiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAK
LSAgICAgICAgICAgICAgICB2YXIgbkdsb2JhbCA9IHJlbmRlcmluZ1NoYWRvd3MgPyAwIDogbnVt
R2xvYmFsUGxhbmVzLAotICAgICAgICAgICAgICAgICAgICBsR2xvYmFsID0gbkdsb2JhbCAqIDQs
CisgICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVY
VFVSRV9XUkFQX1MsIF9nbC5DTEFNUF9UT19FREdFICk7CisgICAgICAgICAgICAgICAgX2dsLnRl
eFBhcmFtZXRlcmkoIHRleHR1cmVUeXBlLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIF9nbC5DTEFNUF9U
T19FREdFICk7CiAKLSAgICAgICAgICAgICAgICAgICAgZHN0QXJyYXkgPSBjYWNoZS5jbGlwcGlu
Z1N0YXRlIHx8IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKCB0ZXh0dXJlLndyYXBTICE9PSBD
bGFtcFRvRWRnZVdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgIT09IENsYW1wVG9FZGdlV3JhcHBp
bmcgKSB7CiAKLSAgICAgICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gZHN0QXJyYXk7IC8vIGVu
c3VyZSB1bmlxdWUgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndy
YXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VX
cmFwcGluZy4nLCB0ZXh0dXJlICk7CiAKLSAgICAgICAgICAgICAgICBkc3RBcnJheSA9IHByb2pl
Y3RQbGFuZXMoIHBsYW5lcywgY2FtZXJhLCBsR2xvYmFsLCBmcm9tQ2FjaGUgKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IGxHbG9i
YWw7ICsrIGkgKSB7CisgICAgICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoIHRleHR1cmVU
eXBlLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXJGYWxsYmFjayggdGV4dHVyZS5tYWdG
aWx0ZXIgKSApOworICAgICAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKCB0ZXh0dXJlVHlw
ZSwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyRmFsbGJhY2soIHRleHR1cmUubWluRmls
dGVyICkgKTsKIAotICAgICAgICAgICAgICAgICAgICBkc3RBcnJheVsgaSBdID0gZ2xvYmFsU3Rh
dGVbIGkgXTsKKyAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmUubWluRmlsdGVyICE9PSBOZWFy
ZXN0RmlsdGVyICYmIHRleHR1cmUubWluRmlsdGVyICE9PSBMaW5lYXJGaWx0ZXIgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4
dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0
IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLicsIHRleHR1cmUg
KTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNhY2hlLmNsaXBwaW5n
U3RhdGUgPSBkc3RBcnJheTsKLSAgICAgICAgICAgICAgICB0aGlzLm51bUludGVyc2VjdGlvbiA9
IGNsaXBJbnRlcnNlY3Rpb24gPyB0aGlzLm51bVBsYW5lcyA6IDA7Ci0gICAgICAgICAgICAgICAg
dGhpcy5udW1QbGFuZXMgKz0gbkdsb2JhbDsKLQogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYycgKTsKIAotICAgICAgICB9OworICAgICAgICAgICAgaWYgKCBleHRlbnNpb24gKSB7CiAK
LSAgICAgICAgZnVuY3Rpb24gcmVzZXRHbG9iYWxTdGF0ZSgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIHRleHR1cmUudHlwZSA9PT0gRmxvYXRUeXBlICYmIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3Rl
eHR1cmVfZmxvYXRfbGluZWFyJyApID09PSBudWxsICkgcmV0dXJuOworICAgICAgICAgICAgICAg
IGlmICggdGV4dHVyZS50eXBlID09PSBIYWxmRmxvYXRUeXBlICYmIGV4dGVuc2lvbnMuZ2V0KCAn
T0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInICkgPT09IG51bGwgKSByZXR1cm47CiAKLSAg
ICAgICAgICAgIGlmICggdW5pZm9ybS52YWx1ZSAhPT0gZ2xvYmFsU3RhdGUgKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCB0ZXh0dXJlLmFuaXNvdHJvcHkgPiAxIHx8IHByb3BlcnRpZXMuZ2V0KCB0
ZXh0dXJlICkuX19jdXJyZW50QW5pc290cm9weSApIHsKIAotICAgICAgICAgICAgICAgIHVuaWZv
cm0udmFsdWUgPSBnbG9iYWxTdGF0ZTsKLSAgICAgICAgICAgICAgICB1bmlmb3JtLm5lZWRzVXBk
YXRlID0gbnVtR2xvYmFsUGxhbmVzID4gMDsKKyAgICAgICAgICAgICAgICAgICAgX2dsLnRleFBh
cmFtZXRlcmYoIHRleHR1cmVUeXBlLCBleHRlbnNpb24uVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9F
WFQsIE1hdGgubWluKCB0ZXh0dXJlLmFuaXNvdHJvcHksIGNhcGFiaWxpdGllcy5nZXRNYXhBbmlz
b3Ryb3B5KCkgKSApOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldCggdGV4dHVy
ZSApLl9fY3VycmVudEFuaXNvdHJvcHkgPSB0ZXh0dXJlLmFuaXNvdHJvcHk7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNjb3BlLm51bVBsYW5lcyA9
IG51bUdsb2JhbFBsYW5lczsKLSAgICAgICAgICAgIHNjb3BlLm51bUludGVyc2VjdGlvbiA9IDA7
CisgICAgICAgICAgICB9CiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHByb2plY3RQ
bGFuZXMoIHBsYW5lcywgY2FtZXJhLCBkc3RPZmZzZXQsIHNraXBUcmFuc2Zvcm0gKSB7CisgICAg
ICAgIGZ1bmN0aW9uIHVwbG9hZFRleHR1cmUoIHRleHR1cmVQcm9wZXJ0aWVzLCB0ZXh0dXJlLCBz
bG90ICkgewogCi0gICAgICAgICAgICB2YXIgblBsYW5lcyA9IHBsYW5lcyAhPT0gbnVsbCA/IHBs
YW5lcy5sZW5ndGggOiAwLAotICAgICAgICAgICAgICAgIGRzdEFycmF5ID0gbnVsbDsKKyAgICAg
ICAgICAgIGlmICggdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbEluaXQgPT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICAgICAgaWYgKCBuUGxhbmVzICE9PSAwICkgeworICAgICAgICAgICAgICAg
IHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xJbml0ID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAg
IGRzdEFycmF5ID0gdW5pZm9ybS52YWx1ZTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLmFkZEV2
ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25UZXh0dXJlRGlzcG9zZSApOwogCi0gICAgICAgICAg
ICAgICAgaWYgKCBza2lwVHJhbnNmb3JtICE9PSB0cnVlIHx8IGRzdEFycmF5ID09PSBudWxsICkg
eworICAgICAgICAgICAgICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlID0gX2ds
LmNyZWF0ZVRleHR1cmUoKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZmxhdFNpemUgPSBk
c3RPZmZzZXQgKyBuUGxhbmVzICogNCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNYXRy
aXggPSBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlOworICAgICAgICAgICAgICAgIGluZm8ubWVt
b3J5LnRleHR1cmVzICsrOwogCi0gICAgICAgICAgICAgICAgICAgIHZpZXdOb3JtYWxNYXRyaXgu
Z2V0Tm9ybWFsTWF0cml4KCB2aWV3TWF0cml4ICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkc3RBcnJheSA9PT0gbnVsbCB8fCBkc3RBcnJheS5sZW5ndGggPCBm
bGF0U2l6ZSApIHsKKyAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRleHR1cmUoIF9nbC5URVhUVVJF
MCArIHNsb3QgKTsKKyAgICAgICAgICAgIHN0YXRlLmJpbmRUZXh0dXJlKCBfZ2wuVEVYVFVSRV8y
RCwgdGV4dHVyZVByb3BlcnRpZXMuX193ZWJnbFRleHR1cmUgKTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgZHN0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KCBmbGF0U2l6ZSApOworICAgICAg
ICAgICAgX2dsLnBpeGVsU3RvcmVpKCBfZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgdGV4dHVyZS5m
bGlwWSApOworICAgICAgICAgICAgX2dsLnBpeGVsU3RvcmVpKCBfZ2wuVU5QQUNLX1BSRU1VTFRJ
UExZX0FMUEhBX1dFQkdMLCB0ZXh0dXJlLnByZW11bHRpcGx5QWxwaGEgKTsKKyAgICAgICAgICAg
IF9nbC5waXhlbFN0b3JlaSggX2dsLlVOUEFDS19BTElHTk1FTlQsIHRleHR1cmUudW5wYWNrQWxp
Z25tZW50ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGltYWdl
ID0gY2xhbXBUb01heFNpemUoIHRleHR1cmUuaW1hZ2UsIGNhcGFiaWxpdGllcy5tYXhUZXh0dXJl
U2l6ZSApOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaTQgPSBkc3RP
ZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPT0gblBs
YW5lczsgKysgaSwgaTQgKz0gNCApIHsKKyAgICAgICAgICAgIGlmICggdGV4dHVyZU5lZWRzUG93
ZXJPZlR3byggdGV4dHVyZSApICYmIGlzUG93ZXJPZlR3byggaW1hZ2UgKSA9PT0gZmFsc2UgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lLmNvcHkoIHBsYW5lc1sgaSBdICkuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5TWF0cml4NCggdmlld01hdHJpeCwg
dmlld05vcm1hbE1hdHJpeCApOworICAgICAgICAgICAgICAgIGltYWdlID0gbWFrZVBvd2VyT2ZU
d28oIGltYWdlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lLm5vcm1hbC50b0Fy
cmF5KCBkc3RBcnJheSwgaTQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRzdEFycmF5WyBp
NCArIDMgXSA9IHBsYW5lLmNvbnN0YW50OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpc1Bvd2VyT2ZUd29JbWFnZSA9IGlzUG93ZXJPZlR3
byggaW1hZ2UgKSwKKyAgICAgICAgICAgICAgICBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQoIHRl
eHR1cmUuZm9ybWF0ICksCisgICAgICAgICAgICAgICAgZ2xUeXBlID0gdXRpbHMuY29udmVydCgg
dGV4dHVyZS50eXBlICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRUZXh0
dXJlUGFyYW1ldGVycyggX2dsLlRFWFRVUkVfMkQsIHRleHR1cmUsIGlzUG93ZXJPZlR3b0ltYWdl
ICk7CiAKLSAgICAgICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gZHN0QXJyYXk7Ci0gICAgICAg
ICAgICAgICAgdW5pZm9ybS5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICB2YXIgbWlw
bWFwLCBtaXBtYXBzID0gdGV4dHVyZS5taXBtYXBzOwogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIHRleHR1cmUuaXNEZXB0aFRleHR1cmUgKSB7CiAKLSAgICAgICAgICAgIHNjb3Bl
Lm51bVBsYW5lcyA9IG5QbGFuZXM7CisgICAgICAgICAgICAgICAgLy8gcG9wdWxhdGUgZGVwdGgg
dGV4dHVyZSB3aXRoIGR1bW15IGRhdGEKIAotICAgICAgICAgICAgcmV0dXJuIGRzdEFycmF5Owor
ICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZvcm1hdCA9IF9nbC5ERVBUSF9DT01QT05FTlQ7
CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZS50eXBlID09PSBGbG9h
dFR5cGUgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggISBfaXNXZWJHTDIg
KSB0aHJvdyBuZXcgRXJyb3IoICdGbG9hdCBEZXB0aCBUZXh0dXJlIG9ubHkgc3VwcG9ydGVkIGlu
IFdlYkdMMi4wJyApOworICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IF9nbC5E
RVBUSF9DT01QT05FTlQzMkY7CiAKLSAgICAvLyBpbXBvcnQgeyBTcGhlcmUgfSBmcm9tICcuLi9t
YXRoL1NwaGVyZSc7Ci0gICAgLyoqCi0gICAgICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBodHRw
Oi8vd3d3LnBhdWxicnVudC5jby51ay8KLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9t
cmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxp
YS5jb20vCi0gICAgICogQGF1dGhvciBzemltZWsgLyBodHRwczovL2dpdGh1Yi5jb20vc3ppbWVr
LwotICAgICAqIEBhdXRob3IgdHNjaHcKLSAgICAgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBfaXNXZWJHTDIgKSB7CiAKLSAgICBmdW5jdGlvbiBXZWJHTFJlbmRlcmVyKCBwYXJhbWV0
ZXJzICkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCAyLjAgcmVxdWlyZXMgc2lnbmVk
IGludGVybmFsZm9ybWF0IGZvciBnbFRleEltYWdlMkQKKyAgICAgICAgICAgICAgICAgICAgaW50
ZXJuYWxGb3JtYXQgPSBfZ2wuREVQVEhfQ09NUE9ORU5UMTY7CiAKLSAgICAgICAgY29uc29sZS5s
b2coICdUSFJFRS5XZWJHTFJlbmRlcmVyJywgUkVWSVNJT04gKTsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307CisgICAgICAgICAgICAg
ICAgaWYgKCB0ZXh0dXJlLmZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgJiYgaW50ZXJuYWxGb3JtYXQg
PT09IF9nbC5ERVBUSF9DT01QT05FTlQgKSB7CiAKLSAgICAgICAgdmFyIF9jYW52YXMgPSBwYXJh
bWV0ZXJzLmNhbnZhcyAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5jYW52YXMgOiBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50TlMoICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2NhbnZh
cycgKSwKLSAgICAgICAgICAgIF9jb250ZXh0ID0gcGFyYW1ldGVycy5jb250ZXh0ICE9PSB1bmRl
ZmluZWQgPyBwYXJhbWV0ZXJzLmNvbnRleHQgOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgZXJyb3IgSU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQg
aWYgZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8g
REVQVEhfQ09NUE9ORU5UIGFuZCB0eXBlIGlzIG5vdCBVTlNJR05FRF9TSE9SVCBvciBVTlNJR05F
RF9JTlQKKyAgICAgICAgICAgICAgICAgICAgLy8gKGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3Jl
Z2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvV0VCR0xfZGVwdGhfdGV4dHVyZS8pCisgICAgICAgICAg
ICAgICAgICAgIGlmICggdGV4dHVyZS50eXBlICE9PSBVbnNpZ25lZFNob3J0VHlwZSAmJiB0ZXh0
dXJlLnR5cGUgIT09IFVuc2lnbmVkSW50VHlwZSApIHsKIAotICAgICAgICAgICAgX2FscGhhID0g
cGFyYW1ldGVycy5hbHBoYSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5hbHBoYSA6IGZhbHNl
LAotICAgICAgICAgICAgX2RlcHRoID0gcGFyYW1ldGVycy5kZXB0aCAhPT0gdW5kZWZpbmVkID8g
cGFyYW1ldGVycy5kZXB0aCA6IHRydWUsCi0gICAgICAgICAgICBfc3RlbmNpbCA9IHBhcmFtZXRl
cnMuc3RlbmNpbCAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5zdGVuY2lsIDogdHJ1ZSwKLSAg
ICAgICAgICAgIF9hbnRpYWxpYXMgPSBwYXJhbWV0ZXJzLmFudGlhbGlhcyAhPT0gdW5kZWZpbmVk
ID8gcGFyYW1ldGVycy5hbnRpYWxpYXMgOiBmYWxzZSwKLSAgICAgICAgICAgIF9wcmVtdWx0aXBs
aWVkQWxwaGEgPSBwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSAhPT0gdW5kZWZpbmVkID8g
cGFyYW1ldGVycy5wcmVtdWx0aXBsaWVkQWxwaGEgOiB0cnVlLAotICAgICAgICAgICAgX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlciA9IHBhcmFtZXRlcnMucHJlc2VydmVEcmF3aW5nQnVmZmVyICE9PSB1
bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA6IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjog
VXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQg
RGVwdGhUZXh0dXJlLicgKTsKIAotICAgICAgICB2YXIgbGlnaHRzID0gW107CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBVbnNpZ25lZFNob3J0VHlwZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlwZSApOwog
Ci0gICAgICAgIHZhciBjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7CisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICB2YXIgbW9ycGhJbmZsdWVuY2VzID0gbmV3IEZsb2F0MzJBcnJheSgg
OCApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB2YXIgc3ByaXRlcyA9IFtdOwotICAg
ICAgICB2YXIgbGVuc0ZsYXJlcyA9IFtdOworICAgICAgICAgICAgICAgIC8vIERlcHRoIHN0ZW5j
aWwgdGV4dHVyZXMgbmVlZCB0aGUgREVQVEhfU1RFTkNJTCBpbnRlcm5hbCBmb3JtYXQKKyAgICAg
ICAgICAgICAgICAvLyAoaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0
ZW5zaW9ucy9XRUJHTF9kZXB0aF90ZXh0dXJlLykKKyAgICAgICAgICAgICAgICBpZiAoIHRleHR1
cmUuZm9ybWF0ID09PSBEZXB0aFN0ZW5jaWxGb3JtYXQgKSB7CiAKLSAgICAgICAgLy8gcHVibGlj
IHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBfZ2wuREVQ
VEhfU1RFTkNJTDsKIAotICAgICAgICB0aGlzLmRvbUVsZW1lbnQgPSBfY2FudmFzOwotICAgICAg
ICB0aGlzLmNvbnRleHQgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXJyb3Ig
SU5WQUxJRF9PUEVSQVRJT04gaXMgZ2VuZXJhdGVkIGJ5IHRleEltYWdlMkQgaWYgZm9ybWF0IGFu
ZCBpbnRlcm5hbGZvcm1hdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gREVQVEhfU1RFTkNJ
TCBhbmQgdHlwZSBpcyBub3QgVU5TSUdORURfSU5UXzI0XzhfV0VCR0wuCisgICAgICAgICAgICAg
ICAgICAgIC8vIChodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNp
b25zL1dFQkdMX2RlcHRoX3RleHR1cmUvKQorICAgICAgICAgICAgICAgICAgICBpZiAoIHRleHR1
cmUudHlwZSAhPT0gVW5zaWduZWRJbnQyNDhUeXBlICkgewogCi0gICAgICAgIC8vIGNsZWFyaW5n
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRl
cmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhU
ZXh0dXJlLicgKTsKIAotICAgICAgICB0aGlzLmF1dG9DbGVhciA9IHRydWU7Ci0gICAgICAgIHRo
aXMuYXV0b0NsZWFyQ29sb3IgPSB0cnVlOwotICAgICAgICB0aGlzLmF1dG9DbGVhckRlcHRoID0g
dHJ1ZTsKLSAgICAgICAgdGhpcy5hdXRvQ2xlYXJTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUudHlwZSA9IFVuc2lnbmVkSW50MjQ4VHlwZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHRleHR1cmUudHlwZSApOwog
Ci0gICAgICAgIC8vIHNjZW5lIGdyYXBoCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICB0aGlzLnNvcnRPYmplY3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
Ly8gdXNlci1kZWZpbmVkIGNsaXBwaW5nCisgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2Uy
RCggX2dsLlRFWFRVUkVfMkQsIDAsIGludGVybmFsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2Uu
aGVpZ2h0LCAwLCBnbEZvcm1hdCwgZ2xUeXBlLCBudWxsICk7CiAKLSAgICAgICAgdGhpcy5jbGlw
cGluZ1BsYW5lcyA9IFtdOwotICAgICAgICB0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkID0gZmFs
c2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0ZXh0dXJlLmlzRGF0YVRleHR1cmUgKSB7CiAK
LSAgICAgICAgLy8gcGh5c2ljYWxseSBiYXNlZCBzaGFkaW5nCisgICAgICAgICAgICAgICAgLy8g
dXNlIG1hbnVhbGx5IGNyZWF0ZWQgbWlwbWFwcyBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAg
ICAvLyBpZiB0aGVyZSBhcmUgbm8gbWFudWFsIG1pcG1hcHMKKyAgICAgICAgICAgICAgICAvLyBz
ZXQgMCBsZXZlbCBtaXBtYXAgYW5kIHRoZW4gdXNlIEdMIHRvIGdlbmVyYXRlIG90aGVyIG1pcG1h
cCBsZXZlbHMKIAotICAgICAgICB0aGlzLmdhbW1hRmFjdG9yID0gMi4wOyAvLyBmb3IgYmFja3dh
cmRzIGNvbXBhdGliaWxpdHkKLSAgICAgICAgdGhpcy5nYW1tYUlucHV0ID0gZmFsc2U7Ci0gICAg
ICAgIHRoaXMuZ2FtbWFPdXRwdXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIG1pcG1h
cHMubGVuZ3RoID4gMCAmJiBpc1Bvd2VyT2ZUd29JbWFnZSApIHsKIAotICAgICAgICAvLyBwaHlz
aWNhbCBsaWdodHMKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IG1p
cG1hcHMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgdGhpcy5waHlzaWNhbGx5
Q29ycmVjdExpZ2h0cyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgbWlwbWFwID0g
bWlwbWFwc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UyRCgg
X2dsLlRFWFRVUkVfMkQsIGksIGdsRm9ybWF0LCBtaXBtYXAud2lkdGgsIG1pcG1hcC5oZWlnaHQs
IDAsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcC5kYXRhICk7CiAKLSAgICAgICAgLy8gdG9uZSBt
YXBwaW5nCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnRvbmVNYXBwaW5n
ID0gTGluZWFyVG9uZU1hcHBpbmc7Ci0gICAgICAgIHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZSA9
IDEuMDsKLSAgICAgICAgdGhpcy50b25lTWFwcGluZ1doaXRlUG9pbnQgPSAxLjA7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fbWF4TWlwTGV2ZWwgPSBtaXBtYXBzLmxlbmd0
aCAtIDE7CiAKLSAgICAgICAgLy8gbW9ycGhzCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAot
ICAgICAgICB0aGlzLm1heE1vcnBoVGFyZ2V0cyA9IDg7Ci0gICAgICAgIHRoaXMubWF4TW9ycGhO
b3JtYWxzID0gNDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UyRCggX2dsLlRF
WFRVUkVfMkQsIDAsIGdsRm9ybWF0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLCBnbEZv
cm1hdCwgZ2xUeXBlLCBpbWFnZS5kYXRhICk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQ
cm9wZXJ0aWVzLl9fbWF4TWlwTGV2ZWwgPSAwOwogCi0gICAgICAgIC8vIGludGVybmFsIHByb3Bl
cnRpZXMKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgdmFyIF90aGlzID0gdGhpcywKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHRleHR1cmUuaXNDb21wcmVzc2VkVGV4dHVyZSApIHsKIAot
ICAgICAgICAgICAgLy8gaW50ZXJuYWwgc3RhdGUgY2FjaGUKKyAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGlsID0gbWlwbWFwcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAg
ICAgICAgICAgX2N1cnJlbnRQcm9ncmFtID0gbnVsbCwKLSAgICAgICAgICAgIF9jdXJyZW50UmVu
ZGVyVGFyZ2V0ID0gbnVsbCwKLSAgICAgICAgICAgIF9jdXJyZW50RnJhbWVidWZmZXIgPSBudWxs
LAotICAgICAgICAgICAgX2N1cnJlbnRNYXRlcmlhbElkID0gLSAxLAotICAgICAgICAgICAgX2N1
cnJlbnRHZW9tZXRyeVByb2dyYW0gPSAnJywKKyAgICAgICAgICAgICAgICAgICAgbWlwbWFwID0g
bWlwbWFwc1sgaSBdOwogCi0gICAgICAgICAgICBfY3VycmVudENhbWVyYSA9IG51bGwsCi0gICAg
ICAgICAgICBfY3VycmVudEFycmF5Q2FtZXJhID0gbnVsbCwKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCB0ZXh0dXJlLmZvcm1hdCAhPT0gUkdCQUZvcm1hdCAmJiB0ZXh0dXJlLmZvcm1hdCAhPT0g
UkdCRm9ybWF0ICkgewogCi0gICAgICAgICAgICBfY3VycmVudFNjaXNzb3IgPSBuZXcgVmVjdG9y
NCgpLAotICAgICAgICAgICAgX2N1cnJlbnRTY2lzc29yVGVzdCA9IG51bGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHN0YXRlLmdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0cygpLmlu
ZGV4T2YoIGdsRm9ybWF0ICkgPiAtIDEgKSB7CiAKLSAgICAgICAgICAgIF9jdXJyZW50Vmlld3Bv
cnQgPSBuZXcgVmVjdG9yNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNv
bXByZXNzZWRUZXhJbWFnZTJEKCBfZ2wuVEVYVFVSRV8yRCwgaSwgZ2xGb3JtYXQsIG1pcG1hcC53
aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgbWlwbWFwLmRhdGEgKTsKIAotICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgIF91c2VkVGV4
dHVyZVVuaXRzID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJl
c3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpJyApOwogCi0gICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBfd2lkdGggPSBf
Y2FudmFzLndpZHRoLAotICAgICAgICAgICAgX2hlaWdodCA9IF9jYW52YXMuaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBfcGl4ZWxSYXRpbyA9IDEs
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFnZTJEKCBfZ2wuVEVYVFVSRV8y
RCwgaSwgZ2xGb3JtYXQsIG1pcG1hcC53aWR0aCwgbWlwbWFwLmhlaWdodCwgMCwgZ2xGb3JtYXQs
IGdsVHlwZSwgbWlwbWFwLmRhdGEgKTsKIAotICAgICAgICAgICAgX3NjaXNzb3IgPSBuZXcgVmVj
dG9yNCggMCwgMCwgX3dpZHRoLCBfaGVpZ2h0ICksCi0gICAgICAgICAgICBfc2Npc3NvclRlc3Qg
PSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBfdmlld3BvcnQg
PSBuZXcgVmVjdG9yNCggMCwgMCwgX3dpZHRoLCBfaGVpZ2h0ICksCisgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBmcnVzdHVtCisgICAgICAgICAgICAgICAgdGV4dHVyZVByb3Bl
cnRpZXMuX19tYXhNaXBMZXZlbCA9IG1pcG1hcHMubGVuZ3RoIC0gMTsKIAotICAgICAgICAgICAg
X2ZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpLAorICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAg
ICAgICAgLy8gY2xpcHBpbmcKKyAgICAgICAgICAgICAgICAvLyByZWd1bGFyIFRleHR1cmUgKGlt
YWdlLCB2aWRlbywgY2FudmFzKQogCi0gICAgICAgICAgICBfY2xpcHBpbmcgPSBuZXcgV2ViR0xD
bGlwcGluZygpLAotICAgICAgICAgICAgX2NsaXBwaW5nRW5hYmxlZCA9IGZhbHNlLAotICAgICAg
ICAgICAgX2xvY2FsQ2xpcHBpbmdFbmFibGVkID0gZmFsc2UsCisgICAgICAgICAgICAgICAgLy8g
dXNlIG1hbnVhbGx5IGNyZWF0ZWQgbWlwbWFwcyBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAg
ICAvLyBpZiB0aGVyZSBhcmUgbm8gbWFudWFsIG1pcG1hcHMKKyAgICAgICAgICAgICAgICAvLyBz
ZXQgMCBsZXZlbCBtaXBtYXAgYW5kIHRoZW4gdXNlIEdMIHRvIGdlbmVyYXRlIG90aGVyIG1pcG1h
cCBsZXZlbHMKIAotICAgICAgICAgICAgLy8gY2FtZXJhIG1hdHJpY2VzIGNhY2hlCisgICAgICAg
ICAgICAgICAgaWYgKCBtaXBtYXBzLmxlbmd0aCA+IDAgJiYgaXNQb3dlck9mVHdvSW1hZ2UgKSB7
CiAKLSAgICAgICAgICAgIF9wcm9qU2NyZWVuTWF0cml4ID0gbmV3IE1hdHJpeDQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IG1pcG1hcHMubGVuZ3RoOyBpIDwg
aWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgIF92ZWN0b3IzID0gbmV3IFZlY3RvcjMoKSwKLSAg
ICAgICAgICAgIF9tYXRyaXg0ID0gbmV3IE1hdHJpeDQoKSwKLSAgICAgICAgICAgIF9tYXRyaXg0
MiA9IG5ldyBNYXRyaXg0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXAgPSBtaXBt
YXBzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50ZXhJbWFnZTJEKCBfZ2wu
VEVYVFVSRV8yRCwgaSwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIG1pcG1hcCApOwogCi0g
ICAgICAgICAgICAvLyBsaWdodCBhcnJheXMgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBfbGlnaHRzID0geworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmdl
bmVyYXRlTWlwbWFwcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvcGVy
dGllcy5fX21heE1pcExldmVsID0gbWlwbWFwcy5sZW5ndGggLSAxOwogCi0gICAgICAgICAgICAg
ICAgaGFzaDogJycsCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAg
IGFtYmllbnQ6IFsgMCwgMCwgMCBdLAotICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsOiBbXSwK
LSAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbFNoYWRvd01hcDogW10sCi0gICAgICAgICAgICAg
ICAgZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6IFtdLAotICAgICAgICAgICAgICAgIHNwb3Q6IFtd
LAotICAgICAgICAgICAgICAgIHNwb3RTaGFkb3dNYXA6IFtdLAotICAgICAgICAgICAgICAgIHNw
b3RTaGFkb3dNYXRyaXg6IFtdLAotICAgICAgICAgICAgICAgIHJlY3RBcmVhOiBbXSwKLSAgICAg
ICAgICAgICAgICBwb2ludDogW10sCi0gICAgICAgICAgICAgICAgcG9pbnRTaGFkb3dNYXA6IFtd
LAotICAgICAgICAgICAgICAgIHBvaW50U2hhZG93TWF0cml4OiBbXSwKLSAgICAgICAgICAgICAg
ICBoZW1pOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUudGV4SW1hZ2UyRCggX2dsLlRF
WFRVUkVfMkQsIDAsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWFnZSApOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlUHJvcGVydGllcy5fX21heE1pcExldmVsID0gMDsKIAotICAg
ICAgICAgICAgICAgIHNoYWRvd3M6IFtdCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB9LAorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBpbmZvCisgICAgICAgICAgICBp
ZiAoIHRleHR1cmVOZWVkc0dlbmVyYXRlTWlwbWFwcyggdGV4dHVyZSwgaXNQb3dlck9mVHdvSW1h
Z2UgKSApIHsKIAotICAgICAgICAgICAgX2luZm9NZW1vcnkgPSB7Ci0gICAgICAgICAgICAgICAg
Z2VvbWV0cmllczogMCwKLSAgICAgICAgICAgICAgICB0ZXh0dXJlczogMAotICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZU1pcG1hcCggX2dsLlRFWFRVUkVfMkQsIHRleHR1
cmUsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQgKTsKIAotICAgICAgICAgICAgX2luZm9SZW5k
ZXIgPSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmcmFtZTogMCwKLSAgICAg
ICAgICAgICAgICBjYWxsczogMCwKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlczogMCwKLSAgICAg
ICAgICAgICAgICBmYWNlczogMCwKLSAgICAgICAgICAgICAgICBwb2ludHM6IDAKKyAgICAgICAg
ICAgIHRleHR1cmVQcm9wZXJ0aWVzLl9fdmVyc2lvbiA9IHRleHR1cmUudmVyc2lvbjsKIAotICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICggdGV4dHVyZS5vblVwZGF0ZSApIHRleHR1cmUu
b25VcGRhdGUoIHRleHR1cmUgKTsKIAotICAgICAgICB0aGlzLmluZm8gPSB7CisgICAgICAgIH0K
IAotICAgICAgICAgICAgcmVuZGVyOiBfaW5mb1JlbmRlciwKLSAgICAgICAgICAgIG1lbW9yeTog
X2luZm9NZW1vcnksCi0gICAgICAgICAgICBwcm9ncmFtczogbnVsbAorICAgICAgICAvLyBSZW5k
ZXIgdGFyZ2V0cwogCi0gICAgICAgIH07CisgICAgICAgIC8vIFNldHVwIHN0b3JhZ2UgZm9yIHRh
cmdldCB0ZXh0dXJlIGFuZCBiaW5kIGl0IHRvIGNvcnJlY3QgZnJhbWVidWZmZXIKKyAgICAgICAg
ZnVuY3Rpb24gc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIGZyYW1lYnVmZmVyLCByZW5kZXJUYXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHR1cmVUYXJnZXQgKSB7CiAKKyAgICAgICAgICAgIHZhciBnbEZv
cm1hdCA9IHV0aWxzLmNvbnZlcnQoIHJlbmRlclRhcmdldC50ZXh0dXJlLmZvcm1hdCApOworICAg
ICAgICAgICAgdmFyIGdsVHlwZSA9IHV0aWxzLmNvbnZlcnQoIHJlbmRlclRhcmdldC50ZXh0dXJl
LnR5cGUgKTsKKyAgICAgICAgICAgIHN0YXRlLnRleEltYWdlMkQoIHRleHR1cmVUYXJnZXQsIDAs
IGdsRm9ybWF0LCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQsIDAsIGds
Rm9ybWF0LCBnbFR5cGUsIG51bGwgKTsKKyAgICAgICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIo
IF9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIgKTsKKyAgICAgICAgICAgIF9nbC5mcmFtZWJ1
ZmZlclRleHR1cmUyRCggX2dsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0ZXh0dXJlVGFyZ2V0
LCBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LnRleHR1cmUgKS5fX3dlYmdsVGV4dHVyZSwg
MCApOworICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBu
dWxsICk7CiAKLSAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAgICAgICB9CiAKLSAgICAgICAgdmFy
IF9nbDsKKyAgICAgICAgLy8gU2V0dXAgc3RvcmFnZSBmb3IgaW50ZXJuYWwgZGVwdGgvc3RlbmNp
bCBidWZmZXJzIGFuZCBiaW5kIHRvIGNvcnJlY3QgZnJhbWVidWZmZXIKKyAgICAgICAgZnVuY3Rp
b24gc2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCByZW5kZXJidWZmZXIsIHJlbmRlclRhcmdldCAp
IHsKIAotICAgICAgICB0cnkgeworICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoIF9n
bC5SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciApOwogCi0gICAgICAgICAgICB2YXIgY29udGV4
dEF0dHJpYnV0ZXMgPSB7Ci0gICAgICAgICAgICAgICAgYWxwaGE6IF9hbHBoYSwKLSAgICAgICAg
ICAgICAgICBkZXB0aDogX2RlcHRoLAotICAgICAgICAgICAgICAgIHN0ZW5jaWw6IF9zdGVuY2ls
LAotICAgICAgICAgICAgICAgIGFudGlhbGlhczogX2FudGlhbGlhcywKLSAgICAgICAgICAgICAg
ICBwcmVtdWx0aXBsaWVkQWxwaGE6IF9wcmVtdWx0aXBsaWVkQWxwaGEsCi0gICAgICAgICAgICAg
ICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBfcHJlc2VydmVEcmF3aW5nQnVmZmVyCi0gICAgICAg
ICAgICB9OworICAgICAgICAgICAgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYgISBy
ZW5kZXJUYXJnZXQuc3RlbmNpbEJ1ZmZlciApIHsKIAotICAgICAgICAgICAgX2dsID0gX2NvbnRl
eHQgfHwgX2NhbnZhcy5nZXRDb250ZXh0KCAnd2ViZ2wnLCBjb250ZXh0QXR0cmlidXRlcyApIHx8
IF9jYW52YXMuZ2V0Q29udGV4dCggJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRBdHRyaWJ1
dGVzICk7CisgICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoIF9nbC5SRU5E
RVJCVUZGRVIsIF9nbC5ERVBUSF9DT01QT05FTlQxNiwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5k
ZXJUYXJnZXQuaGVpZ2h0ICk7CisgICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKCBfZ2wuRlJBTUVCVUZGRVIsIF9nbC5ERVBUSF9BVFRBQ0hNRU5ULCBfZ2wuUkVOREVS
QlVGRkVSLCByZW5kZXJidWZmZXIgKTsKIAotICAgICAgICAgICAgaWYgKCBfZ2wgPT09IG51bGwg
KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhCdWZmZXIgJiYg
cmVuZGVyVGFyZ2V0LnN0ZW5jaWxCdWZmZXIgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIF9j
YW52YXMuZ2V0Q29udGV4dCggJ3dlYmdsJyApICE9PSBudWxsICkgeworICAgICAgICAgICAgICAg
IF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKCBfZ2wuUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhfU1RF
TkNJTCwgcmVuZGVyVGFyZ2V0LndpZHRoLCByZW5kZXJUYXJnZXQuaGVpZ2h0ICk7CisgICAgICAg
ICAgICAgICAgX2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKCBfZ2wuRlJBTUVCVUZGRVIsIF9n
bC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIF9nbC5SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZl
ciApOwogCi0gICAgICAgICAgICAgICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBj
b250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLic7CisgICAgICAgICAgICB9IGVs
c2UgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2UgZG9uJ3Qgc3VwcG9ydCAhZGVwdGggIXN0ZW5jaWwKKyAgICAgICAgICAgICAgICBfZ2wu
cmVuZGVyYnVmZmVyU3RvcmFnZSggX2dsLlJFTkRFUkJVRkZFUiwgX2dsLlJHQkE0LCByZW5kZXJU
YXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTsKIAotICAgICAgICAgICAgICAgICAg
ICB0aHJvdyAnRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4nOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoIF9n
bC5SRU5ERVJCVUZGRVIsIG51bGwgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAg
ICAgICAgICAgIC8vIFNvbWUgZXhwZXJpbWVudGFsLXdlYmdsIGltcGxlbWVudGF0aW9ucyBkbyBu
b3QgaGF2ZSBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQKKyAgICAgICAgLy8gU2V0dXAgcmVzb3Vy
Y2VzIGZvciBhIERlcHRoIFRleHR1cmUgZm9yIGEgRkJPIChuZWVkcyBhbiBleHRlbnNpb24pCisg
ICAgICAgIGZ1bmN0aW9uIHNldHVwRGVwdGhUZXh0dXJlKCBmcmFtZWJ1ZmZlciwgcmVuZGVyVGFy
Z2V0ICkgewogCi0gICAgICAgICAgICBpZiAoIF9nbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQg
PT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhciBpc0N1YmUgPSAoIHJlbmRlclRhcmdl
dCAmJiByZW5kZXJUYXJnZXQuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUgKTsKKyAgICAgICAgICAg
IGlmICggaXNDdWJlICkgdGhyb3cgbmV3IEVycm9yKCAnRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUg
cmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCcgKTsKIAotICAgICAgICAgICAgICAgIF9n
bC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBf
Z2wuYmluZEZyYW1lYnVmZmVyKCBfZ2wuRlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ3JhbmdlTWluJzogMSwgJ3JhbmdlTWF4JzogMSwg
J3ByZWNpc2lvbic6IDEgfTsKKyAgICAgICAgICAgIGlmICggISAoIHJlbmRlclRhcmdldC5kZXB0
aFRleHR1cmUgJiYgcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSApICkg
ewogCi0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
ICdyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUu
RGVwdGhUZXh0dXJlJyApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIF9jYW52YXMu
YWRkRXZlbnRMaXN0ZW5lciggJ3dlYmdsY29udGV4dGxvc3QnLCBvbkNvbnRleHRMb3N0LCBmYWxz
ZSApOwotCi0gICAgICAgIH0gY2F0Y2ggKCBlcnJvciApIHsKKyAgICAgICAgICAgIC8vIHVwbG9h
ZCBhbiBlbXB0eSBkZXB0aCB0ZXh0dXJlIHdpdGggZnJhbWVidWZmZXIgc2l6ZQorICAgICAgICAg
ICAgaWYgKCAhIHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlICkuX193
ZWJnbFRleHR1cmUgfHwKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmRlcHRoVGV4
dHVyZS5pbWFnZS53aWR0aCAhPT0gcmVuZGVyVGFyZ2V0LndpZHRoIHx8CisgICAgICAgICAgICAg
ICAgICAgIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0ICE9PSByZW5kZXJU
YXJnZXQuaGVpZ2h0ICkgewogCi0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2Vi
R0xSZW5kZXJlcjogJyArIGVycm9yICk7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmRl
cHRoVGV4dHVyZS5pbWFnZS53aWR0aCA9IHJlbmRlclRhcmdldC53aWR0aDsKKyAgICAgICAgICAg
ICAgICByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCA9IHJlbmRlclRhcmdl
dC5oZWlnaHQ7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5uZWVk
c1VwZGF0ZSA9IHRydWU7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgIHZh
ciBleHRlbnNpb25zID0gbmV3IFdlYkdMRXh0ZW5zaW9ucyggX2dsICk7CisgICAgICAgICAgICBz
ZXRUZXh0dXJlMkQoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUsIDAgKTsKIAotICAgICAgICBl
eHRlbnNpb25zLmdldCggJ1dFQkdMX2RlcHRoX3RleHR1cmUnICk7Ci0gICAgICAgIGV4dGVuc2lv
bnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICk7Ci0gICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAn
T0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJyApOwotICAgICAgICBleHRlbnNpb25zLmdldCggJ09F
U190ZXh0dXJlX2hhbGZfZmxvYXQnICk7Ci0gICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VTX3Rl
eHR1cmVfaGFsZl9mbG9hdF9saW5lYXInICk7Ci0gICAgICAgIGV4dGVuc2lvbnMuZ2V0KCAnT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApOwotICAgICAgICBleHRlbnNpb25zLmdldCggJ0FOR0xF
X2luc3RhbmNlZF9hcnJheXMnICk7CisgICAgICAgICAgICB2YXIgd2ViZ2xEZXB0aFRleHR1cmUg
PSBwcm9wZXJ0aWVzLmdldCggcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSApLl9fd2ViZ2xUZXh0
dXJlOwogCi0gICAgICAgIGlmICggZXh0ZW5zaW9ucy5nZXQoICdPRVNfZWxlbWVudF9pbmRleF91
aW50JyApICkgeworICAgICAgICAgICAgaWYgKCByZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlLmZv
cm1hdCA9PT0gRGVwdGhGb3JtYXQgKSB7CiAKLSAgICAgICAgICAgIEJ1ZmZlckdlb21ldHJ5Lk1h
eEluZGV4ID0gNDI5NDk2NzI5NjsKKyAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0
dXJlMkQoIF9nbC5GUkFNRUJVRkZFUiwgX2dsLkRFUFRIX0FUVEFDSE1FTlQsIF9nbC5URVhUVVJF
XzJELCB3ZWJnbERlcHRoVGV4dHVyZSwgMCApOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUuZm9ybWF0ID09PSBEZXB0aFN0ZW5j
aWxGb3JtYXQgKSB7CiAKLSAgICAgICAgdmFyIGNhcGFiaWxpdGllcyA9IG5ldyBXZWJHTENhcGFi
aWxpdGllcyggX2dsLCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzICk7CisgICAgICAgICAgICAgICAg
X2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKCBfZ2wuRlJBTUVCVUZGRVIsIF9nbC5ERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIF9nbC5URVhUVVJFXzJELCB3ZWJnbERlcHRoVGV4dHVyZSwgMCApOwog
Ci0gICAgICAgIHZhciBzdGF0ZSA9IG5ldyBXZWJHTFN0YXRlKCBfZ2wsIGV4dGVuc2lvbnMsIHBh
cmFtVGhyZWVUb0dMICk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIHZhciBwcm9w
ZXJ0aWVzID0gbmV3IFdlYkdMUHJvcGVydGllcygpOwotICAgICAgICB2YXIgdGV4dHVyZXMgPSBu
ZXcgV2ViR0xUZXh0dXJlcyggX2dsLCBleHRlbnNpb25zLCBzdGF0ZSwgcHJvcGVydGllcywgY2Fw
YWJpbGl0aWVzLCBwYXJhbVRocmVlVG9HTCwgX2luZm9NZW1vcnkgKTsKLSAgICAgICAgdmFyIGF0
dHJpYnV0ZXMgPSBuZXcgV2ViR0xBdHRyaWJ1dGVzKCBfZ2wgKTsKLSAgICAgICAgdmFyIGdlb21l
dHJpZXMgPSBuZXcgV2ViR0xHZW9tZXRyaWVzKCBfZ2wsIGF0dHJpYnV0ZXMsIF9pbmZvTWVtb3J5
ICk7Ci0gICAgICAgIHZhciBvYmplY3RzID0gbmV3IFdlYkdMT2JqZWN0cyggX2dsLCBnZW9tZXRy
aWVzLCBfaW5mb1JlbmRlciApOwotICAgICAgICB2YXIgcHJvZ3JhbUNhY2hlID0gbmV3IFdlYkdM
UHJvZ3JhbXMoIHRoaXMsIGNhcGFiaWxpdGllcyApOwotICAgICAgICB2YXIgbGlnaHRDYWNoZSA9
IG5ldyBXZWJHTExpZ2h0cygpOwotICAgICAgICB2YXIgcmVuZGVyTGlzdHMgPSBuZXcgV2ViR0xS
ZW5kZXJMaXN0cygpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggJ1Vua25vd24g
ZGVwdGhUZXh0dXJlIGZvcm1hdCcgKTsKIAotICAgICAgICB2YXIgYmFja2dyb3VuZCA9IG5ldyBX
ZWJHTEJhY2tncm91bmQoIHRoaXMsIHN0YXRlLCBvYmplY3RzLCBfcHJlbXVsdGlwbGllZEFscGhh
ICk7Ci0gICAgICAgIHZhciB2ciA9IG5ldyBXZWJWUk1hbmFnZXIoIHRoaXMgKTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICB0aGlzLmluZm8ucHJvZ3JhbXMgPSBwcm9ncmFtQ2FjaGUucHJvZ3Jh
bXM7CisgICAgICAgIH0KIAotICAgICAgICB2YXIgYnVmZmVyUmVuZGVyZXIgPSBuZXcgV2ViR0xC
dWZmZXJSZW5kZXJlciggX2dsLCBleHRlbnNpb25zLCBfaW5mb1JlbmRlciApOwotICAgICAgICB2
YXIgaW5kZXhlZEJ1ZmZlclJlbmRlcmVyID0gbmV3IFdlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVy
KCBfZ2wsIGV4dGVuc2lvbnMsIF9pbmZvUmVuZGVyICk7CisgICAgICAgIC8vIFNldHVwIEdMIHJl
c291cmNlcyBmb3IgYSBub24tdGV4dHVyZSBkZXB0aCBidWZmZXIKKyAgICAgICAgZnVuY3Rpb24g
c2V0dXBEZXB0aFJlbmRlcmJ1ZmZlciggcmVuZGVyVGFyZ2V0ICkgewogCi0gICAgICAgIC8vCisg
ICAgICAgICAgICB2YXIgcmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCBy
ZW5kZXJUYXJnZXQgKTsKIAotICAgICAgICBmdW5jdGlvbiBnZXRUYXJnZXRQaXhlbFJhdGlvKCkg
eworICAgICAgICAgICAgdmFyIGlzQ3ViZSA9ICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJU
YXJnZXRDdWJlID09PSB0cnVlICk7CiAKLSAgICAgICAgICAgIHJldHVybiBfY3VycmVudFJlbmRl
clRhcmdldCA9PT0gbnVsbCA/IF9waXhlbFJhdGlvIDogMTsKKyAgICAgICAgICAgIGlmICggcmVu
ZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCBpc0N1YmUgKSB0aHJvdyBuZXcgRXJyb3IoICd0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBz
dXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cycgKTsKIAotICAgICAgICBmdW5jdGlvbiBz
ZXREZWZhdWx0R0xTdGF0ZSgpIHsKKyAgICAgICAgICAgICAgICBzZXR1cERlcHRoVGV4dHVyZSgg
cmVuZGVyVGFyZ2V0UHJvcGVydGllcy5fX3dlYmdsRnJhbWVidWZmZXIsIHJlbmRlclRhcmdldCAp
OwogCi0gICAgICAgICAgICBzdGF0ZS5pbml0KCk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICBzdGF0ZS5zY2lzc29yKCBfY3VycmVudFNjaXNzb3IuY29weSggX3NjaXNzb3Ig
KS5tdWx0aXBseVNjYWxhciggX3BpeGVsUmF0aW8gKSApOwotICAgICAgICAgICAgc3RhdGUudmll
d3BvcnQoIF9jdXJyZW50Vmlld3BvcnQuY29weSggX3ZpZXdwb3J0ICkubXVsdGlwbHlTY2FsYXIo
IF9waXhlbFJhdGlvICkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGlzQ3ViZSApIHsKIAotICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJn
bERlcHRoYnVmZmVyID0gW107CiAKLSAgICAgICAgZnVuY3Rpb24gcmVzZXRHTFN0YXRlKCkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgewogCi0g
ICAgICAgICAgICBfY3VycmVudFByb2dyYW0gPSBudWxsOwotICAgICAgICAgICAgX2N1cnJlbnRD
YW1lcmEgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZl
ciggX2dsLkZSQU1FQlVGRkVSLCByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1
ZmZlclsgaSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlclsgaSBdID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBSZW5kZXJCdWZmZXJTdG9yYWdlKCByZW5kZXJU
YXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xEZXB0aGJ1ZmZlclsgaSBdLCByZW5kZXJUYXJnZXQgKTsK
IAotICAgICAgICAgICAgX2N1cnJlbnRHZW9tZXRyeVByb2dyYW0gPSAnJzsKLSAgICAgICAgICAg
IF9jdXJyZW50TWF0ZXJpYWxJZCA9IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBzdGF0ZS5yZXNldCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKCBfZ2wuRlJBTUVC
VUZGRVIsIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyICk7CisgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVmZmVy
ID0gX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBzZXR1cFJl
bmRlckJ1ZmZlclN0b3JhZ2UoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbERlcHRoYnVm
ZmVyLCByZW5kZXJUYXJnZXQgKTsKIAotICAgICAgICBzZXREZWZhdWx0R0xTdGF0ZSgpOworICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmNvbnRleHQgPSBfZ2w7Ci0gICAgICAgIHRo
aXMuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOwotICAgICAgICB0aGlzLmV4dGVuc2lvbnMg
PSBleHRlbnNpb25zOwotICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICAg
ICAgICB0aGlzLnJlbmRlckxpc3RzID0gcmVuZGVyTGlzdHM7Ci0gICAgICAgIHRoaXMuc3RhdGUg
PSBzdGF0ZTsKLSAgICAgICAgdGhpcy52ciA9IHZyOworICAgICAgICAgICAgfQogCi0gICAgICAg
IC8vIHNoYWRvdyBtYXAKKyAgICAgICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoIF9nbC5GUkFN
RUJVRkZFUiwgbnVsbCApOwogCi0gICAgICAgIHZhciBzaGFkb3dNYXAgPSBuZXcgV2ViR0xTaGFk
b3dNYXAoIHRoaXMsIF9saWdodHMsIG9iamVjdHMsIGNhcGFiaWxpdGllcyApOworICAgICAgICB9
CiAKLSAgICAgICAgdGhpcy5zaGFkb3dNYXAgPSBzaGFkb3dNYXA7CisgICAgICAgIC8vIFNldCB1
cCBHTCByZXNvdXJjZXMgZm9yIHRoZSByZW5kZXIgdGFyZ2V0CisgICAgICAgIGZ1bmN0aW9uIHNl
dHVwUmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKSB7CiAKKyAgICAgICAgICAgIHZhciByZW5k
ZXJUYXJnZXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApOworICAg
ICAgICAgICAgdmFyIHRleHR1cmVQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRh
cmdldC50ZXh0dXJlICk7CiAKLSAgICAgICAgLy8gUGx1Z2lucworICAgICAgICAgICAgcmVuZGVy
VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25SZW5kZXJUYXJnZXREaXNwb3Nl
ICk7CiAKLSAgICAgICAgdmFyIHNwcml0ZVBsdWdpbiA9IG5ldyBTcHJpdGVQbHVnaW4oIHRoaXMs
IHNwcml0ZXMgKTsKLSAgICAgICAgdmFyIGxlbnNGbGFyZVBsdWdpbiA9IG5ldyBMZW5zRmxhcmVQ
bHVnaW4oIHRoaXMsIGxlbnNGbGFyZXMgKTsKKyAgICAgICAgICAgIHRleHR1cmVQcm9wZXJ0aWVz
Ll9fd2ViZ2xUZXh0dXJlID0gX2dsLmNyZWF0ZVRleHR1cmUoKTsKIAotICAgICAgICAvLyBBUEkK
KyAgICAgICAgICAgIGluZm8ubWVtb3J5LnRleHR1cmVzICsrOwogCi0gICAgICAgIHRoaXMuZ2V0
Q29udGV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBpc0N1YmUgPSAoIHJlbmRl
clRhcmdldC5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSA9PT0gdHJ1ZSApOworICAgICAgICAgICAg
dmFyIGlzVGFyZ2V0UG93ZXJPZlR3byA9IGlzUG93ZXJPZlR3byggcmVuZGVyVGFyZ2V0ICk7CiAK
LSAgICAgICAgICAgIHJldHVybiBfZ2w7CisgICAgICAgICAgICAvLyBTZXR1cCBmcmFtZWJ1ZmZl
cgogCi0gICAgICAgIH07CisgICAgICAgICAgICBpZiAoIGlzQ3ViZSApIHsKIAotICAgICAgICB0
aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gW107CiAKLSAgICAg
ICAgICAgIHJldHVybiBfZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDA7IGkgPCA2OyBpICsrICkgewogCi0gICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyWyBp
IF0gPSBfZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKIAotICAgICAgICB0aGlzLmZvcmNlQ29udGV4
dExvc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2
YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9sb3NlX2NvbnRleHQnICk7Ci0g
ICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiApIGV4dGVuc2lvbi5sb3NlQ29udGV4dCgpOworICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICB9OworICAgICAgICAgICAgICAgIHJlbmRlclRh
cmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyID0gX2dsLmNyZWF0ZUZyYW1lYnVmZmVy
KCk7CiAKLSAgICAgICAgdGhpcy5nZXRNYXhBbmlzb3Ryb3B5ID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gY2FwYWJpbGl0aWVzLmdldE1heEFuaXNv
dHJvcHkoKTsKKyAgICAgICAgICAgIC8vIFNldHVwIGNvbG9yIGJ1ZmZlcgogCi0gICAgICAgIH07
CisgICAgICAgICAgICBpZiAoIGlzQ3ViZSApIHsKIAotICAgICAgICB0aGlzLmdldFByZWNpc2lv
biA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggX2ds
LlRFWFRVUkVfQ1VCRV9NQVAsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7Cisg
ICAgICAgICAgICAgICAgc2V0VGV4dHVyZVBhcmFtZXRlcnMoIF9nbC5URVhUVVJFX0NVQkVfTUFQ
LCByZW5kZXJUYXJnZXQudGV4dHVyZSwgaXNUYXJnZXRQb3dlck9mVHdvICk7CiAKLSAgICAgICAg
ICAgIHJldHVybiBjYXBhYmlsaXRpZXMucHJlY2lzaW9uOworICAgICAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IDY7IGkgKysgKSB7CiAKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRlclRhcmdldFByb3BlcnRpZXMuX193
ZWJnbEZyYW1lYnVmZmVyWyBpIF0sIHJlbmRlclRhcmdldCwgX2dsLkNPTE9SX0FUVEFDSE1FTlQw
LCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSApOwogCi0gICAgICAgIHRoaXMu
Z2V0UGl4ZWxSYXRpbyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHJldHVybiBfcGl4ZWxSYXRpbzsKKyAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmVO
ZWVkc0dlbmVyYXRlTWlwbWFwcyggcmVuZGVyVGFyZ2V0LnRleHR1cmUsIGlzVGFyZ2V0UG93ZXJP
ZlR3byApICkgewogCi0gICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTWlw
bWFwKCBfZ2wuVEVYVFVSRV9DVUJFX01BUCwgcmVuZGVyVGFyZ2V0LnRleHR1cmUsIHJlbmRlclRh
cmdldC53aWR0aCwgcmVuZGVyVGFyZ2V0LmhlaWdodCApOwogCi0gICAgICAgIHRoaXMuc2V0UGl4
ZWxSYXRpbyA9IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSByZXR1cm47CisgICAgICAgICAgICAg
ICAgc3RhdGUuYmluZFRleHR1cmUoIF9nbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsICk7CiAKLSAg
ICAgICAgICAgIF9waXhlbFJhdGlvID0gdmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICB0aGlzLnNldFNpemUoIF93aWR0aCwgX2hlaWdodCwgZmFsc2UgKTsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfMkQsIHRleHR1cmVQcm9w
ZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlICk7CisgICAgICAgICAgICAgICAgc2V0VGV4dHVyZVBhcmFt
ZXRlcnMoIF9nbC5URVhUVVJFXzJELCByZW5kZXJUYXJnZXQudGV4dHVyZSwgaXNUYXJnZXRQb3dl
ck9mVHdvICk7CisgICAgICAgICAgICAgICAgc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmUoIHJlbmRl
clRhcmdldFByb3BlcnRpZXMuX193ZWJnbEZyYW1lYnVmZmVyLCByZW5kZXJUYXJnZXQsIF9nbC5D
T0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfMkQgKTsKIAotICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGlmICggdGV4dHVyZU5lZWRzR2VuZXJhdGVNaXBtYXBzKCByZW5kZXJUYXJnZXQu
dGV4dHVyZSwgaXNUYXJnZXRQb3dlck9mVHdvICkgKSB7CiAKLSAgICAgICAgdGhpcy5nZXRTaXpl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU1pcG1hcCggX2ds
LlRFWFRVUkVfMkQsIHJlbmRlclRhcmdldC50ZXh0dXJlLCByZW5kZXJUYXJnZXQud2lkdGgsIHJl
bmRlclRhcmdldC5oZWlnaHQgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB3aWR0aDogX3dpZHRoLAotICAgICAgICAgICAgICAgIGhlaWdodDogX2hlaWdodAotICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggX2dsLlRFWFRVUkVfMkQsIG51bGwgKTsKIAotICAgICAg
ICB0aGlzLnNldFNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQsIHVwZGF0ZVN0eWxlICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgZGV2aWNlID0gdnIuZ2V0RGV2aWNl
KCk7CisgICAgICAgICAgICAvLyBTZXR1cCBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzCiAKLSAg
ICAgICAgICAgIGlmICggZGV2aWNlICYmIGRldmljZS5pc1ByZXNlbnRpbmcgKSB7CisgICAgICAg
ICAgICBpZiAoIHJlbmRlclRhcmdldC5kZXB0aEJ1ZmZlciApIHsKIAotICAgICAgICAgICAgICAg
IGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IENhblwndCBjaGFuZ2Ugc2l6ZSB3
aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4nICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHNldHVwRGVwdGhSZW5kZXJidWZmZXIoIHJlbmRlclRhcmdldCAp
OwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIF93aWR0aCA9IHdpZHRoOwotICAgICAg
ICAgICAgX2hlaWdodCA9IGhlaWdodDsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBfY2FudmFz
LndpZHRoID0gd2lkdGggKiBfcGl4ZWxSYXRpbzsKLSAgICAgICAgICAgIF9jYW52YXMuaGVpZ2h0
ID0gaGVpZ2h0ICogX3BpeGVsUmF0aW87CisgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVJlbmRlclRh
cmdldE1pcG1hcCggcmVuZGVyVGFyZ2V0ICkgewogCi0gICAgICAgICAgICBpZiAoIHVwZGF0ZVN0
eWxlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0
LnRleHR1cmU7CisgICAgICAgICAgICB2YXIgaXNUYXJnZXRQb3dlck9mVHdvID0gaXNQb3dlck9m
VHdvKCByZW5kZXJUYXJnZXQgKTsKIAotICAgICAgICAgICAgICAgIF9jYW52YXMuc3R5bGUud2lk
dGggPSB3aWR0aCArICdweCc7Ci0gICAgICAgICAgICAgICAgX2NhbnZhcy5zdHlsZS5oZWlnaHQg
PSBoZWlnaHQgKyAncHgnOworICAgICAgICAgICAgaWYgKCB0ZXh0dXJlTmVlZHNHZW5lcmF0ZU1p
cG1hcHMoIHRleHR1cmUsIGlzVGFyZ2V0UG93ZXJPZlR3byApICkgewogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJlbmRlclRhcmdldC5pc1dlYkdMUmVuZGVy
VGFyZ2V0Q3ViZSA/IF9nbC5URVhUVVJFX0NVQkVfTUFQIDogX2dsLlRFWFRVUkVfMkQ7CisgICAg
ICAgICAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IHByb3BlcnRpZXMuZ2V0KCB0ZXh0dXJlICku
X193ZWJnbFRleHR1cmU7CiAKLSAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoIDAsIDAsIHdp
ZHRoLCBoZWlnaHQgKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggdGFyZ2V0
LCB3ZWJnbFRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZU1pcG1hcCggdGFyZ2V0
LCB0ZXh0dXJlLCByZW5kZXJUYXJnZXQud2lkdGgsIHJlbmRlclRhcmdldC5oZWlnaHQgKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5iaW5kVGV4dHVyZSggdGFyZ2V0LCBudWxsICk7CiAKLSAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmdldERyYXdpbmdCdWZmZXJTaXpl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgd2lkdGg6IF93aWR0aCAqIF9waXhlbFJhdGlvLAotICAgICAgICAgICAgICAg
IGhlaWdodDogX2hlaWdodCAqIF9waXhlbFJhdGlvCi0gICAgICAgICAgICB9OworICAgICAgICBm
dW5jdGlvbiB1cGRhdGVWaWRlb1RleHR1cmUoIHRleHR1cmUgKSB7CiAKLSAgICAgICAgfTsKKyAg
ICAgICAgICAgIHZhciBpZCA9IHRleHR1cmUuaWQ7CisgICAgICAgICAgICB2YXIgZnJhbWUgPSBp
bmZvLnJlbmRlci5mcmFtZTsKIAotICAgICAgICB0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplID0g
ZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0LCBwaXhlbFJhdGlvICkgeworICAgICAgICAgICAgLy8g
Q2hlY2sgdGhlIGxhc3QgZnJhbWUgd2UgdXBkYXRlZCB0aGUgVmlkZW9UZXh0dXJlCiAKLSAgICAg
ICAgICAgIF93aWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgX2hlaWdodCA9IGhlaWdodDsKKyAg
ICAgICAgICAgIGlmICggX3ZpZGVvVGV4dHVyZXNbIGlkIF0gIT09IGZyYW1lICkgewogCi0gICAg
ICAgICAgICBfcGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87CisgICAgICAgICAgICAgICAgX3ZpZGVv
VGV4dHVyZXNbIGlkIF0gPSBmcmFtZTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLnVwZGF0ZSgp
OwogCi0gICAgICAgICAgICBfY2FudmFzLndpZHRoID0gd2lkdGggKiBwaXhlbFJhdGlvOwotICAg
ICAgICAgICAgX2NhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBwaXhlbFJhdGlvOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0
ICk7CisgICAgICAgIH0KIAotICAgICAgICB9OworICAgICAgICB0aGlzLnNldFRleHR1cmUyRCA9
IHNldFRleHR1cmUyRDsKKyAgICAgICAgdGhpcy5zZXRUZXh0dXJlQ3ViZSA9IHNldFRleHR1cmVD
dWJlOworICAgICAgICB0aGlzLnNldFRleHR1cmVDdWJlRHluYW1pYyA9IHNldFRleHR1cmVDdWJl
RHluYW1pYzsKKyAgICAgICAgdGhpcy5zZXR1cFJlbmRlclRhcmdldCA9IHNldHVwUmVuZGVyVGFy
Z2V0OworICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCA9IHVwZGF0ZVJlbmRl
clRhcmdldE1pcG1hcDsKIAotICAgICAgICB0aGlzLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24gKCB4
LCB5LCB3aWR0aCwgaGVpZ2h0ICkgeworICAgIH0KIAotICAgICAgICAgICAgX3ZpZXdwb3J0LnNl
dCggeCwgX2hlaWdodCAtIHkgLSBoZWlnaHQsIHdpZHRoLCBoZWlnaHQgKTsKLSAgICAgICAgICAg
IHN0YXRlLnZpZXdwb3J0KCBfY3VycmVudFZpZXdwb3J0LmNvcHkoIF92aWV3cG9ydCApLm11bHRp
cGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciB0aGVz
cGl0ZSAvIGh0dHA6Ly93d3cudHdpdHRlci5jb20vdGhlc3BpdGUKKyAgICAgKi8KIAotICAgICAg
ICB9OworICAgIGZ1bmN0aW9uIFdlYkdMVXRpbHMoIGdsLCBleHRlbnNpb25zICkgewogCi0gICAg
ICAgIHRoaXMuc2V0U2Npc3NvciA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApIHsK
KyAgICAgICAgZnVuY3Rpb24gY29udmVydCggcCApIHsKIAotICAgICAgICAgICAgX3NjaXNzb3Iu
c2V0KCB4LCBfaGVpZ2h0IC0geSAtIGhlaWdodCwgd2lkdGgsIGhlaWdodCApOwotICAgICAgICAg
ICAgc3RhdGUuc2Npc3NvciggX2N1cnJlbnRTY2lzc29yLmNvcHkoIF9zY2lzc29yICkubXVsdGlw
bHlTY2FsYXIoIF9waXhlbFJhdGlvICkgKTsKKyAgICAgICAgICAgIHZhciBleHRlbnNpb247CiAK
LSAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICggcCA9PT0gUmVwZWF0V3JhcHBpbmcgKSByZXR1
cm4gZ2wuUkVQRUFUOworICAgICAgICAgICAgaWYgKCBwID09PSBDbGFtcFRvRWRnZVdyYXBwaW5n
ICkgcmV0dXJuIGdsLkNMQU1QX1RPX0VER0U7CisgICAgICAgICAgICBpZiAoIHAgPT09IE1pcnJv
cmVkUmVwZWF0V3JhcHBpbmcgKSByZXR1cm4gZ2wuTUlSUk9SRURfUkVQRUFUOwogCi0gICAgICAg
IHRoaXMuc2V0U2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoIGJvb2xlYW4gKSB7CisgICAgICAgICAg
ICBpZiAoIHAgPT09IE5lYXJlc3RGaWx0ZXIgKSByZXR1cm4gZ2wuTkVBUkVTVDsKKyAgICAgICAg
ICAgIGlmICggcCA9PT0gTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXIgKSByZXR1cm4gZ2wuTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVDsKKyAgICAgICAgICAgIGlmICggcCA9PT0gTmVhcmVzdE1pcE1h
cExpbmVhckZpbHRlciApIHJldHVybiBnbC5ORUFSRVNUX01JUE1BUF9MSU5FQVI7CiAKLSAgICAg
ICAgICAgIHN0YXRlLnNldFNjaXNzb3JUZXN0KCBfc2Npc3NvclRlc3QgPSBib29sZWFuICk7Cisg
ICAgICAgICAgICBpZiAoIHAgPT09IExpbmVhckZpbHRlciApIHJldHVybiBnbC5MSU5FQVI7Cisg
ICAgICAgICAgICBpZiAoIHAgPT09IExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXIgKSByZXR1cm4g
Z2wuTElORUFSX01JUE1BUF9ORUFSRVNUOworICAgICAgICAgICAgaWYgKCBwID09PSBMaW5lYXJN
aXBNYXBMaW5lYXJGaWx0ZXIgKSByZXR1cm4gZ2wuTElORUFSX01JUE1BUF9MSU5FQVI7CiAKLSAg
ICAgICAgfTsKKyAgICAgICAgICAgIGlmICggcCA9PT0gVW5zaWduZWRCeXRlVHlwZSApIHJldHVy
biBnbC5VTlNJR05FRF9CWVRFOworICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25lZFNob3J0
NDQ0NFR5cGUgKSByZXR1cm4gZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDsKKyAgICAgICAgICAg
IGlmICggcCA9PT0gVW5zaWduZWRTaG9ydDU1NTFUeXBlICkgcmV0dXJuIGdsLlVOU0lHTkVEX1NI
T1JUXzVfNV81XzE7CisgICAgICAgICAgICBpZiAoIHAgPT09IFVuc2lnbmVkU2hvcnQ1NjVUeXBl
ICkgcmV0dXJuIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81OwogCi0gICAgICAgIC8vIENsZWFyaW5n
CisgICAgICAgICAgICBpZiAoIHAgPT09IEJ5dGVUeXBlICkgcmV0dXJuIGdsLkJZVEU7CisgICAg
ICAgICAgICBpZiAoIHAgPT09IFNob3J0VHlwZSApIHJldHVybiBnbC5TSE9SVDsKKyAgICAgICAg
ICAgIGlmICggcCA9PT0gVW5zaWduZWRTaG9ydFR5cGUgKSByZXR1cm4gZ2wuVU5TSUdORURfU0hP
UlQ7CisgICAgICAgICAgICBpZiAoIHAgPT09IEludFR5cGUgKSByZXR1cm4gZ2wuSU5UOworICAg
ICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25lZEludFR5cGUgKSByZXR1cm4gZ2wuVU5TSUdORURf
SU5UOworICAgICAgICAgICAgaWYgKCBwID09PSBGbG9hdFR5cGUgKSByZXR1cm4gZ2wuRkxPQVQ7
CiAKLSAgICAgICAgdGhpcy5nZXRDbGVhckNvbG9yID0gYmFja2dyb3VuZC5nZXRDbGVhckNvbG9y
OwotICAgICAgICB0aGlzLnNldENsZWFyQ29sb3IgPSBiYWNrZ3JvdW5kLnNldENsZWFyQ29sb3I7
Ci0gICAgICAgIHRoaXMuZ2V0Q2xlYXJBbHBoYSA9IGJhY2tncm91bmQuZ2V0Q2xlYXJBbHBoYTsK
LSAgICAgICAgdGhpcy5zZXRDbGVhckFscGhhID0gYmFja2dyb3VuZC5zZXRDbGVhckFscGhhOwor
ICAgICAgICAgICAgaWYgKCBwID09PSBIYWxmRmxvYXRUeXBlICkgewogCi0gICAgICAgIHRoaXMu
Y2xlYXIgPSBmdW5jdGlvbiAoIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHsKKyAgICAgICAgICAg
ICAgICBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQn
ICk7CiAKLSAgICAgICAgICAgIHZhciBiaXRzID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIGV4
dGVuc2lvbiAhPT0gbnVsbCApIHJldHVybiBleHRlbnNpb24uSEFMRl9GTE9BVF9PRVM7CiAKLSAg
ICAgICAgICAgIGlmICggY29sb3IgPT09IHVuZGVmaW5lZCB8fCBjb2xvciApIGJpdHMgfD0gX2ds
LkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgICAgICAgICBpZiAoIGRlcHRoID09PSB1bmRlZmluZWQg
fHwgZGVwdGggKSBiaXRzIHw9IF9nbC5ERVBUSF9CVUZGRVJfQklUOwotICAgICAgICAgICAgaWYg
KCBzdGVuY2lsID09PSB1bmRlZmluZWQgfHwgc3RlbmNpbCApIGJpdHMgfD0gX2dsLlNURU5DSUxf
QlVGRkVSX0JJVDsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgX2dsLmNsZWFyKCBiaXRz
ICk7CisgICAgICAgICAgICBpZiAoIHAgPT09IEFscGhhRm9ybWF0ICkgcmV0dXJuIGdsLkFMUEhB
OworICAgICAgICAgICAgaWYgKCBwID09PSBSR0JGb3JtYXQgKSByZXR1cm4gZ2wuUkdCOworICAg
ICAgICAgICAgaWYgKCBwID09PSBSR0JBRm9ybWF0ICkgcmV0dXJuIGdsLlJHQkE7CisgICAgICAg
ICAgICBpZiAoIHAgPT09IEx1bWluYW5jZUZvcm1hdCApIHJldHVybiBnbC5MVU1JTkFOQ0U7Cisg
ICAgICAgICAgICBpZiAoIHAgPT09IEx1bWluYW5jZUFscGhhRm9ybWF0ICkgcmV0dXJuIGdsLkxV
TUlOQU5DRV9BTFBIQTsKKyAgICAgICAgICAgIGlmICggcCA9PT0gRGVwdGhGb3JtYXQgKSByZXR1
cm4gZ2wuREVQVEhfQ09NUE9ORU5UOworICAgICAgICAgICAgaWYgKCBwID09PSBEZXB0aFN0ZW5j
aWxGb3JtYXQgKSByZXR1cm4gZ2wuREVQVEhfU1RFTkNJTDsKIAotICAgICAgICB9OworICAgICAg
ICAgICAgaWYgKCBwID09PSBBZGRFcXVhdGlvbiApIHJldHVybiBnbC5GVU5DX0FERDsKKyAgICAg
ICAgICAgIGlmICggcCA9PT0gU3VidHJhY3RFcXVhdGlvbiApIHJldHVybiBnbC5GVU5DX1NVQlRS
QUNUOworICAgICAgICAgICAgaWYgKCBwID09PSBSZXZlcnNlU3VidHJhY3RFcXVhdGlvbiApIHJl
dHVybiBnbC5GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q7CiAKLSAgICAgICAgdGhpcy5jbGVhckNvbG9y
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCBwID09PSBaZXJvRmFjdG9yICkgcmV0
dXJuIGdsLlpFUk87CisgICAgICAgICAgICBpZiAoIHAgPT09IE9uZUZhY3RvciApIHJldHVybiBn
bC5PTkU7CisgICAgICAgICAgICBpZiAoIHAgPT09IFNyY0NvbG9yRmFjdG9yICkgcmV0dXJuIGds
LlNSQ19DT0xPUjsKKyAgICAgICAgICAgIGlmICggcCA9PT0gT25lTWludXNTcmNDb2xvckZhY3Rv
ciApIHJldHVybiBnbC5PTkVfTUlOVVNfU1JDX0NPTE9SOworICAgICAgICAgICAgaWYgKCBwID09
PSBTcmNBbHBoYUZhY3RvciApIHJldHVybiBnbC5TUkNfQUxQSEE7CisgICAgICAgICAgICBpZiAo
IHAgPT09IE9uZU1pbnVzU3JjQWxwaGFGYWN0b3IgKSByZXR1cm4gZ2wuT05FX01JTlVTX1NSQ19B
TFBIQTsKKyAgICAgICAgICAgIGlmICggcCA9PT0gRHN0QWxwaGFGYWN0b3IgKSByZXR1cm4gZ2wu
RFNUX0FMUEhBOworICAgICAgICAgICAgaWYgKCBwID09PSBPbmVNaW51c0RzdEFscGhhRmFjdG9y
ICkgcmV0dXJuIGdsLk9ORV9NSU5VU19EU1RfQUxQSEE7CiAKLSAgICAgICAgICAgIHRoaXMuY2xl
YXIoIHRydWUsIGZhbHNlLCBmYWxzZSApOworICAgICAgICAgICAgaWYgKCBwID09PSBEc3RDb2xv
ckZhY3RvciApIHJldHVybiBnbC5EU1RfQ09MT1I7CisgICAgICAgICAgICBpZiAoIHAgPT09IE9u
ZU1pbnVzRHN0Q29sb3JGYWN0b3IgKSByZXR1cm4gZ2wuT05FX01JTlVTX0RTVF9DT0xPUjsKKyAg
ICAgICAgICAgIGlmICggcCA9PT0gU3JjQWxwaGFTYXR1cmF0ZUZhY3RvciApIHJldHVybiBnbC5T
UkNfQUxQSEFfU0FUVVJBVEU7CiAKLSAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICggcCA9PT0g
UkdCX1MzVENfRFhUMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0IHx8Cisg
ICAgICAgICAgICAgICAgcCA9PT0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0IHx8IHAgPT09IFJHQkFf
UzNUQ19EWFQ1X0Zvcm1hdCApIHsKIAotICAgICAgICB0aGlzLmNsZWFyRGVwdGggPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKTsKIAotICAgICAgICAgICAgdGhpcy5jbGVhcigg
ZmFsc2UsIHRydWUsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgaWYgKCBleHRlbnNpb24gIT09
IG51bGwgKSB7CiAKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwID09PSBS
R0JfUzNUQ19EWFQxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwID09PSBSR0JBX1MzVENfRFhU
MV9Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OworICAgICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IFJHQkFfUzNUQ19EWFQzX0Zvcm1hdCAp
IHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggcCA9PT0gUkdCQV9TM1RDX0RYVDVfRm9ybWF0ICkgcmV0dXJuIGV4
dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDsKIAotICAgICAgICB0aGlzLmNs
ZWFyU3RlbmNpbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHRoaXMuY2xlYXIoIGZhbHNlLCBmYWxzZSwgdHJ1ZSApOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIH07CisgICAgICAgICAgICBpZiAoIHAgPT09IFJHQl9QVlJUQ180QlBQVjFfRm9ybWF0
IHx8IHAgPT09IFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0IHx8CisgICAgICAgICAgICAgICAgcCA9
PT0gUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0IHx8IHAgPT09IFJHQkFfUFZSVENfMkJQUFYxX0Zv
cm1hdCApIHsKIAotICAgICAgICB0aGlzLmNsZWFyVGFyZ2V0ID0gZnVuY3Rpb24gKCByZW5kZXJU
YXJnZXQsIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApIHsKKyAgICAgICAgICAgICAgICBleHRlbnNp
b24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKTsK
IAotICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJUYXJnZXQoIHJlbmRlclRhcmdldCApOwotICAg
ICAgICAgICAgdGhpcy5jbGVhciggY29sb3IsIGRlcHRoLCBzdGVuY2lsICk7CisgICAgICAgICAg
ICAgICAgaWYgKCBleHRlbnNpb24gIT09IG51bGwgKSB7CiAKLSAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBwID09PSBSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdCApIHJldHVybiBl
eHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBwID09PSBSR0JfUFZSVENfMkJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNp
b24uQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBwID09PSBSR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNP
TVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOworICAgICAgICAgICAgICAgICAgICBpZiAo
IHAgPT09IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJF
U1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc7CiAKLSAgICAgICAgLy8gUmVzZXQKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5yZXNldEdMU3RhdGUgPSByZXNldEdMU3RhdGU7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgaWYgKCBwID09PSBSR0JfRVRDMV9Gb3JtYXQgKSB7CiAKLSAgICAgICAgICAgIF9j
YW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dlYmdsY29udGV4dGxvc3QnLCBvbkNvbnRleHRM
b3N0LCBmYWxzZSApOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0
KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEnICk7CiAKLSAgICAgICAgICAgIHJlbmRl
ckxpc3RzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiAhPT0gbnVs
bCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDsKIAotICAgICAg
ICB9OworICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIEV2ZW50cworICAgICAgICAgICAgaWYg
KCBwID09PSBSR0JBX0FTVENfNHg0X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfNXg0X0Zvcm1h
dCB8fCBwID09PSBSR0JBX0FTVENfNXg1X0Zvcm1hdCB8fAorICAgICAgICAgICAgICAgIHAgPT09
IFJHQkFfQVNUQ182eDVfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ182eDZfRm9ybWF0IHx8IHAg
PT09IFJHQkFfQVNUQ184eDVfRm9ybWF0IHx8CisgICAgICAgICAgICAgICAgcCA9PT0gUkdCQV9B
U1RDXzh4Nl9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9BU1RDXzh4OF9Gb3JtYXQgfHwgcCA9PT0gUkdC
QV9BU1RDXzEweDVfRm9ybWF0IHx8CisgICAgICAgICAgICAgICAgcCA9PT0gUkdCQV9BU1RDXzEw
eDZfRm9ybWF0IHx8IHAgPT09IFJHQkFfQVNUQ18xMHg4X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FT
VENfMTB4MTBfRm9ybWF0IHx8CisgICAgICAgICAgICAgICAgcCA9PT0gUkdCQV9BU1RDXzEyeDEw
X0Zvcm1hdCB8fCBwID09PSBSR0JBX0FTVENfMTJ4MTJfRm9ybWF0ICkgewogCi0gICAgICAgIGZ1
bmN0aW9uIG9uQ29udGV4dExvc3QoIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIGV4dGVuc2lv
biA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMnICk7CiAK
LSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgaWYg
KCBleHRlbnNpb24gIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgIHJlc2V0R0xTdGF0ZSgpOwot
ICAgICAgICAgICAgc2V0RGVmYXVsdEdMU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHA7CiAKLSAgICAgICAgICAgIHByb3BlcnRpZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIG9i
amVjdHMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfQorICAgICAgICAg
ICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIG9uTWF0ZXJpYWxEaXNwb3NlKCBldmVudCApIHsKKyAg
ICAgICAgICAgIGlmICggcCA9PT0gTWluRXF1YXRpb24gfHwgcCA9PT0gTWF4RXF1YXRpb24gKSB7
CiAKLSAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgICAg
ICAgICBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICk7CiAK
LSAgICAgICAgICAgIG1hdGVyaWFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25N
YXRlcmlhbERpc3Bvc2UgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiAhPT0gbnVs
bCApIHsKIAotICAgICAgICAgICAgZGVhbGxvY2F0ZU1hdGVyaWFsKCBtYXRlcmlhbCApOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IE1pbkVxdWF0aW9uICkgcmV0dXJuIGV4dGVuc2lv
bi5NSU5fRVhUOworICAgICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IE1heEVxdWF0aW9uICkg
cmV0dXJuIGV4dGVuc2lvbi5NQVhfRVhUOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgLy8gQnVmZmVyIGRlYWxsb2NhdGlvbgorICAgICAgICAgICAgfQogCi0gICAg
ICAgIGZ1bmN0aW9uIGRlYWxsb2NhdGVNYXRlcmlhbCggbWF0ZXJpYWwgKSB7CisgICAgICAgICAg
ICBpZiAoIHAgPT09IFVuc2lnbmVkSW50MjQ4VHlwZSApIHsKIAotICAgICAgICAgICAgcmVsZWFz
ZU1hdGVyaWFsUHJvZ3JhbVJlZmVyZW5jZSggbWF0ZXJpYWwgKTsKKyAgICAgICAgICAgICAgICBl
eHRlbnNpb24gPSBleHRlbnNpb25zLmdldCggJ1dFQkdMX2RlcHRoX3RleHR1cmUnICk7CiAKLSAg
ICAgICAgICAgIHByb3BlcnRpZXMucmVtb3ZlKCBtYXRlcmlhbCApOworICAgICAgICAgICAgICAg
IGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkgcmV0dXJuIGV4dGVuc2lvbi5VTlNJR05FRF9JTlRf
MjRfOF9XRUJHTDsKIAotICAgICAgICB9CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgICAgIGZ1bmN0aW9uIHJlbGVhc2VNYXRlcmlhbFByb2dyYW1SZWZlcmVu
Y2UoIG1hdGVyaWFsICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBwcm9ncmFtSW5m
byA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbCApLnByb2dyYW07CisgICAgICAgIHJldHVybiB7
IGNvbnZlcnQ6IGNvbnZlcnQgfTsKIAotICAgICAgICAgICAgbWF0ZXJpYWwucHJvZ3JhbSA9IHVu
ZGVmaW5lZDsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmICggcHJvZ3JhbUluZm8gIT09IHVuZGVm
aW5lZCApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2Iu
Y29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgcHJvZ3JhbUNhY2hlLnJlbGVhc2VQcm9n
cmFtKCBwcm9ncmFtSW5mbyApOworICAgIGZ1bmN0aW9uIEdyb3VwKCkgewogCi0gICAgICAgICAg
ICB9CisgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB9CisgICAgICAg
IHRoaXMudHlwZSA9ICdHcm91cCc7CiAKLSAgICAgICAgLy8gQnVmZmVyIHJlbmRlcmluZworICAg
IH0KIAotICAgICAgICBmdW5jdGlvbiByZW5kZXJPYmplY3RJbW1lZGlhdGUoIG9iamVjdCwgcHJv
Z3JhbSwgbWF0ZXJpYWwgKSB7CisgICAgR3JvdXAucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbigg
T2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgb2Jq
ZWN0LnJlbmRlciggZnVuY3Rpb24gKCBvYmplY3QgKSB7CisgICAgICAgIGNvbnN0cnVjdG9yOiBH
cm91cCwKIAotICAgICAgICAgICAgICAgIF90aGlzLnJlbmRlckJ1ZmZlckltbWVkaWF0ZSggb2Jq
ZWN0LCBwcm9ncmFtLCBtYXRlcmlhbCApOworICAgICAgICBpc0dyb3VwOiB0cnVlCiAKLSAgICAg
ICAgICAgIH0gKTsKKyAgICB9ICk7CiAKLSAgICAgICAgfQorICAgIC8qKgorICAgICAqIEBhdXRo
b3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBncmVnZ21hbiAv
IGh0dHA6Ly9nYW1lcy5ncmVnZ21hbi5jb20vCisgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDov
L3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZworICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAg
Ki8KIAotICAgICAgICB0aGlzLnJlbmRlckJ1ZmZlckltbWVkaWF0ZSA9IGZ1bmN0aW9uICggb2Jq
ZWN0LCBwcm9ncmFtLCBtYXRlcmlhbCApIHsKKyAgICBmdW5jdGlvbiBQZXJzcGVjdGl2ZUNhbWVy
YSggZm92LCBhc3BlY3QsIG5lYXIsIGZhciApIHsKIAotICAgICAgICAgICAgc3RhdGUuaW5pdEF0
dHJpYnV0ZXMoKTsKKyAgICAgICAgQ2FtZXJhLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAg
dmFyIGJ1ZmZlcnMgPSBwcm9wZXJ0aWVzLmdldCggb2JqZWN0ICk7CisgICAgICAgIHRoaXMudHlw
ZSA9ICdQZXJzcGVjdGl2ZUNhbWVyYSc7CiAKLSAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc1Bv
c2l0aW9ucyAmJiAhIGJ1ZmZlcnMucG9zaXRpb24gKSBidWZmZXJzLnBvc2l0aW9uID0gX2dsLmNy
ZWF0ZUJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKCBvYmplY3QuaGFzTm9ybWFscyAmJiAhIGJ1
ZmZlcnMubm9ybWFsICkgYnVmZmVycy5ub3JtYWwgPSBfZ2wuY3JlYXRlQnVmZmVyKCk7Ci0gICAg
ICAgICAgICBpZiAoIG9iamVjdC5oYXNVdnMgJiYgISBidWZmZXJzLnV2ICkgYnVmZmVycy51diA9
IF9nbC5jcmVhdGVCdWZmZXIoKTsKLSAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc0NvbG9ycyAm
JiAhIGJ1ZmZlcnMuY29sb3IgKSBidWZmZXJzLmNvbG9yID0gX2dsLmNyZWF0ZUJ1ZmZlcigpOwor
ICAgICAgICB0aGlzLmZvdiA9IGZvdiAhPT0gdW5kZWZpbmVkID8gZm92IDogNTA7CisgICAgICAg
IHRoaXMuem9vbSA9IDE7CiAKLSAgICAgICAgICAgIHZhciBwcm9ncmFtQXR0cmlidXRlcyA9IHBy
b2dyYW0uZ2V0QXR0cmlidXRlcygpOworICAgICAgICB0aGlzLm5lYXIgPSBuZWFyICE9PSB1bmRl
ZmluZWQgPyBuZWFyIDogMC4xOworICAgICAgICB0aGlzLmZhciA9IGZhciAhPT0gdW5kZWZpbmVk
ID8gZmFyIDogMjAwMDsKKyAgICAgICAgdGhpcy5mb2N1cyA9IDEwOwogCi0gICAgICAgICAgICBp
ZiAoIG9iamVjdC5oYXNQb3NpdGlvbnMgKSB7CisgICAgICAgIHRoaXMuYXNwZWN0ID0gYXNwZWN0
ICE9PSB1bmRlZmluZWQgPyBhc3BlY3QgOiAxOworICAgICAgICB0aGlzLnZpZXcgPSBudWxsOwog
Ci0gICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoIF9nbC5BUlJBWV9CVUZGRVIsIGJ1ZmZl
cnMucG9zaXRpb24gKTsKLSAgICAgICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YSggX2dsLkFSUkFZ
X0JVRkZFUiwgb2JqZWN0LnBvc2l0aW9uQXJyYXksIF9nbC5EWU5BTUlDX0RSQVcgKTsKKyAgICAg
ICAgdGhpcy5maWxtR2F1Z2UgPSAzNTsgICAgLy8gd2lkdGggb2YgdGhlIGZpbG0gKGRlZmF1bHQg
aW4gbWlsbGltZXRlcnMpCisgICAgICAgIHRoaXMuZmlsbU9mZnNldCA9IDA7ICAgIC8vIGhvcml6
b250YWwgZmlsbSBvZmZzZXQgKHNhbWUgdW5pdCBhcyBnYXVnZSkKIAotICAgICAgICAgICAgICAg
IHN0YXRlLmVuYWJsZUF0dHJpYnV0ZSggcHJvZ3JhbUF0dHJpYnV0ZXMucG9zaXRpb24gKTsKLSAg
ICAgICAgICAgICAgICBfZ2wudmVydGV4QXR0cmliUG9pbnRlciggcHJvZ3JhbUF0dHJpYnV0ZXMu
cG9zaXRpb24sIDMsIF9nbC5GTE9BVCwgZmFsc2UsIDAsIDAgKTsKKyAgICAgICAgdGhpcy51cGRh
dGVQcm9qZWN0aW9uTWF0cml4KCk7CiAKLSAgICAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAg
ICAgIGlmICggb2JqZWN0Lmhhc05vcm1hbHMgKSB7CisgICAgUGVyc3BlY3RpdmVDYW1lcmEucHJv
dG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggQ2FtZXJhLnByb3RvdHlwZSAp
LCB7CiAKLSAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlciggX2dsLkFSUkFZX0JVRkZFUiwg
YnVmZmVycy5ub3JtYWwgKTsKKyAgICAgICAgY29uc3RydWN0b3I6IFBlcnNwZWN0aXZlQ2FtZXJh
LAogCi0gICAgICAgICAgICAgICAgaWYgKCAhIG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwg
JiYKLSAgICAgICAgICAgICAgICAgICAgISBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFs
ICYmCi0gICAgICAgICAgICAgICAgICAgICEgbWF0ZXJpYWwuaXNNZXNoTm9ybWFsTWF0ZXJpYWwg
JiYKLSAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2hhZGluZyA9PT0gRmxhdFNoYWRpbmcg
KSB7CisgICAgICAgIGlzUGVyc3BlY3RpdmVDYW1lcmE6IHRydWUsCiAKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gb2JqZWN0LmNvdW50ICogMzsgaSA8IGw7IGkgKz0g
OSApIHsKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vyc2l2ZSApIHsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gb2JqZWN0Lm5vcm1hbEFycmF5Owor
ICAgICAgICAgICAgQ2FtZXJhLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSwgcmVj
dXJzaXZlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBueCA9ICggYXJyYXlbIGkg
KyAwIF0gKyBhcnJheVsgaSArIDMgXSArIGFycmF5WyBpICsgNiBdICkgLyAzOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG55ID0gKCBhcnJheVsgaSArIDEgXSArIGFycmF5WyBpICsgNCBd
ICsgYXJyYXlbIGkgKyA3IF0gKSAvIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnog
PSAoIGFycmF5WyBpICsgMiBdICsgYXJyYXlbIGkgKyA1IF0gKyBhcnJheVsgaSArIDggXSApIC8g
MzsKKyAgICAgICAgICAgIHRoaXMuZm92ID0gc291cmNlLmZvdjsKKyAgICAgICAgICAgIHRoaXMu
em9vbSA9IHNvdXJjZS56b29tOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVsgaSAr
IDAgXSA9IG54OwotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkgKyAxIF0gPSBueTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5WyBpICsgMiBdID0gbno7CisgICAgICAgICAg
ICB0aGlzLm5lYXIgPSBzb3VyY2UubmVhcjsKKyAgICAgICAgICAgIHRoaXMuZmFyID0gc291cmNl
LmZhcjsKKyAgICAgICAgICAgIHRoaXMuZm9jdXMgPSBzb3VyY2UuZm9jdXM7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFycmF5WyBpICsgMyBdID0gbng7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhcnJheVsgaSArIDQgXSA9IG55OwotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlb
IGkgKyA1IF0gPSBuejsKKyAgICAgICAgICAgIHRoaXMuYXNwZWN0ID0gc291cmNlLmFzcGVjdDsK
KyAgICAgICAgICAgIHRoaXMudmlldyA9IHNvdXJjZS52aWV3ID09PSBudWxsID8gbnVsbCA6IE9i
amVjdC5hc3NpZ24oIHt9LCBzb3VyY2UudmlldyApOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheVsgaSArIDYgXSA9IG54OwotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkg
KyA3IF0gPSBueTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5WyBpICsgOCBdID0gbno7
CisgICAgICAgICAgICB0aGlzLmZpbG1HYXVnZSA9IHNvdXJjZS5maWxtR2F1Z2U7CisgICAgICAg
ICAgICB0aGlzLmZpbG1PZmZzZXQgPSBzb3VyY2UuZmlsbU9mZnNldDsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKCBfZ2wuQVJSQVlf
QlVGRkVSLCBvYmplY3Qubm9ybWFsQXJyYXksIF9nbC5EWU5BTUlDX0RSQVcgKTsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIFNldHMgdGhlIEZPViBieSBmb2NhbCBsZW5ndGggaW4gcmVzcGVjdCB0
byB0aGUgY3VycmVudCAuZmlsbUdhdWdlLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgZGVm
YXVsdCBmaWxtIGdhdWdlIGlzIDM1LCBzbyB0aGF0IHRoZSBmb2NhbCBsZW5ndGggY2FuIGJlIHNw
ZWNpZmllZCBmb3IKKyAgICAgICAgICogYSAzNW1tIChmdWxsIGZyYW1lKSBjYW1lcmEuCisgICAg
ICAgICAqCisgICAgICAgICAqIFZhbHVlcyBmb3IgZm9jYWwgbGVuZ3RoIGFuZCBmaWxtIGdhdWdl
IG11c3QgaGF2ZSB0aGUgc2FtZSB1bml0LgorICAgICAgICAgKi8KKyAgICAgICAgc2V0Rm9jYWxM
ZW5ndGg6IGZ1bmN0aW9uICggZm9jYWxMZW5ndGggKSB7CiAKLSAgICAgICAgICAgICAgICBzdGF0
ZS5lbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGVzLm5vcm1hbCApOworICAgICAgICAg
ICAgLy8gc2VlIGh0dHA6Ly93d3cuYm9iYXRraW5zLmNvbS9waG90b2dyYXBoeS90ZWNobmljYWwv
ZmllbGRfb2Zfdmlldy5odG1sCisgICAgICAgICAgICB2YXIgdkV4dGVudFNsb3BlID0gMC41ICog
dGhpcy5nZXRGaWxtSGVpZ2h0KCkgLyBmb2NhbExlbmd0aDsKIAotICAgICAgICAgICAgICAgIF9n
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKCBwcm9ncmFtQXR0cmlidXRlcy5ub3JtYWwsIDMsIF9nbC5G
TE9BVCwgZmFsc2UsIDAsIDAgKTsKKyAgICAgICAgICAgIHRoaXMuZm92ID0gX01hdGguUkFEMkRF
RyAqIDIgKiBNYXRoLmF0YW4oIHZFeHRlbnRTbG9wZSApOworICAgICAgICAgICAgdGhpcy51cGRh
dGVQcm9qZWN0aW9uTWF0cml4KCk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAg
ICAgICAgICAgaWYgKCBvYmplY3QuaGFzVXZzICYmIG1hdGVyaWFsLm1hcCApIHsKKyAgICAgICAg
LyoqCisgICAgICAgICAqIENhbGN1bGF0ZXMgdGhlIGZvY2FsIGxlbmd0aCBmcm9tIHRoZSBjdXJy
ZW50IC5mb3YgYW5kIC5maWxtR2F1Z2UuCisgICAgICAgICAqLworICAgICAgICBnZXRGb2NhbExl
bmd0aDogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoIF9n
bC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcnMudXYgKTsKLSAgICAgICAgICAgICAgICBfZ2wuYnVmZmVy
RGF0YSggX2dsLkFSUkFZX0JVRkZFUiwgb2JqZWN0LnV2QXJyYXksIF9nbC5EWU5BTUlDX0RSQVcg
KTsKKyAgICAgICAgICAgIHZhciB2RXh0ZW50U2xvcGUgPSBNYXRoLnRhbiggX01hdGguREVHMlJB
RCAqIDAuNSAqIHRoaXMuZm92ICk7CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRy
aWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGVzLnV2ICk7CisgICAgICAgICAgICByZXR1cm4gMC41ICog
dGhpcy5nZXRGaWxtSGVpZ2h0KCkgLyB2RXh0ZW50U2xvcGU7CiAKLSAgICAgICAgICAgICAgICBf
Z2wudmVydGV4QXR0cmliUG9pbnRlciggYXR0cmlidXRlcy51diwgMiwgX2dsLkZMT0FULCBmYWxz
ZSwgMCwgMCApOworICAgICAgICB9LAogCi0gICAgICAgICAgICB9CisgICAgICAgIGdldEVmZmVj
dGl2ZUZPVjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBpZiAoIG9iamVjdC5oYXNDb2xv
cnMgJiYgbWF0ZXJpYWwudmVydGV4Q29sb3JzICE9PSBOb0NvbG9ycyApIHsKKyAgICAgICAgICAg
IHJldHVybiBfTWF0aC5SQUQyREVHICogMiAqIE1hdGguYXRhbigKKyAgICAgICAgICAgICAgICBN
YXRoLnRhbiggX01hdGguREVHMlJBRCAqIDAuNSAqIHRoaXMuZm92ICkgLyB0aGlzLnpvb20gKTsK
IAotICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZm
ZXJzLmNvbG9yICk7Ci0gICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoIF9nbC5BUlJBWV9C
VUZGRVIsIG9iamVjdC5jb2xvckFycmF5LCBfZ2wuRFlOQU1JQ19EUkFXICk7CisgICAgICAgIH0s
CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1
dGVzLmNvbG9yICk7CisgICAgICAgIGdldEZpbG1XaWR0aDogZnVuY3Rpb24gKCkgewogCi0gICAg
ICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIoIHByb2dyYW1BdHRyaWJ1dGVzLmNv
bG9yLCAzLCBfZ2wuRkxPQVQsIGZhbHNlLCAwLCAwICk7CisgICAgICAgICAgICAvLyBmaWxtIG5v
dCBjb21wbGV0ZWx5IGNvdmVyZWQgaW4gcG9ydHJhaXQgZm9ybWF0IChhc3BlY3QgPCAxKQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmlsbUdhdWdlICogTWF0aC5taW4oIHRoaXMuYXNwZWN0LCAx
ICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgc3RhdGUuZGlz
YWJsZVVudXNlZEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgZ2V0RmlsbUhlaWdodDogZnVuY3Rpb24g
KCkgewogCi0gICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyggX2dsLlRSSUFOR0xFUywgMCwgb2Jq
ZWN0LmNvdW50ICk7CisgICAgICAgICAgICAvLyBmaWxtIG5vdCBjb21wbGV0ZWx5IGNvdmVyZWQg
aW4gbGFuZHNjYXBlIGZvcm1hdCAoYXNwZWN0ID4gMSkKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbG1HYXVnZSAvIE1hdGgubWF4KCB0aGlzLmFzcGVjdCwgMSApOwogCi0gICAgICAgICAgICBv
YmplY3QuY291bnQgPSAwOworICAgICAgICB9LAogCi0gICAgICAgIH07CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBTZXRzIGFuIG9mZnNldCBpbiBhIGxhcmdlciBmcnVzdHVtLiBUaGlzIGlzIHVz
ZWZ1bCBmb3IgbXVsdGktd2luZG93IG9yCisgICAgICAgICAqIG11bHRpLW1vbml0b3IvbXVsdGkt
bWFjaGluZSBzZXR1cHMuCisgICAgICAgICAqCisgICAgICAgICAqIEZvciBleGFtcGxlLCBpZiB5
b3UgaGF2ZSAzeDIgbW9uaXRvcnMgYW5kIGVhY2ggbW9uaXRvciBpcyAxOTIweDEwODAgYW5kCisg
ICAgICAgICAqIHRoZSBtb25pdG9ycyBhcmUgaW4gZ3JpZCBsaWtlIHRoaXMKKyAgICAgICAgICoK
KyAgICAgICAgICogICArLS0tKy0tLSstLS0rCisgICAgICAgICAqICAgfCBBIHwgQiB8IEMgfAor
ICAgICAgICAgKiAgICstLS0rLS0tKy0tLSsKKyAgICAgICAgICogICB8IEQgfCBFIHwgRiB8Cisg
ICAgICAgICAqICAgKy0tLSstLS0rLS0tKworICAgICAgICAgKgorICAgICAgICAgKiB0aGVuIGZv
ciBlYWNoIG1vbml0b3IgeW91IHdvdWxkIGNhbGwgaXQgbGlrZSB0aGlzCisgICAgICAgICAqCisg
ICAgICAgICAqICAgdmFyIHcgPSAxOTIwOworICAgICAgICAgKiAgIHZhciBoID0gMTA4MDsKKyAg
ICAgICAgICogICB2YXIgZnVsbFdpZHRoID0gdyAqIDM7CisgICAgICAgICAqICAgdmFyIGZ1bGxI
ZWlnaHQgPSBoICogMjsKKyAgICAgICAgICoKKyAgICAgICAgICogICAtLUEtLQorICAgICAgICAg
KiAgIGNhbWVyYS5zZXRPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDAsIGggKiAw
LCB3LCBoICk7CisgICAgICAgICAqICAgLS1CLS0KKyAgICAgICAgICogICBjYW1lcmEuc2V0T2Zm
c2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAxLCBoICogMCwgdywgaCApOworICAgICAg
ICAgKiAgIC0tQy0tCisgICAgICAgICAqICAgY2FtZXJhLnNldE9mZnNldCggZnVsbFdpZHRoLCBm
dWxsSGVpZ2h0LCB3ICogMiwgaCAqIDAsIHcsIGggKTsKKyAgICAgICAgICogICAtLUQtLQorICAg
ICAgICAgKiAgIGNhbWVyYS5zZXRPZmZzZXQoIGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgdyAqIDAs
IGggKiAxLCB3LCBoICk7CisgICAgICAgICAqICAgLS1FLS0KKyAgICAgICAgICogICBjYW1lcmEu
c2V0T2Zmc2V0KCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHcgKiAxLCBoICogMSwgdywgaCApOwor
ICAgICAgICAgKiAgIC0tRi0tCisgICAgICAgICAqICAgY2FtZXJhLnNldE9mZnNldCggZnVsbFdp
ZHRoLCBmdWxsSGVpZ2h0LCB3ICogMiwgaCAqIDEsIHcsIGggKTsKKyAgICAgICAgICoKKyAgICAg
ICAgICogICBOb3RlIHRoZXJlIGlzIG5vIHJlYXNvbiBtb25pdG9ycyBoYXZlIHRvIGJlIHRoZSBz
YW1lIHNpemUgb3IgaW4gYSBncmlkLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0Vmlld09mZnNl
dDogZnVuY3Rpb24gKCBmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQg
KSB7CiAKLSAgICAgICAgZnVuY3Rpb24gYWJzTnVtZXJpY2FsU29ydCggYSwgYiApIHsKKyAgICAg
ICAgICAgIHRoaXMuYXNwZWN0ID0gZnVsbFdpZHRoIC8gZnVsbEhlaWdodDsKIAotICAgICAgICAg
ICAgcmV0dXJuIE1hdGguYWJzKCBiWyAwIF0gKSAtIE1hdGguYWJzKCBhWyAwIF0gKTsKKyAgICAg
ICAgICAgIGlmICggdGhpcy52aWV3ID09PSBudWxsICkgewogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB0aGlzLnZpZXcgPSB7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUs
CisgICAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aDogMSwKKyAgICAgICAgICAgICAgICAgICAg
ZnVsbEhlaWdodDogMSwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogMCwKKyAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0WTogMCwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEsCisg
ICAgICAgICAgICAgICAgICAgIGhlaWdodDogMQorICAgICAgICAgICAgICAgIH07CiAKLSAgICAg
ICAgdGhpcy5yZW5kZXJCdWZmZXJEaXJlY3QgPSBmdW5jdGlvbiAoIGNhbWVyYSwgZm9nLCBnZW9t
ZXRyeSwgbWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXAgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHN0YXRlLnNldE1hdGVyaWFsKCBtYXRlcmlhbCApOworICAgICAgICAgICAgdGhpcy52
aWV3LmVuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy52aWV3LmZ1bGxXaWR0aCA9IGZ1
bGxXaWR0aDsKKyAgICAgICAgICAgIHRoaXMudmlldy5mdWxsSGVpZ2h0ID0gZnVsbEhlaWdodDsK
KyAgICAgICAgICAgIHRoaXMudmlldy5vZmZzZXRYID0geDsKKyAgICAgICAgICAgIHRoaXMudmll
dy5vZmZzZXRZID0geTsKKyAgICAgICAgICAgIHRoaXMudmlldy53aWR0aCA9IHdpZHRoOworICAg
ICAgICAgICAgdGhpcy52aWV3LmhlaWdodCA9IGhlaWdodDsKIAotICAgICAgICAgICAgdmFyIHBy
b2dyYW0gPSBzZXRQcm9ncmFtKCBjYW1lcmEsIGZvZywgbWF0ZXJpYWwsIG9iamVjdCApOwotICAg
ICAgICAgICAgdmFyIGdlb21ldHJ5UHJvZ3JhbSA9IGdlb21ldHJ5LmlkICsgJ18nICsgcHJvZ3Jh
bS5pZCArICdfJyArICggbWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlICk7CisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTsKIAotICAgICAgICAgICAgdmFyIHVwZGF0
ZUJ1ZmZlcnMgPSBmYWxzZTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRy
eVByb2dyYW0gIT09IF9jdXJyZW50R2VvbWV0cnlQcm9ncmFtICkgeworICAgICAgICBjbGVhclZp
ZXdPZmZzZXQ6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIF9jdXJyZW50R2VvbWV0
cnlQcm9ncmFtID0gZ2VvbWV0cnlQcm9ncmFtOwotICAgICAgICAgICAgICAgIHVwZGF0ZUJ1ZmZl
cnMgPSB0cnVlOworICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwgKSB7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZW5hYmxlZCA9IGZhbHNlOwog
Ci0gICAgICAgICAgICAvLyBtb3JwaCB0YXJnZXRzCisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHZhciBtb3JwaFRhcmdldEluZmx1ZW5jZXMgPSBvYmplY3QubW9ycGhUYXJnZXRJbmZsdWVu
Y2VzOworICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CiAKLSAgICAg
ICAgICAgIGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzICE9PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgICAgICAvLyBUT0RPIFJlbW92ZSBhbGxvY2F0aW9ucworICAg
ICAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAg
ICAgICB2YXIgYWN0aXZlSW5mbHVlbmNlcyA9IFtdOworICAgICAgICAgICAgdmFyIG5lYXIgPSB0
aGlzLm5lYXIsCisgICAgICAgICAgICAgICAgdG9wID0gbmVhciAqIE1hdGgudGFuKAorICAgICAg
ICAgICAgICAgICAgICBfTWF0aC5ERUcyUkFEICogMC41ICogdGhpcy5mb3YgKSAvIHRoaXMuem9v
bSwKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSAyICogdG9wLAorICAgICAgICAgICAgICAgIHdp
ZHRoID0gdGhpcy5hc3BlY3QgKiBoZWlnaHQsCisgICAgICAgICAgICAgICAgbGVmdCA9IC0gMC41
ICogd2lkdGgsCisgICAgICAgICAgICAgICAgdmlldyA9IHRoaXMudmlldzsKIAotICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IG1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5sZW5ndGg7
IGkgPCBsOyBpICsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09IG51bGwgJiYg
dGhpcy52aWV3LmVuYWJsZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGluZmx1ZW5j
ZSA9IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJbmZsdWVuY2VzLnB1c2goIFsgaW5mbHVlbmNlLCBpIF0gKTsKKyAgICAgICAgICAgICAgICB2
YXIgZnVsbFdpZHRoID0gdmlldy5mdWxsV2lkdGgsCisgICAgICAgICAgICAgICAgICAgIGZ1bGxI
ZWlnaHQgPSB2aWV3LmZ1bGxIZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbGVmdCArPSB2aWV3Lm9mZnNldFggKiB3aWR0aCAvIGZ1bGxXaWR0aDsKKyAgICAgICAg
ICAgICAgICB0b3AgLT0gdmlldy5vZmZzZXRZICogaGVpZ2h0IC8gZnVsbEhlaWdodDsKKyAgICAg
ICAgICAgICAgICB3aWR0aCAqPSB2aWV3LndpZHRoIC8gZnVsbFdpZHRoOworICAgICAgICAgICAg
ICAgIGhlaWdodCAqPSB2aWV3LmhlaWdodCAvIGZ1bGxIZWlnaHQ7CiAKLSAgICAgICAgICAgICAg
ICBhY3RpdmVJbmZsdWVuY2VzLnNvcnQoIGFic051bWVyaWNhbFNvcnQgKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGlmICggYWN0aXZlSW5mbHVlbmNlcy5sZW5ndGggPiA4ICkg
eworICAgICAgICAgICAgdmFyIHNrZXcgPSB0aGlzLmZpbG1PZmZzZXQ7CisgICAgICAgICAgICBp
ZiAoIHNrZXcgIT09IDAgKSBsZWZ0ICs9IG5lYXIgKiBza2V3IC8gdGhpcy5nZXRGaWxtV2lkdGgo
KTsKIAotICAgICAgICAgICAgICAgICAgICBhY3RpdmVJbmZsdWVuY2VzLmxlbmd0aCA9IDg7Cisg
ICAgICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCBs
ZWZ0ICsgd2lkdGgsIHRvcCwgdG9wIC0gaGVpZ2h0LCBuZWFyLCB0aGlzLmZhciApOwogCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdmFyIG1vcnBoQXR0
cmlidXRlcyA9IGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlczsKKyAgICAgICAgdG9KU09OOiBmdW5j
dGlvbiAoIG1ldGEgKSB7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBh
Y3RpdmVJbmZsdWVuY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICB2YXIg
ZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOwogCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBpbmZsdWVuY2UgPSBhY3RpdmVJbmZsdWVuY2VzWyBpIF07
Ci0gICAgICAgICAgICAgICAgICAgIG1vcnBoSW5mbHVlbmNlc1sgaSBdID0gaW5mbHVlbmNlWyAw
IF07CisgICAgICAgICAgICBkYXRhLm9iamVjdC5mb3YgPSB0aGlzLmZvdjsKKyAgICAgICAgICAg
IGRhdGEub2JqZWN0Lnpvb20gPSB0aGlzLnpvb207CiAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBpbmZsdWVuY2VbIDAgXSAhPT0gMCApIHsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0Lm5lYXIg
PSB0aGlzLm5lYXI7CisgICAgICAgICAgICBkYXRhLm9iamVjdC5mYXIgPSB0aGlzLmZhcjsKKyAg
ICAgICAgICAgIGRhdGEub2JqZWN0LmZvY3VzID0gdGhpcy5mb2N1czsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5mbHVlbmNlWyAxIF07CisgICAgICAgICAgICBkYXRh
Lm9iamVjdC5hc3BlY3QgPSB0aGlzLmFzcGVjdDsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRlcmlhbC5tb3JwaFRhcmdldHMgPT09IHRydWUgJiYgbW9ycGhBdHRyaWJ1dGVzLnBv
c2l0aW9uICkgZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCAnbW9ycGhUYXJnZXQnICsgaSwgbW9ycGhB
dHRyaWJ1dGVzLnBvc2l0aW9uWyBpbmRleCBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1hdGVyaWFsLm1vcnBoTm9ybWFscyA9PT0gdHJ1ZSAmJiBtb3JwaEF0dHJpYnV0ZXMubm9y
bWFsICkgZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCAnbW9ycGhOb3JtYWwnICsgaSwgbW9ycGhBdHRy
aWJ1dGVzLm5vcm1hbFsgaW5kZXggXSApOworICAgICAgICAgICAgaWYgKCB0aGlzLnZpZXcgIT09
IG51bGwgKSBkYXRhLm9iamVjdC52aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIHRoaXMudmlldyAp
OwogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRhLm9iamVj
dC5maWxtR2F1Z2UgPSB0aGlzLmZpbG1HYXVnZTsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LmZp
bG1PZmZzZXQgPSB0aGlzLmZpbG1PZmZzZXQ7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggbWF0ZXJpYWwubW9ycGhUYXJnZXRzID09PSB0cnVlICkgZ2VvbWV0cnkucmVtb3ZlQXR0cmli
dXRlKCAnbW9ycGhUYXJnZXQnICsgaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBt
YXRlcmlhbC5tb3JwaE5vcm1hbHMgPT09IHRydWUgKSBnZW9tZXRyeS5yZW1vdmVBdHRyaWJ1dGUo
ICdtb3JwaE5vcm1hbCcgKyBpICk7CisgICAgICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICB9ICk7
CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IGFjdGl2ZUluZmx1ZW5jZXMubGVuZ3Ro
LCBpbCA9IG1vcnBoSW5mbHVlbmNlcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAvKioK
KyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0g
ICAgICAgICAgICAgICAgICAgIG1vcnBoSW5mbHVlbmNlc1sgaSBdID0gMC4wOworICAgIGZ1bmN0
aW9uIEFycmF5Q2FtZXJhKCBhcnJheSApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
UGVyc3BlY3RpdmVDYW1lcmEuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgcHJvZ3Jh
bS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKCBfZ2wsICdtb3JwaFRhcmdldEluZmx1ZW5jZXMnLCBt
b3JwaEluZmx1ZW5jZXMgKTsKKyAgICAgICAgdGhpcy5jYW1lcmFzID0gYXJyYXkgfHwgW107CiAK
LSAgICAgICAgICAgICAgICB1cGRhdGVCdWZmZXJzID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAgICAg
ICAgIH0KKyAgICBBcnJheUNhbWVyYS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3Qu
Y3JlYXRlKCBQZXJzcGVjdGl2ZUNhbWVyYS5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICAv
LworICAgICAgICBjb25zdHJ1Y3RvcjogQXJyYXlDYW1lcmEsCiAKLSAgICAgICAgICAgIHZhciBp
bmRleCA9IGdlb21ldHJ5LmluZGV4OwotICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZ2VvbWV0
cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKLSAgICAgICAgICAgIHZhciByYW5nZUZhY3RvciA9IDE7
CisgICAgICAgIGlzQXJyYXlDYW1lcmE6IHRydWUKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlh
bC53aXJlZnJhbWUgPT09IHRydWUgKSB7CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgaW5k
ZXggPSBnZW9tZXRyaWVzLmdldFdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKTsKLSAgICAg
ICAgICAgICAgICByYW5nZUZhY3RvciA9IDI7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRv
b2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgfQorICAgIGZ1
bmN0aW9uIFdlYlZSTWFuYWdlciggcmVuZGVyZXIgKSB7CiAKLSAgICAgICAgICAgIHZhciBhdHRy
aWJ1dGU7Ci0gICAgICAgICAgICB2YXIgcmVuZGVyZXIgPSBidWZmZXJSZW5kZXJlcjsKKyAgICAg
ICAgdmFyIHNjb3BlID0gdGhpczsKIAotICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gbnVsbCAp
IHsKKyAgICAgICAgdmFyIGRldmljZSA9IG51bGw7CisgICAgICAgIHZhciBmcmFtZURhdGEgPSBu
dWxsOwogCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQoIGluZGV4
ICk7CisgICAgICAgIHZhciBwb3NlVGFyZ2V0ID0gbnVsbDsKIAotICAgICAgICAgICAgICAgIHJl
bmRlcmVyID0gaW5kZXhlZEJ1ZmZlclJlbmRlcmVyOwotICAgICAgICAgICAgICAgIHJlbmRlcmVy
LnNldEluZGV4KCBhdHRyaWJ1dGUgKTsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXJzID0gW107Cisg
ICAgICAgIHZhciBzdGFuZGluZ01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIHZhciBz
dGFuZGluZ01hdHJpeEludmVyc2UgPSBuZXcgTWF0cml4NCgpOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgIGlmICggdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ1ZSRnJhbWVEYXRh
JyBpbiB3aW5kb3cgKSB7CiAKLSAgICAgICAgICAgIGlmICggdXBkYXRlQnVmZmVycyApIHsKKyAg
ICAgICAgICAgIGZyYW1lRGF0YSA9IG5ldyB3aW5kb3cuVlJGcmFtZURhdGEoKTsKKyAgICAgICAg
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAndnJkaXNwbGF5cHJlc2VudGNoYW5nZScsIG9u
VlJEaXNwbGF5UHJlc2VudENoYW5nZSwgZmFsc2UgKTsKIAotICAgICAgICAgICAgICAgIHNldHVw
VmVydGV4QXR0cmlidXRlcyggbWF0ZXJpYWwsIHByb2dyYW0sIGdlb21ldHJ5ICk7CisgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CisgICAgICAgIHZh
ciBtYXRyaXhXb3JsZEludmVyc2UgPSBuZXcgTWF0cml4NCgpOworICAgICAgICB2YXIgdGVtcFF1
YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpOworICAgICAgICB2YXIgdGVtcFBvc2l0aW9uID0g
bmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlciggX2ds
LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGUuYnVmZmVyICk7CisgICAgICAgIHZhciBj
YW1lcmFMID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7CisgICAgICAgIGNhbWVyYUwuYm91bmRz
ID0gbmV3IFZlY3RvcjQoIDAuMCwgMC4wLCAwLjUsIDEuMCApOworICAgICAgICBjYW1lcmFMLmxh
eWVycy5lbmFibGUoIDEgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgdmFyIGNhbWVy
YVIgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTsKKyAgICAgICAgY2FtZXJhUi5ib3VuZHMgPSBu
ZXcgVmVjdG9yNCggMC41LCAwLjAsIDAuNSwgMS4wICk7CisgICAgICAgIGNhbWVyYVIubGF5ZXJz
LmVuYWJsZSggMiApOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHZhciBjYW1lcmFWUiA9IG5l
dyBBcnJheUNhbWVyYSggWyBjYW1lcmFMLCBjYW1lcmFSIF0gKTsKKyAgICAgICAgY2FtZXJhVlIu
bGF5ZXJzLmVuYWJsZSggMSApOworICAgICAgICBjYW1lcmFWUi5sYXllcnMuZW5hYmxlKCAyICk7
CiAKLSAgICAgICAgICAgIC8vCisgICAgICAgIC8vCiAKLSAgICAgICAgICAgIHZhciBkYXRhQ291
bnQgPSAwOworICAgICAgICBmdW5jdGlvbiBpc1ByZXNlbnRpbmcoKSB7CiAKLSAgICAgICAgICAg
IGlmICggaW5kZXggIT09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlICE9PSBu
dWxsICYmIGRldmljZS5pc1ByZXNlbnRpbmcgPT09IHRydWU7CiAKLSAgICAgICAgICAgICAgICBk
YXRhQ291bnQgPSBpbmRleC5jb3VudDsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB9IGVsc2Ug
aWYgKCBwb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICB2YXIgY3VycmVudFNpemUs
IGN1cnJlbnRQaXhlbFJhdGlvOwogCi0gICAgICAgICAgICAgICAgZGF0YUNvdW50ID0gcG9zaXRp
b24uY291bnQ7CisgICAgICAgIGZ1bmN0aW9uIG9uVlJEaXNwbGF5UHJlc2VudENoYW5nZSgpIHsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBpc1ByZXNlbnRpbmcoKSApIHsKIAot
ICAgICAgICAgICAgdmFyIHJhbmdlU3RhcnQgPSBnZW9tZXRyeS5kcmF3UmFuZ2Uuc3RhcnQgKiBy
YW5nZUZhY3RvcjsKLSAgICAgICAgICAgIHZhciByYW5nZUNvdW50ID0gZ2VvbWV0cnkuZHJhd1Jh
bmdlLmNvdW50ICogcmFuZ2VGYWN0b3I7CisgICAgICAgICAgICAgICAgdmFyIGV5ZVBhcmFtZXRl
cnMgPSBkZXZpY2UuZ2V0RXllUGFyYW1ldGVycyggJ2xlZnQnICk7CisgICAgICAgICAgICAgICAg
dmFyIHJlbmRlcldpZHRoID0gZXllUGFyYW1ldGVycy5yZW5kZXJXaWR0aDsKKyAgICAgICAgICAg
ICAgICB2YXIgcmVuZGVySGVpZ2h0ID0gZXllUGFyYW1ldGVycy5yZW5kZXJIZWlnaHQ7CiAKLSAg
ICAgICAgICAgIHZhciBncm91cFN0YXJ0ID0gZ3JvdXAgIT09IG51bGwgPyBncm91cC5zdGFydCAq
IHJhbmdlRmFjdG9yIDogMDsKLSAgICAgICAgICAgIHZhciBncm91cENvdW50ID0gZ3JvdXAgIT09
IG51bGwgPyBncm91cC5jb3VudCAqIHJhbmdlRmFjdG9yIDogSW5maW5pdHk7CisgICAgICAgICAg
ICAgICAgY3VycmVudFBpeGVsUmF0aW8gPSByZW5kZXJlci5nZXRQaXhlbFJhdGlvKCk7CisgICAg
ICAgICAgICAgICAgY3VycmVudFNpemUgPSByZW5kZXJlci5nZXRTaXplKCk7CiAKLSAgICAgICAg
ICAgIHZhciBkcmF3U3RhcnQgPSBNYXRoLm1heCggcmFuZ2VTdGFydCwgZ3JvdXBTdGFydCApOwot
ICAgICAgICAgICAgdmFyIGRyYXdFbmQgPSBNYXRoLm1pbiggZGF0YUNvdW50LCByYW5nZVN0YXJ0
ICsgcmFuZ2VDb3VudCwgZ3JvdXBTdGFydCArIGdyb3VwQ291bnQgKSAtIDE7CisgICAgICAgICAg
ICAgICAgcmVuZGVyZXIuc2V0RHJhd2luZ0J1ZmZlclNpemUoIHJlbmRlcldpZHRoICogMiwgcmVu
ZGVySGVpZ2h0LCAxICk7CiAKLSAgICAgICAgICAgIHZhciBkcmF3Q291bnQgPSBNYXRoLm1heCgg
MCwgZHJhd0VuZCAtIGRyYXdTdGFydCArIDEgKTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24u
c3RhcnQoKTsKIAotICAgICAgICAgICAgaWYgKCBkcmF3Q291bnQgPT09IDAgKSByZXR1cm47Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBzY29wZS5lbmFibGVkICkgewogCi0gICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldERyYXdpbmdCdWZmZXJTaXplKCBjdXJyZW50
U2l6ZS53aWR0aCwgY3VycmVudFNpemUuaGVpZ2h0LCBjdXJyZW50UGl4ZWxSYXRpbyApOwogCi0g
ICAgICAgICAgICBpZiAoIG9iamVjdC5pc01lc2ggKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0
aW9uLnN0b3AoKTsKIAotICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwud2lyZWZyYW1lID09
PSB0cnVlICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNl
dExpbmVXaWR0aCggbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoICogZ2V0VGFyZ2V0UGl4ZWxS
YXRpbygpICk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIF9nbC5MSU5F
UyApOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAvLwog
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIG9iamVjdC5kcmF3TW9kZSApIHsKKyAgICAg
ICAgdmFyIGlzVHJpZ2dlclByZXNzZWQgPSBmYWxzZTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBUcmlhbmdsZXNEcmF3TW9kZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJlci5zZXRNb2RlKCBfZ2wuVFJJQU5HTEVTICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGZ1bmN0aW9uIGZpbmRHYW1lcGFkKCBpZCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBUcmlhbmdsZVN0cmlwRHJhd01vZGU6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2dsLlRSSUFOR0xFX1NUUklQ
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2YXIg
Z2FtZXBhZHMgPSBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgJiYgbmF2aWdhdG9yLmdldEdhbWVwYWRz
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVHJpYW5nbGVGYW5EcmF3TW9kZToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRNb2RlKCBfZ2wuVFJJQU5H
TEVfRkFOICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGogPSAwLCBsID0gZ2FtZXBhZHMubGVuZ3RoOyBpIDwgbDsgaSAr
KyApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIGdhbWVw
YWQgPSBnYW1lcGFkc1sgaSBdOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICggZ2FtZXBhZCAmJiAoIGdhbWVwYWQuaWQgPT09ICdEYXlkcmVhbSBDb250cm9sbGVyJyB8
fAorICAgICAgICAgICAgICAgICAgICBnYW1lcGFkLmlkID09PSAnR2VhciBWUiBDb250cm9sbGVy
JyB8fCBnYW1lcGFkLmlkID09PSAnT2N1bHVzIEdvIENvbnRyb2xsZXInIHx8CisgICAgICAgICAg
ICAgICAgICAgIGdhbWVwYWQuaWQgPT09ICdPcGVuVlIgR2FtZXBhZCcgfHwgZ2FtZXBhZC5pZC5z
dGFydHNXaXRoKCAnT2N1bHVzIFRvdWNoJyApIHx8CisgICAgICAgICAgICAgICAgICAgIGdhbWVw
YWQuaWQuc3RhcnRzV2l0aCggJ1NwYXRpYWwgQ29udHJvbGxlcicgKSApICkgewogCisgICAgICAg
ICAgICAgICAgICAgIGlmICggaiA9PT0gaWQgKSByZXR1cm4gZ2FtZXBhZDsKIAotICAgICAgICAg
ICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTGluZSApIHsKKyAgICAgICAgICAgICAgICAgICAgaiAr
KzsKIAotICAgICAgICAgICAgICAgIHZhciBsaW5lV2lkdGggPSBtYXRlcmlhbC5saW5ld2lkdGg7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBsaW5lV2lkdGggPT09
IHVuZGVmaW5lZCApIGxpbmVXaWR0aCA9IDE7IC8vIE5vdCB1c2luZyBMaW5lKk1hdGVyaWFsCisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lV2lkdGgoIGxpbmVX
aWR0aCAqIGdldFRhcmdldFBpeGVsUmF0aW8oKSApOworICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBpZiAoIG9iamVjdC5pc0xpbmVTZWdtZW50cyApIHsKKyAgICAgICAgZnVuY3Rpb24gdXBk
YXRlQ29udHJvbGxlcnMoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9k
ZSggX2dsLkxJTkVTICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBjb250cm9s
bGVycy5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBvYmpl
Y3QuaXNMaW5lTG9vcCApIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IGNvbnRy
b2xsZXJzWyBpIF07CiAKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2ds
LkxJTkVfTE9PUCApOworICAgICAgICAgICAgICAgIHZhciBnYW1lcGFkID0gZmluZEdhbWVwYWQo
IGkgKTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCBn
YW1lcGFkICE9PSB1bmRlZmluZWQgJiYgZ2FtZXBhZC5wb3NlICE9PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2dsLkxJTkVfU1RSSVAgKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBnYW1lcGFkLnBvc2UgPT09IG51bGwgKSByZXR1cm47
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vICBQb3NlCiAKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG9iamVjdC5pc1BvaW50cyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHBvc2UgPSBnYW1lcGFkLnBvc2U7CiAKLSAgICAgICAgICAgICAgICByZW5kZXJl
ci5zZXRNb2RlKCBfZ2wuUE9JTlRTICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggcG9zZS5o
YXNQb3NpdGlvbiA9PT0gZmFsc2UgKSBjb250cm9sbGVyLnBvc2l0aW9uLnNldCggMC4yLCAtIDAu
NiwgLSAwLjA1ICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBw
b3NlLnBvc2l0aW9uICE9PSBudWxsICkgY29udHJvbGxlci5wb3NpdGlvbi5mcm9tQXJyYXkoIHBv
c2UucG9zaXRpb24gKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3NlLm9yaWVudGF0aW9u
ICE9PSBudWxsICkgY29udHJvbGxlci5xdWF0ZXJuaW9uLmZyb21BcnJheSggcG9zZS5vcmllbnRh
dGlvbiApOworICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm1hdHJpeC5jb21wb3NlKCBj
b250cm9sbGVyLnBvc2l0aW9uLCBjb250cm9sbGVyLnF1YXRlcm5pb24sIGNvbnRyb2xsZXIuc2Nh
bGUgKTsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5tYXRyaXgucHJlbXVsdGlwbHko
IHN0YW5kaW5nTWF0cml4ICk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWF0cml4
LmRlY29tcG9zZSggY29udHJvbGxlci5wb3NpdGlvbiwgY29udHJvbGxlci5xdWF0ZXJuaW9uLCBj
b250cm9sbGVyLnNjYWxlICk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWF0cml4
V29ybGROZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIu
dmlzaWJsZSA9IHRydWU7CiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnku
aXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gIFRy
aWdnZXIKIAotICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkubWF4SW5zdGFuY2VkQ291bnQg
PiAwICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgYnV0dG9uSWQgPSBnYW1lcGFkLmlkID09
PSAnRGF5ZHJlYW0gQ29udHJvbGxlcicgPyAwIDogMTsKIAotICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJlci5yZW5kZXJJbnN0YW5jZXMoIGdlb21ldHJ5LCBkcmF3U3RhcnQsIGRyYXdDb3VudCAp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIGlzVHJpZ2dlclByZXNzZWQgIT09IGdhbWVwYWQu
YnV0dG9uc1sgYnV0dG9uSWQgXS5wcmVzc2VkICkgewogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNUcmlnZ2VyUHJlc3NlZCA9IGdhbWVwYWQuYnV0dG9uc1sg
YnV0dG9uSWQgXS5wcmVzc2VkOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpc1RyaWdnZXJQcmVzc2VkICkgewogCi0gICAgICAgICAgICAgICAg
cmVuZGVyZXIucmVuZGVyKCBkcmF3U3RhcnQsIGRyYXdDb3VudCApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXIuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnc2VsZWN0c3Rh
cnQnIH0gKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKIAotICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIu
ZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnc2VsZWN0ZW5kJyB9ICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udHJvbGxlci5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdzZWxlY3QnIH0g
KTsKIAotICAgICAgICBmdW5jdGlvbiBzZXR1cFZlcnRleEF0dHJpYnV0ZXMoIG1hdGVyaWFsLCBw
cm9ncmFtLCBnZW9tZXRyeSwgc3RhcnRJbmRleCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0luc3RhbmNlZEJ1
ZmZlckdlb21ldHJ5ICkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKSA9PT0gbnVs
bCApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczog
dXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90
IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuJyApOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIudmlzaWJs
ZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICggc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkICkgc3RhcnRJbmRleCA9IDA7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgc3RhdGUuaW5pdEF0dHJpYnV0ZXMoKTsKKyAgICAgICAg
Ly8KIAotICAgICAgICAgICAgdmFyIGdlb21ldHJ5QXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJp
YnV0ZXM7CisgICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlOworICAgICAgICB0aGlzLnVzZXJI
ZWlnaHQgPSAxLjY7CiAKLSAgICAgICAgICAgIHZhciBwcm9ncmFtQXR0cmlidXRlcyA9IHByb2dy
YW0uZ2V0QXR0cmlidXRlcygpOworICAgICAgICB0aGlzLmdldENvbnRyb2xsZXIgPSBmdW5jdGlv
biAoIGlkICkgewogCi0gICAgICAgICAgICB2YXIgbWF0ZXJpYWxEZWZhdWx0QXR0cmlidXRlVmFs
dWVzID0gbWF0ZXJpYWwuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlczsKKyAgICAgICAgICAgIHZhciBj
b250cm9sbGVyID0gY29udHJvbGxlcnNbIGlkIF07CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBu
YW1lIGluIHByb2dyYW1BdHRyaWJ1dGVzICkgeworICAgICAgICAgICAgaWYgKCBjb250cm9sbGVy
ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcHJvZ3JhbUF0dHJpYnV0
ZSA9IHByb2dyYW1BdHRyaWJ1dGVzWyBuYW1lIF07CisgICAgICAgICAgICAgICAgY29udHJvbGxl
ciA9IG5ldyBHcm91cCgpOworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWF0cml4QXV0b1Vw
ZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIudmlzaWJsZSA9IGZhbHNl
OwogCi0gICAgICAgICAgICAgICAgaWYgKCBwcm9ncmFtQXR0cmlidXRlID49IDAgKSB7CisgICAg
ICAgICAgICAgICAgY29udHJvbGxlcnNbIGlkIF0gPSBjb250cm9sbGVyOwogCi0gICAgICAgICAg
ICAgICAgICAgIHZhciBnZW9tZXRyeUF0dHJpYnV0ZSA9IGdlb21ldHJ5QXR0cmlidXRlc1sgbmFt
ZSBdOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnlB
dHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVy
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGdlb21ldHJ5QXR0
cmlidXRlLm5vcm1hbGl6ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGdl
b21ldHJ5QXR0cmlidXRlLml0ZW1TaXplOworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgYXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQoIGdlb21ldHJ5QXR0cmlidXRl
ICk7CisgICAgICAgIHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gYXR0cmlidXRlLmJ1ZmZlcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0eXBlID0gYXR0cmlidXRlLnR5cGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgYnl0ZXNQZXJFbGVtZW50ID0gYXR0cmlidXRlLmJ5dGVzUGVyRWxlbWVudDsK
KyAgICAgICAgICAgIHJldHVybiBkZXZpY2U7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZ2VvbWV0cnlBdHRyaWJ1dGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSApIHsKKyAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2VvbWV0
cnlBdHRyaWJ1dGUuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaWRl
ID0gZGF0YS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9
IGdlb21ldHJ5QXR0cmlidXRlLm9mZnNldDsKKyAgICAgICAgdGhpcy5zZXREZXZpY2UgPSBmdW5j
dGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRh
ICYmIGRhdGEuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlciApIHsKKyAgICAgICAgICAgIGlm
ICggdmFsdWUgIT09IHVuZGVmaW5lZCApIGRldmljZSA9IHZhbHVlOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLmVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoIHByb2dy
YW1BdHRyaWJ1dGUsIGRhdGEubWVzaFBlckF0dHJpYnV0ZSApOworICAgICAgICAgICAgYW5pbWF0
aW9uLnNldENvbnRleHQoIHZhbHVlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCA9PT0gdW5kZWZpbmVkICkgeworICAg
ICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5t
YXhJbnN0YW5jZWRDb3VudCA9IGRhdGEubWVzaFBlckF0dHJpYnV0ZSAqIGRhdGEuY291bnQ7Cisg
ICAgICAgIHRoaXMuc2V0UG9zZVRhcmdldCA9IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb2JqZWN0ICE9
PSB1bmRlZmluZWQgKSBwb3NlVGFyZ2V0ID0gb2JqZWN0OwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGUgKTsKKyAgICAg
ICAgdGhpcy5nZXRDYW1lcmEgPSBmdW5jdGlvbiAoIGNhbWVyYSApIHsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggZGV2aWNlID09PSBudWxsICkgewog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoIF9nbC5BUlJBWV9C
VUZGRVIsIGJ1ZmZlciApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhB
dHRyaWJQb2ludGVyKCBwcm9ncmFtQXR0cmlidXRlLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBz
dHJpZGUgKiBieXRlc1BlckVsZW1lbnQsICggc3RhcnRJbmRleCAqIHN0cmlkZSArIG9mZnNldCAp
ICogYnl0ZXNQZXJFbGVtZW50ICk7CisgICAgICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNl
dCggMCwgc2NvcGUudXNlckhlaWdodCwgMCApOworICAgICAgICAgICAgICAgIHJldHVybiBjYW1l
cmE7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5QXR0cmlidXRlLmlzSW5z
dGFuY2VkQnVmZmVyQXR0cmlidXRlICkgeworICAgICAgICAgICAgZGV2aWNlLmRlcHRoTmVhciA9
IGNhbWVyYS5uZWFyOworICAgICAgICAgICAgZGV2aWNlLmRlcHRoRmFyID0gY2FtZXJhLmZhcjsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGVB
bmREaXZpc29yKCBwcm9ncmFtQXR0cmlidXRlLCBnZW9tZXRyeUF0dHJpYnV0ZS5tZXNoUGVyQXR0
cmlidXRlICk7CisgICAgICAgICAgICBkZXZpY2UuZ2V0RnJhbWVEYXRhKCBmcmFtZURhdGEgKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lm1heEluc3Rh
bmNlZENvdW50ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAvLwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCA9IGdl
b21ldHJ5QXR0cmlidXRlLm1lc2hQZXJBdHRyaWJ1dGUgKiBnZW9tZXRyeUF0dHJpYnV0ZS5jb3Vu
dDsKKyAgICAgICAgICAgIHZhciBzdGFnZVBhcmFtZXRlcnMgPSBkZXZpY2Uuc3RhZ2VQYXJhbWV0
ZXJzOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICggc3RhZ2VQYXJhbWV0ZXJzICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzdGFuZGluZ01hdHJpeC5mcm9tQXJyYXkoIHN0YWdlUGFy
YW1ldGVycy5zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybSApOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLmVuYWJsZUF0dHJpYnV0ZSggcHJvZ3JhbUF0dHJpYnV0ZSAp
OworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzdGFuZGluZ01hdHJpeC5tYWtlVHJhbnNsYXRpb24oIDAsIHNjb3Bl
LnVzZXJIZWlnaHQsIDAgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5iaW5k
QnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfZ2wudmVydGV4QXR0cmliUG9pbnRlciggcHJvZ3JhbUF0dHJpYnV0ZSwgc2l6ZSwg
dHlwZSwgbm9ybWFsaXplZCwgMCwgc3RhcnRJbmRleCAqIHNpemUgKiBieXRlc1BlckVsZW1lbnQg
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlcyAh
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdmFyIHBvc2UgPSBmcmFtZURhdGEucG9zZTsK
KyAgICAgICAgICAgIHZhciBwb3NlT2JqZWN0ID0gcG9zZVRhcmdldCAhPT0gbnVsbCA/IHBvc2VU
YXJnZXQgOiBjYW1lcmE7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1h
dGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlc1sgbmFtZSBdOworICAgICAgICAgICAgLy8gV2Ug
d2FudCB0byBtYW5pcHVsYXRlIHBvc2VPYmplY3QgYnkgaXRzIHBvc2l0aW9uIGFuZCBxdWF0ZXJu
aW9uIGNvbXBvbmVudHMgc2luY2UgdXNlcnMgbWF5IHJlbHkgb24gdGhlbS4KKyAgICAgICAgICAg
IHBvc2VPYmplY3QubWF0cml4LmNvcHkoIHN0YW5kaW5nTWF0cml4ICk7CisgICAgICAgICAgICBw
b3NlT2JqZWN0Lm1hdHJpeC5kZWNvbXBvc2UoIHBvc2VPYmplY3QucG9zaXRpb24sIHBvc2VPYmpl
Y3QucXVhdGVybmlvbiwgcG9zZU9iamVjdC5zY2FsZSApOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIHBvc2Uu
b3JpZW50YXRpb24gIT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKCB2YWx1ZS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgdGVtcFF1YXRlcm5pb24u
ZnJvbUFycmF5KCBwb3NlLm9yaWVudGF0aW9uICk7CisgICAgICAgICAgICAgICAgcG9zZU9iamVj
dC5xdWF0ZXJuaW9uLm11bHRpcGx5KCB0ZW1wUXVhdGVybmlvbiApOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWIyZnYoIHByb2dyYW1BdHRyaWJ1dGUsIHZhbHVlICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfZ2wudmVydGV4QXR0cmliM2Z2KCBwcm9ncmFtQXR0cmli
dXRlLCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoIHBvc2UucG9zaXRpb24gIT09IG51bGwgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYjRmdiggcHJvZ3JhbUF0dHJpYnV0ZSwgdmFsdWUg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIHRlbXBRdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggc3RhbmRpbmdNYXRy
aXggKTsKKyAgICAgICAgICAgICAgICB0ZW1wUG9zaXRpb24uZnJvbUFycmF5KCBwb3NlLnBvc2l0
aW9uICk7CisgICAgICAgICAgICAgICAgdGVtcFBvc2l0aW9uLmFwcGx5UXVhdGVybmlvbiggdGVt
cFF1YXRlcm5pb24gKTsKKyAgICAgICAgICAgICAgICBwb3NlT2JqZWN0LnBvc2l0aW9uLmFkZCgg
dGVtcFBvc2l0aW9uICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWIx
ZnYoIHByb2dyYW1BdHRyaWJ1dGUsIHZhbHVlICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3NlT2JqZWN0LnVwZGF0ZU1hdHJp
eFdvcmxkKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgg
ZGV2aWNlLmlzUHJlc2VudGluZyA9PT0gZmFsc2UgKSByZXR1cm4gY2FtZXJhOwogCi0gICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYW1lcmFMLm5lYXIgPSBjYW1lcmEubmVhcjsKKyAgICAgICAgICAgIGNhbWVyYVIu
bmVhciA9IGNhbWVyYS5uZWFyOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBjYW1lcmFM
LmZhciA9IGNhbWVyYS5mYXI7CisgICAgICAgICAgICBjYW1lcmFSLmZhciA9IGNhbWVyYS5mYXI7
CiAKLSAgICAgICAgICAgIHN0YXRlLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7CisgICAgICAg
ICAgICBjYW1lcmFWUi5tYXRyaXhXb3JsZC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGQgKTsKKyAg
ICAgICAgICAgIGNhbWVyYVZSLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KCBjYW1lcmEubWF0cml4
V29ybGRJbnZlcnNlICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgY2FtZXJhTC5tYXRyaXhX
b3JsZEludmVyc2UuZnJvbUFycmF5KCBmcmFtZURhdGEubGVmdFZpZXdNYXRyaXggKTsKKyAgICAg
ICAgICAgIGNhbWVyYVIubWF0cml4V29ybGRJbnZlcnNlLmZyb21BcnJheSggZnJhbWVEYXRhLnJp
Z2h0Vmlld01hdHJpeCApOwogCi0gICAgICAgIC8vIENvbXBpbGUKKyAgICAgICAgICAgIC8vIFRP
RE8gKG1yZG9vYikgRG91YmxlIGNoZWNrIHRoaXMgY29kZQogCi0gICAgICAgIHRoaXMuY29tcGls
ZSA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSApIHsKKyAgICAgICAgICAgIHN0YW5kaW5nTWF0
cml4SW52ZXJzZS5nZXRJbnZlcnNlKCBzdGFuZGluZ01hdHJpeCApOwogCi0gICAgICAgICAgICBs
aWdodHMgPSBbXTsKKyAgICAgICAgICAgIGNhbWVyYUwubWF0cml4V29ybGRJbnZlcnNlLm11bHRp
cGx5KCBzdGFuZGluZ01hdHJpeEludmVyc2UgKTsKKyAgICAgICAgICAgIGNhbWVyYVIubWF0cml4
V29ybGRJbnZlcnNlLm11bHRpcGx5KCBzdGFuZGluZ01hdHJpeEludmVyc2UgKTsKIAotICAgICAg
ICAgICAgc2NlbmUudHJhdmVyc2UoIGZ1bmN0aW9uICggb2JqZWN0ICkgeworICAgICAgICAgICAg
dmFyIHBhcmVudCA9IHBvc2VPYmplY3QucGFyZW50OwogCi0gICAgICAgICAgICAgICAgaWYgKCBv
YmplY3QuaXNMaWdodCApIHsKKyAgICAgICAgICAgIGlmICggcGFyZW50ICE9PSBudWxsICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGxpZ2h0cy5wdXNoKCBvYmplY3QgKTsKKyAgICAgICAgICAg
ICAgICBtYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZSggcGFyZW50Lm1hdHJpeFdvcmxkICk7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FtZXJhTC5tYXRyaXhXb3Js
ZEludmVyc2UubXVsdGlwbHkoIG1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAgICAgICAgICAg
IGNhbWVyYVIubWF0cml4V29ybGRJbnZlcnNlLm11bHRpcGx5KCBtYXRyaXhXb3JsZEludmVyc2Ug
KTsKIAotICAgICAgICAgICAgfSApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXR1
cExpZ2h0cyggbGlnaHRzLCBjYW1lcmEgKTsKKyAgICAgICAgICAgIC8vIGVudk1hcCBhbmQgTWly
cm9yIG5lZWRzIGNhbWVyYS5tYXRyaXhXb3JsZAogCi0gICAgICAgICAgICBzY2VuZS50cmF2ZXJz
ZSggZnVuY3Rpb24gKCBvYmplY3QgKSB7CisgICAgICAgICAgICBjYW1lcmFMLm1hdHJpeFdvcmxk
LmdldEludmVyc2UoIGNhbWVyYUwubWF0cml4V29ybGRJbnZlcnNlICk7CisgICAgICAgICAgICBj
YW1lcmFSLm1hdHJpeFdvcmxkLmdldEludmVyc2UoIGNhbWVyYVIubWF0cml4V29ybGRJbnZlcnNl
ICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9iamVjdC5tYXRlcmlhbCApIHsKKyAgICAgICAg
ICAgIGNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoIGZyYW1lRGF0YS5sZWZ0UHJv
amVjdGlvbk1hdHJpeCApOworICAgICAgICAgICAgY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmZy
b21BcnJheSggZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCApOwogCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggb2JqZWN0Lm1hdGVyaWFsICkgKSB7CisgICAg
ICAgICAgICAvLyBIQUNLIChtcmRvb2IpCisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5j
b20vdzNjL3dlYnZyL2lzc3Vlcy8yMDMKIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwOyBpIDwgb2JqZWN0Lm1hdGVyaWFsLmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAg
ICAgIGNhbWVyYVZSLnByb2plY3Rpb25NYXRyaXguY29weSggY2FtZXJhTC5wcm9qZWN0aW9uTWF0
cml4ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0TWF0ZXJpYWwoIG9iamVj
dC5tYXRlcmlhbFsgaSBdLCBzY2VuZS5mb2csIG9iamVjdCApOworICAgICAgICAgICAgLy8KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGxheWVycyA9IGRldmlj
ZS5nZXRMYXllcnMoKTsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCBsYXllcnMubGVuZ3RoICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpbml0
TWF0ZXJpYWwoIG9iamVjdC5tYXRlcmlhbCwgc2NlbmUuZm9nLCBvYmplY3QgKTsKKyAgICAgICAg
ICAgICAgICB2YXIgbGF5ZXIgPSBsYXllcnNbIDAgXTsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCBsYXllci5sZWZ0Qm91bmRzICE9PSBudWxsICYmIGxheWVy
LmxlZnRCb3VuZHMubGVuZ3RoID09PSA0ICkgeworCisgICAgICAgICAgICAgICAgICAgIGNhbWVy
YUwuYm91bmRzLmZyb21BcnJheSggbGF5ZXIubGVmdEJvdW5kcyApOwogCiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgaWYgKCBsYXllci5yaWdo
dEJvdW5kcyAhPT0gbnVsbCAmJiBsYXllci5yaWdodEJvdW5kcy5sZW5ndGggPT09IDQgKSB7CiAK
LSAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgY2FtZXJhUi5ib3VuZHMuZnJvbUFycmF5
KCBsYXllci5yaWdodEJvdW5kcyApOwogCi0gICAgICAgIC8vIFJlbmRlcmluZworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICB0aGlzLmFuaW1hdGUgPSBmdW5jdGlvbiAoIGNhbGxiYWNrICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmdW5jdGlvbiBvbkZyYW1lKCkgeworICAg
ICAgICAgICAgdXBkYXRlQ29udHJvbGxlcnMoKTsKIAotICAgICAgICAgICAgICAgIGNhbGxiYWNr
KCk7CisgICAgICAgICAgICByZXR1cm4gY2FtZXJhVlI7CiAKLSAgICAgICAgICAgICAgICAoIHZy
LmdldERldmljZSgpIHx8IHdpbmRvdyApLnJlcXVlc3RBbmltYXRpb25GcmFtZSggb25GcmFtZSAp
OworICAgICAgICB9OwogCi0gICAgICAgICAgICB9CisgICAgICAgIHRoaXMuZ2V0U3RhbmRpbmdN
YXRyaXggPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICggdnIuZ2V0RGV2aWNlKCkgfHwg
d2luZG93ICkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBvbkZyYW1lICk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhbmRpbmdNYXRyaXg7CiAKICAgICAgICAgfTsKIAotICAgICAgICB0aGlzLnJlbmRl
ciA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSwgcmVuZGVyVGFyZ2V0LCBmb3JjZUNsZWFyICkg
eworICAgICAgICB0aGlzLmlzUHJlc2VudGluZyA9IGlzUHJlc2VudGluZzsKIAotICAgICAgICAg
ICAgaWYgKCAhICggY2FtZXJhICYmIGNhbWVyYS5pc0NhbWVyYSApICkgeworICAgICAgICAvLyBB
bmltYXRpb24gTG9vcAogCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLldl
YkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNh
bWVyYS4nICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgYW5pbWF0aW9u
ID0gbmV3IFdlYkdMQW5pbWF0aW9uKCk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy5z
ZXRBbmltYXRpb25Mb29wID0gZnVuY3Rpb24gKCBjYWxsYmFjayApIHsKIAotICAgICAgICAgICAg
Ly8gcmVzZXQgY2FjaGluZyBmb3IgdGhpcyBmcmFtZQorICAgICAgICAgICAgYW5pbWF0aW9uLnNl
dEFuaW1hdGlvbkxvb3AoIGNhbGxiYWNrICk7CiAKLSAgICAgICAgICAgIF9jdXJyZW50R2VvbWV0
cnlQcm9ncmFtID0gJyc7Ci0gICAgICAgICAgICBfY3VycmVudE1hdGVyaWFsSWQgPSAtIDE7Ci0g
ICAgICAgICAgICBfY3VycmVudENhbWVyYSA9IG51bGw7CisgICAgICAgIH07CiAKLSAgICAgICAg
ICAgIC8vIHVwZGF0ZSBzY2VuZSBncmFwaAorICAgICAgICB0aGlzLnN1Ym1pdEZyYW1lID0gZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgICAgICBpZiAoIHNjZW5lLmF1dG9VcGRhdGUgPT09IHRydWUg
KSBzY2VuZS51cGRhdGVNYXRyaXhXb3JsZCgpOworICAgICAgICAgICAgaWYgKCBpc1ByZXNlbnRp
bmcoKSApIGRldmljZS5zdWJtaXRGcmFtZSgpOwogCi0gICAgICAgICAgICAvLyB1cGRhdGUgY2Ft
ZXJhIG1hdHJpY2VzIGFuZCBmcnVzdHVtCisgICAgICAgIH07CiAKLSAgICAgICAgICAgIGlmICgg
Y2FtZXJhLnBhcmVudCA9PT0gbnVsbCApIGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpOworICAg
ICAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGlmICggdnIu
ZW5hYmxlZCApIHsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5l
ZCcgKSB7CiAKLSAgICAgICAgICAgICAgICBjYW1lcmEgPSB2ci5nZXRDYW1lcmEoIGNhbWVyYSAp
OworICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAndnJkaXNwbGF5
cHJlc2VudGNoYW5nZScsIG9uVlJEaXNwbGF5UHJlc2VudENoYW5nZSApOwogCiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIF9wcm9qU2NyZWVuTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIGNh
bWVyYS5wcm9qZWN0aW9uTWF0cml4LCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7Ci0gICAg
ICAgICAgICBfZnJ1c3R1bS5zZXRGcm9tTWF0cml4KCBfcHJvalNjcmVlbk1hdHJpeCApOwotCi0g
ICAgICAgICAgICBsaWdodHMubGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHNwcml0ZXMubGVuZ3Ro
ID0gMDsKLSAgICAgICAgICAgIGxlbnNGbGFyZXMubGVuZ3RoID0gMDsKKyAgICAgICAgfTsKIAot
ICAgICAgICAgICAgX2xvY2FsQ2xpcHBpbmdFbmFibGVkID0gdGhpcy5sb2NhbENsaXBwaW5nRW5h
YmxlZDsKLSAgICAgICAgICAgIF9jbGlwcGluZ0VuYWJsZWQgPSBfY2xpcHBpbmcuaW5pdCggdGhp
cy5jbGlwcGluZ1BsYW5lcywgX2xvY2FsQ2xpcHBpbmdFbmFibGVkLCBjYW1lcmEgKTsKKyAgICB9
CiAKLSAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJMaXN0ID0gcmVuZGVyTGlzdHMuZ2V0KCBzY2Vu
ZSwgY2FtZXJhICk7Ci0gICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5pbml0KCk7CisgICAg
LyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8K
IAotICAgICAgICAgICAgcHJvamVjdE9iamVjdCggc2NlbmUsIGNhbWVyYSwgX3RoaXMuc29ydE9i
amVjdHMgKTsKKyAgICBmdW5jdGlvbiBXZWJYUk1hbmFnZXIoIHJlbmRlcmVyICkgewogCi0gICAg
ICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5maW5pc2goKTsKKyAgICAgICAgdmFyIGdsID0gcmVu
ZGVyZXIuY29udGV4dDsKIAotICAgICAgICAgICAgaWYgKCBfdGhpcy5zb3J0T2JqZWN0cyA9PT0g
dHJ1ZSApIHsKKyAgICAgICAgdmFyIGRldmljZSA9IG51bGw7CisgICAgICAgIHZhciBzZXNzaW9u
ID0gbnVsbDsKIAotICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJMaXN0LnNvcnQoKTsKKyAg
ICAgICAgdmFyIGZyYW1lT2ZSZWYgPSBudWxsOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHZh
ciBwb3NlID0gbnVsbDsKIAotICAgICAgICAgICAgLy8KKyAgICAgICAgdmFyIGNvbnRyb2xsZXJz
ID0gW107CisgICAgICAgIHZhciBpbnB1dFNvdXJjZXMgPSBbXTsKIAotICAgICAgICAgICAgaWYg
KCBfY2xpcHBpbmdFbmFibGVkICkgX2NsaXBwaW5nLmJlZ2luU2hhZG93cygpOworICAgICAgICBm
dW5jdGlvbiBpc1ByZXNlbnRpbmcoKSB7CiAKLSAgICAgICAgICAgIHNldHVwU2hhZG93cyggbGln
aHRzICk7CisgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbiAhPT0gbnVsbCAmJiBmcmFtZU9mUmVm
ICE9PSBudWxsOwogCi0gICAgICAgICAgICBzaGFkb3dNYXAucmVuZGVyKCBzY2VuZSwgY2FtZXJh
ICk7CiAKLSAgICAgICAgICAgIHNldHVwTGlnaHRzKCBsaWdodHMsIGNhbWVyYSApOworICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICggX2NsaXBwaW5nRW5hYmxlZCApIF9jbGlwcGluZy5lbmRT
aGFkb3dzKCk7CisgICAgICAgIC8vCiAKLSAgICAgICAgICAgIC8vCisgICAgICAgIHZhciBjYW1l
cmFMID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7CisgICAgICAgIGNhbWVyYUwubGF5ZXJzLmVu
YWJsZSggMSApOworICAgICAgICBjYW1lcmFMLnZpZXdwb3J0ID0gbmV3IFZlY3RvcjQoKTsKIAot
ICAgICAgICAgICAgX2luZm9SZW5kZXIuZnJhbWUgKys7Ci0gICAgICAgICAgICBfaW5mb1JlbmRl
ci5jYWxscyA9IDA7Ci0gICAgICAgICAgICBfaW5mb1JlbmRlci52ZXJ0aWNlcyA9IDA7Ci0gICAg
ICAgICAgICBfaW5mb1JlbmRlci5mYWNlcyA9IDA7Ci0gICAgICAgICAgICBfaW5mb1JlbmRlci5w
b2ludHMgPSAwOworICAgICAgICB2YXIgY2FtZXJhUiA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgp
OworICAgICAgICBjYW1lcmFSLmxheWVycy5lbmFibGUoIDIgKTsKKyAgICAgICAgY2FtZXJhUi52
aWV3cG9ydCA9IG5ldyBWZWN0b3I0KCk7CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0
ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHZhciBjYW1lcmFWUiA9IG5ldyBBcnJheUNhbWVy
YSggWyBjYW1lcmFMLCBjYW1lcmFSIF0gKTsKKyAgICAgICAgY2FtZXJhVlIubGF5ZXJzLmVuYWJs
ZSggMSApOworICAgICAgICBjYW1lcmFWUi5sYXllcnMuZW5hYmxlKCAyICk7CiAKLSAgICAgICAg
ICAgICAgICByZW5kZXJUYXJnZXQgPSBudWxsOworICAgICAgICAvLwogCi0gICAgICAgICAgICB9
CisgICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlOwogCi0gICAgICAgICAgICB0aGlzLnNldFJl
bmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICk7CisgICAgICAgIHRoaXMuZ2V0Q29udHJvbGxlciA9
IGZ1bmN0aW9uICggaWQgKSB7CiAKLSAgICAgICAgICAgIC8vCisgICAgICAgICAgICB2YXIgY29u
dHJvbGxlciA9IGNvbnRyb2xsZXJzWyBpZCBdOwogCi0gICAgICAgICAgICBiYWNrZ3JvdW5kLnJl
bmRlciggc2NlbmUsIGNhbWVyYSwgZm9yY2VDbGVhciApOworICAgICAgICAgICAgaWYgKCBjb250
cm9sbGVyID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIC8vIHJlbmRlciBzY2VuZQor
ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBuZXcgR3JvdXAoKTsKKyAgICAgICAgICAgICAg
ICBjb250cm9sbGVyLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBj
b250cm9sbGVyLnZpc2libGUgPSBmYWxzZTsKIAotICAgICAgICAgICAgdmFyIG9wYXF1ZU9iamVj
dHMgPSBjdXJyZW50UmVuZGVyTGlzdC5vcGFxdWU7Ci0gICAgICAgICAgICB2YXIgdHJhbnNwYXJl
bnRPYmplY3RzID0gY3VycmVudFJlbmRlckxpc3QudHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAg
ICAgY29udHJvbGxlcnNbIGlkIF0gPSBjb250cm9sbGVyOwogCi0gICAgICAgICAgICBpZiAoIHNj
ZW5lLm92ZXJyaWRlTWF0ZXJpYWwgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICB2YXIgb3ZlcnJpZGVNYXRlcmlhbCA9IHNjZW5lLm92ZXJyaWRlTWF0ZXJpYWw7CisgICAgICAg
ICAgICByZXR1cm4gY29udHJvbGxlcjsKIAotICAgICAgICAgICAgICAgIGlmICggb3BhcXVlT2Jq
ZWN0cy5sZW5ndGggKSByZW5kZXJPYmplY3RzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJh
LCBvdmVycmlkZU1hdGVyaWFsICk7Ci0gICAgICAgICAgICAgICAgaWYgKCB0cmFuc3BhcmVudE9i
amVjdHMubGVuZ3RoICkgcmVuZGVyT2JqZWN0cyggdHJhbnNwYXJlbnRPYmplY3RzLCBzY2VuZSwg
Y2FtZXJhLCBvdmVycmlkZU1hdGVyaWFsICk7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHRoaXMuZ2V0RGV2aWNlID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAg
ICAgICAgICAgLy8gb3BhcXVlIHBhc3MgKGZyb250LXRvLWJhY2sgb3JkZXIpCisgICAgICAgICAg
ICByZXR1cm4gZGV2aWNlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBvcGFxdWVPYmplY3RzLmxl
bmd0aCApIHJlbmRlck9iamVjdHMoIG9wYXF1ZU9iamVjdHMsIHNjZW5lLCBjYW1lcmEgKTsKKyAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50IHBhc3MgKGJhY2stdG8t
ZnJvbnQgb3JkZXIpCisgICAgICAgIHRoaXMuc2V0RGV2aWNlID0gZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKIAotICAgICAgICAgICAgICAgIGlmICggdHJhbnNwYXJlbnRPYmplY3RzLmxlbmd0aCApIHJl
bmRlck9iamVjdHMoIHRyYW5zcGFyZW50T2JqZWN0cywgc2NlbmUsIGNhbWVyYSApOworICAgICAg
ICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgZGV2aWNlID0gdmFsdWU7CiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGdsLnNldENvbXBhdGlibGVYUkRldmljZSggdmFsdWUgKTsK
IAotICAgICAgICAgICAgLy8gY3VzdG9tIHJlbmRlciBwbHVnaW5zIChwb3N0IHBhc3MpCisgICAg
ICAgIH07CiAKLSAgICAgICAgICAgIHNwcml0ZVBsdWdpbi5yZW5kZXIoIHNjZW5lLCBjYW1lcmEg
KTsKLSAgICAgICAgICAgIGxlbnNGbGFyZVBsdWdpbi5yZW5kZXIoIHNjZW5lLCBjYW1lcmEsIF9j
dXJyZW50Vmlld3BvcnQgKTsKKyAgICAgICAgLy8KIAotICAgICAgICAgICAgLy8gR2VuZXJhdGUg
bWlwbWFwIGlmIHdlJ3JlIHVzaW5nIGFueSBraW5kIG9mIG1pcG1hcCBmaWx0ZXJpbmcKKyAgICAg
ICAgZnVuY3Rpb24gb25TZXNzaW9uRXZlbnQoIGV2ZW50ICkgewogCi0gICAgICAgICAgICBpZiAo
IHJlbmRlclRhcmdldCApIHsKKyAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gY29udHJvbGxl
cnNbIGlucHV0U291cmNlcy5pbmRleE9mKCBldmVudC5pbnB1dFNvdXJjZSApIF07CisgICAgICAg
ICAgICBpZiAoIGNvbnRyb2xsZXIgKSBjb250cm9sbGVyLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTog
ZXZlbnQudHlwZSB9ICk7CiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlcy51cGRhdGVSZW5kZXJU
YXJnZXRNaXBtYXAoIHJlbmRlclRhcmdldCApOworICAgICAgICB9CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgZnVuY3Rpb24gb25TZXNzaW9uRW5kKCkgewogCi0gICAgICAgICAgICAvLyBFbnN1
cmUgZGVwdGggYnVmZmVyIHdyaXRpbmcgaXMgZW5hYmxlZCBzbyBpdCBjYW4gYmUgY2xlYXJlZCBv
biBuZXh0IHJlbmRlcgorICAgICAgICAgICAgcmVuZGVyZXIuc2V0RnJhbWVidWZmZXIoIG51bGwg
KTsKKyAgICAgICAgICAgIGFuaW1hdGlvbi5zdG9wKCk7CiAKLSAgICAgICAgICAgIHN0YXRlLmJ1
ZmZlcnMuZGVwdGguc2V0VGVzdCggdHJ1ZSApOwotICAgICAgICAgICAgc3RhdGUuYnVmZmVycy5k
ZXB0aC5zZXRNYXNrKCB0cnVlICk7Ci0gICAgICAgICAgICBzdGF0ZS5idWZmZXJzLmNvbG9yLnNl
dE1hc2soIHRydWUgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIGNhbWVyYS5pc0Fy
cmF5Q2FtZXJhICkgeworICAgICAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbiAoIHZhbHVl
LCBvcHRpb25zICkgewogCi0gICAgICAgICAgICAgICAgX3RoaXMuc2V0U2Npc3NvclRlc3QoIGZh
bHNlICk7CisgICAgICAgICAgICBzZXNzaW9uID0gdmFsdWU7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICggc2Vzc2lvbiAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAgaWYgKCB2
ci5lbmFibGVkICkgeworICAgICAgICAgICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcigg
J3NlbGVjdCcsIG9uU2Vzc2lvbkV2ZW50ICk7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5hZGRF
dmVudExpc3RlbmVyKCAnc2VsZWN0c3RhcnQnLCBvblNlc3Npb25FdmVudCApOworICAgICAgICAg
ICAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lciggJ3NlbGVjdGVuZCcsIG9uU2Vzc2lvbkV2
ZW50ICk7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnZW5kJywg
b25TZXNzaW9uRW5kICk7CiAKLSAgICAgICAgICAgICAgICB2ci5zdWJtaXRGcmFtZSgpOworICAg
ICAgICAgICAgICAgIHNlc3Npb24uYmFzZUxheWVyID0gbmV3IFhSV2ViR0xMYXllciggc2Vzc2lv
biwgZ2wgKTsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLnJlcXVlc3RGcmFtZU9mUmVmZXJlbmNl
KCBvcHRpb25zLmZyYW1lT2ZSZWZlcmVuY2VUeXBlICkudGhlbiggZnVuY3Rpb24gKCB2YWx1ZSAp
IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmcmFtZU9mUmVmID0gdmFs
dWU7CiAKLSAgICAgICAgICAgIC8vIF9nbC5maW5pc2goKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVuZGVyZXIuc2V0RnJhbWVidWZmZXIoIHNlc3Npb24uYmFzZUxheWVyLmZyYW1lYnVmZmVyICk7
CiAKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnNldENvbnRleHQo
IHNlc3Npb24gKTsKKyAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnN0YXJ0KCk7CiAKLSAg
ICAgICAgLyoKLSAgICAgICAgLy8gVE9ETyBEdXBsaWNhdGVkIGNvZGUgKEZydXN0dW0pCisgICAg
ICAgICAgICAgICAgfSApOwogCi0gICAgICAgIHZhciBfc3BoZXJlID0gbmV3IFNwaGVyZSgpOwor
ICAgICAgICAgICAgICAgIC8vCiAKLSAgICAgICAgZnVuY3Rpb24gaXNPYmplY3RWaWV3YWJsZSgg
b2JqZWN0ICkgeworICAgICAgICAgICAgICAgIGlucHV0U291cmNlcyA9IHNlc3Npb24uZ2V0SW5w
dXRTb3VyY2VzKCk7CiAKLSAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRy
eTsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoICdpbnB1dHNvdXJj
ZXNjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91
bmRpbmdTcGhlcmUgPT09IG51bGwgKQotICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbXB1dGVC
b3VuZGluZ1NwaGVyZSgpOworICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZXMgPSBzZXNz
aW9uLmdldElucHV0U291cmNlcygpOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygg
aW5wdXRTb3VyY2VzICk7CiAKLSAgICAgICAgICAgIF9zcGhlcmUuY29weSggZ2VvbWV0cnkuYm91
bmRpbmdTcGhlcmUgKS4KLSAgICAgICAgICAgIGFwcGx5TWF0cml4NCggb2JqZWN0Lm1hdHJpeFdv
cmxkICk7CisgICAgICAgICAgICAgICAgfSApOwogCi0gICAgICAgICAgICByZXR1cm4gaXNTcGhl
cmVWaWV3YWJsZSggX3NwaGVyZSApOworICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAg
ICAgfTsKIAotICAgICAgICBmdW5jdGlvbiBpc1Nwcml0ZVZpZXdhYmxlKCBzcHJpdGUgKSB7Cisg
ICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUNhbWVyYSggY2FtZXJhLCBwYXJlbnQgKSB7CiAKLSAgICAg
ICAgICAgIF9zcGhlcmUuY2VudGVyLnNldCggMCwgMCwgMCApOwotICAgICAgICAgICAgX3NwaGVy
ZS5yYWRpdXMgPSAwLjcwNzEwNjc4MTE4NjU0NzY7Ci0gICAgICAgICAgICBfc3BoZXJlLmFwcGx5
TWF0cml4NCggc3ByaXRlLm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICBpZiAoIHBhcmVudCA9
PT0gbnVsbCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGlzU3BoZXJlVmlld2FibGUoIF9zcGhl
cmUgKTsKKyAgICAgICAgICAgICAgICBjYW1lcmEubWF0cml4V29ybGQuY29weSggY2FtZXJhLm1h
dHJpeCApOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgZnVu
Y3Rpb24gaXNTcGhlcmVWaWV3YWJsZSggc3BoZXJlICkgeworICAgICAgICAgICAgICAgIGNhbWVy
YS5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCBwYXJlbnQubWF0cml4V29ybGQsIGNhbWVy
YS5tYXRyaXggKTsKIAotICAgICAgICAgICAgaWYgKCAhIF9mcnVzdHVtLmludGVyc2VjdHNTcGhl
cmUoIHNwaGVyZSApICkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB2YXIgbnVtUGxhbmVzID0gX2NsaXBwaW5nLm51bVBsYW5lczsKKyAgICAgICAgICAgIGNhbWVy
YS5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZSggY2FtZXJhLm1hdHJpeFdvcmxkICk7CiAK
LSAgICAgICAgICAgIGlmICggbnVtUGxhbmVzID09PSAwICkgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KIAotICAgICAgICAgICAgdmFyIHBsYW5lcyA9IF90aGlzLmNsaXBwaW5nUGxhbmVzLAorICAg
ICAgICB0aGlzLmdldENhbWVyYSA9IGZ1bmN0aW9uICggY2FtZXJhICkgewogCi0gICAgICAgICAg
ICAgICAgY2VudGVyID0gc3BoZXJlLmNlbnRlciwKLSAgICAgICAgICAgICAgICBuZWdSYWQgPSAt
IHNwaGVyZS5yYWRpdXMsCi0gICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICBpZiAo
IGlzUHJlc2VudGluZygpICkgewogCi0gICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg
dmFyIHBhcmVudCA9IGNhbWVyYS5wYXJlbnQ7CisgICAgICAgICAgICAgICAgdmFyIGNhbWVyYXMg
PSBjYW1lcmFWUi5jYW1lcmFzOwogCi0gICAgICAgICAgICAgICAgLy8gb3V0IHdoZW4gZGVlcGVy
IHRoYW4gcmFkaXVzIGluIHRoZSBuZWdhdGl2ZSBoYWxmc3BhY2UKLSAgICAgICAgICAgICAgICBp
ZiAoIHBsYW5lc1sgaSBdLmRpc3RhbmNlVG9Qb2ludCggY2VudGVyICkgPCBuZWdSYWQgKSByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gYXBwbHkgY2FtZXJhLnBhcmVudCB0byBjYW1l
cmFWUgogCi0gICAgICAgICAgICB9IHdoaWxlICggKysgaSAhPT0gbnVtUGxhbmVzICk7CisgICAg
ICAgICAgICAgICAgdXBkYXRlQ2FtZXJhKCBjYW1lcmFWUiwgcGFyZW50ICk7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNh
bWVyYXMubGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgIH0KLSAgICAgICAgKi8KKyAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlQ2FtZXJhKCBjYW1lcmFzWyBpIF0sIHBhcmVudCApOwogCi0gICAg
ICAgIGZ1bmN0aW9uIHByb2plY3RPYmplY3QoIG9iamVjdCwgY2FtZXJhLCBzb3J0T2JqZWN0cyAp
IHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggISBvYmplY3QudmlzaWJs
ZSApIHJldHVybjsKKyAgICAgICAgICAgICAgICAvLyB1cGRhdGUgY2FtZXJhIGFuZCBpdHMgY2hp
bGRyZW4KIAotICAgICAgICAgICAgdmFyIHZpc2libGUgPSBvYmplY3QubGF5ZXJzLnRlc3QoIGNh
bWVyYS5sYXllcnMgKTsKKyAgICAgICAgICAgICAgICBjYW1lcmEubWF0cml4V29ybGQuY29weSgg
Y2FtZXJhVlIubWF0cml4V29ybGQgKTsKIAotICAgICAgICAgICAgaWYgKCB2aXNpYmxlICkgewor
ICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGNhbWVyYS5jaGlsZHJlbjsKIAotICAgICAg
ICAgICAgICAgIGlmICggb2JqZWN0LmlzTGlnaHQgKSB7CisgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgICAgICAgICBsaWdodHMucHVzaCggb2JqZWN0ICk7CisgICAgICAgICAgICAgICAgICAg
IGNoaWxkcmVuWyBpIF0udXBkYXRlTWF0cml4V29ybGQoIHRydWUgKTsKIAotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIG9iamVjdC5pc1Nwcml0ZSApIHsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIG9iamVjdC5mcnVzdHVtQ3VsbGVkIHx8IF9mcnVz
dHVtLmludGVyc2VjdHNTcHJpdGUoIG9iamVjdCApICkgeworICAgICAgICAgICAgICAgIHJldHVy
biBjYW1lcmFWUjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc3ByaXRlcy5wdXNoKCBvYmpl
Y3QgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gY2FtZXJhOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0Lmlz
TGVuc0ZsYXJlICkgeworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGxlbnNGbGFy
ZXMucHVzaCggb2JqZWN0ICk7CisgICAgICAgIHRoaXMuaXNQcmVzZW50aW5nID0gaXNQcmVzZW50
aW5nOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzSW1tZWRpYXRlUmVu
ZGVyT2JqZWN0ICkgeworICAgICAgICAvLyBBbmltYXRpb24gTG9vcAogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggc29ydE9iamVjdHMgKSB7CisgICAgICAgIHZhciBvbkFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2sgPSBudWxsOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBfdmVjdG9yMy5zZXRG
cm9tTWF0cml4UG9zaXRpb24oIG9iamVjdC5tYXRyaXhXb3JsZCApCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmFwcGx5TWF0cml4NCggX3Byb2pTY3JlZW5NYXRyaXggKTsKKyAgICAgICAg
ZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggdGltZSwgZnJhbWUgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcG9zZSA9IGZyYW1lLmdldERldmljZVBvc2UoIGZyYW1l
T2ZSZWYgKTsKIAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBv
YmplY3QsIG51bGwsIG9iamVjdC5tYXRlcmlhbCwgX3ZlY3RvcjMueiwgbnVsbCApOworICAgICAg
ICAgICAgaWYgKCBwb3NlICE9PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggb2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5lIHx8IG9iamVjdC5pc1BvaW50cyApIHsK
KyAgICAgICAgICAgICAgICB2YXIgbGF5ZXIgPSBzZXNzaW9uLmJhc2VMYXllcjsKKyAgICAgICAg
ICAgICAgICB2YXIgdmlld3MgPSBmcmFtZS52aWV3czsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIG9iamVjdC5pc1NraW5uZWRNZXNoICkgeworICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IHZpZXdzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LnNrZWxldG9uLnVwZGF0ZSgpOworICAgICAgICAgICAgICAgICAgICB2YXIgdmll
dyA9IHZpZXdzWyBpIF07CisgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IGxheWVy
LmdldFZpZXdwb3J0KCB2aWV3ICk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3TWF0cml4
ID0gcG9zZS5nZXRWaWV3TWF0cml4KCB2aWV3ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB2YXIgY2FtZXJhID0gY2FtZXJhVlIuY2FtZXJhc1sgaSBdOwor
ICAgICAgICAgICAgICAgICAgICBjYW1lcmEubWF0cml4LmZyb21BcnJheSggdmlld01hdHJpeCAp
LmdldEludmVyc2UoIGNhbWVyYS5tYXRyaXggKTsKKyAgICAgICAgICAgICAgICAgICAgY2FtZXJh
LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KCB2aWV3LnByb2plY3Rpb25NYXRyaXggKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2FtZXJhLnZpZXdwb3J0LnNldCggdmlld3BvcnQueCwgdmlld3Bv
cnQueSwgdmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodCApOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggISBvYmplY3QuZnJ1c3R1bUN1bGxlZCB8fCBfZnJ1c3R1bS5pbnRlcnNlY3Rz
T2JqZWN0KCBvYmplY3QgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBpID09PSAwICkg
ewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNvcnRPYmplY3RzICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FtZXJhVlIubWF0cml4LmNvcHkoIGNhbWVyYS5tYXRyaXggKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3Np
dGlvbiggb2JqZWN0Lm1hdHJpeFdvcmxkICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmFwcGx5TWF0cml4NCggX3Byb2pTY3JlZW5NYXRyaXggKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhBQ0sgKG1yZG9vYikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vZ2l0aHViLmNvbS93M2Mvd2VidnIvaXNzdWVzLzIwMwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFWUi5wcm9qZWN0aW9uTWF0cml4
LmNvcHkoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4ICk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdHMudXBkYXRlKCBvYmplY3QgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDsKKyAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXko
IG1hdGVyaWFsICkgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwczsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGdyb3Vwcy5s
ZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSBncm91cHNbIGkgXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0
ZXJpYWxJbmRleCBdOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgY29udHJvbGxl
cnMubGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZ3JvdXBNYXRlcmlhbCAmJiBncm91cE1hdGVyaWFsLnZpc2libGUgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1sgaSBdOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIGdl
b21ldHJ5LCBncm91cE1hdGVyaWFsLCBfdmVjdG9yMy56LCBncm91cCApOworICAgICAgICAgICAg
ICAgIHZhciBpbnB1dFNvdXJjZSA9IGlucHV0U291cmNlc1sgaSBdOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGlucHV0U291cmNlICkg
ewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2
YXIgaW5wdXRQb3NlID0gZnJhbWUuZ2V0SW5wdXRQb3NlKCBpbnB1dFNvdXJjZSwgZnJhbWVPZlJl
ZiApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRlcmlhbC52aXNp
YmxlICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGlucHV0UG9zZSAhPT0gbnVsbCApIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJMaXN0LnB1c2goIG9i
amVjdCwgZ2VvbWV0cnksIG1hdGVyaWFsLCBfdmVjdG9yMy56LCBudWxsICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250cm9sbGVyLm1hdHJpeC5lbGVtZW50cyA9IGlucHV0UG9zZS5wb2lu
dGVyTWF0cml4OworICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5tYXRyaXguZGVj
b21wb3NlKCBjb250cm9sbGVyLnBvc2l0aW9uLCBjb250cm9sbGVyLnJvdGF0aW9uLCBjb250cm9s
bGVyLnNjYWxlICk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpc2libGUg
PSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyLnZpc2libGUgPSBmYWxzZTsKKwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47
CisgICAgICAgICAgICBpZiAoIG9uQW5pbWF0aW9uRnJhbWVDYWxsYmFjayApIG9uQW5pbWF0aW9u
RnJhbWVDYWxsYmFjayggdGltZSApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwg
PSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBwcm9qZWN0T2JqZWN0KCBjaGlsZHJlblsgaSBdLCBjYW1lcmEsIHNvcnRPYmplY3Rz
ICk7CisgICAgICAgIHZhciBhbmltYXRpb24gPSBuZXcgV2ViR0xBbmltYXRpb24oKTsKKyAgICAg
ICAgYW5pbWF0aW9uLnNldEFuaW1hdGlvbkxvb3AoIG9uQW5pbWF0aW9uRnJhbWUgKTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICB0aGlzLnNldEFuaW1hdGlvbkxvb3AgPSBmdW5jdGlvbiAoIGNh
bGxiYWNrICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAgIG9uQW5pbWF0aW9uRnJhbWVDYWxs
YmFjayA9IGNhbGxiYWNrOwogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlck9iamVjdHMoIHJlbmRl
ckxpc3QsIHNjZW5lLCBjYW1lcmEsIG92ZXJyaWRlTWF0ZXJpYWwgKSB7CisgICAgICAgIH07CiAK
LSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHJlbmRlckxpc3QubGVuZ3RoOyBpIDwg
bDsgaSArKyApIHsKKyAgICAgICAgdGhpcy5kaXNwb3NlID0gZnVuY3Rpb24gKCkge307CiAKLSAg
ICAgICAgICAgICAgICB2YXIgcmVuZGVySXRlbSA9IHJlbmRlckxpc3RbIGkgXTsKKyAgICAgICAg
Ly8gREVQUkVDQVRFRAogCi0gICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHJlbmRlckl0ZW0u
b2JqZWN0OwotICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlckl0ZW0uZ2VvbWV0
cnk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gb3ZlcnJpZGVNYXRlcmlhbCA9PT0g
dW5kZWZpbmVkID8gcmVuZGVySXRlbS5tYXRlcmlhbCA6IG92ZXJyaWRlTWF0ZXJpYWw7Ci0gICAg
ICAgICAgICAgICAgdmFyIGdyb3VwID0gcmVuZGVySXRlbS5ncm91cDsKKyAgICAgICAgdGhpcy5n
ZXRTdGFuZGluZ01hdHJpeCA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIGlmICgg
Y2FtZXJhLmlzQXJyYXlDYW1lcmEgKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJF
RS5XZWJYUk1hbmFnZXI6IGdldFN0YW5kaW5nTWF0cml4KCkgaXMgbm8gbG9uZ2VyIG5lZWRlZC4n
ICk7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRIUkVFLk1hdHJpeDQoKTsKIAotICAgICAgICAg
ICAgICAgICAgICBfY3VycmVudEFycmF5Q2FtZXJhID0gY2FtZXJhOworICAgICAgICB9OwogCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBjYW1lcmFzID0gY2FtZXJhLmNhbWVyYXM7CisgICAgICAg
IHRoaXMuc3VibWl0RnJhbWUgPSBmdW5jdGlvbiAoKSB7fTsKIAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaiA9IDAsIGpsID0gY2FtZXJhcy5sZW5ndGg7IGogPCBqbDsgaiArKyApIHsK
KyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1lcmEyID0gY2FtZXJhc1sg
aiBdOworICAgIC8qKgorICAgICAqIEBhdXRob3Igc3VwZXJlZ2diZXJ0IC8gaHR0cDovL3d3dy5w
YXVsYnJ1bnQuY28udWsvCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNv
bS8KKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwor
ICAgICAqIEBhdXRob3Igc3ppbWVrIC8gaHR0cHM6Ly9naXRodWIuY29tL3N6aW1lay8KKyAgICAg
KiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
b2JqZWN0LmxheWVycy50ZXN0KCBjYW1lcmEyLmxheWVycyApICkgeworICAgIGZ1bmN0aW9uIFdl
YkdMUmVuZGVyZXIoIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgYm91bmRzID0gY2FtZXJhMi5ib3VuZHM7CisgICAgICAgIGNvbnNvbGUubG9nKCAnVEhS
RUUuV2ViR0xSZW5kZXJlcicsIFJFVklTSU9OICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgeCA9IGJvdW5kcy54ICogX3dpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB5ID0gYm91bmRzLnkgKiBfaGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB3aWR0aCA9IGJvdW5kcy56ICogX3dpZHRoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBoZWlnaHQgPSBib3VuZHMudyAqIF9oZWlnaHQ7CisgICAgICAgIHBhcmFtZXRl
cnMgPSBwYXJhbWV0ZXJzIHx8IHt9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Ro
aXMuc2V0Vmlld3BvcnQoIHgsIHksIHdpZHRoLCBoZWlnaHQgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfdGhpcy5zZXRTY2lzc29yKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0U2Npc3NvclRlc3QoIHRydWUgKTsKKyAg
ICAgICAgdmFyIF9jYW52YXMgPSBwYXJhbWV0ZXJzLmNhbnZhcyAhPT0gdW5kZWZpbmVkID8gcGFy
YW1ldGVycy5jYW52YXMgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoICdodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sJywgJ2NhbnZhcycgKSwKKyAgICAgICAgICAgIF9jb250ZXh0ID0gcGFy
YW1ldGVycy5jb250ZXh0ICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmNvbnRleHQgOiBudWxs
LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0KCBvYmplY3QsIHNj
ZW5lLCBjYW1lcmEyLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIGdyb3VwICk7CisgICAgICAgICAgICBf
YWxwaGEgPSBwYXJhbWV0ZXJzLmFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmFscGhh
IDogZmFsc2UsCisgICAgICAgICAgICBfZGVwdGggPSBwYXJhbWV0ZXJzLmRlcHRoICE9PSB1bmRl
ZmluZWQgPyBwYXJhbWV0ZXJzLmRlcHRoIDogdHJ1ZSwKKyAgICAgICAgICAgIF9zdGVuY2lsID0g
cGFyYW1ldGVycy5zdGVuY2lsICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnN0ZW5jaWwgOiB0
cnVlLAorICAgICAgICAgICAgX2FudGlhbGlhcyA9IHBhcmFtZXRlcnMuYW50aWFsaWFzICE9PSB1
bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmFudGlhbGlhcyA6IGZhbHNlLAorICAgICAgICAgICAgX3By
ZW11bHRpcGxpZWRBbHBoYSA9IHBhcmFtZXRlcnMucHJlbXVsdGlwbGllZEFscGhhICE9PSB1bmRl
ZmluZWQgPyBwYXJhbWV0ZXJzLnByZW11bHRpcGxpZWRBbHBoYSA6IHRydWUsCisgICAgICAgICAg
ICBfcHJlc2VydmVEcmF3aW5nQnVmZmVyID0gcGFyYW1ldGVycy5wcmVzZXJ2ZURyYXdpbmdCdWZm
ZXIgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucHJlc2VydmVEcmF3aW5nQnVmZmVyIDogZmFs
c2UsCisgICAgICAgICAgICBfcG93ZXJQcmVmZXJlbmNlID0gcGFyYW1ldGVycy5wb3dlclByZWZl
cmVuY2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMucG93ZXJQcmVmZXJlbmNlIDogJ2RlZmF1
bHQnOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHZhciBjdXJyZW50UmVu
ZGVyTGlzdCA9IG51bGw7CisgICAgICAgIHZhciBjdXJyZW50UmVuZGVyU3RhdGUgPSBudWxsOwog
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcHVibGljIHByb3BlcnRpZXMKIAot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuZG9tRWxlbWVudCA9IF9jYW52
YXM7CisgICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7CiAKLSAgICAgICAgICAgICAgICAgICAg
X2N1cnJlbnRBcnJheUNhbWVyYSA9IG51bGw7CisgICAgICAgIC8vIGNsZWFyaW5nCiAKLSAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0KCBvYmplY3QsIHNjZW5lLCBjYW1lcmEsIGdlb21l
dHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKTsKKyAgICAgICAgdGhpcy5hdXRvQ2xlYXIgPSB0cnVlOwor
ICAgICAgICB0aGlzLmF1dG9DbGVhckNvbG9yID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5hdXRvQ2xl
YXJEZXB0aCA9IHRydWU7CisgICAgICAgIHRoaXMuYXV0b0NsZWFyU3RlbmNpbCA9IHRydWU7CiAK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgIC8vIHNjZW5lIGdyYXBoCiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgdGhpcy5zb3J0T2JqZWN0cyA9IHRydWU7CiAKLSAgICAgICAgfQorICAgICAg
ICAvLyB1c2VyLWRlZmluZWQgY2xpcHBpbmcKIAotICAgICAgICBmdW5jdGlvbiByZW5kZXJPYmpl
Y3QoIG9iamVjdCwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCApIHsK
KyAgICAgICAgdGhpcy5jbGlwcGluZ1BsYW5lcyA9IFtdOworICAgICAgICB0aGlzLmxvY2FsQ2xp
cHBpbmdFbmFibGVkID0gZmFsc2U7CiAKLSAgICAgICAgICAgIG9iamVjdC5tb2RlbFZpZXdNYXRy
aXgubXVsdGlwbHlNYXRyaWNlcyggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwgb2JqZWN0Lm1h
dHJpeFdvcmxkICk7Ci0gICAgICAgICAgICBvYmplY3Qubm9ybWFsTWF0cml4LmdldE5vcm1hbE1h
dHJpeCggb2JqZWN0Lm1vZGVsVmlld01hdHJpeCApOworICAgICAgICAvLyBwaHlzaWNhbGx5IGJh
c2VkIHNoYWRpbmcKIAotICAgICAgICAgICAgb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCBfdGhpcywg
c2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCApOworICAgICAgICB0aGlz
LmdhbW1hRmFjdG9yID0gMi4wOyAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICAg
ICAgdGhpcy5nYW1tYUlucHV0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuZ2FtbWFPdXRwdXQgPSBm
YWxzZTsKIAotICAgICAgICAgICAgaWYgKCBvYmplY3QuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Qg
KSB7CisgICAgICAgIC8vIHBoeXNpY2FsIGxpZ2h0cwogCi0gICAgICAgICAgICAgICAgc3RhdGUu
c2V0TWF0ZXJpYWwoIG1hdGVyaWFsICk7CisgICAgICAgIHRoaXMucGh5c2ljYWxseUNvcnJlY3RM
aWdodHMgPSBmYWxzZTsKIAotICAgICAgICAgICAgICAgIHZhciBwcm9ncmFtID0gc2V0UHJvZ3Jh
bSggY2FtZXJhLCBzY2VuZS5mb2csIG1hdGVyaWFsLCBvYmplY3QgKTsKKyAgICAgICAgLy8gdG9u
ZSBtYXBwaW5nCiAKLSAgICAgICAgICAgICAgICBfY3VycmVudEdlb21ldHJ5UHJvZ3JhbSA9ICcn
OworICAgICAgICB0aGlzLnRvbmVNYXBwaW5nID0gTGluZWFyVG9uZU1hcHBpbmc7CisgICAgICAg
IHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZSA9IDEuMDsKKyAgICAgICAgdGhpcy50b25lTWFwcGlu
Z1doaXRlUG9pbnQgPSAxLjA7CiAKLSAgICAgICAgICAgICAgICByZW5kZXJPYmplY3RJbW1lZGlh
dGUoIG9iamVjdCwgcHJvZ3JhbSwgbWF0ZXJpYWwgKTsKKyAgICAgICAgLy8gbW9ycGhzCiAKLSAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMubWF4TW9ycGhUYXJnZXRzID0gODsKKyAg
ICAgICAgdGhpcy5tYXhNb3JwaE5vcm1hbHMgPSA0OwogCi0gICAgICAgICAgICAgICAgX3RoaXMu
cmVuZGVyQnVmZmVyRGlyZWN0KCBjYW1lcmEsIHNjZW5lLmZvZywgZ2VvbWV0cnksIG1hdGVyaWFs
LCBvYmplY3QsIGdyb3VwICk7CisgICAgICAgIC8vIGludGVybmFsIHByb3BlcnRpZXMKIAotICAg
ICAgICAgICAgfQorICAgICAgICB2YXIgX3RoaXMgPSB0aGlzLAogCi0gICAgICAgICAgICBvYmpl
Y3Qub25BZnRlclJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5LCBtYXRlcmlh
bCwgZ3JvdXAgKTsKKyAgICAgICAgICAgIF9pc0NvbnRleHRMb3N0ID0gZmFsc2UsCiAKLSAgICAg
ICAgfQorICAgICAgICAgICAgLy8gaW50ZXJuYWwgc3RhdGUgY2FjaGUKIAotICAgICAgICBmdW5j
dGlvbiBpbml0TWF0ZXJpYWwoIG1hdGVyaWFsLCBmb2csIG9iamVjdCApIHsKKyAgICAgICAgICAg
IF9mcmFtZWJ1ZmZlciA9IG51bGwsCiAKLSAgICAgICAgICAgIHZhciBtYXRlcmlhbFByb3BlcnRp
ZXMgPSBwcm9wZXJ0aWVzLmdldCggbWF0ZXJpYWwgKTsKKyAgICAgICAgICAgIF9jdXJyZW50UmVu
ZGVyVGFyZ2V0ID0gbnVsbCwKKyAgICAgICAgICAgIF9jdXJyZW50RnJhbWVidWZmZXIgPSBudWxs
LAorICAgICAgICAgICAgX2N1cnJlbnRNYXRlcmlhbElkID0gLSAxLAorICAgICAgICAgICAgX2N1
cnJlbnRHZW9tZXRyeVByb2dyYW0gPSAnJywKIAotICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMg
PSBwcm9ncmFtQ2FjaGUuZ2V0UGFyYW1ldGVycygKLSAgICAgICAgICAgICAgICBtYXRlcmlhbCwg
X2xpZ2h0cywgZm9nLCBfY2xpcHBpbmcubnVtUGxhbmVzLCBfY2xpcHBpbmcubnVtSW50ZXJzZWN0
aW9uLCBvYmplY3QgKTsKKyAgICAgICAgICAgIF9jdXJyZW50Q2FtZXJhID0gbnVsbCwKKyAgICAg
ICAgICAgIF9jdXJyZW50QXJyYXlDYW1lcmEgPSBudWxsLAogCi0gICAgICAgICAgICB2YXIgY29k
ZSA9IHByb2dyYW1DYWNoZS5nZXRQcm9ncmFtQ29kZSggbWF0ZXJpYWwsIHBhcmFtZXRlcnMgKTsK
KyAgICAgICAgICAgIF9jdXJyZW50Vmlld3BvcnQgPSBuZXcgVmVjdG9yNCgpLAorICAgICAgICAg
ICAgX2N1cnJlbnRTY2lzc29yID0gbmV3IFZlY3RvcjQoKSwKKyAgICAgICAgICAgIF9jdXJyZW50
U2Npc3NvclRlc3QgPSBudWxsLAogCi0gICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IG1hdGVyaWFs
UHJvcGVydGllcy5wcm9ncmFtOwotICAgICAgICAgICAgdmFyIHByb2dyYW1DaGFuZ2UgPSB0cnVl
OworICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgaWYgKCBwcm9ncmFtID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICBfdXNlZFRleHR1cmVVbml0cyA9IDAsCiAKLSAgICAgICAgICAg
ICAgICAvLyBuZXcgbWF0ZXJpYWwKLSAgICAgICAgICAgICAgICBtYXRlcmlhbC5hZGRFdmVudExp
c3RlbmVyKCAnZGlzcG9zZScsIG9uTWF0ZXJpYWxEaXNwb3NlICk7CisgICAgICAgICAgICAvLwog
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCBwcm9ncmFtLmNvZGUgIT09IGNvZGUgKSB7CisgICAg
ICAgICAgICBfd2lkdGggPSBfY2FudmFzLndpZHRoLAorICAgICAgICAgICAgX2hlaWdodCA9IF9j
YW52YXMuaGVpZ2h0LAogCi0gICAgICAgICAgICAgICAgLy8gY2hhbmdlZCBnbHNsIG9yIHBhcmFt
ZXRlcnMKLSAgICAgICAgICAgICAgICByZWxlYXNlTWF0ZXJpYWxQcm9ncmFtUmVmZXJlbmNlKCBt
YXRlcmlhbCApOworICAgICAgICAgICAgX3BpeGVsUmF0aW8gPSAxLAogCi0gICAgICAgICAgICB9
IGVsc2UgaWYgKCBwYXJhbWV0ZXJzLnNoYWRlcklEICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICBfdmlld3BvcnQgPSBuZXcgVmVjdG9yNCggMCwgMCwgX3dpZHRoLCBfaGVpZ2h0ICksCisg
ICAgICAgICAgICBfc2Npc3NvciA9IG5ldyBWZWN0b3I0KCAwLCAwLCBfd2lkdGgsIF9oZWlnaHQg
KSwKKyAgICAgICAgICAgIF9zY2lzc29yVGVzdCA9IGZhbHNlLAogCi0gICAgICAgICAgICAgICAg
Ly8gc2FtZSBnbHNsIGFuZCB1bmlmb3JtIGxpc3QKLSAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAvLyBmcnVzdHVtCiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBfZnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCksCiAKLSAgICAgICAgICAgICAgICAvLyBvbmx5IHJl
YnVpbGQgdW5pZm9ybSBsaXN0Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbUNoYW5nZSA9IGZhbHNl
OworICAgICAgICAgICAgLy8gY2xpcHBpbmcKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAg
X2NsaXBwaW5nID0gbmV3IFdlYkdMQ2xpcHBpbmcoKSwKKyAgICAgICAgICAgIF9jbGlwcGluZ0Vu
YWJsZWQgPSBmYWxzZSwKKyAgICAgICAgICAgIF9sb2NhbENsaXBwaW5nRW5hYmxlZCA9IGZhbHNl
LAogCi0gICAgICAgICAgICBpZiAoIHByb2dyYW1DaGFuZ2UgKSB7CisgICAgICAgICAgICAvLyBj
YW1lcmEgbWF0cmljZXMgY2FjaGUKIAotICAgICAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5z
aGFkZXJJRCApIHsKKyAgICAgICAgICAgIF9wcm9qU2NyZWVuTWF0cml4ID0gbmV3IE1hdHJpeDQo
KSwKIAotICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gU2hhZGVyTGliWyBwYXJhbWV0
ZXJzLnNoYWRlcklEIF07CisgICAgICAgICAgICBfdmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxQcm9wZXJ0aWVzLnNoYWRlciA9IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsLnR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1bmlmb3JtczogVW5pZm9ybXNVdGlscy5jbG9uZSggc2hhZGVyLnVuaWZvcm1zICks
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IHNoYWRlci52ZXJ0ZXhTaGFk
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogc2hhZGVyLmZyYWdt
ZW50U2hhZGVyCi0gICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgIGZ1bmN0aW9uIGdldFRh
cmdldFBpeGVsUmF0aW8oKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIF9jdXJyZW50UmVuZGVyVGFyZ2V0ID09PSBudWxsID8gX3BpeGVsUmF0aW8gOiAx
OwogCi0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsUHJvcGVydGllcy5zaGFkZXIgPSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbC50eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgdW5pZm9ybXM6IG1hdGVyaWFsLnVuaWZvcm1zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4U2hhZGVyOiBtYXRlcmlhbC52ZXJ0ZXhTaGFkZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogbWF0ZXJpYWwuZnJhZ21lbnRTaGFkZXIKLSAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAvLyBpbml0aWFsaXplCiAKLSAgICAgICAgICAgICAgICBtYXRlcmlhbC5vbkJlZm9yZUNv
bXBpbGUoIG1hdGVyaWFsUHJvcGVydGllcy5zaGFkZXIgKTsKKyAgICAgICAgdmFyIF9nbDsKIAot
ICAgICAgICAgICAgICAgIHByb2dyYW0gPSBwcm9ncmFtQ2FjaGUuYWNxdWlyZVByb2dyYW0oIG1h
dGVyaWFsLCBtYXRlcmlhbFByb3BlcnRpZXMuc2hhZGVyLCBwYXJhbWV0ZXJzLCBjb2RlICk7Cisg
ICAgICAgIHRyeSB7CiAKLSAgICAgICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3Jh
bSA9IHByb2dyYW07Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWwucHJvZ3JhbSA9IHByb2dyYW07
CisgICAgICAgICAgICB2YXIgY29udGV4dEF0dHJpYnV0ZXMgPSB7CisgICAgICAgICAgICAgICAg
YWxwaGE6IF9hbHBoYSwKKyAgICAgICAgICAgICAgICBkZXB0aDogX2RlcHRoLAorICAgICAgICAg
ICAgICAgIHN0ZW5jaWw6IF9zdGVuY2lsLAorICAgICAgICAgICAgICAgIGFudGlhbGlhczogX2Fu
dGlhbGlhcywKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IF9wcmVtdWx0aXBs
aWVkQWxwaGEsCisgICAgICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBfcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyLAorICAgICAgICAgICAgICAgIHBvd2VyUHJlZmVyZW5jZTogX3Bvd2Vy
UHJlZmVyZW5jZQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gZXZlbnQgbGlzdGVuZXJzIG11c3QgYmUgcmVnaXN0ZXJlZCBiZWZvcmUgV2ViR0wgY29udGV4
dCBpcyBjcmVhdGVkLCBzZWUgIzEyNzUzCiAKLSAgICAgICAgICAgIHZhciBwcm9ncmFtQXR0cmli
dXRlcyA9IHByb2dyYW0uZ2V0QXR0cmlidXRlcygpOworICAgICAgICAgICAgX2NhbnZhcy5hZGRF
dmVudExpc3RlbmVyKCAnd2ViZ2xjb250ZXh0bG9zdCcsIG9uQ29udGV4dExvc3QsIGZhbHNlICk7
CisgICAgICAgICAgICBfY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoICd3ZWJnbGNvbnRleHRyZXN0
b3JlZCcsIG9uQ29udGV4dFJlc3RvcmUsIGZhbHNlICk7CiAKLSAgICAgICAgICAgIGlmICggbWF0
ZXJpYWwubW9ycGhUYXJnZXRzICkgeworICAgICAgICAgICAgX2dsID0gX2NvbnRleHQgfHwgX2Nh
bnZhcy5nZXRDb250ZXh0KCAnd2ViZ2wnLCBjb250ZXh0QXR0cmlidXRlcyApIHx8IF9jYW52YXMu
Z2V0Q29udGV4dCggJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGNvbnRleHRBdHRyaWJ1dGVzICk7CiAK
LSAgICAgICAgICAgICAgICBtYXRlcmlhbC5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMgPSAwOwor
ICAgICAgICAgICAgaWYgKCBfZ2wgPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBfdGhpcy5tYXhNb3JwaFRhcmdldHM7IGkgKysgKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCBfY2FudmFzLmdldENvbnRleHQoICd3ZWJnbCcgKSAhPT0gbnVsbCApIHsK
IAotICAgICAgICAgICAgICAgICAgICBpZiAoIHByb2dyYW1BdHRyaWJ1dGVzWyAnbW9ycGhUYXJn
ZXQnICsgaSBdID49IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigg
J0Vycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0
ZXMuJyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5udW1TdXBwb3J0ZWRN
b3JwaFRhcmdldHMgKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggJ0Vycm9yIGNy
ZWF0aW5nIFdlYkdMIGNvbnRleHQuJyApOwogCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubW9ycGhOb3JtYWxzICkgewotCi0g
ICAgICAgICAgICAgICAgbWF0ZXJpYWwubnVtU3VwcG9ydGVkTW9ycGhOb3JtYWxzID0gMDsKLQot
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IF90aGlzLm1heE1vcnBoTm9ybWFs
czsgaSArKyApIHsKKyAgICAgICAgICAgIC8vIFNvbWUgZXhwZXJpbWVudGFsLXdlYmdsIGltcGxl
bWVudGF0aW9ucyBkbyBub3QgaGF2ZSBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQKIAotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHByb2dyYW1BdHRyaWJ1dGVzWyAnbW9ycGhOb3JtYWwnICsgaSBd
ID49IDAgKSB7CisgICAgICAgICAgICBpZiAoIF9nbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQg
PT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubnVt
U3VwcG9ydGVkTW9ycGhOb3JtYWxzICsrOworICAgICAgICAgICAgICAgIF9nbC5nZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAncmFuZ2VNaW4nOiAxLCAncmFuZ2VNYXgnOiAx
LCAncHJlY2lzaW9uJzogMSB9OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHVuaWZvcm1zID0gbWF0ZXJp
YWxQcm9wZXJ0aWVzLnNoYWRlci51bmlmb3JtczsKKyAgICAgICAgfSBjYXRjaCAoIGVycm9yICkg
ewogCi0gICAgICAgICAgICBpZiAoICEgbWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCAmJgotICAg
ICAgICAgICAgICAgICEgbWF0ZXJpYWwuaXNSYXdTaGFkZXJNYXRlcmlhbCB8fAotICAgICAgICAg
ICAgICAgIG1hdGVyaWFsLmNsaXBwaW5nID09PSB0cnVlICkgeworICAgICAgICAgICAgY29uc29s
ZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXI6ICcgKyBlcnJvci5tZXNzYWdlICk7CiAKLSAg
ICAgICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMubnVtQ2xpcHBpbmdQbGFuZXMgPSBfY2xp
cHBpbmcubnVtUGxhbmVzOwotICAgICAgICAgICAgICAgIG1hdGVyaWFsUHJvcGVydGllcy5udW1J
bnRlcnNlY3Rpb24gPSBfY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uOwotICAgICAgICAgICAgICAg
IHVuaWZvcm1zLmNsaXBwaW5nUGxhbmVzID0gX2NsaXBwaW5nLnVuaWZvcm07CisgICAgICAgIH0K
IAotICAgICAgICAgICAgfQorICAgICAgICB2YXIgZXh0ZW5zaW9ucywgY2FwYWJpbGl0aWVzLCBz
dGF0ZSwgaW5mbzsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMsIHRleHR1cmVzLCBhdHRyaWJ1dGVz
LCBnZW9tZXRyaWVzLCBvYmplY3RzOworICAgICAgICB2YXIgcHJvZ3JhbUNhY2hlLCByZW5kZXJM
aXN0cywgcmVuZGVyU3RhdGVzOwogCi0gICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMuZm9n
ID0gZm9nOworICAgICAgICB2YXIgYmFja2dyb3VuZCwgbW9ycGh0YXJnZXRzLCBidWZmZXJSZW5k
ZXJlciwgaW5kZXhlZEJ1ZmZlclJlbmRlcmVyOworICAgICAgICB2YXIgc3ByaXRlUmVuZGVyZXI7
CiAKLSAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBsaWdodCBzZXR1cCBpdCB3YXMgY3JlYXRlZCBm
b3IKKyAgICAgICAgdmFyIHV0aWxzOwogCi0gICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMu
bGlnaHRzSGFzaCA9IF9saWdodHMuaGFzaDsKKyAgICAgICAgZnVuY3Rpb24gaW5pdEdMQ29udGV4
dCgpIHsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5saWdodHMgKSB7CisgICAgICAgICAg
ICBleHRlbnNpb25zID0gbmV3IFdlYkdMRXh0ZW5zaW9ucyggX2dsICk7CisgICAgICAgICAgICBl
eHRlbnNpb25zLmdldCggJ1dFQkdMX2RlcHRoX3RleHR1cmUnICk7CisgICAgICAgICAgICBleHRl
bnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApOworICAgICAgICAgICAgZXh0ZW5zaW9u
cy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInICk7CisgICAgICAgICAgICBleHRlbnNp
b25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICk7CisgICAgICAgICAgICBleHRlbnNp
b25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyApOworICAgICAgICAgICAg
ZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICk7CisgICAgICAgICAg
ICBleHRlbnNpb25zLmdldCggJ09FU19lbGVtZW50X2luZGV4X3VpbnQnICk7CisgICAgICAgICAg
ICBleHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICk7CiAKLSAgICAgICAg
ICAgICAgICAvLyB3aXJlIHVwIHRoZSBtYXRlcmlhbCB0byB0aGlzIHJlbmRlcmVyJ3MgbGlnaHRp
bmcgc3RhdGUKKyAgICAgICAgICAgIHV0aWxzID0gbmV3IFdlYkdMVXRpbHMoIF9nbCwgZXh0ZW5z
aW9ucyApOwogCi0gICAgICAgICAgICAgICAgdW5pZm9ybXMuYW1iaWVudExpZ2h0Q29sb3IudmFs
dWUgPSBfbGlnaHRzLmFtYmllbnQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9u
YWxMaWdodHMudmFsdWUgPSBfbGlnaHRzLmRpcmVjdGlvbmFsOwotICAgICAgICAgICAgICAgIHVu
aWZvcm1zLnNwb3RMaWdodHMudmFsdWUgPSBfbGlnaHRzLnNwb3Q7Ci0gICAgICAgICAgICAgICAg
dW5pZm9ybXMucmVjdEFyZWFMaWdodHMudmFsdWUgPSBfbGlnaHRzLnJlY3RBcmVhOwotICAgICAg
ICAgICAgICAgIHVuaWZvcm1zLnBvaW50TGlnaHRzLnZhbHVlID0gX2xpZ2h0cy5wb2ludDsKLSAg
ICAgICAgICAgICAgICB1bmlmb3Jtcy5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlID0gX2xpZ2h0cy5o
ZW1pOwotCi0gICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFs
dWUgPSBfbGlnaHRzLmRpcmVjdGlvbmFsU2hhZG93TWFwOwotICAgICAgICAgICAgICAgIHVuaWZv
cm1zLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlID0gX2xpZ2h0cy5kaXJlY3Rpb25hbFNo
YWRvd01hdHJpeDsKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zcG90U2hhZG93TWFwLnZhbHVl
ID0gX2xpZ2h0cy5zcG90U2hhZG93TWFwOwotICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNwb3RT
aGFkb3dNYXRyaXgudmFsdWUgPSBfbGlnaHRzLnNwb3RTaGFkb3dNYXRyaXg7Ci0gICAgICAgICAg
ICAgICAgdW5pZm9ybXMucG9pbnRTaGFkb3dNYXAudmFsdWUgPSBfbGlnaHRzLnBvaW50U2hhZG93
TWFwOwotICAgICAgICAgICAgICAgIHVuaWZvcm1zLnBvaW50U2hhZG93TWF0cml4LnZhbHVlID0g
X2xpZ2h0cy5wb2ludFNoYWRvd01hdHJpeDsKLSAgICAgICAgICAgICAgICAvLyBUT0RPIChhYmVs
bmF0aW9uKTogYWRkIGFyZWEgbGlnaHRzIHNoYWRvdyBpbmZvIHRvIHVuaWZvcm1zCisgICAgICAg
ICAgICBjYXBhYmlsaXRpZXMgPSBuZXcgV2ViR0xDYXBhYmlsaXRpZXMoIF9nbCwgZXh0ZW5zaW9u
cywgcGFyYW1ldGVycyApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZSA9IG5l
dyBXZWJHTFN0YXRlKCBfZ2wsIGV4dGVuc2lvbnMsIHV0aWxzICk7CisgICAgICAgICAgICBzdGF0
ZS5zY2lzc29yKCBfY3VycmVudFNjaXNzb3IuY29weSggX3NjaXNzb3IgKS5tdWx0aXBseVNjYWxh
ciggX3BpeGVsUmF0aW8gKSApOworICAgICAgICAgICAgc3RhdGUudmlld3BvcnQoIF9jdXJyZW50
Vmlld3BvcnQuY29weSggX3ZpZXdwb3J0ICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICkg
KTsKIAotICAgICAgICAgICAgdmFyIHByb2dVbmlmb3JtcyA9IG1hdGVyaWFsUHJvcGVydGllcy5w
cm9ncmFtLmdldFVuaWZvcm1zKCksCi0gICAgICAgICAgICAgICAgdW5pZm9ybXNMaXN0ID0KLSAg
ICAgICAgICAgICAgICAgICAgV2ViR0xVbmlmb3Jtcy5zZXFXaXRoVmFsdWUoIHByb2dVbmlmb3Jt
cy5zZXEsIHVuaWZvcm1zICk7CisgICAgICAgICAgICBpbmZvID0gbmV3IFdlYkdMSW5mbyggX2ds
ICk7CisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IFdlYkdMUHJvcGVydGllcygpOworICAg
ICAgICAgICAgdGV4dHVyZXMgPSBuZXcgV2ViR0xUZXh0dXJlcyggX2dsLCBleHRlbnNpb25zLCBz
dGF0ZSwgcHJvcGVydGllcywgY2FwYWJpbGl0aWVzLCB1dGlscywgaW5mbyApOworICAgICAgICAg
ICAgYXR0cmlidXRlcyA9IG5ldyBXZWJHTEF0dHJpYnV0ZXMoIF9nbCApOworICAgICAgICAgICAg
Z2VvbWV0cmllcyA9IG5ldyBXZWJHTEdlb21ldHJpZXMoIF9nbCwgYXR0cmlidXRlcywgaW5mbyAp
OworICAgICAgICAgICAgb2JqZWN0cyA9IG5ldyBXZWJHTE9iamVjdHMoIGdlb21ldHJpZXMsIGlu
Zm8gKTsKKyAgICAgICAgICAgIG1vcnBodGFyZ2V0cyA9IG5ldyBXZWJHTE1vcnBodGFyZ2V0cygg
X2dsICk7CisgICAgICAgICAgICBwcm9ncmFtQ2FjaGUgPSBuZXcgV2ViR0xQcm9ncmFtcyggX3Ro
aXMsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyApOworICAgICAgICAgICAgcmVuZGVyTGlzdHMg
PSBuZXcgV2ViR0xSZW5kZXJMaXN0cygpOworICAgICAgICAgICAgcmVuZGVyU3RhdGVzID0gbmV3
IFdlYkdMUmVuZGVyU3RhdGVzKCk7CiAKLSAgICAgICAgICAgIG1hdGVyaWFsUHJvcGVydGllcy51
bmlmb3Jtc0xpc3QgPSB1bmlmb3Jtc0xpc3Q7CisgICAgICAgICAgICBiYWNrZ3JvdW5kID0gbmV3
IFdlYkdMQmFja2dyb3VuZCggX3RoaXMsIHN0YXRlLCBvYmplY3RzLCBfcHJlbXVsdGlwbGllZEFs
cGhhICk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyUmVuZGVyZXIgPSBuZXcgV2Vi
R0xCdWZmZXJSZW5kZXJlciggX2dsLCBleHRlbnNpb25zLCBpbmZvICk7CisgICAgICAgICAgICBp
bmRleGVkQnVmZmVyUmVuZGVyZXIgPSBuZXcgV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXIoIF9n
bCwgZXh0ZW5zaW9ucywgaW5mbyApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNldFByb2dyYW0oIGNh
bWVyYSwgZm9nLCBtYXRlcmlhbCwgb2JqZWN0ICkgeworICAgICAgICAgICAgc3ByaXRlUmVuZGVy
ZXIgPSBuZXcgV2ViR0xTcHJpdGVSZW5kZXJlciggX3RoaXMsIF9nbCwgc3RhdGUsIHRleHR1cmVz
LCBjYXBhYmlsaXRpZXMgKTsKIAotICAgICAgICAgICAgX3VzZWRUZXh0dXJlVW5pdHMgPSAwOwor
ICAgICAgICAgICAgaW5mby5wcm9ncmFtcyA9IHByb2dyYW1DYWNoZS5wcm9ncmFtczsKIAotICAg
ICAgICAgICAgdmFyIG1hdGVyaWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlh
bCApOworICAgICAgICAgICAgX3RoaXMuY29udGV4dCA9IF9nbDsKKyAgICAgICAgICAgIF90aGlz
LmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllczsKKyAgICAgICAgICAgIF90aGlzLmV4dGVuc2lv
bnMgPSBleHRlbnNpb25zOworICAgICAgICAgICAgX3RoaXMucHJvcGVydGllcyA9IHByb3BlcnRp
ZXM7CisgICAgICAgICAgICBfdGhpcy5yZW5kZXJMaXN0cyA9IHJlbmRlckxpc3RzOworICAgICAg
ICAgICAgX3RoaXMuc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgIF90aGlzLmluZm8gPSBpbmZv
OwogCi0gICAgICAgICAgICBpZiAoIF9jbGlwcGluZ0VuYWJsZWQgKSB7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmICggX2xvY2FsQ2xpcHBpbmdFbmFibGVkIHx8IGNhbWVyYSAhPT0g
X2N1cnJlbnRDYW1lcmEgKSB7CisgICAgICAgIGluaXRHTENvbnRleHQoKTsKIAotICAgICAgICAg
ICAgICAgICAgICB2YXIgdXNlQ2FjaGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJh
ID09PSBfY3VycmVudENhbWVyYSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwu
aWQgPT09IF9jdXJyZW50TWF0ZXJpYWxJZDsKKyAgICAgICAgLy8gdnIKIAotICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBtaWdodCB3YW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHNvbWUg
Q2xpcHBpbmdHcm91cAotICAgICAgICAgICAgICAgICAgICAvLyBvYmplY3QgaW5zdGVhZCBvZiB0
aGUgbWF0ZXJpYWwsIG9uY2UgaXQgYmVjb21lcyBmZWFzaWJsZQotICAgICAgICAgICAgICAgICAg
ICAvLyAoIzg0NjUsICM4Mzc5KQotICAgICAgICAgICAgICAgICAgICBfY2xpcHBpbmcuc2V0U3Rh
dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5jbGlwcGluZ1BsYW5lcywgbWF0
ZXJpYWwuY2xpcEludGVyc2VjdGlvbiwgbWF0ZXJpYWwuY2xpcFNoYWRvd3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjYW1lcmEsIG1hdGVyaWFsUHJvcGVydGllcywgdXNlQ2FjaGUgKTsKKyAg
ICAgICAgdmFyIHZyID0gKCAneHInIGluIG5hdmlnYXRvciApID8gbmV3IFdlYlhSTWFuYWdlcigg
X3RoaXMgKSA6IG5ldyBXZWJWUk1hbmFnZXIoIF90aGlzICk7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgIHRoaXMudnIgPSB2cjsKIAotICAgICAgICAgICAgfQorICAgICAgICAvLyBzaGFk
b3cgbWFwCiAKLSAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubmVlZHNVcGRhdGUgPT09IGZhbHNl
ICkgeworICAgICAgICB2YXIgc2hhZG93TWFwID0gbmV3IFdlYkdMU2hhZG93TWFwKCBfdGhpcywg
b2JqZWN0cywgY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplICk7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgIHRoaXMuc2hhZG93TWFwID0gc2hhZG93TWFwOwogCi0gICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgLy8gQVBJCiAKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBtYXRlcmlhbC5mb2cgJiYgbWF0ZXJpYWxQcm9wZXJ0aWVzLmZvZyAh
PT0gZm9nICkgeworICAgICAgICB0aGlzLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIF9nbDsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLmxp
Z2h0cyAmJiBtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzSGFzaCAhPT0gX2xpZ2h0cy5oYXNoICkg
eworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRl
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcyA9IGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5udW1D
bGlwcGluZ1BsYW5lcyAhPT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICAgICAgICAgICggbWF0
ZXJpYWxQcm9wZXJ0aWVzLm51bUNsaXBwaW5nUGxhbmVzICE9PSBfY2xpcHBpbmcubnVtUGxhbmVz
IHx8Ci0gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsUHJvcGVydGllcy5udW1JbnRlcnNlY3Rp
b24gIT09IF9jbGlwcGluZy5udW1JbnRlcnNlY3Rpb24gKSApIHsKKyAgICAgICAgICAgIHJldHVy
biBfZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKIAotICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgIHRoaXMuZm9yY2VDb250ZXh0TG9zcyA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VC
R0xfbG9zZV9jb250ZXh0JyApOworICAgICAgICAgICAgaWYgKCBleHRlbnNpb24gKSBleHRlbnNp
b24ubG9zZUNvbnRleHQoKTsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5uZWVkc1VwZGF0
ZSApIHsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIGluaXRNYXRlcmlhbCggbWF0ZXJp
YWwsIGZvZywgb2JqZWN0ICk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlID0gZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9u
cy5nZXQoICdXRUJHTF9sb3NlX2NvbnRleHQnICk7CisgICAgICAgICAgICBpZiAoIGV4dGVuc2lv
biApIGV4dGVuc2lvbi5yZXN0b3JlQ29udGV4dCgpOwogCi0gICAgICAgICAgICB2YXIgcmVmcmVz
aFByb2dyYW0gPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciByZWZyZXNoTWF0ZXJpYWwgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHZhciByZWZyZXNoTGlnaHRzID0gZmFsc2U7CisgICAgICAgIH07CiAK
LSAgICAgICAgICAgIHZhciBwcm9ncmFtID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLnByb2dyYW0sCi0g
ICAgICAgICAgICAgICAgcF91bmlmb3JtcyA9IHByb2dyYW0uZ2V0VW5pZm9ybXMoKSwKLSAgICAg
ICAgICAgICAgICBtX3VuaWZvcm1zID0gbWF0ZXJpYWxQcm9wZXJ0aWVzLnNoYWRlci51bmlmb3Jt
czsKKyAgICAgICAgdGhpcy5nZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAg
ICAgICBpZiAoIHByb2dyYW0uaWQgIT09IF9jdXJyZW50UHJvZ3JhbSApIHsKKyAgICAgICAgICAg
IHJldHVybiBfcGl4ZWxSYXRpbzsKIAotICAgICAgICAgICAgICAgIF9nbC51c2VQcm9ncmFtKCBw
cm9ncmFtLnByb2dyYW0gKTsKLSAgICAgICAgICAgICAgICBfY3VycmVudFByb2dyYW0gPSBwcm9n
cmFtLmlkOworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgcmVmcmVzaFByb2dyYW0gPSB0
cnVlOwotICAgICAgICAgICAgICAgIHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgcmVmcmVzaExpZ2h0cyA9IHRydWU7CisgICAgICAgIHRoaXMuc2V0UGl4ZWxSYXRpbyA9
IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgg
dmFsdWUgPT09IHVuZGVmaW5lZCApIHJldHVybjsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlh
bC5pZCAhPT0gX2N1cnJlbnRNYXRlcmlhbElkICkgeworICAgICAgICAgICAgX3BpeGVsUmF0aW8g
PSB2YWx1ZTsKIAotICAgICAgICAgICAgICAgIF9jdXJyZW50TWF0ZXJpYWxJZCA9IG1hdGVyaWFs
LmlkOworICAgICAgICAgICAgdGhpcy5zZXRTaXplKCBfd2lkdGgsIF9oZWlnaHQsIGZhbHNlICk7
CiAKLSAgICAgICAgICAgICAgICByZWZyZXNoTWF0ZXJpYWwgPSB0cnVlOworICAgICAgICB9Owog
Ci0gICAgICAgICAgICB9CisgICAgICAgIHRoaXMuZ2V0U2l6ZSA9IGZ1bmN0aW9uICgpIHsKIAot
ICAgICAgICAgICAgaWYgKCByZWZyZXNoUHJvZ3JhbSB8fCBjYW1lcmEgIT09IF9jdXJyZW50Q2Ft
ZXJhICkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB3aWR0aDogX3dp
ZHRoLAorICAgICAgICAgICAgICAgIGhlaWdodDogX2hlaWdodAorICAgICAgICAgICAgfTsKIAot
ICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3Byb2plY3Rpb25NYXRy
aXgnLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCApOworICAgICAgICB9OwogCi0gICAgICAgICAg
ICAgICAgaWYgKCBjYXBhYmlsaXRpZXMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciApIHsKKyAgICAg
ICAgdGhpcy5zZXRTaXplID0gZnVuY3Rpb24gKCB3aWR0aCwgaGVpZ2h0LCB1cGRhdGVTdHlsZSAp
IHsKIAotICAgICAgICAgICAgICAgICAgICBwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdsb2dE
ZXB0aEJ1ZkZDJywKLSAgICAgICAgICAgICAgICAgICAgICAgIDIuMCAvICggTWF0aC5sb2coIGNh
bWVyYS5mYXIgKyAxLjAgKSAvIE1hdGguTE4yICkgKTsKKyAgICAgICAgICAgIGlmICggdnIuaXNQ
cmVzZW50aW5nKCkgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuXCd0IGNoYW5nZSBzaXplIHdoaWxl
IFZSIGRldmljZSBpcyBwcmVzZW50aW5nLicgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgICAgICAvLyBBdm9pZCB1bm5lZWRlZCB1bmlmb3JtIHVwZGF0ZXMgcGVyIEFy
cmF5Q2FtZXJhJ3Mgc3ViLWNhbWVyYQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKCBfY3VycmVudENhbWVyYSAhPT0gKCBfY3VycmVudEFycmF5Q2FtZXJhIHx8IGNhbWVyYSAp
ICkgeworICAgICAgICAgICAgX3dpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBfaGVpZ2h0ID0g
aGVpZ2h0OwogCi0gICAgICAgICAgICAgICAgICAgIF9jdXJyZW50Q2FtZXJhID0gKCBfY3VycmVu
dEFycmF5Q2FtZXJhIHx8IGNhbWVyYSApOworICAgICAgICAgICAgX2NhbnZhcy53aWR0aCA9IHdp
ZHRoICogX3BpeGVsUmF0aW87CisgICAgICAgICAgICBfY2FudmFzLmhlaWdodCA9IGhlaWdodCAq
IF9waXhlbFJhdGlvOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpZ2h0aW5nIHVuaWZvcm1z
IGRlcGVuZCBvbiB0aGUgY2FtZXJhIHNvIGVuZm9yY2UgYW4gdXBkYXRlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG5vdywgaW4gY2FzZSB0aGlzIG1hdGVyaWFsIHN1cHBvcnRzIGxpZ2h0cyAtIG9y
IGxhdGVyLCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IG1hdGVyaWFsIHRo
YXQgZG9lcyBnZXRzIGFjdGl2YXRlZDoKKyAgICAgICAgICAgIGlmICggdXBkYXRlU3R5bGUgIT09
IGZhbHNlICkgewogCi0gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7
ICAgICAvLyBzZXQgdG8gdHJ1ZSBvbiBtYXRlcmlhbCBjaGFuZ2UKLSAgICAgICAgICAgICAgICAg
ICAgcmVmcmVzaExpZ2h0cyA9IHRydWU7ICAgICAgIC8vIHJlbWFpbnMgc2V0IHVudGlsIHVwZGF0
ZSBkb25lCisgICAgICAgICAgICAgICAgX2NhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4
JzsKKyAgICAgICAgICAgICAgICBfY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAv
LyBsb2FkIG1hdGVyaWFsIHNwZWNpZmljIHVuaWZvcm1zCi0gICAgICAgICAgICAgICAgLy8gKHNo
YWRlciBtYXRlcmlhbCBhbHNvIGdldHMgdGhlbSBmb3IgdGhlIHNha2Ugb2YgZ2VuZXJpY2l0eSkK
KyAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoIDAsIDAsIHdpZHRoLCBoZWlnaHQgKTsKIAot
ICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXNTaGFkZXJNYXRlcmlhbCB8fAotICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfHwKLSAgICAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWwuZW52TWFwICkgeworICAgICAgICB9OwogCi0gICAgICAgICAgICAg
ICAgICAgIHZhciB1Q2FtUG9zID0gcF91bmlmb3Jtcy5tYXAuY2FtZXJhUG9zaXRpb247CisgICAg
ICAgIHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemUgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCB1Q2FtUG9zICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHdpZHRoOiBfd2lkdGggKiBfcGl4ZWxSYXRpbywKKyAg
ICAgICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQgKiBfcGl4ZWxSYXRpbworICAgICAgICAgICAg
fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdUNhbVBvcy5zZXRWYWx1ZSggX2dsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbigg
Y2FtZXJhLm1hdHJpeFdvcmxkICkgKTsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgIHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemUgPSBmdW5jdGlvbiAoIHdpZHRo
LCBoZWlnaHQsIHBpeGVsUmF0aW8gKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBfd2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIF9oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHwKLSAgICAgICAg
ICAgICAgICAgICAgbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHwKLSAgICAgICAgICAgICAg
ICAgICAgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fAotICAgICAgICAgICAgICAg
ICAgICBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsLnNraW5uaW5nICkgeworICAgICAgICAgICAgX3BpeGVsUmF0aW8gPSBwaXhlbFJhdGlv
OwogCi0gICAgICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3ZpZXdN
YXRyaXgnLCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7CisgICAgICAgICAgICBfY2FudmFz
LndpZHRoID0gd2lkdGggKiBwaXhlbFJhdGlvOworICAgICAgICAgICAgX2NhbnZhcy5oZWlnaHQg
PSBoZWlnaHQgKiBwaXhlbFJhdGlvOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5zZXRWaWV3cG9ydCggMCwgMCwgd2lkdGgsIGhlaWdodCApOwogCi0gICAgICAgICAgICB9
CisgICAgICAgIH07CiAKLSAgICAgICAgICAgIC8vIHNraW5uaW5nIHVuaWZvcm1zIG11c3QgYmUg
c2V0IGV2ZW4gaWYgbWF0ZXJpYWwgZGlkbid0IGNoYW5nZQotICAgICAgICAgICAgLy8gYXV0by1z
ZXR0aW5nIG9mIHRleHR1cmUgdW5pdCBmb3IgYm9uZSB0ZXh0dXJlIG11c3QgZ28gYmVmb3JlIG90
aGVyIHRleHR1cmVzCi0gICAgICAgICAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCBvdGhlcndpc2Ug
d2VpcmQgdGhpbmdzIGhhcHBlbgorICAgICAgICB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCA9IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5za2lubmluZyApIHsKKyAg
ICAgICAgICAgIHJldHVybiBfY3VycmVudFZpZXdwb3J0OwogCi0gICAgICAgICAgICAgICAgcF91
bmlmb3Jtcy5zZXRPcHRpb25hbCggX2dsLCBvYmplY3QsICdiaW5kTWF0cml4JyApOwotICAgICAg
ICAgICAgICAgIHBfdW5pZm9ybXMuc2V0T3B0aW9uYWwoIF9nbCwgb2JqZWN0LCAnYmluZE1hdHJp
eEludmVyc2UnICk7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24g
PSBvYmplY3Quc2tlbGV0b247CisgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQgPSBmdW5jdGlvbiAo
IHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHNrZWxldG9u
ICkgeworICAgICAgICAgICAgX3ZpZXdwb3J0LnNldCggeCwgX2hlaWdodCAtIHkgLSBoZWlnaHQs
IHdpZHRoLCBoZWlnaHQgKTsKKyAgICAgICAgICAgIHN0YXRlLnZpZXdwb3J0KCBfY3VycmVudFZp
ZXdwb3J0LmNvcHkoIF92aWV3cG9ydCApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGJvbmVzID0gc2tlbGV0b24uYm9uZXM7CisgICAg
ICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXMuZmxvYXRWZXJ0
ZXhUZXh0dXJlcyApIHsKKyAgICAgICAgdGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKCB4LCB5
LCB3aWR0aCwgaGVpZ2h0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNrZWxl
dG9uLmJvbmVUZXh0dXJlID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBfc2Npc3Nvci5z
ZXQoIHgsIF9oZWlnaHQgLSB5IC0gaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0ICk7CisgICAgICAgICAg
ICBzdGF0ZS5zY2lzc29yKCBfY3VycmVudFNjaXNzb3IuY29weSggX3NjaXNzb3IgKS5tdWx0aXBs
eVNjYWxhciggX3BpeGVsUmF0aW8gKSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbGF5b3V0ICgxIG1hdHJpeCA9IDQgcGl4ZWxzKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgUkdCQSBSR0JBIFJHQkEgUkdCQSAoPT4gY29sdW1uMSwgY29sdW1uMiwgY29s
dW1uMywgY29sdW1uNCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgd2l0aCAgOHg4
ICBwaXhlbCB0ZXh0dXJlIG1heCAgIDE2IGJvbmVzICogNCBwaXhlbHMgPSAgKDggKiA4KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIDE2eDE2IHBpeGVsIHRleHR1cmUgbWF4
ICAgNjQgYm9uZXMgKiA0IHBpeGVscyA9ICgxNiAqIDE2KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgIDMyeDMyIHBpeGVsIHRleHR1cmUgbWF4ICAyNTYgYm9uZXMgKiA0IHBp
eGVscyA9ICgzMiAqIDMyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIDY0
eDY0IHBpeGVsIHRleHR1cmUgbWF4IDEwMjQgYm9uZXMgKiA0IHBpeGVscyA9ICg2NCAqIDY0KQor
ICAgICAgICB9OwogCisgICAgICAgIHRoaXMuc2V0U2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoIGJv
b2xlYW4gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgu
c3FydCggYm9uZXMubGVuZ3RoICogNCApOyAvLyA0IHBpeGVscyBuZWVkZWQgZm9yIDEgbWF0cml4
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IF9NYXRoLm5leHRQb3dlck9mVHdv
KCBNYXRoLmNlaWwoIHNpemUgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUg
PSBNYXRoLm1heCggc2l6ZSwgNCApOworICAgICAgICAgICAgc3RhdGUuc2V0U2Npc3NvclRlc3Qo
IF9zY2lzc29yVGVzdCA9IGJvb2xlYW4gKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBib25lTWF0cmljZXMgPSBuZXcgRmxvYXQzMkFycmF5KCBzaXplICogc2l6ZSAqIDQgKTsg
Ly8gNCBmbG9hdHMgcGVyIFJHQkEgcGl4ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b25lTWF0cmljZXMuc2V0KCBza2VsZXRvbi5ib25lTWF0cmljZXMgKTsgLy8gY29weSBjdXJyZW50
IHZhbHVlcworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJv
bmVUZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKCBib25lTWF0cmljZXMsIHNpemUsIHNpemUsIFJH
QkFGb3JtYXQsIEZsb2F0VHlwZSApOworICAgICAgICAvLyBDbGVhcmluZwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2tlbGV0b24uYm9uZU1hdHJpY2VzID0gYm9uZU1hdHJpY2VzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uLmJvbmVUZXh0dXJlID0gYm9uZVRl
eHR1cmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tlbGV0b24uYm9uZVRleHR1cmVT
aXplID0gc2l6ZTsKKyAgICAgICAgdGhpcy5nZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYmFja2dyb3Vu
ZC5nZXRDbGVhckNvbG9yKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMu
c2V0VmFsdWUoIF9nbCwgJ2JvbmVUZXh0dXJlJywgc2tlbGV0b24uYm9uZVRleHR1cmUgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ2JvbmVUZXh0
dXJlU2l6ZScsIHNrZWxldG9uLmJvbmVUZXh0dXJlU2l6ZSApOworICAgICAgICB9OwogCi0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuc2V0Q2xlYXJDb2xvciA9IGZ1
bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgcF91bmlmb3Jtcy5zZXRPcHRp
b25hbCggX2dsLCBza2VsZXRvbiwgJ2JvbmVNYXRyaWNlcycgKTsKKyAgICAgICAgICAgIGJhY2tn
cm91bmQuc2V0Q2xlYXJDb2xvci5hcHBseSggYmFja2dyb3VuZCwgYXJndW1lbnRzICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICB0aGlzLmdldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmdldENsZWFyQWxwaGEoKTsKIAotICAgICAg
ICAgICAgaWYgKCByZWZyZXNoTWF0ZXJpYWwgKSB7CisgICAgICAgIH07CiAKLSAgICAgICAgICAg
ICAgICBwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICd0b25lTWFwcGluZ0V4cG9zdXJlJywgX3Ro
aXMudG9uZU1hcHBpbmdFeHBvc3VyZSApOwotICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0
VmFsdWUoIF9nbCwgJ3RvbmVNYXBwaW5nV2hpdGVQb2ludCcsIF90aGlzLnRvbmVNYXBwaW5nV2hp
dGVQb2ludCApOworICAgICAgICB0aGlzLnNldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmxpZ2h0cyApIHsKKyAgICAgICAgICAgIGJh
Y2tncm91bmQuc2V0Q2xlYXJBbHBoYS5hcHBseSggYmFja2dyb3VuZCwgYXJndW1lbnRzICk7CiAK
LSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgbWF0ZXJpYWwgcmVxdWlyZXMgbGln
aHRpbmcgaW5mbworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGFs
bCBsaWdodGluZyB1bmlmb3JtcyBhcmUgYWx3YXlzIHNldCBjb3JyZWN0bHkKLSAgICAgICAgICAg
ICAgICAgICAgLy8gdGhleSBzaW1wbHkgcmVmZXJlbmNlIHRoZSByZW5kZXJlcidzIHN0YXRlIGZv
ciB0aGVpcgotICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMKLSAgICAgICAgICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBjdXJyZW50IG1hdGVyaWFsJ3Mg
Lm5lZWRzVXBkYXRlIGZsYWdzIHRvIHNldAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgR0wg
c3RhdGUgd2hlbiByZXF1aXJlZAorICAgICAgICB0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCBjb2xv
ciwgZGVwdGgsIHN0ZW5jaWwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgbWFya1VuaWZvcm1z
TGlnaHRzTmVlZHNVcGRhdGUoIG1fdW5pZm9ybXMsIHJlZnJlc2hMaWdodHMgKTsKKyAgICAgICAg
ICAgIHZhciBiaXRzID0gMDsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgg
Y29sb3IgPT09IHVuZGVmaW5lZCB8fCBjb2xvciApIGJpdHMgfD0gX2dsLkNPTE9SX0JVRkZFUl9C
SVQ7CisgICAgICAgICAgICBpZiAoIGRlcHRoID09PSB1bmRlZmluZWQgfHwgZGVwdGggKSBiaXRz
IHw9IF9nbC5ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAgaWYgKCBzdGVuY2lsID09PSB1
bmRlZmluZWQgfHwgc3RlbmNpbCApIGJpdHMgfD0gX2dsLlNURU5DSUxfQlVGRkVSX0JJVDsKIAot
ICAgICAgICAgICAgICAgIC8vIHJlZnJlc2ggdW5pZm9ybXMgY29tbW9uIHRvIHNldmVyYWwgbWF0
ZXJpYWxzCisgICAgICAgICAgICBfZ2wuY2xlYXIoIGJpdHMgKTsKIAotICAgICAgICAgICAgICAg
IGlmICggZm9nICYmIG1hdGVyaWFsLmZvZyApIHsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAg
ICAgICAgICByZWZyZXNoVW5pZm9ybXNGb2coIG1fdW5pZm9ybXMsIGZvZyApOworICAgICAgICB0
aGlzLmNsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLmNsZWFyKCB0cnVlLCBmYWxzZSwgZmFsc2UgKTsKIAotICAgICAgICAgICAg
ICAgIGlmICggbWF0ZXJpYWwuaXNNZXNoQmFzaWNNYXRlcmlhbCB8fAotICAgICAgICAgICAgICAg
ICAgICBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwKLSAgICAgICAgICAgICAgICAg
ICAgbWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fAotICAgICAgICAgICAgICAgICAgICBt
YXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsLmlzTWVzaE5vcm1hbE1hdGVyaWFsIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsLmlzTWVzaERlcHRoTWF0ZXJpYWwgKSB7CisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgcmVmcmVzaFVuaWZvcm1zQ29tbW9uKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOworICAg
ICAgICB0aGlzLmNsZWFyRGVwdGggPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLmNsZWFyKCBmYWxzZSwgdHJ1ZSwgZmFsc2UgKTsKIAotICAgICAg
ICAgICAgICAgIC8vIHJlZnJlc2ggc2luZ2xlIG1hdGVyaWFsIHNwZWNpZmljIHVuaWZvcm1zCisg
ICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmlzTGluZUJhc2ljTWF0
ZXJpYWwgKSB7CisgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsID0gZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc0xpbmUoIG1fdW5pZm9ybXMsIG1hdGVy
aWFsICk7CisgICAgICAgICAgICB0aGlzLmNsZWFyKCBmYWxzZSwgZmFsc2UsIHRydWUgKTsKIAot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTGluZURhc2hlZE1hdGVyaWFs
ICkgeworICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc0xp
bmUoIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hV
bmlmb3Jtc0Rhc2goIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7CisgICAgICAgIHRoaXMuY2xlYXJU
YXJnZXQgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCwgY29sb3IsIGRlcHRoLCBzdGVuY2lsICkg
ewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNQb2ludHNNYXRlcmlh
bCApIHsKKyAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJnZXQgKTsK
KyAgICAgICAgICAgIHRoaXMuY2xlYXIoIGNvbG9yLCBkZXB0aCwgc3RlbmNpbCApOwogCi0gICAg
ICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1BvaW50cyggbV91bmlmb3JtcywgbWF0ZXJp
YWwgKTsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFs
LmlzTWVzaExhbWJlcnRNYXRlcmlhbCApIHsKKyAgICAgICAgLy8KIAotICAgICAgICAgICAgICAg
ICAgICByZWZyZXNoVW5pZm9ybXNMYW1iZXJ0KCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOworICAg
ICAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBtYXRlcmlhbC5pc01lc2hUb29uTWF0ZXJpYWwgKSB7CisgICAgICAgICAgICBfY2Fu
dmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoICd3ZWJnbGNvbnRleHRsb3N0Jywgb25Db250ZXh0TG9z
dCwgZmFsc2UgKTsKKyAgICAgICAgICAgIF9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggJ3dl
YmdsY29udGV4dHJlc3RvcmVkJywgb25Db250ZXh0UmVzdG9yZSwgZmFsc2UgKTsKIAotICAgICAg
ICAgICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNUb29uKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCAp
OworICAgICAgICAgICAgcmVuZGVyTGlzdHMuZGlzcG9zZSgpOworICAgICAgICAgICAgcmVuZGVy
U3RhdGVzLmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIHByb3BlcnRpZXMuZGlzcG9zZSgpOworICAg
ICAgICAgICAgb2JqZWN0cy5kaXNwb3NlKCk7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsICkgeworICAgICAgICAgICAgdnIuZGlzcG9z
ZSgpOwogCi0gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1Bob25nKCBtX3VuaWZv
cm1zLCBtYXRlcmlhbCApOworICAgICAgICAgICAgYW5pbWF0aW9uLnN0b3AoKTsKIAotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWwgKSB7
CisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZvcm1zUGh5c2lj
YWwoIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7CisgICAgICAgIC8vIEV2ZW50cwogCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCApIHsK
KyAgICAgICAgZnVuY3Rpb24gb25Db250ZXh0TG9zdCggZXZlbnQgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgcmVmcmVzaFVuaWZvcm1zU3RhbmRhcmQoIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7
CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogCi0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoRGVwdGhNYXRlcmlhbCApIHsKKyAgICAgICAgICAg
IGNvbnNvbGUubG9nKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LicgKTsKIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHsKKyAg
ICAgICAgICAgIF9pc0NvbnRleHRMb3N0ID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV91bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1l
bnRNYXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3VuaWZvcm1zLmRpc3BsYWNlbWVudFNj
YWxlLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3VuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNw
bGFjZW1lbnRCaWFzOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICBmdW5jdGlvbiBvbkNvbnRleHRSZXN0b3JlKCAvKiBldmVudCAqLyApIHsKIAotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaE5vcm1hbE1hdGVyaWFsICkgeworICAg
ICAgICAgICAgY29uc29sZS5sb2coICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3Rv
cmVkLicgKTsKIAotICAgICAgICAgICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNOb3JtYWwoIG1f
dW5pZm9ybXMsIG1hdGVyaWFsICk7CisgICAgICAgICAgICBfaXNDb250ZXh0TG9zdCA9IGZhbHNl
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5pdEdMQ29udGV4dCgpOwogCi0g
ICAgICAgICAgICAgICAgLy8gUmVjdEFyZWFMaWdodCBUZXh0dXJlCi0gICAgICAgICAgICAgICAg
Ly8gVE9ETyAobXJkb29iKTogRmluZCBhIG5pY2VyIGltcGxlbWVudGF0aW9uCisgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmICggbV91bmlmb3Jtcy5sdGNNYXQgIT09IHVuZGVmaW5lZCAp
IG1fdW5pZm9ybXMubHRjTWF0LnZhbHVlID0gVW5pZm9ybXNMaWIuTFRDX01BVF9URVhUVVJFOwot
ICAgICAgICAgICAgICAgIGlmICggbV91bmlmb3Jtcy5sdGNNYWcgIT09IHVuZGVmaW5lZCApIG1f
dW5pZm9ybXMubHRjTWFnLnZhbHVlID0gVW5pZm9ybXNMaWIuTFRDX01BR19URVhUVVJFOworICAg
ICAgICBmdW5jdGlvbiBvbk1hdGVyaWFsRGlzcG9zZSggZXZlbnQgKSB7CiAKLSAgICAgICAgICAg
ICAgICBXZWJHTFVuaWZvcm1zLnVwbG9hZCgKLSAgICAgICAgICAgICAgICAgICAgX2dsLCBtYXRl
cmlhbFByb3BlcnRpZXMudW5pZm9ybXNMaXN0LCBtX3VuaWZvcm1zLCBfdGhpcyApOworICAgICAg
ICAgICAgdmFyIG1hdGVyaWFsID0gZXZlbnQudGFyZ2V0OwogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBtYXRlcmlhbC5yZW1vdmVFdmVudExpc3RlbmVyKCAnZGlzcG9zZScsIG9uTWF0ZXJp
YWxEaXNwb3NlICk7CiAKKyAgICAgICAgICAgIGRlYWxsb2NhdGVNYXRlcmlhbCggbWF0ZXJpYWwg
KTsKIAotICAgICAgICAgICAgLy8gY29tbW9uIG1hdHJpY2VzCisgICAgICAgIH0KIAotICAgICAg
ICAgICAgcF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnbW9kZWxWaWV3TWF0cml4Jywgb2JqZWN0
Lm1vZGVsVmlld01hdHJpeCApOwotICAgICAgICAgICAgcF91bmlmb3Jtcy5zZXRWYWx1ZSggX2ds
LCAnbm9ybWFsTWF0cml4Jywgb2JqZWN0Lm5vcm1hbE1hdHJpeCApOwotICAgICAgICAgICAgcF91
bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAnbW9kZWxNYXRyaXgnLCBvYmplY3QubWF0cml4V29ybGQg
KTsKKyAgICAgICAgLy8gQnVmZmVyIGRlYWxsb2NhdGlvbgogCi0gICAgICAgICAgICByZXR1cm4g
cHJvZ3JhbTsKKyAgICAgICAgZnVuY3Rpb24gZGVhbGxvY2F0ZU1hdGVyaWFsKCBtYXRlcmlhbCAp
IHsKKworICAgICAgICAgICAgcmVsZWFzZU1hdGVyaWFsUHJvZ3JhbVJlZmVyZW5jZSggbWF0ZXJp
YWwgKTsKKworICAgICAgICAgICAgcHJvcGVydGllcy5yZW1vdmUoIG1hdGVyaWFsICk7CiAKICAg
ICAgICAgfQogCi0gICAgICAgIC8vIFVuaWZvcm1zIChyZWZyZXNoIHVuaWZvcm1zIG9iamVjdHMp
CiAKLSAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zQ29tbW9uKCB1bmlmb3JtcywgbWF0
ZXJpYWwgKSB7CisgICAgICAgIGZ1bmN0aW9uIHJlbGVhc2VNYXRlcmlhbFByb2dyYW1SZWZlcmVu
Y2UoIG1hdGVyaWFsICkgewogCi0gICAgICAgICAgICB1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0g
bWF0ZXJpYWwub3BhY2l0eTsKKyAgICAgICAgICAgIHZhciBwcm9ncmFtSW5mbyA9IHByb3BlcnRp
ZXMuZ2V0KCBtYXRlcmlhbCApLnByb2dyYW07CiAKLSAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1
c2UudmFsdWUgPSBtYXRlcmlhbC5jb2xvcjsKKyAgICAgICAgICAgIG1hdGVyaWFsLnByb2dyYW0g
PSB1bmRlZmluZWQ7CiAKLSAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuZW1pc3NpdmUgKSB7Cisg
ICAgICAgICAgICBpZiAoIHByb2dyYW1JbmZvICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAg
ICAgICAgICB1bmlmb3Jtcy5lbWlzc2l2ZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5lbWlzc2l2ZSAp
Lm11bHRpcGx5U2NhbGFyKCBtYXRlcmlhbC5lbWlzc2l2ZUludGVuc2l0eSApOworICAgICAgICAg
ICAgICAgIHByb2dyYW1DYWNoZS5yZWxlYXNlUHJvZ3JhbSggcHJvZ3JhbUluZm8gKTsKIAogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICB1bmlmb3Jtcy5tYXAudmFsdWUgPSBtYXRlcmlhbC5t
YXA7Ci0gICAgICAgICAgICB1bmlmb3Jtcy5zcGVjdWxhck1hcC52YWx1ZSA9IG1hdGVyaWFsLnNw
ZWN1bGFyTWFwOwotICAgICAgICAgICAgdW5pZm9ybXMuYWxwaGFNYXAudmFsdWUgPSBtYXRlcmlh
bC5hbHBoYU1hcDsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmxpZ2h0
TWFwICkgeworICAgICAgICAvLyBCdWZmZXIgcmVuZGVyaW5nCiAKLSAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5saWdodE1hcC52YWx1ZSA9IG1hdGVyaWFsLmxpZ2h0TWFwOwotICAgICAgICAgICAg
ICAgIHVuaWZvcm1zLmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwubGlnaHRNYXBJ
bnRlbnNpdHk7CisgICAgICAgIGZ1bmN0aW9uIHJlbmRlck9iamVjdEltbWVkaWF0ZSggb2JqZWN0
LCBwcm9ncmFtLCBtYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Jq
ZWN0LnJlbmRlciggZnVuY3Rpb24gKCBvYmplY3QgKSB7CiAKLSAgICAgICAgICAgIGlmICggbWF0
ZXJpYWwuYW9NYXAgKSB7CisgICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyQnVmZmVySW1tZWRp
YXRlKCBvYmplY3QsIHByb2dyYW0sIG1hdGVyaWFsICk7CiAKLSAgICAgICAgICAgICAgICB1bmlm
b3Jtcy5hb01hcC52YWx1ZSA9IG1hdGVyaWFsLmFvTWFwOwotICAgICAgICAgICAgICAgIHVuaWZv
cm1zLmFvTWFwSW50ZW5zaXR5LnZhbHVlID0gbWF0ZXJpYWwuYW9NYXBJbnRlbnNpdHk7CisgICAg
ICAgICAgICB9ICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAv
LyB1diByZXBlYXQgYW5kIG9mZnNldCBzZXR0aW5nIHByaW9yaXRpZXMKLSAgICAgICAgICAgIC8v
IDEuIGNvbG9yIG1hcAotICAgICAgICAgICAgLy8gMi4gc3BlY3VsYXIgbWFwCi0gICAgICAgICAg
ICAvLyAzLiBub3JtYWwgbWFwCi0gICAgICAgICAgICAvLyA0LiBidW1wIG1hcAotICAgICAgICAg
ICAgLy8gNS4gYWxwaGEgbWFwCi0gICAgICAgICAgICAvLyA2LiBlbWlzc2l2ZSBtYXAKKyAgICAg
ICAgdGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGUgPSBmdW5jdGlvbiAoIG9iamVjdCwgcHJvZ3Jh
bSwgbWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgICAgIHZhciB1dlNjYWxlTWFwOworICAgICAgICAg
ICAgc3RhdGUuaW5pdEF0dHJpYnV0ZXMoKTsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5t
YXAgKSB7CisgICAgICAgICAgICB2YXIgYnVmZmVycyA9IHByb3BlcnRpZXMuZ2V0KCBvYmplY3Qg
KTsKIAotICAgICAgICAgICAgICAgIHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tYXA7CisgICAgICAg
ICAgICBpZiAoIG9iamVjdC5oYXNQb3NpdGlvbnMgJiYgISBidWZmZXJzLnBvc2l0aW9uICkgYnVm
ZmVycy5wb3NpdGlvbiA9IF9nbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgIGlmICggb2Jq
ZWN0Lmhhc05vcm1hbHMgJiYgISBidWZmZXJzLm5vcm1hbCApIGJ1ZmZlcnMubm9ybWFsID0gX2ds
LmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKCBvYmplY3QuaGFzVXZzICYmICEgYnVm
ZmVycy51diApIGJ1ZmZlcnMudXYgPSBfZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgICAgICBp
ZiAoIG9iamVjdC5oYXNDb2xvcnMgJiYgISBidWZmZXJzLmNvbG9yICkgYnVmZmVycy5jb2xvciA9
IF9nbC5jcmVhdGVCdWZmZXIoKTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwu
c3BlY3VsYXJNYXAgKSB7CisgICAgICAgICAgICB2YXIgcHJvZ3JhbUF0dHJpYnV0ZXMgPSBwcm9n
cmFtLmdldEF0dHJpYnV0ZXMoKTsKIAotICAgICAgICAgICAgICAgIHV2U2NhbGVNYXAgPSBtYXRl
cmlhbC5zcGVjdWxhck1hcDsKKyAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc1Bvc2l0aW9ucyAp
IHsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkg
eworICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZm
ZXJzLnBvc2l0aW9uICk7CisgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoIF9nbC5BUlJB
WV9CVUZGRVIsIG9iamVjdC5wb3NpdGlvbkFycmF5LCBfZ2wuRFlOQU1JQ19EUkFXICk7CiAKLSAg
ICAgICAgICAgICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwOworICAg
ICAgICAgICAgICAgIHN0YXRlLmVuYWJsZUF0dHJpYnV0ZSggcHJvZ3JhbUF0dHJpYnV0ZXMucG9z
aXRpb24gKTsKKyAgICAgICAgICAgICAgICBfZ2wudmVydGV4QXR0cmliUG9pbnRlciggcHJvZ3Jh
bUF0dHJpYnV0ZXMucG9zaXRpb24sIDMsIF9nbC5GTE9BVCwgZmFsc2UsIDAsIDAgKTsKIAotICAg
ICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkgeworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgdXZTY2FsZU1hcCA9IG1hdGVyaWFsLm5vcm1hbE1hcDsKKyAg
ICAgICAgICAgIGlmICggb2JqZWN0Lmhhc05vcm1hbHMgKSB7CiAKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7CisgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZm
ZXIoIF9nbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcnMubm9ybWFsICk7CiAKLSAgICAgICAgICAgICAg
ICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYnVtcE1hcDsKKyAgICAgICAgICAgICAgICBpZiAoICEg
bWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCAmJgorICAgICAgICAgICAgICAgICAgICAhIG1h
dGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgJiYKKyAgICAgICAgICAgICAgICAgICAgISBt
YXRlcmlhbC5pc01lc2hOb3JtYWxNYXRlcmlhbCAmJgorICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbC5mbGF0U2hhZGluZyA9PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgfSBlbHNlIGlmICgg
bWF0ZXJpYWwucm91Z2huZXNzTWFwICkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGwgPSBvYmplY3QuY291bnQgKiAzOyBpIDwgbDsgaSArPSA5ICkgewogCi0gICAgICAg
ICAgICAgICAgdXZTY2FsZU1hcCA9IG1hdGVyaWFsLnJvdWdobmVzc01hcDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBhcnJheSA9IG9iamVjdC5ub3JtYWxBcnJheTsKIAotICAgICAgICAg
ICAgfSBlbHNlIGlmICggbWF0ZXJpYWwubWV0YWxuZXNzTWFwICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG54ID0gKCBhcnJheVsgaSArIDAgXSArIGFycmF5WyBpICsgMyBdICsgYXJy
YXlbIGkgKyA2IF0gKSAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnkgPSAoIGFy
cmF5WyBpICsgMSBdICsgYXJyYXlbIGkgKyA0IF0gKyBhcnJheVsgaSArIDcgXSApIC8gMzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBueiA9ICggYXJyYXlbIGkgKyAyIF0gKyBhcnJheVsg
aSArIDUgXSArIGFycmF5WyBpICsgOCBdICkgLyAzOwogCi0gICAgICAgICAgICAgICAgdXZTY2Fs
ZU1hcCA9IG1hdGVyaWFsLm1ldGFsbmVzc01hcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFy
cmF5WyBpICsgMCBdID0gbng7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVsgaSArIDEg
XSA9IG55OworICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkgKyAyIF0gPSBuejsKIAot
ICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuYWxwaGFNYXAgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhcnJheVsgaSArIDMgXSA9IG54OworICAgICAgICAgICAgICAgICAgICAg
ICAgYXJyYXlbIGkgKyA0IF0gPSBueTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5WyBp
ICsgNSBdID0gbno7CiAKLSAgICAgICAgICAgICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYWxw
aGFNYXA7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVsgaSArIDYgXSA9IG54OworICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyYXlbIGkgKyA3IF0gPSBueTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFycmF5WyBpICsgOCBdID0gbno7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
IG1hdGVyaWFsLmVtaXNzaXZlTWFwICkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEo
IF9nbC5BUlJBWV9CVUZGRVIsIG9iamVjdC5ub3JtYWxBcnJheSwgX2dsLkRZTkFNSUNfRFJBVyAp
OwogCi0gICAgICAgICAgICBpZiAoIHV2U2NhbGVNYXAgIT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5lbmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGVzLm5vcm1h
bCApOwogCi0gICAgICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLSAgICAg
ICAgICAgICAgICBpZiAoIHV2U2NhbGVNYXAuaXNXZWJHTFJlbmRlclRhcmdldCApIHsKKyAgICAg
ICAgICAgICAgICBfZ2wudmVydGV4QXR0cmliUG9pbnRlciggcHJvZ3JhbUF0dHJpYnV0ZXMubm9y
bWFsLCAzLCBfZ2wuRkxPQVQsIGZhbHNlLCAwLCAwICk7CiAKLSAgICAgICAgICAgICAgICAgICAg
dXZTY2FsZU1hcCA9IHV2U2NhbGVNYXAudGV4dHVyZTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc1V2cyAmJiBtYXRlcmlhbC5t
YXAgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdXZTY2FsZU1hcC5vZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgdmFyIHJlcGVhdCA9IHV2U2NhbGVNYXAucmVwZWF0OworICAgICAg
ICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXJzLnV2ICk7
CisgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoIF9nbC5BUlJBWV9CVUZGRVIsIG9iamVj
dC51dkFycmF5LCBfZ2wuRFlOQU1JQ19EUkFXICk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5l
bmFibGVBdHRyaWJ1dGUoIHByb2dyYW1BdHRyaWJ1dGVzLnV2ICk7CiAKLSAgICAgICAgICAgICAg
ICB1bmlmb3Jtcy5vZmZzZXRSZXBlYXQudmFsdWUuc2V0KCBvZmZzZXQueCwgb2Zmc2V0LnksIHJl
cGVhdC54LCByZXBlYXQueSApOworICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKCBwcm9ncmFtQXR0cmlidXRlcy51diwgMiwgX2dsLkZMT0FULCBmYWxzZSwgMCwgMCApOwog
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHVuaWZvcm1zLmVudk1hcC52YWx1ZSA9IG1h
dGVyaWFsLmVudk1hcDsKKyAgICAgICAgICAgIGlmICggb2JqZWN0Lmhhc0NvbG9ycyAmJiBtYXRl
cmlhbC52ZXJ0ZXhDb2xvcnMgIT09IE5vQ29sb3JzICkgewogCi0gICAgICAgICAgICAvLyBkb24n
dCBmbGlwIEN1YmVUZXh0dXJlIGVudk1hcHMsIGZsaXAgZXZlcnl0aGluZyBlbHNlOgotICAgICAg
ICAgICAgLy8gIFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZSB3aWxsIGJlIGZsaXBwZWQgZm9yIGJhY2t3
YXJkcyBjb21wYXRpYmlsaXR5Ci0gICAgICAgICAgICAvLyAgV2ViR0xSZW5kZXJUYXJnZXRDdWJl
LnRleHR1cmUgd2lsbCBiZSBmbGlwcGVkIGJlY2F1c2UgaXQncyBhIFRleHR1cmUgYW5kIE5PVCBh
IEN1YmVUZXh0dXJlCi0gICAgICAgICAgICAvLyB0aGlzIGNoZWNrIG11c3QgYmUgaGFuZGxlZCBk
aWZmZXJlbnRseSwgb3IgcmVtb3ZlZCBlbnRpcmVseSwgaWYgV2ViR0xSZW5kZXJUYXJnZXRDdWJl
IHVzZXMgYSBDdWJlVGV4dHVyZSBpbiB0aGUgZnV0dXJlCi0gICAgICAgICAgICB1bmlmb3Jtcy5m
bGlwRW52TWFwLnZhbHVlID0gKCAhICggbWF0ZXJpYWwuZW52TWFwICYmIG1hdGVyaWFsLmVudk1h
cC5pc0N1YmVUZXh0dXJlICkgKSA/IDEgOiAtIDE7CisgICAgICAgICAgICAgICAgX2dsLmJpbmRC
dWZmZXIoIF9nbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcnMuY29sb3IgKTsKKyAgICAgICAgICAgICAg
ICBfZ2wuYnVmZmVyRGF0YSggX2dsLkFSUkFZX0JVRkZFUiwgb2JqZWN0LmNvbG9yQXJyYXksIF9n
bC5EWU5BTUlDX0RSQVcgKTsKIAotICAgICAgICAgICAgdW5pZm9ybXMucmVmbGVjdGl2aXR5LnZh
bHVlID0gbWF0ZXJpYWwucmVmbGVjdGl2aXR5OwotICAgICAgICAgICAgdW5pZm9ybXMucmVmcmFj
dGlvblJhdGlvLnZhbHVlID0gbWF0ZXJpYWwucmVmcmFjdGlvblJhdGlvOworICAgICAgICAgICAg
ICAgIHN0YXRlLmVuYWJsZUF0dHJpYnV0ZSggcHJvZ3JhbUF0dHJpYnV0ZXMuY29sb3IgKTsKIAot
ICAgICAgICB9CisgICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIoIHByb2dy
YW1BdHRyaWJ1dGVzLmNvbG9yLCAzLCBfZ2wuRkxPQVQsIGZhbHNlLCAwLCAwICk7CiAKLSAgICAg
ICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTGluZSggdW5pZm9ybXMsIG1hdGVyaWFsICkgewor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNlLnZhbHVlID0gbWF0
ZXJpYWwuY29sb3I7Ci0gICAgICAgICAgICB1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gbWF0ZXJp
YWwub3BhY2l0eTsKKyAgICAgICAgICAgIHN0YXRlLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7
CiAKLSAgICAgICAgfQorICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoIF9nbC5UUklBTkdMRVMs
IDAsIG9iamVjdC5jb3VudCApOwogCi0gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0Rh
c2goIHVuaWZvcm1zLCBtYXRlcmlhbCApIHsKKyAgICAgICAgICAgIG9iamVjdC5jb3VudCA9IDA7
CiAKLSAgICAgICAgICAgIHVuaWZvcm1zLmRhc2hTaXplLnZhbHVlID0gbWF0ZXJpYWwuZGFzaFNp
emU7Ci0gICAgICAgICAgICB1bmlmb3Jtcy50b3RhbFNpemUudmFsdWUgPSBtYXRlcmlhbC5kYXNo
U2l6ZSArIG1hdGVyaWFsLmdhcFNpemU7Ci0gICAgICAgICAgICB1bmlmb3Jtcy5zY2FsZS52YWx1
ZSA9IG1hdGVyaWFsLnNjYWxlOworICAgICAgICB9OwogCi0gICAgICAgIH0KKyAgICAgICAgdGhp
cy5yZW5kZXJCdWZmZXJEaXJlY3QgPSBmdW5jdGlvbiAoIGNhbWVyYSwgZm9nLCBnZW9tZXRyeSwg
bWF0ZXJpYWwsIG9iamVjdCwgZ3JvdXAgKSB7CiAKLSAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVu
aWZvcm1zUG9pbnRzKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CisgICAgICAgICAgICB2YXIgZnJv
bnRGYWNlQ1cgPSAoIG9iamVjdC5pc01lc2ggJiYgb2JqZWN0Lm1hdHJpeFdvcmxkLmRldGVybWlu
YW50KCkgPCAwICk7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUgPSBtYXRl
cmlhbC5jb2xvcjsKLSAgICAgICAgICAgIHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlh
bC5vcGFjaXR5OwotICAgICAgICAgICAgdW5pZm9ybXMuc2l6ZS52YWx1ZSA9IG1hdGVyaWFsLnNp
emUgKiBfcGl4ZWxSYXRpbzsKLSAgICAgICAgICAgIHVuaWZvcm1zLnNjYWxlLnZhbHVlID0gX2hl
aWdodCAqIDAuNTsKKyAgICAgICAgICAgIHN0YXRlLnNldE1hdGVyaWFsKCBtYXRlcmlhbCwgZnJv
bnRGYWNlQ1cgKTsKIAotICAgICAgICAgICAgdW5pZm9ybXMubWFwLnZhbHVlID0gbWF0ZXJpYWwu
bWFwOworICAgICAgICAgICAgdmFyIHByb2dyYW0gPSBzZXRQcm9ncmFtKCBjYW1lcmEsIGZvZywg
bWF0ZXJpYWwsIG9iamVjdCApOworICAgICAgICAgICAgdmFyIGdlb21ldHJ5UHJvZ3JhbSA9IGdl
b21ldHJ5LmlkICsgJ18nICsgcHJvZ3JhbS5pZCArICdfJyArICggbWF0ZXJpYWwud2lyZWZyYW1l
ID09PSB0cnVlICk7CiAKLSAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubWFwICE9PSBudWxsICkg
eworICAgICAgICAgICAgdmFyIHVwZGF0ZUJ1ZmZlcnMgPSBmYWxzZTsKIAotICAgICAgICAgICAg
ICAgIHZhciBvZmZzZXQgPSBtYXRlcmlhbC5tYXAub2Zmc2V0OwotICAgICAgICAgICAgICAgIHZh
ciByZXBlYXQgPSBtYXRlcmlhbC5tYXAucmVwZWF0OworICAgICAgICAgICAgaWYgKCBnZW9tZXRy
eVByb2dyYW0gIT09IF9jdXJyZW50R2VvbWV0cnlQcm9ncmFtICkgewogCi0gICAgICAgICAgICAg
ICAgdW5pZm9ybXMub2Zmc2V0UmVwZWF0LnZhbHVlLnNldCggb2Zmc2V0LngsIG9mZnNldC55LCBy
ZXBlYXQueCwgcmVwZWF0LnkgKTsKKyAgICAgICAgICAgICAgICBfY3VycmVudEdlb21ldHJ5UHJv
Z3JhbSA9IGdlb21ldHJ5UHJvZ3JhbTsKKyAgICAgICAgICAgICAgICB1cGRhdGVCdWZmZXJzID0g
dHJ1ZTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICggb2Jq
ZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyApIHsKIAotICAgICAgICBmdW5jdGlvbiByZWZyZXNo
VW5pZm9ybXNGb2coIHVuaWZvcm1zLCBmb2cgKSB7CisgICAgICAgICAgICAgICAgbW9ycGh0YXJn
ZXRzLnVwZGF0ZSggb2JqZWN0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHByb2dyYW0gKTsKIAotICAg
ICAgICAgICAgdW5pZm9ybXMuZm9nQ29sb3IudmFsdWUgPSBmb2cuY29sb3I7CisgICAgICAgICAg
ICAgICAgdXBkYXRlQnVmZmVycyA9IHRydWU7CiAKLSAgICAgICAgICAgIGlmICggZm9nLmlzRm9n
ICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdW5pZm9ybXMuZm9nTmVhci52
YWx1ZSA9IGZvZy5uZWFyOwotICAgICAgICAgICAgICAgIHVuaWZvcm1zLmZvZ0Zhci52YWx1ZSA9
IGZvZy5mYXI7CisgICAgICAgICAgICAvLwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBmb2cu
aXNGb2dFeHAyICkgeworICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2VvbWV0cnkuaW5kZXg7Cisg
ICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOwor
ICAgICAgICAgICAgdmFyIHJhbmdlRmFjdG9yID0gMTsKIAotICAgICAgICAgICAgICAgIHVuaWZv
cm1zLmZvZ0RlbnNpdHkudmFsdWUgPSBmb2cuZGVuc2l0eTsKKyAgICAgICAgICAgIGlmICggbWF0
ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlICkgeworCisgICAgICAgICAgICAgICAgaW5kZXggPSBn
ZW9tZXRyaWVzLmdldFdpcmVmcmFtZUF0dHJpYnV0ZSggZ2VvbWV0cnkgKTsKKyAgICAgICAgICAg
ICAgICByYW5nZUZhY3RvciA9IDI7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgYXR0cmlidXRlOworICAgICAgICAgICAgdmFyIHJlbmRlcmVyID0gYnVmZmVy
UmVuZGVyZXI7CiAKLSAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTGFtYmVydCggdW5p
Zm9ybXMsIG1hdGVyaWFsICkgeworICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gbnVsbCApIHsK
IAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5lbWlzc2l2ZU1hcCApIHsKKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmdldCggaW5kZXggKTsKIAotICAgICAgICAgICAg
ICAgIHVuaWZvcm1zLmVtaXNzaXZlTWFwLnZhbHVlID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7Cisg
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBpbmRleGVkQnVmZmVyUmVuZGVyZXI7CisgICAgICAg
ICAgICAgICAgcmVuZGVyZXIuc2V0SW5kZXgoIGF0dHJpYnV0ZSApOwogCiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCB1cGRhdGVCdWZmZXJzICkgewogCi0gICAg
ICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Bob25nKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7
CisgICAgICAgICAgICAgICAgc2V0dXBWZXJ0ZXhBdHRyaWJ1dGVzKCBtYXRlcmlhbCwgcHJvZ3Jh
bSwgZ2VvbWV0cnkgKTsKIAotICAgICAgICAgICAgdW5pZm9ybXMuc3BlY3VsYXIudmFsdWUgPSBt
YXRlcmlhbC5zcGVjdWxhcjsKLSAgICAgICAgICAgIHVuaWZvcm1zLnNoaW5pbmVzcy52YWx1ZSA9
IE1hdGgubWF4KCBtYXRlcmlhbC5zaGluaW5lc3MsIDFlLTQgKTsgLy8gdG8gcHJldmVudCBwb3co
IDAuMCwgMC4wICkKKyAgICAgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBudWxsICkgewogCi0g
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmVtaXNzaXZlTWFwICkgeworICAgICAgICAgICAgICAg
ICAgICBfZ2wuYmluZEJ1ZmZlciggX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGUu
YnVmZmVyICk7CiAKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5lbWlzc2l2ZU1hcC52YWx1ZSA9
IG1hdGVyaWFsLmVtaXNzaXZlTWFwOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7Ci0KLSAgICAgICAgICAg
ICAgICB1bmlmb3Jtcy5idW1wTWFwLnZhbHVlID0gbWF0ZXJpYWwuYnVtcE1hcDsKLSAgICAgICAg
ICAgICAgICB1bmlmb3Jtcy5idW1wU2NhbGUudmFsdWUgPSBtYXRlcmlhbC5idW1wU2NhbGU7Ci0K
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgIGlmICggbWF0ZXJp
YWwubm9ybWFsTWFwICkgeworICAgICAgICAgICAgdmFyIGRhdGFDb3VudCA9IEluZmluaXR5Owog
Ci0gICAgICAgICAgICAgICAgdW5pZm9ybXMubm9ybWFsTWFwLnZhbHVlID0gbWF0ZXJpYWwubm9y
bWFsTWFwOwotICAgICAgICAgICAgICAgIHVuaWZvcm1zLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHko
IG1hdGVyaWFsLm5vcm1hbFNjYWxlICk7CisgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBudWxs
ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGF0YUNvdW50ID0gaW5kZXgu
Y291bnQ7CiAKLSAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkgewor
ICAgICAgICAgICAgfSBlbHNlIGlmICggcG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHsKIAotICAg
ICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRp
c3BsYWNlbWVudE1hcDsKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2Fs
ZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlOwotICAgICAgICAgICAgICAgIHVu
aWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFz
OworICAgICAgICAgICAgICAgIGRhdGFDb3VudCA9IHBvc2l0aW9uLmNvdW50OwogCiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Rv
b24oIHVuaWZvcm1zLCBtYXRlcmlhbCApIHsKKyAgICAgICAgICAgIHZhciByYW5nZVN0YXJ0ID0g
Z2VvbWV0cnkuZHJhd1JhbmdlLnN0YXJ0ICogcmFuZ2VGYWN0b3I7CisgICAgICAgICAgICB2YXIg
cmFuZ2VDb3VudCA9IGdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCAqIHJhbmdlRmFjdG9yOwogCi0g
ICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNQaG9uZyggdW5pZm9ybXMsIG1hdGVyaWFsICk7Cisg
ICAgICAgICAgICB2YXIgZ3JvdXBTdGFydCA9IGdyb3VwICE9PSBudWxsID8gZ3JvdXAuc3RhcnQg
KiByYW5nZUZhY3RvciA6IDA7CisgICAgICAgICAgICB2YXIgZ3JvdXBDb3VudCA9IGdyb3VwICE9
PSBudWxsID8gZ3JvdXAuY291bnQgKiByYW5nZUZhY3RvciA6IEluZmluaXR5OwogCi0gICAgICAg
ICAgICBpZiAoIG1hdGVyaWFsLmdyYWRpZW50TWFwICkgeworICAgICAgICAgICAgdmFyIGRyYXdT
dGFydCA9IE1hdGgubWF4KCByYW5nZVN0YXJ0LCBncm91cFN0YXJ0ICk7CisgICAgICAgICAgICB2
YXIgZHJhd0VuZCA9IE1hdGgubWluKCBkYXRhQ291bnQsIHJhbmdlU3RhcnQgKyByYW5nZUNvdW50
LCBncm91cFN0YXJ0ICsgZ3JvdXBDb3VudCApIC0gMTsKIAotICAgICAgICAgICAgICAgIHVuaWZv
cm1zLmdyYWRpZW50TWFwLnZhbHVlID0gbWF0ZXJpYWwuZ3JhZGllbnRNYXA7CisgICAgICAgICAg
ICB2YXIgZHJhd0NvdW50ID0gTWF0aC5tYXgoIDAsIGRyYXdFbmQgLSBkcmF3U3RhcnQgKyAxICk7
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggZHJhd0NvdW50ID09PSAwICkgcmV0
dXJuOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIC8vCiAKLSAgICAgICAgZnVuY3Rpb24gcmVm
cmVzaFVuaWZvcm1zU3RhbmRhcmQoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHsKKyAgICAgICAgICAg
IGlmICggb2JqZWN0LmlzTWVzaCApIHsKIAotICAgICAgICAgICAgdW5pZm9ybXMucm91Z2huZXNz
LnZhbHVlID0gbWF0ZXJpYWwucm91Z2huZXNzOwotICAgICAgICAgICAgdW5pZm9ybXMubWV0YWxu
ZXNzLnZhbHVlID0gbWF0ZXJpYWwubWV0YWxuZXNzOworICAgICAgICAgICAgICAgIGlmICggbWF0
ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlICkgewogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFs
LnJvdWdobmVzc01hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0TGluZVdpZHRo
KCBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGggKiBnZXRUYXJnZXRQaXhlbFJhdGlvKCkgKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2dsLkxJTkVTICk7CiAKLSAg
ICAgICAgICAgICAgICB1bmlmb3Jtcy5yb3VnaG5lc3NNYXAudmFsdWUgPSBtYXRlcmlhbC5yb3Vn
aG5lc3NNYXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBvYmplY3QuZHJhd01vZGUgKSB7CiAKLSAgICAgICAg
ICAgIGlmICggbWF0ZXJpYWwubWV0YWxuZXNzTWFwICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBUcmlhbmdsZXNEcmF3TW9kZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJlci5zZXRNb2RlKCBfZ2wuVFJJQU5HTEVTICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5tZXRhbG5lc3NNYXAudmFs
dWUgPSBtYXRlcmlhbC5tZXRhbG5lc3NNYXA7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRyaWFuZ2xlU3RyaXBEcmF3TW9kZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJlci5zZXRNb2RlKCBfZ2wuVFJJQU5HTEVfU1RSSVAgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBUcmlhbmdsZUZhbkRyYXdNb2RlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyLnNldE1vZGUoIF9nbC5UUklBTkdMRV9GQU4gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5lbWlzc2l2ZU1hcCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdW5pZm9ybXMuZW1p
c3NpdmVNYXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5idW1wTWFwICkg
eworICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTGluZSApIHsKIAotICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwOwotICAgICAg
ICAgICAgICAgIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTsK
KyAgICAgICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gbWF0ZXJpYWwubGluZXdpZHRoOwogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBsaW5lV2lkdGggPT09IHVuZGVmaW5l
ZCApIGxpbmVXaWR0aCA9IDE7IC8vIE5vdCB1c2luZyBMaW5lKk1hdGVyaWFsCiAKLSAgICAgICAg
ICAgIGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkgeworICAgICAgICAgICAgICAgIHN0YXRlLnNl
dExpbmVXaWR0aCggbGluZVdpZHRoICogZ2V0VGFyZ2V0UGl4ZWxSYXRpbygpICk7CiAKLSAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7
Ci0gICAgICAgICAgICAgICAgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJp
YWwubm9ybWFsU2NhbGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIG9iamVjdC5pc0xpbmVTZWdt
ZW50cyApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5z
ZXRNb2RlKCBfZ2wuTElORVMgKTsKIAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5kaXNwbGFj
ZW1lbnRNYXAgKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTGluZUxv
b3AgKSB7CiAKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUg
PSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7Ci0gICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlz
cGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTsKLSAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlz
cGxhY2VtZW50QmlhczsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TW9kZSggX2ds
LkxJTkVfTE9PUCApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
IAotICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5lbnZNYXAgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLnNldE1vZGUoIF9nbC5MSU5FX1NUUklQICk7CiAKLSAgICAgICAgICAgICAg
ICAvL3VuaWZvcm1zLmVudk1hcC52YWx1ZSA9IG1hdGVyaWFsLmVudk1hcDsgLy8gcGFydCBvZiB1
bmlmb3JtcyBjb21tb24KLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5lbnZNYXBJbnRlbnNpdHku
dmFsdWUgPSBtYXRlcmlhbC5lbnZNYXBJbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBvYmplY3QuaXNQb2ludHMgKSB7
CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE1vZGUoIF9nbC5QT0lO
VFMgKTsKIAotICAgICAgICBmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNQaHlzaWNhbCggdW5pZm9y
bXMsIG1hdGVyaWFsICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bmlmb3Jtcy5j
bGVhckNvYXQudmFsdWUgPSBtYXRlcmlhbC5jbGVhckNvYXQ7Ci0gICAgICAgICAgICB1bmlmb3Jt
cy5jbGVhckNvYXRSb3VnaG5lc3MudmFsdWUgPSBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3M7
CisgICAgICAgICAgICBpZiAoIGdlb21ldHJ5ICYmIGdlb21ldHJ5LmlzSW5zdGFuY2VkQnVmZmVy
R2VvbWV0cnkgKSB7CiAKLSAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKCB1bmlm
b3JtcywgbWF0ZXJpYWwgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lm1heEluc3Rh
bmNlZENvdW50ID4gMCApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlbmRl
cmVyLnJlbmRlckluc3RhbmNlcyggZ2VvbWV0cnksIGRyYXdTdGFydCwgZHJhd0NvdW50ICk7CiAK
LSAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zTm9ybWFsKCB1bmlmb3JtcywgbWF0ZXJp
YWwgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmJ1
bXBNYXAgKSB7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgdW5pZm9y
bXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7Ci0gICAgICAgICAgICAgICAgdW5p
Zm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlOworICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLnJlbmRlciggZHJhd1N0YXJ0LCBkcmF3Q291bnQgKTsKIAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHsKKyAgICAgICAg
fTsKIAotICAgICAgICAgICAgICAgIHVuaWZvcm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFs
Lm5vcm1hbE1hcDsKLSAgICAgICAgICAgICAgICB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5j
b3B5KCBtYXRlcmlhbC5ub3JtYWxTY2FsZSApOworICAgICAgICBmdW5jdGlvbiBzZXR1cFZlcnRl
eEF0dHJpYnV0ZXMoIG1hdGVyaWFsLCBwcm9ncmFtLCBnZW9tZXRyeSApIHsKIAotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCBnZW9tZXRyeSAmJiBnZW9tZXRyeS5pc0luc3RhbmNlZEJ1
ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmRpc3BsYWNlbWVu
dE1hcCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5z
dGFuY2VkX2FycmF5cycgKSA9PT0gbnVsbCApIHsKIAotICAgICAgICAgICAgICAgIHVuaWZvcm1z
LmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDsKLSAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRp
c3BsYWNlbWVudFNjYWxlOwotICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3BsYWNlbWVudEJp
YXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzOworICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5zZXR1cFZlcnRleEF0dHJpYnV0
ZXM6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2Vz
IG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLicgKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUuaW5pdEF0dHJpYnV0ZXMoKTsKIAot
ICAgICAgICAvLyBJZiB1bmlmb3JtcyBhcmUgbWFya2VkIGFzIGNsZWFuLCB0aGV5IGRvbid0IG5l
ZWQgdG8gYmUgbG9hZGVkIHRvIHRoZSBHUFUuCisgICAgICAgICAgICB2YXIgZ2VvbWV0cnlBdHRy
aWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlczsKIAotICAgICAgICBmdW5jdGlvbiBtYXJrVW5p
Zm9ybXNMaWdodHNOZWVkc1VwZGF0ZSggdW5pZm9ybXMsIHZhbHVlICkgeworICAgICAgICAgICAg
dmFyIHByb2dyYW1BdHRyaWJ1dGVzID0gcHJvZ3JhbS5nZXRBdHRyaWJ1dGVzKCk7CiAKLSAgICAg
ICAgICAgIHVuaWZvcm1zLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlID0gdmFsdWU7Cisg
ICAgICAgICAgICB2YXIgbWF0ZXJpYWxEZWZhdWx0QXR0cmlidXRlVmFsdWVzID0gbWF0ZXJpYWwu
ZGVmYXVsdEF0dHJpYnV0ZVZhbHVlczsKIAotICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9u
YWxMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHVuaWZvcm1zLnBvaW50
TGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7Ci0gICAgICAgICAgICB1bmlmb3Jtcy5zcG90TGln
aHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7Ci0gICAgICAgICAgICB1bmlmb3Jtcy5yZWN0QXJlYUxp
Z2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlOwotICAgICAgICAgICAgdW5pZm9ybXMuaGVtaXNwaGVy
ZUxpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlOworICAgICAgICAgICAgZm9yICggdmFyIG5hbWUg
aW4gcHJvZ3JhbUF0dHJpYnV0ZXMgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHZh
ciBwcm9ncmFtQXR0cmlidXRlID0gcHJvZ3JhbUF0dHJpYnV0ZXNbIG5hbWUgXTsKIAotICAgICAg
ICAvLyBMaWdodGluZworICAgICAgICAgICAgICAgIGlmICggcHJvZ3JhbUF0dHJpYnV0ZSA+PSAw
ICkgewogCi0gICAgICAgIGZ1bmN0aW9uIHNldHVwU2hhZG93cyggbGlnaHRzICkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnlBdHRyaWJ1dGUgPSBnZW9tZXRyeUF0dHJpYnV0ZXNb
IG5hbWUgXTsKIAotICAgICAgICAgICAgdmFyIGxpZ2h0U2hhZG93c0xlbmd0aCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnlBdHRyaWJ1dGUgIT09IHVuZGVmaW5lZCApIHsK
IAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gbGlnaHRzLmxlbmd0aDsgaSA8IGw7
IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGdlb21l
dHJ5QXR0cmlidXRlLm5vcm1hbGl6ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6
ZSA9IGdlb21ldHJ5QXR0cmlidXRlLml0ZW1TaXplOwogCi0gICAgICAgICAgICAgICAgdmFyIGxp
Z2h0ID0gbGlnaHRzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRl
ID0gYXR0cmlidXRlcy5nZXQoIGdlb21ldHJ5QXR0cmlidXRlICk7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIGxpZ2h0LmNhc3RTaGFkb3cgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
T0RPIEF0dHJpYnV0ZSBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBjb250ZXh0IHJlc3RvcmUKIAot
ICAgICAgICAgICAgICAgICAgICBfbGlnaHRzLnNoYWRvd3NbIGxpZ2h0U2hhZG93c0xlbmd0aCBd
ID0gbGlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgIGxpZ2h0U2hhZG93c0xlbmd0aCArKzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggYXR0cmlidXRlID09PSB1bmRlZmluZWQgKSBjb250
aW51ZTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBi
dWZmZXIgPSBhdHRyaWJ1dGUuYnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5
cGUgPSBhdHRyaWJ1dGUudHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlc1Bl
ckVsZW1lbnQgPSBhdHRyaWJ1dGUuYnl0ZXNQZXJFbGVtZW50OwogCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIF9saWdodHMuc2hhZG93cy5sZW5ndGggPSBsaWdodFNoYWRvd3NMZW5ndGg7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5QXR0cmlidXRlLmlzSW50ZXJs
ZWF2ZWRCdWZmZXJBdHRyaWJ1dGUgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBkYXRhID0gZ2VvbWV0cnlBdHRyaWJ1dGUuZGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc3RyaWRlID0gZGF0YS5zdHJpZGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGdlb21ldHJ5QXR0cmlidXRlLm9mZnNldDsKIAot
ICAgICAgICBmdW5jdGlvbiBzZXR1cExpZ2h0cyggbGlnaHRzLCBjYW1lcmEgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhICYmIGRhdGEuaXNJbnN0YW5jZWRJbnRlcmxl
YXZlZEJ1ZmZlciApIHsKIAotICAgICAgICAgICAgdmFyIGwsIGxsLCBsaWdodCwgc2hhZG93LAot
ICAgICAgICAgICAgICAgIHIgPSAwLCBnID0gMCwgYiA9IDAsCi0gICAgICAgICAgICAgICAgY29s
b3IsCi0gICAgICAgICAgICAgICAgaW50ZW5zaXR5LAotICAgICAgICAgICAgICAgIGRpc3RhbmNl
LAotICAgICAgICAgICAgICAgIHNoYWRvd01hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvciggcHJvZ3JhbUF0dHJpYnV0ZSwg
ZGF0YS5tZXNoUGVyQXR0cmlidXRlICk7CiAKLSAgICAgICAgICAgICAgICB2aWV3TWF0cml4ID0g
Y2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBnZW9tZXRyeS5tYXhJbnN0YW5jZWRDb3VudCA9PT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMZW5ndGggPSAwLAotICAgICAgICAgICAgICAgIHBv
aW50TGVuZ3RoID0gMCwKLSAgICAgICAgICAgICAgICBzcG90TGVuZ3RoID0gMCwKLSAgICAgICAg
ICAgICAgICByZWN0QXJlYUxlbmd0aCA9IDAsCi0gICAgICAgICAgICAgICAgaGVtaUxlbmd0aCA9
IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5tYXhJbnN0
YW5jZWRDb3VudCA9IGRhdGEubWVzaFBlckF0dHJpYnV0ZSAqIGRhdGEuY291bnQ7CiAKLSAgICAg
ICAgICAgIGZvciAoIGwgPSAwLCBsbCA9IGxpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbGln
aHQgPSBsaWdodHNbIGwgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaWdodC5jb2xvcjsKLSAgICAgICAgICAgICAgICBp
bnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHk7Ci0gICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBs
aWdodC5kaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZW5h
YmxlQXR0cmlidXRlKCBwcm9ncmFtQXR0cmlidXRlICk7CiAKLSAgICAgICAgICAgICAgICBzaGFk
b3dNYXAgPSAoIGxpZ2h0LnNoYWRvdyAmJiBsaWdodC5zaGFkb3cubWFwICkgPyBsaWdodC5zaGFk
b3cubWFwLnRleHR1cmUgOiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmICggbGlnaHQuaXNBbWJpZW50TGlnaHQgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoIF9nbC5BUlJBWV9CVUZGRVIsIGJ1ZmZl
ciApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVy
KCBwcm9ncmFtQXR0cmlidXRlLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUgKiBieXRl
c1BlckVsZW1lbnQsIG9mZnNldCAqIGJ5dGVzUGVyRWxlbWVudCApOwogCi0gICAgICAgICAgICAg
ICAgICAgIHIgKz0gY29sb3IuciAqIGludGVuc2l0eTsKLSAgICAgICAgICAgICAgICAgICAgZyAr
PSBjb2xvci5nICogaW50ZW5zaXR5OwotICAgICAgICAgICAgICAgICAgICBiICs9IGNvbG9yLmIg
KiBpbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggbGlnaHQuaXNEaXJlY3Rpb25hbExpZ2h0ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnlBdHRyaWJ1dGUuaXNJbnN0YW5jZWRC
dWZmZXJBdHRyaWJ1dGUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1zID0g
bGlnaHRDYWNoZS5nZXQoIGxpZ2h0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLmVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoIHByb2dyYW1BdHRyaWJ1dGUsIGdlb21l
dHJ5QXR0cmlidXRlLm1lc2hQZXJBdHRyaWJ1dGUgKTsKIAotICAgICAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5jb2xvci5jb3B5KCBsaWdodC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCBsaWdodC5p
bnRlbnNpdHkgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uLnNldEZy
b21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTsKLSAgICAgICAgICAgICAgICAg
ICAgX3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC50YXJnZXQubWF0cml4V29y
bGQgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uLnN1YiggX3ZlY3Rv
cjMgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uLnRyYW5zZm9ybURp
cmVjdGlvbiggdmlld01hdHJpeCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGdlb21ldHJ5Lm1heEluc3RhbmNlZENvdW50ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdW5pZm9ybXMuc2hhZG93ID0gbGlnaHQuY2FzdFNoYWRvdzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5Lm1heEluc3RhbmNlZENvdW50
ID0gZ2VvbWV0cnlBdHRyaWJ1dGUubWVzaFBlckF0dHJpYnV0ZSAqIGdlb21ldHJ5QXR0cmlidXRl
LmNvdW50OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggbGlnaHQuY2FzdFNoYWRvdyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzaGFkb3cgPSBsaWdodC5zaGFkb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuc2hhZG93QmlhcyA9
IHNoYWRvdy5iaWFzOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuc2hhZG93UmFk
aXVzID0gc2hhZG93LnJhZGl1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNo
YWRvd01hcFNpemUgPSBzaGFkb3cubWFwU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuZW5hYmxlQXR0cmlidXRlKCBwcm9ncmFtQXR0cmlidXRlICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBfbGlnaHRzLmRpcmVjdGlvbmFsU2hhZG93TWFwWyBkaXJlY3Rpb25hbExl
bmd0aCBdID0gc2hhZG93TWFwOwotICAgICAgICAgICAgICAgICAgICBfbGlnaHRzLmRpcmVjdGlv
bmFsU2hhZG93TWF0cml4WyBkaXJlY3Rpb25hbExlbmd0aCBdID0gbGlnaHQuc2hhZG93Lm1hdHJp
eDsKLSAgICAgICAgICAgICAgICAgICAgX2xpZ2h0cy5kaXJlY3Rpb25hbFsgZGlyZWN0aW9uYWxM
ZW5ndGggXSA9IHVuaWZvcm1zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5iaW5k
QnVmZmVyKCBfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfZ2wudmVydGV4QXR0cmliUG9pbnRlciggcHJvZ3JhbUF0dHJpYnV0ZSwgc2l6ZSwg
dHlwZSwgbm9ybWFsaXplZCwgMCwgMCApOwogCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlv
bmFsTGVuZ3RoICsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggbGlnaHQuaXNTcG90TGlnaHQgKSB7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG1hdGVyaWFsRGVmYXVsdEF0dHJpYnV0ZVZhbHVlcyAhPT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IGxpZ2h0Q2FjaGUuZ2V0
KCBsaWdodCApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0ZXJpYWxE
ZWZhdWx0QXR0cmlidXRlVmFsdWVzWyBuYW1lIF07CiAKLSAgICAgICAgICAgICAgICAgICAgdW5p
Zm9ybXMucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCAp
OwotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoIHZp
ZXdNYXRyaXggKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5jb2xvci5jb3B5KCBjb2xv
ciApLm11bHRpcGx5U2NhbGFyKCBpbnRlbnNpdHkgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5p
Zm9ybXMuZGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKCB2YWx1ZS5sZW5ndGggKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMu
ZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTsKLSAg
ICAgICAgICAgICAgICAgICAgX3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC50
YXJnZXQubWF0cml4V29ybGQgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0
aW9uLnN1YiggX3ZlY3RvcjMgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0
aW9uLnRyYW5zZm9ybURpcmVjdGlvbiggdmlld01hdHJpeCApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZ2wudmVydGV4QXR0cmliMmZ2KCBwcm9ncmFtQXR0cmlidXRlLCB2YWx1ZSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAg
ICAgdW5pZm9ybXMuY29uZUNvcyA9IE1hdGguY29zKCBsaWdodC5hbmdsZSApOwotICAgICAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5wZW51bWJyYUNvcyA9IE1hdGguY29zKCBsaWdodC5hbmdsZSAq
ICggMSAtIGxpZ2h0LnBlbnVtYnJhICkgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMu
ZGVjYXkgPSAoIGxpZ2h0LmRpc3RhbmNlID09PSAwICkgPyAwLjAgOiBsaWdodC5kZWNheTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYjNmdiggcHJvZ3JhbUF0dHJpYnV0ZSwg
dmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNoYWRvdyA9IGxpZ2h0LmNhc3RTaGFkb3c7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWI0ZnYoIHByb2dyYW1BdHRyaWJ1dGUs
IHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoIGxpZ2h0LmNhc3RTaGFkb3cgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfZ2wudmVydGV4QXR0cmliMWZ2KCBwcm9ncmFtQXR0cmlidXRlLCB2YWx1ZSAp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3cgPSBsaWdodC5zaGFkb3c7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICB1bmlm
b3Jtcy5zaGFkb3dCaWFzID0gc2hhZG93LmJpYXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFkb3cucmFkaXVzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5pZm9ybXMuc2hhZG93TWFwU2l6ZSA9IHNoYWRvdy5tYXBTaXplOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBfbGlnaHRzLnNwb3RTaGFkb3dNYXBbIHNwb3RMZW5ndGggXSA9IHNoYWRvd01hcDsK
LSAgICAgICAgICAgICAgICAgICAgX2xpZ2h0cy5zcG90U2hhZG93TWF0cml4WyBzcG90TGVuZ3Ro
IF0gPSBsaWdodC5zaGFkb3cubWF0cml4OwotICAgICAgICAgICAgICAgICAgICBfbGlnaHRzLnNw
b3RbIHNwb3RMZW5ndGggXSA9IHVuaWZvcm1zOwotCi0gICAgICAgICAgICAgICAgICAgIHNwb3RM
ZW5ndGggKys7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggbGlnaHQuaXNSZWN0QXJlYUxpZ2h0ICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIHZhciB1bmlmb3JtcyA9IGxpZ2h0Q2FjaGUuZ2V0KCBsaWdodCApOworICAgICAg
ICAgICAgc3RhdGUuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKTsKIAotICAgICAgICAgICAgICAg
ICAgICAvLyAoYSkgaW50ZW5zaXR5IGNvbnRyb2xzIGlycmFkaWFuY2Ugb2YgZW50aXJlIGxpZ2h0
Ci0gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmNvbG9yCi0gICAgICAgICAgICAgICAgICAg
ICAgICAuY29weSggY29sb3IgKQotICAgICAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5U2Nh
bGFyKCBpbnRlbnNpdHkgLyAoIGxpZ2h0LndpZHRoICogbGlnaHQuaGVpZ2h0ICkgKTsKKyAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgIC8vIChiKSBpbnRlbnNpdHkgY29udHJvbHMgdGhl
IHJhZGlhbmNlIHBlciBsaWdodCBhcmVhCi0gICAgICAgICAgICAgICAgICAgIC8vIHVuaWZvcm1z
LmNvbG9yLmNvcHkoIGNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGludGVuc2l0eSApOworICAgICAg
ICAvLyBDb21waWxlCiAKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMucG9zaXRpb24uc2V0
RnJvbU1hdHJpeFBvc2l0aW9uKCBsaWdodC5tYXRyaXhXb3JsZCApOwotICAgICAgICAgICAgICAg
ICAgICB1bmlmb3Jtcy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoIHZpZXdNYXRyaXggKTsKKyAgICAg
ICAgdGhpcy5jb21waWxlID0gZnVuY3Rpb24gKCBzY2VuZSwgY2FtZXJhICkgewogCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGV4dHJhY3QgbG9jYWwgcm90YXRpb24gb2YgbGlnaHQgdG8gZGVyaXZl
IHdpZHRoL2hlaWdodCBoYWxmIHZlY3RvcnMKLSAgICAgICAgICAgICAgICAgICAgX21hdHJpeDQy
LmlkZW50aXR5KCk7Ci0gICAgICAgICAgICAgICAgICAgIF9tYXRyaXg0LmNvcHkoIGxpZ2h0Lm1h
dHJpeFdvcmxkICk7Ci0gICAgICAgICAgICAgICAgICAgIF9tYXRyaXg0LnByZW11bHRpcGx5KCB2
aWV3TWF0cml4ICk7Ci0gICAgICAgICAgICAgICAgICAgIF9tYXRyaXg0Mi5leHRyYWN0Um90YXRp
b24oIF9tYXRyaXg0ICk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyU3RhdGUgPSByZW5kZXJT
dGF0ZXMuZ2V0KCBzY2VuZSwgY2FtZXJhICk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyU3Rh
dGUuaW5pdCgpOwogCi0gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmhhbGZXaWR0aC5zZXQo
IGxpZ2h0LndpZHRoICogMC41LCAgICAgICAgICAgICAgICAwLjAsIDAuMCApOwotICAgICAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5oYWxmSGVpZ2h0LnNldCggICAgICAgICAgICAgIDAuMCwgbGln
aHQuaGVpZ2h0ICogMC41LCAwLjAgKTsKKyAgICAgICAgICAgIHNjZW5lLnRyYXZlcnNlKCBmdW5j
dGlvbiAoIG9iamVjdCApIHsKIAotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5oYWxmV2lk
dGguYXBwbHlNYXRyaXg0KCBfbWF0cml4NDIgKTsKLSAgICAgICAgICAgICAgICAgICAgdW5pZm9y
bXMuaGFsZkhlaWdodC5hcHBseU1hdHJpeDQoIF9tYXRyaXg0MiApOworICAgICAgICAgICAgICAg
IGlmICggb2JqZWN0LmlzTGlnaHQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyAo
YWJlbG5hdGlvbik6IFJlY3RBcmVhTGlnaHQgZGlzdGFuY2U/Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHVuaWZvcm1zLmRpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRSZW5kZXJTdGF0ZS5wdXNoTGlnaHQoIG9iamVjdCApOwogCi0gICAgICAgICAgICAgICAg
ICAgIF9saWdodHMucmVjdEFyZWFbIHJlY3RBcmVhTGVuZ3RoIF0gPSB1bmlmb3JtczsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBvYmplY3QuY2FzdFNoYWRvdyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICByZWN0QXJlYUxlbmd0aCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRSZW5kZXJTdGF0ZS5wdXNoU2hhZG93KCBvYmplY3QgKTsKIAotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHsKKyAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtcyA9IGxpZ2h0Q2FjaGUuZ2V0KCBsaWdo
dCApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5w
b3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLnBvc2l0aW9uLmFwcGx5TWF0cml4NCggdmlld01hdHJp
eCApOworICAgICAgICAgICAgfSApOwogCi0gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmNv
bG9yLmNvcHkoIGxpZ2h0LmNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGxpZ2h0LmludGVuc2l0eSAp
OwotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXN0YW5jZSA9IGxpZ2h0LmRpc3RhbmNl
OwotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kZWNheSA9ICggbGlnaHQuZGlzdGFuY2Ug
PT09IDAgKSA/IDAuMCA6IGxpZ2h0LmRlY2F5OworICAgICAgICAgICAgY3VycmVudFJlbmRlclN0
YXRlLnNldHVwTGlnaHRzKCBjYW1lcmEgKTsKIAotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jt
cy5zaGFkb3cgPSBsaWdodC5jYXN0U2hhZG93OworICAgICAgICAgICAgc2NlbmUudHJhdmVyc2Uo
IGZ1bmN0aW9uICggb2JqZWN0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGlmICggbGlnaHQu
Y2FzdFNoYWRvdyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG9iamVjdC5tYXRlcmlhbCApIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93ID0gbGlnaHQuc2hhZG93OworICAgICAg
ICAgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIG9iamVjdC5tYXRlcmlhbCApICkgewog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3dCaWFzID0gc2hhZG93LmJp
YXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zaGFkb3dSYWRpdXMgPSBzaGFk
b3cucmFkaXVzOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuc2hhZG93TWFwU2l6
ZSA9IHNoYWRvdy5tYXBTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwOyBpIDwgb2JqZWN0Lm1hdGVyaWFsLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE1hdGVyaWFsKCBvYmpl
Y3QubWF0ZXJpYWxbIGkgXSwgc2NlbmUuZm9nLCBvYmplY3QgKTsKIAotICAgICAgICAgICAgICAg
ICAgICBfbGlnaHRzLnBvaW50U2hhZG93TWFwWyBwb2ludExlbmd0aCBdID0gc2hhZG93TWFwOwot
ICAgICAgICAgICAgICAgICAgICBfbGlnaHRzLnBvaW50U2hhZG93TWF0cml4WyBwb2ludExlbmd0
aCBdID0gbGlnaHQuc2hhZG93Lm1hdHJpeDsKLSAgICAgICAgICAgICAgICAgICAgX2xpZ2h0cy5w
b2ludFsgcG9pbnRMZW5ndGggXSA9IHVuaWZvcm1zOworICAgICAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgICAgIHBvaW50TGVuZ3RoICsrOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbGlnaHQuaXNIZW1p
c3BoZXJlTGlnaHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0TWF0ZXJpYWwoIG9i
amVjdC5tYXRlcmlhbCwgc2NlbmUuZm9nLCBvYmplY3QgKTsKIAotICAgICAgICAgICAgICAgICAg
ICB2YXIgdW5pZm9ybXMgPSBsaWdodENhY2hlLmdldCggbGlnaHQgKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpcmVjdGlvbi5zZXRGcm9t
TWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7Ci0gICAgICAgICAgICAgICAgICAg
IHVuaWZvcm1zLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oIHZpZXdNYXRyaXggKTsKLSAg
ICAgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5za3lDb2xvci5jb3B5
KCBsaWdodC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCBpbnRlbnNpdHkgKTsKLSAgICAgICAgICAg
ICAgICAgICAgdW5pZm9ybXMuZ3JvdW5kQ29sb3IuY29weSggbGlnaHQuZ3JvdW5kQ29sb3IgKS5t
dWx0aXBseVNjYWxhciggaW50ZW5zaXR5ICk7CisgICAgICAgICAgICB9ICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgX2xpZ2h0cy5oZW1pWyBoZW1pTGVuZ3RoIF0gPSB1bmlmb3JtczsKKyAgICAg
ICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBoZW1pTGVuZ3RoICsrOworICAgICAgICAvLyBB
bmltYXRpb24gTG9vcAogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB2YXIgb25BbmltYXRp
b25GcmFtZUNhbGxiYWNrID0gbnVsbDsKIAotICAgICAgICAgICAgfQorICAgICAgICBmdW5jdGlv
biBvbkFuaW1hdGlvbkZyYW1lKCB0aW1lICkgewogCi0gICAgICAgICAgICBfbGlnaHRzLmFtYmll
bnRbIDAgXSA9IHI7Ci0gICAgICAgICAgICBfbGlnaHRzLmFtYmllbnRbIDEgXSA9IGc7Ci0gICAg
ICAgICAgICBfbGlnaHRzLmFtYmllbnRbIDIgXSA9IGI7CisgICAgICAgICAgICBpZiAoIHZyLmlz
UHJlc2VudGluZygpICkgcmV0dXJuOworICAgICAgICAgICAgaWYgKCBvbkFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2sgKSBvbkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soIHRpbWUgKTsKIAotICAgICAgICAg
ICAgX2xpZ2h0cy5kaXJlY3Rpb25hbC5sZW5ndGggPSBkaXJlY3Rpb25hbExlbmd0aDsKLSAgICAg
ICAgICAgIF9saWdodHMuc3BvdC5sZW5ndGggPSBzcG90TGVuZ3RoOwotICAgICAgICAgICAgX2xp
Z2h0cy5yZWN0QXJlYS5sZW5ndGggPSByZWN0QXJlYUxlbmd0aDsKLSAgICAgICAgICAgIF9saWdo
dHMucG9pbnQubGVuZ3RoID0gcG9pbnRMZW5ndGg7Ci0gICAgICAgICAgICBfbGlnaHRzLmhlbWku
bGVuZ3RoID0gaGVtaUxlbmd0aDsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUT0RPIChz
YW0tZy1zdGVlbCkgd2h5IGFyZW4ndCB3ZSB1c2luZyBqb2luCi0gICAgICAgICAgICBfbGlnaHRz
Lmhhc2ggPSBkaXJlY3Rpb25hbExlbmd0aCArICcsJyArIHBvaW50TGVuZ3RoICsgJywnICsgc3Bv
dExlbmd0aCArICcsJyArIHJlY3RBcmVhTGVuZ3RoICsgJywnICsgaGVtaUxlbmd0aCArICcsJyAr
IF9saWdodHMuc2hhZG93cy5sZW5ndGg7CisgICAgICAgIHZhciBhbmltYXRpb24gPSBuZXcgV2Vi
R0xBbmltYXRpb24oKTsKKyAgICAgICAgYW5pbWF0aW9uLnNldEFuaW1hdGlvbkxvb3AoIG9uQW5p
bWF0aW9uRnJhbWUgKTsKIAotICAgICAgICB9CisgICAgICAgIGlmICggdHlwZW9mIHdpbmRvdyAh
PT0gJ3VuZGVmaW5lZCcgKSBhbmltYXRpb24uc2V0Q29udGV4dCggd2luZG93ICk7CiAKLSAgICAg
ICAgLy8gR0wgc3RhdGUgc2V0dGluZworICAgICAgICB0aGlzLnNldEFuaW1hdGlvbkxvb3AgPSBm
dW5jdGlvbiAoIGNhbGxiYWNrICkgewogCi0gICAgICAgIHRoaXMuc2V0RmFjZUN1bGxpbmcgPSBm
dW5jdGlvbiAoIGN1bGxGYWNlLCBmcm9udEZhY2VEaXJlY3Rpb24gKSB7CisgICAgICAgICAgICBv
bkFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgICAgIHZyLnNldEFu
aW1hdGlvbkxvb3AoIGNhbGxiYWNrICk7CiAKLSAgICAgICAgICAgIHN0YXRlLnNldEN1bGxGYWNl
KCBjdWxsRmFjZSApOwotICAgICAgICAgICAgc3RhdGUuc2V0RmxpcFNpZGVkKCBmcm9udEZhY2VE
aXJlY3Rpb24gPT09IEZyb250RmFjZURpcmVjdGlvbkNXICk7CisgICAgICAgICAgICBhbmltYXRp
b24uc3RhcnQoKTsKIAogICAgICAgICB9OwogCi0gICAgICAgIC8vIFRleHR1cmVzCi0KLSAgICAg
ICAgZnVuY3Rpb24gYWxsb2NUZXh0dXJlVW5pdCgpIHsKKyAgICAgICAgLy8gUmVuZGVyaW5nCiAK
LSAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pdCA9IF91c2VkVGV4dHVyZVVuaXRzOworICAgICAg
ICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSwgcmVuZGVyVGFyZ2V0LCBm
b3JjZUNsZWFyICkgewogCi0gICAgICAgICAgICBpZiAoIHRleHR1cmVVbml0ID49IGNhcGFiaWxp
dGllcy5tYXhUZXh0dXJlcyApIHsKKyAgICAgICAgICAgIGlmICggISAoIGNhbWVyYSAmJiBjYW1l
cmEuaXNDYW1lcmEgKSApIHsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LldlYkdMUmVuZGVyZXI6IFRyeWluZyB0byB1c2UgJyArIHRleHR1cmVVbml0ICsgJyB0ZXh0dXJl
IHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgJyArIGNhcGFiaWxpdGllcy5tYXhU
ZXh0dXJlcyApOworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5XZWJHTFJl
bmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEu
JyApOworICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBfdXNlZFRleHR1cmVVbml0cyArPSAxOworICAgICAgICAgICAgaWYgKCBfaXNDb250ZXh0
TG9zdCApIHJldHVybjsKIAotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVVbml0OworICAgICAg
ICAgICAgLy8gcmVzZXQgY2FjaGluZyBmb3IgdGhpcyBmcmFtZQogCi0gICAgICAgIH0KKyAgICAg
ICAgICAgIF9jdXJyZW50R2VvbWV0cnlQcm9ncmFtID0gJyc7CisgICAgICAgICAgICBfY3VycmVu
dE1hdGVyaWFsSWQgPSAtIDE7CisgICAgICAgICAgICBfY3VycmVudENhbWVyYSA9IG51bGw7CiAK
LSAgICAgICAgdGhpcy5hbGxvY1RleHR1cmVVbml0ID0gYWxsb2NUZXh0dXJlVW5pdDsKKyAgICAg
ICAgICAgIC8vIHVwZGF0ZSBzY2VuZSBncmFwaAogCi0gICAgICAgIC8vIHRoaXMuc2V0VGV4dHVy
ZTJEID0gc2V0VGV4dHVyZTJEOwotICAgICAgICB0aGlzLnNldFRleHR1cmUyRCA9ICggZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgaWYgKCBzY2VuZS5hdXRvVXBkYXRlID09PSB0cnVlICkgc2Nl
bmUudXBkYXRlTWF0cml4V29ybGQoKTsKIAotICAgICAgICAgICAgdmFyIHdhcm5lZCA9IGZhbHNl
OworICAgICAgICAgICAgLy8gdXBkYXRlIGNhbWVyYSBtYXRyaWNlcyBhbmQgZnJ1c3R1bQogCi0g
ICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogcGVlbCB0ZXh0dXJlLnRleHR1
cmUKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRUZXh0dXJlMkQoIHRleHR1cmUsIHNs
b3QgKSB7CisgICAgICAgICAgICBpZiAoIGNhbWVyYS5wYXJlbnQgPT09IG51bGwgKSBjYW1lcmEu
dXBkYXRlTWF0cml4V29ybGQoKTsKIAotICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZSAmJiB0
ZXh0dXJlLmlzV2ViR0xSZW5kZXJUYXJnZXQgKSB7CisgICAgICAgICAgICBpZiAoIHZyLmVuYWJs
ZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHdhcm5lZCApIHsKKyAgICAgICAg
ICAgICAgICBjYW1lcmEgPSB2ci5nZXRDYW1lcmEoIGNhbWVyYSApOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldFRleHR1cmUy
RDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1
cmUgcHJvcGVydHkgaW5zdGVhZC4iICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuZWQg
PSB0cnVlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vCiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmUudGV4dHVyZTsK
KyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlcy5nZXQoIHNjZW5l
LCBjYW1lcmEgKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJTdGF0ZS5pbml0KCk7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzY2VuZS5vbkJlZm9yZVJlbmRlciggX3RoaXMs
IHNjZW5lLCBjYW1lcmEsIHJlbmRlclRhcmdldCApOwogCi0gICAgICAgICAgICAgICAgdGV4dHVy
ZXMuc2V0VGV4dHVyZTJEKCB0ZXh0dXJlLCBzbG90ICk7CisgICAgICAgICAgICBfcHJvalNjcmVl
bk1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeCwgY2FtZXJh
Lm1hdHJpeFdvcmxkSW52ZXJzZSApOworICAgICAgICAgICAgX2ZydXN0dW0uc2V0RnJvbU1hdHJp
eCggX3Byb2pTY3JlZW5NYXRyaXggKTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIF9s
b2NhbENsaXBwaW5nRW5hYmxlZCA9IHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ7CisgICAgICAg
ICAgICBfY2xpcHBpbmdFbmFibGVkID0gX2NsaXBwaW5nLmluaXQoIHRoaXMuY2xpcHBpbmdQbGFu
ZXMsIF9sb2NhbENsaXBwaW5nRW5hYmxlZCwgY2FtZXJhICk7CiAKLSAgICAgICAgfSgpICk7Cisg
ICAgICAgICAgICBjdXJyZW50UmVuZGVyTGlzdCA9IHJlbmRlckxpc3RzLmdldCggc2NlbmUsIGNh
bWVyYSApOworICAgICAgICAgICAgY3VycmVudFJlbmRlckxpc3QuaW5pdCgpOwogCi0gICAgICAg
IHRoaXMuc2V0VGV4dHVyZSA9ICggZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcHJvamVjdE9i
amVjdCggc2NlbmUsIGNhbWVyYSwgX3RoaXMuc29ydE9iamVjdHMgKTsKIAotICAgICAgICAgICAg
dmFyIHdhcm5lZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCBfdGhpcy5zb3J0T2JqZWN0cyA9
PT0gdHJ1ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFRleHR1cmUoIHRl
eHR1cmUsIHNsb3QgKSB7CisgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlckxpc3Quc29ydCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKCAhIHdhcm5lZCApIHsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5XZWJHTFJlbmRlcmVyOiAu
c2V0VGV4dHVyZSBpcyBkZXByZWNhdGVkLCB1c2Ugc2V0VGV4dHVyZTJEIGluc3RlYWQuIiApOwot
ICAgICAgICAgICAgICAgICAgICB3YXJuZWQgPSB0cnVlOworICAgICAgICAgICAgLy8KIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggX2NsaXBwaW5nRW5hYmxlZCApIF9jbGlw
cGluZy5iZWdpblNoYWRvd3MoKTsKIAotICAgICAgICAgICAgICAgIHRleHR1cmVzLnNldFRleHR1
cmUyRCggdGV4dHVyZSwgc2xvdCApOworICAgICAgICAgICAgdmFyIHNoYWRvd3NBcnJheSA9IGN1
cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5zaGFkb3dzQXJyYXk7CiAKLSAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBzaGFkb3dNYXAucmVuZGVyKCBzaGFkb3dzQXJyYXksIHNjZW5lLCBjYW1lcmEg
KTsKIAotICAgICAgICB9KCkgKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJTdGF0ZS5zZXR1
cExpZ2h0cyggY2FtZXJhICk7CiAKLSAgICAgICAgdGhpcy5zZXRUZXh0dXJlQ3ViZSA9ICggZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCBfY2xpcHBpbmdFbmFibGVkICkgX2NsaXBwaW5n
LmVuZFNoYWRvd3MoKTsKIAotICAgICAgICAgICAgdmFyIHdhcm5lZCA9IGZhbHNlOworICAgICAg
ICAgICAgLy8KIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFRleHR1cmVDdWJlKCB0
ZXh0dXJlLCBzbG90ICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmluZm8uYXV0b1Jlc2V0ICkg
dGhpcy5pbmZvLnJlc2V0KCk7CiAKLSAgICAgICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0
aWJpbGl0eTogcGVlbCB0ZXh0dXJlLnRleHR1cmUKLSAgICAgICAgICAgICAgICBpZiAoIHRleHR1
cmUgJiYgdGV4dHVyZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSApIHsKKyAgICAgICAgICAgIGlm
ICggcmVuZGVyVGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCAhIHdhcm5lZCApIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSBudWxsOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5XZWJHTFJlbmRl
cmVyLnNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0
dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgd2FybmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnNldFJlbmRlclRhcmdldCggcmVuZGVyVGFy
Z2V0ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmUudGV4dHVyZTsK
KyAgICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBiYWNrZ3Jv
dW5kLnJlbmRlciggY3VycmVudFJlbmRlckxpc3QsIHNjZW5lLCBjYW1lcmEsIGZvcmNlQ2xlYXIg
KTsKIAotICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSByZWx5aW5nIG9uIHRoZSBmYWN0IHRo
YXQgV2ViR0xSZW5kZXJUYXJnZXRDdWJlLnRleHR1cmUgaXMgYSBUZXh0dXJlIGFuZCBOT1QgYSBD
dWJlVGV4dHVyZQotICAgICAgICAgICAgICAgIC8vIFRPRE86IHVuaWZ5IHRoZXNlIGNvZGUgcGF0
aHMKLSAgICAgICAgICAgICAgICBpZiAoICggdGV4dHVyZSAmJiB0ZXh0dXJlLmlzQ3ViZVRleHR1
cmUgKSB8fAotICAgICAgICAgICAgICAgICAgICAoIEFycmF5LmlzQXJyYXkoIHRleHR1cmUuaW1h
Z2UgKSAmJiB0ZXh0dXJlLmltYWdlLmxlbmd0aCA9PT0gNiApICkgeworICAgICAgICAgICAgLy8g
cmVuZGVyIHNjZW5lCiAKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29tcHJlc3NlZFRleHR1cmUg
Y2FuIGhhdmUgQXJyYXkgaW4gaW1hZ2UgOi8KKyAgICAgICAgICAgIHZhciBvcGFxdWVPYmplY3Rz
ID0gY3VycmVudFJlbmRlckxpc3Qub3BhcXVlOworICAgICAgICAgICAgdmFyIHRyYW5zcGFyZW50
T2JqZWN0cyA9IGN1cnJlbnRSZW5kZXJMaXN0LnRyYW5zcGFyZW50OwogCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gYWxvbmUgc2hvdWxkIHRha2UgY2FyZSBvZiBjdWJlIHRl
eHR1cmVzCi0gICAgICAgICAgICAgICAgICAgIHRleHR1cmVzLnNldFRleHR1cmVDdWJlKCB0ZXh0
dXJlLCBzbG90ICk7CisgICAgICAgICAgICBpZiAoIHNjZW5lLm92ZXJyaWRlTWF0ZXJpYWwgKSB7
CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBvdmVycmlk
ZU1hdGVyaWFsID0gc2NlbmUub3ZlcnJpZGVNYXRlcmlhbDsKIAotICAgICAgICAgICAgICAgICAg
ICAvLyBhc3N1bWVkOiB0ZXh0dXJlIHByb3BlcnR5IG9mIFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0
Q3ViZQorICAgICAgICAgICAgICAgIGlmICggb3BhcXVlT2JqZWN0cy5sZW5ndGggKSByZW5kZXJP
YmplY3RzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhLCBvdmVycmlkZU1hdGVyaWFsICk7
CisgICAgICAgICAgICAgICAgaWYgKCB0cmFuc3BhcmVudE9iamVjdHMubGVuZ3RoICkgcmVuZGVy
T2JqZWN0cyggdHJhbnNwYXJlbnRPYmplY3RzLCBzY2VuZSwgY2FtZXJhLCBvdmVycmlkZU1hdGVy
aWFsICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXMuc2V0VGV4dHVyZUN1YmVEeW5h
bWljKCB0ZXh0dXJlLCBzbG90ICk7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIG9wYXF1ZSBwYXNzIChmcm9udC10by1iYWNrIG9y
ZGVyKQogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmICggb3BhcXVlT2JqZWN0
cy5sZW5ndGggKSByZW5kZXJPYmplY3RzKCBvcGFxdWVPYmplY3RzLCBzY2VuZSwgY2FtZXJhICk7
CiAKLSAgICAgICAgfSgpICk7CisgICAgICAgICAgICAgICAgLy8gdHJhbnNwYXJlbnQgcGFzcyAo
YmFjay10by1mcm9udCBvcmRlcikKIAotICAgICAgICB0aGlzLmdldFJlbmRlclRhcmdldCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcGFyZW50T2JqZWN0cy5sZW5n
dGggKSByZW5kZXJPYmplY3RzKCB0cmFuc3BhcmVudE9iamVjdHMsIHNjZW5lLCBjYW1lcmEgKTsK
IAotICAgICAgICAgICAgcmV0dXJuIF9jdXJyZW50UmVuZGVyVGFyZ2V0OworICAgICAgICAgICAg
fQogCi0gICAgICAgIH07CisgICAgICAgICAgICAvLyBjdXN0b20gcmVuZGVyZXJzCiAKLSAgICAg
ICAgdGhpcy5zZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoIHJlbmRlclRhcmdldCApIHsKKyAg
ICAgICAgICAgIHZhciBzcHJpdGVzQXJyYXkgPSBjdXJyZW50UmVuZGVyU3RhdGUuc3RhdGUuc3By
aXRlc0FycmF5OwogCi0gICAgICAgICAgICBfY3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlclRh
cmdldDsKKyAgICAgICAgICAgIHNwcml0ZVJlbmRlcmVyLnJlbmRlciggc3ByaXRlc0FycmF5LCBz
Y2VuZSwgY2FtZXJhICk7CiAKLSAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0ICYmIHByb3Bl
cnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKS5fX3dlYmdsRnJhbWVidWZmZXIgPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIG1pcG1hcCBpZiB3ZSdyZSB1c2luZyBhbnkg
a2luZCBvZiBtaXBtYXAgZmlsdGVyaW5nCiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlcy5zZXR1
cFJlbmRlclRhcmdldCggcmVuZGVyVGFyZ2V0ICk7CisgICAgICAgICAgICBpZiAoIHJlbmRlclRh
cmdldCApIHsKKworICAgICAgICAgICAgICAgIHRleHR1cmVzLnVwZGF0ZVJlbmRlclRhcmdldE1p
cG1hcCggcmVuZGVyVGFyZ2V0ICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFy
IGlzQ3ViZSA9ICggcmVuZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC5pc1dlYkdMUmVuZGVyVGFy
Z2V0Q3ViZSApOwotICAgICAgICAgICAgdmFyIGZyYW1lYnVmZmVyOworICAgICAgICAgICAgLy8g
RW5zdXJlIGRlcHRoIGJ1ZmZlciB3cml0aW5nIGlzIGVuYWJsZWQgc28gaXQgY2FuIGJlIGNsZWFy
ZWQgb24gbmV4dCByZW5kZXIKIAotICAgICAgICAgICAgaWYgKCByZW5kZXJUYXJnZXQgKSB7Cisg
ICAgICAgICAgICBzdGF0ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoIHRydWUgKTsKKyAgICAgICAg
ICAgIHN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayggdHJ1ZSApOworICAgICAgICAgICAgc3Rh
dGUuYnVmZmVycy5jb2xvci5zZXRNYXNrKCB0cnVlICk7CiAKLSAgICAgICAgICAgICAgICB2YXIg
cmVuZGVyVGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKTsK
KyAgICAgICAgICAgIHN0YXRlLnNldFBvbHlnb25PZmZzZXQoIGZhbHNlICk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIGlzQ3ViZSApIHsKKyAgICAgICAgICAgIHNjZW5lLm9uQWZ0ZXJSZW5kZXIo
IF90aGlzLCBzY2VuZSwgY2FtZXJhICk7CiAKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXIgPSByZW5kZXJUYXJnZXRQcm9wZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlclsgcmVuZGVyVGFy
Z2V0LmFjdGl2ZUN1YmVGYWNlIF07CisgICAgICAgICAgICBpZiAoIHZyLmVuYWJsZWQgKSB7CiAK
LSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZyLnN1Ym1pdEZyYW1l
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSByZW5kZXJUYXJnZXRQcm9w
ZXJ0aWVzLl9fd2ViZ2xGcmFtZWJ1ZmZlcjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIF9nbC5maW5pc2goKTsKIAotICAgICAgICAgICAgICAgIF9j
dXJyZW50U2Npc3Nvci5jb3B5KCByZW5kZXJUYXJnZXQuc2Npc3NvciApOwotICAgICAgICAgICAg
ICAgIF9jdXJyZW50U2Npc3NvclRlc3QgPSByZW5kZXJUYXJnZXQuc2Npc3NvclRlc3Q7CisgICAg
ICAgICAgICBjdXJyZW50UmVuZGVyTGlzdCA9IG51bGw7CisgICAgICAgICAgICBjdXJyZW50UmVu
ZGVyU3RhdGUgPSBudWxsOwogCi0gICAgICAgICAgICAgICAgX2N1cnJlbnRWaWV3cG9ydC5jb3B5
KCByZW5kZXJUYXJnZXQudmlld3BvcnQgKTsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgLy8gVE9ETyBEdXBsaWNhdGVkIGNvZGUgKEZydXN0
dW0pCiAKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IG51bGw7CisgICAgICAgIHZhciBf
c3BoZXJlID0gbmV3IFNwaGVyZSgpOwogCi0gICAgICAgICAgICAgICAgX2N1cnJlbnRTY2lzc29y
LmNvcHkoIF9zY2lzc29yICkubXVsdGlwbHlTY2FsYXIoIF9waXhlbFJhdGlvICk7Ci0gICAgICAg
ICAgICAgICAgX2N1cnJlbnRTY2lzc29yVGVzdCA9IF9zY2lzc29yVGVzdDsKKyAgICAgICAgZnVu
Y3Rpb24gaXNPYmplY3RWaWV3YWJsZSggb2JqZWN0ICkgewogCi0gICAgICAgICAgICAgICAgX2N1
cnJlbnRWaWV3cG9ydC5jb3B5KCBfdmlld3BvcnQgKS5tdWx0aXBseVNjYWxhciggX3BpeGVsUmF0
aW8gKTsKKyAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG9iamVjdC5nZW9tZXRyeTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9PT0g
bnVsbCApCisgICAgICAgICAgICAgICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7
CiAKLSAgICAgICAgICAgIGlmICggX2N1cnJlbnRGcmFtZWJ1ZmZlciAhPT0gZnJhbWVidWZmZXIg
KSB7CisgICAgICAgICAgICBfc3BoZXJlLmNvcHkoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlICku
CisgICAgICAgICAgICBhcHBseU1hdHJpeDQoIG9iamVjdC5tYXRyaXhXb3JsZCApOwogCi0gICAg
ICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZSQU1FQlVGRkVSLCBmcmFtZWJ1
ZmZlciApOwotICAgICAgICAgICAgICAgIF9jdXJyZW50RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZl
cjsKKyAgICAgICAgICAgIHJldHVybiBpc1NwaGVyZVZpZXdhYmxlKCBfc3BoZXJlICk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICBzdGF0ZS5zY2lzc29yKCBfY3Vy
cmVudFNjaXNzb3IgKTsKLSAgICAgICAgICAgIHN0YXRlLnNldFNjaXNzb3JUZXN0KCBfY3VycmVu
dFNjaXNzb3JUZXN0ICk7CisgICAgICAgIGZ1bmN0aW9uIGlzU3ByaXRlVmlld2FibGUoIHNwcml0
ZSApIHsKIAotICAgICAgICAgICAgc3RhdGUudmlld3BvcnQoIF9jdXJyZW50Vmlld3BvcnQgKTsK
KyAgICAgICAgICAgIF9zcGhlcmUuY2VudGVyLnNldCggMCwgMCwgMCApOworICAgICAgICAgICAg
X3NwaGVyZS5yYWRpdXMgPSAwLjcwNzEwNjc4MTE4NjU0NzY7CisgICAgICAgICAgICBfc3BoZXJl
LmFwcGx5TWF0cml4NCggc3ByaXRlLm1hdHJpeFdvcmxkICk7CiAKLSAgICAgICAgICAgIGlmICgg
aXNDdWJlICkgeworICAgICAgICAgICAgcmV0dXJuIGlzU3BoZXJlVmlld2FibGUoIF9zcGhlcmUg
KTsKIAotICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMu
Z2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSApOwotICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1
ZmZlclRleHR1cmUyRCggX2dsLkZSQU1FQlVGRkVSLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIF9n
bC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyByZW5kZXJUYXJnZXQuYWN0aXZlQ3ViZUZh
Y2UsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2ViZ2xUZXh0dXJlLCByZW5kZXJUYXJnZXQuYWN0aXZl
TWlwTWFwTGV2ZWwgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgIGZ1bmN0
aW9uIGlzU3BoZXJlVmlld2FibGUoIHNwaGVyZSApIHsKIAotICAgICAgICB9OworICAgICAgICAg
ICAgaWYgKCAhIF9mcnVzdHVtLmludGVyc2VjdHNTcGhlcmUoIHNwaGVyZSApICkgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscyA9IGZ1bmN0aW9uICgg
cmVuZGVyVGFyZ2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBidWZmZXIgKSB7CisgICAgICAgICAg
ICB2YXIgbnVtUGxhbmVzID0gX2NsaXBwaW5nLm51bVBsYW5lczsKIAotICAgICAgICAgICAgaWYg
KCAhICggcmVuZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC5pc1dlYkdMUmVuZGVyVGFyZ2V0ICkg
KSB7CisgICAgICAgICAgICBpZiAoIG51bVBsYW5lcyA9PT0gMCApIHJldHVybiB0cnVlOwogCi0g
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJl
bmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRh
cmdldC4nICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFyIHBsYW5l
cyA9IF90aGlzLmNsaXBwaW5nUGxhbmVzLAogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2VudGVyID0gc3BoZXJlLmNlbnRlciwKKyAgICAgICAgICAgICAgICBuZWdSYWQgPSAtIHNw
aGVyZS5yYWRpdXMsCisgICAgICAgICAgICAgICAgaSA9IDA7CiAKLSAgICAgICAgICAgIHZhciBm
cmFtZWJ1ZmZlciA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKS5fX3dlYmdsRnJhbWVi
dWZmZXI7CisgICAgICAgICAgICBkbyB7CiAKLSAgICAgICAgICAgIGlmICggZnJhbWVidWZmZXIg
KSB7CisgICAgICAgICAgICAgICAgLy8gb3V0IHdoZW4gZGVlcGVyIHRoYW4gcmFkaXVzIGluIHRo
ZSBuZWdhdGl2ZSBoYWxmc3BhY2UKKyAgICAgICAgICAgICAgICBpZiAoIHBsYW5lc1sgaSBdLmRp
c3RhbmNlVG9Qb2ludCggY2VudGVyICkgPCBuZWdSYWQgKSByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgICAgICB2YXIgcmVzdG9yZSA9IGZhbHNlOworICAgICAgICAgICAgfSB3aGlsZSAoICsr
IGkgIT09IG51bVBsYW5lcyApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBmcmFtZWJ1ZmZlciAh
PT0gX2N1cnJlbnRGcmFtZWJ1ZmZlciApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoIF9nbC5GUkFNRUJVRkZFUiwg
ZnJhbWVidWZmZXIgKTsKKyAgICAgICAgfQorICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3RvcmUgPSB0cnVlOworICAgICAgICBmdW5jdGlvbiBwcm9qZWN0T2JqZWN0KCBvYmpl
Y3QsIGNhbWVyYSwgc29ydE9iamVjdHMgKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjsKIAotICAgICAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgdmlzaWJsZSA9IG9iamVjdC5sYXllcnMudGVz
dCggY2FtZXJhLmxheWVycyApOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0g
cmVuZGVyVGFyZ2V0LnRleHR1cmU7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlRm9y
bWF0ID0gdGV4dHVyZS5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVHlw
ZSA9IHRleHR1cmUudHlwZTsKKyAgICAgICAgICAgIGlmICggdmlzaWJsZSApIHsKKworICAgICAg
ICAgICAgICAgIGlmICggb2JqZWN0LmlzTGlnaHQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCB0ZXh0dXJlRm9ybWF0ICE9PSBSR0JBRm9ybWF0ICYmIHBhcmFtVGhyZWVUb0dMKCB0ZXh0
dXJlRm9ybWF0ICkgIT09IF9nbC5nZXRQYXJhbWV0ZXIoIF9nbC5JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVCApICkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyU3Rh
dGUucHVzaExpZ2h0KCBvYmplY3QgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVu
ZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0
LicgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBvYmplY3QuY2FzdFNoYWRvdyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFJlbmRlclN0YXRlLnB1c2hTaGFkb3coIG9iamVjdCApOwogCiAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHRleHR1cmVUeXBlICE9PSBVbnNp
Z25lZEJ5dGVUeXBlICYmIHBhcmFtVGhyZWVUb0dMKCB0ZXh0dXJlVHlwZSApICE9PSBfZ2wuZ2V0
UGFyYW1ldGVyKCBfZ2wuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFICkgJiYgLy8gSUUx
MSwgRWRnZSBhbmQgQ2hyb21lIE1hYyA8IDUyICgjOTUxMykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICEgKCB0ZXh0dXJlVHlwZSA9PT0gRmxvYXRUeXBlICYmICggZXh0ZW5zaW9ucy5nZXQoICdP
RVNfdGV4dHVyZV9mbG9hdCcgKSB8fCBleHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbG9yX2J1ZmZl
cl9mbG9hdCcgKSApICkgJiYgLy8gQ2hyb21lIE1hYyA+PSA1MiBhbmQgRmlyZWZveAotICAgICAg
ICAgICAgICAgICAgICAgICAgISAoIHRleHR1cmVUeXBlID09PSBIYWxmRmxvYXRUeXBlICYmIGV4
dGVuc2lvbnMuZ2V0KCAnRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JyApICkgKSB7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzU3ByaXRlICkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVu
ZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUg
b3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLicgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhIG9iamVjdC5mcnVzdHVtQ3Vs
bGVkIHx8IF9mcnVzdHVtLmludGVyc2VjdHNTcHJpdGUoIG9iamVjdCApICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyU3RhdGUucHVzaFNwcml0ZSggb2JqZWN0ICk7
CiAKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICggX2ds
LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoIF9nbC5GUkFNRUJVRkZFUiApID09PSBfZ2wuRlJBTUVC
VUZGRVJfQ09NUExFVEUgKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0Lmlz
SW1tZWRpYXRlUmVuZGVyT2JqZWN0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGUgZm9sbG93aW5nIGlmIHN0YXRlbWVudCBlbnN1cmVzIHZhbGlkIHJlYWQgcmVxdWVzdHMgKG5v
IG91dC1vZi1ib3VuZHMgcGl4ZWxzLCBzZWUgIzg2MDQpCisgICAgICAgICAgICAgICAgICAgIGlm
ICggc29ydE9iamVjdHMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCB4ID49
IDAgJiYgeCA8PSAoIHJlbmRlclRhcmdldC53aWR0aCAtIHdpZHRoICkgKSAmJiAoIHkgPj0gMCAm
JiB5IDw9ICggcmVuZGVyVGFyZ2V0LmhlaWdodCAtIGhlaWdodCApICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG9iamVjdC5tYXRy
aXhXb3JsZCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGx5TWF0cml4NCggX3By
b2pTY3JlZW5NYXRyaXggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5yZWFk
UGl4ZWxzKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYXJhbVRocmVlVG9HTCggdGV4dHVyZUZvcm1h
dCApLCBwYXJhbVRocmVlVG9HTCggdGV4dHVyZVR5cGUgKSwgYnVmZmVyICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50UmVuZGVyTGlzdC5wdXNoKCBvYmplY3QsIG51bGwsIG9iamVjdC5tYXRlcmlh
bCwgX3ZlY3RvcjMueiwgbnVsbCApOwogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggb2JqZWN0LmlzTWVzaCB8fCBvYmplY3QuaXNMaW5l
IHx8IG9iamVjdC5pc1BvaW50cyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVh
ZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0
ZS4nICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggb2JqZWN0LmlzU2tpbm5lZE1lc2ggKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5za2VsZXRvbi51cGRhdGUoKTsKIAog
ICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoICEgb2JqZWN0LmZydXN0dW1DdWxsZWQgfHwgX2ZydXN0dW0u
aW50ZXJzZWN0c09iamVjdCggb2JqZWN0ICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCByZXN0b3JlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzb3J0T2JqZWN0cyAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlciggX2dsLkZS
QU1FQlVGRkVSLCBfY3VycmVudEZyYW1lYnVmZmVyICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBvYmplY3QubWF0cml4V29ybGQg
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwbHlNYXRyaXg0KCBfcHJvalNj
cmVlbk1hdHJpeCApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBnZW9tZXRyeSA9IG9iamVjdHMudXBkYXRlKCBvYmplY3QgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDsKIAotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApICkg
ewogCi0gICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwcyA9
IGdlb21ldHJ5Lmdyb3VwczsKIAotICAgICAgICAvLyBNYXAgdGhyZWUuanMgY29uc3RhbnRzIHRv
IFdlYkdMIGNvbnN0YW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgIGZ1bmN0
aW9uIHBhcmFtVGhyZWVUb0dMKCBwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZ3JvdXAgPSBncm91cHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGdyb3VwTWF0ZXJpYWwgPSBtYXRlcmlhbFsgZ3JvdXAubWF0ZXJpYWxJbmRleCBdOwog
Ci0gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGdyb3VwTWF0ZXJpYWwgJiYgZ3JvdXBNYXRlcmlhbC52aXNpYmxlICkgewogCi0g
ICAgICAgICAgICBpZiAoIHAgPT09IFJlcGVhdFdyYXBwaW5nICkgcmV0dXJuIF9nbC5SRVBFQVQ7
Ci0gICAgICAgICAgICBpZiAoIHAgPT09IENsYW1wVG9FZGdlV3JhcHBpbmcgKSByZXR1cm4gX2ds
LkNMQU1QX1RPX0VER0U7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IE1pcnJvcmVkUmVwZWF0V3Jh
cHBpbmcgKSByZXR1cm4gX2dsLk1JUlJPUkVEX1JFUEVBVDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJMaXN0LnB1c2goIG9iamVjdCwgZ2VvbWV0cnks
IGdyb3VwTWF0ZXJpYWwsIF92ZWN0b3IzLnosIGdyb3VwICk7CiAKLSAgICAgICAgICAgIGlmICgg
cCA9PT0gTmVhcmVzdEZpbHRlciApIHJldHVybiBfZ2wuTkVBUkVTVDsKLSAgICAgICAgICAgIGlm
ICggcCA9PT0gTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXIgKSByZXR1cm4gX2dsLk5FQVJFU1Rf
TUlQTUFQX05FQVJFU1Q7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IE5lYXJlc3RNaXBNYXBMaW5l
YXJGaWx0ZXIgKSByZXR1cm4gX2dsLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHAgPT09IExpbmVhckZp
bHRlciApIHJldHVybiBfZ2wuTElORUFSOwotICAgICAgICAgICAgaWYgKCBwID09PSBMaW5lYXJN
aXBNYXBOZWFyZXN0RmlsdGVyICkgcmV0dXJuIF9nbC5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7Ci0g
ICAgICAgICAgICBpZiAoIHAgPT09IExpbmVhck1pcE1hcExpbmVhckZpbHRlciApIHJldHVybiBf
Z2wuTElORUFSX01JUE1BUF9MSU5FQVI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIHAgPT09IFVuc2lnbmVkQnl0ZVR5cGUgKSByZXR1cm4gX2dsLlVO
U0lHTkVEX0JZVEU7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IFVuc2lnbmVkU2hvcnQ0NDQ0VHlw
ZSApIHJldHVybiBfZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDsKLSAgICAgICAgICAgIGlmICgg
cCA9PT0gVW5zaWduZWRTaG9ydDU1NTFUeXBlICkgcmV0dXJuIF9nbC5VTlNJR05FRF9TSE9SVF81
XzVfNV8xOwotICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25lZFNob3J0NTY1VHlwZSApIHJl
dHVybiBfZ2wuVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBtYXRlcmlhbC52aXNpYmxlICkgewogCi0gICAgICAgICAgICBpZiAoIHAgPT09
IEJ5dGVUeXBlICkgcmV0dXJuIF9nbC5CWVRFOwotICAgICAgICAgICAgaWYgKCBwID09PSBTaG9y
dFR5cGUgKSByZXR1cm4gX2dsLlNIT1JUOwotICAgICAgICAgICAgaWYgKCBwID09PSBVbnNpZ25l
ZFNob3J0VHlwZSApIHJldHVybiBfZ2wuVU5TSUdORURfU0hPUlQ7Ci0gICAgICAgICAgICBpZiAo
IHAgPT09IEludFR5cGUgKSByZXR1cm4gX2dsLklOVDsKLSAgICAgICAgICAgIGlmICggcCA9PT0g
VW5zaWduZWRJbnRUeXBlICkgcmV0dXJuIF9nbC5VTlNJR05FRF9JTlQ7Ci0gICAgICAgICAgICBp
ZiAoIHAgPT09IEZsb2F0VHlwZSApIHJldHVybiBfZ2wuRkxPQVQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFJlbmRlckxpc3QucHVzaCggb2JqZWN0LCBnZW9tZXRyeSwgbWF0
ZXJpYWwsIF92ZWN0b3IzLnosIG51bGwgKTsKIAotICAgICAgICAgICAgaWYgKCBwID09PSBIYWxm
RmxvYXRUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyAp
OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lv
biAhPT0gbnVsbCApIHJldHVybiBleHRlbnNpb24uSEFMRl9GTE9BVF9PRVM7CisgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggcCA9PT0gQWxwaGFG
b3JtYXQgKSByZXR1cm4gX2dsLkFMUEhBOwotICAgICAgICAgICAgaWYgKCBwID09PSBSR0JGb3Jt
YXQgKSByZXR1cm4gX2dsLlJHQjsKLSAgICAgICAgICAgIGlmICggcCA9PT0gUkdCQUZvcm1hdCAp
IHJldHVybiBfZ2wuUkdCQTsKLSAgICAgICAgICAgIGlmICggcCA9PT0gTHVtaW5hbmNlRm9ybWF0
ICkgcmV0dXJuIF9nbC5MVU1JTkFOQ0U7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IEx1bWluYW5j
ZUFscGhhRm9ybWF0ICkgcmV0dXJuIF9nbC5MVU1JTkFOQ0VfQUxQSEE7Ci0gICAgICAgICAgICBp
ZiAoIHAgPT09IERlcHRoRm9ybWF0ICkgcmV0dXJuIF9nbC5ERVBUSF9DT01QT05FTlQ7Ci0gICAg
ICAgICAgICBpZiAoIHAgPT09IERlcHRoU3RlbmNpbEZvcm1hdCApIHJldHVybiBfZ2wuREVQVEhf
U1RFTkNJTDsKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG9iamVjdC5jaGlsZHJlbjsKIAot
ICAgICAgICAgICAgaWYgKCBwID09PSBBZGRFcXVhdGlvbiApIHJldHVybiBfZ2wuRlVOQ19BREQ7
Ci0gICAgICAgICAgICBpZiAoIHAgPT09IFN1YnRyYWN0RXF1YXRpb24gKSByZXR1cm4gX2dsLkZV
TkNfU1VCVFJBQ1Q7Ci0gICAgICAgICAgICBpZiAoIHAgPT09IFJldmVyc2VTdWJ0cmFjdEVxdWF0
aW9uICkgcmV0dXJuIF9nbC5GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q7CisgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAg
ICAgICAgICBpZiAoIHAgPT09IFplcm9GYWN0b3IgKSByZXR1cm4gX2dsLlpFUk87Ci0gICAgICAg
ICAgICBpZiAoIHAgPT09IE9uZUZhY3RvciApIHJldHVybiBfZ2wuT05FOwotICAgICAgICAgICAg
aWYgKCBwID09PSBTcmNDb2xvckZhY3RvciApIHJldHVybiBfZ2wuU1JDX0NPTE9SOwotICAgICAg
ICAgICAgaWYgKCBwID09PSBPbmVNaW51c1NyY0NvbG9yRmFjdG9yICkgcmV0dXJuIF9nbC5PTkVf
TUlOVVNfU1JDX0NPTE9SOwotICAgICAgICAgICAgaWYgKCBwID09PSBTcmNBbHBoYUZhY3RvciAp
IHJldHVybiBfZ2wuU1JDX0FMUEhBOwotICAgICAgICAgICAgaWYgKCBwID09PSBPbmVNaW51c1Ny
Y0FscGhhRmFjdG9yICkgcmV0dXJuIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBOwotICAgICAgICAg
ICAgaWYgKCBwID09PSBEc3RBbHBoYUZhY3RvciApIHJldHVybiBfZ2wuRFNUX0FMUEhBOwotICAg
ICAgICAgICAgaWYgKCBwID09PSBPbmVNaW51c0RzdEFscGhhRmFjdG9yICkgcmV0dXJuIF9nbC5P
TkVfTUlOVVNfRFNUX0FMUEhBOworICAgICAgICAgICAgICAgIHByb2plY3RPYmplY3QoIGNoaWxk
cmVuWyBpIF0sIGNhbWVyYSwgc29ydE9iamVjdHMgKTsKIAotICAgICAgICAgICAgaWYgKCBwID09
PSBEc3RDb2xvckZhY3RvciApIHJldHVybiBfZ2wuRFNUX0NPTE9SOwotICAgICAgICAgICAgaWYg
KCBwID09PSBPbmVNaW51c0RzdENvbG9yRmFjdG9yICkgcmV0dXJuIF9nbC5PTkVfTUlOVVNfRFNU
X0NPTE9SOwotICAgICAgICAgICAgaWYgKCBwID09PSBTcmNBbHBoYVNhdHVyYXRlRmFjdG9yICkg
cmV0dXJuIF9nbC5TUkNfQUxQSEFfU0FUVVJBVEU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICggcCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9TM1RDX0RY
VDFfRm9ybWF0IHx8Ci0gICAgICAgICAgICAgICAgcCA9PT0gUkdCQV9TM1RDX0RYVDNfRm9ybWF0
IHx8IHAgPT09IFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdCApIHsKKyAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3Rl
eHR1cmVfczN0YycgKTsKKyAgICAgICAgZnVuY3Rpb24gcmVuZGVyT2JqZWN0cyggcmVuZGVyTGlz
dCwgc2NlbmUsIGNhbWVyYSwgb3ZlcnJpZGVNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAg
IGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gcmVuZGVyTGlzdC5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggcCA9PT0gUkdCX1MzVENfRFhUMV9Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9u
LkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
cCA9PT0gUkdCQV9TM1RDX0RYVDFfRm9ybWF0ICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwID09PSBSR0JB
X1MzVENfRFhUM19Gb3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IFJHQkFfUzNUQ19EWFQ1
X0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ7
CisgICAgICAgICAgICAgICAgdmFyIHJlbmRlckl0ZW0gPSByZW5kZXJMaXN0WyBpIF07CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHJlbmRlckl0ZW0u
b2JqZWN0OworICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlckl0ZW0uZ2VvbWV0
cnk7CisgICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gb3ZlcnJpZGVNYXRlcmlhbCA9PT0g
dW5kZWZpbmVkID8gcmVuZGVySXRlbS5tYXRlcmlhbCA6IG92ZXJyaWRlTWF0ZXJpYWw7CisgICAg
ICAgICAgICAgICAgdmFyIGdyb3VwID0gcmVuZGVySXRlbS5ncm91cDsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICggY2FtZXJhLmlzQXJyYXlDYW1lcmEgKSB7CiAKLSAgICAg
ICAgICAgIGlmICggcCA9PT0gUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQgfHwgcCA9PT0gUkdCX1BW
UlRDXzJCUFBWMV9Gb3JtYXQgfHwKLSAgICAgICAgICAgICAgICBwID09PSBSR0JBX1BWUlRDXzRC
UFBWMV9Gb3JtYXQgfHwgcCA9PT0gUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ICkgeworICAgICAg
ICAgICAgICAgICAgICBfY3VycmVudEFycmF5Q2FtZXJhID0gY2FtZXJhOwogCi0gICAgICAgICAg
ICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1
cmVfcHZydGMnICk7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW1lcmFzID0gY2FtZXJhLmNh
bWVyYXM7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGV4dGVuc2lvbiAhPT0gbnVsbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBqbCA9IGNhbWVyYXMubGVuZ3RoOyBq
IDwgamw7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwID09PSBSR0JfUFZS
VENfNEJQUFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENf
NEJQUFYxX0lNRzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwID09PSBSR0JfUFZSVENfMkJQ
UFYxX0Zvcm1hdCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYx
X0lNRzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwID09PSBSR0JBX1BWUlRDXzRCUFBWMV9G
b3JtYXQgKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1H
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIHAgPT09IFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1h
dCApIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtZXJhMiA9IGNhbWVyYXNbIGogXTsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2JqZWN0LmxheWVy
cy50ZXN0KCBjYW1lcmEyLmxheWVycyApICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAndmlld3BvcnQnIGluIGNhbWVyYTIgKSB7IC8vIFhSCiAK
LSAgICAgICAgICAgIGlmICggcCA9PT0gUkdCX0VUQzFfRm9ybWF0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRWaWV3cG9ydC5jb3B5
KCBjYW1lcmEyLnZpZXdwb3J0ICkgKTsKIAotICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4
dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEnICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGlmICggZXh0
ZW5zaW9uICE9PSBudWxsICkgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9FVEMxX1dF
QkdMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gY2FtZXJh
Mi5ib3VuZHM7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHggPSBib3VuZHMueCAqIF93aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHkgPSBib3VuZHMueSAqIF9oZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB3aWR0aCA9IGJvdW5kcy56ICogX3dpZHRoOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gYm91bmRzLncgKiBfaGVpZ2h0OwogCi0gICAg
ICAgICAgICBpZiAoIHAgPT09IE1pbkVxdWF0aW9uIHx8IHAgPT09IE1heEVxdWF0aW9uICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRW
aWV3cG9ydC5zZXQoIHgsIHksIHdpZHRoLCBoZWlnaHQgKS5tdWx0aXBseVNjYWxhciggX3BpeGVs
UmF0aW8gKSApOwogCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQo
ICdFWFRfYmxlbmRfbWlubWF4JyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmICggZXh0ZW5zaW9uICE9PSBudWxsICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdCggb2JqZWN0LCBzY2VuZSwgY2FtZXJhMiwgZ2Vv
bWV0cnksIG1hdGVyaWFsLCBncm91cCApOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggcCA9
PT0gTWluRXF1YXRpb24gKSByZXR1cm4gZXh0ZW5zaW9uLk1JTl9FWFQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICggcCA9PT0gTWF4RXF1YXRpb24gKSByZXR1cm4gZXh0ZW5zaW9uLk1BWF9FWFQ7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgICAgIGlmICggcCA9PT0gVW5zaWduZWRJbnQyNDhUeXBlICkgeworICAgICAg
ICAgICAgICAgICAgICBfY3VycmVudEFycmF5Q2FtZXJhID0gbnVsbDsKIAotICAgICAgICAgICAg
ICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfZGVwdGhfdGV4dHVyZScgKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0KCBvYmplY3QsIHNjZW5lLCBjYW1lcmEs
IGdlb21ldHJ5LCBtYXRlcmlhbCwgZ3JvdXAgKTsKIAotICAgICAgICAgICAgICAgIGlmICggZXh0
ZW5zaW9uICE9PSBudWxsICkgcmV0dXJuIGV4dGVuc2lvbi5VTlNJR05FRF9JTlRfMjRfOF9XRUJH
TDsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KICAgICAgICAgfQogCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBt
cmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0
cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqLworICAgICAgICBmdW5jdGlvbiByZW5kZXJP
YmplY3QoIG9iamVjdCwgc2NlbmUsIGNhbWVyYSwgZ2VvbWV0cnksIG1hdGVyaWFsLCBncm91cCAp
IHsKIAotICAgIGZ1bmN0aW9uIEZvZ0V4cDIgKCBjb2xvciwgZGVuc2l0eSApIHsKKyAgICAgICAg
ICAgIG9iamVjdC5vbkJlZm9yZVJlbmRlciggX3RoaXMsIHNjZW5lLCBjYW1lcmEsIGdlb21ldHJ5
LCBtYXRlcmlhbCwgZ3JvdXAgKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJTdGF0ZSA9IHJl
bmRlclN0YXRlcy5nZXQoIHNjZW5lLCBfY3VycmVudEFycmF5Q2FtZXJhIHx8IGNhbWVyYSApOwog
Ci0gICAgICAgIHRoaXMubmFtZSA9ICcnOworICAgICAgICAgICAgb2JqZWN0Lm1vZGVsVmlld01h
dHJpeC5tdWx0aXBseU1hdHJpY2VzKCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLCBvYmplY3Qu
bWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgIG9iamVjdC5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFs
TWF0cml4KCBvYmplY3QubW9kZWxWaWV3TWF0cml4ICk7CiAKLSAgICAgICAgdGhpcy5jb2xvciA9
IG5ldyBDb2xvciggY29sb3IgKTsKLSAgICAgICAgdGhpcy5kZW5zaXR5ID0gKCBkZW5zaXR5ICE9
PSB1bmRlZmluZWQgKSA/IGRlbnNpdHkgOiAwLjAwMDI1OworICAgICAgICAgICAgaWYgKCBvYmpl
Y3QuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAg
dmFyIGZyb250RmFjZUNXID0gKCBvYmplY3QuaXNNZXNoICYmIG9iamVjdC5tYXRyaXhXb3JsZC5k
ZXRlcm1pbmFudCgpIDwgMCApOwogCi0gICAgRm9nRXhwMi5wcm90b3R5cGUuaXNGb2dFeHAyID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRNYXRlcmlhbCggbWF0ZXJpYWwsIGZyb250
RmFjZUNXICk7CiAKLSAgICBGb2dFeHAyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHNldFByb2dyYW0oIGNhbWVyYSwgc2NlbmUu
Zm9nLCBtYXRlcmlhbCwgb2JqZWN0ICk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyBGb2dFeHAyKCB0
aGlzLmNvbG9yLmdldEhleCgpLCB0aGlzLmRlbnNpdHkgKTsKKyAgICAgICAgICAgICAgICBfY3Vy
cmVudEdlb21ldHJ5UHJvZ3JhbSA9ICcnOwogCi0gICAgfTsKKyAgICAgICAgICAgICAgICByZW5k
ZXJPYmplY3RJbW1lZGlhdGUoIG9iamVjdCwgcHJvZ3JhbSwgbWF0ZXJpYWwgKTsKIAotICAgIEZv
Z0V4cDIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICggbWV0YSApIHsKKyAgICAgICAgICAg
IH0gZWxzZSB7CiAKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6ICdGb2dFeHAy
JywKLSAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLmdldEhleCgpLAotICAgICAgICAgICAg
ZGVuc2l0eTogdGhpcy5kZW5zaXR5Ci0gICAgICAgIH07CisgICAgICAgICAgICAgICAgX3RoaXMu
cmVuZGVyQnVmZmVyRGlyZWN0KCBjYW1lcmEsIHNjZW5lLmZvZywgZ2VvbWV0cnksIG1hdGVyaWFs
LCBvYmplY3QsIGdyb3VwICk7CiAKLSAgICB9OworICAgICAgICAgICAgfQogCi0gICAgLyoqCi0g
ICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9y
IGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqLworICAgICAgICAg
ICAgb2JqZWN0Lm9uQWZ0ZXJSZW5kZXIoIF90aGlzLCBzY2VuZSwgY2FtZXJhLCBnZW9tZXRyeSwg
bWF0ZXJpYWwsIGdyb3VwICk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyU3RhdGUgPSByZW5k
ZXJTdGF0ZXMuZ2V0KCBzY2VuZSwgX2N1cnJlbnRBcnJheUNhbWVyYSB8fCBjYW1lcmEgKTsKIAot
ICAgIGZ1bmN0aW9uIEZvZyAoIGNvbG9yLCBuZWFyLCBmYXIgKSB7CisgICAgICAgIH0KIAotICAg
ICAgICB0aGlzLm5hbWUgPSAnJzsKKyAgICAgICAgZnVuY3Rpb24gaW5pdE1hdGVyaWFsKCBtYXRl
cmlhbCwgZm9nLCBvYmplY3QgKSB7CiAKLSAgICAgICAgdGhpcy5jb2xvciA9IG5ldyBDb2xvcigg
Y29sb3IgKTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVz
LmdldCggbWF0ZXJpYWwgKTsKIAotICAgICAgICB0aGlzLm5lYXIgPSAoIG5lYXIgIT09IHVuZGVm
aW5lZCApID8gbmVhciA6IDE7Ci0gICAgICAgIHRoaXMuZmFyID0gKCBmYXIgIT09IHVuZGVmaW5l
ZCApID8gZmFyIDogMTAwMDsKKyAgICAgICAgICAgIHZhciBsaWdodHMgPSBjdXJyZW50UmVuZGVy
U3RhdGUuc3RhdGUubGlnaHRzOworICAgICAgICAgICAgdmFyIHNoYWRvd3NBcnJheSA9IGN1cnJl
bnRSZW5kZXJTdGF0ZS5zdGF0ZS5zaGFkb3dzQXJyYXk7CiAKLSAgICB9CisgICAgICAgICAgICB2
YXIgcGFyYW1ldGVycyA9IHByb2dyYW1DYWNoZS5nZXRQYXJhbWV0ZXJzKAorICAgICAgICAgICAg
ICAgIG1hdGVyaWFsLCBsaWdodHMuc3RhdGUsIHNoYWRvd3NBcnJheSwgZm9nLCBfY2xpcHBpbmcu
bnVtUGxhbmVzLCBfY2xpcHBpbmcubnVtSW50ZXJzZWN0aW9uLCBvYmplY3QgKTsKIAotICAgIEZv
Zy5wcm90b3R5cGUuaXNGb2cgPSB0cnVlOworICAgICAgICAgICAgdmFyIGNvZGUgPSBwcm9ncmFt
Q2FjaGUuZ2V0UHJvZ3JhbUNvZGUoIG1hdGVyaWFsLCBwYXJhbWV0ZXJzICk7CiAKLSAgICBGb2cu
cHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHByb2dyYW0g
PSBtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbTsKKyAgICAgICAgICAgIHZhciBwcm9ncmFtQ2hh
bmdlID0gdHJ1ZTsKIAotICAgICAgICByZXR1cm4gbmV3IEZvZyggdGhpcy5jb2xvci5nZXRIZXgo
KSwgdGhpcy5uZWFyLCB0aGlzLmZhciApOworICAgICAgICAgICAgaWYgKCBwcm9ncmFtID09PSB1
bmRlZmluZWQgKSB7CiAKLSAgICB9OworICAgICAgICAgICAgICAgIC8vIG5ldyBtYXRlcmlhbAor
ICAgICAgICAgICAgICAgIG1hdGVyaWFsLmFkZEV2ZW50TGlzdGVuZXIoICdkaXNwb3NlJywgb25N
YXRlcmlhbERpc3Bvc2UgKTsKIAotICAgIEZvZy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24g
KCBtZXRhICkgeworICAgICAgICAgICAgfSBlbHNlIGlmICggcHJvZ3JhbS5jb2RlICE9PSBjb2Rl
ICkgewogCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICB0eXBlOiAnRm9nJywKLSAgICAg
ICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLmdldEhleCgpLAotICAgICAgICAgICAgbmVhcjogdGhp
cy5uZWFyLAotICAgICAgICAgICAgZmFyOiB0aGlzLmZhcgotICAgICAgICB9OwotCi0gICAgfTsK
KyAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIGdsc2wgb3IgcGFyYW1ldGVycworICAgICAgICAg
ICAgICAgIHJlbGVhc2VNYXRlcmlhbFByb2dyYW1SZWZlcmVuY2UoIG1hdGVyaWFsICk7CiAKLSAg
ICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAq
LworICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVzLmxpZ2h0c0hhc2gg
IT09IGxpZ2h0cy5zdGF0ZS5oYXNoICkgewogCi0gICAgZnVuY3Rpb24gU2NlbmUgKCkgeworICAg
ICAgICAgICAgICAgIHByb3BlcnRpZXMudXBkYXRlKCBtYXRlcmlhbCwgJ2xpZ2h0c0hhc2gnLCBs
aWdodHMuc3RhdGUuaGFzaCApOworICAgICAgICAgICAgICAgIHByb2dyYW1DaGFuZ2UgPSBmYWxz
ZTsKIAotICAgICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBwYXJhbWV0ZXJzLnNoYWRlcklEICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgdGhp
cy50eXBlID0gJ1NjZW5lJzsKKyAgICAgICAgICAgICAgICAvLyBzYW1lIGdsc2wgYW5kIHVuaWZv
cm0gbGlzdAorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLmJhY2tncm91
bmQgPSBudWxsOwotICAgICAgICB0aGlzLmZvZyA9IG51bGw7Ci0gICAgICAgIHRoaXMub3ZlcnJp
ZGVNYXRlcmlhbCA9IG51bGw7CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIHRoaXMu
YXV0b1VwZGF0ZSA9IHRydWU7IC8vIGNoZWNrZWQgYnkgdGhlIHJlbmRlcmVyCisgICAgICAgICAg
ICAgICAgLy8gb25seSByZWJ1aWxkIHVuaWZvcm0gbGlzdAorICAgICAgICAgICAgICAgIHByb2dy
YW1DaGFuZ2UgPSBmYWxzZTsKIAotICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgIFNjZW5lLnBy
b3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIE9iamVjdDNELnByb3RvdHlw
ZSApLCB7CisgICAgICAgICAgICBpZiAoIHByb2dyYW1DaGFuZ2UgKSB7CiAKLSAgICAgICAgY29u
c3RydWN0b3I6IFNjZW5lLAorICAgICAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5zaGFkZXJJ
RCApIHsKIAotICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSwgcmVjdXJzaXZlICkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gU2hhZGVyTGliWyBwYXJhbWV0ZXJzLnNo
YWRlcklEIF07CiAKLSAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS5jb3B5LmNhbGwoIHRo
aXMsIHNvdXJjZSwgcmVjdXJzaXZlICk7CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsUHJv
cGVydGllcy5zaGFkZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlh
bC50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXM6IFVuaWZvcm1zVXRpbHMu
Y2xvbmUoIHNoYWRlci51bmlmb3JtcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4
U2hhZGVyOiBzaGFkZXIudmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZnJh
Z21lbnRTaGFkZXI6IHNoYWRlci5mcmFnbWVudFNoYWRlcgorICAgICAgICAgICAgICAgICAgICB9
OwogCi0gICAgICAgICAgICBpZiAoIHNvdXJjZS5iYWNrZ3JvdW5kICE9PSBudWxsICkgdGhpcy5i
YWNrZ3JvdW5kID0gc291cmNlLmJhY2tncm91bmQuY2xvbmUoKTsKLSAgICAgICAgICAgIGlmICgg
c291cmNlLmZvZyAhPT0gbnVsbCApIHRoaXMuZm9nID0gc291cmNlLmZvZy5jbG9uZSgpOwotICAg
ICAgICAgICAgaWYgKCBzb3VyY2Uub3ZlcnJpZGVNYXRlcmlhbCAhPT0gbnVsbCApIHRoaXMub3Zl
cnJpZGVNYXRlcmlhbCA9IHNvdXJjZS5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlID0gc291cmNl
LmF1dG9VcGRhdGU7Ci0gICAgICAgICAgICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBzb3VyY2Uu
bWF0cml4QXV0b1VwZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxQcm9wZXJ0aWVz
LnNoYWRlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsLnR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtczogbWF0ZXJpYWwudW5pZm9ybXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IG1hdGVyaWFsLnZlcnRleFNoYWRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBtYXRlcmlhbC5mcmFn
bWVudFNoYWRlcgorICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBt
YXRlcmlhbC5vbkJlZm9yZUNvbXBpbGUoIG1hdGVyaWFsUHJvcGVydGllcy5zaGFkZXIsIF90aGlz
ICk7CiAKLSAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbSA9IHByb2dyYW1DYWNoZS5hY3F1aXJlUHJvZ3JhbSggbWF0ZXJpYWwsIG1hdGVy
aWFsUHJvcGVydGllcy5zaGFkZXIsIHBhcmFtZXRlcnMsIGNvZGUgKTsKIAotICAgICAgICAgICAg
dmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMsIG1ldGEgKTsK
KyAgICAgICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMucHJvZ3JhbSA9IHByb2dyYW07Cisg
ICAgICAgICAgICAgICAgbWF0ZXJpYWwucHJvZ3JhbSA9IHByb2dyYW07CiAKLSAgICAgICAgICAg
IGlmICggdGhpcy5iYWNrZ3JvdW5kICE9PSBudWxsICkgZGF0YS5vYmplY3QuYmFja2dyb3VuZCA9
IHRoaXMuYmFja2dyb3VuZC50b0pTT04oIG1ldGEgKTsKLSAgICAgICAgICAgIGlmICggdGhpcy5m
b2cgIT09IG51bGwgKSBkYXRhLm9iamVjdC5mb2cgPSB0aGlzLmZvZy50b0pTT04oKTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICB2YXIgcHJv
Z3JhbUF0dHJpYnV0ZXMgPSBwcm9ncmFtLmdldEF0dHJpYnV0ZXMoKTsKIAotICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsLm1vcnBoVGFyZ2V0cyApIHsKIAotICAgIH0gKTsKKyAg
ICAgICAgICAgICAgICBtYXRlcmlhbC5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMgPSAwOwogCi0g
ICAgLyoqCi0gICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8K
LSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAg
ICAqLworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IF90aGlzLm1heE1vcnBo
VGFyZ2V0czsgaSArKyApIHsKIAotICAgIGZ1bmN0aW9uIExlbnNGbGFyZSggdGV4dHVyZSwgc2l6
ZSwgZGlzdGFuY2UsIGJsZW5kaW5nLCBjb2xvciApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBwcm9ncmFtQXR0cmlidXRlc1sgJ21vcnBoVGFyZ2V0JyArIGkgXSA+PSAwICkgewogCi0gICAg
ICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cyArKzsKIAotICAgICAgICB0aGlzLmxlbnNGbGFy
ZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucG9zaXRpb25T
Y3JlZW4gPSBuZXcgVmVjdG9yMygpOwotICAgICAgICB0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNr
ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAoIHRleHR1cmUg
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5hZGQo
IHRleHR1cmUsIHNpemUsIGRpc3RhbmNlLCBibGVuZGluZywgY29sb3IgKTsKKyAgICAgICAgICAg
IGlmICggbWF0ZXJpYWwubW9ycGhOb3JtYWxzICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBtYXRlcmlhbC5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHMgPSAwOwogCi0gICAgfQorICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IF90aGlzLm1heE1vcnBoTm9ybWFsczsg
aSArKyApIHsKIAotICAgIExlbnNGbGFyZS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmpl
Y3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5cGUgKSwgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIHByb2dyYW1BdHRyaWJ1dGVzWyAnbW9ycGhOb3JtYWwnICsgaSBdID49IDAgKSB7CiAKLSAg
ICAgICAgY29uc3RydWN0b3I6IExlbnNGbGFyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscyArKzsKIAotICAgICAgICBpc0xlbnNGbGFy
ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9u
ICggc291cmNlICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgT2JqZWN0M0Qu
cHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHRoaXMucG9zaXRpb25TY3JlZW4uY29weSggc291cmNlLnBvc2l0aW9uU2NyZWVu
ICk7Ci0gICAgICAgICAgICB0aGlzLmN1c3RvbVVwZGF0ZUNhbGxiYWNrID0gc291cmNlLmN1c3Rv
bVVwZGF0ZUNhbGxiYWNrOworICAgICAgICAgICAgdmFyIHVuaWZvcm1zID0gbWF0ZXJpYWxQcm9w
ZXJ0aWVzLnNoYWRlci51bmlmb3JtczsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBs
ID0gc291cmNlLmxlbnNGbGFyZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAg
IGlmICggISBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICYmCisgICAgICAgICAgICAgICAgISBt
YXRlcmlhbC5pc1Jhd1NoYWRlck1hdGVyaWFsIHx8CisgICAgICAgICAgICAgICAgbWF0ZXJpYWwu
Y2xpcHBpbmcgPT09IHRydWUgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmxlbnNGbGFyZXMu
cHVzaCggc291cmNlLmxlbnNGbGFyZXNbIGkgXSApOworICAgICAgICAgICAgICAgIG1hdGVyaWFs
UHJvcGVydGllcy5udW1DbGlwcGluZ1BsYW5lcyA9IF9jbGlwcGluZy5udW1QbGFuZXM7CisgICAg
ICAgICAgICAgICAgbWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUludGVyc2VjdGlvbiA9IF9jbGlwcGlu
Zy5udW1JbnRlcnNlY3Rpb247CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuY2xpcHBpbmdQbGFu
ZXMgPSBfY2xpcHBpbmcudW5pZm9ybTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgIG1hdGVyaWFsUHJvcGVydGllcy5mb2cgPSBmb2c7CiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBsaWdodCBzZXR1cCBpdCB3YXMg
Y3JlYXRlZCBmb3IKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICggdGV4dHVyZSwgc2l6ZSwgZGlz
dGFuY2UsIGJsZW5kaW5nLCBjb2xvciwgb3BhY2l0eSApIHsKKyAgICAgICAgICAgIG1hdGVyaWFs
UHJvcGVydGllcy5saWdodHNIYXNoID0gbGlnaHRzLnN0YXRlLmhhc2g7CiAKLSAgICAgICAgICAg
IGlmICggc2l6ZSA9PT0gdW5kZWZpbmVkICkgc2l6ZSA9IC0gMTsKLSAgICAgICAgICAgIGlmICgg
ZGlzdGFuY2UgPT09IHVuZGVmaW5lZCApIGRpc3RhbmNlID0gMDsKLSAgICAgICAgICAgIGlmICgg
b3BhY2l0eSA9PT0gdW5kZWZpbmVkICkgb3BhY2l0eSA9IDE7Ci0gICAgICAgICAgICBpZiAoIGNv
bG9yID09PSB1bmRlZmluZWQgKSBjb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTsKLSAgICAg
ICAgICAgIGlmICggYmxlbmRpbmcgPT09IHVuZGVmaW5lZCApIGJsZW5kaW5nID0gTm9ybWFsQmxl
bmRpbmc7Ci0KLSAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5taW4oIGRpc3RhbmNlLCBNYXRo
Lm1heCggMCwgZGlzdGFuY2UgKSApOwotCi0gICAgICAgICAgICB0aGlzLmxlbnNGbGFyZXMucHVz
aCggewotICAgICAgICAgICAgICAgIHRleHR1cmU6IHRleHR1cmUsICAgLy8gVEhSRUUuVGV4dHVy
ZQotICAgICAgICAgICAgICAgIHNpemU6IHNpemUsICAgICAgICAgLy8gc2l6ZSBpbiBwaXhlbHMg
KC0xID0gdXNlIHRleHR1cmUud2lkdGgpCi0gICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3Rh
bmNlLCAgICAgLy8gZGlzdGFuY2UgKDAtMSkgZnJvbSBsaWdodCBzb3VyY2UgKDA9YXQgbGlnaHQg
c291cmNlKQotICAgICAgICAgICAgICAgIHg6IDAsIHk6IDAsIHo6IDAsICAgLy8gc2NyZWVuIHBv
c2l0aW9uICgtMSA9PiAxKSB6ID0gMCBpcyBpbiBmcm9udCB6ID0gMSBpcyBiYWNrCi0gICAgICAg
ICAgICAgICAgc2NhbGU6IDEsICAgICAgIC8vIHNjYWxlCi0gICAgICAgICAgICAgICAgcm90YXRp
b246IDAsICAgICAgICAvLyByb3RhdGlvbgotICAgICAgICAgICAgICAgIG9wYWNpdHk6IG9wYWNp
dHksICAgLy8gb3BhY2l0eQotICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvciwgICAgICAgLy8g
Y29sb3IKLSAgICAgICAgICAgICAgICBibGVuZGluZzogYmxlbmRpbmcgIC8vIGJsZW5kaW5nCi0g
ICAgICAgICAgICB9ICk7CisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmxpZ2h0cyApIHsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIC8vIHdpcmUgdXAgdGhlIG1hdGVyaWFsIHRvIHRo
aXMgcmVuZGVyZXIncyBsaWdodGluZyBzdGF0ZQogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFVw
ZGF0ZSBsZW5zIGZsYXJlcyB1cGRhdGUgcG9zaXRpb25zIG9uIGFsbCBmbGFyZXMgYmFzZWQgb24g
dGhlIHNjcmVlbiBwb3NpdGlvbgotICAgICAgICAgKiBTZXQgbXlMZW5zRmxhcmUuY3VzdG9tVXBk
YXRlQ2FsbGJhY2sgdG8gYWx0ZXIgdGhlIGZsYXJlcyBpbiB5b3VyIHByb2plY3Qgc3BlY2lmaWMg
d2F5LgotICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5hbWJpZW50TGlnaHRD
b2xvci52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5hbWJpZW50OworICAgICAgICAgICAgICAgIHVuaWZv
cm1zLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmRpcmVjdGlvbmFsOwor
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNwb3RMaWdodHMudmFsdWUgPSBsaWdodHMuc3RhdGUu
c3BvdDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5yZWN0QXJlYUxpZ2h0cy52YWx1ZSA9IGxp
Z2h0cy5zdGF0ZS5yZWN0QXJlYTsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5wb2ludExpZ2h0
cy52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5wb2ludDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5o
ZW1pc3BoZXJlTGlnaHRzLnZhbHVlID0gbGlnaHRzLnN0YXRlLmhlbWk7CisKKyAgICAgICAgICAg
ICAgICB1bmlmb3Jtcy5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5k
aXJlY3Rpb25hbFNoYWRvd01hcDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXJlY3Rpb25h
bFNoYWRvd01hdHJpeC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJp
eDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5zcG90U2hhZG93TWFwLnZhbHVlID0gbGlnaHRz
LnN0YXRlLnNwb3RTaGFkb3dNYXA7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuc3BvdFNoYWRv
d01hdHJpeC52YWx1ZSA9IGxpZ2h0cy5zdGF0ZS5zcG90U2hhZG93TWF0cml4OworICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLnBvaW50U2hhZG93TWFwLnZhbHVlID0gbGlnaHRzLnN0YXRlLnBvaW50
U2hhZG93TWFwOworICAgICAgICAgICAgICAgIHVuaWZvcm1zLnBvaW50U2hhZG93TWF0cml4LnZh
bHVlID0gbGlnaHRzLnN0YXRlLnBvaW50U2hhZG93TWF0cml4OworICAgICAgICAgICAgICAgIC8v
IFRPRE8gKGFiZWxuYXRpb24pOiBhZGQgYXJlYSBsaWdodHMgc2hhZG93IGluZm8gdG8gdW5pZm9y
bXMKIAotICAgICAgICB1cGRhdGVMZW5zRmxhcmVzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHZhciBmLCBmbCA9IHRoaXMubGVuc0ZsYXJlcy5sZW5ndGg7Ci0g
ICAgICAgICAgICB2YXIgZmxhcmU7Ci0gICAgICAgICAgICB2YXIgdmVjWCA9IC0gdGhpcy5wb3Np
dGlvblNjcmVlbi54ICogMjsKLSAgICAgICAgICAgIHZhciB2ZWNZID0gLSB0aGlzLnBvc2l0aW9u
U2NyZWVuLnkgKiAyOworICAgICAgICAgICAgdmFyIHByb2dVbmlmb3JtcyA9IG1hdGVyaWFsUHJv
cGVydGllcy5wcm9ncmFtLmdldFVuaWZvcm1zKCksCisgICAgICAgICAgICAgICAgdW5pZm9ybXNM
aXN0ID0KKyAgICAgICAgICAgICAgICAgICAgV2ViR0xVbmlmb3Jtcy5zZXFXaXRoVmFsdWUoIHBy
b2dVbmlmb3Jtcy5zZXEsIHVuaWZvcm1zICk7CiAKLSAgICAgICAgICAgIGZvciAoIGYgPSAwOyBm
IDwgZmw7IGYgKysgKSB7CisgICAgICAgICAgICBtYXRlcmlhbFByb3BlcnRpZXMudW5pZm9ybXNM
aXN0ID0gdW5pZm9ybXNMaXN0OwogCi0gICAgICAgICAgICAgICAgZmxhcmUgPSB0aGlzLmxlbnNG
bGFyZXNbIGYgXTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZmxhcmUueCA9IHRoaXMu
cG9zaXRpb25TY3JlZW4ueCArIHZlY1ggKiBmbGFyZS5kaXN0YW5jZTsKLSAgICAgICAgICAgICAg
ICBmbGFyZS55ID0gdGhpcy5wb3NpdGlvblNjcmVlbi55ICsgdmVjWSAqIGZsYXJlLmRpc3RhbmNl
OworICAgICAgICBmdW5jdGlvbiBzZXRQcm9ncmFtKCBjYW1lcmEsIGZvZywgbWF0ZXJpYWwsIG9i
amVjdCApIHsKIAotICAgICAgICAgICAgICAgIGZsYXJlLndhbnRlZFJvdGF0aW9uID0gZmxhcmUu
eCAqIE1hdGguUEkgKiAwLjI1OwotICAgICAgICAgICAgICAgIGZsYXJlLnJvdGF0aW9uICs9ICgg
ZmxhcmUud2FudGVkUm90YXRpb24gLSBmbGFyZS5yb3RhdGlvbiApICogMC4yNTsKKyAgICAgICAg
ICAgIF91c2VkVGV4dHVyZVVuaXRzID0gMDsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIG1hdGVyaWFsUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbCApOworICAg
ICAgICAgICAgdmFyIGxpZ2h0cyA9IGN1cnJlbnRSZW5kZXJTdGF0ZS5zdGF0ZS5saWdodHM7CiAK
LSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBfY2xpcHBpbmdFbmFibGVkICkgewogCi0gICAg
fSApOworICAgICAgICAgICAgICAgIGlmICggX2xvY2FsQ2xpcHBpbmdFbmFibGVkIHx8IGNhbWVy
YSAhPT0gX2N1cnJlbnRDYW1lcmEgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqCi0gICAgICogcGFyYW1ldGVy
cyA9IHsKLSAgICAgKiAgY29sb3I6IDxoZXg+LAotICAgICAqICBvcGFjaXR5OiA8ZmxvYXQ+LAot
ICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICoKLSAgICAg
KiAgdXZPZmZzZXQ6IG5ldyBUSFJFRS5WZWN0b3IyKCksCi0gICAgICogIHV2U2NhbGU6IG5ldyBU
SFJFRS5WZWN0b3IyKCkKLSAgICAgKiB9Ci0gICAgICovCisgICAgICAgICAgICAgICAgICAgIHZh
ciB1c2VDYWNoZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgPT09IF9jdXJyZW50
Q2FtZXJhICYmCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5pZCA9PT0gX2N1cnJl
bnRNYXRlcmlhbElkOwogCi0gICAgZnVuY3Rpb24gU3ByaXRlTWF0ZXJpYWwoIHBhcmFtZXRlcnMg
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIG1pZ2h0IHdhbnQgdG8gY2FsbCB0aGlzIGZ1
bmN0aW9uIHdpdGggc29tZSBDbGlwcGluZ0dyb3VwCisgICAgICAgICAgICAgICAgICAgIC8vIG9i
amVjdCBpbnN0ZWFkIG9mIHRoZSBtYXRlcmlhbCwgb25jZSBpdCBiZWNvbWVzIGZlYXNpYmxlCisg
ICAgICAgICAgICAgICAgICAgIC8vICgjODQ2NSwgIzgzNzkpCisgICAgICAgICAgICAgICAgICAg
IF9jbGlwcGluZy5zZXRTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNs
aXBwaW5nUGxhbmVzLCBtYXRlcmlhbC5jbGlwSW50ZXJzZWN0aW9uLCBtYXRlcmlhbC5jbGlwU2hh
ZG93cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYSwgbWF0ZXJpYWxQcm9wZXJ0aWVz
LCB1c2VDYWNoZSApOwogCi0gICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1Nwcml0ZU1hdGVyaWFsJzsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOwot
ICAgICAgICB0aGlzLm1hcCA9IG51bGw7CisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLm5lZWRz
VXBkYXRlID09PSBmYWxzZSApIHsKIAotICAgICAgICB0aGlzLnJvdGF0aW9uID0gMDsKKyAgICAg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtID09PSB1bmRlZmluZWQg
KSB7CiAKLSAgICAgICAgdGhpcy5mb2cgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5saWdodHMgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwog
Ci0gICAgICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggbWF0ZXJpYWwuZm9nICYmIG1hdGVyaWFsUHJvcGVydGllcy5mb2cgIT09IGZv
ZyApIHsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUg
PSB0cnVlOwogCi0gICAgU3ByaXRlTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgg
TWF0ZXJpYWwucHJvdG90eXBlICk7Ci0gICAgU3ByaXRlTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0
cnVjdG9yID0gU3ByaXRlTWF0ZXJpYWw7Ci0gICAgU3ByaXRlTWF0ZXJpYWwucHJvdG90eXBlLmlz
U3ByaXRlTWF0ZXJpYWwgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVy
aWFsLmxpZ2h0cyAmJiBtYXRlcmlhbFByb3BlcnRpZXMubGlnaHRzSGFzaCAhPT0gbGlnaHRzLnN0
YXRlLmhhc2ggKSB7CiAKLSAgICBTcHJpdGVNYXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1bmN0
aW9uICggc291cmNlICkgeworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0
ZSA9IHRydWU7CiAKLSAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywg
c291cmNlICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWxQcm9wZXJ0aWVz
Lm51bUNsaXBwaW5nUGxhbmVzICE9PSB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgICAgICAgICAg
KCBtYXRlcmlhbFByb3BlcnRpZXMubnVtQ2xpcHBpbmdQbGFuZXMgIT09IF9jbGlwcGluZy5udW1Q
bGFuZXMgfHwKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxQcm9wZXJ0aWVzLm51bUludGVy
c2VjdGlvbiAhPT0gX2NsaXBwaW5nLm51bUludGVyc2VjdGlvbiApICkgewogCi0gICAgICAgIHRo
aXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7Ci0gICAgICAgIHRoaXMubWFwID0gc291cmNl
Lm1hcDsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlOwog
Ci0gICAgICAgIHRoaXMucm90YXRpb24gPSBzb3VyY2Uucm90YXRpb247CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQogCi0gICAgfTsKKyAg
ICAgICAgICAgIGlmICggbWF0ZXJpYWwubmVlZHNVcGRhdGUgKSB7CiAKLSAgICAvKioKLSAgICAg
KiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRo
b3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgICAg
ICAgICAgICAgaW5pdE1hdGVyaWFsKCBtYXRlcmlhbCwgZm9nLCBvYmplY3QgKTsKKyAgICAgICAg
ICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IGZhbHNlOwogCi0gICAgZnVuY3Rpb24gU3By
aXRlKCBtYXRlcmlhbCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBPYmplY3QzRC5jYWxs
KCB0aGlzICk7CisgICAgICAgICAgICB2YXIgcmVmcmVzaFByb2dyYW0gPSBmYWxzZTsKKyAgICAg
ICAgICAgIHZhciByZWZyZXNoTWF0ZXJpYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciByZWZy
ZXNoTGlnaHRzID0gZmFsc2U7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1Nwcml0ZSc7CisgICAg
ICAgICAgICB2YXIgcHJvZ3JhbSA9IG1hdGVyaWFsUHJvcGVydGllcy5wcm9ncmFtLAorICAgICAg
ICAgICAgICAgIHBfdW5pZm9ybXMgPSBwcm9ncmFtLmdldFVuaWZvcm1zKCksCisgICAgICAgICAg
ICAgICAgbV91bmlmb3JtcyA9IG1hdGVyaWFsUHJvcGVydGllcy5zaGFkZXIudW5pZm9ybXM7CiAK
LSAgICAgICAgdGhpcy5tYXRlcmlhbCA9ICggbWF0ZXJpYWwgIT09IHVuZGVmaW5lZCApID8gbWF0
ZXJpYWwgOiBuZXcgU3ByaXRlTWF0ZXJpYWwoKTsKKyAgICAgICAgICAgIGlmICggc3RhdGUudXNl
UHJvZ3JhbSggcHJvZ3JhbS5wcm9ncmFtICkgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAg
cmVmcmVzaFByb2dyYW0gPSB0cnVlOworICAgICAgICAgICAgICAgIHJlZnJlc2hNYXRlcmlhbCA9
IHRydWU7CisgICAgICAgICAgICAgICAgcmVmcmVzaExpZ2h0cyA9IHRydWU7CiAKLSAgICBTcHJp
dGUucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJv
dG90eXBlICksIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBjb25zdHJ1Y3RvcjogU3ByaXRl
LAorICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5pZCAhPT0gX2N1cnJlbnRNYXRlcmlhbElkICkg
ewogCi0gICAgICAgIGlzU3ByaXRlOiB0cnVlLAorICAgICAgICAgICAgICAgIF9jdXJyZW50TWF0
ZXJpYWxJZCA9IG1hdGVyaWFsLmlkOwogCi0gICAgICAgIHJheWNhc3Q6ICggZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7CiAKLSAgICAgICAgICAg
IHZhciBpbnRlcnNlY3RQb2ludCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgd29y
bGRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgd29ybGRTY2FsZSA9
IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiByYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7CisgICAgICAgICAgICBpZiAo
IHJlZnJlc2hQcm9ncmFtIHx8IGNhbWVyYSAhPT0gX2N1cnJlbnRDYW1lcmEgKSB7CiAKLSAgICAg
ICAgICAgICAgICB3b3JsZFBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5tYXRy
aXhXb3JsZCApOwotICAgICAgICAgICAgICAgIHJheWNhc3Rlci5yYXkuY2xvc2VzdFBvaW50VG9Q
b2ludCggd29ybGRQb3NpdGlvbiwgaW50ZXJzZWN0UG9pbnQgKTsKKyAgICAgICAgICAgICAgICBw
X3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdwcm9qZWN0aW9uTWF0cml4JywgY2FtZXJhLnByb2pl
Y3Rpb25NYXRyaXggKTsKIAotICAgICAgICAgICAgICAgIHdvcmxkU2NhbGUuc2V0RnJvbU1hdHJp
eFNjYWxlKCB0aGlzLm1hdHJpeFdvcmxkICk7Ci0gICAgICAgICAgICAgICAgdmFyIGd1ZXNzU2l6
ZVNxID0gd29ybGRTY2FsZS54ICogd29ybGRTY2FsZS55IC8gNDsKKyAgICAgICAgICAgICAgICBp
ZiAoIGNhcGFiaWxpdGllcy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyICkgewogCi0gICAgICAgICAg
ICAgICAgaWYgKCB3b3JsZFBvc2l0aW9uLmRpc3RhbmNlVG9TcXVhcmVkKCBpbnRlcnNlY3RQb2lu
dCApID4gZ3Vlc3NTaXplU3EgKSByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHBfdW5pZm9y
bXMuc2V0VmFsdWUoIF9nbCwgJ2xvZ0RlcHRoQnVmRkMnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgMi4wIC8gKCBNYXRoLmxvZyggY2FtZXJhLmZhciArIDEuMCApIC8gTWF0aC5MTjIgKSApOwog
Ci0gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlz
dGFuY2VUbyggaW50ZXJzZWN0UG9pbnQgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXlj
YXN0ZXIuZmFyICkgcmV0dXJuOworICAgICAgICAgICAgICAgIC8vIEF2b2lkIHVubmVlZGVkIHVu
aWZvcm0gdXBkYXRlcyBwZXIgQXJyYXlDYW1lcmEncyBzdWItY2FtZXJhCiAKLSAgICAgICAgICAg
ICAgICBpbnRlcnNlY3RzLnB1c2goIHsKKyAgICAgICAgICAgICAgICBpZiAoIF9jdXJyZW50Q2Ft
ZXJhICE9PSAoIF9jdXJyZW50QXJyYXlDYW1lcmEgfHwgY2FtZXJhICkgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICBwb2lu
dDogaW50ZXJzZWN0UG9pbnQuY2xvbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgZmFjZTogbnVs
bCwKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzCisgICAgICAgICAgICAgICAgICAg
IF9jdXJyZW50Q2FtZXJhID0gKCBfY3VycmVudEFycmF5Q2FtZXJhIHx8IGNhbWVyYSApOwogCi0g
ICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAvLyBsaWdodGluZyB1bmlm
b3JtcyBkZXBlbmQgb24gdGhlIGNhbWVyYSBzbyBlbmZvcmNlIGFuIHVwZGF0ZQorICAgICAgICAg
ICAgICAgICAgICAvLyBub3csIGluIGNhc2UgdGhpcyBtYXRlcmlhbCBzdXBwb3J0cyBsaWdodHMg
LSBvciBsYXRlciwgd2hlbgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBtYXRlcmlh
bCB0aGF0IGRvZXMgZ2V0cyBhY3RpdmF0ZWQ6CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgIHJlZnJlc2hNYXRlcmlhbCA9IHRydWU7ICAgICAvLyBzZXQgdG8gdHJ1ZSBvbiBt
YXRlcmlhbCBjaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgcmVmcmVzaExpZ2h0cyA9IHRydWU7
ICAgICAgIC8vIHJlbWFpbnMgc2V0IHVudGlsIHVwZGF0ZSBkb25lCiAKLSAgICAgICAgfSgpICks
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgLy8gbG9hZCBtYXRlcmlhbCBzcGVjaWZpYyB1bmlmb3JtcworICAgICAgICAg
ICAgICAgIC8vIChzaGFkZXIgbWF0ZXJpYWwgYWxzbyBnZXRzIHRoZW0gZm9yIHRoZSBzYWtlIG9m
IGdlbmVyaWNpdHkpCiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcigg
dGhpcy5tYXRlcmlhbCApLmNvcHkoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVy
aWFsLmlzU2hhZGVyTWF0ZXJpYWwgfHwKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXNN
ZXNoUGhvbmdNYXRlcmlhbCB8fAorICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5pc01lc2hT
dGFuZGFyZE1hdGVyaWFsIHx8CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmVudk1hcCAp
IHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciB1Q2FtUG9zID0gcF91bmlm
b3Jtcy5tYXAuY2FtZXJhUG9zaXRpb247CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgICAg
IGlmICggdUNhbVBvcyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KLSAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBhdXRob3IgbXJkb29iIC8g
aHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB1Q2Ft
UG9zLnNldFZhbHVlKCBfZ2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlY3RvcjMu
c2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBjYW1lcmEubWF0cml4V29ybGQgKSApOwogCi0gICAgZnVu
Y3Rpb24gTE9EKCkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgT2JqZWN0M0Qu
Y2FsbCggdGhpcyApOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnR5cGUgPSAn
TE9EJzsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwg
fHwKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8
CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHwKKyAg
ICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCB8fAorICAg
ICAgICAgICAgICAgICAgICBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsIHx8CisgICAgICAgICAg
ICAgICAgICAgIG1hdGVyaWFsLnNraW5uaW5nICkgeworCisgICAgICAgICAgICAgICAgICAgIHBf
dW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ3ZpZXdNYXRyaXgnLCBjYW1lcmEubWF0cml4V29ybGRJ
bnZlcnNlICk7CisKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMoIHRoaXMsIHsKLSAgICAgICAgICAgIGxldmVsczogewotICAgICAgICAgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgdmFsdWU6IFtdCiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0gKTsKIAotICAgIH0KKyAgICAgICAgICAgIC8vIHNraW5uaW5nIHVuaWZv
cm1zIG11c3QgYmUgc2V0IGV2ZW4gaWYgbWF0ZXJpYWwgZGlkbid0IGNoYW5nZQorICAgICAgICAg
ICAgLy8gYXV0by1zZXR0aW5nIG9mIHRleHR1cmUgdW5pdCBmb3IgYm9uZSB0ZXh0dXJlIG11c3Qg
Z28gYmVmb3JlIG90aGVyIHRleHR1cmVzCisgICAgICAgICAgICAvLyBub3Qgc3VyZSB3aHksIGJ1
dCBvdGhlcndpc2Ugd2VpcmQgdGhpbmdzIGhhcHBlbgogCi0gICAgTE9ELnByb3RvdHlwZSA9IE9i
amVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIE9iamVjdDNELnByb3RvdHlwZSApLCB7CisgICAg
ICAgICAgICBpZiAoIG1hdGVyaWFsLnNraW5uaW5nICkgewogCi0gICAgICAgIGNvbnN0cnVjdG9y
OiBMT0QsCisgICAgICAgICAgICAgICAgcF91bmlmb3Jtcy5zZXRPcHRpb25hbCggX2dsLCBvYmpl
Y3QsICdiaW5kTWF0cml4JyApOworICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0T3B0aW9u
YWwoIF9nbCwgb2JqZWN0LCAnYmluZE1hdHJpeEludmVyc2UnICk7CiAKLSAgICAgICAgY29weTog
ZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gb2Jq
ZWN0LnNrZWxldG9uOwogCi0gICAgICAgICAgICBPYmplY3QzRC5wcm90b3R5cGUuY29weS5jYWxs
KCB0aGlzLCBzb3VyY2UsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgaWYgKCBza2VsZXRvbiAp
IHsKIAotICAgICAgICAgICAgdmFyIGxldmVscyA9IHNvdXJjZS5sZXZlbHM7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBib25lcyA9IHNrZWxldG9uLmJvbmVzOwogCi0gICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjYXBhYmlsaXRpZXMuZmxvYXRWZXJ0ZXhUZXh0dXJlcyApIHsKIAot
ICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IGxldmVsc1sgaSBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBza2VsZXRvbi5ib25lVGV4dHVyZSA9PT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgICAgICAgICAgdGhpcy5hZGRMZXZlbCggbGV2ZWwub2JqZWN0LmNsb25lKCksIGxldmVs
LmRpc3RhbmNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGF5b3V0ICgxIG1h
dHJpeCA9IDQgcGl4ZWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgUkdC
QSBSR0JBIFJHQkEgUkdCQSAoPT4gY29sdW1uMSwgY29sdW1uMiwgY29sdW1uMywgY29sdW1uNCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgd2l0aCAgOHg4ICBwaXhlbCB0ZXh0dXJl
IG1heCAgIDE2IGJvbmVzICogNCBwaXhlbHMgPSAgKDggKiA4KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgIDE2eDE2IHBpeGVsIHRleHR1cmUgbWF4ICAgNjQgYm9uZXMgKiA0
IHBpeGVscyA9ICgxNiAqIDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
IDMyeDMyIHBpeGVsIHRleHR1cmUgbWF4ICAyNTYgYm9uZXMgKiA0IHBpeGVscyA9ICgzMiAqIDMy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIDY0eDY0IHBpeGVsIHRleHR1
cmUgbWF4IDEwMjQgYm9uZXMgKiA0IHBpeGVscyA9ICg2NCAqIDY0KQogCi0gICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBzaXplID0gTWF0aC5zcXJ0KCBib25lcy5sZW5ndGggKiA0ICk7IC8vIDQgcGl4ZWxzIG5l
ZWRlZCBmb3IgMSBtYXRyaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gX01h
dGguY2VpbFBvd2VyT2ZUd28oIHNpemUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplID0gTWF0aC5tYXgoIHNpemUsIDQgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBib25lTWF0cmljZXMgPSBuZXcgRmxvYXQzMkFycmF5KCBzaXplICog
c2l6ZSAqIDQgKTsgLy8gNCBmbG9hdHMgcGVyIFJHQkEgcGl4ZWwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib25lTWF0cmljZXMuc2V0KCBza2VsZXRvbi5ib25lTWF0cmljZXMgKTsgLy8g
Y29weSBjdXJyZW50IHZhbHVlcwogCi0gICAgICAgIGFkZExldmVsOiBmdW5jdGlvbiAoIG9iamVj
dCwgZGlzdGFuY2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvbmVUZXh0
dXJlID0gbmV3IERhdGFUZXh0dXJlKCBib25lTWF0cmljZXMsIHNpemUsIHNpemUsIFJHQkFGb3Jt
YXQsIEZsb2F0VHlwZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbmVUZXh0dXJl
Lm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICAgICAgaWYgKCBkaXN0YW5jZSA9PT0gdW5k
ZWZpbmVkICkgZGlzdGFuY2UgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZWxl
dG9uLmJvbmVNYXRyaWNlcyA9IGJvbmVNYXRyaWNlczsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBza2VsZXRvbi5ib25lVGV4dHVyZSA9IGJvbmVUZXh0dXJlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNrZWxldG9uLmJvbmVUZXh0dXJlU2l6ZSA9IHNpemU7CiAKLSAgICAgICAg
ICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoIGRpc3RhbmNlICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHZhciBsZXZlbHMgPSB0aGlzLmxldmVsczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0VmFsdWUoIF9nbCwgJ2JvbmVUZXh0dXJlJywg
c2tlbGV0b24uYm9uZVRleHR1cmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBfdW5pZm9y
bXMuc2V0VmFsdWUoIF9nbCwgJ2JvbmVUZXh0dXJlU2l6ZScsIHNrZWxldG9uLmJvbmVUZXh0dXJl
U2l6ZSApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgbCA9IDA7IGwgPCBsZXZlbHMubGVuZ3Ro
OyBsICsrICkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAg
ICAgaWYgKCBkaXN0YW5jZSA8IGxldmVsc1sgbCBdLmRpc3RhbmNlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcF91bmlmb3Jtcy5zZXRPcHRpb25hbCggX2dsLCBza2VsZXRvbiwgJ2JvbmVN
YXRyaWNlcycgKTsKIAotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGxldmVscy5zcGxpY2UoIGwsIDAsIHsgZGlzdGFuY2U6IGRpc3RhbmNlLCBvYmplY3Q6IG9i
amVjdCB9ICk7CisgICAgICAgICAgICBpZiAoIHJlZnJlc2hNYXRlcmlhbCApIHsKIAotICAgICAg
ICAgICAgdGhpcy5hZGQoIG9iamVjdCApOworICAgICAgICAgICAgICAgIHBfdW5pZm9ybXMuc2V0
VmFsdWUoIF9nbCwgJ3RvbmVNYXBwaW5nRXhwb3N1cmUnLCBfdGhpcy50b25lTWFwcGluZ0V4cG9z
dXJlICk7CisgICAgICAgICAgICAgICAgcF91bmlmb3Jtcy5zZXRWYWx1ZSggX2dsLCAndG9uZU1h
cHBpbmdXaGl0ZVBvaW50JywgX3RoaXMudG9uZU1hcHBpbmdXaGl0ZVBvaW50ICk7CiAKLSAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmxpZ2h0cyApIHsKIAotICAgICAg
ICBnZXRPYmplY3RGb3JEaXN0YW5jZTogZnVuY3Rpb24gKCBkaXN0YW5jZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgbWF0ZXJpYWwgcmVxdWlyZXMgbGlnaHRpbmcgaW5m
bwogCi0gICAgICAgICAgICB2YXIgbGV2ZWxzID0gdGhpcy5sZXZlbHM7CisgICAgICAgICAgICAg
ICAgICAgIC8vIG5vdGU6IGFsbCBsaWdodGluZyB1bmlmb3JtcyBhcmUgYWx3YXlzIHNldCBjb3Jy
ZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhleSBzaW1wbHkgcmVmZXJlbmNlIHRoZSBy
ZW5kZXJlcidzIHN0YXRlIGZvciB0aGVpcgorICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBj
dXJyZW50IG1hdGVyaWFsJ3MgLm5lZWRzVXBkYXRlIGZsYWdzIHRvIHNldAorICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgR0wgc3RhdGUgd2hlbiByZXF1aXJlZAogCi0gICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDEsIGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWFya1VuaWZvcm1zTGlnaHRzTmVlZHNVcGRhdGUoIG1fdW5pZm9ybXMsIHJl
ZnJlc2hMaWdodHMgKTsKIAotICAgICAgICAgICAgICAgIGlmICggZGlzdGFuY2UgPCBsZXZlbHNb
IGkgXS5kaXN0YW5jZSApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gcmVmcmVzaCB1bmlmb3JtcyBjb21tb24gdG8g
c2V2ZXJhbCBtYXRlcmlhbHMKKworICAgICAgICAgICAgICAgIGlmICggZm9nICYmIG1hdGVyaWFs
LmZvZyApIHsKKworICAgICAgICAgICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNGb2coIG1fdW5p
Zm9ybXMsIGZvZyApOwogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5pc01lc2hCYXNpY01hdGVyaWFsICkgewogCi0gICAg
ICAgICAgICByZXR1cm4gbGV2ZWxzWyBpIC0gMSBdLm9iamVjdDsKKyAgICAgICAgICAgICAgICAg
ICAgcmVmcmVzaFVuaWZvcm1zQ29tbW9uKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoTGFtYmVy
dE1hdGVyaWFsICkgewogCi0gICAgICAgIHJheWNhc3Q6ICggZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICByZWZyZXNoVW5pZm9ybXNDb21tb24oIG1fdW5pZm9ybXMsIG1hdGVyaWFs
ICk7CisgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc0xhbWJlcnQoIG1fdW5pZm9y
bXMsIG1hdGVyaWFsICk7CiAKLSAgICAgICAgICAgIHZhciBtYXRyaXhQb3NpdGlvbiA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoUGhv
bmdNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJheWNhc3QoIHJh
eWNhc3RlciwgaW50ZXJzZWN0cyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZv
cm1zQ29tbW9uKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICAgICAgbWF0
cml4UG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1hdHJpeFdvcmxkICk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXNNZXNoVG9vbk1hdGVyaWFsICkgewog
Ci0gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlz
dGFuY2VUbyggbWF0cml4UG9zaXRpb24gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJl
c2hVbmlmb3Jtc1Rvb24oIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7CiAKLSAgICAgICAgICAgICAg
ICB0aGlzLmdldE9iamVjdEZvckRpc3RhbmNlKCBkaXN0YW5jZSApLnJheWNhc3QoIHJheWNhc3Rl
ciwgaW50ZXJzZWN0cyApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZvcm1zUGhvbmcoIG1f
dW5pZm9ybXMsIG1hdGVyaWFsICk7CiAKLSAgICAgICAgfSgpICksCisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsICkgewogCi0gICAgICAg
ICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHYyID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZvcm1zQ29tbW9uKCBtX3Vu
aWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdXBkYXRl
KCBjYW1lcmEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXNNZXNoUGh5
c2ljYWxNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgIHZhciBsZXZlbHMgPSB0aGlzLmxl
dmVsczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1BoeXNpY2FsKCBt
X3VuaWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBsZXZlbHMubGVu
Z3RoID4gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAg
ICAgICAgICB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGNhbWVyYS5tYXRyaXhXb3JsZCApOwot
ICAgICAgICAgICAgICAgICAgICB2Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIHRoaXMubWF0cml4
V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJk
KCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBkaXN0
YW5jZSA9IHYxLmRpc3RhbmNlVG8oIHYyICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgICAgICBsZXZlbHNbIDAgXS5vYmplY3QudmlzaWJsZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoRGVwdGhNYXRlcmlhbCApIHsK
IAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDEsIGwgPSBsZXZlbHMubGVuZ3Ro
OyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZvcm1zQ29t
bW9uKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOworICAgICAgICAgICAgICAgICAgICByZWZyZXNo
VW5pZm9ybXNEZXB0aCggbV91bmlmb3JtcywgbWF0ZXJpYWwgKTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBkaXN0YW5jZSA+PSBsZXZlbHNbIGkgXS5kaXN0YW5jZSApIHsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsICkg
ewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzWyBpIC0gMSBdLm9iamVjdC52
aXNpYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzWyBpIF0u
b2JqZWN0LnZpc2libGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZWZyZXNoVW5pZm9y
bXNDb21tb24oIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7CisgICAgICAgICAgICAgICAgICAgIHJl
ZnJlc2hVbmlmb3Jtc0Rpc3RhbmNlKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1h
dGVyaWFsLmlzTWVzaE5vcm1hbE1hdGVyaWFsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc0NvbW1vbigg
bV91bmlmb3JtcywgbWF0ZXJpYWwgKTsKKyAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFVuaWZv
cm1zTm9ybWFsKCBtX3VuaWZvcm1zLCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJpYWwuaXNMaW5lQmFzaWNN
YXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHJlZnJlc2hVbmlmb3Jtc0xpbmUoIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRlcmlhbC5pc0xpbmVEYXNoZWRNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgbGV2ZWxzWyBpIF0ub2JqZWN0LnZpc2libGUgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc0Rhc2goIG1fdW5pZm9ybXMsIG1hdGVyaWFsICk7
CiAKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzUG9pbnRzTWF0ZXJpYWwgKSB7CiAKLSAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1BvaW50cyggbV91
bmlmb3JtcywgbWF0ZXJpYWwgKTsKIAotICAgICAgICB9KCksCisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggbWF0ZXJpYWwuaXNTaGFkb3dNYXRlcmlhbCApIHsKIAotICAgICAgICB0b0pTT046
IGZ1bmN0aW9uICggbWV0YSApIHsKKyAgICAgICAgICAgICAgICAgICAgbV91bmlmb3Jtcy5jb2xv
ci52YWx1ZSA9IG1hdGVyaWFsLmNvbG9yOworICAgICAgICAgICAgICAgICAgICBtX3VuaWZvcm1z
Lm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFjaXR5OwogCi0gICAgICAgICAgICB2YXIgZGF0
YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZGF0YS5vYmplY3QubGV2ZWxzID0gW107CisgICAg
ICAgICAgICAgICAgLy8gUmVjdEFyZWFMaWdodCBUZXh0dXJlCisgICAgICAgICAgICAgICAgLy8g
VE9ETyAobXJkb29iKTogRmluZCBhIG5pY2VyIGltcGxlbWVudGF0aW9uCiAKLSAgICAgICAgICAg
IHZhciBsZXZlbHMgPSB0aGlzLmxldmVsczsKKyAgICAgICAgICAgICAgICBpZiAoIG1fdW5pZm9y
bXMubHRjXzEgIT09IHVuZGVmaW5lZCApIG1fdW5pZm9ybXMubHRjXzEudmFsdWUgPSBVbmlmb3Jt
c0xpYi5MVENfMTsKKyAgICAgICAgICAgICAgICBpZiAoIG1fdW5pZm9ybXMubHRjXzIgIT09IHVu
ZGVmaW5lZCApIG1fdW5pZm9ybXMubHRjXzIudmFsdWUgPSBVbmlmb3Jtc0xpYi5MVENfMjsKIAot
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkg
KysgKSB7CisgICAgICAgICAgICAgICAgV2ViR0xVbmlmb3Jtcy51cGxvYWQoIF9nbCwgbWF0ZXJp
YWxQcm9wZXJ0aWVzLnVuaWZvcm1zTGlzdCwgbV91bmlmb3JtcywgX3RoaXMgKTsKIAotICAgICAg
ICAgICAgICAgIHZhciBsZXZlbCA9IGxldmVsc1sgaSBdOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgZGF0YS5vYmplY3QubGV2ZWxzLnB1c2goIHsKLSAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0OiBsZXZlbC5vYmplY3QudXVpZCwKLSAgICAgICAgICAgICAgICAgICAgZGlzdGFu
Y2U6IGxldmVsLmRpc3RhbmNlCi0gICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgaWYg
KCBtYXRlcmlhbC5pc1NoYWRlck1hdGVyaWFsICYmIG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0
ZSA9PT0gdHJ1ZSApIHsKKworICAgICAgICAgICAgICAgIFdlYkdMVW5pZm9ybXMudXBsb2FkKCBf
Z2wsIG1hdGVyaWFsUHJvcGVydGllcy51bmlmb3Jtc0xpc3QsIG1fdW5pZm9ybXMsIF90aGlzICk7
CisgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gZmFsc2U7CiAK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAv
LyBjb21tb24gbWF0cmljZXMKIAotICAgICAgICB9CisgICAgICAgICAgICBwX3VuaWZvcm1zLnNl
dFZhbHVlKCBfZ2wsICdtb2RlbFZpZXdNYXRyaXgnLCBvYmplY3QubW9kZWxWaWV3TWF0cml4ICk7
CisgICAgICAgICAgICBwX3VuaWZvcm1zLnNldFZhbHVlKCBfZ2wsICdub3JtYWxNYXRyaXgnLCBv
YmplY3Qubm9ybWFsTWF0cml4ICk7CisgICAgICAgICAgICBwX3VuaWZvcm1zLnNldFZhbHVlKCBf
Z2wsICdtb2RlbE1hdHJpeCcsIG9iamVjdC5tYXRyaXhXb3JsZCApOwogCi0gICAgfSApOworICAg
ICAgICAgICAgcmV0dXJuIHByb2dyYW07CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1pa2Fl
bCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBo
dHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICogQGF1dGhvciBtaWNoYWVsIGd1ZXJyZXJv
IC8gaHR0cDovL3JlYWxpdHltZWx0ZG93bi5jb20KLSAgICAgKiBAYXV0aG9yIGlrZXJyIC8gaHR0
cDovL3Zlcm9sZC5jb20KLSAgICAgKi8KKyAgICAgICAgfQogCi0gICAgZnVuY3Rpb24gU2tlbGV0
b24oIGJvbmVzLCBib25lSW52ZXJzZXMgKSB7CisgICAgICAgIC8vIFVuaWZvcm1zIChyZWZyZXNo
IHVuaWZvcm1zIG9iamVjdHMpCiAKLSAgICAgICAgLy8gY29weSB0aGUgYm9uZSBhcnJheQorICAg
ICAgICBmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNDb21tb24oIHVuaWZvcm1zLCBtYXRlcmlhbCAp
IHsKIAotICAgICAgICBib25lcyA9IGJvbmVzIHx8IFtdOworICAgICAgICAgICAgdW5pZm9ybXMu
b3BhY2l0eS52YWx1ZSA9IG1hdGVyaWFsLm9wYWNpdHk7CiAKLSAgICAgICAgdGhpcy5ib25lcyA9
IGJvbmVzLnNsaWNlKCAwICk7Ci0gICAgICAgIHRoaXMuYm9uZU1hdHJpY2VzID0gbmV3IEZsb2F0
MzJBcnJheSggdGhpcy5ib25lcy5sZW5ndGggKiAxNiApOworICAgICAgICAgICAgaWYgKCBtYXRl
cmlhbC5jb2xvciApIHsKIAotICAgICAgICAvLyB1c2UgdGhlIHN1cHBsaWVkIGJvbmUgaW52ZXJz
ZXMgb3IgY2FsY3VsYXRlIHRoZSBpbnZlcnNlcworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRp
ZmZ1c2UudmFsdWUgPSBtYXRlcmlhbC5jb2xvcjsKIAotICAgICAgICBpZiAoIGJvbmVJbnZlcnNl
cyA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmNh
bGN1bGF0ZUludmVyc2VzKCk7CisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmVtaXNzaXZlICkg
ewogCi0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3NpdmUu
dmFsdWUuY29weSggbWF0ZXJpYWwuZW1pc3NpdmUgKS5tdWx0aXBseVNjYWxhciggbWF0ZXJpYWwu
ZW1pc3NpdmVJbnRlbnNpdHkgKTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLmJvbmVzLmxlbmd0
aCA9PT0gYm9uZUludmVyc2VzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIHRoaXMuYm9uZUludmVyc2VzID0gYm9uZUludmVyc2VzLnNsaWNlKCAwICk7CisgICAg
ICAgICAgICBpZiAoIG1hdGVyaWFsLm1hcCApIHsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB1bmlmb3Jtcy5tYXAudmFsdWUgPSBtYXRlcmlhbC5tYXA7CiAKLSAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Ta2VsZXRvbiBib25lSW52ZXJzZXMgaXMg
dGhlIHdyb25nIGxlbmd0aC4nICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0
aGlzLmJvbmVJbnZlcnNlcyA9IFtdOworICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5hbHBoYU1h
cCApIHsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSB0aGlzLmJvbmVz
Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmFscGhh
TWFwLnZhbHVlID0gbWF0ZXJpYWwuYWxwaGFNYXA7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5ib25lSW52ZXJzZXMucHVzaCggbmV3IE1hdHJpeDQoKSApOworICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5zcGVjdWxhck1hcCAp
IHsKKworICAgICAgICAgICAgICAgIHVuaWZvcm1zLnNwZWN1bGFyTWFwLnZhbHVlID0gbWF0ZXJp
YWwuc3BlY3VsYXJNYXA7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIG1hdGVyaWFsLmVudk1hcCApIHsKIAotICAgIH0KKyAgICAgICAgICAgICAgICB1bmlm
b3Jtcy5lbnZNYXAudmFsdWUgPSBtYXRlcmlhbC5lbnZNYXA7CiAKLSAgICBPYmplY3QuYXNzaWdu
KCBTa2VsZXRvbi5wcm90b3R5cGUsIHsKKyAgICAgICAgICAgICAgICAvLyBkb24ndCBmbGlwIEN1
YmVUZXh0dXJlIGVudk1hcHMsIGZsaXAgZXZlcnl0aGluZyBlbHNlOgorICAgICAgICAgICAgICAg
IC8vICBXZWJHTFJlbmRlclRhcmdldEN1YmUgd2lsbCBiZSBmbGlwcGVkIGZvciBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgIC8vICBXZWJHTFJlbmRlclRhcmdldEN1YmUu
dGV4dHVyZSB3aWxsIGJlIGZsaXBwZWQgYmVjYXVzZSBpdCdzIGEgVGV4dHVyZSBhbmQgTk9UIGEg
Q3ViZVRleHR1cmUKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGNoZWNrIG11c3QgYmUgaGFuZGxl
ZCBkaWZmZXJlbnRseSwgb3IgcmVtb3ZlZCBlbnRpcmVseSwgaWYgV2ViR0xSZW5kZXJUYXJnZXRD
dWJlIHVzZXMgYSBDdWJlVGV4dHVyZSBpbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAgICAgdW5p
Zm9ybXMuZmxpcEVudk1hcC52YWx1ZSA9ICggISAoIG1hdGVyaWFsLmVudk1hcCAmJiBtYXRlcmlh
bC5lbnZNYXAuaXNDdWJlVGV4dHVyZSApICkgPyAxIDogLSAxOwogCi0gICAgICAgIGNhbGN1bGF0
ZUludmVyc2VzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMucmVmbGVj
dGl2aXR5LnZhbHVlID0gbWF0ZXJpYWwucmVmbGVjdGl2aXR5OworICAgICAgICAgICAgICAgIHVu
aWZvcm1zLnJlZnJhY3Rpb25SYXRpby52YWx1ZSA9IG1hdGVyaWFsLnJlZnJhY3Rpb25SYXRpbzsK
IAotICAgICAgICAgICAgdGhpcy5ib25lSW52ZXJzZXMgPSBbXTsKKyAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5tYXhNaXBMZXZlbC52YWx1ZSA9IHByb3BlcnRpZXMuZ2V0KCBtYXRlcmlhbC5lbnZN
YXAgKS5fX21heE1pcExldmVsOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0g
dGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIHZhciBpbnZlcnNlID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgICAgIGlm
ICggbWF0ZXJpYWwubGlnaHRNYXAgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMuYm9u
ZXNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5saWdodE1hcC52YWx1ZSA9IG1h
dGVyaWFsLmxpZ2h0TWFwOworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmxpZ2h0TWFwSW50ZW5z
aXR5LnZhbHVlID0gbWF0ZXJpYWwubGlnaHRNYXBJbnRlbnNpdHk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgaW52ZXJzZS5nZXRJbnZlcnNlKCB0aGlzLmJvbmVzWyBpIF0ubWF0cml4V29ybGQgKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggbWF0
ZXJpYWwuYW9NYXAgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmJvbmVJbnZlcnNlcy5wdXNo
KCBpbnZlcnNlICk7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuYW9NYXAudmFsdWUgPSBtYXRl
cmlhbC5hb01hcDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5hb01hcEludGVuc2l0eS52YWx1
ZSA9IG1hdGVyaWFsLmFvTWFwSW50ZW5zaXR5OwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
fSwKKyAgICAgICAgICAgIC8vIHV2IHJlcGVhdCBhbmQgb2Zmc2V0IHNldHRpbmcgcHJpb3JpdGll
cworICAgICAgICAgICAgLy8gMS4gY29sb3IgbWFwCisgICAgICAgICAgICAvLyAyLiBzcGVjdWxh
ciBtYXAKKyAgICAgICAgICAgIC8vIDMuIG5vcm1hbCBtYXAKKyAgICAgICAgICAgIC8vIDQuIGJ1
bXAgbWFwCisgICAgICAgICAgICAvLyA1LiBhbHBoYSBtYXAKKyAgICAgICAgICAgIC8vIDYuIGVt
aXNzaXZlIG1hcAogCi0gICAgICAgIHBvc2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZh
ciB1dlNjYWxlTWFwOwogCi0gICAgICAgICAgICB2YXIgYm9uZSwgaSwgaWw7CisgICAgICAgICAg
ICBpZiAoIG1hdGVyaWFsLm1hcCApIHsKIAotICAgICAgICAgICAgLy8gcmVjb3ZlciB0aGUgYmlu
ZC10aW1lIHdvcmxkIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgdXZTY2FsZU1hcCA9IG1hdGVy
aWFsLm1hcDsKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdGhpcy5ib25lcy5sZW5n
dGg7IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLnNw
ZWN1bGFyTWFwICkgewogCi0gICAgICAgICAgICAgICAgYm9uZSA9IHRoaXMuYm9uZXNbIGkgXTsK
KyAgICAgICAgICAgICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwuc3BlY3VsYXJNYXA7CiAKLSAg
ICAgICAgICAgICAgICBpZiAoIGJvbmUgKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRl
cmlhbC5kaXNwbGFjZW1lbnRNYXAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYm9uZS5tYXRy
aXhXb3JsZC5nZXRJbnZlcnNlKCB0aGlzLmJvbmVJbnZlcnNlc1sgaSBdICk7CisgICAgICAgICAg
ICAgICAgdXZTY2FsZU1hcCA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDsKIAotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0ZXJp
YWwubm9ybWFsTWFwICkgewogCi0gICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBsb2NhbCBtYXRy
aWNlcywgcG9zaXRpb25zLCByb3RhdGlvbnMgYW5kIHNjYWxlcworICAgICAgICAgICAgICAgIHV2
U2NhbGVNYXAgPSBtYXRlcmlhbC5ub3JtYWxNYXA7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCBtYXRlcmlhbC5idW1wTWFwICkgewogCi0gICAgICAgICAgICAgICAgYm9uZSA9
IHRoaXMuYm9uZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwu
YnVtcE1hcDsKIAotICAgICAgICAgICAgICAgIGlmICggYm9uZSApIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIG1hdGVyaWFsLnJvdWdobmVzc01hcCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGJvbmUucGFyZW50ICYmIGJvbmUucGFyZW50LmlzQm9uZSApIHsKKyAgICAgICAgICAg
ICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwucm91Z2huZXNzTWFwOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBib25lLm1hdHJpeC5nZXRJbnZlcnNlKCBib25lLnBhcmVudC5tYXRyaXhXb3Js
ZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9uZS5tYXRyaXgubXVsdGlwbHkoIGJvbmUu
bWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGVyaWFsLm1ldGFsbmVz
c01hcCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5tZXRhbG5lc3NNYXA7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvbmUubWF0cml4LmNvcHkoIGJvbmUubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG1hdGVyaWFsLmFscGhhTWFwICkgewogCi0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB1dlNjYWxlTWFwID0gbWF0ZXJpYWwuYWxwaGFNYXA7CiAKLSAg
ICAgICAgICAgICAgICAgICAgYm9uZS5tYXRyaXguZGVjb21wb3NlKCBib25lLnBvc2l0aW9uLCBi
b25lLnF1YXRlcm5pb24sIGJvbmUuc2NhbGUgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1h
dGVyaWFsLmVtaXNzaXZlTWFwICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHV2U2NhbGVNYXAgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDsKIAogICAgICAgICAgICAgfQog
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdXBkYXRlOiAoIGZ1bmN0aW9uICgpIHsKLQotICAgICAg
ICAgICAgdmFyIG9mZnNldE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7Ci0gICAgICAgICAgICB2YXIg
aWRlbnRpdHlNYXRyaXggPSBuZXcgTWF0cml4NCgpOwotCi0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gdXBkYXRlKCkgewotCi0gICAgICAgICAgICAgICAgdmFyIGJvbmVzID0gdGhpcy5ib25l
czsKLSAgICAgICAgICAgICAgICB2YXIgYm9uZUludmVyc2VzID0gdGhpcy5ib25lSW52ZXJzZXM7
Ci0gICAgICAgICAgICAgICAgdmFyIGJvbmVNYXRyaWNlcyA9IHRoaXMuYm9uZU1hdHJpY2VzOwot
ICAgICAgICAgICAgICAgIHZhciBib25lVGV4dHVyZSA9IHRoaXMuYm9uZVRleHR1cmU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBmbGF0dGVuIGJvbmUgbWF0cmljZXMgdG8gYXJyYXkKLQotICAgICAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBib25lcy5sZW5ndGg7IGkgPCBpbDsgaSAr
KyApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBvZmZzZXQgYmV0d2Vl
biB0aGUgY3VycmVudCBhbmQgdGhlIG9yaWdpbmFsIHRyYW5zZm9ybQorICAgICAgICAgICAgaWYg
KCB1dlNjYWxlTWFwICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFy
IG1hdHJpeCA9IGJvbmVzWyBpIF0gPyBib25lc1sgaSBdLm1hdHJpeFdvcmxkIDogaWRlbnRpdHlN
YXRyaXg7CisgICAgICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICAg
ICAgICAgICAgICBpZiAoIHV2U2NhbGVNYXAuaXNXZWJHTFJlbmRlclRhcmdldCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggbWF0cml4LCBi
b25lSW52ZXJzZXNbIGkgXSApOwotICAgICAgICAgICAgICAgICAgICBvZmZzZXRNYXRyaXgudG9B
cnJheSggYm9uZU1hdHJpY2VzLCBpICogMTYgKTsKKyAgICAgICAgICAgICAgICAgICAgdXZTY2Fs
ZU1hcCA9IHV2U2NhbGVNYXAudGV4dHVyZTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGlmICggYm9uZVRleHR1cmUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIHV2U2NhbGVNYXAubWF0cml4QXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIHsKIAotICAg
ICAgICAgICAgICAgICAgICBib25lVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIHV2U2NhbGVNYXAudXBkYXRlTWF0cml4KCk7CiAKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdW5pZm9ybXMudXZUcmFuc2Zv
cm0udmFsdWUuY29weSggdXZTY2FsZU1hcC5tYXRyaXggKTsKIAotICAgICAgICB9ICkoKSwKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJldHVybiBuZXcgU2tlbGV0b24oIHRoaXMuYm9uZXMsIHRoaXMuYm9uZUlu
dmVyc2VzICk7CisgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0xpbmUoIHVuaWZvcm1z
LCBtYXRlcmlhbCApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNl
LnZhbHVlID0gbWF0ZXJpYWwuY29sb3I7CisgICAgICAgICAgICB1bmlmb3Jtcy5vcGFjaXR5LnZh
bHVlID0gbWF0ZXJpYWwub3BhY2l0eTsKIAotICAgIH0gKTsKKyAgICAgICAgfQogCi0gICAgLyoq
Ci0gICAgICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KLSAgICAg
KiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqIEBh
dXRob3IgaWtlcnIgLyBodHRwOi8vdmVyb2xkLmNvbQotICAgICAqLworICAgICAgICBmdW5jdGlv
biByZWZyZXNoVW5pZm9ybXNEYXNoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAKLSAgICBmdW5j
dGlvbiBCb25lKCkgeworICAgICAgICAgICAgdW5pZm9ybXMuZGFzaFNpemUudmFsdWUgPSBtYXRl
cmlhbC5kYXNoU2l6ZTsKKyAgICAgICAgICAgIHVuaWZvcm1zLnRvdGFsU2l6ZS52YWx1ZSA9IG1h
dGVyaWFsLmRhc2hTaXplICsgbWF0ZXJpYWwuZ2FwU2l6ZTsKKyAgICAgICAgICAgIHVuaWZvcm1z
LnNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuc2NhbGU7CiAKLSAgICAgICAgT2JqZWN0M0QuY2FsbCgg
dGhpcyApOworICAgICAgICB9CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0JvbmUnOworICAgICAg
ICBmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNQb2ludHMoIHVuaWZvcm1zLCBtYXRlcmlhbCApIHsK
IAotICAgIH0KKyAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1c2UudmFsdWUgPSBtYXRlcmlhbC5j
b2xvcjsKKyAgICAgICAgICAgIHVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBtYXRlcmlhbC5vcGFj
aXR5OworICAgICAgICAgICAgdW5pZm9ybXMuc2l6ZS52YWx1ZSA9IG1hdGVyaWFsLnNpemUgKiBf
cGl4ZWxSYXRpbzsKKyAgICAgICAgICAgIHVuaWZvcm1zLnNjYWxlLnZhbHVlID0gX2hlaWdodCAq
IDAuNTsKIAotICAgIEJvbmUucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0
ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKKyAgICAgICAgICAgIHVuaWZvcm1zLm1hcC52YWx1
ZSA9IG1hdGVyaWFsLm1hcDsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogQm9uZSwKKyAgICAgICAg
ICAgIGlmICggbWF0ZXJpYWwubWFwICE9PSBudWxsICkgewogCi0gICAgICAgIGlzQm9uZTogdHJ1
ZQorICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubWFwLm1hdHJpeEF1dG9VcGRhdGUgPT09
IHRydWUgKSB7CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm1hcC51
cGRhdGVNYXRyaXgoKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2Vy
IC8gaHR0cDovL2dvbW8uc2UvCi0gICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRl
cmVkcXVhbGlhLmNvbS8KLSAgICAgKiBAYXV0aG9yIGlrZXJyIC8gaHR0cDovL3Zlcm9sZC5jb20K
LSAgICAgKi8KKyAgICAgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBTa2lubmVkTWVzaCgg
Z2VvbWV0cnksIG1hdGVyaWFsICkgeworICAgICAgICAgICAgICAgIHVuaWZvcm1zLnV2VHJhbnNm
b3JtLnZhbHVlLmNvcHkoIG1hdGVyaWFsLm1hcC5tYXRyaXggKTsKIAotICAgICAgICBNZXNoLmNh
bGwoIHRoaXMsIGdlb21ldHJ5LCBtYXRlcmlhbCApOworICAgICAgICAgICAgfQogCi0gICAgICAg
IHRoaXMudHlwZSA9ICdTa2lubmVkTWVzaCc7CisgICAgICAgIH0KIAotICAgICAgICB0aGlzLmJp
bmRNb2RlID0gJ2F0dGFjaGVkJzsKLSAgICAgICAgdGhpcy5iaW5kTWF0cml4ID0gbmV3IE1hdHJp
eDQoKTsKLSAgICAgICAgdGhpcy5iaW5kTWF0cml4SW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7Cisg
ICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc0ZvZyggdW5pZm9ybXMsIGZvZyApIHsKIAot
ICAgICAgICB2YXIgYm9uZXMgPSB0aGlzLmluaXRCb25lcygpOwotICAgICAgICB2YXIgc2tlbGV0
b24gPSBuZXcgU2tlbGV0b24oIGJvbmVzICk7CisgICAgICAgICAgICB1bmlmb3Jtcy5mb2dDb2xv
ci52YWx1ZSA9IGZvZy5jb2xvcjsKIAotICAgICAgICB0aGlzLmJpbmQoIHNrZWxldG9uLCB0aGlz
Lm1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICBpZiAoIGZvZy5pc0ZvZyApIHsKIAotICAgICAg
ICB0aGlzLm5vcm1hbGl6ZVNraW5XZWlnaHRzKCk7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMu
Zm9nTmVhci52YWx1ZSA9IGZvZy5uZWFyOworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmZvZ0Zh
ci52YWx1ZSA9IGZvZy5mYXI7CiAKLSAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBmb2cu
aXNGb2dFeHAyICkgewogCi0gICAgU2tpbm5lZE1lc2gucHJvdG90eXBlID0gT2JqZWN0LmFzc2ln
biggT2JqZWN0LmNyZWF0ZSggTWVzaC5wcm90b3R5cGUgKSwgeworICAgICAgICAgICAgICAgIHVu
aWZvcm1zLmZvZ0RlbnNpdHkudmFsdWUgPSBmb2cuZGVuc2l0eTsKIAotICAgICAgICBjb25zdHJ1
Y3RvcjogU2tpbm5lZE1lc2gsCisgICAgICAgICAgICB9CiAKLSAgICAgICAgaXNTa2lubmVkTWVz
aDogdHJ1ZSwKKyAgICAgICAgfQogCi0gICAgICAgIGluaXRCb25lczogZnVuY3Rpb24gKCkgewor
ICAgICAgICBmdW5jdGlvbiByZWZyZXNoVW5pZm9ybXNMYW1iZXJ0KCB1bmlmb3JtcywgbWF0ZXJp
YWwgKSB7CiAKLSAgICAgICAgICAgIHZhciBib25lcyA9IFtdLCBib25lLCBnYm9uZTsKLSAgICAg
ICAgICAgIHZhciBpLCBpbDsKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuZW1pc3NpdmVNYXAg
KSB7CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmJv
bmVzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3NpdmVN
YXAudmFsdWUgPSBtYXRlcmlhbC5lbWlzc2l2ZU1hcDsKIAotICAgICAgICAgICAgICAgIC8vIGZp
cnN0LCBjcmVhdGUgYXJyYXkgb2YgJ0JvbmUnIG9iamVjdHMgZnJvbSBnZW9tZXRyeSBkYXRhCisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSB0aGlzLmdl
b21ldHJ5LmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICAgICAgZ2JvbmUgPSB0aGlzLmdlb21ldHJ5LmJvbmVzWyBpIF07CisgICAgICAg
IGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Bob25nKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyAnQm9uZScgb2JqZWN0CisgICAgICAg
ICAgICB1bmlmb3Jtcy5zcGVjdWxhci52YWx1ZSA9IG1hdGVyaWFsLnNwZWN1bGFyOworICAgICAg
ICAgICAgdW5pZm9ybXMuc2hpbmluZXNzLnZhbHVlID0gTWF0aC5tYXgoIG1hdGVyaWFsLnNoaW5p
bmVzcywgMWUtNCApOyAvLyB0byBwcmV2ZW50IHBvdyggMC4wLCAwLjAgKQogCi0gICAgICAgICAg
ICAgICAgICAgIGJvbmUgPSBuZXcgQm9uZSgpOwotICAgICAgICAgICAgICAgICAgICBib25lcy5w
dXNoKCBib25lICk7CisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmVtaXNzaXZlTWFwICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFwcGx5IHZhbHVlcworICAgICAgICAgICAgICAgIHVu
aWZvcm1zLmVtaXNzaXZlTWFwLnZhbHVlID0gbWF0ZXJpYWwuZW1pc3NpdmVNYXA7CiAKLSAgICAg
ICAgICAgICAgICAgICAgYm9uZS5uYW1lID0gZ2JvbmUubmFtZTsKLSAgICAgICAgICAgICAgICAg
ICAgYm9uZS5wb3NpdGlvbi5mcm9tQXJyYXkoIGdib25lLnBvcyApOwotICAgICAgICAgICAgICAg
ICAgICBib25lLnF1YXRlcm5pb24uZnJvbUFycmF5KCBnYm9uZS5yb3RxICk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICggZ2JvbmUuc2NsICE9PSB1bmRlZmluZWQgKSBib25lLnNjYWxlLmZyb21B
cnJheSggZ2JvbmUuc2NsICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7CiAKLSAgICAgICAgICAgICAgICAv
LyBzZWNvbmQsIGNyZWF0ZSBib25lIGhpZXJhcmNoeQorICAgICAgICAgICAgICAgIHVuaWZvcm1z
LmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwOworICAgICAgICAgICAgICAgIHVuaWZv
cm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBTY2FsZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkgdW5pZm9ybXMuYnVtcFNjYWxlLnZh
bHVlICo9IC0gMTsKIAotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHRoaXMuZ2Vv
bWV0cnkuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgZ2JvbmUgPSB0aGlzLmdlb21ldHJ5LmJvbmVzWyBpIF07CisgICAg
ICAgICAgICBpZiAoIG1hdGVyaWFsLm5vcm1hbE1hcCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoICggZ2JvbmUucGFyZW50ICE9PSAtIDEgKSAmJiAoIGdib25lLnBhcmVudCAhPT0gbnVs
bCApICYmICggYm9uZXNbIGdib25lLnBhcmVudCBdICE9PSB1bmRlZmluZWQgKSApIHsKKyAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7
CisgICAgICAgICAgICAgICAgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJp
YWwubm9ybWFsU2NhbGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLnNpZGUgPT09
IEJhY2tTaWRlICkgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHN1YnNlcXVlbnQgYm9uZXMgaW4gdGhlIGhpZXJhcmNoeQor
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBib25lc1sgZ2JvbmUucGFy
ZW50IF0uYWRkKCBib25lc1sgaSBdICk7CisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmRpc3Bs
YWNlbWVudE1hcCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNl
bWVudE1hcDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1
ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlOworICAgICAgICAgICAgICAgIHVuaWZvcm1z
LmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0b3Btb3N0IGJvbmUsIGltbWVkaWF0ZSBjaGlsZCBv
ZiB0aGUgc2tpbm5lZCBtZXNoCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuYWRkKCBib25lc1sgaSBdICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1Rvb24oIHVuaWZvcm1zLCBt
YXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlZnJlc2hVbmlm
b3Jtc1Bob25nKCB1bmlmb3JtcywgbWF0ZXJpYWwgKTsKIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCBtYXRlcmlhbC5ncmFkaWVudE1hcCApIHsKIAotICAgICAgICAgICAgLy8gbm93
IHRoZSBib25lcyBhcmUgcGFydCBvZiB0aGUgc2NlbmUgZ3JhcGggYW5kIGNoaWxkcmVuIG9mIHRo
ZSBza2lubmVkIG1lc2guCi0gICAgICAgICAgICAvLyBsZXQncyB1cGRhdGUgdGhlIGNvcnJlc3Bv
bmRpbmcgbWF0cmljZXMKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5ncmFkaWVudE1hcC52YWx1
ZSA9IG1hdGVyaWFsLmdyYWRpZW50TWFwOwogCi0gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJp
eFdvcmxkKCB0cnVlICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBib25l
czsKKyAgICAgICAgfQogCi0gICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlm
b3Jtc1N0YW5kYXJkKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgYmluZDogZnVu
Y3Rpb24gKCBza2VsZXRvbiwgYmluZE1hdHJpeCApIHsKKyAgICAgICAgICAgIHVuaWZvcm1zLnJv
dWdobmVzcy52YWx1ZSA9IG1hdGVyaWFsLnJvdWdobmVzczsKKyAgICAgICAgICAgIHVuaWZvcm1z
Lm1ldGFsbmVzcy52YWx1ZSA9IG1hdGVyaWFsLm1ldGFsbmVzczsKIAotICAgICAgICAgICAgdGhp
cy5za2VsZXRvbiA9IHNrZWxldG9uOworICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5yb3VnaG5l
c3NNYXAgKSB7CiAKLSAgICAgICAgICAgIGlmICggYmluZE1hdHJpeCA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgIHVuaWZvcm1zLnJvdWdobmVzc01hcC52YWx1ZSA9IG1hdGVyaWFs
LnJvdWdobmVzc01hcDsKIAotICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cml4V29ybGQo
IHRydWUgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRoaXMuc2tlbGV0b24u
Y2FsY3VsYXRlSW52ZXJzZXMoKTsKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubWV0YWxuZXNz
TWFwICkgewogCi0gICAgICAgICAgICAgICAgYmluZE1hdHJpeCA9IHRoaXMubWF0cml4V29ybGQ7
CisgICAgICAgICAgICAgICAgdW5pZm9ybXMubWV0YWxuZXNzTWFwLnZhbHVlID0gbWF0ZXJpYWwu
bWV0YWxuZXNzTWFwOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMuYmluZE1h
dHJpeC5jb3B5KCBiaW5kTWF0cml4ICk7Ci0gICAgICAgICAgICB0aGlzLmJpbmRNYXRyaXhJbnZl
cnNlLmdldEludmVyc2UoIGJpbmRNYXRyaXggKTsKLQotICAgICAgICB9LAorICAgICAgICAgICAg
aWYgKCBtYXRlcmlhbC5lbWlzc2l2ZU1hcCApIHsKIAotICAgICAgICBwb3NlOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3NpdmVNYXAudmFsdWUgPSBtYXRlcmlh
bC5lbWlzc2l2ZU1hcDsKIAotICAgICAgICAgICAgdGhpcy5za2VsZXRvbi5wb3NlKCk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuYnVtcE1h
cCApIHsKIAotICAgICAgICBub3JtYWxpemVTa2luV2VpZ2h0czogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIHVuaWZvcm1zLmJ1bXBNYXAudmFsdWUgPSBtYXRlcmlhbC5idW1wTWFwOwor
ICAgICAgICAgICAgICAgIHVuaWZvcm1zLmJ1bXBTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBT
Y2FsZTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkg
dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlICo9IC0gMTsKIAotICAgICAgICAgICAgdmFyIHNjYWxl
LCBpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZ2VvbWV0cnkgJiYg
dGhpcy5nZW9tZXRyeS5pc0dlb21ldHJ5ICkgeworICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5u
b3JtYWxNYXAgKSB7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHRoaXMuZ2Vv
bWV0cnkuc2tpbldlaWdodHMubGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAgICAgIHVuaWZv
cm1zLm5vcm1hbE1hcC52YWx1ZSA9IG1hdGVyaWFsLm5vcm1hbE1hcDsKKyAgICAgICAgICAgICAg
ICB1bmlmb3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KCBtYXRlcmlhbC5ub3JtYWxTY2FsZSAp
OworICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlm
b3Jtcy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKTsKIAotICAgICAgICAgICAgICAgICAgICB2
YXIgc3cgPSB0aGlzLmdlb21ldHJ5LnNraW5XZWlnaHRzWyBpIF07CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAxLjAgLyBzdy5sZW5ndGhNYW5oYXR0YW4oKTsK
KyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwICkgewogCi0gICAgICAg
ICAgICAgICAgICAgIGlmICggc2NhbGUgIT09IEluZmluaXR5ICkgeworICAgICAgICAgICAgICAg
IHVuaWZvcm1zLmRpc3BsYWNlbWVudE1hcC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1h
cDsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1h
dGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlOworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3Bs
YWNlbWVudEJpYXMudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdy5tdWx0aXBseVNjYWxhciggc2NhbGUgKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBtYXRl
cmlhbC5lbnZNYXAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3LnNldCggMSwgMCwg
MCwgMCApOyAvLyBkbyBzb21ldGhpbmcgcmVhc29uYWJsZQorICAgICAgICAgICAgICAgIC8vdW5p
Zm9ybXMuZW52TWFwLnZhbHVlID0gbWF0ZXJpYWwuZW52TWFwOyAvLyBwYXJ0IG9mIHVuaWZvcm1z
IGNvbW1vbgorICAgICAgICAgICAgICAgIHVuaWZvcm1zLmVudk1hcEludGVuc2l0eS52YWx1ZSA9
IG1hdGVyaWFsLmVudk1hcEludGVuc2l0eTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAg
fSBlbHNlIGlmICggdGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0
cnkgKSB7CisgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlmb3Jtc1BoeXNpY2FsKCB1bmlmb3Jt
cywgbWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgdmVjID0gbmV3IFZlY3RvcjQo
KTsKKyAgICAgICAgICAgIHJlZnJlc2hVbmlmb3Jtc1N0YW5kYXJkKCB1bmlmb3JtcywgbWF0ZXJp
YWwgKTsKIAotICAgICAgICAgICAgICAgIHZhciBza2luV2VpZ2h0ID0gdGhpcy5nZW9tZXRyeS5h
dHRyaWJ1dGVzLnNraW5XZWlnaHQ7CisgICAgICAgICAgICB1bmlmb3Jtcy5yZWZsZWN0aXZpdHku
dmFsdWUgPSBtYXRlcmlhbC5yZWZsZWN0aXZpdHk7IC8vIGFsc28gcGFydCBvZiB1bmlmb3JtcyBj
b21tb24KIAotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2tpbldlaWdodC5jb3Vu
dDsgaSArKyApIHsKKyAgICAgICAgICAgIHVuaWZvcm1zLmNsZWFyQ29hdC52YWx1ZSA9IG1hdGVy
aWFsLmNsZWFyQ29hdDsKKyAgICAgICAgICAgIHVuaWZvcm1zLmNsZWFyQ29hdFJvdWdobmVzcy52
YWx1ZSA9IG1hdGVyaWFsLmNsZWFyQ29hdFJvdWdobmVzczsKIAotICAgICAgICAgICAgICAgICAg
ICB2ZWMueCA9IHNraW5XZWlnaHQuZ2V0WCggaSApOwotICAgICAgICAgICAgICAgICAgICB2ZWMu
eSA9IHNraW5XZWlnaHQuZ2V0WSggaSApOwotICAgICAgICAgICAgICAgICAgICB2ZWMueiA9IHNr
aW5XZWlnaHQuZ2V0WiggaSApOwotICAgICAgICAgICAgICAgICAgICB2ZWMudyA9IHNraW5XZWln
aHQuZ2V0VyggaSApOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAx
LjAgLyB2ZWMubGVuZ3RoTWFuaGF0dGFuKCk7CisgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlm
b3Jtc0RlcHRoKCB1bmlmb3JtcywgbWF0ZXJpYWwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBzY2FsZSAhPT0gSW5maW5pdHkgKSB7CisgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmRp
c3BsYWNlbWVudE1hcCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmVjLm11bHRpcGx5
U2NhbGFyKCBzY2FsZSApOworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3BsYWNlbWVudE1h
cC52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcDsKKyAgICAgICAgICAgICAgICB1bmlm
b3Jtcy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZSA9IG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxl
OworICAgICAgICAgICAgICAgIHVuaWZvcm1zLmRpc3BsYWNlbWVudEJpYXMudmFsdWUgPSBtYXRl
cmlhbC5kaXNwbGFjZW1lbnRCaWFzOwogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlYy5zZXQoIDEsIDAsIDAs
IDAgKTsgLy8gZG8gc29tZXRoaW5nIHJlYXNvbmFibGUKKyAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gcmVmcmVzaFVuaWZvcm1zRGlzdGFuY2UoIHVu
aWZvcm1zLCBtYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgICAgICBza2luV2VpZ2h0LnNl
dFhZWlcoIGksIHZlYy54LCB2ZWMueSwgdmVjLnosIHZlYy53ICk7CisgICAgICAgICAgICBpZiAo
IG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNw
bGFjZW1lbnRNYXA7CisgICAgICAgICAgICAgICAgdW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUu
dmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRTY2FsZTsKKyAgICAgICAgICAgICAgICB1bmlm
b3Jtcy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50QmlhczsK
IAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCi0KLSAgICAgICAgdXBkYXRlTWF0cml4V29y
bGQ6IGZ1bmN0aW9uICggZm9yY2UgKSB7CisgICAgICAgICAgICB1bmlmb3Jtcy5yZWZlcmVuY2VQ
b3NpdGlvbi52YWx1ZS5jb3B5KCBtYXRlcmlhbC5yZWZlcmVuY2VQb3NpdGlvbiApOworICAgICAg
ICAgICAgdW5pZm9ybXMubmVhckRpc3RhbmNlLnZhbHVlID0gbWF0ZXJpYWwubmVhckRpc3RhbmNl
OworICAgICAgICAgICAgdW5pZm9ybXMuZmFyRGlzdGFuY2UudmFsdWUgPSBtYXRlcmlhbC5mYXJE
aXN0YW5jZTsKIAotICAgICAgICAgICAgTWVzaC5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQu
Y2FsbCggdGhpcywgZm9yY2UgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHRoaXMu
YmluZE1vZGUgPT09ICdhdHRhY2hlZCcgKSB7CisgICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hVbmlm
b3Jtc05vcm1hbCggdW5pZm9ybXMsIG1hdGVyaWFsICkgewogCi0gICAgICAgICAgICAgICAgdGhp
cy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKCB0aGlzLm1hdHJpeFdvcmxkICk7CisgICAg
ICAgICAgICBpZiAoIG1hdGVyaWFsLmJ1bXBNYXAgKSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIHRoaXMuYmluZE1vZGUgPT09ICdkZXRhY2hlZCcgKSB7CisgICAgICAgICAgICAgICAgdW5p
Zm9ybXMuYnVtcE1hcC52YWx1ZSA9IG1hdGVyaWFsLmJ1bXBNYXA7CisgICAgICAgICAgICAgICAg
dW5pZm9ybXMuYnVtcFNjYWxlLnZhbHVlID0gbWF0ZXJpYWwuYnVtcFNjYWxlOworICAgICAgICAg
ICAgICAgIGlmICggbWF0ZXJpYWwuc2lkZSA9PT0gQmFja1NpZGUgKSB1bmlmb3Jtcy5idW1wU2Nh
bGUudmFsdWUgKj0gLSAxOwogCi0gICAgICAgICAgICAgICAgdGhpcy5iaW5kTWF0cml4SW52ZXJz
ZS5nZXRJbnZlcnNlKCB0aGlzLmJpbmRNYXRyaXggKTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggbWF0ZXJpYWwubm9ybWFsTWFwICkgewog
Ci0gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVj
b2duaXplZCBiaW5kTW9kZTogJyArIHRoaXMuYmluZE1vZGUgKTsKKyAgICAgICAgICAgICAgICB1
bmlmb3Jtcy5ub3JtYWxNYXAudmFsdWUgPSBtYXRlcmlhbC5ub3JtYWxNYXA7CisgICAgICAgICAg
ICAgICAgdW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUuY29weSggbWF0ZXJpYWwubm9ybWFsU2Nh
bGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsLnNpZGUgPT09IEJhY2tTaWRlICkg
dW5pZm9ybXMubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCk7CiAKICAgICAgICAgICAgIH0KIAot
ICAgICAgICB9LAorICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXAgKSB7
CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB1bmlmb3Jt
cy5kaXNwbGFjZW1lbnRNYXAudmFsdWUgPSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRNYXA7CisgICAg
ICAgICAgICAgICAgdW5pZm9ybXMuZGlzcGxhY2VtZW50U2NhbGUudmFsdWUgPSBtYXRlcmlhbC5k
aXNwbGFjZW1lbnRTY2FsZTsKKyAgICAgICAgICAgICAgICB1bmlmb3Jtcy5kaXNwbGFjZW1lbnRC
aWFzLnZhbHVlID0gbWF0ZXJpYWwuZGlzcGxhY2VtZW50QmlhczsKIAotICAgICAgICAgICAgcmV0
dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsICku
Y29weSggdGhpcyApOworICAgICAgICAgICAgfQogCiAgICAgICAgIH0KIAotICAgIH0gKTsKKyAg
ICAgICAgLy8gSWYgdW5pZm9ybXMgYXJlIG1hcmtlZCBhcyBjbGVhbiwgdGhleSBkb24ndCBuZWVk
IHRvIGJlIGxvYWRlZCB0byB0aGUgR1BVLgogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRv
b2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDov
L2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqCi0gICAgICogcGFyYW1ldGVycyA9IHsKLSAgICAg
KiAgY29sb3I6IDxoZXg+LAotICAgICAqICBvcGFjaXR5OiA8ZmxvYXQ+LAotICAgICAqCi0gICAg
ICogIGxpbmV3aWR0aDogPGZsb2F0PiwKLSAgICAgKiAgbGluZWNhcDogInJvdW5kIiwKLSAgICAg
KiAgbGluZWpvaW46ICJyb3VuZCIKLSAgICAgKiB9Ci0gICAgICovCisgICAgICAgIGZ1bmN0aW9u
IG1hcmtVbmlmb3Jtc0xpZ2h0c05lZWRzVXBkYXRlKCB1bmlmb3JtcywgdmFsdWUgKSB7CiAKLSAg
ICBmdW5jdGlvbiBMaW5lQmFzaWNNYXRlcmlhbCggcGFyYW1ldGVycyApIHsKKyAgICAgICAgICAg
IHVuaWZvcm1zLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlID0gdmFsdWU7CiAKLSAgICAg
ICAgTWF0ZXJpYWwuY2FsbCggdGhpcyApOworICAgICAgICAgICAgdW5pZm9ybXMuZGlyZWN0aW9u
YWxMaWdodHMubmVlZHNVcGRhdGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHVuaWZvcm1zLnBvaW50
TGlnaHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7CisgICAgICAgICAgICB1bmlmb3Jtcy5zcG90TGln
aHRzLm5lZWRzVXBkYXRlID0gdmFsdWU7CisgICAgICAgICAgICB1bmlmb3Jtcy5yZWN0QXJlYUxp
Z2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlOworICAgICAgICAgICAgdW5pZm9ybXMuaGVtaXNwaGVy
ZUxpZ2h0cy5uZWVkc1VwZGF0ZSA9IHZhbHVlOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaW5l
QmFzaWNNYXRlcmlhbCc7CisgICAgICAgIH0KIAotICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENv
bG9yKCAweGZmZmZmZiApOworICAgICAgICAvLyBUZXh0dXJlcwogCi0gICAgICAgIHRoaXMubGlu
ZXdpZHRoID0gMTsKLSAgICAgICAgdGhpcy5saW5lY2FwID0gJ3JvdW5kJzsKLSAgICAgICAgdGhp
cy5saW5lam9pbiA9ICdyb3VuZCc7CisgICAgICAgIGZ1bmN0aW9uIGFsbG9jVGV4dHVyZVVuaXQo
KSB7CiAKLSAgICAgICAgdGhpcy5saWdodHMgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciB0ZXh0
dXJlVW5pdCA9IF91c2VkVGV4dHVyZVVuaXRzOwogCi0gICAgICAgIHRoaXMuc2V0VmFsdWVzKCBw
YXJhbWV0ZXJzICk7CisgICAgICAgICAgICBpZiAoIHRleHR1cmVVbml0ID49IGNhcGFiaWxpdGll
cy5tYXhUZXh0dXJlcyApIHsKIAotICAgIH0KKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ICdUSFJFRS5XZWJHTFJlbmRlcmVyOiBUcnlpbmcgdG8gdXNlICcgKyB0ZXh0dXJlVW5pdCArICcg
dGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICcgKyBjYXBhYmlsaXRp
ZXMubWF4VGV4dHVyZXMgKTsKIAotICAgIExpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSApOwotICAgIExpbmVCYXNpY01hdGVyaWFs
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExpbmVCYXNpY01hdGVyaWFsOworICAgICAgICAgICAg
fQogCi0gICAgTGluZUJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWwg
PSB0cnVlOworICAgICAgICAgICAgX3VzZWRUZXh0dXJlVW5pdHMgKz0gMTsKIAotICAgIExpbmVC
YXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGV4dHVyZVVuaXQ7CiAKLSAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBl
LmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgIH0KIAotICAgICAgICB0aGlzLmNv
bG9yLmNvcHkoIHNvdXJjZS5jb2xvciApOworICAgICAgICB0aGlzLmFsbG9jVGV4dHVyZVVuaXQg
PSBhbGxvY1RleHR1cmVVbml0OwogCi0gICAgICAgIHRoaXMubGluZXdpZHRoID0gc291cmNlLmxp
bmV3aWR0aDsKLSAgICAgICAgdGhpcy5saW5lY2FwID0gc291cmNlLmxpbmVjYXA7Ci0gICAgICAg
IHRoaXMubGluZWpvaW4gPSBzb3VyY2UubGluZWpvaW47CisgICAgICAgIC8vIHRoaXMuc2V0VGV4
dHVyZTJEID0gc2V0VGV4dHVyZTJEOworICAgICAgICB0aGlzLnNldFRleHR1cmUyRCA9ICggZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgdmFyIHdhcm5l
ZCA9IGZhbHNlOwogCi0gICAgfTsKKyAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmls
aXR5OiBwZWVsIHRleHR1cmUudGV4dHVyZQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNl
dFRleHR1cmUyRCggdGV4dHVyZSwgc2xvdCApIHsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgICAgICAgICAgaWYg
KCB0ZXh0dXJlICYmIHRleHR1cmUuaXNXZWJHTFJlbmRlclRhcmdldCApIHsKIAotICAgIGZ1bmN0
aW9uIExpbmUoIGdlb21ldHJ5LCBtYXRlcmlhbCwgbW9kZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhIHdhcm5lZCApIHsKIAotICAgICAgICBpZiAoIG1vZGUgPT09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5XZWJHTFJlbmRlcmVyLnNl
dFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhl
aXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB3YXJuZWQgPSB0cnVlOwogCi0gICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5MaW5l
OiBwYXJhbWV0ZXIgVEhSRUUuTGluZVBpZWNlcyBubyBsb25nZXIgc3VwcG9ydGVkLiBDcmVhdGVk
IFRIUkVFLkxpbmVTZWdtZW50cyBpbnN0ZWFkLicgKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
TGluZVNlZ21lbnRzKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTsKKyAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmUudGV4
dHVyZTsKIAotICAgICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaW5lJzsKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
cy5zZXRUZXh0dXJlMkQoIHRleHR1cmUsIHNsb3QgKTsKIAotICAgICAgICB0aGlzLmdlb21ldHJ5
ID0gZ2VvbWV0cnkgIT09IHVuZGVmaW5lZCA/IGdlb21ldHJ5IDogbmV3IEJ1ZmZlckdlb21ldHJ5
KCk7Ci0gICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbCAhPT0gdW5kZWZpbmVkID8gbWF0
ZXJpYWwgOiBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IE1hdGgucmFuZG9tKCkgKiAw
eGZmZmZmZiB9ICk7CisgICAgICAgICAgICB9OwogCi0gICAgfQorICAgICAgICB9KCkgKTsKIAot
ICAgIExpbmUucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0
M0QucHJvdG90eXBlICksIHsKKyAgICAgICAgdGhpcy5zZXRUZXh0dXJlID0gKCBmdW5jdGlvbiAo
KSB7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IExpbmUsCisgICAgICAgICAgICB2YXIgd2FybmVk
ID0gZmFsc2U7CiAKLSAgICAgICAgaXNMaW5lOiB0cnVlLAorICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIHNldFRleHR1cmUoIHRleHR1cmUsIHNsb3QgKSB7CiAKLSAgICAgICAgcmF5Y2FzdDog
KCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhIHdhcm5lZCApIHsKIAotICAg
ICAgICAgICAgdmFyIGludmVyc2VNYXRyaXggPSBuZXcgTWF0cml4NCgpOwotICAgICAgICAgICAg
dmFyIHJheSA9IG5ldyBSYXkoKTsKLSAgICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJl
KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggIlRIUkVFLldlYkdMUmVuZGVy
ZXI6IC5zZXRUZXh0dXJlIGlzIGRlcHJlY2F0ZWQsIHVzZSBzZXRUZXh0dXJlMkQgaW5zdGVhZC4i
ICk7CisgICAgICAgICAgICAgICAgICAgIHdhcm5lZCA9IHRydWU7CiAKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiByYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIHByZWNpc2lvbiA9IHJheWNhc3Rlci5s
aW5lUHJlY2lzaW9uOwotICAgICAgICAgICAgICAgIHZhciBwcmVjaXNpb25TcSA9IHByZWNpc2lv
biAqIHByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlcy5zZXRUZXh0dXJlMkQoIHRl
eHR1cmUsIHNsb3QgKTsKIAotICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2Vv
bWV0cnk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdHJpeFdvcmxkID0gdGhpcy5tYXRyaXhXb3Js
ZDsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBib3VuZGlu
Z1NwaGVyZSBkaXN0YW5jZSB0byByYXkKKyAgICAgICAgfSgpICk7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIGdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgZ2VvbWV0cnkuY29tcHV0
ZUJvdW5kaW5nU3BoZXJlKCk7CisgICAgICAgIHRoaXMuc2V0VGV4dHVyZUN1YmUgPSAoIGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5ib3VuZGlu
Z1NwaGVyZSApOwotICAgICAgICAgICAgICAgIHNwaGVyZS5hcHBseU1hdHJpeDQoIG1hdHJpeFdv
cmxkICk7CisgICAgICAgICAgICB2YXIgd2FybmVkID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIHJheWNhc3Rlci5yYXkuaW50ZXJzZWN0c1NwaGVyZSggc3BoZXJlICkgPT09IGZhbHNl
ICkgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFRleHR1cmVDdWJlKCB0
ZXh0dXJlLCBzbG90ICkgewogCi0gICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogcGVlbCB0ZXh0dXJlLnRleHR1cmUKKyAgICAgICAg
ICAgICAgICBpZiAoIHRleHR1cmUgJiYgdGV4dHVyZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSAp
IHsKIAotICAgICAgICAgICAgICAgIGludmVyc2VNYXRyaXguZ2V0SW52ZXJzZSggbWF0cml4V29y
bGQgKTsKLSAgICAgICAgICAgICAgICByYXkuY29weSggcmF5Y2FzdGVyLnJheSApLmFwcGx5TWF0
cml4NCggaW52ZXJzZU1hdHJpeCApOworICAgICAgICAgICAgICAgICAgICBpZiAoICEgd2FybmVk
ICkgewogCi0gICAgICAgICAgICAgICAgdmFyIHZTdGFydCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAg
ICAgICAgICAgICAgdmFyIHZFbmQgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgICAgIHZh
ciBpbnRlclNlZ21lbnQgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgICAgIHZhciBpbnRl
clJheSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSAodGhpcyAm
JiB0aGlzLmlzTGluZVNlZ21lbnRzKSA/IDIgOiAxOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS53YXJuKCAiVEhSRUUuV2ViR0xSZW5kZXJlci5zZXRUZXh0dXJlQ3ViZTogZG9uJ3Qg
dXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBw
cm9wZXJ0eSBpbnN0ZWFkLiIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5lZCA9IHRy
dWU7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXgg
PSBnZW9tZXRyeS5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBn
ZW9tZXRyeS5hdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0g
YXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9
IHRleHR1cmUudGV4dHVyZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4ICE9PSBu
dWxsICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGluZGljZXMgPSBpbmRleC5hcnJheTsKKyAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgcmVs
eWluZyBvbiB0aGUgZmFjdCB0aGF0IFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZS50ZXh0dXJlIGlzIGEg
VGV4dHVyZSBhbmQgTk9UIGEgQ3ViZVRleHR1cmUKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiB1
bmlmeSB0aGVzZSBjb2RlIHBhdGhzCisgICAgICAgICAgICAgICAgaWYgKCAoIHRleHR1cmUgJiYg
dGV4dHVyZS5pc0N1YmVUZXh0dXJlICkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBBcnJheS5p
c0FycmF5KCB0ZXh0dXJlLmltYWdlICkgJiYgdGV4dHVyZS5pbWFnZS5sZW5ndGggPT09IDYgKSAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gaW5kaWNl
cy5sZW5ndGggLSAxOyBpIDwgbDsgaSArPSBzdGVwICkgeworICAgICAgICAgICAgICAgICAgICAv
LyBDb21wcmVzc2VkVGV4dHVyZSBjYW4gaGF2ZSBBcnJheSBpbiBpbWFnZSA6LwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBpbmRpY2VzWyBpIF07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGIgPSBpbmRpY2VzWyBpICsgMSBdOworICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGZ1bmN0aW9uIGFsb25lIHNob3VsZCB0YWtlIGNhcmUgb2YgY3ViZSB0ZXh0
dXJlcworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlcy5zZXRUZXh0dXJlQ3ViZSggdGV4dHVy
ZSwgc2xvdCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdlN0YXJ0LmZyb21BcnJh
eSggcG9zaXRpb25zLCBhICogMyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZFbmQu
ZnJvbUFycmF5KCBwb3NpdGlvbnMsIGIgKiAzICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0U3EgPSByYXkuZGlzdGFuY2VT
cVRvU2VnbWVudCggdlN0YXJ0LCB2RW5kLCBpbnRlclJheSwgaW50ZXJTZWdtZW50ICk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIGFzc3VtZWQ6IHRleHR1cmUgcHJvcGVydHkgb2YgVEhSRUUuV2Vi
R0xSZW5kZXJUYXJnZXRDdWJlCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRp
c3RTcSA+IHByZWNpc2lvblNxICkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVzLnNldFRleHR1cmVDdWJlRHluYW1pYyggdGV4dHVyZSwgc2xvdCApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJSYXkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxk
ICk7IC8vTW92ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxhdGlvbgor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0
YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oIGludGVyUmF5ICk7CisgICAg
ICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXN0YW5jZSA8
IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhciApIGNvbnRpbnVlOwor
ICAgICAgICB9KCkgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMu
cHVzaCggeworICAgICAgICAvLwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3RhbmNlOiBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hh
dCBkbyB3ZSB3YW50PyBpbnRlcnNlY3Rpb24gcG9pbnQgb24gdGhlIHJheSBvciBvbiB0aGUgc2Vn
bWVudD8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50OiByYXljYXN0
ZXIucmF5LmF0KCBkaXN0YW5jZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b2ludDogaW50ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxk
ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBudWxsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWNlSW5kZXg6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdDogdGhpcworICAgICAgICB0aGlzLnNldEZyYW1lYnVmZmVyID0gZnVuY3Rpb24g
KCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAg
ICAgIF9mcmFtZWJ1ZmZlciA9IHZhbHVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5n
ZXRSZW5kZXJUYXJnZXQgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgbCA9IHBvc2l0aW9ucy5sZW5ndGggLyAzIC0gMTsgaSA8IGw7IGkg
Kz0gc3RlcCApIHsKKyAgICAgICAgICAgIHJldHVybiBfY3VycmVudFJlbmRlclRhcmdldDsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZTdGFydC5mcm9tQXJyYXkoIHBvc2l0aW9ucywg
MyAqIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2RW5kLmZyb21BcnJheSggcG9z
aXRpb25zLCAzICogaSArIDMgKTsKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBkaXN0U3EgPSByYXkuZGlzdGFuY2VTcVRvU2VnbWVudCggdlN0YXJ0LCB2RW5k
LCBpbnRlclJheSwgaW50ZXJTZWdtZW50ICk7CisgICAgICAgIHRoaXMuc2V0UmVuZGVyVGFyZ2V0
ID0gZnVuY3Rpb24gKCByZW5kZXJUYXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRpc3RTcSA+IHByZWNpc2lvblNxICkgY29udGludWU7CisgICAgICAgICAgICBf
Y3VycmVudFJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyUmF5LmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOyAvL01v
dmUgYmFjayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb24KKyAgICAgICAg
ICAgIGlmICggcmVuZGVyVGFyZ2V0ICYmIHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQgKS5f
X3dlYmdsRnJhbWVidWZmZXIgPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8o
IGludGVyUmF5ICk7CisgICAgICAgICAgICAgICAgdGV4dHVyZXMuc2V0dXBSZW5kZXJUYXJnZXQo
IHJlbmRlclRhcmdldCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXN0
YW5jZSA8IHJheWNhc3Rlci5uZWFyIHx8IGRpc3RhbmNlID4gcmF5Y2FzdGVyLmZhciApIGNvbnRp
bnVlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJz
ZWN0cy5wdXNoKCB7CisgICAgICAgICAgICB2YXIgZnJhbWVidWZmZXIgPSBfZnJhbWVidWZmZXI7
CisgICAgICAgICAgICB2YXIgaXNDdWJlID0gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXaGF0IGRvIHdlIHdhbnQ/IGludGVyc2VjdGlvbiBwb2ludCBvbiB0aGUgcmF5
IG9yIG9uIHRoZSBzZWdtZW50Pz8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cG9pbnQ6IHJheWNhc3Rlci5yYXkuYXQoIGRpc3RhbmNlICksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvaW50OiBpbnRlclNlZ21lbnQuY2xvbmUoKS5hcHBseU1hdHJpeDQoIHRo
aXMubWF0cml4V29ybGQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6
IGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IG51bGwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VJbmRleDogbnVsbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzCisgICAgICAgICAgICBpZiAoIHJlbmRlclRh
cmdldCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAg
ICAgICB2YXIgX193ZWJnbEZyYW1lYnVmZmVyID0gcHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdl
dCApLl9fd2ViZ2xGcmFtZWJ1ZmZlcjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICggcmVuZGVyVGFyZ2V0LmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlICkg
ewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXIgPSBfX3dlYmdsRnJhbWVidWZmZXJbIHJlbmRlclRhcmdldC5hY3RpdmVDdWJlRmFjZSBdOwor
ICAgICAgICAgICAgICAgICAgICBpc0N1YmUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogCi0gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2Vz
OwotICAgICAgICAgICAgICAgICAgICB2YXIgbmJWZXJ0aWNlcyA9IHZlcnRpY2VzLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBfX3dlYmdsRnJhbWVidWZmZXI7CiAK
LSAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbmJWZXJ0aWNlcyAtIDE7
IGkgKz0gc3RlcCApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkaXN0U3EgPSByYXkuZGlzdGFuY2VTcVRvU2VnbWVudCggdmVydGljZXNbIGkgXSwg
dmVydGljZXNbIGkgKyAxIF0sIGludGVyUmF5LCBpbnRlclNlZ21lbnQgKTsKKyAgICAgICAgICAg
ICAgICBfY3VycmVudFZpZXdwb3J0LmNvcHkoIHJlbmRlclRhcmdldC52aWV3cG9ydCApOworICAg
ICAgICAgICAgICAgIF9jdXJyZW50U2Npc3Nvci5jb3B5KCByZW5kZXJUYXJnZXQuc2Npc3NvciAp
OworICAgICAgICAgICAgICAgIF9jdXJyZW50U2Npc3NvclRlc3QgPSByZW5kZXJUYXJnZXQuc2Np
c3NvclRlc3Q7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzdFNxID4gcHJlY2lz
aW9uU3EgKSBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyUmF5LmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOyAvL01v
dmUgYmFjayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb24KKyAgICAgICAg
ICAgICAgICBfY3VycmVudFZpZXdwb3J0LmNvcHkoIF92aWV3cG9ydCApLm11bHRpcGx5U2NhbGFy
KCBfcGl4ZWxSYXRpbyApOworICAgICAgICAgICAgICAgIF9jdXJyZW50U2Npc3Nvci5jb3B5KCBf
c2Npc3NvciApLm11bHRpcGx5U2NhbGFyKCBfcGl4ZWxSYXRpbyApOworICAgICAgICAgICAgICAg
IF9jdXJyZW50U2Npc3NvclRlc3QgPSBfc2Npc3NvclRlc3Q7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBkaXN0YW5jZSA9IHJheWNhc3Rlci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oIGlu
dGVyUmF5ICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICggX2N1cnJlbnRGcmFtZWJ1ZmZlciAhPT0gZnJhbWVi
dWZmZXIgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaCggewor
ICAgICAgICAgICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoIF9nbC5GUkFNRUJVRkZFUiwgZnJh
bWVidWZmZXIgKTsKKyAgICAgICAgICAgICAgICBfY3VycmVudEZyYW1lYnVmZmVyID0gZnJhbWVi
dWZmZXI7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCBkbyB3ZSB3YW50PyBpbnRlcnNl
Y3Rpb24gcG9pbnQgb24gdGhlIHJheSBvciBvbiB0aGUgc2VnbWVudD8/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcG9pbnQ6IHJheWNhc3Rlci5yYXkuYXQoIGRpc3RhbmNlICksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQ6IGludGVyU2VnbWVudC5jbG9uZSgpLmFw
cGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4OiBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IG51bGwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUluZGV4OiBudWxsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICBzdGF0ZS52aWV3cG9ydCggX2N1cnJlbnRW
aWV3cG9ydCApOworICAgICAgICAgICAgc3RhdGUuc2Npc3NvciggX2N1cnJlbnRTY2lzc29yICk7
CisgICAgICAgICAgICBzdGF0ZS5zZXRTY2lzc29yVGVzdCggX2N1cnJlbnRTY2lzc29yVGVzdCAp
OworCisgICAgICAgICAgICBpZiAoIGlzQ3ViZSApIHsKKworICAgICAgICAgICAgICAgIHZhciB0
ZXh0dXJlUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCByZW5kZXJUYXJnZXQudGV4dHVyZSAp
OworICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRCggX2dsLkZSQU1FQlVG
RkVSLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyByZW5kZXJUYXJnZXQuYWN0aXZlQ3ViZUZhY2UsIHRleHR1cmVQcm9wZXJ0aWVzLl9fd2Vi
Z2xUZXh0dXJlLCByZW5kZXJUYXJnZXQuYWN0aXZlTWlwTWFwTGV2ZWwgKTsKKworICAgICAgICAg
ICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxz
ID0gZnVuY3Rpb24gKCByZW5kZXJUYXJnZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlciAp
IHsKKworICAgICAgICAgICAgaWYgKCAhICggcmVuZGVyVGFyZ2V0ICYmIHJlbmRlclRhcmdldC5p
c1dlYkdMUmVuZGVyVGFyZ2V0ICkgKSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCAnVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJn
ZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LicgKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZyYW1lYnVmZmVyID0g
cHJvcGVydGllcy5nZXQoIHJlbmRlclRhcmdldCApLl9fd2ViZ2xGcmFtZWJ1ZmZlcjsKKworICAg
ICAgICAgICAgaWYgKCBmcmFtZWJ1ZmZlciApIHsKKworICAgICAgICAgICAgICAgIHZhciByZXN0
b3JlID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAoIGZyYW1lYnVmZmVyICE9PSBfY3Vy
cmVudEZyYW1lYnVmZmVyICkgeworCisgICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kRnJhbWVi
dWZmZXIoIF9nbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIgKTsKKworICAgICAgICAgICAgICAg
ICAgICByZXN0b3JlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHRyeSB7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSByZW5kZXJUYXJn
ZXQudGV4dHVyZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVGb3JtYXQgPSB0ZXh0
dXJlLmZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmVUeXBlID0gdGV4dHVy
ZS50eXBlOworCisgICAgICAgICAgICAgICAgICAgIGlmICggdGV4dHVyZUZvcm1hdCAhPT0gUkdC
QUZvcm1hdCAmJiB1dGlscy5jb252ZXJ0KCB0ZXh0dXJlRm9ybWF0ICkgIT09IF9nbC5nZXRQYXJh
bWV0ZXIoIF9nbC5JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCApICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuV2ViR0xSZW5kZXJlci5y
ZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1w
bGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuJyApOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRleHR1cmVUeXBlICE9PSBVbnNpZ25lZEJ5dGVUeXBlICYmIHV0aWxzLmNvbnZlcnQoIHRl
eHR1cmVUeXBlICkgIT09IF9nbC5nZXRQYXJhbWV0ZXIoIF9nbC5JTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEUgKSAmJiAvLyBJRTExLCBFZGdlIGFuZCBDaHJvbWUgTWFjIDwgNTIgKCM5NTEz
KQorICAgICAgICAgICAgICAgICAgICAgICAgISAoIHRleHR1cmVUeXBlID09PSBGbG9hdFR5cGUg
JiYgKCBleHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApIHx8IGV4dGVuc2lvbnMu
Z2V0KCAnV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0JyApICkgKSAmJiAvLyBDaHJvbWUgTWFjID49
IDUyIGFuZCBGaXJlZm94CisgICAgICAgICAgICAgICAgICAgICAgICAhICggdGV4dHVyZVR5cGUg
PT09IEhhbGZGbG9hdFR5cGUgJiYgZXh0ZW5zaW9ucy5nZXQoICdFWFRfY29sb3JfYnVmZmVyX2hh
bGZfZmxvYXQnICkgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
ciggJ1RIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFy
Z2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQg
dHlwZS4nICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICggX2dsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoIF9nbC5GUkFNRUJVRkZFUiApID09PSBfZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaWYgc3RhdGVt
ZW50IGVuc3VyZXMgdmFsaWQgcmVhZCByZXF1ZXN0cyAobm8gb3V0LW9mLWJvdW5kcyBwaXhlbHMs
IHNlZSAjODYwNCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIHggPj0gMCAmJiB4
IDw9ICggcmVuZGVyVGFyZ2V0LndpZHRoIC0gd2lkdGggKSApICYmICggeSA+PSAwICYmIHkgPD0g
KCByZW5kZXJUYXJnZXQuaGVpZ2h0IC0gaGVpZ2h0ICkgKSApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9nbC5yZWFkUGl4ZWxzKCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB1dGlscy5j
b252ZXJ0KCB0ZXh0dXJlRm9ybWF0ICksIHV0aWxzLmNvbnZlcnQoIHRleHR1cmVUeXBlICksIGJ1
ZmZlciApOworCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RI
UkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9t
IHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4nICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJlc3RvcmUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoIF9nbC5GUkFNRUJVRkZFUiwgX2N1cnJlbnRGcmFtZWJ1
ZmZlciApOwogCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB9KCkgKSwKKyAgICAgICAg
fTsKIAotICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLmNvcHlGcmFt
ZWJ1ZmZlclRvVGV4dHVyZSA9IGZ1bmN0aW9uICggcG9zaXRpb24sIHRleHR1cmUsIGxldmVsICkg
ewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMuZ2VvbWV0
cnksIHRoaXMubWF0ZXJpYWwgKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICB2YXIgd2lkdGgg
PSB0ZXh0dXJlLmltYWdlLndpZHRoOworICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRleHR1cmUu
aW1hZ2UuaGVpZ2h0OworICAgICAgICAgICAgdmFyIGdsRm9ybWF0ID0gdXRpbHMuY29udmVydCgg
dGV4dHVyZS5mb3JtYXQgKTsKIAotICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnNldFRleHR1
cmUyRCggdGV4dHVyZSwgMCApOwogCi0gICAgfSApOworICAgICAgICAgICAgX2dsLmNvcHlUZXhJ
bWFnZTJEKCBfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwgfHwgMCwgZ2xGb3JtYXQsIHBvc2l0aW9uLngs
IHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQsIDAgKTsKKworICAgICAgICB9OworCisgICAgICAg
IHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUgPSBmdW5jdGlvbiAoIHBvc2l0aW9uLCBzcmNUZXh0
dXJlLCBkc3RUZXh0dXJlLCBsZXZlbCApIHsKKworICAgICAgICAgICAgdmFyIHdpZHRoID0gc3Jj
VGV4dHVyZS5pbWFnZS53aWR0aDsKKyAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzcmNUZXh0dXJl
LmltYWdlLmhlaWdodDsKKyAgICAgICAgICAgIHZhciBnbEZvcm1hdCA9IHV0aWxzLmNvbnZlcnQo
IGRzdFRleHR1cmUuZm9ybWF0ICk7CisgICAgICAgICAgICB2YXIgZ2xUeXBlID0gdXRpbHMuY29u
dmVydCggZHN0VGV4dHVyZS50eXBlICk7CisKKyAgICAgICAgICAgIHRoaXMuc2V0VGV4dHVyZTJE
KCBkc3RUZXh0dXJlLCAwICk7CisKKyAgICAgICAgICAgIGlmICggc3JjVGV4dHVyZS5pc0RhdGFU
ZXh0dXJlICkgeworCisgICAgICAgICAgICAgICAgX2dsLnRleFN1YkltYWdlMkQoIF9nbC5URVhU
VVJFXzJELCBsZXZlbCB8fCAwLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB3aWR0aCwgaGVpZ2h0
LCBnbEZvcm1hdCwgZ2xUeXBlLCBzcmNUZXh0dXJlLmltYWdlLmRhdGEgKTsKKworICAgICAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIF9nbC50ZXhTdWJJbWFnZTJEKCBfZ2wuVEVY
VFVSRV8yRCwgbGV2ZWwgfHwgMCwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgZ2xGb3JtYXQsIGds
VHlwZSwgc3JjVGV4dHVyZS5pbWFnZSApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfTsK
KworICAgIH0KIAogICAgIC8qKgogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNv
bS8KICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIExpbmVTZWdtZW50cyggZ2VvbWV0cnksIG1hdGVy
aWFsICkgeworICAgIGZ1bmN0aW9uIEZvZ0V4cDIoIGNvbG9yLCBkZW5zaXR5ICkgewogCi0gICAg
ICAgIExpbmUuY2FsbCggdGhpcywgZ2VvbWV0cnksIG1hdGVyaWFsICk7CisgICAgICAgIHRoaXMu
bmFtZSA9ICcnOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaW5lU2VnbWVudHMnOworICAgICAg
ICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCBjb2xvciApOworICAgICAgICB0aGlzLmRlbnNpdHkg
PSAoIGRlbnNpdHkgIT09IHVuZGVmaW5lZCApID8gZGVuc2l0eSA6IDAuMDAwMjU7CiAKICAgICB9
CiAKLSAgICBMaW5lU2VnbWVudHMucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNy
ZWF0ZSggTGluZS5wcm90b3R5cGUgKSwgeworICAgIEZvZ0V4cDIucHJvdG90eXBlLmlzRm9nRXhw
MiA9IHRydWU7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IExpbmVTZWdtZW50cywKKyAgICBGb2dF
eHAyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBpc0xpbmVTZWdt
ZW50czogdHJ1ZQorICAgICAgICByZXR1cm4gbmV3IEZvZ0V4cDIoIHRoaXMuY29sb3IsIHRoaXMu
ZGVuc2l0eSApOwogCi0gICAgfSApOworICAgIH07CisKKyAgICBGb2dFeHAyLnByb3RvdHlwZS50
b0pTT04gPSBmdW5jdGlvbiAoIC8qIG1ldGEgKi8gKSB7CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIHR5cGU6ICdGb2dFeHAyJywKKyAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbG9y
LmdldEhleCgpLAorICAgICAgICAgICAgZGVuc2l0eTogdGhpcy5kZW5zaXR5CisgICAgICAgIH07
CisKKyAgICB9OwogCiAgICAgLyoqCi0gICAgICogQGF1dGhvciBtZ3JldGVyIC8gaHR0cDovL2dp
dGh1Yi5jb20vbWdyZXRlcgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5j
b20vCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8K
ICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIExpbmVMb29wKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSB7
CisgICAgZnVuY3Rpb24gRm9nKCBjb2xvciwgbmVhciwgZmFyICkgewogCi0gICAgICAgIExpbmUu
Y2FsbCggdGhpcywgZ2VvbWV0cnksIG1hdGVyaWFsICk7CisgICAgICAgIHRoaXMubmFtZSA9ICcn
OwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaW5lTG9vcCc7CisgICAgICAgIHRoaXMuY29sb3Ig
PSBuZXcgQ29sb3IoIGNvbG9yICk7CisKKyAgICAgICAgdGhpcy5uZWFyID0gKCBuZWFyICE9PSB1
bmRlZmluZWQgKSA/IG5lYXIgOiAxOworICAgICAgICB0aGlzLmZhciA9ICggZmFyICE9PSB1bmRl
ZmluZWQgKSA/IGZhciA6IDEwMDA7CiAKICAgICB9CiAKLSAgICBMaW5lTG9vcC5wcm90b3R5cGUg
PSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaW5lLnByb3RvdHlwZSApLCB7CisgICAg
Rm9nLnByb3RvdHlwZS5pc0ZvZyA9IHRydWU7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IExpbmVM
b29wLAorICAgIEZvZy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
aXNMaW5lTG9vcDogdHJ1ZSwKKyAgICAgICAgcmV0dXJuIG5ldyBGb2coIHRoaXMuY29sb3IsIHRo
aXMubmVhciwgdGhpcy5mYXIgKTsKIAotICAgIH0gKTsKKyAgICB9OworCisgICAgRm9nLnByb3Rv
dHlwZS50b0pTT04gPSBmdW5jdGlvbiAoIC8qIG1ldGEgKi8gKSB7CisKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIHR5cGU6ICdGb2cnLAorICAgICAgICAgICAgY29sb3I6IHRoaXMuY29s
b3IuZ2V0SGV4KCksCisgICAgICAgICAgICBuZWFyOiB0aGlzLm5lYXIsCisgICAgICAgICAgICBm
YXI6IHRoaXMuZmFyCisgICAgICAgIH07CisKKyAgICB9OwogCiAgICAgLyoqCiAgICAgICogQGF1
dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKi8KKworICAgIGZ1bmN0aW9u
IFNjZW5lKCkgeworCisgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKKworICAgICAgICB0
aGlzLnR5cGUgPSAnU2NlbmUnOworCisgICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IG51bGw7Cisg
ICAgICAgIHRoaXMuZm9nID0gbnVsbDsKKyAgICAgICAgdGhpcy5vdmVycmlkZU1hdGVyaWFsID0g
bnVsbDsKKworICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSB0cnVlOyAvLyBjaGVja2VkIGJ5IHRo
ZSByZW5kZXJlcgorCisgICAgfQorCisgICAgU2NlbmUucHJvdG90eXBlID0gT2JqZWN0LmFzc2ln
biggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKKworICAgICAgICBjb25z
dHJ1Y3RvcjogU2NlbmUsCisKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UsIHJlY3Vy
c2l2ZSApIHsKKworICAgICAgICAgICAgT2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhp
cywgc291cmNlLCByZWN1cnNpdmUgKTsKKworICAgICAgICAgICAgaWYgKCBzb3VyY2UuYmFja2dy
b3VuZCAhPT0gbnVsbCApIHRoaXMuYmFja2dyb3VuZCA9IHNvdXJjZS5iYWNrZ3JvdW5kLmNsb25l
KCk7CisgICAgICAgICAgICBpZiAoIHNvdXJjZS5mb2cgIT09IG51bGwgKSB0aGlzLmZvZyA9IHNv
dXJjZS5mb2cuY2xvbmUoKTsKKyAgICAgICAgICAgIGlmICggc291cmNlLm92ZXJyaWRlTWF0ZXJp
YWwgIT09IG51bGwgKSB0aGlzLm92ZXJyaWRlTWF0ZXJpYWwgPSBzb3VyY2Uub3ZlcnJpZGVNYXRl
cmlhbC5jbG9uZSgpOworCisgICAgICAgICAgICB0aGlzLmF1dG9VcGRhdGUgPSBzb3VyY2UuYXV0
b1VwZGF0ZTsKKyAgICAgICAgICAgIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IHNvdXJjZS5tYXRy
aXhBdXRvVXBkYXRlOworCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAor
CisgICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCBtZXRhICkgeworCisgICAgICAgICAgICB2YXIg
ZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcywgbWV0YSApOworCisg
ICAgICAgICAgICBpZiAoIHRoaXMuYmFja2dyb3VuZCAhPT0gbnVsbCApIGRhdGEub2JqZWN0LmJh
Y2tncm91bmQgPSB0aGlzLmJhY2tncm91bmQudG9KU09OKCBtZXRhICk7CisgICAgICAgICAgICBp
ZiAoIHRoaXMuZm9nICE9PSBudWxsICkgZGF0YS5vYmplY3QuZm9nID0gdGhpcy5mb2cudG9KU09O
KCk7CisKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworCisgICAgICAgIH0KKworICAgIH0gKTsK
KworICAgIC8qKgogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxp
YS5jb20vCiAgICAgICoKICAgICAgKiBwYXJhbWV0ZXJzID0gewpAQCAtMjQyNzMsNzYyMiArMjQ3
MTcsMTAzODYgQEAKICAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKICAgICAgKiAgbWFwOiBuZXcg
VEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAogICAgICAqCi0gICAgICogIHNpemU6IDxmbG9hdD4s
Ci0gICAgICogIHNpemVBdHRlbnVhdGlvbjogPGJvb2w+CisgICAgICogIHV2T2Zmc2V0OiBuZXcg
VEhSRUUuVmVjdG9yMigpLAorICAgICAqICB1dlNjYWxlOiBuZXcgVEhSRUUuVmVjdG9yMigpCiAg
ICAgICogfQogICAgICAqLwogCi0gICAgZnVuY3Rpb24gUG9pbnRzTWF0ZXJpYWwoIHBhcmFtZXRl
cnMgKSB7CisgICAgZnVuY3Rpb24gU3ByaXRlTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CiAKICAg
ICAgICAgTWF0ZXJpYWwuY2FsbCggdGhpcyApOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdQb2lu
dHNNYXRlcmlhbCc7CisgICAgICAgIHRoaXMudHlwZSA9ICdTcHJpdGVNYXRlcmlhbCc7CiAKICAg
ICAgICAgdGhpcy5jb2xvciA9IG5ldyBDb2xvciggMHhmZmZmZmYgKTsKLQogICAgICAgICB0aGlz
Lm1hcCA9IG51bGw7CiAKLSAgICAgICAgdGhpcy5zaXplID0gMTsKLSAgICAgICAgdGhpcy5zaXpl
QXR0ZW51YXRpb24gPSB0cnVlOworICAgICAgICB0aGlzLnJvdGF0aW9uID0gMDsKIAorICAgICAg
ICB0aGlzLmZvZyA9IGZhbHNlOwogICAgICAgICB0aGlzLmxpZ2h0cyA9IGZhbHNlOwogCiAgICAg
ICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CiAKICAgICB9CiAKLSAgICBQb2ludHNN
YXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUgKTsK
LSAgICBQb2ludHNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2ludHNNYXRlcmlh
bDsKLQotICAgIFBvaW50c01hdGVyaWFsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsID0gdHJ1
ZTsKKyAgICBTcHJpdGVNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlh
bC5wcm90b3R5cGUgKTsKKyAgICBTcHJpdGVNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBTcHJpdGVNYXRlcmlhbDsKKyAgICBTcHJpdGVNYXRlcmlhbC5wcm90b3R5cGUuaXNTcHJpdGVN
YXRlcmlhbCA9IHRydWU7CiAKLSAgICBQb2ludHNNYXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1
bmN0aW9uICggc291cmNlICkgeworICAgIFNwcml0ZU1hdGVyaWFsLnByb3RvdHlwZS5jb3B5ID0g
ZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKICAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHku
Y2FsbCggdGhpcywgc291cmNlICk7CiAKICAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBzb3VyY2Uu
Y29sb3IgKTsKLQogICAgICAgICB0aGlzLm1hcCA9IHNvdXJjZS5tYXA7CiAKLSAgICAgICAgdGhp
cy5zaXplID0gc291cmNlLnNpemU7Ci0gICAgICAgIHRoaXMuc2l6ZUF0dGVudWF0aW9uID0gc291
cmNlLnNpemVBdHRlbnVhdGlvbjsKKyAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHNvdXJjZS5yb3Rh
dGlvbjsKIAogICAgICAgICByZXR1cm4gdGhpczsKIAogICAgIH07CiAKICAgICAvKioKKyAgICAg
KiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlLwogICAgICAqIEBhdXRo
b3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCiAgICAgICovCiAKLSAgICBm
dW5jdGlvbiBQb2ludHMoIGdlb21ldHJ5LCBtYXRlcmlhbCApIHsKKyAgICBmdW5jdGlvbiBTcHJp
dGUoIG1hdGVyaWFsICkgewogCiAgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKIAotICAg
ICAgICB0aGlzLnR5cGUgPSAnUG9pbnRzJzsKKyAgICAgICAgdGhpcy50eXBlID0gJ1Nwcml0ZSc7
CiAKLSAgICAgICAgdGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5ICE9PSB1bmRlZmluZWQgPyBnZW9t
ZXRyeSA6IG5ldyBCdWZmZXJHZW9tZXRyeSgpOwotICAgICAgICB0aGlzLm1hdGVyaWFsID0gbWF0
ZXJpYWwgIT09IHVuZGVmaW5lZCA/IG1hdGVyaWFsIDogbmV3IFBvaW50c01hdGVyaWFsKCB7IGNv
bG9yOiBNYXRoLnJhbmRvbSgpICogMHhmZmZmZmYgfSApOworICAgICAgICB0aGlzLm1hdGVyaWFs
ID0gKCBtYXRlcmlhbCAhPT0gdW5kZWZpbmVkICkgPyBtYXRlcmlhbCA6IG5ldyBTcHJpdGVNYXRl
cmlhbCgpOworCisgICAgICAgIHRoaXMuY2VudGVyID0gbmV3IFZlY3RvcjIoIDAuNSwgMC41ICk7
CiAKICAgICB9CiAKLSAgICBQb2ludHMucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0
LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKKyAgICBTcHJpdGUucHJvdG90eXBlID0g
T2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAot
ICAgICAgICBjb25zdHJ1Y3RvcjogUG9pbnRzLAorICAgICAgICBjb25zdHJ1Y3RvcjogU3ByaXRl
LAogCi0gICAgICAgIGlzUG9pbnRzOiB0cnVlLAorICAgICAgICBpc1Nwcml0ZTogdHJ1ZSwKIAog
ICAgICAgICByYXljYXN0OiAoIGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgdmFyIGludmVy
c2VNYXRyaXggPSBuZXcgTWF0cml4NCgpOwotICAgICAgICAgICAgdmFyIHJheSA9IG5ldyBSYXko
KTsKLSAgICAgICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbiByYXljYXN0KCByYXljYXN0ZXIsIGludGVyc2VjdHMgKSB7Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0gdGhpczsKLSAgICAgICAgICAgICAgICB2YXIgZ2Vv
bWV0cnkgPSB0aGlzLmdlb21ldHJ5OwotICAgICAgICAgICAgICAgIHZhciBtYXRyaXhXb3JsZCA9
IHRoaXMubWF0cml4V29ybGQ7Ci0gICAgICAgICAgICAgICAgdmFyIHRocmVzaG9sZCA9IHJheWNh
c3Rlci5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZDsKKyAgICAgICAgICAgIHZhciBpbnRlcnNlY3RQ
b2ludCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgd29ybGRTY2FsZSA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgbXZQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7CiAK
LSAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBib3VuZGluZ1NwaGVyZSBkaXN0YW5jZSB0byBy
YXkKKyAgICAgICAgICAgIHZhciBhbGlnbmVkUG9zaXRpb24gPSBuZXcgVmVjdG9yMigpOworICAg
ICAgICAgICAgdmFyIHJvdGF0ZWRQb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7CisgICAgICAgICAg
ICB2YXIgdmlld1dvcmxkTWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICAgICAgICAg
IGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSBnZW9tZXRyeS5jb21wdXRl
Qm91bmRpbmdTcGhlcmUoKTsKKyAgICAgICAgICAgIHZhciB2QSA9IG5ldyBWZWN0b3IzKCk7Cisg
ICAgICAgICAgICB2YXIgdkIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIHZDID0g
bmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgIHNwaGVyZS5jb3B5KCBnZW9tZXRyeS5i
b3VuZGluZ1NwaGVyZSApOwotICAgICAgICAgICAgICAgIHNwaGVyZS5hcHBseU1hdHJpeDQoIG1h
dHJpeFdvcmxkICk7Ci0gICAgICAgICAgICAgICAgc3BoZXJlLnJhZGl1cyArPSB0aHJlc2hvbGQ7
CisgICAgICAgICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1WZXJ0ZXgoIHZlcnRleFBvc2l0aW9uLCBt
dlBvc2l0aW9uLCBjZW50ZXIsIHNjYWxlLCBzaW4sIGNvcyApIHsKIAotICAgICAgICAgICAgICAg
IGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKSA9PT0gZmFsc2Ug
KSByZXR1cm47CisgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBwb3NpdGlvbiBpbiBjYW1lcmEg
c3BhY2UKKyAgICAgICAgICAgICAgICBhbGlnbmVkUG9zaXRpb24uc3ViVmVjdG9ycyggdmVydGV4
UG9zaXRpb24sIGNlbnRlciApLmFkZFNjYWxhciggMC41ICkubXVsdGlwbHkoIHNjYWxlICk7CiAK
LSAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIHRvIGNoZWNrIGlmIHJvdGF0
aW9uIGlzIG5vdCB6ZXJvCisgICAgICAgICAgICAgICAgaWYgKCBzaW4gIT09IHVuZGVmaW5lZCAp
IHsKIAotICAgICAgICAgICAgICAgIGludmVyc2VNYXRyaXguZ2V0SW52ZXJzZSggbWF0cml4V29y
bGQgKTsKLSAgICAgICAgICAgICAgICByYXkuY29weSggcmF5Y2FzdGVyLnJheSApLmFwcGx5TWF0
cml4NCggaW52ZXJzZU1hdHJpeCApOworICAgICAgICAgICAgICAgICAgICByb3RhdGVkUG9zaXRp
b24ueCA9ICggY29zICogYWxpZ25lZFBvc2l0aW9uLnggKSAtICggc2luICogYWxpZ25lZFBvc2l0
aW9uLnkgKTsKKyAgICAgICAgICAgICAgICAgICAgcm90YXRlZFBvc2l0aW9uLnkgPSAoIHNpbiAq
IGFsaWduZWRQb3NpdGlvbi54ICkgKyAoIGNvcyAqIGFsaWduZWRQb3NpdGlvbi55ICk7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgbG9jYWxUaHJlc2hvbGQgPSB0aHJlc2hvbGQgLyAoICggdGhpcy5z
Y2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56ICkgLyAzICk7Ci0gICAgICAgICAg
ICAgICAgdmFyIGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNo
b2xkOwotICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RQb2lu
dCggcG9pbnQsIGluZGV4ICkgeworICAgICAgICAgICAgICAgICAgICByb3RhdGVkUG9zaXRpb24u
Y29weSggYWxpZ25lZFBvc2l0aW9uICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJheVBv
aW50RGlzdGFuY2VTcSA9IHJheS5kaXN0YW5jZVNxVG9Qb2ludCggcG9pbnQgKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCByYXlQb2ludERpc3RhbmNlU3Eg
PCBsb2NhbFRocmVzaG9sZFNxICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50
ZXJzZWN0UG9pbnQgPSByYXkuY2xvc2VzdFBvaW50VG9Qb2ludCggcG9pbnQgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NCggbWF0cml4V29ybGQg
KTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhQb3NpdGlvbi5jb3B5KCBtdlBvc2l0aW9uICk7Cisg
ICAgICAgICAgICAgICAgdmVydGV4UG9zaXRpb24ueCArPSByb3RhdGVkUG9zaXRpb24ueDsKKyAg
ICAgICAgICAgICAgICB2ZXJ0ZXhQb3NpdGlvbi55ICs9IHJvdGF0ZWRQb3NpdGlvbi55OwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdp
bi5kaXN0YW5jZVRvKCBpbnRlcnNlY3RQb2ludCApOworICAgICAgICAgICAgICAgIC8vIHRyYW5z
Zm9ybSB0byB3b3JsZCBzcGFjZQorICAgICAgICAgICAgICAgIHZlcnRleFBvc2l0aW9uLmFwcGx5
TWF0cml4NCggdmlld1dvcmxkTWF0cml4ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIg
KSByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
c2VjdHMucHVzaCggeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJheWNhc3QoIHJheWNh
c3RlciwgaW50ZXJzZWN0cyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rh
bmNlOiBkaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZVRvUmF5
OiBNYXRoLnNxcnQoIHJheVBvaW50RGlzdGFuY2VTcSApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvaW50OiBpbnRlcnNlY3RQb2ludC5jbG9uZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4OiBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNl
OiBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0CisgICAg
ICAgICAgICAgICAgd29ybGRTY2FsZS5zZXRGcm9tTWF0cml4U2NhbGUoIHRoaXMubWF0cml4V29y
bGQgKTsKKyAgICAgICAgICAgICAgICB2aWV3V29ybGRNYXRyaXguZ2V0SW52ZXJzZSggdGhpcy5t
b2RlbFZpZXdNYXRyaXggKS5wcmVtdWx0aXBseSggdGhpcy5tYXRyaXhXb3JsZCApOworICAgICAg
ICAgICAgICAgIG12UG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1vZGVsVmll
d01hdHJpeCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAg
ICAgdmFyIHJvdGF0aW9uID0gdGhpcy5tYXRlcmlhbC5yb3RhdGlvbjsKKyAgICAgICAgICAgICAg
ICB2YXIgc2luLCBjb3M7CisgICAgICAgICAgICAgICAgaWYgKCByb3RhdGlvbiAhPT0gMCApIHsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvcyA9IE1hdGgu
Y29zKCByb3RhdGlvbiApOworICAgICAgICAgICAgICAgICAgICBzaW4gPSBNYXRoLnNpbiggcm90
YXRpb24gKTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggZ2Vv
bWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgaW5k
ZXggPSBnZW9tZXRyeS5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSBnZW9tZXRyeS5hdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25z
ID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
IGluZGV4ICE9PSBudWxsICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kaWNl
cyA9IGluZGV4LmFycmF5OworICAgICAgICAgICAgICAgIHZhciBjZW50ZXIgPSB0aGlzLmNlbnRl
cjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGluZGlj
ZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmVy
dGV4KCB2QS5zZXQoIC0gMC41LCAtIDAuNSwgMCApLCBtdlBvc2l0aW9uLCBjZW50ZXIsIHdvcmxk
U2NhbGUsIHNpbiwgY29zICk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmVydGV4KCB2Qi5z
ZXQoIDAuNSwgLSAwLjUsIDAgKSwgbXZQb3NpdGlvbiwgY2VudGVyLCB3b3JsZFNjYWxlLCBzaW4s
IGNvcyApOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZlcnRleCggdkMuc2V0KCAwLjUsIDAu
NSwgMCApLCBtdlBvc2l0aW9uLCBjZW50ZXIsIHdvcmxkU2NhbGUsIHNpbiwgY29zICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGluZGljZXNbIGkgXTsKKyAgICAgICAg
ICAgICAgICAvLyBjaGVjayBmaXJzdCB0cmlhbmdsZQorICAgICAgICAgICAgICAgIHZhciBpbnRl
cnNlY3QgPSByYXljYXN0ZXIucmF5LmludGVyc2VjdFRyaWFuZ2xlKCB2QSwgdkIsIHZDLCBmYWxz
ZSwgaW50ZXJzZWN0UG9pbnQgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0
aW9uLmZyb21BcnJheSggcG9zaXRpb25zLCBhICogMyApOworICAgICAgICAgICAgICAgIGlmICgg
aW50ZXJzZWN0ID09PSBudWxsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dFBvaW50KCBwb3NpdGlvbiwgYSApOworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBzZWNv
bmQgdHJpYW5nbGUKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmVydGV4KCB2Qi5zZXQo
IC0gMC41LCAwLjUsIDAgKSwgbXZQb3NpdGlvbiwgY2VudGVyLCB3b3JsZFNjYWxlLCBzaW4sIGNv
cyApOworICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QgPSByYXljYXN0ZXIucmF5LmludGVy
c2VjdFRyaWFuZ2xlKCB2QSwgdkMsIHZCLCBmYWxzZSwgaW50ZXJzZWN0UG9pbnQgKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3QgPT09IG51bGwgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHBvc2l0aW9ucy5sZW5ndGggLyAz
OyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3NpdGlvbi5mcm9tQXJyYXkoIHBvc2l0aW9ucywgaSAqIDMgKTsKKyAgICAg
ICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRv
KCBpbnRlcnNlY3RQb2ludCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFBv
aW50KCBwb3NpdGlvbiwgaSApOworICAgICAgICAgICAgICAgIGlmICggZGlzdGFuY2UgPCByYXlj
YXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSByZXR1cm47CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnRlcnNlY3RzLnB1c2goIHsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBk
aXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgcG9pbnQ6IGludGVyc2VjdFBvaW50LmNsb25l
KCksCisgICAgICAgICAgICAgICAgICAgIGZhY2U6IG51bGwsCisgICAgICAgICAgICAgICAgICAg
IG9iamVjdDogdGhpcwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gZ2VvbWV0cnkudmVy
dGljZXM7CisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgbCA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgIH0oKSAp
LAogCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UG9pbnQoIHZlcnRpY2VzWyBpIF0sIGkg
KTsKKyAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMubWF0ZXJpYWwg
KS5jb3B5KCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIH07CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAg
IH0oKSApLAorICAgICAgICAgICAgT2JqZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywg
c291cmNlICk7CiAKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlm
ICggc291cmNlLmNlbnRlciAhPT0gdW5kZWZpbmVkICkgdGhpcy5jZW50ZXIuY29weSggc291cmNl
LmNlbnRlciApOwogCi0gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRo
aXMuZ2VvbWV0cnksIHRoaXMubWF0ZXJpYWwgKS5jb3B5KCB0aGlzICk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKIAogICAgICAgICB9CiAKKwogICAgIH0gKTsKIAogICAgIC8qKgorICAgICAq
IEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhv
ciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KICAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gR3JvdXAo
KSB7CisgICAgZnVuY3Rpb24gTE9EKCkgewogCiAgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMg
KTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnR3JvdXAnOworICAgICAgICB0aGlzLnR5cGUgPSAn
TE9EJzsKKworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggdGhpcywgeworICAgICAg
ICAgICAgbGV2ZWxzOiB7CisgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogW10KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOwogCiAgICAg
fQogCi0gICAgR3JvdXAucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSgg
T2JqZWN0M0QucHJvdG90eXBlICksIHsKKyAgICBMT0QucHJvdG90eXBlID0gT2JqZWN0LmFzc2ln
biggT2JqZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAotICAgICAgICBjb25z
dHJ1Y3RvcjogR3JvdXAKKyAgICAgICAgY29uc3RydWN0b3I6IExPRCwKIAotICAgIH0gKTsKKyAg
ICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0
aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICAgICAgT2Jq
ZWN0M0QucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlLCBmYWxzZSApOwogCi0gICAg
ZnVuY3Rpb24gVmlkZW9UZXh0dXJlKCB2aWRlbywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdG
aWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICkgeworICAgICAgICAg
ICAgdmFyIGxldmVscyA9IHNvdXJjZS5sZXZlbHM7CiAKLSAgICAgICAgVGV4dHVyZS5jYWxsKCB0
aGlzLCB2aWRlbywgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwg
Zm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGwgPSBsZXZlbHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICB0aGlzLmdlbmVy
YXRlTWlwbWFwcyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IGxldmVsc1sg
aSBdOwogCi0gICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgICAgICAgICAgdGhpcy5h
ZGRMZXZlbCggbGV2ZWwub2JqZWN0LmNsb25lKCksIGxldmVsLmRpc3RhbmNlICk7CiAKLSAgICAg
ICAgZnVuY3Rpb24gdXBkYXRlKCkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoIHVwZGF0ZSApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgICAgIGlmICggdmlkZW8ucmVhZHlTdGF0ZSA+PSB2aWRlby5IQVZFX0NVUlJFTlRf
REFUQSApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIHNjb3BlLm5lZWRzVXBkYXRl
ID0gdHJ1ZTsKKyAgICAgICAgYWRkTGV2ZWw6IGZ1bmN0aW9uICggb2JqZWN0LCBkaXN0YW5jZSAp
IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBkaXN0YW5jZSA9PT0gdW5kZWZp
bmVkICkgZGlzdGFuY2UgPSAwOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgIGRpc3RhbmNlID0g
TWF0aC5hYnMoIGRpc3RhbmNlICk7CiAKLSAgICAgICAgdXBkYXRlKCk7CisgICAgICAgICAgICB2
YXIgbGV2ZWxzID0gdGhpcy5sZXZlbHM7CiAKLSAgICB9CisgICAgICAgICAgICBmb3IgKCB2YXIg
bCA9IDA7IGwgPCBsZXZlbHMubGVuZ3RoOyBsICsrICkgewogCi0gICAgVmlkZW9UZXh0dXJlLnBy
b3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRleHR1cmUucHJvdG90eXBlICk7Ci0gICAgVmlkZW9U
ZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZpZGVvVGV4dHVyZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIGRpc3RhbmNlIDwgbGV2ZWxzWyBsIF0uZGlzdGFuY2UgKSB7CiAKLSAgICAvKioK
LSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAg
ICAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIGZ1bmN0aW9uIENvbXByZXNz
ZWRUZXh0dXJlKCBtaXBtYXBzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1hcHBpbmcs
IHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGFuaXNvdHJvcHksIGVuY29kaW5n
ICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBUZXh0dXJlLmNhbGwoIHRoaXMsIG51
bGwsIG1hcHBpbmcsIHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwg
dHlwZSwgYW5pc290cm9weSwgZW5jb2RpbmcgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0
aGlzLmltYWdlID0geyB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07Ci0gICAgICAgIHRo
aXMubWlwbWFwcyA9IG1pcG1hcHM7CisgICAgICAgICAgICBsZXZlbHMuc3BsaWNlKCBsLCAwLCB7
IGRpc3RhbmNlOiBkaXN0YW5jZSwgb2JqZWN0OiBvYmplY3QgfSApOwogCi0gICAgICAgIC8vIG5v
IGZsaXBwaW5nIGZvciBjdWJlIHRleHR1cmVzCi0gICAgICAgIC8vIChhbHNvIGZsaXBwaW5nIGRv
ZXNuJ3Qgd29yayBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyApCisgICAgICAgICAgICB0aGlzLmFk
ZCggb2JqZWN0ICk7CiAKLSAgICAgICAgdGhpcy5mbGlwWSA9IGZhbHNlOworICAgICAgICB9LAog
Ci0gICAgICAgIC8vIGNhbid0IGdlbmVyYXRlIG1pcG1hcHMgZm9yIGNvbXByZXNzZWQgdGV4dHVy
ZXMKLSAgICAgICAgLy8gbWlwcyBtdXN0IGJlIGVtYmVkZGVkIGluIEREUyBmaWxlcworICAgICAg
ICBnZXRPYmplY3RGb3JEaXN0YW5jZTogZnVuY3Rpb24gKCBkaXN0YW5jZSApIHsKIAotICAgICAg
ICB0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlOworICAgICAgICAgICAgdmFyIGxldmVscyA9
IHRoaXMubGV2ZWxzOwogCi0gICAgfQorICAgICAgICAgICAgZm9yICggdmFyIGkgPSAxLCBsID0g
bGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICBDb21wcmVzc2VkVGV4dHVyZS5w
cm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBUZXh0dXJlLnByb3RvdHlwZSApOwotICAgIENvbXBy
ZXNzZWRUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbXByZXNzZWRUZXh0dXJlOwor
ICAgICAgICAgICAgICAgIGlmICggZGlzdGFuY2UgPCBsZXZlbHNbIGkgXS5kaXN0YW5jZSApIHsK
IAotICAgIENvbXByZXNzZWRUZXh0dXJlLnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0
aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICAgICAgICAg
IH0KIAotICAgIGZ1bmN0aW9uIENhbnZhc1RleHR1cmUoIGNhbnZhcywgbWFwcGluZywgd3JhcFMs
IHdyYXBULCBtYWdGaWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgIFRleHR1cmUuY2FsbCggdGhpcywgY2FudmFzLCBt
YXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUs
IGFuaXNvdHJvcHkgKTsKKyAgICAgICAgICAgIHJldHVybiBsZXZlbHNbIGkgLSAxIF0ub2JqZWN0
OwogCi0gICAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAgICB9LAogCi0gICAg
fQorICAgICAgICByYXljYXN0OiAoIGZ1bmN0aW9uICgpIHsKIAotICAgIENhbnZhc1RleHR1cmUu
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggVGV4dHVyZS5wcm90b3R5cGUgKTsKLSAgICBDYW52
YXNUZXh0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhbnZhc1RleHR1cmU7CisgICAgICAg
ICAgICB2YXIgbWF0cml4UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpOwogCi0gICAgLyoqCi0gICAg
ICogQGF1dGhvciBNYXR0IERlc0xhdXJpZXJzIC8gQG1hdHRkZXNsCi0gICAgICogQGF1dGhvciBh
dGl4IC8gYXJ0aHVyc2lsYmVyLmRlCi0gICAgICovCisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24gcmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICkgewogCi0gICAgZnVuY3Rpb24gRGVw
dGhUZXh0dXJlKCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1h
Z0ZpbHRlciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBmb3JtYXQgKSB7CisgICAgICAgICAgICAg
ICAgbWF0cml4UG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1hdHJpeFdvcmxk
ICk7CiAKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBmb3JtYXQgOiBE
ZXB0aEZvcm1hdDsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5
Lm9yaWdpbi5kaXN0YW5jZVRvKCBtYXRyaXhQb3NpdGlvbiApOwogCi0gICAgICAgIGlmICggZm9y
bWF0ICE9PSBEZXB0aEZvcm1hdCAmJiBmb3JtYXQgIT09IERlcHRoU3RlbmNpbEZvcm1hdCApIHsK
KyAgICAgICAgICAgICAgICB0aGlzLmdldE9iamVjdEZvckRpc3RhbmNlKCBkaXN0YW5jZSApLnJh
eWNhc3QoIHJheWNhc3RlciwgaW50ZXJzZWN0cyApOwogCi0gICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoICdEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9y
bWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCcgKQorICAgICAgICAgICAgfTsKIAotICAg
ICAgICB9CisgICAgICAgIH0oKSApLAogCi0gICAgICAgIGlmICggdHlwZSA9PT0gdW5kZWZpbmVk
ICYmIGZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgKSB0eXBlID0gVW5zaWduZWRTaG9ydFR5cGU7Ci0g
ICAgICAgIGlmICggdHlwZSA9PT0gdW5kZWZpbmVkICYmIGZvcm1hdCA9PT0gRGVwdGhTdGVuY2ls
Rm9ybWF0ICkgdHlwZSA9IFVuc2lnbmVkSW50MjQ4VHlwZTsKKyAgICAgICAgdXBkYXRlOiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgVGV4dHVyZS5jYWxsKCB0aGlzLCBudWxsLCBtYXBwaW5nLCB3
cmFwUywgd3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJv
cHkgKTsKKyAgICAgICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2
YXIgdjIgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgIHRoaXMuaW1hZ2UgPSB7IHdpZHRoOiB3
aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB1cGRh
dGUoIGNhbWVyYSApIHsKIAotICAgICAgICB0aGlzLm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlciAhPT0g
dW5kZWZpbmVkID8gbWFnRmlsdGVyIDogTmVhcmVzdEZpbHRlcjsKLSAgICAgICAgdGhpcy5taW5G
aWx0ZXIgPSBtaW5GaWx0ZXIgIT09IHVuZGVmaW5lZCA/IG1pbkZpbHRlciA6IE5lYXJlc3RGaWx0
ZXI7CisgICAgICAgICAgICAgICAgdmFyIGxldmVscyA9IHRoaXMubGV2ZWxzOwogCi0gICAgICAg
IHRoaXMuZmxpcFkgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5nZW5lcmF0ZU1pcG1hcHMgICAgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIGxldmVscy5sZW5ndGggPiAxICkgewogCi0gICAg
fQorICAgICAgICAgICAgICAgICAgICB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGNhbWVyYS5t
YXRyaXhXb3JsZCApOworICAgICAgICAgICAgICAgICAgICB2Mi5zZXRGcm9tTWF0cml4UG9zaXRp
b24oIHRoaXMubWF0cml4V29ybGQgKTsKIAotICAgIERlcHRoVGV4dHVyZS5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKCBUZXh0dXJlLnByb3RvdHlwZSApOwotICAgIERlcHRoVGV4dHVyZS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBEZXB0aFRleHR1cmU7Ci0gICAgRGVwdGhUZXh0dXJlLnByb3Rv
dHlwZS5pc0RlcHRoVGV4dHVyZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0
YW5jZSA9IHYxLmRpc3RhbmNlVG8oIHYyICk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBz
Oi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0gICAgICovCisgICAgICAgICAgICAgICAgICAgIGxldmVs
c1sgMCBdLm9iamVjdC52aXNpYmxlID0gdHJ1ZTsKIAotICAgIGZ1bmN0aW9uIFdpcmVmcmFtZUdl
b21ldHJ5KCBnZW9tZXRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAx
LCBsID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgQnVmZmVyR2Vv
bWV0cnkuY2FsbCggdGhpcyApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXN0YW5j
ZSA+PSBsZXZlbHNbIGkgXS5kaXN0YW5jZSApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnV2ly
ZWZyYW1lR2VvbWV0cnknOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsc1sgaSAt
IDEgXS5vYmplY3QudmlzaWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxldmVsc1sgaSBdLm9iamVjdC52aXNpYmxlID0gdHJ1ZTsKIAotICAgICAgICAvLyBidWZmZXIK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgdmFyIHZlcnRpY2Vz
ID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8g
aGVscGVyIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHZh
ciBpLCBqLCBsLCBvLCBvbDsKLSAgICAgICAgdmFyIGVkZ2UgPSBbIDAsIDAgXSwgZWRnZXMgPSB7
fSwgZSwgZWRnZTEsIGVkZ2UyOwotICAgICAgICB2YXIga2V5LCBrZXlzID0gWyAnYScsICdiJywg
J2MnIF07Ci0gICAgICAgIHZhciB2ZXJ0ZXg7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAvLyBkaWZmZXJlbnQgbG9naWMgZm9yIEdlb21ldHJ5IGFuZCBCdWZmZXJHZW9tZXRyeQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgIGlm
ICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxldmVsc1sgaSBdLm9iamVjdC52aXNpYmxlID0gZmFsc2U7CiAKLSAgICAgICAgICAg
IC8vIGNyZWF0ZSBhIGRhdGEgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgYWxsIGVkZ2VzIHdpdGhv
dXQgZHVwbGljYXRlcworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBm
YWNlcyA9IGdlb21ldHJ5LmZhY2VzOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Zm9yICggaSA9IDAsIGwgPSBmYWNlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICAg
ICAgfTsKIAotICAgICAgICAgICAgICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsKKyAgICAgICAg
fSgpLAogCi0gICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCAzOyBqICsrICkgeworICAg
ICAgICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKIAotICAgICAgICAgICAgICAgICAgICBl
ZGdlMSA9IGZhY2VbIGtleXNbIGogXSBdOwotICAgICAgICAgICAgICAgICAgICBlZGdlMiA9IGZh
Y2VbIGtleXNbICggaiArIDEgKSAlIDMgXSBdOwotICAgICAgICAgICAgICAgICAgICBlZGdlWyAw
IF0gPSBNYXRoLm1pbiggZWRnZTEsIGVkZ2UyICk7IC8vIHNvcnRpbmcgcHJldmVudHMgZHVwbGlj
YXRlcwotICAgICAgICAgICAgICAgICAgICBlZGdlWyAxIF0gPSBNYXRoLm1heCggZWRnZTEsIGVk
Z2UyICk7CisgICAgICAgICAgICB2YXIgZGF0YSA9IE9iamVjdDNELnByb3RvdHlwZS50b0pTT04u
Y2FsbCggdGhpcywgbWV0YSApOwogCi0gICAgICAgICAgICAgICAgICAgIGtleSA9IGVkZ2VbIDAg
XSArICcsJyArIGVkZ2VbIDEgXTsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LmxldmVscyA9IFtd
OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggZWRnZXNbIGtleSBdID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICB2YXIgbGV2ZWxzID0gdGhpcy5sZXZlbHM7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVkZ2VzWyBrZXkgXSA9IHsgaW5kZXgxOiBlZGdlWyAwIF0sIGluZGV4Mjog
ZWRnZVsgMSBdIH07CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBsZXZlbHMubGVu
Z3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgdmFyIGxldmVsID0gbGV2ZWxzWyBpIF07CiAKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZGF0YS5vYmplY3QubGV2ZWxzLnB1c2goIHsKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0OiBsZXZlbC5vYmplY3QudXVpZCwKKyAgICAgICAgICAgICAgICAgICAgZGlzdGFu
Y2U6IGxldmVsLmRpc3RhbmNlCisgICAgICAgICAgICAgICAgfSApOwogCiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIHZlcnRpY2VzCi0KLSAgICAgICAgICAgIGZvciAo
IGtleSBpbiBlZGdlcyApIHsKLQotICAgICAgICAgICAgICAgIGUgPSBlZGdlc1sga2V5IF07Ci0K
LSAgICAgICAgICAgICAgICB2ZXJ0ZXggPSBnZW9tZXRyeS52ZXJ0aWNlc1sgZS5pbmRleDEgXTsK
LSAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRl
eC56ICk7Ci0KLSAgICAgICAgICAgICAgICB2ZXJ0ZXggPSBnZW9tZXRyeS52ZXJ0aWNlc1sgZS5p
bmRleDIgXTsKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4
LnksIHZlcnRleC56ICk7CisgICAgICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgfSBlbHNlIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnku
aXNCdWZmZXJHZW9tZXRyeSApIHsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgIHZhciBwb3NpdGlv
biwgaW5kaWNlcywgZ3JvdXBzOwotICAgICAgICAgICAgdmFyIGdyb3VwLCBzdGFydCwgY291bnQ7
Ci0gICAgICAgICAgICB2YXIgaW5kZXgxLCBpbmRleDI7CisgICAgLyoqCisgICAgICogQGF1dGhv
ciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS8KKyAgICAgKiBAYXV0aG9yIGFsdGVy
ZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqIEBhdXRob3IgbWljaGFlbCBn
dWVycmVybyAvIGh0dHA6Ly9yZWFsaXR5bWVsdGRvd24uY29tCisgICAgICogQGF1dGhvciBpa2Vy
ciAvIGh0dHA6Ly92ZXJvbGQuY29tCisgICAgICovCiAKLSAgICAgICAgICAgIHZlcnRleCA9IG5l
dyBWZWN0b3IzKCk7CisgICAgZnVuY3Rpb24gU2tlbGV0b24oIGJvbmVzLCBib25lSW52ZXJzZXMg
KSB7CiAKLSAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuaW5kZXggIT09IG51bGwgKSB7CisgICAg
ICAgIC8vIGNvcHkgdGhlIGJvbmUgYXJyYXkKIAotICAgICAgICAgICAgICAgIC8vIGluZGV4ZWQg
QnVmZmVyR2VvbWV0cnkKKyAgICAgICAgYm9uZXMgPSBib25lcyB8fCBbXTsKIAotICAgICAgICAg
ICAgICAgIHBvc2l0aW9uID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKLSAgICAgICAg
ICAgICAgICBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kZXg7Ci0gICAgICAgICAgICAgICAgZ3JvdXBz
ID0gZ2VvbWV0cnkuZ3JvdXBzOworICAgICAgICB0aGlzLmJvbmVzID0gYm9uZXMuc2xpY2UoIDAg
KTsKKyAgICAgICAgdGhpcy5ib25lTWF0cmljZXMgPSBuZXcgRmxvYXQzMkFycmF5KCB0aGlzLmJv
bmVzLmxlbmd0aCAqIDE2ICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGdyb3Vwcy5sZW5ndGgg
PT09IDAgKSB7CisgICAgICAgIC8vIHVzZSB0aGUgc3VwcGxpZWQgYm9uZSBpbnZlcnNlcyBvciBj
YWxjdWxhdGUgdGhlIGludmVyc2VzCiAKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gWyB7
IHN0YXJ0OiAwLCBjb3VudDogaW5kaWNlcy5jb3VudCwgbWF0ZXJpYWxJbmRleDogMCB9IF07Cisg
ICAgICAgIGlmICggYm9uZUludmVyc2VzID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7CiAKLSAgICAgICAg
ICAgICAgICAvLyBjcmVhdGUgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCBlZ2Vz
IHdpdGhvdXQgZHVwbGljYXRlcworICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAg
Zm9yICggbyA9IDAsIG9sID0gZ3JvdXBzLmxlbmd0aDsgbyA8IG9sOyArKyBvICkgeworICAgICAg
ICAgICAgaWYgKCB0aGlzLmJvbmVzLmxlbmd0aCA9PT0gYm9uZUludmVyc2VzLmxlbmd0aCApIHsK
IAotICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3Vwc1sgbyBdOworICAgICAgICAgICAg
ICAgIHRoaXMuYm9uZUludmVyc2VzID0gYm9uZUludmVyc2VzLnNsaWNlKCAwICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBncm91cC5zdGFydDsKLSAgICAgICAgICAgICAgICAgICAg
Y291bnQgPSBncm91cC5jb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IHN0YXJ0LCBsID0gKCBzdGFydCArIGNvdW50ICk7IGkgPCBsOyBp
ICs9IDMgKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuU2tlbGV0b24g
Ym9uZUludmVyc2VzIGlzIHRoZSB3cm9uZyBsZW5ndGguJyApOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDM7IGogKysgKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5ib25lSW52ZXJzZXMgPSBbXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Ux
ID0gaW5kaWNlcy5nZXRYKCBpICsgaiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVk
Z2UyID0gaW5kaWNlcy5nZXRYKCBpICsgKCBqICsgMSApICUgMyApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVkZ2VbIDAgXSA9IE1hdGgubWluKCBlZGdlMSwgZWRnZTIgKTsgLy8gc29y
dGluZyBwcmV2ZW50cyBkdXBsaWNhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRn
ZVsgMSBdID0gTWF0aC5tYXgoIGVkZ2UxLCBlZGdlMiApOworICAgICAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gZWRnZVsgMCBdICsgJywnICsgZWRnZVsg
MSBdOworICAgICAgICAgICAgICAgICAgICB0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKCBuZXcgTWF0
cml4NCgpICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVkZ2VzWyBrZXkg
XSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlZGdlc1sga2V5IF0gPSB7IGluZGV4MTogZWRnZVsgMCBdLCBpbmRl
eDI6IGVkZ2VbIDEgXSB9OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgIE9iamVjdC5hc3NpZ24oIFNrZWxldG9uLnByb3Rv
dHlwZSwgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICBjYWxjdWxhdGVJbnZlcnNlczog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgdmVydGljZXMKKyAg
ICAgICAgICAgIHRoaXMuYm9uZUludmVyc2VzID0gW107CiAKLSAgICAgICAgICAgICAgICBmb3Ig
KCBrZXkgaW4gZWRnZXMgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gdGhp
cy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICBl
ID0gZWRnZXNbIGtleSBdOworICAgICAgICAgICAgICAgIHZhciBpbnZlcnNlID0gbmV3IE1hdHJp
eDQoKTsKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXguZnJvbUJ1ZmZlckF0dHJpYnV0ZSgg
cG9zaXRpb24sIGUuaW5kZXgxICk7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2go
IHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKKyAgICAgICAgICAgICAgICBpZiAoIHRo
aXMuYm9uZXNbIGkgXSApIHsKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXguZnJvbUJ1ZmZl
ckF0dHJpYnV0ZSggcG9zaXRpb24sIGUuaW5kZXgyICk7Ci0gICAgICAgICAgICAgICAgICAgIHZl
cnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW52ZXJzZS5nZXRJbnZlcnNlKCB0aGlzLmJvbmVzWyBpIF0ubWF0cml4V29ybGQg
KTsKIAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKCBpbnZlcnNlICk7CiAKLSAgICAgICAgICAg
ICAgICAvLyBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeQorICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOworICAg
ICAgICB9LAogCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSAoIHBvc2l0aW9uLmNv
dW50IC8gMyApOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgcG9zZTogZnVuY3Rpb24gKCkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgMzsgaiArKyApIHsKKyAgICAg
ICAgICAgIHZhciBib25lLCBpLCBpbDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhy
ZWUgZWRnZXMgcGVyIHRyaWFuZ2xlLCBhbiBlZGdlIGlzIHJlcHJlc2VudGVkIGFzIChpbmRleDEs
IGluZGV4MikKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUuZy4gdGhlIGZpcnN0IHRyaWFu
Z2xlIGhhcyB0aGUgZm9sbG93aW5nIGVkZ2VzOiAoMCwxKSwoMSwyKSwoMiwwKQorICAgICAgICAg
ICAgLy8gcmVjb3ZlciB0aGUgYmluZC10aW1lIHdvcmxkIG1hdHJpY2VzCiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4MSA9IDMgKiBpICsgajsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZlcnRleC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbiwgaW5kZXgxICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRl
eC56ICk7CisgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSB0aGlzLmJvbmVzLmxlbmd0aDsg
aSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDIgPSAzICog
aSArICggKCBqICsgMSApICUgMyApOwotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4LmZy
b21CdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCBpbmRleDIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKKyAg
ICAgICAgICAgICAgICBib25lID0gdGhpcy5ib25lc1sgaSBdOwogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGJvbmUgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgYm9uZS5tYXRyaXhXb3JsZC5nZXRJbnZlcnNlKCB0aGlzLmJvbmVJbnZlcnNlc1sgaSBdICk7
CiAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gYnVpbGQgZ2VvbWV0cnkKLQotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bv
c2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTsKLQot
ICAgIH0KKyAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGxvY2FsIG1hdHJpY2VzLCBwb3NpdGlv
bnMsIHJvdGF0aW9ucyBhbmQgc2NhbGVzCiAKLSAgICBXaXJlZnJhbWVHZW9tZXRyeS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAgICBXaXJl
ZnJhbWVHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaXJlZnJhbWVHZW9tZXRyeTsK
KyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IHRoaXMuYm9uZXMubGVuZ3RoOyBpIDwgaWw7
IGkgKysgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIHp6ODUgLyBodHRwczovL2dpdGh1
Yi5jb20veno4NQotICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9N
dWdlbjg3Ci0gICAgICoKLSAgICAgKiBQYXJhbWV0cmljIFN1cmZhY2VzIEdlb21ldHJ5Ci0gICAg
ICogYmFzZWQgb24gdGhlIGJyaWxsaWFudCBhcnRpY2xlIGJ5IEBwcmlkZW91dCBodHRwOi8vcHJp
ZGVvdXQubmV0L2Jsb2cvP3A9NDQKLSAgICAgKi8KKyAgICAgICAgICAgICAgICBib25lID0gdGhp
cy5ib25lc1sgaSBdOwogCi0gICAgLy8gUGFyYW1ldHJpY0dlb21ldHJ5CisgICAgICAgICAgICAg
ICAgaWYgKCBib25lICkgewogCi0gICAgZnVuY3Rpb24gUGFyYW1ldHJpY0dlb21ldHJ5KCBmdW5j
LCBzbGljZXMsIHN0YWNrcyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBib25lLnBhcmVu
dCAmJiBib25lLnBhcmVudC5pc0JvbmUgKSB7CiAKLSAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhp
cyApOworICAgICAgICAgICAgICAgICAgICAgICAgYm9uZS5tYXRyaXguZ2V0SW52ZXJzZSggYm9u
ZS5wYXJlbnQubWF0cml4V29ybGQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvbmUubWF0
cml4Lm11bHRpcGx5KCBib25lLm1hdHJpeFdvcmxkICk7CiAKLSAgICAgICAgdGhpcy50eXBlID0g
J1BhcmFtZXRyaWNHZW9tZXRyeSc7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAg
ICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgZnVuYzogZnVuYywKLSAgICAg
ICAgICAgIHNsaWNlczogc2xpY2VzLAotICAgICAgICAgICAgc3RhY2tzOiBzdGFja3MKLSAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvbmUubWF0cml4LmNvcHkoIGJvbmUubWF0
cml4V29ybGQgKTsKIAotICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IFBhcmFt
ZXRyaWNCdWZmZXJHZW9tZXRyeSggZnVuYywgc2xpY2VzLCBzdGFja3MgKSApOwotICAgICAgICB0
aGlzLm1lcmdlVmVydGljZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgfQorICAg
ICAgICAgICAgICAgICAgICBib25lLm1hdHJpeC5kZWNvbXBvc2UoIGJvbmUucG9zaXRpb24sIGJv
bmUucXVhdGVybmlvbiwgYm9uZS5zY2FsZSApOwogCi0gICAgUGFyYW1ldHJpY0dlb21ldHJ5LnBy
b3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIFBhcmFt
ZXRyaWNHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJhbWV0cmljR2VvbWV0cnk7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgLy8gUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5Cisg
ICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnkoIGZ1
bmMsIHNsaWNlcywgc3RhY2tzICkgeworICAgICAgICB9LAogCi0gICAgICAgIEJ1ZmZlckdlb21l
dHJ5LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgdXBkYXRlOiAoIGZ1bmN0aW9uICgpIHsKIAotICAg
ICAgICB0aGlzLnR5cGUgPSAnUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgICAg
IHZhciBvZmZzZXRNYXRyaXggPSBuZXcgTWF0cml4NCgpOworICAgICAgICAgICAgdmFyIGlkZW50
aXR5TWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7
Ci0gICAgICAgICAgICBmdW5jOiBmdW5jLAotICAgICAgICAgICAgc2xpY2VzOiBzbGljZXMsCi0g
ICAgICAgICAgICBzdGFja3M6IHN0YWNrcwotICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uIHVwZGF0ZSgpIHsKIAotICAgICAgICAvLyBidWZmZXJzCisgICAgICAgICAgICAg
ICAgdmFyIGJvbmVzID0gdGhpcy5ib25lczsKKyAgICAgICAgICAgICAgICB2YXIgYm9uZUludmVy
c2VzID0gdGhpcy5ib25lSW52ZXJzZXM7CisgICAgICAgICAgICAgICAgdmFyIGJvbmVNYXRyaWNl
cyA9IHRoaXMuYm9uZU1hdHJpY2VzOworICAgICAgICAgICAgICAgIHZhciBib25lVGV4dHVyZSA9
IHRoaXMuYm9uZVRleHR1cmU7CiAKLSAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKLSAgICAgICAg
dmFyIHZlcnRpY2VzID0gW107Ci0gICAgICAgIHZhciBub3JtYWxzID0gW107Ci0gICAgICAgIHZh
ciB1dnMgPSBbXTsKKyAgICAgICAgICAgICAgICAvLyBmbGF0dGVuIGJvbmUgbWF0cmljZXMgdG8g
YXJyYXkKIAotICAgICAgICB2YXIgRVBTID0gMC4wMDAwMTsKKyAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDAsIGlsID0gYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAg
ICAgdmFyIG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGNv
bXB1dGUgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgb3JpZ2luYWwgdHJh
bnNmb3JtCiAKLSAgICAgICAgdmFyIHAwID0gbmV3IFZlY3RvcjMoKSwgcDEgPSBuZXcgVmVjdG9y
MygpOwotICAgICAgICB2YXIgcHUgPSBuZXcgVmVjdG9yMygpLCBwdiA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBib25lc1sgaSBdID8gYm9uZXNbIGkg
XS5tYXRyaXhXb3JsZCA6IGlkZW50aXR5TWF0cml4OwogCi0gICAgICAgIHZhciBpLCBqOworICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggbWF0cml4LCBi
b25lSW52ZXJzZXNbIGkgXSApOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRNYXRyaXgudG9B
cnJheSggYm9uZU1hdHJpY2VzLCBpICogMTYgKTsKIAotICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0
aWNlcywgbm9ybWFscyBhbmQgdXZzCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHZhciBz
bGljZUNvdW50ID0gc2xpY2VzICsgMTsKKyAgICAgICAgICAgICAgICBpZiAoIGJvbmVUZXh0dXJl
ICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gc3RhY2tzOyBp
ICsrICkgeworICAgICAgICAgICAgICAgICAgICBib25lVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRy
dWU7CiAKLSAgICAgICAgICAgIHZhciB2ID0gaSAvIHN0YWNrczsKKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDw9IHNsaWNlczsgaiArKyApIHsKKyAgICAg
ICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICB2YXIgdSA9IGogLyBzbGljZXM7CisgICAgICAg
IH0gKSgpLAogCi0gICAgICAgICAgICAgICAgLy8gdmVydGV4CisgICAgICAgIGNsb25lOiBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICBwMCA9IGZ1bmMoIHUsIHYsIHAwICk7Ci0gICAg
ICAgICAgICAgICAgdmVydGljZXMucHVzaCggcDAueCwgcDAueSwgcDAueiApOworICAgICAgICAg
ICAgcmV0dXJuIG5ldyBTa2VsZXRvbiggdGhpcy5ib25lcywgdGhpcy5ib25lSW52ZXJzZXMgKTsK
IAotICAgICAgICAgICAgICAgIC8vIG5vcm1hbAorICAgICAgICB9LAogCi0gICAgICAgICAgICAg
ICAgLy8gYXBwcm94aW1hdGUgdGFuZ2VudCB2ZWN0b3JzIHZpYSBmaW5pdGUgZGlmZmVyZW5jZXMK
KyAgICAgICAgZ2V0Qm9uZUJ5TmFtZTogZnVuY3Rpb24gKCBuYW1lICkgewogCi0gICAgICAgICAg
ICAgICAgaWYgKCB1IC0gRVBTID49IDAgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAs
IGlsID0gdGhpcy5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICBwMSA9IGZ1bmMoIHUgLSBFUFMsIHYsIHAxICk7Ci0gICAgICAgICAgICAgICAgICAg
IHB1LnN1YlZlY3RvcnMoIHAwLCBwMSApOworICAgICAgICAgICAgICAgIHZhciBib25lID0gdGhp
cy5ib25lc1sgaSBdOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIGJvbmUubmFtZSA9PT0gbmFtZSApIHsKIAotICAgICAgICAgICAgICAgICAgICBwMSA9
IGZ1bmMoIHUgKyBFUFMsIHYsIHAxICk7Ci0gICAgICAgICAgICAgICAgICAgIHB1LnN1YlZlY3Rv
cnMoIHAxLCBwMCApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9uZTsKIAogICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggdiAtIEVQUyA+PSAwICkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHAxID0gZnVuYyggdSwgdiAtIEVQUywg
cDEgKTsKLSAgICAgICAgICAgICAgICAgICAgcHYuc3ViVmVjdG9ycyggcDAsIHAxICk7CisgICAg
ICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHAxID0gZnVuYyggdSwgdiArIEVQUywgcDEg
KTsKLSAgICAgICAgICAgICAgICAgICAgcHYuc3ViVmVjdG9ycyggcDEsIHAwICk7CisgICAgfSAp
OwogCi0gICAgICAgICAgICAgICAgfQorICAgIC8qKgorICAgICAqIEBhdXRob3IgbWlrYWVsIGVt
dGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6
Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIGlrZXJyIC8gaHR0cDovL3Zlcm9s
ZC5jb20KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIC8vIGNyb3NzIHByb2R1Y3Qgb2YgdGFu
Z2VudCB2ZWN0b3JzIHJldHVybnMgc3VyZmFjZSBub3JtYWwKKyAgICBmdW5jdGlvbiBCb25lKCkg
ewogCi0gICAgICAgICAgICAgICAgbm9ybWFsLmNyb3NzVmVjdG9ycyggcHUsIHB2ICkubm9ybWFs
aXplKCk7Ci0gICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnks
IG5vcm1hbC56ICk7CisgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAg
ICAgICAgIC8vIHV2CisgICAgICAgIHRoaXMudHlwZSA9ICdCb25lJzsKIAotICAgICAgICAgICAg
ICAgIHV2cy5wdXNoKCB1LCB2ICk7CisgICAgfQogCi0gICAgICAgICAgICB9CisgICAgQm9uZS5w
cm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5
cGUgKSwgewogCi0gICAgICAgIH0KKyAgICAgICAgY29uc3RydWN0b3I6IEJvbmUsCiAKLSAgICAg
ICAgLy8gZ2VuZXJhdGUgaW5kaWNlcworICAgICAgICBpc0JvbmU6IHRydWUKIAotICAgICAgICBm
b3IgKCBpID0gMDsgaSA8IHN0YWNrczsgaSArKyApIHsKKyAgICB9ICk7CiAKLSAgICAgICAgICAg
IGZvciAoIGogPSAwOyBqIDwgc2xpY2VzOyBqICsrICkgeworICAgIC8qKgorICAgICAqIEBhdXRo
b3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvCisgICAgICogQGF1dGhvciBhbHRl
cmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIGlrZXJyIC8g
aHR0cDovL3Zlcm9sZC5jb20KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIHZhciBhID0gaSAq
IHNsaWNlQ291bnQgKyBqOwotICAgICAgICAgICAgICAgIHZhciBiID0gaSAqIHNsaWNlQ291bnQg
KyBqICsgMTsKLSAgICAgICAgICAgICAgICB2YXIgYyA9ICggaSArIDEgKSAqIHNsaWNlQ291bnQg
KyBqICsgMTsKLSAgICAgICAgICAgICAgICB2YXIgZCA9ICggaSArIDEgKSAqIHNsaWNlQ291bnQg
KyBqOworICAgIGZ1bmN0aW9uIFNraW5uZWRNZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSB7CiAK
LSAgICAgICAgICAgICAgICAvLyBmYWNlcyBvbmUgYW5kIHR3bworICAgICAgICBNZXNoLmNhbGwo
IHRoaXMsIGdlb21ldHJ5LCBtYXRlcmlhbCApOwogCi0gICAgICAgICAgICAgICAgaW5kaWNlcy5w
dXNoKCBhLCBiLCBkICk7Ci0gICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7
CisgICAgICAgIHRoaXMudHlwZSA9ICdTa2lubmVkTWVzaCc7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5iaW5kTW9kZSA9ICdhdHRhY2hlZCc7CisgICAgICAgIHRoaXMuYmluZE1hdHJp
eCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgIHRoaXMuYmluZE1hdHJpeEludmVyc2UgPSBuZXcg
TWF0cml4NCgpOwogCi0gICAgICAgIH0KKyAgICAgICAgdmFyIGJvbmVzID0gdGhpcy5pbml0Qm9u
ZXMoKTsKKyAgICAgICAgdmFyIHNrZWxldG9uID0gbmV3IFNrZWxldG9uKCBib25lcyApOwogCi0g
ICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CisgICAgICAgIHRoaXMuYmluZCggc2tlbGV0b24sIHRo
aXMubWF0cml4V29ybGQgKTsKIAotICAgICAgICB0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7Ci0g
ICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0
dHJpYnV0ZSggdmVydGljZXMsIDMgKSApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25v
cm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTsKLSAgICAg
ICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1
dnMsIDIgKSApOworICAgICAgICB0aGlzLm5vcm1hbGl6ZVNraW5XZWlnaHRzKCk7CiAKICAgICB9
CiAKLSAgICBQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0
ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgUGFyYW1ldHJpY0J1ZmZlckdlb21l
dHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeTsKLQot
ICAgIC8qKgotICAgICAqIEBhdXRob3IgY2xvY2t3b3JrZ2VlayAvIGh0dHBzOi8vZ2l0aHViLmNv
bS9jbG9ja3dvcmtnZWVrCi0gICAgICogQGF1dGhvciB0aW1vdGh5cHJhdGxleSAvIGh0dHBzOi8v
Z2l0aHViLmNvbS90aW1vdGh5cHJhdGxleQotICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBo
dHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleQotICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0
dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0gICAgICovCi0KLSAgICAvLyBQb2x5aGVkcm9uR2Vv
bWV0cnkKLQotICAgIGZ1bmN0aW9uIFBvbHloZWRyb25HZW9tZXRyeSggdmVydGljZXMsIGluZGlj
ZXMsIHJhZGl1cywgZGV0YWlsICkgewotCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsK
KyAgICBTa2lubmVkTWVzaC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRl
KCBNZXNoLnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1BvbHloZWRyb25H
ZW9tZXRyeSc7CisgICAgICAgIGNvbnN0cnVjdG9yOiBTa2lubmVkTWVzaCwKIAotICAgICAgICB0
aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAgICB2ZXJ0aWNlczogdmVydGljZXMsCi0gICAg
ICAgICAgICBpbmRpY2VzOiBpbmRpY2VzLAotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCi0g
ICAgICAgICAgICBkZXRhaWw6IGRldGFpbAotICAgICAgICB9OworICAgICAgICBpc1NraW5uZWRN
ZXNoOiB0cnVlLAogCi0gICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgUG9seWhl
ZHJvbkJ1ZmZlckdlb21ldHJ5KCB2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwgKSAp
OwotICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKKyAgICAgICAgaW5pdEJvbmVzOiBmdW5j
dGlvbiAoKSB7CiAKLSAgICB9CisgICAgICAgICAgICB2YXIgYm9uZXMgPSBbXSwgYm9uZSwgZ2Jv
bmU7CisgICAgICAgICAgICB2YXIgaSwgaWw7CiAKLSAgICBQb2x5aGVkcm9uR2VvbWV0cnkucHJv
dG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgUG9seWhl
ZHJvbkdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvbHloZWRyb25HZW9tZXRyeTsK
KyAgICAgICAgICAgIGlmICggdGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmJvbmVzICE9
PSB1bmRlZmluZWQgKSB7CiAKLSAgICAvLyBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkKKyAgICAg
ICAgICAgICAgICAvLyBmaXJzdCwgY3JlYXRlIGFycmF5IG9mICdCb25lJyBvYmplY3RzIGZyb20g
Z2VvbWV0cnkgZGF0YQogCi0gICAgZnVuY3Rpb24gUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCB2
ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwgKSB7CisgICAgICAgICAgICAgICAgZm9y
ICggaSA9IDAsIGlsID0gdGhpcy5nZW9tZXRyeS5ib25lcy5sZW5ndGg7IGkgPCBpbDsgaSArKyAp
IHsKIAotICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAg
ICAgICAgIGdib25lID0gdGhpcy5nZW9tZXRyeS5ib25lc1sgaSBdOwogCi0gICAgICAgIHRoaXMu
dHlwZSA9ICdQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnknOworICAgICAgICAgICAgICAgICAgICAv
LyBjcmVhdGUgbmV3ICdCb25lJyBvYmplY3QKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7
Ci0gICAgICAgICAgICB2ZXJ0aWNlczogdmVydGljZXMsCi0gICAgICAgICAgICBpbmRpY2VzOiBp
bmRpY2VzLAotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCi0gICAgICAgICAgICBkZXRhaWw6
IGRldGFpbAotICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBib25lID0gbmV3IEJvbmUo
KTsKKyAgICAgICAgICAgICAgICAgICAgYm9uZXMucHVzaCggYm9uZSApOwogCi0gICAgICAgIHJh
ZGl1cyA9IHJhZGl1cyB8fCAxOwotICAgICAgICBkZXRhaWwgPSBkZXRhaWwgfHwgMDsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYXBwbHkgdmFsdWVzCiAKLSAgICAgICAgLy8gZGVmYXVsdCBidWZm
ZXIgZGF0YQorICAgICAgICAgICAgICAgICAgICBib25lLm5hbWUgPSBnYm9uZS5uYW1lOworICAg
ICAgICAgICAgICAgICAgICBib25lLnBvc2l0aW9uLmZyb21BcnJheSggZ2JvbmUucG9zICk7Cisg
ICAgICAgICAgICAgICAgICAgIGJvbmUucXVhdGVybmlvbi5mcm9tQXJyYXkoIGdib25lLnJvdHEg
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBnYm9uZS5zY2wgIT09IHVuZGVmaW5lZCApIGJv
bmUuc2NhbGUuZnJvbUFycmF5KCBnYm9uZS5zY2wgKTsKIAotICAgICAgICB2YXIgdmVydGV4QnVm
ZmVyID0gW107Ci0gICAgICAgIHZhciB1dkJ1ZmZlciA9IFtdOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAvLyB0aGUgc3ViZGl2aXNpb24gY3JlYXRlcyB0aGUgdmVydGV4IGJ1ZmZlciBk
YXRhCisgICAgICAgICAgICAgICAgLy8gc2Vjb25kLCBjcmVhdGUgYm9uZSBoaWVyYXJjaHkKIAot
ICAgICAgICBzdWJkaXZpZGUoIGRldGFpbCApOworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAw
LCBpbCA9IHRoaXMuZ2VvbWV0cnkuYm9uZXMubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAg
ICAgICAgLy8gYWxsIHZlcnRpY2VzIHNob3VsZCBsaWUgb24gYSBjb25jZXB0dWFsIHNwaGVyZSB3
aXRoIGEgZ2l2ZW4gcmFkaXVzCisgICAgICAgICAgICAgICAgICAgIGdib25lID0gdGhpcy5nZW9t
ZXRyeS5ib25lc1sgaSBdOwogCi0gICAgICAgIGFwcHBseVJhZGl1cyggcmFkaXVzICk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggKCBnYm9uZS5wYXJlbnQgIT09IC0gMSApICYmICggZ2JvbmUu
cGFyZW50ICE9PSBudWxsICkgJiYgKCBib25lc1sgZ2JvbmUucGFyZW50IF0gIT09IHVuZGVmaW5l
ZCApICkgewogCi0gICAgICAgIC8vIGZpbmFsbHksIGNyZWF0ZSB0aGUgdXYgZGF0YQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc3Vic2VxdWVudCBib25lcyBpbiB0aGUgaGllcmFyY2h5CiAK
LSAgICAgICAgZ2VuZXJhdGVVVnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvbmVzWyBn
Ym9uZS5wYXJlbnQgXS5hZGQoIGJvbmVzWyBpIF0gKTsKIAotICAgICAgICAvLyBidWlsZCBub24t
aW5kZXhlZCBnZW9tZXRyeQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAg
IHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0
ZSggdmVydGV4QnVmZmVyLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3Jt
YWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGV4QnVmZmVyLnNsaWNlKCksIDMg
KSApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJB
dHRyaWJ1dGUoIHV2QnVmZmVyLCAyICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRv
cG1vc3QgYm9uZSwgaW1tZWRpYXRlIGNoaWxkIG9mIHRoZSBza2lubmVkIG1lc2gKIAotICAgICAg
ICBpZiAoIGRldGFpbCA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRk
KCBib25lc1sgaSBdICk7CiAKLSAgICAgICAgICAgIHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMo
KTsgLy8gZmxhdCBub3JtYWxzCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVOb3Jt
YWxzKCk7IC8vIHNtb290aCBub3JtYWxzCisgICAgICAgICAgICB9CiAKLSAgICAgICAgfQorICAg
ICAgICAgICAgLy8gbm93IHRoZSBib25lcyBhcmUgcGFydCBvZiB0aGUgc2NlbmUgZ3JhcGggYW5k
IGNoaWxkcmVuIG9mIHRoZSBza2lubmVkIG1lc2guCisgICAgICAgICAgICAvLyBsZXQncyB1cGRh
dGUgdGhlIGNvcnJlc3BvbmRpbmcgbWF0cmljZXMKIAotICAgICAgICAvLyBoZWxwZXIgZnVuY3Rp
b25zCisgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCB0cnVlICk7CiAKLSAgICAg
ICAgZnVuY3Rpb24gc3ViZGl2aWRlKCBkZXRhaWwgKSB7CisgICAgICAgICAgICByZXR1cm4gYm9u
ZXM7CiAKLSAgICAgICAgICAgIHZhciBhID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZh
ciBiID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBjID0gbmV3IFZlY3RvcjMoKTsK
KyAgICAgICAgfSwKIAotICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBmYWNlcyBhbmQg
YXBwbHkgYSBzdWJkaXZpc29uIHdpdGggdGhlIGdpdmVuIGRldGFpbCB2YWx1ZQorICAgICAgICBi
aW5kOiBmdW5jdGlvbiAoIHNrZWxldG9uLCBiaW5kTWF0cml4ICkgewogCi0gICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzICkgeworICAgICAgICAg
ICAgdGhpcy5za2VsZXRvbiA9IHNrZWxldG9uOwogCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRo
ZSB2ZXJ0aWNlcyBvZiB0aGUgZmFjZQorICAgICAgICAgICAgaWYgKCBiaW5kTWF0cml4ID09PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBnZXRWZXJ0ZXhCeUluZGV4KCBpbmRpY2Vz
WyBpICsgMCBdLCBhICk7Ci0gICAgICAgICAgICAgICAgZ2V0VmVydGV4QnlJbmRleCggaW5kaWNl
c1sgaSArIDEgXSwgYiApOwotICAgICAgICAgICAgICAgIGdldFZlcnRleEJ5SW5kZXgoIGluZGlj
ZXNbIGkgKyAyIF0sIGMgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeFdvcmxk
KCB0cnVlICk7CiAKLSAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIHN1YmRpdmlzaW9uCisgICAg
ICAgICAgICAgICAgdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpOwogCi0gICAgICAg
ICAgICAgICAgc3ViZGl2aWRlRmFjZSggYSwgYiwgYywgZGV0YWlsICk7CisgICAgICAgICAgICAg
ICAgYmluZE1hdHJpeCA9IHRoaXMubWF0cml4V29ybGQ7CiAKICAgICAgICAgICAgIH0KIAotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc3ViZGl2aWRlRmFjZSggYSwgYiwgYywgZGV0YWls
ICkgeworICAgICAgICAgICAgdGhpcy5iaW5kTWF0cml4LmNvcHkoIGJpbmRNYXRyaXggKTsKKyAg
ICAgICAgICAgIHRoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZSggYmluZE1hdHJpeCAp
OwogCi0gICAgICAgICAgICB2YXIgY29scyA9IE1hdGgucG93KCAyLCBkZXRhaWwgKTsKKyAgICAg
ICAgfSwKIAotICAgICAgICAgICAgLy8gd2UgdXNlIHRoaXMgbXVsdGlkaW1lbnNpb25hbCBhcnJh
eSBhcyBhIGRhdGEgc3RydWN0dXJlIGZvciBjcmVhdGluZyB0aGUgc3ViZGl2aXNpb24KKyAgICAg
ICAgcG9zZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB2YXIgdiA9IFtdOworICAgICAg
ICAgICAgdGhpcy5za2VsZXRvbi5wb3NlKCk7CiAKLSAgICAgICAgICAgIHZhciBpLCBqOworICAg
ICAgICB9LAogCi0gICAgICAgICAgICAvLyBjb25zdHJ1Y3QgYWxsIG9mIHRoZSB2ZXJ0aWNlcyBm
b3IgdGhpcyBzdWJkaXZpc2lvbgorICAgICAgICBub3JtYWxpemVTa2luV2VpZ2h0czogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSBjb2xzOyBpICsrICkgewor
ICAgICAgICAgICAgdmFyIHNjYWxlLCBpOwogCi0gICAgICAgICAgICAgICAgdlsgaSBdID0gW107
CisgICAgICAgICAgICBpZiAoIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5pc0dlb21l
dHJ5ICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGFqID0gYS5jbG9uZSgpLmxlcnAoIGMsIGkg
LyBjb2xzICk7Ci0gICAgICAgICAgICAgICAgdmFyIGJqID0gYi5jbG9uZSgpLmxlcnAoIGMsIGkg
LyBjb2xzICk7CisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCB0aGlzLmdlb21ldHJ5
LnNraW5XZWlnaHRzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIHZhciByb3dz
ID0gY29scyAtIGk7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdyA9IHRoaXMuZ2VvbWV0cnku
c2tpbldlaWdodHNbIGkgXTsKIAotICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDw9IHJv
d3M7IGogKysgKSB7CisgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gc3cubWFuaGF0
dGFuTGVuZ3RoKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBqID09PSAwICYmIGkgPT09
IGNvbHMgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggc2NhbGUgIT09IEluZmluaXR5ICkg
ewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2WyBpIF1bIGogXSA9IGFqOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3cubXVsdGlwbHlTY2FsYXIoIHNjYWxlICk7CiAKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdlsgaSBdWyBqIF0g
PSBhai5jbG9uZSgpLmxlcnAoIGJqLCBqIC8gcm93cyApOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3cuc2V0KCAxLCAwLCAwLCAwICk7IC8vIGRvIHNvbWV0aGluZyByZWFzb25hYmxlCiAKICAg
ICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmdlb21ldHJ5ICYmIHRoaXMuZ2VvbWV0cnku
aXNCdWZmZXJHZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgLy8gY29uc3RydWN0IGFsbCBvZiB0
aGUgZmFjZXMKKyAgICAgICAgICAgICAgICB2YXIgdmVjID0gbmV3IFZlY3RvcjQoKTsKIAotICAg
ICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjb2xzOyBpICsrICkgeworICAgICAgICAgICAgICAg
IHZhciBza2luV2VpZ2h0ID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7CiAK
LSAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDIgKiAoIGNvbHMgLSBpICkgLSAxOyBq
ICsrICkgeworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2tpbldlaWdodC5jb3Vu
dDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgayA9IE1hdGguZmxvb3IoIGog
LyAyICk7CisgICAgICAgICAgICAgICAgICAgIHZlYy54ID0gc2tpbldlaWdodC5nZXRYKCBpICk7
CisgICAgICAgICAgICAgICAgICAgIHZlYy55ID0gc2tpbldlaWdodC5nZXRZKCBpICk7CisgICAg
ICAgICAgICAgICAgICAgIHZlYy56ID0gc2tpbldlaWdodC5nZXRaKCBpICk7CisgICAgICAgICAg
ICAgICAgICAgIHZlYy53ID0gc2tpbldlaWdodC5nZXRXKCBpICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqICUgMiA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAx
LjAgLyB2ZWMubWFuaGF0dGFuTGVuZ3RoKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2hWZXJ0ZXgoIHZbIGkgXVsgayArIDEgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aFZlcnRleCggdlsgaSArIDEgXVsgayBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNo
VmVydGV4KCB2WyBpIF1bIGsgXSApOworICAgICAgICAgICAgICAgICAgICBpZiAoIHNjYWxlICE9
PSBJbmZpbml0eSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmVjLm11bHRpcGx5U2Nh
bGFyKCBzY2FsZSApOwogCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2hWZXJ0ZXgoIHZbIGkgXVsgayArIDEgXSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaFZlcnRleCggdlsgaSArIDEgXVsgayArIDEgXSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaFZlcnRleCggdlsgaSArIDEgXVsgayBdICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2ZWMuc2V0KCAxLCAwLCAwLCAwICk7IC8vIGRvIHNvbWV0aGluZyBy
ZWFzb25hYmxlCiAKICAgICAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgICAg
IHNraW5XZWlnaHQuc2V0WFlaVyggaSwgdmVjLngsIHZlYy55LCB2ZWMueiwgdmVjLncgKTsKKwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAgICAg
fSwKIAotICAgICAgICBmdW5jdGlvbiBhcHBwbHlSYWRpdXMoIHJhZGl1cyApIHsKKyAgICAgICAg
dXBkYXRlTWF0cml4V29ybGQ6IGZ1bmN0aW9uICggZm9yY2UgKSB7CiAKLSAgICAgICAgICAgIHZh
ciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgTWVzaC5wcm90b3R5cGUudXBk
YXRlTWF0cml4V29ybGQuY2FsbCggdGhpcywgZm9yY2UgKTsKIAotICAgICAgICAgICAgLy8gaXRl
cmF0ZSBvdmVyIHRoZSBlbnRpcmUgYnVmZmVyIGFuZCBhcHBseSB0aGUgcmFkaXVzIHRvIGVhY2gg
dmVydGV4CisgICAgICAgICAgICBpZiAoIHRoaXMuYmluZE1vZGUgPT09ICdhdHRhY2hlZCcgKSB7
CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHZlcnRleEJ1ZmZlci5sZW5ndGg7
IGkgKz0gMyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldElu
dmVyc2UoIHRoaXMubWF0cml4V29ybGQgKTsKIAotICAgICAgICAgICAgICAgIHZlcnRleC54ID0g
dmVydGV4QnVmZmVyWyBpICsgMCBdOwotICAgICAgICAgICAgICAgIHZlcnRleC55ID0gdmVydGV4
QnVmZmVyWyBpICsgMSBdOwotICAgICAgICAgICAgICAgIHZlcnRleC56ID0gdmVydGV4QnVmZmVy
WyBpICsgMiBdOworICAgICAgICAgICAgfSBlbHNlIGlmICggdGhpcy5iaW5kTW9kZSA9PT0gJ2Rl
dGFjaGVkJyApIHsKIAotICAgICAgICAgICAgICAgIHZlcnRleC5ub3JtYWxpemUoKS5tdWx0aXBs
eVNjYWxhciggcmFkaXVzICk7CisgICAgICAgICAgICAgICAgdGhpcy5iaW5kTWF0cml4SW52ZXJz
ZS5nZXRJbnZlcnNlKCB0aGlzLmJpbmRNYXRyaXggKTsKIAotICAgICAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlclsgaSArIDAgXSA9IHZlcnRleC54OwotICAgICAgICAgICAgICAgIHZlcnRleEJ1ZmZl
clsgaSArIDEgXSA9IHZlcnRleC55OwotICAgICAgICAgICAgICAgIHZlcnRleEJ1ZmZlclsgaSAr
IDIgXSA9IHZlcnRleC56OworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAg
IGNvbnNvbGUud2FybiggJ1RIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6
ICcgKyB0aGlzLmJpbmRNb2RlICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICB9CisgICAg
ICAgIH0sCiAKLSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVVVnMoKSB7CisgICAgICAgIGNsb25l
OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmdlb21ldHJ5
LCB0aGlzLm1hdGVyaWFsICkuY29weSggdGhpcyApOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDMgKSB7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHZlcnRleC54ID0gdmVydGV4QnVmZmVyWyBpICsgMCBdOwotICAgICAg
ICAgICAgICAgIHZlcnRleC55ID0gdmVydGV4QnVmZmVyWyBpICsgMSBdOwotICAgICAgICAgICAg
ICAgIHZlcnRleC56ID0gdmVydGV4QnVmZmVyWyBpICsgMiBdOworICAgIH0gKTsKIAotICAgICAg
ICAgICAgICAgIHZhciB1ID0gYXppbXV0aCggdmVydGV4ICkgLyAyIC8gTWF0aC5QSSArIDAuNTsK
LSAgICAgICAgICAgICAgICB2YXIgdiA9IGluY2xpbmF0aW9uKCB2ZXJ0ZXggKSAvIE1hdGguUEkg
KyAwLjU7Ci0gICAgICAgICAgICAgICAgdXZCdWZmZXIucHVzaCggdSwgMSAtIHYgKTsKKyAgICAv
KioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBh
dXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICoKKyAgICAg
KiBwYXJhbWV0ZXJzID0geworICAgICAqICBjb2xvcjogPGhleD4sCisgICAgICogIG9wYWNpdHk6
IDxmbG9hdD4sCisgICAgICoKKyAgICAgKiAgbGluZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqICBs
aW5lY2FwOiAicm91bmQiLAorICAgICAqICBsaW5lam9pbjogInJvdW5kIgorICAgICAqIH0KKyAg
ICAgKi8KIAotICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIExpbmVCYXNpY01hdGVyaWFsKCBw
YXJhbWV0ZXJzICkgewogCi0gICAgICAgICAgICBjb3JyZWN0VVZzKCk7CisgICAgICAgIE1hdGVy
aWFsLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgY29ycmVjdFNlYW0oKTsKKyAgICAgICAg
dGhpcy50eXBlID0gJ0xpbmVCYXNpY01hdGVyaWFsJzsKIAotICAgICAgICB9CisgICAgICAgIHRo
aXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7CiAKLSAgICAgICAgZnVuY3Rpb24gY29y
cmVjdFNlYW0oKSB7CisgICAgICAgIHRoaXMubGluZXdpZHRoID0gMTsKKyAgICAgICAgdGhpcy5s
aW5lY2FwID0gJ3JvdW5kJzsKKyAgICAgICAgdGhpcy5saW5lam9pbiA9ICdyb3VuZCc7CiAKLSAg
ICAgICAgICAgIC8vIGhhbmRsZSBjYXNlIHdoZW4gZmFjZSBzdHJhZGRsZXMgdGhlIHNlYW0sIHNl
ZSAjMzI2OQorICAgICAgICB0aGlzLmxpZ2h0cyA9IGZhbHNlOwogCi0gICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCB1dkJ1ZmZlci5sZW5ndGg7IGkgKz0gNiApIHsKKyAgICAgICAgdGhp
cy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTsKIAotICAgICAgICAgICAgICAgIC8vIHV2IGRhdGEg
b2YgYSBzaW5nbGUgZmFjZQorICAgIH0KIAotICAgICAgICAgICAgICAgIHZhciB4MCA9IHV2QnVm
ZmVyWyBpICsgMCBdOwotICAgICAgICAgICAgICAgIHZhciB4MSA9IHV2QnVmZmVyWyBpICsgMiBd
OwotICAgICAgICAgICAgICAgIHZhciB4MiA9IHV2QnVmZmVyWyBpICsgNCBdOworICAgIExpbmVC
YXNpY01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlw
ZSApOworICAgIExpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExpbmVC
YXNpY01hdGVyaWFsOwogCi0gICAgICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KCB4MCwg
eDEsIHgyICk7Ci0gICAgICAgICAgICAgICAgdmFyIG1pbiA9IE1hdGgubWluKCB4MCwgeDEsIHgy
ICk7CisgICAgTGluZUJhc2ljTWF0ZXJpYWwucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWwg
PSB0cnVlOwogCi0gICAgICAgICAgICAgICAgLy8gMC45IGlzIHNvbWV3aGF0IGFyYml0cmFyeQor
ICAgIExpbmVCYXNpY01hdGVyaWFsLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2Ug
KSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1heCA+IDAuOSAmJiBtaW4gPCAwLjEgKSB7Cisg
ICAgICAgIE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0g
ICAgICAgICAgICAgICAgICAgIGlmICggeDAgPCAwLjIgKSB1dkJ1ZmZlclsgaSArIDAgXSArPSAx
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIHgxIDwgMC4yICkgdXZCdWZmZXJbIGkgKyAyIF0g
Kz0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB4MiA8IDAuMiApIHV2QnVmZmVyWyBpICsg
NCBdICs9IDE7CisgICAgICAgIHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMubGluZXdpZHRoID0gc291cmNlLmxpbmV3aWR0
aDsKKyAgICAgICAgdGhpcy5saW5lY2FwID0gc291cmNlLmxpbmVjYXA7CisgICAgICAgIHRoaXMu
bGluZWpvaW4gPSBzb3VyY2UubGluZWpvaW47CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXM7CiAKLSAgICAgICAgfQorICAgIH07CiAKLSAgICAgICAgZnVuY3Rpb24gcHVzaFZl
cnRleCggdmVydGV4ICkgeworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDov
L21yZG9vYi5jb20vCisgICAgICovCiAKLSAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5wdXNoKCB2
ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CisgICAgZnVuY3Rpb24gTGluZSggZ2VvbWV0
cnksIG1hdGVyaWFsLCBtb2RlICkgeworCisgICAgICAgIGlmICggbW9kZSA9PT0gMSApIHsKKwor
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTGluZTogcGFyYW1ldGVyIFRIUkVFLkxp
bmVQaWVjZXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gQ3JlYXRlZCBUSFJFRS5MaW5lU2VnbWVudHMg
aW5zdGVhZC4nICk7CisgICAgICAgICAgICByZXR1cm4gbmV3IExpbmVTZWdtZW50cyggZ2VvbWV0
cnksIG1hdGVyaWFsICk7CiAKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGdldFZlcnRl
eEJ5SW5kZXgoIGluZGV4LCB2ZXJ0ZXggKSB7CisgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMg
KTsKIAotICAgICAgICAgICAgdmFyIHN0cmlkZSA9IGluZGV4ICogMzsKKyAgICAgICAgdGhpcy50
eXBlID0gJ0xpbmUnOwogCi0gICAgICAgICAgICB2ZXJ0ZXgueCA9IHZlcnRpY2VzWyBzdHJpZGUg
KyAwIF07Ci0gICAgICAgICAgICB2ZXJ0ZXgueSA9IHZlcnRpY2VzWyBzdHJpZGUgKyAxIF07Ci0g
ICAgICAgICAgICB2ZXJ0ZXgueiA9IHZlcnRpY2VzWyBzdHJpZGUgKyAyIF07CisgICAgICAgIHRo
aXMuZ2VvbWV0cnkgPSBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkID8gZ2VvbWV0cnkgOiBuZXcgQnVm
ZmVyR2VvbWV0cnkoKTsKKyAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsICE9PSB1bmRl
ZmluZWQgPyBtYXRlcmlhbCA6IG5ldyBMaW5lQmFzaWNNYXRlcmlhbCggeyBjb2xvcjogTWF0aC5y
YW5kb20oKSAqIDB4ZmZmZmZmIH0gKTsKIAotICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGZ1
bmN0aW9uIGNvcnJlY3RVVnMoKSB7CisgICAgTGluZS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWdu
KCBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICB2
YXIgYSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgYiA9IG5ldyBWZWN0b3IzKCk7
Ci0gICAgICAgICAgICB2YXIgYyA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIGNvbnN0cnVjdG9y
OiBMaW5lLAogCi0gICAgICAgICAgICB2YXIgY2VudHJvaWQgPSBuZXcgVmVjdG9yMygpOworICAg
ICAgICBpc0xpbmU6IHRydWUsCiAKLSAgICAgICAgICAgIHZhciB1dkEgPSBuZXcgVmVjdG9yMigp
OwotICAgICAgICAgICAgdmFyIHV2QiA9IG5ldyBWZWN0b3IyKCk7Ci0gICAgICAgICAgICB2YXIg
dXZDID0gbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgY29tcHV0ZUxpbmVEaXN0YW5jZXM6ICggZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSAwOyBpIDwgdmVy
dGV4QnVmZmVyLmxlbmd0aDsgaSArPSA5LCBqICs9IDYgKSB7CisgICAgICAgICAgICB2YXIgc3Rh
cnQgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBWZWN0b3IzKCk7
CiAKLSAgICAgICAgICAgICAgICBhLnNldCggdmVydGV4QnVmZmVyWyBpICsgMCBdLCB2ZXJ0ZXhC
dWZmZXJbIGkgKyAxIF0sIHZlcnRleEJ1ZmZlclsgaSArIDIgXSApOwotICAgICAgICAgICAgICAg
IGIuc2V0KCB2ZXJ0ZXhCdWZmZXJbIGkgKyAzIF0sIHZlcnRleEJ1ZmZlclsgaSArIDQgXSwgdmVy
dGV4QnVmZmVyWyBpICsgNSBdICk7Ci0gICAgICAgICAgICAgICAgYy5zZXQoIHZlcnRleEJ1ZmZl
clsgaSArIDYgXSwgdmVydGV4QnVmZmVyWyBpICsgNyBdLCB2ZXJ0ZXhCdWZmZXJbIGkgKyA4IF0g
KTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlTGluZURpc3RhbmNlcygpIHsK
IAotICAgICAgICAgICAgICAgIHV2QS5zZXQoIHV2QnVmZmVyWyBqICsgMCBdLCB1dkJ1ZmZlclsg
aiArIDEgXSApOwotICAgICAgICAgICAgICAgIHV2Qi5zZXQoIHV2QnVmZmVyWyBqICsgMiBdLCB1
dkJ1ZmZlclsgaiArIDMgXSApOwotICAgICAgICAgICAgICAgIHV2Qy5zZXQoIHV2QnVmZmVyWyBq
ICsgNCBdLCB1dkJ1ZmZlclsgaiArIDUgXSApOworICAgICAgICAgICAgICAgIHZhciBnZW9tZXRy
eSA9IHRoaXMuZ2VvbWV0cnk7CiAKLSAgICAgICAgICAgICAgICBjZW50cm9pZC5jb3B5KCBhICku
YWRkKCBiICkuYWRkKCBjICkuZGl2aWRlU2NhbGFyKCAzICk7CisgICAgICAgICAgICAgICAgaWYg
KCBnZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5ICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGF6
aSA9IGF6aW11dGgoIGNlbnRyb2lkICk7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFzc3Vt
ZSBub24taW5kZXhlZCBnZW9tZXRyeQogCi0gICAgICAgICAgICAgICAgY29ycmVjdFVWKCB1dkEs
IGogKyAwLCBhLCBhemkgKTsKLSAgICAgICAgICAgICAgICBjb3JyZWN0VVYoIHV2QiwgaiArIDIs
IGIsIGF6aSApOwotICAgICAgICAgICAgICAgIGNvcnJlY3RVViggdXZDLCBqICsgNCwgYywgYXpp
ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuaW5kZXggPT09IG51bGwgKSB7
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbkF0
dHJpYnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbGluZURpc3RhbmNlcyA9IFsgMCBdOwogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMSwgbCA9IHBvc2l0aW9uQXR0cmlidXRlLmNv
dW50OyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICBmdW5jdGlvbiBjb3JyZWN0VVYoIHV2LCBz
dHJpZGUsIHZlY3RvciwgYXppbXV0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydC5mcm9tQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbkF0dHJpYnV0ZSwgaSAtIDEgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRp
b25BdHRyaWJ1dGUsIGkgKTsKIAotICAgICAgICAgICAgaWYgKCAoIGF6aW11dGggPCAwICkgJiYg
KCB1di54ID09PSAxICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZURpc3Rh
bmNlc1sgaSBdID0gbGluZURpc3RhbmNlc1sgaSAtIDEgXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lRGlzdGFuY2VzWyBpIF0gKz0gc3RhcnQuZGlzdGFuY2VUbyggZW5kICk7CiAK
LSAgICAgICAgICAgICAgICB1dkJ1ZmZlclsgc3RyaWRlIF0gPSB1di54IC0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCAnbGluZURpc3RhbmNlJywgbmV3IEZsb2F0MzJCdWZm
ZXJBdHRyaWJ1dGUoIGxpbmVEaXN0YW5jZXMsIDEgKSApOwogCi0gICAgICAgICAgICBpZiAoICgg
dmVjdG9yLnggPT09IDAgKSAmJiAoIHZlY3Rvci56ID09PSAwICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB1dkJ1ZmZlclsgc3RyaWRlIF0gPSBh
emltdXRoIC8gMiAvIE1hdGguUEkgKyAwLjU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oICdUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9u
IG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4nICk7CiAKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBnZW9tZXRyeS5pc0dlb21ldHJ5ICkgewogCi0gICAgICAgIC8v
IEFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzLCBjb3VudGVyLWNsb2Nrd2lzZSB3aGVuIGxvb2tpbmcg
ZnJvbSBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gZ2VvbWV0cnku
dmVydGljZXM7CisgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lRGlzdGFuY2VzID0gZ2VvbWV0
cnkubGluZURpc3RhbmNlczsKIAotICAgICAgICBmdW5jdGlvbiBhemltdXRoKCB2ZWN0b3IgKSB7
CisgICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0YW5jZXNbIDAgXSA9IDA7CiAKLSAgICAgICAg
ICAgIHJldHVybiBNYXRoLmF0YW4yKCB2ZWN0b3IueiwgLSB2ZWN0b3IueCApOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDEsIGwgPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBsOyBp
ICsrICkgewogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0YW5j
ZXNbIGkgXSA9IGxpbmVEaXN0YW5jZXNbIGkgLSAxIF07CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lRGlzdGFuY2VzWyBpIF0gKz0gdmVydGljZXNbIGkgLSAxIF0uZGlzdGFuY2VUbyggdmVy
dGljZXNbIGkgXSApOwogCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAvLyBBbmds
ZSBhYm92ZSB0aGUgWFogcGxhbmUuCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0
aW9uIGluY2xpbmF0aW9uKCB2ZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICAgICAgICAgIHJldHVybiBNYXRoLmF0YW4yKCAtIHZlY3Rvci55LCBNYXRoLnNxcnQo
ICggdmVjdG9yLnggKiB2ZWN0b3IueCApICsgKCB2ZWN0b3IueiAqIHZlY3Rvci56ICkgKSApOwor
ICAgICAgICAgICAgfTsKIAotICAgICAgICB9CisgICAgICAgIH0oKSApLAogCi0gICAgfQorICAg
ICAgICByYXljYXN0OiAoIGZ1bmN0aW9uICgpIHsKIAotICAgIFBvbHloZWRyb25CdWZmZXJHZW9t
ZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUg
KTsKLSAgICBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
UG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OworICAgICAgICAgICAgdmFyIGludmVyc2VNYXRyaXgg
PSBuZXcgTWF0cml4NCgpOworICAgICAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTsKKyAgICAg
ICAgICAgIHZhciBzcGhlcmUgPSBuZXcgU3BoZXJlKCk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0
aG9yIHRpbW90aHlwcmF0bGV5IC8gaHR0cHM6Ly9naXRodWIuY29tL3RpbW90aHlwcmF0bGV5Ci0g
ICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKLSAgICAg
Ki8KKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByYXljYXN0KCByYXljYXN0ZXIsIGludGVy
c2VjdHMgKSB7CiAKLSAgICAvLyBUZXRyYWhlZHJvbkdlb21ldHJ5CisgICAgICAgICAgICAgICAg
dmFyIHByZWNpc2lvbiA9IHJheWNhc3Rlci5saW5lUHJlY2lzaW9uOworICAgICAgICAgICAgICAg
IHZhciBwcmVjaXNpb25TcSA9IHByZWNpc2lvbiAqIHByZWNpc2lvbjsKIAotICAgIGZ1bmN0aW9u
IFRldHJhaGVkcm9uR2VvbWV0cnkoIHJhZGl1cywgZGV0YWlsICkgeworICAgICAgICAgICAgICAg
IHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7CisgICAgICAgICAgICAgICAgdmFyIG1hdHJp
eFdvcmxkID0gdGhpcy5tYXRyaXhXb3JsZDsKIAotICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlz
ICk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2tpbmcgYm91bmRpbmdTcGhlcmUgZGlzdGFuY2Ug
dG8gcmF5CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1RldHJhaGVkcm9uR2VvbWV0cnknOworICAg
ICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUgPT09IG51bGwgKSBnZW9t
ZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMg
PSB7Ci0gICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKLSAgICAgICAgICAgIGRldGFpbDogZGV0
YWlsCi0gICAgICAgIH07CisgICAgICAgICAgICAgICAgc3BoZXJlLmNvcHkoIGdlb21ldHJ5LmJv
dW5kaW5nU3BoZXJlICk7CisgICAgICAgICAgICAgICAgc3BoZXJlLmFwcGx5TWF0cml4NCggbWF0
cml4V29ybGQgKTsKIAotICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IFRldHJh
aGVkcm9uQnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgZGV0YWlsICkgKTsKLSAgICAgICAgdGhpcy5t
ZXJnZVZlcnRpY2VzKCk7CisgICAgICAgICAgICAgICAgaWYgKCByYXljYXN0ZXIucmF5LmludGVy
c2VjdHNTcGhlcmUoIHNwaGVyZSApID09PSBmYWxzZSApIHJldHVybjsKIAotICAgIH0KKyAgICAg
ICAgICAgICAgICAvLwogCi0gICAgVGV0cmFoZWRyb25HZW9tZXRyeS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAgICBUZXRyYWhlZHJvbkdlb21ldHJ5
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRldHJhaGVkcm9uR2VvbWV0cnk7CisgICAgICAgICAg
ICAgICAgaW52ZXJzZU1hdHJpeC5nZXRJbnZlcnNlKCBtYXRyaXhXb3JsZCApOworICAgICAgICAg
ICAgICAgIHJheS5jb3B5KCByYXljYXN0ZXIucmF5ICkuYXBwbHlNYXRyaXg0KCBpbnZlcnNlTWF0
cml4ICk7CiAKLSAgICAvLyBUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5CisgICAgICAgICAgICAg
ICAgdmFyIHZTdGFydCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgdmFyIHZFbmQg
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgICAgIHZhciBpbnRlclNlZ21lbnQgPSBuZXcg
VmVjdG9yMygpOworICAgICAgICAgICAgICAgIHZhciBpbnRlclJheSA9IG5ldyBWZWN0b3IzKCk7
CisgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSAoIHRoaXMgJiYgdGhpcy5pc0xpbmVTZWdtZW50
cyApID8gMiA6IDE7CiAKLSAgICBmdW5jdGlvbiBUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCBy
YWRpdXMsIGRldGFpbCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVy
R2VvbWV0cnkgKSB7CiAKLSAgICAgICAgdmFyIHZlcnRpY2VzID0gWwotICAgICAgICAgICAgMSwg
IDEsICAxLCAgIC0gMSwgLSAxLCAgMSwgICAtIDEsICAxLCAtIDEsICAgIDEsIC0gMSwgLSAxCi0g
ICAgICAgIF07CisgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGdlb21ldHJ5LmluZGV4
OworICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0
ZXM7CisgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0
aW9uLmFycmF5OwogCi0gICAgICAgIHZhciBpbmRpY2VzID0gWwotICAgICAgICAgICAgMiwgIDEs
ICAwLCAgICAwLCAgMywgIDIsICAgIDEsICAzLCAgMCwgICAgMiwgIDMsICAxCi0gICAgICAgIF07
CisgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG51bGwgKSB7CiAKLSAgICAgICAg
UG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMsIHZlcnRpY2VzLCBpbmRpY2VzLCBy
YWRpdXMsIGRldGFpbCApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSBp
bmRleC5hcnJheTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnVGV0cmFoZWRyb25CdWZmZXJHZW9t
ZXRyeSc7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbmRp
Y2VzLmxlbmd0aCAtIDE7IGkgPCBsOyBpICs9IHN0ZXAgKSB7CiAKLSAgICAgICAgdGhpcy5wYXJh
bWV0ZXJzID0gewotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCi0gICAgICAgICAgICBkZXRh
aWw6IGRldGFpbAotICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBh
ID0gaW5kaWNlc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gaW5k
aWNlc1sgaSArIDEgXTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2U3Rh
cnQuZnJvbUFycmF5KCBwb3NpdGlvbnMsIGEgKiAzICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdkVuZC5mcm9tQXJyYXkoIHBvc2l0aW9ucywgYiAqIDMgKTsKIAotICAgIFRldHJhaGVk
cm9uQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggUG9seWhlZHJvbkJ1
ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnku
cHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdFNxID0gcmF5LmRpc3RhbmNlU3FUb1NlZ21l
bnQoIHZTdGFydCwgdkVuZCwgaW50ZXJSYXksIGludGVyU2VnbWVudCApOwogCi0gICAgLyoqCi0g
ICAgICogQGF1dGhvciB0aW1vdGh5cHJhdGxleSAvIGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vdGh5
cHJhdGxleQotICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdl
bjg3Ci0gICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXN0U3EgPiBw
cmVjaXNpb25TcSApIGNvbnRpbnVlOwogCi0gICAgLy8gT2N0YWhlZHJvbkdlb21ldHJ5CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJSYXkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJp
eFdvcmxkICk7IC8vTW92ZSBiYWNrIHRvIHdvcmxkIHNwYWNlIGZvciBkaXN0YW5jZSBjYWxjdWxh
dGlvbgogCi0gICAgZnVuY3Rpb24gT2N0YWhlZHJvbkdlb21ldHJ5KCByYWRpdXMsIGRldGFpbCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIu
cmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBpbnRlclJheSApOwogCi0gICAgICAgIEdlb21ldHJ5LmNh
bGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3RhbmNlIDwg
cmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgY29udGludWU7CiAK
LSAgICAgICAgdGhpcy50eXBlID0gJ09jdGFoZWRyb25HZW9tZXRyeSc7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKCB7CiAKLSAgICAgICAgdGhpcy5wYXJhbWV0
ZXJzID0gewotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCi0gICAgICAgICAgICBkZXRhaWw6
IGRldGFpbAotICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0
YW5jZTogZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoYXQg
ZG8gd2Ugd2FudD8gaW50ZXJzZWN0aW9uIHBvaW50IG9uIHRoZSByYXkgb3Igb24gdGhlIHNlZ21l
bnQ/PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludDogcmF5Y2FzdGVy
LnJheS5hdCggZGlzdGFuY2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9p
bnQ6IGludGVyU2VnbWVudC5jbG9uZSgpLmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFjZTogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFjZUluZGV4OiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvYmplY3Q6IHRoaXMKIAotICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IE9j
dGFoZWRyb25CdWZmZXJHZW9tZXRyeSggcmFkaXVzLCBkZXRhaWwgKSApOwotICAgICAgICB0aGlz
Lm1lcmdlVmVydGljZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CiAKLSAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICBPY3RhaGVkcm9uR2VvbWV0cnku
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgT2N0
YWhlZHJvbkdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE9jdGFoZWRyb25HZW9tZXRy
eTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgIC8vIE9jdGFoZWRyb25CdWZm
ZXJHZW9tZXRyeQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
cG9zaXRpb25zLmxlbmd0aCAvIDMgLSAxOyBpIDwgbDsgaSArPSBzdGVwICkgewogCi0gICAgZnVu
Y3Rpb24gT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCByYWRpdXMsIGRldGFpbCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2U3RhcnQuZnJvbUFycmF5KCBwb3NpdGlvbnMsIDMgKiBp
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdkVuZC5mcm9tQXJyYXkoIHBvc2l0aW9u
cywgMyAqIGkgKyAzICk7CiAKLSAgICAgICAgdmFyIHZlcnRpY2VzID0gWwotICAgICAgICAgICAg
MSwgMCwgMCwgICAtIDEsIDAsIDAsICAgIDAsIDEsIDAsICAgIDAsIC0gMSwgMCwgICAgMCwgMCwg
MSwgICAgMCwgMCwgLSAxCi0gICAgICAgIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGRpc3RTcSA9IHJheS5kaXN0YW5jZVNxVG9TZWdtZW50KCB2U3RhcnQsIHZFbmQsIGludGVy
UmF5LCBpbnRlclNlZ21lbnQgKTsKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFsKLSAgICAgICAg
ICAgIDAsIDIsIDQsICAgIDAsIDQsIDMsICAgIDAsIDMsIDUsICAgIDAsIDUsIDIsICAgIDEsIDIs
IDUsICAgIDEsIDUsIDMsICAgIDEsIDMsIDQsICAgIDEsIDQsIDIKLSAgICAgICAgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3RTcSA+IHByZWNpc2lvblNxICkgY29udGlu
dWU7CiAKLSAgICAgICAgUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMsIHZlcnRp
Y2VzLCBpbmRpY2VzLCByYWRpdXMsIGRldGFpbCApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVyUmF5LmFwcGx5TWF0cml4NCggdGhpcy5tYXRyaXhXb3JsZCApOyAvL01vdmUgYmFj
ayB0byB3b3JsZCBzcGFjZSBmb3IgZGlzdGFuY2UgY2FsY3VsYXRpb24KIAotICAgICAgICB0aGlz
LnR5cGUgPSAnT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXljYXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBp
bnRlclJheSApOwogCi0gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHJh
ZGl1czogcmFkaXVzLAotICAgICAgICAgICAgZGV0YWlsOiBkZXRhaWwKLSAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIg
fHwgZGlzdGFuY2UgPiByYXljYXN0ZXIuZmFyICkgY29udGludWU7CiAKLSAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0cy5wdXNoKCB7CiAKLSAgICBPY3RhaGVkcm9u
QnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggUG9seWhlZHJvbkJ1ZmZl
ckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2hhdCBkbyB3ZSB3YW50PyBpbnRlcnNlY3Rpb24gcG9pbnQg
b24gdGhlIHJheSBvciBvbiB0aGUgc2VnbWVudD8/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHBvaW50OiByYXljYXN0ZXIucmF5LmF0KCBkaXN0YW5jZSApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb2ludDogaW50ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlN
YXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4OiBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBudWxs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlSW5kZXg6IG51bGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcwogCi0gICAgLyoqCi0gICAg
ICogQGF1dGhvciB0aW1vdGh5cHJhdGxleSAvIGh0dHBzOi8vZ2l0aHViLmNvbS90aW1vdGh5cHJh
dGxleQotICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3
Ci0gICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOwogCi0gICAgLy8gSWNv
c2FoZWRyb25HZW9tZXRyeQorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgZnVuY3Rp
b24gSWNvc2FoZWRyb25HZW9tZXRyeSggcmFkaXVzLCBkZXRhaWwgKSB7CisgICAgICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggZ2VvbWV0cnkuaXNHZW9tZXRyeSApIHsKIAotICAgICAgICB0aGlzLnR5
cGUgPSAnSWNvc2FoZWRyb25HZW9tZXRyeSc7CisgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0
aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzOworICAgICAgICAgICAgICAgICAgICB2YXIgbmJWZXJ0
aWNlcyA9IHZlcnRpY2VzLmxlbmd0aDsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0g
ICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKLSAgICAgICAgICAgIGRldGFpbDogZGV0YWlsCi0g
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG5iVmVy
dGljZXMgLSAxOyBpICs9IHN0ZXAgKSB7CiAKLSAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0
cnkoIG5ldyBJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCByYWRpdXMsIGRldGFpbCApICk7Ci0g
ICAgICAgIHRoaXMubWVyZ2VWZXJ0aWNlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGRpc3RTcSA9IHJheS5kaXN0YW5jZVNxVG9TZWdtZW50KCB2ZXJ0aWNlc1sgaSBdLCB2ZXJ0aWNl
c1sgaSArIDEgXSwgaW50ZXJSYXksIGludGVyU2VnbWVudCApOwogCi0gICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBkaXN0U3EgPiBwcmVjaXNpb25TcSApIGNvbnRpbnVlOwogCi0g
ICAgSWNvc2FoZWRyb25HZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRy
eS5wcm90b3R5cGUgKTsKLSAgICBJY29zYWhlZHJvbkdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IEljb3NhaGVkcm9uR2VvbWV0cnk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRl
clJheS5hcHBseU1hdHJpeDQoIHRoaXMubWF0cml4V29ybGQgKTsgLy9Nb3ZlIGJhY2sgdG8gd29y
bGQgc3BhY2UgZm9yIGRpc3RhbmNlIGNhbGN1bGF0aW9uCiAKLSAgICAvLyBJY29zYWhlZHJvbkJ1
ZmZlckdlb21ldHJ5CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSByYXlj
YXN0ZXIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCBpbnRlclJheSApOwogCi0gICAgZnVuY3Rpb24g
SWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSggcmFkaXVzLCBkZXRhaWwgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGRpc3RhbmNlIDwgcmF5Y2FzdGVyLm5lYXIgfHwgZGlzdGFuY2Ug
PiByYXljYXN0ZXIuZmFyICkgY29udGludWU7CiAKLSAgICAgICAgdmFyIHQgPSAoIDEgKyBNYXRo
LnNxcnQoIDUgKSApIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVz
aCggewogCi0gICAgICAgIHZhciB2ZXJ0aWNlcyA9IFsKLSAgICAgICAgICAgIC0gMSwgIHQsICAw
LCAgICAxLCAgdCwgIDAsICAgLSAxLCAtIHQsICAwLCAgICAxLCAtIHQsICAwLAotICAgICAgICAg
ICAgIDAsIC0gMSwgIHQsICAgIDAsICAxLCAgdCwgICAgMCwgLSAxLCAtIHQsICAgIDAsICAxLCAt
IHQsCi0gICAgICAgICAgICAgdCwgIDAsIC0gMSwgICAgdCwgIDAsICAxLCAgIC0gdCwgIDAsIC0g
MSwgICAtIHQsICAwLCAgMQotICAgICAgICBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpc3RhbmNlOiBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGF0
IGRvIHdlIHdhbnQ/IGludGVyc2VjdGlvbiBwb2ludCBvbiB0aGUgcmF5IG9yIG9uIHRoZSBzZWdt
ZW50Pz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludDogcmF5Y2FzdGVyLnJh
eS5hdCggZGlzdGFuY2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDogaW50
ZXJTZWdtZW50LmNsb25lKCkuYXBwbHlNYXRyaXg0KCB0aGlzLm1hdHJpeFdvcmxkICksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFjZTogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlSW5kZXg6
IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzCiAKLSAgICAg
ICAgdmFyIGluZGljZXMgPSBbCi0gICAgICAgICAgICAgMCwgMTEsICA1LCAgICAwLCAgNSwgIDEs
ICAgIDAsICAxLCAgNywgICAgMCwgIDcsIDEwLCAgICAwLCAxMCwgMTEsCi0gICAgICAgICAgICAg
MSwgIDUsICA5LCAgICA1LCAxMSwgIDQsICAgMTEsIDEwLCAgMiwgICAxMCwgIDcsICA2LCAgICA3
LCAgMSwgIDgsCi0gICAgICAgICAgICAgMywgIDksICA0LCAgICAzLCAgNCwgIDIsICAgIDMsICAy
LCAgNiwgICAgMywgIDYsICA4LCAgICAzLCAgOCwgIDksCi0gICAgICAgICAgICAgNCwgIDksICA1
LCAgICAyLCAgNCwgMTEsICAgIDYsICAyLCAxMCwgICAgOCwgIDYsICA3LCAgICA5LCAgOCwgIDEK
LSAgICAgICAgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKIAotICAgICAgICBQb2x5
aGVkcm9uQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcywgdmVydGljZXMsIGluZGljZXMsIHJhZGl1
cywgZGV0YWlsICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnR5cGUg
PSAnSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSc7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAotICAg
ICAgICAgICAgZGV0YWlsOiBkZXRhaWwKLSAgICAgICAgfTsKKyAgICAgICAgICAgIH07CiAKLSAg
ICB9CisgICAgICAgIH0oKSApLAogCi0gICAgSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkucHJvdG90eXBl
ICk7Ci0gICAgSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkg
ewogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBBYmUgUGF6b3MgLyBodHRwczovL2hhbW9pZC5j
b20KLSAgICAgKiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44Nwot
ICAgICAqLworICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCB0aGlzLmdl
b21ldHJ5LCB0aGlzLm1hdGVyaWFsICkuY29weSggdGhpcyApOwogCi0gICAgLy8gRG9kZWNhaGVk
cm9uR2VvbWV0cnkKKyAgICAgICAgfQogCi0gICAgZnVuY3Rpb24gRG9kZWNhaGVkcm9uR2VvbWV0
cnkoIHJhZGl1cywgZGV0YWlsICkgeworICAgIH0gKTsKIAotICAgICAgICBHZW9tZXRyeS5jYWxs
KCB0aGlzICk7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29i
LmNvbS8KKyAgICAgKi8KIAotICAgICAgICB0aGlzLnR5cGUgPSAnRG9kZWNhaGVkcm9uR2VvbWV0
cnknOworICAgIGZ1bmN0aW9uIExpbmVTZWdtZW50cyggZ2VvbWV0cnksIG1hdGVyaWFsICkgewog
Ci0gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHJhZGl1czogcmFkaXVz
LAotICAgICAgICAgICAgZGV0YWlsOiBkZXRhaWwKLSAgICAgICAgfTsKKyAgICAgICAgTGluZS5j
YWxsKCB0aGlzLCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTsKIAotICAgICAgICB0aGlzLmZyb21CdWZm
ZXJHZW9tZXRyeSggbmV3IERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5KCByYWRpdXMsIGRldGFp
bCApICk7Ci0gICAgICAgIHRoaXMubWVyZ2VWZXJ0aWNlcygpOworICAgICAgICB0aGlzLnR5cGUg
PSAnTGluZVNlZ21lbnRzJzsKIAogICAgIH0KIAotICAgIERvZGVjYWhlZHJvbkdlb21ldHJ5LnBy
b3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIERvZGVj
YWhlZHJvbkdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERvZGVjYWhlZHJvbkdlb21l
dHJ5OworICAgIExpbmVTZWdtZW50cy5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3Qu
Y3JlYXRlKCBMaW5lLnByb3RvdHlwZSApLCB7CiAKLSAgICAvLyBEb2RlY2FoZWRyb25CdWZmZXJH
ZW9tZXRyeQorICAgICAgICBjb25zdHJ1Y3RvcjogTGluZVNlZ21lbnRzLAogCi0gICAgZnVuY3Rp
b24gRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgZGV0YWlsICkgeworICAgICAg
ICBpc0xpbmVTZWdtZW50czogdHJ1ZSwKIAotICAgICAgICB2YXIgdCA9ICggMSArIE1hdGguc3Fy
dCggNSApICkgLyAyOwotICAgICAgICB2YXIgciA9IDEgLyB0OworICAgICAgICBjb21wdXRlTGlu
ZURpc3RhbmNlczogKCBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgdmFyIHZlcnRpY2VzID0gWwor
ICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHZhciBl
bmQgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAvLyAowrExLCDCsTEsIMKxMSkKLSAg
ICAgICAgICAgIC0gMSwgLSAxLCAtIDEsICAgIC0gMSwgLSAxLCAgMSwKLSAgICAgICAgICAgIC0g
MSwgIDEsIC0gMSwgICAgLSAxLCAgMSwgIDEsCi0gICAgICAgICAgICAgIDEsIC0gMSwgLSAxLCAg
ICAgMSwgLSAxLCAgMSwKLSAgICAgICAgICAgICAgMSwgIDEsIC0gMSwgICAgIDEsICAxLCAgMSwK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlTGluZURpc3RhbmNlcygpIHsKIAot
ICAgICAgICAgICAgLy8gKDAsIMKxMS/PhiwgwrHPhikKLSAgICAgICAgICAgICAwLCAtIHIsIC0g
dCwgICAgIDAsIC0gciwgIHQsCi0gICAgICAgICAgICAgMCwgIHIsIC0gdCwgICAgIDAsICByLCAg
dCwKKyAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5OwogCi0gICAg
ICAgICAgICAvLyAowrExL8+GLCDCsc+GLCAwKQotICAgICAgICAgICAgLSByLCAtIHQsICAwLCAg
ICAtIHIsICB0LCAgMCwKLSAgICAgICAgICAgICByLCAtIHQsICAwLCAgICAgciwgIHQsICAwLAor
ICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKIAotICAg
ICAgICAgICAgLy8gKMKxz4YsIDAsIMKxMS/PhikKLSAgICAgICAgICAgIC0gdCwgIDAsIC0gciwg
ICAgIHQsICAwLCAtIHIsCi0gICAgICAgICAgICAtIHQsICAwLCAgciwgICAgIHQsICAwLCAgcgot
ICAgICAgICBdOworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhc3N1bWUgbm9uLWluZGV4ZWQg
Z2VvbWV0cnkKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFsKLSAgICAgICAgICAgICAzLCAxMSwg
IDcsICAgICAgMywgIDcsIDE1LCAgICAgIDMsIDE1LCAxMywKLSAgICAgICAgICAgICA3LCAxOSwg
MTcsICAgICAgNywgMTcsICA2LCAgICAgIDcsICA2LCAxNSwKLSAgICAgICAgICAgIDE3LCAgNCwg
IDgsICAgICAxNywgIDgsIDEwLCAgICAgMTcsIDEwLCAgNiwKLSAgICAgICAgICAgICA4LCAgMCwg
MTYsICAgICAgOCwgMTYsICAyLCAgICAgIDgsICAyLCAxMCwKLSAgICAgICAgICAgICAwLCAxMiwg
IDEsICAgICAgMCwgIDEsIDE4LCAgICAgIDAsIDE4LCAxNiwKLSAgICAgICAgICAgICA2LCAxMCwg
IDIsICAgICAgNiwgIDIsIDEzLCAgICAgIDYsIDEzLCAxNSwKLSAgICAgICAgICAgICAyLCAxNiwg
MTgsICAgICAgMiwgMTgsICAzLCAgICAgIDIsICAzLCAxMywKLSAgICAgICAgICAgIDE4LCAgMSwg
IDksICAgICAxOCwgIDksIDExLCAgICAgMTgsIDExLCAgMywKLSAgICAgICAgICAgICA0LCAxNCwg
MTIsICAgICAgNCwgMTIsICAwLCAgICAgIDQsICAwLCAgOCwKLSAgICAgICAgICAgIDExLCAgOSwg
IDUsICAgICAxMSwgIDUsIDE5LCAgICAgMTEsIDE5LCAgNywKLSAgICAgICAgICAgIDE5LCAgNSwg
MTQsICAgICAxOSwgMTQsICA0LCAgICAgMTksICA0LCAxNywKLSAgICAgICAgICAgICAxLCAxMiwg
MTQsICAgICAgMSwgMTQsICA1LCAgICAgIDEsICA1LCAgOQotICAgICAgICBdOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmluZGV4ID09PSBudWxsICkgewogCi0gICAgICAgIFBv
bHloZWRyb25CdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzLCB2ZXJ0aWNlcywgaW5kaWNlcywgcmFk
aXVzLCBkZXRhaWwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbkF0dHJp
YnV0ZSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbGluZURpc3RhbmNlcyA9IFtdOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdEb2Rl
Y2FoZWRyb25CdWZmZXJHZW9tZXRyeSc7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSBwb3NpdGlvbkF0dHJpYnV0ZS5jb3VudDsgaSA8IGw7IGkgKz0gMiApIHsK
IAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAgICByYWRpdXM6IHJhZGl1
cywKLSAgICAgICAgICAgIGRldGFpbDogZGV0YWlsCi0gICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25BdHRyaWJ1
dGUsIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQuZnJvbUJ1ZmZlckF0dHJp
YnV0ZSggcG9zaXRpb25BdHRyaWJ1dGUsIGkgKyAxICk7CiAKLSAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZURpc3RhbmNlc1sgaSBdID0gKCBpID09PSAwICkgPyAwIDogbGlu
ZURpc3RhbmNlc1sgaSAtIDEgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGlz
dGFuY2VzWyBpICsgMSBdID0gbGluZURpc3RhbmNlc1sgaSBdICsgc3RhcnQuZGlzdGFuY2VUbygg
ZW5kICk7CiAKLSAgICBEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgRG9k
ZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG9kZWNhaGVk
cm9uQnVmZmVyR2VvbWV0cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAvKioK
LSAgICAgKiBAYXV0aG9yIG9vc21veGllY29kZSAvIGh0dHBzOi8vZ2l0aHViLmNvbS9vb3Ntb3hp
ZWNvZGUKLSAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cHM6Ly9naXRodWIuY29tL1dl
c3RMYW5nbGV5Ci0gICAgICogQGF1dGhvciB6ejg1IC8gaHR0cHM6Ly9naXRodWIuY29tL3p6ODUK
LSAgICAgKiBAYXV0aG9yIG1pbmluZ29sZCAvIGh0dHBzOi8vZ2l0aHViLmNvbS9taW5pbmdvbGQK
LSAgICAgKiBAYXV0aG9yIGpvbm9icjEgLyBodHRwczovL2dpdGh1Yi5jb20vam9ub2JyMQotICAg
ICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0gICAgICoK
LSAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgg
J2xpbmVEaXN0YW5jZScsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBsaW5lRGlzdGFuY2Vz
LCAxICkgKTsKIAotICAgIC8vIFR1YmVHZW9tZXRyeQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogCi0gICAgZnVuY3Rpb24gVHViZUdlb21ldHJ5KCBwYXRoLCB0dWJ1bGFyU2VnbWVudHMs
IHJhZGl1cywgcmFkaWFsU2VnbWVudHMsIGNsb3NlZCwgdGFwZXIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVE
aXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1
ZmZlckdlb21ldHJ5LicgKTsKIAotICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnR5cGUgPSAnVHViZUdlb21ldHJ5JzsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBnZW9tZXRyeS5pc0dlb21ldHJ5ICkgewogCi0g
ICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHBhdGg6IHBhdGgsCi0gICAg
ICAgICAgICB0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cywKLSAgICAgICAgICAgIHJh
ZGl1czogcmFkaXVzLAotICAgICAgICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRz
LAotICAgICAgICAgICAgY2xvc2VkOiBjbG9zZWQKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHZlcnRpY2VzID0gZ2VvbWV0cnkudmVydGljZXM7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBsaW5lRGlzdGFuY2VzID0gZ2VvbWV0cnkubGluZURpc3RhbmNlczsKIAotICAgICAg
ICBpZiAoIHRhcGVyICE9PSB1bmRlZmluZWQgKSBjb25zb2xlLndhcm4oICdUSFJFRS5UdWJlR2Vv
bWV0cnk6IHRhcGVyIGhhcyBiZWVuIHJlbW92ZWQuJyApOworICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIGwgPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBsOyBpICs9IDIgKSB7CiAK
LSAgICAgICAgdmFyIGJ1ZmZlckdlb21ldHJ5ID0gbmV3IFR1YmVCdWZmZXJHZW9tZXRyeSggcGF0
aCwgdHVidWxhclNlZ21lbnRzLCByYWRpdXMsIHJhZGlhbFNlZ21lbnRzLCBjbG9zZWQgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LmNvcHkoIHZlcnRpY2VzWyBpIF0gKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZC5jb3B5KCB2ZXJ0aWNlc1sgaSArIDEgXSApOwogCi0gICAg
ICAgIC8vIGV4cG9zZSBpbnRlcm5hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVEaXN0
YW5jZXNbIGkgXSA9ICggaSA9PT0gMCApID8gMCA6IGxpbmVEaXN0YW5jZXNbIGkgLSAxIF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGlzdGFuY2VzWyBpICsgMSBdID0gbGluZURpc3Rh
bmNlc1sgaSBdICsgc3RhcnQuZGlzdGFuY2VUbyggZW5kICk7CiAKLSAgICAgICAgdGhpcy50YW5n
ZW50cyA9IGJ1ZmZlckdlb21ldHJ5LnRhbmdlbnRzOwotICAgICAgICB0aGlzLm5vcm1hbHMgPSBi
dWZmZXJHZW9tZXRyeS5ub3JtYWxzOwotICAgICAgICB0aGlzLmJpbm9ybWFscyA9IGJ1ZmZlckdl
b21ldHJ5LmJpbm9ybWFsczsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIGNy
ZWF0ZSBnZW9tZXRyeQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmZyb21CdWZm
ZXJHZW9tZXRyeSggYnVmZmVyR2VvbWV0cnkgKTsKLSAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2Vz
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICB9CisgICAgICAgICAgICB9
OwogCi0gICAgVHViZUdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5
LnByb3RvdHlwZSApOwotICAgIFR1YmVHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBU
dWJlR2VvbWV0cnk7CisgICAgICAgIH0oKSApCiAKLSAgICAvLyBUdWJlQnVmZmVyR2VvbWV0cnkK
KyAgICB9ICk7CiAKLSAgICBmdW5jdGlvbiBUdWJlQnVmZmVyR2VvbWV0cnkoIHBhdGgsIHR1YnVs
YXJTZWdtZW50cywgcmFkaXVzLCByYWRpYWxTZWdtZW50cywgY2xvc2VkICkgeworICAgIC8qKgor
ICAgICAqIEBhdXRob3IgbWdyZXRlciAvIGh0dHA6Ly9naXRodWIuY29tL21ncmV0ZXIKKyAgICAg
Ki8KIAotICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisgICAgZnVuY3Rpb24g
TGluZUxvb3AoIGdlb21ldHJ5LCBtYXRlcmlhbCApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAn
VHViZUJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgTGluZS5jYWxsKCB0aGlzLCBnZW9tZXRyeSwg
bWF0ZXJpYWwgKTsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAgICBw
YXRoOiBwYXRoLAotICAgICAgICAgICAgdHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMs
Ci0gICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKLSAgICAgICAgICAgIHJhZGlhbFNlZ21lbnRz
OiByYWRpYWxTZWdtZW50cywKLSAgICAgICAgICAgIGNsb3NlZDogY2xvc2VkCi0gICAgICAgIH07
CisgICAgICAgIHRoaXMudHlwZSA9ICdMaW5lTG9vcCc7CiAKLSAgICAgICAgdHVidWxhclNlZ21l
bnRzID0gdHVidWxhclNlZ21lbnRzIHx8IDY0OwotICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwg
MTsKLSAgICAgICAgcmFkaWFsU2VnbWVudHMgPSByYWRpYWxTZWdtZW50cyB8fCA4OwotICAgICAg
ICBjbG9zZWQgPSBjbG9zZWQgfHwgZmFsc2U7CisgICAgfQogCi0gICAgICAgIHZhciBmcmFtZXMg
PSBwYXRoLmNvbXB1dGVGcmVuZXRGcmFtZXMoIHR1YnVsYXJTZWdtZW50cywgY2xvc2VkICk7Cisg
ICAgTGluZUxvb3AucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlu
ZS5wcm90b3R5cGUgKSwgewogCi0gICAgICAgIC8vIGV4cG9zZSBpbnRlcm5hbHMKKyAgICAgICAg
Y29uc3RydWN0b3I6IExpbmVMb29wLAogCi0gICAgICAgIHRoaXMudGFuZ2VudHMgPSBmcmFtZXMu
dGFuZ2VudHM7Ci0gICAgICAgIHRoaXMubm9ybWFscyA9IGZyYW1lcy5ub3JtYWxzOwotICAgICAg
ICB0aGlzLmJpbm9ybWFscyA9IGZyYW1lcy5iaW5vcm1hbHM7CisgICAgICAgIGlzTGluZUxvb3A6
IHRydWUsCiAKLSAgICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcworICAgIH0gKTsKIAotICAgICAg
ICB2YXIgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgdmFyIG5vcm1hbCA9IG5ldyBW
ZWN0b3IzKCk7Ci0gICAgICAgIHZhciB1diA9IG5ldyBWZWN0b3IyKCk7CisgICAgLyoqCisgICAg
ICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9yIGFs
dGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqCisgICAgICogcGFyYW1l
dGVycyA9IHsKKyAgICAgKiAgY29sb3I6IDxoZXg+LAorICAgICAqICBvcGFjaXR5OiA8ZmxvYXQ+
LAorICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAg
ICAgKiAgc2l6ZTogPGZsb2F0PiwKKyAgICAgKiAgc2l6ZUF0dGVudWF0aW9uOiA8Ym9vbD4KKyAg
ICAgKgorICAgICAqICBtb3JwaFRhcmdldHM6IDxib29sPgorICAgICAqIH0KKyAgICAgKi8KIAot
ICAgICAgICB2YXIgaSwgajsKKyAgICBmdW5jdGlvbiBQb2ludHNNYXRlcmlhbCggcGFyYW1ldGVy
cyApIHsKIAotICAgICAgICAvLyBidWZmZXIKKyAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhpcyAp
OwogCi0gICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOwotICAgICAgICB2YXIgbm9ybWFscyA9IFtd
OwotICAgICAgICB2YXIgdXZzID0gW107Ci0gICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAg
ICAgIHRoaXMudHlwZSA9ICdQb2ludHNNYXRlcmlhbCc7CiAKLSAgICAgICAgLy8gY3JlYXRlIGJ1
ZmZlciBkYXRhCisgICAgICAgIHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7CiAK
LSAgICAgICAgZ2VuZXJhdGVCdWZmZXJEYXRhKCk7CisgICAgICAgIHRoaXMubWFwID0gbnVsbDsK
IAotICAgICAgICAvLyBidWlsZCBnZW9tZXRyeQorICAgICAgICB0aGlzLnNpemUgPSAxOworICAg
ICAgICB0aGlzLnNpemVBdHRlbnVhdGlvbiA9IHRydWU7CiAKLSAgICAgICAgdGhpcy5zZXRJbmRl
eCggaW5kaWNlcyApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3
IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkgKTsKLSAgICAgICAgdGhpcy5h
ZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFs
cywgMyApICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1
ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBm
YWxzZTsKIAotICAgICAgICAvLyBmdW5jdGlvbnMKKyAgICAgICAgdGhpcy5saWdodHMgPSBmYWxz
ZTsKIAotICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZUJ1ZmZlckRhdGEoKSB7CisgICAgICAgIHRo
aXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwOyBp
IDwgdHVidWxhclNlZ21lbnRzOyBpICsrICkgeworICAgIH0KIAotICAgICAgICAgICAgICAgIGdl
bmVyYXRlU2VnbWVudCggaSApOworICAgIFBvaW50c01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSApOworICAgIFBvaW50c01hdGVyaWFsLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9IFBvaW50c01hdGVyaWFsOwogCi0gICAgICAgICAgICB9CisgICAg
UG9pbnRzTWF0ZXJpYWwucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWwgPSB0cnVlOwogCi0gICAg
ICAgICAgICAvLyBpZiB0aGUgZ2VvbWV0cnkgaXMgbm90IGNsb3NlZCwgZ2VuZXJhdGUgdGhlIGxh
c3Qgcm93IG9mIHZlcnRpY2VzIGFuZCBub3JtYWxzCi0gICAgICAgICAgICAvLyBhdCB0aGUgcmVn
dWxhciBwb3NpdGlvbiBvbiB0aGUgZ2l2ZW4gcGF0aAotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIGlmIHRoZSBnZW9tZXRyeSBpcyBjbG9zZWQsIGR1cGxpY2F0ZSB0aGUgZmlyc3Qgcm93
IG9mIHZlcnRpY2VzIGFuZCBub3JtYWxzICh1dnMgd2lsbCBkaWZmZXIpCisgICAgUG9pbnRzTWF0
ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAg
ICAgZ2VuZXJhdGVTZWdtZW50KCAoIGNsb3NlZCA9PT0gZmFsc2UgKSA/IHR1YnVsYXJTZWdtZW50
cyA6IDAgKTsKKyAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291
cmNlICk7CiAKLSAgICAgICAgICAgIC8vIHV2cyBhcmUgZ2VuZXJhdGVkIGluIGEgc2VwYXJhdGUg
ZnVuY3Rpb24uCi0gICAgICAgICAgICAvLyB0aGlzIG1ha2VzIGl0IGVhc3kgY29tcHV0ZSBjb3Jy
ZWN0IHZhbHVlcyBmb3IgY2xvc2VkIGdlb21ldHJpZXMKKyAgICAgICAgdGhpcy5jb2xvci5jb3B5
KCBzb3VyY2UuY29sb3IgKTsKIAotICAgICAgICAgICAgZ2VuZXJhdGVVVnMoKTsKKyAgICAgICAg
dGhpcy5tYXAgPSBzb3VyY2UubWFwOwogCi0gICAgICAgICAgICAvLyBmaW5hbGx5IGNyZWF0ZSBm
YWNlcworICAgICAgICB0aGlzLnNpemUgPSBzb3VyY2Uuc2l6ZTsKKyAgICAgICAgdGhpcy5zaXpl
QXR0ZW51YXRpb24gPSBzb3VyY2Uuc2l6ZUF0dGVudWF0aW9uOwogCi0gICAgICAgICAgICBnZW5l
cmF0ZUluZGljZXMoKTsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBzb3VyY2UubW9ycGhU
YXJnZXRzOwogCi0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgZnVu
Y3Rpb24gZ2VuZXJhdGVTZWdtZW50KCBpICkgeworICAgIH07CiAKLSAgICAgICAgICAgIC8vIHdl
IHVzZSBnZXRQb2ludEF0IHRvIHNhbXBsZSBldmVubHkgZGlzdHJpYnV0ZWQgcG9pbnRzIGZyb20g
dGhlIGdpdmVuIHBhdGgKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDov
L2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqLwogCi0gICAgICAgICAgICB2YXIgUCA9IHBhdGgu
Z2V0UG9pbnRBdCggaSAvIHR1YnVsYXJTZWdtZW50cyApOworICAgIGZ1bmN0aW9uIFBvaW50cygg
Z2VvbWV0cnksIG1hdGVyaWFsICkgewogCi0gICAgICAgICAgICAvLyByZXRyaWV2ZSBjb3JyZXNw
b25kaW5nIG5vcm1hbCBhbmQgYmlub3JtYWwKKyAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhpcyAp
OwogCi0gICAgICAgICAgICB2YXIgTiA9IGZyYW1lcy5ub3JtYWxzWyBpIF07Ci0gICAgICAgICAg
ICB2YXIgQiA9IGZyYW1lcy5iaW5vcm1hbHNbIGkgXTsKKyAgICAgICAgdGhpcy50eXBlID0gJ1Bv
aW50cyc7CiAKLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIG5vcm1hbHMgYW5kIHZlcnRpY2VzIGZv
ciB0aGUgY3VycmVudCBzZWdtZW50CisgICAgICAgIHRoaXMuZ2VvbWV0cnkgPSBnZW9tZXRyeSAh
PT0gdW5kZWZpbmVkID8gZ2VvbWV0cnkgOiBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKKyAgICAgICAg
dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsICE9PSB1bmRlZmluZWQgPyBtYXRlcmlhbCA6IG5ldyBQ
b2ludHNNYXRlcmlhbCggeyBjb2xvcjogTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmIH0gKTsKIAot
ICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7IGogKysgKSB7Cisg
ICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRo
LlBJICogMjsKKyAgICBQb2ludHMucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNy
ZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgICAgIHZhciBzaW4g
PSAgIE1hdGguc2luKCB2ICk7Ci0gICAgICAgICAgICAgICAgdmFyIGNvcyA9IC0gTWF0aC5jb3Mo
IHYgKTsKKyAgICAgICAgY29uc3RydWN0b3I6IFBvaW50cywKIAotICAgICAgICAgICAgICAgIC8v
IG5vcm1hbAorICAgICAgICBpc1BvaW50czogdHJ1ZSwKIAotICAgICAgICAgICAgICAgIG5vcm1h
bC54ID0gKCBjb3MgKiBOLnggKyBzaW4gKiBCLnggKTsKLSAgICAgICAgICAgICAgICBub3JtYWwu
eSA9ICggY29zICogTi55ICsgc2luICogQi55ICk7Ci0gICAgICAgICAgICAgICAgbm9ybWFsLnog
PSAoIGNvcyAqIE4ueiArIHNpbiAqIEIueiApOwotICAgICAgICAgICAgICAgIG5vcm1hbC5ub3Jt
YWxpemUoKTsKKyAgICAgICAgcmF5Y2FzdDogKCBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAg
ICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnogKTsKKyAgICAg
ICAgICAgIHZhciBpbnZlcnNlTWF0cml4ID0gbmV3IE1hdHJpeDQoKTsKKyAgICAgICAgICAgIHZh
ciByYXkgPSBuZXcgUmF5KCk7CisgICAgICAgICAgICB2YXIgc3BoZXJlID0gbmV3IFNwaGVyZSgp
OwogCi0gICAgICAgICAgICAgICAgLy8gdmVydGV4CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24gcmF5Y2FzdCggcmF5Y2FzdGVyLCBpbnRlcnNlY3RzICkgewogCi0gICAgICAgICAgICAgICAg
dmVydGV4LnggPSBQLnggKyByYWRpdXMgKiBub3JtYWwueDsKLSAgICAgICAgICAgICAgICB2ZXJ0
ZXgueSA9IFAueSArIHJhZGl1cyAqIG5vcm1hbC55OwotICAgICAgICAgICAgICAgIHZlcnRleC56
ID0gUC56ICsgcmFkaXVzICogbm9ybWFsLno7CisgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9
IHRoaXM7CisgICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTsKKyAg
ICAgICAgICAgICAgICB2YXIgbWF0cml4V29ybGQgPSB0aGlzLm1hdHJpeFdvcmxkOworICAgICAg
ICAgICAgICAgIHZhciB0aHJlc2hvbGQgPSByYXljYXN0ZXIucGFyYW1zLlBvaW50cy50aHJlc2hv
bGQ7CiAKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4Lnks
IHZlcnRleC56ICk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2tpbmcgYm91bmRpbmdTcGhlcmUg
ZGlzdGFuY2UgdG8gcmF5CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGdl
b21ldHJ5LmJvdW5kaW5nU3BoZXJlID09PSBudWxsICkgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5n
U3BoZXJlKCk7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHNwaGVyZS5jb3B5KCBnZW9t
ZXRyeS5ib3VuZGluZ1NwaGVyZSApOworICAgICAgICAgICAgICAgIHNwaGVyZS5hcHBseU1hdHJp
eDQoIG1hdHJpeFdvcmxkICk7CisgICAgICAgICAgICAgICAgc3BoZXJlLnJhZGl1cyArPSB0aHJl
c2hvbGQ7CiAKLSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVJbmRpY2VzKCkgeworICAgICAgICAg
ICAgICAgIGlmICggcmF5Y2FzdGVyLnJheS5pbnRlcnNlY3RzU3BoZXJlKCBzcGhlcmUgKSA9PT0g
ZmFsc2UgKSByZXR1cm47CiAKLSAgICAgICAgICAgIGZvciAoIGogPSAxOyBqIDw9IHR1YnVsYXJT
ZWdtZW50czsgaiArKyApIHsKKyAgICAgICAgICAgICAgICAvLwogCi0gICAgICAgICAgICAgICAg
Zm9yICggaSA9IDE7IGkgPD0gcmFkaWFsU2VnbWVudHM7IGkgKysgKSB7CisgICAgICAgICAgICAg
ICAgaW52ZXJzZU1hdHJpeC5nZXRJbnZlcnNlKCBtYXRyaXhXb3JsZCApOworICAgICAgICAgICAg
ICAgIHJheS5jb3B5KCByYXljYXN0ZXIucmF5ICkuYXBwbHlNYXRyaXg0KCBpbnZlcnNlTWF0cml4
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSAp
ICogKCBqIC0gMSApICsgKCBpIC0gMSApOwotICAgICAgICAgICAgICAgICAgICB2YXIgYiA9ICgg
cmFkaWFsU2VnbWVudHMgKyAxICkgKiBqICsgKCBpIC0gMSApOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgYyA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiBqICsgaTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGQgPSAoIHJhZGlhbFNlZ21lbnRzICsgMSApICogKCBqIC0gMSApICsgaTsKKyAg
ICAgICAgICAgICAgICB2YXIgbG9jYWxUaHJlc2hvbGQgPSB0aHJlc2hvbGQgLyAoICggdGhpcy5z
Y2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56ICkgLyAzICk7CisgICAgICAgICAg
ICAgICAgdmFyIGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNo
b2xkOworICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7CisgICAg
ICAgICAgICAgICAgdmFyIGludGVyc2VjdFBvaW50ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAg
ICAgICAgICAgICAgICAvLyBmYWNlcworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RQb2lu
dCggcG9pbnQsIGluZGV4ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCgg
YSwgYiwgZCApOwotICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHJheVBvaW50RGlzdGFuY2VTcSA9IHJheS5kaXN0YW5j
ZVNxVG9Qb2ludCggcG9pbnQgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCByYXlQb2ludERpc3RhbmNlU3EgPCBsb2NhbFRocmVzaG9sZFNxICkgewogCi0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByYXkuY2xvc2VzdFBvaW50VG9Q
b2ludCggcG9pbnQsIGludGVyc2VjdFBvaW50ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcnNlY3RQb2ludC5hcHBseU1hdHJpeDQoIG1hdHJpeFdvcmxkICk7CiAKLSAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmln
aW4uZGlzdGFuY2VUbyggaW50ZXJzZWN0UG9pbnQgKTsKIAotICAgICAgICBmdW5jdGlvbiBnZW5l
cmF0ZVVWcygpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGlzdGFuY2UgPCByYXlj
YXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIgKSByZXR1cm47CiAKLSAgICAg
ICAgICAgIGZvciAoIGkgPSAwOyBpIDw9IHR1YnVsYXJTZWdtZW50czsgaSArKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVyc2VjdHMucHVzaCggewogCi0gICAgICAgICAgICAgICAg
Zm9yICggaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7IGogKysgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpc3RhbmNlVG9SYXk6IE1hdGguc3FydCggcmF5UG9pbnREaXN0YW5jZVNxICksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQ6IGludGVyc2VjdFBvaW50LmNsb25lKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhY2U6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0OiBvYmplY3QKIAotICAgICAgICAgICAgICAgICAgICB1di54ID0gaSAvIHR1YnVsYXJT
ZWdtZW50czsKLSAgICAgICAgICAgICAgICAgICAgdXYueSA9IGogLyByYWRpYWxTZWdtZW50czsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKIAotICAgICAgICAgICAgICAgICAgICB1dnMu
cHVzaCggdXYueCwgdXYueSApOworICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lmlz
QnVmZmVyR2VvbWV0cnkgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIg
aW5kZXggPSBnZW9tZXRyeS5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0
ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzOworICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRp
b25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTsKIAotICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBpbmRleCAhPT0gbnVsbCApIHsKIAotICAgIFR1YmVCdWZmZXJHZW9tZXRyeS5w
cm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAg
ICBUdWJlQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHViZUJ1ZmZlckdl
b21ldHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXMgPSBpbmRleC5hcnJh
eTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Igb29zbW94aWVjb2RlCi0gICAgICogQGF1dGhv
ciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKLSAgICAgKgotICAgICAqIGJh
c2VkIG9uIGh0dHA6Ly93d3cuYmxhY2twYXduLmNvbS90ZXh0cy9wcXRvcnVzLwotICAgICAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGluZGljZXMubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAvLyBUb3J1c0tub3RHZW9tZXRyeQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gaW5kaWNlc1sgaSBdOwogCi0gICAgZnVuY3Rp
b24gVG9ydXNLbm90R2VvbWV0cnkoIHJhZGl1cywgdHViZSwgdHVidWxhclNlZ21lbnRzLCByYWRp
YWxTZWdtZW50cywgcCwgcSwgaGVpZ2h0U2NhbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zaXRpb24uZnJvbUFycmF5KCBwb3NpdGlvbnMsIGEgKiAzICk7CiAKLSAgICAgICAg
R2VvbWV0cnkuY2FsbCggdGhpcyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQ
b2ludCggcG9zaXRpb24sIGEgKTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnVG9ydXNLbm90R2Vv
bWV0cnknOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucGFyYW1l
dGVycyA9IHsKLSAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAotICAgICAgICAgICAgdHViZTog
dHViZSwKLSAgICAgICAgICAgIHR1YnVsYXJTZWdtZW50czogdHVidWxhclNlZ21lbnRzLAotICAg
ICAgICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLAotICAgICAgICAgICAgcDog
cCwKLSAgICAgICAgICAgIHE6IHEKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKIAotICAgICAgICBpZiAoIGhlaWdodFNjYWxlICE9PSB1bmRlZmluZWQgKSBjb25zb2xl
Lndhcm4oICdUSFJFRS5Ub3J1c0tub3RHZW9tZXRyeTogaGVpZ2h0U2NhbGUgaGFzIGJlZW4gZGVw
cmVjYXRlZC4gVXNlIC5zY2FsZSggeCwgeSwgeiApIGluc3RlYWQuJyApOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gcG9zaXRpb25zLmxlbmd0aCAvIDM7IGkg
PCBsOyBpICsrICkgewogCi0gICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgVG9y
dXNLbm90QnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgdHViZSwgdHVidWxhclNlZ21lbnRzLCByYWRp
YWxTZWdtZW50cywgcCwgcSApICk7Ci0gICAgICAgIHRoaXMubWVyZ2VWZXJ0aWNlcygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLmZyb21BcnJheSggcG9zaXRpb25zLCBp
ICogMyApOwogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RQb2ludCgg
cG9zaXRpb24sIGkgKTsKIAotICAgIFRvcnVzS25vdEdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIFRvcnVzS25vdEdlb21ldHJ5LnBy
b3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRvcnVzS25vdEdlb21ldHJ5OworICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgLy8gVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkKKyAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgZnVuY3Rpb24gVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkoIHJhZGl1
cywgdHViZSwgdHVidWxhclNlZ21lbnRzLCByYWRpYWxTZWdtZW50cywgcCwgcSApIHsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMg
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gZ2VvbWV0cnkudmVydGljZXM7
CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1RvcnVzS25vdEJ1ZmZlckdlb21ldHJ5JzsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdmVydGljZXMubGVuZ3RoOyBpIDwg
bDsgaSArKyApIHsKIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAgICBy
YWRpdXM6IHJhZGl1cywKLSAgICAgICAgICAgIHR1YmU6IHR1YmUsCi0gICAgICAgICAgICB0dWJ1
bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cywKLSAgICAgICAgICAgIHJhZGlhbFNlZ21lbnRz
OiByYWRpYWxTZWdtZW50cywKLSAgICAgICAgICAgIHA6IHAsCi0gICAgICAgICAgICBxOiBxCi0g
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UG9pbnQoIHZlcnRpY2VzWyBp
IF0sIGkgKTsKIAotICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgMTAwOwotICAgICAgICB0dWJl
ID0gdHViZSB8fCA0MDsKLSAgICAgICAgdHVidWxhclNlZ21lbnRzID0gTWF0aC5mbG9vciggdHVi
dWxhclNlZ21lbnRzICkgfHwgNjQ7Ci0gICAgICAgIHJhZGlhbFNlZ21lbnRzID0gTWF0aC5mbG9v
ciggcmFkaWFsU2VnbWVudHMgKSB8fCA4OwotICAgICAgICBwID0gcCB8fCAyOwotICAgICAgICBx
ID0gcSB8fCAzOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgLy8gYnVmZmVycwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwotICAgICAgICB2
YXIgdmVydGljZXMgPSBbXTsKLSAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKLSAgICAgICAgdmFy
IHV2cyA9IFtdOworICAgICAgICAgICAgfTsKIAotICAgICAgICAvLyBoZWxwZXIgdmFyaWFibGVz
CisgICAgICAgIH0oKSApLAogCi0gICAgICAgIHZhciBpLCBqOworICAgICAgICBjbG9uZTogZnVu
Y3Rpb24gKCkgewogCi0gICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOwotICAgICAg
ICB2YXIgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhp
cy5jb25zdHJ1Y3RvciggdGhpcy5nZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCApLmNvcHkoIHRoaXMg
KTsKIAotICAgICAgICB2YXIgUDEgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICB2YXIgUDIgPSBu
ZXcgVmVjdG9yMygpOworICAgICAgICB9CiAKLSAgICAgICAgdmFyIEIgPSBuZXcgVmVjdG9yMygp
OwotICAgICAgICB2YXIgVCA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgIHZhciBOID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICB9ICk7CiAKLSAgICAgICAgLy8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1h
bHMgYW5kIHV2cworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCisgICAgICovCiAKLSAgICAgICAgZm9yICggaSA9IDA7IGkgPD0gdHVidWxhclNlZ21l
bnRzOyArKyBpICkgeworICAgIGZ1bmN0aW9uIFZpZGVvVGV4dHVyZSggdmlkZW8sIG1hcHBpbmcs
IHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290
cm9weSApIHsKIAotICAgICAgICAgICAgLy8gdGhlIHJhZGlhbiAidSIgaXMgdXNlZCB0byBjYWxj
dWxhdGUgdGhlIHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1
bGFyIHNlZ2VtZW50CisgICAgICAgIFRleHR1cmUuY2FsbCggdGhpcywgdmlkZW8sIG1hcHBpbmcs
IHdyYXBTLCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGZvcm1hdCwgdHlwZSwgYW5pc290
cm9weSApOwogCi0gICAgICAgICAgICB2YXIgdSA9IGkgLyB0dWJ1bGFyU2VnbWVudHMgKiBwICog
TWF0aC5QSSAqIDI7CisgICAgICAgIHRoaXMuZ2VuZXJhdGVNaXBtYXBzID0gZmFsc2U7CiAKLSAg
ICAgICAgICAgIC8vIG5vdyB3ZSBjYWxjdWxhdGUgdHdvIHBvaW50cy4gUDEgaXMgb3VyIGN1cnJl
bnQgcG9zaXRpb24gb24gdGhlIGN1cnZlLCBQMiBpcyBhIGxpdHRsZSBmYXJ0aGVyIGFoZWFkLgot
ICAgICAgICAgICAgLy8gdGhlc2UgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhIHNwZWNpYWwg
ImNvb3JkaW5hdGUgc3BhY2UiLCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHRoZSBj
b3JyZWN0IHZlcnRleCBwb3NpdGlvbnMKKyAgICB9CiAKLSAgICAgICAgICAgIGNhbGN1bGF0ZVBv
c2l0aW9uT25DdXJ2ZSggdSwgcCwgcSwgcmFkaXVzLCBQMSApOwotICAgICAgICAgICAgY2FsY3Vs
YXRlUG9zaXRpb25PbkN1cnZlKCB1ICsgMC4wMSwgcCwgcSwgcmFkaXVzLCBQMiApOworICAgIFZp
ZGVvVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBUZXh0
dXJlLnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBvcnRob25vcm1h
bCBiYXNpcworICAgICAgICBjb25zdHJ1Y3RvcjogVmlkZW9UZXh0dXJlLAogCi0gICAgICAgICAg
ICBULnN1YlZlY3RvcnMoIFAyLCBQMSApOwotICAgICAgICAgICAgTi5hZGRWZWN0b3JzKCBQMiwg
UDEgKTsKLSAgICAgICAgICAgIEIuY3Jvc3NWZWN0b3JzKCBULCBOICk7Ci0gICAgICAgICAgICBO
LmNyb3NzVmVjdG9ycyggQiwgVCApOworICAgICAgICBpc1ZpZGVvVGV4dHVyZTogdHJ1ZSwKIAot
ICAgICAgICAgICAgLy8gbm9ybWFsaXplIEIsIE4uIFQgY2FuIGJlIGlnbm9yZWQsIHdlIGRvbid0
IHVzZSBpdAorICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgQi5u
b3JtYWxpemUoKTsKLSAgICAgICAgICAgIE4ubm9ybWFsaXplKCk7CisgICAgICAgICAgICB2YXIg
dmlkZW8gPSB0aGlzLmltYWdlOwogCi0gICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8PSByYWRp
YWxTZWdtZW50czsgKysgaiApIHsKKyAgICAgICAgICAgIGlmICggdmlkZW8ucmVhZHlTdGF0ZSA+
PSB2aWRlby5IQVZFX0NVUlJFTlRfREFUQSApIHsKIAotICAgICAgICAgICAgICAgIC8vIG5vdyBj
YWxjdWxhdGUgdGhlIHZlcnRpY2VzLiB0aGV5IGFyZSBub3RoaW5nIG1vcmUgdGhhbiBhbiBleHRy
dXNpb24gb2YgdGhlIHRvcnVzIGN1cnZlLgotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ug
ZXh0cnVkZSBhIHNoYXBlIGluIHRoZSB4eS1wbGFuZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxj
dWxhdGUgYSB6LXZhbHVlLgorICAgICAgICAgICAgICAgIHRoaXMubmVlZHNVcGRhdGUgPSB0cnVl
OwogCi0gICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJ
ICogMjsKLSAgICAgICAgICAgICAgICB2YXIgY3ggPSAtIHR1YmUgKiBNYXRoLmNvcyggdiApOwot
ICAgICAgICAgICAgICAgIHZhciBjeSA9IHR1YmUgKiBNYXRoLnNpbiggdiApOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgLy8gbm93IGNhbGN1bGF0ZSB0aGUgZmluYWwgdmVydGV4
IHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIC8vIGZpcnN0IHdlIG9yaWVudCB0aGUgZXh0cnVz
aW9uIHdpdGggb3VyIGJhc2lzIHZlY3RvcywgdGhlbiB3ZSBhZGQgaXQgdG8gdGhlIGN1cnJlbnQg
cG9zaXRpb24gb24gdGhlIGN1cnZlCisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZlcnRl
eC54ID0gUDEueCArICggY3ggKiBOLnggKyBjeSAqIEIueCApOwotICAgICAgICAgICAgICAgIHZl
cnRleC55ID0gUDEueSArICggY3ggKiBOLnkgKyBjeSAqIEIueSApOwotICAgICAgICAgICAgICAg
IHZlcnRleC56ID0gUDEueiArICggY3ggKiBOLnogKyBjeSAqIEIueiApOworICAgIH0gKTsKIAot
ICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4
LnogKTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRx
dWFsaWEuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgLy8gbm9ybWFsIChQMSBpcyBh
bHdheXMgdGhlIGNlbnRlci9vcmlnaW4gb2YgdGhlIGV4dHJ1c2lvbiwgdGh1cyB3ZSBjYW4gdXNl
IGl0IHRvIGNhbGN1bGF0ZSB0aGUgbm9ybWFsKQorICAgIGZ1bmN0aW9uIENvbXByZXNzZWRUZXh0
dXJlKCBtaXBtYXBzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1hcHBpbmcsIHdyYXBT
LCB3cmFwVCwgbWFnRmlsdGVyLCBtaW5GaWx0ZXIsIGFuaXNvdHJvcHksIGVuY29kaW5nICkgewog
Ci0gICAgICAgICAgICAgICAgbm9ybWFsLnN1YlZlY3RvcnMoIHZlcnRleCwgUDEgKS5ub3JtYWxp
emUoKTsKKyAgICAgICAgVGV4dHVyZS5jYWxsKCB0aGlzLCBudWxsLCBtYXBwaW5nLCB3cmFwUywg
d3JhcFQsIG1hZ0ZpbHRlciwgbWluRmlsdGVyLCBmb3JtYXQsIHR5cGUsIGFuaXNvdHJvcHksIGVu
Y29kaW5nICk7CiAKLSAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3Jt
YWwueSwgbm9ybWFsLnogKTsKKyAgICAgICAgdGhpcy5pbWFnZSA9IHsgd2lkdGg6IHdpZHRoLCBo
ZWlnaHQ6IGhlaWdodCB9OworICAgICAgICB0aGlzLm1pcG1hcHMgPSBtaXBtYXBzOwogCi0gICAg
ICAgICAgICAgICAgLy8gdXYKKyAgICAgICAgLy8gbm8gZmxpcHBpbmcgZm9yIGN1YmUgdGV4dHVy
ZXMKKyAgICAgICAgLy8gKGFsc28gZmxpcHBpbmcgZG9lc24ndCB3b3JrIGZvciBjb21wcmVzc2Vk
IHRleHR1cmVzICkKIAotICAgICAgICAgICAgICAgIHV2cy5wdXNoKCBpIC8gdHVidWxhclNlZ21l
bnRzICk7Ci0gICAgICAgICAgICAgICAgdXZzLnB1c2goIGogLyByYWRpYWxTZWdtZW50cyApOwor
ICAgICAgICB0aGlzLmZsaXBZID0gZmFsc2U7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8g
Y2FuJ3QgZ2VuZXJhdGUgbWlwbWFwcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgICAgICAv
LyBtaXBzIG11c3QgYmUgZW1iZWRkZWQgaW4gRERTIGZpbGVzCiAKLSAgICAgICAgfQorICAgICAg
ICB0aGlzLmdlbmVyYXRlTWlwbWFwcyA9IGZhbHNlOwogCi0gICAgICAgIC8vIGdlbmVyYXRlIGlu
ZGljZXMKKyAgICB9CiAKLSAgICAgICAgZm9yICggaiA9IDE7IGogPD0gdHVidWxhclNlZ21lbnRz
OyBqICsrICkgeworICAgIENvbXByZXNzZWRUZXh0dXJlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVh
dGUoIFRleHR1cmUucHJvdG90eXBlICk7CisgICAgQ29tcHJlc3NlZFRleHR1cmUucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gQ29tcHJlc3NlZFRleHR1cmU7CiAKLSAgICAgICAgICAgIGZvciAoIGkg
PSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpICsrICkgeworICAgIENvbXByZXNzZWRUZXh0dXJl
LnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAg
IC8vIGluZGljZXMKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIE1hdHQgRGVzTGF1cmllcnMgLyBA
bWF0dGRlc2wKKyAgICAgKiBAYXV0aG9yIGF0aXggLyBhcnRodXJzaWxiZXIuZGUKKyAgICAgKi8K
IAotICAgICAgICAgICAgICAgIHZhciBhID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqICggaiAt
IDEgKSArICggaSAtIDEgKTsKLSAgICAgICAgICAgICAgICB2YXIgYiA9ICggcmFkaWFsU2VnbWVu
dHMgKyAxICkgKiBqICsgKCBpIC0gMSApOwotICAgICAgICAgICAgICAgIHZhciBjID0gKCByYWRp
YWxTZWdtZW50cyArIDEgKSAqIGogKyBpOwotICAgICAgICAgICAgICAgIHZhciBkID0gKCByYWRp
YWxTZWdtZW50cyArIDEgKSAqICggaiAtIDEgKSArIGk7CisgICAgZnVuY3Rpb24gRGVwdGhUZXh0
dXJlKCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBtYXBwaW5nLCB3cmFwUywgd3JhcFQsIG1hZ0ZpbHRl
ciwgbWluRmlsdGVyLCBhbmlzb3Ryb3B5LCBmb3JtYXQgKSB7CiAKLSAgICAgICAgICAgICAgICAv
LyBmYWNlcworICAgICAgICBmb3JtYXQgPSBmb3JtYXQgIT09IHVuZGVmaW5lZCA/IGZvcm1hdCA6
IERlcHRoRm9ybWF0OwogCi0gICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7
Ci0gICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7CisgICAgICAgIGlmICgg
Zm9ybWF0ICE9PSBEZXB0aEZvcm1hdCAmJiBmb3JtYXQgIT09IERlcHRoU3RlbmNpbEZvcm1hdCAp
IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAnRGVwdGhU
ZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5E
ZXB0aFN0ZW5jaWxGb3JtYXQnICk7CiAKICAgICAgICAgfQogCi0gICAgICAgIC8vIGJ1aWxkIGdl
b21ldHJ5Ci0KLSAgICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOwotICAgICAgICB0aGlz
LmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZl
cnRpY2VzLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcg
RmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7Ci0gICAgICAgIHRoaXMuYWRk
QXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsK
LQotICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGN1cnJlbnQgcG9zaXRp
b24gb24gdGhlIHRvcnVzIGN1cnZlCisgICAgICAgIGlmICggdHlwZSA9PT0gdW5kZWZpbmVkICYm
IGZvcm1hdCA9PT0gRGVwdGhGb3JtYXQgKSB0eXBlID0gVW5zaWduZWRTaG9ydFR5cGU7CisgICAg
ICAgIGlmICggdHlwZSA9PT0gdW5kZWZpbmVkICYmIGZvcm1hdCA9PT0gRGVwdGhTdGVuY2lsRm9y
bWF0ICkgdHlwZSA9IFVuc2lnbmVkSW50MjQ4VHlwZTsKIAotICAgICAgICBmdW5jdGlvbiBjYWxj
dWxhdGVQb3NpdGlvbk9uQ3VydmUoIHUsIHAsIHEsIHJhZGl1cywgcG9zaXRpb24gKSB7CisgICAg
ICAgIFRleHR1cmUuY2FsbCggdGhpcywgbnVsbCwgbWFwcGluZywgd3JhcFMsIHdyYXBULCBtYWdG
aWx0ZXIsIG1pbkZpbHRlciwgZm9ybWF0LCB0eXBlLCBhbmlzb3Ryb3B5ICk7CiAKLSAgICAgICAg
ICAgIHZhciBjdSA9IE1hdGguY29zKCB1ICk7Ci0gICAgICAgICAgICB2YXIgc3UgPSBNYXRoLnNp
biggdSApOwotICAgICAgICAgICAgdmFyIHF1T3ZlclAgPSBxIC8gcCAqIHU7Ci0gICAgICAgICAg
ICB2YXIgY3MgPSBNYXRoLmNvcyggcXVPdmVyUCApOworICAgICAgICB0aGlzLmltYWdlID0geyB3
aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07CiAKLSAgICAgICAgICAgIHBvc2l0aW9uLngg
PSByYWRpdXMgKiAoIDIgKyBjcyApICogMC41ICogY3U7Ci0gICAgICAgICAgICBwb3NpdGlvbi55
ID0gcmFkaXVzICogKCAyICsgY3MgKSAqIHN1ICogMC41OwotICAgICAgICAgICAgcG9zaXRpb24u
eiA9IHJhZGl1cyAqIE1hdGguc2luKCBxdU92ZXJQICkgKiAwLjU7CisgICAgICAgIHRoaXMubWFn
RmlsdGVyID0gbWFnRmlsdGVyICE9PSB1bmRlZmluZWQgPyBtYWdGaWx0ZXIgOiBOZWFyZXN0Rmls
dGVyOworICAgICAgICB0aGlzLm1pbkZpbHRlciA9IG1pbkZpbHRlciAhPT0gdW5kZWZpbmVkID8g
bWluRmlsdGVyIDogTmVhcmVzdEZpbHRlcjsKIAotICAgICAgICB9CisgICAgICAgIHRoaXMuZmxp
cFkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5nZW5lcmF0ZU1pcG1hcHMgICAgPSBmYWxzZTsKIAog
ICAgIH0KIAotICAgIFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIFRvcnVzS25vdEJ1ZmZlckdl
b21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Owor
ICAgIERlcHRoVGV4dHVyZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBUZXh0dXJlLnByb3Rv
dHlwZSApOworICAgIERlcHRoVGV4dHVyZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEZXB0aFRl
eHR1cmU7CisgICAgRGVwdGhUZXh0dXJlLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZSA9IHRydWU7
CiAKICAgICAvKioKLSAgICAgKiBAYXV0aG9yIG9vc21veGllY29kZQogICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0
cHM6Ly9naXRodWIuY29tL011Z2VuODcKICAgICAgKi8KIAotICAgIC8vIFRvcnVzR2VvbWV0cnkK
LQotICAgIGZ1bmN0aW9uIFRvcnVzR2VvbWV0cnkoIHJhZGl1cywgdHViZSwgcmFkaWFsU2VnbWVu
dHMsIHR1YnVsYXJTZWdtZW50cywgYXJjICkgewotCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRo
aXMgKTsKLQotICAgICAgICB0aGlzLnR5cGUgPSAnVG9ydXNHZW9tZXRyeSc7Ci0KLSAgICAgICAg
dGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCi0gICAgICAg
ICAgICB0dWJlOiB0dWJlLAotICAgICAgICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21l
bnRzLAotICAgICAgICAgICAgdHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsCi0gICAg
ICAgICAgICBhcmM6IGFyYwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdl
b21ldHJ5KCBuZXcgVG9ydXNCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCB0dWJlLCByYWRpYWxTZWdt
ZW50cywgdHVidWxhclNlZ21lbnRzLCBhcmMgKSApOwotICAgICAgICB0aGlzLm1lcmdlVmVydGlj
ZXMoKTsKLQotICAgIH0KLQotICAgIFRvcnVzR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgVG9ydXNHZW9tZXRyeS5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBUb3J1c0dlb21ldHJ5OwotCi0gICAgLy8gVG9ydXNCdWZmZXJHZW9tZXRy
eQotCi0gICAgZnVuY3Rpb24gVG9ydXNCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCB0dWJlLCByYWRp
YWxTZWdtZW50cywgdHVidWxhclNlZ21lbnRzLCBhcmMgKSB7CisgICAgZnVuY3Rpb24gV2lyZWZy
YW1lR2VvbWV0cnkoIGdlb21ldHJ5ICkgewogCiAgICAgICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwo
IHRoaXMgKTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnVG9ydXNCdWZmZXJHZW9tZXRyeSc7Ci0K
LSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMs
Ci0gICAgICAgICAgICB0dWJlOiB0dWJlLAotICAgICAgICAgICAgcmFkaWFsU2VnbWVudHM6IHJh
ZGlhbFNlZ21lbnRzLAotICAgICAgICAgICAgdHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVu
dHMsCi0gICAgICAgICAgICBhcmM6IGFyYwotICAgICAgICB9OwotCi0gICAgICAgIHJhZGl1cyA9
IHJhZGl1cyB8fCAxMDA7Ci0gICAgICAgIHR1YmUgPSB0dWJlIHx8IDQwOwotICAgICAgICByYWRp
YWxTZWdtZW50cyA9IE1hdGguZmxvb3IoIHJhZGlhbFNlZ21lbnRzICkgfHwgODsKLSAgICAgICAg
dHVidWxhclNlZ21lbnRzID0gTWF0aC5mbG9vciggdHVidWxhclNlZ21lbnRzICkgfHwgNjsKLSAg
ICAgICAgYXJjID0gYXJjIHx8IE1hdGguUEkgKiAyOworICAgICAgICB0aGlzLnR5cGUgPSAnV2ly
ZWZyYW1lR2VvbWV0cnknOwogCi0gICAgICAgIC8vIGJ1ZmZlcnMKKyAgICAgICAgLy8gYnVmZmVy
CiAKLSAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKICAgICAgICAgdmFyIHZlcnRpY2VzID0gW107
Ci0gICAgICAgIHZhciBub3JtYWxzID0gW107Ci0gICAgICAgIHZhciB1dnMgPSBbXTsKIAogICAg
ICAgICAvLyBoZWxwZXIgdmFyaWFibGVzCiAKLSAgICAgICAgdmFyIGNlbnRlciA9IG5ldyBWZWN0
b3IzKCk7Ci0gICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOwotICAgICAgICB2YXIg
bm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdmFyIGksIGosIGwsIG8sIG9sOworICAg
ICAgICB2YXIgZWRnZSA9IFsgMCwgMCBdLCBlZGdlcyA9IHt9LCBlLCBlZGdlMSwgZWRnZTI7Cisg
ICAgICAgIHZhciBrZXksIGtleXMgPSBbICdhJywgJ2InLCAnYycgXTsKKyAgICAgICAgdmFyIHZl
cnRleDsKIAotICAgICAgICB2YXIgaiwgaTsKKyAgICAgICAgLy8gZGlmZmVyZW50IGxvZ2ljIGZv
ciBHZW9tZXRyeSBhbmQgQnVmZmVyR2VvbWV0cnkKIAotICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0
aWNlcywgbm9ybWFscyBhbmQgdXZzCisgICAgICAgIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnku
aXNHZW9tZXRyeSApIHsKIAotICAgICAgICBmb3IgKCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50
czsgaiArKyApIHsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGRhdGEgc3RydWN0dXJlIHRoYXQg
Y29udGFpbnMgYWxsIGVkZ2VzIHdpdGhvdXQgZHVwbGljYXRlcwogCi0gICAgICAgICAgICBmb3Ig
KCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkgKysgKSB7CisgICAgICAgICAgICB2YXIg
ZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKIAotICAgICAgICAgICAgICAgIHZhciB1ID0gaSAvIHR1
YnVsYXJTZWdtZW50cyAqIGFyYzsKLSAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyByYWRpYWxT
ZWdtZW50cyAqIE1hdGguUEkgKiAyOworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBmYWNl
cy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgLy8gdmVydGV4Cisg
ICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBmYWNlc1sgaSBdOwogCi0gICAgICAgICAgICAgICAg
dmVydGV4LnggPSAoIHJhZGl1cyArIHR1YmUgKiBNYXRoLmNvcyggdiApICkgKiBNYXRoLmNvcygg
dSApOwotICAgICAgICAgICAgICAgIHZlcnRleC55ID0gKCByYWRpdXMgKyB0dWJlICogTWF0aC5j
b3MoIHYgKSApICogTWF0aC5zaW4oIHUgKTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9IHR1
YmUgKiBNYXRoLnNpbiggdiApOworICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgMzsg
aiArKyApIHsKIAotICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0
ZXgueSwgdmVydGV4LnogKTsKKyAgICAgICAgICAgICAgICAgICAgZWRnZTEgPSBmYWNlWyBrZXlz
WyBqIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgZWRnZTIgPSBmYWNlWyBrZXlzWyAoIGogKyAx
ICkgJSAzIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgZWRnZVsgMCBdID0gTWF0aC5taW4oIGVk
Z2UxLCBlZGdlMiApOyAvLyBzb3J0aW5nIHByZXZlbnRzIGR1cGxpY2F0ZXMKKyAgICAgICAgICAg
ICAgICAgICAgZWRnZVsgMSBdID0gTWF0aC5tYXgoIGVkZ2UxLCBlZGdlMiApOwogCi0gICAgICAg
ICAgICAgICAgLy8gbm9ybWFsCisgICAgICAgICAgICAgICAgICAgIGtleSA9IGVkZ2VbIDAgXSAr
ICcsJyArIGVkZ2VbIDEgXTsKIAotICAgICAgICAgICAgICAgIGNlbnRlci54ID0gcmFkaXVzICog
TWF0aC5jb3MoIHUgKTsKLSAgICAgICAgICAgICAgICBjZW50ZXIueSA9IHJhZGl1cyAqIE1hdGgu
c2luKCB1ICk7Ci0gICAgICAgICAgICAgICAgbm9ybWFsLnN1YlZlY3RvcnMoIHZlcnRleCwgY2Vu
dGVyICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggZWRnZXNbIGtleSBd
ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIG5vcm1h
bC54LCBub3JtYWwueSwgbm9ybWFsLnogKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Vz
WyBrZXkgXSA9IHsgaW5kZXgxOiBlZGdlWyAwIF0sIGluZGV4MjogZWRnZVsgMSBdIH07CiAKLSAg
ICAgICAgICAgICAgICAvLyB1dgorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB1dnMucHVzaCggaSAvIHR1YnVsYXJTZWdtZW50cyApOwotICAgICAgICAgICAgICAgIHV2
cy5wdXNoKCBqIC8gcmFkaWFsU2VnbWVudHMgKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIH0KIAotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZ2VuZXJhdGUgaW5kaWNlcwotCi0g
ICAgICAgIGZvciAoIGogPSAxOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqICsrICkgewotCi0gICAg
ICAgICAgICBmb3IgKCBpID0gMTsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkgKysgKSB7CisgICAg
ICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcwogCi0gICAgICAgICAgICAgICAgLy8gaW5kaWNl
cworICAgICAgICAgICAgZm9yICgga2V5IGluIGVkZ2VzICkgewogCi0gICAgICAgICAgICAgICAg
dmFyIGEgPSAoIHR1YnVsYXJTZWdtZW50cyArIDEgKSAqIGogKyBpIC0gMTsKLSAgICAgICAgICAg
ICAgICB2YXIgYiA9ICggdHVidWxhclNlZ21lbnRzICsgMSApICogKCBqIC0gMSApICsgaSAtIDE7
Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSAoIHR1YnVsYXJTZWdtZW50cyArIDEgKSAqICggaiAt
IDEgKSArIGk7Ci0gICAgICAgICAgICAgICAgdmFyIGQgPSAoIHR1YnVsYXJTZWdtZW50cyArIDEg
KSAqIGogKyBpOworICAgICAgICAgICAgICAgIGUgPSBlZGdlc1sga2V5IF07CiAKLSAgICAgICAg
ICAgICAgICAvLyBmYWNlcworICAgICAgICAgICAgICAgIHZlcnRleCA9IGdlb21ldHJ5LnZlcnRp
Y2VzWyBlLmluZGV4MSBdOworICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54
LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKIAotICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCgg
YSwgYiwgZCApOwotICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYiwgYywgZCApOworICAg
ICAgICAgICAgICAgIHZlcnRleCA9IGdlb21ldHJ5LnZlcnRpY2VzWyBlLmluZGV4MiBdOworICAg
ICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4Lnog
KTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0KLQotICAgICAgICAvLyBidWlsZCBnZW9t
ZXRyeQotCi0gICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsKLSAgICAgICAgdGhpcy5h
ZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0
aWNlcywgMyApICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZs
b2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApOwotICAgICAgICB0aGlzLmFkZEF0
dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7Ci0K
LSAgICB9Ci0KLSAgICBUb3J1c0J1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVh
dGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIFRvcnVzQnVmZmVyR2VvbWV0cnku
cHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVG9ydXNCdWZmZXJHZW9tZXRyeTsKKyAgICAgICAgfSBl
bHNlIGlmICggZ2VvbWV0cnkgJiYgZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSApIHsKIAotICAg
IC8qKgotICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1
L2Jsb2cKLSAgICAgKi8KKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiwgaW5kaWNlcywgZ3JvdXBz
OworICAgICAgICAgICAgdmFyIGdyb3VwLCBzdGFydCwgY291bnQ7CisgICAgICAgICAgICB2YXIg
aW5kZXgxLCBpbmRleDI7CiAKLSAgICB2YXIgU2hhcGVVdGlscyA9IHsKKyAgICAgICAgICAgIHZl
cnRleCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgLy8gY2FsY3VsYXRlIGFyZWEgb2YgdGhl
IGNvbnRvdXIgcG9seWdvbgorICAgICAgICAgICAgaWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVs
bCApIHsKIAotICAgICAgICBhcmVhOiBmdW5jdGlvbiAoIGNvbnRvdXIgKSB7CisgICAgICAgICAg
ICAgICAgLy8gaW5kZXhlZCBCdWZmZXJHZW9tZXRyeQogCi0gICAgICAgICAgICB2YXIgbiA9IGNv
bnRvdXIubGVuZ3RoOwotICAgICAgICAgICAgdmFyIGEgPSAwLjA7CisgICAgICAgICAgICAgICAg
cG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOworICAgICAgICAgICAgICAg
IGluZGljZXMgPSBnZW9tZXRyeS5pbmRleDsKKyAgICAgICAgICAgICAgICBncm91cHMgPSBnZW9t
ZXRyeS5ncm91cHM7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBwID0gbiAtIDEsIHEgPSAwOyBx
IDwgbjsgcCA9IHEgKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBncm91cHMubGVuZ3RoID09
PSAwICkgewogCi0gICAgICAgICAgICAgICAgYSArPSBjb250b3VyWyBwIF0ueCAqIGNvbnRvdXJb
IHEgXS55IC0gY29udG91clsgcSBdLnggKiBjb250b3VyWyBwIF0ueTsKKyAgICAgICAgICAgICAg
ICAgICAgZ3JvdXBzID0gWyB7IHN0YXJ0OiAwLCBjb3VudDogaW5kaWNlcy5jb3VudCwgbWF0ZXJp
YWxJbmRleDogMCB9IF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHJldHVybiBhICogMC41OworICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGRh
dGEgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgYWxsIGVnZXMgd2l0aG91dCBkdXBsaWNhdGVzCiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBmb3IgKCBvID0gMCwgb2wgPSBncm91cHMubGVu
Z3RoOyBvIDwgb2w7ICsrIG8gKSB7CiAKLSAgICAgICAgdHJpYW5ndWxhdGU6ICggZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3Vwc1sgbyBdOwogCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAqIFRoaXMgY29kZSBpcyBhIHF1aWNrIHBvcnQgb2YgY29k
ZSB3cml0dGVuIGluIEMrKyB3aGljaCB3YXMgc3VibWl0dGVkIHRvCi0gICAgICAgICAgICAgKiBm
bGlwY29kZS5jb20gYnkgSm9obiBXLiBSYXRjbGlmZiAgLy8gSnVseSAyMiwgMjAwMAotICAgICAg
ICAgICAgICogU2VlIG9yaWdpbmFsIGNvZGUgYW5kIG1vcmUgaW5mb3JtYXRpb24gaGVyZToKLSAg
ICAgICAgICAgICAqIGh0dHA6Ly93d3cuZmxpcGNvZGUuY29tL2FyY2hpdmVzL0VmZmljaWVudF9Q
b2x5Z29uX1RyaWFuZ3VsYXRpb24uc2h0bWwKLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAg
KiBwb3J0ZWQgdG8gYWN0aW9uc2NyaXB0IGJ5IFpldmFuIFJvc3NlcgotICAgICAgICAgICAgICog
d3d3LmFjdGlvbnNuaXBwZXQuY29tCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogcG9y
dGVkIHRvIGphdmFzY3JpcHQgYnkgSm9zaHVhIEtvbwotICAgICAgICAgICAgICogaHR0cDovL3d3
dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZwotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAq
LworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGdyb3VwLnN0YXJ0OworICAgICAgICAgICAg
ICAgICAgICBjb3VudCA9IGdyb3VwLmNvdW50OwogCi0gICAgICAgICAgICBmdW5jdGlvbiBzbmlw
KCBjb250b3VyLCB1LCB2LCB3LCBuLCB2ZXJ0cyApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICggaSA9IHN0YXJ0LCBsID0gKCBzdGFydCArIGNvdW50ICk7IGkgPCBsOyBpICs9IDMgKSB7CiAK
LSAgICAgICAgICAgICAgICB2YXIgcDsKLSAgICAgICAgICAgICAgICB2YXIgYXgsIGF5LCBieCwg
Ynk7Ci0gICAgICAgICAgICAgICAgdmFyIGN4LCBjeSwgcHgsIHB5OworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaiA9IDA7IGogPCAzOyBqICsrICkgewogCi0gICAgICAgICAgICAgICAg
YXggPSBjb250b3VyWyB2ZXJ0c1sgdSBdIF0ueDsKLSAgICAgICAgICAgICAgICBheSA9IGNvbnRv
dXJbIHZlcnRzWyB1IF0gXS55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UxID0g
aW5kaWNlcy5nZXRYKCBpICsgaiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uy
ID0gaW5kaWNlcy5nZXRYKCBpICsgKCBqICsgMSApICUgMyApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVkZ2VbIDAgXSA9IE1hdGgubWluKCBlZGdlMSwgZWRnZTIgKTsgLy8gc29ydGlu
ZyBwcmV2ZW50cyBkdXBsaWNhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZVsg
MSBdID0gTWF0aC5tYXgoIGVkZ2UxLCBlZGdlMiApOwogCi0gICAgICAgICAgICAgICAgYnggPSBj
b250b3VyWyB2ZXJ0c1sgdiBdIF0ueDsKLSAgICAgICAgICAgICAgICBieSA9IGNvbnRvdXJbIHZl
cnRzWyB2IF0gXS55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGVkZ2VbIDAg
XSArICcsJyArIGVkZ2VbIDEgXTsKIAotICAgICAgICAgICAgICAgIGN4ID0gY29udG91clsgdmVy
dHNbIHcgXSBdLng7Ci0gICAgICAgICAgICAgICAgY3kgPSBjb250b3VyWyB2ZXJ0c1sgdyBdIF0u
eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVkZ2VzWyBrZXkgXSA9PT0gdW5k
ZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCAoIGJ4IC0gYXggKSAqICggY3kgLSBh
eSApIC0gKCBieSAtIGF5ICkgKiAoIGN4IC0gYXggKSA8PSAwICkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlc1sga2V5IF0gPSB7IGluZGV4MTogZWRn
ZVsgMCBdLCBpbmRleDI6IGVkZ2VbIDEgXSB9OwogCi0gICAgICAgICAgICAgICAgdmFyIGFYLCBh
WSwgYlgsIGJZLCBjWCwgY1k7Ci0gICAgICAgICAgICAgICAgdmFyIGFweCwgYXB5LCBicHgsIGJw
eSwgY3B4LCBjcHk7Ci0gICAgICAgICAgICAgICAgdmFyIGNDUk9TU2FwLCBiQ1JPU1NjcCwgYUNS
T1NTYnA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
YVggPSBjeCAtIGJ4OyAgYVkgPSBjeSAtIGJ5OwotICAgICAgICAgICAgICAgIGJYID0gYXggLSBj
eDsgIGJZID0gYXkgLSBjeTsKLSAgICAgICAgICAgICAgICBjWCA9IGJ4IC0gYXg7ICBjWSA9IGJ5
IC0gYXk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmb3Ig
KCBwID0gMDsgcCA8IG47IHAgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBweCA9IGNvbnRvdXJbIHZlcnRzWyBwIF0gXS54OwotICAgICAgICAgICAg
ICAgICAgICBweSA9IGNvbnRvdXJbIHZlcnRzWyBwIF0gXS55OworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBpZiAoICggKCBweCA9PT0gYXggKSAmJiAoIHB5ID09PSBh
eSApICkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoICggcHggPT09IGJ4ICkgJiYgKCBw
eSA9PT0gYnkgKSApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHB4ID09PSBjeCAp
ICYmICggcHkgPT09IGN5ICkgKSApICAgY29udGludWU7CisgICAgICAgICAgICAgICAgLy8gZ2Vu
ZXJhdGUgdmVydGljZXMKIAotICAgICAgICAgICAgICAgICAgICBhcHggPSBweCAtIGF4OyAgYXB5
ID0gcHkgLSBheTsKLSAgICAgICAgICAgICAgICAgICAgYnB4ID0gcHggLSBieDsgIGJweSA9IHB5
IC0gYnk7Ci0gICAgICAgICAgICAgICAgICAgIGNweCA9IHB4IC0gY3g7ICBjcHkgPSBweSAtIGN5
OworICAgICAgICAgICAgICAgIGZvciAoIGtleSBpbiBlZGdlcyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICAvLyBzZWUgaWYgcCBpcyBpbnNpZGUgdHJpYW5nbGUgYWJjCisgICAgICAgICAgICAg
ICAgICAgIGUgPSBlZGdlc1sga2V5IF07CiAKLSAgICAgICAgICAgICAgICAgICAgYUNST1NTYnAg
PSBhWCAqIGJweSAtIGFZICogYnB4OwotICAgICAgICAgICAgICAgICAgICBjQ1JPU1NhcCA9IGNY
ICogYXB5IC0gY1kgKiBhcHg7Ci0gICAgICAgICAgICAgICAgICAgIGJDUk9TU2NwID0gYlggKiBj
cHkgLSBiWSAqIGNweDsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4LmZyb21CdWZmZXJBdHRy
aWJ1dGUoIHBvc2l0aW9uLCBlLmluZGV4MSApOworICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNl
cy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCAoIGFDUk9TU2JwID49IC0gTnVtYmVyLkVQU0lMT04gKSAmJiAoIGJDUk9TU2Nw
ID49IC0gTnVtYmVyLkVQU0lMT04gKSAmJiAoIGNDUk9TU2FwID49IC0gTnVtYmVyLkVQU0lMT04g
KSApIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4LmZyb21CdWZmZXJB
dHRyaWJ1dGUoIHBvc2l0aW9uLCBlLmluZGV4MiApOworICAgICAgICAgICAgICAgICAgICB2ZXJ0
aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CiAKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyB0YWtlcyBpbiBhbiBjb250b3VyIGFycmF5IGFuZCByZXR1cm5zCi0K
LSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0cmlhbmd1bGF0ZSggY29udG91ciwgaW5kaWNl
cyApIHsKLQotICAgICAgICAgICAgICAgIHZhciBuID0gY29udG91ci5sZW5ndGg7CisgICAgICAg
ICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgaWYgKCBuIDwgMyApIHJldHVybiBudWxs
OworICAgICAgICAgICAgICAgIC8vIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5CiAKLSAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gW10sCi0gICAgICAgICAgICAgICAgICAgIHZlcnRzID0g
W10sCi0gICAgICAgICAgICAgICAgICAgIHZlcnRJbmRpY2VzID0gW107CisgICAgICAgICAgICAg
ICAgcG9zaXRpb24gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uOwogCi0gICAgICAgICAg
ICAgICAgLyogd2Ugd2FudCBhIGNvdW50ZXItY2xvY2t3aXNlIHBvbHlnb24gaW4gdmVydHMgKi8K
KyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9ICggcG9zaXRpb24uY291bnQgLyAzICk7
IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgdmFyIHUsIHYsIHc7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgMzsgaiArKyApIHsKIAotICAgICAgICAgICAg
ICAgIGlmICggU2hhcGVVdGlscy5hcmVhKCBjb250b3VyICkgPiAwLjAgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aHJlZSBlZGdlcyBwZXIgdHJpYW5nbGUsIGFuIGVkZ2UgaXMgcmVw
cmVzZW50ZWQgYXMgKGluZGV4MSwgaW5kZXgyKQorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZS5nLiB0aGUgZmlyc3QgdHJpYW5nbGUgaGFzIHRoZSBmb2xsb3dpbmcgZWRnZXM6ICgwLDEpLCgx
LDIpLCgyLDApCiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICggdiA9IDA7IHYgPCBuOyB2ICsr
ICkgdmVydHNbIHYgXSA9IHY7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDEgPSAzICog
aSArIGo7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXguZnJvbUJ1ZmZlckF0dHJpYnV0
ZSggcG9zaXRpb24sIGluZGV4MSApOworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXMu
cHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApOwogCi0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4MiA9IDMgKiBpICsgKCAoIGog
KyAxICkgJSAzICk7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXguZnJvbUJ1ZmZlckF0
dHJpYnV0ZSggcG9zaXRpb24sIGluZGV4MiApOworICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApOwogCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoIHYgPSAwOyB2IDwgbjsgdiArKyApIHZlcnRzWyB2IF0gPSAoIG4gLSAx
ICkgLSB2OworICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB2YXIgbnYgPSBuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgLyogIHJlbW92ZSBudiAtIDIgdmVydGljZXMsIGNyZWF0aW5nIDEgdHJpYW5nbGUgZXZlcnkg
dGltZSAqLworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIgY291bnQgPSAyICogbnY7
ICAgLyogZXJyb3IgZGV0ZWN0aW9uICovCisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKCB2ID0gbnYgLSAxOyBudiA+IDI7ICkgeworICAgICAgICB0aGlz
LmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZl
cnRpY2VzLCAzICkgKTsKIAotICAgICAgICAgICAgICAgICAgICAvKiBpZiB3ZSBsb29wLCBpdCBp
cyBwcm9iYWJseSBhIG5vbi1zaW1wbGUgcG9seWdvbiAqLworICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoICggY291bnQgLS0gKSA8PSAwICkgeworICAgIFdpcmVmcmFtZUdlb21ldHJ5
LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwor
ICAgIFdpcmVmcmFtZUdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdpcmVmcmFtZUdl
b21ldHJ5OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyoqIFRyaWFuZ3VsYXRlOiBFUlJP
UiAtIHByb2JhYmxlIGJhZCBwb2x5Z29uIQorICAgIC8qKgorICAgICAqIEBhdXRob3Igeno4NSAv
IGh0dHBzOi8vZ2l0aHViLmNvbS96ejg1CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6
Ly9naXRodWIuY29tL011Z2VuODcKKyAgICAgKgorICAgICAqIFBhcmFtZXRyaWMgU3VyZmFjZXMg
R2VvbWV0cnkKKyAgICAgKiBiYXNlZCBvbiB0aGUgYnJpbGxpYW50IGFydGljbGUgYnkgQHByaWRl
b3V0IGh0dHA6Ly9wcmlkZW91dC5uZXQvYmxvZy8/cD00NAorICAgICAqLwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvL3Rocm93ICggIldhcm5pbmcsIHVuYWJsZSB0byB0cmlhbmd1bGF0ZSBw
b2x5Z29uISIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIG51bGw7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgd2FybmluZyBpcyBmaW5lLCBlc3BlY2lh
bGx5IHBvbHlnb25zIGFyZSB0cmlhbmd1bGF0ZWQgaW4gcmV2ZXJzZS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlNoYXBlVXRpbHM6IFVuYWJsZSB0byB0cmlh
bmd1bGF0ZSBwb2x5Z29uISBpbiB0cmlhbmd1bGF0ZSgpJyApOworICAgIC8vIFBhcmFtZXRyaWNH
ZW9tZXRyeQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGljZXMgKSByZXR1cm4g
dmVydEluZGljZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IGZ1bmN0aW9uIFBhcmFtZXRyaWNHZW9tZXRyeSggZnVuYywgc2xpY2VzLCBzdGFja3MgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7CiAK
LSAgICAgICAgICAgICAgICAgICAgLyogdGhyZWUgY29uc2VjdXRpdmUgdmVydGljZXMgaW4gY3Vy
cmVudCBwb2x5Z29uLCA8dSx2LHc+ICovCisgICAgICAgIHRoaXMudHlwZSA9ICdQYXJhbWV0cmlj
R2VvbWV0cnknOwogCi0gICAgICAgICAgICAgICAgICAgIHUgPSB2OyAgICAgIGlmICggbnYgPD0g
dSApIHUgPSAwOyAgICAgLyogcHJldmlvdXMgKi8KLSAgICAgICAgICAgICAgICAgICAgdiA9IHUg
KyAxOyAgaWYgKCBudiA8PSB2ICkgdiA9IDA7ICAgICAvKiBuZXcgdiAgICAqLwotICAgICAgICAg
ICAgICAgICAgICB3ID0gdiArIDE7ICBpZiAoIG52IDw9IHcgKSB3ID0gMDsgICAgIC8qIG5leHQg
ICAgICovCisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIGZ1bmM6IGZ1
bmMsCisgICAgICAgICAgICBzbGljZXM6IHNsaWNlcywKKyAgICAgICAgICAgIHN0YWNrczogc3Rh
Y2tzCisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzbmlwKCBjb250b3Vy
LCB1LCB2LCB3LCBudiwgdmVydHMgKSApIHsKKyAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0
cnkoIG5ldyBQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnkoIGZ1bmMsIHNsaWNlcywgc3RhY2tzICkg
KTsKKyAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBhLCBiLCBjLCBzLCB0OworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAg
LyogdHJ1ZSBuYW1lcyBvZiB0aGUgdmVydGljZXMgKi8KKyAgICBQYXJhbWV0cmljR2VvbWV0cnku
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgUGFy
YW1ldHJpY0dlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcmFtZXRyaWNHZW9tZXRy
eTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHZlcnRzWyB1IF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBiID0gdmVydHNbIHYgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMg
PSB2ZXJ0c1sgdyBdOworICAgIC8vIFBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeQogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgVHJpYW5nbGUgKi8KKyAgICBmdW5jdGlvbiBQYXJh
bWV0cmljQnVmZmVyR2VvbWV0cnkoIGZ1bmMsIHNsaWNlcywgc3RhY2tzICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCggWyBjb250b3VyWyBhIF0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udG91clsgYiBdLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRvdXJbIGMgXSBdICk7CisgICAgICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMg
KTsKIAorICAgICAgICB0aGlzLnR5cGUgPSAnUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5JzsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydEluZGljZXMucHVzaCggWyB2ZXJ0c1sgdSBdLCB2
ZXJ0c1sgdiBdLCB2ZXJ0c1sgdyBdIF0gKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyog
cmVtb3ZlIHYgZnJvbSB0aGUgcmVtYWluaW5nIHBvbHlnb24gKi8KKyAgICAgICAgdGhpcy5wYXJh
bWV0ZXJzID0geworICAgICAgICAgICAgZnVuYzogZnVuYywKKyAgICAgICAgICAgIHNsaWNlczog
c2xpY2VzLAorICAgICAgICAgICAgc3RhY2tzOiBzdGFja3MKKyAgICAgICAgfTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggcyA9IHYsIHQgPSB2ICsgMTsgdCA8IG52OyBzICsrLCB0
ICsrICkgeworICAgICAgICAvLyBidWZmZXJzCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0c1sgcyBdID0gdmVydHNbIHQgXTsKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAg
ICAgICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAg
ICAgIHZhciB1dnMgPSBbXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB2
YXIgRVBTID0gMC4wMDAwMTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbnYgLS07CisgICAg
ICAgIHZhciBub3JtYWwgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvKiByZXNldCBlcnJvciBkZXRlY3Rpb24gY291bnRlciAqLworICAgICAgICB2YXIgcDAgPSBu
ZXcgVmVjdG9yMygpLCBwMSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHZhciBwdSA9IG5ldyBW
ZWN0b3IzKCksIHB2ID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgPSAyICogbnY7CisgICAgICAgIHZhciBpLCBqOwogCi0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKCBmdW5jLmxlbmd0aCA8IDMgKSB7CiAKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5OiBG
dW5jdGlvbiBtdXN0IG5vdyBtb2RpZnkgYSBWZWN0b3IzIGFzIHRoaXJkIHBhcmFtZXRlci4nICk7
CiAKLSAgICAgICAgICAgICAgICBpZiAoIGluZGljZXMgKSByZXR1cm4gdmVydEluZGljZXM7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB9
CisgICAgICAgIC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB1dnMKIAotICAgICAg
ICB9ICkoKSwKKyAgICAgICAgdmFyIHNsaWNlQ291bnQgPSBzbGljZXMgKyAxOwogCi0gICAgICAg
IHRyaWFuZ3VsYXRlU2hhcGU6IGZ1bmN0aW9uICggY29udG91ciwgaG9sZXMgKSB7CisgICAgICAg
IGZvciAoIGkgPSAwOyBpIDw9IHN0YWNrczsgaSArKyApIHsKIAotICAgICAgICAgICAgZnVuY3Rp
b24gcmVtb3ZlRHVwRW5kUHRzKHBvaW50cykgeworICAgICAgICAgICAgdmFyIHYgPSBpIC8gc3Rh
Y2tzOwogCi0gICAgICAgICAgICAgICAgdmFyIGwgPSBwb2ludHMubGVuZ3RoOworICAgICAgICAg
ICAgZm9yICggaiA9IDA7IGogPD0gc2xpY2VzOyBqICsrICkgewogCi0gICAgICAgICAgICAgICAg
aWYgKCBsID4gMiAmJiBwb2ludHNbIGwgLSAxIF0uZXF1YWxzKCBwb2ludHNbIDAgXSApICkgewor
ICAgICAgICAgICAgICAgIHZhciB1ID0gaiAvIHNsaWNlczsKIAotICAgICAgICAgICAgICAgICAg
ICBwb2ludHMucG9wKCk7CisgICAgICAgICAgICAgICAgLy8gdmVydGV4CiAKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZnVuYyggdSwgdiwgcDAgKTsKKyAgICAgICAgICAgICAg
ICB2ZXJ0aWNlcy5wdXNoKCBwMC54LCBwMC55LCBwMC56ICk7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBub3JtYWwKIAotICAgICAgICAgICAgcmVtb3ZlRHVwRW5kUHRzKCBj
b250b3VyICk7Ci0gICAgICAgICAgICBob2xlcy5mb3JFYWNoKCByZW1vdmVEdXBFbmRQdHMgKTsK
KyAgICAgICAgICAgICAgICAvLyBhcHByb3hpbWF0ZSB0YW5nZW50IHZlY3RvcnMgdmlhIGZpbml0
ZSBkaWZmZXJlbmNlcwogCi0gICAgICAgICAgICBmdW5jdGlvbiBwb2ludF9pbl9zZWdtZW50XzJE
X2NvbGluKCBpblNlZ1B0MSwgaW5TZWdQdDIsIGluT3RoZXJQdCApIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIHUgLSBFUFMgPj0gMCApIHsKIAotICAgICAgICAgICAgICAgIC8vIGluT3RoZXJQdCBu
ZWVkcyB0byBiZSBjb2xsaW5lYXIgdG8gdGhlIGluU2VnbWVudAotICAgICAgICAgICAgICAgIGlm
ICggaW5TZWdQdDEueCAhPT0gaW5TZWdQdDIueCApIHsKKyAgICAgICAgICAgICAgICAgICAgZnVu
YyggdSAtIEVQUywgdiwgcDEgKTsKKyAgICAgICAgICAgICAgICAgICAgcHUuc3ViVmVjdG9ycygg
cDAsIHAxICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBpblNlZ1B0MS54IDwgaW5TZWdQ
dDIueCApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gICggKCBpblNlZ1B0MS54IDw9IGluT3RoZXJQdC54ICkgJiYgKCBpbk90aGVy
UHQueCA8PSBpblNlZ1B0Mi54ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgZnVuYyggdSArIEVQ
UywgdiwgcDEgKTsKKyAgICAgICAgICAgICAgICAgICAgcHUuc3ViVmVjdG9ycyggcDEsIHAwICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgKCAoIGluU2VnUHQyLnggPD0gaW5PdGhlclB0
LnggKSAmJiAoIGluT3RoZXJQdC54IDw9IGluU2VnUHQxLnggKSApOworICAgICAgICAgICAgICAg
IGlmICggdiAtIEVQUyA+PSAwICkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZnVuYyggdSwgdiAtIEVQUywgcDEgKTsKKyAgICAgICAgICAgICAgICAgICAg
cHYuc3ViVmVjdG9ycyggcDAsIHAxICk7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgICAgICAgICAgICAgIGlmICggaW5TZWdQdDEueSA8IGluU2VnUHQyLnkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZ1bmMoIHUsIHYgKyBFUFMsIHAxICk7CisgICAgICAgICAgICAgICAg
ICAgIHB2LnN1YlZlY3RvcnMoIHAxLCBwMCApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gICggKCBpblNlZ1B0MS55IDw9IGluT3RoZXJQdC55ICkgJiYgKCBpbk90aGVyUHQueSA8
PSBpblNlZ1B0Mi55ICkgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBjcm9zcyBwcm9kdWN0IG9mIHRhbmdlbnQg
dmVjdG9ycyByZXR1cm5zIHN1cmZhY2Ugbm9ybWFsCiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAgKCAoIGluU2VnUHQyLnkgPD0gaW5PdGhlclB0LnkgKSAmJiAoIGluT3RoZXJQdC55
IDw9IGluU2VnUHQxLnkgKSApOworICAgICAgICAgICAgICAgIG5vcm1hbC5jcm9zc1ZlY3RvcnMo
IHB1LCBwdiApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCggbm9y
bWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyB1dgogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHV2cy5wdXNoKCB1LCB2ICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rp
b24gaW50ZXJzZWN0X3NlZ21lbnRzXzJEKCBpblNlZzFQdDEsIGluU2VnMVB0MiwgaW5TZWcyUHQx
LCBpblNlZzJQdDIsIGluRXhjbHVkZUFkamFjZW50U2VncyApIHsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgdmFyIHNlZzFkeCA9IGluU2VnMVB0Mi54IC0gaW5TZWcxUHQxLngsICAgc2Vn
MWR5ID0gaW5TZWcxUHQyLnkgLSBpblNlZzFQdDEueTsKLSAgICAgICAgICAgICAgICB2YXIgc2Vn
MmR4ID0gaW5TZWcyUHQyLnggLSBpblNlZzJQdDEueCwgICBzZWcyZHkgPSBpblNlZzJQdDIueSAt
IGluU2VnMlB0MS55OworICAgICAgICAvLyBnZW5lcmF0ZSBpbmRpY2VzCiAKLSAgICAgICAgICAg
ICAgICB2YXIgc2VnMXNlZzJkeCA9IGluU2VnMVB0MS54IC0gaW5TZWcyUHQxLng7Ci0gICAgICAg
ICAgICAgICAgdmFyIHNlZzFzZWcyZHkgPSBpblNlZzFQdDEueSAtIGluU2VnMlB0MS55OworICAg
ICAgICBmb3IgKCBpID0gMDsgaSA8IHN0YWNrczsgaSArKyApIHsKIAotICAgICAgICAgICAgICAg
IHZhciBsaW1pdCAgICAgICA9IHNlZzFkeSAqIHNlZzJkeCAtIHNlZzFkeCAqIHNlZzJkeTsKLSAg
ICAgICAgICAgICAgICB2YXIgcGVycFNlZzEgICAgPSBzZWcxZHkgKiBzZWcxc2VnMmR4IC0gc2Vn
MWR4ICogc2VnMXNlZzJkeTsKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgc2xpY2VzOyBq
ICsrICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggbGltaXQgKSA+IE51bWJl
ci5FUFNJTE9OICkgeworICAgICAgICAgICAgICAgIHZhciBhID0gaSAqIHNsaWNlQ291bnQgKyBq
OworICAgICAgICAgICAgICAgIHZhciBiID0gaSAqIHNsaWNlQ291bnQgKyBqICsgMTsKKyAgICAg
ICAgICAgICAgICB2YXIgYyA9ICggaSArIDEgKSAqIHNsaWNlQ291bnQgKyBqICsgMTsKKyAgICAg
ICAgICAgICAgICB2YXIgZCA9ICggaSArIDEgKSAqIHNsaWNlQ291bnQgKyBqOwogCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG5vdCBwYXJhbGxlbAorICAgICAgICAgICAgICAgIC8vIGZhY2VzIG9u
ZSBhbmQgdHdvCiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnBTZWcyOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIGxpbWl0ID4gMCApIHsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1
c2goIGEsIGIsIGQgKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIHBlcnBTZWcxIDwgMCApIHx8ICggcGVy
cFNlZzEgPiBsaW1pdCApICkgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwZXJwU2VnMiA9IHNlZzJkeSAqIHNlZzFzZWcyZHggLSBzZWcyZHggKiBzZWcxc2VnMmR5
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIHBlcnBTZWcyIDwgMCApIHx8ICggcGVy
cFNlZzIgPiBsaW1pdCApICkgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICggcGVycFNlZzEgPiAwICkgfHwgKCBwZXJwU2VnMSA8IGxpbWl0ICkgKSAg
ICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBTZWcyID0gc2Vn
MmR5ICogc2VnMXNlZzJkeCAtIHNlZzJkeCAqIHNlZzFzZWcyZHk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICggcGVycFNlZzIgPiAwICkgfHwgKCBwZXJwU2VnMiA8IGxpbWl0ICkgKSAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgLy8gYnVpbGQgZ2VvbWV0cnkKIAotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsKKyAgICAgICAg
dGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRl
KCB2ZXJ0aWNlcywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnbm9ybWFsJywg
bmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApOworICAgICAgICB0aGlz
LmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiAp
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gaS5lLiB0byByZWR1Y2Ugcm91bmRpbmcgZXJy
b3JzCi0gICAgICAgICAgICAgICAgICAgIC8vIGludGVyc2VjdGlvbiBhdCBlbmRwb2ludCBvZiBz
ZWdtZW50IzE/Ci0gICAgICAgICAgICAgICAgICAgIGlmICggcGVycFNlZzIgPT09IDAgKSB7Cisg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggaW5FeGNsdWRlQWRqYWNlbnRT
ZWdzICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIHBlcnBTZWcxID09PSAw
ICkgfHwgKCBwZXJwU2VnMSA9PT0gbGltaXQgKSApICkgICAgIHJldHVybiBbXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBbIGluU2VnMVB0MSBdOworICAgIFBhcmFtZXRyaWNCdWZm
ZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90
b3R5cGUgKTsKKyAgICBQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVj
dG9yID0gUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5OwogCi0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBwZXJwU2VnMiA9PT0gbGltaXQgKSB7CisgICAgLyoq
CisgICAgICogQGF1dGhvciBjbG9ja3dvcmtnZWVrIC8gaHR0cHM6Ly9naXRodWIuY29tL2Nsb2Nr
d29ya2dlZWsKKyAgICAgKiBAYXV0aG9yIHRpbW90aHlwcmF0bGV5IC8gaHR0cHM6Ly9naXRodWIu
Y29tL3RpbW90aHlwcmF0bGV5CisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9n
aXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9n
aXRodWIuY29tL011Z2VuODcKKyAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAoIGluRXhjbHVkZUFkamFjZW50U2VncyApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICggKCBwZXJwU2VnMSA9PT0gMCApIHx8ICggcGVycFNlZzEgPT09IGxpbWl0ICkgKSApICAg
ICByZXR1cm4gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBpblNlZzFQdDIg
XTsKKyAgICAvLyBQb2x5aGVkcm9uR2VvbWV0cnkKIAotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIGludGVyc2VjdGlvbiBhdCBlbmRwb2ludCBvZiBzZWdtZW50
IzI/Ci0gICAgICAgICAgICAgICAgICAgIGlmICggcGVycFNlZzEgPT09IDAgKSAgICAgICByZXR1
cm4gWyBpblNlZzJQdDEgXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwZXJwU2VnMSA9PT0g
bGltaXQgKSAgIHJldHVybiBbIGluU2VnMlB0MiBdOworICAgIGZ1bmN0aW9uIFBvbHloZWRyb25H
ZW9tZXRyeSggdmVydGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsICkgewogCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHJldHVybiByZWFsIGludGVyc2VjdGlvbiBwb2ludAotICAgICAgICAg
ICAgICAgICAgICB2YXIgZmFjdG9yU2VnMSA9IHBlcnBTZWcyIC8gbGltaXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAgWyB7IHg6IGluU2VnMVB0MS54ICsgZmFjdG9yU2VnMSAqIHNlZzFk
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaW5TZWcxUHQxLnkgKyBmYWN0
b3JTZWcxICogc2VnMWR5IH0gXTsKKyAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOwogCi0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy50eXBlID0gJ1BvbHloZWRyb25H
ZW9tZXRyeSc7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyYWxsZWwgb3IgY29sbGluZWFy
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggKCBwZXJwU2VnMSAhPT0gMCApIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgKCBzZWcyZHkgKiBzZWcxc2VnMmR4ICE9PSBzZWcyZHggKiBzZWcx
c2VnMmR5ICkgKSAgICAgICAgICByZXR1cm4gW107CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9
IHsKKyAgICAgICAgICAgIHZlcnRpY2VzOiB2ZXJ0aWNlcywKKyAgICAgICAgICAgIGluZGljZXM6
IGluZGljZXMsCisgICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgICAgIGRldGFp
bDogZGV0YWlsCisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhleSBhcmUg
Y29sbGluZWFyIG9yIGRlZ2VuZXJhdGUKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNlZzFQdCA9
ICggKCBzZWcxZHggPT09IDAgKSAmJiAoIHNlZzFkeSA9PT0gMCApICk7ICAvLyBzZWdtZW50MSBp
cyBqdXN0IGEgcG9pbnQ/Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWcyUHQgPSAoICggc2Vn
MmR4ID09PSAwICkgJiYgKCBzZWcyZHkgPT09IDAgKSApOyAgLy8gc2VnbWVudDIgaXMganVzdCBh
IHBvaW50PwotICAgICAgICAgICAgICAgICAgICAvLyBib3RoIHNlZ21lbnRzIGFyZSBwb2ludHMK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWcxUHQgJiYgc2VnMlB0ICkgeworICAgICAgICB0
aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSggdmVy
dGljZXMsIGluZGljZXMsIHJhZGl1cywgZGV0YWlsICkgKTsKKyAgICAgICAgdGhpcy5tZXJnZVZl
cnRpY2VzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBpblNlZzFQdDEueCAh
PT0gaW5TZWcyUHQxLnggKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGluU2Vn
MVB0MS55ICE9PSBpblNlZzJQdDEueSApICkgICAgICByZXR1cm4gW107ICAvLyB0aGV5IGFyZSBk
aXN0aW5jdCAgcG9pbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBpblNlZzFQ
dDEgXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGV5IGFyZSB0
aGUgc2FtZSBwb2ludAorICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHNlZ21lbnQjMSAgaXMgYSBzaW5nbGUgcG9pbnQKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzZWcxUHQgKSB7CisgICAgUG9seWhlZHJvbkdlb21ldHJ5LnByb3RvdHlwZSA9
IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOworICAgIFBvbHloZWRyb25HZW9t
ZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5aGVkcm9uR2VvbWV0cnk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggISBwb2ludF9pbl9zZWdtZW50XzJEX2NvbGluKCBpblNl
ZzJQdDEsIGluU2VnMlB0MiwgaW5TZWcxUHQxICkgKSAgICAgICByZXR1cm4gW107ICAgICAgLy8g
YnV0IG5vdCBpbiBzZWdtZW50IzIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIGlu
U2VnMVB0MSBdOworICAgIC8vIFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeQogCi0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2VnbWVudCMyICBpcyBhIHNpbmds
ZSBwb2ludAotICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZzJQdCApIHsKKyAgICBmdW5jdGlv
biBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnkoIHZlcnRpY2VzLCBpbmRpY2VzLCByYWRpdXMsIGRl
dGFpbCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHBvaW50X2luX3NlZ21l
bnRfMkRfY29saW4oIGluU2VnMVB0MSwgaW5TZWcxUHQyLCBpblNlZzJQdDEgKSApICAgICAgIHJl
dHVybiBbXTsgICAgICAvLyBidXQgbm90IGluIHNlZ21lbnQjMQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFsgaW5TZWcyUHQxIF07CisgICAgICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwo
IHRoaXMgKTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMudHlwZSA9ICdQ
b2x5aGVkcm9uQnVmZmVyR2VvbWV0cnknOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXkg
YXJlIGNvbGxpbmVhciBzZWdtZW50cywgd2hpY2ggbWlnaHQgb3ZlcmxhcAotICAgICAgICAgICAg
ICAgICAgICB2YXIgc2VnMW1pbiwgc2VnMW1heCwgc2VnMW1pblZhbCwgc2VnMW1heFZhbDsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHNlZzJtaW4sIHNlZzJtYXgsIHNlZzJtaW5WYWwsIHNlZzJt
YXhWYWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc2VnMWR4ICE9PSAwICkgeworICAgICAg
ICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICB2ZXJ0aWNlczogdmVydGljZXMsCisg
ICAgICAgICAgICBpbmRpY2VzOiBpbmRpY2VzLAorICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMs
CisgICAgICAgICAgICBkZXRhaWw6IGRldGFpbAorICAgICAgICB9OwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgc2VnbWVudHMgYXJlIE5PVCBvbiBhIHZlcnRpY2FsIGxpbmUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5TZWcxUHQxLnggPCBpblNlZzFQdDIueCApIHsK
KyAgICAgICAgcmFkaXVzID0gcmFkaXVzIHx8IDE7CisgICAgICAgIGRldGFpbCA9IGRldGFpbCB8
fCAwOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnMW1pbiA9IGluU2VnMVB0MTsg
c2VnMW1pblZhbCA9IGluU2VnMVB0MS54OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
ZzFtYXggPSBpblNlZzFQdDI7IHNlZzFtYXhWYWwgPSBpblNlZzFQdDIueDsKKyAgICAgICAgLy8g
ZGVmYXVsdCBidWZmZXIgZGF0YQogCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICB2YXIgdmVydGV4QnVmZmVyID0gW107CisgICAgICAgIHZhciB1dkJ1ZmZlciA9IFtd
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnMW1pbiA9IGluU2VnMVB0Mjsgc2Vn
MW1pblZhbCA9IGluU2VnMVB0Mi54OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZzFt
YXggPSBpblNlZzFQdDE7IHNlZzFtYXhWYWwgPSBpblNlZzFQdDEueDsKKyAgICAgICAgLy8gdGhl
IHN1YmRpdmlzaW9uIGNyZWF0ZXMgdGhlIHZlcnRleCBidWZmZXIgZGF0YQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluU2VnMlB0MS54
IDwgaW5TZWcyUHQyLnggKSB7CisgICAgICAgIHN1YmRpdmlkZSggZGV0YWlsICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWcybWluID0gaW5TZWcyUHQxOyBzZWcybWluVmFsID0g
aW5TZWcyUHQxLng7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnMm1heCA9IGluU2Vn
MlB0Mjsgc2VnMm1heFZhbCA9IGluU2VnMlB0Mi54OworICAgICAgICAvLyBhbGwgdmVydGljZXMg
c2hvdWxkIGxpZSBvbiBhIGNvbmNlcHR1YWwgc3BoZXJlIHdpdGggYSBnaXZlbiByYWRpdXMKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgYXBwcGx5UmFkaXVzKCBy
YWRpdXMgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZzJtaW4gPSBpblNlZzJQ
dDI7IHNlZzJtaW5WYWwgPSBpblNlZzJQdDIueDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWcybWF4ID0gaW5TZWcyUHQxOyBzZWcybWF4VmFsID0gaW5TZWcyUHQxLng7CisgICAgICAg
IC8vIGZpbmFsbHksIGNyZWF0ZSB0aGUgdXYgZGF0YQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgIGdlbmVyYXRlVVZzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gYnVpbGQgbm9uLWluZGV4ZWQgZ2VvbWV0cnkKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIHNlZ21lbnRzIGFyZSBvbiBhIHZlcnRpY2FsIGxpbmUKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaW5TZWcxUHQxLnkgPCBpblNlZzFQdDIueSApIHsKKyAg
ICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0
cmlidXRlKCB2ZXJ0ZXhCdWZmZXIsIDMgKSApOworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSgg
J25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0ZXhCdWZmZXIuc2xpY2Uo
KSwgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1
ZmZlckF0dHJpYnV0ZSggdXZCdWZmZXIsIDIgKSApOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VnMW1pbiA9IGluU2VnMVB0MTsgc2VnMW1pblZhbCA9IGluU2VnMVB0MS55OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlZzFtYXggPSBpblNlZzFQdDI7IHNlZzFtYXhWYWwg
PSBpblNlZzFQdDIueTsKKyAgICAgICAgaWYgKCBkZXRhaWwgPT09IDAgKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNvbXB1dGVWZXJ0ZXhO
b3JtYWxzKCk7IC8vIGZsYXQgbm9ybWFscwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VnMW1pbiA9IGluU2VnMVB0Mjsgc2VnMW1pblZhbCA9IGluU2VnMVB0Mi55OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlZzFtYXggPSBpblNlZzFQdDE7IHNlZzFtYXhWYWwgPSBpblNl
ZzFQdDEueTsKKyAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpblNlZzJQdDEueSA8IGluU2VnMlB0Mi55ICkg
eworICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7IC8vIHNtb290aCBub3JtYWxz
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWcybWluID0gaW5TZWcyUHQxOyBzZWcy
bWluVmFsID0gaW5TZWcyUHQxLnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnMm1h
eCA9IGluU2VnMlB0Mjsgc2VnMm1heFZhbCA9IGluU2VnMlB0Mi55OworICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGhlbHBlciBmdW5jdGlv
bnMKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZzJtaW4gPSBpblNlZzJQdDI7IHNl
ZzJtaW5WYWwgPSBpblNlZzJQdDIueTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWcy
bWF4ID0gaW5TZWcyUHQxOyBzZWcybWF4VmFsID0gaW5TZWcyUHQxLnk7CisgICAgICAgIGZ1bmN0
aW9uIHN1YmRpdmlkZSggZGV0YWlsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgYSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgYiA9IG5l
dyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgYyA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZzFtaW5WYWwgPD0g
c2VnMm1pblZhbCApIHsKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBhbGwgZmFjZXMgYW5k
IGFwcGx5IGEgc3ViZGl2aXNvbiB3aXRoIHRoZSBnaXZlbiBkZXRhaWwgdmFsdWUKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBzZWcxbWF4VmFsIDwgIHNlZzJtaW5WYWwgKSByZXR1cm4g
W107Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZzFtYXhWYWwgPT09IHNlZzJtaW5W
YWwgKSAgICB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0
aDsgaSArPSAzICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbkV4Y2x1
ZGVBZGphY2VudFNlZ3MgKSAgICAgICAgcmV0dXJuIFtdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBbIHNlZzJtaW4gXTsKKyAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHZl
cnRpY2VzIG9mIHRoZSBmYWNlCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggc2VnMW1heFZhbCA8PSBzZWcybWF4VmFsICkgcmV0dXJuIFsg
c2VnMm1pbiwgc2VnMW1heCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICBbIHNl
ZzJtaW4sIHNlZzJtYXggXTsKKyAgICAgICAgICAgICAgICBnZXRWZXJ0ZXhCeUluZGV4KCBpbmRp
Y2VzWyBpICsgMCBdLCBhICk7CisgICAgICAgICAgICAgICAgZ2V0VmVydGV4QnlJbmRleCggaW5k
aWNlc1sgaSArIDEgXSwgYiApOworICAgICAgICAgICAgICAgIGdldFZlcnRleEJ5SW5kZXgoIGlu
ZGljZXNbIGkgKyAyIF0sIGMgKTsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIHBlcmZvcm0gc3ViZGl2aXNpb24KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzZWcxbWluVmFsID4gIHNlZzJtYXhWYWwgKSByZXR1cm4gW107Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNlZzFtaW5WYWwgPT09IHNlZzJtYXhWYWwgKSAgICB7Cisg
ICAgICAgICAgICAgICAgc3ViZGl2aWRlRmFjZSggYSwgYiwgYywgZGV0YWlsICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluRXhjbHVkZUFkamFjZW50U2VncyApICAgICAg
ICByZXR1cm4gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgc2VnMW1p
biBdOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNlZzFtYXhWYWwgPD0gc2VnMm1heFZhbCApIHJldHVybiBb
IHNlZzFtaW4sIHNlZzFtYXggXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgWyBz
ZWcxbWluLCBzZWcybWF4IF07CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIGZ1bmN0aW9uIHN1YmRpdmlkZUZhY2UoIGEsIGIsIGMsIGRldGFpbCApIHsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjb2xzID0gTWF0aC5wb3coIDIsIGRldGFp
bCApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyB3ZSB1c2UgdGhpcyBtdWx0aWRp
bWVuc2lvbmFsIGFycmF5IGFzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIHRoZSBzdWJk
aXZpc2lvbgorCisgICAgICAgICAgICB2YXIgdiA9IFtdOwogCi0gICAgICAgICAgICBmdW5jdGlv
biBpc1BvaW50SW5zaWRlQW5nbGUoIGluVmVydGV4LCBpbkxlZ0Zyb21QdCwgaW5MZWdUb1B0LCBp
bk90aGVyUHQgKSB7CisgICAgICAgICAgICB2YXIgaSwgajsKIAotICAgICAgICAgICAgICAgIC8v
IFRoZSBvcmRlciBvZiBsZWdzIGlzIGltcG9ydGFudAorICAgICAgICAgICAgLy8gY29uc3RydWN0
IGFsbCBvZiB0aGUgdmVydGljZXMgZm9yIHRoaXMgc3ViZGl2aXNpb24KIAotICAgICAgICAgICAg
ICAgIC8vIHRyYW5zbGF0aW9uIG9mIGFsbCBwb2ludHMsIHNvIHRoYXQgVmVydGV4IGlzIGF0ICgw
LDApCi0gICAgICAgICAgICAgICAgdmFyIGxlZ0Zyb21QdFggID0gaW5MZWdGcm9tUHQueCAtIGlu
VmVydGV4LngsICBsZWdGcm9tUHRZICAgPSBpbkxlZ0Zyb21QdC55IC0gaW5WZXJ0ZXgueTsKLSAg
ICAgICAgICAgICAgICB2YXIgbGVnVG9QdFggICAgPSBpbkxlZ1RvUHQueCAgIC0gaW5WZXJ0ZXgu
eCwgIGxlZ1RvUHRZICAgICA9IGluTGVnVG9QdC55ICAgLSBpblZlcnRleC55OwotICAgICAgICAg
ICAgICAgIHZhciBvdGhlclB0WCAgICA9IGluT3RoZXJQdC54ICAgLSBpblZlcnRleC54LCAgb3Ro
ZXJQdFkgICAgID0gaW5PdGhlclB0LnkgICAtIGluVmVydGV4Lnk7CisgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgaSA8PSBjb2xzOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgLy8gbWFpbiBh
bmdsZSA+MDogPCAxODAgZGVnLjsgMDogMTgwIGRlZy47IDwwOiA+IDE4MCBkZWcuCi0gICAgICAg
ICAgICAgICAgdmFyIGZyb20ydG9BbmdsZSAgICA9IGxlZ0Zyb21QdFggKiBsZWdUb1B0WSAtIGxl
Z0Zyb21QdFkgKiBsZWdUb1B0WDsKLSAgICAgICAgICAgICAgICB2YXIgZnJvbTJvdGhlckFuZ2xl
ID0gbGVnRnJvbVB0WCAqIG90aGVyUHRZIC0gbGVnRnJvbVB0WSAqIG90aGVyUHRYOworICAgICAg
ICAgICAgICAgIHZbIGkgXSA9IFtdOwogCi0gICAgICAgICAgICAgICAgaWYgKCBNYXRoLmFicygg
ZnJvbTJ0b0FuZ2xlICkgPiBOdW1iZXIuRVBTSUxPTiApIHsKKyAgICAgICAgICAgICAgICB2YXIg
YWogPSBhLmNsb25lKCkubGVycCggYywgaSAvIGNvbHMgKTsKKyAgICAgICAgICAgICAgICB2YXIg
YmogPSBiLmNsb25lKCkubGVycCggYywgaSAvIGNvbHMgKTsKIAotICAgICAgICAgICAgICAgICAg
ICAvLyBhbmdsZSAhPSAxODAgZGVnLgorICAgICAgICAgICAgICAgIHZhciByb3dzID0gY29scyAt
IGk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyMnRvQW5nbGUgICAgICAgPSBvdGhl
clB0WCAqIGxlZ1RvUHRZIC0gb3RoZXJQdFkgKiBsZWdUb1B0WDsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gY29uc29sZS5sb2coICJmcm9tMnRvOiAiICsgZnJvbTJ0b0FuZ2xlICsgIiwgZnJvbTJv
dGhlcjogIiArIGZyb20yb3RoZXJBbmdsZSArICIsIG90aGVyMnRvOiAiICsgb3RoZXIydG9Bbmds
ZSApOworICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDw9IHJvd3M7IGogKysgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBmcm9tMnRvQW5nbGUgPiAwICkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIGogPT09IDAgJiYgaSA9PT0gY29scyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbWFpbiBhbmdsZSA8IDE4MCBkZWcuCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gICggKCBmcm9tMm90aGVyQW5nbGUgPj0gMCApICYmICggb3RoZXIydG9Bbmds
ZSA+PSAwICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZbIGkgXVsgaiBdID0gYWo7CiAK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbWFpbiBhbmdsZSA+IDE4MCBkZWcuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ICggKCBmcm9tMm90aGVyQW5nbGUgPj0gMCApIHx8ICggb3RoZXIydG9BbmdsZSA+PSAwICkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZbIGkgXVsgaiBdID0gYWouY2xvbmUoKS5sZXJwKCBi
aiwgaiAvIHJvd3MgKTsKIAogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZ2xlID09IDE4MCBkZWcuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCAiZnJvbTJ0bzogMTgwIGRlZy4sIGZy
b20yb3RoZXI6ICIgKyBmcm9tMm90aGVyQW5nbGUgICk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAgKCBmcm9tMm90aGVyQW5nbGUgPiAwICk7Ci0KICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gY29uc3RydWN0IGFsbCBvZiB0aGUgZmFjZXMK
IAotICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlSG9sZXMoIGNvbnRvdXIsIGhvbGVzICkgewot
Ci0gICAgICAgICAgICAgICAgdmFyIHNoYXBlID0gY29udG91ci5jb25jYXQoKTsgLy8gd29yayBv
biB0aGlzIHNoYXBlCi0gICAgICAgICAgICAgICAgdmFyIGhvbGU7CisgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgaSA8IGNvbHM7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBp
c0N1dExpbmVJbnNpZGVBbmdsZXMoIGluU2hhcGVJZHgsIGluSG9sZUlkeCApIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDIgKiAoIGNvbHMgLSBpICkgLSAxOyBqICsrICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGhvbGUgcG9pbnQgbGllcyB3aXRoaW4g
YW5nbGUgYXJvdW5kIHNoYXBlIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0U2hh
cGVJZHggPSBzaGFwZS5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICB2YXIgayA9IE1h
dGguZmxvb3IoIGogLyAyICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZTaGFwZUlk
eCA9IGluU2hhcGVJZHggLSAxOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHByZXZTaGFwZUlk
eCA8IDAgKSAgICAgICAgIHByZXZTaGFwZUlkeCA9IGxhc3RTaGFwZUlkeDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBqICUgMiA9PT0gMCApIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIg
bmV4dFNoYXBlSWR4ID0gaW5TaGFwZUlkeCArIDE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
bmV4dFNoYXBlSWR4ID4gbGFzdFNoYXBlSWR4ICkgIG5leHRTaGFwZUlkeCA9IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoVmVydGV4KCB2WyBpIF1bIGsgKyAxIF0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2hWZXJ0ZXgoIHZbIGkgKyAxIF1bIGsgXSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaFZlcnRleCggdlsgaSBdWyBrIF0gKTsKIAotICAgICAgICAgICAg
ICAgICAgICB2YXIgaW5zaWRlQW5nbGUgPSBpc1BvaW50SW5zaWRlQW5nbGUoIHNoYXBlWyBpblNo
YXBlSWR4IF0sIHNoYXBlWyBwcmV2U2hhcGVJZHggXSwgc2hhcGVbIG5leHRTaGFwZUlkeCBdLCBo
b2xlWyBpbkhvbGVJZHggXSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoICEgaW5zaWRlQW5n
bGUgKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnNvbGUubG9nKCAiVmVydGV4IChTaGFwZSk6ICIgKyBpblNoYXBlSWR4ICsg
IiwgUG9pbnQ6ICIgKyBob2xlW2luSG9sZUlkeF0ueCArICIvIiArIGhvbGVbaW5Ib2xlSWR4XS55
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaFZlcnRleCggdlsgaSBdWyBrICsgMSBdICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoVmVydGV4KCB2WyBpICsgMSBdWyBrICsgMSBdICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoVmVydGV4KCB2WyBpICsgMSBdWyBrIF0gKTsKIAogICAgICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgc2hhcGUgcG9p
bnQgbGllcyB3aXRoaW4gYW5nbGUgYXJvdW5kIGhvbGUgcG9pbnQKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGxhc3RIb2xlSWR4ID0gaG9sZS5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkhvbGVJZHggPSBpbkhvbGVJZHggLSAxOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIHByZXZIb2xlSWR4IDwgMCApICAgICAgICAgIHByZXZI
b2xlSWR4ID0gbGFzdEhvbGVJZHg7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG5leHRIb2xlSWR4ID0gaW5Ib2xlSWR4ICsgMTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBuZXh0SG9sZUlkeCA+IGxhc3RIb2xlSWR4ICkgICAgbmV4dEhvbGVJZHggPSAwOworICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaW5zaWRlQW5nbGUgPSBpc1BvaW50SW5zaWRl
QW5nbGUoIGhvbGVbIGluSG9sZUlkeCBdLCBob2xlWyBwcmV2SG9sZUlkeCBdLCBob2xlWyBuZXh0
SG9sZUlkeCBdLCBzaGFwZVsgaW5TaGFwZUlkeCBdICk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICggISBpbnNpZGVBbmdsZSApIHsKKyAgICAgICAgZnVuY3Rpb24gYXBwcGx5UmFkaXVzKCByYWRp
dXMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCAiVmVydGV4
IChIb2xlKTogIiArIGluSG9sZUlkeCArICIsIFBvaW50OiAiICsgc2hhcGVbaW5TaGFwZUlkeF0u
eCArICIvIiArIHNoYXBlW2luU2hhcGVJZHhdLnkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAgZmFsc2U7CisgICAgICAgICAgICB2YXIgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBpdGVyYXRlIG92ZXIgdGhl
IGVudGlyZSBidWZmZXIgYW5kIGFwcGx5IHRoZSByYWRpdXMgdG8gZWFjaCB2ZXJ0ZXgKIAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDMgKSB7CiAKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmVydGV4LnggPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAwIF07Cisg
ICAgICAgICAgICAgICAgdmVydGV4LnkgPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAxIF07CisgICAgICAg
ICAgICAgICAgdmVydGV4LnogPSB2ZXJ0ZXhCdWZmZXJbIGkgKyAyIF07CisKKyAgICAgICAgICAg
ICAgICB2ZXJ0ZXgubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoIHJhZGl1cyApOwogCi0gICAg
ICAgICAgICAgICAgZnVuY3Rpb24gaW50ZXJzZWN0c1NoYXBlRWRnZSggaW5TaGFwZVB0LCBpbkhv
bGVQdCApIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJbIGkgKyAwIF0gPSB2ZXJ0ZXgu
eDsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJbIGkgKyAxIF0gPSB2ZXJ0ZXgueTsKKyAg
ICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJbIGkgKyAyIF0gPSB2ZXJ0ZXguejsKIAotICAgICAg
ICAgICAgICAgICAgICAvLyBjaGVja3MgZm9yIGludGVyc2VjdGlvbnMgd2l0aCBzaGFwZSBlZGdl
cwotICAgICAgICAgICAgICAgICAgICB2YXIgc0lkeCwgbmV4dElkeCwgaW50ZXJzZWN0aW9uOwot
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBzSWR4ID0gMDsgc0lkeCA8IHNoYXBlLmxlbmd0aDsg
c0lkeCArKyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgbmV4
dElkeCA9IHNJZHggKyAxOyBuZXh0SWR4ICU9IHNoYXBlLmxlbmd0aDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVyc2VjdGlvbiA9IGludGVyc2VjdF9zZWdtZW50c18yRCggaW5TaGFwZVB0
LCBpbkhvbGVQdCwgc2hhcGVbIHNJZHggXSwgc2hhcGVbIG5leHRJZHggXSwgdHJ1ZSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3Rpb24ubGVuZ3RoID4gMCApICAgICAg
cmV0dXJuICB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICBmdW5jdGlvbiBnZW5lcmF0ZVVWcygpIHsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IGZhbHNlOworICAgICAgICAgICAgdmFyIHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB2ZXJ0ZXhCdWZm
ZXIubGVuZ3RoOyBpICs9IDMgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgaW5kZXBIb2xlcyA9
IFtdOworICAgICAgICAgICAgICAgIHZlcnRleC54ID0gdmVydGV4QnVmZmVyWyBpICsgMCBdOwor
ICAgICAgICAgICAgICAgIHZlcnRleC55ID0gdmVydGV4QnVmZmVyWyBpICsgMSBdOworICAgICAg
ICAgICAgICAgIHZlcnRleC56ID0gdmVydGV4QnVmZmVyWyBpICsgMiBdOwogCi0gICAgICAgICAg
ICAgICAgZnVuY3Rpb24gaW50ZXJzZWN0c0hvbGVFZGdlKCBpblNoYXBlUHQsIGluSG9sZVB0ICkg
eworICAgICAgICAgICAgICAgIHZhciB1ID0gYXppbXV0aCggdmVydGV4ICkgLyAyIC8gTWF0aC5Q
SSArIDAuNTsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IGluY2xpbmF0aW9uKCB2ZXJ0ZXggKSAv
IE1hdGguUEkgKyAwLjU7CisgICAgICAgICAgICAgICAgdXZCdWZmZXIucHVzaCggdSwgMSAtIHYg
KTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBjaGVja3MgZm9yIGludGVyc2VjdGlvbnMgd2l0
aCBob2xlIGVkZ2VzCi0gICAgICAgICAgICAgICAgICAgIHZhciBpaElkeCwgY2hrSG9sZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGhJZHgsIG5leHRJZHgsIGludGVyc2VjdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICggaWhJZHggPSAwOyBpaElkeCA8IGluZGVwSG9sZXMubGVuZ3Ro
OyBpaElkeCArKyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAg
Y2hrSG9sZSA9IGhvbGVzWyBpbmRlcEhvbGVzWyBpaElkeCBdXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGhJZHggPSAwOyBoSWR4IDwgY2hrSG9sZS5sZW5ndGg7IGhJZHggKysgKSB7
CisgICAgICAgICAgICBjb3JyZWN0VVZzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0SWR4ID0gaElkeCArIDE7IG5leHRJZHggJT0gY2hrSG9sZS5sZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0X3NlZ21lbnRzXzJE
KCBpblNoYXBlUHQsIGluSG9sZVB0LCBjaGtIb2xlWyBoSWR4IF0sIGNoa0hvbGVbIG5leHRJZHgg
XSwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW50ZXJzZWN0aW9u
Lmxlbmd0aCA+IDAgKSAgICAgIHJldHVybiAgdHJ1ZTsKKyAgICAgICAgICAgIGNvcnJlY3RTZWFt
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAgICAgICAg
ZnVuY3Rpb24gY29ycmVjdFNlYW0oKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBoYW5kbGUgY2FzZSB3aGVuIGZhY2Ugc3RyYWRkbGVzIHRoZSBzZWFtLCBzZWUgIzMyNjkK
IAotICAgICAgICAgICAgICAgIHZhciBob2xlSW5kZXgsIHNoYXBlSW5kZXgsCi0gICAgICAgICAg
ICAgICAgICAgIHNoYXBlUHQsIGhvbGVQdCwKLSAgICAgICAgICAgICAgICAgICAgaG9sZUlkeCwg
Y3V0S2V5LCBmYWlsZWRDdXRzID0gW10sCi0gICAgICAgICAgICAgICAgICAgIHRtcFNoYXBlMSwg
dG1wU2hhcGUyLAotICAgICAgICAgICAgICAgICAgICB0bXBIb2xlMSwgdG1wSG9sZTI7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB1dkJ1ZmZlci5sZW5ndGg7IGkgKz0gNiApIHsK
IAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGgg
PCBobDsgaCArKyApIHsKKyAgICAgICAgICAgICAgICAvLyB1diBkYXRhIG9mIGEgc2luZ2xlIGZh
Y2UKIAotICAgICAgICAgICAgICAgICAgICBpbmRlcEhvbGVzLnB1c2goIGggKTsKKyAgICAgICAg
ICAgICAgICB2YXIgeDAgPSB1dkJ1ZmZlclsgaSArIDAgXTsKKyAgICAgICAgICAgICAgICB2YXIg
eDEgPSB1dkJ1ZmZlclsgaSArIDIgXTsKKyAgICAgICAgICAgICAgICB2YXIgeDIgPSB1dkJ1ZmZl
clsgaSArIDQgXTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgbWF4
ID0gTWF0aC5tYXgoIHgwLCB4MSwgeDIgKTsKKyAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0
aC5taW4oIHgwLCB4MSwgeDIgKTsKIAotICAgICAgICAgICAgICAgIHZhciBtaW5TaGFwZUluZGV4
ID0gMDsKLSAgICAgICAgICAgICAgICB2YXIgY291bnRlciA9IGluZGVwSG9sZXMubGVuZ3RoICog
MjsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIGluZGVwSG9sZXMubGVuZ3RoID4gMCApIHsKKyAg
ICAgICAgICAgICAgICAvLyAwLjkgaXMgc29tZXdoYXQgYXJiaXRyYXJ5CiAKLSAgICAgICAgICAg
ICAgICAgICAgY291bnRlciAtLTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3VudGVyIDwg
MCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG1heCA+IDAuOSAmJiBtaW4gPCAwLjEgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCAiSW5maW5pdGUgTG9vcCEgSG9s
ZXMgbGVmdDoiICsgaW5kZXBIb2xlcy5sZW5ndGggKyAiLCBQcm9iYWJseSBIb2xlIG91dHNpZGUg
U2hhcGUhIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggeDAgPCAwLjIgKSB1dkJ1ZmZlclsgaSArIDAgXSArPSAxOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIHgxIDwgMC4yICkgdXZCdWZmZXJbIGkgKyAyIF0gKz0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCB4MiA8IDAuMiApIHV2QnVmZmVyWyBpICsgNCBdICs9IDE7CiAK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICAvLyBzZWFyY2ggZm9yIHNoYXBlLXZlcnRleCBhbmQgaG9sZS12ZXJ0ZXgsCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhbiBiZSBjb25uZWN0ZWQgd2l0aG91dCBpbnRlcnNl
Y3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHNoYXBlSW5kZXggPSBtaW5TaGFwZUlu
ZGV4OyBzaGFwZUluZGV4IDwgc2hhcGUubGVuZ3RoOyBzaGFwZUluZGV4ICsrICkgeworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZVB0ID0gc2hhcGVbIHNoYXBl
SW5kZXggXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvbGVJbmRleCAgID0gLSAxOworICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBmb3IgaG9sZSB3aGlj
aCBjYW4gYmUgcmVhY2hlZCB3aXRob3V0IGludGVyc2VjdGlvbnMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBoID0gMDsgaCA8IGluZGVwSG9sZXMubGVuZ3RoOyBoICsrICkgewor
ICAgICAgICBmdW5jdGlvbiBwdXNoVmVydGV4KCB2ZXJ0ZXggKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob2xlSWR4ID0gaW5kZXBIb2xlc1sgaCBdOworICAgICAgICAgICAgdmVy
dGV4QnVmZmVyLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgbXVsdGlwbGUgY2hlY2tzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3V0S2V5ID0gc2hhcGVQdC54ICsgIjoiICsgc2hhcGVQdC55
ICsgIjoiICsgaG9sZUlkeDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZhaWxl
ZEN1dHNbIGN1dEtleSBdICE9PSB1bmRlZmluZWQgKSAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGUgPSBob2xlc1sgaG9sZUlk
eCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBoMiA9IDA7IGgyIDwg
aG9sZS5sZW5ndGg7IGgyICsrICkgeworICAgICAgICBmdW5jdGlvbiBnZXRWZXJ0ZXhCeUluZGV4
KCBpbmRleCwgdmVydGV4ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhv
bGVQdCA9IGhvbGVbIGgyIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ISBpc0N1dExpbmVJbnNpZGVBbmdsZXMoIHNoYXBlSW5kZXgsIGgyICkgKSAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW50ZXJzZWN0c1NoYXBl
RWRnZSggc2hhcGVQdCwgaG9sZVB0ICkgKSAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpbnRlcnNlY3RzSG9sZUVkZ2UoIHNoYXBlUHQsIGhvbGVQ
dCApICkgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIHN0cmlkZSA9IGluZGV4ICog
MzsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2xlSW5kZXggPSBoMjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXBIb2xlcy5zcGxpY2UoIGgsIDEgKTsK
KyAgICAgICAgICAgIHZlcnRleC54ID0gdmVydGljZXNbIHN0cmlkZSArIDAgXTsKKyAgICAgICAg
ICAgIHZlcnRleC55ID0gdmVydGljZXNbIHN0cmlkZSArIDEgXTsKKyAgICAgICAgICAgIHZlcnRl
eC56ID0gdmVydGljZXNbIHN0cmlkZSArIDIgXTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0bXBTaGFwZTEgPSBzaGFwZS5zbGljZSggMCwgc2hhcGVJbmRleCArIDEgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wU2hhcGUyID0gc2hhcGUuc2xpY2UoIHNo
YXBlSW5kZXggKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wSG9sZTEgPSBo
b2xlLnNsaWNlKCBob2xlSW5kZXggKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG1wSG9sZTIgPSBob2xlLnNsaWNlKCAwLCBob2xlSW5kZXggKyAxICk7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IHRtcFNoYXBlMS5jb25jYXQo
IHRtcEhvbGUxICkuY29uY2F0KCB0bXBIb2xlMiApLmNvbmNhdCggdG1wU2hhcGUyICk7CisgICAg
ICAgIGZ1bmN0aW9uIGNvcnJlY3RVVnMoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWluU2hhcGVJbmRleCA9IHNoYXBlSW5kZXg7CisgICAgICAgICAgICB2YXIgYSA9IG5l
dyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgYiA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAg
ICAgICB2YXIgYyA9IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRGVidWcgb25seSwgdG8gc2hvdyB0aGUgc2VsZWN0ZWQgY3V0cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBnbG9iX0N1dExpbmVzLnB1c2goIFsgc2hhcGVQdCwg
aG9sZVB0IF0gKTsKKyAgICAgICAgICAgIHZhciBjZW50cm9pZCA9IG5ldyBWZWN0b3IzKCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2YXIg
dXZBID0gbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgICAgIHZhciB1dkIgPSBuZXcgVmVjdG9yMigp
OworICAgICAgICAgICAgdmFyIHV2QyA9IG5ldyBWZWN0b3IyKCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob2xlSW5k
ZXggPj0gMCApICAgYnJlYWs7ICAgICAgLy8gaG9sZS12ZXJ0ZXggZm91bmQKKyAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMCwgaiA9IDA7IGkgPCB2ZXJ0ZXhCdWZmZXIubGVuZ3RoOyBpICs9IDks
IGogKz0gNiApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZEN1dHNbIGN1
dEtleSBdID0gdHJ1ZTsgICAgICAgICAgICAvLyByZW1lbWJlciBmYWlsdXJlCisgICAgICAgICAg
ICAgICAgYS5zZXQoIHZlcnRleEJ1ZmZlclsgaSArIDAgXSwgdmVydGV4QnVmZmVyWyBpICsgMSBd
LCB2ZXJ0ZXhCdWZmZXJbIGkgKyAyIF0gKTsKKyAgICAgICAgICAgICAgICBiLnNldCggdmVydGV4
QnVmZmVyWyBpICsgMyBdLCB2ZXJ0ZXhCdWZmZXJbIGkgKyA0IF0sIHZlcnRleEJ1ZmZlclsgaSAr
IDUgXSApOworICAgICAgICAgICAgICAgIGMuc2V0KCB2ZXJ0ZXhCdWZmZXJbIGkgKyA2IF0sIHZl
cnRleEJ1ZmZlclsgaSArIDcgXSwgdmVydGV4QnVmZmVyWyBpICsgOCBdICk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9sZUluZGV4
ID49IDAgKSAgIGJyZWFrOyAgICAgIC8vIGhvbGUtdmVydGV4IGZvdW5kCisgICAgICAgICAgICAg
ICAgdXZBLnNldCggdXZCdWZmZXJbIGogKyAwIF0sIHV2QnVmZmVyWyBqICsgMSBdICk7CisgICAg
ICAgICAgICAgICAgdXZCLnNldCggdXZCdWZmZXJbIGogKyAyIF0sIHV2QnVmZmVyWyBqICsgMyBd
ICk7CisgICAgICAgICAgICAgICAgdXZDLnNldCggdXZCdWZmZXJbIGogKyA0IF0sIHV2QnVmZmVy
WyBqICsgNSBdICk7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNl
bnRyb2lkLmNvcHkoIGEgKS5hZGQoIGIgKS5hZGQoIGMgKS5kaXZpZGVTY2FsYXIoIDMgKTsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgYXppID0gYXppbXV0aCggY2Vu
dHJvaWQgKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBzaGFwZTsgICAgICAgICAgIC8qIHNo
YXBlIHdpdGggbm8gaG9sZXMgKi8KKyAgICAgICAgICAgICAgICBjb3JyZWN0VVYoIHV2QSwgaiAr
IDAsIGEsIGF6aSApOworICAgICAgICAgICAgICAgIGNvcnJlY3RVViggdXZCLCBqICsgMiwgYiwg
YXppICk7CisgICAgICAgICAgICAgICAgY29ycmVjdFVWKCB1dkMsIGogKyA0LCBjLCBhemkgKTsK
IAogICAgICAgICAgICAgfQogCisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjb3JyZWN0
VVYoIHV2LCBzdHJpZGUsIHZlY3RvciwgYXppbXV0aCApIHsKIAotICAgICAgICAgICAgdmFyIGks
IGlsLCBmLCBmYWNlLAotICAgICAgICAgICAgICAgIGtleSwgaW5kZXgsCi0gICAgICAgICAgICAg
ICAgYWxsUG9pbnRzTWFwID0ge307CisgICAgICAgICAgICBpZiAoICggYXppbXV0aCA8IDAgKSAm
JiAoIHV2LnggPT09IDEgKSApIHsKIAotICAgICAgICAgICAgLy8gVG8gbWFpbnRhaW4gcmVmZXJl
bmNlIHRvIG9sZCBzaGFwZSwgb25lIG11c3QgbWF0Y2ggY29vcmRpbmF0ZXMsIG9yIG9mZnNldCB0
aGUgaW5kaWNlcyBmcm9tIG9yaWdpbmFsIGFycmF5cy4gSXQncyBwcm9iYWJseSBlYXNpZXIgdG8g
ZG8gdGhlIGZpcnN0LgorICAgICAgICAgICAgICAgIHV2QnVmZmVyWyBzdHJpZGUgXSA9IHV2Lngg
LSAxOwogCi0gICAgICAgICAgICB2YXIgYWxscG9pbnRzID0gY29udG91ci5jb25jYXQoKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yICggdmFyIGggPSAwLCBobCA9IGhvbGVzLmxl
bmd0aDsgaCA8IGhsOyBoICsrICkgeworICAgICAgICAgICAgaWYgKCAoIHZlY3Rvci54ID09PSAw
ICkgJiYgKCB2ZWN0b3IueiA9PT0gMCApICkgewogCi0gICAgICAgICAgICAgICAgQXJyYXkucHJv
dG90eXBlLnB1c2guYXBwbHkoIGFsbHBvaW50cywgaG9sZXNbIGggXSApOworICAgICAgICAgICAg
ICAgIHV2QnVmZmVyWyBzdHJpZGUgXSA9IGF6aW11dGggLyAyIC8gTWF0aC5QSSArIDAuNTsKIAog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCAiYWxscG9pbnRzIixh
bGxwb2ludHMsIGFsbHBvaW50cy5sZW5ndGggKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAv
LyBwcmVwYXJlIGFsbCBwb2ludHMgbWFwCisgICAgICAgIC8vIEFuZ2xlIGFyb3VuZCB0aGUgWSBh
eGlzLCBjb3VudGVyLWNsb2Nrd2lzZSB3aGVuIGxvb2tpbmcgZnJvbSBhYm92ZS4KIAotICAgICAg
ICAgICAgZm9yICggaSA9IDAsIGlsID0gYWxscG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkg
eworICAgICAgICBmdW5jdGlvbiBhemltdXRoKCB2ZWN0b3IgKSB7CiAKLSAgICAgICAgICAgICAg
ICBrZXkgPSBhbGxwb2ludHNbIGkgXS54ICsgIjoiICsgYWxscG9pbnRzWyBpIF0ueTsKKyAgICAg
ICAgICAgIHJldHVybiBNYXRoLmF0YW4yKCB2ZWN0b3IueiwgLSB2ZWN0b3IueCApOwogCi0gICAg
ICAgICAgICAgICAgaWYgKCBhbGxQb2ludHNNYXBbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICJUSFJFRS5TaGFw
ZVV0aWxzOiBEdXBsaWNhdGUgcG9pbnQiLCBrZXksIGkgKTsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgLy8gQW5nbGUgYWJvdmUgdGhlIFhaIHBsYW5lLgogCi0gICAgICAgICAgICAgICAg
YWxsUG9pbnRzTWFwWyBrZXkgXSA9IGk7CisgICAgICAgIGZ1bmN0aW9uIGluY2xpbmF0aW9uKCB2
ZWN0b3IgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBNYXRoLmF0YW4y
KCAtIHZlY3Rvci55LCBNYXRoLnNxcnQoICggdmVjdG9yLnggKiB2ZWN0b3IueCApICsgKCB2ZWN0
b3IueiAqIHZlY3Rvci56ICkgKSApOworCisgICAgICAgIH0KKworICAgIH0KIAotICAgICAgICAg
ICAgLy8gcmVtb3ZlIGhvbGVzIGJ5IGN1dHRpbmcgcGF0aHMgdG8gaG9sZXMgYW5kIGFkZGluZyB0
aGVtIHRvIHRoZSBzaGFwZQotICAgICAgICAgICAgdmFyIHNoYXBlV2l0aG91dEhvbGVzID0gcmVt
b3ZlSG9sZXMoIGNvbnRvdXIsIGhvbGVzICk7CisgICAgUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5
LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwor
ICAgIFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb2x5
aGVkcm9uQnVmZmVyR2VvbWV0cnk7CiAKLSAgICAgICAgICAgIHZhciB0cmlhbmdsZXMgPSBTaGFw
ZVV0aWxzLnRyaWFuZ3VsYXRlKCBzaGFwZVdpdGhvdXRIb2xlcywgZmFsc2UgKTsgLy8gVHJ1ZSBy
ZXR1cm5zIGluZGljZXMgZm9yIHBvaW50cyBvZiBzcG9vbGVkIHNoYXBlCi0gICAgICAgICAgICAv
L2NvbnNvbGUubG9nKCAidHJpYW5nbGVzIix0cmlhbmdsZXMsIHRyaWFuZ2xlcy5sZW5ndGggKTsK
KyAgICAvKioKKyAgICAgKiBAYXV0aG9yIHRpbW90aHlwcmF0bGV5IC8gaHR0cHM6Ly9naXRodWIu
Y29tL3RpbW90aHlwcmF0bGV5CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRo
dWIuY29tL011Z2VuODcKKyAgICAgKi8KIAotICAgICAgICAgICAgLy8gY2hlY2sgYWxsIGZhY2Ug
dmVydGljZXMgYWdhaW5zdCBhbGwgcG9pbnRzIG1hcAorICAgIC8vIFRldHJhaGVkcm9uR2VvbWV0
cnkKIAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gdHJpYW5nbGVzLmxlbmd0aDsgaSA8
IGlsOyBpICsrICkgeworICAgIGZ1bmN0aW9uIFRldHJhaGVkcm9uR2VvbWV0cnkoIHJhZGl1cywg
ZGV0YWlsICkgewogCi0gICAgICAgICAgICAgICAgZmFjZSA9IHRyaWFuZ2xlc1sgaSBdOworICAg
ICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBmID0g
MDsgZiA8IDM7IGYgKysgKSB7CisgICAgICAgIHRoaXMudHlwZSA9ICdUZXRyYWhlZHJvbkdlb21l
dHJ5JzsKIAotICAgICAgICAgICAgICAgICAgICBrZXkgPSBmYWNlWyBmIF0ueCArICI6IiArIGZh
Y2VbIGYgXS55OworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICByYWRp
dXM6IHJhZGl1cywKKyAgICAgICAgICAgIGRldGFpbDogZGV0YWlsCisgICAgICAgIH07CiAKLSAg
ICAgICAgICAgICAgICAgICAgaW5kZXggPSBhbGxQb2ludHNNYXBbIGtleSBdOworICAgICAgICB0
aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnkoIHJh
ZGl1cywgZGV0YWlsICkgKTsKKyAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gdW5kZWZpbmVkICkgeworICAgIH0KIAotICAg
ICAgICAgICAgICAgICAgICAgICAgZmFjZVsgZiBdID0gaW5kZXg7CisgICAgVGV0cmFoZWRyb25H
ZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsK
KyAgICBUZXRyYWhlZHJvbkdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRldHJhaGVk
cm9uR2VvbWV0cnk7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgIC8vIFRldHJhaGVkcm9u
QnVmZmVyR2VvbWV0cnkKIAotICAgICAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBUZXRyYWhl
ZHJvbkJ1ZmZlckdlb21ldHJ5KCByYWRpdXMsIGRldGFpbCApIHsKIAotICAgICAgICAgICAgfQor
ICAgICAgICB2YXIgdmVydGljZXMgPSBbCisgICAgICAgICAgICAxLCAxLCAxLCAgICAtIDEsIC0g
MSwgMSwgICAgLSAxLCAxLCAtIDEsICAgIDEsIC0gMSwgLSAxCisgICAgICAgIF07CiAKLSAgICAg
ICAgICAgIHJldHVybiB0cmlhbmdsZXMuY29uY2F0KCk7CisgICAgICAgIHZhciBpbmRpY2VzID0g
WworICAgICAgICAgICAgMiwgMSwgMCwgICAgMCwgMywgMiwgICAgMSwgMywgMCwgICAgMiwgMywg
MQorICAgICAgICBdOwogCi0gICAgICAgIH0sCisgICAgICAgIFBvbHloZWRyb25CdWZmZXJHZW9t
ZXRyeS5jYWxsKCB0aGlzLCB2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwgKTsKIAot
ICAgICAgICBpc0Nsb2NrV2lzZTogZnVuY3Rpb24gKCBwdHMgKSB7CisgICAgICAgIHRoaXMudHlw
ZSA9ICdUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5JzsKIAotICAgICAgICAgICAgcmV0dXJuIFNo
YXBlVXRpbHMuYXJlYSggcHRzICkgPCAwOworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Cisg
ICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgICAgIGRldGFpbDogZGV0YWlsCisg
ICAgICAgIH07CiAKLSAgICAgICAgfQorICAgIH0KIAotICAgIH07CisgICAgVGV0cmFoZWRyb25C
dWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBQb2x5aGVkcm9uQnVmZmVy
R2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OwogCiAgICAgLyoq
Ci0gICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxv
ZwotICAgICAqCi0gICAgICogQ3JlYXRlcyBleHRydWRlZCBnZW9tZXRyeSBmcm9tIGEgcGF0aCBz
aGFwZS4KLSAgICAgKgotICAgICAqIHBhcmFtZXRlcnMgPSB7Ci0gICAgICoKLSAgICAgKiAgY3Vy
dmVTZWdtZW50czogPGludD4sIC8vIG51bWJlciBvZiBwb2ludHMgb24gdGhlIGN1cnZlcwotICAg
ICAqICBzdGVwczogPGludD4sIC8vIG51bWJlciBvZiBwb2ludHMgZm9yIHotc2lkZSBleHRydXNp
b25zIC8gdXNlZCBmb3Igc3ViZGl2aWRpbmcgc2VnbWVudHMgb2YgZXh0cnVkZSBzcGxpbmUgdG9v
Ci0gICAgICogIGFtb3VudDogPGludD4sIC8vIERlcHRoIHRvIGV4dHJ1ZGUgdGhlIHNoYXBlCi0g
ICAgICoKLSAgICAgKiAgYmV2ZWxFbmFibGVkOiA8Ym9vbD4sIC8vIHR1cm4gb24gYmV2ZWwKLSAg
ICAgKiAgYmV2ZWxUaGlja25lc3M6IDxmbG9hdD4sIC8vIGhvdyBkZWVwIGludG8gdGhlIG9yaWdp
bmFsIHNoYXBlIGJldmVsIGdvZXMKLSAgICAgKiAgYmV2ZWxTaXplOiA8ZmxvYXQ+LCAvLyBob3cg
ZmFyIGZyb20gc2hhcGUgb3V0bGluZSBpcyBiZXZlbAotICAgICAqICBiZXZlbFNlZ21lbnRzOiA8
aW50PiwgLy8gbnVtYmVyIG9mIGJldmVsIGxheWVycwotICAgICAqCi0gICAgICogIGV4dHJ1ZGVQ
YXRoOiA8VEhSRUUuQ3VydmU+IC8vIGN1cnZlIHRvIGV4dHJ1ZGUgc2hhcGUgYWxvbmcKLSAgICAg
KiAgZnJhbWVzOiA8T2JqZWN0PiAvLyBjb250YWluaW5nIGFycmF5cyBvZiB0YW5nZW50cywgbm9y
bWFscywgYmlub3JtYWxzCi0gICAgICoKLSAgICAgKiAgVVZHZW5lcmF0b3I6IDxPYmplY3Q+IC8v
IG9iamVjdCB0aGF0IHByb3ZpZGVzIFVWIGdlbmVyYXRvciBmdW5jdGlvbnMKLSAgICAgKgotICAg
ICAqIH0KKyAgICAgKiBAYXV0aG9yIHRpbW90aHlwcmF0bGV5IC8gaHR0cHM6Ly9naXRodWIuY29t
L3RpbW90aHlwcmF0bGV5CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIu
Y29tL011Z2VuODcKICAgICAgKi8KIAotICAgIC8vIEV4dHJ1ZGVHZW9tZXRyeQorICAgIC8vIE9j
dGFoZWRyb25HZW9tZXRyeQogCi0gICAgZnVuY3Rpb24gRXh0cnVkZUdlb21ldHJ5KCBzaGFwZXMs
IG9wdGlvbnMgKSB7CisgICAgZnVuY3Rpb24gT2N0YWhlZHJvbkdlb21ldHJ5KCByYWRpdXMsIGRl
dGFpbCApIHsKIAogICAgICAgICBHZW9tZXRyeS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgdGhp
cy50eXBlID0gJ0V4dHJ1ZGVHZW9tZXRyeSc7CisgICAgICAgIHRoaXMudHlwZSA9ICdPY3RhaGVk
cm9uR2VvbWV0cnknOwogCiAgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAg
IHNoYXBlczogc2hhcGVzLAotICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucworICAgICAgICAg
ICAgcmFkaXVzOiByYWRpdXMsCisgICAgICAgICAgICBkZXRhaWw6IGRldGFpbAogICAgICAgICB9
OwogCi0gICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgRXh0cnVkZUJ1ZmZlckdl
b21ldHJ5KCBzaGFwZXMsIG9wdGlvbnMgKSApOworICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9t
ZXRyeSggbmV3IE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSggcmFkaXVzLCBkZXRhaWwgKSApOwog
ICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKIAogICAgIH0KIAotICAgIEV4dHJ1ZGVHZW9t
ZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAg
ICBFeHRydWRlR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXh0cnVkZUdlb21ldHJ5
OwotCi0gICAgLy8gRXh0cnVkZUJ1ZmZlckdlb21ldHJ5Ci0KLSAgICBmdW5jdGlvbiBFeHRydWRl
QnVmZmVyR2VvbWV0cnkoIHNoYXBlcywgb3B0aW9ucyApIHsKLQotICAgICAgICBpZiAoIHR5cGVv
ZiAoIHNoYXBlcyApID09PSAidW5kZWZpbmVkIiApIHsKLQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzICk7CisgICAg
T2N0YWhlZHJvbkdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnBy
b3RvdHlwZSApOworICAgIE9jdGFoZWRyb25HZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBPY3RhaGVkcm9uR2VvbWV0cnk7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0V4dHJ1ZGVCdWZm
ZXJHZW9tZXRyeSc7CisgICAgLy8gT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5CiAKLSAgICAgICAg
c2hhcGVzID0gQXJyYXkuaXNBcnJheSggc2hhcGVzICkgPyBzaGFwZXMgOiBbIHNoYXBlcyBdOwor
ICAgIGZ1bmN0aW9uIE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSggcmFkaXVzLCBkZXRhaWwgKSB7
CiAKLSAgICAgICAgdGhpcy5hZGRTaGFwZUxpc3QoIHNoYXBlcywgb3B0aW9ucyApOworICAgICAg
ICB2YXIgdmVydGljZXMgPSBbCisgICAgICAgICAgICAxLCAwLCAwLCAgICAtIDEsIDAsIDAsICAw
LCAxLCAwLAorICAgICAgICAgICAgMCwgLSAxLCAwLCAgMCwgMCwgMSwgICAgMCwgMCwgLSAxCisg
ICAgICAgIF07CiAKLSAgICAgICAgdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpOworICAgICAg
ICB2YXIgaW5kaWNlcyA9IFsKKyAgICAgICAgICAgIDAsIDIsIDQsICAgIDAsIDQsIDMsICAgIDAs
IDMsIDUsCisgICAgICAgICAgICAwLCA1LCAyLCAgICAxLCAyLCA1LCAgICAxLCA1LCAzLAorICAg
ICAgICAgICAgMSwgMywgNCwgICAgMSwgNCwgMgorICAgICAgICBdOwogCi0gICAgICAgIC8vIGNh
bid0IHJlYWxseSB1c2UgYXV0b21hdGljIHZlcnRleCBub3JtYWxzCi0gICAgICAgIC8vIGFzIHRo
ZW4gZnJvbnQgYW5kIGJhY2sgc2lkZXMgZ2V0IHNtb290aGVkIHRvbwotICAgICAgICAvLyBzaG91
bGQgZG8gc2VwYXJhdGUgc21vb3RoaW5nIGp1c3QgZm9yIHNpZGVzCisgICAgICAgIFBvbHloZWRy
b25CdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzLCB2ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBk
ZXRhaWwgKTsKIAotICAgICAgICAvL3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTsKKyAgICAg
ICAgdGhpcy50eXBlID0gJ09jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSc7CiAKLSAgICAgICAgLy9j
b25zb2xlLmxvZyggInRvb2siLCAoIERhdGUubm93KCkgLSBzdGFydFRpbWUgKSApOworICAgICAg
ICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAg
ICAgICAgIGRldGFpbDogZGV0YWlsCisgICAgICAgIH07CiAKICAgICB9CiAKLSAgICBFeHRydWRl
QnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnku
cHJvdG90eXBlICk7Ci0gICAgRXh0cnVkZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTsKKyAgICBPY3RhaGVkcm9uQnVmZmVyR2VvbWV0
cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5LnBy
b3RvdHlwZSApOworICAgIE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPSBPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0
aG9yIHRpbW90aHlwcmF0bGV5IC8gaHR0cHM6Ly9naXRodWIuY29tL3RpbW90aHlwcmF0bGV5Cisg
ICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKKyAgICAg
Ki8KIAotICAgIEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuZ2V0QXJyYXlzID0gZnVu
Y3Rpb24gKCkgeworICAgIC8vIEljb3NhaGVkcm9uR2VvbWV0cnkKIAotICAgICAgICB2YXIgcG9z
aXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZSggInBvc2l0aW9uIiApOwotICAgICAg
ICB2YXIgdmVydGljZXNBcnJheSA9IHBvc2l0aW9uQXR0cmlidXRlID8gQXJyYXkucHJvdG90eXBl
LnNsaWNlLmNhbGwoIHBvc2l0aW9uQXR0cmlidXRlLmFycmF5ICkgOiBbXTsKKyAgICBmdW5jdGlv
biBJY29zYWhlZHJvbkdlb21ldHJ5KCByYWRpdXMsIGRldGFpbCApIHsKIAotICAgICAgICB2YXIg
dXZBdHRyaWJ1dGUgPSB0aGlzLmdldEF0dHJpYnV0ZSggInV2IiApOwotICAgICAgICB2YXIgdXZB
cnJheSA9IHV2QXR0cmlidXRlID8gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIHV2QXR0cmli
dXRlLmFycmF5ICkgOiBbXTsKKyAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOwogCi0gICAg
ICAgIHZhciBJbmRleEF0dHJpYnV0ZSA9IHRoaXMuaW5kZXg7Ci0gICAgICAgIHZhciBpbmRpY2Vz
QXJyYXkgPSBJbmRleEF0dHJpYnV0ZSA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBJbmRl
eEF0dHJpYnV0ZS5hcnJheSApIDogW107CisgICAgICAgIHRoaXMudHlwZSA9ICdJY29zYWhlZHJv
bkdlb21ldHJ5JzsKIAotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgcG9zaXRpb246IHZl
cnRpY2VzQXJyYXksCi0gICAgICAgICAgICB1djogdXZBcnJheSwKLSAgICAgICAgICAgIGluZGV4
OiBpbmRpY2VzQXJyYXkKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAg
cmFkaXVzOiByYWRpdXMsCisgICAgICAgICAgICBkZXRhaWw6IGRldGFpbAogICAgICAgICB9Owog
Ci0gICAgfTsKKyAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBJY29zYWhlZHJv
bkJ1ZmZlckdlb21ldHJ5KCByYWRpdXMsIGRldGFpbCApICk7CisgICAgICAgIHRoaXMubWVyZ2VW
ZXJ0aWNlcygpOwogCi0gICAgRXh0cnVkZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5hZGRTaGFw
ZUxpc3QgPSBmdW5jdGlvbiAoIHNoYXBlcywgb3B0aW9ucyApIHsKKyAgICB9CiAKLSAgICAgICAg
dmFyIHNsID0gc2hhcGVzLmxlbmd0aDsKLSAgICAgICAgb3B0aW9ucy5hcnJheXMgPSB0aGlzLmdl
dEFycmF5cygpOworICAgIEljb3NhaGVkcm9uR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgSWNvc2FoZWRyb25HZW9tZXRyeS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBJY29zYWhlZHJvbkdlb21ldHJ5OwogCi0gICAgICAgIGZvciAo
IHZhciBzID0gMDsgcyA8IHNsOyBzICsrICkgeworICAgIC8vIEljb3NhaGVkcm9uQnVmZmVyR2Vv
bWV0cnkKIAotICAgICAgICAgICAgdmFyIHNoYXBlID0gc2hhcGVzWyBzIF07Ci0gICAgICAgICAg
ICB0aGlzLmFkZFNoYXBlKCBzaGFwZSwgb3B0aW9ucyApOworICAgIGZ1bmN0aW9uIEljb3NhaGVk
cm9uQnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgZGV0YWlsICkgewogCi0gICAgICAgIH0KKyAgICAg
ICAgdmFyIHQgPSAoIDEgKyBNYXRoLnNxcnQoIDUgKSApIC8gMjsKIAotICAgICAgICB0aGlzLnNl
dEluZGV4KCBvcHRpb25zLmFycmF5cy5pbmRleCApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0
ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG9wdGlvbnMuYXJyYXlz
LnBvc2l0aW9uLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dicsIG5ldyBG
bG9hdDMyQnVmZmVyQXR0cmlidXRlKCBvcHRpb25zLmFycmF5cy51diwgMiApICk7CisgICAgICAg
IHZhciB2ZXJ0aWNlcyA9IFsKKyAgICAgICAgICAgIC0gMSwgdCwgMCwgIDEsIHQsIDAsICAgIC0g
MSwgLSB0LCAwLCAgICAxLCAtIHQsIDAsCisgICAgICAgICAgICAgMCwgLSAxLCB0LCAgICAgMCwg
MSwgdCwgICAgMCwgLSAxLCAtIHQsICAgIDAsIDEsIC0gdCwKKyAgICAgICAgICAgICB0LCAwLCAt
IDEsICAgICB0LCAwLCAxLCAgICAtIHQsIDAsIC0gMSwgICAgLSB0LCAwLCAxCisgICAgICAgIF07
CiAKLSAgICB9OworICAgICAgICB2YXIgaW5kaWNlcyA9IFsKKyAgICAgICAgICAgICAwLCAxMSwg
NSwgIDAsIDUsIDEsICAgIDAsIDEsIDcsICAgIDAsIDcsIDEwLCAgIDAsIDEwLCAxMSwKKyAgICAg
ICAgICAgICAxLCA1LCA5LCAgIDUsIDExLCA0LCAgIDExLCAxMCwgMiwgIDEwLCA3LCA2LCAgIDcs
IDEsIDgsCisgICAgICAgICAgICAgMywgOSwgNCwgICAzLCA0LCAyLCAgICAzLCAyLCA2LCAgICAz
LCA2LCA4LCAgICAzLCA4LCA5LAorICAgICAgICAgICAgIDQsIDksIDUsICAgMiwgNCwgMTEsICAg
NiwgMiwgMTAsICAgOCwgNiwgNywgICAgOSwgOCwgMQorICAgICAgICBdOwogCi0gICAgRXh0cnVk
ZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5hZGRTaGFwZSA9IGZ1bmN0aW9uICggc2hhcGUsIG9w
dGlvbnMgKSB7CisgICAgICAgIFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzLCB2
ZXJ0aWNlcywgaW5kaWNlcywgcmFkaXVzLCBkZXRhaWwgKTsKIAotICAgICAgICB2YXIgYXJyYXlz
ID0gb3B0aW9ucy5hcnJheXMgPyBvcHRpb25zLmFycmF5cyA6IHRoaXMuZ2V0QXJyYXlzKCk7Ci0g
ICAgICAgIHZhciB2ZXJ0aWNlc0FycmF5ID0gYXJyYXlzLnBvc2l0aW9uOwotICAgICAgICB2YXIg
aW5kaWNlc0FycmF5ID0gYXJyYXlzLmluZGV4OwotICAgICAgICB2YXIgdXZBcnJheSA9IGFycmF5
cy51djsKKyAgICAgICAgdGhpcy50eXBlID0gJ0ljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnknOwog
Ci0gICAgICAgIHZhciBwbGFjZWhvbGRlciA9IFtdOworICAgICAgICB0aGlzLnBhcmFtZXRlcnMg
PSB7CisgICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgICAgIGRldGFpbDogZGV0
YWlsCisgICAgICAgIH07CiAKKyAgICB9CiAKLSAgICAgICAgdmFyIGFtb3VudCA9IG9wdGlvbnMu
YW1vdW50ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmFtb3VudCA6IDEwMDsKKyAgICBJY29zYWhl
ZHJvbkJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFBvbHloZWRyb25C
dWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk7CiAKLSAg
ICAgICAgdmFyIGJldmVsVGhpY2tuZXNzID0gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyAhPT0gdW5k
ZWZpbmVkID8gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyA6IDY7IC8vIDEwCi0gICAgICAgIHZhciBi
ZXZlbFNpemUgPSBvcHRpb25zLmJldmVsU2l6ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZl
bFNpemUgOiBiZXZlbFRoaWNrbmVzcyAtIDI7IC8vIDgKLSAgICAgICAgdmFyIGJldmVsU2VnbWVu
dHMgPSBvcHRpb25zLmJldmVsU2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxT
ZWdtZW50cyA6IDM7CisgICAgLyoqCisgICAgICogQGF1dGhvciBBYmUgUGF6b3MgLyBodHRwczov
L2hhbW9pZC5jb20KKyAgICAgKiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20v
TXVnZW44NworICAgICAqLwogCi0gICAgICAgIHZhciBiZXZlbEVuYWJsZWQgPSBvcHRpb25zLmJl
dmVsRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbEVuYWJsZWQgOiB0cnVlOyAv
LyBmYWxzZQorICAgIC8vIERvZGVjYWhlZHJvbkdlb21ldHJ5CiAKLSAgICAgICAgdmFyIGN1cnZl
U2VnbWVudHMgPSBvcHRpb25zLmN1cnZlU2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMu
Y3VydmVTZWdtZW50cyA6IDEyOworICAgIGZ1bmN0aW9uIERvZGVjYWhlZHJvbkdlb21ldHJ5KCBy
YWRpdXMsIGRldGFpbCApIHsKIAotICAgICAgICB2YXIgc3RlcHMgPSBvcHRpb25zLnN0ZXBzICE9
PSB1bmRlZmluZWQgPyBvcHRpb25zLnN0ZXBzIDogMTsKKyAgICAgICAgR2VvbWV0cnkuY2FsbCgg
dGhpcyApOwogCi0gICAgICAgIHZhciBleHRydWRlUGF0aCA9IG9wdGlvbnMuZXh0cnVkZVBhdGg7
Ci0gICAgICAgIHZhciBleHRydWRlUHRzLCBleHRydWRlQnlQYXRoID0gZmFsc2U7CisgICAgICAg
IHRoaXMudHlwZSA9ICdEb2RlY2FoZWRyb25HZW9tZXRyeSc7CiAKLSAgICAgICAgLy8gVXNlIGRl
ZmF1bHQgV29ybGRVVkdlbmVyYXRvciBpZiBubyBVViBnZW5lcmF0b3JzIGFyZSBzcGVjaWZpZWQu
Ci0gICAgICAgIHZhciB1dmdlbiA9IG9wdGlvbnMuVVZHZW5lcmF0b3IgIT09IHVuZGVmaW5lZCA/
IG9wdGlvbnMuVVZHZW5lcmF0b3IgOiBFeHRydWRlR2VvbWV0cnkuV29ybGRVVkdlbmVyYXRvcjsK
KyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMs
CisgICAgICAgICAgICBkZXRhaWw6IGRldGFpbAorICAgICAgICB9OwogCi0gICAgICAgIHZhciBz
cGxpbmVUdWJlLCBiaW5vcm1hbCwgbm9ybWFsLCBwb3NpdGlvbjI7Ci0gICAgICAgIGlmICggZXh0
cnVkZVBhdGggKSB7CisgICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgRG9kZWNh
aGVkcm9uQnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgZGV0YWlsICkgKTsKKyAgICAgICAgdGhpcy5t
ZXJnZVZlcnRpY2VzKCk7CiAKLSAgICAgICAgICAgIGV4dHJ1ZGVQdHMgPSBleHRydWRlUGF0aC5n
ZXRTcGFjZWRQb2ludHMoIHN0ZXBzICk7CisgICAgfQogCi0gICAgICAgICAgICBleHRydWRlQnlQ
YXRoID0gdHJ1ZTsKLSAgICAgICAgICAgIGJldmVsRW5hYmxlZCA9IGZhbHNlOyAvLyBiZXZlbHMg
bm90IHN1cHBvcnRlZCBmb3IgcGF0aCBleHRydXNpb24KKyAgICBEb2RlY2FoZWRyb25HZW9tZXRy
eS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBE
b2RlY2FoZWRyb25HZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb2RlY2FoZWRyb25H
ZW9tZXRyeTsKIAotICAgICAgICAgICAgLy8gU0VUVVAgVE5CIHZhcmlhYmxlcworICAgIC8vIERv
ZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5CiAKLSAgICAgICAgICAgIC8vIFRPRE8xIC0gaGF2ZSBh
IC5pc0Nsb3NlZCBpbiBzcGxpbmU/CisgICAgZnVuY3Rpb24gRG9kZWNhaGVkcm9uQnVmZmVyR2Vv
bWV0cnkoIHJhZGl1cywgZGV0YWlsICkgewogCi0gICAgICAgICAgICBzcGxpbmVUdWJlID0gb3B0
aW9ucy5mcmFtZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZnJhbWVzIDogZXh0cnVkZVBhdGgu
Y29tcHV0ZUZyZW5ldEZyYW1lcyggc3RlcHMsIGZhbHNlICk7CisgICAgICAgIHZhciB0ID0gKCAx
ICsgTWF0aC5zcXJ0KCA1ICkgKSAvIDI7CisgICAgICAgIHZhciByID0gMSAvIHQ7CiAKLSAgICAg
ICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGluZVR1YmUsICdzcGxpbmVUdWJlJywgc3BsaW5lVHVi
ZS5ub3JtYWxzLmxlbmd0aCwgJ3N0ZXBzJywgc3RlcHMsICdleHRydWRlUHRzJywgZXh0cnVkZVB0
cy5sZW5ndGgpOworICAgICAgICB2YXIgdmVydGljZXMgPSBbCiAKLSAgICAgICAgICAgIGJpbm9y
bWFsID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7
Ci0gICAgICAgICAgICBwb3NpdGlvbjIgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgLy8g
KMKxMSwgwrExLCDCsTEpCisgICAgICAgICAgICAtIDEsIC0gMSwgLSAxLCAgLSAxLCAtIDEsIDEs
CisgICAgICAgICAgICAtIDEsIDEsIC0gMSwgLSAxLCAxLCAxLAorICAgICAgICAgICAgMSwgLSAx
LCAtIDEsIDEsIC0gMSwgMSwKKyAgICAgICAgICAgIDEsIDEsIC0gMSwgMSwgMSwgMSwKIAotICAg
ICAgICB9CisgICAgICAgICAgICAvLyAoMCwgwrExL8+GLCDCsc+GKQorICAgICAgICAgICAgIDAs
IC0gciwgLSB0LCAwLCAtIHIsIHQsCisgICAgICAgICAgICAgMCwgciwgLSB0LCAwLCByLCB0LAog
Ci0gICAgICAgIC8vIFNhZmVndWFyZHMgaWYgYmV2ZWxzIGFyZSBub3QgZW5hYmxlZAorICAgICAg
ICAgICAgLy8gKMKxMS/PhiwgwrHPhiwgMCkKKyAgICAgICAgICAgIC0gciwgLSB0LCAwLCAtIHIs
IHQsIDAsCisgICAgICAgICAgICAgciwgLSB0LCAwLCByLCB0LCAwLAogCi0gICAgICAgIGlmICgg
ISBiZXZlbEVuYWJsZWQgKSB7CisgICAgICAgICAgICAvLyAowrHPhiwgMCwgwrExL8+GKQorICAg
ICAgICAgICAgLSB0LCAwLCAtIHIsIHQsIDAsIC0gciwKKyAgICAgICAgICAgIC0gdCwgMCwgciwg
dCwgMCwgcgorICAgICAgICBdOwogCi0gICAgICAgICAgICBiZXZlbFNlZ21lbnRzID0gMDsKLSAg
ICAgICAgICAgIGJldmVsVGhpY2tuZXNzID0gMDsKLSAgICAgICAgICAgIGJldmVsU2l6ZSA9IDA7
CisgICAgICAgIHZhciBpbmRpY2VzID0gWworICAgICAgICAgICAgMywgMTEsIDcsICAgMywgNywg
MTUsICAgMywgMTUsIDEzLAorICAgICAgICAgICAgNywgMTksIDE3LCAgNywgMTcsIDYsICAgNywg
NiwgMTUsCisgICAgICAgICAgICAxNywgNCwgOCwgICAxNywgOCwgMTAsICAxNywgMTAsIDYsCisg
ICAgICAgICAgICA4LCAwLCAxNiwgICA4LCAxNiwgMiwgICA4LCAyLCAxMCwKKyAgICAgICAgICAg
IDAsIDEyLCAxLCAgIDAsIDEsIDE4LCAgIDAsIDE4LCAxNiwKKyAgICAgICAgICAgIDYsIDEwLCAy
LCAgIDYsIDIsIDEzLCAgIDYsIDEzLCAxNSwKKyAgICAgICAgICAgIDIsIDE2LCAxOCwgIDIsIDE4
LCAzLCAgIDIsIDMsIDEzLAorICAgICAgICAgICAgMTgsIDEsIDksICAgMTgsIDksIDExLCAgMTgs
IDExLCAzLAorICAgICAgICAgICAgNCwgMTQsIDEyLCAgNCwgMTIsIDAsICAgNCwgMCwgOCwKKyAg
ICAgICAgICAgIDExLCA5LCA1LCAgIDExLCA1LCAxOSwgIDExLCAxOSwgNywKKyAgICAgICAgICAg
IDE5LCA1LCAxNCwgIDE5LCAxNCwgNCwgIDE5LCA0LCAxNywKKyAgICAgICAgICAgIDEsIDEyLCAx
NCwgIDEsIDE0LCA1LCAgIDEsIDUsIDkKKyAgICAgICAgXTsKIAotICAgICAgICB9CisgICAgICAg
IFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzLCB2ZXJ0aWNlcywgaW5kaWNlcywg
cmFkaXVzLCBkZXRhaWwgKTsKIAotICAgICAgICAvLyBWYXJpYWJsZXMgaW5pdGlhbGl6YXRpb24K
KyAgICAgICAgdGhpcy50eXBlID0gJ0RvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5JzsKIAotICAg
ICAgICB2YXIgYWhvbGUsIGgsIGhsOyAvLyBsb29waW5nIG9mIGhvbGVzCi0gICAgICAgIHZhciBz
Y29wZSA9IHRoaXM7CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHJh
ZGl1czogcmFkaXVzLAorICAgICAgICAgICAgZGV0YWlsOiBkZXRhaWwKKyAgICAgICAgfTsKIAot
ICAgICAgICB2YXIgc2hhcGVQb2ludHMgPSBzaGFwZS5leHRyYWN0UG9pbnRzKCBjdXJ2ZVNlZ21l
bnRzICk7CisgICAgfQogCi0gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHNoYXBlUG9pbnRzLnNoYXBl
OwotICAgICAgICB2YXIgaG9sZXMgPSBzaGFwZVBvaW50cy5ob2xlczsKKyAgICBEb2RlY2FoZWRy
b25CdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBQb2x5aGVkcm9uQnVm
ZmVyR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnku
cHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk7CiAKLSAg
ICAgICAgdmFyIHJldmVyc2UgPSAhIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIHZlcnRpY2VzICk7
CisgICAgLyoqCisgICAgICogQGF1dGhvciBvb3Ntb3hpZWNvZGUgLyBodHRwczovL2dpdGh1Yi5j
b20vb29zbW94aWVjb2RlCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHBzOi8vZ2l0
aHViLmNvbS9XZXN0TGFuZ2xleQorICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHBzOi8vZ2l0aHVi
LmNvbS96ejg1CisgICAgICogQGF1dGhvciBtaW5pbmdvbGQgLyBodHRwczovL2dpdGh1Yi5jb20v
bWluaW5nb2xkCisgICAgICogQGF1dGhvciBqb25vYnIxIC8gaHR0cHM6Ly9naXRodWIuY29tL2pv
bm9icjEKKyAgICAgKiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44
NworICAgICAqCisgICAgICovCiAKLSAgICAgICAgaWYgKCByZXZlcnNlICkgeworICAgIC8vIFR1
YmVHZW9tZXRyeQogCi0gICAgICAgICAgICB2ZXJ0aWNlcyA9IHZlcnRpY2VzLnJldmVyc2UoKTsK
KyAgICBmdW5jdGlvbiBUdWJlR2VvbWV0cnkoIHBhdGgsIHR1YnVsYXJTZWdtZW50cywgcmFkaXVz
LCByYWRpYWxTZWdtZW50cywgY2xvc2VkLCB0YXBlciApIHsKIAotICAgICAgICAgICAgLy8gTWF5
YmUgd2Ugc2hvdWxkIGFsc28gY2hlY2sgaWYgaG9sZXMgYXJlIGluIHRoZSBvcHBvc2l0ZSBkaXJl
Y3Rpb24sIGp1c3QgdG8gYmUgc2FmZSAuLi4KKyAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyAp
OwogCi0gICAgICAgICAgICBmb3IgKCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsg
aCArKyApIHsKKyAgICAgICAgdGhpcy50eXBlID0gJ1R1YmVHZW9tZXRyeSc7CiAKLSAgICAgICAg
ICAgICAgICBhaG9sZSA9IGhvbGVzWyBoIF07CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsK
KyAgICAgICAgICAgIHBhdGg6IHBhdGgsCisgICAgICAgICAgICB0dWJ1bGFyU2VnbWVudHM6IHR1
YnVsYXJTZWdtZW50cywKKyAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAorICAgICAgICAgICAg
cmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLAorICAgICAgICAgICAgY2xvc2VkOiBjbG9z
ZWQKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgIGlmICggU2hhcGVVdGlscy5pc0Nsb2Nr
V2lzZSggYWhvbGUgKSApIHsKKyAgICAgICAgaWYgKCB0YXBlciAhPT0gdW5kZWZpbmVkICkgY29u
c29sZS53YXJuKCAnVEhSRUUuVHViZUdlb21ldHJ5OiB0YXBlciBoYXMgYmVlbiByZW1vdmVkLicg
KTsKIAotICAgICAgICAgICAgICAgICAgICBob2xlc1sgaCBdID0gYWhvbGUucmV2ZXJzZSgpOwor
ICAgICAgICB2YXIgYnVmZmVyR2VvbWV0cnkgPSBuZXcgVHViZUJ1ZmZlckdlb21ldHJ5KCBwYXRo
LCB0dWJ1bGFyU2VnbWVudHMsIHJhZGl1cywgcmFkaWFsU2VnbWVudHMsIGNsb3NlZCApOwogCi0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAvLyBleHBvc2UgaW50ZXJuYWxzCiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgdGhpcy50YW5nZW50cyA9IGJ1ZmZlckdlb21ldHJ5LnRhbmdlbnRzOwor
ICAgICAgICB0aGlzLm5vcm1hbHMgPSBidWZmZXJHZW9tZXRyeS5ub3JtYWxzOworICAgICAgICB0
aGlzLmJpbm9ybWFscyA9IGJ1ZmZlckdlb21ldHJ5LmJpbm9ybWFsczsKIAotICAgICAgICB9Cisg
ICAgICAgIC8vIGNyZWF0ZSBnZW9tZXRyeQogCisgICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21l
dHJ5KCBidWZmZXJHZW9tZXRyeSApOworICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKIAot
ICAgICAgICB2YXIgZmFjZXMgPSBTaGFwZVV0aWxzLnRyaWFuZ3VsYXRlU2hhcGUoIHZlcnRpY2Vz
LCBob2xlcyApOworICAgIH0KIAotICAgICAgICAvKiBWZXJ0aWNlcyAqLworICAgIFR1YmVHZW9t
ZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAg
ICBUdWJlR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHViZUdlb21ldHJ5OwogCi0g
ICAgICAgIHZhciBjb250b3VyID0gdmVydGljZXM7IC8vIHZlcnRpY2VzIGhhcyBhbGwgcG9pbnRz
IGJ1dCBjb250b3VyIGhhcyBvbmx5IHBvaW50cyBvZiBjaXJjdW1mZXJlbmNlCisgICAgLy8gVHVi
ZUJ1ZmZlckdlb21ldHJ5CiAKLSAgICAgICAgZm9yICggaCA9IDAsIGhsID0gaG9sZXMubGVuZ3Ro
OyBoIDwgaGw7IGggKysgKSB7CisgICAgZnVuY3Rpb24gVHViZUJ1ZmZlckdlb21ldHJ5KCBwYXRo
LCB0dWJ1bGFyU2VnbWVudHMsIHJhZGl1cywgcmFkaWFsU2VnbWVudHMsIGNsb3NlZCApIHsKIAot
ICAgICAgICAgICAgYWhvbGUgPSBob2xlc1sgaCBdOworICAgICAgICBCdWZmZXJHZW9tZXRyeS5j
YWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuY29uY2F0KCBh
aG9sZSApOworICAgICAgICB0aGlzLnR5cGUgPSAnVHViZUJ1ZmZlckdlb21ldHJ5JzsKIAotICAg
ICAgICB9CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHBhdGg6IHBh
dGgsCisgICAgICAgICAgICB0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cywKKyAgICAg
ICAgICAgIHJhZGl1czogcmFkaXVzLAorICAgICAgICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlh
bFNlZ21lbnRzLAorICAgICAgICAgICAgY2xvc2VkOiBjbG9zZWQKKyAgICAgICAgfTsKIAorICAg
ICAgICB0dWJ1bGFyU2VnbWVudHMgPSB0dWJ1bGFyU2VnbWVudHMgfHwgNjQ7CisgICAgICAgIHJh
ZGl1cyA9IHJhZGl1cyB8fCAxOworICAgICAgICByYWRpYWxTZWdtZW50cyA9IHJhZGlhbFNlZ21l
bnRzIHx8IDg7CisgICAgICAgIGNsb3NlZCA9IGNsb3NlZCB8fCBmYWxzZTsKIAotICAgICAgICBm
dW5jdGlvbiBzY2FsZVB0MiggcHQsIHZlYywgc2l6ZSApIHsKKyAgICAgICAgdmFyIGZyYW1lcyA9
IHBhdGguY29tcHV0ZUZyZW5ldEZyYW1lcyggdHVidWxhclNlZ21lbnRzLCBjbG9zZWQgKTsKIAot
ICAgICAgICAgICAgaWYgKCAhIHZlYyApIGNvbnNvbGUuZXJyb3IoICJUSFJFRS5FeHRydWRlR2Vv
bWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIgKTsKKyAgICAgICAgLy8gZXhwb3NlIGludGVybmFs
cwogCi0gICAgICAgICAgICByZXR1cm4gdmVjLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoIHNpemUg
KS5hZGQoIHB0ICk7CisgICAgICAgIHRoaXMudGFuZ2VudHMgPSBmcmFtZXMudGFuZ2VudHM7Cisg
ICAgICAgIHRoaXMubm9ybWFscyA9IGZyYW1lcy5ub3JtYWxzOworICAgICAgICB0aGlzLmJpbm9y
bWFscyA9IGZyYW1lcy5iaW5vcm1hbHM7CiAKLSAgICAgICAgfQorICAgICAgICAvLyBoZWxwZXIg
dmFyaWFibGVzCiAKLSAgICAgICAgdmFyIGIsIGJzLCB0LCB6LAotICAgICAgICAgICAgdmVydCwg
dmxlbiA9IHZlcnRpY2VzLmxlbmd0aCwKLSAgICAgICAgICAgIGZhY2UsIGZsZW4gPSBmYWNlcy5s
ZW5ndGg7CisgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOworICAgICAgICB2YXIg
bm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdmFyIHV2ID0gbmV3IFZlY3RvcjIoKTsK
KyAgICAgICAgdmFyIFAgPSBuZXcgVmVjdG9yMygpOwogCisgICAgICAgIHZhciBpLCBqOwogCi0g
ICAgICAgIC8vIEZpbmQgZGlyZWN0aW9ucyBmb3IgcG9pbnQgbW92ZW1lbnQKKyAgICAgICAgLy8g
YnVmZmVyCiAKKyAgICAgICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxz
ID0gW107CisgICAgICAgIHZhciB1dnMgPSBbXTsKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsK
IAotICAgICAgICBmdW5jdGlvbiBnZXRCZXZlbFZlYyggaW5QdCwgaW5QcmV2LCBpbk5leHQgKSB7
CisgICAgICAgIC8vIGNyZWF0ZSBidWZmZXIgZGF0YQogCi0gICAgICAgICAgICAvLyBjb21wdXRl
cyBmb3IgaW5QdCB0aGUgY29ycmVzcG9uZGluZyBwb2ludCBpblB0JyBvbiBhIG5ldyBjb250b3Vy
Ci0gICAgICAgICAgICAvLyAgIHNoaWZ0ZWQgYnkgMSB1bml0IChsZW5ndGggb2Ygbm9ybWFsaXpl
ZCB2ZWN0b3IpIHRvIHRoZSBsZWZ0Ci0gICAgICAgICAgICAvLyBpZiB3ZSB3YWxrIGFsb25nIGNv
bnRvdXIgY2xvY2t3aXNlLCB0aGlzIG5ldyBjb250b3VyIGlzIG91dHNpZGUgdGhlIG9sZCBvbmUK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBpblB0JyBpcyB0aGUgaW50ZXJzZWN0aW9u
IG9mIHRoZSB0d28gbGluZXMgcGFyYWxsZWwgdG8gdGhlIHR3bwotICAgICAgICAgICAgLy8gIGFk
amFjZW50IGVkZ2VzIG9mIGluUHQgYXQgYSBkaXN0YW5jZSBvZiAxIHVuaXQgb24gdGhlIGxlZnQg
c2lkZS4KKyAgICAgICAgZ2VuZXJhdGVCdWZmZXJEYXRhKCk7CiAKLSAgICAgICAgICAgIHZhciB2
X3RyYW5zX3gsIHZfdHJhbnNfeSwgc2hyaW5rX2J5OyAvLyByZXN1bHRpbmcgdHJhbnNsYXRpb24g
dmVjdG9yIGZvciBpblB0CisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CiAKLSAgICAgICAgICAg
IC8vIGdvb2QgcmVhZGluZyBmb3IgZ2VvbWV0cnkgYWxnb3JpdGhtcyAoaGVyZTogbGluZS1saW5l
IGludGVyc2VjdGlvbikKLSAgICAgICAgICAgIC8vIGh0dHA6Ly9nZW9tYWxnb3JpdGhtcy5jb20v
YTA1LV9pbnRlcnNlY3QtMS5odG1sCisgICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsK
KyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVy
QXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAn
bm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApOworICAg
ICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUo
IHV2cywgMiApICk7CiAKLSAgICAgICAgICAgIHZhciB2X3ByZXZfeCA9IGluUHQueCAtIGluUHJl
di54LAotICAgICAgICAgICAgICAgIHZfcHJldl95ID0gaW5QdC55IC0gaW5QcmV2Lnk7Ci0gICAg
ICAgICAgICB2YXIgdl9uZXh0X3ggPSBpbk5leHQueCAtIGluUHQueCwKLSAgICAgICAgICAgICAg
ICB2X25leHRfeSA9IGluTmV4dC55IC0gaW5QdC55OworICAgICAgICAvLyBmdW5jdGlvbnMKIAot
ICAgICAgICAgICAgdmFyIHZfcHJldl9sZW5zcSA9ICggdl9wcmV2X3ggKiB2X3ByZXZfeCArIHZf
cHJldl95ICogdl9wcmV2X3kgKTsKKyAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVCdWZmZXJEYXRh
KCkgewogCi0gICAgICAgICAgICAvLyBjaGVjayBmb3IgY29sbGluZWFyIGVkZ2VzCi0gICAgICAg
ICAgICB2YXIgY29sbGluZWFyMCA9ICggdl9wcmV2X3ggKiB2X25leHRfeSAtIHZfcHJldl95ICog
dl9uZXh0X3ggKTsKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgdHVidWxhclNlZ21lbnRz
OyBpICsrICkgewogCi0gICAgICAgICAgICBpZiAoIE1hdGguYWJzKCBjb2xsaW5lYXIwICkgPiBO
dW1iZXIuRVBTSUxPTiApIHsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZVNlZ21lbnQoIGkgKTsK
IAotICAgICAgICAgICAgICAgIC8vIG5vdCBjb2xsaW5lYXIKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIC8vIGxlbmd0aCBvZiB2ZWN0b3JzIGZvciBub3JtYWxpemluZworICAgICAg
ICAgICAgLy8gaWYgdGhlIGdlb21ldHJ5IGlzIG5vdCBjbG9zZWQsIGdlbmVyYXRlIHRoZSBsYXN0
IHJvdyBvZiB2ZXJ0aWNlcyBhbmQgbm9ybWFscworICAgICAgICAgICAgLy8gYXQgdGhlIHJlZ3Vs
YXIgcG9zaXRpb24gb24gdGhlIGdpdmVuIHBhdGgKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBpZiB0aGUgZ2VvbWV0cnkgaXMgY2xvc2VkLCBkdXBsaWNhdGUgdGhlIGZpcnN0IHJvdyBv
ZiB2ZXJ0aWNlcyBhbmQgbm9ybWFscyAodXZzIHdpbGwgZGlmZmVyKQogCi0gICAgICAgICAgICAg
ICAgdmFyIHZfcHJldl9sZW4gPSBNYXRoLnNxcnQoIHZfcHJldl9sZW5zcSApOwotICAgICAgICAg
ICAgICAgIHZhciB2X25leHRfbGVuID0gTWF0aC5zcXJ0KCB2X25leHRfeCAqIHZfbmV4dF94ICsg
dl9uZXh0X3kgKiB2X25leHRfeSApOworICAgICAgICAgICAgZ2VuZXJhdGVTZWdtZW50KCAoIGNs
b3NlZCA9PT0gZmFsc2UgKSA/IHR1YnVsYXJTZWdtZW50cyA6IDAgKTsKIAotICAgICAgICAgICAg
ICAgIC8vIHNoaWZ0IGFkamFjZW50IHBvaW50cyBieSB1bml0IHZlY3RvcnMgdG8gdGhlIGxlZnQK
KyAgICAgICAgICAgIC8vIHV2cyBhcmUgZ2VuZXJhdGVkIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24u
CisgICAgICAgICAgICAvLyB0aGlzIG1ha2VzIGl0IGVhc3kgY29tcHV0ZSBjb3JyZWN0IHZhbHVl
cyBmb3IgY2xvc2VkIGdlb21ldHJpZXMKIAotICAgICAgICAgICAgICAgIHZhciBwdFByZXZTaGlm
dF94ID0gKCBpblByZXYueCAtIHZfcHJldl95IC8gdl9wcmV2X2xlbiApOwotICAgICAgICAgICAg
ICAgIHZhciBwdFByZXZTaGlmdF95ID0gKCBpblByZXYueSArIHZfcHJldl94IC8gdl9wcmV2X2xl
biApOworICAgICAgICAgICAgZ2VuZXJhdGVVVnMoKTsKIAotICAgICAgICAgICAgICAgIHZhciBw
dE5leHRTaGlmdF94ID0gKCBpbk5leHQueCAtIHZfbmV4dF95IC8gdl9uZXh0X2xlbiApOwotICAg
ICAgICAgICAgICAgIHZhciBwdE5leHRTaGlmdF95ID0gKCBpbk5leHQueSArIHZfbmV4dF94IC8g
dl9uZXh0X2xlbiApOworICAgICAgICAgICAgLy8gZmluYWxseSBjcmVhdGUgZmFjZXMKIAotICAg
ICAgICAgICAgICAgIC8vIHNjYWxpbmcgZmFjdG9yIGZvciB2X3ByZXYgdG8gaW50ZXJzZWN0aW9u
IHBvaW50CisgICAgICAgICAgICBnZW5lcmF0ZUluZGljZXMoKTsKIAotICAgICAgICAgICAgICAg
IHZhciBzZiA9ICggKCBwdE5leHRTaGlmdF94IC0gcHRQcmV2U2hpZnRfeCApICogdl9uZXh0X3kg
LQotICAgICAgICAgICAgICAgICAgICAgICAgKCBwdE5leHRTaGlmdF95IC0gcHRQcmV2U2hpZnRf
eSApICogdl9uZXh0X3ggKSAvCi0gICAgICAgICAgICAgICAgICAgICggdl9wcmV2X3ggKiB2X25l
eHRfeSAtIHZfcHJldl95ICogdl9uZXh0X3ggKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgLy8gdmVjdG9yIGZyb20gaW5QdCB0byBpbnRlcnNlY3Rpb24gcG9pbnQKKyAgICAgICAgZnVu
Y3Rpb24gZ2VuZXJhdGVTZWdtZW50KCBpICkgewogCi0gICAgICAgICAgICAgICAgdl90cmFuc194
ID0gKCBwdFByZXZTaGlmdF94ICsgdl9wcmV2X3ggKiBzZiAtIGluUHQueCApOwotICAgICAgICAg
ICAgICAgIHZfdHJhbnNfeSA9ICggcHRQcmV2U2hpZnRfeSArIHZfcHJldl95ICogc2YgLSBpblB0
LnkgKTsKKyAgICAgICAgICAgIC8vIHdlIHVzZSBnZXRQb2ludEF0IHRvIHNhbXBsZSBldmVubHkg
ZGlzdHJpYnV0ZWQgcG9pbnRzIGZyb20gdGhlIGdpdmVuIHBhdGgKIAotICAgICAgICAgICAgICAg
IC8vIERvbid0IG5vcm1hbGl6ZSEsIG90aGVyd2lzZSBzaGFycCBjb3JuZXJzIGJlY29tZSB1Z2x5
Ci0gICAgICAgICAgICAgICAgLy8gIGJ1dCBwcmV2ZW50IGNyYXp5IHNwaWtlcwotICAgICAgICAg
ICAgICAgIHZhciB2X3RyYW5zX2xlbnNxID0gKCB2X3RyYW5zX3ggKiB2X3RyYW5zX3ggKyB2X3Ry
YW5zX3kgKiB2X3RyYW5zX3kgKTsKLSAgICAgICAgICAgICAgICBpZiAoIHZfdHJhbnNfbGVuc3Eg
PD0gMiApIHsKKyAgICAgICAgICAgIFAgPSBwYXRoLmdldFBvaW50QXQoIGkgLyB0dWJ1bGFyU2Vn
bWVudHMsIFAgKTsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoIHZf
dHJhbnNfeCwgdl90cmFuc195ICk7CisgICAgICAgICAgICAvLyByZXRyaWV2ZSBjb3JyZXNwb25k
aW5nIG5vcm1hbCBhbmQgYmlub3JtYWwKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgTiA9IGZyYW1lcy5ub3JtYWxzWyBpIF07CisgICAgICAgICAgICB2YXIgQiA9
IGZyYW1lcy5iaW5vcm1hbHNbIGkgXTsKIAotICAgICAgICAgICAgICAgICAgICBzaHJpbmtfYnkg
PSBNYXRoLnNxcnQoIHZfdHJhbnNfbGVuc3EgLyAyICk7CisgICAgICAgICAgICAvLyBnZW5lcmF0
ZSBub3JtYWxzIGFuZCB2ZXJ0aWNlcyBmb3IgdGhlIGN1cnJlbnQgc2VnbWVudAogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7
IGogKysgKSB7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHYg
PSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjsKIAotICAgICAgICAgICAgICAgIC8v
IGhhbmRsZSBzcGVjaWFsIGNhc2Ugb2YgY29sbGluZWFyIGVkZ2VzCisgICAgICAgICAgICAgICAg
dmFyIHNpbiA9IE1hdGguc2luKCB2ICk7CisgICAgICAgICAgICAgICAgdmFyIGNvcyA9IC0gTWF0
aC5jb3MoIHYgKTsKIAotICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb25fZXEgPSBmYWxzZTsg
Ly8gYXNzdW1lczogb3Bwb3NpdGUKLSAgICAgICAgICAgICAgICBpZiAoIHZfcHJldl94ID4gTnVt
YmVyLkVQU0lMT04gKSB7CisgICAgICAgICAgICAgICAgLy8gbm9ybWFsCiAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCB2X25leHRfeCA+IE51bWJlci5FUFNJTE9OICkgeworICAgICAgICAgICAg
ICAgIG5vcm1hbC54ID0gKCBjb3MgKiBOLnggKyBzaW4gKiBCLnggKTsKKyAgICAgICAgICAgICAg
ICBub3JtYWwueSA9ICggY29zICogTi55ICsgc2luICogQi55ICk7CisgICAgICAgICAgICAgICAg
bm9ybWFsLnogPSAoIGNvcyAqIE4ueiArIHNpbiAqIEIueiApOworICAgICAgICAgICAgICAgIG5v
cm1hbC5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uX2Vx
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwu
eSwgbm9ybWFsLnogKTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ly8gdmVydGV4CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZl
cnRleC54ID0gUC54ICsgcmFkaXVzICogbm9ybWFsLng7CisgICAgICAgICAgICAgICAgdmVydGV4
LnkgPSBQLnkgKyByYWRpdXMgKiBub3JtYWwueTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9
IFAueiArIHJhZGl1cyAqIG5vcm1hbC56OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggdl9w
cmV2X3ggPCAtIE51bWJlci5FUFNJTE9OICkgeworICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1
c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB2X25leHRfeCA8IC0gTnVtYmVyLkVQU0lMT04gKSB7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25fZXEgPSB0cnVlOworICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gZ2Vu
ZXJhdGVJbmRpY2VzKCkgewogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKCBqID0gMTsgaiA8PSB0dWJ1bGFyU2VnbWVudHM7IGogKysgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggTWF0aC5zaWduKCB2X3ByZXZfeSApID09PSBNYXRoLnNp
Z24oIHZfbmV4dF95ICkgKSB7CisgICAgICAgICAgICAgICAgZm9yICggaSA9IDE7IGkgPD0gcmFk
aWFsU2VnbWVudHM7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJl
Y3Rpb25fZXEgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB2YXIgYSA9ICggcmFkaWFsU2Vn
bWVudHMgKyAxICkgKiAoIGogLSAxICkgKyAoIGkgLSAxICk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBiID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqIGogKyAoIGkgLSAxICk7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBjID0gKCByYWRpYWxTZWdtZW50cyArIDEgKSAqIGogKyBpOworICAg
ICAgICAgICAgICAgICAgICB2YXIgZCA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiAoIGogLSAx
ICkgKyBpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIGZhY2VzCiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
bmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNo
KCBiLCBjLCBkICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAo
IGRpcmVjdGlvbl9lcSApIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIldhcm5pbmc6IGxpbmVzIGFyZSBhIHN0cmFpZ2h0
IHNlcXVlbmNlIik7Ci0gICAgICAgICAgICAgICAgICAgIHZfdHJhbnNfeCA9IC0gdl9wcmV2X3k7
Ci0gICAgICAgICAgICAgICAgICAgIHZfdHJhbnNfeSA9IHZfcHJldl94OwotICAgICAgICAgICAg
ICAgICAgICBzaHJpbmtfYnkgPSBNYXRoLnNxcnQoIHZfcHJldl9sZW5zcSApOworICAgICAgICBm
dW5jdGlvbiBnZW5lcmF0ZVVWcygpIHsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkgKysgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIldhcm5pbmc6IGxpbmVzIGFyZSBhIHN0
cmFpZ2h0IHNwaWtlIik7Ci0gICAgICAgICAgICAgICAgICAgIHZfdHJhbnNfeCA9IHZfcHJldl94
OwotICAgICAgICAgICAgICAgICAgICB2X3RyYW5zX3kgPSB2X3ByZXZfeTsKLSAgICAgICAgICAg
ICAgICAgICAgc2hyaW5rX2J5ID0gTWF0aC5zcXJ0KCB2X3ByZXZfbGVuc3EgLyAyICk7CisgICAg
ICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7IGogKysgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgdXYueCA9IGkgLyB0dWJ1bGFyU2VnbWVudHM7CisgICAgICAg
ICAgICAgICAgICAgIHV2LnkgPSBqIC8gcmFkaWFsU2VnbWVudHM7CisKKyAgICAgICAgICAgICAg
ICAgICAgdXZzLnB1c2goIHV2LngsIHV2LnkgKTsKIAogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoIHZfdHJhbnNfeCAv
IHNocmlua19ieSwgdl90cmFuc195IC8gc2hyaW5rX2J5ICk7Ci0KICAgICAgICAgfQogCisgICAg
fQogCi0gICAgICAgIHZhciBjb250b3VyTW92ZW1lbnRzID0gW107Ci0KLSAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBpbCA9IGNvbnRvdXIubGVuZ3RoLCBqID0gaWwgLSAxLCBrID0gaSArIDE7IGkg
PCBpbDsgaSArKywgaiArKywgayArKyApIHsKKyAgICBUdWJlQnVmZmVyR2VvbWV0cnkucHJvdG90
eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAgVHVi
ZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR1YmVCdWZmZXJHZW9tZXRy
eTsKIAotICAgICAgICAgICAgaWYgKCBqID09PSBpbCApIGogPSAwOwotICAgICAgICAgICAgaWYg
KCBrID09PSBpbCApIGsgPSAwOworICAgIC8qKgorICAgICAqIEBhdXRob3Igb29zbW94aWVjb2Rl
CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKKyAg
ICAgKgorICAgICAqIGJhc2VkIG9uIGh0dHA6Ly93d3cuYmxhY2twYXduLmNvbS90ZXh0cy9wcXRv
cnVzLworICAgICAqLwogCi0gICAgICAgICAgICAvLyAgKGopLS0tKGkpLS0tKGspCi0gICAgICAg
ICAgICAvLyBjb25zb2xlLmxvZygnaSxqLGsnLCBpLCBqICwgaykKKyAgICAvLyBUb3J1c0tub3RH
ZW9tZXRyeQogCi0gICAgICAgICAgICBjb250b3VyTW92ZW1lbnRzWyBpIF0gPSBnZXRCZXZlbFZl
YyggY29udG91clsgaSBdLCBjb250b3VyWyBqIF0sIGNvbnRvdXJbIGsgXSApOworICAgIGZ1bmN0
aW9uIFRvcnVzS25vdEdlb21ldHJ5KCByYWRpdXMsIHR1YmUsIHR1YnVsYXJTZWdtZW50cywgcmFk
aWFsU2VnbWVudHMsIHAsIHEsIGhlaWdodFNjYWxlICkgewogCi0gICAgICAgIH0KKyAgICAgICAg
R2VvbWV0cnkuY2FsbCggdGhpcyApOwogCi0gICAgICAgIHZhciBob2xlc01vdmVtZW50cyA9IFtd
LAotICAgICAgICAgICAgb25lSG9sZU1vdmVtZW50cywgdmVydGljZXNNb3ZlbWVudHMgPSBjb250
b3VyTW92ZW1lbnRzLmNvbmNhdCgpOworICAgICAgICB0aGlzLnR5cGUgPSAnVG9ydXNLbm90R2Vv
bWV0cnknOwogCi0gICAgICAgIGZvciAoIGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhs
OyBoICsrICkgeworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICByYWRp
dXM6IHJhZGl1cywKKyAgICAgICAgICAgIHR1YmU6IHR1YmUsCisgICAgICAgICAgICB0dWJ1bGFy
U2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cywKKyAgICAgICAgICAgIHJhZGlhbFNlZ21lbnRzOiBy
YWRpYWxTZWdtZW50cywKKyAgICAgICAgICAgIHA6IHAsCisgICAgICAgICAgICBxOiBxCisgICAg
ICAgIH07CiAKLSAgICAgICAgICAgIGFob2xlID0gaG9sZXNbIGggXTsKKyAgICAgICAgaWYgKCBo
ZWlnaHRTY2FsZSAhPT0gdW5kZWZpbmVkICkgY29uc29sZS53YXJuKCAnVEhSRUUuVG9ydXNLbm90
R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgs
IHksIHogKSBpbnN0ZWFkLicgKTsKIAotICAgICAgICAgICAgb25lSG9sZU1vdmVtZW50cyA9IFtd
OworICAgICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IFRvcnVzS25vdEJ1ZmZlckdl
b21ldHJ5KCByYWRpdXMsIHR1YmUsIHR1YnVsYXJTZWdtZW50cywgcmFkaWFsU2VnbWVudHMsIHAs
IHEgKSApOworICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKIAotICAgICAgICAgICAgZm9y
ICggaSA9IDAsIGlsID0gYWhvbGUubGVuZ3RoLCBqID0gaWwgLSAxLCBrID0gaSArIDE7IGkgPCBp
bDsgaSArKywgaiArKywgayArKyApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGog
PT09IGlsICkgaiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCBrID09PSBpbCApIGsgPSAwOwor
ICAgIFRvcnVzS25vdEdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5
LnByb3RvdHlwZSApOworICAgIFRvcnVzS25vdEdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IFRvcnVzS25vdEdlb21ldHJ5OwogCi0gICAgICAgICAgICAgICAgLy8gIChqKS0tLShpKS0t
LShrKQotICAgICAgICAgICAgICAgIG9uZUhvbGVNb3ZlbWVudHNbIGkgXSA9IGdldEJldmVsVmVj
KCBhaG9sZVsgaSBdLCBhaG9sZVsgaiBdLCBhaG9sZVsgayBdICk7CisgICAgLy8gVG9ydXNLbm90
QnVmZmVyR2VvbWV0cnkKIAotICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIFRvcnVzS25vdEJ1
ZmZlckdlb21ldHJ5KCByYWRpdXMsIHR1YmUsIHR1YnVsYXJTZWdtZW50cywgcmFkaWFsU2VnbWVu
dHMsIHAsIHEgKSB7CiAKLSAgICAgICAgICAgIGhvbGVzTW92ZW1lbnRzLnB1c2goIG9uZUhvbGVN
b3ZlbWVudHMgKTsKLSAgICAgICAgICAgIHZlcnRpY2VzTW92ZW1lbnRzID0gdmVydGljZXNNb3Zl
bWVudHMuY29uY2F0KCBvbmVIb2xlTW92ZW1lbnRzICk7CisgICAgICAgIEJ1ZmZlckdlb21ldHJ5
LmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB9CisgICAgICAgIHRoaXMudHlwZSA9ICdUb3J1c0tu
b3RCdWZmZXJHZW9tZXRyeSc7CiAKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAg
ICAgICAgcmFkaXVzOiByYWRpdXMsCisgICAgICAgICAgICB0dWJlOiB0dWJlLAorICAgICAgICAg
ICAgdHVidWxhclNlZ21lbnRzOiB0dWJ1bGFyU2VnbWVudHMsCisgICAgICAgICAgICByYWRpYWxT
ZWdtZW50czogcmFkaWFsU2VnbWVudHMsCisgICAgICAgICAgICBwOiBwLAorICAgICAgICAgICAg
cTogcQorICAgICAgICB9OwogCi0gICAgICAgIC8vIExvb3AgYmV2ZWxTZWdtZW50cywgMSBmb3Ig
dGhlIGZyb250LCAxIGZvciB0aGUgYmFjaworICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgMTsK
KyAgICAgICAgdHViZSA9IHR1YmUgfHwgMC40OworICAgICAgICB0dWJ1bGFyU2VnbWVudHMgPSBN
YXRoLmZsb29yKCB0dWJ1bGFyU2VnbWVudHMgKSB8fCA2NDsKKyAgICAgICAgcmFkaWFsU2VnbWVu
dHMgPSBNYXRoLmZsb29yKCByYWRpYWxTZWdtZW50cyApIHx8IDg7CisgICAgICAgIHAgPSBwIHx8
IDI7CisgICAgICAgIHEgPSBxIHx8IDM7CiAKLSAgICAgICAgZm9yICggYiA9IDA7IGIgPCBiZXZl
bFNlZ21lbnRzOyBiICsrICkgeworICAgICAgICAvLyBidWZmZXJzCiAKLSAgICAgICAgICAgIC8v
Zm9yICggYiA9IGJldmVsU2VnbWVudHM7IGIgPiAwOyBiIC0tICkgeworICAgICAgICB2YXIgaW5k
aWNlcyA9IFtdOworICAgICAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICAgICAgdmFyIG5vcm1h
bHMgPSBbXTsKKyAgICAgICAgdmFyIHV2cyA9IFtdOwogCi0gICAgICAgICAgICB0ID0gYiAvIGJl
dmVsU2VnbWVudHM7Ci0gICAgICAgICAgICB6ID0gYmV2ZWxUaGlja25lc3MgKiBNYXRoLmNvcygg
dCAqIE1hdGguUEkgLyAyICk7Ci0gICAgICAgICAgICBicyA9IGJldmVsU2l6ZSAqIE1hdGguc2lu
KCB0ICogTWF0aC5QSSAvIDIgKTsKKyAgICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcwogCi0gICAg
ICAgICAgICAvLyBjb250cmFjdCBzaGFwZQorICAgICAgICB2YXIgaSwgajsKIAotICAgICAgICAg
ICAgZm9yICggaSA9IDAsIGlsID0gY29udG91ci5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAg
ICAgICAgdmFyIHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHZhciBub3JtYWwgPSBu
ZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAgICAgdmVydCA9IHNjYWxlUHQyKCBjb250b3Vy
WyBpIF0sIGNvbnRvdXJNb3ZlbWVudHNbIGkgXSwgYnMgKTsKKyAgICAgICAgdmFyIFAxID0gbmV3
IFZlY3RvcjMoKTsKKyAgICAgICAgdmFyIFAyID0gbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAg
ICAgICAgIHYoIHZlcnQueCwgdmVydC55LCAtIHogKTsKKyAgICAgICAgdmFyIEIgPSBuZXcgVmVj
dG9yMygpOworICAgICAgICB2YXIgVCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHZhciBOID0g
bmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0
aWNlcywgbm9ybWFscyBhbmQgdXZzCiAKLSAgICAgICAgICAgIC8vIGV4cGFuZCBob2xlcworICAg
ICAgICBmb3IgKCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7ICsrIGkgKSB7CiAKLSAgICAg
ICAgICAgIGZvciAoIGggPSAwLCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoICsrICkgewor
ICAgICAgICAgICAgLy8gdGhlIHJhZGlhbiAidSIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBv
c2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1bGFyIHNlZ2VtZW50
CiAKLSAgICAgICAgICAgICAgICBhaG9sZSA9IGhvbGVzWyBoIF07Ci0gICAgICAgICAgICAgICAg
b25lSG9sZU1vdmVtZW50cyA9IGhvbGVzTW92ZW1lbnRzWyBoIF07CisgICAgICAgICAgICB2YXIg
dSA9IGkgLyB0dWJ1bGFyU2VnbWVudHMgKiBwICogTWF0aC5QSSAqIDI7CiAKLSAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMCwgaWwgPSBhaG9sZS5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKyAg
ICAgICAgICAgIC8vIG5vdyB3ZSBjYWxjdWxhdGUgdHdvIHBvaW50cy4gUDEgaXMgb3VyIGN1cnJl
bnQgcG9zaXRpb24gb24gdGhlIGN1cnZlLCBQMiBpcyBhIGxpdHRsZSBmYXJ0aGVyIGFoZWFkLgor
ICAgICAgICAgICAgLy8gdGhlc2UgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhIHNwZWNpYWwg
ImNvb3JkaW5hdGUgc3BhY2UiLCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHRoZSBj
b3JyZWN0IHZlcnRleCBwb3NpdGlvbnMKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ID0gc2Nh
bGVQdDIoIGFob2xlWyBpIF0sIG9uZUhvbGVNb3ZlbWVudHNbIGkgXSwgYnMgKTsKKyAgICAgICAg
ICAgIGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSggdSwgcCwgcSwgcmFkaXVzLCBQMSApOworICAg
ICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKCB1ICsgMC4wMSwgcCwgcSwgcmFkaXVz
LCBQMiApOwogCi0gICAgICAgICAgICAgICAgICAgIHYoIHZlcnQueCwgdmVydC55LCAtIHogKTsK
KyAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBvcnRob25vcm1hbCBiYXNpcwogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgVC5zdWJWZWN0b3JzKCBQMiwgUDEgKTsKKyAgICAgICAgICAg
IE4uYWRkVmVjdG9ycyggUDIsIFAxICk7CisgICAgICAgICAgICBCLmNyb3NzVmVjdG9ycyggVCwg
TiApOworICAgICAgICAgICAgTi5jcm9zc1ZlY3RvcnMoIEIsIFQgKTsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gbm9ybWFsaXplIEIsIE4uIFQgY2FuIGJlIGlnbm9yZWQsIHdlIGRv
bid0IHVzZSBpdAogCi0gICAgICAgIH0KKyAgICAgICAgICAgIEIubm9ybWFsaXplKCk7CisgICAg
ICAgICAgICBOLm5vcm1hbGl6ZSgpOwogCi0gICAgICAgIGJzID0gYmV2ZWxTaXplOworICAgICAg
ICAgICAgZm9yICggaiA9IDA7IGogPD0gcmFkaWFsU2VnbWVudHM7ICsrIGogKSB7CiAKLSAgICAg
ICAgLy8gQmFjayBmYWNpbmcgdmVydGljZXMKKyAgICAgICAgICAgICAgICAvLyBub3cgY2FsY3Vs
YXRlIHRoZSB2ZXJ0aWNlcy4gdGhleSBhcmUgbm90aGluZyBtb3JlIHRoYW4gYW4gZXh0cnVzaW9u
IG9mIHRoZSB0b3J1cyBjdXJ2ZS4KKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGV4dHJ1
ZGUgYSBzaGFwZSBpbiB0aGUgeHktcGxhbmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRl
IGEgei12YWx1ZS4KIAotICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHZsZW47IGkgKysgKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gcmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjsK
KyAgICAgICAgICAgICAgICB2YXIgY3ggPSAtIHR1YmUgKiBNYXRoLmNvcyggdiApOworICAgICAg
ICAgICAgICAgIHZhciBjeSA9IHR1YmUgKiBNYXRoLnNpbiggdiApOwogCi0gICAgICAgICAgICB2
ZXJ0ID0gYmV2ZWxFbmFibGVkID8gc2NhbGVQdDIoIHZlcnRpY2VzWyBpIF0sIHZlcnRpY2VzTW92
ZW1lbnRzWyBpIF0sIGJzICkgOiB2ZXJ0aWNlc1sgaSBdOworICAgICAgICAgICAgICAgIC8vIG5v
dyBjYWxjdWxhdGUgdGhlIGZpbmFsIHZlcnRleCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICAv
LyBmaXJzdCB3ZSBvcmllbnQgdGhlIGV4dHJ1c2lvbiB3aXRoIG91ciBiYXNpcyB2ZWN0b3MsIHRo
ZW4gd2UgYWRkIGl0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBjdXJ2ZQogCi0gICAg
ICAgICAgICBpZiAoICEgZXh0cnVkZUJ5UGF0aCApIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgu
eCA9IFAxLnggKyAoIGN4ICogTi54ICsgY3kgKiBCLnggKTsKKyAgICAgICAgICAgICAgICB2ZXJ0
ZXgueSA9IFAxLnkgKyAoIGN4ICogTi55ICsgY3kgKiBCLnkgKTsKKyAgICAgICAgICAgICAgICB2
ZXJ0ZXgueiA9IFAxLnogKyAoIGN4ICogTi56ICsgY3kgKiBCLnogKTsKIAotICAgICAgICAgICAg
ICAgIHYoIHZlcnQueCwgdmVydC55LCAwICk7CisgICAgICAgICAgICAgICAgdmVydGljZXMucHVz
aCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApOwogCi0gICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIG5vcm1hbCAoUDEgaXMgYWx3YXlzIHRoZSBjZW50ZXIvb3Jp
Z2luIG9mIHRoZSBleHRydXNpb24sIHRodXMgd2UgY2FuIHVzZSBpdCB0byBjYWxjdWxhdGUgdGhl
IG5vcm1hbCkKIAotICAgICAgICAgICAgICAgIC8vIHYoIHZlcnQueCwgdmVydC55ICsgZXh0cnVk
ZVB0c1sgMCBdLnksIGV4dHJ1ZGVQdHNbIDAgXS54ICk7CisgICAgICAgICAgICAgICAgbm9ybWFs
LnN1YlZlY3RvcnMoIHZlcnRleCwgUDEgKS5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAgICAg
IG5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLm5vcm1hbHNbIDAgXSApLm11bHRpcGx5U2NhbGFyKCB2
ZXJ0LnggKTsKLSAgICAgICAgICAgICAgICBiaW5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLmJpbm9y
bWFsc1sgMCBdICkubXVsdGlwbHlTY2FsYXIoIHZlcnQueSApOworICAgICAgICAgICAgICAgIG5v
cm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApOwogCi0gICAgICAgICAg
ICAgICAgcG9zaXRpb24yLmNvcHkoIGV4dHJ1ZGVQdHNbIDAgXSApLmFkZCggbm9ybWFsICkuYWRk
KCBiaW5vcm1hbCApOworICAgICAgICAgICAgICAgIC8vIHV2CiAKLSAgICAgICAgICAgICAgICB2
KCBwb3NpdGlvbjIueCwgcG9zaXRpb24yLnksIHBvc2l0aW9uMi56ICk7CisgICAgICAgICAgICAg
ICAgdXZzLnB1c2goIGkgLyB0dWJ1bGFyU2VnbWVudHMgKTsKKyAgICAgICAgICAgICAgICB1dnMu
cHVzaCggaiAvIHJhZGlhbFNlZ21lbnRzICk7CiAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9
CiAKLSAgICAgICAgLy8gQWRkIHN0ZXBwZWQgdmVydGljZXMuLi4KLSAgICAgICAgLy8gSW5jbHVk
aW5nIGZyb250IGZhY2luZyB2ZXJ0aWNlcworICAgICAgICAvLyBnZW5lcmF0ZSBpbmRpY2VzCiAK
LSAgICAgICAgdmFyIHM7CisgICAgICAgIGZvciAoIGogPSAxOyBqIDw9IHR1YnVsYXJTZWdtZW50
czsgaiArKyApIHsKIAotICAgICAgICBmb3IgKCBzID0gMTsgcyA8PSBzdGVwczsgcyArKyApIHsK
KyAgICAgICAgICAgIGZvciAoIGkgPSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpICsrICkgewog
Ci0gICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHZsZW47IGkgKysgKSB7CisgICAgICAgICAg
ICAgICAgLy8gaW5kaWNlcwogCi0gICAgICAgICAgICAgICAgdmVydCA9IGJldmVsRW5hYmxlZCA/
IHNjYWxlUHQyKCB2ZXJ0aWNlc1sgaSBdLCB2ZXJ0aWNlc01vdmVtZW50c1sgaSBdLCBicyApIDog
dmVydGljZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB2YXIgYSA9ICggcmFkaWFsU2VnbWVudHMg
KyAxICkgKiAoIGogLSAxICkgKyAoIGkgLSAxICk7CisgICAgICAgICAgICAgICAgdmFyIGIgPSAo
IHJhZGlhbFNlZ21lbnRzICsgMSApICogaiArICggaSAtIDEgKTsKKyAgICAgICAgICAgICAgICB2
YXIgYyA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiBqICsgaTsKKyAgICAgICAgICAgICAgICB2
YXIgZCA9ICggcmFkaWFsU2VnbWVudHMgKyAxICkgKiAoIGogLSAxICkgKyBpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKCAhIGV4dHJ1ZGVCeVBhdGggKSB7CisgICAgICAgICAgICAgICAgLy8gZmFj
ZXMKKworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYSwgYiwgZCApOworICAgICAgICAg
ICAgICAgIGluZGljZXMucHVzaCggYiwgYywgZCApOwogCi0gICAgICAgICAgICAgICAgICAgIHYo
IHZlcnQueCwgdmVydC55LCBhbW91bnQgLyBzdGVwcyAqIHMgKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAvLyB2KCB2ZXJ0LngsIHZlcnQueSArIGV4dHJ1ZGVQdHNbIHMgLSAxIF0ueSwgZXh0cnVkZVB0
c1sgcyAtIDEgXS54ICk7CisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CiAKLSAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsLmNvcHkoIHNwbGluZVR1YmUubm9ybWFsc1sgcyBdICkubXVsdGlwbHlT
Y2FsYXIoIHZlcnQueCApOwotICAgICAgICAgICAgICAgICAgICBiaW5vcm1hbC5jb3B5KCBzcGxp
bmVUdWJlLmJpbm9ybWFsc1sgcyBdICkubXVsdGlwbHlTY2FsYXIoIHZlcnQueSApOworICAgICAg
ICB0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAn
cG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApOwor
ICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0
cmlidXRlKCBub3JtYWxzLCAzICkgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dics
IG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApOwogCi0gICAgICAgICAgICAg
ICAgICAgIHBvc2l0aW9uMi5jb3B5KCBleHRydWRlUHRzWyBzIF0gKS5hZGQoIG5vcm1hbCApLmFk
ZCggYmlub3JtYWwgKTsKKyAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBj
dXJyZW50IHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZQogCi0gICAgICAgICAgICAgICAgICAg
IHYoIHBvc2l0aW9uMi54LCBwb3NpdGlvbjIueSwgcG9zaXRpb24yLnogKTsKKyAgICAgICAgZnVu
Y3Rpb24gY2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKCB1LCBwLCBxLCByYWRpdXMsIHBvc2l0aW9u
ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGN1ID0gTWF0aC5jb3Mo
IHUgKTsKKyAgICAgICAgICAgIHZhciBzdSA9IE1hdGguc2luKCB1ICk7CisgICAgICAgICAgICB2
YXIgcXVPdmVyUCA9IHEgLyBwICogdTsKKyAgICAgICAgICAgIHZhciBjcyA9IE1hdGguY29zKCBx
dU92ZXJQICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvc2l0aW9uLnggPSByYWRp
dXMgKiAoIDIgKyBjcyApICogMC41ICogY3U7CisgICAgICAgICAgICBwb3NpdGlvbi55ID0gcmFk
aXVzICogKCAyICsgY3MgKSAqIHN1ICogMC41OworICAgICAgICAgICAgcG9zaXRpb24ueiA9IHJh
ZGl1cyAqIE1hdGguc2luKCBxdU92ZXJQICkgKiAwLjU7CiAKICAgICAgICAgfQogCisgICAgfQog
Ci0gICAgICAgIC8vIEFkZCBiZXZlbCBzZWdtZW50cyBwbGFuZXMKKyAgICBUb3J1c0tub3RCdWZm
ZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90
b3R5cGUgKTsKKyAgICBUb3J1c0tub3RCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTsKIAotICAgICAgICAvL2ZvciAoIGIgPSAxOyBi
IDw9IGJldmVsU2VnbWVudHM7IGIgKysgKSB7Ci0gICAgICAgIGZvciAoIGIgPSBiZXZlbFNlZ21l
bnRzIC0gMTsgYiA+PSAwOyBiIC0tICkgeworICAgIC8qKgorICAgICAqIEBhdXRob3Igb29zbW94
aWVjb2RlCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAg
KiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44NworICAgICAqLwog
Ci0gICAgICAgICAgICB0ID0gYiAvIGJldmVsU2VnbWVudHM7Ci0gICAgICAgICAgICB6ID0gYmV2
ZWxUaGlja25lc3MgKiBNYXRoLmNvcyggdCAqIE1hdGguUEkgLyAyICk7Ci0gICAgICAgICAgICBi
cyA9IGJldmVsU2l6ZSAqIE1hdGguc2luKCB0ICogTWF0aC5QSSAvIDIgKTsKKyAgICAvLyBUb3J1
c0dlb21ldHJ5CiAKLSAgICAgICAgICAgIC8vIGNvbnRyYWN0IHNoYXBlCisgICAgZnVuY3Rpb24g
VG9ydXNHZW9tZXRyeSggcmFkaXVzLCB0dWJlLCByYWRpYWxTZWdtZW50cywgdHVidWxhclNlZ21l
bnRzLCBhcmMgKSB7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGNvbnRvdXIubGVu
Z3RoOyBpIDwgaWw7IGkgKysgKSB7CisgICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKIAot
ICAgICAgICAgICAgICAgIHZlcnQgPSBzY2FsZVB0MiggY29udG91clsgaSBdLCBjb250b3VyTW92
ZW1lbnRzWyBpIF0sIGJzICk7Ci0gICAgICAgICAgICAgICAgdiggdmVydC54LCB2ZXJ0LnksIGFt
b3VudCArIHogKTsKKyAgICAgICAgdGhpcy50eXBlID0gJ1RvcnVzR2VvbWV0cnknOwogCi0gICAg
ICAgICAgICB9CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHJhZGl1
czogcmFkaXVzLAorICAgICAgICAgICAgdHViZTogdHViZSwKKyAgICAgICAgICAgIHJhZGlhbFNl
Z21lbnRzOiByYWRpYWxTZWdtZW50cywKKyAgICAgICAgICAgIHR1YnVsYXJTZWdtZW50czogdHVi
dWxhclNlZ21lbnRzLAorICAgICAgICAgICAgYXJjOiBhcmMKKyAgICAgICAgfTsKIAotICAgICAg
ICAgICAgLy8gZXhwYW5kIGhvbGVzCisgICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBu
ZXcgVG9ydXNCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCB0dWJlLCByYWRpYWxTZWdtZW50cywgdHVi
dWxhclNlZ21lbnRzLCBhcmMgKSApOworICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKIAot
ICAgICAgICAgICAgZm9yICggaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGggKysg
KSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgYWhvbGUgPSBob2xlc1sgaCBdOwotICAgICAg
ICAgICAgICAgIG9uZUhvbGVNb3ZlbWVudHMgPSBob2xlc01vdmVtZW50c1sgaCBdOworICAgIFRv
cnVzR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBl
ICk7CisgICAgVG9ydXNHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUb3J1c0dlb21l
dHJ5OwogCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGlsID0gYWhvbGUubGVuZ3RoOyBp
IDwgaWw7IGkgKysgKSB7CisgICAgLy8gVG9ydXNCdWZmZXJHZW9tZXRyeQogCi0gICAgICAgICAg
ICAgICAgICAgIHZlcnQgPSBzY2FsZVB0MiggYWhvbGVbIGkgXSwgb25lSG9sZU1vdmVtZW50c1sg
aSBdLCBicyApOworICAgIGZ1bmN0aW9uIFRvcnVzQnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgdHVi
ZSwgcmFkaWFsU2VnbWVudHMsIHR1YnVsYXJTZWdtZW50cywgYXJjICkgewogCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggISBleHRydWRlQnlQYXRoICkgeworICAgICAgICBCdWZmZXJHZW9tZXRy
eS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHYoIHZlcnQueCwgdmVy
dC55LCBhbW91bnQgKyB6ICk7CisgICAgICAgIHRoaXMudHlwZSA9ICdUb3J1c0J1ZmZlckdlb21l
dHJ5JzsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnBhcmFt
ZXRlcnMgPSB7CisgICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgICAgIHR1YmU6
IHR1YmUsCisgICAgICAgICAgICByYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsCisgICAg
ICAgICAgICB0dWJ1bGFyU2VnbWVudHM6IHR1YnVsYXJTZWdtZW50cywKKyAgICAgICAgICAgIGFy
YzogYXJjCisgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHYoIHZlcnQueCwg
dmVydC55ICsgZXh0cnVkZVB0c1sgc3RlcHMgLSAxIF0ueSwgZXh0cnVkZVB0c1sgc3RlcHMgLSAx
IF0ueCArIHogKTsKKyAgICAgICAgcmFkaXVzID0gcmFkaXVzIHx8IDE7CisgICAgICAgIHR1YmUg
PSB0dWJlIHx8IDAuNDsKKyAgICAgICAgcmFkaWFsU2VnbWVudHMgPSBNYXRoLmZsb29yKCByYWRp
YWxTZWdtZW50cyApIHx8IDg7CisgICAgICAgIHR1YnVsYXJTZWdtZW50cyA9IE1hdGguZmxvb3Io
IHR1YnVsYXJTZWdtZW50cyApIHx8IDY7CisgICAgICAgIGFyYyA9IGFyYyB8fCBNYXRoLlBJICog
MjsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIC8vIGJ1ZmZlcnMKIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgdmFyIHZlcnRp
Y2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAgICAgIHZhciB1dnMgPSBb
XTsKIAotICAgICAgICAgICAgfQorICAgICAgICAvLyBoZWxwZXIgdmFyaWFibGVzCiAKLSAgICAg
ICAgfQorICAgICAgICB2YXIgY2VudGVyID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdmFyIHZl
cnRleCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHZhciBub3JtYWwgPSBuZXcgVmVjdG9yMygp
OwogCi0gICAgICAgIC8qIEZhY2VzICovCisgICAgICAgIHZhciBqLCBpOwogCi0gICAgICAgIC8v
IFRvcCBhbmQgYm90dG9tIGZhY2VzCisgICAgICAgIC8vIGdlbmVyYXRlIHZlcnRpY2VzLCBub3Jt
YWxzIGFuZCB1dnMKIAotICAgICAgICBidWlsZExpZEZhY2VzKCk7CisgICAgICAgIGZvciAoIGog
PSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyBqICsrICkgewogCi0gICAgICAgIC8vIFNpZGVzIGZh
Y2VzCisgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8PSB0dWJ1bGFyU2VnbWVudHM7IGkgKysg
KSB7CiAKLSAgICAgICAgYnVpbGRTaWRlRmFjZXMoKTsKKyAgICAgICAgICAgICAgICB2YXIgdSA9
IGkgLyB0dWJ1bGFyU2VnbWVudHMgKiBhcmM7CisgICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8g
cmFkaWFsU2VnbWVudHMgKiBNYXRoLlBJICogMjsKIAorICAgICAgICAgICAgICAgIC8vIHZlcnRl
eAogCi0gICAgICAgIC8vLy8vICBJbnRlcm5hbCBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICB2
ZXJ0ZXgueCA9ICggcmFkaXVzICsgdHViZSAqIE1hdGguY29zKCB2ICkgKSAqIE1hdGguY29zKCB1
ICk7CisgICAgICAgICAgICAgICAgdmVydGV4LnkgPSAoIHJhZGl1cyArIHR1YmUgKiBNYXRoLmNv
cyggdiApICkgKiBNYXRoLnNpbiggdSApOworICAgICAgICAgICAgICAgIHZlcnRleC56ID0gdHVi
ZSAqIE1hdGguc2luKCB2ICk7CiAKLSAgICAgICAgZnVuY3Rpb24gYnVpbGRMaWRGYWNlcygpIHsK
KyAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRl
eC56ICk7CiAKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoLzM7
CisgICAgICAgICAgICAgICAgLy8gbm9ybWFsCiAKLSAgICAgICAgICAgIGlmICggYmV2ZWxFbmFi
bGVkICkgeworICAgICAgICAgICAgICAgIGNlbnRlci54ID0gcmFkaXVzICogTWF0aC5jb3MoIHUg
KTsKKyAgICAgICAgICAgICAgICBjZW50ZXIueSA9IHJhZGl1cyAqIE1hdGguc2luKCB1ICk7Cisg
ICAgICAgICAgICAgICAgbm9ybWFsLnN1YlZlY3RvcnMoIHZlcnRleCwgY2VudGVyICkubm9ybWFs
aXplKCk7CiAKLSAgICAgICAgICAgICAgICB2YXIgbGF5ZXIgPSAwOyAvLyBzdGVwcyArIDEKLSAg
ICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmxlbiAqIGxheWVyOworICAgICAgICAgICAgICAg
IG5vcm1hbHMucHVzaCggbm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApOwogCi0gICAgICAg
ICAgICAgICAgLy8gQm90dG9tIGZhY2VzCisgICAgICAgICAgICAgICAgLy8gdXYKIAotICAgICAg
ICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZmxlbjsgaSArKyApIHsKKyAgICAgICAgICAgICAg
ICB1dnMucHVzaCggaSAvIHR1YnVsYXJTZWdtZW50cyApOworICAgICAgICAgICAgICAgIHV2cy5w
dXNoKCBqIC8gcmFkaWFsU2VnbWVudHMgKTsKIAotICAgICAgICAgICAgICAgICAgICBmYWNlID0g
ZmFjZXNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgZjMoIGZhY2VbIDIgXSArIG9mZnNldCwg
ZmFjZVsgMSBdICsgb2Zmc2V0LCBmYWNlWyAwIF0gKyBvZmZzZXQgKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbGF5ZXIg
PSBzdGVwcyArIGJldmVsU2VnbWVudHMgKiAyOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IHZs
ZW4gKiBsYXllcjsKKyAgICAgICAgLy8gZ2VuZXJhdGUgaW5kaWNlcwogCi0gICAgICAgICAgICAg
ICAgLy8gVG9wIGZhY2VzCisgICAgICAgIGZvciAoIGogPSAxOyBqIDw9IHJhZGlhbFNlZ21lbnRz
OyBqICsrICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBmbGVuOyBpICsr
ICkgeworICAgICAgICAgICAgZm9yICggaSA9IDE7IGkgPD0gdHVidWxhclNlZ21lbnRzOyBpICsr
ICkgewogCi0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSBmYWNlc1sgaSBdOwotICAgICAgICAg
ICAgICAgICAgICBmMyggZmFjZVsgMCBdICsgb2Zmc2V0LCBmYWNlWyAxIF0gKyBvZmZzZXQsIGZh
Y2VbIDIgXSArIG9mZnNldCApOworICAgICAgICAgICAgICAgIC8vIGluZGljZXMKIAotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgYSA9ICggdHVidWxhclNlZ21lbnRzICsg
MSApICogaiArIGkgLSAxOworICAgICAgICAgICAgICAgIHZhciBiID0gKCB0dWJ1bGFyU2VnbWVu
dHMgKyAxICkgKiAoIGogLSAxICkgKyBpIC0gMTsKKyAgICAgICAgICAgICAgICB2YXIgYyA9ICgg
dHVidWxhclNlZ21lbnRzICsgMSApICogKCBqIC0gMSApICsgaTsKKyAgICAgICAgICAgICAgICB2
YXIgZCA9ICggdHVidWxhclNlZ21lbnRzICsgMSApICogaiArIGk7CiAKLSAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZmFjZXMKIAotICAgICAgICAgICAgICAgIC8vIEJv
dHRvbSBmYWNlcworICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYSwgYiwgZCApOworICAg
ICAgICAgICAgICAgIGluZGljZXMucHVzaCggYiwgYywgZCApOwogCi0gICAgICAgICAgICAgICAg
Zm9yICggaSA9IDA7IGkgPCBmbGVuOyBpICsrICkgeworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIGZhY2UgPSBmYWNlc1sgaSBdOwotICAgICAgICAgICAgICAgICAgICBmMygg
ZmFjZVsgMiBdLCBmYWNlWyAxIF0sIGZhY2VbIDAgXSApOworICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CiAKLSAgICAgICAgICAgICAgICAv
LyBUb3AgZmFjZXMKKyAgICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOworICAgICAgICB0
aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUo
IHZlcnRpY2VzLCAzICkgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBu
ZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7CisgICAgICAgIHRoaXMu
YWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkg
KTsKIAotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZmxlbjsgaSArKyApIHsKKyAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGZhY2VzWyBpIF07Ci0gICAgICAgICAg
ICAgICAgICAgIGYzKCBmYWNlWyAwIF0gKyB2bGVuICogc3RlcHMsIGZhY2VbIDEgXSArIHZsZW4g
KiBzdGVwcywgZmFjZVsgMiBdICsgdmxlbiAqIHN0ZXBzICk7CisgICAgVG9ydXNCdWZmZXJHZW9t
ZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUg
KTsKKyAgICBUb3J1c0J1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRvcnVz
QnVmZmVyR2VvbWV0cnk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgLyoqCisgICAgICogQGF1
dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKKyAgICAgKiBQb3J0IGZy
b20gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9lYXJjdXQgKHYyLjEuMikKKyAgICAgKi8KIAot
ICAgICAgICAgICAgfQorICAgIHZhciBFYXJjdXQgPSB7CiAKLSAgICAgICAgICAgIHNjb3BlLmFk
ZEdyb3VwKCBzdGFydCwgdmVydGljZXNBcnJheS5sZW5ndGgvMyAtc3RhcnQsIG9wdGlvbnMubWF0
ZXJpYWwgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubWF0ZXJpYWwgOiAwKTsKKyAgICAgICAgdHJp
YW5ndWxhdGU6IGZ1bmN0aW9uICggZGF0YSwgaG9sZUluZGljZXMsIGRpbSApIHsKIAotICAgICAg
ICB9CisgICAgICAgICAgICBkaW0gPSBkaW0gfHwgMjsKIAotICAgICAgICAvLyBDcmVhdGUgZmFj
ZXMgZm9yIHRoZSB6LXNpZGVzIG9mIHRoZSBzaGFwZQorICAgICAgICAgICAgdmFyIGhhc0hvbGVz
ID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgIG91
dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1sgMCBdICogZGltIDogZGF0YS5sZW5ndGgs
CisgICAgICAgICAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdCggZGF0YSwgMCwgb3V0ZXJM
ZW4sIGRpbSwgdHJ1ZSApLAorICAgICAgICAgICAgICAgIHRyaWFuZ2xlcyA9IFtdOwogCi0gICAg
ICAgIGZ1bmN0aW9uIGJ1aWxkU2lkZUZhY2VzKCkgeworICAgICAgICAgICAgaWYgKCAhIG91dGVy
Tm9kZSApIHJldHVybiB0cmlhbmdsZXM7CiAKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHZlcnRp
Y2VzQXJyYXkubGVuZ3RoLzM7Ci0gICAgICAgICAgICB2YXIgbGF5ZXJvZmZzZXQgPSAwOwotICAg
ICAgICAgICAgc2lkZXdhbGxzKCBjb250b3VyLCBsYXllcm9mZnNldCApOwotICAgICAgICAgICAg
bGF5ZXJvZmZzZXQgKz0gY29udG91ci5sZW5ndGg7CisgICAgICAgICAgICB2YXIgbWluWCwgbWlu
WSwgbWF4WCwgbWF4WSwgeCwgeSwgaW52U2l6ZTsKIAotICAgICAgICAgICAgZm9yICggaCA9IDAs
IGhsID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGggKysgKSB7CisgICAgICAgICAgICBpZiAoIGhh
c0hvbGVzICkgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoIGRhdGEsIGhvbGVJbmRpY2VzLCBv
dXRlck5vZGUsIGRpbSApOwogCi0gICAgICAgICAgICAgICAgYWhvbGUgPSBob2xlc1sgaCBdOwot
ICAgICAgICAgICAgICAgIHNpZGV3YWxscyggYWhvbGUsIGxheWVyb2Zmc2V0ICk7CisgICAgICAg
ICAgICAvLyBpZiB0aGUgc2hhcGUgaXMgbm90IHRvbyBzaW1wbGUsIHdlJ2xsIHVzZSB6LW9yZGVy
IGN1cnZlIGhhc2ggbGF0ZXI7IGNhbGN1bGF0ZSBwb2x5Z29uIGJib3gKIAotICAgICAgICAgICAg
ICAgIC8vLCB0cnVlCi0gICAgICAgICAgICAgICAgbGF5ZXJvZmZzZXQgKz0gYWhvbGUubGVuZ3Ro
OworICAgICAgICAgICAgaWYgKCBkYXRhLmxlbmd0aCA+IDgwICogZGltICkgewogCi0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWyAwIF07CisgICAgICAg
ICAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWyAxIF07CisKKyAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSApIHsKIAorICAgICAgICAgICAg
ICAgICAgICB4ID0gZGF0YVsgaSBdOworICAgICAgICAgICAgICAgICAgICB5ID0gZGF0YVsgaSAr
IDEgXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB4IDwgbWluWCApIG1pblggPSB4OworICAg
ICAgICAgICAgICAgICAgICBpZiAoIHkgPCBtaW5ZICkgbWluWSA9IHk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggeCA+IG1heFggKSBtYXhYID0geDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCB5ID4gbWF4WSApIG1heFkgPSB5OwogCi0gICAgICAgICAgICBzY29wZS5hZGRHcm91cCggc3Rh
cnQsIHZlcnRpY2VzQXJyYXkubGVuZ3RoLzMgLXN0YXJ0LCBvcHRpb25zLmV4dHJ1ZGVNYXRlcmlh
bCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHRydWRlTWF0ZXJpYWwgOiAxKTsKKyAgICAgICAg
ICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICAvLyBtaW5YLCBtaW5ZIGFuZCBpbnZTaXplIGFy
ZSBsYXRlciB1c2VkIHRvIHRyYW5zZm9ybSBjb29yZHMgaW50byBpbnRlZ2VycyBmb3Igei1vcmRl
ciBjYWxjdWxhdGlvbgogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnZTaXplID0gTWF0
aC5tYXgoIG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSApOworICAgICAgICAgICAgICAgIGludlNp
emUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwOwogCi0gICAgICAgIGZ1bmN0aW9u
IHNpZGV3YWxscyggY29udG91ciwgbGF5ZXJvZmZzZXQgKSB7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHZhciBqLCBrOwotICAgICAgICAgICAgaSA9IGNvbnRvdXIubGVuZ3RoOworICAg
ICAgICAgICAgZWFyY3V0TGlua2VkKCBvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBt
aW5ZLCBpbnZTaXplICk7CiAKLSAgICAgICAgICAgIHdoaWxlICggLS0gaSA+PSAwICkgeworICAg
ICAgICAgICAgcmV0dXJuIHRyaWFuZ2xlczsKIAotICAgICAgICAgICAgICAgIGogPSBpOwotICAg
ICAgICAgICAgICAgIGsgPSBpIC0gMTsKLSAgICAgICAgICAgICAgICBpZiAoIGsgPCAwICkgayA9
IGNvbnRvdXIubGVuZ3RoIC0gMTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy9jb25z
b2xlLmxvZygnYicsIGksaiwgaS0xLCBrLHZlcnRpY2VzLmxlbmd0aCk7CisgICAgfTsKIAotICAg
ICAgICAgICAgICAgIHZhciBzID0gMCwKLSAgICAgICAgICAgICAgICAgICAgc2wgPSBzdGVwcyAr
IGJldmVsU2VnbWVudHMgKiAyOworICAgIC8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5r
ZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRl
cgogCi0gICAgICAgICAgICAgICAgZm9yICggcyA9IDA7IHMgPCBzbDsgcyArKyApIHsKKyAgICBm
dW5jdGlvbiBsaW5rZWRMaXN0KCBkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSApIHsK
IAotICAgICAgICAgICAgICAgICAgICB2YXIgc2xlbjEgPSB2bGVuICogczsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHNsZW4yID0gdmxlbiAqICggcyArIDEgKTsKKyAgICAgICAgdmFyIGksIGxh
c3Q7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBsYXllcm9mZnNldCArIGogKyBzbGVu
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBsYXllcm9mZnNldCArIGsgKyBzbGVuMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBsYXllcm9mZnNldCArIGsgKyBzbGVuMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGQgPSBsYXllcm9mZnNldCArIGogKyBzbGVuMjsKKyAgICAg
ICAgaWYgKCBjbG9ja3dpc2UgPT09ICggc2lnbmVkQXJlYSggZGF0YSwgc3RhcnQsIGVuZCwgZGlt
ICkgPiAwICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZjQoIGEsIGIsIGMsIGQsIGNvbnRv
dXIsIHMsIHNsLCBqLCBrICk7CisgICAgICAgICAgICBmb3IgKCBpID0gc3RhcnQ7IGkgPCBlbmQ7
IGkgKz0gZGltICkgbGFzdCA9IGluc2VydE5vZGUoIGksIGRhdGFbIGkgXSwgZGF0YVsgaSArIDEg
XSwgbGFzdCApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgewogCi0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCBpID0gZW5kIC0gZGltOyBpID49IHN0YXJ0OyBp
IC09IGRpbSApIGxhc3QgPSBpbnNlcnROb2RlKCBpLCBkYXRhWyBpIF0sIGRhdGFbIGkgKyAxIF0s
IGxhc3QgKTsKIAogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gdiggeCwgeSwgeiApIHsK
KyAgICAgICAgaWYgKCBsYXN0ICYmIGVxdWFscyggbGFzdCwgbGFzdC5uZXh0ICkgKSB7CiAKLSAg
ICAgICAgICAgIHBsYWNlaG9sZGVyLnB1c2goIHggKTsKLSAgICAgICAgICAgIHBsYWNlaG9sZGVy
LnB1c2goIHkgKTsKLSAgICAgICAgICAgIHBsYWNlaG9sZGVyLnB1c2goIHogKTsKKyAgICAgICAg
ICAgIHJlbW92ZU5vZGUoIGxhc3QgKTsKKyAgICAgICAgICAgIGxhc3QgPSBsYXN0Lm5leHQ7CiAK
ICAgICAgICAgfQogCisgICAgICAgIHJldHVybiBsYXN0OwogCi0gICAgICAgIGZ1bmN0aW9uIGYz
KCBhLCBiLCBjICkgeworICAgIH0KIAotICAgICAgICAgICAgYWRkVmVydGV4KCBhICk7Ci0gICAg
ICAgICAgICBhZGRWZXJ0ZXgoIGIgKTsKLSAgICAgICAgICAgIGFkZFZlcnRleCggYyApOworICAg
IC8vIGVsaW1pbmF0ZSBjb2xpbmVhciBvciBkdXBsaWNhdGUgcG9pbnRzCiAKLSAgICAgICAgICAg
IHZhciBuZXh0SW5kZXggPSB2ZXJ0aWNlc0FycmF5Lmxlbmd0aCAvIDM7Ci0gICAgICAgICAgICB2
YXIgdXZzID0gdXZnZW4uZ2VuZXJhdGVUb3BVViggc2NvcGUsIHZlcnRpY2VzQXJyYXksIG5leHRJ
bmRleCAtIDMsIG5leHRJbmRleCAtIDIsIG5leHRJbmRleCAtIDEgKTsKKyAgICBmdW5jdGlvbiBm
aWx0ZXJQb2ludHMoIHN0YXJ0LCBlbmQgKSB7CiAKLSAgICAgICAgICAgIGFkZFVWKCB1dnNbIDAg
XSApOwotICAgICAgICAgICAgYWRkVVYoIHV2c1sgMSBdICk7Ci0gICAgICAgICAgICBhZGRVVigg
dXZzWyAyIF0gKTsKKyAgICAgICAgaWYgKCAhIHN0YXJ0ICkgcmV0dXJuIHN0YXJ0OworICAgICAg
ICBpZiAoICEgZW5kICkgZW5kID0gc3RhcnQ7CiAKLSAgICAgICAgfQorICAgICAgICB2YXIgcCA9
IHN0YXJ0LCBhZ2FpbjsKIAotICAgICAgICBmdW5jdGlvbiBmNCggYSwgYiwgYywgZCwgd2FsbENv
bnRvdXIsIHN0ZXBJbmRleCwgc3RlcHNMZW5ndGgsIGNvbnRvdXJJbmRleDEsIGNvbnRvdXJJbmRl
eDIgKSB7CisgICAgICAgIGRvIHsKIAotICAgICAgICAgICAgYWRkVmVydGV4KCBhICk7Ci0gICAg
ICAgICAgICBhZGRWZXJ0ZXgoIGIgKTsKLSAgICAgICAgICAgIGFkZFZlcnRleCggZCApOworICAg
ICAgICAgICAgYWdhaW4gPSBmYWxzZTsKIAotICAgICAgICAgICAgYWRkVmVydGV4KCBiICk7Ci0g
ICAgICAgICAgICBhZGRWZXJ0ZXgoIGMgKTsKLSAgICAgICAgICAgIGFkZFZlcnRleCggZCApOwor
ICAgICAgICAgICAgaWYgKCAhIHAuc3RlaW5lciAmJiAoIGVxdWFscyggcCwgcC5uZXh0ICkgfHwg
YXJlYSggcC5wcmV2LCBwLCBwLm5leHQgKSA9PT0gMCApICkgewogCisgICAgICAgICAgICAgICAg
cmVtb3ZlTm9kZSggcCApOworICAgICAgICAgICAgICAgIHAgPSBlbmQgPSBwLnByZXY7CisgICAg
ICAgICAgICAgICAgaWYgKCBwID09PSBwLm5leHQgKSBicmVhazsKKyAgICAgICAgICAgICAgICBh
Z2FpbiA9IHRydWU7CiAKLSAgICAgICAgICAgIHZhciBuZXh0SW5kZXggPSB2ZXJ0aWNlc0FycmF5
Lmxlbmd0aCAvIDM7Ci0gICAgICAgICAgICB2YXIgdXZzID0gdXZnZW4uZ2VuZXJhdGVTaWRlV2Fs
bFVWKCBzY29wZSwgdmVydGljZXNBcnJheSwgbmV4dEluZGV4IC0gNiwgbmV4dEluZGV4IC0gMywg
bmV4dEluZGV4IC0gMiwgbmV4dEluZGV4IC0gMSApOworICAgICAgICAgICAgfSBlbHNlIHsKIAot
ICAgICAgICAgICAgYWRkVVYoIHV2c1sgMCBdICk7Ci0gICAgICAgICAgICBhZGRVViggdXZzWyAx
IF0gKTsKLSAgICAgICAgICAgIGFkZFVWKCB1dnNbIDMgXSApOworICAgICAgICAgICAgICAgIHAg
PSBwLm5leHQ7CiAKLSAgICAgICAgICAgIGFkZFVWKCB1dnNbIDEgXSApOwotICAgICAgICAgICAg
YWRkVVYoIHV2c1sgMiBdICk7Ci0gICAgICAgICAgICBhZGRVViggdXZzWyAzIF0gKTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKCBhZ2FpbiB8fCBwICE9PSBl
bmQgKTsKIAotICAgICAgICBmdW5jdGlvbiBhZGRWZXJ0ZXgoIGluZGV4ICkgeworICAgICAgICBy
ZXR1cm4gZW5kOwogCi0gICAgICAgICAgICBpbmRpY2VzQXJyYXkucHVzaCggdmVydGljZXNBcnJh
eS5sZW5ndGggLyAzICk7Ci0gICAgICAgICAgICB2ZXJ0aWNlc0FycmF5LnB1c2goIHBsYWNlaG9s
ZGVyWyBpbmRleCAqIDMgKyAwIF0gKTsKLSAgICAgICAgICAgIHZlcnRpY2VzQXJyYXkucHVzaCgg
cGxhY2Vob2xkZXJbIGluZGV4ICogMyArIDEgXSApOwotICAgICAgICAgICAgdmVydGljZXNBcnJh
eS5wdXNoKCBwbGFjZWhvbGRlclsgaW5kZXggKiAzICsgMiBdICk7CisgICAgfQogCi0gICAgICAg
IH0KKyAgICAvLyBtYWluIGVhciBzbGljaW5nIGxvb3Agd2hpY2ggdHJpYW5ndWxhdGVzIGEgcG9s
eWdvbiAoZ2l2ZW4gYXMgYSBsaW5rZWQgbGlzdCkKIAorICAgIGZ1bmN0aW9uIGVhcmN1dExpbmtl
ZCggZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgcGFzcyApIHsKIAot
ICAgICAgICBmdW5jdGlvbiBhZGRVViggdmVjdG9yMiApIHsKKyAgICAgICAgaWYgKCAhIGVhciAp
IHJldHVybjsKIAotICAgICAgICAgICAgdXZBcnJheS5wdXNoKCB2ZWN0b3IyLnggKTsKLSAgICAg
ICAgICAgIHV2QXJyYXkucHVzaCggdmVjdG9yMi55ICk7CisgICAgICAgIC8vIGludGVybGluayBw
b2x5Z29uIG5vZGVzIGluIHotb3JkZXIKIAotICAgICAgICB9CisgICAgICAgIGlmICggISBwYXNz
ICYmIGludlNpemUgKSBpbmRleEN1cnZlKCBlYXIsIG1pblgsIG1pblksIGludlNpemUgKTsKIAot
ICAgICAgICBpZiAoICEgb3B0aW9ucy5hcnJheXMgKSB7CisgICAgICAgIHZhciBzdG9wID0gZWFy
LCBwcmV2LCBuZXh0OwogCi0gICAgICAgICAgICB0aGlzLnNldEluZGV4KCBpbmRpY2VzQXJyYXkg
KTsKLSAgICAgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQz
MkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXNBcnJheSwgMyApICk7Ci0gICAgICAgICAgICB0aGlz
LmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG9wdGlvbnMu
YXJyYXlzLnV2LCAyICkgKTsKKyAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNp
bmcgdGhlbSBvbmUgYnkgb25lCiAKLSAgICAgICAgfQorICAgICAgICB3aGlsZSAoIGVhci5wcmV2
ICE9PSBlYXIubmV4dCApIHsKIAotICAgIH07CisgICAgICAgICAgICBwcmV2ID0gZWFyLnByZXY7
CisgICAgICAgICAgICBuZXh0ID0gZWFyLm5leHQ7CiAKLSAgICBFeHRydWRlR2VvbWV0cnkuV29y
bGRVVkdlbmVyYXRvciA9IHsKKyAgICAgICAgICAgIGlmICggaW52U2l6ZSA/IGlzRWFySGFzaGVk
KCBlYXIsIG1pblgsIG1pblksIGludlNpemUgKSA6IGlzRWFyKCBlYXIgKSApIHsKIAotICAgICAg
ICBnZW5lcmF0ZVRvcFVWOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCB2ZXJ0aWNlcywgaW5kZXhBLCBp
bmRleEIsIGluZGV4QyApIHsKKyAgICAgICAgICAgICAgICAvLyBjdXQgb2ZmIHRoZSB0cmlhbmds
ZQorICAgICAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKCBwcmV2LmkgLyBkaW0gKTsKKyAgICAg
ICAgICAgICAgICB0cmlhbmdsZXMucHVzaCggZWFyLmkgLyBkaW0gKTsKKyAgICAgICAgICAgICAg
ICB0cmlhbmdsZXMucHVzaCggbmV4dC5pIC8gZGltICk7CiAKLSAgICAgICAgICAgIHZhciBhX3gg
PSB2ZXJ0aWNlc1sgaW5kZXhBICogMyBdOwotICAgICAgICAgICAgdmFyIGFfeSA9IHZlcnRpY2Vz
WyBpbmRleEEgKiAzICsgMSBdOwotICAgICAgICAgICAgdmFyIGJfeCA9IHZlcnRpY2VzWyBpbmRl
eEIgKiAzIF07Ci0gICAgICAgICAgICB2YXIgYl95ID0gdmVydGljZXNbIGluZGV4QiAqIDMgKyAx
IF07Ci0gICAgICAgICAgICB2YXIgY194ID0gdmVydGljZXNbIGluZGV4QyAqIDMgXTsKLSAgICAg
ICAgICAgIHZhciBjX3kgPSB2ZXJ0aWNlc1sgaW5kZXhDICogMyArIDEgXTsKKyAgICAgICAgICAg
ICAgICByZW1vdmVOb2RlKCBlYXIgKTsKIAotICAgICAgICAgICAgcmV0dXJuIFsKLSAgICAgICAg
ICAgICAgICBuZXcgVmVjdG9yMiggYV94LCBhX3kgKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVj
dG9yMiggYl94LCBiX3kgKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggY194LCBjX3kg
KQotICAgICAgICAgICAgXTsKKyAgICAgICAgICAgICAgICAvLyBza2lwcGluZyB0aGUgbmV4dCB2
ZXJ0aWNlIGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlcworICAgICAgICAgICAgICAgIGVh
ciA9IG5leHQubmV4dDsKKyAgICAgICAgICAgICAgICBzdG9wID0gbmV4dC5uZXh0OwogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZ2VuZXJhdGVTaWRl
V2FsbFVWOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCB2ZXJ0aWNlcywgaW5kZXhBLCBpbmRleEIsIGlu
ZGV4QywgaW5kZXhEICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgYV94ID0g
dmVydGljZXNbIGluZGV4QSAqIDMgXTsKLSAgICAgICAgICAgIHZhciBhX3kgPSB2ZXJ0aWNlc1sg
aW5kZXhBICogMyArIDEgXTsKLSAgICAgICAgICAgIHZhciBhX3ogPSB2ZXJ0aWNlc1sgaW5kZXhB
ICogMyArIDIgXTsKLSAgICAgICAgICAgIHZhciBiX3ggPSB2ZXJ0aWNlc1sgaW5kZXhCICogMyBd
OwotICAgICAgICAgICAgdmFyIGJfeSA9IHZlcnRpY2VzWyBpbmRleEIgKiAzICsgMSBdOwotICAg
ICAgICAgICAgdmFyIGJfeiA9IHZlcnRpY2VzWyBpbmRleEIgKiAzICsgMiBdOwotICAgICAgICAg
ICAgdmFyIGNfeCA9IHZlcnRpY2VzWyBpbmRleEMgKiAzIF07Ci0gICAgICAgICAgICB2YXIgY195
ID0gdmVydGljZXNbIGluZGV4QyAqIDMgKyAxIF07Ci0gICAgICAgICAgICB2YXIgY196ID0gdmVy
dGljZXNbIGluZGV4QyAqIDMgKyAyIF07Ci0gICAgICAgICAgICB2YXIgZF94ID0gdmVydGljZXNb
IGluZGV4RCAqIDMgXTsKLSAgICAgICAgICAgIHZhciBkX3kgPSB2ZXJ0aWNlc1sgaW5kZXhEICog
MyArIDEgXTsKLSAgICAgICAgICAgIHZhciBkX3ogPSB2ZXJ0aWNlc1sgaW5kZXhEICogMyArIDIg
XTsKKyAgICAgICAgICAgIGVhciA9IG5leHQ7CiAKLSAgICAgICAgICAgIGlmICggTWF0aC5hYnMo
IGFfeSAtIGJfeSApIDwgMC4wMSApIHsKKyAgICAgICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJv
dWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBl
YXJzCiAKLSAgICAgICAgICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgICAgICAgICBuZXcg
VmVjdG9yMiggYV94LCAxIC0gYV96ICksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3Iy
KCBiX3gsIDEgLSBiX3ogKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGNfeCwg
MSAtIGNfeiApLAotICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggZF94LCAxIC0gZF96
ICkKLSAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAgaWYgKCBlYXIgPT09IHN0b3AgKSB7
CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gdHJ5IGZpbHRlcmlu
ZyBwb2ludHMgYW5kIHNsaWNpbmcgYWdhaW4KIAotICAgICAgICAgICAgICAgIHJldHVybiBbCi0g
ICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBhX3ksIDEgLSBhX3ogKSwKLSAgICAgICAg
ICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGJfeSwgMSAtIGJfeiApLAotICAgICAgICAgICAgICAg
ICAgICBuZXcgVmVjdG9yMiggY195LCAxIC0gY196ICksCi0gICAgICAgICAgICAgICAgICAgIG5l
dyBWZWN0b3IyKCBkX3ksIDEgLSBkX3ogKQotICAgICAgICAgICAgICAgIF07CisgICAgICAgICAg
ICAgICAgaWYgKCAhIHBhc3MgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWFyY3V0TGlua2VkKCBmaWx0ZXJQb2ludHMoIGVhciApLCB0cmlhbmdsZXMsIGRpbSwgbWlu
WCwgbWluWSwgaW52U2l6ZSwgMSApOwogCi0gICAgICAgIH0KLSAgICB9OworICAgICAgICAgICAg
ICAgICAgICAvLyBpZiB0aGlzIGRpZG4ndCB3b3JrLCB0cnkgY3VyaW5nIGFsbCBzbWFsbCBzZWxm
LWludGVyc2VjdGlvbnMgbG9jYWxseQogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciB6ejg1IC8g
aHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZwotICAgICAqIEBhdXRob3IgYWx0ZXJl
ZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICoKLSAgICAgKiBUZXh0ID0gM0Qg
VGV4dAotICAgICAqCi0gICAgICogcGFyYW1ldGVycyA9IHsKLSAgICAgKiAgZm9udDogPFRIUkVF
LkZvbnQ+LCAvLyBmb250Ci0gICAgICoKLSAgICAgKiAgc2l6ZTogPGZsb2F0PiwgLy8gc2l6ZSBv
ZiB0aGUgdGV4dAotICAgICAqICBoZWlnaHQ6IDxmbG9hdD4sIC8vIHRoaWNrbmVzcyB0byBleHRy
dWRlIHRleHQKLSAgICAgKiAgY3VydmVTZWdtZW50czogPGludD4sIC8vIG51bWJlciBvZiBwb2lu
dHMgb24gdGhlIGN1cnZlcwotICAgICAqCi0gICAgICogIGJldmVsRW5hYmxlZDogPGJvb2w+LCAv
LyB0dXJuIG9uIGJldmVsCi0gICAgICogIGJldmVsVGhpY2tuZXNzOiA8ZmxvYXQ+LCAvLyBob3cg
ZGVlcCBpbnRvIHRleHQgYmV2ZWwgZ29lcwotICAgICAqICBiZXZlbFNpemU6IDxmbG9hdD4gLy8g
aG93IGZhciBmcm9tIHRleHQgb3V0bGluZSBpcyBiZXZlbAotICAgICAqIH0KLSAgICAgKi8KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwYXNzID09PSAxICkgewogCi0gICAgLy8gVGV4dEdl
b21ldHJ5CisgICAgICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMo
IGVhciwgdHJpYW5nbGVzLCBkaW0gKTsKKyAgICAgICAgICAgICAgICAgICAgZWFyY3V0TGlua2Vk
KCBlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAyICk7CiAKLSAgICBm
dW5jdGlvbiBUZXh0R2VvbWV0cnkoICB0ZXh0LCBwYXJhbWV0ZXJzICkgeworICAgICAgICAgICAg
ICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5
Z29uIGludG8gdHdvCiAKLSAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIHBhc3MgPT09IDIgKSB7CiAKLSAgICAgICAgdGhpcy50eXBlID0g
J1RleHRHZW9tZXRyeSc7CisgICAgICAgICAgICAgICAgICAgIHNwbGl0RWFyY3V0KCBlYXIsIHRy
aWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplICk7CiAKLSAgICAgICAgdGhpcy5wYXJh
bWV0ZXJzID0gewotICAgICAgICAgICAgdGV4dDogdGV4dCwKLSAgICAgICAgICAgIHBhcmFtZXRl
cnM6IHBhcmFtZXRlcnMKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBUZXh0QnVmZmVyR2VvbWV0cnkoIHRleHQsIHBh
cmFtZXRlcnMgKSApOwotICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgfQorCisgICAgICAgIH0KIAogICAgIH0KIAotICAg
IFRleHRHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5
cGUgKTsKLSAgICBUZXh0R2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dEdlb21l
dHJ5OworICAgIC8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBl
YXIgd2l0aCBhZGphY2VudCBub2RlcwogCi0gICAgLy8gVGV4dEJ1ZmZlckdlb21ldHJ5CisgICAg
ZnVuY3Rpb24gaXNFYXIoIGVhciApIHsKIAotICAgIGZ1bmN0aW9uIFRleHRCdWZmZXJHZW9tZXRy
eSggdGV4dCwgcGFyYW1ldGVycyApIHsKKyAgICAgICAgdmFyIGEgPSBlYXIucHJldiwKKyAgICAg
ICAgICAgIGIgPSBlYXIsCisgICAgICAgICAgICBjID0gZWFyLm5leHQ7CiAKLSAgICAgICAgcGFy
YW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307CisgICAgICAgIGlmICggYXJlYSggYSwgYiwgYyAp
ID49IDAgKSByZXR1cm4gZmFsc2U7IC8vIHJlZmxleCwgY2FuJ3QgYmUgYW4gZWFyCiAKLSAgICAg
ICAgdmFyIGZvbnQgPSBwYXJhbWV0ZXJzLmZvbnQ7CisgICAgICAgIC8vIG5vdyBtYWtlIHN1cmUg
d2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyCisgICAg
ICAgIHZhciBwID0gZWFyLm5leHQubmV4dDsKIAotICAgICAgICBpZiAoICEgKCBmb250ICYmIGZv
bnQuaXNGb250ICkgKSB7CisgICAgICAgIHdoaWxlICggcCAhPT0gZWFyLnByZXYgKSB7CiAKLSAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1l
dGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LicgKTsKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgR2VvbWV0cnkoKTsKKyAgICAgICAgICAgIGlmICggcG9pbnRJblRyaWFuZ2xlKCBh
LngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmIGFyZWEoIHAucHJldiwg
cCwgcC5uZXh0ICkgPj0gMCApIHsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwID0gcC5uZXh0OwogCiAgICAgICAgIH0KIAot
ICAgICAgICB2YXIgc2hhcGVzID0gZm9udC5nZW5lcmF0ZVNoYXBlcyggdGV4dCwgcGFyYW1ldGVy
cy5zaXplLCBwYXJhbWV0ZXJzLmN1cnZlU2VnbWVudHMgKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgLy8gdHJhbnNsYXRlIHBhcmFtZXRlcnMgdG8gRXh0cnVkZUdlb21ldHJ5IEFQ
SQorICAgIH0KIAotICAgICAgICBwYXJhbWV0ZXJzLmFtb3VudCA9IHBhcmFtZXRlcnMuaGVpZ2h0
ICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLmhlaWdodCA6IDUwOworICAgIGZ1bmN0aW9uIGlz
RWFySGFzaGVkKCBlYXIsIG1pblgsIG1pblksIGludlNpemUgKSB7CiAKLSAgICAgICAgLy8gZGVm
YXVsdHMKKyAgICAgICAgdmFyIGEgPSBlYXIucHJldiwKKyAgICAgICAgICAgIGIgPSBlYXIsCisg
ICAgICAgICAgICBjID0gZWFyLm5leHQ7CiAKLSAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmJldmVs
VGhpY2tuZXNzID09PSB1bmRlZmluZWQgKSBwYXJhbWV0ZXJzLmJldmVsVGhpY2tuZXNzID0gMTA7
Ci0gICAgICAgIGlmICggcGFyYW1ldGVycy5iZXZlbFNpemUgPT09IHVuZGVmaW5lZCApIHBhcmFt
ZXRlcnMuYmV2ZWxTaXplID0gODsKLSAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmJldmVsRW5hYmxl
ZCA9PT0gdW5kZWZpbmVkICkgcGFyYW1ldGVycy5iZXZlbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKCBhcmVhKCBhLCBiLCBjICkgPj0gMCApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBj
YW4ndCBiZSBhbiBlYXIKIAotICAgICAgICBFeHRydWRlQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhp
cywgc2hhcGVzLCBwYXJhbWV0ZXJzICk7CisgICAgICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAm
IG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkCiAKLSAgICAgICAgdGhpcy50
eXBlID0gJ1RleHRCdWZmZXJHZW9tZXRyeSc7CisgICAgICAgIHZhciBtaW5UWCA9IGEueCA8IGIu
eCA/ICggYS54IDwgYy54ID8gYS54IDogYy54ICkgOiAoIGIueCA8IGMueCA/IGIueCA6IGMueCAp
LAorICAgICAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoIGEueSA8IGMueSA/IGEueSA6IGMu
eSApIDogKCBiLnkgPCBjLnkgPyBiLnkgOiBjLnkgKSwKKyAgICAgICAgICAgIG1heFRYID0gYS54
ID4gYi54ID8gKCBhLnggPiBjLnggPyBhLnggOiBjLnggKSA6ICggYi54ID4gYy54ID8gYi54IDog
Yy54ICksCisgICAgICAgICAgICBtYXhUWSA9IGEueSA+IGIueSA/ICggYS55ID4gYy55ID8gYS55
IDogYy55ICkgOiAoIGIueSA+IGMueSA/IGIueSA6IGMueSApOwogCi0gICAgfQorICAgICAgICAv
LyB6LW9yZGVyIHJhbmdlIGZvciB0aGUgY3VycmVudCB0cmlhbmdsZSBiYm94OwogCi0gICAgVGV4
dEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEV4dHJ1ZGVCdWZmZXJH
ZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAgICBUZXh0QnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNv
bnN0cnVjdG9yID0gVGV4dEJ1ZmZlckdlb21ldHJ5OworICAgICAgICB2YXIgbWluWiA9IHpPcmRl
ciggbWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplICksCisgICAgICAgICAgICBtYXha
ID0gek9yZGVyKCBtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIGludlNpemUgKTsKIAotICAgIC8q
KgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICogQGF1
dGhvciBiZW5hYWRhbXMgLyBodHRwczovL3R3aXR0ZXIuY29tL2Jlbl9hX2FkYW1zCi0gICAgICog
QGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKLSAgICAgKi8KKyAg
ICAgICAgLy8gZmlyc3QgbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgaW4gaW5j
cmVhc2luZyB6LW9yZGVyCiAKLSAgICAvLyBTcGhlcmVHZW9tZXRyeQorICAgICAgICB2YXIgcCA9
IGVhci5uZXh0WjsKIAotICAgIGZ1bmN0aW9uIFNwaGVyZUdlb21ldHJ5KCByYWRpdXMsIHdpZHRo
U2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBwaGlTdGFydCwgcGhpTGVuZ3RoLCB0aGV0YVN0YXJ0
LCB0aGV0YUxlbmd0aCApIHsKKyAgICAgICAgd2hpbGUgKCBwICYmIHAueiA8PSBtYXhaICkgewog
Ci0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgIGlmICggcCAhPT0g
ZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiYKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRJ
blRyaWFuZ2xlKCBhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSApICYmCisg
ICAgICAgICAgICAgICAgICAgIGFyZWEoIHAucHJldiwgcCwgcC5uZXh0ICkgPj0gMCApIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHAgPSBwLm5leHRaOwogCi0gICAgICAgIHRoaXMudHlwZSA9
ICdTcGhlcmVHZW9tZXRyeSc7CisgICAgICAgIH0KIAotICAgICAgICB0aGlzLnBhcmFtZXRlcnMg
PSB7Ci0gICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKLSAgICAgICAgICAgIHdpZHRoU2VnbWVu
dHM6IHdpZHRoU2VnbWVudHMsCi0gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2Vn
bWVudHMsCi0gICAgICAgICAgICBwaGlTdGFydDogcGhpU3RhcnQsCi0gICAgICAgICAgICBwaGlM
ZW5ndGg6IHBoaUxlbmd0aCwKLSAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCi0g
ICAgICAgICAgICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKLSAgICAgICAgfTsKKyAgICAgICAg
Ly8gdGhlbiBsb29rIGZvciBwb2ludHMgaW4gZGVjcmVhc2luZyB6LW9yZGVyCiAKLSAgICAgICAg
dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBTcGhlcmVCdWZmZXJHZW9tZXRyeSggcmFkaXVz
LCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgcGhpU3RhcnQsIHBoaUxlbmd0aCwgdGhl
dGFTdGFydCwgdGhldGFMZW5ndGggKSApOwotICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsK
KyAgICAgICAgcCA9IGVhci5wcmV2WjsKIAotICAgIH0KKyAgICAgICAgd2hpbGUgKCBwICYmIHAu
eiA+PSBtaW5aICkgewogCi0gICAgU3BoZXJlR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZSggR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgU3BoZXJlR2VvbWV0cnkucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gU3BoZXJlR2VvbWV0cnk7CisgICAgICAgICAgICBpZiAoIHAgIT09IGVh
ci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmCisgICAgICAgICAgICAgICAgICAgIHBvaW50SW5U
cmlhbmdsZSggYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkgKSAmJgorICAg
ICAgICAgICAgICAgICAgICBhcmVhKCBwLnByZXYsIHAsIHAubmV4dCApID49IDAgKSByZXR1cm4g
ZmFsc2U7CiAKLSAgICAvLyBTcGhlcmVCdWZmZXJHZW9tZXRyeQorICAgICAgICAgICAgcCA9IHAu
cHJldlo7CiAKLSAgICBmdW5jdGlvbiBTcGhlcmVCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCB3aWR0
aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgcGhpU3RhcnQsIHBoaUxlbmd0aCwgdGhldGFTdGFy
dCwgdGhldGFMZW5ndGggKSB7CisgICAgICAgIH0KIAotICAgICAgICBCdWZmZXJHZW9tZXRyeS5j
YWxsKCB0aGlzICk7CisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIHRoaXMudHlwZSA9
ICdTcGhlcmVCdWZmZXJHZW9tZXRyeSc7CisgICAgfQogCi0gICAgICAgIHRoaXMucGFyYW1ldGVy
cyA9IHsKLSAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAotICAgICAgICAgICAgd2lkdGhTZWdt
ZW50czogd2lkdGhTZWdtZW50cywKLSAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWlnaHRT
ZWdtZW50cywKLSAgICAgICAgICAgIHBoaVN0YXJ0OiBwaGlTdGFydCwKLSAgICAgICAgICAgIHBo
aUxlbmd0aDogcGhpTGVuZ3RoLAotICAgICAgICAgICAgdGhldGFTdGFydDogdGhldGFTdGFydCwK
LSAgICAgICAgICAgIHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aAotICAgICAgICB9OworICAgIC8v
IGdvIHRocm91Z2ggYWxsIHBvbHlnb24gbm9kZXMgYW5kIGN1cmUgc21hbGwgbG9jYWwgc2VsZi1p
bnRlcnNlY3Rpb25zCiAKLSAgICAgICAgcmFkaXVzID0gcmFkaXVzIHx8IDUwOworICAgIGZ1bmN0
aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoIHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSApIHsKIAot
ICAgICAgICB3aWR0aFNlZ21lbnRzID0gTWF0aC5tYXgoIDMsIE1hdGguZmxvb3IoIHdpZHRoU2Vn
bWVudHMgKSB8fCA4ICk7Ci0gICAgICAgIGhlaWdodFNlZ21lbnRzID0gTWF0aC5tYXgoIDIsIE1h
dGguZmxvb3IoIGhlaWdodFNlZ21lbnRzICkgfHwgNiApOworICAgICAgICB2YXIgcCA9IHN0YXJ0
OwogCi0gICAgICAgIHBoaVN0YXJ0ID0gcGhpU3RhcnQgIT09IHVuZGVmaW5lZCA/IHBoaVN0YXJ0
IDogMDsKLSAgICAgICAgcGhpTGVuZ3RoID0gcGhpTGVuZ3RoICE9PSB1bmRlZmluZWQgPyBwaGlM
ZW5ndGggOiBNYXRoLlBJICogMjsKKyAgICAgICAgZG8gewogCi0gICAgICAgIHRoZXRhU3RhcnQg
PSB0aGV0YVN0YXJ0ICE9PSB1bmRlZmluZWQgPyB0aGV0YVN0YXJ0IDogMDsKLSAgICAgICAgdGhl
dGFMZW5ndGggPSB0aGV0YUxlbmd0aCAhPT0gdW5kZWZpbmVkID8gdGhldGFMZW5ndGggOiBNYXRo
LlBJOworICAgICAgICAgICAgdmFyIGEgPSBwLnByZXYsIGIgPSBwLm5leHQubmV4dDsKIAotICAg
ICAgICB2YXIgdGhldGFFbmQgPSB0aGV0YVN0YXJ0ICsgdGhldGFMZW5ndGg7CisgICAgICAgICAg
ICBpZiAoICEgZXF1YWxzKCBhLCBiICkgJiYgaW50ZXJzZWN0cyggYSwgcCwgcC5uZXh0LCBiICkg
JiYgbG9jYWxseUluc2lkZSggYSwgYiApICYmIGxvY2FsbHlJbnNpZGUoIGIsIGEgKSApIHsKIAot
ICAgICAgICB2YXIgaXgsIGl5OworICAgICAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKCBhLmkg
LyBkaW0gKTsKKyAgICAgICAgICAgICAgICB0cmlhbmdsZXMucHVzaCggcC5pIC8gZGltICk7Cisg
ICAgICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goIGIuaSAvIGRpbSApOwogCi0gICAgICAgIHZh
ciBpbmRleCA9IDA7Ci0gICAgICAgIHZhciBncmlkID0gW107CisgICAgICAgICAgICAgICAgLy8g
cmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZAogCi0gICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVj
dG9yMygpOwotICAgICAgICB2YXIgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAg
ICAgICByZW1vdmVOb2RlKCBwICk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSggcC5uZXh0
ICk7CiAKLSAgICAgICAgLy8gYnVmZmVycworICAgICAgICAgICAgICAgIHAgPSBzdGFydCA9IGI7
CiAKLSAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKLSAgICAgICAgdmFyIHZlcnRpY2VzID0gW107
Ci0gICAgICAgIHZhciBub3JtYWxzID0gW107Ci0gICAgICAgIHZhciB1dnMgPSBbXTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZz
CisgICAgICAgICAgICBwID0gcC5uZXh0OwogCi0gICAgICAgIGZvciAoIGl5ID0gMDsgaXkgPD0g
aGVpZ2h0U2VnbWVudHM7IGl5ICsrICkgeworICAgICAgICB9IHdoaWxlICggcCAhPT0gc3RhcnQg
KTsKIAotICAgICAgICAgICAgdmFyIHZlcnRpY2VzUm93ID0gW107CisgICAgICAgIHJldHVybiBw
OwogCi0gICAgICAgICAgICB2YXIgdiA9IGl5IC8gaGVpZ2h0U2VnbWVudHM7CisgICAgfQogCi0g
ICAgICAgICAgICBmb3IgKCBpeCA9IDA7IGl4IDw9IHdpZHRoU2VnbWVudHM7IGl4ICsrICkgewor
ICAgIC8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhl
bSBpbmRlcGVuZGVudGx5CiAKLSAgICAgICAgICAgICAgICB2YXIgdSA9IGl4IC8gd2lkdGhTZWdt
ZW50czsKKyAgICBmdW5jdGlvbiBzcGxpdEVhcmN1dCggc3RhcnQsIHRyaWFuZ2xlcywgZGltLCBt
aW5YLCBtaW5ZLCBpbnZTaXplICkgewogCi0gICAgICAgICAgICAgICAgLy8gdmVydGV4CisgICAg
ICAgIC8vIGxvb2sgZm9yIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29u
IGludG8gdHdvCiAKLSAgICAgICAgICAgICAgICB2ZXJ0ZXgueCA9IC0gcmFkaXVzICogTWF0aC5j
b3MoIHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCApICogTWF0aC5zaW4oIHRoZXRhU3RhcnQgKyB2
ICogdGhldGFMZW5ndGggKTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXgueSA9IHJhZGl1cyAqIE1h
dGguY29zKCB0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoICk7Ci0gICAgICAgICAgICAgICAg
dmVydGV4LnogPSByYWRpdXMgKiBNYXRoLnNpbiggcGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoICkg
KiBNYXRoLnNpbiggdGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCApOworICAgICAgICB2YXIg
YSA9IHN0YXJ0OwogCi0gICAgICAgICAgICAgICAgdmVydGljZXMucHVzaCggdmVydGV4LngsIHZl
cnRleC55LCB2ZXJ0ZXgueiApOworICAgICAgICBkbyB7CiAKLSAgICAgICAgICAgICAgICAvLyBu
b3JtYWwKKyAgICAgICAgICAgIHZhciBiID0gYS5uZXh0Lm5leHQ7CiAKLSAgICAgICAgICAgICAg
ICBub3JtYWwuc2V0KCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICkubm9ybWFsaXplKCk7
Ci0gICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKCBub3JtYWwueCwgbm9ybWFsLnksIG5vcm1h
bC56ICk7CisgICAgICAgICAgICB3aGlsZSAoIGIgIT09IGEucHJldiApIHsKIAotICAgICAgICAg
ICAgICAgIC8vIHV2CisgICAgICAgICAgICAgICAgaWYgKCBhLmkgIT09IGIuaSAmJiBpc1ZhbGlk
RGlhZ29uYWwoIGEsIGIgKSApIHsKIAotICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1LCAxIC0g
diApOworICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgcG9seWdvbiBpbiB0d28gYnkg
dGhlIGRpYWdvbmFsCiAKLSAgICAgICAgICAgICAgICB2ZXJ0aWNlc1Jvdy5wdXNoKCBpbmRleCAr
KyApOworICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHNwbGl0UG9seWdvbiggYSwgYiApOwog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciBjb2xpbmVhciBw
b2ludHMgYXJvdW5kIHRoZSBjdXRzCiAKLSAgICAgICAgICAgIGdyaWQucHVzaCggdmVydGljZXNS
b3cgKTsKKyAgICAgICAgICAgICAgICAgICAgYSA9IGZpbHRlclBvaW50cyggYSwgYS5uZXh0ICk7
CisgICAgICAgICAgICAgICAgICAgIGMgPSBmaWx0ZXJQb2ludHMoIGMsIGMubmV4dCApOwogCi0g
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGYK
IAotICAgICAgICAvLyBpbmRpY2VzCisgICAgICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZCgg
YSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUgKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWFyY3V0TGlua2VkKCBjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6
ZSApOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZm9yICggaXkgPSAw
OyBpeSA8IGhlaWdodFNlZ21lbnRzOyBpeSArKyApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGZvciAoIGl4ID0gMDsgaXggPCB3aWR0aFNlZ21lbnRzOyBpeCArKyApIHsKKyAg
ICAgICAgICAgICAgICBiID0gYi5uZXh0OwogCi0gICAgICAgICAgICAgICAgdmFyIGEgPSBncmlk
WyBpeSBdWyBpeCArIDEgXTsKLSAgICAgICAgICAgICAgICB2YXIgYiA9IGdyaWRbIGl5IF1bIGl4
IF07Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBncmlkWyBpeSArIDEgXVsgaXggXTsKLSAgICAg
ICAgICAgICAgICB2YXIgZCA9IGdyaWRbIGl5ICsgMSBdWyBpeCArIDEgXTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGlmICggaXkgIT09IDAgfHwgdGhldGFTdGFydCA+IDAgKSBp
bmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKLSAgICAgICAgICAgICAgICBpZiAoIGl5ICE9PSBoZWln
aHRTZWdtZW50cyAtIDEgfHwgdGhldGFFbmQgPCBNYXRoLlBJICkgaW5kaWNlcy5wdXNoKCBiLCBj
LCBkICk7CisgICAgICAgICAgICBhID0gYS5uZXh0OwogCi0gICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKCBhICE9PSBzdGFydCApOwogCi0gICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAg
Ly8gYnVpbGQgZ2VvbWV0cnkKKyAgICAvLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIg
bG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzCiAKLSAg
ICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0
ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkg
KTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZl
ckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAn
dXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsKKyAgICBmdW5jdGlv
biBlbGltaW5hdGVIb2xlcyggZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltICkgewog
Ci0gICAgfQorICAgICAgICB2YXIgcXVldWUgPSBbXSwgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0
OwogCi0gICAgU3BoZXJlQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgg
QnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgU3BoZXJlQnVmZmVyR2VvbWV0cnkucHJv
dG90eXBlLmNvbnN0cnVjdG9yID0gU3BoZXJlQnVmZmVyR2VvbWV0cnk7CisgICAgICAgIGZvciAo
IGkgPSAwLCBsZW4gPSBob2xlSW5kaWNlcy5sZW5ndGg7IGkgPCBsZW47IGkgKysgKSB7CiAKLSAg
ICAvKioKLSAgICAgKiBAYXV0aG9yIEthbGViIE11cnBoeQotICAgICAqIEBhdXRob3IgTXVnZW44
NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0gICAgICovCisgICAgICAgICAgICBzdGFy
dCA9IGhvbGVJbmRpY2VzWyBpIF0gKiBkaW07CisgICAgICAgICAgICBlbmQgPSBpIDwgbGVuIC0g
MSA/IGhvbGVJbmRpY2VzWyBpICsgMSBdICogZGltIDogZGF0YS5sZW5ndGg7CisgICAgICAgICAg
ICBsaXN0ID0gbGlua2VkTGlzdCggZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBmYWxzZSApOworICAg
ICAgICAgICAgaWYgKCBsaXN0ID09PSBsaXN0Lm5leHQgKSBsaXN0LnN0ZWluZXIgPSB0cnVlOwor
ICAgICAgICAgICAgcXVldWUucHVzaCggZ2V0TGVmdG1vc3QoIGxpc3QgKSApOwogCi0gICAgLy8g
UmluZ0dlb21ldHJ5CisgICAgICAgIH0KIAotICAgIGZ1bmN0aW9uIFJpbmdHZW9tZXRyeSggaW5u
ZXJSYWRpdXMsIG91dGVyUmFkaXVzLCB0aGV0YVNlZ21lbnRzLCBwaGlTZWdtZW50cywgdGhldGFT
dGFydCwgdGhldGFMZW5ndGggKSB7CisgICAgICAgIHF1ZXVlLnNvcnQoIGNvbXBhcmVYICk7CiAK
LSAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOworICAgICAgICAvLyBwcm9jZXNzIGhvbGVz
IGZyb20gbGVmdCB0byByaWdodAogCi0gICAgICAgIHRoaXMudHlwZSA9ICdSaW5nR2VvbWV0cnkn
OworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSArKyApIHsKIAotICAg
ICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAgICBpbm5lclJhZGl1czogaW5uZXJS
YWRpdXMsCi0gICAgICAgICAgICBvdXRlclJhZGl1czogb3V0ZXJSYWRpdXMsCi0gICAgICAgICAg
ICB0aGV0YVNlZ21lbnRzOiB0aGV0YVNlZ21lbnRzLAotICAgICAgICAgICAgcGhpU2VnbWVudHM6
IHBoaVNlZ21lbnRzLAotICAgICAgICAgICAgdGhldGFTdGFydDogdGhldGFTdGFydCwKLSAgICAg
ICAgICAgIHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aAotICAgICAgICB9OworICAgICAgICAgICAg
ZWxpbWluYXRlSG9sZSggcXVldWVbIGkgXSwgb3V0ZXJOb2RlICk7CisgICAgICAgICAgICBvdXRl
ck5vZGUgPSBmaWx0ZXJQb2ludHMoIG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQgKTsKIAotICAg
ICAgICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IFJpbmdCdWZmZXJHZW9tZXRyeSggaW5u
ZXJSYWRpdXMsIG91dGVyUmFkaXVzLCB0aGV0YVNlZ21lbnRzLCBwaGlTZWdtZW50cywgdGhldGFT
dGFydCwgdGhldGFMZW5ndGggKSApOwotICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKKyAg
ICAgICAgfQogCi0gICAgfQorICAgICAgICByZXR1cm4gb3V0ZXJOb2RlOwogCi0gICAgUmluZ0dl
b21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOwot
ICAgIFJpbmdHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSaW5nR2VvbWV0cnk7Cisg
ICAgfQogCi0gICAgLy8gUmluZ0J1ZmZlckdlb21ldHJ5CisgICAgZnVuY3Rpb24gY29tcGFyZVgo
IGEsIGIgKSB7CiAKLSAgICBmdW5jdGlvbiBSaW5nQnVmZmVyR2VvbWV0cnkoIGlubmVyUmFkaXVz
LCBvdXRlclJhZGl1cywgdGhldGFTZWdtZW50cywgcGhpU2VnbWVudHMsIHRoZXRhU3RhcnQsIHRo
ZXRhTGVuZ3RoICkgeworICAgICAgICByZXR1cm4gYS54IC0gYi54OwogCi0gICAgICAgIEJ1ZmZl
ckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICB9CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ1Jp
bmdCdWZmZXJHZW9tZXRyeSc7CisgICAgLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2Vz
IHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0CiAK
LSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgaW5uZXJSYWRpdXM6IGlu
bmVyUmFkaXVzLAotICAgICAgICAgICAgb3V0ZXJSYWRpdXM6IG91dGVyUmFkaXVzLAotICAgICAg
ICAgICAgdGhldGFTZWdtZW50czogdGhldGFTZWdtZW50cywKLSAgICAgICAgICAgIHBoaVNlZ21l
bnRzOiBwaGlTZWdtZW50cywKLSAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCi0g
ICAgICAgICAgICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKLSAgICAgICAgfTsKKyAgICBmdW5j
dGlvbiBlbGltaW5hdGVIb2xlKCBob2xlLCBvdXRlck5vZGUgKSB7CiAKLSAgICAgICAgaW5uZXJS
YWRpdXMgPSBpbm5lclJhZGl1cyB8fCAyMDsKLSAgICAgICAgb3V0ZXJSYWRpdXMgPSBvdXRlclJh
ZGl1cyB8fCA1MDsKKyAgICAgICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoIGhvbGUsIG91
dGVyTm9kZSApOwogCi0gICAgICAgIHRoZXRhU3RhcnQgPSB0aGV0YVN0YXJ0ICE9PSB1bmRlZmlu
ZWQgPyB0aGV0YVN0YXJ0IDogMDsKLSAgICAgICAgdGhldGFMZW5ndGggPSB0aGV0YUxlbmd0aCAh
PT0gdW5kZWZpbmVkID8gdGhldGFMZW5ndGggOiBNYXRoLlBJICogMjsKKyAgICAgICAgaWYgKCBv
dXRlck5vZGUgKSB7CiAKLSAgICAgICAgdGhldGFTZWdtZW50cyA9IHRoZXRhU2VnbWVudHMgIT09
IHVuZGVmaW5lZCA/IE1hdGgubWF4KCAzLCB0aGV0YVNlZ21lbnRzICkgOiA4OwotICAgICAgICBw
aGlTZWdtZW50cyA9IHBoaVNlZ21lbnRzICE9PSB1bmRlZmluZWQgPyBNYXRoLm1heCggMSwgcGhp
U2VnbWVudHMgKSA6IDE7CisgICAgICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbiggb3V0ZXJO
b2RlLCBob2xlICk7CiAKLSAgICAgICAgLy8gYnVmZmVycworICAgICAgICAgICAgZmlsdGVyUG9p
bnRzKCBiLCBiLm5leHQgKTsKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwotICAgICAgICB2
YXIgdmVydGljZXMgPSBbXTsKLSAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKLSAgICAgICAgdmFy
IHV2cyA9IFtdOworICAgICAgICB9CiAKLSAgICAgICAgLy8gc29tZSBoZWxwZXIgdmFyaWFibGVz
CisgICAgfQogCi0gICAgICAgIHZhciBzZWdtZW50OwotICAgICAgICB2YXIgcmFkaXVzID0gaW5u
ZXJSYWRpdXM7Ci0gICAgICAgIHZhciByYWRpdXNTdGVwID0gKCAoIG91dGVyUmFkaXVzIC0gaW5u
ZXJSYWRpdXMgKSAvIHBoaVNlZ21lbnRzICk7Ci0gICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVj
dG9yMygpOwotICAgICAgICB2YXIgdXYgPSBuZXcgVmVjdG9yMigpOwotICAgICAgICB2YXIgaiwg
aTsKKyAgICAvLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2Ug
YmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uCiAKLSAgICAgICAgLy8gZ2VuZXJhdGUgdmVy
dGljZXMsIG5vcm1hbHMgYW5kIHV2cworICAgIGZ1bmN0aW9uIGZpbmRIb2xlQnJpZGdlKCBob2xl
LCBvdXRlck5vZGUgKSB7CiAKLSAgICAgICAgZm9yICggaiA9IDA7IGogPD0gcGhpU2VnbWVudHM7
IGogKysgKSB7CisgICAgICAgIHZhciBwID0gb3V0ZXJOb2RlLAorICAgICAgICAgICAgaHggPSBo
b2xlLngsCisgICAgICAgICAgICBoeSA9IGhvbGUueSwKKyAgICAgICAgICAgIHF4ID0gLSBJbmZp
bml0eSwKKyAgICAgICAgICAgIG07CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDw9IHRo
ZXRhU2VnbWVudHM7IGkgKysgKSB7CisgICAgICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2Vj
dGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDsK
KyAgICAgICAgLy8gc2VnbWVudCdzIGVuZHBvaW50IHdpdGggbGVzc2VyIHggd2lsbCBiZSBwb3Rl
bnRpYWwgY29ubmVjdGlvbiBwb2ludAogCi0gICAgICAgICAgICAgICAgLy8gdmFsdWVzIGFyZSBn
ZW5lcmF0ZSBmcm9tIHRoZSBpbnNpZGUgb2YgdGhlIHJpbmcgdG8gdGhlIG91dHNpZGUKKyAgICAg
ICAgZG8gewogCi0gICAgICAgICAgICAgICAgc2VnbWVudCA9IHRoZXRhU3RhcnQgKyBpIC8gdGhl
dGFTZWdtZW50cyAqIHRoZXRhTGVuZ3RoOworICAgICAgICAgICAgaWYgKCBoeSA8PSBwLnkgJiYg
aHkgPj0gcC5uZXh0LnkgJiYgcC5uZXh0LnkgIT09IHAueSApIHsKIAotICAgICAgICAgICAgICAg
IC8vIHZlcnRleAorICAgICAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKCBoeSAtIHAueSApICog
KCBwLm5leHQueCAtIHAueCApIC8gKCBwLm5leHQueSAtIHAueSApOwogCi0gICAgICAgICAgICAg
ICAgdmVydGV4LnggPSByYWRpdXMgKiBNYXRoLmNvcyggc2VnbWVudCApOwotICAgICAgICAgICAg
ICAgIHZlcnRleC55ID0gcmFkaXVzICogTWF0aC5zaW4oIHNlZ21lbnQgKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIHggPD0gaHggJiYgeCA+IHF4ICkgewogCi0gICAgICAgICAgICAgICAgdmVydGlj
ZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApOworICAgICAgICAgICAgICAg
ICAgICBxeCA9IHg7CiAKLSAgICAgICAgICAgICAgICAvLyBub3JtYWwKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCB4ID09PSBoeCApIHsKIAotICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCgg
MCwgMCwgMSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoeSA9PT0gcC55ICkgcmV0
dXJuIHA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGh5ID09PSBwLm5leHQueSApIHJl
dHVybiBwLm5leHQ7CiAKLSAgICAgICAgICAgICAgICAvLyB1dgorICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB1di54ID0gKCB2ZXJ0ZXgueCAvIG91dGVyUmFkaXVzICsg
MSApIC8gMjsKLSAgICAgICAgICAgICAgICB1di55ID0gKCB2ZXJ0ZXgueSAvIG91dGVyUmFkaXVz
ICsgMSApIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgbSA9IHAueCA8IHAubmV4dC54ID8gcCA6
IHAubmV4dDsKIAotICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1di54LCB1di55ICk7CisgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGluY3JlYXNl
IHRoZSByYWRpdXMgZm9yIG5leHQgcm93IG9mIHZlcnRpY2VzCisgICAgICAgICAgICBwID0gcC5u
ZXh0OwogCi0gICAgICAgICAgICByYWRpdXMgKz0gcmFkaXVzU3RlcDsKKyAgICAgICAgfSB3aGls
ZSAoIHAgIT09IG91dGVyTm9kZSApOwogCi0gICAgICAgIH0KKyAgICAgICAgaWYgKCAhIG0gKSBy
ZXR1cm4gbnVsbDsKIAotICAgICAgICAvLyBpbmRpY2VzCisgICAgICAgIGlmICggaHggPT09IHF4
ICkgcmV0dXJuIG0ucHJldjsgLy8gaG9sZSB0b3VjaGVzIG91dGVyIHNlZ21lbnQ7IHBpY2sgbG93
ZXIgZW5kcG9pbnQKIAotICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBoaVNlZ21lbnRzOyBqICsr
ICkgeworICAgICAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBvZiBo
b2xlIHBvaW50LCBzZWdtZW50IGludGVyc2VjdGlvbiBhbmQgZW5kcG9pbnQ7CisgICAgICAgIC8v
IGlmIHRoZXJlIGFyZSBubyBwb2ludHMgZm91bmQsIHdlIGhhdmUgYSB2YWxpZCBjb25uZWN0aW9u
OworICAgICAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBh
bmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludAogCi0gICAgICAgICAgICB2YXIg
dGhldGFTZWdtZW50TGV2ZWwgPSBqICogKCB0aGV0YVNlZ21lbnRzICsgMSApOworICAgICAgICB2
YXIgc3RvcCA9IG0sCisgICAgICAgICAgICBteCA9IG0ueCwKKyAgICAgICAgICAgIG15ID0gbS55
LAorICAgICAgICAgICAgdGFuTWluID0gSW5maW5pdHksCisgICAgICAgICAgICB0YW47CiAKLSAg
ICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgdGhldGFTZWdtZW50czsgaSArKyApIHsKKyAgICAg
ICAgcCA9IG0ubmV4dDsKIAotICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBpICsgdGhldGFTZWdt
ZW50TGV2ZWw7CisgICAgICAgIHdoaWxlICggcCAhPT0gc3RvcCApIHsKIAotICAgICAgICAgICAg
ICAgIHZhciBhID0gc2VnbWVudDsKLSAgICAgICAgICAgICAgICB2YXIgYiA9IHNlZ21lbnQgKyB0
aGV0YVNlZ21lbnRzICsgMTsKLSAgICAgICAgICAgICAgICB2YXIgYyA9IHNlZ21lbnQgKyB0aGV0
YVNlZ21lbnRzICsgMjsKLSAgICAgICAgICAgICAgICB2YXIgZCA9IHNlZ21lbnQgKyAxOworICAg
ICAgICAgICAgaWYgKCBoeCA+PSBwLnggJiYgcC54ID49IG14ICYmIGh4ICE9PSBwLnggJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoIGh5IDwgbXkgPyBoeCA6
IHF4LCBoeSwgbXgsIG15LCBoeSA8IG15ID8gcXggOiBoeCwgaHksIHAueCwgcC55ICkgKSB7CiAK
LSAgICAgICAgICAgICAgICAvLyBmYWNlcworICAgICAgICAgICAgICAgIHRhbiA9IE1hdGguYWJz
KCBoeSAtIHAueSApIC8gKCBoeCAtIHAueCApOyAvLyB0YW5nZW50aWFsCiAKLSAgICAgICAgICAg
ICAgICBpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKLSAgICAgICAgICAgICAgICBpbmRpY2VzLnB1
c2goIGIsIGMsIGQgKTsKKyAgICAgICAgICAgICAgICBpZiAoICggdGFuIDwgdGFuTWluIHx8ICgg
dGFuID09PSB0YW5NaW4gJiYgcC54ID4gbS54ICkgKSAmJiBsb2NhbGx5SW5zaWRlKCBwLCBob2xl
ICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgbSA9IHA7CisgICAgICAgICAgICAgICAgICAg
IHRhbk1pbiA9IHRhbjsKKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgIH0KKyAgICAgICAgICAgIHAgPSBwLm5leHQ7CiAKLSAgICAgICAgLy8gYnVpbGQgZ2Vv
bWV0cnkKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsKLSAg
ICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0
cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnbm9y
bWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSApOwotICAgICAg
ICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2
cywgMiApICk7CisgICAgICAgIHJldHVybiBtOwogCiAgICAgfQogCi0gICAgUmluZ0J1ZmZlckdl
b21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlw
ZSApOwotICAgIFJpbmdCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSaW5n
QnVmZmVyR2VvbWV0cnk7CisgICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRl
cgogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBhc3Ryb2R1ZCAvIGh0dHA6Ly9hc3Ryb2R1ZC5p
c2dyZWF0Lm9yZy8KLSAgICAgKiBAYXV0aG9yIHp6ODUgLyBodHRwczovL2dpdGh1Yi5jb20veno4
NQotICAgICAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8KLSAgICAgKiBAYXV0
aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44NwotICAgICAqLworICAgIGZ1
bmN0aW9uIGluZGV4Q3VydmUoIHN0YXJ0LCBtaW5YLCBtaW5ZLCBpbnZTaXplICkgewogCi0gICAg
Ly8gTGF0aGVHZW9tZXRyeQorICAgICAgICB2YXIgcCA9IHN0YXJ0OwogCi0gICAgZnVuY3Rpb24g
TGF0aGVHZW9tZXRyeSggcG9pbnRzLCBzZWdtZW50cywgcGhpU3RhcnQsIHBoaUxlbmd0aCApIHsK
KyAgICAgICAgZG8gewogCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICAgICAg
ICAgIGlmICggcC56ID09PSBudWxsICkgcC56ID0gek9yZGVyKCBwLngsIHAueSwgbWluWCwgbWlu
WSwgaW52U2l6ZSApOworICAgICAgICAgICAgcC5wcmV2WiA9IHAucHJldjsKKyAgICAgICAgICAg
IHAubmV4dFogPSBwLm5leHQ7CisgICAgICAgICAgICBwID0gcC5uZXh0OwogCi0gICAgICAgIHRo
aXMudHlwZSA9ICdMYXRoZUdlb21ldHJ5JzsKKyAgICAgICAgfSB3aGlsZSAoIHAgIT09IHN0YXJ0
ICk7CiAKLSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgcG9pbnRzOiBw
b2ludHMsCi0gICAgICAgICAgICBzZWdtZW50czogc2VnbWVudHMsCi0gICAgICAgICAgICBwaGlT
dGFydDogcGhpU3RhcnQsCi0gICAgICAgICAgICBwaGlMZW5ndGg6IHBoaUxlbmd0aAotICAgICAg
ICB9OworICAgICAgICBwLnByZXZaLm5leHRaID0gbnVsbDsKKyAgICAgICAgcC5wcmV2WiA9IG51
bGw7CiAKLSAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBMYXRoZUJ1ZmZlckdl
b21ldHJ5KCBwb2ludHMsIHNlZ21lbnRzLCBwaGlTdGFydCwgcGhpTGVuZ3RoICkgKTsKLSAgICAg
ICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CisgICAgICAgIHNvcnRMaW5rZWQoIHAgKTsKIAogICAg
IH0KIAotICAgIExhdGhlR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0
cnkucHJvdG90eXBlICk7Ci0gICAgTGF0aGVHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBMYXRoZUdlb21ldHJ5OworICAgIC8vIFNpbW9uIFRhdGhhbSdzIGxpbmtlZCBsaXN0IG1lcmdl
IHNvcnQgYWxnb3JpdGhtCisgICAgLy8gaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVr
L35zZ3RhdGhhbS9hbGdvcml0aG1zL2xpc3Rzb3J0Lmh0bWwKIAotICAgIC8vIExhdGhlQnVmZmVy
R2VvbWV0cnkKKyAgICBmdW5jdGlvbiBzb3J0TGlua2VkKCBsaXN0ICkgewogCi0gICAgZnVuY3Rp
b24gTGF0aGVCdWZmZXJHZW9tZXRyeSggcG9pbnRzLCBzZWdtZW50cywgcGhpU3RhcnQsIHBoaUxl
bmd0aCApIHsKKyAgICAgICAgdmFyIGksIHAsIHEsIGUsIHRhaWwsIG51bU1lcmdlcywgcFNpemUs
IHFTaXplLCBpblNpemUgPSAxOwogCi0gICAgICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMg
KTsKKyAgICAgICAgZG8gewogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMYXRoZUJ1ZmZlckdlb21l
dHJ5JzsKKyAgICAgICAgICAgIHAgPSBsaXN0OworICAgICAgICAgICAgbGlzdCA9IG51bGw7Cisg
ICAgICAgICAgICB0YWlsID0gbnVsbDsKKyAgICAgICAgICAgIG51bU1lcmdlcyA9IDA7CiAKLSAg
ICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgcG9pbnRzOiBwb2ludHMsCi0g
ICAgICAgICAgICBzZWdtZW50czogc2VnbWVudHMsCi0gICAgICAgICAgICBwaGlTdGFydDogcGhp
U3RhcnQsCi0gICAgICAgICAgICBwaGlMZW5ndGg6IHBoaUxlbmd0aAotICAgICAgICB9OworICAg
ICAgICAgICAgd2hpbGUgKCBwICkgewogCi0gICAgICAgIHNlZ21lbnRzID0gTWF0aC5mbG9vcigg
c2VnbWVudHMgKSB8fCAxMjsKLSAgICAgICAgcGhpU3RhcnQgPSBwaGlTdGFydCB8fCAwOwotICAg
ICAgICBwaGlMZW5ndGggPSBwaGlMZW5ndGggfHwgTWF0aC5QSSAqIDI7CisgICAgICAgICAgICAg
ICAgbnVtTWVyZ2VzICsrOworICAgICAgICAgICAgICAgIHEgPSBwOworICAgICAgICAgICAgICAg
IHBTaXplID0gMDsKIAotICAgICAgICAvLyBjbGFtcCBwaGlMZW5ndGggc28gaXQncyBpbiByYW5n
ZSBvZiBbIDAsIDJQSSBdCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBpblNpemU7
IGkgKysgKSB7CiAKLSAgICAgICAgcGhpTGVuZ3RoID0gX01hdGguY2xhbXAoIHBoaUxlbmd0aCwg
MCwgTWF0aC5QSSAqIDIgKTsKKyAgICAgICAgICAgICAgICAgICAgcFNpemUgKys7CisgICAgICAg
ICAgICAgICAgICAgIHEgPSBxLm5leHRaOworICAgICAgICAgICAgICAgICAgICBpZiAoICEgcSAp
IGJyZWFrOwogCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIGJ1ZmZlcnMKKyAgICAg
ICAgICAgICAgICBxU2l6ZSA9IGluU2l6ZTsKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwot
ICAgICAgICB2YXIgdmVydGljZXMgPSBbXTsKLSAgICAgICAgdmFyIHV2cyA9IFtdOworICAgICAg
ICAgICAgICAgIHdoaWxlICggcFNpemUgPiAwIHx8ICggcVNpemUgPiAwICYmIHEgKSApIHsKIAot
ICAgICAgICAvLyBoZWxwZXIgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIGlmICggcFNp
emUgIT09IDAgJiYgKCBxU2l6ZSA9PT0gMCB8fCAhIHEgfHwgcC56IDw9IHEueiApICkgewogCi0g
ICAgICAgIHZhciBiYXNlOwotICAgICAgICB2YXIgaW52ZXJzZVNlZ21lbnRzID0gMS4wIC8gc2Vn
bWVudHM7Ci0gICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOwotICAgICAgICB2YXIg
dXYgPSBuZXcgVmVjdG9yMigpOwotICAgICAgICB2YXIgaSwgajsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGUgPSBwOworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwU2l6ZSAtLTsKIAotICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0
aWNlcyBhbmQgdXZzCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgZm9y
ICggaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBlID0gcTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaOworICAgICAgICAg
ICAgICAgICAgICAgICAgcVNpemUgLS07CiAKLSAgICAgICAgICAgIHZhciBwaGkgPSBwaGlTdGFy
dCArIGkgKiBpbnZlcnNlU2VnbWVudHMgKiBwaGlMZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgdmFyIHNpbiA9IE1hdGguc2luKCBwaGkgKTsKLSAgICAgICAgICAg
IHZhciBjb3MgPSBNYXRoLmNvcyggcGhpICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGFp
bCApIHRhaWwubmV4dFogPSBlOworICAgICAgICAgICAgICAgICAgICBlbHNlIGxpc3QgPSBlOwog
Ci0gICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8PSAoIHBvaW50cy5sZW5ndGggLSAxICk7IGog
KysgKSB7CisgICAgICAgICAgICAgICAgICAgIGUucHJldlogPSB0YWlsOworICAgICAgICAgICAg
ICAgICAgICB0YWlsID0gZTsKIAotICAgICAgICAgICAgICAgIC8vIHZlcnRleAorICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHZlcnRleC54ID0gcG9pbnRzWyBqIF0ueCAqIHNp
bjsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXgueSA9IHBvaW50c1sgaiBdLnk7Ci0gICAgICAgICAg
ICAgICAgdmVydGV4LnogPSBwb2ludHNbIGogXS54ICogY29zOworICAgICAgICAgICAgICAgIHAg
PSBxOwogCi0gICAgICAgICAgICAgICAgdmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55
LCB2ZXJ0ZXgueiApOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gdXYKKyAg
ICAgICAgICAgIHRhaWwubmV4dFogPSBudWxsOworICAgICAgICAgICAgaW5TaXplICo9IDI7CiAK
LSAgICAgICAgICAgICAgICB1di54ID0gaSAvIHNlZ21lbnRzOwotICAgICAgICAgICAgICAgIHV2
LnkgPSBqIC8gKCBwb2ludHMubGVuZ3RoIC0gMSApOworICAgICAgICB9IHdoaWxlICggbnVtTWVy
Z2VzID4gMSApOwogCi0gICAgICAgICAgICAgICAgdXZzLnB1c2goIHV2LngsIHV2LnkgKTsKKyAg
ICAgICAgcmV0dXJuIGxpc3Q7CiAKKyAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAvLyB6LW9y
ZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRoZSBsb25nZXIgc2lk
ZSBvZiBkYXRhIGJib3gKIAotICAgICAgICB9CisgICAgZnVuY3Rpb24gek9yZGVyKCB4LCB5LCBt
aW5YLCBtaW5ZLCBpbnZTaXplICkgewogCi0gICAgICAgIC8vIGluZGljZXMKKyAgICAgICAgLy8g
Y29vcmRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIG5vbi1uZWdhdGl2ZSAxNS1iaXQgaW50ZWdlciBy
YW5nZQogCi0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2VnbWVudHM7IGkgKysgKSB7CisgICAg
ICAgIHggPSAzMjc2NyAqICggeCAtIG1pblggKSAqIGludlNpemU7CisgICAgICAgIHkgPSAzMjc2
NyAqICggeSAtIG1pblkgKSAqIGludlNpemU7CiAKLSAgICAgICAgICAgIGZvciAoIGogPSAwOyBq
IDwgKCBwb2ludHMubGVuZ3RoIC0gMSApOyBqICsrICkgeworICAgICAgICB4ID0gKCB4IHwgKCB4
IDw8IDggKSApICYgMHgwMEZGMDBGRjsKKyAgICAgICAgeCA9ICggeCB8ICggeCA8PCA0ICkgKSAm
IDB4MEYwRjBGMEY7CisgICAgICAgIHggPSAoIHggfCAoIHggPDwgMiApICkgJiAweDMzMzMzMzMz
OworICAgICAgICB4ID0gKCB4IHwgKCB4IDw8IDEgKSApICYgMHg1NTU1NTU1NTsKIAotICAgICAg
ICAgICAgICAgIGJhc2UgPSBqICsgaSAqIHBvaW50cy5sZW5ndGg7CisgICAgICAgIHkgPSAoIHkg
fCAoIHkgPDwgOCApICkgJiAweDAwRkYwMEZGOworICAgICAgICB5ID0gKCB5IHwgKCB5IDw8IDQg
KSApICYgMHgwRjBGMEYwRjsKKyAgICAgICAgeSA9ICggeSB8ICggeSA8PCAyICkgKSAmIDB4MzMz
MzMzMzM7CisgICAgICAgIHkgPSAoIHkgfCAoIHkgPDwgMSApICkgJiAweDU1NTU1NTU1OwogCi0g
ICAgICAgICAgICAgICAgdmFyIGEgPSBiYXNlOwotICAgICAgICAgICAgICAgIHZhciBiID0gYmFz
ZSArIHBvaW50cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBiYXNlICsgcG9pbnRz
Lmxlbmd0aCArIDE7Ci0gICAgICAgICAgICAgICAgdmFyIGQgPSBiYXNlICsgMTsKKyAgICAgICAg
cmV0dXJuIHggfCAoIHkgPDwgMSApOwogCi0gICAgICAgICAgICAgICAgLy8gZmFjZXMKKyAgICB9
CiAKLSAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKLSAgICAgICAgICAg
ICAgICBpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTsKKyAgICAvLyBmaW5kIHRoZSBsZWZ0bW9zdCBu
b2RlIG9mIGEgcG9seWdvbiByaW5nCiAKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBnZXRM
ZWZ0bW9zdCggc3RhcnQgKSB7CiAKLSAgICAgICAgfQorICAgICAgICB2YXIgcCA9IHN0YXJ0LCBs
ZWZ0bW9zdCA9IHN0YXJ0OwogCi0gICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CisgICAgICAgIGRv
IHsKIAotICAgICAgICB0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7Ci0gICAgICAgIHRoaXMuYWRk
QXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGlj
ZXMsIDMgKSApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJC
dWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7CisgICAgICAgICAgICBpZiAoIHAueCA8IGxlZnRt
b3N0LnggKSBsZWZ0bW9zdCA9IHA7CisgICAgICAgICAgICBwID0gcC5uZXh0OwogCi0gICAgICAg
IC8vIGdlbmVyYXRlIG5vcm1hbHMKKyAgICAgICAgfSB3aGlsZSAoIHAgIT09IHN0YXJ0ICk7CiAK
LSAgICAgICAgdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpOworICAgICAgICByZXR1cm4gbGVm
dG1vc3Q7CiAKLSAgICAgICAgLy8gaWYgdGhlIGdlb21ldHJ5IGlzIGNsb3NlZCwgd2UgbmVlZCB0
byBhdmVyYWdlIHRoZSBub3JtYWxzIGFsb25nIHRoZSBzZWFtLgotICAgICAgICAvLyBiZWNhdXNl
IHRoZSBjb3JyZXNwb25kaW5nIHZlcnRpY2VzIGFyZSBpZGVudGljYWwgKGJ1dCBzdGlsbCBoYXZl
IGRpZmZlcmVudCBVVnMpLgorICAgIH0KIAotICAgICAgICBpZiAoIHBoaUxlbmd0aCA9PT0gTWF0
aC5QSSAqIDIgKSB7CisgICAgLy8gY2hlY2sgaWYgYSBwb2ludCBsaWVzIHdpdGhpbiBhIGNvbnZl
eCB0cmlhbmdsZQogCi0gICAgICAgICAgICB2YXIgbm9ybWFscyA9IHRoaXMuYXR0cmlidXRlcy5u
b3JtYWwuYXJyYXk7Ci0gICAgICAgICAgICB2YXIgbjEgPSBuZXcgVmVjdG9yMygpOwotICAgICAg
ICAgICAgdmFyIG4yID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBuID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICBmdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoIGF4LCBheSwgYngsIGJ5LCBj
eCwgY3ksIHB4LCBweSApIHsKIAotICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgYnVmZmVyIG9m
ZnNldCBmb3IgdGhlIGxhc3QgbGluZSBvZiB2ZXJ0aWNlcworICAgICAgICByZXR1cm4gKCBjeCAt
IHB4ICkgKiAoIGF5IC0gcHkgKSAtICggYXggLSBweCApICogKCBjeSAtIHB5ICkgPj0gMCAmJgor
ICAgICAgICAgKCBheCAtIHB4ICkgKiAoIGJ5IC0gcHkgKSAtICggYnggLSBweCApICogKCBheSAt
IHB5ICkgPj0gMCAmJgorICAgICAgICAgKCBieCAtIHB4ICkgKiAoIGN5IC0gcHkgKSAtICggY3gg
LSBweCApICogKCBieSAtIHB5ICkgPj0gMDsKIAotICAgICAgICAgICAgYmFzZSA9IHNlZ21lbnRz
ICogcG9pbnRzLmxlbmd0aCAqIDM7CisgICAgfQogCi0gICAgICAgICAgICBmb3IgKCBpID0gMCwg
aiA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICsrLCBqICs9IDMgKSB7CisgICAgLy8gY2hlY2sg
aWYgYSBkaWFnb25hbCBiZXR3ZWVuIHR3byBwb2x5Z29uIG5vZGVzIGlzIHZhbGlkIChsaWVzIGlu
IHBvbHlnb24gaW50ZXJpb3IpCiAKLSAgICAgICAgICAgICAgICAvLyBzZWxlY3QgdGhlIG5vcm1h
bCBvZiB0aGUgdmVydGV4IGluIHRoZSBmaXJzdCBsaW5lCisgICAgZnVuY3Rpb24gaXNWYWxpZERp
YWdvbmFsKCBhLCBiICkgewogCi0gICAgICAgICAgICAgICAgbjEueCA9IG5vcm1hbHNbIGogKyAw
IF07Ci0gICAgICAgICAgICAgICAgbjEueSA9IG5vcm1hbHNbIGogKyAxIF07Ci0gICAgICAgICAg
ICAgICAgbjEueiA9IG5vcm1hbHNbIGogKyAyIF07CisgICAgICAgIHJldHVybiBhLm5leHQuaSAh
PT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgISBpbnRlcnNlY3RzUG9seWdvbiggYSwgYiAp
ICYmCisgICAgICAgICAgICBsb2NhbGx5SW5zaWRlKCBhLCBiICkgJiYgbG9jYWxseUluc2lkZSgg
YiwgYSApICYmIG1pZGRsZUluc2lkZSggYSwgYiApOwogCi0gICAgICAgICAgICAgICAgLy8gc2Vs
ZWN0IHRoZSBub3JtYWwgb2YgdGhlIHZlcnRleCBpbiB0aGUgbGFzdCBsaW5lCisgICAgfQogCi0g
ICAgICAgICAgICAgICAgbjIueCA9IG5vcm1hbHNbIGJhc2UgKyBqICsgMCBdOwotICAgICAgICAg
ICAgICAgIG4yLnkgPSBub3JtYWxzWyBiYXNlICsgaiArIDEgXTsKLSAgICAgICAgICAgICAgICBu
Mi56ID0gbm9ybWFsc1sgYmFzZSArIGogKyAyIF07CisgICAgLy8gc2lnbmVkIGFyZWEgb2YgYSB0
cmlhbmdsZQogCi0gICAgICAgICAgICAgICAgLy8gYXZlcmFnZSBub3JtYWxzCisgICAgZnVuY3Rp
b24gYXJlYSggcCwgcSwgciApIHsKIAotICAgICAgICAgICAgICAgIG4uYWRkVmVjdG9ycyggbjEs
IG4yICkubm9ybWFsaXplKCk7CisgICAgICAgIHJldHVybiAoIHEueSAtIHAueSApICogKCByLngg
LSBxLnggKSAtICggcS54IC0gcC54ICkgKiAoIHIueSAtIHEueSApOwogCi0gICAgICAgICAgICAg
ICAgLy8gYXNzaWduIHRoZSBuZXcgdmFsdWVzIHRvIGJvdGggbm9ybWFscworICAgIH0KIAotICAg
ICAgICAgICAgICAgIG5vcm1hbHNbIGogKyAwIF0gPSBub3JtYWxzWyBiYXNlICsgaiArIDAgXSA9
IG4ueDsKLSAgICAgICAgICAgICAgICBub3JtYWxzWyBqICsgMSBdID0gbm9ybWFsc1sgYmFzZSAr
IGogKyAxIF0gPSBuLnk7Ci0gICAgICAgICAgICAgICAgbm9ybWFsc1sgaiArIDIgXSA9IG5vcm1h
bHNbIGJhc2UgKyBqICsgMiBdID0gbi56OworICAgIC8vIGNoZWNrIGlmIHR3byBwb2ludHMgYXJl
IGVxdWFsCiAKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBlcXVhbHMoIHAxLCBwMiApIHsK
IAotICAgICAgICB9CisgICAgICAgIHJldHVybiBwMS54ID09PSBwMi54ICYmIHAxLnkgPT09IHAy
Lnk7CiAKICAgICB9CiAKLSAgICBMYXRoZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIExhdGhlQnVmZmVyR2Vv
bWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF0aGVCdWZmZXJHZW9tZXRyeTsKLQotICAg
IC8qKgotICAgICAqIEBhdXRob3Igam9ub2JyMSAvIGh0dHA6Ly9qb25vYnIxLmNvbQotICAgICAq
IEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0gICAgICovCi0K
LSAgICAvLyBTaGFwZUdlb21ldHJ5Ci0KLSAgICBmdW5jdGlvbiBTaGFwZUdlb21ldHJ5KCBzaGFw
ZXMsIGN1cnZlU2VnbWVudHMgKSB7CisgICAgLy8gY2hlY2sgaWYgdHdvIHNlZ21lbnRzIGludGVy
c2VjdAogCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKyAgICBmdW5jdGlvbiBpbnRl
cnNlY3RzKCBwMSwgcTEsIHAyLCBxMiApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnU2hhcGVH
ZW9tZXRyeSc7CisgICAgICAgIGlmICggKCBlcXVhbHMoIHAxLCBxMSApICYmIGVxdWFscyggcDIs
IHEyICkgKSB8fAorICAgICAgICAgICAgICAgICggZXF1YWxzKCBwMSwgcTIgKSAmJiBlcXVhbHMo
IHAyLCBxMSApICkgKSByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoIHR5cGVvZiBjdXJ2ZVNl
Z21lbnRzID09PSAnb2JqZWN0JyApIHsKKyAgICAgICAgcmV0dXJuIGFyZWEoIHAxLCBxMSwgcDIg
KSA+IDAgIT09IGFyZWEoIHAxLCBxMSwgcTIgKSA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAg
IGFyZWEoIHAyLCBxMiwgcDEgKSA+IDAgIT09IGFyZWEoIHAyLCBxMiwgcTEgKSA+IDA7CiAKLSAg
ICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlNoYXBlR2VvbWV0cnk6IE9wdGlvbnMgcGFy
YW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQuJyApOworICAgIH0KIAotICAgICAgICAgICAgY3VydmVT
ZWdtZW50cyA9IGN1cnZlU2VnbWVudHMuY3VydmVTZWdtZW50czsKKyAgICAvLyBjaGVjayBpZiBh
IHBvbHlnb24gZGlhZ29uYWwgaW50ZXJzZWN0cyBhbnkgcG9seWdvbiBzZWdtZW50cwogCi0gICAg
ICAgIH0KKyAgICBmdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbiggYSwgYiApIHsKIAotICAgICAg
ICB0aGlzLnBhcmFtZXRlcnMgPSB7Ci0gICAgICAgICAgICBzaGFwZXM6IHNoYXBlcywKLSAgICAg
ICAgICAgIGN1cnZlU2VnbWVudHM6IGN1cnZlU2VnbWVudHMKLSAgICAgICAgfTsKKyAgICAgICAg
dmFyIHAgPSBhOwogCi0gICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgU2hhcGVC
dWZmZXJHZW9tZXRyeSggc2hhcGVzLCBjdXJ2ZVNlZ21lbnRzICkgKTsKLSAgICAgICAgdGhpcy5t
ZXJnZVZlcnRpY2VzKCk7CisgICAgICAgIGRvIHsKIAotICAgIH0KKyAgICAgICAgICAgIGlmICgg
cC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQu
aSAhPT0gYi5pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0cyggcCwg
cC5uZXh0LCBhLCBiICkgKSB7CiAKLSAgICBTaGFwZUdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIFNoYXBlR2VvbWV0cnkucHJvdG90
eXBlLmNvbnN0cnVjdG9yID0gU2hhcGVHZW9tZXRyeTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIC8vIFNoYXBlQnVmZmVyR2VvbWV0cnkKKyAgICAgICAgICAgIH0KIAotICAg
IGZ1bmN0aW9uIFNoYXBlQnVmZmVyR2VvbWV0cnkoIHNoYXBlcywgY3VydmVTZWdtZW50cyApIHsK
KyAgICAgICAgICAgIHAgPSBwLm5leHQ7CiAKLSAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCgg
dGhpcyApOworICAgICAgICB9IHdoaWxlICggcCAhPT0gYSApOwogCi0gICAgICAgIHRoaXMudHlw
ZSA9ICdTaGFwZUJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHNoYXBlczogc2hhcGVzLAotICAg
ICAgICAgICAgY3VydmVTZWdtZW50czogY3VydmVTZWdtZW50cwotICAgICAgICB9OworICAgIH0K
IAotICAgICAgICBjdXJ2ZVNlZ21lbnRzID0gY3VydmVTZWdtZW50cyB8fCAxMjsKKyAgICAvLyBj
aGVjayBpZiBhIHBvbHlnb24gZGlhZ29uYWwgaXMgbG9jYWxseSBpbnNpZGUgdGhlIHBvbHlnb24K
IAotICAgICAgICAvLyBidWZmZXJzCisgICAgZnVuY3Rpb24gbG9jYWxseUluc2lkZSggYSwgYiAp
IHsKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwotICAgICAgICB2YXIgdmVydGljZXMgPSBb
XTsKLSAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsKLSAgICAgICAgdmFyIHV2cyA9IFtdOworICAg
ICAgICByZXR1cm4gYXJlYSggYS5wcmV2LCBhLCBhLm5leHQgKSA8IDAgPworICAgICAgICAgICAg
YXJlYSggYSwgYiwgYS5uZXh0ICkgPj0gMCAmJiBhcmVhKCBhLCBhLnByZXYsIGIgKSA+PSAwIDoK
KyAgICAgICAgICAgIGFyZWEoIGEsIGIsIGEucHJldiApIDwgMCB8fCBhcmVhKCBhLCBhLm5leHQs
IGIgKSA8IDA7CiAKLSAgICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcworICAgIH0KIAotICAgICAg
ICB2YXIgZ3JvdXBTdGFydCA9IDA7Ci0gICAgICAgIHZhciBncm91cENvdW50ID0gMDsKKyAgICAv
LyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNp
ZGUgdGhlIHBvbHlnb24KIAotICAgICAgICAvLyBhbGxvdyBzaW5nbGUgYW5kIGFycmF5IHZhbHVl
cyBmb3IgInNoYXBlcyIgcGFyYW1ldGVyCisgICAgZnVuY3Rpb24gbWlkZGxlSW5zaWRlKCBhLCBi
ICkgewogCi0gICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggc2hhcGVzICkgPT09IGZhbHNlICkg
eworICAgICAgICB2YXIgcCA9IGEsCisgICAgICAgICAgICBpbnNpZGUgPSBmYWxzZSwKKyAgICAg
ICAgICAgIHB4ID0gKCBhLnggKyBiLnggKSAvIDIsCisgICAgICAgICAgICBweSA9ICggYS55ICsg
Yi55ICkgLyAyOwogCi0gICAgICAgICAgICBhZGRTaGFwZSggc2hhcGVzICk7CisgICAgICAgIGRv
IHsKIAotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCAoICggcC55ID4gcHkgKSAh
PT0gKCBwLm5leHQueSA+IHB5ICkgKSAmJiBwLm5leHQueSAhPT0gcC55ICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCBweCA8ICggcC5uZXh0LnggLSBwLnggKSAqICggcHkgLSBwLnkg
KSAvICggcC5uZXh0LnkgLSBwLnkgKSArIHAueCApICkgewogCi0gICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDA7IGkgPCBzaGFwZXMubGVuZ3RoOyBpICsrICkgeworICAgICAgICAgICAgICAgIGlu
c2lkZSA9ICEgaW5zaWRlOwogCi0gICAgICAgICAgICAgICAgYWRkU2hhcGUoIHNoYXBlc1sgaSBd
ICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwKCBncm91
cFN0YXJ0LCBncm91cENvdW50LCBpICk7IC8vIGVuYWJsZXMgTXVsdGlNYXRlcmlhbCBzdXBwb3J0
CisgICAgICAgICAgICBwID0gcC5uZXh0OwogCi0gICAgICAgICAgICAgICAgZ3JvdXBTdGFydCAr
PSBncm91cENvdW50OwotICAgICAgICAgICAgICAgIGdyb3VwQ291bnQgPSAwOworICAgICAgICB9
IHdoaWxlICggcCAhPT0gYSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnNp
ZGU7CiAKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICAvLyBidWlsZCBnZW9tZXRyeQorICAg
IC8vIGxpbmsgdHdvIHBvbHlnb24gdmVydGljZXMgd2l0aCBhIGJyaWRnZTsgaWYgdGhlIHZlcnRp
Y2VzIGJlbG9uZyB0byB0aGUgc2FtZSByaW5nLCBpdCBzcGxpdHMgcG9seWdvbiBpbnRvIHR3bzsK
KyAgICAvLyBpZiBvbmUgYmVsb25ncyB0byB0aGUgb3V0ZXIgcmluZyBhbmQgYW5vdGhlciB0byBh
IGhvbGUsIGl0IG1lcmdlcyBpdCBpbnRvIGEgc2luZ2xlIHJpbmcKIAotICAgICAgICB0aGlzLnNl
dEluZGV4KCBpbmRpY2VzICk7Ci0gICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24n
LCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApOwotICAgICAgICB0
aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBu
b3JtYWxzLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9h
dDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApOworICAgIGZ1bmN0aW9uIHNwbGl0UG9seWdv
biggYSwgYiApIHsKIAorICAgICAgICB2YXIgYTIgPSBuZXcgTm9kZSggYS5pLCBhLngsIGEueSAp
LAorICAgICAgICAgICAgYjIgPSBuZXcgTm9kZSggYi5pLCBiLngsIGIueSApLAorICAgICAgICAg
ICAgYW4gPSBhLm5leHQsCisgICAgICAgICAgICBicCA9IGIucHJldjsKIAotICAgICAgICAvLyBo
ZWxwZXIgZnVuY3Rpb25zCisgICAgICAgIGEubmV4dCA9IGI7CisgICAgICAgIGIucHJldiA9IGE7
CiAKLSAgICAgICAgZnVuY3Rpb24gYWRkU2hhcGUoIHNoYXBlICkgeworICAgICAgICBhMi5uZXh0
ID0gYW47CisgICAgICAgIGFuLnByZXYgPSBhMjsKIAotICAgICAgICAgICAgdmFyIGksIGwsIHNo
YXBlSG9sZTsKKyAgICAgICAgYjIubmV4dCA9IGEyOworICAgICAgICBhMi5wcmV2ID0gYjI7CiAK
LSAgICAgICAgICAgIHZhciBpbmRleE9mZnNldCA9IHZlcnRpY2VzLmxlbmd0aCAvIDM7Ci0gICAg
ICAgICAgICB2YXIgcG9pbnRzID0gc2hhcGUuZXh0cmFjdFBvaW50cyggY3VydmVTZWdtZW50cyAp
OworICAgICAgICBicC5uZXh0ID0gYjI7CisgICAgICAgIGIyLnByZXYgPSBicDsKIAotICAgICAg
ICAgICAgdmFyIHNoYXBlVmVydGljZXMgPSBwb2ludHMuc2hhcGU7Ci0gICAgICAgICAgICB2YXIg
c2hhcGVIb2xlcyA9IHBvaW50cy5ob2xlczsKKyAgICAgICAgcmV0dXJuIGIyOwogCi0gICAgICAg
ICAgICAvLyBjaGVjayBkaXJlY3Rpb24gb2YgdmVydGljZXMKKyAgICB9CiAKLSAgICAgICAgICAg
IGlmICggU2hhcGVVdGlscy5pc0Nsb2NrV2lzZSggc2hhcGVWZXJ0aWNlcyApID09PSBmYWxzZSAp
IHsKKyAgICAvLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2
aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KQogCi0gICAgICAgICAg
ICAgICAgc2hhcGVWZXJ0aWNlcyA9IHNoYXBlVmVydGljZXMucmV2ZXJzZSgpOworICAgIGZ1bmN0
aW9uIGluc2VydE5vZGUoIGksIHgsIHksIGxhc3QgKSB7CiAKLSAgICAgICAgICAgICAgICAvLyBh
bHNvIGNoZWNrIGlmIGhvbGVzIGFyZSBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uCisgICAgICAg
IHZhciBwID0gbmV3IE5vZGUoIGksIHgsIHkgKTsKIAotICAgICAgICAgICAgICAgIGZvciAoIGkg
PSAwLCBsID0gc2hhcGVIb2xlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICBpZiAo
ICEgbGFzdCApIHsKIAotICAgICAgICAgICAgICAgICAgICBzaGFwZUhvbGUgPSBzaGFwZUhvbGVz
WyBpIF07CisgICAgICAgICAgICBwLnByZXYgPSBwOworICAgICAgICAgICAgcC5uZXh0ID0gcDsK
IAotICAgICAgICAgICAgICAgICAgICBpZiAoIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIHNoYXBl
SG9sZSApID09PSB0cnVlICkgeworICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzaGFwZUhvbGVzWyBpIF0gPSBzaGFwZUhvbGUucmV2ZXJzZSgpOworICAgICAgICAg
ICAgcC5uZXh0ID0gbGFzdC5uZXh0OworICAgICAgICAgICAgcC5wcmV2ID0gbGFzdDsKKyAgICAg
ICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDsKKyAgICAgICAgICAgIGxhc3QubmV4dCA9IHA7CiAK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBwOwogCi0gICAgICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICB2
YXIgZmFjZXMgPSBTaGFwZVV0aWxzLnRyaWFuZ3VsYXRlU2hhcGUoIHNoYXBlVmVydGljZXMsIHNo
YXBlSG9sZXMgKTsKKyAgICBmdW5jdGlvbiByZW1vdmVOb2RlKCBwICkgewogCi0gICAgICAgICAg
ICAvLyBqb2luIHZlcnRpY2VzIG9mIGlubmVyIGFuZCBvdXRlciBwYXRocyB0byBhIHNpbmdsZSBh
cnJheQorICAgICAgICBwLm5leHQucHJldiA9IHAucHJldjsKKyAgICAgICAgcC5wcmV2Lm5leHQg
PSBwLm5leHQ7CiAKLSAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gc2hhcGVIb2xlcy5sZW5n
dGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICBpZiAoIHAucHJldlogKSBwLnByZXZaLm5leHRa
ID0gcC5uZXh0WjsKKyAgICAgICAgaWYgKCBwLm5leHRaICkgcC5uZXh0Wi5wcmV2WiA9IHAucHJl
dlo7CiAKLSAgICAgICAgICAgICAgICBzaGFwZUhvbGUgPSBzaGFwZUhvbGVzWyBpIF07Ci0gICAg
ICAgICAgICAgICAgc2hhcGVWZXJ0aWNlcyA9IHNoYXBlVmVydGljZXMuY29uY2F0KCBzaGFwZUhv
bGUgKTsKKyAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICBmdW5jdGlvbiBOb2RlKCBpLCB4LCB5
ICkgewogCi0gICAgICAgICAgICAvLyB2ZXJ0aWNlcywgbm9ybWFscywgdXZzCisgICAgICAgIC8v
IHZlcnRpY2UgaW5kZXggaW4gY29vcmRpbmF0ZXMgYXJyYXkKKyAgICAgICAgdGhpcy5pID0gaTsK
IAotICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzaGFwZVZlcnRpY2VzLmxlbmd0aDsgaSA8
IGw7IGkgKysgKSB7CisgICAgICAgIC8vIHZlcnRleCBjb29yZGluYXRlcworICAgICAgICB0aGlz
LnggPSB4OworICAgICAgICB0aGlzLnkgPSB5OwogCi0gICAgICAgICAgICAgICAgdmFyIHZlcnRl
eCA9IHNoYXBlVmVydGljZXNbIGkgXTsKKyAgICAgICAgLy8gcHJldmlvdXMgYW5kIG5leHQgdmVy
dGljZSBub2RlcyBpbiBhIHBvbHlnb24gcmluZworICAgICAgICB0aGlzLnByZXYgPSBudWxsOwor
ICAgICAgICB0aGlzLm5leHQgPSBudWxsOwogCi0gICAgICAgICAgICAgICAgdmVydGljZXMucHVz
aCggdmVydGV4LngsIHZlcnRleC55LCAwICk7Ci0gICAgICAgICAgICAgICAgbm9ybWFscy5wdXNo
KCAwLCAwLCAxICk7Ci0gICAgICAgICAgICAgICAgdXZzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgu
eSApOyAvLyB3b3JsZCB1dnMKKyAgICAgICAgLy8gei1vcmRlciBjdXJ2ZSB2YWx1ZQorICAgICAg
ICB0aGlzLnogPSBudWxsOwogCi0gICAgICAgICAgICB9CisgICAgICAgIC8vIHByZXZpb3VzIGFu
ZCBuZXh0IG5vZGVzIGluIHotb3JkZXIKKyAgICAgICAgdGhpcy5wcmV2WiA9IG51bGw7CisgICAg
ICAgIHRoaXMubmV4dFogPSBudWxsOwogCi0gICAgICAgICAgICAvLyBpbmNpZGVzCisgICAgICAg
IC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50CisgICAgICAgIHRo
aXMuc3RlaW5lciA9IGZhbHNlOwogCi0gICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGZhY2Vz
Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIGZh
Y2UgPSBmYWNlc1sgaSBdOworICAgIGZ1bmN0aW9uIHNpZ25lZEFyZWEoIGRhdGEsIHN0YXJ0LCBl
bmQsIGRpbSApIHsKIAotICAgICAgICAgICAgICAgIHZhciBhID0gZmFjZVsgMCBdICsgaW5kZXhP
ZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdmFyIGIgPSBmYWNlWyAxIF0gKyBpbmRleE9mZnNldDsK
LSAgICAgICAgICAgICAgICB2YXIgYyA9IGZhY2VbIDIgXSArIGluZGV4T2Zmc2V0OworICAgICAg
ICB2YXIgc3VtID0gMDsKIAotICAgICAgICAgICAgICAgIGluZGljZXMucHVzaCggYSwgYiwgYyAp
OwotICAgICAgICAgICAgICAgIGdyb3VwQ291bnQgKz0gMzsKKyAgICAgICAgZm9yICggdmFyIGkg
PSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0gKSB7CiAKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHN1bSArPSAoIGRhdGFbIGogXSAtIGRhdGFbIGkgXSApICogKCBk
YXRhWyBpICsgMSBdICsgZGF0YVsgaiArIDEgXSApOworICAgICAgICAgICAgaiA9IGk7CiAKICAg
ICAgICAgfQogCi0gICAgfQorICAgICAgICByZXR1cm4gc3VtOwogCi0gICAgU2hhcGVCdWZmZXJH
ZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5
cGUgKTsKLSAgICBTaGFwZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNo
YXBlQnVmZmVyR2VvbWV0cnk7CisgICAgfQogCiAgICAgLyoqCi0gICAgICogQGF1dGhvciBXZXN0
TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5Ci0gICAgICogQGF1dGhvciBN
dWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcKKyAgICAgKiBAYXV0aG9yIHp6ODUg
LyBodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nCiAgICAgICovCiAKLSAgICBmdW5j
dGlvbiBFZGdlc0dlb21ldHJ5KCBnZW9tZXRyeSwgdGhyZXNob2xkQW5nbGUgKSB7CisgICAgdmFy
IFNoYXBlVXRpbHMgPSB7CiAKLSAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcyApOwor
ICAgICAgICAvLyBjYWxjdWxhdGUgYXJlYSBvZiB0aGUgY29udG91ciBwb2x5Z29uCiAKLSAgICAg
ICAgdGhpcy50eXBlID0gJ0VkZ2VzR2VvbWV0cnknOworICAgICAgICBhcmVhOiBmdW5jdGlvbiAo
IGNvbnRvdXIgKSB7CiAKLSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAg
dGhyZXNob2xkQW5nbGU6IHRocmVzaG9sZEFuZ2xlCi0gICAgICAgIH07CisgICAgICAgICAgICB2
YXIgbiA9IGNvbnRvdXIubGVuZ3RoOworICAgICAgICAgICAgdmFyIGEgPSAwLjA7CiAKLSAgICAg
ICAgdGhyZXNob2xkQW5nbGUgPSAoIHRocmVzaG9sZEFuZ2xlICE9PSB1bmRlZmluZWQgKSA/IHRo
cmVzaG9sZEFuZ2xlIDogMTsKKyAgICAgICAgICAgIGZvciAoIHZhciBwID0gbiAtIDEsIHEgPSAw
OyBxIDwgbjsgcCA9IHEgKysgKSB7CiAKLSAgICAgICAgLy8gYnVmZmVyCisgICAgICAgICAgICAg
ICAgYSArPSBjb250b3VyWyBwIF0ueCAqIGNvbnRvdXJbIHEgXS55IC0gY29udG91clsgcSBdLngg
KiBjb250b3VyWyBwIF0ueTsKIAotICAgICAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAvLyBoZWxwZXIgdmFyaWFibGVzCisgICAgICAgICAgICByZXR1cm4g
YSAqIDAuNTsKIAotICAgICAgICB2YXIgdGhyZXNob2xkRG90ID0gTWF0aC5jb3MoIF9NYXRoLkRF
RzJSQUQgKiB0aHJlc2hvbGRBbmdsZSApOwotICAgICAgICB2YXIgZWRnZSA9IFsgMCwgMCBdLCBl
ZGdlcyA9IHt9LCBlZGdlMSwgZWRnZTI7Ci0gICAgICAgIHZhciBrZXksIGtleXMgPSBbICdhJywg
J2InLCAnYycgXTsKKyAgICAgICAgfSwKIAotICAgICAgICAvLyBwcmVwYXJlIHNvdXJjZSBnZW9t
ZXRyeQorICAgICAgICBpc0Nsb2NrV2lzZTogZnVuY3Rpb24gKCBwdHMgKSB7CiAKLSAgICAgICAg
dmFyIGdlb21ldHJ5MjsKKyAgICAgICAgICAgIHJldHVybiBTaGFwZVV0aWxzLmFyZWEoIHB0cyAp
IDwgMDsKIAotICAgICAgICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgKSB7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgICAgIGdlb21ldHJ5MiA9IG5ldyBHZW9tZXRyeSgpOwotICAgICAg
ICAgICAgZ2VvbWV0cnkyLmZyb21CdWZmZXJHZW9tZXRyeSggZ2VvbWV0cnkgKTsKKyAgICAgICAg
dHJpYW5ndWxhdGVTaGFwZTogZnVuY3Rpb24gKCBjb250b3VyLCBob2xlcyApIHsKIAotICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gW107IC8vIGZsYXQgYXJyYXkg
b2YgdmVydGljZXMgbGlrZSBbIHgwLHkwLCB4MSx5MSwgeDIseTIsIC4uLiBdCisgICAgICAgICAg
ICB2YXIgaG9sZUluZGljZXMgPSBbXTsgLy8gYXJyYXkgb2YgaG9sZSBpbmRpY2VzCisgICAgICAg
ICAgICB2YXIgZmFjZXMgPSBbXTsgLy8gZmluYWwgYXJyYXkgb2YgdmVydGV4IGluZGljZXMgbGlr
ZSBbIFsgYSxiLGQgXSwgWyBiLGMsZCBdIF0KIAotICAgICAgICAgICAgZ2VvbWV0cnkyID0gZ2Vv
bWV0cnkuY2xvbmUoKTsKKyAgICAgICAgICAgIHJlbW92ZUR1cEVuZFB0cyggY29udG91ciApOwor
ICAgICAgICAgICAgYWRkQ29udG91ciggdmVydGljZXMsIGNvbnRvdXIgKTsKIAotICAgICAgICB9
CisgICAgICAgICAgICAvLwogCi0gICAgICAgIGdlb21ldHJ5Mi5tZXJnZVZlcnRpY2VzKCk7Ci0g
ICAgICAgIGdlb21ldHJ5Mi5jb21wdXRlRmFjZU5vcm1hbHMoKTsKKyAgICAgICAgICAgIHZhciBo
b2xlSW5kZXggPSBjb250b3VyLmxlbmd0aDsKIAotICAgICAgICB2YXIgc291cmNlVmVydGljZXMg
PSBnZW9tZXRyeTIudmVydGljZXM7Ci0gICAgICAgIHZhciBmYWNlcyA9IGdlb21ldHJ5Mi5mYWNl
czsKKyAgICAgICAgICAgIGhvbGVzLmZvckVhY2goIHJlbW92ZUR1cEVuZFB0cyApOwogCi0gICAg
ICAgIC8vIG5vdyBjcmVhdGUgYSBkYXRhIHN0cnVjdHVyZSB3aGVyZSBlYWNoIGVudHJ5IHJlcHJl
c2VudHMgYW4gZWRnZSB3aXRoIGl0cyBhZGpvaW5pbmcgZmFjZXMKKyAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IGhvbGVzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSBmYWNlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICAgICAg
ICAgIGhvbGVJbmRpY2VzLnB1c2goIGhvbGVJbmRleCApOworICAgICAgICAgICAgICAgIGhvbGVJ
bmRleCArPSBob2xlc1sgaSBdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBhZGRDb250b3VyKCB2
ZXJ0aWNlcywgaG9sZXNbIGkgXSApOwogCi0gICAgICAgICAgICB2YXIgZmFjZSA9IGZhY2VzWyBp
IF07CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsgaiA8IDM7
IGogKysgKSB7CisgICAgICAgICAgICAvLwogCi0gICAgICAgICAgICAgICAgZWRnZTEgPSBmYWNl
WyBrZXlzWyBqIF0gXTsKLSAgICAgICAgICAgICAgICBlZGdlMiA9IGZhY2VbIGtleXNbICggaiAr
IDEgKSAlIDMgXSBdOwotICAgICAgICAgICAgICAgIGVkZ2VbIDAgXSA9IE1hdGgubWluKCBlZGdl
MSwgZWRnZTIgKTsKLSAgICAgICAgICAgICAgICBlZGdlWyAxIF0gPSBNYXRoLm1heCggZWRnZTEs
IGVkZ2UyICk7CisgICAgICAgICAgICB2YXIgdHJpYW5nbGVzID0gRWFyY3V0LnRyaWFuZ3VsYXRl
KCB2ZXJ0aWNlcywgaG9sZUluZGljZXMgKTsKIAotICAgICAgICAgICAgICAgIGtleSA9IGVkZ2Vb
IDAgXSArICcsJyArIGVkZ2VbIDEgXTsKKyAgICAgICAgICAgIC8vCiAKLSAgICAgICAgICAgICAg
ICBpZiAoIGVkZ2VzWyBrZXkgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSArPSAzICkgewogCi0gICAgICAgICAg
ICAgICAgICAgIGVkZ2VzWyBrZXkgXSA9IHsgaW5kZXgxOiBlZGdlWyAwIF0sIGluZGV4MjogZWRn
ZVsgMSBdLCBmYWNlMTogaSwgZmFjZTI6IHVuZGVmaW5lZCB9OworICAgICAgICAgICAgICAgIGZh
Y2VzLnB1c2goIHRyaWFuZ2xlcy5zbGljZSggaSwgaSArIDMgKSApOwogCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBlZGdlc1sg
a2V5IF0uZmFjZTIgPSBpOworICAgICAgICAgICAgcmV0dXJuIGZhY2VzOwogCi0gICAgICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICB9OwogCi0gICAgICAgIH0K
KyAgICBmdW5jdGlvbiByZW1vdmVEdXBFbmRQdHMoIHBvaW50cyApIHsKIAotICAgICAgICAvLyBn
ZW5lcmF0ZSB2ZXJ0aWNlcworICAgICAgICB2YXIgbCA9IHBvaW50cy5sZW5ndGg7CiAKLSAgICAg
ICAgZm9yICgga2V5IGluIGVkZ2VzICkgeworICAgICAgICBpZiAoIGwgPiAyICYmIHBvaW50c1sg
bCAtIDEgXS5lcXVhbHMoIHBvaW50c1sgMCBdICkgKSB7CiAKLSAgICAgICAgICAgIHZhciBlID0g
ZWRnZXNbIGtleSBdOworICAgICAgICAgICAgcG9pbnRzLnBvcCgpOwogCi0gICAgICAgICAgICAv
LyBhbiBlZGdlIGlzIG9ubHkgcmVuZGVyZWQgaWYgdGhlIGFuZ2xlIChpbiBkZWdyZWVzKSBiZXR3
ZWVuIHRoZSBmYWNlIG5vcm1hbHMgb2YgdGhlIGFkam9pbmluZyBmYWNlcyBleGNlZWRzIHRoaXMg
dmFsdWUuIGRlZmF1bHQgPSAxIGRlZ3JlZS4KKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
IGUuZmFjZTIgPT09IHVuZGVmaW5lZCB8fCBmYWNlc1sgZS5mYWNlMSBdLm5vcm1hbC5kb3QoIGZh
Y2VzWyBlLmZhY2UyIF0ubm9ybWFsICkgPD0gdGhyZXNob2xkRG90ICkgeworICAgIH0KIAotICAg
ICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBzb3VyY2VWZXJ0aWNlc1sgZS5pbmRleDEgXTsKLSAg
ICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56
ICk7CisgICAgZnVuY3Rpb24gYWRkQ29udG91ciggdmVydGljZXMsIGNvbnRvdXIgKSB7CiAKLSAg
ICAgICAgICAgICAgICB2ZXJ0ZXggPSBzb3VyY2VWZXJ0aWNlc1sgZS5pbmRleDIgXTsKLSAgICAg
ICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7
CisgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvbnRvdXIubGVuZ3RoOyBpICsrICkgewog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCBjb250b3VyWyBpIF0u
eCApOworICAgICAgICAgICAgdmVydGljZXMucHVzaCggY29udG91clsgaSBdLnkgKTsKIAogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gYnVpbGQgZ2VvbWV0cnkKLQotICAgICAgICB0aGlzLmFkZEF0
dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2Vz
LCAzICkgKTsKLQogICAgIH0KIAotICAgIEVkZ2VzR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgRWRnZXNHZW9tZXRyeS5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBFZGdlc0dlb21ldHJ5OwotCiAgICAgLyoqCi0gICAgICog
QGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIE11Z2Vu
ODcgLyBodHRwczovL2dpdGh1Yi5jb20vTXVnZW44NworICAgICAqIEBhdXRob3Igeno4NSAvIGh0
dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKKyAgICAgKgorICAgICAqIENyZWF0ZXMg
ZXh0cnVkZWQgZ2VvbWV0cnkgZnJvbSBhIHBhdGggc2hhcGUuCisgICAgICoKKyAgICAgKiBwYXJh
bWV0ZXJzID0geworICAgICAqCisgICAgICogIGN1cnZlU2VnbWVudHM6IDxpbnQ+LCAvLyBudW1i
ZXIgb2YgcG9pbnRzIG9uIHRoZSBjdXJ2ZXMKKyAgICAgKiAgc3RlcHM6IDxpbnQ+LCAvLyBudW1i
ZXIgb2YgcG9pbnRzIGZvciB6LXNpZGUgZXh0cnVzaW9ucyAvIHVzZWQgZm9yIHN1YmRpdmlkaW5n
IHNlZ21lbnRzIG9mIGV4dHJ1ZGUgc3BsaW5lIHRvbworICAgICAqICBkZXB0aDogPGZsb2F0Piwg
Ly8gRGVwdGggdG8gZXh0cnVkZSB0aGUgc2hhcGUKKyAgICAgKgorICAgICAqICBiZXZlbEVuYWJs
ZWQ6IDxib29sPiwgLy8gdHVybiBvbiBiZXZlbAorICAgICAqICBiZXZlbFRoaWNrbmVzczogPGZs
b2F0PiwgLy8gaG93IGRlZXAgaW50byB0aGUgb3JpZ2luYWwgc2hhcGUgYmV2ZWwgZ29lcworICAg
ICAqICBiZXZlbFNpemU6IDxmbG9hdD4sIC8vIGhvdyBmYXIgZnJvbSBzaGFwZSBvdXRsaW5lIGlz
IGJldmVsCisgICAgICogIGJldmVsU2VnbWVudHM6IDxpbnQ+LCAvLyBudW1iZXIgb2YgYmV2ZWwg
bGF5ZXJzCisgICAgICoKKyAgICAgKiAgZXh0cnVkZVBhdGg6IDxUSFJFRS5DdXJ2ZT4gLy8gY3Vy
dmUgdG8gZXh0cnVkZSBzaGFwZSBhbG9uZworICAgICAqCisgICAgICogIFVWR2VuZXJhdG9yOiA8
T2JqZWN0PiAvLyBvYmplY3QgdGhhdCBwcm92aWRlcyBVViBnZW5lcmF0b3IgZnVuY3Rpb25zCisg
ICAgICoKKyAgICAgKiB9CiAgICAgICovCiAKLSAgICAvLyBDeWxpbmRlckdlb21ldHJ5CisgICAg
Ly8gRXh0cnVkZUdlb21ldHJ5CiAKLSAgICBmdW5jdGlvbiBDeWxpbmRlckdlb21ldHJ5KCByYWRp
dXNUb3AsIHJhZGl1c0JvdHRvbSwgaGVpZ2h0LCByYWRpYWxTZWdtZW50cywgaGVpZ2h0U2VnbWVu
dHMsIG9wZW5FbmRlZCwgdGhldGFTdGFydCwgdGhldGFMZW5ndGggKSB7CisgICAgZnVuY3Rpb24g
RXh0cnVkZUdlb21ldHJ5KCBzaGFwZXMsIG9wdGlvbnMgKSB7CiAKICAgICAgICAgR2VvbWV0cnku
Y2FsbCggdGhpcyApOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdDeWxpbmRlckdlb21ldHJ5JzsK
KyAgICAgICAgdGhpcy50eXBlID0gJ0V4dHJ1ZGVHZW9tZXRyeSc7CiAKICAgICAgICAgdGhpcy5w
YXJhbWV0ZXJzID0gewotICAgICAgICAgICAgcmFkaXVzVG9wOiByYWRpdXNUb3AsCi0gICAgICAg
ICAgICByYWRpdXNCb3R0b206IHJhZGl1c0JvdHRvbSwKLSAgICAgICAgICAgIGhlaWdodDogaGVp
Z2h0LAotICAgICAgICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLAotICAgICAg
ICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgb3BlbkVu
ZGVkOiBvcGVuRW5kZWQsCi0gICAgICAgICAgICB0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LAotICAg
ICAgICAgICAgdGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoCisgICAgICAgICAgICBzaGFwZXM6IHNo
YXBlcywKKyAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMKICAgICAgICAgfTsKIAotICAgICAg
ICB0aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IEN5bGluZGVyQnVmZmVyR2VvbWV0cnkoIHJh
ZGl1c1RvcCwgcmFkaXVzQm90dG9tLCBoZWlnaHQsIHJhZGlhbFNlZ21lbnRzLCBoZWlnaHRTZWdt
ZW50cywgb3BlbkVuZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApICk7CisgICAgICAgIHRo
aXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgRXh0cnVkZUJ1ZmZlckdlb21ldHJ5KCBzaGFwZXMs
IG9wdGlvbnMgKSApOwogICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKIAogICAgIH0KIAot
ICAgIEN5bGluZGVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnku
cHJvdG90eXBlICk7Ci0gICAgQ3lsaW5kZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBDeWxpbmRlckdlb21ldHJ5OworICAgIEV4dHJ1ZGVHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBFeHRydWRlR2VvbWV0cnkucHJv
dG90eXBlLmNvbnN0cnVjdG9yID0gRXh0cnVkZUdlb21ldHJ5OwogCi0gICAgLy8gQ3lsaW5kZXJC
dWZmZXJHZW9tZXRyeQorICAgIEV4dHJ1ZGVHZW9tZXRyeS5wcm90b3R5cGUudG9KU09OID0gZnVu
Y3Rpb24gKCkgewogCi0gICAgZnVuY3Rpb24gQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSggcmFkaXVz
VG9wLCByYWRpdXNCb3R0b20sIGhlaWdodCwgcmFkaWFsU2VnbWVudHMsIGhlaWdodFNlZ21lbnRz
LCBvcGVuRW5kZWQsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgeworICAgICAgICB2YXIgZGF0
YSA9IEdlb21ldHJ5LnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOworCisgICAgICAgIHZh
ciBzaGFwZXMgPSB0aGlzLnBhcmFtZXRlcnMuc2hhcGVzOworICAgICAgICB2YXIgb3B0aW9ucyA9
IHRoaXMucGFyYW1ldGVycy5vcHRpb25zOworCisgICAgICAgIHJldHVybiB0b0pTT04oIHNoYXBl
cywgb3B0aW9ucywgZGF0YSApOworCisgICAgfTsKKworICAgIC8vIEV4dHJ1ZGVCdWZmZXJHZW9t
ZXRyeQorCisgICAgZnVuY3Rpb24gRXh0cnVkZUJ1ZmZlckdlb21ldHJ5KCBzaGFwZXMsIG9wdGlv
bnMgKSB7CiAKICAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcyApOwogCi0gICAgICAg
IHRoaXMudHlwZSA9ICdDeWxpbmRlckJ1ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgdGhpcy50eXBl
ID0gJ0V4dHJ1ZGVCdWZmZXJHZW9tZXRyeSc7CiAKICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0g
ewotICAgICAgICAgICAgcmFkaXVzVG9wOiByYWRpdXNUb3AsCi0gICAgICAgICAgICByYWRpdXNC
b3R0b206IHJhZGl1c0JvdHRvbSwKLSAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAotICAgICAg
ICAgICAgcmFkaWFsU2VnbWVudHM6IHJhZGlhbFNlZ21lbnRzLAotICAgICAgICAgICAgaGVpZ2h0
U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgb3BlbkVuZGVkOiBvcGVuRW5k
ZWQsCi0gICAgICAgICAgICB0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LAotICAgICAgICAgICAgdGhl
dGFMZW5ndGg6IHRoZXRhTGVuZ3RoCisgICAgICAgICAgICBzaGFwZXM6IHNoYXBlcywKKyAgICAg
ICAgICAgIG9wdGlvbnM6IG9wdGlvbnMKICAgICAgICAgfTsKIAorICAgICAgICBzaGFwZXMgPSBB
cnJheS5pc0FycmF5KCBzaGFwZXMgKSA/IHNoYXBlcyA6IFsgc2hhcGVzIF07CisKICAgICAgICAg
dmFyIHNjb3BlID0gdGhpczsKIAotICAgICAgICByYWRpdXNUb3AgPSByYWRpdXNUb3AgIT09IHVu
ZGVmaW5lZCA/IHJhZGl1c1RvcCA6IDIwOwotICAgICAgICByYWRpdXNCb3R0b20gPSByYWRpdXNC
b3R0b20gIT09IHVuZGVmaW5lZCA/IHJhZGl1c0JvdHRvbSA6IDIwOwotICAgICAgICBoZWlnaHQg
PSBoZWlnaHQgIT09IHVuZGVmaW5lZCA/IGhlaWdodCA6IDEwMDsKKyAgICAgICAgdmFyIHZlcnRp
Y2VzQXJyYXkgPSBbXTsKKyAgICAgICAgdmFyIHV2QXJyYXkgPSBbXTsKIAotICAgICAgICByYWRp
YWxTZWdtZW50cyA9IE1hdGguZmxvb3IoIHJhZGlhbFNlZ21lbnRzICkgfHwgODsKLSAgICAgICAg
aGVpZ2h0U2VnbWVudHMgPSBNYXRoLmZsb29yKCBoZWlnaHRTZWdtZW50cyApIHx8IDE7CisgICAg
ICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHNoYXBlcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewog
Ci0gICAgICAgIG9wZW5FbmRlZCA9IG9wZW5FbmRlZCAhPT0gdW5kZWZpbmVkID8gb3BlbkVuZGVk
IDogZmFsc2U7Ci0gICAgICAgIHRoZXRhU3RhcnQgPSB0aGV0YVN0YXJ0ICE9PSB1bmRlZmluZWQg
PyB0aGV0YVN0YXJ0IDogMC4wOwotICAgICAgICB0aGV0YUxlbmd0aCA9IHRoZXRhTGVuZ3RoICE9
PSB1bmRlZmluZWQgPyB0aGV0YUxlbmd0aCA6IDIuMCAqIE1hdGguUEk7CisgICAgICAgICAgICB2
YXIgc2hhcGUgPSBzaGFwZXNbIGkgXTsKKyAgICAgICAgICAgIGFkZFNoYXBlKCBzaGFwZSApOwog
Ci0gICAgICAgIC8vIGJ1ZmZlcnMKKyAgICAgICAgfQogCi0gICAgICAgIHZhciBpbmRpY2VzID0g
W107Ci0gICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOwotICAgICAgICB2YXIgbm9ybWFscyA9IFtd
OwotICAgICAgICB2YXIgdXZzID0gW107CisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CiAKLSAg
ICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bv
c2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzQXJyYXksIDMgKSAp
OworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRy
aWJ1dGUoIHV2QXJyYXksIDIgKSApOwogCi0gICAgICAgIHZhciBpbmRleCA9IDA7Ci0gICAgICAg
IHZhciBpbmRleEFycmF5ID0gW107Ci0gICAgICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8g
MjsKLSAgICAgICAgdmFyIGdyb3VwU3RhcnQgPSAwOworICAgICAgICB0aGlzLmNvbXB1dGVWZXJ0
ZXhOb3JtYWxzKCk7CiAKLSAgICAgICAgLy8gZ2VuZXJhdGUgZ2VvbWV0cnkKKyAgICAgICAgLy8g
ZnVuY3Rpb25zCiAKLSAgICAgICAgZ2VuZXJhdGVUb3JzbygpOworICAgICAgICBmdW5jdGlvbiBh
ZGRTaGFwZSggc2hhcGUgKSB7CiAKLSAgICAgICAgaWYgKCBvcGVuRW5kZWQgPT09IGZhbHNlICkg
eworICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gW107CiAKLSAgICAgICAgICAgIGlmICgg
cmFkaXVzVG9wID4gMCApIGdlbmVyYXRlQ2FwKCB0cnVlICk7Ci0gICAgICAgICAgICBpZiAoIHJh
ZGl1c0JvdHRvbSA+IDAgKSBnZW5lcmF0ZUNhcCggZmFsc2UgKTsKKyAgICAgICAgICAgIC8vIG9w
dGlvbnMKIAotICAgICAgICB9CisgICAgICAgICAgICB2YXIgY3VydmVTZWdtZW50cyA9IG9wdGlv
bnMuY3VydmVTZWdtZW50cyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jdXJ2ZVNlZ21lbnRzIDog
MTI7CisgICAgICAgICAgICB2YXIgc3RlcHMgPSBvcHRpb25zLnN0ZXBzICE9PSB1bmRlZmluZWQg
PyBvcHRpb25zLnN0ZXBzIDogMTsKKyAgICAgICAgICAgIHZhciBkZXB0aCA9IG9wdGlvbnMuZGVw
dGggIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGVwdGggOiAxMDA7CiAKLSAgICAgICAgLy8gYnVp
bGQgZ2VvbWV0cnkKKyAgICAgICAgICAgIHZhciBiZXZlbEVuYWJsZWQgPSBvcHRpb25zLmJldmVs
RW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbEVuYWJsZWQgOiB0cnVlOworICAg
ICAgICAgICAgdmFyIGJldmVsVGhpY2tuZXNzID0gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyAhPT0g
dW5kZWZpbmVkID8gb3B0aW9ucy5iZXZlbFRoaWNrbmVzcyA6IDY7CisgICAgICAgICAgICB2YXIg
YmV2ZWxTaXplID0gb3B0aW9ucy5iZXZlbFNpemUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2
ZWxTaXplIDogYmV2ZWxUaGlja25lc3MgLSAyOworICAgICAgICAgICAgdmFyIGJldmVsU2VnbWVu
dHMgPSBvcHRpb25zLmJldmVsU2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYmV2ZWxT
ZWdtZW50cyA6IDM7CiAKLSAgICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOwotICAgICAg
ICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1
dGUoIHZlcnRpY2VzLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwn
LCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7Ci0gICAgICAgIHRo
aXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAy
ICkgKTsKKyAgICAgICAgICAgIHZhciBleHRydWRlUGF0aCA9IG9wdGlvbnMuZXh0cnVkZVBhdGg7
CiAKLSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUb3JzbygpIHsKKyAgICAgICAgICAgIHZhciB1
dmdlbiA9IG9wdGlvbnMuVVZHZW5lcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuVVZHZW5l
cmF0b3IgOiBXb3JsZFVWR2VuZXJhdG9yOwogCi0gICAgICAgICAgICB2YXIgeCwgeTsKLSAgICAg
ICAgICAgIHZhciBub3JtYWwgPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAgICAgdmFyIHZlcnRl
eCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAvLyBkZXByZWNhdGVkIG9wdGlvbnMKIAot
ICAgICAgICAgICAgdmFyIGdyb3VwQ291bnQgPSAwOworICAgICAgICAgICAgaWYgKCBvcHRpb25z
LmFtb3VudCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAvLyB0aGlzIHdpbGwgYmUg
dXNlZCB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbAotICAgICAgICAgICAgdmFyIHNsb3BlID0gKCBy
YWRpdXNCb3R0b20gLSByYWRpdXNUb3AgKSAvIGhlaWdodDsKKyAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oICdUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiBy
ZW5hbWVkIHRvIGRlcHRoLicgKTsKKyAgICAgICAgICAgICAgICBkZXB0aCA9IG9wdGlvbnMuYW1v
dW50OwogCi0gICAgICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZz
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoIHkgPSAwOyB5IDw9IGhlaWdodFNl
Z21lbnRzOyB5ICsrICkgeworICAgICAgICAgICAgLy8KIAotICAgICAgICAgICAgICAgIHZhciBp
bmRleFJvdyA9IFtdOworICAgICAgICAgICAgdmFyIGV4dHJ1ZGVQdHMsIGV4dHJ1ZGVCeVBhdGgg
PSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBzcGxpbmVUdWJlLCBiaW5vcm1hbCwgbm9ybWFsLCBw
b3NpdGlvbjI7CiAKLSAgICAgICAgICAgICAgICB2YXIgdiA9IHkgLyBoZWlnaHRTZWdtZW50czsK
KyAgICAgICAgICAgIGlmICggZXh0cnVkZVBhdGggKSB7CiAKLSAgICAgICAgICAgICAgICAvLyBj
YWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgY3VycmVudCByb3cKKyAgICAgICAgICAgICAgICBl
eHRydWRlUHRzID0gZXh0cnVkZVBhdGguZ2V0U3BhY2VkUG9pbnRzKCBzdGVwcyApOwogCi0gICAg
ICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHYgKiAoIHJhZGl1c0JvdHRvbSAtIHJhZGl1c1RvcCAp
ICsgcmFkaXVzVG9wOworICAgICAgICAgICAgICAgIGV4dHJ1ZGVCeVBhdGggPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJldmVsRW5hYmxlZCA9IGZhbHNlOyAvLyBiZXZlbHMgbm90IHN1cHBvcnRl
ZCBmb3IgcGF0aCBleHRydXNpb24KIAotICAgICAgICAgICAgICAgIGZvciAoIHggPSAwOyB4IDw9
IHJhZGlhbFNlZ21lbnRzOyB4ICsrICkgeworICAgICAgICAgICAgICAgIC8vIFNFVFVQIFROQiB2
YXJpYWJsZXMKIAotICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IHggLyByYWRpYWxTZWdtZW50
czsKKyAgICAgICAgICAgICAgICAvLyBUT0RPMSAtIGhhdmUgYSAuaXNDbG9zZWQgaW4gc3BsaW5l
PwogCi0gICAgICAgICAgICAgICAgICAgIHZhciB0aGV0YSA9IHUgKiB0aGV0YUxlbmd0aCArIHRo
ZXRhU3RhcnQ7CisgICAgICAgICAgICAgICAgc3BsaW5lVHViZSA9IGV4dHJ1ZGVQYXRoLmNvbXB1
dGVGcmVuZXRGcmFtZXMoIHN0ZXBzLCBmYWxzZSApOwogCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBzaW5UaGV0YSA9IE1hdGguc2luKCB0aGV0YSApOwotICAgICAgICAgICAgICAgICAgICB2YXIg
Y29zVGhldGEgPSBNYXRoLmNvcyggdGhldGEgKTsKKyAgICAgICAgICAgICAgICAvLyBjb25zb2xl
LmxvZyhzcGxpbmVUdWJlLCAnc3BsaW5lVHViZScsIHNwbGluZVR1YmUubm9ybWFscy5sZW5ndGgs
ICdzdGVwcycsIHN0ZXBzLCAnZXh0cnVkZVB0cycsIGV4dHJ1ZGVQdHMubGVuZ3RoKTsKIAotICAg
ICAgICAgICAgICAgICAgICAvLyB2ZXJ0ZXgKKyAgICAgICAgICAgICAgICBiaW5vcm1hbCA9IG5l
dyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKyAg
ICAgICAgICAgICAgICBwb3NpdGlvbjIgPSBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAgICAg
ICAgICAgIHZlcnRleC54ID0gcmFkaXVzICogc2luVGhldGE7Ci0gICAgICAgICAgICAgICAgICAg
IHZlcnRleC55ID0gLSB2ICogaGVpZ2h0ICsgaGFsZkhlaWdodDsKLSAgICAgICAgICAgICAgICAg
ICAgdmVydGV4LnogPSByYWRpdXMgKiBjb3NUaGV0YTsKLSAgICAgICAgICAgICAgICAgICAgdmVy
dGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiApOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbAorICAgICAgICAgICAgLy8gU2FmZWd1
YXJkcyBpZiBiZXZlbHMgYXJlIG5vdCBlbmFibGVkCiAKLSAgICAgICAgICAgICAgICAgICAgbm9y
bWFsLnNldCggc2luVGhldGEsIHNsb3BlLCBjb3NUaGV0YSApLm5vcm1hbGl6ZSgpOwotICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnog
KTsKKyAgICAgICAgICAgIGlmICggISBiZXZlbEVuYWJsZWQgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gdXYKKyAgICAgICAgICAgICAgICBiZXZlbFNlZ21lbnRzID0gMDsKKyAgICAgICAg
ICAgICAgICBiZXZlbFRoaWNrbmVzcyA9IDA7CisgICAgICAgICAgICAgICAgYmV2ZWxTaXplID0g
MDsKIAotICAgICAgICAgICAgICAgICAgICB1dnMucHVzaCggdSwgMSAtIHYgKTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAvLyBzYXZlIGluZGV4IG9mIHZlcnRleCBpbiBy
ZXNwZWN0aXZlIHJvdworICAgICAgICAgICAgLy8gVmFyaWFibGVzIGluaXRpYWxpemF0aW9uCiAK
LSAgICAgICAgICAgICAgICAgICAgaW5kZXhSb3cucHVzaCggaW5kZXggKysgKTsKKyAgICAgICAg
ICAgIHZhciBhaG9sZSwgaCwgaGw7IC8vIGxvb3Bpbmcgb2YgaG9sZXMKIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBzaGFwZVBvaW50cyA9IHNoYXBlLmV4dHJhY3RQb2ludHMo
IGN1cnZlU2VnbWVudHMgKTsKIAotICAgICAgICAgICAgICAgIC8vIG5vdyBzYXZlIHZlcnRpY2Vz
IG9mIHRoZSByb3cgaW4gb3VyIGluZGV4IGFycmF5CisgICAgICAgICAgICB2YXIgdmVydGljZXMg
PSBzaGFwZVBvaW50cy5zaGFwZTsKKyAgICAgICAgICAgIHZhciBob2xlcyA9IHNoYXBlUG9pbnRz
LmhvbGVzOwogCi0gICAgICAgICAgICAgICAgaW5kZXhBcnJheS5wdXNoKCBpbmRleFJvdyApOwor
ICAgICAgICAgICAgdmFyIHJldmVyc2UgPSAhIFNoYXBlVXRpbHMuaXNDbG9ja1dpc2UoIHZlcnRp
Y2VzICk7CisKKyAgICAgICAgICAgIGlmICggcmV2ZXJzZSApIHsKKworICAgICAgICAgICAgICAg
IHZlcnRpY2VzID0gdmVydGljZXMucmV2ZXJzZSgpOworCisgICAgICAgICAgICAgICAgLy8gTWF5
YmUgd2Ugc2hvdWxkIGFsc28gY2hlY2sgaWYgaG9sZXMgYXJlIGluIHRoZSBvcHBvc2l0ZSBkaXJl
Y3Rpb24sIGp1c3QgdG8gYmUgc2FmZSAuLi4KKworICAgICAgICAgICAgICAgIGZvciAoIGggPSAw
LCBobCA9IGhvbGVzLmxlbmd0aDsgaCA8IGhsOyBoICsrICkgeworCisgICAgICAgICAgICAgICAg
ICAgIGFob2xlID0gaG9sZXNbIGggXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIFNoYXBl
VXRpbHMuaXNDbG9ja1dpc2UoIGFob2xlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGhvbGVzWyBoIF0gPSBhaG9sZS5yZXZlcnNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGdl
bmVyYXRlIGluZGljZXMKIAotICAgICAgICAgICAgZm9yICggeCA9IDA7IHggPCByYWRpYWxTZWdt
ZW50czsgeCArKyApIHsKKyAgICAgICAgICAgIHZhciBmYWNlcyA9IFNoYXBlVXRpbHMudHJpYW5n
dWxhdGVTaGFwZSggdmVydGljZXMsIGhvbGVzICk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB5
ID0gMDsgeSA8IGhlaWdodFNlZ21lbnRzOyB5ICsrICkgeworICAgICAgICAgICAgLyogVmVydGlj
ZXMgKi8KIAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgdGhlIGluZGV4IGFycmF5IHRv
IGFjY2VzcyB0aGUgY29ycmVjdCBpbmRpY2VzCisgICAgICAgICAgICB2YXIgY29udG91ciA9IHZl
cnRpY2VzOyAvLyB2ZXJ0aWNlcyBoYXMgYWxsIHBvaW50cyBidXQgY29udG91ciBoYXMgb25seSBw
b2ludHMgb2YgY2lyY3VtZmVyZW5jZQogCi0gICAgICAgICAgICAgICAgICAgIHZhciBhID0gaW5k
ZXhBcnJheVsgeSBdWyB4IF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBiID0gaW5kZXhBcnJh
eVsgeSArIDEgXVsgeCBdOwotICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGluZGV4QXJyYXlb
IHkgKyAxIF1bIHggKyAxIF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkID0gaW5kZXhBcnJh
eVsgeSBdWyB4ICsgMSBdOworICAgICAgICAgICAgZm9yICggaCA9IDAsIGhsID0gaG9sZXMubGVu
Z3RoOyBoIDwgaGw7IGggKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFjZXMKKyAg
ICAgICAgICAgICAgICBhaG9sZSA9IGhvbGVzWyBoIF07CiAKLSAgICAgICAgICAgICAgICAgICAg
aW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7Ci0gICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVz
aCggYiwgYywgZCApOworICAgICAgICAgICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuY29uY2F0
KCBhaG9sZSApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBncm91cCBjb3VudGVy
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBDb3VudCArPSA2Owog
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZnVuY3Rpb24gc2NhbGVQdDIoIHB0LCB2
ZWMsIHNpemUgKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoICEgdmVjICkgY29uc29sZS5lcnJv
ciggIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IiApOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYy5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKCBzaXplICkuYWRk
KCBwdCApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGFkZCBhIGdyb3VwIHRv
IHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRlcmlhbCBzdXBwb3J0Cisg
ICAgICAgICAgICB2YXIgYiwgYnMsIHQsIHosCisgICAgICAgICAgICAgICAgdmVydCwgdmxlbiA9
IHZlcnRpY2VzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICBmYWNlLCBmbGVuID0gZmFjZXMubGVu
Z3RoOwogCi0gICAgICAgICAgICBzY29wZS5hZGRHcm91cCggZ3JvdXBTdGFydCwgZ3JvdXBDb3Vu
dCwgMCApOwogCi0gICAgICAgICAgICAvLyBjYWxjdWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBn
cm91cHMKKyAgICAgICAgICAgIC8vIEZpbmQgZGlyZWN0aW9ucyBmb3IgcG9pbnQgbW92ZW1lbnQK
IAotICAgICAgICAgICAgZ3JvdXBTdGFydCArPSBncm91cENvdW50OwogCi0gICAgICAgIH0KKyAg
ICAgICAgICAgIGZ1bmN0aW9uIGdldEJldmVsVmVjKCBpblB0LCBpblByZXYsIGluTmV4dCApIHsK
IAotICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZUNhcCggdG9wICkgeworICAgICAgICAgICAgICAg
IC8vIGNvbXB1dGVzIGZvciBpblB0IHRoZSBjb3JyZXNwb25kaW5nIHBvaW50IGluUHQnIG9uIGEg
bmV3IGNvbnRvdXIKKyAgICAgICAgICAgICAgICAvLyAgIHNoaWZ0ZWQgYnkgMSB1bml0IChsZW5n
dGggb2Ygbm9ybWFsaXplZCB2ZWN0b3IpIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgLy8g
aWYgd2Ugd2FsayBhbG9uZyBjb250b3VyIGNsb2Nrd2lzZSwgdGhpcyBuZXcgY29udG91ciBpcyBv
dXRzaWRlIHRoZSBvbGQgb25lCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBpblB0JyBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gbGluZXMgcGFyYWxsZWwgdG8g
dGhlIHR3bworICAgICAgICAgICAgICAgIC8vICBhZGphY2VudCBlZGdlcyBvZiBpblB0IGF0IGEg
ZGlzdGFuY2Ugb2YgMSB1bml0IG9uIHRoZSBsZWZ0IHNpZGUuCiAKLSAgICAgICAgICAgIHZhciB4
LCBjZW50ZXJJbmRleFN0YXJ0LCBjZW50ZXJJbmRleEVuZDsKKyAgICAgICAgICAgICAgICB2YXIg
dl90cmFuc194LCB2X3RyYW5zX3ksIHNocmlua19ieTsgLy8gcmVzdWx0aW5nIHRyYW5zbGF0aW9u
IHZlY3RvciBmb3IgaW5QdAogCi0gICAgICAgICAgICB2YXIgdXYgPSBuZXcgVmVjdG9yMigpOwot
ICAgICAgICAgICAgdmFyIHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAg
Ly8gZ29vZCByZWFkaW5nIGZvciBnZW9tZXRyeSBhbGdvcml0aG1zIChoZXJlOiBsaW5lLWxpbmUg
aW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9nZW9tYWxnb3JpdGhtcy5j
b20vYTA1LV9pbnRlcnNlY3QtMS5odG1sCiAKLSAgICAgICAgICAgIHZhciBncm91cENvdW50ID0g
MDsKKyAgICAgICAgICAgICAgICB2YXIgdl9wcmV2X3ggPSBpblB0LnggLSBpblByZXYueCwKKyAg
ICAgICAgICAgICAgICAgICAgdl9wcmV2X3kgPSBpblB0LnkgLSBpblByZXYueTsKKyAgICAgICAg
ICAgICAgICB2YXIgdl9uZXh0X3ggPSBpbk5leHQueCAtIGluUHQueCwKKyAgICAgICAgICAgICAg
ICAgICAgdl9uZXh0X3kgPSBpbk5leHQueSAtIGluUHQueTsKIAotICAgICAgICAgICAgdmFyIHJh
ZGl1cyA9ICggdG9wID09PSB0cnVlICkgPyByYWRpdXNUb3AgOiByYWRpdXNCb3R0b207Ci0gICAg
ICAgICAgICB2YXIgc2lnbiA9ICggdG9wID09PSB0cnVlICkgPyAxIDogLSAxOworICAgICAgICAg
ICAgICAgIHZhciB2X3ByZXZfbGVuc3EgPSAoIHZfcHJldl94ICogdl9wcmV2X3ggKyB2X3ByZXZf
eSAqIHZfcHJldl95ICk7CiAKLSAgICAgICAgICAgIC8vIHNhdmUgdGhlIGluZGV4IG9mIHRoZSBm
aXJzdCBjZW50ZXIgdmVydGV4Ci0gICAgICAgICAgICBjZW50ZXJJbmRleFN0YXJ0ID0gaW5kZXg7
CisgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGNvbGxpbmVhciBlZGdlcworICAgICAgICAg
ICAgICAgIHZhciBjb2xsaW5lYXIwID0gKCB2X3ByZXZfeCAqIHZfbmV4dF95IC0gdl9wcmV2X3kg
KiB2X25leHRfeCApOwogCi0gICAgICAgICAgICAvLyBmaXJzdCB3ZSBnZW5lcmF0ZSB0aGUgY2Vu
dGVyIHZlcnRleCBkYXRhIG9mIHRoZSBjYXAuCi0gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBn
ZW9tZXRyeSBuZWVkcyBvbmUgc2V0IG9mIHV2cyBwZXIgZmFjZSwKLSAgICAgICAgICAgIC8vIHdl
IG11c3QgZ2VuZXJhdGUgYSBjZW50ZXIgdmVydGV4IHBlciBmYWNlL3NlZ21lbnQKKyAgICAgICAg
ICAgICAgICBpZiAoIE1hdGguYWJzKCBjb2xsaW5lYXIwICkgPiBOdW1iZXIuRVBTSUxPTiApIHsK
IAotICAgICAgICAgICAgZm9yICggeCA9IDE7IHggPD0gcmFkaWFsU2VnbWVudHM7IHggKysgKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBjb2xsaW5lYXIKIAotICAgICAgICAgICAgICAg
IC8vIHZlcnRleAorICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGggb2YgdmVjdG9ycyBmb3Ig
bm9ybWFsaXppbmcKIAotICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIDAsIGhhbGZIZWln
aHQgKiBzaWduLCAwICk7CisgICAgICAgICAgICAgICAgICAgIHZhciB2X3ByZXZfbGVuID0gTWF0
aC5zcXJ0KCB2X3ByZXZfbGVuc3EgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZfbmV4dF9s
ZW4gPSBNYXRoLnNxcnQoIHZfbmV4dF94ICogdl9uZXh0X3ggKyB2X25leHRfeSAqIHZfbmV4dF95
ICk7CiAKLSAgICAgICAgICAgICAgICAvLyBub3JtYWwKKyAgICAgICAgICAgICAgICAgICAgLy8g
c2hpZnQgYWRqYWNlbnQgcG9pbnRzIGJ5IHVuaXQgdmVjdG9ycyB0byB0aGUgbGVmdAogCi0gICAg
ICAgICAgICAgICAgbm9ybWFscy5wdXNoKCAwLCBzaWduLCAwICk7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBwdFByZXZTaGlmdF94ID0gKCBpblByZXYueCAtIHZfcHJldl95IC8gdl9wcmV2X2xl
biApOworICAgICAgICAgICAgICAgICAgICB2YXIgcHRQcmV2U2hpZnRfeSA9ICggaW5QcmV2Lnkg
KyB2X3ByZXZfeCAvIHZfcHJldl9sZW4gKTsKIAotICAgICAgICAgICAgICAgIC8vIHV2CisgICAg
ICAgICAgICAgICAgICAgIHZhciBwdE5leHRTaGlmdF94ID0gKCBpbk5leHQueCAtIHZfbmV4dF95
IC8gdl9uZXh0X2xlbiApOworICAgICAgICAgICAgICAgICAgICB2YXIgcHROZXh0U2hpZnRfeSA9
ICggaW5OZXh0LnkgKyB2X25leHRfeCAvIHZfbmV4dF9sZW4gKTsKIAotICAgICAgICAgICAgICAg
IHV2cy5wdXNoKCAwLjUsIDAuNSApOworICAgICAgICAgICAgICAgICAgICAvLyBzY2FsaW5nIGZh
Y3RvciBmb3Igdl9wcmV2IHRvIGludGVyc2VjdGlvbiBwb2ludAogCi0gICAgICAgICAgICAgICAg
Ly8gaW5jcmVhc2UgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNmID0gKCAoIHB0TmV4
dFNoaWZ0X3ggLSBwdFByZXZTaGlmdF94ICkgKiB2X25leHRfeSAtCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCBwdE5leHRTaGlmdF95IC0gcHRQcmV2U2hpZnRfeSApICogdl9uZXh0X3gg
KSAvCisgICAgICAgICAgICAgICAgICAgICAgICAoIHZfcHJldl94ICogdl9uZXh0X3kgLSB2X3By
ZXZfeSAqIHZfbmV4dF94ICk7CiAKLSAgICAgICAgICAgICAgICBpbmRleCArKzsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdmVjdG9yIGZyb20gaW5QdCB0byBpbnRlcnNlY3Rpb24gcG9pbnQKIAot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2X3RyYW5zX3ggPSAoIHB0UHJldlNo
aWZ0X3ggKyB2X3ByZXZfeCAqIHNmIC0gaW5QdC54ICk7CisgICAgICAgICAgICAgICAgICAgIHZf
dHJhbnNfeSA9ICggcHRQcmV2U2hpZnRfeSArIHZfcHJldl95ICogc2YgLSBpblB0LnkgKTsKIAot
ICAgICAgICAgICAgLy8gc2F2ZSB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY2VudGVyIHZlcnRleAor
ICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBub3JtYWxpemUhLCBvdGhlcndpc2Ugc2hhcnAg
Y29ybmVycyBiZWNvbWUgdWdseQorICAgICAgICAgICAgICAgICAgICAvLyAgYnV0IHByZXZlbnQg
Y3Jhenkgc3Bpa2VzCisgICAgICAgICAgICAgICAgICAgIHZhciB2X3RyYW5zX2xlbnNxID0gKCB2
X3RyYW5zX3ggKiB2X3RyYW5zX3ggKyB2X3RyYW5zX3kgKiB2X3RyYW5zX3kgKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCB2X3RyYW5zX2xlbnNxIDw9IDIgKSB7CiAKLSAgICAgICAgICAgIGNl
bnRlckluZGV4RW5kID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IFZlY3RvcjIoIHZfdHJhbnNfeCwgdl90cmFuc195ICk7CiAKLSAgICAgICAgICAgIC8vIG5vdyB3
ZSBnZW5lcmF0ZSB0aGUgc3Vycm91bmRpbmcgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2cworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBmb3IgKCB4ID0gMDsgeCA8
PSByYWRpYWxTZWdtZW50czsgeCArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNocmlu
a19ieSA9IE1hdGguc3FydCggdl90cmFuc19sZW5zcSAvIDIgKTsKIAotICAgICAgICAgICAgICAg
IHZhciB1ID0geCAvIHJhZGlhbFNlZ21lbnRzOwotICAgICAgICAgICAgICAgIHZhciB0aGV0YSA9
IHUgKiB0aGV0YUxlbmd0aCArIHRoZXRhU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIHZhciBjb3NUaGV0YSA9IE1hdGguY29zKCB0aGV0YSApOwotICAgICAg
ICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc2luKCB0aGV0YSApOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAvLyB2ZXJ0ZXgKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZSBvZiBjb2xsaW5lYXIgZWRnZXMKIAotICAgICAg
ICAgICAgICAgIHZlcnRleC54ID0gcmFkaXVzICogc2luVGhldGE7Ci0gICAgICAgICAgICAgICAg
dmVydGV4LnkgPSBoYWxmSGVpZ2h0ICogc2lnbjsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9
IHJhZGl1cyAqIGNvc1RoZXRhOwotICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRl
eC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRpcmVj
dGlvbl9lcSA9IGZhbHNlOyAvLyBhc3N1bWVzOiBvcHBvc2l0ZQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIHZfcHJldl94ID4gTnVtYmVyLkVQU0lMT04gKSB7CiAKLSAgICAgICAgICAgICAgICAv
LyBub3JtYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdl9uZXh0X3ggPiBOdW1iZXIu
RVBTSUxPTiApIHsKIAotICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCggMCwgc2lnbiwgMCAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbl9lcSA9IHRydWU7CiAKLSAg
ICAgICAgICAgICAgICAvLyB1dgorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdXYueCA9ICggY29zVGhldGEgKiAwLjUgKSArIDAuNTsKLSAgICAgICAgICAgICAg
ICB1di55ID0gKCBzaW5UaGV0YSAqIDAuNSAqIHNpZ24gKSArIDAuNTsKLSAgICAgICAgICAgICAg
ICB1dnMucHVzaCggdXYueCwgdXYueSApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
Ci0gICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdl9wcmV2X3ggPCAtIE51bWJlci5FUFNJTE9OICkgewogCi0gICAgICAgICAgICAg
ICAgaW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2X25leHRfeCA8
IC0gTnVtYmVyLkVQU0lMT04gKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlyZWN0aW9uX2VxID0gdHJ1ZTsKIAotICAgICAgICAgICAgLy8gZ2Vu
ZXJhdGUgaW5kaWNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgZm9yICggeCA9IDA7IHggPCByYWRpYWxTZWdtZW50czsgeCArKyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgYyA9IGNlbnRlcklu
ZGV4U3RhcnQgKyB4OwotICAgICAgICAgICAgICAgIHZhciBpID0gY2VudGVySW5kZXhFbmQgKyB4
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggTWF0aC5zaWduKCB2X3ByZXZfeSAp
ID09PSBNYXRoLnNpZ24oIHZfbmV4dF95ICkgKSB7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRv
cCA9PT0gdHJ1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9u
X2VxID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBmYWNlIHRvcAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2go
IGksIGkgKyAxLCBjICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gZmFjZSBib3R0b20KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkaXJlY3Rpb25fZXEg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBpICsgMSwgaSwgYyApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIldhcm5pbmc6IGxpbmVzIGFy
ZSBhIHN0cmFpZ2h0IHNlcXVlbmNlIik7CisgICAgICAgICAgICAgICAgICAgICAgICB2X3RyYW5z
X3ggPSAtIHZfcHJldl95OworICAgICAgICAgICAgICAgICAgICAgICAgdl90cmFuc195ID0gdl9w
cmV2X3g7CisgICAgICAgICAgICAgICAgICAgICAgICBzaHJpbmtfYnkgPSBNYXRoLnNxcnQoIHZf
cHJldl9sZW5zcSApOworCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCJXYXJuaW5nOiBsaW5lcyBhcmUgYSBzdHJh
aWdodCBzcGlrZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdl90cmFuc194ID0gdl9wcmV2
X3g7CisgICAgICAgICAgICAgICAgICAgICAgICB2X3RyYW5zX3kgPSB2X3ByZXZfeTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNocmlua19ieSA9IE1hdGguc3FydCggdl9wcmV2X2xlbnNxIC8g
MiApOworCisgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGdyb3VwQ291bnQgKz0gMzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IFZlY3RvcjIoIHZfdHJhbnNfeCAvIHNocmlua19ieSwgdl90cmFuc195IC8gc2hyaW5rX2J5ICk7
CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gYWRkIGEgZ3JvdXAgdG8gdGhlIGdl
b21ldHJ5LiB0aGlzIHdpbGwgZW5zdXJlIG11bHRpIG1hdGVyaWFsIHN1cHBvcnQKIAotICAgICAg
ICAgICAgc2NvcGUuYWRkR3JvdXAoIGdyb3VwU3RhcnQsIGdyb3VwQ291bnQsIHRvcCA9PT0gdHJ1
ZSA/IDEgOiAyICk7CisgICAgICAgICAgICB2YXIgY29udG91ck1vdmVtZW50cyA9IFtdOwogCi0g
ICAgICAgICAgICAvLyBjYWxjdWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBncm91cHMKKyAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjb250b3VyLmxlbmd0aCwgaiA9IGlsIC0gMSwg
ayA9IGkgKyAxOyBpIDwgaWw7IGkgKyssIGogKyssIGsgKysgKSB7CiAKLSAgICAgICAgICAgIGdy
b3VwU3RhcnQgKz0gZ3JvdXBDb3VudDsKKyAgICAgICAgICAgICAgICBpZiAoIGogPT09IGlsICkg
aiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCBrID09PSBpbCApIGsgPSAwOwogCi0gICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyAgKGopLS0tKGkpLS0tKGspCisgICAgICAgICAgICAgICAg
Ly8gY29uc29sZS5sb2coJ2ksaixrJywgaSwgaiAsIGspCiAKLSAgICB9CisgICAgICAgICAgICAg
ICAgY29udG91ck1vdmVtZW50c1sgaSBdID0gZ2V0QmV2ZWxWZWMoIGNvbnRvdXJbIGkgXSwgY29u
dG91clsgaiBdLCBjb250b3VyWyBrIF0gKTsKIAotICAgIEN5bGluZGVyQnVmZmVyR2VvbWV0cnku
cHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7Ci0g
ICAgQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDeWxpbmRl
ckJ1ZmZlckdlb21ldHJ5OworICAgICAgICAgICAgfQogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBhYmVsbmF0aW9uIC8gaHR0cDovL2dpdGh1Yi5jb20vYWJlbG5hdGlvbgotICAgICAqLworICAg
ICAgICAgICAgdmFyIGhvbGVzTW92ZW1lbnRzID0gW10sCisgICAgICAgICAgICAgICAgb25lSG9s
ZU1vdmVtZW50cywgdmVydGljZXNNb3ZlbWVudHMgPSBjb250b3VyTW92ZW1lbnRzLmNvbmNhdCgp
OwogCi0gICAgLy8gQ29uZUdlb21ldHJ5CisgICAgICAgICAgICBmb3IgKCBoID0gMCwgaGwgPSBo
b2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyApIHsKIAotICAgIGZ1bmN0aW9uIENvbmVHZW9tZXRy
eSggcmFkaXVzLCBoZWlnaHQsIHJhZGlhbFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywgb3BlbkVu
ZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBhaG9sZSA9
IGhvbGVzWyBoIF07CiAKLSAgICAgICAgQ3lsaW5kZXJHZW9tZXRyeS5jYWxsKCB0aGlzLCAwLCBy
YWRpdXMsIGhlaWdodCwgcmFkaWFsU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBvcGVuRW5kZWQs
IHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICk7CisgICAgICAgICAgICAgICAgb25lSG9sZU1vdmVt
ZW50cyA9IFtdOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdDb25lR2VvbWV0cnknOworICAgICAg
ICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGFob2xlLmxlbmd0aCwgaiA9IGlsIC0gMSwgayA9
IGkgKyAxOyBpIDwgaWw7IGkgKyssIGogKyssIGsgKysgKSB7CiAKLSAgICAgICAgdGhpcy5wYXJh
bWV0ZXJzID0gewotICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCi0gICAgICAgICAgICBoZWln
aHQ6IGhlaWdodCwKLSAgICAgICAgICAgIHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cywK
LSAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50cywKLSAgICAgICAgICAg
IG9wZW5FbmRlZDogb3BlbkVuZGVkLAotICAgICAgICAgICAgdGhldGFTdGFydDogdGhldGFTdGFy
dCwKLSAgICAgICAgICAgIHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aAotICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICBpZiAoIGogPT09IGlsICkgaiA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggayA9PT0gaWwgKSBrID0gMDsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Ly8gIChqKS0tLShpKS0tLShrKQorICAgICAgICAgICAgICAgICAgICBvbmVIb2xlTW92ZW1lbnRz
WyBpIF0gPSBnZXRCZXZlbFZlYyggYWhvbGVbIGkgXSwgYWhvbGVbIGogXSwgYWhvbGVbIGsgXSAp
OwogCi0gICAgQ29uZUdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN5bGluZGVy
R2VvbWV0cnkucHJvdG90eXBlICk7Ci0gICAgQ29uZUdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IENvbmVHZW9tZXRyeTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAvLyBDb25lQnVm
ZmVyR2VvbWV0cnkKKyAgICAgICAgICAgICAgICBob2xlc01vdmVtZW50cy5wdXNoKCBvbmVIb2xl
TW92ZW1lbnRzICk7CisgICAgICAgICAgICAgICAgdmVydGljZXNNb3ZlbWVudHMgPSB2ZXJ0aWNl
c01vdmVtZW50cy5jb25jYXQoIG9uZUhvbGVNb3ZlbWVudHMgKTsKIAotICAgIGZ1bmN0aW9uIENv
bmVCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCBoZWlnaHQsIHJhZGlhbFNlZ21lbnRzLCBoZWlnaHRT
ZWdtZW50cywgb3BlbkVuZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApIHsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMsIDAsIHJh
ZGl1cywgaGVpZ2h0LCByYWRpYWxTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIG9wZW5FbmRlZCwg
dGhldGFTdGFydCwgdGhldGFMZW5ndGggKTsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnQ29uZUJ1
ZmZlckdlb21ldHJ5JzsKKyAgICAgICAgICAgIC8vIExvb3AgYmV2ZWxTZWdtZW50cywgMSBmb3Ig
dGhlIGZyb250LCAxIGZvciB0aGUgYmFjawogCi0gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsK
LSAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAotICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQs
Ci0gICAgICAgICAgICByYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsCi0gICAgICAgICAg
ICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsCi0gICAgICAgICAgICBvcGVuRW5kZWQ6
IG9wZW5FbmRlZCwKLSAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCi0gICAgICAg
ICAgICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKLSAgICAgICAgfTsKKyAgICAgICAgICAgIGZv
ciAoIGIgPSAwOyBiIDwgYmV2ZWxTZWdtZW50czsgYiArKyApIHsKIAotICAgIH0KKyAgICAgICAg
ICAgICAgICAvL2ZvciAoIGIgPSBiZXZlbFNlZ21lbnRzOyBiID4gMDsgYiAtLSApIHsKIAotICAg
IENvbmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDeWxpbmRlckJ1
ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOwotICAgIENvbmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5
cGUuY29uc3RydWN0b3IgPSBDb25lQnVmZmVyR2VvbWV0cnk7CisgICAgICAgICAgICAgICAgdCA9
IGIgLyBiZXZlbFNlZ21lbnRzOworICAgICAgICAgICAgICAgIHogPSBiZXZlbFRoaWNrbmVzcyAq
IE1hdGguY29zKCB0ICogTWF0aC5QSSAvIDIgKTsKKyAgICAgICAgICAgICAgICBicyA9IGJldmVs
U2l6ZSAqIE1hdGguc2luKCB0ICogTWF0aC5QSSAvIDIgKTsKIAotICAgIC8qKgotICAgICAqIEBh
dXRob3IgYmVuYWFkYW1zIC8gaHR0cHM6Ly90d2l0dGVyLmNvbS9iZW5fYV9hZGFtcwotICAgICAq
IEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3Ci0gICAgICogQGF1
dGhvciBodWdoZXMKLSAgICAgKi8KKyAgICAgICAgICAgICAgICAvLyBjb250cmFjdCBzaGFwZQog
Ci0gICAgLy8gQ2lyY2xlR2VvbWV0cnkKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwg
PSBjb250b3VyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgZnVuY3Rpb24gQ2lyY2xl
R2VvbWV0cnkoIHJhZGl1cywgc2VnbWVudHMsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ID0gc2NhbGVQdDIoIGNvbnRvdXJbIGkgXSwgY29udG91
ck1vdmVtZW50c1sgaSBdLCBicyApOwogCi0gICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsK
KyAgICAgICAgICAgICAgICAgICAgdiggdmVydC54LCB2ZXJ0LnksIC0geiApOwogCi0gICAgICAg
IHRoaXMudHlwZSA9ICdDaXJjbGVHZW9tZXRyeSc7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgIHRoaXMucGFyYW1ldGVycyA9IHsKLSAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAotICAg
ICAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRzLAotICAgICAgICAgICAgdGhldGFTdGFydDogdGhl
dGFTdGFydCwKLSAgICAgICAgICAgIHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aAotICAgICAgICB9
OworICAgICAgICAgICAgICAgIC8vIGV4cGFuZCBob2xlcwogCi0gICAgICAgIHRoaXMuZnJvbUJ1
ZmZlckdlb21ldHJ5KCBuZXcgQ2lyY2xlQnVmZmVyR2VvbWV0cnkoIHJhZGl1cywgc2VnbWVudHMs
IHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgKTsKLSAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2Vz
KCk7CisgICAgICAgICAgICAgICAgZm9yICggaCA9IDAsIGhsID0gaG9sZXMubGVuZ3RoOyBoIDwg
aGw7IGggKysgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAgIGFob2xlID0gaG9sZXNb
IGggXTsKKyAgICAgICAgICAgICAgICAgICAgb25lSG9sZU1vdmVtZW50cyA9IGhvbGVzTW92ZW1l
bnRzWyBoIF07CiAKLSAgICBDaXJjbGVHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKLSAgICBDaXJjbGVHZW9tZXRyeS5wcm90b3R5cGUuY29u
c3RydWN0b3IgPSBDaXJjbGVHZW9tZXRyeTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9
IDAsIGlsID0gYWhvbGUubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAvLyBDaXJjbGVC
dWZmZXJHZW9tZXRyeQorICAgICAgICAgICAgICAgICAgICAgICAgdmVydCA9IHNjYWxlUHQyKCBh
aG9sZVsgaSBdLCBvbmVIb2xlTW92ZW1lbnRzWyBpIF0sIGJzICk7CiAKLSAgICBmdW5jdGlvbiBD
aXJjbGVCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCBzZWdtZW50cywgdGhldGFTdGFydCwgdGhldGFM
ZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2KCB2ZXJ0LngsIHZlcnQueSwgLSB6
ICk7CiAKLSAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcyApOworICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0NpcmNsZUJ1ZmZlckdlb21ldHJ5JzsK
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gewotICAgICAg
ICAgICAgcmFkaXVzOiByYWRpdXMsCi0gICAgICAgICAgICBzZWdtZW50czogc2VnbWVudHMsCi0g
ICAgICAgICAgICB0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LAotICAgICAgICAgICAgdGhldGFMZW5n
dGg6IHRoZXRhTGVuZ3RoCi0gICAgICAgIH07CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmFk
aXVzID0gcmFkaXVzIHx8IDUwOwotICAgICAgICBzZWdtZW50cyA9IHNlZ21lbnRzICE9PSB1bmRl
ZmluZWQgPyBNYXRoLm1heCggMywgc2VnbWVudHMgKSA6IDg7CisgICAgICAgICAgICBicyA9IGJl
dmVsU2l6ZTsKIAotICAgICAgICB0aGV0YVN0YXJ0ID0gdGhldGFTdGFydCAhPT0gdW5kZWZpbmVk
ID8gdGhldGFTdGFydCA6IDA7Ci0gICAgICAgIHRoZXRhTGVuZ3RoID0gdGhldGFMZW5ndGggIT09
IHVuZGVmaW5lZCA/IHRoZXRhTGVuZ3RoIDogTWF0aC5QSSAqIDI7CisgICAgICAgICAgICAvLyBC
YWNrIGZhY2luZyB2ZXJ0aWNlcwogCi0gICAgICAgIC8vIGJ1ZmZlcnMKKyAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBpIDwgdmxlbjsgaSArKyApIHsKIAotICAgICAgICB2YXIgaW5kaWNlcyA9IFtd
OwotICAgICAgICB2YXIgdmVydGljZXMgPSBbXTsKLSAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsK
LSAgICAgICAgdmFyIHV2cyA9IFtdOworICAgICAgICAgICAgICAgIHZlcnQgPSBiZXZlbEVuYWJs
ZWQgPyBzY2FsZVB0MiggdmVydGljZXNbIGkgXSwgdmVydGljZXNNb3ZlbWVudHNbIGkgXSwgYnMg
KSA6IHZlcnRpY2VzWyBpIF07CiAKLSAgICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcworICAgICAg
ICAgICAgICAgIGlmICggISBleHRydWRlQnlQYXRoICkgewogCi0gICAgICAgIHZhciBpLCBzOwot
ICAgICAgICB2YXIgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTsKLSAgICAgICAgdmFyIHV2ID0gbmV3
IFZlY3RvcjIoKTsKKyAgICAgICAgICAgICAgICAgICAgdiggdmVydC54LCB2ZXJ0LnksIDAgKTsK
IAotICAgICAgICAvLyBjZW50ZXIgcG9pbnQKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0g
ICAgICAgIHZlcnRpY2VzLnB1c2goIDAsIDAsIDAgKTsKLSAgICAgICAgbm9ybWFscy5wdXNoKCAw
LCAwLCAxICk7Ci0gICAgICAgIHV2cy5wdXNoKCAwLjUsIDAuNSApOworICAgICAgICAgICAgICAg
ICAgICAvLyB2KCB2ZXJ0LngsIHZlcnQueSArIGV4dHJ1ZGVQdHNbIDAgXS55LCBleHRydWRlUHRz
WyAwIF0ueCApOwogCi0gICAgICAgIGZvciAoIHMgPSAwLCBpID0gMzsgcyA8PSBzZWdtZW50czsg
cyArKywgaSArPSAzICkgeworICAgICAgICAgICAgICAgICAgICBub3JtYWwuY29weSggc3BsaW5l
VHViZS5ub3JtYWxzWyAwIF0gKS5tdWx0aXBseVNjYWxhciggdmVydC54ICk7CisgICAgICAgICAg
ICAgICAgICAgIGJpbm9ybWFsLmNvcHkoIHNwbGluZVR1YmUuYmlub3JtYWxzWyAwIF0gKS5tdWx0
aXBseVNjYWxhciggdmVydC55ICk7CiAKLSAgICAgICAgICAgIHZhciBzZWdtZW50ID0gdGhldGFT
dGFydCArIHMgLyBzZWdtZW50cyAqIHRoZXRhTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBw
b3NpdGlvbjIuY29weSggZXh0cnVkZVB0c1sgMCBdICkuYWRkKCBub3JtYWwgKS5hZGQoIGJpbm9y
bWFsICk7CiAKLSAgICAgICAgICAgIC8vIHZlcnRleAorICAgICAgICAgICAgICAgICAgICB2KCBw
b3NpdGlvbjIueCwgcG9zaXRpb24yLnksIHBvc2l0aW9uMi56ICk7CiAKLSAgICAgICAgICAgIHZl
cnRleC54ID0gcmFkaXVzICogTWF0aC5jb3MoIHNlZ21lbnQgKTsKLSAgICAgICAgICAgIHZlcnRl
eC55ID0gcmFkaXVzICogTWF0aC5zaW4oIHNlZ21lbnQgKTsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4Lnog
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gbm9ybWFsCisgICAgICAgICAgICAv
LyBBZGQgc3RlcHBlZCB2ZXJ0aWNlcy4uLgorICAgICAgICAgICAgLy8gSW5jbHVkaW5nIGZyb250
IGZhY2luZyB2ZXJ0aWNlcwogCi0gICAgICAgICAgICBub3JtYWxzLnB1c2goIDAsIDAsIDEgKTsK
KyAgICAgICAgICAgIHZhciBzOwogCi0gICAgICAgICAgICAvLyB1dnMKKyAgICAgICAgICAgIGZv
ciAoIHMgPSAxOyBzIDw9IHN0ZXBzOyBzICsrICkgewogCi0gICAgICAgICAgICB1di54ID0gKCB2
ZXJ0aWNlc1sgaSBdIC8gcmFkaXVzICsgMSApIC8gMjsKLSAgICAgICAgICAgIHV2LnkgPSAoIHZl
cnRpY2VzWyBpICsgMSBdIC8gcmFkaXVzICsgMSApIC8gMjsKKyAgICAgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgaSA8IHZsZW47IGkgKysgKSB7CiAKLSAgICAgICAgICAgIHV2cy5wdXNoKCB1di54
LCB1di55ICk7CisgICAgICAgICAgICAgICAgICAgIHZlcnQgPSBiZXZlbEVuYWJsZWQgPyBzY2Fs
ZVB0MiggdmVydGljZXNbIGkgXSwgdmVydGljZXNNb3ZlbWVudHNbIGkgXSwgYnMgKSA6IHZlcnRp
Y2VzWyBpIF07CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoICEgZXh0cnVk
ZUJ5UGF0aCApIHsKIAotICAgICAgICAvLyBpbmRpY2VzCisgICAgICAgICAgICAgICAgICAgICAg
ICB2KCB2ZXJ0LngsIHZlcnQueSwgZGVwdGggLyBzdGVwcyAqIHMgKTsKIAotICAgICAgICBmb3Ig
KCBpID0gMTsgaSA8PSBzZWdtZW50czsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKIAotICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBpLCBpICsgMSwgMCApOworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdiggdmVydC54LCB2ZXJ0LnkgKyBleHRydWRlUHRzWyBzIC0g
MSBdLnksIGV4dHJ1ZGVQdHNbIHMgLSAxIF0ueCApOwogCi0gICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbC5jb3B5KCBzcGxpbmVUdWJlLm5vcm1hbHNbIHMgXSApLm11bHRp
cGx5U2NhbGFyKCB2ZXJ0LnggKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpbm9ybWFsLmNv
cHkoIHNwbGluZVR1YmUuYmlub3JtYWxzWyBzIF0gKS5tdWx0aXBseVNjYWxhciggdmVydC55ICk7
CiAKLSAgICAgICAgLy8gYnVpbGQgZ2VvbWV0cnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9uMi5jb3B5KCBleHRydWRlUHRzWyBzIF0gKS5hZGQoIG5vcm1hbCApLmFkZCggYmlub3Jt
YWwgKTsKIAotICAgICAgICB0aGlzLnNldEluZGV4KCBpbmRpY2VzICk7Ci0gICAgICAgIHRoaXMu
YWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVy
dGljZXMsIDMgKSApOwotICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBG
bG9hdDMyQnVmZmVyQXR0cmlidXRlKCBub3JtYWxzLCAzICkgKTsKLSAgICAgICAgdGhpcy5hZGRB
dHRyaWJ1dGUoICd1dicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdiggcG9zaXRpb24yLngsIHBvc2l0aW9uMi55LCBwb3Np
dGlvbjIueiApOwogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICBDaXJjbGVC
dWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5w
cm90b3R5cGUgKTsKLSAgICBDaXJjbGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBDaXJjbGVCdWZmZXJHZW9tZXRyeTsKKyAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAg
ICAgIH0KIAogCi0gICAgdmFyIEdlb21ldHJpZXMgPSBPYmplY3QuZnJlZXplKHsKLSAgICAgICAg
V2lyZWZyYW1lR2VvbWV0cnk6IFdpcmVmcmFtZUdlb21ldHJ5LAotICAgICAgICBQYXJhbWV0cmlj
R2VvbWV0cnk6IFBhcmFtZXRyaWNHZW9tZXRyeSwKLSAgICAgICAgUGFyYW1ldHJpY0J1ZmZlckdl
b21ldHJ5OiBQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnksCi0gICAgICAgIFRldHJhaGVkcm9uR2Vv
bWV0cnk6IFRldHJhaGVkcm9uR2VvbWV0cnksCi0gICAgICAgIFRldHJhaGVkcm9uQnVmZmVyR2Vv
bWV0cnk6IFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnksCi0gICAgICAgIE9jdGFoZWRyb25HZW9t
ZXRyeTogT2N0YWhlZHJvbkdlb21ldHJ5LAotICAgICAgICBPY3RhaGVkcm9uQnVmZmVyR2VvbWV0
cnk6IE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgSWNvc2FoZWRyb25HZW9tZXRy
eTogSWNvc2FoZWRyb25HZW9tZXRyeSwKLSAgICAgICAgSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRy
eTogSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgRG9kZWNhaGVkcm9uR2VvbWV0
cnk6IERvZGVjYWhlZHJvbkdlb21ldHJ5LAotICAgICAgICBEb2RlY2FoZWRyb25CdWZmZXJHZW9t
ZXRyeTogRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnksCi0gICAgICAgIFBvbHloZWRyb25HZW9t
ZXRyeTogUG9seWhlZHJvbkdlb21ldHJ5LAotICAgICAgICBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0
cnk6IFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgVHViZUdlb21ldHJ5OiBUdWJl
R2VvbWV0cnksCi0gICAgICAgIFR1YmVCdWZmZXJHZW9tZXRyeTogVHViZUJ1ZmZlckdlb21ldHJ5
LAotICAgICAgICBUb3J1c0tub3RHZW9tZXRyeTogVG9ydXNLbm90R2VvbWV0cnksCi0gICAgICAg
IFRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5OiBUb3J1c0tub3RCdWZmZXJHZW9tZXRyeSwKLSAgICAg
ICAgVG9ydXNHZW9tZXRyeTogVG9ydXNHZW9tZXRyeSwKLSAgICAgICAgVG9ydXNCdWZmZXJHZW9t
ZXRyeTogVG9ydXNCdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgVGV4dEdlb21ldHJ5OiBUZXh0R2Vv
bWV0cnksCi0gICAgICAgIFRleHRCdWZmZXJHZW9tZXRyeTogVGV4dEJ1ZmZlckdlb21ldHJ5LAot
ICAgICAgICBTcGhlcmVHZW9tZXRyeTogU3BoZXJlR2VvbWV0cnksCi0gICAgICAgIFNwaGVyZUJ1
ZmZlckdlb21ldHJ5OiBTcGhlcmVCdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgUmluZ0dlb21ldHJ5
OiBSaW5nR2VvbWV0cnksCi0gICAgICAgIFJpbmdCdWZmZXJHZW9tZXRyeTogUmluZ0J1ZmZlckdl
b21ldHJ5LAotICAgICAgICBQbGFuZUdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5LAotICAgICAgICBQ
bGFuZUJ1ZmZlckdlb21ldHJ5OiBQbGFuZUJ1ZmZlckdlb21ldHJ5LAotICAgICAgICBMYXRoZUdl
b21ldHJ5OiBMYXRoZUdlb21ldHJ5LAotICAgICAgICBMYXRoZUJ1ZmZlckdlb21ldHJ5OiBMYXRo
ZUJ1ZmZlckdlb21ldHJ5LAotICAgICAgICBTaGFwZUdlb21ldHJ5OiBTaGFwZUdlb21ldHJ5LAot
ICAgICAgICBTaGFwZUJ1ZmZlckdlb21ldHJ5OiBTaGFwZUJ1ZmZlckdlb21ldHJ5LAotICAgICAg
ICBFeHRydWRlR2VvbWV0cnk6IEV4dHJ1ZGVHZW9tZXRyeSwKLSAgICAgICAgRXh0cnVkZUJ1ZmZl
ckdlb21ldHJ5OiBFeHRydWRlQnVmZmVyR2VvbWV0cnksCi0gICAgICAgIEVkZ2VzR2VvbWV0cnk6
IEVkZ2VzR2VvbWV0cnksCi0gICAgICAgIENvbmVHZW9tZXRyeTogQ29uZUdlb21ldHJ5LAotICAg
ICAgICBDb25lQnVmZmVyR2VvbWV0cnk6IENvbmVCdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgQ3ls
aW5kZXJHZW9tZXRyeTogQ3lsaW5kZXJHZW9tZXRyeSwKLSAgICAgICAgQ3lsaW5kZXJCdWZmZXJH
ZW9tZXRyeTogQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSwKLSAgICAgICAgQ2lyY2xlR2VvbWV0cnk6
IENpcmNsZUdlb21ldHJ5LAotICAgICAgICBDaXJjbGVCdWZmZXJHZW9tZXRyeTogQ2lyY2xlQnVm
ZmVyR2VvbWV0cnksCi0gICAgICAgIEJveEdlb21ldHJ5OiBCb3hHZW9tZXRyeSwKLSAgICAgICAg
Qm94QnVmZmVyR2VvbWV0cnk6IEJveEJ1ZmZlckdlb21ldHJ5Ci0gICAgfSk7CisgICAgICAgICAg
ICAvLyBBZGQgYmV2ZWwgc2VnbWVudHMgcGxhbmVzCiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9y
IG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqCi0gICAgICogcGFyYW1ldGVycyA9
IHsKLSAgICAgKiAgb3BhY2l0eTogPGZsb2F0PgotICAgICAqIH0KLSAgICAgKi8KKyAgICAgICAg
ICAgIC8vZm9yICggYiA9IDE7IGIgPD0gYmV2ZWxTZWdtZW50czsgYiArKyApIHsKKyAgICAgICAg
ICAgIGZvciAoIGIgPSBiZXZlbFNlZ21lbnRzIC0gMTsgYiA+PSAwOyBiIC0tICkgewogCi0gICAg
ZnVuY3Rpb24gU2hhZG93TWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CisgICAgICAgICAgICAgICAg
dCA9IGIgLyBiZXZlbFNlZ21lbnRzOworICAgICAgICAgICAgICAgIHogPSBiZXZlbFRoaWNrbmVz
cyAqIE1hdGguY29zKCB0ICogTWF0aC5QSSAvIDIgKTsKKyAgICAgICAgICAgICAgICBicyA9IGJl
dmVsU2l6ZSAqIE1hdGguc2luKCB0ICogTWF0aC5QSSAvIDIgKTsKKworICAgICAgICAgICAgICAg
IC8vIGNvbnRyYWN0IHNoYXBlCisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgaWwgPSBj
b250b3VyLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgICAgIHZl
cnQgPSBzY2FsZVB0MiggY29udG91clsgaSBdLCBjb250b3VyTW92ZW1lbnRzWyBpIF0sIGJzICk7
CisgICAgICAgICAgICAgICAgICAgIHYoIHZlcnQueCwgdmVydC55LCBkZXB0aCArIHogKTsKIAot
ICAgICAgICBTaGFkZXJNYXRlcmlhbC5jYWxsKCB0aGlzLCB7Ci0gICAgICAgICAgICB1bmlmb3Jt
czogVW5pZm9ybXNVdGlscy5tZXJnZSggWwotICAgICAgICAgICAgICAgIFVuaWZvcm1zTGliLmxp
Z2h0cywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsg
dmFsdWU6IDEuMCB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgXSApLAotICAgICAg
ICAgICAgdmVydGV4U2hhZGVyOiBTaGFkZXJDaHVua1sgJ3NoYWRvd192ZXJ0JyBdLAotICAgICAg
ICAgICAgZnJhZ21lbnRTaGFkZXI6IFNoYWRlckNodW5rWyAnc2hhZG93X2ZyYWcnIF0KLSAgICAg
ICAgfSApOwogCi0gICAgICAgIHRoaXMubGlnaHRzID0gdHJ1ZTsKLSAgICAgICAgdGhpcy50cmFu
c3BhcmVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gZXhwYW5kIGhvbGVzCisKKyAgICAg
ICAgICAgICAgICBmb3IgKCBoID0gMCwgaGwgPSBob2xlcy5sZW5ndGg7IGggPCBobDsgaCArKyAp
IHsKKworICAgICAgICAgICAgICAgICAgICBhaG9sZSA9IGhvbGVzWyBoIF07CisgICAgICAgICAg
ICAgICAgICAgIG9uZUhvbGVNb3ZlbWVudHMgPSBob2xlc01vdmVtZW50c1sgaCBdOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBpbCA9IGFob2xlLmxlbmd0aDsgaSA8IGlsOyBp
ICsrICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ID0gc2NhbGVQdDIoIGFob2xl
WyBpIF0sIG9uZUhvbGVNb3ZlbWVudHNbIGkgXSwgYnMgKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhIGV4dHJ1ZGVCeVBhdGggKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2KCB2ZXJ0LngsIHZlcnQueSwgZGVwdGggKyB6ICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KCB2ZXJ0Lngs
IHZlcnQueSArIGV4dHJ1ZGVQdHNbIHN0ZXBzIC0gMSBdLnksIGV4dHJ1ZGVQdHNbIHN0ZXBzIC0g
MSBdLnggKyB6ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIHRoaXMsIHsKLSAg
ICAgICAgICAgIG9wYWNpdHk6IHsKLSAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAot
ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlOwotICAgICAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIH0KLSAgICAgICAgfSApOwogCi0gICAgICAgIHRoaXMuc2V0VmFs
dWVzKCBwYXJhbWV0ZXJzICk7CisgICAgICAgICAgICAvKiBGYWNlcyAqLwogCi0gICAgfQorICAg
ICAgICAgICAgLy8gVG9wIGFuZCBib3R0b20gZmFjZXMKIAotICAgIFNoYWRvd01hdGVyaWFsLnBy
b3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFNoYWRlck1hdGVyaWFsLnByb3RvdHlwZSApOwotICAg
IFNoYWRvd01hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNoYWRvd01hdGVyaWFsOwor
ICAgICAgICAgICAgYnVpbGRMaWRGYWNlcygpOwogCi0gICAgU2hhZG93TWF0ZXJpYWwucHJvdG90
eXBlLmlzU2hhZG93TWF0ZXJpYWwgPSB0cnVlOworICAgICAgICAgICAgLy8gU2lkZXMgZmFjZXMK
IAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0g
ICAgICovCisgICAgICAgICAgICBidWlsZFNpZGVGYWNlcygpOwogCi0gICAgZnVuY3Rpb24gUmF3
U2hhZGVyTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgU2hhZGVyTWF0ZXJpYWwu
Y2FsbCggdGhpcywgcGFyYW1ldGVycyApOworICAgICAgICAgICAgLy8vLy8gIEludGVybmFsIGZ1
bmN0aW9ucwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdSYXdTaGFkZXJNYXRlcmlhbCc7CisgICAg
ICAgICAgICBmdW5jdGlvbiBidWlsZExpZEZhY2VzKCkgewogCi0gICAgfQorICAgICAgICAgICAg
ICAgIHZhciBzdGFydCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8gMzsKIAotICAgIFJhd1NoYWRl
ck1hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFNoYWRlck1hdGVyaWFsLnByb3Rv
dHlwZSApOwotICAgIFJhd1NoYWRlck1hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJh
d1NoYWRlck1hdGVyaWFsOworICAgICAgICAgICAgICAgIGlmICggYmV2ZWxFbmFibGVkICkgewog
Ci0gICAgUmF3U2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWwgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXIgPSAwOyAvLyBzdGVwcyArIDEKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZsZW4gKiBsYXllcjsKIAotICAgIC8qKgot
ICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xl
eQotICAgICAqCi0gICAgICogcGFyYW1ldGVycyA9IHsKLSAgICAgKiAgY29sb3I6IDxoZXg+LAot
ICAgICAqICByb3VnaG5lc3M6IDxmbG9hdD4sCi0gICAgICogIG1ldGFsbmVzczogPGZsb2F0PiwK
LSAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKLSAgICAgKgotICAgICAqICBtYXA6IG5ldyBUSFJF
RS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICoKLSAgICAgKiAgbGlnaHRNYXA6IG5ldyBUSFJF
RS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICogIGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+
Ci0gICAgICoKLSAgICAgKiAgYW9NYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0g
ICAgICogIGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+Ci0gICAgICoKLSAgICAgKiAgZW1pc3NpdmU6
IDxoZXg+LAotICAgICAqICBlbWlzc2l2ZUludGVuc2l0eTogPGZsb2F0PgotICAgICAqICBlbWlz
c2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKgotICAgICAqICBi
dW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqICBidW1wU2NhbGU6
IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgbm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSgg
PEltYWdlPiApLAotICAgICAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LAotICAgICAqCi0gICAg
ICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAg
KiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sCi0gICAgICogIGRpc3BsYWNlbWVudEJpYXM6
IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgcm91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVy
ZSggPEltYWdlPiApLAotICAgICAqCi0gICAgICogIG1ldGFsbmVzc01hcDogbmV3IFRIUkVFLlRl
eHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKgotICAgICAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRl
eHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKgotICAgICAqICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJl
VGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksCi0gICAgICog
IGVudk1hcEludGVuc2l0eTogPGZsb2F0PgotICAgICAqCi0gICAgICogIHJlZnJhY3Rpb25SYXRp
bzogPGZsb2F0PiwKLSAgICAgKgotICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKLSAgICAg
KiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LAotICAgICAqCi0gICAgICogIHNraW5uaW5n
OiA8Ym9vbD4sCi0gICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAotICAgICAqICBtb3JwaE5v
cm1hbHM6IDxib29sPgotICAgICAqIH0KLSAgICAgKi8KLQotICAgIGZ1bmN0aW9uIE1lc2hTdGFu
ZGFyZE1hdGVyaWFsKCBwYXJhbWV0ZXJzICkgewotCi0gICAgICAgIE1hdGVyaWFsLmNhbGwoIHRo
aXMgKTsKLQotICAgICAgICB0aGlzLmRlZmluZXMgPSB7ICdTVEFOREFSRCc6ICcnIH07Ci0KLSAg
ICAgICAgdGhpcy50eXBlID0gJ01lc2hTdGFuZGFyZE1hdGVyaWFsJzsKLQotICAgICAgICB0aGlz
LmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlCi0gICAgICAgIHRoaXMu
cm91Z2huZXNzID0gMC41OwotICAgICAgICB0aGlzLm1ldGFsbmVzcyA9IDAuNTsKLQotICAgICAg
ICB0aGlzLm1hcCA9IG51bGw7Ci0KLSAgICAgICAgdGhpcy5saWdodE1hcCA9IG51bGw7Ci0gICAg
ICAgIHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7Ci0KLSAgICAgICAgdGhpcy5hb01hcCA9
IG51bGw7Ci0gICAgICAgIHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7Ci0KLSAgICAgICAgdGhp
cy5lbWlzc2l2ZSA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTsKLSAgICAgICAgdGhpcy5lbWlzc2l2
ZUludGVuc2l0eSA9IDEuMDsKLSAgICAgICAgdGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7Ci0KLSAg
ICAgICAgdGhpcy5idW1wTWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5idW1wU2NhbGUgPSAxOwor
ICAgICAgICAgICAgICAgICAgICAvLyBCb3R0b20gZmFjZXMKIAotICAgICAgICB0aGlzLm5vcm1h
bE1hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMiggMSwg
MSApOworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGZsZW47IGkgKysgKSB7
CiAKLSAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsOwotICAgICAgICB0aGlzLmRp
c3BsYWNlbWVudFNjYWxlID0gMTsKLSAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRCaWFzID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBmYWNlc1sgaSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgZjMoIGZhY2VbIDIgXSArIG9mZnNldCwgZmFjZVsgMSBdICsgb2Zmc2V0LCBm
YWNlWyAwIF0gKyBvZmZzZXQgKTsKIAotICAgICAgICB0aGlzLnJvdWdobmVzc01hcCA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLm1ldGFsbmVzc01hcCA9IG51
bGw7CisgICAgICAgICAgICAgICAgICAgIGxheWVyID0gc3RlcHMgKyBiZXZlbFNlZ21lbnRzICog
MjsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdmxlbiAqIGxheWVyOwogCi0gICAgICAg
IHRoaXMuYWxwaGFNYXAgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAvLyBUb3AgZmFjZXMK
IAotICAgICAgICB0aGlzLmVudk1hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMuZW52TWFwSW50ZW5z
aXR5ID0gMS4wOworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGZsZW47IGkg
KysgKSB7CiAKLSAgICAgICAgdGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4OworICAgICAgICAg
ICAgICAgICAgICAgICAgZmFjZSA9IGZhY2VzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAg
ICBmMyggZmFjZVsgMCBdICsgb2Zmc2V0LCBmYWNlWyAxIF0gKyBvZmZzZXQsIGZhY2VbIDIgXSAr
IG9mZnNldCApOwogCi0gICAgICAgIHRoaXMud2lyZWZyYW1lID0gZmFsc2U7Ci0gICAgICAgIHRo
aXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lY2Fw
ID0gJ3JvdW5kJzsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7Cisg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnNraW5uaW5nID0gZmFsc2U7Ci0g
ICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gZmFsc2U7Ci0gICAgICAgIHRoaXMubW9ycGhOb3Jt
YWxzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICB0aGlzLnNl
dFZhbHVlcyggcGFyYW1ldGVycyApOworICAgICAgICAgICAgICAgICAgICAvLyBCb3R0b20gZmFj
ZXMKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBmbGVuOyBp
ICsrICkgewogCi0gICAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZSggTWF0ZXJpYWwucHJvdG90eXBlICk7Ci0gICAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJv
dG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFN0YW5kYXJkTWF0ZXJpYWw7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmYWNlID0gZmFjZXNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGYz
KCBmYWNlWyAyIF0sIGZhY2VbIDEgXSwgZmFjZVsgMCBdICk7CiAKLSAgICBNZXNoU3RhbmRhcmRN
YXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgIE1lc2hTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5
ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBmYWNl
cwogCi0gICAgICAgIE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSAp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGZsZW47IGkgKysgKSB7CiAK
LSAgICAgICAgdGhpcy5kZWZpbmVzID0geyAnU1RBTkRBUkQnOiAnJyB9OworICAgICAgICAgICAg
ICAgICAgICAgICAgZmFjZSA9IGZhY2VzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICBm
MyggZmFjZVsgMCBdICsgdmxlbiAqIHN0ZXBzLCBmYWNlWyAxIF0gKyB2bGVuICogc3RlcHMsIGZh
Y2VbIDIgXSArIHZsZW4gKiBzdGVwcyApOwogCi0gICAgICAgIHRoaXMuY29sb3IuY29weSggc291
cmNlLmNvbG9yICk7Ci0gICAgICAgIHRoaXMucm91Z2huZXNzID0gc291cmNlLnJvdWdobmVzczsK
LSAgICAgICAgdGhpcy5tZXRhbG5lc3MgPSBzb3VyY2UubWV0YWxuZXNzOworICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5tYXAgPSBzb3VyY2UubWFwOworICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICB0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwOwotICAgICAg
ICB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5OworICAg
ICAgICAgICAgICAgIHNjb3BlLmFkZEdyb3VwKCBzdGFydCwgdmVydGljZXNBcnJheS5sZW5ndGgg
LyAzIC0gc3RhcnQsIDAgKTsKIAotICAgICAgICB0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwOwot
ICAgICAgICB0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5OworICAg
ICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuZW1pc3NpdmUuY29weSggc291cmNlLmVtaXNzaXZl
ICk7Ci0gICAgICAgIHRoaXMuZW1pc3NpdmVNYXAgPSBzb3VyY2UuZW1pc3NpdmVNYXA7Ci0gICAg
ICAgIHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSBzb3VyY2UuZW1pc3NpdmVJbnRlbnNpdHk7Cisg
ICAgICAgICAgICAvLyBDcmVhdGUgZmFjZXMgZm9yIHRoZSB6LXNpZGVzIG9mIHRoZSBzaGFwZQog
Ci0gICAgICAgIHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwOwotICAgICAgICB0aGlzLmJ1
bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7CisgICAgICAgICAgICBmdW5jdGlvbiBidWlsZFNp
ZGVGYWNlcygpIHsKIAotICAgICAgICB0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7
Ci0gICAgICAgIHRoaXMubm9ybWFsU2NhbGUuY29weSggc291cmNlLm5vcm1hbFNjYWxlICk7Cisg
ICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdmVydGljZXNBcnJheS5sZW5ndGggLyAzOworICAg
ICAgICAgICAgICAgIHZhciBsYXllcm9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgc2lkZXdh
bGxzKCBjb250b3VyLCBsYXllcm9mZnNldCApOworICAgICAgICAgICAgICAgIGxheWVyb2Zmc2V0
ICs9IGNvbnRvdXIubGVuZ3RoOwogCi0gICAgICAgIHRoaXMuZGlzcGxhY2VtZW50TWFwID0gc291
cmNlLmRpc3BsYWNlbWVudE1hcDsKLSAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRTY2FsZSA9IHNv
dXJjZS5kaXNwbGFjZW1lbnRTY2FsZTsKLSAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRCaWFzID0g
c291cmNlLmRpc3BsYWNlbWVudEJpYXM7CisgICAgICAgICAgICAgICAgZm9yICggaCA9IDAsIGhs
ID0gaG9sZXMubGVuZ3RoOyBoIDwgaGw7IGggKysgKSB7CiAKLSAgICAgICAgdGhpcy5yb3VnaG5l
c3NNYXAgPSBzb3VyY2Uucm91Z2huZXNzTWFwOworICAgICAgICAgICAgICAgICAgICBhaG9sZSA9
IGhvbGVzWyBoIF07CisgICAgICAgICAgICAgICAgICAgIHNpZGV3YWxscyggYWhvbGUsIGxheWVy
b2Zmc2V0ICk7CiAKLSAgICAgICAgdGhpcy5tZXRhbG5lc3NNYXAgPSBzb3VyY2UubWV0YWxuZXNz
TWFwOworICAgICAgICAgICAgICAgICAgICAvLywgdHJ1ZQorICAgICAgICAgICAgICAgICAgICBs
YXllcm9mZnNldCArPSBhaG9sZS5sZW5ndGg7CiAKLSAgICAgICAgdGhpcy5hbHBoYU1hcCA9IHNv
dXJjZS5hbHBoYU1hcDsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5lbnZNYXAg
PSBzb3VyY2UuZW52TWFwOwotICAgICAgICB0aGlzLmVudk1hcEludGVuc2l0eSA9IHNvdXJjZS5l
bnZNYXBJbnRlbnNpdHk7CiAKLSAgICAgICAgdGhpcy5yZWZyYWN0aW9uUmF0aW8gPSBzb3VyY2Uu
cmVmcmFjdGlvblJhdGlvOworICAgICAgICAgICAgICAgIHNjb3BlLmFkZEdyb3VwKCBzdGFydCwg
dmVydGljZXNBcnJheS5sZW5ndGggLyAzIC0gc3RhcnQsIDEgKTsKIAotICAgICAgICB0aGlzLndp
cmVmcmFtZSA9IHNvdXJjZS53aXJlZnJhbWU7Ci0gICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdp
ZHRoID0gc291cmNlLndpcmVmcmFtZUxpbmV3aWR0aDsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVM
aW5lY2FwID0gc291cmNlLndpcmVmcmFtZUxpbmVjYXA7Ci0gICAgICAgIHRoaXMud2lyZWZyYW1l
TGluZWpvaW4gPSBzb3VyY2Uud2lyZWZyYW1lTGluZWpvaW47CiAKLSAgICAgICAgdGhpcy5za2lu
bmluZyA9IHNvdXJjZS5za2lubmluZzsKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBzb3Vy
Y2UubW9ycGhUYXJnZXRzOwotICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3Jw
aE5vcm1hbHM7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICBmdW5jdGlvbiBzaWRld2FsbHMoIGNvbnRvdXIsIGxheWVyb2Zmc2V0ICkgewogCi0gICAg
fTsKKyAgICAgICAgICAgICAgICB2YXIgaiwgazsKKyAgICAgICAgICAgICAgICBpID0gY29udG91
ci5sZW5ndGg7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDov
L2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKLSAgICAgKgotICAgICAqIHBhcmFtZXRlcnMgPSB7Ci0g
ICAgICogIHJlZmxlY3Rpdml0eTogPGZsb2F0PgotICAgICAqIH0KLSAgICAgKi8KKyAgICAgICAg
ICAgICAgICB3aGlsZSAoIC0tIGkgPj0gMCApIHsKIAotICAgIGZ1bmN0aW9uIE1lc2hQaHlzaWNh
bE1hdGVyaWFsKCBwYXJhbWV0ZXJzICkgeworICAgICAgICAgICAgICAgICAgICBqID0gaTsKKyAg
ICAgICAgICAgICAgICAgICAgayA9IGkgLSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoIGsg
PCAwICkgayA9IGNvbnRvdXIubGVuZ3RoIC0gMTsKIAotICAgICAgICBNZXNoU3RhbmRhcmRNYXRl
cmlhbC5jYWxsKCB0aGlzICk7CisgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2In
LCBpLGosIGktMSwgayx2ZXJ0aWNlcy5sZW5ndGgpOwogCi0gICAgICAgIHRoaXMuZGVmaW5lcyA9
IHsgJ1BIWVNJQ0FMJzogJycgfTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2wgPSBzdGVwcyArIGJldmVsU2VnbWVudHMgKiAyOwogCi0g
ICAgICAgIHRoaXMudHlwZSA9ICdNZXNoUGh5c2ljYWxNYXRlcmlhbCc7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHMgPSAwOyBzIDwgc2w7IHMgKysgKSB7CiAKLSAgICAgICAgdGhpcy5yZWZs
ZWN0aXZpdHkgPSAwLjU7IC8vIG1hcHMgdG8gRjAgPSAwLjA0CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc2xlbjEgPSB2bGVuICogczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
bGVuMiA9IHZsZW4gKiAoIHMgKyAxICk7CiAKLSAgICAgICAgdGhpcy5jbGVhckNvYXQgPSAwLjA7
Ci0gICAgICAgIHRoaXMuY2xlYXJDb2F0Um91Z2huZXNzID0gMC4wOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGEgPSBsYXllcm9mZnNldCArIGogKyBzbGVuMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiID0gbGF5ZXJvZmZzZXQgKyBrICsgc2xlbjEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYyA9IGxheWVyb2Zmc2V0ICsgayArIHNsZW4yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQgPSBsYXllcm9mZnNldCArIGogKyBzbGVuMjsKIAotICAgICAgICB0
aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOworICAgICAgICAgICAgICAgICAgICAgICAgZjQo
IGEsIGIsIGMsIGQgKTsKIAotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgTWVz
aFBoeXNpY2FsTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggTWVzaFN0YW5kYXJk
TWF0ZXJpYWwucHJvdG90eXBlICk7Ci0gICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWwucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gTWVzaFBoeXNpY2FsTWF0ZXJpYWw7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJp
YWwgPSB0cnVlOworICAgICAgICAgICAgfQogCi0gICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWwucHJv
dG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgIGZ1bmN0aW9u
IHYoIHgsIHksIHogKSB7CiAKLSAgICAgICAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBl
LmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIu
cHVzaCggeCApOworICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLnB1c2goIHkgKTsKKyAgICAg
ICAgICAgICAgICBwbGFjZWhvbGRlci5wdXNoKCB6ICk7CiAKLSAgICAgICAgdGhpcy5kZWZpbmVz
ID0geyAnUEhZU0lDQUwnOiAnJyB9OworICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucmVm
bGVjdGl2aXR5ID0gc291cmNlLnJlZmxlY3Rpdml0eTsKIAotICAgICAgICB0aGlzLmNsZWFyQ29h
dCA9IHNvdXJjZS5jbGVhckNvYXQ7Ci0gICAgICAgIHRoaXMuY2xlYXJDb2F0Um91Z2huZXNzID0g
c291cmNlLmNsZWFyQ29hdFJvdWdobmVzczsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGYzKCBhLCBi
LCBjICkgewogCi0gICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIGFkZFZlcnRl
eCggYSApOworICAgICAgICAgICAgICAgIGFkZFZlcnRleCggYiApOworICAgICAgICAgICAgICAg
IGFkZFZlcnRleCggYyApOwogCi0gICAgfTsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGV4
ID0gdmVydGljZXNBcnJheS5sZW5ndGggLyAzOworICAgICAgICAgICAgICAgIHZhciB1dnMgPSB1
dmdlbi5nZW5lcmF0ZVRvcFVWKCBzY29wZSwgdmVydGljZXNBcnJheSwgbmV4dEluZGV4IC0gMywg
bmV4dEluZGV4IC0gMiwgbmV4dEluZGV4IC0gMSApOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8g
aHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqCi0gICAgICogcGFyYW1ldGVycyA9IHsK
LSAgICAgKiAgY29sb3I6IDxoZXg+LAotICAgICAqICBzcGVjdWxhcjogPGhleD4sCi0gICAgICog
IHNoaW5pbmVzczogPGZsb2F0PiwKLSAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKLSAgICAgKgot
ICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICoKLSAgICAg
KiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICogIGxpZ2h0
TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+Ci0gICAgICoKLSAgICAgKiAgYW9NYXA6IG5ldyBUSFJFRS5U
ZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICogIGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+Ci0gICAg
ICoKLSAgICAgKiAgZW1pc3NpdmU6IDxoZXg+LAotICAgICAqICBlbWlzc2l2ZUludGVuc2l0eTog
PGZsb2F0PgotICAgICAqICBlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4g
KSwKLSAgICAgKgotICAgICAqICBidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiAp
LAotICAgICAqICBidW1wU2NhbGU6IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgbm9ybWFsTWFw
OiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqICBub3JtYWxTY2FsZTogPFZl
Y3RvcjI+LAotICAgICAqCi0gICAgICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1
cmUoIDxJbWFnZT4gKSwKLSAgICAgKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sCi0gICAg
ICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgc3BlY3VsYXJN
YXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICoKLSAgICAgKiAgYWxwaGFN
YXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCi0gICAgICoKLSAgICAgKiAgZW52TWFw
OiBuZXcgVEhSRUUuVGV4dHVyZUN1YmUoIFtwb3N4LCBuZWd4LCBwb3N5LCBuZWd5LCBwb3N6LCBu
ZWd6XSApLAotICAgICAqICBjb21iaW5lOiBUSFJFRS5NdWx0aXBseSwKLSAgICAgKiAgcmVmbGVj
dGl2aXR5OiA8ZmxvYXQ+LAotICAgICAqICByZWZyYWN0aW9uUmF0aW86IDxmbG9hdD4sCi0gICAg
ICoKLSAgICAgKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4sCi0gICAgICogIHdpcmVmcmFtZUxpbmV3
aWR0aDogPGZsb2F0PiwKLSAgICAgKgotICAgICAqICBza2lubmluZzogPGJvb2w+LAotICAgICAq
ICBtb3JwaFRhcmdldHM6IDxib29sPiwKLSAgICAgKiAgbW9ycGhOb3JtYWxzOiA8Ym9vbD4KLSAg
ICAgKiB9Ci0gICAgICovCisgICAgICAgICAgICAgICAgYWRkVVYoIHV2c1sgMCBdICk7CisgICAg
ICAgICAgICAgICAgYWRkVVYoIHV2c1sgMSBdICk7CisgICAgICAgICAgICAgICAgYWRkVVYoIHV2
c1sgMiBdICk7CiAKLSAgICBmdW5jdGlvbiBNZXNoUGhvbmdNYXRlcmlhbCggcGFyYW1ldGVycyAp
IHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBNYXRlcmlhbC5jYWxsKCB0aGlzICk7CisgICAg
ICAgICAgICBmdW5jdGlvbiBmNCggYSwgYiwgYywgZCApIHsKIAotICAgICAgICB0aGlzLnR5cGUg
PSAnTWVzaFBob25nTWF0ZXJpYWwnOworICAgICAgICAgICAgICAgIGFkZFZlcnRleCggYSApOwor
ICAgICAgICAgICAgICAgIGFkZFZlcnRleCggYiApOworICAgICAgICAgICAgICAgIGFkZFZlcnRl
eCggZCApOwogCi0gICAgICAgIHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8v
IGRpZmZ1c2UKLSAgICAgICAgdGhpcy5zcGVjdWxhciA9IG5ldyBDb2xvciggMHgxMTExMTEgKTsK
LSAgICAgICAgdGhpcy5zaGluaW5lc3MgPSAzMDsKKyAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgo
IGIgKTsKKyAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgoIGMgKTsKKyAgICAgICAgICAgICAgICBh
ZGRWZXJ0ZXgoIGQgKTsKIAotICAgICAgICB0aGlzLm1hcCA9IG51bGw7CiAKLSAgICAgICAgdGhp
cy5saWdodE1hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7
CisgICAgICAgICAgICAgICAgdmFyIG5leHRJbmRleCA9IHZlcnRpY2VzQXJyYXkubGVuZ3RoIC8g
MzsKKyAgICAgICAgICAgICAgICB2YXIgdXZzID0gdXZnZW4uZ2VuZXJhdGVTaWRlV2FsbFVWKCBz
Y29wZSwgdmVydGljZXNBcnJheSwgbmV4dEluZGV4IC0gNiwgbmV4dEluZGV4IC0gMywgbmV4dElu
ZGV4IC0gMiwgbmV4dEluZGV4IC0gMSApOwogCi0gICAgICAgIHRoaXMuYW9NYXAgPSBudWxsOwot
ICAgICAgICB0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4wOworICAgICAgICAgICAgICAgIGFkZFVW
KCB1dnNbIDAgXSApOworICAgICAgICAgICAgICAgIGFkZFVWKCB1dnNbIDEgXSApOworICAgICAg
ICAgICAgICAgIGFkZFVWKCB1dnNbIDMgXSApOwogCi0gICAgICAgIHRoaXMuZW1pc3NpdmUgPSBu
ZXcgQ29sb3IoIDB4MDAwMDAwICk7Ci0gICAgICAgIHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAx
LjA7Ci0gICAgICAgIHRoaXMuZW1pc3NpdmVNYXAgPSBudWxsOworICAgICAgICAgICAgICAgIGFk
ZFVWKCB1dnNbIDEgXSApOworICAgICAgICAgICAgICAgIGFkZFVWKCB1dnNbIDIgXSApOworICAg
ICAgICAgICAgICAgIGFkZFVWKCB1dnNbIDMgXSApOwogCi0gICAgICAgIHRoaXMuYnVtcE1hcCA9
IG51bGw7Ci0gICAgICAgIHRoaXMuYnVtcFNjYWxlID0gMTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICB0aGlzLm5vcm1hbE1hcCA9IG51bGw7Ci0gICAgICAgIHRoaXMubm9ybWFsU2NhbGUgPSBu
ZXcgVmVjdG9yMiggMSwgMSApOworICAgICAgICAgICAgZnVuY3Rpb24gYWRkVmVydGV4KCBpbmRl
eCApIHsKIAotICAgICAgICB0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7Ci0gICAgICAgIHRo
aXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxOwotICAgICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMg
PSAwOworICAgICAgICAgICAgICAgIHZlcnRpY2VzQXJyYXkucHVzaCggcGxhY2Vob2xkZXJbIGlu
ZGV4ICogMyArIDAgXSApOworICAgICAgICAgICAgICAgIHZlcnRpY2VzQXJyYXkucHVzaCggcGxh
Y2Vob2xkZXJbIGluZGV4ICogMyArIDEgXSApOworICAgICAgICAgICAgICAgIHZlcnRpY2VzQXJy
YXkucHVzaCggcGxhY2Vob2xkZXJbIGluZGV4ICogMyArIDIgXSApOwogCi0gICAgICAgIHRoaXMu
c3BlY3VsYXJNYXAgPSBudWxsOworICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuYWxwaGFN
YXAgPSBudWxsOwogCi0gICAgICAgIHRoaXMuZW52TWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5j
b21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247Ci0gICAgICAgIHRoaXMucmVmbGVjdGl2aXR5ID0g
MTsKLSAgICAgICAgdGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4OworICAgICAgICAgICAgZnVu
Y3Rpb24gYWRkVVYoIHZlY3RvcjIgKSB7CiAKLSAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBmYWxz
ZTsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSAxOwotICAgICAgICB0aGlzLndp
cmVmcmFtZUxpbmVjYXAgPSAncm91bmQnOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVqb2lu
ID0gJ3JvdW5kJzsKKyAgICAgICAgICAgICAgICB1dkFycmF5LnB1c2goIHZlY3RvcjIueCApOwor
ICAgICAgICAgICAgICAgIHV2QXJyYXkucHVzaCggdmVjdG9yMi55ICk7CiAKLSAgICAgICAgdGhp
cy5za2lubmluZyA9IGZhbHNlOwotICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IGZhbHNlOwot
ICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOworICAgICAgICAgICAgfQogCi0gICAg
ICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CisgICAgICAgIH0KIAogICAgIH0KIAot
ICAgIE1lc2hQaG9uZ01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFs
LnByb3RvdHlwZSApOwotICAgIE1lc2hQaG9uZ01hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IE1lc2hQaG9uZ01hdGVyaWFsOworICAgIEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBFeHRy
dWRlQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXh0cnVkZUJ1ZmZlckdl
b21ldHJ5OwogCi0gICAgTWVzaFBob25nTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFBob25nTWF0
ZXJpYWwgPSB0cnVlOworICAgIEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUudG9KU09O
ID0gZnVuY3Rpb24gKCkgewogCi0gICAgTWVzaFBob25nTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkg
PSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgdmFyIGRhdGEgPSBCdWZmZXJHZW9tZXRy
eS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICBNYXRlcmlhbC5wcm90
b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAgdmFyIHNoYXBlcyA9IHRo
aXMucGFyYW1ldGVycy5zaGFwZXM7CisgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5wYXJhbWV0
ZXJzLm9wdGlvbnM7CiAKLSAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTsK
LSAgICAgICAgdGhpcy5zcGVjdWxhci5jb3B5KCBzb3VyY2Uuc3BlY3VsYXIgKTsKLSAgICAgICAg
dGhpcy5zaGluaW5lc3MgPSBzb3VyY2Uuc2hpbmluZXNzOworICAgICAgICByZXR1cm4gdG9KU09O
KCBzaGFwZXMsIG9wdGlvbnMsIGRhdGEgKTsKIAotICAgICAgICB0aGlzLm1hcCA9IHNvdXJjZS5t
YXA7CisgICAgfTsKIAotICAgICAgICB0aGlzLmxpZ2h0TWFwID0gc291cmNlLmxpZ2h0TWFwOwot
ICAgICAgICB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxpZ2h0TWFwSW50ZW5zaXR5
OworICAgIC8vCiAKLSAgICAgICAgdGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDsKLSAgICAgICAg
dGhpcy5hb01hcEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTsKKyAgICB2YXIgV29y
bGRVVkdlbmVyYXRvciA9IHsKIAotICAgICAgICB0aGlzLmVtaXNzaXZlLmNvcHkoIHNvdXJjZS5l
bWlzc2l2ZSApOwotICAgICAgICB0aGlzLmVtaXNzaXZlTWFwID0gc291cmNlLmVtaXNzaXZlTWFw
OwotICAgICAgICB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVtaXNzaXZlSW50ZW5z
aXR5OworICAgICAgICBnZW5lcmF0ZVRvcFVWOiBmdW5jdGlvbiAoIGdlb21ldHJ5LCB2ZXJ0aWNl
cywgaW5kZXhBLCBpbmRleEIsIGluZGV4QyApIHsKIAotICAgICAgICB0aGlzLmJ1bXBNYXAgPSBz
b3VyY2UuYnVtcE1hcDsKLSAgICAgICAgdGhpcy5idW1wU2NhbGUgPSBzb3VyY2UuYnVtcFNjYWxl
OworICAgICAgICAgICAgdmFyIGFfeCA9IHZlcnRpY2VzWyBpbmRleEEgKiAzIF07CisgICAgICAg
ICAgICB2YXIgYV95ID0gdmVydGljZXNbIGluZGV4QSAqIDMgKyAxIF07CisgICAgICAgICAgICB2
YXIgYl94ID0gdmVydGljZXNbIGluZGV4QiAqIDMgXTsKKyAgICAgICAgICAgIHZhciBiX3kgPSB2
ZXJ0aWNlc1sgaW5kZXhCICogMyArIDEgXTsKKyAgICAgICAgICAgIHZhciBjX3ggPSB2ZXJ0aWNl
c1sgaW5kZXhDICogMyBdOworICAgICAgICAgICAgdmFyIGNfeSA9IHZlcnRpY2VzWyBpbmRleEMg
KiAzICsgMSBdOwogCi0gICAgICAgIHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDsK
LSAgICAgICAgdGhpcy5ub3JtYWxTY2FsZS5jb3B5KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTsKKyAg
ICAgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGFfeCwgYV95
ICksCisgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGJfeCwgYl95ICksCisgICAgICAgICAg
ICAgICAgbmV3IFZlY3RvcjIoIGNfeCwgY195ICkKKyAgICAgICAgICAgIF07CiAKLSAgICAgICAg
dGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwOwotICAgICAgICB0
aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlOwotICAgICAg
ICB0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhczsKKyAgICAg
ICAgfSwKIAotICAgICAgICB0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwOwor
ICAgICAgICBnZW5lcmF0ZVNpZGVXYWxsVVY6IGZ1bmN0aW9uICggZ2VvbWV0cnksIHZlcnRpY2Vz
LCBpbmRleEEsIGluZGV4QiwgaW5kZXhDLCBpbmRleEQgKSB7CiAKLSAgICAgICAgdGhpcy5hbHBo
YU1hcCA9IHNvdXJjZS5hbHBoYU1hcDsKKyAgICAgICAgICAgIHZhciBhX3ggPSB2ZXJ0aWNlc1sg
aW5kZXhBICogMyBdOworICAgICAgICAgICAgdmFyIGFfeSA9IHZlcnRpY2VzWyBpbmRleEEgKiAz
ICsgMSBdOworICAgICAgICAgICAgdmFyIGFfeiA9IHZlcnRpY2VzWyBpbmRleEEgKiAzICsgMiBd
OworICAgICAgICAgICAgdmFyIGJfeCA9IHZlcnRpY2VzWyBpbmRleEIgKiAzIF07CisgICAgICAg
ICAgICB2YXIgYl95ID0gdmVydGljZXNbIGluZGV4QiAqIDMgKyAxIF07CisgICAgICAgICAgICB2
YXIgYl96ID0gdmVydGljZXNbIGluZGV4QiAqIDMgKyAyIF07CisgICAgICAgICAgICB2YXIgY194
ID0gdmVydGljZXNbIGluZGV4QyAqIDMgXTsKKyAgICAgICAgICAgIHZhciBjX3kgPSB2ZXJ0aWNl
c1sgaW5kZXhDICogMyArIDEgXTsKKyAgICAgICAgICAgIHZhciBjX3ogPSB2ZXJ0aWNlc1sgaW5k
ZXhDICogMyArIDIgXTsKKyAgICAgICAgICAgIHZhciBkX3ggPSB2ZXJ0aWNlc1sgaW5kZXhEICog
MyBdOworICAgICAgICAgICAgdmFyIGRfeSA9IHZlcnRpY2VzWyBpbmRleEQgKiAzICsgMSBdOwor
ICAgICAgICAgICAgdmFyIGRfeiA9IHZlcnRpY2VzWyBpbmRleEQgKiAzICsgMiBdOwogCi0gICAg
ICAgIHRoaXMuZW52TWFwID0gc291cmNlLmVudk1hcDsKLSAgICAgICAgdGhpcy5jb21iaW5lID0g
c291cmNlLmNvbWJpbmU7Ci0gICAgICAgIHRoaXMucmVmbGVjdGl2aXR5ID0gc291cmNlLnJlZmxl
Y3Rpdml0eTsKLSAgICAgICAgdGhpcy5yZWZyYWN0aW9uUmF0aW8gPSBzb3VyY2UucmVmcmFjdGlv
blJhdGlvOworICAgICAgICAgICAgaWYgKCBNYXRoLmFicyggYV95IC0gYl95ICkgPCAwLjAxICkg
ewogCi0gICAgICAgIHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTsKLSAgICAgICAg
dGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoOwotICAg
ICAgICB0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDsKLSAg
ICAgICAgdGhpcy53aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9y
MiggYV94LCAxIC0gYV96ICksCisgICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBiX3gs
IDEgLSBiX3ogKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGNfeCwgMSAtIGNf
eiApLAorICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggZF94LCAxIC0gZF96ICkKKyAg
ICAgICAgICAgICAgICBdOwogCi0gICAgICAgIHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5p
bmc7Ci0gICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0czsKLSAg
ICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBzb3VyY2UubW9ycGhOb3JtYWxzOworICAgICAgICAg
ICAgfSBlbHNlIHsKIAotICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICByZXR1
cm4gWworICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYV95LCAxIC0gYV96ICksCisg
ICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBiX3ksIDEgLSBiX3ogKSwKKyAgICAgICAg
ICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGNfeSwgMSAtIGNfeiApLAorICAgICAgICAgICAgICAg
ICAgICBuZXcgVmVjdG9yMiggZF95LCAxIC0gZF96ICkKKyAgICAgICAgICAgICAgICBdOworCisg
ICAgICAgICAgICB9CiAKKyAgICAgICAgfQogICAgIH07CiAKLSAgICAvKioKLSAgICAgKiBAYXV0
aG9yIHRha2FoaXJveCAvIGh0dHA6Ly9naXRodWIuY29tL3Rha2FoaXJveAotICAgICAqCi0gICAg
ICogcGFyYW1ldGVycyA9IHsKLSAgICAgKiAgZ3JhZGllbnRNYXA6IG5ldyBUSFJFRS5UZXh0dXJl
KCA8SW1hZ2U+ICkKLSAgICAgKiB9Ci0gICAgICovCisgICAgZnVuY3Rpb24gdG9KU09OKCBzaGFw
ZXMsIG9wdGlvbnMsIGRhdGEgKSB7CiAKLSAgICBmdW5jdGlvbiBNZXNoVG9vbk1hdGVyaWFsKCBw
YXJhbWV0ZXJzICkgeworICAgICAgICAvLwogCi0gICAgICAgIE1lc2hQaG9uZ01hdGVyaWFsLmNh
bGwoIHRoaXMgKTsKKyAgICAgICAgZGF0YS5zaGFwZXMgPSBbXTsKIAotICAgICAgICB0aGlzLmRl
ZmluZXMgPSB7ICdUT09OJzogJycgfTsKKyAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBzaGFw
ZXMgKSApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnTWVzaFRvb25NYXRlcmlhbCc7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbDsgaSArKyAp
IHsKIAotICAgICAgICB0aGlzLmdyYWRpZW50TWFwID0gbnVsbDsKKyAgICAgICAgICAgICAgICB2
YXIgc2hhcGUgPSBzaGFwZXNbIGkgXTsKIAotICAgICAgICB0aGlzLnNldFZhbHVlcyggcGFyYW1l
dGVycyApOworICAgICAgICAgICAgICAgIGRhdGEuc2hhcGVzLnB1c2goIHNoYXBlLnV1aWQgKTsK
IAotICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgIE1lc2hUb29uTWF0ZXJpYWwucHJvdG90eXBl
ID0gT2JqZWN0LmNyZWF0ZSggTWVzaFBob25nTWF0ZXJpYWwucHJvdG90eXBlICk7Ci0gICAgTWVz
aFRvb25NYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoVG9vbk1hdGVyaWFsOwor
ICAgICAgICB9IGVsc2UgewogCi0gICAgTWVzaFRvb25NYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNo
VG9vbk1hdGVyaWFsID0gdHJ1ZTsKKyAgICAgICAgICAgIGRhdGEuc2hhcGVzLnB1c2goIHNoYXBl
cy51dWlkICk7CiAKLSAgICBNZXNoVG9vbk1hdGVyaWFsLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rp
b24gKCBzb3VyY2UgKSB7CisgICAgICAgIH0KIAotICAgICAgICBNZXNoUGhvbmdNYXRlcmlhbC5w
cm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAgLy8KIAotICAgICAg
ICB0aGlzLmdyYWRpZW50TWFwID0gc291cmNlLmdyYWRpZW50TWFwOworICAgICAgICBpZiAoIG9w
dGlvbnMuZXh0cnVkZVBhdGggIT09IHVuZGVmaW5lZCApIGRhdGEub3B0aW9ucy5leHRydWRlUGF0
aCA9IG9wdGlvbnMuZXh0cnVkZVBhdGgudG9KU09OKCk7CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgfTsKKyAgICB9CiAKICAgICAvKioKLSAgICAg
KiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgV2Vz
dExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleQotICAgICAqCi0gICAgICog
cGFyYW1ldGVycyA9IHsKLSAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKLSAgICAgKgotICAgICAq
ICBidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqICBidW1wU2Nh
bGU6IDxmbG9hdD4sCisgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMu
bmV0L3p6ODUvYmxvZworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1
YWxpYS5jb20vCiAgICAgICoKLSAgICAgKiAgbm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSgg
PEltYWdlPiApLAotICAgICAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LAorICAgICAqIFRleHQg
PSAzRCBUZXh0CiAgICAgICoKLSAgICAgKiAgZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhSRUUuVGV4
dHVyZSggPEltYWdlPiApLAotICAgICAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0PiwKLSAg
ICAgKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PiwKKyAgICAgKiBwYXJhbWV0ZXJzID0gewor
ICAgICAqICBmb250OiA8VEhSRUUuRm9udD4sIC8vIGZvbnQKICAgICAgKgotICAgICAqICB3aXJl
ZnJhbWU6IDxib29sZWFuPiwKLSAgICAgKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+Cisg
ICAgICogIHNpemU6IDxmbG9hdD4sIC8vIHNpemUgb2YgdGhlIHRleHQKKyAgICAgKiAgaGVpZ2h0
OiA8ZmxvYXQ+LCAvLyB0aGlja25lc3MgdG8gZXh0cnVkZSB0ZXh0CisgICAgICogIGN1cnZlU2Vn
bWVudHM6IDxpbnQ+LCAvLyBudW1iZXIgb2YgcG9pbnRzIG9uIHRoZSBjdXJ2ZXMKICAgICAgKgot
ICAgICAqICBza2lubmluZzogPGJvb2w+LAotICAgICAqICBtb3JwaFRhcmdldHM6IDxib29sPiwK
LSAgICAgKiAgbW9ycGhOb3JtYWxzOiA8Ym9vbD4KKyAgICAgKiAgYmV2ZWxFbmFibGVkOiA8Ym9v
bD4sIC8vIHR1cm4gb24gYmV2ZWwKKyAgICAgKiAgYmV2ZWxUaGlja25lc3M6IDxmbG9hdD4sIC8v
IGhvdyBkZWVwIGludG8gdGV4dCBiZXZlbCBnb2VzCisgICAgICogIGJldmVsU2l6ZTogPGZsb2F0
PiAvLyBob3cgZmFyIGZyb20gdGV4dCBvdXRsaW5lIGlzIGJldmVsCiAgICAgICogfQogICAgICAq
LwogCi0gICAgZnVuY3Rpb24gTWVzaE5vcm1hbE1hdGVyaWFsKCBwYXJhbWV0ZXJzICkgeworICAg
IC8vIFRleHRHZW9tZXRyeQogCi0gICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKKyAgICBm
dW5jdGlvbiBUZXh0R2VvbWV0cnkoIHRleHQsIHBhcmFtZXRlcnMgKSB7CiAKLSAgICAgICAgdGhp
cy50eXBlID0gJ01lc2hOb3JtYWxNYXRlcmlhbCc7CisgICAgICAgIEdlb21ldHJ5LmNhbGwoIHRo
aXMgKTsKIAotICAgICAgICB0aGlzLmJ1bXBNYXAgPSBudWxsOwotICAgICAgICB0aGlzLmJ1bXBT
Y2FsZSA9IDE7CisgICAgICAgIHRoaXMudHlwZSA9ICdUZXh0R2VvbWV0cnknOwogCi0gICAgICAg
IHRoaXMubm9ybWFsTWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5ub3JtYWxTY2FsZSA9IG5ldyBW
ZWN0b3IyKCAxLCAxICk7CisgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAg
IHRleHQ6IHRleHQsCisgICAgICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzCisgICAgICAg
IH07CiAKLSAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBudWxsOwotICAgICAgICB0aGlz
LmRpc3BsYWNlbWVudFNjYWxlID0gMTsKLSAgICAgICAgdGhpcy5kaXNwbGFjZW1lbnRCaWFzID0g
MDsKKyAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBUZXh0QnVmZmVyR2VvbWV0
cnkoIHRleHQsIHBhcmFtZXRlcnMgKSApOworICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsK
IAotICAgICAgICB0aGlzLndpcmVmcmFtZSA9IGZhbHNlOwotICAgICAgICB0aGlzLndpcmVmcmFt
ZUxpbmV3aWR0aCA9IDE7CisgICAgfQogCi0gICAgICAgIHRoaXMuZm9nID0gZmFsc2U7Ci0gICAg
ICAgIHRoaXMubGlnaHRzID0gZmFsc2U7CisgICAgVGV4dEdlb21ldHJ5LnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUoIEdlb21ldHJ5LnByb3RvdHlwZSApOworICAgIFRleHRHZW9tZXRyeS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBUZXh0R2VvbWV0cnk7CiAKLSAgICAgICAgdGhpcy5za2lubmlu
ZyA9IGZhbHNlOwotICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0cyA9IGZhbHNlOwotICAgICAgICB0
aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOworICAgIC8vIFRleHRCdWZmZXJHZW9tZXRyeQogCi0g
ICAgICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CisgICAgZnVuY3Rpb24gVGV4dEJ1
ZmZlckdlb21ldHJ5KCB0ZXh0LCBwYXJhbWV0ZXJzICkgewogCi0gICAgfQorICAgICAgICBwYXJh
bWV0ZXJzID0gcGFyYW1ldGVycyB8fCB7fTsKIAotICAgIE1lc2hOb3JtYWxNYXRlcmlhbC5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5cGUgKTsKLSAgICBNZXNoTm9y
bWFsTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaE5vcm1hbE1hdGVyaWFsOwor
ICAgICAgICB2YXIgZm9udCA9IHBhcmFtZXRlcnMuZm9udDsKIAotICAgIE1lc2hOb3JtYWxNYXRl
cmlhbC5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWwgPSB0cnVlOworICAgICAgICBpZiAo
ICEgKCBmb250ICYmIGZvbnQuaXNGb250ICkgKSB7CiAKLSAgICBNZXNoTm9ybWFsTWF0ZXJpYWwu
cHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBp
bnN0YW5jZSBvZiBUSFJFRS5Gb250LicgKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2VvbWV0
cnkoKTsKIAotICAgICAgICBNYXRlcmlhbC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3Vy
Y2UgKTsKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFw
OwotICAgICAgICB0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7CisgICAgICAgIHZh
ciBzaGFwZXMgPSBmb250LmdlbmVyYXRlU2hhcGVzKCB0ZXh0LCBwYXJhbWV0ZXJzLnNpemUgKTsK
IAotICAgICAgICB0aGlzLm5vcm1hbE1hcCA9IHNvdXJjZS5ub3JtYWxNYXA7Ci0gICAgICAgIHRo
aXMubm9ybWFsU2NhbGUuY29weSggc291cmNlLm5vcm1hbFNjYWxlICk7CisgICAgICAgIC8vIHRy
YW5zbGF0ZSBwYXJhbWV0ZXJzIHRvIEV4dHJ1ZGVHZW9tZXRyeSBBUEkKIAotICAgICAgICB0aGlz
LmRpc3BsYWNlbWVudE1hcCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7Ci0gICAgICAgIHRoaXMu
ZGlzcGxhY2VtZW50U2NhbGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7Ci0gICAgICAgIHRo
aXMuZGlzcGxhY2VtZW50QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzOworICAgICAgICBw
YXJhbWV0ZXJzLmRlcHRoID0gcGFyYW1ldGVycy5oZWlnaHQgIT09IHVuZGVmaW5lZCA/IHBhcmFt
ZXRlcnMuaGVpZ2h0IDogNTA7CiAKLSAgICAgICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2ly
ZWZyYW1lOwotICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJh
bWVMaW5ld2lkdGg7CisgICAgICAgIC8vIGRlZmF1bHRzCiAKLSAgICAgICAgdGhpcy5za2lubmlu
ZyA9IHNvdXJjZS5za2lubmluZzsKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBzb3VyY2Uu
bW9ycGhUYXJnZXRzOwotICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3JwaE5v
cm1hbHM7CisgICAgICAgIGlmICggcGFyYW1ldGVycy5iZXZlbFRoaWNrbmVzcyA9PT0gdW5kZWZp
bmVkICkgcGFyYW1ldGVycy5iZXZlbFRoaWNrbmVzcyA9IDEwOworICAgICAgICBpZiAoIHBhcmFt
ZXRlcnMuYmV2ZWxTaXplID09PSB1bmRlZmluZWQgKSBwYXJhbWV0ZXJzLmJldmVsU2l6ZSA9IDg7
CisgICAgICAgIGlmICggcGFyYW1ldGVycy5iZXZlbEVuYWJsZWQgPT09IHVuZGVmaW5lZCApIHBh
cmFtZXRlcnMuYmV2ZWxFbmFibGVkID0gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlzLCBzaGFwZXMsIHBhcmFtZXRl
cnMgKTsKIAotICAgIH07CisgICAgICAgIHRoaXMudHlwZSA9ICdUZXh0QnVmZmVyR2VvbWV0cnkn
OworCisgICAgfQorCisgICAgVGV4dEJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoIEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBUZXh0QnVmZmVy
R2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGV4dEJ1ZmZlckdlb21ldHJ5OwogCiAg
ICAgLyoqCiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAg
KiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqCi0g
ICAgICogcGFyYW1ldGVycyA9IHsKLSAgICAgKiAgY29sb3I6IDxoZXg+LAotICAgICAqICBvcGFj
aXR5OiA8ZmxvYXQ+LAotICAgICAqCi0gICAgICogIG1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJ
bWFnZT4gKSwKLSAgICAgKgotICAgICAqICBsaWdodE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJ
bWFnZT4gKSwKLSAgICAgKiAgbGlnaHRNYXBJbnRlbnNpdHk6IDxmbG9hdD4KLSAgICAgKgotICAg
ICAqICBhb01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKLSAgICAgKiAgYW9NYXBJ
bnRlbnNpdHk6IDxmbG9hdD4KLSAgICAgKgotICAgICAqICBlbWlzc2l2ZTogPGhleD4sCi0gICAg
ICogIGVtaXNzaXZlSW50ZW5zaXR5OiA8ZmxvYXQ+Ci0gICAgICogIGVtaXNzaXZlTWFwOiBuZXcg
VEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqCi0gICAgICogIHNwZWN1bGFyTWFwOiBu
ZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqCi0gICAgICogIGFscGhhTWFwOiBu
ZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAotICAgICAqCi0gICAgICogIGVudk1hcDogbmV3
IFRIUkVFLlRleHR1cmVDdWJlKCBbcG9zeCwgbmVneCwgcG9zeSwgbmVneSwgcG9zeiwgbmVnel0g
KSwKLSAgICAgKiAgY29tYmluZTogVEhSRUUuTXVsdGlwbHksCi0gICAgICogIHJlZmxlY3Rpdml0
eTogPGZsb2F0PiwKLSAgICAgKiAgcmVmcmFjdGlvblJhdGlvOiA8ZmxvYXQ+LAotICAgICAqCi0g
ICAgICogIHdpcmVmcmFtZTogPGJvb2xlYW4+LAotICAgICAqICB3aXJlZnJhbWVMaW5ld2lkdGg6
IDxmbG9hdD4sCi0gICAgICoKLSAgICAgKiAgc2tpbm5pbmc6IDxib29sPiwKLSAgICAgKiAgbW9y
cGhUYXJnZXRzOiA8Ym9vbD4sCi0gICAgICogIG1vcnBoTm9ybWFsczogPGJvb2w+Ci0gICAgICog
fQorICAgICAqIEBhdXRob3IgYmVuYWFkYW1zIC8gaHR0cHM6Ly90d2l0dGVyLmNvbS9iZW5fYV9h
ZGFtcworICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3
CiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBNZXNoTGFtYmVydE1hdGVyaWFsKCBwYXJhbWV0ZXJz
ICkgeworICAgIC8vIFNwaGVyZUdlb21ldHJ5CiAKLSAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhp
cyApOworICAgIGZ1bmN0aW9uIFNwaGVyZUdlb21ldHJ5KCByYWRpdXMsIHdpZHRoU2VnbWVudHMs
IGhlaWdodFNlZ21lbnRzLCBwaGlTdGFydCwgcGhpTGVuZ3RoLCB0aGV0YVN0YXJ0LCB0aGV0YUxl
bmd0aCApIHsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnTWVzaExhbWJlcnRNYXRlcmlhbCc7Cisg
ICAgICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB0aGlzLmNvbG9yID0gbmV3
IENvbG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlCisgICAgICAgIHRoaXMudHlwZSA9ICdTcGhl
cmVHZW9tZXRyeSc7CiAKLSAgICAgICAgdGhpcy5tYXAgPSBudWxsOworICAgICAgICB0aGlzLnBh
cmFtZXRlcnMgPSB7CisgICAgICAgICAgICByYWRpdXM6IHJhZGl1cywKKyAgICAgICAgICAgIHdp
ZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsCisgICAgICAgICAgICBoZWlnaHRTZWdtZW50czog
aGVpZ2h0U2VnbWVudHMsCisgICAgICAgICAgICBwaGlTdGFydDogcGhpU3RhcnQsCisgICAgICAg
ICAgICBwaGlMZW5ndGg6IHBoaUxlbmd0aCwKKyAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRh
U3RhcnQsCisgICAgICAgICAgICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKKyAgICAgICAgfTsK
IAotICAgICAgICB0aGlzLmxpZ2h0TWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5saWdodE1hcElu
dGVuc2l0eSA9IDEuMDsKKyAgICAgICAgdGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBTcGhl
cmVCdWZmZXJHZW9tZXRyeSggcmFkaXVzLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cywg
cGhpU3RhcnQsIHBoaUxlbmd0aCwgdGhldGFTdGFydCwgdGhldGFMZW5ndGggKSApOworICAgICAg
ICB0aGlzLm1lcmdlVmVydGljZXMoKTsKIAotICAgICAgICB0aGlzLmFvTWFwID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5hb01hcEludGVuc2l0eSA9IDEuMDsKKyAgICB9CiAKLSAgICAgICAgdGhpcy5l
bWlzc2l2ZSA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTsKLSAgICAgICAgdGhpcy5lbWlzc2l2ZUlu
dGVuc2l0eSA9IDEuMDsKLSAgICAgICAgdGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7CisgICAgU3Bo
ZXJlR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnkucHJvdG90eXBl
ICk7CisgICAgU3BoZXJlR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3BoZXJlR2Vv
bWV0cnk7CiAKLSAgICAgICAgdGhpcy5zcGVjdWxhck1hcCA9IG51bGw7CisgICAgLy8gU3BoZXJl
QnVmZmVyR2VvbWV0cnkKKworICAgIGZ1bmN0aW9uIFNwaGVyZUJ1ZmZlckdlb21ldHJ5KCByYWRp
dXMsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBwaGlTdGFydCwgcGhpTGVuZ3RoLCB0
aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApIHsKKworICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxs
KCB0aGlzICk7CisKKyAgICAgICAgdGhpcy50eXBlID0gJ1NwaGVyZUJ1ZmZlckdlb21ldHJ5JzsK
KworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICByYWRpdXM6IHJhZGl1
cywKKyAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsCisgICAgICAgICAg
ICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsCisgICAgICAgICAgICBwaGlTdGFydDog
cGhpU3RhcnQsCisgICAgICAgICAgICBwaGlMZW5ndGg6IHBoaUxlbmd0aCwKKyAgICAgICAgICAg
IHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCisgICAgICAgICAgICB0aGV0YUxlbmd0aDogdGhldGFM
ZW5ndGgKKyAgICAgICAgfTsKKworICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgMTsKKworICAg
ICAgICB3aWR0aFNlZ21lbnRzID0gTWF0aC5tYXgoIDMsIE1hdGguZmxvb3IoIHdpZHRoU2VnbWVu
dHMgKSB8fCA4ICk7CisgICAgICAgIGhlaWdodFNlZ21lbnRzID0gTWF0aC5tYXgoIDIsIE1hdGgu
Zmxvb3IoIGhlaWdodFNlZ21lbnRzICkgfHwgNiApOworCisgICAgICAgIHBoaVN0YXJ0ID0gcGhp
U3RhcnQgIT09IHVuZGVmaW5lZCA/IHBoaVN0YXJ0IDogMDsKKyAgICAgICAgcGhpTGVuZ3RoID0g
cGhpTGVuZ3RoICE9PSB1bmRlZmluZWQgPyBwaGlMZW5ndGggOiBNYXRoLlBJICogMjsKKworICAg
ICAgICB0aGV0YVN0YXJ0ID0gdGhldGFTdGFydCAhPT0gdW5kZWZpbmVkID8gdGhldGFTdGFydCA6
IDA7CisgICAgICAgIHRoZXRhTGVuZ3RoID0gdGhldGFMZW5ndGggIT09IHVuZGVmaW5lZCA/IHRo
ZXRhTGVuZ3RoIDogTWF0aC5QSTsKKworICAgICAgICB2YXIgdGhldGFFbmQgPSB0aGV0YVN0YXJ0
ICsgdGhldGFMZW5ndGg7CisKKyAgICAgICAgdmFyIGl4LCBpeTsKKworICAgICAgICB2YXIgaW5k
ZXggPSAwOworICAgICAgICB2YXIgZ3JpZCA9IFtdOworCisgICAgICAgIHZhciB2ZXJ0ZXggPSBu
ZXcgVmVjdG9yMygpOworICAgICAgICB2YXIgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTsKKworICAg
ICAgICAvLyBidWZmZXJzCisKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAgICAgdmFy
IHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAgICAgIHZhciB1
dnMgPSBbXTsKKworICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZz
CisKKyAgICAgICAgZm9yICggaXkgPSAwOyBpeSA8PSBoZWlnaHRTZWdtZW50czsgaXkgKysgKSB7
CisKKyAgICAgICAgICAgIHZhciB2ZXJ0aWNlc1JvdyA9IFtdOworCisgICAgICAgICAgICB2YXIg
diA9IGl5IC8gaGVpZ2h0U2VnbWVudHM7CisKKyAgICAgICAgICAgIGZvciAoIGl4ID0gMDsgaXgg
PD0gd2lkdGhTZWdtZW50czsgaXggKysgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgdSA9IGl4
IC8gd2lkdGhTZWdtZW50czsKKworICAgICAgICAgICAgICAgIC8vIHZlcnRleAorCisgICAgICAg
ICAgICAgICAgdmVydGV4LnggPSAtIHJhZGl1cyAqIE1hdGguY29zKCBwaGlTdGFydCArIHUgKiBw
aGlMZW5ndGggKSAqIE1hdGguc2luKCB0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoICk7Cisg
ICAgICAgICAgICAgICAgdmVydGV4LnkgPSByYWRpdXMgKiBNYXRoLmNvcyggdGhldGFTdGFydCAr
IHYgKiB0aGV0YUxlbmd0aCApOworICAgICAgICAgICAgICAgIHZlcnRleC56ID0gcmFkaXVzICog
TWF0aC5zaW4oIHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCApICogTWF0aC5zaW4oIHRoZXRhU3Rh
cnQgKyB2ICogdGhldGFMZW5ndGggKTsKKworICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2go
IHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKKworICAgICAgICAgICAgICAgIC8vIG5v
cm1hbAorCisgICAgICAgICAgICAgICAgbm9ybWFsLnNldCggdmVydGV4LngsIHZlcnRleC55LCB2
ZXJ0ZXgueiApLm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVzaCggbm9y
bWFsLngsIG5vcm1hbC55LCBub3JtYWwueiApOworCisgICAgICAgICAgICAgICAgLy8gdXYKKwor
ICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1LCAxIC0gdiApOworCisgICAgICAgICAgICAgICAg
dmVydGljZXNSb3cucHVzaCggaW5kZXggKysgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBncmlkLnB1c2goIHZlcnRpY2VzUm93ICk7CisKKyAgICAgICAgfQorCisgICAgICAgIC8v
IGluZGljZXMKKworICAgICAgICBmb3IgKCBpeSA9IDA7IGl5IDwgaGVpZ2h0U2VnbWVudHM7IGl5
ICsrICkgeworCisgICAgICAgICAgICBmb3IgKCBpeCA9IDA7IGl4IDwgd2lkdGhTZWdtZW50czsg
aXggKysgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgYSA9IGdyaWRbIGl5IF1bIGl4ICsgMSBd
OworICAgICAgICAgICAgICAgIHZhciBiID0gZ3JpZFsgaXkgXVsgaXggXTsKKyAgICAgICAgICAg
ICAgICB2YXIgYyA9IGdyaWRbIGl5ICsgMSBdWyBpeCBdOworICAgICAgICAgICAgICAgIHZhciBk
ID0gZ3JpZFsgaXkgKyAxIF1bIGl4ICsgMSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBpeSAh
PT0gMCB8fCB0aGV0YVN0YXJ0ID4gMCApIGluZGljZXMucHVzaCggYSwgYiwgZCApOworICAgICAg
ICAgICAgICAgIGlmICggaXkgIT09IGhlaWdodFNlZ21lbnRzIC0gMSB8fCB0aGV0YUVuZCA8IE1h
dGguUEkgKSBpbmRpY2VzLnB1c2goIGIsIGMsIGQgKTsKKworICAgICAgICAgICAgfQorCisgICAg
ICAgIH0KKworICAgICAgICAvLyBidWlsZCBnZW9tZXRyeQorCisgICAgICAgIHRoaXMuc2V0SW5k
ZXgoIGluZGljZXMgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5l
dyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7CisgICAgICAgIHRoaXMu
YWRkQXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1h
bHMsIDMgKSApOworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJC
dWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7CisKKyAgICB9CisKKyAgICBTcGhlcmVCdWZmZXJH
ZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9tZXRyeS5wcm90b3R5
cGUgKTsKKyAgICBTcGhlcmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBT
cGhlcmVCdWZmZXJHZW9tZXRyeTsKKworICAgIC8qKgorICAgICAqIEBhdXRob3IgS2FsZWIgTXVy
cGh5CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODcK
KyAgICAgKi8KKworICAgIC8vIFJpbmdHZW9tZXRyeQorCisgICAgZnVuY3Rpb24gUmluZ0dlb21l
dHJ5KCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIHRoZXRhU2VnbWVudHMsIHBoaVNlZ21lbnRz
LCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApIHsKKworICAgICAgICBHZW9tZXRyeS5jYWxsKCB0
aGlzICk7CisKKyAgICAgICAgdGhpcy50eXBlID0gJ1JpbmdHZW9tZXRyeSc7CisKKyAgICAgICAg
dGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAgaW5uZXJSYWRpdXM6IGlubmVyUmFkaXVz
LAorICAgICAgICAgICAgb3V0ZXJSYWRpdXM6IG91dGVyUmFkaXVzLAorICAgICAgICAgICAgdGhl
dGFTZWdtZW50czogdGhldGFTZWdtZW50cywKKyAgICAgICAgICAgIHBoaVNlZ21lbnRzOiBwaGlT
ZWdtZW50cywKKyAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCisgICAgICAgICAg
ICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmZy
b21CdWZmZXJHZW9tZXRyeSggbmV3IFJpbmdCdWZmZXJHZW9tZXRyeSggaW5uZXJSYWRpdXMsIG91
dGVyUmFkaXVzLCB0aGV0YVNlZ21lbnRzLCBwaGlTZWdtZW50cywgdGhldGFTdGFydCwgdGhldGFM
ZW5ndGggKSApOworICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKKworICAgIH0KKworICAg
IFJpbmdHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5
cGUgKTsKKyAgICBSaW5nR2VvbWV0cnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmluZ0dlb21l
dHJ5OworCisgICAgLy8gUmluZ0J1ZmZlckdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBSaW5nQnVm
ZmVyR2VvbWV0cnkoIGlubmVyUmFkaXVzLCBvdXRlclJhZGl1cywgdGhldGFTZWdtZW50cywgcGhp
U2VnbWVudHMsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgeworCisgICAgICAgIEJ1ZmZlckdl
b21ldHJ5LmNhbGwoIHRoaXMgKTsKKworICAgICAgICB0aGlzLnR5cGUgPSAnUmluZ0J1ZmZlckdl
b21ldHJ5JzsKKworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICBpbm5l
clJhZGl1czogaW5uZXJSYWRpdXMsCisgICAgICAgICAgICBvdXRlclJhZGl1czogb3V0ZXJSYWRp
dXMsCisgICAgICAgICAgICB0aGV0YVNlZ21lbnRzOiB0aGV0YVNlZ21lbnRzLAorICAgICAgICAg
ICAgcGhpU2VnbWVudHM6IHBoaVNlZ21lbnRzLAorICAgICAgICAgICAgdGhldGFTdGFydDogdGhl
dGFTdGFydCwKKyAgICAgICAgICAgIHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aAorICAgICAgICB9
OworCisgICAgICAgIGlubmVyUmFkaXVzID0gaW5uZXJSYWRpdXMgfHwgMC41OworICAgICAgICBv
dXRlclJhZGl1cyA9IG91dGVyUmFkaXVzIHx8IDE7CisKKyAgICAgICAgdGhldGFTdGFydCA9IHRo
ZXRhU3RhcnQgIT09IHVuZGVmaW5lZCA/IHRoZXRhU3RhcnQgOiAwOworICAgICAgICB0aGV0YUxl
bmd0aCA9IHRoZXRhTGVuZ3RoICE9PSB1bmRlZmluZWQgPyB0aGV0YUxlbmd0aCA6IE1hdGguUEkg
KiAyOworCisgICAgICAgIHRoZXRhU2VnbWVudHMgPSB0aGV0YVNlZ21lbnRzICE9PSB1bmRlZmlu
ZWQgPyBNYXRoLm1heCggMywgdGhldGFTZWdtZW50cyApIDogODsKKyAgICAgICAgcGhpU2VnbWVu
dHMgPSBwaGlTZWdtZW50cyAhPT0gdW5kZWZpbmVkID8gTWF0aC5tYXgoIDEsIHBoaVNlZ21lbnRz
ICkgOiAxOworCisgICAgICAgIC8vIGJ1ZmZlcnMKKworICAgICAgICB2YXIgaW5kaWNlcyA9IFtd
OworICAgICAgICB2YXIgdmVydGljZXMgPSBbXTsKKyAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTsK
KyAgICAgICAgdmFyIHV2cyA9IFtdOworCisgICAgICAgIC8vIHNvbWUgaGVscGVyIHZhcmlhYmxl
cworCisgICAgICAgIHZhciBzZWdtZW50OworICAgICAgICB2YXIgcmFkaXVzID0gaW5uZXJSYWRp
dXM7CisgICAgICAgIHZhciByYWRpdXNTdGVwID0gKCAoIG91dGVyUmFkaXVzIC0gaW5uZXJSYWRp
dXMgKSAvIHBoaVNlZ21lbnRzICk7CisgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygp
OworICAgICAgICB2YXIgdXYgPSBuZXcgVmVjdG9yMigpOworICAgICAgICB2YXIgaiwgaTsKKwor
ICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzCisKKyAgICAgICAg
Zm9yICggaiA9IDA7IGogPD0gcGhpU2VnbWVudHM7IGogKysgKSB7CisKKyAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBpIDw9IHRoZXRhU2VnbWVudHM7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAg
ICAvLyB2YWx1ZXMgYXJlIGdlbmVyYXRlIGZyb20gdGhlIGluc2lkZSBvZiB0aGUgcmluZyB0byB0
aGUgb3V0c2lkZQorCisgICAgICAgICAgICAgICAgc2VnbWVudCA9IHRoZXRhU3RhcnQgKyBpIC8g
dGhldGFTZWdtZW50cyAqIHRoZXRhTGVuZ3RoOworCisgICAgICAgICAgICAgICAgLy8gdmVydGV4
CisKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgueCA9IHJhZGl1cyAqIE1hdGguY29zKCBzZWdtZW50
ICk7CisgICAgICAgICAgICAgICAgdmVydGV4LnkgPSByYWRpdXMgKiBNYXRoLnNpbiggc2VnbWVu
dCApOworCisgICAgICAgICAgICAgICAgdmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55
LCB2ZXJ0ZXgueiApOworCisgICAgICAgICAgICAgICAgLy8gbm9ybWFsCisKKyAgICAgICAgICAg
ICAgICBub3JtYWxzLnB1c2goIDAsIDAsIDEgKTsKKworICAgICAgICAgICAgICAgIC8vIHV2CisK
KyAgICAgICAgICAgICAgICB1di54ID0gKCB2ZXJ0ZXgueCAvIG91dGVyUmFkaXVzICsgMSApIC8g
MjsKKyAgICAgICAgICAgICAgICB1di55ID0gKCB2ZXJ0ZXgueSAvIG91dGVyUmFkaXVzICsgMSAp
IC8gMjsKKworICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1di54LCB1di55ICk7CisKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIHJhZGl1cyBmb3IgbmV4dCBy
b3cgb2YgdmVydGljZXMKKworICAgICAgICAgICAgcmFkaXVzICs9IHJhZGl1c1N0ZXA7CisKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIGluZGljZXMKKworICAgICAgICBmb3IgKCBqID0gMDsgaiA8
IHBoaVNlZ21lbnRzOyBqICsrICkgeworCisgICAgICAgICAgICB2YXIgdGhldGFTZWdtZW50TGV2
ZWwgPSBqICogKCB0aGV0YVNlZ21lbnRzICsgMSApOworCisgICAgICAgICAgICBmb3IgKCBpID0g
MDsgaSA8IHRoZXRhU2VnbWVudHM7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAgICBzZWdtZW50
ID0gaSArIHRoZXRhU2VnbWVudExldmVsOworCisgICAgICAgICAgICAgICAgdmFyIGEgPSBzZWdt
ZW50OworICAgICAgICAgICAgICAgIHZhciBiID0gc2VnbWVudCArIHRoZXRhU2VnbWVudHMgKyAx
OworICAgICAgICAgICAgICAgIHZhciBjID0gc2VnbWVudCArIHRoZXRhU2VnbWVudHMgKyAyOwor
ICAgICAgICAgICAgICAgIHZhciBkID0gc2VnbWVudCArIDE7CisKKyAgICAgICAgICAgICAgICAv
LyBmYWNlcworCisgICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBhLCBiLCBkICk7CisgICAg
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7CisKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gYnVpbGQgZ2VvbWV0cnkKKworICAgICAgICB0aGlzLnNl
dEluZGV4KCBpbmRpY2VzICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRpb24n
LCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApOworICAgICAgICB0
aGlzLmFkZEF0dHJpYnV0ZSggJ25vcm1hbCcsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBu
b3JtYWxzLCAzICkgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICd1dicsIG5ldyBGbG9h
dDMyQnVmZmVyQXR0cmlidXRlKCB1dnMsIDIgKSApOworCisgICAgfQorCisgICAgUmluZ0J1ZmZl
ckdlb21ldHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEJ1ZmZlckdlb21ldHJ5LnByb3Rv
dHlwZSApOworICAgIFJpbmdCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBS
aW5nQnVmZmVyR2VvbWV0cnk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGFzdHJvZHVkIC8g
aHR0cDovL2FzdHJvZHVkLmlzZ3JlYXQub3JnLworICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHBz
Oi8vZ2l0aHViLmNvbS96ejg1CisgICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFy
YS5pbworICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3
CisgICAgICovCisKKyAgICAvLyBMYXRoZUdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBMYXRoZUdl
b21ldHJ5KCBwb2ludHMsIHNlZ21lbnRzLCBwaGlTdGFydCwgcGhpTGVuZ3RoICkgeworCisgICAg
ICAgIEdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKworICAgICAgICB0aGlzLnR5cGUgPSAnTGF0aGVH
ZW9tZXRyeSc7CisKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAgcG9p
bnRzOiBwb2ludHMsCisgICAgICAgICAgICBzZWdtZW50czogc2VnbWVudHMsCisgICAgICAgICAg
ICBwaGlTdGFydDogcGhpU3RhcnQsCisgICAgICAgICAgICBwaGlMZW5ndGg6IHBoaUxlbmd0aAor
ICAgICAgICB9OworCisgICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgTGF0aGVC
dWZmZXJHZW9tZXRyeSggcG9pbnRzLCBzZWdtZW50cywgcGhpU3RhcnQsIHBoaUxlbmd0aCApICk7
CisgICAgICAgIHRoaXMubWVyZ2VWZXJ0aWNlcygpOworCisgICAgfQorCisgICAgTGF0aGVHZW9t
ZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAg
ICBMYXRoZUdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhdGhlR2VvbWV0cnk7CisK
KyAgICAvLyBMYXRoZUJ1ZmZlckdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBMYXRoZUJ1ZmZlckdl
b21ldHJ5KCBwb2ludHMsIHNlZ21lbnRzLCBwaGlTdGFydCwgcGhpTGVuZ3RoICkgeworCisgICAg
ICAgIEJ1ZmZlckdlb21ldHJ5LmNhbGwoIHRoaXMgKTsKKworICAgICAgICB0aGlzLnR5cGUgPSAn
TGF0aGVCdWZmZXJHZW9tZXRyeSc7CisKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAg
ICAgICAgICAgcG9pbnRzOiBwb2ludHMsCisgICAgICAgICAgICBzZWdtZW50czogc2VnbWVudHMs
CisgICAgICAgICAgICBwaGlTdGFydDogcGhpU3RhcnQsCisgICAgICAgICAgICBwaGlMZW5ndGg6
IHBoaUxlbmd0aAorICAgICAgICB9OworCisgICAgICAgIHNlZ21lbnRzID0gTWF0aC5mbG9vcigg
c2VnbWVudHMgKSB8fCAxMjsKKyAgICAgICAgcGhpU3RhcnQgPSBwaGlTdGFydCB8fCAwOworICAg
ICAgICBwaGlMZW5ndGggPSBwaGlMZW5ndGggfHwgTWF0aC5QSSAqIDI7CisKKyAgICAgICAgLy8g
Y2xhbXAgcGhpTGVuZ3RoIHNvIGl0J3MgaW4gcmFuZ2Ugb2YgWyAwLCAyUEkgXQorCisgICAgICAg
IHBoaUxlbmd0aCA9IF9NYXRoLmNsYW1wKCBwaGlMZW5ndGgsIDAsIE1hdGguUEkgKiAyICk7CisK
KworICAgICAgICAvLyBidWZmZXJzCisKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAgICAg
ICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciB1dnMgPSBbXTsKKworICAgICAgICAv
LyBoZWxwZXIgdmFyaWFibGVzCisKKyAgICAgICAgdmFyIGJhc2U7CisgICAgICAgIHZhciBpbnZl
cnNlU2VnbWVudHMgPSAxLjAgLyBzZWdtZW50czsKKyAgICAgICAgdmFyIHZlcnRleCA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgIHZhciB1diA9IG5ldyBWZWN0b3IyKCk7CisgICAgICAgIHZhciBp
LCBqOworCisgICAgICAgIC8vIGdlbmVyYXRlIHZlcnRpY2VzIGFuZCB1dnMKKworICAgICAgICBm
b3IgKCBpID0gMDsgaSA8PSBzZWdtZW50czsgaSArKyApIHsKKworICAgICAgICAgICAgdmFyIHBo
aSA9IHBoaVN0YXJ0ICsgaSAqIGludmVyc2VTZWdtZW50cyAqIHBoaUxlbmd0aDsKKworICAgICAg
ICAgICAgdmFyIHNpbiA9IE1hdGguc2luKCBwaGkgKTsKKyAgICAgICAgICAgIHZhciBjb3MgPSBN
YXRoLmNvcyggcGhpICk7CisKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDw9ICggcG9pbnRz
Lmxlbmd0aCAtIDEgKTsgaiArKyApIHsKKworICAgICAgICAgICAgICAgIC8vIHZlcnRleAorCisg
ICAgICAgICAgICAgICAgdmVydGV4LnggPSBwb2ludHNbIGogXS54ICogc2luOworICAgICAgICAg
ICAgICAgIHZlcnRleC55ID0gcG9pbnRzWyBqIF0ueTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgu
eiA9IHBvaW50c1sgaiBdLnggKiBjb3M7CisKKyAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNo
KCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CisKKyAgICAgICAgICAgICAgICAvLyB1
dgorCisgICAgICAgICAgICAgICAgdXYueCA9IGkgLyBzZWdtZW50czsKKyAgICAgICAgICAgICAg
ICB1di55ID0gaiAvICggcG9pbnRzLmxlbmd0aCAtIDEgKTsKKworICAgICAgICAgICAgICAgIHV2
cy5wdXNoKCB1di54LCB1di55ICk7CisKKworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKwor
ICAgICAgICAvLyBpbmRpY2VzCisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBzZWdtZW50czsg
aSArKyApIHsKKworICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCAoIHBvaW50cy5sZW5ndGgg
LSAxICk7IGogKysgKSB7CisKKyAgICAgICAgICAgICAgICBiYXNlID0gaiArIGkgKiBwb2ludHMu
bGVuZ3RoOworCisgICAgICAgICAgICAgICAgdmFyIGEgPSBiYXNlOworICAgICAgICAgICAgICAg
IHZhciBiID0gYmFzZSArIHBvaW50cy5sZW5ndGg7CisgICAgICAgICAgICAgICAgdmFyIGMgPSBi
YXNlICsgcG9pbnRzLmxlbmd0aCArIDE7CisgICAgICAgICAgICAgICAgdmFyIGQgPSBiYXNlICsg
MTsKKworICAgICAgICAgICAgICAgIC8vIGZhY2VzCisKKyAgICAgICAgICAgICAgICBpbmRpY2Vz
LnB1c2goIGEsIGIsIGQgKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGIsIGMsIGQg
KTsKKworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICAvLyBidWlsZCBnZW9t
ZXRyeQorCisgICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsKKyAgICAgICAgdGhpcy5h
ZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0
aWNlcywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAndXYnLCBuZXcgRmxvYXQz
MkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsKKworICAgICAgICAvLyBnZW5lcmF0ZSBub3Jt
YWxzCisKKyAgICAgICAgdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpOworCisgICAgICAgIC8v
IGlmIHRoZSBnZW9tZXRyeSBpcyBjbG9zZWQsIHdlIG5lZWQgdG8gYXZlcmFnZSB0aGUgbm9ybWFs
cyBhbG9uZyB0aGUgc2VhbS4KKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyB2
ZXJ0aWNlcyBhcmUgaWRlbnRpY2FsIChidXQgc3RpbGwgaGF2ZSBkaWZmZXJlbnQgVVZzKS4KKwor
ICAgICAgICBpZiAoIHBoaUxlbmd0aCA9PT0gTWF0aC5QSSAqIDIgKSB7CisKKyAgICAgICAgICAg
IHZhciBub3JtYWxzID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTsKKyAgICAgICAgICAg
IHZhciBuMSA9IG5ldyBWZWN0b3IzKCk7CisgICAgICAgICAgICB2YXIgbjIgPSBuZXcgVmVjdG9y
MygpOworICAgICAgICAgICAgdmFyIG4gPSBuZXcgVmVjdG9yMygpOworCisgICAgICAgICAgICAv
LyB0aGlzIGlzIHRoZSBidWZmZXIgb2Zmc2V0IGZvciB0aGUgbGFzdCBsaW5lIG9mIHZlcnRpY2Vz
CisKKyAgICAgICAgICAgIGJhc2UgPSBzZWdtZW50cyAqIHBvaW50cy5sZW5ndGggKiAzOworCisg
ICAgICAgICAgICBmb3IgKCBpID0gMCwgaiA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICsrLCBq
ICs9IDMgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBzZWxlY3QgdGhlIG5vcm1hbCBvZiB0aGUg
dmVydGV4IGluIHRoZSBmaXJzdCBsaW5lCisKKyAgICAgICAgICAgICAgICBuMS54ID0gbm9ybWFs
c1sgaiArIDAgXTsKKyAgICAgICAgICAgICAgICBuMS55ID0gbm9ybWFsc1sgaiArIDEgXTsKKyAg
ICAgICAgICAgICAgICBuMS56ID0gbm9ybWFsc1sgaiArIDIgXTsKKworICAgICAgICAgICAgICAg
IC8vIHNlbGVjdCB0aGUgbm9ybWFsIG9mIHRoZSB2ZXJ0ZXggaW4gdGhlIGxhc3QgbGluZQorCisg
ICAgICAgICAgICAgICAgbjIueCA9IG5vcm1hbHNbIGJhc2UgKyBqICsgMCBdOworICAgICAgICAg
ICAgICAgIG4yLnkgPSBub3JtYWxzWyBiYXNlICsgaiArIDEgXTsKKyAgICAgICAgICAgICAgICBu
Mi56ID0gbm9ybWFsc1sgYmFzZSArIGogKyAyIF07CisKKyAgICAgICAgICAgICAgICAvLyBhdmVy
YWdlIG5vcm1hbHMKKworICAgICAgICAgICAgICAgIG4uYWRkVmVjdG9ycyggbjEsIG4yICkubm9y
bWFsaXplKCk7CisKKyAgICAgICAgICAgICAgICAvLyBhc3NpZ24gdGhlIG5ldyB2YWx1ZXMgdG8g
Ym90aCBub3JtYWxzCisKKyAgICAgICAgICAgICAgICBub3JtYWxzWyBqICsgMCBdID0gbm9ybWFs
c1sgYmFzZSArIGogKyAwIF0gPSBuLng7CisgICAgICAgICAgICAgICAgbm9ybWFsc1sgaiArIDEg
XSA9IG5vcm1hbHNbIGJhc2UgKyBqICsgMSBdID0gbi55OworICAgICAgICAgICAgICAgIG5vcm1h
bHNbIGogKyAyIF0gPSBub3JtYWxzWyBiYXNlICsgaiArIDIgXSA9IG4uejsKKworICAgICAgICAg
ICAgfQorCisgICAgICAgIH0KKworICAgIH0KKworICAgIExhdGhlQnVmZmVyR2VvbWV0cnkucHJv
dG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJvdG90eXBlICk7CisgICAg
TGF0aGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXRoZUJ1ZmZlckdl
b21ldHJ5OworCisgICAgLyoqCisgICAgICogQGF1dGhvciBqb25vYnIxIC8gaHR0cDovL2pvbm9i
cjEuY29tCisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2Vu
ODcKKyAgICAgKi8KKworICAgIC8vIFNoYXBlR2VvbWV0cnkKKworICAgIGZ1bmN0aW9uIFNoYXBl
R2VvbWV0cnkoIHNoYXBlcywgY3VydmVTZWdtZW50cyApIHsKKworICAgICAgICBHZW9tZXRyeS5j
YWxsKCB0aGlzICk7CisKKyAgICAgICAgdGhpcy50eXBlID0gJ1NoYXBlR2VvbWV0cnknOworCisg
ICAgICAgIGlmICggdHlwZW9mIGN1cnZlU2VnbWVudHMgPT09ICdvYmplY3QnICkgeworCisgICAg
ICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5TaGFwZUdlb21ldHJ5OiBPcHRpb25zIHBhcmFt
ZXRlciBoYXMgYmVlbiByZW1vdmVkLicgKTsKKworICAgICAgICAgICAgY3VydmVTZWdtZW50cyA9
IGN1cnZlU2VnbWVudHMuY3VydmVTZWdtZW50czsKKworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5wYXJhbWV0ZXJzID0geworICAgICAgICAgICAgc2hhcGVzOiBzaGFwZXMsCisgICAgICAgICAg
ICBjdXJ2ZVNlZ21lbnRzOiBjdXJ2ZVNlZ21lbnRzCisgICAgICAgIH07CisKKyAgICAgICAgdGhp
cy5mcm9tQnVmZmVyR2VvbWV0cnkoIG5ldyBTaGFwZUJ1ZmZlckdlb21ldHJ5KCBzaGFwZXMsIGN1
cnZlU2VnbWVudHMgKSApOworICAgICAgICB0aGlzLm1lcmdlVmVydGljZXMoKTsKKworICAgIH0K
KworICAgIFNoYXBlR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggR2VvbWV0cnku
cHJvdG90eXBlICk7CisgICAgU2hhcGVHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBT
aGFwZUdlb21ldHJ5OworCisgICAgU2hhcGVHZW9tZXRyeS5wcm90b3R5cGUudG9KU09OID0gZnVu
Y3Rpb24gKCkgeworCisgICAgICAgIHZhciBkYXRhID0gR2VvbWV0cnkucHJvdG90eXBlLnRvSlNP
Ti5jYWxsKCB0aGlzICk7CisKKyAgICAgICAgdmFyIHNoYXBlcyA9IHRoaXMucGFyYW1ldGVycy5z
aGFwZXM7CisKKyAgICAgICAgcmV0dXJuIHRvSlNPTiQxKCBzaGFwZXMsIGRhdGEgKTsKKworICAg
IH07CisKKyAgICAvLyBTaGFwZUJ1ZmZlckdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBTaGFwZUJ1
ZmZlckdlb21ldHJ5KCBzaGFwZXMsIGN1cnZlU2VnbWVudHMgKSB7CisKKyAgICAgICAgQnVmZmVy
R2VvbWV0cnkuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdTaGFwZUJ1ZmZl
ckdlb21ldHJ5JzsKKworICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB7CisgICAgICAgICAgICBz
aGFwZXM6IHNoYXBlcywKKyAgICAgICAgICAgIGN1cnZlU2VnbWVudHM6IGN1cnZlU2VnbWVudHMK
KyAgICAgICAgfTsKKworICAgICAgICBjdXJ2ZVNlZ21lbnRzID0gY3VydmVTZWdtZW50cyB8fCAx
MjsKKworICAgICAgICAvLyBidWZmZXJzCisKKyAgICAgICAgdmFyIGluZGljZXMgPSBbXTsKKyAg
ICAgICAgdmFyIHZlcnRpY2VzID0gW107CisgICAgICAgIHZhciBub3JtYWxzID0gW107CisgICAg
ICAgIHZhciB1dnMgPSBbXTsKKworICAgICAgICAvLyBoZWxwZXIgdmFyaWFibGVzCisKKyAgICAg
ICAgdmFyIGdyb3VwU3RhcnQgPSAwOworICAgICAgICB2YXIgZ3JvdXBDb3VudCA9IDA7CisKKyAg
ICAgICAgLy8gYWxsb3cgc2luZ2xlIGFuZCBhcnJheSB2YWx1ZXMgZm9yICJzaGFwZXMiIHBhcmFt
ZXRlcgorCisgICAgICAgIGlmICggQXJyYXkuaXNBcnJheSggc2hhcGVzICkgPT09IGZhbHNlICkg
eworCisgICAgICAgICAgICBhZGRTaGFwZSggc2hhcGVzICk7CisKKyAgICAgICAgfSBlbHNlIHsK
KworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgc2hhcGVzLmxlbmd0aDsgaSArKyAp
IHsKKworICAgICAgICAgICAgICAgIGFkZFNoYXBlKCBzaGFwZXNbIGkgXSApOworCisgICAgICAg
ICAgICAgICAgdGhpcy5hZGRHcm91cCggZ3JvdXBTdGFydCwgZ3JvdXBDb3VudCwgaSApOyAvLyBl
bmFibGVzIE11bHRpTWF0ZXJpYWwgc3VwcG9ydAorCisgICAgICAgICAgICAgICAgZ3JvdXBTdGFy
dCArPSBncm91cENvdW50OworICAgICAgICAgICAgICAgIGdyb3VwQ291bnQgPSAwOworCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIC8vIGJ1aWxkIGdlb21ldHJ5CisKKyAg
ICAgICAgdGhpcy5zZXRJbmRleCggaW5kaWNlcyApOworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0
ZSggJ3Bvc2l0aW9uJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHZlcnRpY2VzLCAzICkg
KTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdub3JtYWwnLCBuZXcgRmxvYXQzMkJ1ZmZl
ckF0dHJpYnV0ZSggbm9ybWFscywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAn
dXYnLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdXZzLCAyICkgKTsKKworCisgICAgICAg
IC8vIGhlbHBlciBmdW5jdGlvbnMKKworICAgICAgICBmdW5jdGlvbiBhZGRTaGFwZSggc2hhcGUg
KSB7CisKKyAgICAgICAgICAgIHZhciBpLCBsLCBzaGFwZUhvbGU7CisKKyAgICAgICAgICAgIHZh
ciBpbmRleE9mZnNldCA9IHZlcnRpY2VzLmxlbmd0aCAvIDM7CisgICAgICAgICAgICB2YXIgcG9p
bnRzID0gc2hhcGUuZXh0cmFjdFBvaW50cyggY3VydmVTZWdtZW50cyApOworCisgICAgICAgICAg
ICB2YXIgc2hhcGVWZXJ0aWNlcyA9IHBvaW50cy5zaGFwZTsKKyAgICAgICAgICAgIHZhciBzaGFw
ZUhvbGVzID0gcG9pbnRzLmhvbGVzOworCisgICAgICAgICAgICAvLyBjaGVjayBkaXJlY3Rpb24g
b2YgdmVydGljZXMKKworICAgICAgICAgICAgaWYgKCBTaGFwZVV0aWxzLmlzQ2xvY2tXaXNlKCBz
aGFwZVZlcnRpY2VzICkgPT09IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgc2hhcGVWZXJ0
aWNlcyA9IHNoYXBlVmVydGljZXMucmV2ZXJzZSgpOworCisgICAgICAgICAgICAgICAgLy8gYWxz
byBjaGVjayBpZiBob2xlcyBhcmUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbgorCisgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzaGFwZUhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgc2hhcGVIb2xlID0gc2hhcGVIb2xlc1sgaSBdOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICggU2hhcGVVdGlscy5pc0Nsb2NrV2lzZSggc2hhcGVI
b2xlICkgPT09IHRydWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlSG9sZXNb
IGkgXSA9IHNoYXBlSG9sZS5yZXZlcnNlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBmYWNl
cyA9IFNoYXBlVXRpbHMudHJpYW5ndWxhdGVTaGFwZSggc2hhcGVWZXJ0aWNlcywgc2hhcGVIb2xl
cyApOworCisgICAgICAgICAgICAvLyBqb2luIHZlcnRpY2VzIG9mIGlubmVyIGFuZCBvdXRlciBw
YXRocyB0byBhIHNpbmdsZSBhcnJheQorCisgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNo
YXBlSG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAgIHNoYXBl
SG9sZSA9IHNoYXBlSG9sZXNbIGkgXTsKKyAgICAgICAgICAgICAgICBzaGFwZVZlcnRpY2VzID0g
c2hhcGVWZXJ0aWNlcy5jb25jYXQoIHNoYXBlSG9sZSApOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIHZlcnRpY2VzLCBub3JtYWxzLCB1dnMKKworICAgICAgICAgICAgZm9yICgg
aSA9IDAsIGwgPSBzaGFwZVZlcnRpY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisKKyAgICAg
ICAgICAgICAgICB2YXIgdmVydGV4ID0gc2hhcGVWZXJ0aWNlc1sgaSBdOworCisgICAgICAgICAg
ICAgICAgdmVydGljZXMucHVzaCggdmVydGV4LngsIHZlcnRleC55LCAwICk7CisgICAgICAgICAg
ICAgICAgbm9ybWFscy5wdXNoKCAwLCAwLCAxICk7CisgICAgICAgICAgICAgICAgdXZzLnB1c2go
IHZlcnRleC54LCB2ZXJ0ZXgueSApOyAvLyB3b3JsZCB1dnMKKworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBpbmNpZGVzCisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gZmFj
ZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAgIHZhciBmYWNlID0g
ZmFjZXNbIGkgXTsKKworICAgICAgICAgICAgICAgIHZhciBhID0gZmFjZVsgMCBdICsgaW5kZXhP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgdmFyIGIgPSBmYWNlWyAxIF0gKyBpbmRleE9mZnNldDsK
KyAgICAgICAgICAgICAgICB2YXIgYyA9IGZhY2VbIDIgXSArIGluZGV4T2Zmc2V0OworCisgICAg
ICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBhLCBiLCBjICk7CisgICAgICAgICAgICAgICAgZ3Jv
dXBDb3VudCArPSAzOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgfQorCisg
ICAgU2hhcGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJH
ZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBTaGFwZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9IFNoYXBlQnVmZmVyR2VvbWV0cnk7CisKKyAgICBTaGFwZUJ1ZmZlckdlb21l
dHJ5LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgdmFyIGRhdGEg
PSBCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKKworICAgICAg
ICB2YXIgc2hhcGVzID0gdGhpcy5wYXJhbWV0ZXJzLnNoYXBlczsKKworICAgICAgICByZXR1cm4g
dG9KU09OJDEoIHNoYXBlcywgZGF0YSApOworCisgICAgfTsKKworICAgIC8vCisKKyAgICBmdW5j
dGlvbiB0b0pTT04kMSggc2hhcGVzLCBkYXRhICkgeworCisgICAgICAgIGRhdGEuc2hhcGVzID0g
W107CisKKyAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBzaGFwZXMgKSApIHsKKworICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gc2hhcGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7
CisKKyAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSBzaGFwZXNbIGkgXTsKKworICAgICAgICAg
ICAgICAgIGRhdGEuc2hhcGVzLnB1c2goIHNoYXBlLnV1aWQgKTsKKworICAgICAgICAgICAgfQor
CisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIGRhdGEuc2hhcGVzLnB1c2goIHNoYXBl
cy51dWlkICk7CisKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRhOworCisgICAgfQor
CisgICAgLyoqCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29t
L1dlc3RMYW5nbGV5CisgICAgICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29t
L011Z2VuODcKKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIEVkZ2VzR2VvbWV0cnkoIGdlb21ldHJ5
LCB0aHJlc2hvbGRBbmdsZSApIHsKKworICAgICAgICBCdWZmZXJHZW9tZXRyeS5jYWxsKCB0aGlz
ICk7CisKKyAgICAgICAgdGhpcy50eXBlID0gJ0VkZ2VzR2VvbWV0cnknOworCisgICAgICAgIHRo
aXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHRocmVzaG9sZEFuZ2xlOiB0aHJlc2hvbGRB
bmdsZQorICAgICAgICB9OworCisgICAgICAgIHRocmVzaG9sZEFuZ2xlID0gKCB0aHJlc2hvbGRB
bmdsZSAhPT0gdW5kZWZpbmVkICkgPyB0aHJlc2hvbGRBbmdsZSA6IDE7CisKKyAgICAgICAgLy8g
YnVmZmVyCisKKyAgICAgICAgdmFyIHZlcnRpY2VzID0gW107CisKKyAgICAgICAgLy8gaGVscGVy
IHZhcmlhYmxlcworCisgICAgICAgIHZhciB0aHJlc2hvbGREb3QgPSBNYXRoLmNvcyggX01hdGgu
REVHMlJBRCAqIHRocmVzaG9sZEFuZ2xlICk7CisgICAgICAgIHZhciBlZGdlID0gWyAwLCAwIF0s
IGVkZ2VzID0ge30sIGVkZ2UxLCBlZGdlMjsKKyAgICAgICAgdmFyIGtleSwga2V5cyA9IFsgJ2En
LCAnYicsICdjJyBdOworCisgICAgICAgIC8vIHByZXBhcmUgc291cmNlIGdlb21ldHJ5CisKKyAg
ICAgICAgdmFyIGdlb21ldHJ5MjsKKworICAgICAgICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2Vv
bWV0cnkgKSB7CisKKyAgICAgICAgICAgIGdlb21ldHJ5MiA9IG5ldyBHZW9tZXRyeSgpOworICAg
ICAgICAgICAgZ2VvbWV0cnkyLmZyb21CdWZmZXJHZW9tZXRyeSggZ2VvbWV0cnkgKTsKKworICAg
ICAgICB9IGVsc2UgeworCisgICAgICAgICAgICBnZW9tZXRyeTIgPSBnZW9tZXRyeS5jbG9uZSgp
OworCisgICAgICAgIH0KKworICAgICAgICBnZW9tZXRyeTIubWVyZ2VWZXJ0aWNlcygpOworICAg
ICAgICBnZW9tZXRyeTIuY29tcHV0ZUZhY2VOb3JtYWxzKCk7CisKKyAgICAgICAgdmFyIHNvdXJj
ZVZlcnRpY2VzID0gZ2VvbWV0cnkyLnZlcnRpY2VzOworICAgICAgICB2YXIgZmFjZXMgPSBnZW9t
ZXRyeTIuZmFjZXM7CisKKyAgICAgICAgLy8gbm93IGNyZWF0ZSBhIGRhdGEgc3RydWN0dXJlIHdo
ZXJlIGVhY2ggZW50cnkgcmVwcmVzZW50cyBhbiBlZGdlIHdpdGggaXRzIGFkam9pbmluZyBmYWNl
cworCisgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGZhY2VzLmxlbmd0aDsgaSA8IGw7IGkg
KysgKSB7CisKKyAgICAgICAgICAgIHZhciBmYWNlID0gZmFjZXNbIGkgXTsKKworICAgICAgICAg
ICAgZm9yICggdmFyIGogPSAwOyBqIDwgMzsgaiArKyApIHsKKworICAgICAgICAgICAgICAgIGVk
Z2UxID0gZmFjZVsga2V5c1sgaiBdIF07CisgICAgICAgICAgICAgICAgZWRnZTIgPSBmYWNlWyBr
ZXlzWyAoIGogKyAxICkgJSAzIF0gXTsKKyAgICAgICAgICAgICAgICBlZGdlWyAwIF0gPSBNYXRo
Lm1pbiggZWRnZTEsIGVkZ2UyICk7CisgICAgICAgICAgICAgICAgZWRnZVsgMSBdID0gTWF0aC5t
YXgoIGVkZ2UxLCBlZGdlMiApOworCisgICAgICAgICAgICAgICAga2V5ID0gZWRnZVsgMCBdICsg
JywnICsgZWRnZVsgMSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBlZGdlc1sga2V5IF0gPT09
IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgICAgICBlZGdlc1sga2V5IF0gPSB7IGlu
ZGV4MTogZWRnZVsgMCBdLCBpbmRleDI6IGVkZ2VbIDEgXSwgZmFjZTE6IGksIGZhY2UyOiB1bmRl
ZmluZWQgfTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgZWRnZXNbIGtleSBdLmZhY2UyID0gaTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICAvLyBnZW5lcmF0ZSB2ZXJ0aWNlcworCisg
ICAgICAgIGZvciAoIGtleSBpbiBlZGdlcyApIHsKKworICAgICAgICAgICAgdmFyIGUgPSBlZGdl
c1sga2V5IF07CisKKyAgICAgICAgICAgIC8vIGFuIGVkZ2UgaXMgb25seSByZW5kZXJlZCBpZiB0
aGUgYW5nbGUgKGluIGRlZ3JlZXMpIGJldHdlZW4gdGhlIGZhY2Ugbm9ybWFscyBvZiB0aGUgYWRq
b2luaW5nIGZhY2VzIGV4Y2VlZHMgdGhpcyB2YWx1ZS4gZGVmYXVsdCA9IDEgZGVncmVlLgorCisg
ICAgICAgICAgICBpZiAoIGUuZmFjZTIgPT09IHVuZGVmaW5lZCB8fCBmYWNlc1sgZS5mYWNlMSBd
Lm5vcm1hbC5kb3QoIGZhY2VzWyBlLmZhY2UyIF0ubm9ybWFsICkgPD0gdGhyZXNob2xkRG90ICkg
eworCisgICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHNvdXJjZVZlcnRpY2VzWyBlLmluZGV4
MSBdOworICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0ZXgueSwg
dmVydGV4LnogKTsKKworICAgICAgICAgICAgICAgIHZlcnRleCA9IHNvdXJjZVZlcnRpY2VzWyBl
LmluZGV4MiBdOworICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIHZlcnRleC54LCB2ZXJ0
ZXgueSwgdmVydGV4LnogKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAg
ICAvLyBidWlsZCBnZW9tZXRyeQorCisgICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAncG9zaXRp
b24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggdmVydGljZXMsIDMgKSApOworCisgICAg
fQorCisgICAgRWRnZXNHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJH
ZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBFZGdlc0dlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IEVkZ2VzR2VvbWV0cnk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0
aHViLmNvbS9NdWdlbjg3CisgICAgICovCisKKyAgICAvLyBDeWxpbmRlckdlb21ldHJ5CisKKyAg
ICBmdW5jdGlvbiBDeWxpbmRlckdlb21ldHJ5KCByYWRpdXNUb3AsIHJhZGl1c0JvdHRvbSwgaGVp
Z2h0LCByYWRpYWxTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIG9wZW5FbmRlZCwgdGhldGFTdGFy
dCwgdGhldGFMZW5ndGggKSB7CisKKyAgICAgICAgR2VvbWV0cnkuY2FsbCggdGhpcyApOworCisg
ICAgICAgIHRoaXMudHlwZSA9ICdDeWxpbmRlckdlb21ldHJ5JzsKKworICAgICAgICB0aGlzLnBh
cmFtZXRlcnMgPSB7CisgICAgICAgICAgICByYWRpdXNUb3A6IHJhZGl1c1RvcCwKKyAgICAgICAg
ICAgIHJhZGl1c0JvdHRvbTogcmFkaXVzQm90dG9tLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWln
aHQsCisgICAgICAgICAgICByYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsCisgICAgICAg
ICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsCisgICAgICAgICAgICBvcGVuRW5k
ZWQ6IG9wZW5FbmRlZCwKKyAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCisgICAg
ICAgICAgICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKKyAgICAgICAgfTsKKworICAgICAgICB0
aGlzLmZyb21CdWZmZXJHZW9tZXRyeSggbmV3IEN5bGluZGVyQnVmZmVyR2VvbWV0cnkoIHJhZGl1
c1RvcCwgcmFkaXVzQm90dG9tLCBoZWlnaHQsIHJhZGlhbFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50
cywgb3BlbkVuZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0aCApICk7CisgICAgICAgIHRoaXMu
bWVyZ2VWZXJ0aWNlcygpOworCisgICAgfQorCisgICAgQ3lsaW5kZXJHZW9tZXRyeS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAgICBDeWxpbmRlckdl
b21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEN5bGluZGVyR2VvbWV0cnk7CisKKyAgICAv
LyBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBDeWxpbmRlckJ1ZmZlckdl
b21ldHJ5KCByYWRpdXNUb3AsIHJhZGl1c0JvdHRvbSwgaGVpZ2h0LCByYWRpYWxTZWdtZW50cywg
aGVpZ2h0U2VnbWVudHMsIG9wZW5FbmRlZCwgdGhldGFTdGFydCwgdGhldGFMZW5ndGggKSB7CisK
KyAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMudHlw
ZSA9ICdDeWxpbmRlckJ1ZmZlckdlb21ldHJ5JzsKKworICAgICAgICB0aGlzLnBhcmFtZXRlcnMg
PSB7CisgICAgICAgICAgICByYWRpdXNUb3A6IHJhZGl1c1RvcCwKKyAgICAgICAgICAgIHJhZGl1
c0JvdHRvbTogcmFkaXVzQm90dG9tLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAg
ICAgICAgICByYWRpYWxTZWdtZW50czogcmFkaWFsU2VnbWVudHMsCisgICAgICAgICAgICBoZWln
aHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMsCisgICAgICAgICAgICBvcGVuRW5kZWQ6IG9wZW5F
bmRlZCwKKyAgICAgICAgICAgIHRoZXRhU3RhcnQ6IHRoZXRhU3RhcnQsCisgICAgICAgICAgICB0
aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgc2NvcGUg
PSB0aGlzOworCisgICAgICAgIHJhZGl1c1RvcCA9IHJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkID8g
cmFkaXVzVG9wIDogMTsKKyAgICAgICAgcmFkaXVzQm90dG9tID0gcmFkaXVzQm90dG9tICE9PSB1
bmRlZmluZWQgPyByYWRpdXNCb3R0b20gOiAxOworICAgICAgICBoZWlnaHQgPSBoZWlnaHQgfHwg
MTsKKworICAgICAgICByYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IoIHJhZGlhbFNlZ21lbnRz
ICkgfHwgODsKKyAgICAgICAgaGVpZ2h0U2VnbWVudHMgPSBNYXRoLmZsb29yKCBoZWlnaHRTZWdt
ZW50cyApIHx8IDE7CisKKyAgICAgICAgb3BlbkVuZGVkID0gb3BlbkVuZGVkICE9PSB1bmRlZmlu
ZWQgPyBvcGVuRW5kZWQgOiBmYWxzZTsKKyAgICAgICAgdGhldGFTdGFydCA9IHRoZXRhU3RhcnQg
IT09IHVuZGVmaW5lZCA/IHRoZXRhU3RhcnQgOiAwLjA7CisgICAgICAgIHRoZXRhTGVuZ3RoID0g
dGhldGFMZW5ndGggIT09IHVuZGVmaW5lZCA/IHRoZXRhTGVuZ3RoIDogTWF0aC5QSSAqIDI7CisK
KyAgICAgICAgLy8gYnVmZmVycworCisgICAgICAgIHZhciBpbmRpY2VzID0gW107CisgICAgICAg
IHZhciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2YXIgbm9ybWFscyA9IFtdOworICAgICAgICB2
YXIgdXZzID0gW107CisKKyAgICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcworCisgICAgICAgIHZh
ciBpbmRleCA9IDA7CisgICAgICAgIHZhciBpbmRleEFycmF5ID0gW107CisgICAgICAgIHZhciBo
YWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjsKKyAgICAgICAgdmFyIGdyb3VwU3RhcnQgPSAwOworCisg
ICAgICAgIC8vIGdlbmVyYXRlIGdlb21ldHJ5CisKKyAgICAgICAgZ2VuZXJhdGVUb3JzbygpOwor
CisgICAgICAgIGlmICggb3BlbkVuZGVkID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgaWYg
KCByYWRpdXNUb3AgPiAwICkgZ2VuZXJhdGVDYXAoIHRydWUgKTsKKyAgICAgICAgICAgIGlmICgg
cmFkaXVzQm90dG9tID4gMCApIGdlbmVyYXRlQ2FwKCBmYWxzZSApOworCisgICAgICAgIH0KKwor
ICAgICAgICAvLyBidWlsZCBnZW9tZXRyeQorCisgICAgICAgIHRoaXMuc2V0SW5kZXgoIGluZGlj
ZXMgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9hdDMy
QnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7CisgICAgICAgIHRoaXMuYWRkQXR0cmli
dXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIG5vcm1hbHMsIDMgKSAp
OworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2JywgbmV3IEZsb2F0MzJCdWZmZXJBdHRy
aWJ1dGUoIHV2cywgMiApICk7CisKKyAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUb3JzbygpIHsK
KworICAgICAgICAgICAgdmFyIHgsIHk7CisgICAgICAgICAgICB2YXIgbm9ybWFsID0gbmV3IFZl
Y3RvcjMoKTsKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOworCisgICAg
ICAgICAgICB2YXIgZ3JvdXBDb3VudCA9IDA7CisKKyAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBi
ZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgbm9ybWFsCisgICAgICAgICAgICB2YXIgc2xvcGUgPSAo
IHJhZGl1c0JvdHRvbSAtIHJhZGl1c1RvcCApIC8gaGVpZ2h0OworCisgICAgICAgICAgICAvLyBn
ZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzCisKKyAgICAgICAgICAgIGZvciAoIHkg
PSAwOyB5IDw9IGhlaWdodFNlZ21lbnRzOyB5ICsrICkgeworCisgICAgICAgICAgICAgICAgdmFy
IGluZGV4Um93ID0gW107CisKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHkgLyBoZWlnaHRTZWdt
ZW50czsKKworICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgcmFkaXVzIG9mIHRoZSBj
dXJyZW50IHJvdworCisgICAgICAgICAgICAgICAgdmFyIHJhZGl1cyA9IHYgKiAoIHJhZGl1c0Jv
dHRvbSAtIHJhZGl1c1RvcCApICsgcmFkaXVzVG9wOworCisgICAgICAgICAgICAgICAgZm9yICgg
eCA9IDA7IHggPD0gcmFkaWFsU2VnbWVudHM7IHggKysgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHUgPSB4IC8gcmFkaWFsU2VnbWVudHM7CisKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHRoZXRhID0gdSAqIHRoZXRhTGVuZ3RoICsgdGhldGFTdGFydDsKKworICAgICAgICAgICAgICAg
ICAgICB2YXIgc2luVGhldGEgPSBNYXRoLnNpbiggdGhldGEgKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvc1RoZXRhID0gTWF0aC5jb3MoIHRoZXRhICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdmVydGV4CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4LnggPSByYWRpdXMgKiBz
aW5UaGV0YTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4LnkgPSAtIHYgKiBoZWlnaHQgKyBo
YWxmSGVpZ2h0OworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9IHJhZGl1cyAqIGNvc1Ro
ZXRhOworICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4
LnksIHZlcnRleC56ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsCisKKyAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsLnNldCggc2luVGhldGEsIHNsb3BlLCBjb3NUaGV0YSApLm5v
cm1hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goIG5vcm1hbC54LCBu
b3JtYWwueSwgbm9ybWFsLnogKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB1dgorCisgICAg
ICAgICAgICAgICAgICAgIHV2cy5wdXNoKCB1LCAxIC0gdiApOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIHNhdmUgaW5kZXggb2YgdmVydGV4IGluIHJlc3BlY3RpdmUgcm93CisKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXhSb3cucHVzaCggaW5kZXggKysgKTsKKworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIG5vdyBzYXZlIHZlcnRpY2VzIG9mIHRoZSByb3cgaW4g
b3VyIGluZGV4IGFycmF5CisKKyAgICAgICAgICAgICAgICBpbmRleEFycmF5LnB1c2goIGluZGV4
Um93ICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2VuZXJhdGUgaW5kaWNl
cworCisgICAgICAgICAgICBmb3IgKCB4ID0gMDsgeCA8IHJhZGlhbFNlZ21lbnRzOyB4ICsrICkg
eworCisgICAgICAgICAgICAgICAgZm9yICggeSA9IDA7IHkgPCBoZWlnaHRTZWdtZW50czsgeSAr
KyApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgdGhlIGluZGV4IGFycmF5IHRv
IGFjY2VzcyB0aGUgY29ycmVjdCBpbmRpY2VzCisKKyAgICAgICAgICAgICAgICAgICAgdmFyIGEg
PSBpbmRleEFycmF5WyB5IF1bIHggXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBpbmRl
eEFycmF5WyB5ICsgMSBdWyB4IF07CisgICAgICAgICAgICAgICAgICAgIHZhciBjID0gaW5kZXhB
cnJheVsgeSArIDEgXVsgeCArIDEgXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBpbmRl
eEFycmF5WyB5IF1bIHggKyAxIF07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZmFjZXMKKwor
ICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goIGEsIGIsIGQgKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW5kaWNlcy5wdXNoKCBiLCBjLCBkICk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdXBkYXRlIGdyb3VwIGNvdW50ZXIKKworICAgICAgICAgICAgICAgICAgICBncm91cENvdW50
ICs9IDY7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gYWRkIGEgZ3JvdXAgdG8gdGhlIGdlb21ldHJ5LiB0aGlzIHdpbGwgZW5zdXJlIG11bHRp
IG1hdGVyaWFsIHN1cHBvcnQKKworICAgICAgICAgICAgc2NvcGUuYWRkR3JvdXAoIGdyb3VwU3Rh
cnQsIGdyb3VwQ291bnQsIDAgKTsKKworICAgICAgICAgICAgLy8gY2FsY3VsYXRlIG5ldyBzdGFy
dCB2YWx1ZSBmb3IgZ3JvdXBzCisKKyAgICAgICAgICAgIGdyb3VwU3RhcnQgKz0gZ3JvdXBDb3Vu
dDsKKworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVDYXAoIHRvcCApIHsK
KworICAgICAgICAgICAgdmFyIHgsIGNlbnRlckluZGV4U3RhcnQsIGNlbnRlckluZGV4RW5kOwor
CisgICAgICAgICAgICB2YXIgdXYgPSBuZXcgVmVjdG9yMigpOworICAgICAgICAgICAgdmFyIHZl
cnRleCA9IG5ldyBWZWN0b3IzKCk7CisKKyAgICAgICAgICAgIHZhciBncm91cENvdW50ID0gMDsK
KworICAgICAgICAgICAgdmFyIHJhZGl1cyA9ICggdG9wID09PSB0cnVlICkgPyByYWRpdXNUb3Ag
OiByYWRpdXNCb3R0b207CisgICAgICAgICAgICB2YXIgc2lnbiA9ICggdG9wID09PSB0cnVlICkg
PyAxIDogLSAxOworCisgICAgICAgICAgICAvLyBzYXZlIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qg
Y2VudGVyIHZlcnRleAorICAgICAgICAgICAgY2VudGVySW5kZXhTdGFydCA9IGluZGV4OworCisg
ICAgICAgICAgICAvLyBmaXJzdCB3ZSBnZW5lcmF0ZSB0aGUgY2VudGVyIHZlcnRleCBkYXRhIG9m
IHRoZSBjYXAuCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBnZW9tZXRyeSBuZWVkcyBvbmUg
c2V0IG9mIHV2cyBwZXIgZmFjZSwKKyAgICAgICAgICAgIC8vIHdlIG11c3QgZ2VuZXJhdGUgYSBj
ZW50ZXIgdmVydGV4IHBlciBmYWNlL3NlZ21lbnQKKworICAgICAgICAgICAgZm9yICggeCA9IDE7
IHggPD0gcmFkaWFsU2VnbWVudHM7IHggKysgKSB7CisKKyAgICAgICAgICAgICAgICAvLyB2ZXJ0
ZXgKKworICAgICAgICAgICAgICAgIHZlcnRpY2VzLnB1c2goIDAsIGhhbGZIZWlnaHQgKiBzaWdu
LCAwICk7CisKKyAgICAgICAgICAgICAgICAvLyBub3JtYWwKKworICAgICAgICAgICAgICAgIG5v
cm1hbHMucHVzaCggMCwgc2lnbiwgMCApOworCisgICAgICAgICAgICAgICAgLy8gdXYKKworICAg
ICAgICAgICAgICAgIHV2cy5wdXNoKCAwLjUsIDAuNSApOworCisgICAgICAgICAgICAgICAgLy8g
aW5jcmVhc2UgaW5kZXgKKworICAgICAgICAgICAgICAgIGluZGV4ICsrOworCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIHNhdmUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNlbnRlciB2
ZXJ0ZXgKKworICAgICAgICAgICAgY2VudGVySW5kZXhFbmQgPSBpbmRleDsKKworICAgICAgICAg
ICAgLy8gbm93IHdlIGdlbmVyYXRlIHRoZSBzdXJyb3VuZGluZyB2ZXJ0aWNlcywgbm9ybWFscyBh
bmQgdXZzCisKKyAgICAgICAgICAgIGZvciAoIHggPSAwOyB4IDw9IHJhZGlhbFNlZ21lbnRzOyB4
ICsrICkgeworCisgICAgICAgICAgICAgICAgdmFyIHUgPSB4IC8gcmFkaWFsU2VnbWVudHM7Cisg
ICAgICAgICAgICAgICAgdmFyIHRoZXRhID0gdSAqIHRoZXRhTGVuZ3RoICsgdGhldGFTdGFydDsK
KworICAgICAgICAgICAgICAgIHZhciBjb3NUaGV0YSA9IE1hdGguY29zKCB0aGV0YSApOworICAg
ICAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc2luKCB0aGV0YSApOworCisgICAgICAg
ICAgICAgICAgLy8gdmVydGV4CisKKyAgICAgICAgICAgICAgICB2ZXJ0ZXgueCA9IHJhZGl1cyAq
IHNpblRoZXRhOworICAgICAgICAgICAgICAgIHZlcnRleC55ID0gaGFsZkhlaWdodCAqIHNpZ247
CisgICAgICAgICAgICAgICAgdmVydGV4LnogPSByYWRpdXMgKiBjb3NUaGV0YTsKKyAgICAgICAg
ICAgICAgICB2ZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56ICk7CisK
KyAgICAgICAgICAgICAgICAvLyBub3JtYWwKKworICAgICAgICAgICAgICAgIG5vcm1hbHMucHVz
aCggMCwgc2lnbiwgMCApOworCisgICAgICAgICAgICAgICAgLy8gdXYKKworICAgICAgICAgICAg
ICAgIHV2LnggPSAoIGNvc1RoZXRhICogMC41ICkgKyAwLjU7CisgICAgICAgICAgICAgICAgdXYu
eSA9ICggc2luVGhldGEgKiAwLjUgKiBzaWduICkgKyAwLjU7CisgICAgICAgICAgICAgICAgdXZz
LnB1c2goIHV2LngsIHV2LnkgKTsKKworICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIGluZGV4
CisKKyAgICAgICAgICAgICAgICBpbmRleCArKzsKKworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBnZW5lcmF0ZSBpbmRpY2VzCisKKyAgICAgICAgICAgIGZvciAoIHggPSAwOyB4IDwg
cmFkaWFsU2VnbWVudHM7IHggKysgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgYyA9IGNlbnRl
ckluZGV4U3RhcnQgKyB4OworICAgICAgICAgICAgICAgIHZhciBpID0gY2VudGVySW5kZXhFbmQg
KyB4OworCisgICAgICAgICAgICAgICAgaWYgKCB0b3AgPT09IHRydWUgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gZmFjZSB0b3AKKworICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnB1
c2goIGksIGkgKyAxLCBjICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAg
ICAgICAgICAgICAgIC8vIGZhY2UgYm90dG9tCisKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNl
cy5wdXNoKCBpICsgMSwgaSwgYyApOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgZ3JvdXBDb3VudCArPSAzOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGFkZCBhIGdyb3VwIHRvIHRoZSBnZW9tZXRyeS4gdGhpcyB3aWxsIGVuc3VyZSBtdWx0aSBtYXRl
cmlhbCBzdXBwb3J0CisKKyAgICAgICAgICAgIHNjb3BlLmFkZEdyb3VwKCBncm91cFN0YXJ0LCBn
cm91cENvdW50LCB0b3AgPT09IHRydWUgPyAxIDogMiApOworCisgICAgICAgICAgICAvLyBjYWxj
dWxhdGUgbmV3IHN0YXJ0IHZhbHVlIGZvciBncm91cHMKKworICAgICAgICAgICAgZ3JvdXBTdGFy
dCArPSBncm91cENvdW50OworCisgICAgICAgIH0KKworICAgIH0KKworICAgIEN5bGluZGVyQnVm
ZmVyR2VvbWV0cnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQnVmZmVyR2VvbWV0cnkucHJv
dG90eXBlICk7CisgICAgQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5OworCisgICAgLyoqCisgICAgICogQGF1dGhvciBh
YmVsbmF0aW9uIC8gaHR0cDovL2dpdGh1Yi5jb20vYWJlbG5hdGlvbgorICAgICAqLworCisgICAg
Ly8gQ29uZUdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBDb25lR2VvbWV0cnkoIHJhZGl1cywgaGVp
Z2h0LCByYWRpYWxTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMsIG9wZW5FbmRlZCwgdGhldGFTdGFy
dCwgdGhldGFMZW5ndGggKSB7CisKKyAgICAgICAgQ3lsaW5kZXJHZW9tZXRyeS5jYWxsKCB0aGlz
LCAwLCByYWRpdXMsIGhlaWdodCwgcmFkaWFsU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzLCBvcGVu
RW5kZWQsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICk7CisKKyAgICAgICAgdGhpcy50eXBlID0g
J0NvbmVHZW9tZXRyeSc7CisKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0geworICAgICAgICAg
ICAgcmFkaXVzOiByYWRpdXMsCisgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCwKKyAgICAgICAg
ICAgIHJhZGlhbFNlZ21lbnRzOiByYWRpYWxTZWdtZW50cywKKyAgICAgICAgICAgIGhlaWdodFNl
Z21lbnRzOiBoZWlnaHRTZWdtZW50cywKKyAgICAgICAgICAgIG9wZW5FbmRlZDogb3BlbkVuZGVk
LAorICAgICAgICAgICAgdGhldGFTdGFydDogdGhldGFTdGFydCwKKyAgICAgICAgICAgIHRoZXRh
TGVuZ3RoOiB0aGV0YUxlbmd0aAorICAgICAgICB9OworCisgICAgfQorCisgICAgQ29uZUdlb21l
dHJ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN5bGluZGVyR2VvbWV0cnkucHJvdG90eXBl
ICk7CisgICAgQ29uZUdlb21ldHJ5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbmVHZW9tZXRy
eTsKKworICAgIC8vIENvbmVCdWZmZXJHZW9tZXRyeQorCisgICAgZnVuY3Rpb24gQ29uZUJ1ZmZl
ckdlb21ldHJ5KCByYWRpdXMsIGhlaWdodCwgcmFkaWFsU2VnbWVudHMsIGhlaWdodFNlZ21lbnRz
LCBvcGVuRW5kZWQsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgeworCisgICAgICAgIEN5bGlu
ZGVyQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcywgMCwgcmFkaXVzLCBoZWlnaHQsIHJhZGlhbFNl
Z21lbnRzLCBoZWlnaHRTZWdtZW50cywgb3BlbkVuZGVkLCB0aGV0YVN0YXJ0LCB0aGV0YUxlbmd0
aCApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdDb25lQnVmZmVyR2VvbWV0cnknOworCisgICAg
ICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAorICAg
ICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICByYWRpYWxTZWdtZW50czogcmFk
aWFsU2VnbWVudHMsCisgICAgICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHMs
CisgICAgICAgICAgICBvcGVuRW5kZWQ6IG9wZW5FbmRlZCwKKyAgICAgICAgICAgIHRoZXRhU3Rh
cnQ6IHRoZXRhU3RhcnQsCisgICAgICAgICAgICB0aGV0YUxlbmd0aDogdGhldGFMZW5ndGgKKyAg
ICAgICAgfTsKKworICAgIH0KKworICAgIENvbmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKCBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5LnByb3RvdHlwZSApOworICAgIENv
bmVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25lQnVmZmVyR2VvbWV0
cnk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIGJlbmFhZGFtcyAvIGh0dHBzOi8vdHdpdHRl
ci5jb20vYmVuX2FfYWRhbXMKKyAgICAgKiBAYXV0aG9yIE11Z2VuODcgLyBodHRwczovL2dpdGh1
Yi5jb20vTXVnZW44NworICAgICAqIEBhdXRob3IgaHVnaGVzCisgICAgICovCisKKyAgICAvLyBD
aXJjbGVHZW9tZXRyeQorCisgICAgZnVuY3Rpb24gQ2lyY2xlR2VvbWV0cnkoIHJhZGl1cywgc2Vn
bWVudHMsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgeworCisgICAgICAgIEdlb21ldHJ5LmNh
bGwoIHRoaXMgKTsKKworICAgICAgICB0aGlzLnR5cGUgPSAnQ2lyY2xlR2VvbWV0cnknOworCisg
ICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsKKyAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLAor
ICAgICAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRzLAorICAgICAgICAgICAgdGhldGFTdGFydDog
dGhldGFTdGFydCwKKyAgICAgICAgICAgIHRoZXRhTGVuZ3RoOiB0aGV0YUxlbmd0aAorICAgICAg
ICB9OworCisgICAgICAgIHRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KCBuZXcgQ2lyY2xlQnVmZmVy
R2VvbWV0cnkoIHJhZGl1cywgc2VnbWVudHMsIHRoZXRhU3RhcnQsIHRoZXRhTGVuZ3RoICkgKTsK
KyAgICAgICAgdGhpcy5tZXJnZVZlcnRpY2VzKCk7CisKKyAgICB9CisKKyAgICBDaXJjbGVHZW9t
ZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBHZW9tZXRyeS5wcm90b3R5cGUgKTsKKyAg
ICBDaXJjbGVHZW9tZXRyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaXJjbGVHZW9tZXRyeTsK
KworICAgIC8vIENpcmNsZUJ1ZmZlckdlb21ldHJ5CisKKyAgICBmdW5jdGlvbiBDaXJjbGVCdWZm
ZXJHZW9tZXRyeSggcmFkaXVzLCBzZWdtZW50cywgdGhldGFTdGFydCwgdGhldGFMZW5ndGggKSB7
CisKKyAgICAgICAgQnVmZmVyR2VvbWV0cnkuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMu
dHlwZSA9ICdDaXJjbGVCdWZmZXJHZW9tZXRyeSc7CisKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJz
ID0geworICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsCisgICAgICAgICAgICBzZWdtZW50czog
c2VnbWVudHMsCisgICAgICAgICAgICB0aGV0YVN0YXJ0OiB0aGV0YVN0YXJ0LAorICAgICAgICAg
ICAgdGhldGFMZW5ndGg6IHRoZXRhTGVuZ3RoCisgICAgICAgIH07CisKKyAgICAgICAgcmFkaXVz
ID0gcmFkaXVzIHx8IDE7CisgICAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMgIT09IHVuZGVmaW5l
ZCA/IE1hdGgubWF4KCAzLCBzZWdtZW50cyApIDogODsKKworICAgICAgICB0aGV0YVN0YXJ0ID0g
dGhldGFTdGFydCAhPT0gdW5kZWZpbmVkID8gdGhldGFTdGFydCA6IDA7CisgICAgICAgIHRoZXRh
TGVuZ3RoID0gdGhldGFMZW5ndGggIT09IHVuZGVmaW5lZCA/IHRoZXRhTGVuZ3RoIDogTWF0aC5Q
SSAqIDI7CisKKyAgICAgICAgLy8gYnVmZmVycworCisgICAgICAgIHZhciBpbmRpY2VzID0gW107
CisgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdOworICAgICAgICB2YXIgbm9ybWFscyA9IFtdOwor
ICAgICAgICB2YXIgdXZzID0gW107CisKKyAgICAgICAgLy8gaGVscGVyIHZhcmlhYmxlcworCisg
ICAgICAgIHZhciBpLCBzOworICAgICAgICB2YXIgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTsKKyAg
ICAgICAgdmFyIHV2ID0gbmV3IFZlY3RvcjIoKTsKKworICAgICAgICAvLyBjZW50ZXIgcG9pbnQK
KworICAgICAgICB2ZXJ0aWNlcy5wdXNoKCAwLCAwLCAwICk7CisgICAgICAgIG5vcm1hbHMucHVz
aCggMCwgMCwgMSApOworICAgICAgICB1dnMucHVzaCggMC41LCAwLjUgKTsKKworICAgICAgICBm
b3IgKCBzID0gMCwgaSA9IDM7IHMgPD0gc2VnbWVudHM7IHMgKyssIGkgKz0gMyApIHsKKworICAg
ICAgICAgICAgdmFyIHNlZ21lbnQgPSB0aGV0YVN0YXJ0ICsgcyAvIHNlZ21lbnRzICogdGhldGFM
ZW5ndGg7CisKKyAgICAgICAgICAgIC8vIHZlcnRleAorCisgICAgICAgICAgICB2ZXJ0ZXgueCA9
IHJhZGl1cyAqIE1hdGguY29zKCBzZWdtZW50ICk7CisgICAgICAgICAgICB2ZXJ0ZXgueSA9IHJh
ZGl1cyAqIE1hdGguc2luKCBzZWdtZW50ICk7CisKKyAgICAgICAgICAgIHZlcnRpY2VzLnB1c2go
IHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnogKTsKKworICAgICAgICAgICAgLy8gbm9ybWFs
CisKKyAgICAgICAgICAgIG5vcm1hbHMucHVzaCggMCwgMCwgMSApOworCisgICAgICAgICAgICAv
LyB1dnMKKworICAgICAgICAgICAgdXYueCA9ICggdmVydGljZXNbIGkgXSAvIHJhZGl1cyArIDEg
KSAvIDI7CisgICAgICAgICAgICB1di55ID0gKCB2ZXJ0aWNlc1sgaSArIDEgXSAvIHJhZGl1cyAr
IDEgKSAvIDI7CisKKyAgICAgICAgICAgIHV2cy5wdXNoKCB1di54LCB1di55ICk7CisKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGluZGljZXMKKworICAgICAgICBmb3IgKCBpID0gMTsgaSA8PSBz
ZWdtZW50czsgaSArKyApIHsKKworICAgICAgICAgICAgaW5kaWNlcy5wdXNoKCBpLCBpICsgMSwg
MCApOworCisgICAgICAgIH0KKworICAgICAgICAvLyBidWlsZCBnZW9tZXRyeQorCisgICAgICAg
IHRoaXMuc2V0SW5kZXgoIGluZGljZXMgKTsKKyAgICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoICdw
b3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCB2ZXJ0aWNlcywgMyApICk7Cisg
ICAgICAgIHRoaXMuYWRkQXR0cmlidXRlKCAnbm9ybWFsJywgbmV3IEZsb2F0MzJCdWZmZXJBdHRy
aWJ1dGUoIG5vcm1hbHMsIDMgKSApOworICAgICAgICB0aGlzLmFkZEF0dHJpYnV0ZSggJ3V2Jywg
bmV3IEZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoIHV2cywgMiApICk7CisKKyAgICB9CisKKyAgICBD
aXJjbGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBCdWZmZXJHZW9t
ZXRyeS5wcm90b3R5cGUgKTsKKyAgICBDaXJjbGVCdWZmZXJHZW9tZXRyeS5wcm90b3R5cGUuY29u
c3RydWN0b3IgPSBDaXJjbGVCdWZmZXJHZW9tZXRyeTsKKworCisKKyAgICB2YXIgR2VvbWV0cmll
cyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHsKKyAgICAgICAgV2lyZWZyYW1lR2VvbWV0
cnk6IFdpcmVmcmFtZUdlb21ldHJ5LAorICAgICAgICBQYXJhbWV0cmljR2VvbWV0cnk6IFBhcmFt
ZXRyaWNHZW9tZXRyeSwKKyAgICAgICAgUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5OiBQYXJhbWV0
cmljQnVmZmVyR2VvbWV0cnksCisgICAgICAgIFRldHJhaGVkcm9uR2VvbWV0cnk6IFRldHJhaGVk
cm9uR2VvbWV0cnksCisgICAgICAgIFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IFRldHJhaGVk
cm9uQnVmZmVyR2VvbWV0cnksCisgICAgICAgIE9jdGFoZWRyb25HZW9tZXRyeTogT2N0YWhlZHJv
bkdlb21ldHJ5LAorICAgICAgICBPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6IE9jdGFoZWRyb25C
dWZmZXJHZW9tZXRyeSwKKyAgICAgICAgSWNvc2FoZWRyb25HZW9tZXRyeTogSWNvc2FoZWRyb25H
ZW9tZXRyeSwKKyAgICAgICAgSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTogSWNvc2FoZWRyb25C
dWZmZXJHZW9tZXRyeSwKKyAgICAgICAgRG9kZWNhaGVkcm9uR2VvbWV0cnk6IERvZGVjYWhlZHJv
bkdlb21ldHJ5LAorICAgICAgICBEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTogRG9kZWNhaGVk
cm9uQnVmZmVyR2VvbWV0cnksCisgICAgICAgIFBvbHloZWRyb25HZW9tZXRyeTogUG9seWhlZHJv
bkdlb21ldHJ5LAorICAgICAgICBQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6IFBvbHloZWRyb25C
dWZmZXJHZW9tZXRyeSwKKyAgICAgICAgVHViZUdlb21ldHJ5OiBUdWJlR2VvbWV0cnksCisgICAg
ICAgIFR1YmVCdWZmZXJHZW9tZXRyeTogVHViZUJ1ZmZlckdlb21ldHJ5LAorICAgICAgICBUb3J1
c0tub3RHZW9tZXRyeTogVG9ydXNLbm90R2VvbWV0cnksCisgICAgICAgIFRvcnVzS25vdEJ1ZmZl
ckdlb21ldHJ5OiBUb3J1c0tub3RCdWZmZXJHZW9tZXRyeSwKKyAgICAgICAgVG9ydXNHZW9tZXRy
eTogVG9ydXNHZW9tZXRyeSwKKyAgICAgICAgVG9ydXNCdWZmZXJHZW9tZXRyeTogVG9ydXNCdWZm
ZXJHZW9tZXRyeSwKKyAgICAgICAgVGV4dEdlb21ldHJ5OiBUZXh0R2VvbWV0cnksCisgICAgICAg
IFRleHRCdWZmZXJHZW9tZXRyeTogVGV4dEJ1ZmZlckdlb21ldHJ5LAorICAgICAgICBTcGhlcmVH
ZW9tZXRyeTogU3BoZXJlR2VvbWV0cnksCisgICAgICAgIFNwaGVyZUJ1ZmZlckdlb21ldHJ5OiBT
cGhlcmVCdWZmZXJHZW9tZXRyeSwKKyAgICAgICAgUmluZ0dlb21ldHJ5OiBSaW5nR2VvbWV0cnks
CisgICAgICAgIFJpbmdCdWZmZXJHZW9tZXRyeTogUmluZ0J1ZmZlckdlb21ldHJ5LAorICAgICAg
ICBQbGFuZUdlb21ldHJ5OiBQbGFuZUdlb21ldHJ5LAorICAgICAgICBQbGFuZUJ1ZmZlckdlb21l
dHJ5OiBQbGFuZUJ1ZmZlckdlb21ldHJ5LAorICAgICAgICBMYXRoZUdlb21ldHJ5OiBMYXRoZUdl
b21ldHJ5LAorICAgICAgICBMYXRoZUJ1ZmZlckdlb21ldHJ5OiBMYXRoZUJ1ZmZlckdlb21ldHJ5
LAorICAgICAgICBTaGFwZUdlb21ldHJ5OiBTaGFwZUdlb21ldHJ5LAorICAgICAgICBTaGFwZUJ1
ZmZlckdlb21ldHJ5OiBTaGFwZUJ1ZmZlckdlb21ldHJ5LAorICAgICAgICBFeHRydWRlR2VvbWV0
cnk6IEV4dHJ1ZGVHZW9tZXRyeSwKKyAgICAgICAgRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBFeHRy
dWRlQnVmZmVyR2VvbWV0cnksCisgICAgICAgIEVkZ2VzR2VvbWV0cnk6IEVkZ2VzR2VvbWV0cnks
CisgICAgICAgIENvbmVHZW9tZXRyeTogQ29uZUdlb21ldHJ5LAorICAgICAgICBDb25lQnVmZmVy
R2VvbWV0cnk6IENvbmVCdWZmZXJHZW9tZXRyeSwKKyAgICAgICAgQ3lsaW5kZXJHZW9tZXRyeTog
Q3lsaW5kZXJHZW9tZXRyeSwKKyAgICAgICAgQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTogQ3lsaW5k
ZXJCdWZmZXJHZW9tZXRyeSwKKyAgICAgICAgQ2lyY2xlR2VvbWV0cnk6IENpcmNsZUdlb21ldHJ5
LAorICAgICAgICBDaXJjbGVCdWZmZXJHZW9tZXRyeTogQ2lyY2xlQnVmZmVyR2VvbWV0cnksCisg
ICAgICAgIEJveEdlb21ldHJ5OiBCb3hHZW9tZXRyeSwKKyAgICAgICAgQm94QnVmZmVyR2VvbWV0
cnk6IEJveEJ1ZmZlckdlb21ldHJ5CisgICAgfSk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9y
IG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqCisgICAgICogcGFyYW1ldGVycyA9
IHsKKyAgICAgKiAgY29sb3I6IDxUSFJFRS5Db2xvcj4KKyAgICAgKiB9CisgICAgICovCisKKyAg
ICBmdW5jdGlvbiBTaGFkb3dNYXRlcmlhbCggcGFyYW1ldGVycyApIHsKKworICAgICAgICBNYXRl
cmlhbC5jYWxsKCB0aGlzICk7CisKKyAgICAgICAgdGhpcy50eXBlID0gJ1NoYWRvd01hdGVyaWFs
JzsKKworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweDAwMDAwMCApOworICAgICAg
ICB0aGlzLnRyYW5zcGFyZW50ID0gdHJ1ZTsKKworICAgICAgICB0aGlzLnNldFZhbHVlcyggcGFy
YW1ldGVycyApOworCisgICAgfQorCisgICAgU2hhZG93TWF0ZXJpYWwucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZSggTWF0ZXJpYWwucHJvdG90eXBlICk7CisgICAgU2hhZG93TWF0ZXJpYWwucHJv
dG90eXBlLmNvbnN0cnVjdG9yID0gU2hhZG93TWF0ZXJpYWw7CisKKyAgICBTaGFkb3dNYXRlcmlh
bC5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbCA9IHRydWU7CisKKyAgICBTaGFkb3dNYXRlcmlh
bC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgeworCisgICAgICAgIE1hdGVy
aWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworCisgICAgICAgIHRoaXMu
Y29sb3IuY29weSggc291cmNlLmNvbG9yICk7CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAg
ICB9OworCisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNv
bS8KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIFJhd1NoYWRlck1hdGVyaWFsKCBwYXJhbWV0ZXJz
ICkgeworCisgICAgICAgIFNoYWRlck1hdGVyaWFsLmNhbGwoIHRoaXMsIHBhcmFtZXRlcnMgKTsK
KworICAgICAgICB0aGlzLnR5cGUgPSAnUmF3U2hhZGVyTWF0ZXJpYWwnOworCisgICAgfQorCisg
ICAgUmF3U2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggU2hhZGVyTWF0
ZXJpYWwucHJvdG90eXBlICk7CisgICAgUmF3U2hhZGVyTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0
cnVjdG9yID0gUmF3U2hhZGVyTWF0ZXJpYWw7CisKKyAgICBSYXdTaGFkZXJNYXRlcmlhbC5wcm90
b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbCA9IHRydWU7CisKKyAgICAvKioKKyAgICAgKiBAYXV0
aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAgKgor
ICAgICAqIHBhcmFtZXRlcnMgPSB7CisgICAgICogIGNvbG9yOiA8aGV4PiwKKyAgICAgKiAgcm91
Z2huZXNzOiA8ZmxvYXQ+LAorICAgICAqICBtZXRhbG5lc3M6IDxmbG9hdD4sCisgICAgICogIG9w
YWNpdHk6IDxmbG9hdD4sCisgICAgICoKKyAgICAgKiAgbWFwOiBuZXcgVEhSRUUuVGV4dHVyZSgg
PEltYWdlPiApLAorICAgICAqCisgICAgICogIGxpZ2h0TWFwOiBuZXcgVEhSRUUuVGV4dHVyZSgg
PEltYWdlPiApLAorICAgICAqICBsaWdodE1hcEludGVuc2l0eTogPGZsb2F0PgorICAgICAqCisg
ICAgICogIGFvTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAorICAgICAqICBhb01h
cEludGVuc2l0eTogPGZsb2F0PgorICAgICAqCisgICAgICogIGVtaXNzaXZlOiA8aGV4PiwKKyAg
ICAgKiAgZW1pc3NpdmVJbnRlbnNpdHk6IDxmbG9hdD4KKyAgICAgKiAgZW1pc3NpdmVNYXA6IG5l
dyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAgKiAgYnVtcE1hcDogbmV3
IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKiAgYnVtcFNjYWxlOiA8ZmxvYXQ+LAor
ICAgICAqCisgICAgICogIG5vcm1hbE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwK
KyAgICAgKiAgbm9ybWFsTWFwVHlwZTogVEhSRUUuVGFuZ2VudFNwYWNlTm9ybWFsTWFwLAorICAg
ICAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LAorICAgICAqCisgICAgICogIGRpc3BsYWNlbWVu
dE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKiAgZGlzcGxhY2VtZW50
U2NhbGU6IDxmbG9hdD4sCisgICAgICogIGRpc3BsYWNlbWVudEJpYXM6IDxmbG9hdD4sCisgICAg
ICoKKyAgICAgKiAgcm91Z2huZXNzTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAor
ICAgICAqCisgICAgICogIG1ldGFsbmVzc01hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4g
KSwKKyAgICAgKgorICAgICAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4g
KSwKKyAgICAgKgorICAgICAqICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gs
IG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksCisgICAgICogIGVudk1hcEludGVuc2l0
eTogPGZsb2F0PgorICAgICAqCisgICAgICogIHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0PiwKKyAg
ICAgKgorICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKKyAgICAgKiAgd2lyZWZyYW1lTGlu
ZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqCisgICAgICogIHNraW5uaW5nOiA8Ym9vbD4sCisgICAg
ICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAorICAgICAqICBtb3JwaE5vcm1hbHM6IDxib29sPgor
ICAgICAqIH0KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIE1lc2hTdGFuZGFyZE1hdGVyaWFsKCBw
YXJhbWV0ZXJzICkgeworCisgICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKKworICAgICAg
ICB0aGlzLmRlZmluZXMgPSB7ICdTVEFOREFSRCc6ICcnIH07CisKKyAgICAgICAgdGhpcy50eXBl
ID0gJ01lc2hTdGFuZGFyZE1hdGVyaWFsJzsKKworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENv
bG9yKCAweGZmZmZmZiApOyAvLyBkaWZmdXNlCisgICAgICAgIHRoaXMucm91Z2huZXNzID0gMC41
OworICAgICAgICB0aGlzLm1ldGFsbmVzcyA9IDAuNTsKKworICAgICAgICB0aGlzLm1hcCA9IG51
bGw7CisKKyAgICAgICAgdGhpcy5saWdodE1hcCA9IG51bGw7CisgICAgICAgIHRoaXMubGlnaHRN
YXBJbnRlbnNpdHkgPSAxLjA7CisKKyAgICAgICAgdGhpcy5hb01hcCA9IG51bGw7CisgICAgICAg
IHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7CisKKyAgICAgICAgdGhpcy5lbWlzc2l2ZSA9IG5l
dyBDb2xvciggMHgwMDAwMDAgKTsKKyAgICAgICAgdGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEu
MDsKKyAgICAgICAgdGhpcy5lbWlzc2l2ZU1hcCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5idW1w
TWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5idW1wU2NhbGUgPSAxOworCisgICAgICAgIHRoaXMu
bm9ybWFsTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNw
YWNlTm9ybWFsTWFwOworICAgICAgICB0aGlzLm5vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEs
IDEgKTsKKworICAgICAgICB0aGlzLmRpc3BsYWNlbWVudE1hcCA9IG51bGw7CisgICAgICAgIHRo
aXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxOworICAgICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMg
PSAwOworCisgICAgICAgIHRoaXMucm91Z2huZXNzTWFwID0gbnVsbDsKKworICAgICAgICB0aGlz
Lm1ldGFsbmVzc01hcCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5hbHBoYU1hcCA9IG51bGw7CisK
KyAgICAgICAgdGhpcy5lbnZNYXAgPSBudWxsOworICAgICAgICB0aGlzLmVudk1hcEludGVuc2l0
eSA9IDEuMDsKKworICAgICAgICB0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IDAuOTg7CisKKyAgICAg
ICAgdGhpcy53aXJlZnJhbWUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lk
dGggPSAxOworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmVjYXAgPSAncm91bmQnOworICAgICAg
ICB0aGlzLndpcmVmcmFtZUxpbmVqb2luID0gJ3JvdW5kJzsKKworICAgICAgICB0aGlzLnNraW5u
aW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gZmFsc2U7CisgICAgICAg
IHRoaXMubW9ycGhOb3JtYWxzID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBh
cmFtZXRlcnMgKTsKKworICAgIH0KKworICAgIE1lc2hTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSApOworICAgIE1lc2hTdGFuZGFy
ZE1hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hTdGFuZGFyZE1hdGVyaWFsOwor
CisgICAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJp
YWwgPSB0cnVlOworCisgICAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBm
dW5jdGlvbiAoIHNvdXJjZSApIHsKKworICAgICAgICBNYXRlcmlhbC5wcm90b3R5cGUuY29weS5j
YWxsKCB0aGlzLCBzb3VyY2UgKTsKKworICAgICAgICB0aGlzLmRlZmluZXMgPSB7ICdTVEFOREFS
RCc6ICcnIH07CisKKyAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTsKKyAg
ICAgICAgdGhpcy5yb3VnaG5lc3MgPSBzb3VyY2Uucm91Z2huZXNzOworICAgICAgICB0aGlzLm1l
dGFsbmVzcyA9IHNvdXJjZS5tZXRhbG5lc3M7CisKKyAgICAgICAgdGhpcy5tYXAgPSBzb3VyY2Uu
bWFwOworCisgICAgICAgIHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7CisgICAgICAg
IHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7CisKKyAg
ICAgICAgdGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDsKKyAgICAgICAgdGhpcy5hb01hcEludGVu
c2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTsKKworICAgICAgICB0aGlzLmVtaXNzaXZlLmNv
cHkoIHNvdXJjZS5lbWlzc2l2ZSApOworICAgICAgICB0aGlzLmVtaXNzaXZlTWFwID0gc291cmNl
LmVtaXNzaXZlTWFwOworICAgICAgICB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291cmNlLmVt
aXNzaXZlSW50ZW5zaXR5OworCisgICAgICAgIHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFw
OworICAgICAgICB0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7CisKKyAgICAgICAg
dGhpcy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwOworICAgICAgICB0aGlzLm5vcm1hbE1h
cFR5cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTsKKyAgICAgICAgdGhpcy5ub3JtYWxTY2FsZS5j
b3B5KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTsKKworICAgICAgICB0aGlzLmRpc3BsYWNlbWVudE1h
cCA9IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50U2Nh
bGUgPSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50
QmlhcyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzOworCisgICAgICAgIHRoaXMucm91Z2huZXNz
TWFwID0gc291cmNlLnJvdWdobmVzc01hcDsKKworICAgICAgICB0aGlzLm1ldGFsbmVzc01hcCA9
IHNvdXJjZS5tZXRhbG5lc3NNYXA7CisKKyAgICAgICAgdGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5h
bHBoYU1hcDsKKworICAgICAgICB0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7CisgICAgICAg
IHRoaXMuZW52TWFwSW50ZW5zaXR5ID0gc291cmNlLmVudk1hcEludGVuc2l0eTsKKworICAgICAg
ICB0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87CisKKyAgICAg
ICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lOworICAgICAgICB0aGlzLndpcmVm
cmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7CisgICAgICAgIHRoaXMu
d2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwOworICAgICAgICB0aGlz
LndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luOworCisgICAgICAg
IHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7CisgICAgICAgIHRoaXMubW9ycGhUYXJn
ZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0czsKKyAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBz
b3VyY2UubW9ycGhOb3JtYWxzOworCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgfTsKKwor
ICAgIC8qKgorICAgICAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9X
ZXN0TGFuZ2xleQorICAgICAqCisgICAgICogcGFyYW1ldGVycyA9IHsKKyAgICAgKiAgcmVmbGVj
dGl2aXR5OiA8ZmxvYXQ+CisgICAgICogfQorICAgICAqLworCisgICAgZnVuY3Rpb24gTWVzaFBo
eXNpY2FsTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CisKKyAgICAgICAgTWVzaFN0YW5kYXJkTWF0
ZXJpYWwuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMuZGVmaW5lcyA9IHsgJ1BIWVNJQ0FM
JzogJycgfTsKKworICAgICAgICB0aGlzLnR5cGUgPSAnTWVzaFBoeXNpY2FsTWF0ZXJpYWwnOwor
CisgICAgICAgIHRoaXMucmVmbGVjdGl2aXR5ID0gMC41OyAvLyBtYXBzIHRvIEYwID0gMC4wNAor
CisgICAgICAgIHRoaXMuY2xlYXJDb2F0ID0gMC4wOworICAgICAgICB0aGlzLmNsZWFyQ29hdFJv
dWdobmVzcyA9IDAuMDsKKworICAgICAgICB0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOwor
CisgICAgfQorCisgICAgTWVzaFBoeXNpY2FsTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZSggTWVzaFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlICk7CisgICAgTWVzaFBoeXNpY2Fs
TWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWVzaFBoeXNpY2FsTWF0ZXJpYWw7CisK
KyAgICBNZXNoUGh5c2ljYWxNYXRlcmlhbC5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlh
bCA9IHRydWU7CisKKyAgICBNZXNoUGh5c2ljYWxNYXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1
bmN0aW9uICggc291cmNlICkgeworCisgICAgICAgIE1lc2hTdGFuZGFyZE1hdGVyaWFsLnByb3Rv
dHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworCisgICAgICAgIHRoaXMuZGVmaW5lcyA9
IHsgJ1BIWVNJQ0FMJzogJycgfTsKKworICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IHNvdXJj
ZS5yZWZsZWN0aXZpdHk7CisKKyAgICAgICAgdGhpcy5jbGVhckNvYXQgPSBzb3VyY2UuY2xlYXJD
b2F0OworICAgICAgICB0aGlzLmNsZWFyQ29hdFJvdWdobmVzcyA9IHNvdXJjZS5jbGVhckNvYXRS
b3VnaG5lc3M7CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICB9OworCisgICAgLyoqCisg
ICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9y
IGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqCisgICAgICogcGFy
YW1ldGVycyA9IHsKKyAgICAgKiAgY29sb3I6IDxoZXg+LAorICAgICAqICBzcGVjdWxhcjogPGhl
eD4sCisgICAgICogIHNoaW5pbmVzczogPGZsb2F0PiwKKyAgICAgKiAgb3BhY2l0eTogPGZsb2F0
PiwKKyAgICAgKgorICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisg
ICAgICoKKyAgICAgKiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisg
ICAgICogIGxpZ2h0TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+CisgICAgICoKKyAgICAgKiAgYW9NYXA6
IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICogIGFvTWFwSW50ZW5zaXR5OiA8
ZmxvYXQ+CisgICAgICoKKyAgICAgKiAgZW1pc3NpdmU6IDxoZXg+LAorICAgICAqICBlbWlzc2l2
ZUludGVuc2l0eTogPGZsb2F0PgorICAgICAqICBlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1
cmUoIDxJbWFnZT4gKSwKKyAgICAgKgorICAgICAqICBidW1wTWFwOiBuZXcgVEhSRUUuVGV4dHVy
ZSggPEltYWdlPiApLAorICAgICAqICBidW1wU2NhbGU6IDxmbG9hdD4sCisgICAgICoKKyAgICAg
KiAgbm9ybWFsTWFwOiBuZXcgVEhSRUUuVGV4dHVyZSggPEltYWdlPiApLAorICAgICAqICBub3Jt
YWxNYXBUeXBlOiBUSFJFRS5UYW5nZW50U3BhY2VOb3JtYWxNYXAsCisgICAgICogIG5vcm1hbFNj
YWxlOiA8VmVjdG9yMj4sCisgICAgICoKKyAgICAgKiAgZGlzcGxhY2VtZW50TWFwOiBuZXcgVEhS
RUUuVGV4dHVyZSggPEltYWdlPiApLAorICAgICAqICBkaXNwbGFjZW1lbnRTY2FsZTogPGZsb2F0
PiwKKyAgICAgKiAgZGlzcGxhY2VtZW50QmlhczogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICBz
cGVjdWxhck1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKgorICAgICAq
ICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKgorICAgICAq
ICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bvc3gsIG5lZ3gsIHBvc3ksIG5lZ3ks
IHBvc3osIG5lZ3pdICksCisgICAgICogIGNvbWJpbmU6IFRIUkVFLk11bHRpcGx5LAorICAgICAq
ICByZWZsZWN0aXZpdHk6IDxmbG9hdD4sCisgICAgICogIHJlZnJhY3Rpb25SYXRpbzogPGZsb2F0
PiwKKyAgICAgKgorICAgICAqICB3aXJlZnJhbWU6IDxib29sZWFuPiwKKyAgICAgKiAgd2lyZWZy
YW1lTGluZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqCisgICAgICogIHNraW5uaW5nOiA8Ym9vbD4s
CisgICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAorICAgICAqICBtb3JwaE5vcm1hbHM6IDxi
b29sPgorICAgICAqIH0KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIE1lc2hQaG9uZ01hdGVyaWFs
KCBwYXJhbWV0ZXJzICkgeworCisgICAgICAgIE1hdGVyaWFsLmNhbGwoIHRoaXMgKTsKKworICAg
ICAgICB0aGlzLnR5cGUgPSAnTWVzaFBob25nTWF0ZXJpYWwnOworCisgICAgICAgIHRoaXMuY29s
b3IgPSBuZXcgQ29sb3IoIDB4ZmZmZmZmICk7IC8vIGRpZmZ1c2UKKyAgICAgICAgdGhpcy5zcGVj
dWxhciA9IG5ldyBDb2xvciggMHgxMTExMTEgKTsKKyAgICAgICAgdGhpcy5zaGluaW5lc3MgPSAz
MDsKKworICAgICAgICB0aGlzLm1hcCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5saWdodE1hcCA9
IG51bGw7CisgICAgICAgIHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSAxLjA7CisKKyAgICAgICAg
dGhpcy5hb01hcCA9IG51bGw7CisgICAgICAgIHRoaXMuYW9NYXBJbnRlbnNpdHkgPSAxLjA7CisK
KyAgICAgICAgdGhpcy5lbWlzc2l2ZSA9IG5ldyBDb2xvciggMHgwMDAwMDAgKTsKKyAgICAgICAg
dGhpcy5lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDsKKyAgICAgICAgdGhpcy5lbWlzc2l2ZU1hcCA9
IG51bGw7CisKKyAgICAgICAgdGhpcy5idW1wTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5idW1w
U2NhbGUgPSAxOworCisgICAgICAgIHRoaXMubm9ybWFsTWFwID0gbnVsbDsKKyAgICAgICAgdGhp
cy5ub3JtYWxNYXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwOworICAgICAgICB0aGlzLm5v
cm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoIDEsIDEgKTsKKworICAgICAgICB0aGlzLmRpc3BsYWNl
bWVudE1hcCA9IG51bGw7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxOworICAg
ICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSAwOworCisgICAgICAgIHRoaXMuc3BlY3VsYXJN
YXAgPSBudWxsOworCisgICAgICAgIHRoaXMuYWxwaGFNYXAgPSBudWxsOworCisgICAgICAgIHRo
aXMuZW52TWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRp
b247CisgICAgICAgIHRoaXMucmVmbGVjdGl2aXR5ID0gMTsKKyAgICAgICAgdGhpcy5yZWZyYWN0
aW9uUmF0aW8gPSAwLjk4OworCisgICAgICAgIHRoaXMud2lyZWZyYW1lID0gZmFsc2U7CisgICAg
ICAgIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVM
aW5lY2FwID0gJ3JvdW5kJzsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3Vu
ZCc7CisKKyAgICAgICAgdGhpcy5za2lubmluZyA9IGZhbHNlOworICAgICAgICB0aGlzLm1vcnBo
VGFyZ2V0cyA9IGZhbHNlOworICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOworCisg
ICAgICAgIHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7CisKKyAgICB9CisKKyAgICBNZXNo
UGhvbmdNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlhbC5wcm90b3R5
cGUgKTsKKyAgICBNZXNoUGhvbmdNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNo
UGhvbmdNYXRlcmlhbDsKKworICAgIE1lc2hQaG9uZ01hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hQ
aG9uZ01hdGVyaWFsID0gdHJ1ZTsKKworICAgIE1lc2hQaG9uZ01hdGVyaWFsLnByb3RvdHlwZS5j
b3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisKKyAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBl
LmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisKKyAgICAgICAgdGhpcy5jb2xvci5jb3B5KCBz
b3VyY2UuY29sb3IgKTsKKyAgICAgICAgdGhpcy5zcGVjdWxhci5jb3B5KCBzb3VyY2Uuc3BlY3Vs
YXIgKTsKKyAgICAgICAgdGhpcy5zaGluaW5lc3MgPSBzb3VyY2Uuc2hpbmluZXNzOworCisgICAg
ICAgIHRoaXMubWFwID0gc291cmNlLm1hcDsKKworICAgICAgICB0aGlzLmxpZ2h0TWFwID0gc291
cmNlLmxpZ2h0TWFwOworICAgICAgICB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gc291cmNlLmxp
Z2h0TWFwSW50ZW5zaXR5OworCisgICAgICAgIHRoaXMuYW9NYXAgPSBzb3VyY2UuYW9NYXA7Cisg
ICAgICAgIHRoaXMuYW9NYXBJbnRlbnNpdHkgPSBzb3VyY2UuYW9NYXBJbnRlbnNpdHk7CisKKyAg
ICAgICAgdGhpcy5lbWlzc2l2ZS5jb3B5KCBzb3VyY2UuZW1pc3NpdmUgKTsKKyAgICAgICAgdGhp
cy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDsKKyAgICAgICAgdGhpcy5lbWlzc2l2
ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTsKKworICAgICAgICB0aGlzLmJ1
bXBNYXAgPSBzb3VyY2UuYnVtcE1hcDsKKyAgICAgICAgdGhpcy5idW1wU2NhbGUgPSBzb3VyY2Uu
YnVtcFNjYWxlOworCisgICAgICAgIHRoaXMubm9ybWFsTWFwID0gc291cmNlLm5vcm1hbE1hcDsK
KyAgICAgICAgdGhpcy5ub3JtYWxNYXBUeXBlID0gc291cmNlLm5vcm1hbE1hcFR5cGU7CisgICAg
ICAgIHRoaXMubm9ybWFsU2NhbGUuY29weSggc291cmNlLm5vcm1hbFNjYWxlICk7CisKKyAgICAg
ICAgdGhpcy5kaXNwbGFjZW1lbnRNYXAgPSBzb3VyY2UuZGlzcGxhY2VtZW50TWFwOworICAgICAg
ICB0aGlzLmRpc3BsYWNlbWVudFNjYWxlID0gc291cmNlLmRpc3BsYWNlbWVudFNjYWxlOworICAg
ICAgICB0aGlzLmRpc3BsYWNlbWVudEJpYXMgPSBzb3VyY2UuZGlzcGxhY2VtZW50QmlhczsKKwor
ICAgICAgICB0aGlzLnNwZWN1bGFyTWFwID0gc291cmNlLnNwZWN1bGFyTWFwOworCisgICAgICAg
IHRoaXMuYWxwaGFNYXAgPSBzb3VyY2UuYWxwaGFNYXA7CisKKyAgICAgICAgdGhpcy5lbnZNYXAg
PSBzb3VyY2UuZW52TWFwOworICAgICAgICB0aGlzLmNvbWJpbmUgPSBzb3VyY2UuY29tYmluZTsK
KyAgICAgICAgdGhpcy5yZWZsZWN0aXZpdHkgPSBzb3VyY2UucmVmbGVjdGl2aXR5OworICAgICAg
ICB0aGlzLnJlZnJhY3Rpb25SYXRpbyA9IHNvdXJjZS5yZWZyYWN0aW9uUmF0aW87CisKKyAgICAg
ICAgdGhpcy53aXJlZnJhbWUgPSBzb3VyY2Uud2lyZWZyYW1lOworICAgICAgICB0aGlzLndpcmVm
cmFtZUxpbmV3aWR0aCA9IHNvdXJjZS53aXJlZnJhbWVMaW5ld2lkdGg7CisgICAgICAgIHRoaXMu
d2lyZWZyYW1lTGluZWNhcCA9IHNvdXJjZS53aXJlZnJhbWVMaW5lY2FwOworICAgICAgICB0aGlz
LndpcmVmcmFtZUxpbmVqb2luID0gc291cmNlLndpcmVmcmFtZUxpbmVqb2luOworCisgICAgICAg
IHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uuc2tpbm5pbmc7CisgICAgICAgIHRoaXMubW9ycGhUYXJn
ZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0czsKKyAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBz
b3VyY2UubW9ycGhOb3JtYWxzOworCisgICAgICAgIHJldHVybiB0aGlzOworCisgICAgfTsKKwor
ICAgIC8qKgorICAgICAqIEBhdXRob3IgdGFrYWhpcm94IC8gaHR0cDovL2dpdGh1Yi5jb20vdGFr
YWhpcm94CisgICAgICoKKyAgICAgKiBwYXJhbWV0ZXJzID0geworICAgICAqICBncmFkaWVudE1h
cDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKQorICAgICAqIH0KKyAgICAgKi8KKworICAg
IGZ1bmN0aW9uIE1lc2hUb29uTWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CisKKyAgICAgICAgTWVz
aFBob25nTWF0ZXJpYWwuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMuZGVmaW5lcyA9IHsg
J1RPT04nOiAnJyB9OworCisgICAgICAgIHRoaXMudHlwZSA9ICdNZXNoVG9vbk1hdGVyaWFsJzsK
KworICAgICAgICB0aGlzLmdyYWRpZW50TWFwID0gbnVsbDsKKworICAgICAgICB0aGlzLnNldFZh
bHVlcyggcGFyYW1ldGVycyApOworCisgICAgfQorCisgICAgTWVzaFRvb25NYXRlcmlhbC5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNZXNoUGhvbmdNYXRlcmlhbC5wcm90b3R5cGUgKTsKKyAg
ICBNZXNoVG9vbk1hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lc2hUb29uTWF0ZXJp
YWw7CisKKyAgICBNZXNoVG9vbk1hdGVyaWFsLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWwg
PSB0cnVlOworCisgICAgTWVzaFRvb25NYXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9u
ICggc291cmNlICkgeworCisgICAgICAgIE1lc2hQaG9uZ01hdGVyaWFsLnByb3RvdHlwZS5jb3B5
LmNhbGwoIHRoaXMsIHNvdXJjZSApOworCisgICAgICAgIHRoaXMuZ3JhZGllbnRNYXAgPSBzb3Vy
Y2UuZ3JhZGllbnRNYXA7CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICB9OworCisgICAg
LyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBA
YXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXkKKyAgICAg
KgorICAgICAqIHBhcmFtZXRlcnMgPSB7CisgICAgICogIG9wYWNpdHk6IDxmbG9hdD4sCisgICAg
ICoKKyAgICAgKiAgYnVtcE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAg
KiAgYnVtcFNjYWxlOiA8ZmxvYXQ+LAorICAgICAqCisgICAgICogIG5vcm1hbE1hcDogbmV3IFRI
UkVFLlRleHR1cmUoIDxJbWFnZT4gKSwKKyAgICAgKiAgbm9ybWFsTWFwVHlwZTogVEhSRUUuVGFu
Z2VudFNwYWNlTm9ybWFsTWFwLAorICAgICAqICBub3JtYWxTY2FsZTogPFZlY3RvcjI+LAorICAg
ICAqCisgICAgICogIGRpc3BsYWNlbWVudE1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4g
KSwKKyAgICAgKiAgZGlzcGxhY2VtZW50U2NhbGU6IDxmbG9hdD4sCisgICAgICogIGRpc3BsYWNl
bWVudEJpYXM6IDxmbG9hdD4sCisgICAgICoKKyAgICAgKiAgd2lyZWZyYW1lOiA8Ym9vbGVhbj4s
CisgICAgICogIHdpcmVmcmFtZUxpbmV3aWR0aDogPGZsb2F0PgorICAgICAqCisgICAgICogIHNr
aW5uaW5nOiA8Ym9vbD4sCisgICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAorICAgICAqICBt
b3JwaE5vcm1hbHM6IDxib29sPgorICAgICAqIH0KKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIE1l
c2hOb3JtYWxNYXRlcmlhbCggcGFyYW1ldGVycyApIHsKKworICAgICAgICBNYXRlcmlhbC5jYWxs
KCB0aGlzICk7CisKKyAgICAgICAgdGhpcy50eXBlID0gJ01lc2hOb3JtYWxNYXRlcmlhbCc7CisK
KyAgICAgICAgdGhpcy5idW1wTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5idW1wU2NhbGUgPSAx
OworCisgICAgICAgIHRoaXMubm9ybWFsTWFwID0gbnVsbDsKKyAgICAgICAgdGhpcy5ub3JtYWxN
YXBUeXBlID0gVGFuZ2VudFNwYWNlTm9ybWFsTWFwOworICAgICAgICB0aGlzLm5vcm1hbFNjYWxl
ID0gbmV3IFZlY3RvcjIoIDEsIDEgKTsKKworICAgICAgICB0aGlzLmRpc3BsYWNlbWVudE1hcCA9
IG51bGw7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50U2NhbGUgPSAxOworICAgICAgICB0aGlz
LmRpc3BsYWNlbWVudEJpYXMgPSAwOworCisgICAgICAgIHRoaXMud2lyZWZyYW1lID0gZmFsc2U7
CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gMTsKKworICAgICAgICB0aGlzLmZv
ZyA9IGZhbHNlOworICAgICAgICB0aGlzLmxpZ2h0cyA9IGZhbHNlOworCisgICAgICAgIHRoaXMu
c2tpbm5pbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBmYWxzZTsKKworICAgICAgICB0aGlzLnNldFZhbHVl
cyggcGFyYW1ldGVycyApOworCisgICAgfQorCisgICAgTWVzaE5vcm1hbE1hdGVyaWFsLnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3RvdHlwZSApOworICAgIE1lc2hOb3Jt
YWxNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZXNoTm9ybWFsTWF0ZXJpYWw7CisK
KyAgICBNZXNoTm9ybWFsTWF0ZXJpYWwucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsID0g
dHJ1ZTsKKworICAgIE1lc2hOb3JtYWxNYXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9u
ICggc291cmNlICkgeworCisgICAgICAgIE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRo
aXMsIHNvdXJjZSApOworCisgICAgICAgIHRoaXMuYnVtcE1hcCA9IHNvdXJjZS5idW1wTWFwOwor
ICAgICAgICB0aGlzLmJ1bXBTY2FsZSA9IHNvdXJjZS5idW1wU2NhbGU7CisKKyAgICAgICAgdGhp
cy5ub3JtYWxNYXAgPSBzb3VyY2Uubm9ybWFsTWFwOworICAgICAgICB0aGlzLm5vcm1hbE1hcFR5
cGUgPSBzb3VyY2Uubm9ybWFsTWFwVHlwZTsKKyAgICAgICAgdGhpcy5ub3JtYWxTY2FsZS5jb3B5
KCBzb3VyY2Uubm9ybWFsU2NhbGUgKTsKKworICAgICAgICB0aGlzLmRpc3BsYWNlbWVudE1hcCA9
IHNvdXJjZS5kaXNwbGFjZW1lbnRNYXA7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50U2NhbGUg
PSBzb3VyY2UuZGlzcGxhY2VtZW50U2NhbGU7CisgICAgICAgIHRoaXMuZGlzcGxhY2VtZW50Qmlh
cyA9IHNvdXJjZS5kaXNwbGFjZW1lbnRCaWFzOworCisgICAgICAgIHRoaXMud2lyZWZyYW1lID0g
c291cmNlLndpcmVmcmFtZTsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5ld2lkdGggPSBzb3Vy
Y2Uud2lyZWZyYW1lTGluZXdpZHRoOworCisgICAgICAgIHRoaXMuc2tpbm5pbmcgPSBzb3VyY2Uu
c2tpbm5pbmc7CisgICAgICAgIHRoaXMubW9ycGhUYXJnZXRzID0gc291cmNlLm1vcnBoVGFyZ2V0
czsKKyAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBzb3VyY2UubW9ycGhOb3JtYWxzOworCisg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBhdXRob3Ig
bXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0
dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKgorICAgICAqIHBhcmFtZXRlcnMgPSB7Cisg
ICAgICogIGNvbG9yOiA8aGV4PiwKKyAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKKyAgICAgKgor
ICAgICAqICBtYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICoKKyAgICAg
KiAgbGlnaHRNYXA6IG5ldyBUSFJFRS5UZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICogIGxpZ2h0
TWFwSW50ZW5zaXR5OiA8ZmxvYXQ+CisgICAgICoKKyAgICAgKiAgYW9NYXA6IG5ldyBUSFJFRS5U
ZXh0dXJlKCA8SW1hZ2U+ICksCisgICAgICogIGFvTWFwSW50ZW5zaXR5OiA8ZmxvYXQ+CisgICAg
ICoKKyAgICAgKiAgZW1pc3NpdmU6IDxoZXg+LAorICAgICAqICBlbWlzc2l2ZUludGVuc2l0eTog
PGZsb2F0PgorICAgICAqICBlbWlzc2l2ZU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFnZT4g
KSwKKyAgICAgKgorICAgICAqICBzcGVjdWxhck1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFn
ZT4gKSwKKyAgICAgKgorICAgICAqICBhbHBoYU1hcDogbmV3IFRIUkVFLlRleHR1cmUoIDxJbWFn
ZT4gKSwKKyAgICAgKgorICAgICAqICBlbnZNYXA6IG5ldyBUSFJFRS5DdWJlVGV4dHVyZSggW3Bv
c3gsIG5lZ3gsIHBvc3ksIG5lZ3ksIHBvc3osIG5lZ3pdICksCisgICAgICogIGNvbWJpbmU6IFRI
UkVFLk11bHRpcGx5LAorICAgICAqICByZWZsZWN0aXZpdHk6IDxmbG9hdD4sCisgICAgICogIHJl
ZnJhY3Rpb25SYXRpbzogPGZsb2F0PiwKKyAgICAgKgorICAgICAqICB3aXJlZnJhbWU6IDxib29s
ZWFuPiwKKyAgICAgKiAgd2lyZWZyYW1lTGluZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqCisgICAg
ICogIHNraW5uaW5nOiA8Ym9vbD4sCisgICAgICogIG1vcnBoVGFyZ2V0czogPGJvb2w+LAorICAg
ICAqICBtb3JwaE5vcm1hbHM6IDxib29sPgorICAgICAqIH0KKyAgICAgKi8KKworICAgIGZ1bmN0
aW9uIE1lc2hMYW1iZXJ0TWF0ZXJpYWwoIHBhcmFtZXRlcnMgKSB7CisKKyAgICAgICAgTWF0ZXJp
YWwuY2FsbCggdGhpcyApOworCisgICAgICAgIHRoaXMudHlwZSA9ICdNZXNoTGFtYmVydE1hdGVy
aWFsJzsKKworICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOyAvLyBk
aWZmdXNlCisKKyAgICAgICAgdGhpcy5tYXAgPSBudWxsOworCisgICAgICAgIHRoaXMubGlnaHRN
YXAgPSBudWxsOworICAgICAgICB0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5ID0gMS4wOworCisgICAg
ICAgIHRoaXMuYW9NYXAgPSBudWxsOworICAgICAgICB0aGlzLmFvTWFwSW50ZW5zaXR5ID0gMS4w
OworCisgICAgICAgIHRoaXMuZW1pc3NpdmUgPSBuZXcgQ29sb3IoIDB4MDAwMDAwICk7CisgICAg
ICAgIHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7CisgICAgICAgIHRoaXMuZW1pc3NpdmVN
YXAgPSBudWxsOworCisgICAgICAgIHRoaXMuc3BlY3VsYXJNYXAgPSBudWxsOwogCiAgICAgICAg
IHRoaXMuYWxwaGFNYXAgPSBudWxsOwogCi0gICAgICAgIHRoaXMuZW52TWFwID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5jb21iaW5lID0gTXVsdGlwbHlPcGVyYXRpb247Ci0gICAgICAgIHRoaXMucmVm
bGVjdGl2aXR5ID0gMTsKLSAgICAgICAgdGhpcy5yZWZyYWN0aW9uUmF0aW8gPSAwLjk4OworICAg
ICAgICB0aGlzLmVudk1hcCA9IG51bGw7CisgICAgICAgIHRoaXMuY29tYmluZSA9IE11bHRpcGx5
T3BlcmF0aW9uOworICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IDE7CisgICAgICAgIHRoaXMu
cmVmcmFjdGlvblJhdGlvID0gMC45ODsKKworICAgICAgICB0aGlzLndpcmVmcmFtZSA9IGZhbHNl
OworICAgICAgICB0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCA9IDE7CisgICAgICAgIHRoaXMud2ly
ZWZyYW1lTGluZWNhcCA9ICdyb3VuZCc7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWpvaW4g
PSAncm91bmQnOworCisgICAgICAgIHRoaXMuc2tpbm5pbmcgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5tb3JwaFRhcmdldHMgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5tb3JwaE5vcm1hbHMgPSBmYWxz
ZTsKKworICAgICAgICB0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOworCisgICAgfQorCisg
ICAgTWVzaExhbWJlcnRNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBNYXRlcmlh
bC5wcm90b3R5cGUgKTsKKyAgICBNZXNoTGFtYmVydE1hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IE1lc2hMYW1iZXJ0TWF0ZXJpYWw7CisKKyAgICBNZXNoTGFtYmVydE1hdGVyaWFsLnBy
b3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgPSB0cnVlOworCisgICAgTWVzaExhbWJlcnRN
YXRlcmlhbC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgeworCisgICAgICAg
IE1hdGVyaWFsLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworCisgICAgICAg
IHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7CisKKyAgICAgICAgdGhpcy5tYXAgPSBz
b3VyY2UubWFwOworCisgICAgICAgIHRoaXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7Cisg
ICAgICAgIHRoaXMubGlnaHRNYXBJbnRlbnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7
CisKKyAgICAgICAgdGhpcy5hb01hcCA9IHNvdXJjZS5hb01hcDsKKyAgICAgICAgdGhpcy5hb01h
cEludGVuc2l0eSA9IHNvdXJjZS5hb01hcEludGVuc2l0eTsKKworICAgICAgICB0aGlzLmVtaXNz
aXZlLmNvcHkoIHNvdXJjZS5lbWlzc2l2ZSApOworICAgICAgICB0aGlzLmVtaXNzaXZlTWFwID0g
c291cmNlLmVtaXNzaXZlTWFwOworICAgICAgICB0aGlzLmVtaXNzaXZlSW50ZW5zaXR5ID0gc291
cmNlLmVtaXNzaXZlSW50ZW5zaXR5OworCisgICAgICAgIHRoaXMuc3BlY3VsYXJNYXAgPSBzb3Vy
Y2Uuc3BlY3VsYXJNYXA7CisKKyAgICAgICAgdGhpcy5hbHBoYU1hcCA9IHNvdXJjZS5hbHBoYU1h
cDsKKworICAgICAgICB0aGlzLmVudk1hcCA9IHNvdXJjZS5lbnZNYXA7CisgICAgICAgIHRoaXMu
Y29tYmluZSA9IHNvdXJjZS5jb21iaW5lOworICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IHNv
dXJjZS5yZWZsZWN0aXZpdHk7CisgICAgICAgIHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNl
LnJlZnJhY3Rpb25SYXRpbzsKKworICAgICAgICB0aGlzLndpcmVmcmFtZSA9IHNvdXJjZS53aXJl
ZnJhbWU7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZXdpZHRoID0gc291cmNlLndpcmVmcmFt
ZUxpbmV3aWR0aDsKKyAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lY2FwID0gc291cmNlLndpcmVm
cmFtZUxpbmVjYXA7CisgICAgICAgIHRoaXMud2lyZWZyYW1lTGluZWpvaW4gPSBzb3VyY2Uud2ly
ZWZyYW1lTGluZWpvaW47CisKKyAgICAgICAgdGhpcy5za2lubmluZyA9IHNvdXJjZS5za2lubmlu
ZzsKKyAgICAgICAgdGhpcy5tb3JwaFRhcmdldHMgPSBzb3VyY2UubW9ycGhUYXJnZXRzOworICAg
ICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IHNvdXJjZS5tb3JwaE5vcm1hbHM7CisKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisKKyAgICB9OworCisgICAgLyoqCisgICAgICogQGF1dGhvciBhbHRlcmVk
cSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKgorICAgICAqIHBhcmFtZXRlcnMg
PSB7CisgICAgICogIGNvbG9yOiA8aGV4PiwKKyAgICAgKiAgb3BhY2l0eTogPGZsb2F0PiwKKyAg
ICAgKgorICAgICAqICBsaW5ld2lkdGg6IDxmbG9hdD4sCisgICAgICoKKyAgICAgKiAgc2NhbGU6
IDxmbG9hdD4sCisgICAgICogIGRhc2hTaXplOiA8ZmxvYXQ+LAorICAgICAqICBnYXBTaXplOiA8
ZmxvYXQ+CisgICAgICogfQorICAgICAqLworCisgICAgZnVuY3Rpb24gTGluZURhc2hlZE1hdGVy
aWFsKCBwYXJhbWV0ZXJzICkgeworCisgICAgICAgIExpbmVCYXNpY01hdGVyaWFsLmNhbGwoIHRo
aXMgKTsKKworICAgICAgICB0aGlzLnR5cGUgPSAnTGluZURhc2hlZE1hdGVyaWFsJzsKKworICAg
ICAgICB0aGlzLnNjYWxlID0gMTsKKyAgICAgICAgdGhpcy5kYXNoU2l6ZSA9IDM7CisgICAgICAg
IHRoaXMuZ2FwU2l6ZSA9IDE7CisKKyAgICAgICAgdGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMg
KTsKKworICAgIH0KKworICAgIExpbmVEYXNoZWRNYXRlcmlhbC5wcm90b3R5cGUgPSBPYmplY3Qu
Y3JlYXRlKCBMaW5lQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUgKTsKKyAgICBMaW5lRGFzaGVkTWF0
ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGluZURhc2hlZE1hdGVyaWFsOworCisgICAg
TGluZURhc2hlZE1hdGVyaWFsLnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbCA9IHRydWU7
CisKKyAgICBMaW5lRGFzaGVkTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNv
dXJjZSApIHsKKworICAgICAgICBMaW5lQmFzaWNNYXRlcmlhbC5wcm90b3R5cGUuY29weS5jYWxs
KCB0aGlzLCBzb3VyY2UgKTsKKworICAgICAgICB0aGlzLnNjYWxlID0gc291cmNlLnNjYWxlOwor
ICAgICAgICB0aGlzLmRhc2hTaXplID0gc291cmNlLmRhc2hTaXplOworICAgICAgICB0aGlzLmdh
cFNpemUgPSBzb3VyY2UuZ2FwU2l6ZTsKKworICAgICAgICByZXR1cm4gdGhpczsKKworICAgIH07
CisKKworCisgICAgdmFyIE1hdGVyaWFscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHsK
KyAgICAgICAgU2hhZG93TWF0ZXJpYWw6IFNoYWRvd01hdGVyaWFsLAorICAgICAgICBTcHJpdGVN
YXRlcmlhbDogU3ByaXRlTWF0ZXJpYWwsCisgICAgICAgIFJhd1NoYWRlck1hdGVyaWFsOiBSYXdT
aGFkZXJNYXRlcmlhbCwKKyAgICAgICAgU2hhZGVyTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsLAor
ICAgICAgICBQb2ludHNNYXRlcmlhbDogUG9pbnRzTWF0ZXJpYWwsCisgICAgICAgIE1lc2hQaHlz
aWNhbE1hdGVyaWFsOiBNZXNoUGh5c2ljYWxNYXRlcmlhbCwKKyAgICAgICAgTWVzaFN0YW5kYXJk
TWF0ZXJpYWw6IE1lc2hTdGFuZGFyZE1hdGVyaWFsLAorICAgICAgICBNZXNoUGhvbmdNYXRlcmlh
bDogTWVzaFBob25nTWF0ZXJpYWwsCisgICAgICAgIE1lc2hUb29uTWF0ZXJpYWw6IE1lc2hUb29u
TWF0ZXJpYWwsCisgICAgICAgIE1lc2hOb3JtYWxNYXRlcmlhbDogTWVzaE5vcm1hbE1hdGVyaWFs
LAorICAgICAgICBNZXNoTGFtYmVydE1hdGVyaWFsOiBNZXNoTGFtYmVydE1hdGVyaWFsLAorICAg
ICAgICBNZXNoRGVwdGhNYXRlcmlhbDogTWVzaERlcHRoTWF0ZXJpYWwsCisgICAgICAgIE1lc2hE
aXN0YW5jZU1hdGVyaWFsOiBNZXNoRGlzdGFuY2VNYXRlcmlhbCwKKyAgICAgICAgTWVzaEJhc2lj
TWF0ZXJpYWw6IE1lc2hCYXNpY01hdGVyaWFsLAorICAgICAgICBMaW5lRGFzaGVkTWF0ZXJpYWw6
IExpbmVEYXNoZWRNYXRlcmlhbCwKKyAgICAgICAgTGluZUJhc2ljTWF0ZXJpYWw6IExpbmVCYXNp
Y01hdGVyaWFsLAorICAgICAgICBNYXRlcmlhbDogTWF0ZXJpYWwKKyAgICB9KTsKKworICAgIC8q
KgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICovCisK
KyAgICB2YXIgQ2FjaGUgPSB7CisKKyAgICAgICAgZW5hYmxlZDogZmFsc2UsCisKKyAgICAgICAg
ZmlsZXM6IHt9LAorCisgICAgICAgIGFkZDogZnVuY3Rpb24gKCBrZXksIGZpbGUgKSB7CisKKyAg
ICAgICAgICAgIGlmICggdGhpcy5lbmFibGVkID09PSBmYWxzZSApIHJldHVybjsKKworICAgICAg
ICAgICAgLy8gY29uc29sZS5sb2coICdUSFJFRS5DYWNoZScsICdBZGRpbmcga2V5OicsIGtleSAp
OworCisgICAgICAgICAgICB0aGlzLmZpbGVzWyBrZXkgXSA9IGZpbGU7CisKKyAgICAgICAgfSwK
KworICAgICAgICBnZXQ6IGZ1bmN0aW9uICgga2V5ICkgeworCisgICAgICAgICAgICBpZiAoIHRo
aXMuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47CisKKyAgICAgICAgICAgIC8vIGNvbnNvbGUu
bG9nKCAnVEhSRUUuQ2FjaGUnLCAnQ2hlY2tpbmcga2V5OicsIGtleSApOworCisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5maWxlc1sga2V5IF07CisKKyAgICAgICAgfSwKKworICAgICAgICByZW1v
dmU6IGZ1bmN0aW9uICgga2V5ICkgeworCisgICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc1sg
a2V5IF07CisKKyAgICAgICAgfSwKKworICAgICAgICBjbGVhcjogZnVuY3Rpb24gKCkgeworCisg
ICAgICAgICAgICB0aGlzLmZpbGVzID0ge307CisKKyAgICAgICAgfQorCisgICAgfTsKKworICAg
IC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCisgICAgICov
CisKKyAgICBmdW5jdGlvbiBMb2FkaW5nTWFuYWdlciggb25Mb2FkLCBvblByb2dyZXNzLCBvbkVy
cm9yICkgeworCisgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisKKyAgICAgICAgdmFyIGlzTG9h
ZGluZyA9IGZhbHNlOworICAgICAgICB2YXIgaXRlbXNMb2FkZWQgPSAwOworICAgICAgICB2YXIg
aXRlbXNUb3RhbCA9IDA7CisgICAgICAgIHZhciB1cmxNb2RpZmllciA9IHVuZGVmaW5lZDsKKwor
ICAgICAgICB0aGlzLm9uU3RhcnQgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMub25Mb2FkID0g
b25Mb2FkOworICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBvblByb2dyZXNzOworICAgICAgICB0
aGlzLm9uRXJyb3IgPSBvbkVycm9yOworCisgICAgICAgIHRoaXMuaXRlbVN0YXJ0ID0gZnVuY3Rp
b24gKCB1cmwgKSB7CisKKyAgICAgICAgICAgIGl0ZW1zVG90YWwgKys7CisKKyAgICAgICAgICAg
IGlmICggaXNMb2FkaW5nID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAgIGlmICggc2Nv
cGUub25TdGFydCAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgICAgIHNjb3Bl
Lm9uU3RhcnQoIHVybCwgaXRlbXNMb2FkZWQsIGl0ZW1zVG90YWwgKTsKKworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpc0xvYWRpbmcgPSB0cnVlOwor
CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5pdGVtRW5kID0gZnVuY3Rpb24gKCB1cmwgKSB7
CisKKyAgICAgICAgICAgIGl0ZW1zTG9hZGVkICsrOworCisgICAgICAgICAgICBpZiAoIHNjb3Bl
Lm9uUHJvZ3Jlc3MgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIHNjb3BlLm9u
UHJvZ3Jlc3MoIHVybCwgaXRlbXNMb2FkZWQsIGl0ZW1zVG90YWwgKTsKKworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIGl0ZW1zTG9hZGVkID09PSBpdGVtc1RvdGFsICkgeworCisg
ICAgICAgICAgICAgICAgaXNMb2FkaW5nID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAo
IHNjb3BlLm9uTG9hZCAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgICAgIHNj
b3BlLm9uTG9hZCgpOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfTsKKworICAgICAgICB0aGlzLml0ZW1FcnJvciA9IGZ1bmN0aW9uICggdXJsICkgewor
CisgICAgICAgICAgICBpZiAoIHNjb3BlLm9uRXJyb3IgIT09IHVuZGVmaW5lZCApIHsKKworICAg
ICAgICAgICAgICAgIHNjb3BlLm9uRXJyb3IoIHVybCApOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfTsKKworICAgICAgICB0aGlzLnJlc29sdmVVUkwgPSBmdW5jdGlvbiAoIHVybCApIHsK
KworICAgICAgICAgICAgaWYgKCB1cmxNb2RpZmllciApIHsKKworICAgICAgICAgICAgICAgIHJl
dHVybiB1cmxNb2RpZmllciggdXJsICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHVybDsKKworICAgICAgICB9OworCisgICAgICAgIHRoaXMuc2V0VVJMTW9kaWZpZXIg
PSBmdW5jdGlvbiAoIHRyYW5zZm9ybSApIHsKKworICAgICAgICAgICAgdXJsTW9kaWZpZXIgPSB0
cmFuc2Zvcm07CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9OworCisgICAg
fQorCisgICAgdmFyIERlZmF1bHRMb2FkaW5nTWFuYWdlciA9IG5ldyBMb2FkaW5nTWFuYWdlcigp
OworCisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8K
KyAgICAgKi8KKworICAgIHZhciBsb2FkaW5nID0ge307CisKKyAgICBmdW5jdGlvbiBGaWxlTG9h
ZGVyKCBtYW5hZ2VyICkgeworCisgICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0g
dW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOworCisgICAgfQor
CisgICAgT2JqZWN0LmFzc2lnbiggRmlsZUxvYWRlci5wcm90b3R5cGUsIHsKKworICAgICAgICBs
b2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgeworCisg
ICAgICAgICAgICBpZiAoIHVybCA9PT0gdW5kZWZpbmVkICkgdXJsID0gJyc7CisKKyAgICAgICAg
ICAgIGlmICggdGhpcy5wYXRoICE9PSB1bmRlZmluZWQgKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7
CisKKyAgICAgICAgICAgIHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwgKTsKKwor
ICAgICAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKKworICAgICAgICAgICAgdmFyIGNhY2hlZCA9
IENhY2hlLmdldCggdXJsICk7CisKKyAgICAgICAgICAgIGlmICggY2FjaGVkICE9PSB1bmRlZmlu
ZWQgKSB7CisKKyAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7
CisKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvbkxvYWQgKSBvbkxvYWQoIGNhY2hlZCApOworCisgICAgICAgICAg
ICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CisKKyAgICAgICAgICAgICAg
ICB9LCAwICk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkOworCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlcXVlc3QgaXMgZHVwbGljYXRlCisKKyAg
ICAgICAgICAgIGlmICggbG9hZGluZ1sgdXJsIF0gIT09IHVuZGVmaW5lZCApIHsKKworICAgICAg
ICAgICAgICAgIGxvYWRpbmdbIHVybCBdLnB1c2goIHsKKworICAgICAgICAgICAgICAgICAgICBv
bkxvYWQ6IG9uTG9hZCwKKyAgICAgICAgICAgICAgICAgICAgb25Qcm9ncmVzczogb25Qcm9ncmVz
cywKKyAgICAgICAgICAgICAgICAgICAgb25FcnJvcjogb25FcnJvcgorCisgICAgICAgICAgICAg
ICAgfSApOworCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBkYXRhOiBVUkkKKyAgICAgICAgICAgIHZhciBkYXRhVXJp
UmVnZXggPSAvXmRhdGE6KC4qPykoO2Jhc2U2NCk/LCguKikkLzsKKyAgICAgICAgICAgIHZhciBk
YXRhVXJpUmVnZXhSZXN1bHQgPSB1cmwubWF0Y2goIGRhdGFVcmlSZWdleCApOworCisgICAgICAg
ICAgICAvLyBTYWZhcmkgY2FuIG5vdCBoYW5kbGUgRGF0YSBVUklzIHRocm91Z2ggWE1MSHR0cFJl
cXVlc3Qgc28gcHJvY2VzcyBtYW51YWxseQorICAgICAgICAgICAgaWYgKCBkYXRhVXJpUmVnZXhS
ZXN1bHQgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgbWltZVR5cGUgPSBkYXRhVXJpUmVnZXhS
ZXN1bHRbIDEgXTsKKyAgICAgICAgICAgICAgICB2YXIgaXNCYXNlNjQgPSAhISBkYXRhVXJpUmVn
ZXhSZXN1bHRbIDIgXTsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGRhdGFVcmlSZWdleFJl
c3VsdFsgMyBdOworCisgICAgICAgICAgICAgICAgZGF0YSA9IHdpbmRvdy5kZWNvZGVVUklDb21w
b25lbnQoIGRhdGEgKTsKKworICAgICAgICAgICAgICAgIGlmICggaXNCYXNlNjQgKSBkYXRhID0g
d2luZG93LmF0b2IoIGRhdGEgKTsKKworICAgICAgICAgICAgICAgIHRyeSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHJlc3BvbnNlOworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9u
c2VUeXBlID0gKCB0aGlzLnJlc3BvbnNlVHlwZSB8fCAnJyApLnRvTG93ZXJDYXNlKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoICggcmVzcG9uc2VUeXBlICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdhcnJheWJ1ZmZlcic6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdibG9iJzoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3ID0g
bmV3IFVpbnQ4QXJyYXkoIGRhdGEubGVuZ3RoICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArKyApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3WyBpIF0gPSBkYXRhLmNoYXJDb2RlQXQoIGkg
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmVzcG9uc2VUeXBlID09PSAnYmxvYicgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBuZXcgQmxvYiggWyB2aWV3LmJ1ZmZlciBd
LCB7IHR5cGU6IG1pbWVUeXBlIH0gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB2aWV3
LmJ1ZmZlcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdk
b2N1bWVudCc6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3
IERPTVBhcnNlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcGFy
c2VyLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgbWltZVR5cGUgKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdqc29u
JzoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZSgg
ZGF0YSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vICd0ZXh0JyBvciBvdGhlcgorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIFdhaXQgZm9yIG5leHQgYnJvd3NlciB0aWNrIGxpa2Ugc3RhbmRhcmQgWE1MSHR0
cFJlcXVlc3QgZXZlbnQgZGlzcGF0Y2hpbmcgZG9lcworICAgICAgICAgICAgICAgICAgICB3aW5k
b3cuc2V0VGltZW91dCggZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG9uTG9hZCApIG9uTG9hZCggcmVzcG9uc2UgKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgc2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTsKKworICAgICAgICAgICAgICAgICAgICB9
LCAwICk7CisKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZXJyb3IgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2FpdCBmb3IgbmV4dCBicm93c2VyIHRpY2sgbGlrZSBzdGFuZGFyZCBY
TUxIdHRwUmVxdWVzdCBldmVudCBkaXNwYXRjaGluZyBkb2VzCisgICAgICAgICAgICAgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggb25FcnJvciApIG9uRXJyb3IoIGVycm9yICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgfSwgMCApOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBhcnJheSBmb3IgZHVwbGljYXRlIHJlcXVl
c3RzCisKKyAgICAgICAgICAgICAgICBsb2FkaW5nWyB1cmwgXSA9IFtdOworCisgICAgICAgICAg
ICAgICAgbG9hZGluZ1sgdXJsIF0ucHVzaCggeworCisgICAgICAgICAgICAgICAgICAgIG9uTG9h
ZDogb25Mb2FkLAorICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBvblByb2dyZXNzLAor
ICAgICAgICAgICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yCisKKyAgICAgICAgICAgICAgICB9
ICk7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworCisgICAgICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCAnR0VUJywgdXJsLCB0cnVlICk7CisK
KyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoICdsb2FkJywgZnVuY3Rp
b24gKCBldmVudCApIHsKKworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB0aGlz
LnJlc3BvbnNlOworCisgICAgICAgICAgICAgICAgICAgIENhY2hlLmFkZCggdXJsLCByZXNwb25z
ZSApOworCisgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBsb2FkaW5nWyB1cmwg
XTsKKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9hZGluZ1sgdXJsIF07CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzLnN0YXR1cyA9PT0gMjAwIHx8IHRoaXMuc3RhdHVzID09
PSAwICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHJldHVy
biBIVFRQIFN0YXR1cyAwIHdoZW4gdXNpbmcgbm9uLWh0dHAgcHJvdG9jb2wKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGUuZy4gJ2ZpbGU6Ly8nIG9yICdkYXRhOi8vJy4gSGFuZGxlIGFzIHN1
Y2Nlc3MuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5zdGF0dXMgPT09IDAg
KSBjb25zb2xlLndhcm4oICdUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVk
LicgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGNh
bGxiYWNrcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1sgaSBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY2FsbGJhY2sub25Mb2FkICkgY2FsbGJhY2sub25Mb2FkKCByZXNwb25z
ZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CisKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9
IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBpbDsgaSArKyApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1sgaSBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY2FsbGJhY2sub25FcnJvciApIGNhbGxiYWNrLm9uRXJyb3IoIGV2
ZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgc2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTsKKworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB9LCBmYWxzZSApOworCisgICAgICAgICAgICAgICAgcmVx
dWVzdC5hZGRFdmVudExpc3RlbmVyKCAncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoIGV2ZW50ICkgewor
CisgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBsb2FkaW5nWyB1cmwgXTsKKwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gY2FsbGJhY2tzLmxlbmd0
aDsgaSA8IGlsOyBpICsrICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJh
Y2sgPSBjYWxsYmFja3NbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJh
Y2sub25Qcm9ncmVzcyApIGNhbGxiYWNrLm9uUHJvZ3Jlc3MoIGV2ZW50ICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSwgZmFsc2UgKTsKKworICAgICAgICAg
ICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgZnVuY3Rpb24gKCBldmVu
dCApIHsKKworICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gbG9hZGluZ1sgdXJs
IF07CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvYWRpbmdbIHVybCBdOworCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSBjYWxsYmFja3MubGVuZ3RoOyBp
IDwgaWw7IGkgKysgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9
IGNhbGxiYWNrc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5v
bkVycm9yICkgY2FsbGJhY2sub25FcnJvciggZXZlbnQgKTsKKworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTsK
KyAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApOworCisg
ICAgICAgICAgICAgICAgfSwgZmFsc2UgKTsKKworICAgICAgICAgICAgICAgIGlmICggdGhpcy5y
ZXNwb25zZVR5cGUgIT09IHVuZGVmaW5lZCApIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gdGhpcy5y
ZXNwb25zZVR5cGU7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLndpdGhDcmVkZW50aWFscyAh
PT0gdW5kZWZpbmVkICkgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50
aWFsczsKKworICAgICAgICAgICAgICAgIGlmICggcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlICkg
cmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlKCB0aGlzLm1pbWVUeXBlICE9PSB1bmRlZmluZWQgPyB0
aGlzLm1pbWVUeXBlIDogJ3RleHQvcGxhaW4nICk7CisKKyAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaGVhZGVyIGluIHRoaXMucmVxdWVzdEhlYWRlciApIHsKKworICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoIGhlYWRlciwgdGhpcy5yZXF1ZXN0SGVhZGVyWyBo
ZWFkZXIgXSApOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVxdWVz
dC5zZW5kKCBudWxsICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2NvcGUubWFu
YWdlci5pdGVtU3RhcnQoIHVybCApOworCisgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDsKKwor
ICAgICAgICB9LAorCisgICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisKKyAg
ICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisK
KyAgICAgICAgfSwKKworICAgICAgICBzZXRSZXNwb25zZVR5cGU6IGZ1bmN0aW9uICggdmFsdWUg
KSB7CisKKyAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUeXBlID0gdmFsdWU7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIHNldFdpdGhDcmVkZW50aWFs
czogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKworICAgICAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlh
bHMgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgIH0sCisKKyAg
ICAgICAgc2V0TWltZVR5cGU6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisKKyAgICAgICAgICAgIHRo
aXMubWltZVR5cGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAg
IH0sCisKKyAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKwor
ICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyID0gdmFsdWU7CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKworICAgICAgICB9CisKKyAgICB9ICk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0
aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqCisgICAgICogQWJzdHJhY3Qg
QmFzZSBjbGFzcyB0byBibG9jayBiYXNlZCB0ZXh0dXJlcyBsb2FkZXIgKGRkcywgcHZyLCAuLi4p
CisgICAgICovCisKKyAgICBmdW5jdGlvbiBDb21wcmVzc2VkVGV4dHVyZUxvYWRlciggbWFuYWdl
ciApIHsKKworICAgICAgICB0aGlzLm1hbmFnZXIgPSAoIG1hbmFnZXIgIT09IHVuZGVmaW5lZCAp
ID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjsKKworICAgICAgICAvLyBvdmVycmlk
ZSBpbiBzdWIgY2xhc3NlcworICAgICAgICB0aGlzLl9wYXJzZXIgPSBudWxsOworCisgICAgfQor
CisgICAgT2JqZWN0LmFzc2lnbiggQ29tcHJlc3NlZFRleHR1cmVMb2FkZXIucHJvdG90eXBlLCB7
CisKKyAgICAgICAgbG9hZDogZnVuY3Rpb24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25F
cnJvciApIHsKKworICAgICAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKKworICAgICAgICAgICAg
dmFyIGltYWdlcyA9IFtdOworCisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBDb21wcmVz
c2VkVGV4dHVyZSgpOworICAgICAgICAgICAgdGV4dHVyZS5pbWFnZSA9IGltYWdlczsKKworICAg
ICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKKyAg
ICAgICAgICAgIGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTsKKyAgICAgICAgICAgIGxvYWRl
ci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1ZmZlcicgKTsKKworICAgICAgICAgICAgZnVuY3Rp
b24gbG9hZFRleHR1cmUoIGkgKSB7CisKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZCggdXJs
WyBpIF0sIGZ1bmN0aW9uICggYnVmZmVyICkgeworCisgICAgICAgICAgICAgICAgICAgIHZhciB0
ZXhEYXRhcyA9IHNjb3BlLl9wYXJzZXIoIGJ1ZmZlciwgdHJ1ZSApOworCisgICAgICAgICAgICAg
ICAgICAgIGltYWdlc1sgaSBdID0geworICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRl
eERhdGFzLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0ZXhEYXRhcy5o
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHRleERhdGFzLmZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcHM6IHRleERhdGFzLm1pcG1hcHMKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBsb2FkZWQgKz0gMTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIGxvYWRlZCA9PT0gNiApIHsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0ZXhEYXRhcy5taXBtYXBDb3VudCA9PT0gMSApCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7CisK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywg
b25FcnJvciApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggQXJyYXkuaXNB
cnJheSggdXJsICkgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgbG9hZGVkID0gMDsKKworICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSB1cmwubGVuZ3RoOyBpIDwgaWw7ICsr
IGkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgbG9hZFRleHR1cmUoIGkgKTsKKworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIC8v
IGNvbXByZXNzZWQgY3ViZW1hcCB0ZXh0dXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBERFMgZmlsZQor
CisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCBidWZmZXIgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRleERhdGFzID0gc2NvcGUuX3BhcnNlciggYnVm
ZmVyLCB0cnVlICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXhEYXRhcy5pc0N1YmVt
YXAgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWNlcyA9IHRleERhdGFzLm1p
cG1hcHMubGVuZ3RoIC8gdGV4RGF0YXMubWlwbWFwQ291bnQ7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBmID0gMDsgZiA8IGZhY2VzOyBmICsrICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBmIF0gPSB7IG1pcG1hcHM6IFtdIH07CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB0ZXhEYXRhcy5taXBt
YXBDb3VudDsgaSArKyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFn
ZXNbIGYgXS5taXBtYXBzLnB1c2goIHRleERhdGFzLm1pcG1hcHNbIGYgKiB0ZXhEYXRhcy5taXBt
YXBDb3VudCArIGkgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNb
IGYgXS5mb3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGltYWdlc1sgZiBdLndpZHRoID0gdGV4RGF0YXMud2lkdGg7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltYWdlc1sgZiBdLmhlaWdodCA9IHRleERhdGFzLmhlaWdodDsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhcy53aWR0aDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gdGV4RGF0YXMuaGVpZ2h0OworICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5taXBtYXBzID0gdGV4RGF0YXMubWlwbWFwczsK
KworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXhE
YXRhcy5taXBtYXBDb3VudCA9PT0gMSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CisKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0ID0gdGV4RGF0YXMuZm9ybWF0Owor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggdGV4dHVyZSApOworCisgICAgICAg
ICAgICAgICAgfSwgb25Qcm9ncmVzcywgb25FcnJvciApOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlOworCisgICAgICAgIH0sCisKKyAgICAgICAgc2V0UGF0
aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKworICAgICAgICAgICAgdGhpcy5wYXRoID0gdmFsdWU7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9CisKKyAgICB9ICk7CisKKyAg
ICAvKioKKyAgICAgKiBAYXV0aG9yIE5pa29zIE0uIC8gaHR0cHM6Ly9naXRodWIuY29tL2ZvbzEy
My8KKyAgICAgKgorICAgICAqIEFic3RyYWN0IEJhc2UgY2xhc3MgdG8gbG9hZCBnZW5lcmljIGJp
bmFyeSB0ZXh0dXJlcyBmb3JtYXRzIChyZ2JlLCBoZHIsIC4uLikKKyAgICAgKi8KKworICAgIGZ1
bmN0aW9uIERhdGFUZXh0dXJlTG9hZGVyKCBtYW5hZ2VyICkgeworCisgICAgICAgIHRoaXMubWFu
YWdlciA9ICggbWFuYWdlciAhPT0gdW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRp
bmdNYW5hZ2VyOworCisgICAgICAgIC8vIG92ZXJyaWRlIGluIHN1YiBjbGFzc2VzCisgICAgICAg
IHRoaXMuX3BhcnNlciA9IG51bGw7CisKKyAgICB9CisKKyAgICBPYmplY3QuYXNzaWduKCBEYXRh
VGV4dHVyZUxvYWRlci5wcm90b3R5cGUsIHsKKworICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVy
bCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgeworCisgICAgICAgICAgICB2YXIgc2Nv
cGUgPSB0aGlzOworCisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZSgp
OworCisgICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdl
ciApOworICAgICAgICAgICAgbG9hZGVyLnNldFJlc3BvbnNlVHlwZSggJ2FycmF5YnVmZmVyJyAp
OworCisgICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIGJ1ZmZlciApIHsK
KworICAgICAgICAgICAgICAgIHZhciB0ZXhEYXRhID0gc2NvcGUuX3BhcnNlciggYnVmZmVyICk7
CisKKyAgICAgICAgICAgICAgICBpZiAoICEgdGV4RGF0YSApIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIGlmICggdW5kZWZpbmVkICE9PSB0ZXhEYXRhLmltYWdlICkgeworCisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUuaW1hZ2UgPSB0ZXhEYXRhLmltYWdlOworCisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggdW5kZWZpbmVkICE9PSB0ZXhEYXRhLmRhdGEgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS5pbWFnZS53aWR0aCA9IHRleERhdGEud2lkdGg7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gdGV4RGF0YS5oZWlnaHQ7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUuaW1hZ2UuZGF0YSA9IHRleERhdGEuZGF0YTsKKworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUud3JhcFMgPSB1bmRlZmlu
ZWQgIT09IHRleERhdGEud3JhcFMgPyB0ZXhEYXRhLndyYXBTIDogQ2xhbXBUb0VkZ2VXcmFwcGlu
ZzsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLndyYXBUID0gdW5kZWZpbmVkICE9PSB0ZXhEYXRh
LndyYXBUID8gdGV4RGF0YS53cmFwVCA6IENsYW1wVG9FZGdlV3JhcHBpbmc7CisKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlLm1hZ0ZpbHRlciA9IHVuZGVmaW5lZCAhPT0gdGV4RGF0YS5tYWdGaWx0
ZXIgPyB0ZXhEYXRhLm1hZ0ZpbHRlciA6IExpbmVhckZpbHRlcjsKKyAgICAgICAgICAgICAgICB0
ZXh0dXJlLm1pbkZpbHRlciA9IHVuZGVmaW5lZCAhPT0gdGV4RGF0YS5taW5GaWx0ZXIgPyB0ZXhE
YXRhLm1pbkZpbHRlciA6IExpbmVhck1pcE1hcExpbmVhckZpbHRlcjsKKworICAgICAgICAgICAg
ICAgIHRleHR1cmUuYW5pc290cm9weSA9IHVuZGVmaW5lZCAhPT0gdGV4RGF0YS5hbmlzb3Ryb3B5
ID8gdGV4RGF0YS5hbmlzb3Ryb3B5IDogMTsKKworICAgICAgICAgICAgICAgIGlmICggdW5kZWZp
bmVkICE9PSB0ZXhEYXRhLmZvcm1hdCApIHsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LmZvcm1hdCA9IHRleERhdGEuZm9ybWF0OworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICggdW5kZWZpbmVkICE9PSB0ZXhEYXRhLnR5cGUgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS50eXBlID0gdGV4RGF0YS50eXBlOworCisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKCB1bmRlZmluZWQgIT09IHRleERhdGEubWlwbWFwcyAp
IHsKKworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLm1pcG1hcHMgPSB0ZXhEYXRhLm1pcG1h
cHM7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIDEgPT09IHRl
eERhdGEubWlwbWFwQ291bnQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5taW5G
aWx0ZXIgPSBMaW5lYXJGaWx0ZXI7CisKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmICgg
b25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlLCB0ZXhEYXRhICk7CisKKyAgICAgICAgICAgIH0sIG9u
UHJvZ3Jlc3MsIG9uRXJyb3IgKTsKKworCisgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKwor
ICAgICAgICB9CisKKyAgICB9ICk7CisKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLworCisKKyAgICBmdW5jdGlvbiBJbWFnZUxvYWRl
ciggbWFuYWdlciApIHsKKworICAgICAgICB0aGlzLm1hbmFnZXIgPSAoIG1hbmFnZXIgIT09IHVu
ZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjsKKworICAgIH0KKwor
ICAgIE9iamVjdC5hc3NpZ24oIEltYWdlTG9hZGVyLnByb3RvdHlwZSwgeworCisgICAgICAgIGNy
b3NzT3JpZ2luOiAnYW5vbnltb3VzJywKKworICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwg
b25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgeworCisgICAgICAgICAgICBpZiAoIHVybCA9
PT0gdW5kZWZpbmVkICkgdXJsID0gJyc7CisKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXRoICE9
PSB1bmRlZmluZWQgKSB1cmwgPSB0aGlzLnBhdGggKyB1cmw7CisKKyAgICAgICAgICAgIHVybCA9
IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwgKTsKKworICAgICAgICAgICAgdmFyIHNjb3Bl
ID0gdGhpczsKKworICAgICAgICAgICAgdmFyIGNhY2hlZCA9IENhY2hlLmdldCggdXJsICk7CisK
KyAgICAgICAgICAgIGlmICggY2FjaGVkICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAg
ICAgICBzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCggdXJsICk7CisKKyAgICAgICAgICAgICAgICBz
ZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBvbkxv
YWQgKSBvbkxvYWQoIGNhY2hlZCApOworCisgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFn
ZXIuaXRlbUVuZCggdXJsICk7CisKKyAgICAgICAgICAgICAgICB9LCAwICk7CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2FjaGVkOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZh
ciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyggJ2h0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwnLCAnaW1nJyApOworCisgICAgICAgICAgICBmdW5jdGlvbiBvbkltYWdlTG9hZCgp
IHsKKworICAgICAgICAgICAgICAgIGltYWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdsb2FkJywg
b25JbWFnZUxvYWQsIGZhbHNlICk7CisgICAgICAgICAgICAgICAgaW1hZ2UucmVtb3ZlRXZlbnRM
aXN0ZW5lciggJ2Vycm9yJywgb25JbWFnZUVycm9yLCBmYWxzZSApOworCisgICAgICAgICAgICAg
ICAgQ2FjaGUuYWRkKCB1cmwsIHRoaXMgKTsKKworICAgICAgICAgICAgICAgIGlmICggb25Mb2Fk
ICkgb25Mb2FkKCB0aGlzICk7CisKKyAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1F
bmQoIHVybCApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIG9uSW1h
Z2VFcnJvciggZXZlbnQgKSB7CisKKyAgICAgICAgICAgICAgICBpbWFnZS5yZW1vdmVFdmVudExp
c3RlbmVyKCAnbG9hZCcsIG9uSW1hZ2VMb2FkLCBmYWxzZSApOworICAgICAgICAgICAgICAgIGlt
YWdlLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlcnJvcicsIG9uSW1hZ2VFcnJvciwgZmFsc2UgKTsK
KworICAgICAgICAgICAgICAgIGlmICggb25FcnJvciApIG9uRXJyb3IoIGV2ZW50ICk7CisKKyAg
ICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOworICAgICAgICAgICAg
ICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTsKKworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpbWFnZS5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIG9uSW1hZ2VMb2FkLCBm
YWxzZSApOworICAgICAgICAgICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2Vycm9yJywgb25J
bWFnZUVycm9yLCBmYWxzZSApOworCisgICAgICAgICAgICBpZiAoIHVybC5zdWJzdHIoIDAsIDUg
KSAhPT0gJ2RhdGE6JyApIHsKKworICAgICAgICAgICAgICAgIGlmICggdGhpcy5jcm9zc09yaWdp
biAhPT0gdW5kZWZpbmVkICkgaW1hZ2UuY3Jvc3NPcmlnaW4gPSB0aGlzLmNyb3NzT3JpZ2luOwog
Ci0gICAgICAgIHRoaXMud2lyZWZyYW1lID0gZmFsc2U7Ci0gICAgICAgIHRoaXMud2lyZWZyYW1l
TGluZXdpZHRoID0gMTsKLSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lY2FwID0gJ3JvdW5kJzsK
LSAgICAgICAgdGhpcy53aXJlZnJhbWVMaW5lam9pbiA9ICdyb3VuZCc7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgdGhpcy5za2lubmluZyA9IGZhbHNlOwotICAgICAgICB0aGlzLm1vcnBoVGFy
Z2V0cyA9IGZhbHNlOwotICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IGZhbHNlOworICAgICAg
ICAgICAgc2NvcGUubWFuYWdlci5pdGVtU3RhcnQoIHVybCApOwogCi0gICAgICAgIHRoaXMuc2V0
VmFsdWVzKCBwYXJhbWV0ZXJzICk7CisgICAgICAgICAgICBpbWFnZS5zcmMgPSB1cmw7CisKKyAg
ICAgICAgICAgIHJldHVybiBpbWFnZTsKKworICAgICAgICB9LAorCisgICAgICAgIHNldENyb3Nz
T3JpZ2luOiBmdW5jdGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAgICB0aGlzLmNyb3NzT3Jp
Z2luID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisg
ICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisKKyAgICAgICAgICAgIHRoaXMu
cGF0aCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgfQorCisg
ICAgfSApOworCisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29i
LmNvbS8KKyAgICAgKi8KKworCisgICAgZnVuY3Rpb24gQ3ViZVRleHR1cmVMb2FkZXIoIG1hbmFn
ZXIgKSB7CisKKyAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmluZWQg
KSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CiAKICAgICB9CiAKLSAgICBNZXNo
TGFtYmVydE1hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1hdGVyaWFsLnByb3Rv
dHlwZSApOwotICAgIE1lc2hMYW1iZXJ0TWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
TWVzaExhbWJlcnRNYXRlcmlhbDsKKyAgICBPYmplY3QuYXNzaWduKCBDdWJlVGV4dHVyZUxvYWRl
ci5wcm90b3R5cGUsIHsKIAotICAgIE1lc2hMYW1iZXJ0TWF0ZXJpYWwucHJvdG90eXBlLmlzTWVz
aExhbWJlcnRNYXRlcmlhbCA9IHRydWU7CisgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3Vz
JywKIAotICAgIE1lc2hMYW1iZXJ0TWF0ZXJpYWwucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAo
IHNvdXJjZSApIHsKKyAgICAgICAgbG9hZDogZnVuY3Rpb24gKCB1cmxzLCBvbkxvYWQsIG9uUHJv
Z3Jlc3MsIG9uRXJyb3IgKSB7CiAKLSAgICAgICAgTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkuY2Fs
bCggdGhpcywgc291cmNlICk7CisgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBDdWJlVGV4
dHVyZSgpOwogCi0gICAgICAgIHRoaXMuY29sb3IuY29weSggc291cmNlLmNvbG9yICk7CisgICAg
ICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKKyAg
ICAgICAgICAgIGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApOworICAg
ICAgICAgICAgbG9hZGVyLnNldFBhdGgoIHRoaXMucGF0aCApOwogCi0gICAgICAgIHRoaXMubWFw
ID0gc291cmNlLm1hcDsKKyAgICAgICAgICAgIHZhciBsb2FkZWQgPSAwOwogCi0gICAgICAgIHRo
aXMubGlnaHRNYXAgPSBzb3VyY2UubGlnaHRNYXA7Ci0gICAgICAgIHRoaXMubGlnaHRNYXBJbnRl
bnNpdHkgPSBzb3VyY2UubGlnaHRNYXBJbnRlbnNpdHk7CisgICAgICAgICAgICBmdW5jdGlvbiBs
b2FkVGV4dHVyZSggaSApIHsKIAotICAgICAgICB0aGlzLmFvTWFwID0gc291cmNlLmFvTWFwOwot
ICAgICAgICB0aGlzLmFvTWFwSW50ZW5zaXR5ID0gc291cmNlLmFvTWFwSW50ZW5zaXR5OworICAg
ICAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmxzWyBpIF0sIGZ1bmN0aW9uICggaW1hZ2UgKSB7
CiAKLSAgICAgICAgdGhpcy5lbWlzc2l2ZS5jb3B5KCBzb3VyY2UuZW1pc3NpdmUgKTsKLSAgICAg
ICAgdGhpcy5lbWlzc2l2ZU1hcCA9IHNvdXJjZS5lbWlzc2l2ZU1hcDsKLSAgICAgICAgdGhpcy5l
bWlzc2l2ZUludGVuc2l0eSA9IHNvdXJjZS5lbWlzc2l2ZUludGVuc2l0eTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS5pbWFnZXNbIGkgXSA9IGltYWdlOwogCi0gICAgICAgIHRoaXMuc3Bl
Y3VsYXJNYXAgPSBzb3VyY2Uuc3BlY3VsYXJNYXA7CisgICAgICAgICAgICAgICAgICAgIGxvYWRl
ZCArKzsKIAotICAgICAgICB0aGlzLmFscGhhTWFwID0gc291cmNlLmFscGhhTWFwOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIGxvYWRlZCA9PT0gNiApIHsKIAotICAgICAgICB0aGlzLmVudk1h
cCA9IHNvdXJjZS5lbnZNYXA7Ci0gICAgICAgIHRoaXMuY29tYmluZSA9IHNvdXJjZS5jb21iaW5l
OwotICAgICAgICB0aGlzLnJlZmxlY3Rpdml0eSA9IHNvdXJjZS5yZWZsZWN0aXZpdHk7Ci0gICAg
ICAgIHRoaXMucmVmcmFjdGlvblJhdGlvID0gc291cmNlLnJlZnJhY3Rpb25SYXRpbzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOwogCi0gICAgICAg
IHRoaXMud2lyZWZyYW1lID0gc291cmNlLndpcmVmcmFtZTsKLSAgICAgICAgdGhpcy53aXJlZnJh
bWVMaW5ld2lkdGggPSBzb3VyY2Uud2lyZWZyYW1lTGluZXdpZHRoOwotICAgICAgICB0aGlzLndp
cmVmcmFtZUxpbmVjYXAgPSBzb3VyY2Uud2lyZWZyYW1lTGluZWNhcDsKLSAgICAgICAgdGhpcy53
aXJlZnJhbWVMaW5lam9pbiA9IHNvdXJjZS53aXJlZnJhbWVMaW5lam9pbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7CiAKLSAgICAgICAg
dGhpcy5za2lubmluZyA9IHNvdXJjZS5za2lubmluZzsKLSAgICAgICAgdGhpcy5tb3JwaFRhcmdl
dHMgPSBzb3VyY2UubW9ycGhUYXJnZXRzOwotICAgICAgICB0aGlzLm1vcnBoTm9ybWFscyA9IHNv
dXJjZS5tb3JwaE5vcm1hbHM7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIG9uRXJyb3IgKTsKIAotICAg
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHVy
bHMubGVuZ3RoOyArKyBpICkgeworCisgICAgICAgICAgICAgICAgbG9hZFRleHR1cmUoIGkgKTsK
KworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKworICAgICAg
ICB9LAorCisgICAgICAgIHNldENyb3NzT3JpZ2luOiBmdW5jdGlvbiAoIHZhbHVlICkgeworCisg
ICAgICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICggdmFsdWUg
KSB7CisKKyAgICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisKKyAgICAgICAgfQorCisgICAgfSApOwogCiAgICAgLyoqCi0gICAgICogQGF1dGhv
ciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNvbS8KKyAgICAgKiBAYXV0aG9yIG1y
ZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLworCisKKyAgICBmdW5jdGlvbiBUZXh0
dXJlTG9hZGVyKCBtYW5hZ2VyICkgeworCisgICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdl
ciAhPT0gdW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOworCisg
ICAgfQorCisgICAgT2JqZWN0LmFzc2lnbiggVGV4dHVyZUxvYWRlci5wcm90b3R5cGUsIHsKKwor
ICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsCisKKyAgICAgICAgbG9hZDogZnVuY3Rp
b24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKKworICAgICAgICAgICAg
dmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZSgpOworCisgICAgICAgICAgICB2YXIgbG9hZGVyID0g
bmV3IEltYWdlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKKyAgICAgICAgICAgIGxvYWRlci5zZXRD
cm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApOworICAgICAgICAgICAgbG9hZGVyLnNldFBh
dGgoIHRoaXMucGF0aCApOworCisgICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlv
biAoIGltYWdlICkgeworCisgICAgICAgICAgICAgICAgdGV4dHVyZS5pbWFnZSA9IGltYWdlOwor
CisgICAgICAgICAgICAgICAgLy8gSlBFR3MgY2FuJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBz
byBtZW1vcnkgY2FuIGJlIHNhdmVkIGJ5IHN0b3JpbmcgdGhlbSBhcyBSR0IuCisgICAgICAgICAg
ICAgICAgdmFyIGlzSlBFRyA9IHVybC5zZWFyY2goIC9cLihqcGd8anBlZykkLyApID4gMCB8fCB1
cmwuc2VhcmNoKCAvXmRhdGFcOmltYWdlXC9qcGVnLyApID09PSAwOworCisgICAgICAgICAgICAg
ICAgdGV4dHVyZS5mb3JtYXQgPSBpc0pQRUcgPyBSR0JGb3JtYXQgOiBSR0JBRm9ybWF0OworICAg
ICAgICAgICAgICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgaWYgKCBvbkxvYWQgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgICAgICBv
bkxvYWQoIHRleHR1cmUgKTsKKworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSwg
b25Qcm9ncmVzcywgb25FcnJvciApOworCisgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKwor
ICAgICAgICB9LAorCisgICAgICAgIHNldENyb3NzT3JpZ2luOiBmdW5jdGlvbiAoIHZhbHVlICkg
eworCisgICAgICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdmFsdWU7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICgg
dmFsdWUgKSB7CisKKyAgICAgICAgICAgIHRoaXMucGF0aCA9IHZhbHVlOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisgICAgLyoqCisgICAgICog
QGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZworICAgICAq
IEV4dGVuc2libGUgY3VydmUgb2JqZWN0CiAgICAgICoKLSAgICAgKiBwYXJhbWV0ZXJzID0gewot
ICAgICAqICBjb2xvcjogPGhleD4sCi0gICAgICogIG9wYWNpdHk6IDxmbG9hdD4sCisgICAgICog
U29tZSBjb21tb24gb2YgY3VydmUgbWV0aG9kczoKKyAgICAgKiAuZ2V0UG9pbnQoIHQsIG9wdGlv
bmFsVGFyZ2V0ICksIC5nZXRUYW5nZW50KCB0ICkKKyAgICAgKiAuZ2V0UG9pbnRBdCggdSwgb3B0
aW9uYWxUYXJnZXQgKSwgLmdldFRhbmdlbnRBdCggdSApCisgICAgICogLmdldFBvaW50cygpLCAu
Z2V0U3BhY2VkUG9pbnRzKCkKKyAgICAgKiAuZ2V0TGVuZ3RoKCkKKyAgICAgKiAudXBkYXRlQXJj
TGVuZ3RocygpCiAgICAgICoKLSAgICAgKiAgbGluZXdpZHRoOiA8ZmxvYXQ+LAorICAgICAqIFRo
aXMgZm9sbG93aW5nIGN1cnZlcyBpbmhlcml0IGZyb20gVEhSRUUuQ3VydmU6CiAgICAgICoKLSAg
ICAgKiAgc2NhbGU6IDxmbG9hdD4sCi0gICAgICogIGRhc2hTaXplOiA8ZmxvYXQ+LAotICAgICAq
ICBnYXBTaXplOiA8ZmxvYXQ+Ci0gICAgICogfQotICAgICAqLworICAgICAqIC0tIDJEIGN1cnZl
cyAtLQorICAgICAqIFRIUkVFLkFyY0N1cnZlCisgICAgICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2
ZQorICAgICAqIFRIUkVFLkVsbGlwc2VDdXJ2ZQorICAgICAqIFRIUkVFLkxpbmVDdXJ2ZQorICAg
ICAqIFRIUkVFLlF1YWRyYXRpY0JlemllckN1cnZlCisgICAgICogVEhSRUUuU3BsaW5lQ3VydmUK
KyAgICAgKgorICAgICAqIC0tIDNEIGN1cnZlcyAtLQorICAgICAqIFRIUkVFLkNhdG11bGxSb21D
dXJ2ZTMKKyAgICAgKiBUSFJFRS5DdWJpY0JlemllckN1cnZlMworICAgICAqIFRIUkVFLkxpbmVD
dXJ2ZTMKKyAgICAgKiBUSFJFRS5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMKKyAgICAgKgorICAgICAq
IEEgc2VyaWVzIG9mIGN1cnZlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBUSFJFRS5DdXJ2ZVBh
dGguCisgICAgICoKKyAgICAgKiovCiAKLSAgICBmdW5jdGlvbiBMaW5lRGFzaGVkTWF0ZXJpYWwo
IHBhcmFtZXRlcnMgKSB7CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogIEFic3RyYWN0IEN1cnZlIGJhc2Ug
Y2xhc3MKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKLSAgICAgICAgTWF0ZXJpYWwuY2FsbCggdGhpcyApOworICAg
IGZ1bmN0aW9uIEN1cnZlKCkgeworCisgICAgICAgIHRoaXMudHlwZSA9ICdDdXJ2ZSc7CisKKyAg
ICAgICAgdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMgPSAyMDA7CisKKyAgICB9CisKKyAgICBPYmpl
Y3QuYXNzaWduKCBDdXJ2ZS5wcm90b3R5cGUsIHsKKworICAgICAgICAvLyBWaXJ0dWFsIGJhc2Ug
Y2xhc3MgbWV0aG9kIHRvIG92ZXJ3cml0ZSBhbmQgaW1wbGVtZW50IGluIHN1YmNsYXNzZXMKKyAg
ICAgICAgLy8gIC0gdCBbMCAuLiAxXQorCisgICAgICAgIGdldFBvaW50OiBmdW5jdGlvbiAoIC8q
IHQsIG9wdGlvbmFsVGFyZ2V0ICovICkgeworCisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdU
SFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLicgKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gR2V0IHBvaW50IGF0IHJl
bGF0aXZlIHBvc2l0aW9uIGluIGN1cnZlIGFjY29yZGluZyB0byBhcmMgbGVuZ3RoCisgICAgICAg
IC8vIC0gdSBbMCAuLiAxXQorCisgICAgICAgIGdldFBvaW50QXQ6IGZ1bmN0aW9uICggdSwgb3B0
aW9uYWxUYXJnZXQgKSB7CisKKyAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGlu
ZyggdSApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQoIHQsIG9wdGlvbmFsVGFy
Z2V0ICk7CisKKyAgICAgICAgfSwKKworICAgICAgICAvLyBHZXQgc2VxdWVuY2Ugb2YgcG9pbnRz
IHVzaW5nIGdldFBvaW50KCB0ICkKKworICAgICAgICBnZXRQb2ludHM6IGZ1bmN0aW9uICggZGl2
aXNpb25zICkgeworCisgICAgICAgICAgICBpZiAoIGRpdmlzaW9ucyA9PT0gdW5kZWZpbmVkICkg
ZGl2aXNpb25zID0gNTsKKworICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtdOworCisgICAgICAg
ICAgICBmb3IgKCB2YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkICsrICkgeworCisgICAgICAg
ICAgICAgICAgcG9pbnRzLnB1c2goIHRoaXMuZ2V0UG9pbnQoIGQgLyBkaXZpc2lvbnMgKSApOwor
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwb2ludHM7CisKKyAgICAgICAg
fSwKKworICAgICAgICAvLyBHZXQgc2VxdWVuY2Ugb2YgcG9pbnRzIHVzaW5nIGdldFBvaW50QXQo
IHUgKQorCisgICAgICAgIGdldFNwYWNlZFBvaW50czogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7
CisKKyAgICAgICAgICAgIGlmICggZGl2aXNpb25zID09PSB1bmRlZmluZWQgKSBkaXZpc2lvbnMg
PSA1OworCisgICAgICAgICAgICB2YXIgcG9pbnRzID0gW107CisKKyAgICAgICAgICAgIGZvciAo
IHZhciBkID0gMDsgZCA8PSBkaXZpc2lvbnM7IGQgKysgKSB7CisKKyAgICAgICAgICAgICAgICBw
b2ludHMucHVzaCggdGhpcy5nZXRQb2ludEF0KCBkIC8gZGl2aXNpb25zICkgKTsKKworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcG9pbnRzOworCisgICAgICAgIH0sCisKKyAg
ICAgICAgLy8gR2V0IHRvdGFsIGN1cnZlIGFyYyBsZW5ndGgKKworICAgICAgICBnZXRMZW5ndGg6
IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgdmFyIGxlbmd0aHMgPSB0aGlzLmdldExlbmd0
aHMoKTsKKyAgICAgICAgICAgIHJldHVybiBsZW5ndGhzWyBsZW5ndGhzLmxlbmd0aCAtIDEgXTsK
KworICAgICAgICB9LAorCisgICAgICAgIC8vIEdldCBsaXN0IG9mIGN1bXVsYXRpdmUgc2VnbWVu
dCBsZW5ndGhzCisKKyAgICAgICAgZ2V0TGVuZ3RoczogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7
CisKKyAgICAgICAgICAgIGlmICggZGl2aXNpb25zID09PSB1bmRlZmluZWQgKSBkaXZpc2lvbnMg
PSB0aGlzLmFyY0xlbmd0aERpdmlzaW9uczsKKworICAgICAgICAgICAgaWYgKCB0aGlzLmNhY2hl
QXJjTGVuZ3RocyAmJgorICAgICAgICAgICAgICAgICggdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVu
Z3RoID09PSBkaXZpc2lvbnMgKyAxICkgJiYKKyAgICAgICAgICAgICAgICAhIHRoaXMubmVlZHNV
cGRhdGUgKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7
CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IGZhbHNl
OworCisgICAgICAgICAgICB2YXIgY2FjaGUgPSBbXTsKKyAgICAgICAgICAgIHZhciBjdXJyZW50
LCBsYXN0ID0gdGhpcy5nZXRQb2ludCggMCApOworICAgICAgICAgICAgdmFyIHAsIHN1bSA9IDA7
CisKKyAgICAgICAgICAgIGNhY2hlLnB1c2goIDAgKTsKKworICAgICAgICAgICAgZm9yICggcCA9
IDE7IHAgPD0gZGl2aXNpb25zOyBwICsrICkgeworCisgICAgICAgICAgICAgICAgY3VycmVudCA9
IHRoaXMuZ2V0UG9pbnQoIHAgLyBkaXZpc2lvbnMgKTsKKyAgICAgICAgICAgICAgICBzdW0gKz0g
Y3VycmVudC5kaXN0YW5jZVRvKCBsYXN0ICk7CisgICAgICAgICAgICAgICAgY2FjaGUucHVzaCgg
c3VtICk7CisgICAgICAgICAgICAgICAgbGFzdCA9IGN1cnJlbnQ7CisKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdGhpcy5jYWNoZUFyY0xlbmd0aHMgPSBjYWNoZTsKKworICAgICAgICAg
ICAgcmV0dXJuIGNhY2hlOyAvLyB7IHN1bXM6IGNhY2hlLCBzdW06IHN1bSB9OyBTdW0gaXMgaW4g
dGhlIGxhc3QgZWxlbWVudC4KKworICAgICAgICB9LAorCisgICAgICAgIHVwZGF0ZUFyY0xlbmd0
aHM6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgdGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7
CisgICAgICAgICAgICB0aGlzLmdldExlbmd0aHMoKTsKKworICAgICAgICB9LAorCisgICAgICAg
IC8vIEdpdmVuIHUgKCAwIC4uIDEgKSwgZ2V0IGEgdCB0byBmaW5kIHAuIFRoaXMgZ2l2ZXMgeW91
IHBvaW50cyB3aGljaCBhcmUgZXF1aWRpc3RhbnQKKworICAgICAgICBnZXRVdG9UbWFwcGluZzog
ZnVuY3Rpb24gKCB1LCBkaXN0YW5jZSApIHsKKworICAgICAgICAgICAgdmFyIGFyY0xlbmd0aHMg
PSB0aGlzLmdldExlbmd0aHMoKTsKKworICAgICAgICAgICAgdmFyIGkgPSAwLCBpbCA9IGFyY0xl
bmd0aHMubGVuZ3RoOworCisgICAgICAgICAgICB2YXIgdGFyZ2V0QXJjTGVuZ3RoOyAvLyBUaGUg
dGFyZ2V0ZWQgdSBkaXN0YW5jZSB2YWx1ZSB0byBnZXQKKworICAgICAgICAgICAgaWYgKCBkaXN0
YW5jZSApIHsKKworICAgICAgICAgICAgICAgIHRhcmdldEFyY0xlbmd0aCA9IGRpc3RhbmNlOwor
CisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgdGFyZ2V0QXJjTGVuZ3Ro
ID0gdSAqIGFyY0xlbmd0aHNbIGlsIC0gMSBdOworCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBpbmRleCB3aXRoIGxhcmdlc3QgdmFsdWUgc21h
bGxlciB0aGFuIHRhcmdldCB1IGRpc3RhbmNlCisKKyAgICAgICAgICAgIHZhciBsb3cgPSAwLCBo
aWdoID0gaWwgLSAxLCBjb21wYXJpc29uOworCisgICAgICAgICAgICB3aGlsZSAoIGxvdyA8PSBo
aWdoICkgeworCisgICAgICAgICAgICAgICAgaSA9IE1hdGguZmxvb3IoIGxvdyArICggaGlnaCAt
IGxvdyApIC8gMiApOyAvLyBsZXNzIGxpa2VseSB0byBvdmVyZmxvdywgdGhvdWdoIHByb2JhYmx5
IG5vdCBpc3N1ZSBoZXJlLCBKUyBkb2Vzbid0IHJlYWxseSBoYXZlIGludGVnZXJzLCBhbGwgbnVt
YmVycyBhcmUgZmxvYXRzCisKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uID0gYXJjTGVuZ3Ro
c1sgaSBdIC0gdGFyZ2V0QXJjTGVuZ3RoOworCisgICAgICAgICAgICAgICAgaWYgKCBjb21wYXJp
c29uIDwgMCApIHsKKworICAgICAgICAgICAgICAgICAgICBsb3cgPSBpICsgMTsKKworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbXBhcmlzb24gPiAwICkgeworCisgICAgICAgICAgICAg
ICAgICAgIGhpZ2ggPSBpIC0gMTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgaGlnaCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIERPTkUKKworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpID0gaGlnaDsKKworICAgICAgICAgICAgaWYgKCBhcmNM
ZW5ndGhzWyBpIF0gPT09IHRhcmdldEFyY0xlbmd0aCApIHsKKworICAgICAgICAgICAgICAgIHJl
dHVybiBpIC8gKCBpbCAtIDEgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB3
ZSBjb3VsZCBnZXQgZmluZXIgZ3JhaW4gYXQgbGVuZ3Rocywgb3IgdXNlIHNpbXBsZSBpbnRlcnBv
bGF0aW9uIGJldHdlZW4gdHdvIHBvaW50cworCisgICAgICAgICAgICB2YXIgbGVuZ3RoQmVmb3Jl
ID0gYXJjTGVuZ3Roc1sgaSBdOworICAgICAgICAgICAgdmFyIGxlbmd0aEFmdGVyID0gYXJjTGVu
Z3Roc1sgaSArIDEgXTsKKworICAgICAgICAgICAgdmFyIHNlZ21lbnRMZW5ndGggPSBsZW5ndGhB
ZnRlciAtIGxlbmd0aEJlZm9yZTsKKworICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdoZXJlIHdl
IGFyZSBiZXR3ZWVuIHRoZSAnYmVmb3JlJyBhbmQgJ2FmdGVyJyBwb2ludHMKKworICAgICAgICAg
ICAgdmFyIHNlZ21lbnRGcmFjdGlvbiA9ICggdGFyZ2V0QXJjTGVuZ3RoIC0gbGVuZ3RoQmVmb3Jl
ICkgLyBzZWdtZW50TGVuZ3RoOworCisgICAgICAgICAgICAvLyBhZGQgdGhhdCBmcmFjdGlvbmFs
IGFtb3VudCB0byB0CisKKyAgICAgICAgICAgIHZhciB0ID0gKCBpICsgc2VnbWVudEZyYWN0aW9u
ICkgLyAoIGlsIC0gMSApOworCisgICAgICAgICAgICByZXR1cm4gdDsKKworICAgICAgICB9LAor
CisgICAgICAgIC8vIFJldHVybnMgYSB1bml0IHZlY3RvciB0YW5nZW50IGF0IHQKKyAgICAgICAg
Ly8gSW4gY2FzZSBhbnkgc3ViIGN1cnZlIGRvZXMgbm90IGltcGxlbWVudCBpdHMgdGFuZ2VudCBk
ZXJpdmF0aW9uLAorICAgICAgICAvLyAyIHBvaW50cyBhIHNtYWxsIGRlbHRhIGFwYXJ0IHdpbGwg
YmUgdXNlZCB0byBmaW5kIGl0cyBncmFkaWVudAorICAgICAgICAvLyB3aGljaCBzZWVtcyB0byBn
aXZlIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uCisKKyAgICAgICAgZ2V0VGFuZ2VudDogZnVu
Y3Rpb24gKCB0ICkgeworCisgICAgICAgICAgICB2YXIgZGVsdGEgPSAwLjAwMDE7CisgICAgICAg
ICAgICB2YXIgdDEgPSB0IC0gZGVsdGE7CisgICAgICAgICAgICB2YXIgdDIgPSB0ICsgZGVsdGE7
CisKKyAgICAgICAgICAgIC8vIENhcHBpbmcgaW4gY2FzZSBvZiBkYW5nZXIKKworICAgICAgICAg
ICAgaWYgKCB0MSA8IDAgKSB0MSA9IDA7CisgICAgICAgICAgICBpZiAoIHQyID4gMSApIHQyID0g
MTsKKworICAgICAgICAgICAgdmFyIHB0MSA9IHRoaXMuZ2V0UG9pbnQoIHQxICk7CisgICAgICAg
ICAgICB2YXIgcHQyID0gdGhpcy5nZXRQb2ludCggdDIgKTsKKworICAgICAgICAgICAgdmFyIHZl
YyA9IHB0Mi5jbG9uZSgpLnN1YiggcHQxICk7CisgICAgICAgICAgICByZXR1cm4gdmVjLm5vcm1h
bGl6ZSgpOworCisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0VGFuZ2VudEF0OiBmdW5jdGlvbiAo
IHUgKSB7CisKKyAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGluZyggdSApOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFuZ2VudCggdCApOworCisgICAgICAgIH0sCisK
KyAgICAgICAgY29tcHV0ZUZyZW5ldEZyYW1lczogZnVuY3Rpb24gKCBzZWdtZW50cywgY2xvc2Vk
ICkgeworCisgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9wdWIv
dGVjaHJlcG9ydHMvVFI0MjUucGRmCisKKyAgICAgICAgICAgIHZhciBub3JtYWwgPSBuZXcgVmVj
dG9yMygpOworCisgICAgICAgICAgICB2YXIgdGFuZ2VudHMgPSBbXTsKKyAgICAgICAgICAgIHZh
ciBub3JtYWxzID0gW107CisgICAgICAgICAgICB2YXIgYmlub3JtYWxzID0gW107CisKKyAgICAg
ICAgICAgIHZhciB2ZWMgPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIG1hdCA9IG5l
dyBNYXRyaXg0KCk7CisKKyAgICAgICAgICAgIHZhciBpLCB1LCB0aGV0YTsKKworICAgICAgICAg
ICAgLy8gY29tcHV0ZSB0aGUgdGFuZ2VudCB2ZWN0b3JzIGZvciBlYWNoIHNlZ21lbnQgb24gdGhl
IGN1cnZlCisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpICsrICkg
eworCisgICAgICAgICAgICAgICAgdSA9IGkgLyBzZWdtZW50czsKKworICAgICAgICAgICAgICAg
IHRhbmdlbnRzWyBpIF0gPSB0aGlzLmdldFRhbmdlbnRBdCggdSApOworICAgICAgICAgICAgICAg
IHRhbmdlbnRzWyBpIF0ubm9ybWFsaXplKCk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gc2VsZWN0IGFuIGluaXRpYWwgbm9ybWFsIHZlY3RvciBwZXJwZW5kaWN1bGFyIHRvIHRo
ZSBmaXJzdCB0YW5nZW50IHZlY3RvciwKKyAgICAgICAgICAgIC8vIGFuZCBpbiB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBtaW5pbXVtIHRhbmdlbnQgeHl6IGNvbXBvbmVudAorCisgICAgICAgICAgICBu
b3JtYWxzWyAwIF0gPSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgYmlub3JtYWxzWyAwIF0g
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgdmFyIG1pbiA9IE51bWJlci5NQVhfVkFMVUU7
CisgICAgICAgICAgICB2YXIgdHggPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS54ICk7CisgICAg
ICAgICAgICB2YXIgdHkgPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS55ICk7CisgICAgICAgICAg
ICB2YXIgdHogPSBNYXRoLmFicyggdGFuZ2VudHNbIDAgXS56ICk7CisKKyAgICAgICAgICAgIGlm
ICggdHggPD0gbWluICkgeworCisgICAgICAgICAgICAgICAgbWluID0gdHg7CisgICAgICAgICAg
ICAgICAgbm9ybWFsLnNldCggMSwgMCwgMCApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICggdHkgPD0gbWluICkgeworCisgICAgICAgICAgICAgICAgbWluID0gdHk7CisgICAg
ICAgICAgICAgICAgbm9ybWFsLnNldCggMCwgMSwgMCApOworCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICggdHogPD0gbWluICkgeworCisgICAgICAgICAgICAgICAgbm9ybWFsLnNl
dCggMCwgMCwgMSApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZlYy5jcm9zc1Zl
Y3RvcnMoIHRhbmdlbnRzWyAwIF0sIG5vcm1hbCApLm5vcm1hbGl6ZSgpOworCisgICAgICAgICAg
ICBub3JtYWxzWyAwIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgMCBdLCB2ZWMgKTsKKyAgICAg
ICAgICAgIGJpbm9ybWFsc1sgMCBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIDAgXSwgbm9ybWFs
c1sgMCBdICk7CisKKworICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgc2xvd2x5LXZhcnlpbmcg
bm9ybWFsIGFuZCBiaW5vcm1hbCB2ZWN0b3JzIGZvciBlYWNoIHNlZ21lbnQgb24gdGhlIGN1cnZl
CisKKyAgICAgICAgICAgIGZvciAoIGkgPSAxOyBpIDw9IHNlZ21lbnRzOyBpICsrICkgeworCisg
ICAgICAgICAgICAgICAgbm9ybWFsc1sgaSBdID0gbm9ybWFsc1sgaSAtIDEgXS5jbG9uZSgpOwor
CisgICAgICAgICAgICAgICAgYmlub3JtYWxzWyBpIF0gPSBiaW5vcm1hbHNbIGkgLSAxIF0uY2xv
bmUoKTsKKworICAgICAgICAgICAgICAgIHZlYy5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyBpIC0g
MSBdLCB0YW5nZW50c1sgaSBdICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHZlYy5sZW5ndGgo
KSA+IE51bWJlci5FUFNJTE9OICkgeworCisgICAgICAgICAgICAgICAgICAgIHZlYy5ub3JtYWxp
emUoKTsKKworICAgICAgICAgICAgICAgICAgICB0aGV0YSA9IE1hdGguYWNvcyggX01hdGguY2xh
bXAoIHRhbmdlbnRzWyBpIC0gMSBdLmRvdCggdGFuZ2VudHNbIGkgXSApLCAtIDEsIDEgKSApOyAv
LyBjbGFtcCBmb3IgZmxvYXRpbmcgcHQgZXJyb3JzCiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0xp
bmVEYXNoZWRNYXRlcmlhbCc7CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIGkgXS5hcHBs
eU1hdHJpeDQoIG1hdC5tYWtlUm90YXRpb25BeGlzKCB2ZWMsIHRoZXRhICkgKTsKIAotICAgICAg
ICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCAweGZmZmZmZiApOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICB0aGlzLmxpbmV3aWR0aCA9IDE7CisgICAgICAgICAgICAgICAgYmlub3JtYWxz
WyBpIF0uY3Jvc3NWZWN0b3JzKCB0YW5nZW50c1sgaSBdLCBub3JtYWxzWyBpIF0gKTsKIAotICAg
ICAgICB0aGlzLnNjYWxlID0gMTsKLSAgICAgICAgdGhpcy5kYXNoU2l6ZSA9IDM7Ci0gICAgICAg
IHRoaXMuZ2FwU2l6ZSA9IDE7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5saWdodHMg
PSBmYWxzZTsKKyAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJ2ZSBpcyBjbG9zZWQsIHBvc3Rwcm9j
ZXNzIHRoZSB2ZWN0b3JzIHNvIHRoZSBmaXJzdCBhbmQgbGFzdCBub3JtYWwgdmVjdG9ycyBhcmUg
dGhlIHNhbWUKIAotICAgICAgICB0aGlzLnNldFZhbHVlcyggcGFyYW1ldGVycyApOworICAgICAg
ICAgICAgaWYgKCBjbG9zZWQgPT09IHRydWUgKSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAg
dGhldGEgPSBNYXRoLmFjb3MoIF9NYXRoLmNsYW1wKCBub3JtYWxzWyAwIF0uZG90KCBub3JtYWxz
WyBzZWdtZW50cyBdICksIC0gMSwgMSApICk7CisgICAgICAgICAgICAgICAgdGhldGEgLz0gc2Vn
bWVudHM7CiAKLSAgICBMaW5lRGFzaGVkTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0
ZSggTWF0ZXJpYWwucHJvdG90eXBlICk7Ci0gICAgTGluZURhc2hlZE1hdGVyaWFsLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9IExpbmVEYXNoZWRNYXRlcmlhbDsKKyAgICAgICAgICAgICAgICBpZiAo
IHRhbmdlbnRzWyAwIF0uZG90KCB2ZWMuY3Jvc3NWZWN0b3JzKCBub3JtYWxzWyAwIF0sIG5vcm1h
bHNbIHNlZ21lbnRzIF0gKSApID4gMCApIHsKIAotICAgIExpbmVEYXNoZWRNYXRlcmlhbC5wcm90
b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0
aGV0YSA9IC0gdGhldGE7CiAKLSAgICBMaW5lRGFzaGVkTWF0ZXJpYWwucHJvdG90eXBlLmNvcHkg
PSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgTWF0
ZXJpYWwucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7CiAKLSAgICAgICAgdGhpcy5j
b2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gdHdpc3Qg
YSBsaXR0bGUuLi4KKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSBdLmFwcGx5TWF0cml4
NCggbWF0Lm1ha2VSb3RhdGlvbkF4aXMoIHRhbmdlbnRzWyBpIF0sIHRoZXRhICogaSApICk7Cisg
ICAgICAgICAgICAgICAgICAgIGJpbm9ybWFsc1sgaSBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNb
IGkgXSwgbm9ybWFsc1sgaSBdICk7CiAKLSAgICAgICAgdGhpcy5saW5ld2lkdGggPSBzb3VyY2Uu
bGluZXdpZHRoOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnNjYWxlID0gc291
cmNlLnNjYWxlOwotICAgICAgICB0aGlzLmRhc2hTaXplID0gc291cmNlLmRhc2hTaXplOwotICAg
ICAgICB0aGlzLmdhcFNpemUgPSBzb3VyY2UuZ2FwU2l6ZTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dGFuZ2VudHM6IHRhbmdlbnRzLAorICAgICAgICAgICAgICAgIG5vcm1hbHM6IG5vcm1hbHMsCisg
ICAgICAgICAgICAgICAgYmlub3JtYWxzOiBiaW5vcm1hbHMKKyAgICAgICAgICAgIH07CiAKLSAg
ICB9OworICAgICAgICB9LAogCisgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7CiAKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAotICAg
IHZhciBNYXRlcmlhbHMgPSBPYmplY3QuZnJlZXplKHsKLSAgICAgICAgU2hhZG93TWF0ZXJpYWw6
IFNoYWRvd01hdGVyaWFsLAotICAgICAgICBTcHJpdGVNYXRlcmlhbDogU3ByaXRlTWF0ZXJpYWws
Ci0gICAgICAgIFJhd1NoYWRlck1hdGVyaWFsOiBSYXdTaGFkZXJNYXRlcmlhbCwKLSAgICAgICAg
U2hhZGVyTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsLAotICAgICAgICBQb2ludHNNYXRlcmlhbDog
UG9pbnRzTWF0ZXJpYWwsCi0gICAgICAgIE1lc2hQaHlzaWNhbE1hdGVyaWFsOiBNZXNoUGh5c2lj
YWxNYXRlcmlhbCwKLSAgICAgICAgTWVzaFN0YW5kYXJkTWF0ZXJpYWw6IE1lc2hTdGFuZGFyZE1h
dGVyaWFsLAotICAgICAgICBNZXNoUGhvbmdNYXRlcmlhbDogTWVzaFBob25nTWF0ZXJpYWwsCi0g
ICAgICAgIE1lc2hUb29uTWF0ZXJpYWw6IE1lc2hUb29uTWF0ZXJpYWwsCi0gICAgICAgIE1lc2hO
b3JtYWxNYXRlcmlhbDogTWVzaE5vcm1hbE1hdGVyaWFsLAotICAgICAgICBNZXNoTGFtYmVydE1h
dGVyaWFsOiBNZXNoTGFtYmVydE1hdGVyaWFsLAotICAgICAgICBNZXNoRGVwdGhNYXRlcmlhbDog
TWVzaERlcHRoTWF0ZXJpYWwsCi0gICAgICAgIE1lc2hCYXNpY01hdGVyaWFsOiBNZXNoQmFzaWNN
YXRlcmlhbCwKLSAgICAgICAgTGluZURhc2hlZE1hdGVyaWFsOiBMaW5lRGFzaGVkTWF0ZXJpYWws
Ci0gICAgICAgIExpbmVCYXNpY01hdGVyaWFsOiBMaW5lQmFzaWNNYXRlcmlhbCwKLSAgICAgICAg
TWF0ZXJpYWw6IE1hdGVyaWFsCi0gICAgfSk7CisgICAgICAgIH0sCiAKLSAgICAvKioKLSAgICAg
KiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqLworICAgICAgICBj
b3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgIHZhciBDYWNoZSA9IHsKKyAgICAgICAg
ICAgIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zID0gc291cmNlLmFyY0xlbmd0aERpdmlzaW9uczsK
IAotICAgICAgICBlbmFibGVkOiBmYWxzZSwKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgIGZpbGVzOiB7fSwKKyAgICAgICAgfSwKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICgg
a2V5LCBmaWxlICkgeworICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgaWYgKCB0aGlzLmVuYWJsZWQgPT09IGZhbHNlICkgcmV0dXJuOworICAgICAgICAgICAgdmFy
IGRhdGEgPSB7CisgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbjogNC41LAorICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ3VydmUnLAorICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6ICdDdXJ2ZS50b0pTT04nCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgLy8gY29uc29sZS5sb2coICdUSFJF
RS5DYWNoZScsICdBZGRpbmcga2V5OicsIGtleSApOworICAgICAgICAgICAgZGF0YS5hcmNMZW5n
dGhEaXZpc2lvbnMgPSB0aGlzLmFyY0xlbmd0aERpdmlzaW9uczsKKyAgICAgICAgICAgIGRhdGEu
dHlwZSA9IHRoaXMudHlwZTsKIAotICAgICAgICAgICAgdGhpcy5maWxlc1sga2V5IF0gPSBmaWxl
OworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXQ6
IGZ1bmN0aW9uICgga2V5ICkgeworICAgICAgICBmcm9tSlNPTjogZnVuY3Rpb24gKCBqc29uICkg
ewogCi0gICAgICAgICAgICBpZiAoIHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgKSByZXR1cm47Cisg
ICAgICAgICAgICB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IGpzb24uYXJjTGVuZ3RoRGl2aXNp
b25zOwogCi0gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyggJ1RIUkVFLkNhY2hlJywgJ0NoZWNr
aW5nIGtleTonLCBrZXkgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5maWxlc1sga2V5IF07CisgICAgICAgIH0KIAotICAgICAgICB9LAorICAg
IH0gKTsKIAotICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgga2V5ICkgeworICAgIGZ1bmN0aW9u
IEVsbGlwc2VDdXJ2ZSggYVgsIGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVu
ZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKSB7CiAKLSAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLmZpbGVzWyBrZXkgXTsKKyAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwogCi0gICAgICAg
IH0sCisgICAgICAgIHRoaXMudHlwZSA9ICdFbGxpcHNlQ3VydmUnOwogCi0gICAgICAgIGNsZWFy
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuYVggPSBhWCB8fCAwOworICAgICAgICB0aGlz
LmFZID0gYVkgfHwgMDsKIAotICAgICAgICAgICAgdGhpcy5maWxlcyA9IHt9OworICAgICAgICB0
aGlzLnhSYWRpdXMgPSB4UmFkaXVzIHx8IDE7CisgICAgICAgIHRoaXMueVJhZGl1cyA9IHlSYWRp
dXMgfHwgMTsKIAotICAgICAgICB9CisgICAgICAgIHRoaXMuYVN0YXJ0QW5nbGUgPSBhU3RhcnRB
bmdsZSB8fCAwOworICAgICAgICB0aGlzLmFFbmRBbmdsZSA9IGFFbmRBbmdsZSB8fCAyICogTWF0
aC5QSTsKIAotICAgIH07CisgICAgICAgIHRoaXMuYUNsb2Nrd2lzZSA9IGFDbG9ja3dpc2UgfHwg
ZmFsc2U7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2Iu
Y29tLwotICAgICAqLworICAgICAgICB0aGlzLmFSb3RhdGlvbiA9IGFSb3RhdGlvbiB8fCAwOwog
Ci0gICAgZnVuY3Rpb24gTG9hZGluZ01hbmFnZXIoIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJv
ciApIHsKKyAgICB9CiAKLSAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKKyAgICBFbGxpcHNlQ3Vy
dmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7CisgICAgRWxs
aXBzZUN1cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2VDdXJ2ZTsKIAotICAgICAg
ICB2YXIgaXNMb2FkaW5nID0gZmFsc2UsIGl0ZW1zTG9hZGVkID0gMCwgaXRlbXNUb3RhbCA9IDA7
CisgICAgRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZSA9IHRydWU7CiAKLSAg
ICAgICAgdGhpcy5vblN0YXJ0ID0gdW5kZWZpbmVkOwotICAgICAgICB0aGlzLm9uTG9hZCA9IG9u
TG9hZDsKLSAgICAgICAgdGhpcy5vblByb2dyZXNzID0gb25Qcm9ncmVzczsKLSAgICAgICAgdGhp
cy5vbkVycm9yID0gb25FcnJvcjsKKyAgICBFbGxpcHNlQ3VydmUucHJvdG90eXBlLmdldFBvaW50
ID0gZnVuY3Rpb24gKCB0LCBvcHRpb25hbFRhcmdldCApIHsKIAotICAgICAgICB0aGlzLml0ZW1T
dGFydCA9IGZ1bmN0aW9uICggdXJsICkgeworICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRh
cmdldCB8fCBuZXcgVmVjdG9yMigpOwogCi0gICAgICAgICAgICBpdGVtc1RvdGFsICsrOworICAg
ICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjsKKyAgICAgICAgdmFyIGRlbHRhQW5nbGUgPSB0
aGlzLmFFbmRBbmdsZSAtIHRoaXMuYVN0YXJ0QW5nbGU7CisgICAgICAgIHZhciBzYW1lUG9pbnRz
ID0gTWF0aC5hYnMoIGRlbHRhQW5nbGUgKSA8IE51bWJlci5FUFNJTE9OOwogCi0gICAgICAgICAg
ICBpZiAoIGlzTG9hZGluZyA9PT0gZmFsc2UgKSB7CisgICAgICAgIC8vIGVuc3VyZXMgdGhhdCBk
ZWx0YUFuZ2xlIGlzIDAgLi4gMiBQSQorICAgICAgICB3aGlsZSAoIGRlbHRhQW5nbGUgPCAwICkg
ZGVsdGFBbmdsZSArPSB0d29QaTsKKyAgICAgICAgd2hpbGUgKCBkZWx0YUFuZ2xlID4gdHdvUGkg
KSBkZWx0YUFuZ2xlIC09IHR3b1BpOwogCi0gICAgICAgICAgICAgICAgaWYgKCBzY29wZS5vblN0
YXJ0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIGlmICggZGVsdGFBbmdsZSA8IE51bWJlci5F
UFNJTE9OICkgewogCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlLm9uU3RhcnQoIHVybCwgaXRl
bXNMb2FkZWQsIGl0ZW1zVG90YWwgKTsKKyAgICAgICAgICAgIGlmICggc2FtZVBvaW50cyApIHsK
IAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWx0YUFuZ2xlID0gMDsKKwor
ICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIGRlbHRhQW5nbGUgPSB0d29Q
aTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpc0xvYWRpbmcgPSB0cnVlOworICAg
ICAgICB9CiAKLSAgICAgICAgfTsKKyAgICAgICAgaWYgKCB0aGlzLmFDbG9ja3dpc2UgPT09IHRy
dWUgJiYgISBzYW1lUG9pbnRzICkgewogCi0gICAgICAgIHRoaXMuaXRlbUVuZCA9IGZ1bmN0aW9u
ICggdXJsICkgeworICAgICAgICAgICAgaWYgKCBkZWx0YUFuZ2xlID09PSB0d29QaSApIHsKIAot
ICAgICAgICAgICAgaXRlbXNMb2FkZWQgKys7CisgICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9
IC0gdHdvUGk7CiAKLSAgICAgICAgICAgIGlmICggc2NvcGUub25Qcm9ncmVzcyAhPT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIHNjb3BlLm9u
UHJvZ3Jlc3MoIHVybCwgaXRlbXNMb2FkZWQsIGl0ZW1zVG90YWwgKTsKKyAgICAgICAgICAgICAg
ICBkZWx0YUFuZ2xlID0gZGVsdGFBbmdsZSAtIHR3b1BpOwogCiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICggaXRlbXNMb2FkZWQgPT09IGl0ZW1zVG90YWwgKSB7CisgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlzTG9hZGluZyA9IGZhbHNlOworICAgICAgICB2YXIgYW5nbGUg
PSB0aGlzLmFTdGFydEFuZ2xlICsgdCAqIGRlbHRhQW5nbGU7CisgICAgICAgIHZhciB4ID0gdGhp
cy5hWCArIHRoaXMueFJhZGl1cyAqIE1hdGguY29zKCBhbmdsZSApOworICAgICAgICB2YXIgeSA9
IHRoaXMuYVkgKyB0aGlzLnlSYWRpdXMgKiBNYXRoLnNpbiggYW5nbGUgKTsKIAotICAgICAgICAg
ICAgICAgIGlmICggc2NvcGUub25Mb2FkICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIGlmICgg
dGhpcy5hUm90YXRpb24gIT09IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgc2NvcGUub25M
b2FkKCk7CisgICAgICAgICAgICB2YXIgY29zID0gTWF0aC5jb3MoIHRoaXMuYVJvdGF0aW9uICk7
CisgICAgICAgICAgICB2YXIgc2luID0gTWF0aC5zaW4oIHRoaXMuYVJvdGF0aW9uICk7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdHggPSB4IC0gdGhpcy5hWDsKKyAgICAg
ICAgICAgIHZhciB0eSA9IHkgLSB0aGlzLmFZOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBSb3RhdGUgdGhlIHBvaW50IGFib3V0IHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc2UuCisg
ICAgICAgICAgICB4ID0gdHggKiBjb3MgLSB0eSAqIHNpbiArIHRoaXMuYVg7CisgICAgICAgICAg
ICB5ID0gdHggKiBzaW4gKyB0eSAqIGNvcyArIHRoaXMuYVk7CiAKLSAgICAgICAgfTsKKyAgICAg
ICAgfQogCi0gICAgICAgIHRoaXMuaXRlbUVycm9yID0gZnVuY3Rpb24gKCB1cmwgKSB7CisgICAg
ICAgIHJldHVybiBwb2ludC5zZXQoIHgsIHkgKTsKIAotICAgICAgICAgICAgaWYgKCBzY29wZS5v
bkVycm9yICE9PSB1bmRlZmluZWQgKSB7CisgICAgfTsKIAotICAgICAgICAgICAgICAgIHNjb3Bl
Lm9uRXJyb3IoIHVybCApOworICAgIEVsbGlwc2VDdXJ2ZS5wcm90b3R5cGUuY29weSA9IGZ1bmN0
aW9uICggc291cmNlICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgIEN1cnZlLnByb3RvdHlw
ZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgIH07CisgICAgICAgIHRoaXMu
YVggPSBzb3VyY2UuYVg7CisgICAgICAgIHRoaXMuYVkgPSBzb3VyY2UuYVk7CiAKLSAgICB9Cisg
ICAgICAgIHRoaXMueFJhZGl1cyA9IHNvdXJjZS54UmFkaXVzOworICAgICAgICB0aGlzLnlSYWRp
dXMgPSBzb3VyY2UueVJhZGl1czsKIAotICAgIHZhciBEZWZhdWx0TG9hZGluZ01hbmFnZXIgPSBu
ZXcgTG9hZGluZ01hbmFnZXIoKTsKKyAgICAgICAgdGhpcy5hU3RhcnRBbmdsZSA9IHNvdXJjZS5h
U3RhcnRBbmdsZTsKKyAgICAgICAgdGhpcy5hRW5kQW5nbGUgPSBzb3VyY2UuYUVuZEFuZ2xlOwog
Ci0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAg
ICAgKi8KKyAgICAgICAgdGhpcy5hQ2xvY2t3aXNlID0gc291cmNlLmFDbG9ja3dpc2U7CiAKLSAg
ICBmdW5jdGlvbiBGaWxlTG9hZGVyKCBtYW5hZ2VyICkgeworICAgICAgICB0aGlzLmFSb3RhdGlv
biA9IHNvdXJjZS5hUm90YXRpb247CiAKLSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2Vy
ICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CisgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgfQorICAgIH07CiAKLSAgICBPYmplY3QuYXNzaWduKCBG
aWxlTG9hZGVyLnByb3RvdHlwZSwgewogCi0gICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBv
bkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CisgICAgRWxsaXBzZUN1cnZlLnByb3RvdHlw
ZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIGlmICggdXJsID09PSB1bmRl
ZmluZWQgKSB1cmwgPSAnJzsKKyAgICAgICAgdmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9K
U09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgaWYgKCB0aGlzLnBhdGggIT09IHVuZGVm
aW5lZCApIHVybCA9IHRoaXMucGF0aCArIHVybDsKKyAgICAgICAgZGF0YS5hWCA9IHRoaXMuYVg7
CisgICAgICAgIGRhdGEuYVkgPSB0aGlzLmFZOwogCi0gICAgICAgICAgICB2YXIgc2NvcGUgPSB0
aGlzOworICAgICAgICBkYXRhLnhSYWRpdXMgPSB0aGlzLnhSYWRpdXM7CisgICAgICAgIGRhdGEu
eVJhZGl1cyA9IHRoaXMueVJhZGl1czsKIAotICAgICAgICAgICAgdmFyIGNhY2hlZCA9IENhY2hl
LmdldCggdXJsICk7CisgICAgICAgIGRhdGEuYVN0YXJ0QW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xl
OworICAgICAgICBkYXRhLmFFbmRBbmdsZSA9IHRoaXMuYUVuZEFuZ2xlOwogCi0gICAgICAgICAg
ICBpZiAoIGNhY2hlZCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICBkYXRhLmFDbG9ja3dpc2Ug
PSB0aGlzLmFDbG9ja3dpc2U7CiAKLSAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1T
dGFydCggdXJsICk7CisgICAgICAgIGRhdGEuYVJvdGF0aW9uID0gdGhpcy5hUm90YXRpb247CiAK
LSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biBkYXRhOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNo
ZWQgKTsKKyAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVu
ZCggdXJsICk7CisgICAgRWxsaXBzZUN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9u
ICgganNvbiApIHsKIAotICAgICAgICAgICAgICAgIH0sIDAgKTsKKyAgICAgICAgQ3VydmUucHJv
dG90eXBlLmZyb21KU09OLmNhbGwoIHRoaXMsIGpzb24gKTsKIAotICAgICAgICAgICAgICAgIHJl
dHVybiBjYWNoZWQ7CisgICAgICAgIHRoaXMuYVggPSBqc29uLmFYOworICAgICAgICB0aGlzLmFZ
ID0ganNvbi5hWTsKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLnhSYWRpdXMgPSBqc29u
LnhSYWRpdXM7CisgICAgICAgIHRoaXMueVJhZGl1cyA9IGpzb24ueVJhZGl1czsKIAotICAgICAg
ICAgICAgLy8gQ2hlY2sgZm9yIGRhdGE6IFVSSQotICAgICAgICAgICAgdmFyIGRhdGFVcmlSZWdl
eCA9IC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvOwotICAgICAgICAgICAgdmFyIGRhdGFV
cmlSZWdleFJlc3VsdCA9IHVybC5tYXRjaCggZGF0YVVyaVJlZ2V4ICk7CisgICAgICAgIHRoaXMu
YVN0YXJ0QW5nbGUgPSBqc29uLmFTdGFydEFuZ2xlOworICAgICAgICB0aGlzLmFFbmRBbmdsZSA9
IGpzb24uYUVuZEFuZ2xlOwogCi0gICAgICAgICAgICAvLyBTYWZhcmkgY2FuIG5vdCBoYW5kbGUg
RGF0YSBVUklzIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Qgc28gcHJvY2VzcyBtYW51YWxseQotICAg
ICAgICAgICAgaWYgKCBkYXRhVXJpUmVnZXhSZXN1bHQgKSB7CisgICAgICAgIHRoaXMuYUNsb2Nr
d2lzZSA9IGpzb24uYUNsb2Nrd2lzZTsKIAotICAgICAgICAgICAgICAgIHZhciBtaW1lVHlwZSA9
IGRhdGFVcmlSZWdleFJlc3VsdFsgMSBdOwotICAgICAgICAgICAgICAgIHZhciBpc0Jhc2U2NCA9
ICEhIGRhdGFVcmlSZWdleFJlc3VsdFsgMiBdOwotICAgICAgICAgICAgICAgIHZhciBkYXRhID0g
ZGF0YVVyaVJlZ2V4UmVzdWx0WyAzIF07CisgICAgICAgIHRoaXMuYVJvdGF0aW9uID0ganNvbi5h
Um90YXRpb247CiAKLSAgICAgICAgICAgICAgICBkYXRhID0gd2luZG93LmRlY29kZVVSSUNvbXBv
bmVudCggZGF0YSApOworICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgIGlm
ICggaXNCYXNlNjQgKSBkYXRhID0gd2luZG93LmF0b2IoIGRhdGEgKTsKKyAgICB9OwogCi0gICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICBmdW5jdGlvbiBBcmNDdXJ2ZSggYVgsIGFZLCBhUmFkaXVz
LCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICkgewogCi0gICAgICAgICAgICAg
ICAgICAgIHZhciByZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlVHlw
ZSA9ICggdGhpcy5yZXNwb25zZVR5cGUgfHwgJycgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBF
bGxpcHNlQ3VydmUuY2FsbCggdGhpcywgYVgsIGFZLCBhUmFkaXVzLCBhUmFkaXVzLCBhU3RhcnRB
bmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoICggcmVzcG9uc2VUeXBlICkgeworICAgICAgICB0aGlzLnR5cGUgPSAnQXJjQ3VydmUnOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhcnJheWJ1ZmZlcic6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdibG9iJzoKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZSA9IG5ldyBBcnJheUJ1ZmZlciggZGF0YS5sZW5ndGggKTsKKyAgICBB
cmNDdXJ2ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBFbGxpcHNlQ3VydmUucHJvdG90eXBl
ICk7CisgICAgQXJjQ3VydmUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXJjQ3VydmU7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KCByZXNw
b25zZSApOworICAgIEFyY0N1cnZlLnByb3RvdHlwZS5pc0FyY0N1cnZlID0gdHJ1ZTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3Ro
OyBpICsrICkgeworICAgIC8qKgorICAgICAqIEBhdXRob3Igeno4NSBodHRwczovL2dpdGh1Yi5j
b20veno4NQorICAgICAqCisgICAgICogQ2VudHJpcGV0YWwgQ2F0bXVsbFJvbSBDdXJ2ZSAtIHdo
aWNoIGlzIHVzZWZ1bCBmb3IgYXZvaWRpbmcKKyAgICAgKiBjdXNwcyBhbmQgc2VsZi1pbnRlcnNl
Y3Rpb25zIGluIG5vbi11bmlmb3JtIGNhdG11bGwgcm9tIGN1cnZlcy4KKyAgICAgKiBodHRwOi8v
d3d3LmNlbXl1a3NlbC5jb20vcmVzZWFyY2gvY2F0bXVsbHJvbV9wYXJhbS9jYXRtdWxscm9tLnBk
ZgorICAgICAqCisgICAgICogY3VydmUudHlwZSBhY2NlcHRzIGNlbnRyaXBldGFsKGRlZmF1bHQp
LCBjaG9yZGFsIGFuZCBjYXRtdWxscm9tCisgICAgICogY3VydmUudGVuc2lvbiBpcyB1c2VkIGZv
ciBjYXRtdWxscm9tIHdoaWNoIGRlZmF1bHRzIHRvIDAuNQorICAgICAqLwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpZXdbIGkgXSA9IGRhdGEuY2hhckNvZGVBdCggaSApOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIC8qCisgICAgQmFzZWQgb24gYW4g
b3B0aW1pemVkIGMrKyBzb2x1dGlvbiBpbgorICAgICAtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNv
bS9xdWVzdGlvbnMvOTQ4OTczNi9jYXRtdWxsLXJvbS1jdXJ2ZS13aXRoLW5vLWN1c3BzLWFuZC1u
by1zZWxmLWludGVyc2VjdGlvbnMvCisgICAgIC0gaHR0cDovL2lkZW9uZS5jb20vTm9FYlZNCiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2In
ICkgeworICAgIFRoaXMgQ3ViaWNQb2x5IGNsYXNzIGNvdWxkIGJlIHVzZWQgZm9yIHJldXNpbmcg
c29tZSB2YXJpYWJsZXMgYW5kIGNhbGN1bGF0aW9ucywKKyAgICBidXQgZm9yIHRocmVlLmpzIGN1
cnZlIHVzZSwgaXQgY291bGQgYmUgcG9zc2libGUgaW5saW5lZCBhbmQgZmxhdHRlbiBpbnRvIGEg
c2luZ2xlIGZ1bmN0aW9uIGNhbGwKKyAgICB3aGljaCBjYW4gYmUgcGxhY2VkIGluIEN1cnZlVXRp
bHMuCisgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9
IG5ldyBCbG9iKCBbIHJlc3BvbnNlIF0sIHsgdHlwZTogbWltZVR5cGUgfSApOworICAgIGZ1bmN0
aW9uIEN1YmljUG9seSgpIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgdmFyIGMwID0gMCwgYzEgPSAwLCBjMiA9IDAsIGMzID0gMDsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKgorICAgICAgICAgKiBDb21wdXRlIGNvZWZm
aWNpZW50cyBmb3IgYSBjdWJpYyBwb2x5bm9taWFsCisgICAgICAgICAqICAgcChzKSA9IGMwICsg
YzEqcyArIGMyKnNeMiArIGMzKnNeMworICAgICAgICAgKiBzdWNoIHRoYXQKKyAgICAgICAgICog
ICBwKDApID0geDAsIHAoMSkgPSB4MQorICAgICAgICAgKiAgYW5kCisgICAgICAgICAqICAgcCco
MCkgPSB0MCwgcCcoMSkgPSB0MS4KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGluaXQo
IHgwLCB4MSwgdDAsIHQxICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkb2N1
bWVudCc6CisgICAgICAgICAgICBjMCA9IHgwOworICAgICAgICAgICAgYzEgPSB0MDsKKyAgICAg
ICAgICAgIGMyID0gLSAzICogeDAgKyAzICogeDEgLSAyICogdDAgLSB0MTsKKyAgICAgICAgICAg
IGMzID0gMiAqIHgwIC0gMiAqIHgxICsgdDAgKyB0MTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2UgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBtaW1lVHlw
ZSApOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6Cisg
ICAgICAgICAgICBpbml0Q2F0bXVsbFJvbTogZnVuY3Rpb24gKCB4MCwgeDEsIHgyLCB4MywgdGVu
c2lvbiApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5w
YXJzZSggZGF0YSApOworICAgICAgICAgICAgICAgIGluaXQoIHgxLCB4MiwgdGVuc2lvbiAqICgg
eDIgLSB4MCApLCB0ZW5zaW9uICogKCB4MyAtIHgxICkgKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogLy8gJ3RleHQnIG9yIG90aGVyCisgICAgICAgICAgICBpbml0Tm9udW5pZm9y
bUNhdG11bGxSb206IGZ1bmN0aW9uICggeDAsIHgxLCB4MiwgeDMsIGR0MCwgZHQxLCBkdDIgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7CisgICAgICAg
ICAgICAgICAgLy8gY29tcHV0ZSB0YW5nZW50cyB3aGVuIHBhcmFtZXRlcml6ZWQgaW4gW3QxLHQy
XQorICAgICAgICAgICAgICAgIHZhciB0MSA9ICggeDEgLSB4MCApIC8gZHQwIC0gKCB4MiAtIHgw
ICkgLyAoIGR0MCArIGR0MSApICsgKCB4MiAtIHgxICkgLyBkdDE7CisgICAgICAgICAgICAgICAg
dmFyIHQyID0gKCB4MiAtIHgxICkgLyBkdDEgLSAoIHgzIC0geDEgKSAvICggZHQxICsgZHQyICkg
KyAoIHgzIC0geDIgKSAvIGR0MjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIC8vIHJlc2NhbGUgdGFuZ2VudHMgZm9yIHBhcmFtZXRyaXphdGlv
biBpbiBbMCwxXQorICAgICAgICAgICAgICAgIHQxICo9IGR0MTsKKyAgICAgICAgICAgICAgICB0
MiAqPSBkdDE7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluaXQo
IHgxLCB4MiwgdDEsIHQyICk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgbmV4
dCBicm93c2VyIHRpY2sKLSAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb25Mb2FkICkgb25Mb2FkKCByZXNwb25zZSApOworICAgICAgICAgICAgY2FsYzogZnVuY3Rp
b24gKCB0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1F
bmQoIHVybCApOworICAgICAgICAgICAgICAgIHZhciB0MiA9IHQgKiB0OworICAgICAgICAgICAg
ICAgIHZhciB0MyA9IHQyICogdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gYzAgKyBjMSAqIHQg
KyBjMiAqIHQyICsgYzMgKiB0MzsKIAotICAgICAgICAgICAgICAgICAgICB9LCAwICk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB9IGNhdGNoICggZXJyb3IgKSB7CisgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgbmV4dCBicm93c2VyIHRpY2sK
LSAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKKyAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25FcnJvciApIG9uRXJyb3IoIGVy
cm9yICk7CisgICAgLy8KIAotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5p
dGVtRW5kKCB1cmwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRl
bUVycm9yKCB1cmwgKTsKKyAgICB2YXIgdG1wID0gbmV3IFZlY3RvcjMoKTsKKyAgICB2YXIgcHgg
PSBuZXcgQ3ViaWNQb2x5KCksIHB5ID0gbmV3IEN1YmljUG9seSgpLCBweiA9IG5ldyBDdWJpY1Bv
bHkoKTsKIAotICAgICAgICAgICAgICAgICAgICB9LCAwICk7CisgICAgZnVuY3Rpb24gQ2F0bXVs
bFJvbUN1cnZlMyggcG9pbnRzLCBjbG9zZWQsIGN1cnZlVHlwZSwgdGVuc2lvbiApIHsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwogCi0gICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICB0aGlzLnR5cGUgPSAnQ2F0bXVsbFJvbUN1cnZlMyc7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgICAg
ICAgICAgICAgIHJlcXVlc3Qub3BlbiggJ0dFVCcsIHVybCwgdHJ1ZSApOworICAgICAgICB0aGlz
LnBvaW50cyA9IHBvaW50cyB8fCBbXTsKKyAgICAgICAgdGhpcy5jbG9zZWQgPSBjbG9zZWQgfHwg
ZmFsc2U7CisgICAgICAgIHRoaXMuY3VydmVUeXBlID0gY3VydmVUeXBlIHx8ICdjZW50cmlwZXRh
bCc7CisgICAgICAgIHRoaXMudGVuc2lvbiA9IHRlbnNpb24gfHwgMC41OwogCi0gICAgICAgICAg
ICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCAnbG9hZCcsIGZ1bmN0aW9uICggZXZlbnQg
KSB7CisgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGV2ZW50LnRh
cmdldC5yZXNwb25zZTsKKyAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoIEN1cnZlLnByb3RvdHlwZSApOworICAgIENhdG11bGxSb21DdXJ2ZTMucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gQ2F0bXVsbFJvbUN1cnZlMzsKIAotICAgICAgICAgICAgICAgICAgICBD
YWNoZS5hZGQoIHVybCwgcmVzcG9uc2UgKTsKKyAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlw
ZS5pc0NhdG11bGxSb21DdXJ2ZTMgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpcy5zdGF0dXMgPT09IDIwMCApIHsKKyAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS5n
ZXRQb2ludCA9IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCByZXNwb25zZSApOworICAgICAgICB2
YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOworICAgICAgICB2YXIg
cG9pbnRzID0gdGhpcy5wb2ludHM7CisgICAgICAgIHZhciBsID0gcG9pbnRzLmxlbmd0aDsKIAot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLnN0YXR1cyA9PT0gMCApIHsKKyAg
ICAgICAgdmFyIHAgPSAoIGwgLSAoIHRoaXMuY2xvc2VkID8gMCA6IDEgKSApICogdDsKKyAgICAg
ICAgdmFyIGludFBvaW50ID0gTWF0aC5mbG9vciggcCApOworICAgICAgICB2YXIgd2VpZ2h0ID0g
cCAtIGludFBvaW50OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTb21lIGJyb3dzZXJz
IHJldHVybiBIVFRQIFN0YXR1cyAwIHdoZW4gdXNpbmcgbm9uLWh0dHAgcHJvdG9jb2wKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGUuZy4gJ2ZpbGU6Ly8nIG9yICdkYXRhOi8vJy4gSGFuZGxl
IGFzIHN1Y2Nlc3MuCisgICAgICAgIGlmICggdGhpcy5jbG9zZWQgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVz
IDAgcmVjZWl2ZWQuJyApOworICAgICAgICAgICAgaW50UG9pbnQgKz0gaW50UG9pbnQgPiAwID8g
MCA6ICggTWF0aC5mbG9vciggTWF0aC5hYnMoIGludFBvaW50ICkgLyBsICkgKyAxICkgKiBsOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggcmVzcG9uc2Ug
KTsKKyAgICAgICAgfSBlbHNlIGlmICggd2VpZ2h0ID09PSAwICYmIGludFBvaW50ID09PSBsIC0g
MSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtRW5kKCB1
cmwgKTsKKyAgICAgICAgICAgIGludFBvaW50ID0gbCAtIDI7CisgICAgICAgICAgICB3ZWlnaHQg
PSAxOwogCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBvbkVycm9yICkgb25FcnJvciggZXZlbnQgKTsKKyAgICAg
ICAgdmFyIHAwLCBwMSwgcDIsIHAzOyAvLyA0IHBvaW50cwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVybCApOworICAgICAgICBpZiAoIHRoaXMuY2xv
c2VkIHx8IGludFBvaW50ID4gMCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBwMCA9IHBvaW50c1sgKCBpbnRQb2ludCAtIDEgKSAlIGwgXTsKIAotICAgICAgICAgICAg
ICAgIH0sIGZhbHNlICk7CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IG9uUHJvZ3Jlc3MgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIC8vIGV4dHJhcG9sYXRl
IGZpcnN0IHBvaW50CisgICAgICAgICAgICB0bXAuc3ViVmVjdG9ycyggcG9pbnRzWyAwIF0sIHBv
aW50c1sgMSBdICkuYWRkKCBwb2ludHNbIDAgXSApOworICAgICAgICAgICAgcDAgPSB0bXA7CiAK
LSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCAncHJvZ3Jlc3Mn
LCBmdW5jdGlvbiAoIGV2ZW50ICkgeworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9uUHJvZ3Jlc3MoIGV2ZW50ICk7CisgICAgICAgIHAxID0gcG9pbnRzWyBpbnRQb2ludCAl
IGwgXTsKKyAgICAgICAgcDIgPSBwb2ludHNbICggaW50UG9pbnQgKyAxICkgJSBsIF07CiAKLSAg
ICAgICAgICAgICAgICAgICAgfSwgZmFsc2UgKTsKKyAgICAgICAgaWYgKCB0aGlzLmNsb3NlZCB8
fCBpbnRQb2ludCArIDIgPCBsICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
cDMgPSBwb2ludHNbICggaW50UG9pbnQgKyAyICkgJSBsIF07CiAKLSAgICAgICAgICAgICAgICBy
ZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoICdlcnJvcicsIGZ1bmN0aW9uICggZXZlbnQgKSB7Cisg
ICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBvbkVycm9yICkgb25F
cnJvciggZXZlbnQgKTsKKyAgICAgICAgICAgIC8vIGV4dHJhcG9sYXRlIGxhc3QgcG9pbnQKKyAg
ICAgICAgICAgIHRtcC5zdWJWZWN0b3JzKCBwb2ludHNbIGwgLSAxIF0sIHBvaW50c1sgbCAtIDIg
XSApLmFkZCggcG9pbnRzWyBsIC0gMSBdICk7CisgICAgICAgICAgICBwMyA9IHRtcDsKIAotICAg
ICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwotICAgICAgICAg
ICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIH0sIGZhbHNlICk7CisgICAgICAgIGlmICggdGhpcy5jdXJ2ZVR5cGUg
PT09ICdjZW50cmlwZXRhbCcgfHwgdGhpcy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyApIHsKIAot
ICAgICAgICAgICAgICAgIGlmICggdGhpcy5yZXNwb25zZVR5cGUgIT09IHVuZGVmaW5lZCApIHJl
cXVlc3QucmVzcG9uc2VUeXBlID0gdGhpcy5yZXNwb25zZVR5cGU7Ci0gICAgICAgICAgICAgICAg
aWYgKCB0aGlzLndpdGhDcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkICkgcmVxdWVzdC53aXRoQ3Jl
ZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFsczsKKyAgICAgICAgICAgIC8vIGluaXQgQ2Vu
dHJpcGV0YWwgLyBDaG9yZGFsIENhdG11bGwtUm9tCisgICAgICAgICAgICB2YXIgcG93ID0gdGhp
cy5jdXJ2ZVR5cGUgPT09ICdjaG9yZGFsJyA/IDAuNSA6IDAuMjU7CisgICAgICAgICAgICB2YXIg
ZHQwID0gTWF0aC5wb3coIHAwLmRpc3RhbmNlVG9TcXVhcmVkKCBwMSApLCBwb3cgKTsKKyAgICAg
ICAgICAgIHZhciBkdDEgPSBNYXRoLnBvdyggcDEuZGlzdGFuY2VUb1NxdWFyZWQoIHAyICksIHBv
dyApOworICAgICAgICAgICAgdmFyIGR0MiA9IE1hdGgucG93KCBwMi5kaXN0YW5jZVRvU3F1YXJl
ZCggcDMgKSwgcG93ICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIHJlcXVlc3Qub3ZlcnJpZGVN
aW1lVHlwZSApIHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSggdGhpcy5taW1lVHlwZSAhPT0gdW5k
ZWZpbmVkID8gdGhpcy5taW1lVHlwZSA6ICd0ZXh0L3BsYWluJyApOworICAgICAgICAgICAgLy8g
c2FmZXR5IGNoZWNrIGZvciByZXBlYXRlZCBwb2ludHMKKyAgICAgICAgICAgIGlmICggZHQxIDwg
MWUtNCApIGR0MSA9IDEuMDsKKyAgICAgICAgICAgIGlmICggZHQwIDwgMWUtNCApIGR0MCA9IGR0
MTsKKyAgICAgICAgICAgIGlmICggZHQyIDwgMWUtNCApIGR0MiA9IGR0MTsKIAotICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBoZWFkZXIgaW4gdGhpcy5yZXF1ZXN0SGVhZGVyICkgeworICAgICAg
ICAgICAgcHguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKCBwMC54LCBwMS54LCBwMi54LCBwMy54
LCBkdDAsIGR0MSwgZHQyICk7CisgICAgICAgICAgICBweS5pbml0Tm9udW5pZm9ybUNhdG11bGxS
b20oIHAwLnksIHAxLnksIHAyLnksIHAzLnksIGR0MCwgZHQxLCBkdDIgKTsKKyAgICAgICAgICAg
IHB6LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbSggcDAueiwgcDEueiwgcDIueiwgcDMueiwgZHQw
LCBkdDEsIGR0MiApOwogCi0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhl
YWRlciggaGVhZGVyLCB0aGlzLnJlcXVlc3RIZWFkZXJbIGhlYWRlciBdICk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIHRoaXMuY3VydmVUeXBlID09PSAnY2F0bXVsbHJvbScgKSB7CiAKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBweC5pbml0Q2F0bXVsbFJvbSggcDAueCwgcDEueCwgcDIu
eCwgcDMueCwgdGhpcy50ZW5zaW9uICk7CisgICAgICAgICAgICBweS5pbml0Q2F0bXVsbFJvbSgg
cDAueSwgcDEueSwgcDIueSwgcDMueSwgdGhpcy50ZW5zaW9uICk7CisgICAgICAgICAgICBwei5p
bml0Q2F0bXVsbFJvbSggcDAueiwgcDEueiwgcDIueiwgcDMueiwgdGhpcy50ZW5zaW9uICk7CiAK
LSAgICAgICAgICAgICAgICByZXF1ZXN0LnNlbmQoIG51bGwgKTsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICB9CisgICAgICAgIHBvaW50LnNldCgKKyAgICAgICAgICAgIHB4LmNhbGMoIHdlaWdo
dCApLAorICAgICAgICAgICAgcHkuY2FsYyggd2VpZ2h0ICksCisgICAgICAgICAgICBwei5jYWxj
KCB3ZWlnaHQgKQorICAgICAgICApOwogCi0gICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1T
dGFydCggdXJsICk7CisgICAgICAgIHJldHVybiBwb2ludDsKIAotICAgICAgICAgICAgcmV0dXJu
IHJlcXVlc3Q7CisgICAgfTsKIAotICAgICAgICB9LAorICAgIENhdG11bGxSb21DdXJ2ZTMucHJv
dG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICBzZXRQYXRoOiBm
dW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0
aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgdGhpcy5wYXRoID0gdmFsdWU7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgdGhpcy5wb2ludHMgPSBbXTsKIAotICAgICAgICB9
LAorICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBzb3VyY2UucG9pbnRzLmxlbmd0aDsgaSA8
IGw7IGkgKysgKSB7CiAKLSAgICAgICAgc2V0UmVzcG9uc2VUeXBlOiBmdW5jdGlvbiAoIHZhbHVl
ICkgeworICAgICAgICAgICAgdmFyIHBvaW50ID0gc291cmNlLnBvaW50c1sgaSBdOwogCi0gICAg
ICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICB0aGlzLnBvaW50cy5wdXNoKCBwb2ludC5jbG9uZSgpICk7CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgfQogCi0gICAgICAgIHNldFdpdGhDcmVkZW50aWFsczogZnVuY3Rp
b24gKCB2YWx1ZSApIHsKKyAgICAgICAgdGhpcy5jbG9zZWQgPSBzb3VyY2UuY2xvc2VkOworICAg
ICAgICB0aGlzLmN1cnZlVHlwZSA9IHNvdXJjZS5jdXJ2ZVR5cGU7CisgICAgICAgIHRoaXMudGVu
c2lvbiA9IHNvdXJjZS50ZW5zaW9uOwogCi0gICAgICAgICAgICB0aGlzLndpdGhDcmVkZW50aWFs
cyA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgIH0sCisgICAgfTsKIAotICAgICAgICBzZXRNaW1lVHlwZTogZnVuY3Rpb24g
KCB2YWx1ZSApIHsKKyAgICBDYXRtdWxsUm9tQ3VydmUzLnByb3RvdHlwZS50b0pTT04gPSBmdW5j
dGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHRoaXMubWltZVR5cGUgPSB2YWx1ZTsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pT
T04uY2FsbCggdGhpcyApOwogCi0gICAgICAgIH0sCisgICAgICAgIGRhdGEucG9pbnRzID0gW107
CiAKLSAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyAp
IHsKIAotICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyID0gdmFsdWU7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHZhciBwb2ludCA9IHRoaXMucG9pbnRzWyBpIF07
CisgICAgICAgICAgICBkYXRhLnBvaW50cy5wdXNoKCBwb2ludC50b0FycmF5KCkgKTsKIAogICAg
ICAgICB9CiAKLSAgICB9ICk7CisgICAgICAgIGRhdGEuY2xvc2VkID0gdGhpcy5jbG9zZWQ7Cisg
ICAgICAgIGRhdGEuY3VydmVUeXBlID0gdGhpcy5jdXJ2ZVR5cGU7CisgICAgICAgIGRhdGEudGVu
c2lvbiA9IHRoaXMudGVuc2lvbjsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8g
aHR0cDovL21yZG9vYi5jb20vCi0gICAgICoKLSAgICAgKiBBYnN0cmFjdCBCYXNlIGNsYXNzIHRv
IGJsb2NrIGJhc2VkIHRleHR1cmVzIGxvYWRlciAoZGRzLCBwdnIsIC4uLikKLSAgICAgKi8KKyAg
ICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICBmdW5jdGlvbiBDb21wcmVzc2VkVGV4dHVyZUxvYWRl
ciggbWFuYWdlciApIHsKKyAgICB9OwogCi0gICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdl
ciAhPT0gdW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOworICAg
IENhdG11bGxSb21DdXJ2ZTMucHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24gKCBqc29uICkg
ewogCi0gICAgICAgIC8vIG92ZXJyaWRlIGluIHN1YiBjbGFzc2VzCi0gICAgICAgIHRoaXMuX3Bh
cnNlciA9IG51bGw7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlz
LCBqc29uICk7CiAKLSAgICB9CisgICAgICAgIHRoaXMucG9pbnRzID0gW107CiAKLSAgICBPYmpl
Y3QuYXNzaWduKCBDb21wcmVzc2VkVGV4dHVyZUxvYWRlci5wcm90b3R5cGUsIHsKKyAgICAgICAg
Zm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5wb2ludHMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsK
IAotICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVy
cm9yICkgeworICAgICAgICAgICAgdmFyIHBvaW50ID0ganNvbi5wb2ludHNbIGkgXTsKKyAgICAg
ICAgICAgIHRoaXMucG9pbnRzLnB1c2goIG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KCBwb2ludCAp
ICk7CiAKLSAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgIH0KIAotICAgICAg
ICAgICAgdmFyIGltYWdlcyA9IFtdOworICAgICAgICB0aGlzLmNsb3NlZCA9IGpzb24uY2xvc2Vk
OworICAgICAgICB0aGlzLmN1cnZlVHlwZSA9IGpzb24uY3VydmVUeXBlOworICAgICAgICB0aGlz
LnRlbnNpb24gPSBqc29uLnRlbnNpb247CiAKLSAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3
IENvbXByZXNzZWRUZXh0dXJlKCk7Ci0gICAgICAgICAgICB0ZXh0dXJlLmltYWdlID0gaW1hZ2Vz
OworICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBG
aWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKLSAgICAgICAgICAgIGxvYWRlci5zZXRQYXRoKCB0
aGlzLnBhdGggKTsKLSAgICAgICAgICAgIGxvYWRlci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1
ZmZlcicgKTsKKyAgICB9OwogCi0gICAgICAgICAgICBmdW5jdGlvbiBsb2FkVGV4dHVyZSggaSAp
IHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIHp6ODUgLyBodHRwOi8vd3d3LmxhYjRnYW1lcy5u
ZXQveno4NS9ibG9nCisgICAgICoKKyAgICAgKiBCZXppZXIgQ3VydmVzIGZvcm11bGFzIG9idGFp
bmVkIGZyb20KKyAgICAgKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0LDqXppZXJfY3Vy
dmUKKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmxbIGkgXSwgZnVu
Y3Rpb24gKCBidWZmZXIgKSB7CisgICAgZnVuY3Rpb24gQ2F0bXVsbFJvbSggdCwgcDAsIHAxLCBw
MiwgcDMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleERhdGFzID0gc2NvcGUuX3Bh
cnNlciggYnVmZmVyLCB0cnVlICk7CisgICAgICAgIHZhciB2MCA9ICggcDIgLSBwMCApICogMC41
OworICAgICAgICB2YXIgdjEgPSAoIHAzIC0gcDEgKSAqIDAuNTsKKyAgICAgICAgdmFyIHQyID0g
dCAqIHQ7CisgICAgICAgIHZhciB0MyA9IHQgKiB0MjsKKyAgICAgICAgcmV0dXJuICggMiAqIHAx
IC0gMiAqIHAyICsgdjAgKyB2MSApICogdDMgKyAoIC0gMyAqIHAxICsgMyAqIHAyIC0gMiAqIHYw
IC0gdjEgKSAqIHQyICsgdjAgKiB0ICsgcDE7CiAKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2Vz
WyBpIF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGV4RGF0YXMud2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRleERhdGFzLmhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGV4RGF0YXMuZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgbWlwbWFwczogdGV4RGF0YXMubWlwbWFwcwotICAgICAgICAgICAgICAgICAg
ICB9OworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBsb2FkZWQgKz0gMTsKKyAgICAvLwog
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbG9hZGVkID09PSA2ICkgeworICAgIGZ1bmN0aW9u
IFF1YWRyYXRpY0JlemllclAwKCB0LCBwICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRleERhdGFzLm1pcG1hcENvdW50ID09PSAxICkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKKyAgICAgICAgdmFyIGsgPSAx
IC0gdDsKKyAgICAgICAgcmV0dXJuIGsgKiBrICogcDsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS5mb3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCB0ZXh0dXJlICk7CisgICAgZnVuY3Rpb24g
UXVhZHJhdGljQmV6aWVyUDEoIHQsIHAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICByZXR1cm4gMiAqICggMSAtIHQgKSAqIHQgKiBwOwogCi0gICAgICAgICAgICAgICAgfSwg
b25Qcm9ncmVzcywgb25FcnJvciApOworICAgIH0KIAotICAgICAgICAgICAgfQorICAgIGZ1bmN0
aW9uIFF1YWRyYXRpY0JlemllclAyKCB0LCBwICkgewogCi0gICAgICAgICAgICBpZiAoIEFycmF5
LmlzQXJyYXkoIHVybCApICkgeworICAgICAgICByZXR1cm4gdCAqIHQgKiBwOwogCi0gICAgICAg
ICAgICAgICAgdmFyIGxvYWRlZCA9IDA7CisgICAgfQogCi0gICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAwLCBpbCA9IHVybC5sZW5ndGg7IGkgPCBpbDsgKysgaSApIHsKKyAgICBmdW5jdGlv
biBRdWFkcmF0aWNCZXppZXIoIHQsIHAwLCBwMSwgcDIgKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgbG9hZFRleHR1cmUoIGkgKTsKKyAgICAgICAgcmV0dXJuIFF1YWRyYXRpY0JlemllclAwKCB0
LCBwMCApICsgUXVhZHJhdGljQmV6aWVyUDEoIHQsIHAxICkgKworICAgICAgICAgICAgUXVhZHJh
dGljQmV6aWVyUDIoIHQsIHAyICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgICAgICB9IGVsc2UgeworICAgIC8vCiAKLSAgICAgICAgICAgICAgICAvLyBjb21wcmVzc2Vk
IGN1YmVtYXAgdGV4dHVyZSBzdG9yZWQgaW4gYSBzaW5nbGUgRERTIGZpbGUKKyAgICBmdW5jdGlv
biBDdWJpY0JlemllclAwKCB0LCBwICkgewogCi0gICAgICAgICAgICAgICAgbG9hZGVyLmxvYWQo
IHVybCwgZnVuY3Rpb24gKCBidWZmZXIgKSB7CisgICAgICAgIHZhciBrID0gMSAtIHQ7CisgICAg
ICAgIHJldHVybiBrICogayAqIGsgKiBwOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciB0ZXhE
YXRhcyA9IHNjb3BlLl9wYXJzZXIoIGJ1ZmZlciwgdHJ1ZSApOworICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRleERhdGFzLmlzQ3ViZW1hcCApIHsKKyAgICBmdW5jdGlvbiBDdWJp
Y0JlemllclAxKCB0LCBwICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZXMg
PSB0ZXhEYXRhcy5taXBtYXBzLmxlbmd0aCAvIHRleERhdGFzLm1pcG1hcENvdW50OworICAgICAg
ICB2YXIgayA9IDEgLSB0OworICAgICAgICByZXR1cm4gMyAqIGsgKiBrICogdCAqIHA7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBmID0gMDsgZiA8IGZhY2VzOyBmICsrICkg
eworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1sgZiBdID0geyBt
aXBtYXBzIDogW10gfTsKKyAgICBmdW5jdGlvbiBDdWJpY0JlemllclAyKCB0LCBwICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGV4RGF0YXMu
bWlwbWFwQ291bnQ7IGkgKysgKSB7CisgICAgICAgIHJldHVybiAzICogKCAxIC0gdCApICogdCAq
IHQgKiBwOworCisgICAgfQorCisgICAgZnVuY3Rpb24gQ3ViaWNCZXppZXJQMyggdCwgcCApIHsK
KworICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogcDsKKworICAgIH0KKworICAgIGZ1bmN0aW9u
IEN1YmljQmV6aWVyKCB0LCBwMCwgcDEsIHAyLCBwMyApIHsKKworICAgICAgICByZXR1cm4gQ3Vi
aWNCZXppZXJQMCggdCwgcDAgKSArIEN1YmljQmV6aWVyUDEoIHQsIHAxICkgKyBDdWJpY0Jlemll
clAyKCB0LCBwMiApICsKKyAgICAgICAgICAgIEN1YmljQmV6aWVyUDMoIHQsIHAzICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBmIF0ubWlwbWFwcy5wdXNoKCB0
ZXhEYXRhcy5taXBtYXBzWyBmICogdGV4RGF0YXMubWlwbWFwQ291bnQgKyBpIF0gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBmIF0uZm9ybWF0ID0gdGV4RGF0YXMu
Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbIGYgXS53aWR0
aCA9IHRleERhdGFzLndpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFn
ZXNbIGYgXS5oZWlnaHQgPSB0ZXhEYXRhcy5oZWlnaHQ7CisgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgIGZ1bmN0aW9uIEN1YmljQmV6aWVyQ3VydmUoIHYwLCB2MSwg
djIsIHYzICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIEN1cnZlLmNh
bGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB0aGlz
LnR5cGUgPSAnQ3ViaWNCZXppZXJDdXJ2ZSc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUuaW1hZ2Uud2lkdGggPSB0ZXhEYXRhcy53aWR0aDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUuaW1hZ2UuaGVpZ2h0ID0gdGV4RGF0YXMuaGVpZ2h0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS5taXBtYXBzID0gdGV4RGF0YXMubWlwbWFwczsKKyAgICAgICAg
dGhpcy52MCA9IHYwIHx8IG5ldyBWZWN0b3IyKCk7CisgICAgICAgIHRoaXMudjEgPSB2MSB8fCBu
ZXcgVmVjdG9yMigpOworICAgICAgICB0aGlzLnYyID0gdjIgfHwgbmV3IFZlY3RvcjIoKTsKKyAg
ICAgICAgdGhpcy52MyA9IHYzIHx8IG5ldyBWZWN0b3IyKCk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHRleERhdGFzLm1pcG1hcENv
dW50ID09PSAxICkgeworICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZSggQ3VydmUucHJvdG90eXBlICk7CisgICAgQ3ViaWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBDdWJpY0JlemllckN1cnZlOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKKyAgICBDdWJpY0JlemllckN1cnZl
LnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICBDdWJpY0JlemllckN1cnZlLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9u
ICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5m
b3JtYXQgPSB0ZXhEYXRhcy5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUubmVl
ZHNVcGRhdGUgPSB0cnVlOworICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBu
ZXcgVmVjdG9yMigpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2Fk
KCB0ZXh0dXJlICk7CisgICAgICAgIHZhciB2MCA9IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIg
PSB0aGlzLnYyLCB2MyA9IHRoaXMudjM7CiAKLSAgICAgICAgICAgICAgICB9LCBvblByb2dyZXNz
LCBvbkVycm9yICk7CisgICAgICAgIHBvaW50LnNldCgKKyAgICAgICAgICAgIEN1YmljQmV6aWVy
KCB0LCB2MC54LCB2MS54LCB2Mi54LCB2My54ICksCisgICAgICAgICAgICBDdWJpY0Jlemllcigg
dCwgdjAueSwgdjEueSwgdjIueSwgdjMueSApCisgICAgICAgICk7CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHBvaW50OwogCi0gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OwogCi0gICAgICAgIH0sCisgICAgQ3ViaWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUuY29weSA9
IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAgICAgIHNldFBhdGg6IGZ1bmN0aW9uICggdmFs
dWUgKSB7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSAp
OwogCi0gICAgICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB0aGlzLnYwLmNvcHkoIHNvdXJjZS52MCApOworICAgICAgICB0aGlzLnYx
LmNvcHkoIHNvdXJjZS52MSApOworICAgICAgICB0aGlzLnYyLmNvcHkoIHNvdXJjZS52MiApOwor
ICAgICAgICB0aGlzLnYzLmNvcHkoIHNvdXJjZS52MyApOwogCi0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICB9ICk7CisgICAgfTsKIAotICAgIC8qKgotICAgICAqIEBhdXRo
b3IgTmlrb3MgTS4gLyBodHRwczovL2dpdGh1Yi5jb20vZm9vMTIzLwotICAgICAqCi0gICAgICog
QWJzdHJhY3QgQmFzZSBjbGFzcyB0byBsb2FkIGdlbmVyaWMgYmluYXJ5IHRleHR1cmVzIGZvcm1h
dHMgKHJnYmUsIGhkciwgLi4uKQotICAgICAqLworICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90
eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKIAotICAgIGZ1bmN0aW9uIERhdGFUZXh0dXJlTG9h
ZGVyKCBtYW5hZ2VyICkgeworICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pT
T04uY2FsbCggdGhpcyApOwogCi0gICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0g
dW5kZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOworICAgICAgICBk
YXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7CisgICAgICAgIGRhdGEudjEgPSB0aGlzLnYxLnRv
QXJyYXkoKTsKKyAgICAgICAgZGF0YS52MiA9IHRoaXMudjIudG9BcnJheSgpOworICAgICAgICBk
YXRhLnYzID0gdGhpcy52My50b0FycmF5KCk7CiAKLSAgICAgICAgLy8gb3ZlcnJpZGUgaW4gc3Vi
IGNsYXNzZXMKLSAgICAgICAgdGhpcy5fcGFyc2VyID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIGRh
dGE7CiAKLSAgICB9CisgICAgfTsKIAotICAgIE9iamVjdC5hc3NpZ24oIERhdGFUZXh0dXJlTG9h
ZGVyLnByb3RvdHlwZSwgeworICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBlLmZyb21KU09O
ID0gZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBv
bkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5m
cm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CiAKLSAgICAgICAgICAgIHZhciBzY29wZSA9IHRo
aXM7CisgICAgICAgIHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7CisgICAgICAgIHRoaXMu
djEuZnJvbUFycmF5KCBqc29uLnYxICk7CisgICAgICAgIHRoaXMudjIuZnJvbUFycmF5KCBqc29u
LnYyICk7CisgICAgICAgIHRoaXMudjMuZnJvbUFycmF5KCBqc29uLnYzICk7CiAKLSAgICAgICAg
ICAgIHZhciB0ZXh0dXJlID0gbmV3IERhdGFUZXh0dXJlKCk7CisgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoIHRoaXMubWFuYWdl
ciApOwotICAgICAgICAgICAgbG9hZGVyLnNldFJlc3BvbnNlVHlwZSggJ2FycmF5YnVmZmVyJyAp
OworICAgIH07CiAKLSAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggYnVm
ZmVyICkgeworICAgIGZ1bmN0aW9uIEN1YmljQmV6aWVyQ3VydmUzKCB2MCwgdjEsIHYyLCB2MyAp
IHsKIAotICAgICAgICAgICAgICAgIHZhciB0ZXhEYXRhID0gc2NvcGUuX3BhcnNlciggYnVmZmVy
ICk7CisgICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIGlmICgg
ISB0ZXhEYXRhICkgcmV0dXJuOworICAgICAgICB0aGlzLnR5cGUgPSAnQ3ViaWNCZXppZXJDdXJ2
ZTMnOwogCi0gICAgICAgICAgICAgICAgaWYgKCB1bmRlZmluZWQgIT09IHRleERhdGEuaW1hZ2Ug
KSB7CisgICAgICAgIHRoaXMudjAgPSB2MCB8fCBuZXcgVmVjdG9yMygpOworICAgICAgICB0aGlz
LnYxID0gdjEgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdGhpcy52MiA9IHYyIHx8IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgIHRoaXMudjMgPSB2MyB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUuaW1hZ2UgPSB0ZXhEYXRhLmltYWdlOworICAgIH0KIAot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHVuZGVmaW5lZCAhPT0gdGV4RGF0YS5kYXRhICkg
eworICAgIEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZl
LnByb3RvdHlwZSApOworICAgIEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IEN1YmljQmV6aWVyQ3VydmUzOwogCi0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUuaW1h
Z2Uud2lkdGggPSB0ZXhEYXRhLndpZHRoOwotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmlt
YWdlLmhlaWdodCA9IHRleERhdGEuaGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LmltYWdlLmRhdGEgPSB0ZXhEYXRhLmRhdGE7CisgICAgQ3ViaWNCZXppZXJDdXJ2ZTMucHJvdG90
eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTMgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgfQorICAg
IEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCwgb3B0
aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLndyYXBTID0gdW5kZWZp
bmVkICE9PSB0ZXhEYXRhLndyYXBTID8gdGV4RGF0YS53cmFwUyA6IENsYW1wVG9FZGdlV3JhcHBp
bmc7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS53cmFwVCA9IHVuZGVmaW5lZCAhPT0gdGV4RGF0
YS53cmFwVCA/IHRleERhdGEud3JhcFQgOiBDbGFtcFRvRWRnZVdyYXBwaW5nOworICAgICAgICB2
YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAgICAgICAg
ICAgICAgdGV4dHVyZS5tYWdGaWx0ZXIgPSB1bmRlZmluZWQgIT09IHRleERhdGEubWFnRmlsdGVy
ID8gdGV4RGF0YS5tYWdGaWx0ZXIgOiBMaW5lYXJGaWx0ZXI7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZS5taW5GaWx0ZXIgPSB1bmRlZmluZWQgIT09IHRleERhdGEubWluRmlsdGVyID8gdGV4RGF0
YS5taW5GaWx0ZXIgOiBMaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI7CisgICAgICAgIHZhciB2MCA9
IHRoaXMudjAsIHYxID0gdGhpcy52MSwgdjIgPSB0aGlzLnYyLCB2MyA9IHRoaXMudjM7CiAKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlLmFuaXNvdHJvcHkgPSB1bmRlZmluZWQgIT09IHRleERhdGEu
YW5pc290cm9weSA/IHRleERhdGEuYW5pc290cm9weSA6IDE7CisgICAgICAgIHBvaW50LnNldCgK
KyAgICAgICAgICAgIEN1YmljQmV6aWVyKCB0LCB2MC54LCB2MS54LCB2Mi54LCB2My54ICksCisg
ICAgICAgICAgICBDdWJpY0JlemllciggdCwgdjAueSwgdjEueSwgdjIueSwgdjMueSApLAorICAg
ICAgICAgICAgQ3ViaWNCZXppZXIoIHQsIHYwLnosIHYxLnosIHYyLnosIHYzLnogKQorICAgICAg
ICApOwogCi0gICAgICAgICAgICAgICAgaWYgKCB1bmRlZmluZWQgIT09IHRleERhdGEuZm9ybWF0
ICkgeworICAgICAgICByZXR1cm4gcG9pbnQ7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS5mb3JtYXQgPSB0ZXhEYXRhLmZvcm1hdDsKKyAgICB9OwogCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmICggdW5kZWZpbmVkICE9PSB0ZXhEYXRhLnR5cGUgKSB7CisgICAg
Q3ViaWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsK
IAotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSB0ZXhEYXRhLnR5cGU7CisgICAg
ICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICB0aGlzLnYwLmNvcHkoIHNvdXJjZS52MCApOworICAgICAgICB0
aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApOworICAgICAgICB0aGlzLnYyLmNvcHkoIHNvdXJjZS52
MiApOworICAgICAgICB0aGlzLnYzLmNvcHkoIHNvdXJjZS52MyApOwogCi0gICAgICAgICAgICAg
ICAgaWYgKCB1bmRlZmluZWQgIT09IHRleERhdGEubWlwbWFwcyApIHsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5taXBtYXBzID0gdGV4RGF0YS5t
aXBtYXBzOworICAgIH07CiAKLSAgICAgICAgICAgICAgICB9CisgICAgQ3ViaWNCZXppZXJDdXJ2
ZTMucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgICAgIGlm
ICggMSA9PT0gdGV4RGF0YS5taXBtYXBDb3VudCApIHsKKyAgICAgICAgdmFyIGRhdGEgPSBDdXJ2
ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLm1pbkZpbHRlciA9IExpbmVhckZpbHRlcjsKKyAgICAgICAgZGF0YS52MCA9IHRoaXMu
djAudG9BcnJheSgpOworICAgICAgICBkYXRhLnYxID0gdGhpcy52MS50b0FycmF5KCk7CisgICAg
ICAgIGRhdGEudjIgPSB0aGlzLnYyLnRvQXJyYXkoKTsKKyAgICAgICAgZGF0YS52MyA9IHRoaXMu
djMudG9BcnJheSgpOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsK
IAotICAgICAgICAgICAgICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlOworICAgIH07CiAK
LSAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggdGV4dHVyZSwgdGV4RGF0YSAp
OworICAgIEN1YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgg
anNvbiApIHsKIAotICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywgb25FcnJvciApOworICAgICAg
ICBDdXJ2ZS5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCggdGhpcywganNvbiApOwogCisgICAgICAg
IHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7CisgICAgICAgIHRoaXMudjEuZnJvbUFycmF5
KCBqc29uLnYxICk7CisgICAgICAgIHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7CisgICAg
ICAgIHRoaXMudjMuZnJvbUFycmF5KCBqc29uLnYzICk7CiAKLSAgICAgICAgICAgIHJldHVybiB0
ZXh0dXJlOworICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICB9CisgICAgfTsKIAotICAg
IH0gKTsKKyAgICBmdW5jdGlvbiBMaW5lQ3VydmUoIHYxLCB2MiApIHsKIAotICAgIC8qKgotICAg
ICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAg
IEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAgIGZ1bmN0aW9uIEltYWdlTG9hZGVyKCBtYW5hZ2Vy
ICkgeworICAgICAgICB0aGlzLnR5cGUgPSAnTGluZUN1cnZlJzsKIAotICAgICAgICB0aGlzLm1h
bmFnZXIgPSAoIG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2Fk
aW5nTWFuYWdlcjsKKyAgICAgICAgdGhpcy52MSA9IHYxIHx8IG5ldyBWZWN0b3IyKCk7CisgICAg
ICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9yMigpOwogCiAgICAgfQogCi0gICAgT2JqZWN0
LmFzc2lnbiggSW1hZ2VMb2FkZXIucHJvdG90eXBlLCB7CisgICAgTGluZUN1cnZlLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlwZSApOworICAgIExpbmVDdXJ2ZS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBMaW5lQ3VydmU7CiAKLSAgICAgICAgbG9hZDogZnVuY3Rpb24g
KCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKKyAgICBMaW5lQ3VydmUucHJv
dG90eXBlLmlzTGluZUN1cnZlID0gdHJ1ZTsKIAotICAgICAgICAgICAgaWYgKCB1cmwgPT09IHVu
ZGVmaW5lZCApIHVybCA9ICcnOworICAgIExpbmVDdXJ2ZS5wcm90b3R5cGUuZ2V0UG9pbnQgPSBm
dW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0ICkgewogCi0gICAgICAgICAgICBpZiAoIHRoaXMu
cGF0aCAhPT0gdW5kZWZpbmVkICkgdXJsID0gdGhpcy5wYXRoICsgdXJsOworICAgICAgICB2YXIg
cG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgVmVjdG9yMigpOwogCi0gICAgICAgICAgICB2
YXIgc2NvcGUgPSB0aGlzOworICAgICAgICBpZiAoIHQgPT09IDEgKSB7CiAKLSAgICAgICAgICAg
IHZhciBjYWNoZWQgPSBDYWNoZS5nZXQoIHVybCApOworICAgICAgICAgICAgcG9pbnQuY29weSgg
dGhpcy52MiApOwogCi0gICAgICAgICAgICBpZiAoIGNhY2hlZCAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtU3Rh
cnQoIHVybCApOworICAgICAgICAgICAgcG9pbnQuY29weSggdGhpcy52MiApLnN1YiggdGhpcy52
MSApOworICAgICAgICAgICAgcG9pbnQubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMudjEg
KTsKIAotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgICAgIGlmICggb25Mb2FkICkgb25Mb2FkKCBjYWNoZWQgKTsK
KyAgICAgICAgcmV0dXJuIHBvaW50OwogCi0gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFn
ZXIuaXRlbUVuZCggdXJsICk7CisgICAgfTsKIAotICAgICAgICAgICAgICAgIH0sIDAgKTsKKyAg
ICAvLyBMaW5lIGN1cnZlIGlzIGxpbmVhciwgc28gd2UgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0IGdl
dFBvaW50QXQKIAotICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7CisgICAgTGluZUN1cnZl
LnByb3RvdHlwZS5nZXRQb2ludEF0ID0gZnVuY3Rpb24gKCB1LCBvcHRpb25hbFRhcmdldCApIHsK
IAotICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludCggdSwgb3B0aW9u
YWxUYXJnZXQgKTsKIAotICAgICAgICAgICAgdmFyIGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudE5TKCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdpbWcnICk7CisgICAgfTsK
IAotICAgICAgICAgICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lciggJ2xvYWQnLCBmdW5jdGlvbiAo
KSB7CisgICAgTGluZUN1cnZlLnByb3RvdHlwZS5nZXRUYW5nZW50ID0gZnVuY3Rpb24gKCAvKiB0
ICovICkgewogCi0gICAgICAgICAgICAgICAgQ2FjaGUuYWRkKCB1cmwsIHRoaXMgKTsKKyAgICAg
ICAgdmFyIHRhbmdlbnQgPSB0aGlzLnYyLmNsb25lKCkuc3ViKCB0aGlzLnYxICk7CiAKLSAgICAg
ICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggdGhpcyApOworICAgICAgICByZXR1cm4g
dGFuZ2VudC5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRl
bUVuZCggdXJsICk7CisgICAgfTsKIAotICAgICAgICAgICAgfSwgZmFsc2UgKTsKKyAgICBMaW5l
Q3VydmUucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICAg
ICAgLyoKLSAgICAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoICdwcm9ncmVzcycsIGZ1
bmN0aW9uICggZXZlbnQgKSB7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRo
aXMsIHNvdXJjZSApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBvblByb2dyZXNzICkgb25Qcm9n
cmVzcyggZXZlbnQgKTsKKyAgICAgICAgdGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTsKKyAgICAg
ICAgdGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKIAotICAgICAgICAgICAgfSwgZmFsc2UgKTsK
LSAgICAgICAgICAgICovCisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBpbWFn
ZS5hZGRFdmVudExpc3RlbmVyKCAnZXJyb3InLCBmdW5jdGlvbiAoIGV2ZW50ICkgeworICAgIH07
CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9uRXJyb3IgKSBvbkVycm9yKCBldmVudCApOworICAg
IExpbmVDdXJ2ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAg
ICAgICAgc2NvcGUubWFuYWdlci5pdGVtRW5kKCB1cmwgKTsKLSAgICAgICAgICAgICAgICBzY29w
ZS5tYW5hZ2VyLml0ZW1FcnJvciggdXJsICk7CisgICAgICAgIHZhciBkYXRhID0gQ3VydmUucHJv
dG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgIH0sIGZhbHNlICk7Cisg
ICAgICAgIGRhdGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTsKKyAgICAgICAgZGF0YS52MiA9IHRo
aXMudjIudG9BcnJheSgpOwogCi0gICAgICAgICAgICBpZiAoIHVybC5zdWJzdHIoIDAsIDUgKSAh
PT0gJ2RhdGE6JyApIHsKKyAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIHRoaXMuY3Jvc3NPcmlnaW4gIT09IHVuZGVmaW5lZCApIGltYWdlLmNyb3NzT3JpZ2luID0g
dGhpcy5jcm9zc09yaWdpbjsKKyAgICB9OwogCi0gICAgICAgICAgICB9CisgICAgTGluZUN1cnZl
LnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAgICAgICAgICAg
c2NvcGUubWFuYWdlci5pdGVtU3RhcnQoIHVybCApOworICAgICAgICBDdXJ2ZS5wcm90b3R5cGUu
ZnJvbUpTT04uY2FsbCggdGhpcywganNvbiApOwogCi0gICAgICAgICAgICBpbWFnZS5zcmMgPSB1
cmw7CisgICAgICAgIHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7CisgICAgICAgIHRoaXMu
djIuZnJvbUFycmF5KCBqc29uLnYyICk7CiAKLSAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgfSwKKyAgICB9OwogCi0gICAgICAgIHNldENy
b3NzT3JpZ2luOiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgIGZ1bmN0aW9uIExpbmVDdXJ2ZTMo
IHYxLCB2MiApIHsKIAotICAgICAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHZhbHVlOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAg
ICAgICB9LAorICAgICAgICB0aGlzLnR5cGUgPSAnTGluZUN1cnZlMyc7CiAKLSAgICAgICAgc2V0
UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgdGhpcy52MSA9IHYxIHx8IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9yMygpOwogCi0gICAg
ICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
IH0KIAotICAgICAgICB9CisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KCBDdXJ2ZS5wcm90b3R5cGUgKTsKKyAgICBMaW5lQ3VydmUzLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IExpbmVDdXJ2ZTM7CiAKLSAgICB9ICk7CisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUuaXNM
aW5lQ3VydmUzID0gdHJ1ZTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0
cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUuZ2V0UG9p
bnQgPSBmdW5jdGlvbiAoIHQsIG9wdGlvbmFsVGFyZ2V0ICkgewogCi0gICAgZnVuY3Rpb24gQ3Vi
ZVRleHR1cmVMb2FkZXIoIG1hbmFnZXIgKSB7CisgICAgICAgIHZhciBwb2ludCA9IG9wdGlvbmFs
VGFyZ2V0IHx8IG5ldyBWZWN0b3IzKCk7CiAKLSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5h
Z2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7Cisg
ICAgICAgIGlmICggdCA9PT0gMSApIHsKIAotICAgIH0KKyAgICAgICAgICAgIHBvaW50LmNvcHko
IHRoaXMudjIgKTsKIAotICAgIE9iamVjdC5hc3NpZ24oIEN1YmVUZXh0dXJlTG9hZGVyLnByb3Rv
dHlwZSwgeworICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJs
cywgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgeworICAgICAgICAgICAgcG9pbnQuY29w
eSggdGhpcy52MiApLnN1YiggdGhpcy52MSApOworICAgICAgICAgICAgcG9pbnQubXVsdGlwbHlT
Y2FsYXIoIHQgKS5hZGQoIHRoaXMudjEgKTsKIAotICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBu
ZXcgQ3ViZVRleHR1cmUoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgbG9hZGVyID0g
bmV3IEltYWdlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKLSAgICAgICAgICAgIGxvYWRlci5zZXRD
cm9zc09yaWdpbiggdGhpcy5jcm9zc09yaWdpbiApOwotICAgICAgICAgICAgbG9hZGVyLnNldFBh
dGgoIHRoaXMucGF0aCApOworICAgICAgICByZXR1cm4gcG9pbnQ7CiAKLSAgICAgICAgICAgIHZh
ciBsb2FkZWQgPSAwOworICAgIH07CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGxvYWRUZXh0dXJl
KCBpICkgeworICAgIC8vIExpbmUgY3VydmUgaXMgbGluZWFyLCBzbyB3ZSBjYW4gb3ZlcndyaXRl
IGRlZmF1bHQgZ2V0UG9pbnRBdAogCi0gICAgICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybHNb
IGkgXSwgZnVuY3Rpb24gKCBpbWFnZSApIHsKKyAgICBMaW5lQ3VydmUzLnByb3RvdHlwZS5nZXRQ
b2ludEF0ID0gZnVuY3Rpb24gKCB1LCBvcHRpb25hbFRhcmdldCApIHsKIAotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLmltYWdlc1sgaSBdID0gaW1hZ2U7CisgICAgICAgIHJldHVybiB0aGlz
LmdldFBvaW50KCB1LCBvcHRpb25hbFRhcmdldCApOwogCi0gICAgICAgICAgICAgICAgICAgIGxv
YWRlZCArKzsKKyAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggbG9hZGVkID09PSA2
ICkgeworICAgIExpbmVDdXJ2ZTMucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoIHNvdXJjZSAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7
CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCApIG9uTG9hZCggdGV4dHVyZSApOwor
ICAgICAgICB0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApOworICAgICAgICB0aGlzLnYyLmNvcHko
IHNvdXJjZS52MiApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIG9uRXJyb3IgKTsKKyAgICB9Owog
Ci0gICAgICAgICAgICB9CisgICAgTGluZUN1cnZlMy5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rp
b24gKCkgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsg
KysgaSApIHsKKyAgICAgICAgdmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNhbGwo
IHRoaXMgKTsKIAotICAgICAgICAgICAgICAgIGxvYWRUZXh0dXJlKCBpICk7CisgICAgICAgIGRh
dGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTsKKyAgICAgICAgZGF0YS52MiA9IHRoaXMudjIudG9B
cnJheSgpOwogCi0gICAgICAgICAgICB9CisgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgICAg
ICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9OwogCi0gICAgICAgIH0sCisgICAgTGluZUN1cnZl
My5wcm90b3R5cGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoIGpzb24gKSB7CiAKLSAgICAgICAgc2V0
Q3Jvc3NPcmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgICAgIEN1cnZlLnByb3RvdHlw
ZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CiAKLSAgICAgICAgICAgIHRoaXMuY3Jvc3NP
cmlnaW4gPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB0aGlzLnYx
LmZyb21BcnJheSgganNvbi52MSApOworICAgICAgICB0aGlzLnYyLmZyb21BcnJheSgganNvbi52
MiApOwogCi0gICAgICAgIH0sCisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgIHNldFBh
dGg6IGZ1bmN0aW9uICggdmFsdWUgKSB7CisgICAgfTsKIAotICAgICAgICAgICAgdGhpcy5wYXRo
ID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICBmdW5jdGlvbiBRdWFkcmF0
aWNCZXppZXJDdXJ2ZSggdjAsIHYxLCB2MiApIHsKIAotICAgICAgICB9CisgICAgICAgIEN1cnZl
LmNhbGwoIHRoaXMgKTsKIAotICAgIH0gKTsKKyAgICAgICAgdGhpcy50eXBlID0gJ1F1YWRyYXRp
Y0JlemllckN1cnZlJzsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDov
L21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgIHRoaXMudjAgPSB2MCB8fCBuZXcgVmVjdG9y
MigpOworICAgICAgICB0aGlzLnYxID0gdjEgfHwgbmV3IFZlY3RvcjIoKTsKKyAgICAgICAgdGhp
cy52MiA9IHYyIHx8IG5ldyBWZWN0b3IyKCk7CiAKLSAgICBmdW5jdGlvbiBUZXh0dXJlTG9hZGVy
KCBtYW5hZ2VyICkgeworICAgIH0KIAotICAgICAgICB0aGlzLm1hbmFnZXIgPSAoIG1hbmFnZXIg
IT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjsKKyAgICBR
dWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90
b3R5cGUgKTsKKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBRdWFkcmF0aWNCZXppZXJDdXJ2ZTsKIAotICAgIH0KKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2
ZS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZSA9IHRydWU7CiAKLSAgICBPYmplY3Qu
YXNzaWduKCBUZXh0dXJlTG9hZGVyLnByb3RvdHlwZSwgeworICAgIFF1YWRyYXRpY0JlemllckN1
cnZlLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7
CiAKLSAgICAgICAgbG9hZDogZnVuY3Rpb24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25F
cnJvciApIHsKKyAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9uYWxUYXJnZXQgfHwgbmV3IFZlY3Rv
cjIoKTsKIAotICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggdGhpcy5t
YW5hZ2VyICk7Ci0gICAgICAgICAgICBsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIHRoaXMuY3Jvc3NP
cmlnaW4gKTsKLSAgICAgICAgICAgIGxvYWRlci5zZXRQYXRoKCB0aGlzLnBhdGggKTsKKyAgICAg
ICAgdmFyIHYwID0gdGhpcy52MCwgdjEgPSB0aGlzLnYxLCB2MiA9IHRoaXMudjI7CiAKLSAgICAg
ICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUoKTsKLSAgICAgICAgICAgIHRleHR1cmUu
aW1hZ2UgPSBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHBvaW50LnNl
dCgKKyAgICAgICAgICAgIFF1YWRyYXRpY0JlemllciggdCwgdjAueCwgdjEueCwgdjIueCApLAor
ICAgICAgICAgICAgUXVhZHJhdGljQmV6aWVyKCB0LCB2MC55LCB2MS55LCB2Mi55ICkKKyAgICAg
ICAgKTsKIAotICAgICAgICAgICAgICAgIC8vIEpQRUdzIGNhbid0IGhhdmUgYW4gYWxwaGEgY2hh
bm5lbCwgc28gbWVtb3J5IGNhbiBiZSBzYXZlZCBieSBzdG9yaW5nIHRoZW0gYXMgUkdCLgotICAg
ICAgICAgICAgICAgIHZhciBpc0pQRUcgPSB1cmwuc2VhcmNoKCAvXC4oanBnfGpwZWcpJC8gKSA+
IDAgfHwgdXJsLnNlYXJjaCggL15kYXRhXDppbWFnZVwvanBlZy8gKSA9PT0gMDsKKyAgICAgICAg
cmV0dXJuIHBvaW50OwogCi0gICAgICAgICAgICAgICAgdGV4dHVyZS5mb3JtYXQgPSBpc0pQRUcg
PyBSR0JGb3JtYXQgOiBSR0JBRm9ybWF0OwotICAgICAgICAgICAgICAgIHRleHR1cmUubmVlZHNV
cGRhdGUgPSB0cnVlOworICAgIH07CiAKLSAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCAhPT0g
dW5kZWZpbmVkICkgeworICAgIFF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5jb3B5ID0g
ZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgb25Mb2FkKCB0ZXh0
dXJlICk7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSAp
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB0aGlzLnYwLmNvcHkoIHNvdXJjZS52MCAp
OworICAgICAgICB0aGlzLnYxLmNvcHkoIHNvdXJjZS52MSApOworICAgICAgICB0aGlzLnYyLmNv
cHkoIHNvdXJjZS52MiApOwogCi0gICAgICAgICAgICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7
CisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAg
ICB9OwogCi0gICAgICAgIH0sCisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUucHJvdG90eXBlLnRv
SlNPTiA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICBzZXRDcm9zc09yaWdpbjogZnVuY3Rpb24g
KCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGRhdGEgPSBDdXJ2ZS5wcm90b3R5cGUudG9KU09OLmNh
bGwoIHRoaXMgKTsKIAotICAgICAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9IHZhbHVlOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGRhdGEudjAgPSB0aGlzLnYwLnRvQXJyYXko
KTsKKyAgICAgICAgZGF0YS52MSA9IHRoaXMudjEudG9BcnJheSgpOworICAgICAgICBkYXRhLnYy
ID0gdGhpcy52Mi50b0FycmF5KCk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgcmV0dXJuIGRhdGE7
CiAKLSAgICAgICAgc2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICB9OwogCi0gICAg
ICAgICAgICB0aGlzLnBhdGggPSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
IFF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNv
biApIHsKIAotICAgICAgICB9CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxs
KCB0aGlzLCBqc29uICk7CiAKLSAgICB9ICk7CisgICAgICAgIHRoaXMudjAuZnJvbUFycmF5KCBq
c29uLnYwICk7CisgICAgICAgIHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7CisgICAgICAg
IHRoaXMudjIuZnJvbUFycmF5KCBqc29uLnYyICk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9y
IG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBo
dHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgZnVuY3Rpb24gTGlnaHQoIGNvbG9yLCBpbnRlbnNpdHkgKSB7CisgICAgfTsKIAotICAg
ICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CisgICAgZnVuY3Rpb24gUXVhZHJhdGljQmV6aWVy
Q3VydmUzKCB2MCwgdjEsIHYyICkgewogCi0gICAgICAgIHRoaXMudHlwZSA9ICdMaWdodCc7Cisg
ICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENv
bG9yKCBjb2xvciApOwotICAgICAgICB0aGlzLmludGVuc2l0eSA9IGludGVuc2l0eSAhPT0gdW5k
ZWZpbmVkID8gaW50ZW5zaXR5IDogMTsKKyAgICAgICAgdGhpcy50eXBlID0gJ1F1YWRyYXRpY0Jl
emllckN1cnZlMyc7CiAKLSAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gdW5kZWZpbmVkOwor
ICAgICAgICB0aGlzLnYwID0gdjAgfHwgbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgdGhpcy52MSA9
IHYxIHx8IG5ldyBWZWN0b3IzKCk7CisgICAgICAgIHRoaXMudjIgPSB2MiB8fCBuZXcgVmVjdG9y
MygpOwogCiAgICAgfQogCi0gICAgTGlnaHQucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2Jq
ZWN0LmNyZWF0ZSggT2JqZWN0M0QucHJvdG90eXBlICksIHsKKyAgICBRdWFkcmF0aWNCZXppZXJD
dXJ2ZTMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7CisgICAg
UXVhZHJhdGljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFF1YWRyYXRpY0Jl
emllckN1cnZlMzsKIAotICAgICAgICBjb25zdHJ1Y3RvcjogTGlnaHQsCisgICAgUXVhZHJhdGlj
QmV6aWVyQ3VydmUzLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMyA9IHRydWU7CiAK
LSAgICAgICAgaXNMaWdodDogdHJ1ZSwKKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90
eXBlLmdldFBvaW50ID0gZnVuY3Rpb24gKCB0LCBvcHRpb25hbFRhcmdldCApIHsKIAotICAgICAg
ICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9u
YWxUYXJnZXQgfHwgbmV3IFZlY3RvcjMoKTsKIAotICAgICAgICAgICAgT2JqZWN0M0QucHJvdG90
eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgICAgIHZhciB2MCA9IHRoaXMudjAs
IHYxID0gdGhpcy52MSwgdjIgPSB0aGlzLnYyOwogCi0gICAgICAgICAgICB0aGlzLmNvbG9yLmNv
cHkoIHNvdXJjZS5jb2xvciApOwotICAgICAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBzb3VyY2Uu
aW50ZW5zaXR5OworICAgICAgICBwb2ludC5zZXQoCisgICAgICAgICAgICBRdWFkcmF0aWNCZXpp
ZXIoIHQsIHYwLngsIHYxLngsIHYyLnggKSwKKyAgICAgICAgICAgIFF1YWRyYXRpY0Jlemllcigg
dCwgdjAueSwgdjEueSwgdjIueSApLAorICAgICAgICAgICAgUXVhZHJhdGljQmV6aWVyKCB0LCB2
MC56LCB2MS56LCB2Mi56ICkKKyAgICAgICAgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgIHJldHVybiBwb2ludDsKIAotICAgICAgICB9LAorICAgIH07CiAKLSAgICAgICAg
dG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUzLnBy
b3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgICAgIHZhciBk
YXRhID0gT2JqZWN0M0QucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzLCBtZXRhICk7CisgICAg
ICAgIEN1cnZlLnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAg
ICAgICBkYXRhLm9iamVjdC5jb2xvciA9IHRoaXMuY29sb3IuZ2V0SGV4KCk7Ci0gICAgICAgICAg
ICBkYXRhLm9iamVjdC5pbnRlbnNpdHkgPSB0aGlzLmludGVuc2l0eTsKKyAgICAgICAgdGhpcy52
MC5jb3B5KCBzb3VyY2UudjAgKTsKKyAgICAgICAgdGhpcy52MS5jb3B5KCBzb3VyY2UudjEgKTsK
KyAgICAgICAgdGhpcy52Mi5jb3B5KCBzb3VyY2UudjIgKTsKIAotICAgICAgICAgICAgaWYgKCB0
aGlzLmdyb3VuZENvbG9yICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5ncm91bmRDb2xvciA9
IHRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCk7CisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAg
ICAgICAgICBpZiAoIHRoaXMuZGlzdGFuY2UgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LmRp
c3RhbmNlID0gdGhpcy5kaXN0YW5jZTsKLSAgICAgICAgICAgIGlmICggdGhpcy5hbmdsZSAhPT0g
dW5kZWZpbmVkICkgZGF0YS5vYmplY3QuYW5nbGUgPSB0aGlzLmFuZ2xlOwotICAgICAgICAgICAg
aWYgKCB0aGlzLmRlY2F5ICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5kZWNheSA9IHRoaXMu
ZGVjYXk7Ci0gICAgICAgICAgICBpZiAoIHRoaXMucGVudW1icmEgIT09IHVuZGVmaW5lZCApIGRh
dGEub2JqZWN0LnBlbnVtYnJhID0gdGhpcy5wZW51bWJyYTsKKyAgICB9OwogCi0gICAgICAgICAg
ICBpZiAoIHRoaXMuc2hhZG93ICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5zaGFkb3cgPSB0
aGlzLnNoYWRvdy50b0pTT04oKTsKKyAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBl
LnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg
ICAgIHZhciBkYXRhID0gQ3VydmUucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlzICk7CiAKLSAg
ICAgICAgfQorICAgICAgICBkYXRhLnYwID0gdGhpcy52MC50b0FycmF5KCk7CisgICAgICAgIGRh
dGEudjEgPSB0aGlzLnYxLnRvQXJyYXkoKTsKKyAgICAgICAgZGF0YS52MiA9IHRoaXMudjIudG9B
cnJheSgpOwogCi0gICAgfSApOworICAgICAgICByZXR1cm4gZGF0YTsKIAotICAgIC8qKgotICAg
ICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICov
CisgICAgfTsKIAotICAgIGZ1bmN0aW9uIEhlbWlzcGhlcmVMaWdodCggc2t5Q29sb3IsIGdyb3Vu
ZENvbG9yLCBpbnRlbnNpdHkgKSB7CisgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUzLnByb3RvdHlw
ZS5mcm9tSlNPTiA9IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAgICAgICBMaWdodC5jYWxsKCB0
aGlzLCBza3lDb2xvciwgaW50ZW5zaXR5ICk7CisgICAgICAgIEN1cnZlLnByb3RvdHlwZS5mcm9t
SlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0hlbWlzcGhl
cmVMaWdodCc7CisgICAgICAgIHRoaXMudjAuZnJvbUFycmF5KCBqc29uLnYwICk7CisgICAgICAg
IHRoaXMudjEuZnJvbUFycmF5KCBqc29uLnYxICk7CisgICAgICAgIHRoaXMudjIuZnJvbUFycmF5
KCBqc29uLnYyICk7CiAKLSAgICAgICAgdGhpcy5jYXN0U2hhZG93ID0gdW5kZWZpbmVkOworICAg
ICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVjdDNE
LkRlZmF1bHRVcCApOwotICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeCgpOworICAgIH07CiAKLSAg
ICAgICAgdGhpcy5ncm91bmRDb2xvciA9IG5ldyBDb2xvciggZ3JvdW5kQ29sb3IgKTsKKyAgICBm
dW5jdGlvbiBTcGxpbmVDdXJ2ZSggcG9pbnRzIC8qIGFycmF5IG9mIFZlY3RvcjIgKi8gKSB7CiAK
LSAgICB9CisgICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKIAotICAgIEhlbWlzcGhlcmVMaWdo
dC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaWdodC5wcm90b3R5
cGUgKSwgeworICAgICAgICB0aGlzLnR5cGUgPSAnU3BsaW5lQ3VydmUnOwogCi0gICAgICAgIGNv
bnN0cnVjdG9yOiBIZW1pc3BoZXJlTGlnaHQsCisgICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRz
IHx8IFtdOwogCi0gICAgICAgIGlzSGVtaXNwaGVyZUxpZ2h0OiB0cnVlLAorICAgIH0KIAotICAg
ICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKKyAgICBTcGxpbmVDdXJ2ZS5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5cGUgKTsKKyAgICBTcGxpbmVDdXJ2ZS5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBTcGxpbmVDdXJ2ZTsKIAotICAgICAgICAgICAgTGlnaHQu
cHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAgU3BsaW5lQ3VydmUucHJv
dG90eXBlLmlzU3BsaW5lQ3VydmUgPSB0cnVlOwogCi0gICAgICAgICAgICB0aGlzLmdyb3VuZENv
bG9yLmNvcHkoIHNvdXJjZS5ncm91bmRDb2xvciApOworICAgIFNwbGluZUN1cnZlLnByb3RvdHlw
ZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCwgb3B0aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICB2YXIgcG9pbnQgPSBvcHRpb25hbFRhcmdldCB8fCBu
ZXcgVmVjdG9yMigpOwogCi0gICAgICAgIH0KKyAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMucG9p
bnRzOworICAgICAgICB2YXIgcCA9ICggcG9pbnRzLmxlbmd0aCAtIDEgKSAqIHQ7CiAKLSAgICB9
ICk7CisgICAgICAgIHZhciBpbnRQb2ludCA9IE1hdGguZmxvb3IoIHAgKTsKKyAgICAgICAgdmFy
IHdlaWdodCA9IHAgLSBpbnRQb2ludDsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29i
IC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgIHZhciBwMCA9IHBvaW50c1sg
aW50UG9pbnQgPT09IDAgPyBpbnRQb2ludCA6IGludFBvaW50IC0gMSBdOworICAgICAgICB2YXIg
cDEgPSBwb2ludHNbIGludFBvaW50IF07CisgICAgICAgIHZhciBwMiA9IHBvaW50c1sgaW50UG9p
bnQgPiBwb2ludHMubGVuZ3RoIC0gMiA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAx
IF07CisgICAgICAgIHZhciBwMyA9IHBvaW50c1sgaW50UG9pbnQgPiBwb2ludHMubGVuZ3RoIC0g
MyA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAyIF07CiAKLSAgICBmdW5jdGlvbiBM
aWdodFNoYWRvdyggY2FtZXJhICkgeworICAgICAgICBwb2ludC5zZXQoCisgICAgICAgICAgICBD
YXRtdWxsUm9tKCB3ZWlnaHQsIHAwLngsIHAxLngsIHAyLngsIHAzLnggKSwKKyAgICAgICAgICAg
IENhdG11bGxSb20oIHdlaWdodCwgcDAueSwgcDEueSwgcDIueSwgcDMueSApCisgICAgICAgICk7
CiAKLSAgICAgICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7CisgICAgICAgIHJldHVybiBwb2ludDsK
IAotICAgICAgICB0aGlzLmJpYXMgPSAwOwotICAgICAgICB0aGlzLnJhZGl1cyA9IDE7CisgICAg
fTsKIAotICAgICAgICB0aGlzLm1hcFNpemUgPSBuZXcgVmVjdG9yMiggNTEyLCA1MTIgKTsKKyAg
ICBTcGxpbmVDdXJ2ZS5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggc291cmNlICkgewogCi0g
ICAgICAgIHRoaXMubWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5tYXRyaXggPSBuZXcgTWF0cml4
NCgpOworICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsK
IAotICAgIH0KKyAgICAgICAgdGhpcy5wb2ludHMgPSBbXTsKIAotICAgIE9iamVjdC5hc3NpZ24o
IExpZ2h0U2hhZG93LnByb3RvdHlwZSwgeworICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBz
b3VyY2UucG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgY29weTogZnVu
Y3Rpb24gKCBzb3VyY2UgKSB7CisgICAgICAgICAgICB2YXIgcG9pbnQgPSBzb3VyY2UucG9pbnRz
WyBpIF07CiAKLSAgICAgICAgICAgIHRoaXMuY2FtZXJhID0gc291cmNlLmNhbWVyYS5jbG9uZSgp
OworICAgICAgICAgICAgdGhpcy5wb2ludHMucHVzaCggcG9pbnQuY2xvbmUoKSApOwogCi0gICAg
ICAgICAgICB0aGlzLmJpYXMgPSBzb3VyY2UuYmlhczsKLSAgICAgICAgICAgIHRoaXMucmFkaXVz
ID0gc291cmNlLnJhZGl1czsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLm1hcFNpemUu
Y29weSggc291cmNlLm1hcFNpemUgKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH07CiAKLSAgICAgICAgfSwKKyAgICBTcGxpbmVDdXJ2ZS5w
cm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogCi0gICAgICAgIGNsb25lOiBmdW5jdGlv
biAoKSB7CisgICAgICAgIHZhciBkYXRhID0gQ3VydmUucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0
aGlzICk7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHko
IHRoaXMgKTsKKyAgICAgICAgZGF0YS5wb2ludHMgPSBbXTsKIAotICAgICAgICB9LAorICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLnBvaW50cy5sZW5ndGg7IGkgPCBsOyBpICsrICkg
ewogCi0gICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHBvaW50
ID0gdGhpcy5wb2ludHNbIGkgXTsKKyAgICAgICAgICAgIGRhdGEucG9pbnRzLnB1c2goIHBvaW50
LnRvQXJyYXkoKSApOwogCi0gICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307CisgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCB0aGlzLmJpYXMgIT09IDAgKSBvYmplY3QuYmlhcyA9IHRoaXMu
YmlhczsKLSAgICAgICAgICAgIGlmICggdGhpcy5yYWRpdXMgIT09IDEgKSBvYmplY3QucmFkaXVz
ID0gdGhpcy5yYWRpdXM7Ci0gICAgICAgICAgICBpZiAoIHRoaXMubWFwU2l6ZS54ICE9PSA1MTIg
fHwgdGhpcy5tYXBTaXplLnkgIT09IDUxMiApIG9iamVjdC5tYXBTaXplID0gdGhpcy5tYXBTaXpl
LnRvQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CiAKLSAgICAgICAgICAgIG9iamVjdC5j
YW1lcmEgPSB0aGlzLmNhbWVyYS50b0pTT04oIGZhbHNlICkub2JqZWN0OwotICAgICAgICAgICAg
ZGVsZXRlIG9iamVjdC5jYW1lcmEubWF0cml4OworICAgIH07CiAKLSAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgU3BsaW5lQ3VydmUucHJvdG90eXBlLmZyb21KU09OID0gZnVuY3Rpb24g
KCBqc29uICkgewogCi0gICAgICAgIH0KKyAgICAgICAgQ3VydmUucHJvdG90eXBlLmZyb21KU09O
LmNhbGwoIHRoaXMsIGpzb24gKTsKIAotICAgIH0gKTsKKyAgICAgICAgdGhpcy5wb2ludHMgPSBb
XTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20v
Ci0gICAgICovCisgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpzb24ucG9pbnRzLmxlbmd0
aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICBmdW5jdGlvbiBTcG90TGlnaHRTaGFkb3coKSB7Cisg
ICAgICAgICAgICB2YXIgcG9pbnQgPSBqc29uLnBvaW50c1sgaSBdOworICAgICAgICAgICAgdGhp
cy5wb2ludHMucHVzaCggbmV3IFZlY3RvcjIoKS5mcm9tQXJyYXkoIHBvaW50ICkgKTsKIAotICAg
ICAgICBMaWdodFNoYWRvdy5jYWxsKCB0aGlzLCBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIDUwLCAx
LCAwLjUsIDUwMCApICk7CisgICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7
CiAKLSAgICBTcG90TGlnaHRTaGFkb3cucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0
LmNyZWF0ZSggTGlnaHRTaGFkb3cucHJvdG90eXBlICksIHsKKyAgICB9OwogCi0gICAgICAgIGNv
bnN0cnVjdG9yOiBTcG90TGlnaHRTaGFkb3csCiAKLSAgICAgICAgaXNTcG90TGlnaHRTaGFkb3c6
IHRydWUsCiAKLSAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAoIGxpZ2h0ICkgeworICAgIHZhciBD
dXJ2ZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7CisgICAgICAgIEFyY0N1cnZlOiBB
cmNDdXJ2ZSwKKyAgICAgICAgQ2F0bXVsbFJvbUN1cnZlMzogQ2F0bXVsbFJvbUN1cnZlMywKKyAg
ICAgICAgQ3ViaWNCZXppZXJDdXJ2ZTogQ3ViaWNCZXppZXJDdXJ2ZSwKKyAgICAgICAgQ3ViaWNC
ZXppZXJDdXJ2ZTM6IEN1YmljQmV6aWVyQ3VydmUzLAorICAgICAgICBFbGxpcHNlQ3VydmU6IEVs
bGlwc2VDdXJ2ZSwKKyAgICAgICAgTGluZUN1cnZlOiBMaW5lQ3VydmUsCisgICAgICAgIExpbmVD
dXJ2ZTM6IExpbmVDdXJ2ZTMsCisgICAgICAgIFF1YWRyYXRpY0JlemllckN1cnZlOiBRdWFkcmF0
aWNCZXppZXJDdXJ2ZSwKKyAgICAgICAgUXVhZHJhdGljQmV6aWVyQ3VydmUzOiBRdWFkcmF0aWNC
ZXppZXJDdXJ2ZTMsCisgICAgICAgIFNwbGluZUN1cnZlOiBTcGxpbmVDdXJ2ZQorICAgIH0pOwog
Ci0gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5jYW1lcmE7CisgICAgLyoqCisgICAgICog
QGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZworICAgICAq
CisgICAgICoqLwogCi0gICAgICAgICAgICB2YXIgZm92ID0gX01hdGguUkFEMkRFRyAqIDIgKiBs
aWdodC5hbmdsZTsKLSAgICAgICAgICAgIHZhciBhc3BlY3QgPSB0aGlzLm1hcFNpemUud2lkdGgg
LyB0aGlzLm1hcFNpemUuaGVpZ2h0OwotICAgICAgICAgICAgdmFyIGZhciA9IGxpZ2h0LmRpc3Rh
bmNlIHx8IGNhbWVyYS5mYXI7CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogIEN1cnZlZCBQYXRoIC0gYSBj
dXJ2ZSBwYXRoIGlzIHNpbXBseSBhIGFycmF5IG9mIGNvbm5lY3RlZAorICAgICAqICBjdXJ2ZXMs
IGJ1dCByZXRhaW5zIHRoZSBhcGkgb2YgYSBjdXJ2ZQorICAgICAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAgICAgICAg
ICAgaWYgKCBmb3YgIT09IGNhbWVyYS5mb3YgfHwgYXNwZWN0ICE9PSBjYW1lcmEuYXNwZWN0IHx8
IGZhciAhPT0gY2FtZXJhLmZhciApIHsKKyAgICBmdW5jdGlvbiBDdXJ2ZVBhdGgoKSB7CiAKLSAg
ICAgICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92OwotICAgICAgICAgICAgICAgIGNhbWVyYS5h
c3BlY3QgPSBhc3BlY3Q7Ci0gICAgICAgICAgICAgICAgY2FtZXJhLmZhciA9IGZhcjsKLSAgICAg
ICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOworICAgICAgICBDdXJ2
ZS5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgdGhpcy50eXBlID0gJ0N1
cnZlUGF0aCc7CiAKLSAgICAgICAgfQorICAgICAgICB0aGlzLmN1cnZlcyA9IFtdOworICAgICAg
ICB0aGlzLmF1dG9DbG9zZSA9IGZhbHNlOyAvLyBBdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgcGF0
aAogCi0gICAgfSApOworICAgIH0KIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEg
LyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAgQ3VydmVQYXRoLnByb3Rv
dHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEN1cnZlLnByb3RvdHlwZSApLCB7
CiAKLSAgICBmdW5jdGlvbiBTcG90TGlnaHQoIGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlLCBh
bmdsZSwgcGVudW1icmEsIGRlY2F5ICkgeworICAgICAgICBjb25zdHJ1Y3RvcjogQ3VydmVQYXRo
LAogCi0gICAgICAgIExpZ2h0LmNhbGwoIHRoaXMsIGNvbG9yLCBpbnRlbnNpdHkgKTsKKyAgICAg
ICAgYWRkOiBmdW5jdGlvbiAoIGN1cnZlICkgewogCi0gICAgICAgIHRoaXMudHlwZSA9ICdTcG90
TGlnaHQnOworICAgICAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTsKIAotICAgICAg
ICB0aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVjdDNELkRlZmF1bHRVcCApOwotICAgICAgICB0aGlz
LnVwZGF0ZU1hdHJpeCgpOworICAgICAgICB9LAogCi0gICAgICAgIHRoaXMudGFyZ2V0ID0gbmV3
IE9iamVjdDNEKCk7CisgICAgICAgIGNsb3NlUGF0aDogZnVuY3Rpb24gKCkgewogCi0gICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ3Bvd2VyJywgewotICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgLy8gaW50ZW5zaXR5ID0gcG93ZXIgcGVy
IHNvbGlkIGFuZ2xlLgotICAgICAgICAgICAgICAgIC8vIHJlZjogZXF1YXRpb24gKDE3KSBmcm9t
IGh0dHA6Ly93d3cuZnJvc3RiaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8xMS9jb3Vy
c2Vfbm90ZXNfbW92aW5nX2Zyb3N0Yml0ZV90b19wYnIucGRmCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuaW50ZW5zaXR5ICogTWF0aC5QSTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICBzZXQ6IGZ1bmN0aW9uICggcG93ZXIgKSB7Ci0gICAgICAgICAgICAgICAgLy8gaW50ZW5zaXR5
ID0gcG93ZXIgcGVyIHNvbGlkIGFuZ2xlLgotICAgICAgICAgICAgICAgIC8vIHJlZjogZXF1YXRp
b24gKDE3KSBmcm9tIGh0dHA6Ly93d3cuZnJvc3RiaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMv
MjAxNC8xMS9jb3Vyc2Vfbm90ZXNfbW92aW5nX2Zyb3N0Yml0ZV90b19wYnIucGRmCi0gICAgICAg
ICAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBwb3dlciAvIE1hdGguUEk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gKTsKKyAgICAgICAgICAgIC8vIEFkZCBhIGxpbmUgY3VydmUgaWYgc3RhcnQg
YW5kIGVuZCBvZiBsaW5lcyBhcmUgbm90IGNvbm5lY3RlZAorICAgICAgICAgICAgdmFyIHN0YXJ0
UG9pbnQgPSB0aGlzLmN1cnZlc1sgMCBdLmdldFBvaW50KCAwICk7CisgICAgICAgICAgICB2YXIg
ZW5kUG9pbnQgPSB0aGlzLmN1cnZlc1sgdGhpcy5jdXJ2ZXMubGVuZ3RoIC0gMSBdLmdldFBvaW50
KCAxICk7CiAKLSAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICggZGlzdGFuY2UgIT09IHVuZGVmaW5l
ZCApID8gZGlzdGFuY2UgOiAwOwotICAgICAgICB0aGlzLmFuZ2xlID0gKCBhbmdsZSAhPT0gdW5k
ZWZpbmVkICkgPyBhbmdsZSA6IE1hdGguUEkgLyAzOwotICAgICAgICB0aGlzLnBlbnVtYnJhID0g
KCBwZW51bWJyYSAhPT0gdW5kZWZpbmVkICkgPyBwZW51bWJyYSA6IDA7Ci0gICAgICAgIHRoaXMu
ZGVjYXkgPSAoIGRlY2F5ICE9PSB1bmRlZmluZWQgKSA/IGRlY2F5IDogMTsgICAvLyBmb3IgcGh5
c2ljYWxseSBjb3JyZWN0IGxpZ2h0cywgc2hvdWxkIGJlIDIuCisgICAgICAgICAgICBpZiAoICEg
c3RhcnRQb2ludC5lcXVhbHMoIGVuZFBvaW50ICkgKSB7CiAKLSAgICAgICAgdGhpcy5zaGFkb3cg
PSBuZXcgU3BvdExpZ2h0U2hhZG93KCk7CisgICAgICAgICAgICAgICAgdGhpcy5jdXJ2ZXMucHVz
aCggbmV3IExpbmVDdXJ2ZSggZW5kUG9pbnQsIHN0YXJ0UG9pbnQgKSApOwogCi0gICAgfQorICAg
ICAgICAgICAgfQogCi0gICAgU3BvdExpZ2h0LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9i
amVjdC5jcmVhdGUoIExpZ2h0LnByb3RvdHlwZSApLCB7CisgICAgICAgIH0sCiAKLSAgICAgICAg
Y29uc3RydWN0b3I6IFNwb3RMaWdodCwKKyAgICAgICAgLy8gVG8gZ2V0IGFjY3VyYXRlIHBvaW50
IHdpdGggcmVmZXJlbmNlIHRvCisgICAgICAgIC8vIGVudGlyZSBwYXRoIGRpc3RhbmNlIGF0IHRp
bWUgdCwKKyAgICAgICAgLy8gZm9sbG93aW5nIGhhcyB0byBiZSBkb25lOgogCi0gICAgICAgIGlz
U3BvdExpZ2h0OiB0cnVlLAorICAgICAgICAvLyAxLiBMZW5ndGggb2YgZWFjaCBzdWIgcGF0aCBo
YXZlIHRvIGJlIGtub3duCisgICAgICAgIC8vIDIuIExvY2F0ZSBhbmQgaWRlbnRpZnkgdHlwZSBv
ZiBjdXJ2ZQorICAgICAgICAvLyAzLiBHZXQgdCBmb3IgdGhlIGN1cnZlCisgICAgICAgIC8vIDQu
IFJldHVybiBjdXJ2ZS5nZXRQb2ludEF0KHQnKQogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICgg
c291cmNlICkgeworICAgICAgICBnZXRQb2ludDogZnVuY3Rpb24gKCB0ICkgewogCi0gICAgICAg
ICAgICBMaWdodC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKKyAgICAgICAg
ICAgIHZhciBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7CisgICAgICAgICAgICB2YXIgY3VydmVM
ZW5ndGhzID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTsKKyAgICAgICAgICAgIHZhciBpID0gMDsK
IAotICAgICAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHNvdXJjZS5kaXN0YW5jZTsKLSAgICAgICAg
ICAgIHRoaXMuYW5nbGUgPSBzb3VyY2UuYW5nbGU7Ci0gICAgICAgICAgICB0aGlzLnBlbnVtYnJh
ID0gc291cmNlLnBlbnVtYnJhOwotICAgICAgICAgICAgdGhpcy5kZWNheSA9IHNvdXJjZS5kZWNh
eTsKKyAgICAgICAgICAgIC8vIFRvIHRoaW5rIGFib3V0IGJvdW5kYXJpZXMgcG9pbnRzLgogCi0g
ICAgICAgICAgICB0aGlzLnRhcmdldCA9IHNvdXJjZS50YXJnZXQuY2xvbmUoKTsKKyAgICAgICAg
ICAgIHdoaWxlICggaSA8IGN1cnZlTGVuZ3Rocy5sZW5ndGggKSB7CiAKLSAgICAgICAgICAgIHRo
aXMuc2hhZG93ID0gc291cmNlLnNoYWRvdy5jbG9uZSgpOworICAgICAgICAgICAgICAgIGlmICgg
Y3VydmVMZW5ndGhzWyBpIF0gPj0gZCApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBkaWZmID0gY3VydmVMZW5ndGhzWyBpIF0gLSBkOworICAg
ICAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlc1sgaSBdOwogCi0gICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRMZW5ndGggPSBjdXJ2ZS5nZXRMZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBzZWdtZW50TGVuZ3RoID09PSAwID8g
MCA6IDEgLSBkaWZmIC8gc2VnbWVudExlbmd0aDsKIAotICAgIH0gKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnZlLmdldFBvaW50QXQoIHUgKTsKIAotICAgIC8qKgotICAgICAqIEBh
dXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICAgICAgaSArKzsKIAotICAgIGZ1bmN0aW9uIFBvaW50TGlnaHQo
IGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlLCBkZWNheSApIHsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICBMaWdodC5jYWxsKCB0aGlzLCBjb2xvciwgaW50ZW5zaXR5ICk7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKIAotICAgICAgICB0aGlzLnR5cGUgPSAnUG9pbnRMaWdodCc7CisgICAg
ICAgICAgICAvLyBsb29wIHdoZXJlIHN1bSAhPSAwLCBzdW0gPiBkICwgc3VtKzEgPGQKIAotICAg
ICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsICdwb3dlcicsIHsKLSAgICAgICAgICAg
IGdldDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2Vy
IHBlciBzb2xpZCBhbmdsZS4KLSAgICAgICAgICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNSkg
ZnJvbSBodHRwOi8vd3d3LmZyb3N0Yml0ZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEv
Y291cnNlX25vdGVzX21vdmluZ19mcm9zdGJpdGVfdG9fcGJyLnBkZgotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmludGVuc2l0eSAqIDQgKiBNYXRoLlBJOworICAgICAgICB9LAogCi0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHBvd2VyICkgewotICAgICAg
ICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBlciBzb2xpZCBhbmdsZS4KLSAgICAgICAg
ICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNSkgZnJvbSBodHRwOi8vd3d3LmZyb3N0Yml0ZS5j
b20vd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvY291cnNlX25vdGVzX21vdmluZ19mcm9zdGJp
dGVfdG9fcGJyLnBkZgotICAgICAgICAgICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gcG93ZXIgLyAo
IDQgKiBNYXRoLlBJICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKKyAgICAgICAgLy8g
V2UgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBUSFJFRS5DdXJ2ZSBnZXRQb2ludCgpIHdpdGggZ2V0
TGVuZ3RoKCkgYmVjYXVzZSBpbgorICAgICAgICAvLyBUSFJFRS5DdXJ2ZSwgZ2V0TGVuZ3RoKCkg
ZGVwZW5kcyBvbiBnZXRQb2ludCgpIGJ1dCBpbiBUSFJFRS5DdXJ2ZVBhdGgKKyAgICAgICAgLy8g
Z2V0UG9pbnQoKSBkZXBlbmRzIG9uIGdldExlbmd0aAogCi0gICAgICAgIHRoaXMuZGlzdGFuY2Ug
PSAoIGRpc3RhbmNlICE9PSB1bmRlZmluZWQgKSA/IGRpc3RhbmNlIDogMDsKLSAgICAgICAgdGhp
cy5kZWNheSA9ICggZGVjYXkgIT09IHVuZGVmaW5lZCApID8gZGVjYXkgOiAxOyAgIC8vIGZvciBw
aHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi4KKyAgICAgICAgZ2V0TGVuZ3Ro
OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgdGhpcy5zaGFkb3cgPSBuZXcgTGlnaHRTaGFkb3co
IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggOTAsIDEsIDAuNSwgNTAwICkgKTsKKyAgICAgICAgICAg
IHZhciBsZW5zID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTsKKyAgICAgICAgICAgIHJldHVybiBs
ZW5zWyBsZW5zLmxlbmd0aCAtIDEgXTsKIAotICAgIH0KKyAgICAgICAgfSwKIAotICAgIFBvaW50
TGlnaHQucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJv
dG90eXBlICksIHsKKyAgICAgICAgLy8gY2FjaGVMZW5ndGhzIG11c3QgYmUgcmVjYWxjdWxhdGVk
LgorICAgICAgICB1cGRhdGVBcmNMZW5ndGhzOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgY29u
c3RydWN0b3I6IFBvaW50TGlnaHQsCisgICAgICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRoaXMuY2FjaGVMZW5ndGhzID0gbnVsbDsKKyAgICAgICAgICAgIHRo
aXMuZ2V0Q3VydmVMZW5ndGhzKCk7CiAKLSAgICAgICAgaXNQb2ludExpZ2h0OiB0cnVlLAorICAg
ICAgICB9LAogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAgICAgICAv
LyBDb21wdXRlIGxlbmd0aHMgYW5kIGNhY2hlIHRoZW0KKyAgICAgICAgLy8gV2UgY2Fubm90IG92
ZXJ3cml0ZSBnZXRMZW5ndGhzKCkgYmVjYXVzZSBVdG9UIG1hcHBpbmcgdXNlcyBpdC4KIAotICAg
ICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywgc291cmNlICk7CisgICAg
ICAgIGdldEN1cnZlTGVuZ3RoczogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICB0aGlzLmRp
c3RhbmNlID0gc291cmNlLmRpc3RhbmNlOwotICAgICAgICAgICAgdGhpcy5kZWNheSA9IHNvdXJj
ZS5kZWNheTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBjYWNoZSB2YWx1ZXMgaWYgY3VydmVzIGFu
ZCBjYWNoZSBhcnJheSBhcmUgc2FtZSBsZW5ndGgKIAotICAgICAgICAgICAgdGhpcy5zaGFkb3cg
PSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7CisgICAgICAgICAgICBpZiAoIHRoaXMuY2FjaGVMZW5n
dGhzICYmIHRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aCA9PT0gdGhpcy5jdXJ2ZXMubGVuZ3RoICkg
ewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5jYWNoZUxlbmd0aHM7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgfSApOwor
ICAgICAgICAgICAgLy8gR2V0IGxlbmd0aCBvZiBzdWItY3VydmUKKyAgICAgICAgICAgIC8vIFB1
c2ggc3VtcyBpbnRvIGNhY2hlZCBhcnJheQogCi0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRv
b2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgICAgIHZhciBsZW5ndGhz
ID0gW10sIHN1bXMgPSAwOwogCi0gICAgZnVuY3Rpb24gRGlyZWN0aW9uYWxMaWdodFNoYWRvdygg
KSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmN1cnZlcy5sZW5ndGg7
IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgIExpZ2h0U2hhZG93LmNhbGwoIHRoaXMsIG5ldyBP
cnRob2dyYXBoaWNDYW1lcmEoIC0gNSwgNSwgNSwgLSA1LCAwLjUsIDUwMCApICk7CisgICAgICAg
ICAgICAgICAgc3VtcyArPSB0aGlzLmN1cnZlc1sgaSBdLmdldExlbmd0aCgpOworICAgICAgICAg
ICAgICAgIGxlbmd0aHMucHVzaCggc3VtcyApOwogCi0gICAgfQorICAgICAgICAgICAgfQogCi0g
ICAgRGlyZWN0aW9uYWxMaWdodFNoYWRvdy5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmpl
Y3QuY3JlYXRlKCBMaWdodFNoYWRvdy5wcm90b3R5cGUgKSwgeworICAgICAgICAgICAgdGhpcy5j
YWNoZUxlbmd0aHMgPSBsZW5ndGhzOwogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBEaXJlY3Rpb25h
bExpZ2h0U2hhZG93CisgICAgICAgICAgICByZXR1cm4gbGVuZ3RoczsKIAotICAgIH0gKTsKKyAg
ICAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9v
Yi5jb20vCi0gICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlhLmNv
bS8KLSAgICAgKi8KKyAgICAgICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9u
cyApIHsKIAotICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFsTGlnaHQoIGNvbG9yLCBpbnRlbnNpdHkg
KSB7CisgICAgICAgICAgICBpZiAoIGRpdmlzaW9ucyA9PT0gdW5kZWZpbmVkICkgZGl2aXNpb25z
ID0gNDA7CiAKLSAgICAgICAgTGlnaHQuY2FsbCggdGhpcywgY29sb3IsIGludGVuc2l0eSApOwor
ICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtdOwogCi0gICAgICAgIHRoaXMudHlwZSA9ICdEaXJl
Y3Rpb25hbExpZ2h0JzsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8PSBkaXZpc2lv
bnM7IGkgKysgKSB7CiAKLSAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KCBPYmplY3QzRC5EZWZh
dWx0VXAgKTsKLSAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgoKTsKKyAgICAgICAgICAgICAgICBw
b2ludHMucHVzaCggdGhpcy5nZXRQb2ludCggaSAvIGRpdmlzaW9ucyApICk7CiAKLSAgICAgICAg
dGhpcy50YXJnZXQgPSBuZXcgT2JqZWN0M0QoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0
aGlzLnNoYWRvdyA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93KCk7CisgICAgICAgICAgICBp
ZiAoIHRoaXMuYXV0b0Nsb3NlICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgIHBvaW50cy5w
dXNoKCBwb2ludHNbIDAgXSApOwogCi0gICAgRGlyZWN0aW9uYWxMaWdodC5wcm90b3R5cGUgPSBP
YmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaWdodC5wcm90b3R5cGUgKSwgeworICAgICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBEaXJlY3Rpb25hbExpZ2h0LAorICAgICAg
ICAgICAgcmV0dXJuIHBvaW50czsKIAotICAgICAgICBpc0RpcmVjdGlvbmFsTGlnaHQ6IHRydWUs
CisgICAgICAgIH0sCiAKLSAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CisgICAg
ICAgIGdldFBvaW50czogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CiAKLSAgICAgICAgICAgIExp
Z2h0LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOworICAgICAgICAgICAgZGl2
aXNpb25zID0gZGl2aXNpb25zIHx8IDEyOwogCi0gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHNv
dXJjZS50YXJnZXQuY2xvbmUoKTsKKyAgICAgICAgICAgIHZhciBwb2ludHMgPSBbXSwgbGFzdDsK
IAotICAgICAgICAgICAgdGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7CisgICAg
ICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGN1cnZlcyA9IHRoaXMuY3VydmVzOyBpIDwgY3VydmVz
Lmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgdmFyIGN1cnZlID0gY3VydmVzWyBpIF07CisgICAgICAgICAgICAgICAgdmFyIHJlc29s
dXRpb24gPSAoIGN1cnZlICYmIGN1cnZlLmlzRWxsaXBzZUN1cnZlICkgPyBkaXZpc2lvbnMgKiAy
CisgICAgICAgICAgICAgICAgICAgIDogKCBjdXJ2ZSAmJiAoIGN1cnZlLmlzTGluZUN1cnZlIHx8
IGN1cnZlLmlzTGluZUN1cnZlMyApICkgPyAxCisgICAgICAgICAgICAgICAgICAgICAgICA6ICgg
Y3VydmUgJiYgY3VydmUuaXNTcGxpbmVDdXJ2ZSApID8gZGl2aXNpb25zICogY3VydmUucG9pbnRz
Lmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGl2aXNpb25zOwogCi0gICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgcHRzID0gY3VydmUuZ2V0UG9pbnRzKCByZXNvbHV0
aW9uICk7CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwOyBqIDwg
cHRzLmxlbmd0aDsgaiArKyApIHsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgbXJkb29iIC8g
aHR0cDovL21yZG9vYi5jb20vCi0gICAgICovCisgICAgICAgICAgICAgICAgICAgIHZhciBwb2lu
dCA9IHB0c1sgaiBdOwogCi0gICAgZnVuY3Rpb24gQW1iaWVudExpZ2h0KCBjb2xvciwgaW50ZW5z
aXR5ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3QgJiYgbGFzdC5lcXVhbHMoIHBv
aW50ICkgKSBjb250aW51ZTsgLy8gZW5zdXJlcyBubyBjb25zZWN1dGl2ZSBwb2ludHMgYXJlIGR1
cGxpY2F0ZXMKIAotICAgICAgICBMaWdodC5jYWxsKCB0aGlzLCBjb2xvciwgaW50ZW5zaXR5ICk7
CisgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCBwb2ludCApOworICAgICAgICAgICAg
ICAgICAgICBsYXN0ID0gcG9pbnQ7CiAKLSAgICAgICAgdGhpcy50eXBlID0gJ0FtYmllbnRMaWdo
dCc7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuY2FzdFNoYWRvdyA9IHVuZGVm
aW5lZDsKKyAgICAgICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgICAgIGlmICggdGhpcy5hdXRv
Q2xvc2UgJiYgcG9pbnRzLmxlbmd0aCA+IDEgJiYgISBwb2ludHNbIHBvaW50cy5sZW5ndGggLSAx
IF0uZXF1YWxzKCBwb2ludHNbIDAgXSApICkgewogCi0gICAgQW1iaWVudExpZ2h0LnByb3RvdHlw
ZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIExpZ2h0LnByb3RvdHlwZSApLCB7Cisg
ICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goIHBvaW50c1sgMCBdICk7CiAKLSAgICAgICAgY29u
c3RydWN0b3I6IEFtYmllbnRMaWdodCwKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpc0FtYmll
bnRMaWdodDogdHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHBvaW50czsKIAotICAgIH0gKTsKKyAg
ICAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBhdXRob3IgYWJlbG5hdGlvbiAvIGh0dHA6Ly9n
aXRodWIuY29tL2FiZWxuYXRpb24KLSAgICAgKi8KKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBz
b3VyY2UgKSB7CiAKLSAgICBmdW5jdGlvbiBSZWN0QXJlYUxpZ2h0KCBjb2xvciwgaW50ZW5zaXR5
LCB3aWR0aCwgaGVpZ2h0ICkgeworICAgICAgICAgICAgQ3VydmUucHJvdG90eXBlLmNvcHkuY2Fs
bCggdGhpcywgc291cmNlICk7CiAKLSAgICAgICAgTGlnaHQuY2FsbCggdGhpcywgY29sb3IsIGlu
dGVuc2l0eSApOworICAgICAgICAgICAgdGhpcy5jdXJ2ZXMgPSBbXTsKIAotICAgICAgICB0aGlz
LnR5cGUgPSAnUmVjdEFyZWFMaWdodCc7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwg
PSBzb3VyY2UuY3VydmVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgdGhpcy5w
b3NpdGlvbi5zZXQoIDAsIDEsIDAgKTsKLSAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgoKTsKKyAg
ICAgICAgICAgICAgICB2YXIgY3VydmUgPSBzb3VyY2UuY3VydmVzWyBpIF07CiAKLSAgICAgICAg
dGhpcy53aWR0aCA9ICggd2lkdGggIT09IHVuZGVmaW5lZCApID8gd2lkdGggOiAxMDsKLSAgICAg
ICAgdGhpcy5oZWlnaHQgPSAoIGhlaWdodCAhPT0gdW5kZWZpbmVkICkgPyBoZWlnaHQgOiAxMDsK
KyAgICAgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZS5jbG9uZSgpICk7CiAKLSAg
ICAgICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IGRpc3RhbmNlL2RlY2F5CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IHVwZGF0ZSBtZXRob2QgZm9yIFJlY3RB
cmVhTGlnaHQgdG8gdXBkYXRlIHRyYW5zZm9ybSB0byBsb29rYXQgdGFyZ2V0CisgICAgICAgICAg
ICB0aGlzLmF1dG9DbG9zZSA9IHNvdXJjZS5hdXRvQ2xvc2U7CiAKLSAgICAgICAgLy8gVE9ETyAo
YWJlbG5hdGlvbik6IHNoYWRvd3MKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgfQor
ICAgICAgICB9LAogCi0gICAgLy8gVE9ETyAoYWJlbG5hdGlvbik6IFJlY3RBcmVhTGlnaHQgdXBk
YXRlIHdoZW4gbGlnaHQgc2hhcGUgaXMgY2hhbmdlZAotICAgIFJlY3RBcmVhTGlnaHQucHJvdG90
eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBlICksIHsK
KyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IFJl
Y3RBcmVhTGlnaHQsCisgICAgICAgICAgICB2YXIgZGF0YSA9IEN1cnZlLnByb3RvdHlwZS50b0pT
T04uY2FsbCggdGhpcyApOwogCi0gICAgICAgIGlzUmVjdEFyZWFMaWdodDogdHJ1ZSwKKyAgICAg
ICAgICAgIGRhdGEuYXV0b0Nsb3NlID0gdGhpcy5hdXRvQ2xvc2U7CisgICAgICAgICAgICBkYXRh
LmN1cnZlcyA9IFtdOwogCi0gICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgeworICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5jdXJ2ZXMubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKIAotICAgICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCggdGhpcywg
c291cmNlICk7CisgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5jdXJ2ZXNbIGkgXTsK
KyAgICAgICAgICAgICAgICBkYXRhLmN1cnZlcy5wdXNoKCBjdXJ2ZS50b0pTT04oKSApOwogCi0g
ICAgICAgICAgICB0aGlzLndpZHRoID0gc291cmNlLndpZHRoOwotICAgICAgICAgICAgdGhpcy5o
ZWlnaHQgPSBzb3VyY2UuaGVpZ2h0OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CisgICAgICAgIGZyb21KU09OOiBmdW5jdGlv
biAoIGpzb24gKSB7CiAKLSAgICAgICAgICAgIHZhciBkYXRhID0gTGlnaHQucHJvdG90eXBlLnRv
SlNPTi5jYWxsKCB0aGlzLCBtZXRhICk7CisgICAgICAgICAgICBDdXJ2ZS5wcm90b3R5cGUuZnJv
bUpTT04uY2FsbCggdGhpcywganNvbiApOwogCi0gICAgICAgICAgICBkYXRhLm9iamVjdC53aWR0
aCA9IHRoaXMud2lkdGg7Ci0gICAgICAgICAgICBkYXRhLm9iamVjdC5oZWlnaHQgPSB0aGlzLmhl
aWdodDsKKyAgICAgICAgICAgIHRoaXMuYXV0b0Nsb3NlID0ganNvbi5hdXRvQ2xvc2U7CisgICAg
ICAgICAgICB0aGlzLmN1cnZlcyA9IFtdOwogCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpzb24uY3VydmVzLmxlbmd0aDsgaSA8IGw7
IGkgKysgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSBqc29uLmN1cnZlc1sgaSBd
OworICAgICAgICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2goIG5ldyBDdXJ2ZXNbIGN1cnZlLnR5
cGUgXSgpLmZyb21KU09OKCBjdXJ2ZSApICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfQogCiAgICAgfSApOwogCiAgICAgLyoqCi0gICAg
ICogQGF1dGhvciB0c2NodwotICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xh
cmEuaW8vCi0gICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMv
Ci0gICAgICovCi0KLSAgICB2YXIgQW5pbWF0aW9uVXRpbHMgPSB7CisgICAgICogQGF1dGhvciB6
ejg1IC8gaHR0cDovL3d3dy5sYWI0Z2FtZXMubmV0L3p6ODUvYmxvZworICAgICAqIENyZWF0ZXMg
ZnJlZSBmb3JtIDJkIHBhdGggdXNpbmcgc2VyaWVzIG9mIHBvaW50cywgbGluZXMgb3IgY3VydmVz
LgorICAgICAqKi8KIAotICAgICAgICAvLyBzYW1lIGFzIEFycmF5LnByb3RvdHlwZS5zbGljZSwg
YnV0IGFsc28gd29ya3Mgb24gdHlwZWQgYXJyYXlzCi0gICAgICAgIGFycmF5U2xpY2U6IGZ1bmN0
aW9uICggYXJyYXksIGZyb20sIHRvICkgeworICAgIGZ1bmN0aW9uIFBhdGgoIHBvaW50cyApIHsK
IAotICAgICAgICAgICAgaWYgKCBBbmltYXRpb25VdGlscy5pc1R5cGVkQXJyYXkoIGFycmF5ICkg
KSB7CisgICAgICAgIEN1cnZlUGF0aC5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICAv
LyBpbiBpb3M5IGFycmF5LnN1YmFycmF5KGZyb20sIHVuZGVmaW5lZCkgd2lsbCByZXR1cm4gZW1w
dHkgYXJyYXkKLSAgICAgICAgICAgICAgICAvLyBidXQgYXJyYXkuc3ViYXJyYXkoZnJvbSkgb3Ig
YXJyYXkuc3ViYXJyYXkoZnJvbSwgbGVuKSBpcyBjb3JyZWN0Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBhcnJheS5jb25zdHJ1Y3RvciggYXJyYXkuc3ViYXJyYXkoIGZyb20sIHRvICE9PSB1
bmRlZmluZWQgPyB0byA6IGFycmF5Lmxlbmd0aCApICk7CisgICAgICAgIHRoaXMudHlwZSA9ICdQ
YXRoJzsKIAotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLmN1cnJlbnRQb2ludCA9IG5ldyBW
ZWN0b3IyKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBhcnJheS5zbGljZSggZnJvbSwgdG8gKTsK
KyAgICAgICAgaWYgKCBwb2ludHMgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHRoaXMu
c2V0RnJvbVBvaW50cyggcG9pbnRzICk7CiAKLSAgICAgICAgLy8gY29udmVydHMgYW4gYXJyYXkg
dG8gYSBzcGVjaWZpYyB0eXBlCi0gICAgICAgIGNvbnZlcnRBcnJheTogZnVuY3Rpb24gKCBhcnJh
eSwgdHlwZSwgZm9yY2VDbG9uZSApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoICEg
YXJyYXkgfHwgLy8gbGV0ICd1bmRlZmluZWQnIGFuZCAnbnVsbCcgcGFzcwotICAgICAgICAgICAg
ICAgICAgICAhIGZvcmNlQ2xvbmUgJiYgYXJyYXkuY29uc3RydWN0b3IgPT09IHR5cGUgKSByZXR1
cm4gYXJyYXk7CisgICAgfQogCi0gICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlLkJZVEVTX1BF
Ul9FTEVNRU5UID09PSAnbnVtYmVyJyApIHsKKyAgICBQYXRoLnByb3RvdHlwZSA9IE9iamVjdC5h
c3NpZ24oIE9iamVjdC5jcmVhdGUoIEN1cnZlUGF0aC5wcm90b3R5cGUgKSwgewogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKCBhcnJheSApOyAvLyBjcmVhdGUgdHlwZWQgYXJyYXkK
KyAgICAgICAgY29uc3RydWN0b3I6IFBhdGgsCiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgc2V0
RnJvbVBvaW50czogZnVuY3Rpb24gKCBwb2ludHMgKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXkgKTsgLy8gY3JlYXRlIEFycmF5CisgICAg
ICAgICAgICB0aGlzLm1vdmVUbyggcG9pbnRzWyAwIF0ueCwgcG9pbnRzWyAwIF0ueSApOwogCi0g
ICAgICAgIH0sCisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDEsIGwgPSBwb2ludHMubGVuZ3Ro
OyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICBpc1R5cGVkQXJyYXk6IGZ1bmN0aW9uICggb2Jq
ZWN0ICkgeworICAgICAgICAgICAgICAgIHRoaXMubGluZVRvKCBwb2ludHNbIGkgXS54LCBwb2lu
dHNbIGkgXS55ICk7CiAKLSAgICAgICAgICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoIG9i
amVjdCApICYmCi0gICAgICAgICAgICAgICAgICAgICEgKCBvYmplY3QgaW5zdGFuY2VvZiBEYXRh
VmlldyApOworICAgICAgICAgICAgfQogCiAgICAgICAgIH0sCiAKLSAgICAgICAgLy8gcmV0dXJu
cyBhbiBhcnJheSBieSB3aGljaCB0aW1lcyBhbmQgdmFsdWVzIGNhbiBiZSBzb3J0ZWQKLSAgICAg
ICAgZ2V0S2V5ZnJhbWVPcmRlcjogZnVuY3Rpb24gKCB0aW1lcyApIHsKLQotICAgICAgICAgICAg
ZnVuY3Rpb24gY29tcGFyZVRpbWUoIGksIGogKSB7CisgICAgICAgIG1vdmVUbzogZnVuY3Rpb24g
KCB4LCB5ICkgewogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzWyBpIF0gLSB0aW1lc1sg
aiBdOworICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQuc2V0KCB4LCB5ICk7IC8vIFRPRE8g
Y29uc2lkZXIgcmVmZXJlbmNpbmcgdmVjdG9ycyBpbnN0ZWFkIG9mIGNvcHlpbmc/CiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIG4gPSB0aW1lcy5sZW5ndGg7
Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCBuICk7Ci0gICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDA7IGkgIT09IG47ICsrIGkgKSByZXN1bHRbIGkgXSA9IGk7CisgICAgICAg
IGxpbmVUbzogZnVuY3Rpb24gKCB4LCB5ICkgewogCi0gICAgICAgICAgICByZXN1bHQuc29ydCgg
Y29tcGFyZVRpbWUgKTsKKyAgICAgICAgICAgIHZhciBjdXJ2ZSA9IG5ldyBMaW5lQ3VydmUoIHRo
aXMuY3VycmVudFBvaW50LmNsb25lKCksIG5ldyBWZWN0b3IyKCB4LCB5ICkgKTsKKyAgICAgICAg
ICAgIHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7CiAKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludC5zZXQoIHgsIHkgKTsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIC8vIHVzZXMgdGhlIGFycmF5IHByZXZpb3VzbHkgcmV0dXJuZWQgYnkg
J2dldEtleWZyYW1lT3JkZXInIHRvIHNvcnQgZGF0YQotICAgICAgICBzb3J0ZWRBcnJheTogZnVu
Y3Rpb24gKCB2YWx1ZXMsIHN0cmlkZSwgb3JkZXIgKSB7CisgICAgICAgIHF1YWRyYXRpY0N1cnZl
VG86IGZ1bmN0aW9uICggYUNQeCwgYUNQeSwgYVgsIGFZICkgewogCi0gICAgICAgICAgICB2YXIg
blZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IHZh
bHVlcy5jb25zdHJ1Y3RvciggblZhbHVlcyApOworICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3
IFF1YWRyYXRpY0JlemllckN1cnZlKAorICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50
LmNsb25lKCksCisgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGFDUHgsIGFDUHkgKSwKKyAg
ICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYVgsIGFZICkKKyAgICAgICAgICAgICk7CiAKLSAg
ICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgZHN0T2Zmc2V0ID0gMDsgZHN0T2Zmc2V0ICE9PSBu
VmFsdWVzOyArKyBpICkgeworICAgICAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTsK
IAotICAgICAgICAgICAgICAgIHZhciBzcmNPZmZzZXQgPSBvcmRlclsgaSBdICogc3RyaWRlOwor
ICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQuc2V0KCBhWCwgYVkgKTsKIAotICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBqID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkgeworICAgICAgICB9
LAogCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsgZHN0T2Zmc2V0ICsrIF0gPSB2YWx1ZXNb
IHNyY09mZnNldCArIGogXTsKKyAgICAgICAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24gKCBhQ1Ax
eCwgYUNQMXksIGFDUDJ4LCBhQ1AyeSwgYVgsIGFZICkgewogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEN1YmljQmV6aWVyQ3VydmUoCisgICAgICAgICAg
ICAgICAgdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSwKKyAgICAgICAgICAgICAgICBuZXcgVmVj
dG9yMiggYUNQMXgsIGFDUDF5ICksCisgICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGFDUDJ4
LCBhQ1AyeSApLAorICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IyKCBhWCwgYVkgKQorICAgICAg
ICAgICAgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaCgg
Y3VydmUgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIHRoaXMu
Y3VycmVudFBvaW50LnNldCggYVgsIGFZICk7CiAKICAgICAgICAgfSwKIAotICAgICAgICAvLyBm
dW5jdGlvbiBmb3IgcGFyc2luZyBBT1Mga2V5ZnJhbWUgZm9ybWF0cwotICAgICAgICBmbGF0dGVu
SlNPTjogZnVuY3Rpb24gKCBqc29uS2V5cywgdGltZXMsIHZhbHVlcywgdmFsdWVQcm9wZXJ0eU5h
bWUgKSB7Ci0KLSAgICAgICAgICAgIHZhciBpID0gMSwga2V5ID0ganNvbktleXNbIDAgXTsKLQot
ICAgICAgICAgICAgd2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXlbIHZhbHVlUHJvcGVy
dHlOYW1lIF0gPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgc3BsaW5lVGhydTogZnVuY3Rpb24g
KCBwdHMgLypBcnJheSBvZiBWZWN0b3IqLyApIHsKIAotICAgICAgICAgICAgICAgIGtleSA9IGpz
b25LZXlzWyBpICsrIF07CisgICAgICAgICAgICB2YXIgbnB0cyA9IFsgdGhpcy5jdXJyZW50UG9p
bnQuY2xvbmUoKSBdLmNvbmNhdCggcHRzICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBjdXJ2ZSA9IG5ldyBTcGxpbmVDdXJ2ZSggbnB0cyApOworICAgICAgICAgICAgdGhpcy5j
dXJ2ZXMucHVzaCggY3VydmUgKTsKIAotICAgICAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5l
ZCApIHJldHVybjsgLy8gbm8gZGF0YQorICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQuY29w
eSggcHRzWyBwdHMubGVuZ3RoIC0gMSBdICk7CiAKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGtl
eVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVm
aW5lZCApIHJldHVybjsgLy8gbm8gZGF0YQorICAgICAgICB9LAogCi0gICAgICAgICAgICBpZiAo
IEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgIGFyYzogZnVuY3Rpb24gKCBhWCwg
YVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKSB7CiAKLSAg
ICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICB2YXIgeDAgPSB0aGlzLmN1cnJlbnRQb2lu
dC54OworICAgICAgICAgICAgdmFyIHkwID0gdGhpcy5jdXJyZW50UG9pbnQueTsKIAotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKKyAgICAgICAg
ICAgIHRoaXMuYWJzYXJjKCBhWCArIHgwLCBhWSArIHkwLCBhUmFkaXVzLAorICAgICAgICAgICAg
ICAgIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTsKIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVzLnB1c2goIGtleS50aW1lICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMucHVzaC5hcHBseSggdmFsdWVzLCB2YWx1ZSApOyAvLyBwdXNoIGFs
bCBlbGVtZW50cworICAgICAgICBhYnNhcmM6IGZ1bmN0aW9uICggYVgsIGFZLCBhUmFkaXVzLCBh
U3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXMuYWJzZWxsaXBzZSggYVgsIGFZLCBhUmFkaXVzLCBhUmFk
aXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICk7CiAKLSAgICAgICAgICAg
ICAgICAgICAga2V5ID0ganNvbktleXNbIGkgKysgXTsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKCBrZXkgIT09IHVuZGVmaW5lZCApOworICAgICAgICBlbGxpcHNlOiBm
dW5jdGlvbiAoIGFYLCBhWSwgeFJhZGl1cywgeVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmds
ZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uICkgewogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCB2
YWx1ZS50b0FycmF5ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YXIgeDAgPSB0aGlz
LmN1cnJlbnRQb2ludC54OworICAgICAgICAgICAgdmFyIHkwID0gdGhpcy5jdXJyZW50UG9pbnQu
eTsKIAotICAgICAgICAgICAgICAgIC8vIC4uLmFzc3VtZSBUSFJFRS5NYXRoLWlzaAorICAgICAg
ICAgICAgdGhpcy5hYnNlbGxpcHNlKCBhWCArIHgwLCBhWSArIHkwLCB4UmFkaXVzLCB5UmFkaXVz
LCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRpb24gKTsKIAotICAg
ICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGtleVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKKyAgICAgICAgYWJzZWxsaXBzZTogZnVuY3Rp
b24gKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFD
bG9ja3dpc2UsIGFSb3RhdGlvbiApIHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVl
ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YXIgY3VydmUgPSBuZXcgRWxsaXBzZUN1
cnZlKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFD
bG9ja3dpc2UsIGFSb3RhdGlvbiApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy5w
dXNoKCBrZXkudGltZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9BcnJheSgg
dmFsdWVzLCB2YWx1ZXMubGVuZ3RoICk7CisgICAgICAgICAgICBpZiAoIHRoaXMuY3VydmVzLmxl
bmd0aCA+IDAgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IGlmIGEgcHJldmlvdXMgY3VydmUgaXMgcHJlc2VudCwgYXR0ZW1wdCB0byBqb2luCisgICAgICAg
ICAgICAgICAgdmFyIGZpcnN0UG9pbnQgPSBjdXJ2ZS5nZXRQb2ludCggMCApOwogCi0gICAgICAg
ICAgICAgICAgICAgIGtleSA9IGpzb25LZXlzWyBpICsrIF07CisgICAgICAgICAgICAgICAgaWYg
KCAhIGZpcnN0UG9pbnQuZXF1YWxzKCB0aGlzLmN1cnJlbnRQb2ludCApICkgewogCi0gICAgICAg
ICAgICAgICAgfSB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICk7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMubGluZVRvKCBmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSApOwogCi0gICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIG90
aGVyd2lzZSBwdXNoIGFzLWlzCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOwogCi0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdOworICAgICAgICAgICAgdmFy
IGxhc3RQb2ludCA9IGN1cnZlLmdldFBvaW50KCAxICk7CisgICAgICAgICAgICB0aGlzLmN1cnJl
bnRQb2ludC5jb3B5KCBsYXN0UG9pbnQgKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHZh
bHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVzLnB1c2goIGtleS50aW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZXMucHVzaCggdmFsdWUgKTsKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQ3VydmVQYXRoLnByb3RvdHlwZS5j
b3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgICAgICAgICAgICAgIGtleSA9IGpz
b25LZXlzWyBpICsrIF07CisgICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KCBzb3Vy
Y2UuY3VycmVudFBvaW50ICk7CiAKLSAgICAgICAgICAgICAgICB9IHdoaWxlICgga2V5ICE9PSB1
bmRlZmluZWQgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB9Cisg
ICAgICAgIH0sCiAKLSAgICAgICAgfQorICAgICAgICB0b0pTT046IGZ1bmN0aW9uICgpIHsKIAot
ICAgIH07CisgICAgICAgICAgICB2YXIgZGF0YSA9IEN1cnZlUGF0aC5wcm90b3R5cGUudG9KU09O
LmNhbGwoIHRoaXMgKTsKIAotICAgIC8qKgotICAgICAqIEFic3RyYWN0IGJhc2UgY2xhc3Mgb2Yg
aW50ZXJwb2xhbnRzIG92ZXIgcGFyYW1ldHJpYyBzYW1wbGVzLgotICAgICAqCi0gICAgICogVGhl
IHBhcmFtZXRlciBkb21haW4gaXMgb25lIGRpbWVuc2lvbmFsLCB0eXBpY2FsbHkgdGhlIHRpbWUg
b3IgYSBwYXRoCi0gICAgICogYWxvbmcgYSBjdXJ2ZSBkZWZpbmVkIGJ5IHRoZSBkYXRhLgotICAg
ICAqCi0gICAgICogVGhlIHNhbXBsZSB2YWx1ZXMgY2FuIGhhdmUgYW55IGRpbWVuc2lvbmFsaXR5
IGFuZCBkZXJpdmVkIGNsYXNzZXMgbWF5Ci0gICAgICogYXBwbHkgc3BlY2lhbCBpbnRlcnByZXRh
dGlvbnMgdG8gdGhlIGRhdGEuCi0gICAgICoKLSAgICAgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRo
ZSBpbnRlcnZhbCBzZWVrIGluIGEgVGVtcGxhdGUgTWV0aG9kLCBkZWZlcnJpbmcKLSAgICAgKiB0
aGUgYWN0dWFsIGludGVycG9sYXRpb24gdG8gZGVyaXZlZCBjbGFzc2VzLgotICAgICAqCi0gICAg
ICogVGltZSBjb21wbGV4aXR5IGlzIE8oMSkgZm9yIGxpbmVhciBhY2Nlc3MgY3Jvc3NpbmcgYXQg
bW9zdCB0d28gcG9pbnRzCi0gICAgICogYW5kIE8obG9nIE4pIGZvciByYW5kb20gYWNjZXNzLCB3
aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25zLgotICAgICAqCi0gICAgICogUmVmZXJl
bmNlczoKLSAgICAgKgotICAgICAqICAgICAgaHR0cDovL3d3dy5vb2Rlc2lnbi5jb20vdGVtcGxh
dGUtbWV0aG9kLXBhdHRlcm4uaHRtbAotICAgICAqCi0gICAgICogQGF1dGhvciB0c2NodwotICAg
ICAqLworICAgICAgICAgICAgZGF0YS5jdXJyZW50UG9pbnQgPSB0aGlzLmN1cnJlbnRQb2ludC50
b0FycmF5KCk7CiAKLSAgICBmdW5jdGlvbiBJbnRlcnBvbGFudCggcGFyYW1ldGVyUG9zaXRpb25z
LCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApIHsKKyAgICAgICAgICAg
IHJldHVybiBkYXRhOwogCi0gICAgICAgIHRoaXMucGFyYW1ldGVyUG9zaXRpb25zID0gcGFyYW1l
dGVyUG9zaXRpb25zOwotICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IDA7CisgICAgICAgIH0s
CiAKLSAgICAgICAgdGhpcy5yZXN1bHRCdWZmZXIgPSByZXN1bHRCdWZmZXIgIT09IHVuZGVmaW5l
ZCA/Ci0gICAgICAgICAgICAgICAgcmVzdWx0QnVmZmVyIDogbmV3IHNhbXBsZVZhbHVlcy5jb25z
dHJ1Y3Rvciggc2FtcGxlU2l6ZSApOwotICAgICAgICB0aGlzLnNhbXBsZVZhbHVlcyA9IHNhbXBs
ZVZhbHVlczsKLSAgICAgICAgdGhpcy52YWx1ZVNpemUgPSBzYW1wbGVTaXplOworICAgICAgICBm
cm9tSlNPTjogZnVuY3Rpb24gKCBqc29uICkgewogCi0gICAgfQorICAgICAgICAgICAgQ3VydmVQ
YXRoLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKCB0aGlzLCBqc29uICk7CiAKLSAgICBPYmplY3Qu
YXNzaWduKCBJbnRlcnBvbGFudC5wcm90b3R5cGUsIHsKKyAgICAgICAgICAgIHRoaXMuY3VycmVu
dFBvaW50LmZyb21BcnJheSgganNvbi5jdXJyZW50UG9pbnQgKTsKIAotICAgICAgICBldmFsdWF0
ZTogZnVuY3Rpb24oIHQgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAg
ICAgdmFyIHBwID0gdGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsCi0gICAgICAgICAgICAgICAgaTEg
PSB0aGlzLl9jYWNoZWRJbmRleCwKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdDEgPSBw
cFsgICBpMSAgIF0sCi0gICAgICAgICAgICAgICAgdDAgPSBwcFsgaTEgLSAxIF07CisgICAgfSAp
OwogCi0gICAgICAgICAgICB2YWxpZGF0ZV9pbnRlcnZhbDogeworICAgIC8qKgorICAgICAqIEBh
dXRob3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKKyAgICAgKiBE
ZWZpbmVzIGEgMmQgc2hhcGUgcGxhbmUgdXNpbmcgcGF0aHMuCisgICAgICoqLwogCi0gICAgICAg
ICAgICAgICAgc2VlazogeworICAgIC8vIFNURVAgMSBDcmVhdGUgYSBwYXRoLgorICAgIC8vIFNU
RVAgMiBUdXJuIHBhdGggaW50byBzaGFwZS4KKyAgICAvLyBTVEVQIDMgRXh0cnVkZUdlb21ldHJ5
IHRha2VzIGluIFNoYXBlL1NoYXBlcworICAgIC8vIFNURVAgM2EgLSBFeHRyYWN0IHBvaW50cyBm
cm9tIGVhY2ggc2hhcGUsIHR1cm4gdG8gdmVydGljZXMKKyAgICAvLyBTVEVQIDNiIC0gVHJpYW5n
dWxhdGUgZWFjaCBzaGFwZSwgYWRkIGZhY2VzLgogCi0gICAgICAgICAgICAgICAgICAgIHZhciBy
aWdodDsKKyAgICBmdW5jdGlvbiBTaGFwZSggcG9pbnRzICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIGxpbmVhcl9zY2FuOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLy0gU2VlIGh0dHA6
Ly9qc3BlcmYuY29tL2NvbXBhcmlzb24tdG8tdW5kZWZpbmVkLzMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vLSBzbG93ZXIgY29kZToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8tICAgICAgICAgICAgICAgICBpZiAoIHQgPj0gdDEgfHwg
dDEgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfc2Nh
bjogaWYgKCAhICggdCA8IHQxICkgKSB7CisgICAgICAgIFBhdGguY2FsbCggdGhpcywgcG9pbnRz
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgZ2l2ZVVwQXQgPSBp
MSArIDI7IDspIHsKKyAgICAgICAgdGhpcy51dWlkID0gX01hdGguZ2VuZXJhdGVVVUlEKCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0MSA9PT0gdW5kZWZpbmVkICkg
eworICAgICAgICB0aGlzLnR5cGUgPSAnU2hhcGUnOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHQgPCB0MCApIGJyZWFrIGZvcndhcmRfc2NhbjsKKyAgICAgICAg
dGhpcy5ob2xlcyA9IFtdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhZnRlciBlbmQKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkxID0gcHAubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY2FjaGVkSW5kZXggPSBpMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmFmdGVyRW5kXyggaTEgLSAxLCB0LCB0MCApOworICAgIFNoYXBlLnByb3Rv
dHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIFBhdGgucHJvdG90eXBlICksIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGNvbnN0cnVjdG9y
OiBTaGFwZSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGkxID09PSBn
aXZlVXBBdCApIGJyZWFrOyAvLyB0aGlzIGxvb3AKKyAgICAgICAgZ2V0UG9pbnRzSG9sZXM6IGZ1
bmN0aW9uICggZGl2aXNpb25zICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHQwID0gdDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gcHBbICsrIGkx
IF07CisgICAgICAgICAgICB2YXIgaG9sZXNQdHMgPSBbXTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHQgPCB0MSApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgbCA9IHRoaXMuaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhcnJpdmVkIGF0IHRoZSBzb3VnaHQg
aW50ZXJ2YWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNlZWs7
CisgICAgICAgICAgICAgICAgaG9sZXNQdHNbIGkgXSA9IHRoaXMuaG9sZXNbIGkgXS5nZXRQb2lu
dHMoIGRpdmlzaW9ucyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBob2xlc1B0czsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBh
cmUgYmluYXJ5IHNlYXJjaCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5kZXgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBwLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhayBsaW5lYXJfc2NhbjsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAvLyBnZXQgcG9pbnRzIG9mIHNoYXBlIGFuZCBob2xlcyAo
a2V5cG9pbnRzIGJhc2VkIG9uIHNlZ21lbnRzIHBhcmFtZXRlcikKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8tIHNsb3dlciBjb2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8tICAg
ICAgICAgICAgICAgICBpZiAoIHQgPCB0MCB8fCB0MCA9PT0gdW5kZWZpbmVkICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhICggdCA+PSB0MCApICkgeworICAgICAgICBleHRyYWN0
UG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGxvb3Bpbmc/CisgICAgICAgICAgICByZXR1cm4gewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHQxZ2xvYmFsID0gcHBbIDEgXTsKKyAgICAgICAgICAgICAgICBz
aGFwZTogdGhpcy5nZXRQb2ludHMoIGRpdmlzaW9ucyApLAorICAgICAgICAgICAgICAgIGhvbGVz
OiB0aGlzLmdldFBvaW50c0hvbGVzKCBkaXZpc2lvbnMgKQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0IDwgdDFnbG9iYWwgKSB7CisgICAgICAgICAgICB9OwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGkxID0gMjsgLy8gKyAxLCB1c2luZyB0aGUgc2NhbiBm
b3IgdGhlIGRldGFpbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAgPSB0MWds
b2JhbDsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgY29weTogZnVuY3Rpb24gKCBzb3VyY2UgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBsaW5lYXIgcmV2ZXJzZSBzY2FuCisgICAgICAgICAgICBQYXRoLnByb3RvdHlwZS5j
b3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIGdpdmVVcEF0ID0gaTEgLSAyOyA7KSB7CisgICAgICAgICAgICB0aGlzLmhvbGVz
ID0gW107CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0MCA9PT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gc291cmNlLmhvbGVz
Lmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJlZm9yZSBzdGFydAorICAgICAgICAgICAgICAgIHZhciBob2xlID0gc291cmNl
LmhvbGVzWyBpIF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2NhY2hlZEluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmJlZm9yZVN0YXJ0XyggMCwgdCwgdDEgKTsKKyAgICAgICAgICAgICAgICB0aGlz
LmhvbGVzLnB1c2goIGhvbGUuY2xvbmUoKSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGkxID09PSBnaXZlVXBBdCApIGJyZWFrOyAvLyB0aGlzIGxvb3AKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdDA7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gcHBbIC0tIGkxIC0gMSBdOwor
ICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdCA+PSB0
MCApIHsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYXJyaXZlZCBhdCB0aGUgc291Z2h0IGludGVy
dmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzZWVrOworICAg
ICAgICAgICAgdmFyIGRhdGEgPSBQYXRoLnByb3RvdHlwZS50b0pTT04uY2FsbCggdGhpcyApOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEudXVp
ZCA9IHRoaXMudXVpZDsKKyAgICAgICAgICAgIGRhdGEuaG9sZXMgPSBbXTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRo
aXMuaG9sZXMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHByZXBhcmUgYmluYXJ5IHNlYXJjaCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBp
bmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gaTE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaTEgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIGxpbmVhcl9zY2FuOworICAgICAgICAgICAgICAgIHZhciBob2xlID0gdGhpcy5ob2xlc1sg
aSBdOworICAgICAgICAgICAgICAgIGRhdGEuaG9sZXMucHVzaCggaG9sZS50b0pTT04oKSApOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBpbnRlcnZhbCBpcyB2YWxpZAorICAgICAgICAgICAgcmV0dXJu
IGRhdGE7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHZhbGlkYXRlX2ludGVydmFs
OworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAgIH0gLy8gbGluZWFyIHNjYW4KKyAg
ICAgICAgZnJvbUpTT046IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAgICAgICAgICAgICAgICAg
ICAvLyBiaW5hcnkgc2VhcmNoCisgICAgICAgICAgICBQYXRoLnByb3RvdHlwZS5mcm9tSlNPTi5j
YWxsKCB0aGlzLCBqc29uICk7CiAKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpMSA8IHJp
Z2h0ICkgeworICAgICAgICAgICAgdGhpcy51dWlkID0ganNvbi51dWlkOworICAgICAgICAgICAg
dGhpcy5ob2xlcyA9IFtdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlkID0gKCBp
MSArIHJpZ2h0ICkgPj4+IDE7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBqc29u
LmhvbGVzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdCA8IHBwWyBtaWQgXSApIHsKKyAgICAgICAgICAgICAgICB2YXIgaG9sZSA9IGpzb24u
aG9sZXNbIGkgXTsKKyAgICAgICAgICAgICAgICB0aGlzLmhvbGVzLnB1c2goIG5ldyBQYXRoKCku
ZnJvbUpTT04oIGhvbGUgKSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQg
PSBtaWQ7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkxID0gbWlkICsgMTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgfSApOwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAYXV0aG9y
IG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBo
dHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAg
dDEgPSBwcFsgICBpMSAgIF07Ci0gICAgICAgICAgICAgICAgICAgIHQwID0gcHBbIGkxIC0gMSBd
OworICAgIGZ1bmN0aW9uIExpZ2h0KCBjb2xvciwgaW50ZW5zaXR5ICkgewogCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGNoZWNrIGJvdW5kYXJ5IGNhc2VzLCBhZ2FpbgorICAgICAgICBPYmplY3Qz
RC5jYWxsKCB0aGlzICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0MCA9PT0gdW5kZWZp
bmVkICkgeworICAgICAgICB0aGlzLnR5cGUgPSAnTGlnaHQnOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5iZWZvcmVTdGFydF8oIDAsIHQsIHQxICk7CisgICAgICAgIHRoaXMuY29sb3Ig
PSBuZXcgQ29sb3IoIGNvbG9yICk7CisgICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gaW50ZW5zaXR5
ICE9PSB1bmRlZmluZWQgPyBpbnRlbnNpdHkgOiAxOwogCi0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgdGhpcy5yZWNlaXZlU2hhZG93ID0gdW5kZWZpbmVkOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggdDEgPT09IHVuZGVmaW5lZCApIHsKKyAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGkxID0gcHAubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5f
Y2FjaGVkSW5kZXggPSBpMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFm
dGVyRW5kXyggaTEgLSAxLCB0MCwgdCApOworICAgIExpZ2h0LnByb3RvdHlwZSA9IE9iamVjdC5h
c3NpZ24oIE9iamVjdC5jcmVhdGUoIE9iamVjdDNELnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICBjb25zdHJ1Y3RvcjogTGlnaHQsCiAKLSAgICAgICAgICAg
ICAgICB9IC8vIHNlZWsKKyAgICAgICAgaXNMaWdodDogdHJ1ZSwKIAotICAgICAgICAgICAgICAg
IHRoaXMuX2NhY2hlZEluZGV4ID0gaTE7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNl
ICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbENoYW5nZWRfKCBpMSwgdDAsIHQx
ICk7CisgICAgICAgICAgICBPYmplY3QzRC5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3Vy
Y2UgKTsKIAotICAgICAgICAgICAgfSAvLyB2YWxpZGF0ZV9pbnRlcnZhbAorICAgICAgICAgICAg
dGhpcy5jb2xvci5jb3B5KCBzb3VyY2UuY29sb3IgKTsKKyAgICAgICAgICAgIHRoaXMuaW50ZW5z
aXR5ID0gc291cmNlLmludGVuc2l0eTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJw
b2xhdGVfKCBpMSwgdDAsIHQsIHQxICk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAg
ICAgICB9LAogCi0gICAgICAgIHNldHRpbmdzOiBudWxsLCAvLyBvcHRpb25hbCwgc3ViY2xhc3Mt
c3BlY2lmaWMgc2V0dGluZ3Mgc3RydWN0dXJlCi0gICAgICAgIC8vIE5vdGU6IFRoZSBpbmRpcmVj
dGlvbiBhbGxvd3MgY2VudHJhbCBjb250cm9sIG9mIG1hbnkgaW50ZXJwb2xhbnRzLgorICAgICAg
ICB0b0pTT046IGZ1bmN0aW9uICggbWV0YSApIHsKIAotICAgICAgICAvLyAtLS0gUHJvdGVjdGVk
IGludGVyZmFjZQorICAgICAgICAgICAgdmFyIGRhdGEgPSBPYmplY3QzRC5wcm90b3R5cGUudG9K
U09OLmNhbGwoIHRoaXMsIG1ldGEgKTsKIAotICAgICAgICBEZWZhdWx0U2V0dGluZ3NfOiB7fSwK
KyAgICAgICAgICAgIGRhdGEub2JqZWN0LmNvbG9yID0gdGhpcy5jb2xvci5nZXRIZXgoKTsKKyAg
ICAgICAgICAgIGRhdGEub2JqZWN0LmludGVuc2l0eSA9IHRoaXMuaW50ZW5zaXR5OwogCi0gICAg
ICAgIGdldFNldHRpbmdzXzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMuZ3Jv
dW5kQ29sb3IgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0Lmdyb3VuZENvbG9yID0gdGhpcy5n
cm91bmRDb2xvci5nZXRIZXgoKTsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Mg
fHwgdGhpcy5EZWZhdWx0U2V0dGluZ3NfOworICAgICAgICAgICAgaWYgKCB0aGlzLmRpc3RhbmNl
ICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5kaXN0YW5jZSA9IHRoaXMuZGlzdGFuY2U7Cisg
ICAgICAgICAgICBpZiAoIHRoaXMuYW5nbGUgIT09IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LmFu
Z2xlID0gdGhpcy5hbmdsZTsKKyAgICAgICAgICAgIGlmICggdGhpcy5kZWNheSAhPT0gdW5kZWZp
bmVkICkgZGF0YS5vYmplY3QuZGVjYXkgPSB0aGlzLmRlY2F5OworICAgICAgICAgICAgaWYgKCB0
aGlzLnBlbnVtYnJhICE9PSB1bmRlZmluZWQgKSBkYXRhLm9iamVjdC5wZW51bWJyYSA9IHRoaXMu
cGVudW1icmE7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICggdGhpcy5zaGFkb3cgIT09
IHVuZGVmaW5lZCApIGRhdGEub2JqZWN0LnNoYWRvdyA9IHRoaXMuc2hhZG93LnRvSlNPTigpOwog
Ci0gICAgICAgIGNvcHlTYW1wbGVWYWx1ZV86IGZ1bmN0aW9uKCBpbmRleCApIHsKKyAgICAgICAg
ICAgIHJldHVybiBkYXRhOwogCi0gICAgICAgICAgICAvLyBjb3BpZXMgYSBzYW1wbGUgdmFsdWUg
dG8gdGhlIHJlc3VsdCBidWZmZXIKKyAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgcmVzdWx0
ID0gdGhpcy5yZXN1bHRCdWZmZXIsCi0gICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5zYW1w
bGVWYWx1ZXMsCi0gICAgICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsCi0gICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gaW5kZXggKiBzdHJpZGU7CisgICAgfSApOwogCi0gICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IHN0cmlkZTsgKysgaSApIHsKKyAgICAvKioKKyAg
ICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAq
LwogCi0gICAgICAgICAgICAgICAgcmVzdWx0WyBpIF0gPSB2YWx1ZXNbIG9mZnNldCArIGkgXTsK
KyAgICBmdW5jdGlvbiBIZW1pc3BoZXJlTGlnaHQoIHNreUNvbG9yLCBncm91bmRDb2xvciwgaW50
ZW5zaXR5ICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgIExpZ2h0LmNhbGwoIHRoaXMsIHNr
eUNvbG9yLCBpbnRlbnNpdHkgKTsKIAotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgdGhpcy50eXBlID0gJ0hlbWlzcGhlcmVMaWdodCc7CiAKLSAgICAgICAgfSwKKyAgICAgICAg
dGhpcy5jYXN0U2hhZG93ID0gdW5kZWZpbmVkOwogCi0gICAgICAgIC8vIFRlbXBsYXRlIG1ldGhv
ZHMgZm9yIGRlcml2ZWQgY2xhc3NlczoKKyAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KCBPYmpl
Y3QzRC5EZWZhdWx0VXAgKTsKKyAgICAgICAgdGhpcy51cGRhdGVNYXRyaXgoKTsKIAotICAgICAg
ICBpbnRlcnBvbGF0ZV86IGZ1bmN0aW9uKCBpMSwgdDAsIHQsIHQxICkgeworICAgICAgICB0aGlz
Lmdyb3VuZENvbG9yID0gbmV3IENvbG9yKCBncm91bmRDb2xvciApOwogCi0gICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoICJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIgKTsKLSAgICAgICAgICAg
IC8vIGltcGxlbWVudGF0aW9ucyBzaGFsbCByZXR1cm4gdGhpcy5yZXN1bHRCdWZmZXIKKyAgICB9
CiAKLSAgICAgICAgfSwKKyAgICBIZW1pc3BoZXJlTGlnaHQucHJvdG90eXBlID0gT2JqZWN0LmFz
c2lnbiggT2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBlICksIHsKIAotICAgICAgICBpbnRl
cnZhbENoYW5nZWRfOiBmdW5jdGlvbiggaTEsIHQwLCB0MSApIHsKKyAgICAgICAgY29uc3RydWN0
b3I6IEhlbWlzcGhlcmVMaWdodCwKIAotICAgICAgICAgICAgLy8gZW1wdHkKKyAgICAgICAgaXNI
ZW1pc3BoZXJlTGlnaHQ6IHRydWUsCiAKLSAgICAgICAgfQorICAgICAgICBjb3B5OiBmdW5jdGlv
biAoIHNvdXJjZSApIHsKIAotICAgIH0gKTsKKyAgICAgICAgICAgIExpZ2h0LnByb3RvdHlwZS5j
b3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgLy8hXCBERUNMQVJFIEFMSUFTIEFGVEVS
IGFzc2lnbiBwcm90b3R5cGUgIQotICAgIE9iamVjdC5hc3NpZ24oIEludGVycG9sYW50LnByb3Rv
dHlwZSwgeworICAgICAgICAgICAgdGhpcy5ncm91bmRDb2xvci5jb3B5KCBzb3VyY2UuZ3JvdW5k
Q29sb3IgKTsKIAotICAgICAgICAvLyggMCwgdCwgdDAgKSwgcmV0dXJucyB0aGlzLnJlc3VsdEJ1
ZmZlcgotICAgICAgICBiZWZvcmVTdGFydF86IEludGVycG9sYW50LnByb3RvdHlwZS5jb3B5U2Ft
cGxlVmFsdWVfLAorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgLy8oIE4tMSwg
dE4tMSwgdCApLCByZXR1cm5zIHRoaXMucmVzdWx0QnVmZmVyCi0gICAgICAgIGFmdGVyRW5kXzog
SW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sCisgICAgICAgIH0KIAogICAg
IH0gKTsKIAogICAgIC8qKgotICAgICAqIEZhc3QgYW5kIHNpbXBsZSBjdWJpYyBzcGxpbmUgaW50
ZXJwb2xhbnQuCi0gICAgICoKLSAgICAgKiBJdCB3YXMgZGVyaXZlZCBmcm9tIGEgSGVybWl0aWFu
IGNvbnN0cnVjdGlvbiBzZXR0aW5nIHRoZSBmaXJzdCBkZXJpdmF0aXZlCi0gICAgICogYXQgZWFj
aCBzYW1wbGUgcG9zaXRpb24gdG8gdGhlIGxpbmVhciBzbG9wZSBiZXR3ZWVuIG5laWdoYm9yaW5n
IHBvc2l0aW9ucwotICAgICAqIG92ZXIgdGhlaXIgcGFyYW1ldGVyIGludGVydmFsLgotICAgICAq
Ci0gICAgICogQGF1dGhvciB0c2NodworICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21y
ZG9vYi5jb20vCiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBDdWJpY0ludGVycG9sYW50KCBwYXJh
bWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICkg
eworICAgIGZ1bmN0aW9uIExpZ2h0U2hhZG93KCBjYW1lcmEgKSB7CiAKLSAgICAgICAgSW50ZXJw
b2xhbnQuY2FsbCgKLSAgICAgICAgICAgICAgICB0aGlzLCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNh
bXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICk7CisgICAgICAgIHRoaXMuY2Ft
ZXJhID0gY2FtZXJhOwogCi0gICAgICAgIHRoaXMuX3dlaWdodFByZXYgPSAtMDsKLSAgICAgICAg
dGhpcy5fb2Zmc2V0UHJldiA9IC0wOwotICAgICAgICB0aGlzLl93ZWlnaHROZXh0ID0gLTA7Ci0g
ICAgICAgIHRoaXMuX29mZnNldE5leHQgPSAtMDsKKyAgICAgICAgdGhpcy5iaWFzID0gMDsKKyAg
ICAgICAgdGhpcy5yYWRpdXMgPSAxOwogCi0gICAgfQorICAgICAgICB0aGlzLm1hcFNpemUgPSBu
ZXcgVmVjdG9yMiggNTEyLCA1MTIgKTsKIAotICAgIEN1YmljSW50ZXJwb2xhbnQucHJvdG90eXBl
ID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggSW50ZXJwb2xhbnQucHJvdG90eXBlICks
IHsKKyAgICAgICAgdGhpcy5tYXAgPSBudWxsOworICAgICAgICB0aGlzLm1hdHJpeCA9IG5ldyBN
YXRyaXg0KCk7CiAKLSAgICAgICAgY29uc3RydWN0b3I6IEN1YmljSW50ZXJwb2xhbnQsCisgICAg
fQogCi0gICAgICAgIERlZmF1bHRTZXR0aW5nc186IHsKKyAgICBPYmplY3QuYXNzaWduKCBMaWdo
dFNoYWRvdy5wcm90b3R5cGUsIHsKIAotICAgICAgICAgICAgZW5kaW5nU3RhcnQ6ICAgIFplcm9D
dXJ2YXR1cmVFbmRpbmcsCi0gICAgICAgICAgICBlbmRpbmdFbmQ6ICAgICAgWmVyb0N1cnZhdHVy
ZUVuZGluZworICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgdGhpcy5jYW1lcmEgPSBzb3VyY2UuY2FtZXJhLmNsb25lKCk7CiAKLSAg
ICAgICAgaW50ZXJ2YWxDaGFuZ2VkXzogZnVuY3Rpb24oIGkxLCB0MCwgdDEgKSB7CisgICAgICAg
ICAgICB0aGlzLmJpYXMgPSBzb3VyY2UuYmlhczsKKyAgICAgICAgICAgIHRoaXMucmFkaXVzID0g
c291cmNlLnJhZGl1czsKIAotICAgICAgICAgICAgdmFyIHBwID0gdGhpcy5wYXJhbWV0ZXJQb3Np
dGlvbnMsCi0gICAgICAgICAgICAgICAgaVByZXYgPSBpMSAtIDIsCi0gICAgICAgICAgICAgICAg
aU5leHQgPSBpMSArIDEsCisgICAgICAgICAgICB0aGlzLm1hcFNpemUuY29weSggc291cmNlLm1h
cFNpemUgKTsKIAotICAgICAgICAgICAgICAgIHRQcmV2ID0gcHBbIGlQcmV2IF0sCi0gICAgICAg
ICAgICAgICAgdE5leHQgPSBwcFsgaU5leHQgXTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwog
Ci0gICAgICAgICAgICBpZiAoIHRQcmV2ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0
ICkgeworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgICAg
IGNhc2UgWmVyb1Nsb3BlRW5kaW5nOgorICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0
cnVjdG9yKCkuY29weSggdGhpcyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmJyh0
MCkgPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICBpUHJldiA9IGkxOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdFByZXYgPSAyICogdDAgLSB0MTsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRvSlNPTjogZnVuY3Rpb24gKCkgewogCi0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgV3JhcEFyb3VuZEVuZGluZzoKKyAgICAgICAgICAgIHZh
ciBvYmplY3QgPSB7fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBvdGhl
ciBlbmQgb2YgdGhlIGN1cnZlCi0gICAgICAgICAgICAgICAgICAgICAgICBpUHJldiA9IHBwLmxl
bmd0aCAtIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0UHJldiA9IHQwICsgcHBbIGlQcmV2
IF0gLSBwcFsgaVByZXYgKyAxIF07CisgICAgICAgICAgICBpZiAoIHRoaXMuYmlhcyAhPT0gMCAp
IG9iamVjdC5iaWFzID0gdGhpcy5iaWFzOworICAgICAgICAgICAgaWYgKCB0aGlzLnJhZGl1cyAh
PT0gMSApIG9iamVjdC5yYWRpdXMgPSB0aGlzLnJhZGl1czsKKyAgICAgICAgICAgIGlmICggdGhp
cy5tYXBTaXplLnggIT09IDUxMiB8fCB0aGlzLm1hcFNpemUueSAhPT0gNTEyICkgb2JqZWN0Lm1h
cFNpemUgPSB0aGlzLm1hcFNpemUudG9BcnJheSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIG9iamVjdC5jYW1lcmEgPSB0aGlzLmNhbWVyYS50b0pTT04o
IGZhbHNlICkub2JqZWN0OworICAgICAgICAgICAgZGVsZXRlIG9iamVjdC5jYW1lcmEubWF0cml4
OwogCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIFplcm9DdXJ2YXR1cmVFbmRpbmcK
KyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGYnJyh0MCkgPSAwIGEuay5hLiBOYXR1cmFsIFNwbGluZQotICAgICAgICAgICAgICAgICAgICAg
ICAgaVByZXYgPSBpMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRQcmV2ID0gdDE7CisgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIH0KKyAgICB9ICk7CiAKLSAgICAgICAgICAgIH0KKyAg
ICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAq
LwogCi0gICAgICAgICAgICBpZiAoIHROZXh0ID09PSB1bmRlZmluZWQgKSB7CisgICAgZnVuY3Rp
b24gU3BvdExpZ2h0U2hhZG93KCkgewogCi0gICAgICAgICAgICAgICAgc3dpdGNoICggdGhpcy5n
ZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQgKSB7CisgICAgICAgIExpZ2h0U2hhZG93LmNhbGwoIHRo
aXMsIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggNTAsIDEsIDAuNSwgNTAwICkgKTsKIAotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFplcm9TbG9wZUVuZGluZzoKKyAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGYnKHROKSA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlOZXh0
ID0gaTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0TmV4dCA9IDIgKiB0MSAtIHQwOworICAg
IFNwb3RMaWdodFNoYWRvdy5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRl
KCBMaWdodFNoYWRvdy5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY29uc3RydWN0b3I6IFNwb3RMaWdodFNoYWRvdywKIAotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFdyYXBBcm91bmRFbmRpbmc6CisgICAgICAgIGlzU3BvdExpZ2h0U2hh
ZG93OiB0cnVlLAogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIG90aGVyIGVu
ZCBvZiB0aGUgY3VydmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlOZXh0ID0gMTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHROZXh0ID0gdDEgKyBwcFsgMSBdIC0gcHBbIDAgXTsKKyAgICAg
ICAgdXBkYXRlOiBmdW5jdGlvbiAoIGxpZ2h0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLmNhbWVyYTsKIAotICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBaZXJvQ3VydmF0dXJlRW5kaW5nCisgICAgICAgICAg
ICB2YXIgZm92ID0gX01hdGguUkFEMkRFRyAqIDIgKiBsaWdodC5hbmdsZTsKKyAgICAgICAgICAg
IHZhciBhc3BlY3QgPSB0aGlzLm1hcFNpemUud2lkdGggLyB0aGlzLm1hcFNpemUuaGVpZ2h0Owor
ICAgICAgICAgICAgdmFyIGZhciA9IGxpZ2h0LmRpc3RhbmNlIHx8IGNhbWVyYS5mYXI7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGYnJyh0TikgPSAwLCBhLmsuYS4gTmF0dXJhbCBTcGxp
bmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlOZXh0ID0gaTEgLSAxOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdE5leHQgPSB0MDsKKyAgICAgICAgICAgIGlmICggZm92ICE9PSBjYW1lcmEu
Zm92IHx8IGFzcGVjdCAhPT0gY2FtZXJhLmFzcGVjdCB8fCBmYXIgIT09IGNhbWVyYS5mYXIgKSB7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjsK
KyAgICAgICAgICAgICAgICBjYW1lcmEuYXNwZWN0ID0gYXNwZWN0OworICAgICAgICAgICAgICAg
IGNhbWVyYS5mYXIgPSBmYXI7CisgICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZVByb2plY3Rp
b25NYXRyaXgoKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgaGFsZkR0ID0g
KCB0MSAtIHQwICkgKiAwLjUsCi0gICAgICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1ZVNp
emU7CisgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5fd2VpZ2h0UHJldiA9IGhhbGZEdCAv
ICggdDAgLSB0UHJldiApOwotICAgICAgICAgICAgdGhpcy5fd2VpZ2h0TmV4dCA9IGhhbGZEdCAv
ICggdE5leHQgLSB0MSApOwotICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UHJldiA9IGlQcmV2ICog
c3RyaWRlOwotICAgICAgICAgICAgdGhpcy5fb2Zmc2V0TmV4dCA9IGlOZXh0ICogc3RyaWRlOwor
ICAgIH0gKTsKIAotICAgICAgICB9LAorICAgIC8qKgorICAgICAqIEBhdXRob3IgYWx0ZXJlZHEg
LyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAgICovCiAKLSAgICAgICAgaW50ZXJwb2xh
dGVfOiBmdW5jdGlvbiggaTEsIHQwLCB0LCB0MSApIHsKKyAgICBmdW5jdGlvbiBTcG90TGlnaHQo
IGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlLCBhbmdsZSwgcGVudW1icmEsIGRlY2F5ICkgewog
Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsCi0gICAgICAgICAg
ICAgICAgdmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsCi0gICAgICAgICAgICAgICAgc3RyaWRl
ID0gdGhpcy52YWx1ZVNpemUsCisgICAgICAgIExpZ2h0LmNhbGwoIHRoaXMsIGNvbG9yLCBpbnRl
bnNpdHkgKTsKIAotICAgICAgICAgICAgICAgIG8xID0gaTEgKiBzdHJpZGUsICAgICAgIG8wID0g
bzEgLSBzdHJpZGUsCi0gICAgICAgICAgICAgICAgb1AgPSB0aGlzLl9vZmZzZXRQcmV2LCAgb04g
PSB0aGlzLl9vZmZzZXROZXh0LAotICAgICAgICAgICAgICAgIHdQID0gdGhpcy5fd2VpZ2h0UHJl
diwgIHdOID0gdGhpcy5fd2VpZ2h0TmV4dCwKKyAgICAgICAgdGhpcy50eXBlID0gJ1Nwb3RMaWdo
dCc7CiAKLSAgICAgICAgICAgICAgICBwID0gKCB0IC0gdDAgKSAvICggdDEgLSB0MCApLAotICAg
ICAgICAgICAgICAgIHBwID0gcCAqIHAsCi0gICAgICAgICAgICAgICAgcHBwID0gcHAgKiBwOwor
ICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVjdDNELkRlZmF1bHRVcCApOworICAgICAg
ICB0aGlzLnVwZGF0ZU1hdHJpeCgpOwogCi0gICAgICAgICAgICAvLyBldmFsdWF0ZSBwb2x5bm9t
aWFscworICAgICAgICB0aGlzLnRhcmdldCA9IG5ldyBPYmplY3QzRCgpOwogCi0gICAgICAgICAg
ICB2YXIgc1AgPSAgICAgLSB3UCAgICogcHBwICAgKyAgICAgICAgIDIgKiB3UCAgICAqIHBwICAg
IC0gICAgICAgICAgd1AgICAqIHA7Ci0gICAgICAgICAgICB2YXIgczAgPSAoIDEgKyB3UCApICog
cHBwICAgKyAoLTEuNSAtIDIgKiB3UCApICAqIHBwICAgICsgKCAtMC41ICsgd1AgKSAqIHAgICAg
ICsgMTsKLSAgICAgICAgICAgIHZhciBzMSA9ICgtMSAtIHdOICkgKiBwcHAgICArICggMS41ICsg
ICB3TiAgICkgICogcHAgICAgKyAgICAwLjUgICAgICAgICogcDsKLSAgICAgICAgICAgIHZhciBz
TiA9ICAgICAgIHdOICAgKiBwcHAgICAtICAgICAgICAgICB3TiAgICAgICogcHA7CisgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ3Bvd2VyJywgeworICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIC8vIGNvbWJpbmUgZGF0YSBsaW5lYXJseQor
ICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBlciBzb2xpZCBhbmdsZS4KKyAg
ICAgICAgICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNykgZnJvbSBodHRwczovL3NlYmxhZ2Fy
ZGUuZmlsZXMud29yZHByZXNzLmNvbS8yMDE1LzA3L2NvdXJzZV9ub3Rlc19tb3ZpbmdfZnJvc3Ri
aXRlX3RvX3Bicl92MzIucGRmCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZW5zaXR5
ICogTWF0aC5QSTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpICE9PSBzdHJpZGU7
ICsrIGkgKSB7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHBv
d2VyICkgewogCi0gICAgICAgICAgICAgICAgcmVzdWx0WyBpIF0gPQotICAgICAgICAgICAgICAg
ICAgICAgICAgc1AgKiB2YWx1ZXNbIG9QICsgaSBdICsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHMwICogdmFsdWVzWyBvMCArIGkgXSArCi0gICAgICAgICAgICAgICAgICAgICAgICBzMSAqIHZh
bHVlc1sgbzEgKyBpIF0gKwotICAgICAgICAgICAgICAgICAgICAgICAgc04gKiB2YWx1ZXNbIG9O
ICsgaSBdOworICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSA9IHBvd2VyIHBlciBzb2xpZCBh
bmdsZS4KKyAgICAgICAgICAgICAgICAvLyByZWY6IGVxdWF0aW9uICgxNykgZnJvbSBodHRwczov
L3NlYmxhZ2FyZGUuZmlsZXMud29yZHByZXNzLmNvbS8yMDE1LzA3L2NvdXJzZV9ub3Rlc19tb3Zp
bmdfZnJvc3RiaXRlX3RvX3Bicl92MzIucGRmCisgICAgICAgICAgICAgICAgdGhpcy5pbnRlbnNp
dHkgPSBwb3dlciAvIE1hdGguUEk7CiAKICAgICAgICAgICAgIH0KKyAgICAgICAgfSApOwogCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB0aGlzLmRpc3RhbmNlID0gKCBkaXN0
YW5jZSAhPT0gdW5kZWZpbmVkICkgPyBkaXN0YW5jZSA6IDA7CisgICAgICAgIHRoaXMuYW5nbGUg
PSAoIGFuZ2xlICE9PSB1bmRlZmluZWQgKSA/IGFuZ2xlIDogTWF0aC5QSSAvIDM7CisgICAgICAg
IHRoaXMucGVudW1icmEgPSAoIHBlbnVtYnJhICE9PSB1bmRlZmluZWQgKSA/IHBlbnVtYnJhIDog
MDsKKyAgICAgICAgdGhpcy5kZWNheSA9ICggZGVjYXkgIT09IHVuZGVmaW5lZCApID8gZGVjYXkg
OiAxOyAgIC8vIGZvciBwaHlzaWNhbGx5IGNvcnJlY3QgbGlnaHRzLCBzaG91bGQgYmUgMi4KKwor
ICAgICAgICB0aGlzLnNoYWRvdyA9IG5ldyBTcG90TGlnaHRTaGFkb3coKTsKKworICAgIH0KKwor
ICAgIFNwb3RMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBM
aWdodC5wcm90b3R5cGUgKSwgeworCisgICAgICAgIGNvbnN0cnVjdG9yOiBTcG90TGlnaHQsCisK
KyAgICAgICAgaXNTcG90TGlnaHQ6IHRydWUsCisKKyAgICAgICAgY29weTogZnVuY3Rpb24gKCBz
b3VyY2UgKSB7CisKKyAgICAgICAgICAgIExpZ2h0LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMs
IHNvdXJjZSApOworCisgICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gc291cmNlLmRpc3RhbmNl
OworICAgICAgICAgICAgdGhpcy5hbmdsZSA9IHNvdXJjZS5hbmdsZTsKKyAgICAgICAgICAgIHRo
aXMucGVudW1icmEgPSBzb3VyY2UucGVudW1icmE7CisgICAgICAgICAgICB0aGlzLmRlY2F5ID0g
c291cmNlLmRlY2F5OworCisgICAgICAgICAgICB0aGlzLnRhcmdldCA9IHNvdXJjZS50YXJnZXQu
Y2xvbmUoKTsKKworICAgICAgICAgICAgdGhpcy5zaGFkb3cgPSBzb3VyY2Uuc2hhZG93LmNsb25l
KCk7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0KIAogICAgIH0gKTsK
IAogICAgIC8qKgotICAgICAqIEBhdXRob3IgdHNjaHcKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gTGluZWFySW50ZXJw
b2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1
bHRCdWZmZXIgKSB7Ci0KLSAgICAgICAgSW50ZXJwb2xhbnQuY2FsbCggdGhpcywgcGFyYW1ldGVy
UG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApOwotCi0g
ICAgfQotCi0gICAgTGluZWFySW50ZXJwb2xhbnQucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbigg
T2JqZWN0LmNyZWF0ZSggSW50ZXJwb2xhbnQucHJvdG90eXBlICksIHsKIAotICAgICAgICBjb25z
dHJ1Y3RvcjogTGluZWFySW50ZXJwb2xhbnQsCisgICAgZnVuY3Rpb24gUG9pbnRMaWdodCggY29s
b3IsIGludGVuc2l0eSwgZGlzdGFuY2UsIGRlY2F5ICkgewogCi0gICAgICAgIGludGVycG9sYXRl
XzogZnVuY3Rpb24oIGkxLCB0MCwgdCwgdDEgKSB7CisgICAgICAgIExpZ2h0LmNhbGwoIHRoaXMs
IGNvbG9yLCBpbnRlbnNpdHkgKTsKIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMucmVz
dWx0QnVmZmVyLAotICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuc2FtcGxlVmFsdWVzLAot
ICAgICAgICAgICAgICAgIHN0cmlkZSA9IHRoaXMudmFsdWVTaXplLAorICAgICAgICB0aGlzLnR5
cGUgPSAnUG9pbnRMaWdodCc7CiAKLSAgICAgICAgICAgICAgICBvZmZzZXQxID0gaTEgKiBzdHJp
ZGUsCi0gICAgICAgICAgICAgICAgb2Zmc2V0MCA9IG9mZnNldDEgLSBzdHJpZGUsCisgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgJ3Bvd2VyJywgeworICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICB3ZWlnaHQxID0gKCB0IC0gdDAgKSAv
ICggdDEgLSB0MCApLAotICAgICAgICAgICAgICAgIHdlaWdodDAgPSAxIC0gd2VpZ2h0MTsKKyAg
ICAgICAgICAgICAgICAvLyBpbnRlbnNpdHkgPSBwb3dlciBwZXIgc29saWQgYW5nbGUuCisgICAg
ICAgICAgICAgICAgLy8gcmVmOiBlcXVhdGlvbiAoMTUpIGZyb20gaHR0cHM6Ly9zZWJsYWdhcmRl
LmZpbGVzLndvcmRwcmVzcy5jb20vMjAxNS8wNy9jb3Vyc2Vfbm90ZXNfbW92aW5nX2Zyb3N0Yml0
ZV90b19wYnJfdjMyLnBkZgorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVuc2l0eSAq
IDQgKiBNYXRoLlBJOwogCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IHN0cmlk
ZTsgKysgaSApIHsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgg
cG93ZXIgKSB7CiAKLSAgICAgICAgICAgICAgICByZXN1bHRbIGkgXSA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXNbIG9mZnNldDAgKyBpIF0gKiB3ZWlnaHQwICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlc1sgb2Zmc2V0MSArIGkgXSAqIHdlaWdodDE7CisgICAgICAgICAg
ICAgICAgLy8gaW50ZW5zaXR5ID0gcG93ZXIgcGVyIHNvbGlkIGFuZ2xlLgorICAgICAgICAgICAg
ICAgIC8vIHJlZjogZXF1YXRpb24gKDE1KSBmcm9tIGh0dHBzOi8vc2VibGFnYXJkZS5maWxlcy53
b3JkcHJlc3MuY29tLzIwMTUvMDcvY291cnNlX25vdGVzX21vdmluZ19mcm9zdGJpdGVfdG9fcGJy
X3YzMi5wZGYKKyAgICAgICAgICAgICAgICB0aGlzLmludGVuc2l0eSA9IHBvd2VyIC8gKCA0ICog
TWF0aC5QSSApOwogCiAgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKIAotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgdGhpcy5kaXN0YW5jZSA9ICggZGlzdGFuY2UgIT09IHVu
ZGVmaW5lZCApID8gZGlzdGFuY2UgOiAwOworICAgICAgICB0aGlzLmRlY2F5ID0gKCBkZWNheSAh
PT0gdW5kZWZpbmVkICkgPyBkZWNheSA6IDE7ICAgLy8gZm9yIHBoeXNpY2FsbHkgY29ycmVjdCBs
aWdodHMsIHNob3VsZCBiZSAyLgogCi0gICAgICAgIH0KKyAgICAgICAgdGhpcy5zaGFkb3cgPSBu
ZXcgTGlnaHRTaGFkb3coIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSggOTAsIDEsIDAuNSwgNTAwICkg
KTsKIAotICAgIH0gKTsKKyAgICB9CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqIEludGVycG9s
YW50IHRoYXQgZXZhbHVhdGVzIHRvIHRoZSBzYW1wbGUgdmFsdWUgYXQgdGhlIHBvc2l0aW9uIHBy
ZWNlZWRpbmcKLSAgICAgKiB0aGUgcGFyYW1ldGVyLgotICAgICAqCi0gICAgICogQGF1dGhvciB0
c2NodwotICAgICAqLworICAgIFBvaW50TGlnaHQucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbigg
T2JqZWN0LmNyZWF0ZSggTGlnaHQucHJvdG90eXBlICksIHsKIAotICAgIGZ1bmN0aW9uIERpc2Ny
ZXRlSW50ZXJwb2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywgc2FtcGxlVmFsdWVzLCBzYW1wbGVT
aXplLCByZXN1bHRCdWZmZXIgKSB7CisgICAgICAgIGNvbnN0cnVjdG9yOiBQb2ludExpZ2h0LAog
Ci0gICAgICAgIEludGVycG9sYW50LmNhbGwoIHRoaXMsIHBhcmFtZXRlclBvc2l0aW9ucywgc2Ft
cGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKTsKKyAgICAgICAgaXNQb2ludExp
Z2h0OiB0cnVlLAogCi0gICAgfQorICAgICAgICBjb3B5OiBmdW5jdGlvbiAoIHNvdXJjZSApIHsK
IAotICAgIERpc2NyZXRlSW50ZXJwb2xhbnQucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2Jq
ZWN0LmNyZWF0ZSggSW50ZXJwb2xhbnQucHJvdG90eXBlICksIHsKKyAgICAgICAgICAgIExpZ2h0
LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAgIGNvbnN0cnVj
dG9yOiBEaXNjcmV0ZUludGVycG9sYW50LAorICAgICAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHNv
dXJjZS5kaXN0YW5jZTsKKyAgICAgICAgICAgIHRoaXMuZGVjYXkgPSBzb3VyY2UuZGVjYXk7CiAK
LSAgICAgICAgaW50ZXJwb2xhdGVfOiBmdW5jdGlvbiggaTEsIHQwLCB0LCB0MSApIHsKKyAgICAg
ICAgICAgIHRoaXMuc2hhZG93ID0gc291cmNlLnNoYWRvdy5jbG9uZSgpOwogCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKCBpMSAtIDEgKTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogCiAgICAgICAgIH0KIAogICAgIH0gKTsKIAotICAgIHZhciBLZXlmcmFtZVRy
YWNrUHJvdG90eXBlOworICAgIC8qKgorICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21y
ZG9vYi5jb20vCisgICAgICovCiAKLSAgICBLZXlmcmFtZVRyYWNrUHJvdG90eXBlID0geworICAg
IGZ1bmN0aW9uIERpcmVjdGlvbmFsTGlnaHRTaGFkb3coICkgewogCi0gICAgICAgIFRpbWVCdWZm
ZXJUeXBlOiBGbG9hdDMyQXJyYXksCi0gICAgICAgIFZhbHVlQnVmZmVyVHlwZTogRmxvYXQzMkFy
cmF5LAorICAgICAgICBMaWdodFNoYWRvdy5jYWxsKCB0aGlzLCBuZXcgT3J0aG9ncmFwaGljQ2Ft
ZXJhKCAtIDUsIDUsIDUsIC0gNSwgMC41LCA1MDAgKSApOwogCi0gICAgICAgIERlZmF1bHRJbnRl
cnBvbGF0aW9uOiBJbnRlcnBvbGF0ZUxpbmVhciwKKyAgICB9CiAKLSAgICAgICAgSW50ZXJwb2xh
bnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6IGZ1bmN0aW9uICggcmVzdWx0ICkgeworICAgIERpcmVj
dGlvbmFsTGlnaHRTaGFkb3cucHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0
ZSggTGlnaHRTaGFkb3cucHJvdG90eXBlICksIHsKIAotICAgICAgICAgICAgcmV0dXJuIG5ldyBE
aXNjcmV0ZUludGVycG9sYW50KAotICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVzLCB0aGlz
LnZhbHVlcywgdGhpcy5nZXRWYWx1ZVNpemUoKSwgcmVzdWx0ICk7CisgICAgICAgIGNvbnN0cnVj
dG9yOiBEaXJlY3Rpb25hbExpZ2h0U2hhZG93CiAKLSAgICAgICAgfSwKKyAgICB9ICk7CiAKLSAg
ICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOiBmdW5jdGlvbiAoIHJlc3VsdCAp
IHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwor
ICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCisgICAg
ICovCiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgTGluZWFySW50ZXJwb2xhbnQoCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMudGltZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgp
LCByZXN1bHQgKTsKKyAgICBmdW5jdGlvbiBEaXJlY3Rpb25hbExpZ2h0KCBjb2xvciwgaW50ZW5z
aXR5ICkgewogCi0gICAgICAgIH0sCisgICAgICAgIExpZ2h0LmNhbGwoIHRoaXMsIGNvbG9yLCBp
bnRlbnNpdHkgKTsKIAotICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6IGZ1
bmN0aW9uICggcmVzdWx0ICkgeworICAgICAgICB0aGlzLnR5cGUgPSAnRGlyZWN0aW9uYWxMaWdo
dCc7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ3ViaWNJbnRlcnBvbGFudCgKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCks
IHJlc3VsdCApOworICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoIE9iamVjdDNELkRlZmF1bHRV
cCApOworICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpeCgpOwogCi0gICAgICAgIH0sCisgICAgICAg
IHRoaXMudGFyZ2V0ID0gbmV3IE9iamVjdDNEKCk7CiAKLSAgICAgICAgc2V0SW50ZXJwb2xhdGlv
bjogZnVuY3Rpb24gKCBpbnRlcnBvbGF0aW9uICkgeworICAgICAgICB0aGlzLnNoYWRvdyA9IG5l
dyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93KCk7CiAKLSAgICAgICAgICAgIHZhciBmYWN0b3J5TWV0
aG9kOworICAgIH0KIAotICAgICAgICAgICAgc3dpdGNoICggaW50ZXJwb2xhdGlvbiApIHsKKyAg
ICBEaXJlY3Rpb25hbExpZ2h0LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVh
dGUoIExpZ2h0LnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICBjYXNlIEludGVycG9s
YXRlRGlzY3JldGU6CisgICAgICAgIGNvbnN0cnVjdG9yOiBEaXJlY3Rpb25hbExpZ2h0LAogCi0g
ICAgICAgICAgICAgICAgICAgIGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9y
eU1ldGhvZERpc2NyZXRlOworICAgICAgICBpc0RpcmVjdGlvbmFsTGlnaHQ6IHRydWUsCiAKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNl
ICkgewogCi0gICAgICAgICAgICAgICAgY2FzZSBJbnRlcnBvbGF0ZUxpbmVhcjoKKyAgICAgICAg
ICAgIExpZ2h0LnByb3RvdHlwZS5jb3B5LmNhbGwoIHRoaXMsIHNvdXJjZSApOwogCi0gICAgICAg
ICAgICAgICAgICAgIGZhY3RvcnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhv
ZExpbmVhcjsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gc291cmNlLnRhcmdldC5jbG9uZSgp
OwogCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdGhpcy5zaGFkb3cg
PSBzb3VyY2Uuc2hhZG93LmNsb25lKCk7CiAKLSAgICAgICAgICAgICAgICBjYXNlIEludGVycG9s
YXRlU21vb3RoOgorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAg
ICAgZmFjdG9yeU1ldGhvZCA9IHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOwor
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgfSApOwogCi0gICAg
ICAgICAgICB9CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29i
LmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgaWYgKCBmYWN0b3J5TWV0aG9kID09PSB1bmRl
ZmluZWQgKSB7CisgICAgZnVuY3Rpb24gQW1iaWVudExpZ2h0KCBjb2xvciwgaW50ZW5zaXR5ICkg
ewogCi0gICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAidW5zdXBwb3J0ZWQgaW50ZXJwb2xh
dGlvbiBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZhbHVlVHlwZU5hbWUg
KyAiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIgKyB0aGlzLm5hbWU7CisgICAgICAgIExpZ2h0LmNh
bGwoIHRoaXMsIGNvbG9yLCBpbnRlbnNpdHkgKTsKIAotICAgICAgICAgICAgICAgIGlmICggdGhp
cy5jcmVhdGVJbnRlcnBvbGFudCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICB0aGlzLnR5cGUg
PSAnQW1iaWVudExpZ2h0JzsKIAotICAgICAgICAgICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8g
ZGVmYXVsdCwgdW5sZXNzIHRoZSBkZWZhdWx0IGl0c2VsZiBpcyBtZXNzZWQgdXAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbnRlcnBvbGF0aW9uICE9PSB0aGlzLkRlZmF1bHRJbnRlcnBvbGF0
aW9uICkgeworICAgICAgICB0aGlzLmNhc3RTaGFkb3cgPSB1bmRlZmluZWQ7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJwb2xhdGlvbiggdGhpcy5EZWZhdWx0SW50ZXJw
b2xhdGlvbiApOworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgIEFt
YmllbnRMaWdodC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBMaWdo
dC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIG1lc3NhZ2UgKTsgLy8gZmF0YWwsIGluIHRoaXMgY2FzZQorICAgICAgICBjb25zdHJ1Y3Rv
cjogQW1iaWVudExpZ2h0LAogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaXNBbWJp
ZW50TGlnaHQ6IHRydWUKIAotICAgICAgICAgICAgICAgIH0KKyAgICB9ICk7CiAKLSAgICAgICAg
ICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5LZXlmcmFtZVRyYWNrUHJvdG90eXBlOicsIG1l
c3NhZ2UgKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgLyoqCisgICAgICogQGF1dGhv
ciBhYmVsbmF0aW9uIC8gaHR0cDovL2dpdGh1Yi5jb20vYWJlbG5hdGlvbgorICAgICAqLwogCi0g
ICAgICAgICAgICB9CisgICAgZnVuY3Rpb24gUmVjdEFyZWFMaWdodCggY29sb3IsIGludGVuc2l0
eSwgd2lkdGgsIGhlaWdodCApIHsKIAotICAgICAgICAgICAgdGhpcy5jcmVhdGVJbnRlcnBvbGFu
dCA9IGZhY3RvcnlNZXRob2Q7CisgICAgICAgIExpZ2h0LmNhbGwoIHRoaXMsIGNvbG9yLCBpbnRl
bnNpdHkgKTsKIAotICAgICAgICB9LAorICAgICAgICB0aGlzLnR5cGUgPSAnUmVjdEFyZWFMaWdo
dCc7CiAKLSAgICAgICAgZ2V0SW50ZXJwb2xhdGlvbjogZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLndpZHRoID0gKCB3aWR0aCAhPT0gdW5kZWZpbmVkICkgPyB3aWR0aCA6IDEwOworICAgICAg
ICB0aGlzLmhlaWdodCA9ICggaGVpZ2h0ICE9PSB1bmRlZmluZWQgKSA/IGhlaWdodCA6IDEwOwog
Ci0gICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLmNyZWF0ZUludGVycG9sYW50ICkgeworICAgIH0K
IAotICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNj
cmV0ZToKKyAgICBSZWN0QXJlYUxpZ2h0LnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVj
dC5jcmVhdGUoIExpZ2h0LnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEludGVycG9sYXRlRGlzY3JldGU7CisgICAgICAgIGNvbnN0cnVjdG9yOiBSZWN0QXJlYUxp
Z2h0LAogCi0gICAgICAgICAgICAgICAgY2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhv
ZExpbmVhcjoKKyAgICAgICAgaXNSZWN0QXJlYUxpZ2h0OiB0cnVlLAogCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnRlcnBvbGF0ZUxpbmVhcjsKKyAgICAgICAgY29weTogZnVuY3Rpb24g
KCBzb3VyY2UgKSB7CiAKLSAgICAgICAgICAgICAgICBjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0
b3J5TWV0aG9kU21vb3RoOgorICAgICAgICAgICAgTGlnaHQucHJvdG90eXBlLmNvcHkuY2FsbCgg
dGhpcywgc291cmNlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVycG9sYXRl
U21vb3RoOworICAgICAgICAgICAgdGhpcy53aWR0aCA9IHNvdXJjZS53aWR0aDsKKyAgICAgICAg
ICAgIHRoaXMuaGVpZ2h0ID0gc291cmNlLmhlaWdodDsKIAotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAotICAgICAgICBnZXRWYWx1ZVNpemU6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIG1ldGEgKSB7CiAKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggLyB0aGlzLnRpbWVzLmxlbmd0aDsK
KyAgICAgICAgICAgIHZhciBkYXRhID0gTGlnaHQucHJvdG90eXBlLnRvSlNPTi5jYWxsKCB0aGlz
LCBtZXRhICk7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LndpZHRoID0g
dGhpcy53aWR0aDsKKyAgICAgICAgICAgIGRhdGEub2JqZWN0LmhlaWdodCA9IHRoaXMuaGVpZ2h0
OwogCi0gICAgICAgIC8vIG1vdmUgYWxsIGtleWZyYW1lcyBlaXRoZXIgZm9yd2FyZHMgb3IgYmFj
a3dhcmRzIGluIHRpbWUKLSAgICAgICAgc2hpZnQ6IGZ1bmN0aW9uICggdGltZU9mZnNldCApIHsK
KyAgICAgICAgICAgIHJldHVybiBkYXRhOwogCi0gICAgICAgICAgICBpZiAoIHRpbWVPZmZzZXQg
IT09IDAuMCApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhp
cy50aW1lczsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4g
PSB0aW1lcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CisgICAgLyoqCisgICAgICoKKyAgICAg
KiBBIFRyYWNrIHRoYXQgaW50ZXJwb2xhdGVzIFN0cmluZ3MKKyAgICAgKgorICAgICAqCisgICAg
ICogQGF1dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8KKyAgICAgKiBAYXV0aG9y
IERhdmlkIFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1cy51cy8KKyAgICAgKiBAYXV0aG9yIHRzY2h3
CisgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgdGltZXNbIGkgXSArPSB0aW1lT2Zmc2V0
OworICAgIGZ1bmN0aW9uIFN0cmluZ0tleWZyYW1lVHJhY2soIG5hbWUsIHRpbWVzLCB2YWx1ZXMs
IGludGVycG9sYXRpb24gKSB7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIEtleWZyYW1l
VHJhY2suY2FsbCggdGhpcywgbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiApOwog
Ci0gICAgICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICBT
dHJpbmdLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVh
dGUoIEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKIAotICAgICAgICB9LAorICAgICAgICBj
b25zdHJ1Y3RvcjogU3RyaW5nS2V5ZnJhbWVUcmFjaywKIAotICAgICAgICAvLyBzY2FsZSBhbGwg
a2V5ZnJhbWUgdGltZXMgYnkgYSBmYWN0b3IgKHVzZWZ1bCBmb3IgZnJhbWUgPC0+IHNlY29uZHMg
Y29udmVyc2lvbnMpCi0gICAgICAgIHNjYWxlOiBmdW5jdGlvbiAoIHRpbWVTY2FsZSApIHsKKyAg
ICAgICAgVmFsdWVUeXBlTmFtZTogJ3N0cmluZycsCisgICAgICAgIFZhbHVlQnVmZmVyVHlwZTog
QXJyYXksCiAKLSAgICAgICAgICAgIGlmICggdGltZVNjYWxlICE9PSAxLjAgKSB7CisgICAgICAg
IERlZmF1bHRJbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0ZURpc2NyZXRlLAogCi0gICAgICAgICAg
ICAgICAgdmFyIHRpbWVzID0gdGhpcy50aW1lczsKKyAgICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5
TWV0aG9kTGluZWFyOiB1bmRlZmluZWQsCiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIG4gPSB0aW1lcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CisgICAgICAgIEludGVycG9s
YW50RmFjdG9yeU1ldGhvZFNtb290aDogdW5kZWZpbmVkCiAKLSAgICAgICAgICAgICAgICAgICAg
dGltZXNbIGkgXSAqPSB0aW1lU2NhbGU7CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgfQor
ICAgIC8qKgorICAgICAqCisgICAgICogQSBUcmFjayBvZiBCb29sZWFuIGtleWZyYW1lIHZhbHVl
cy4KKyAgICAgKgorICAgICAqCisgICAgICogQGF1dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6Ly9j
bGFyYS5pby8KKyAgICAgKiBAYXV0aG9yIERhdmlkIFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1cy51
cy8KKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAgICAgICAgICAgIH0KKyAgICBm
dW5jdGlvbiBCb29sZWFuS2V5ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcyApIHsKIAot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIEtleWZyYW1lVHJhY2suY2FsbCggdGhp
cywgbmFtZSwgdGltZXMsIHZhbHVlcyApOwogCi0gICAgICAgIH0sCisgICAgfQogCi0gICAgICAg
IC8vIHJlbW92ZXMga2V5ZnJhbWVzIGJlZm9yZSBhbmQgYWZ0ZXIgYW5pbWF0aW9uIHdpdGhvdXQg
Y2hhbmdpbmcgYW55IHZhbHVlcyB3aXRoaW4gdGhlIHJhbmdlIFtzdGFydFRpbWUsIGVuZFRpbWVd
LgotICAgICAgICAvLyBJTVBPUlRBTlQ6IFdlIGRvIG5vdCBzaGlmdCBhcm91bmQga2V5cyB0byB0
aGUgc3RhcnQgb2YgdGhlIHRyYWNrIHRpbWUsIGJlY2F1c2UgZm9yIGludGVycG9sYXRlZCBrZXlz
IHRoaXMgd2lsbCBjaGFuZ2UgdGhlaXIgdmFsdWVzCi0gICAgICAgIHRyaW06IGZ1bmN0aW9uICgg
c3RhcnRUaW1lLCBlbmRUaW1lICkgeworICAgIEJvb2xlYW5LZXlmcmFtZVRyYWNrLnByb3RvdHlw
ZSA9IE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEtleWZyYW1lVHJhY2sucHJvdG90eXBl
ICksIHsKIAotICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhpcy50aW1lcywKLSAgICAgICAgICAg
ICAgICBuS2V5cyA9IHRpbWVzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBmcm9tID0gMCwKLSAg
ICAgICAgICAgICAgICB0byA9IG5LZXlzIC0gMTsKKyAgICAgICAgY29uc3RydWN0b3I6IEJvb2xl
YW5LZXlmcmFtZVRyYWNrLAogCi0gICAgICAgICAgICB3aGlsZSAoIGZyb20gIT09IG5LZXlzICYm
IHRpbWVzWyBmcm9tIF0gPCBzdGFydFRpbWUgKSArKyBmcm9tOwotICAgICAgICAgICAgd2hpbGUg
KCB0byAhPT0gLSAxICYmIHRpbWVzWyB0byBdID4gZW5kVGltZSApIC0tIHRvOworICAgICAgICBW
YWx1ZVR5cGVOYW1lOiAnYm9vbCcsCisgICAgICAgIFZhbHVlQnVmZmVyVHlwZTogQXJyYXksCiAK
LSAgICAgICAgICAgICsrIHRvOyAvLyBpbmNsdXNpdmUgLT4gZXhjbHVzaXZlIGJvdW5kCisgICAg
ICAgIERlZmF1bHRJbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0ZURpc2NyZXRlLAogCi0gICAgICAg
ICAgICBpZiAoIGZyb20gIT09IDAgfHwgdG8gIT09IG5LZXlzICkgeworICAgICAgICBJbnRlcnBv
bGFudEZhY3RvcnlNZXRob2RMaW5lYXI6IHVuZGVmaW5lZCwKKyAgICAgICAgSW50ZXJwb2xhbnRG
YWN0b3J5TWV0aG9kU21vb3RoOiB1bmRlZmluZWQKIAotICAgICAgICAgICAgICAgIC8vIGVtcHR5
IHRyYWNrcyBhcmUgZm9yYmlkZGVuLCBzbyBrZWVwIGF0IGxlYXN0IG9uZSBrZXlmcmFtZQotICAg
ICAgICAgICAgICAgIGlmICggZnJvbSA+PSB0byApIHRvID0gTWF0aC5tYXgoIHRvLCAxICksIGZy
b20gPSB0byAtIDE7CisgICAgICAgIC8vIE5vdGU6IEFjdHVhbGx5IHRoaXMgdHJhY2sgY291bGQg
aGF2ZSBhIG9wdGltaXplZCAvIGNvbXByZXNzZWQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24g
b2YgYSBzaW5nbGUgdmFsdWUgYW5kIGEgY3VzdG9tIGludGVycG9sYW50IHRoYXQKKyAgICAgICAg
Ly8gY29tcHV0ZXMgImZpcnN0VmFsdWUgXiBpc09kZCggaW5kZXggKSIuCiAKLSAgICAgICAgICAg
ICAgICB2YXIgc3RyaWRlID0gdGhpcy5nZXRWYWx1ZVNpemUoKTsKLSAgICAgICAgICAgICAgICB0
aGlzLnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGltZXMsIGZyb20sIHRvICk7
Ci0gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFycmF5U2xpY2UoIHRoaXMudmFsdWVzLCBmcm9tICogc3RyaWRlLCB0
byAqIHN0cmlkZSApOworICAgIH0gKTsKIAotICAgICAgICAgICAgfQorICAgIC8qKgorICAgICAq
IEFic3RyYWN0IGJhc2UgY2xhc3Mgb2YgaW50ZXJwb2xhbnRzIG92ZXIgcGFyYW1ldHJpYyBzYW1w
bGVzLgorICAgICAqCisgICAgICogVGhlIHBhcmFtZXRlciBkb21haW4gaXMgb25lIGRpbWVuc2lv
bmFsLCB0eXBpY2FsbHkgdGhlIHRpbWUgb3IgYSBwYXRoCisgICAgICogYWxvbmcgYSBjdXJ2ZSBk
ZWZpbmVkIGJ5IHRoZSBkYXRhLgorICAgICAqCisgICAgICogVGhlIHNhbXBsZSB2YWx1ZXMgY2Fu
IGhhdmUgYW55IGRpbWVuc2lvbmFsaXR5IGFuZCBkZXJpdmVkIGNsYXNzZXMgbWF5CisgICAgICog
YXBwbHkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbnMgdG8gdGhlIGRhdGEuCisgICAgICoKKyAgICAg
KiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBpbnRlcnZhbCBzZWVrIGluIGEgVGVtcGxhdGUgTWV0
aG9kLCBkZWZlcnJpbmcKKyAgICAgKiB0aGUgYWN0dWFsIGludGVycG9sYXRpb24gdG8gZGVyaXZl
ZCBjbGFzc2VzLgorICAgICAqCisgICAgICogVGltZSBjb21wbGV4aXR5IGlzIE8oMSkgZm9yIGxp
bmVhciBhY2Nlc3MgY3Jvc3NpbmcgYXQgbW9zdCB0d28gcG9pbnRzCisgICAgICogYW5kIE8obG9n
IE4pIGZvciByYW5kb20gYWNjZXNzLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25z
LgorICAgICAqCisgICAgICogUmVmZXJlbmNlczoKKyAgICAgKgorICAgICAqICAgICAgaHR0cDov
L3d3dy5vb2Rlc2lnbi5jb20vdGVtcGxhdGUtbWV0aG9kLXBhdHRlcm4uaHRtbAorICAgICAqCisg
ICAgICogQGF1dGhvciB0c2NodworICAgICAqLwogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICBmdW5jdGlvbiBJbnRlcnBvbGFudCggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1
ZXMsIHNhbXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApIHsKKworICAgICAgICB0aGlzLnBhcmFtZXRl
clBvc2l0aW9ucyA9IHBhcmFtZXRlclBvc2l0aW9uczsKKyAgICAgICAgdGhpcy5fY2FjaGVkSW5k
ZXggPSAwOwogCi0gICAgICAgIH0sCisgICAgICAgIHRoaXMucmVzdWx0QnVmZmVyID0gcmVzdWx0
QnVmZmVyICE9PSB1bmRlZmluZWQgPworICAgICAgICAgICAgcmVzdWx0QnVmZmVyIDogbmV3IHNh
bXBsZVZhbHVlcy5jb25zdHJ1Y3Rvciggc2FtcGxlU2l6ZSApOworICAgICAgICB0aGlzLnNhbXBs
ZVZhbHVlcyA9IHNhbXBsZVZhbHVlczsKKyAgICAgICAgdGhpcy52YWx1ZVNpemUgPSBzYW1wbGVT
aXplOwogCi0gICAgICAgIC8vIGVuc3VyZSB3ZSBkbyBub3QgZ2V0IGEgR2FyYmFnZUluR2FyYmFn
ZU91dCBzaXR1YXRpb24sIG1ha2Ugc3VyZSB0cmFja3MgYXJlIGF0IGxlYXN0IG1pbmltYWxseSB2
aWFibGUKLSAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICB9CiAKLSAgICAgICAg
ICAgIHZhciB2YWxpZCA9IHRydWU7CisgICAgT2JqZWN0LmFzc2lnbiggSW50ZXJwb2xhbnQucHJv
dG90eXBlLCB7CiAKLSAgICAgICAgICAgIHZhciB2YWx1ZVNpemUgPSB0aGlzLmdldFZhbHVlU2l6
ZSgpOwotICAgICAgICAgICAgaWYgKCB2YWx1ZVNpemUgLSBNYXRoLmZsb29yKCB2YWx1ZVNpemUg
KSAhPT0gMCApIHsKKyAgICAgICAgZXZhbHVhdGU6IGZ1bmN0aW9uICggdCApIHsKIAotICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrUHJvdG90eXBlOiBJ
bnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suJywgdGhpcyApOwotICAgICAgICAgICAgICAgIHZh
bGlkID0gZmFsc2U7CisgICAgICAgICAgICB2YXIgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9u
cywKKyAgICAgICAgICAgICAgICBpMSA9IHRoaXMuX2NhY2hlZEluZGV4LAogCi0gICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdDEgPSBwcFsgaTEgXSwKKyAgICAgICAgICAgICAgICB0MCA9
IHBwWyBpMSAtIDEgXTsKIAotICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhpcy50aW1lcywKLSAg
ICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnZhbHVlcywKKyAgICAgICAgICAgIHZhbGlkYXRl
X2ludGVydmFsOiB7CiAKLSAgICAgICAgICAgICAgICBuS2V5cyA9IHRpbWVzLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICBzZWVrOiB7CiAKLSAgICAgICAgICAgIGlmICggbktleXMgPT09IDAgKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciByaWdodDsKIAotICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrUHJvdG90eXBlOiBUcmFjayBpcyBlbXB0eS4n
LCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgbGluZWFyX3NjYW46IHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8tIFNlZSBodHRwOi8vanNwZXJmLmNvbS9jb21wYXJpc29uLXRvLXVuZGVmaW5lZC8z
CisgICAgICAgICAgICAgICAgICAgICAgICAvLy0gc2xvd2VyIGNvZGU6CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLy0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vLSAgICAgICAgICAgICAg
ICAgaWYgKCB0ID49IHQxIHx8IHQxID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX3NjYW46IGlmICggISAoIHQgPCB0MSApICkgewogCi0gICAgICAgICAg
ICB2YXIgcHJldlRpbWUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IHZhciBnaXZlVXBBdCA9IGkxICsgMjsgOyApIHsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwOyBpICE9PSBuS2V5czsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB0MSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGN1cnJU
aW1lID0gdGltZXNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdCA8IHQwICkgYnJlYWsgZm9yd2FyZF9zY2FuOwogCi0gICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgY3VyclRpbWUgPT09ICdudW1iZXInICYmIGlzTmFOKCBjdXJyVGltZSApICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgZW5kCiAKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2tQcm90b3R5cGU6
IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLicsIHRoaXMsIGksIGN1cnJUaW1lICk7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTEgPSBwcC5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IGkx
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJF
bmRfKCBpMSAtIDEsIHQsIHQwICk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggcHJldlRpbWUgIT09
IG51bGwgJiYgcHJldlRpbWUgPiBjdXJyVGltZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBpMSA9PT0gZ2l2ZVVwQXQgKSBicmVhazsgLy8gdGhpcyBsb29wCiAKLSAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2tQcm90
b3R5cGU6IE91dCBvZiBvcmRlciBrZXlzLicsIHRoaXMsIGksIGN1cnJUaW1lLCBwcmV2VGltZSAp
OwotICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAgPSB0MTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBwcFsgKysgaTEgXTsKIAotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0IDwgdDEgKSB7
CiAKLSAgICAgICAgICAgICAgICBwcmV2VGltZSA9IGN1cnJUaW1lOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhcnJpdmVkIGF0IHRoZSBzb3VnaHQgaW50
ZXJ2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNlZWs7CiAK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIHZhbHVlcyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICggQW5pbWF0aW9uVXRpbHMuaXNUeXBl
ZEFycmF5KCB2YWx1ZXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVw
YXJlIGJpbmFyeSBzZWFyY2ggb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGluZGV4CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwcC5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWsgbGluZWFyX3NjYW47CiAKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBuID0gdmFsdWVzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVl
ID0gdmFsdWVzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICAvLy0gc2xvd2VyIGNvZGU6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLy0gICAgICAgICAgICAgICAgIGlmICggdCA8IHQw
IHx8IHQwID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEg
KCB0ID49IHQwICkgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNOYU4oIHZh
bHVlICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcGluZz8KIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRy
YWNrUHJvdG90eXBlOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuJywgdGhpcywgaSwgdmFs
dWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0MWdsb2JhbCA9IHBwWyAxIF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHQgPCB0MWdsb2JhbCApIHsKIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxID0gMjsg
Ly8gKyAxLCB1c2luZyB0aGUgc2NhbiBmb3IgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdDAgPSB0MWdsb2JhbDsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBsaW5lYXIgcmV2ZXJzZSBzY2FuCiAKLSAgICAgICAgICAgIHJldHVy
biB2YWxpZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgZ2l2ZVVwQXQg
PSBpMSAtIDI7IDsgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0MCA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIC8vIHJlbW92ZXMgZXF1
aXZhbGVudCBzZXF1ZW50aWFsIGtleXMgYXMgY29tbW9uIGluIG1vcnBoIHRhcmdldCBzZXF1ZW5j
ZXMKLSAgICAgICAgLy8gKDAsMCwwLDAsMSwxLDEsMCwwLDAsMCwwLDAsMCkgLS0+ICgwLDAsMSwx
LDAsMCkKLSAgICAgICAgb3B0aW1pemU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBzdGFydAogCi0gICAgICAgICAgICB2YXIgdGlt
ZXMgPSB0aGlzLnRpbWVzLAotICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudmFsdWVzLAot
ICAgICAgICAgICAgICAgIHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJbmRleCA9IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVTdGFydF8oIDAs
IHQsIHQxICk7CiAKLSAgICAgICAgICAgICAgICBzbW9vdGhJbnRlcnBvbGF0aW9uID0gdGhpcy5n
ZXRJbnRlcnBvbGF0aW9uKCkgPT09IEludGVycG9sYXRlU21vb3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB3cml0ZUluZGV4ID0gMSwKLSAg
ICAgICAgICAgICAgICBsYXN0SW5kZXggPSB0aW1lcy5sZW5ndGggLSAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGkxID09PSBnaXZlVXBBdCApIGJyZWFrOyAvLyB0aGlz
IGxvb3AKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAxOyBpIDwgbGFzdEluZGV4OyArKyBp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQwOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHBwWyAtLSBpMSAtIDEgXTsKIAotICAgICAgICAg
ICAgICAgIHZhciBrZWVwID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdCA+PSB0MCApIHsKIAotICAgICAgICAgICAgICAgIHZhciB0aW1lID0gdGltZXNbIGkg
XTsKLSAgICAgICAgICAgICAgICB2YXIgdGltZU5leHQgPSB0aW1lc1sgaSArIDEgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYXJyaXZlZCBhdCB0aGUg
c291Z2h0IGludGVydmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
ayBzZWVrOwogCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFkamFjZW50IGtleWZyYW1lcyBz
Y2hlZHVsZWQgYXQgdGhlIHNhbWUgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIHRpbWUgIT09IHRpbWVOZXh0ICYmICggaSAhPT0g
MSB8fCB0aW1lICE9PSB0aW1lWyAwIF0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHNtb290aEludGVycG9sYXRpb24gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlcGFyZSBiaW5hcnkgc2VhcmNoIG9u
IHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmlnaHQgPSBpMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMSA9IDA7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbGluZWFyX3NjYW47CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBrZXlmcmFtZXMgc2FtZSBhcyB0aGVpciBu
ZWlnaGJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG9mZnNldCA9IGkgKiBzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0UCA9IG9mZnNldCAtIHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXROID0gb2Zmc2V0ICsgc3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGludGVydmFsIGlzIHZhbGlkCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZh
ciBqID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsgdmFsaWRhdGVfaW50ZXJ2YWw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB2YWx1ZXNbIG9mZnNldCArIGogXTsKKyAgICAgICAgICAgICAgICAgICAgfSAv
LyBsaW5lYXIgc2NhbgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAh
PT0gdmFsdWVzWyBvZmZzZXRQICsgaiBdIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSAhPT0gdmFsdWVzWyBvZmZzZXROICsgaiBdICkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBiaW5hcnkgc2VhcmNoCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2VlcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGkxIDwgcmlnaHQgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlkID0gKCBp
MSArIHJpZ2h0ICkgPj4+IDE7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdCA8IHBwWyBtaWQgXSApIHsKIAotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2Uga2VlcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmln
aHQgPSBtaWQ7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogCi0gICAgICAgICAgICAgICAgLy8gaW4tcGxhY2UgY29tcGFjdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGkxID0gbWlkICsgMTsKIAotICAgICAgICAgICAgICAgIGlm
ICgga2VlcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBpZiAoIGkgIT09IHdyaXRlSW5kZXggKSB7CisgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXNbIHdyaXRlSW5kZXggXSA9IHRpbWVzWyBpIF07
CisgICAgICAgICAgICAgICAgICAgIHQxID0gcHBbIGkxIF07CisgICAgICAgICAgICAgICAgICAg
IHQwID0gcHBbIGkxIC0gMSBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZE9m
ZnNldCA9IGkgKiBzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVPZmZz
ZXQgPSB3cml0ZUluZGV4ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBi
b3VuZGFyeSBjYXNlcywgYWdhaW4KIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFy
IGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKQorICAgICAgICAgICAgICAgICAgICBpZiAoIHQw
ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNb
IHdyaXRlT2Zmc2V0ICsgaiBdID0gdmFsdWVzWyByZWFkT2Zmc2V0ICsgaiBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuYmVmb3JlU3RhcnRfKCAwLCB0LCB0MSApOwogCiAgICAgICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICArKyB3cml0ZUluZGV4OwotCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIHQxID09PSB1bmRlZmluZWQg
KSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGkxID0gcHAubGVu
Z3RoOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkSW5kZXggPSBpMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyRW5kXyggaTEgLSAxLCB0MCwg
dCApOwogCi0gICAgICAgICAgICAvLyBmbHVzaCBsYXN0IGtleWZyYW1lIChjb21wYWN0aW9uIGxv
b2tzIGFoZWFkKQorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggbGFz
dEluZGV4ID4gMCApIHsKKyAgICAgICAgICAgICAgICB9IC8vIHNlZWsKIAotICAgICAgICAgICAg
ICAgIHRpbWVzWyB3cml0ZUluZGV4IF0gPSB0aW1lc1sgbGFzdEluZGV4IF07CisgICAgICAgICAg
ICAgICAgdGhpcy5fY2FjaGVkSW5kZXggPSBpMTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZh
ciByZWFkT2Zmc2V0ID0gbGFzdEluZGV4ICogc3RyaWRlLCB3cml0ZU9mZnNldCA9IHdyaXRlSW5k
ZXggKiBzdHJpZGUsIGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKQorICAgICAgICAgICAgICAg
IHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyggaTEsIHQwLCB0MSApOwogCi0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlc1sgd3JpdGVPZmZzZXQgKyBqIF0gPSB2YWx1ZXNbIHJlYWRPZmZzZXQgKyBqIF07
CisgICAgICAgICAgICB9IC8vIHZhbGlkYXRlX2ludGVydmFsCiAKLSAgICAgICAgICAgICAgICAr
KyB3cml0ZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKCBpMSwg
dDAsIHQsIHQxICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
aWYgKCB3cml0ZUluZGV4ICE9PSB0aW1lcy5sZW5ndGggKSB7CisgICAgICAgIHNldHRpbmdzOiBu
dWxsLCAvLyBvcHRpb25hbCwgc3ViY2xhc3Mtc3BlY2lmaWMgc2V0dGluZ3Mgc3RydWN0dXJlCisg
ICAgICAgIC8vIE5vdGU6IFRoZSBpbmRpcmVjdGlvbiBhbGxvd3MgY2VudHJhbCBjb250cm9sIG9m
IG1hbnkgaW50ZXJwb2xhbnRzLgogCi0gICAgICAgICAgICAgICAgdGhpcy50aW1lcyA9IEFuaW1h
dGlvblV0aWxzLmFycmF5U2xpY2UoIHRpbWVzLCAwLCB3cml0ZUluZGV4ICk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB2YWx1ZXMsIDAs
IHdyaXRlSW5kZXggKiBzdHJpZGUgKTsKKyAgICAgICAgLy8gLS0tIFByb3RlY3RlZCBpbnRlcmZh
Y2UKIAotICAgICAgICAgICAgfQorICAgICAgICBEZWZhdWx0U2V0dGluZ3NfOiB7fSwKIAotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIGdldFNldHRpbmdzXzogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzIHx8IHRoaXMu
RGVmYXVsdFNldHRpbmdzXzsKIAotICAgIH07CisgICAgICAgIH0sCiAKLSAgICBmdW5jdGlvbiBL
ZXlmcmFtZVRyYWNrQ29uc3RydWN0b3IoIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRp
b24gKSB7CisgICAgICAgIGNvcHlTYW1wbGVWYWx1ZV86IGZ1bmN0aW9uICggaW5kZXggKSB7CiAK
LSAgICAgICAgaWYgKCBuYW1lID09PSB1bmRlZmluZWQgKSB0aHJvdyBuZXcgRXJyb3IoICJ0cmFj
ayBuYW1lIGlzIHVuZGVmaW5lZCIgKTsKKyAgICAgICAgICAgIC8vIGNvcGllcyBhIHNhbXBsZSB2
YWx1ZSB0byB0aGUgcmVzdWx0IGJ1ZmZlcgogCi0gICAgICAgIGlmICggdGltZXMgPT09IHVuZGVm
aW5lZCB8fCB0aW1lcy5sZW5ndGggPT09IDAgKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0g
dGhpcy5yZXN1bHRCdWZmZXIsCisgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5zYW1wbGVW
YWx1ZXMsCisgICAgICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsCisgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gaW5kZXggKiBzdHJpZGU7CiAKLSAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvciggIm5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiICsgbmFtZSApOworICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwOyBpICE9PSBzdHJpZGU7ICsrIGkgKSB7CiAKLSAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJlc3VsdFsgaSBdID0gdmFsdWVzWyBvZmZzZXQgKyBpIF07CiAK
LSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlz
LnRpbWVzID0gQW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB0aW1lcywgdGhpcy5UaW1lQnVm
ZmVyVHlwZSApOwotICAgICAgICB0aGlzLnZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRB
cnJheSggdmFsdWVzLCB0aGlzLlZhbHVlQnVmZmVyVHlwZSApOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgICAgICB0aGlzLnNldEludGVycG9sYXRpb24oIGludGVycG9sYXRpb24g
fHwgdGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbiApOworICAgICAgICB9LAogCi0gICAgICAgIHRo
aXMudmFsaWRhdGUoKTsKLSAgICAgICAgdGhpcy5vcHRpbWl6ZSgpOworICAgICAgICAvLyBUZW1w
bGF0ZSBtZXRob2RzIGZvciBkZXJpdmVkIGNsYXNzZXM6CiAKLSAgICB9CisgICAgICAgIGludGVy
cG9sYXRlXzogZnVuY3Rpb24gKCAvKiBpMSwgdDAsIHQsIHQxICovICkgewogCi0gICAgLyoqCi0g
ICAgICoKLSAgICAgKiBBIFRyYWNrIG9mIHZlY3RvcmVkIGtleWZyYW1lIHZhbHVlcy4KLSAgICAg
KgotICAgICAqCi0gICAgICogQGF1dGhvciBCZW4gSG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pby8K
LSAgICAgKiBAYXV0aG9yIERhdmlkIFNhcm5vIC8gaHR0cDovL2xpZ2h0aGF1cy51cy8KLSAgICAg
KiBAYXV0aG9yIHRzY2h3Ci0gICAgICovCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdj
YWxsIHRvIGFic3RyYWN0IG1ldGhvZCcgKTsKKyAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9u
cyBzaGFsbCByZXR1cm4gdGhpcy5yZXN1bHRCdWZmZXIKIAotICAgIGZ1bmN0aW9uIFZlY3Rvcktl
eWZyYW1lVHJhY2soIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CisgICAg
ICAgIH0sCiAKLSAgICAgICAgS2V5ZnJhbWVUcmFja0NvbnN0cnVjdG9yLmNhbGwoIHRoaXMsIG5h
bWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKTsKKyAgICAgICAgaW50ZXJ2YWxDaGFu
Z2VkXzogZnVuY3Rpb24gKCAvKiBpMSwgdDAsIHQxICovICkgewogCi0gICAgfQorICAgICAgICAg
ICAgLy8gZW1wdHkKIAotICAgIFZlY3RvcktleWZyYW1lVHJhY2sucHJvdG90eXBlID0KLSAgICAg
ICAgICAgIE9iamVjdC5hc3NpZ24oIE9iamVjdC5jcmVhdGUoIEtleWZyYW1lVHJhY2tQcm90b3R5
cGUgKSwgeworICAgICAgICB9CiAKLSAgICAgICAgY29uc3RydWN0b3I6IFZlY3RvcktleWZyYW1l
VHJhY2ssCisgICAgfSApOwogCi0gICAgICAgIFZhbHVlVHlwZU5hbWU6ICd2ZWN0b3InCisgICAg
Ly8hXCBERUNMQVJFIEFMSUFTIEFGVEVSIGFzc2lnbiBwcm90b3R5cGUgIQorICAgIE9iamVjdC5h
c3NpZ24oIEludGVycG9sYW50LnByb3RvdHlwZSwgewogCi0gICAgICAgIC8vIFZhbHVlQnVmZmVy
VHlwZSBpcyBpbmhlcml0ZWQKKyAgICAgICAgLy8oIDAsIHQsIHQwICksIHJldHVybnMgdGhpcy5y
ZXN1bHRCdWZmZXIKKyAgICAgICAgYmVmb3JlU3RhcnRfOiBJbnRlcnBvbGFudC5wcm90b3R5cGUu
Y29weVNhbXBsZVZhbHVlXywKIAotICAgICAgICAvLyBEZWZhdWx0SW50ZXJwb2xhdGlvbiBpcyBp
bmhlcml0ZWQKKyAgICAgICAgLy8oIE4tMSwgdE4tMSwgdCApLCByZXR1cm5zIHRoaXMucmVzdWx0
QnVmZmVyCisgICAgICAgIGFmdGVyRW5kXzogSW50ZXJwb2xhbnQucHJvdG90eXBlLmNvcHlTYW1w
bGVWYWx1ZV8sCiAKICAgICB9ICk7CiAKQEAgLTMxOTA4LDcgKzM1MTE2LDcgQEAKIAogICAgICAg
ICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50LAogCi0gICAgICAgIGlu
dGVycG9sYXRlXzogZnVuY3Rpb24oIGkxLCB0MCwgdCwgdDEgKSB7CisgICAgICAgIGludGVycG9s
YXRlXzogZnVuY3Rpb24gKCBpMSwgdDAsIHQsIHQxICkgewogCiAgICAgICAgICAgICB2YXIgcmVz
dWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsCiAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5z
YW1wbGVWYWx1ZXMsCkBAIC0zMTkyMCw4ICszNTEyOCw3IEBACiAKICAgICAgICAgICAgIGZvciAo
IHZhciBlbmQgPSBvZmZzZXQgKyBzdHJpZGU7IG9mZnNldCAhPT0gZW5kOyBvZmZzZXQgKz0gNCAp
IHsKIAotICAgICAgICAgICAgICAgIFF1YXRlcm5pb24uc2xlcnBGbGF0KCByZXN1bHQsIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsIG9mZnNldCAtIHN0cmlkZSwgdmFsdWVzLCBv
ZmZzZXQsIGFscGhhICk7CisgICAgICAgICAgICAgICAgUXVhdGVybmlvbi5zbGVycEZsYXQoIHJl
c3VsdCwgMCwgdmFsdWVzLCBvZmZzZXQgLSBzdHJpZGUsIHZhbHVlcywgb2Zmc2V0LCBhbHBoYSAp
OwogCiAgICAgICAgICAgICB9CiAKQEAgLTMxOTQyLDEyICszNTE0OSwxMSBAQAogCiAgICAgZnVu
Y3Rpb24gUXVhdGVybmlvbktleWZyYW1lVHJhY2soIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVy
cG9sYXRpb24gKSB7CiAKLSAgICAgICAgS2V5ZnJhbWVUcmFja0NvbnN0cnVjdG9yLmNhbGwoIHRo
aXMsIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKTsKKyAgICAgICAgS2V5ZnJh
bWVUcmFjay5jYWxsKCB0aGlzLCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICk7
CiAKICAgICB9CiAKLSAgICBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgPQotICAg
ICAgICAgICAgT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5ZnJhbWVUcmFja1Byb3Rv
dHlwZSApLCB7CisgICAgUXVhdGVybmlvbktleWZyYW1lVHJhY2sucHJvdG90eXBlID0gT2JqZWN0
LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgKSwgewogCiAg
ICAgICAgIGNvbnN0cnVjdG9yOiBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaywKIApAQCAtMzE5NTcs
MTAgKzM1MTYzLDkgQEAKIAogICAgICAgICBEZWZhdWx0SW50ZXJwb2xhdGlvbjogSW50ZXJwb2xh
dGVMaW5lYXIsCiAKLSAgICAgICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOiBmdW5j
dGlvbiggcmVzdWx0ICkgeworICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6
IGZ1bmN0aW9uICggcmVzdWx0ICkgewogCi0gICAgICAgICAgICByZXR1cm4gbmV3IFF1YXRlcm5p
b25MaW5lYXJJbnRlcnBvbGFudCgKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lcywgdGhp
cy52YWx1ZXMsIHRoaXMuZ2V0VmFsdWVTaXplKCksIHJlc3VsdCApOworICAgICAgICAgICAgcmV0
dXJuIG5ldyBRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQoIHRoaXMudGltZXMsIHRoaXMudmFs
dWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQgKTsKIAogICAgICAgICB9LAogCkBAIC0z
MTk3MCwzNjQwICszNTE3NSwzNTUzIEBACiAKICAgICAvKioKICAgICAgKgotICAgICAqIEEgVHJh
Y2sgb2YgbnVtZXJpYyBrZXlmcmFtZSB2YWx1ZXMuCisgICAgICogQSBUcmFjayBvZiBrZXlmcmFt
ZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgY29sb3IuCisgICAgICoKICAgICAgKgogICAgICAqIEBh
dXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8vCiAgICAgICogQGF1dGhvciBEYXZp
ZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMvCiAgICAgICogQGF1dGhvciB0c2NodwogICAg
ICAqLwogCi0gICAgZnVuY3Rpb24gTnVtYmVyS2V5ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZh
bHVlcywgaW50ZXJwb2xhdGlvbiApIHsKKyAgICBmdW5jdGlvbiBDb2xvcktleWZyYW1lVHJhY2so
IG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CiAKLSAgICAgICAgS2V5ZnJh
bWVUcmFja0NvbnN0cnVjdG9yLmNhbGwoIHRoaXMsIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVy
cG9sYXRpb24gKTsKKyAgICAgICAgS2V5ZnJhbWVUcmFjay5jYWxsKCB0aGlzLCBuYW1lLCB0aW1l
cywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICk7CiAKICAgICB9CiAKLSAgICBOdW1iZXJLZXlmcmFt
ZVRyYWNrLnByb3RvdHlwZSA9Ci0gICAgICAgICAgICBPYmplY3QuYXNzaWduKCBPYmplY3QuY3Jl
YXRlKCBLZXlmcmFtZVRyYWNrUHJvdG90eXBlICksIHsKKyAgICBDb2xvcktleWZyYW1lVHJhY2su
cHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5ZnJhbWVUcmFjay5w
cm90b3R5cGUgKSwgewogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBOdW1iZXJLZXlmcmFtZVRyYWNr
LAorICAgICAgICBjb25zdHJ1Y3RvcjogQ29sb3JLZXlmcmFtZVRyYWNrLAogCi0gICAgICAgIFZh
bHVlVHlwZU5hbWU6ICdudW1iZXInCisgICAgICAgIFZhbHVlVHlwZU5hbWU6ICdjb2xvcicKIAog
ICAgICAgICAvLyBWYWx1ZUJ1ZmZlclR5cGUgaXMgaW5oZXJpdGVkCiAKICAgICAgICAgLy8gRGVm
YXVsdEludGVycG9sYXRpb24gaXMgaW5oZXJpdGVkCiAKKyAgICAgICAgLy8gTm90ZTogVmVyeSBi
YXNpYyBpbXBsZW1lbnRhdGlvbiBhbmQgbm90aGluZyBzcGVjaWFsIHlldC4KKyAgICAgICAgLy8g
SG93ZXZlciwgdGhpcyBpcyB0aGUgcGxhY2UgZm9yIGNvbG9yIHNwYWNlIHBhcmFtZXRlcml6YXRp
b24uCisKICAgICB9ICk7CiAKICAgICAvKioKICAgICAgKgotICAgICAqIEEgVHJhY2sgdGhhdCBp
bnRlcnBvbGF0ZXMgU3RyaW5ncwotICAgICAqCisgICAgICogQSBUcmFjayBvZiBudW1lcmljIGtl
eWZyYW1lIHZhbHVlcy4KICAgICAgKgogICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBodHRw
Oi8vY2xhcmEuaW8vCiAgICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdodGhh
dXMudXMvCiAgICAgICogQGF1dGhvciB0c2NodwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gU3Ry
aW5nS2V5ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlvbiApIHsK
KyAgICBmdW5jdGlvbiBOdW1iZXJLZXlmcmFtZVRyYWNrKCBuYW1lLCB0aW1lcywgdmFsdWVzLCBp
bnRlcnBvbGF0aW9uICkgewogCi0gICAgICAgIEtleWZyYW1lVHJhY2tDb25zdHJ1Y3Rvci5jYWxs
KCB0aGlzLCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICk7CisgICAgICAgIEtl
eWZyYW1lVHJhY2suY2FsbCggdGhpcywgbmFtZSwgdGltZXMsIHZhbHVlcywgaW50ZXJwb2xhdGlv
biApOwogCiAgICAgfQogCi0gICAgU3RyaW5nS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgPQotICAg
ICAgICAgICAgT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5ZnJhbWVUcmFja1Byb3Rv
dHlwZSApLCB7Ci0KLSAgICAgICAgY29uc3RydWN0b3I6IFN0cmluZ0tleWZyYW1lVHJhY2ssCisg
ICAgTnVtYmVyS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3Qu
Y3JlYXRlKCBLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSApLCB7CiAKLSAgICAgICAgVmFsdWVUeXBl
TmFtZTogJ3N0cmluZycsCi0gICAgICAgIFZhbHVlQnVmZmVyVHlwZTogQXJyYXksCisgICAgICAg
IGNvbnN0cnVjdG9yOiBOdW1iZXJLZXlmcmFtZVRyYWNrLAogCi0gICAgICAgIERlZmF1bHRJbnRl
cnBvbGF0aW9uOiBJbnRlcnBvbGF0ZURpc2NyZXRlLAorICAgICAgICBWYWx1ZVR5cGVOYW1lOiAn
bnVtYmVyJwogCi0gICAgICAgIEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjogdW5kZWZp
bmVkLAorICAgICAgICAvLyBWYWx1ZUJ1ZmZlclR5cGUgaXMgaW5oZXJpdGVkCiAKLSAgICAgICAg
SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOiB1bmRlZmluZWQKKyAgICAgICAgLy8gRGVm
YXVsdEludGVycG9sYXRpb24gaXMgaW5oZXJpdGVkCiAKICAgICB9ICk7CiAKICAgICAvKioKKyAg
ICAgKiBGYXN0IGFuZCBzaW1wbGUgY3ViaWMgc3BsaW5lIGludGVycG9sYW50LgogICAgICAqCi0g
ICAgICogQSBUcmFjayBvZiBCb29sZWFuIGtleWZyYW1lIHZhbHVlcy4KLSAgICAgKgorICAgICAq
IEl0IHdhcyBkZXJpdmVkIGZyb20gYSBIZXJtaXRpYW4gY29uc3RydWN0aW9uIHNldHRpbmcgdGhl
IGZpcnN0IGRlcml2YXRpdmUKKyAgICAgKiBhdCBlYWNoIHNhbXBsZSBwb3NpdGlvbiB0byB0aGUg
bGluZWFyIHNsb3BlIGJldHdlZW4gbmVpZ2hib3JpbmcgcG9zaXRpb25zCisgICAgICogb3ZlciB0
aGVpciBwYXJhbWV0ZXIgaW50ZXJ2YWwuCiAgICAgICoKLSAgICAgKiBAYXV0aG9yIEJlbiBIb3Vz
dG9uIC8gaHR0cDovL2NsYXJhLmlvLwotICAgICAqIEBhdXRob3IgRGF2aWQgU2Fybm8gLyBodHRw
Oi8vbGlnaHRoYXVzLnVzLwogICAgICAqIEBhdXRob3IgdHNjaHcKICAgICAgKi8KIAotICAgIGZ1
bmN0aW9uIEJvb2xlYW5LZXlmcmFtZVRyYWNrKCBuYW1lLCB0aW1lcywgdmFsdWVzICkgewotCi0g
ICAgICAgIEtleWZyYW1lVHJhY2tDb25zdHJ1Y3Rvci5jYWxsKCB0aGlzLCBuYW1lLCB0aW1lcywg
dmFsdWVzICk7Ci0KLSAgICB9Ci0KLSAgICBCb29sZWFuS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUg
PQotICAgICAgICAgICAgT2JqZWN0LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5ZnJhbWVUcmFj
a1Byb3RvdHlwZSApLCB7Ci0KLSAgICAgICAgY29uc3RydWN0b3I6IEJvb2xlYW5LZXlmcmFtZVRy
YWNrLAorICAgIGZ1bmN0aW9uIEN1YmljSW50ZXJwb2xhbnQoIHBhcmFtZXRlclBvc2l0aW9ucywg
c2FtcGxlVmFsdWVzLCBzYW1wbGVTaXplLCByZXN1bHRCdWZmZXIgKSB7CiAKLSAgICAgICAgVmFs
dWVUeXBlTmFtZTogJ2Jvb2wnLAotICAgICAgICBWYWx1ZUJ1ZmZlclR5cGU6IEFycmF5LAorICAg
ICAgICBJbnRlcnBvbGFudC5jYWxsKCB0aGlzLCBwYXJhbWV0ZXJQb3NpdGlvbnMsIHNhbXBsZVZh
bHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICk7CiAKLSAgICAgICAgRGVmYXVsdEludGVy
cG9sYXRpb246IEludGVycG9sYXRlRGlzY3JldGUsCisgICAgICAgIHRoaXMuX3dlaWdodFByZXYg
PSAtIDA7CisgICAgICAgIHRoaXMuX29mZnNldFByZXYgPSAtIDA7CisgICAgICAgIHRoaXMuX3dl
aWdodE5leHQgPSAtIDA7CisgICAgICAgIHRoaXMuX29mZnNldE5leHQgPSAtIDA7CiAKLSAgICAg
ICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOiB1bmRlZmluZWQsCi0gICAgICAgIElu
dGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDogdW5kZWZpbmVkCisgICAgfQogCi0gICAgICAg
IC8vIE5vdGU6IEFjdHVhbGx5IHRoaXMgdHJhY2sgY291bGQgaGF2ZSBhIG9wdGltaXplZCAvIGNv
bXByZXNzZWQKLSAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgdmFsdWUgYW5k
IGEgY3VzdG9tIGludGVycG9sYW50IHRoYXQKLSAgICAgICAgLy8gY29tcHV0ZXMgImZpcnN0VmFs
dWUgXiBpc09kZCggaW5kZXggKSIuCisgICAgQ3ViaWNJbnRlcnBvbGFudC5wcm90b3R5cGUgPSBP
YmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBJbnRlcnBvbGFudC5wcm90b3R5cGUgKSwgewog
Ci0gICAgfSApOworICAgICAgICBjb25zdHJ1Y3RvcjogQ3ViaWNJbnRlcnBvbGFudCwKIAotICAg
IC8qKgotICAgICAqCi0gICAgICogQSBUcmFjayBvZiBrZXlmcmFtZSB2YWx1ZXMgdGhhdCByZXBy
ZXNlbnQgY29sb3IuCi0gICAgICoKLSAgICAgKgotICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24g
LyBodHRwOi8vY2xhcmEuaW8vCi0gICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9s
aWdodGhhdXMudXMvCi0gICAgICogQGF1dGhvciB0c2NodwotICAgICAqLworICAgICAgICBEZWZh
dWx0U2V0dGluZ3NfOiB7CiAKLSAgICBmdW5jdGlvbiBDb2xvcktleWZyYW1lVHJhY2soIG5hbWUs
IHRpbWVzLCB2YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CisgICAgICAgICAgICBlbmRpbmdTdGFy
dDogWmVyb0N1cnZhdHVyZUVuZGluZywKKyAgICAgICAgICAgIGVuZGluZ0VuZDogWmVyb0N1cnZh
dHVyZUVuZGluZwogCi0gICAgICAgIEtleWZyYW1lVHJhY2tDb25zdHJ1Y3Rvci5jYWxsKCB0aGlz
LCBuYW1lLCB0aW1lcywgdmFsdWVzLCBpbnRlcnBvbGF0aW9uICk7CisgICAgICAgIH0sCiAKLSAg
ICB9CisgICAgICAgIGludGVydmFsQ2hhbmdlZF86IGZ1bmN0aW9uICggaTEsIHQwLCB0MSApIHsK
IAotICAgIENvbG9yS2V5ZnJhbWVUcmFjay5wcm90b3R5cGUgPQotICAgICAgICAgICAgT2JqZWN0
LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggS2V5ZnJhbWVUcmFja1Byb3RvdHlwZSApLCB7CisgICAg
ICAgICAgICB2YXIgcHAgPSB0aGlzLnBhcmFtZXRlclBvc2l0aW9ucywKKyAgICAgICAgICAgICAg
ICBpUHJldiA9IGkxIC0gMiwKKyAgICAgICAgICAgICAgICBpTmV4dCA9IGkxICsgMSwKIAotICAg
ICAgICBjb25zdHJ1Y3RvcjogQ29sb3JLZXlmcmFtZVRyYWNrLAorICAgICAgICAgICAgICAgIHRQ
cmV2ID0gcHBbIGlQcmV2IF0sCisgICAgICAgICAgICAgICAgdE5leHQgPSBwcFsgaU5leHQgXTsK
IAotICAgICAgICBWYWx1ZVR5cGVOYW1lOiAnY29sb3InCisgICAgICAgICAgICBpZiAoIHRQcmV2
ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgLy8gVmFsdWVCdWZmZXJUeXBlIGlzIGluaGVy
aXRlZAorICAgICAgICAgICAgICAgIHN3aXRjaCAoIHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5n
U3RhcnQgKSB7CiAKLSAgICAgICAgLy8gRGVmYXVsdEludGVycG9sYXRpb24gaXMgaW5oZXJpdGVk
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgWmVyb1Nsb3BlRW5kaW5nOgogCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBmJyh0MCkgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBpUHJl
diA9IGkxOworICAgICAgICAgICAgICAgICAgICAgICAgdFByZXYgPSAyICogdDAgLSB0MTsKIAot
ICAgICAgICAvLyBOb3RlOiBWZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIGFuZCBub3RoaW5nIHNw
ZWNpYWwgeWV0LgotICAgICAgICAvLyBIb3dldmVyLCB0aGlzIGlzIHRoZSBwbGFjZSBmb3IgY29s
b3Igc3BhY2UgcGFyYW1ldGVyaXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgfSApOworICAgICAgICAgICAgICAgICAgICBjYXNlIFdyYXBBcm91bmRFbmRpbmc6
CiAKLSAgICAvKioKLSAgICAgKgotICAgICAqIEEgdGltZWQgc2VxdWVuY2Ugb2Yga2V5ZnJhbWVz
IGZvciBhIHNwZWNpZmljIHByb3BlcnR5LgotICAgICAqCi0gICAgICoKLSAgICAgKiBAYXV0aG9y
IEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLwotICAgICAqIEBhdXRob3IgRGF2aWQgU2Fy
bm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLwotICAgICAqIEBhdXRob3IgdHNjaHcKLSAgICAgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjdXJ2
ZQorICAgICAgICAgICAgICAgICAgICAgICAgaVByZXYgPSBwcC5sZW5ndGggLSAyOworICAgICAg
ICAgICAgICAgICAgICAgICAgdFByZXYgPSB0MCArIHBwWyBpUHJldiBdIC0gcHBbIGlQcmV2ICsg
MSBdOwogCi0gICAgZnVuY3Rpb24gS2V5ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcywg
aW50ZXJwb2xhdGlvbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIEtleWZyYW1lVHJhY2tDb25zdHJ1Y3Rvci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIFplcm9DdXJ2YXR1cmVFbmRpbmcKIAotICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGYnJyh0MCkgPSAwIGEuay5hLiBOYXR1cmFs
IFNwbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaVByZXYgPSBpMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRQcmV2ID0gdDE7CiAKLSAgICBLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9
IEtleWZyYW1lVHJhY2tQcm90b3R5cGU7Ci0gICAgS2V5ZnJhbWVUcmFja1Byb3RvdHlwZS5jb25z
dHJ1Y3RvciA9IEtleWZyYW1lVHJhY2s7CisgICAgICAgICAgICAgICAgfQogCi0gICAgLy8gU3Rh
dGljIG1ldGhvZHM6CisgICAgICAgICAgICB9CiAKLSAgICBPYmplY3QuYXNzaWduKCBLZXlmcmFt
ZVRyYWNrLCB7CisgICAgICAgICAgICBpZiAoIHROZXh0ID09PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICAgICAgLy8gU2VyaWFsaXphdGlvbiAoaW4gc3RhdGljIGNvbnRleHQsIGJlY2F1c2Ugb2YgY29u
c3RydWN0b3IgaW52b2NhdGlvbgotICAgICAgICAvLyBhbmQgYXV0b21hdGljIGludm9jYXRpb24g
b2YgLnRvSlNPTik6CisgICAgICAgICAgICAgICAgc3dpdGNoICggdGhpcy5nZXRTZXR0aW5nc18o
KS5lbmRpbmdFbmQgKSB7CiAKLSAgICAgICAgcGFyc2U6IGZ1bmN0aW9uKCBqc29uICkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIFplcm9TbG9wZUVuZGluZzoKIAotICAgICAgICAgICAgaWYo
IGpzb24udHlwZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZicodE4pID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgaU5leHQgPSBpMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHROZXh0ID0gMiAqIHQxIC0gdDA7CiAKLSAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoICJ0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgV3JhcEFyb3VuZEVuZGluZzoKIAotICAgICAgICAgICAgdmFyIHRy
YWNrVHlwZSA9IEtleWZyYW1lVHJhY2suX2dldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5hbWUoIGpz
b24udHlwZSApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBvdGhlciBlbmQg
b2YgdGhlIGN1cnZlCisgICAgICAgICAgICAgICAgICAgICAgICBpTmV4dCA9IDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0TmV4dCA9IHQxICsgcHBbIDEgXSAtIHBwWyAwIF07CiAKLSAgICAg
ICAgICAgIGlmICgganNvbi50aW1lcyA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICB2YXIgdGltZXMgPSBbXSwgdmFsdWVz
ID0gW107CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIFplcm9DdXJ2YXR1cmVFbmRp
bmcKIAotICAgICAgICAgICAgICAgIEFuaW1hdGlvblV0aWxzLmZsYXR0ZW5KU09OKCBqc29uLmtl
eXMsIHRpbWVzLCB2YWx1ZXMsICd2YWx1ZScgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGYnJyh0TikgPSAwLCBhLmsuYS4gTmF0dXJhbCBTcGxpbmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlOZXh0ID0gaTEgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdE5leHQgPSB0MDsK
IAotICAgICAgICAgICAgICAgIGpzb24udGltZXMgPSB0aW1lczsKLSAgICAgICAgICAgICAgICBq
c29uLnZhbHVlcyA9IHZhbHVlczsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgLy8gZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBzdGF0aWMgcGFy
c2UgbWV0aG9kCi0gICAgICAgICAgICBpZiAoIHRyYWNrVHlwZS5wYXJzZSAhPT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgdmFyIGhhbGZEdCA9ICggdDEgLSB0MCApICogMC41LAorICAgICAg
ICAgICAgICAgIHN0cmlkZSA9IHRoaXMudmFsdWVTaXplOwogCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRyYWNrVHlwZS5wYXJzZSgganNvbiApOworICAgICAgICAgICAgdGhpcy5fd2VpZ2h0UHJl
diA9IGhhbGZEdCAvICggdDAgLSB0UHJldiApOworICAgICAgICAgICAgdGhpcy5fd2VpZ2h0TmV4
dCA9IGhhbGZEdCAvICggdE5leHQgLSB0MSApOworICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UHJl
diA9IGlQcmV2ICogc3RyaWRlOworICAgICAgICAgICAgdGhpcy5fb2Zmc2V0TmV4dCA9IGlOZXh0
ICogc3RyaWRlOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB9LAogCi0gICAgICAg
ICAgICAgICAgLy8gYnkgZGVmYXVsdCwgd2UgYXNzc3VtZSBhIGNvbnN0cnVjdG9yIGNvbXBhdGli
bGUgd2l0aCB0aGUgYmFzZQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdHJhY2tUeXBlKAot
ICAgICAgICAgICAgICAgICAgICAgICAganNvbi5uYW1lLCBqc29uLnRpbWVzLCBqc29uLnZhbHVl
cywganNvbi5pbnRlcnBvbGF0aW9uICk7CisgICAgICAgIGludGVycG9sYXRlXzogZnVuY3Rpb24g
KCBpMSwgdDAsIHQsIHQxICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcmVz
dWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsCisgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5z
YW1wbGVWYWx1ZXMsCisgICAgICAgICAgICAgICAgc3RyaWRlID0gdGhpcy52YWx1ZVNpemUsCiAK
LSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBvMSA9IGkxICogc3RyaWRlLCAgICAgICBvMCA9
IG8xIC0gc3RyaWRlLAorICAgICAgICAgICAgICAgIG9QID0gdGhpcy5fb2Zmc2V0UHJldiwgIG9O
ID0gdGhpcy5fb2Zmc2V0TmV4dCwKKyAgICAgICAgICAgICAgICB3UCA9IHRoaXMuX3dlaWdodFBy
ZXYsICB3TiA9IHRoaXMuX3dlaWdodE5leHQsCiAKLSAgICAgICAgdG9KU09OOiBmdW5jdGlvbigg
dHJhY2sgKSB7CisgICAgICAgICAgICAgICAgcCA9ICggdCAtIHQwICkgLyAoIHQxIC0gdDAgKSwK
KyAgICAgICAgICAgICAgICBwcCA9IHAgKiBwLAorICAgICAgICAgICAgICAgIHBwcCA9IHBwICog
cDsKIAotICAgICAgICAgICAgdmFyIHRyYWNrVHlwZSA9IHRyYWNrLmNvbnN0cnVjdG9yOworICAg
ICAgICAgICAgLy8gZXZhbHVhdGUgcG9seW5vbWlhbHMKIAotICAgICAgICAgICAgdmFyIGpzb247
CisgICAgICAgICAgICB2YXIgc1AgPSAtIHdQICogcHBwICsgMiAqIHdQICogcHAgLSB3UCAqIHA7
CisgICAgICAgICAgICB2YXIgczAgPSAoIDEgKyB3UCApICogcHBwICsgKCAtIDEuNSAtIDIgKiB3
UCApICogcHAgKyAoIC0gMC41ICsgd1AgKSAqIHAgKyAxOworICAgICAgICAgICAgdmFyIHMxID0g
KCAtIDEgLSB3TiApICogcHBwICsgKCAxLjUgKyB3TiApICogcHAgKyAwLjUgKiBwOworICAgICAg
ICAgICAgdmFyIHNOID0gd04gKiBwcHAgLSB3TiAqIHBwOwogCi0gICAgICAgICAgICAvLyBkZXJp
dmVkIGNsYXNzZXMgY2FuIGRlZmluZSBhIHN0YXRpYyB0b0pTT04gbWV0aG9kCi0gICAgICAgICAg
ICBpZiAoIHRyYWNrVHlwZS50b0pTT04gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIC8v
IGNvbWJpbmUgZGF0YSBsaW5lYXJseQogCi0gICAgICAgICAgICAgICAganNvbiA9IHRyYWNrVHlw
ZS50b0pTT04oIHRyYWNrICk7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IHN0
cmlkZTsgKysgaSApIHsKIAotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRbIGkgXSA9CisgICAgICAgICAgICAgICAgICAgICAgICBzUCAqIHZhbHVlc1sgb1AgKyBp
IF0gKworICAgICAgICAgICAgICAgICAgICAgICAgczAgKiB2YWx1ZXNbIG8wICsgaSBdICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHMxICogdmFsdWVzWyBvMSArIGkgXSArCisgICAgICAgICAg
ICAgICAgICAgICAgICBzTiAqIHZhbHVlc1sgb04gKyBpIF07CiAKLSAgICAgICAgICAgICAgICAv
LyBieSBkZWZhdWx0LCB3ZSBhc3N1bWUgdGhlIGRhdGEgY2FuIGJlIHNlcmlhbGl6ZWQgYXMtaXMK
LSAgICAgICAgICAgICAgICBqc29uID0geworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgICduYW1lJzogdHJhY2submFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ3RpbWVzJzog
QW5pbWF0aW9uVXRpbHMuY29udmVydEFycmF5KCB0cmFjay50aW1lcywgQXJyYXkgKSwKLSAgICAg
ICAgICAgICAgICAgICAgJ3ZhbHVlcyc6IEFuaW1hdGlvblV0aWxzLmNvbnZlcnRBcnJheSggdHJh
Y2sudmFsdWVzLCBBcnJheSApCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRp
b24gPSB0cmFjay5nZXRJbnRlcnBvbGF0aW9uKCk7CisgICAgfSApOwogCi0gICAgICAgICAgICAg
ICAgaWYgKCBpbnRlcnBvbGF0aW9uICE9PSB0cmFjay5EZWZhdWx0SW50ZXJwb2xhdGlvbiApIHsK
KyAgICAvKioKKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAgICAgICAgICAgICAg
ICAgICAganNvbi5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjsKKyAgICBmdW5jdGlvbiBM
aW5lYXJJbnRlcnBvbGFudCggcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBs
ZVNpemUsIHJlc3VsdEJ1ZmZlciApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgSW50
ZXJwb2xhbnQuY2FsbCggdGhpcywgcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNh
bXBsZVNpemUsIHJlc3VsdEJ1ZmZlciApOwogCi0gICAgICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgICAgICBqc29uLnR5cGUgPSB0cmFjay5WYWx1ZVR5cGVOYW1lOyAvLyBtYW5kYXRvcnkKKyAg
ICBMaW5lYXJJbnRlcnBvbGFudC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3Jl
YXRlKCBJbnRlcnBvbGFudC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICByZXR1cm4ganNv
bjsKKyAgICAgICAgY29uc3RydWN0b3I6IExpbmVhckludGVycG9sYW50LAogCi0gICAgICAgIH0s
CisgICAgICAgIGludGVycG9sYXRlXzogZnVuY3Rpb24gKCBpMSwgdDAsIHQsIHQxICkgewogCi0g
ICAgICAgIF9nZXRUcmFja1R5cGVGb3JWYWx1ZVR5cGVOYW1lOiBmdW5jdGlvbiggdHlwZU5hbWUg
KSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXN1bHRCdWZmZXIsCisgICAgICAg
ICAgICAgICAgdmFsdWVzID0gdGhpcy5zYW1wbGVWYWx1ZXMsCisgICAgICAgICAgICAgICAgc3Ry
aWRlID0gdGhpcy52YWx1ZVNpemUsCiAKLSAgICAgICAgICAgIHN3aXRjaCggdHlwZU5hbWUudG9M
b3dlckNhc2UoKSApIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQxID0gaTEgKiBzdHJpZGUsCisg
ICAgICAgICAgICAgICAgb2Zmc2V0MCA9IG9mZnNldDEgLSBzdHJpZGUsCiAKLSAgICAgICAgICAg
ICAgICBjYXNlICJzY2FsYXIiOgotICAgICAgICAgICAgICAgIGNhc2UgImRvdWJsZSI6Ci0gICAg
ICAgICAgICAgICAgY2FzZSAiZmxvYXQiOgotICAgICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6
Ci0gICAgICAgICAgICAgICAgY2FzZSAiaW50ZWdlciI6CisgICAgICAgICAgICAgICAgd2VpZ2h0
MSA9ICggdCAtIHQwICkgLyAoIHQxIC0gdDAgKSwKKyAgICAgICAgICAgICAgICB3ZWlnaHQwID0g
MSAtIHdlaWdodDE7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcktleWZyYW1l
VHJhY2s7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgIT09IHN0cmlkZTsgKysgaSAp
IHsKIAotICAgICAgICAgICAgICAgIGNhc2UgInZlY3RvciI6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAidmVjdG9yMiI6Ci0gICAgICAgICAgICAgICAgY2FzZSAidmVjdG9yMyI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSAidmVjdG9yNCI6CisgICAgICAgICAgICAgICAgcmVzdWx0WyBpIF0gPQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyBvZmZzZXQwICsgaSBdICogd2VpZ2h0MCArCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIG9mZnNldDEgKyBpIF0gKiB3ZWlnaHQxOwog
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3JLZXlmcmFtZVRyYWNrOworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgY2FzZSAiY29sb3IiOgorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JLZXlmcmFtZVRy
YWNrOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBjYXNlICJxdWF0ZXJuaW9uIjoKKyAg
ICB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFF1YXRlcm5pb25LZXlmcmFtZVRy
YWNrOworICAgIC8qKgorICAgICAqCisgICAgICogSW50ZXJwb2xhbnQgdGhhdCBldmFsdWF0ZXMg
dG8gdGhlIHNhbXBsZSB2YWx1ZSBhdCB0aGUgcG9zaXRpb24gcHJlY2VlZGluZworICAgICAqIHRo
ZSBwYXJhbWV0ZXIuCisgICAgICoKKyAgICAgKiBAYXV0aG9yIHRzY2h3CisgICAgICovCiAKLSAg
ICAgICAgICAgICAgICBjYXNlICJib29sIjoKLSAgICAgICAgICAgICAgICBjYXNlICJib29sZWFu
IjoKKyAgICBmdW5jdGlvbiBEaXNjcmV0ZUludGVycG9sYW50KCBwYXJhbWV0ZXJQb3NpdGlvbnMs
IHNhbXBsZVZhbHVlcywgc2FtcGxlU2l6ZSwgcmVzdWx0QnVmZmVyICkgewogCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBCb29sZWFuS2V5ZnJhbWVUcmFjazsKKyAgICAgICAgSW50ZXJwb2xh
bnQuY2FsbCggdGhpcywgcGFyYW1ldGVyUG9zaXRpb25zLCBzYW1wbGVWYWx1ZXMsIHNhbXBsZVNp
emUsIHJlc3VsdEJ1ZmZlciApOwogCi0gICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0tleWZyYW1lVHJhY2s7Cisg
ICAgRGlzY3JldGVJbnRlcnBvbGFudC5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3Qu
Y3JlYXRlKCBJbnRlcnBvbGFudC5wcm90b3R5cGUgKSwgewogCi0gICAgICAgICAgICB9CisgICAg
ICAgIGNvbnN0cnVjdG9yOiBEaXNjcmV0ZUludGVycG9sYW50LAorCisgICAgICAgIGludGVycG9s
YXRlXzogZnVuY3Rpb24gKCBpMSAvKiwgdDAsIHQsIHQxICovICkgewogCi0gICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoICJVbnN1cHBvcnRlZCB0eXBlTmFtZTogIiArIHR5cGVOYW1lICk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKCBpMSAtIDEgKTsKIAogICAg
ICAgICB9CiAKICAgICB9ICk7CiAKICAgICAvKioKLSAgICAgKgotICAgICAqIFJldXNhYmxlIHNl
dCBvZiBUcmFja3MgdGhhdCByZXByZXNlbnQgYW4gYW5pbWF0aW9uLgotICAgICAqCisgICAgICog
QGF1dGhvciB0c2NodwogICAgICAqIEBhdXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xhcmEu
aW8vCiAgICAgICogQGF1dGhvciBEYXZpZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMvCiAg
ICAgICovCiAKLSAgICBmdW5jdGlvbiBBbmltYXRpb25DbGlwKCBuYW1lLCBkdXJhdGlvbiwgdHJh
Y2tzICkgewotCi0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMudHJhY2tz
ID0gdHJhY2tzOwotICAgICAgICB0aGlzLmR1cmF0aW9uID0gKCBkdXJhdGlvbiAhPT0gdW5kZWZp
bmVkICkgPyBkdXJhdGlvbiA6IC0gMTsKLQotICAgICAgICB0aGlzLnV1aWQgPSBfTWF0aC5nZW5l
cmF0ZVVVSUQoKTsKKyAgICB2YXIgQW5pbWF0aW9uVXRpbHMgPSB7CiAKLSAgICAgICAgLy8gdGhp
cyBtZWFucyBpdCBzaG91bGQgZmlndXJlIG91dCBpdHMgZHVyYXRpb24gYnkgc2Nhbm5pbmcgdGhl
IHRyYWNrcwotICAgICAgICBpZiAoIHRoaXMuZHVyYXRpb24gPCAwICkgeworICAgICAgICAvLyBz
YW1lIGFzIEFycmF5LnByb3RvdHlwZS5zbGljZSwgYnV0IGFsc28gd29ya3Mgb24gdHlwZWQgYXJy
YXlzCisgICAgICAgIGFycmF5U2xpY2U6IGZ1bmN0aW9uICggYXJyYXksIGZyb20sIHRvICkgewog
Ci0gICAgICAgICAgICB0aGlzLnJlc2V0RHVyYXRpb24oKTsKKyAgICAgICAgICAgIGlmICggQW5p
bWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5KCBhcnJheSApICkgewogCi0gICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyBpbiBpb3M5IGFycmF5LnN1YmFycmF5KGZyb20sIHVuZGVmaW5lZCkgd2ls
bCByZXR1cm4gZW1wdHkgYXJyYXkKKyAgICAgICAgICAgICAgICAvLyBidXQgYXJyYXkuc3ViYXJy
YXkoZnJvbSkgb3IgYXJyYXkuc3ViYXJyYXkoZnJvbSwgbGVuKSBpcyBjb3JyZWN0CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBhcnJheS5jb25zdHJ1Y3RvciggYXJyYXkuc3ViYXJyYXkoIGZy
b20sIHRvICE9PSB1bmRlZmluZWQgPyB0byA6IGFycmF5Lmxlbmd0aCApICk7CiAKLSAgICAgICAg
dGhpcy5vcHRpbWl6ZSgpOworICAgICAgICAgICAgfQogCi0gICAgfQorICAgICAgICAgICAgcmV0
dXJuIGFycmF5LnNsaWNlKCBmcm9tLCB0byApOwogCi0gICAgT2JqZWN0LmFzc2lnbiggQW5pbWF0
aW9uQ2xpcCwgeworICAgICAgICB9LAogCi0gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoIGpzb24g
KSB7CisgICAgICAgIC8vIGNvbnZlcnRzIGFuIGFycmF5IHRvIGEgc3BlY2lmaWMgdHlwZQorICAg
ICAgICBjb252ZXJ0QXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIHR5cGUsIGZvcmNlQ2xvbmUgKSB7
CiAKLSAgICAgICAgICAgIHZhciB0cmFja3MgPSBbXSwKLSAgICAgICAgICAgICAgICBqc29uVHJh
Y2tzID0ganNvbi50cmFja3MsCi0gICAgICAgICAgICAgICAgZnJhbWVUaW1lID0gMS4wIC8gKCBq
c29uLmZwcyB8fCAxLjAgKTsKKyAgICAgICAgICAgIGlmICggISBhcnJheSB8fCAvLyBsZXQgJ3Vu
ZGVmaW5lZCcgYW5kICdudWxsJyBwYXNzCisgICAgICAgICAgICAgICAgICAgICEgZm9yY2VDbG9u
ZSAmJiBhcnJheS5jb25zdHJ1Y3RvciA9PT0gdHlwZSApIHJldHVybiBhcnJheTsKIAotICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBuID0ganNvblRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsr
IGkgKSB7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlLkJZVEVTX1BFUl9FTEVNRU5UID09
PSAnbnVtYmVyJyApIHsKIAotICAgICAgICAgICAgICAgIHRyYWNrcy5wdXNoKCBLZXlmcmFtZVRy
YWNrLnBhcnNlKCBqc29uVHJhY2tzWyBpIF0gKS5zY2FsZSggZnJhbWVUaW1lICkgKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoIGFycmF5ICk7IC8vIGNyZWF0ZSB0eXBlZCBhcnJh
eQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgQW5pbWF0aW9uQ2xp
cCgganNvbi5uYW1lLCBqc29uLmR1cmF0aW9uLCB0cmFja3MgKTsKKyAgICAgICAgICAgIHJldHVy
biBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXkgKTsgLy8gY3JlYXRlIEFycmF5CiAK
ICAgICAgICAgfSwKIAotICAgICAgICB0b0pTT046IGZ1bmN0aW9uICggY2xpcCApIHsKLQotICAg
ICAgICAgICAgdmFyIHRyYWNrcyA9IFtdLAotICAgICAgICAgICAgICAgIGNsaXBUcmFja3MgPSBj
bGlwLnRyYWNrczsKKyAgICAgICAgaXNUeXBlZEFycmF5OiBmdW5jdGlvbiAoIG9iamVjdCApIHsK
IAotICAgICAgICAgICAgdmFyIGpzb24gPSB7CisgICAgICAgICAgICByZXR1cm4gQXJyYXlCdWZm
ZXIuaXNWaWV3KCBvYmplY3QgKSAmJgorICAgICAgICAgICAgICAgICAgICAhICggb2JqZWN0IGlu
c3RhbmNlb2YgRGF0YVZpZXcgKTsKIAotICAgICAgICAgICAgICAgICduYW1lJzogY2xpcC5uYW1l
LAotICAgICAgICAgICAgICAgICdkdXJhdGlvbic6IGNsaXAuZHVyYXRpb24sCi0gICAgICAgICAg
ICAgICAgJ3RyYWNrcyc6IHRyYWNrcworICAgICAgICB9LAogCi0gICAgICAgICAgICB9OworICAg
ICAgICAvLyByZXR1cm5zIGFuIGFycmF5IGJ5IHdoaWNoIHRpbWVzIGFuZCB2YWx1ZXMgY2FuIGJl
IHNvcnRlZAorICAgICAgICBnZXRLZXlmcmFtZU9yZGVyOiBmdW5jdGlvbiAoIHRpbWVzICkgewog
Ci0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSBjbGlwVHJhY2tzLmxlbmd0aDsgaSAh
PT0gbjsgKysgaSApIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVUaW1lKCBpLCBqICkg
ewogCi0gICAgICAgICAgICAgICAgdHJhY2tzLnB1c2goIEtleWZyYW1lVHJhY2sudG9KU09OKCBj
bGlwVHJhY2tzWyBpIF0gKSApOworICAgICAgICAgICAgICAgIHJldHVybiB0aW1lc1sgaSBdIC0g
dGltZXNbIGogXTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4ganNvbjsK
LQotICAgICAgICB9LAorICAgICAgICAgICAgdmFyIG4gPSB0aW1lcy5sZW5ndGg7CisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCBuICk7CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgIT09IG47ICsrIGkgKSByZXN1bHRbIGkgXSA9IGk7CiAKLSAgICAgICAgQ3JlYXRl
RnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2U6IGZ1bmN0aW9uICggbmFtZSwgbW9ycGhUYXJnZXRTZXF1
ZW5jZSwgZnBzLCBub0xvb3AgKSB7CisgICAgICAgICAgICByZXN1bHQuc29ydCggY29tcGFyZVRp
bWUgKTsKIAotICAgICAgICAgICAgdmFyIG51bU1vcnBoVGFyZ2V0cyA9IG1vcnBoVGFyZ2V0U2Vx
dWVuY2UubGVuZ3RoOwotICAgICAgICAgICAgdmFyIHRyYWNrcyA9IFtdOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbnVtTW9y
cGhUYXJnZXRzOyBpICsrICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgdmFyIHRp
bWVzID0gW107Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOworICAgICAgICAvLyB1
c2VzIHRoZSBhcnJheSBwcmV2aW91c2x5IHJldHVybmVkIGJ5ICdnZXRLZXlmcmFtZU9yZGVyJyB0
byBzb3J0IGRhdGEKKyAgICAgICAgc29ydGVkQXJyYXk6IGZ1bmN0aW9uICggdmFsdWVzLCBzdHJp
ZGUsIG9yZGVyICkgewogCi0gICAgICAgICAgICAgICAgdGltZXMucHVzaCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICggaSArIG51bU1vcnBoVGFyZ2V0cyAtIDEgKSAlIG51bU1vcnBoVGFyZ2V0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAo
IGkgKyAxICkgJSBudW1Nb3JwaFRhcmdldHMgKTsKKyAgICAgICAgICAgIHZhciBuVmFsdWVzID0g
dmFsdWVzLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgdmFsdWVzLmNvbnN0
cnVjdG9yKCBuVmFsdWVzICk7CiAKLSAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggMCwgMSwg
MCApOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBkc3RPZmZzZXQgPSAwOyBkc3RPZmZz
ZXQgIT09IG5WYWx1ZXM7ICsrIGkgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgb3JkZXIgPSBB
bmltYXRpb25VdGlscy5nZXRLZXlmcmFtZU9yZGVyKCB0aW1lcyApOwotICAgICAgICAgICAgICAg
IHRpbWVzID0gQW5pbWF0aW9uVXRpbHMuc29ydGVkQXJyYXkoIHRpbWVzLCAxLCBvcmRlciApOwot
ICAgICAgICAgICAgICAgIHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KCB2YWx1
ZXMsIDEsIG9yZGVyICk7CisgICAgICAgICAgICAgICAgdmFyIHNyY09mZnNldCA9IG9yZGVyWyBp
IF0gKiBzdHJpZGU7CiAKLSAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGtleSBhdCB0
aGUgZmlyc3QgZnJhbWUsIGR1cGxpY2F0ZSBpdCBhcyB0aGUKLSAgICAgICAgICAgICAgICAvLyBs
YXN0IGZyYW1lIGFzIHdlbGwgZm9yIHBlcmZlY3QgbG9vcC4KLSAgICAgICAgICAgICAgICBpZiAo
ICEgbm9Mb29wICYmIHRpbWVzWyAwIF0gPT09IDAgKSB7CisgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGogPSAwOyBqICE9PSBzdHJpZGU7ICsrIGogKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
dGltZXMucHVzaCggbnVtTW9ycGhUYXJnZXRzICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl
cy5wdXNoKCB2YWx1ZXNbIDAgXSApOworICAgICAgICAgICAgICAgICAgICByZXN1bHRbIGRzdE9m
ZnNldCArKyBdID0gdmFsdWVzWyBzcmNPZmZzZXQgKyBqIF07CiAKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICB0cmFja3MucHVzaCgKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBOdW1iZXJLZXlmcmFtZVRyYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICcu
bW9ycGhUYXJnZXRJbmZsdWVuY2VzWycgKyBtb3JwaFRhcmdldFNlcXVlbmNlWyBpIF0ubmFtZSAr
ICddJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcywgdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICApLnNjYWxlKCAxLjAgLyBmcHMgKSApOwotCiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgQW5pbWF0aW9uQ2xpcCggbmFtZSwgLSAxLCB0cmFj
a3MgKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAgICAgfSwKIAotICAgICAg
ICBmaW5kQnlOYW1lOiBmdW5jdGlvbiAoIG9iamVjdE9yQ2xpcEFycmF5LCBuYW1lICkgeworICAg
ICAgICAvLyBmdW5jdGlvbiBmb3IgcGFyc2luZyBBT1Mga2V5ZnJhbWUgZm9ybWF0cworICAgICAg
ICBmbGF0dGVuSlNPTjogZnVuY3Rpb24gKCBqc29uS2V5cywgdGltZXMsIHZhbHVlcywgdmFsdWVQ
cm9wZXJ0eU5hbWUgKSB7CiAKLSAgICAgICAgICAgIHZhciBjbGlwQXJyYXkgPSBvYmplY3RPckNs
aXBBcnJheTsKKyAgICAgICAgICAgIHZhciBpID0gMSwga2V5ID0ganNvbktleXNbIDAgXTsKIAot
ICAgICAgICAgICAgaWYgKCAhIEFycmF5LmlzQXJyYXkoIG9iamVjdE9yQ2xpcEFycmF5ICkgKSB7
CisgICAgICAgICAgICB3aGlsZSAoIGtleSAhPT0gdW5kZWZpbmVkICYmIGtleVsgdmFsdWVQcm9w
ZXJ0eU5hbWUgXSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgdmFyIG8gPSBv
YmplY3RPckNsaXBBcnJheTsKLSAgICAgICAgICAgICAgICBjbGlwQXJyYXkgPSBvLmdlb21ldHJ5
ICYmIG8uZ2VvbWV0cnkuYW5pbWF0aW9ucyB8fCBvLmFuaW1hdGlvbnM7CisgICAgICAgICAgICAg
ICAga2V5ID0ganNvbktleXNbIGkgKysgXTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBjbGlwQXJyYXkubGVuZ3RoOyBpICsrICkgeworICAgICAg
ICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHJldHVybjsgLy8gbm8gZGF0YQogCi0gICAg
ICAgICAgICAgICAgaWYgKCBjbGlwQXJyYXlbIGkgXS5uYW1lID09PSBuYW1lICkgeworICAgICAg
ICAgICAgdmFyIHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdOworICAgICAgICAgICAg
aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgcmV0dXJuOyAvLyBubyBkYXRhCiAKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNsaXBBcnJheVsgaSBdOworICAgICAgICAgICAgaWYgKCBBcnJh
eS5pc0FycmF5KCB2YWx1ZSApICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGRvIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGtl
eVsgdmFsdWVQcm9wZXJ0eU5hbWUgXTsKIAotICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMucHVzaCgga2V5LnRpbWUgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoLmFwcGx5KCB2YWx1ZXMsIHZhbHVlICk7IC8v
IHB1c2ggYWxsIGVsZW1lbnRzCiAKLSAgICAgICAgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRT
ZXF1ZW5jZXM6IGZ1bmN0aW9uICggbW9ycGhUYXJnZXRzLCBmcHMsIG5vTG9vcCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgYW5pbWF0aW9uVG9Nb3JwaFRhcmdl
dHMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ganNvbktleXNbIGkgKysgXTsKIAot
ICAgICAgICAgICAgLy8gdGVzdGVkIHdpdGggaHR0cHM6Ly9yZWdleDEwMS5jb20vIG9uIHRyaWNr
IHNlcXVlbmNlcwotICAgICAgICAgICAgLy8gc3VjaCBmbGFtaW5nb19mbHlBXzAwMywgZmxhbWlu
Z29fcnVuMV8wMDMsIGNyZGVhdGgwMDU5Ci0gICAgICAgICAgICB2YXIgcGF0dGVybiA9IC9eKFtc
dy1dKj8pKFtcZF0rKSQvOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKCBrZXkgIT09IHVuZGVm
aW5lZCApOwogCi0gICAgICAgICAgICAvLyBzb3J0IG1vcnBoIHRhcmdldCBuYW1lcyBpbnRvIGFu
aW1hdGlvbiBncm91cHMgYmFzZWQKLSAgICAgICAgICAgIC8vIHBhdHRlcm5zIGxpa2UgV2Fsa18w
MDEsIFdhbGtfMDAyLCBSdW5fMDAxLCBSdW5fMDAyCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDAsIGlsID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAg
ICAgfSBlbHNlIGlmICggdmFsdWUudG9BcnJheSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAg
ICAgICAgICAgdmFyIG1vcnBoVGFyZ2V0ID0gbW9ycGhUYXJnZXRzWyBpIF07Ci0gICAgICAgICAg
ICAgICAgdmFyIHBhcnRzID0gbW9ycGhUYXJnZXQubmFtZS5tYXRjaCggcGF0dGVybiApOworICAg
ICAgICAgICAgICAgIC8vIC4uLmFzc3VtZSBUSFJFRS5NYXRoLWlzaAogCi0gICAgICAgICAgICAg
ICAgaWYgKCBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgIGRv
IHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHBhcnRzWyAxIF07CisgICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0ga2V5WyB2YWx1ZVByb3BlcnR5TmFtZSBdOwogCi0gICAgICAg
ICAgICAgICAgICAgIHZhciBhbmltYXRpb25Nb3JwaFRhcmdldHMgPSBhbmltYXRpb25Ub01vcnBo
VGFyZ2V0c1sgbmFtZSBdOwotICAgICAgICAgICAgICAgICAgICBpZiAoICEgYW5pbWF0aW9uTW9y
cGhUYXJnZXRzICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblRvTW9ycGhUYXJnZXRz
WyBuYW1lIF0gPSBhbmltYXRpb25Nb3JwaFRhcmdldHMgPSBbXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVzLnB1c2goIGtleS50aW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZS50b0FycmF5KCB2YWx1ZXMsIHZhbHVlcy5sZW5ndGggKTsKIAogICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uTW9ycGhUYXJnZXRzLnB1c2go
IG1vcnBoVGFyZ2V0ICk7Ci0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGtleSA9IGpzb25LZXlzWyBpICsrIF07CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IHdoaWxlICgga2V5ICE9PSB1bmRlZmluZWQgKTsKIAotICAgICAgICAgICAgdmFyIGNsaXBz
ID0gW107CisgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICBmb3IgKCB2YXIgbmFt
ZSBpbiBhbmltYXRpb25Ub01vcnBoVGFyZ2V0cyApIHsKKyAgICAgICAgICAgICAgICAvLyBvdGhl
cndpc2UgcHVzaCBhcy1pcwogCi0gICAgICAgICAgICAgICAgY2xpcHMucHVzaCggQW5pbWF0aW9u
Q2xpcC5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSggbmFtZSwgYW5pbWF0aW9uVG9Nb3Jw
aFRhcmdldHNbIG5hbWUgXSwgZnBzLCBub0xvb3AgKSApOworICAgICAgICAgICAgICAgIGRvIHsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGtleVsgdmFsdWVQ
cm9wZXJ0eU5hbWUgXTsKIAotICAgICAgICAgICAgcmV0dXJuIGNsaXBzOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVzLnB1c2goIGtleS50aW1lICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMucHVzaCggdmFsdWUgKTsKIAotICAgICAgICAvLyBwYXJzZSB0aGUg
YW5pbWF0aW9uLmhpZXJhcmNoeSBmb3JtYXQKLSAgICAgICAgcGFyc2VBbmltYXRpb246IGZ1bmN0
aW9uICggYW5pbWF0aW9uLCBib25lcyApIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoICEgYW5pbWF0aW9uICkgeworICAgICAgICAgICAgICAgICAgICBrZXkgPSBq
c29uS2V5c1sgaSArKyBdOwogCi0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVF
LkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuJyApOwotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKCBrZXkg
IT09IHVuZGVmaW5lZCApOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBhZGRO
b25lbXB0eVRyYWNrID0gZnVuY3Rpb24gKCB0cmFja1R5cGUsIHRyYWNrTmFtZSwgYW5pbWF0aW9u
S2V5cywgcHJvcGVydHlOYW1lLCBkZXN0VHJhY2tzICkgeworICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAvLyBvbmx5IHJldHVybiB0cmFjayBpZiB0aGVyZSBhcmUgYWN0dWFsbHkga2V5cy4K
LSAgICAgICAgICAgICAgICBpZiAoIGFuaW1hdGlvbktleXMubGVuZ3RoICE9PSAwICkgeworICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVzID0gW107Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKKyAgICAvKioKKyAgICAgKgorICAgICAqIEEgdGltZWQg
c2VxdWVuY2Ugb2Yga2V5ZnJhbWVzIGZvciBhIHNwZWNpZmljIHByb3BlcnR5LgorICAgICAqCisg
ICAgICoKKyAgICAgKiBAYXV0aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLworICAg
ICAqIEBhdXRob3IgRGF2aWQgU2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLworICAgICAqIEBh
dXRob3IgdHNjaHcKKyAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25VdGls
cy5mbGF0dGVuSlNPTiggYW5pbWF0aW9uS2V5cywgdGltZXMsIHZhbHVlcywgcHJvcGVydHlOYW1l
ICk7CisgICAgZnVuY3Rpb24gS2V5ZnJhbWVUcmFjayggbmFtZSwgdGltZXMsIHZhbHVlcywgaW50
ZXJwb2xhdGlvbiApIHsKIAotICAgICAgICAgICAgICAgICAgICAvLyBlbXB0eSBrZXlzIGFyZSBm
aWx0ZXJlZCBvdXQsIHNvIGNoZWNrIGFnYWluCi0gICAgICAgICAgICAgICAgICAgIGlmICggdGlt
ZXMubGVuZ3RoICE9PSAwICkgeworICAgICAgICBpZiAoIG5hbWUgPT09IHVuZGVmaW5lZCApIHRo
cm93IG5ldyBFcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZp
bmVkJyApOworICAgICAgICBpZiAoIHRpbWVzID09PSB1bmRlZmluZWQgfHwgdGltZXMubGVuZ3Ro
ID09PSAwICkgdGhyb3cgbmV3IEVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJh
bWVzIGluIHRyYWNrIG5hbWVkICcgKyBuYW1lICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RUcmFja3MucHVzaCggbmV3IHRyYWNrVHlwZSggdHJhY2tOYW1lLCB0aW1lcywgdmFsdWVz
ICkgKTsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKIAotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgIHRoaXMudGltZXMgPSBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHRpbWVz
LCB0aGlzLlRpbWVCdWZmZXJUeXBlICk7CisgICAgICAgIHRoaXMudmFsdWVzID0gQW5pbWF0aW9u
VXRpbHMuY29udmVydEFycmF5KCB2YWx1ZXMsIHRoaXMuVmFsdWVCdWZmZXJUeXBlICk7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMuc2V0SW50ZXJwb2xhdGlvbiggaW50ZXJwb2xh
dGlvbiB8fCB0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uICk7CiAKLSAgICAgICAgICAgIH07Cisg
ICAgICAgIHRoaXMudmFsaWRhdGUoKTsKKyAgICAgICAgdGhpcy5vcHRpbWl6ZSgpOwogCi0gICAg
ICAgICAgICB2YXIgdHJhY2tzID0gW107CisgICAgfQogCi0gICAgICAgICAgICB2YXIgY2xpcE5h
bWUgPSBhbmltYXRpb24ubmFtZSB8fCAnZGVmYXVsdCc7Ci0gICAgICAgICAgICAvLyBhdXRvbWF0
aWMgbGVuZ3RoIGRldGVybWluYXRpb24gaW4gQW5pbWF0aW9uQ2xpcC4KLSAgICAgICAgICAgIHZh
ciBkdXJhdGlvbiA9IGFuaW1hdGlvbi5sZW5ndGggfHwgLSAxOwotICAgICAgICAgICAgdmFyIGZw
cyA9IGFuaW1hdGlvbi5mcHMgfHwgMzA7CisgICAgLy8gU3RhdGljIG1ldGhvZHM6CiAKLSAgICAg
ICAgICAgIHZhciBoaWVyYXJjaHlUcmFja3MgPSBhbmltYXRpb24uaGllcmFyY2h5IHx8IFtdOwor
ICAgIE9iamVjdC5hc3NpZ24oIEtleWZyYW1lVHJhY2ssIHsKIAotICAgICAgICAgICAgZm9yICgg
dmFyIGggPSAwOyBoIDwgaGllcmFyY2h5VHJhY2tzLmxlbmd0aDsgaCArKyApIHsKKyAgICAgICAg
Ly8gU2VyaWFsaXphdGlvbiAoaW4gc3RhdGljIGNvbnRleHQsIGJlY2F1c2Ugb2YgY29uc3RydWN0
b3IgaW52b2NhdGlvbgorICAgICAgICAvLyBhbmQgYXV0b21hdGljIGludm9jYXRpb24gb2YgLnRv
SlNPTik6CiAKLSAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uS2V5cyA9IGhpZXJhcmNoeVRy
YWNrc1sgaCBdLmtleXM7CisgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoIGpzb24gKSB7CiAKLSAg
ICAgICAgICAgICAgICAvLyBza2lwIGVtcHR5IHRyYWNrcwotICAgICAgICAgICAgICAgIGlmICgg
ISBhbmltYXRpb25LZXlzIHx8IGFuaW1hdGlvbktleXMubGVuZ3RoID09PSAwICkgY29udGludWU7
CisgICAgICAgICAgICBpZiAoIGpzb24udHlwZSA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAg
ICAgICAgICAgLy8gcHJvY2VzcyBtb3JwaCB0YXJnZXRzCi0gICAgICAgICAgICAgICAgaWYgKCBh
bmltYXRpb25LZXlzWyAwIF0ubW9ycGhUYXJnZXRzICkgeworICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBj
YW4gbm90IHBhcnNlJyApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBvdXQgYWxs
IG1vcnBoIHRhcmdldHMgdXNlZCBpbiB0aGlzIHRyYWNrCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBtb3JwaFRhcmdldE5hbWVzID0ge307CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGsgPSAwOyBrIDwgYW5pbWF0aW9uS2V5cy5sZW5ndGg7IGsgKysgKSB7
CisgICAgICAgICAgICB2YXIgdHJhY2tUeXBlID0gS2V5ZnJhbWVUcmFjay5fZ2V0VHJhY2tUeXBl
Rm9yVmFsdWVUeXBlTmFtZSgganNvbi50eXBlICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggYW5pbWF0aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0cyApIHsKKyAgICAgICAgICAgIGlm
ICgganNvbi50aW1lcyA9PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIG0gPSAwOyBtIDwgYW5pbWF0aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0
cy5sZW5ndGg7IG0gKysgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRpbWVzID0gW10sIHZhbHVl
cyA9IFtdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0TmFt
ZXNbIGFuaW1hdGlvbktleXNbIGsgXS5tb3JwaFRhcmdldHNbIG0gXSBdID0gLSAxOworICAgICAg
ICAgICAgICAgIEFuaW1hdGlvblV0aWxzLmZsYXR0ZW5KU09OKCBqc29uLmtleXMsIHRpbWVzLCB2
YWx1ZXMsICd2YWx1ZScgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBqc29uLnRpbWVzID0gdGltZXM7CisgICAgICAgICAgICAgICAganNvbi52YWx1
ZXMgPSB2YWx1ZXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBkZXJpdmVkIGNsYXNzZXMg
Y2FuIGRlZmluZSBhIHN0YXRpYyBwYXJzZSBtZXRob2QKKyAgICAgICAgICAgIGlmICggdHJhY2tU
eXBlLnBhcnNlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gY3Jl
YXRlIGEgdHJhY2sgZm9yIGVhY2ggbW9ycGggdGFyZ2V0IHdpdGggYWxsIHplcm8KLSAgICAgICAg
ICAgICAgICAgICAgLy8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGV4Y2VwdCBmb3IgdGhlIGtleXMg
aW4gd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1vcnBoVGFyZ2V0IGlzIG5hbWVk
LgotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbW9ycGhUYXJnZXROYW1lIGluIG1vcnBo
VGFyZ2V0TmFtZXMgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNrVHlwZS5wYXJzZSgg
anNvbiApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltZXMgPSBbXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBtID0gMDsgbSAhPT0gYW5pbWF0
aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7ICsrIG0gKSB7CisgICAgICAgICAgICAg
ICAgLy8gYnkgZGVmYXVsdCwgd2UgYXNzdW1lIGEgY29uc3RydWN0b3IgY29tcGF0aWJsZSB3aXRo
IHRoZSBiYXNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0cmFja1R5cGUoIGpzb24ubmFt
ZSwganNvbi50aW1lcywganNvbi52YWx1ZXMsIGpzb24uaW50ZXJwb2xhdGlvbiApOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGlvbktleSA9IGFuaW1hdGlvbktleXNb
IGsgXTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVz
LnB1c2goIGFuaW1hdGlvbktleS50aW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVzLnB1c2goICggYW5pbWF0aW9uS2V5Lm1vcnBoVGFyZ2V0ID09PSBtb3JwaFRhcmdldE5h
bWUgKSA/IDEgOiAwICk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIHRyYWNrICkgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0cmFja3MucHVzaCggbmV3IE51bWJlcktleWZyYW1lVHJhY2soICcubW9ycGhUYXJn
ZXRJbmZsdWVuY2VbJyArIG1vcnBoVGFyZ2V0TmFtZSArICddJywgdGltZXMsIHZhbHVlcyApICk7
CisgICAgICAgICAgICB2YXIgdHJhY2tUeXBlID0gdHJhY2suY29uc3RydWN0b3I7CiAKLSAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGpzb247CiAKLSAgICAgICAgICAgICAg
ICAgICAgZHVyYXRpb24gPSBtb3JwaFRhcmdldE5hbWVzLmxlbmd0aCAqICggZnBzIHx8IDEuMCAp
OworICAgICAgICAgICAgLy8gZGVyaXZlZCBjbGFzc2VzIGNhbiBkZWZpbmUgYSBzdGF0aWMgdG9K
U09OIG1ldGhvZAorICAgICAgICAgICAgaWYgKCB0cmFja1R5cGUudG9KU09OICE9PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGpzb24g
PSB0cmFja1R5cGUudG9KU09OKCB0cmFjayApOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIC4u
LmFzc3VtZSBza2VsZXRhbCBhbmltYXRpb24KKyAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGJvbmVOYW1lID0gJy5ib25lc1snICsgYm9uZXNbIGggXS5uYW1l
ICsgJ10nOworICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmF1bHQsIHdlIGFzc3VtZSB0aGUgZGF0
YSBjYW4gYmUgc2VyaWFsaXplZCBhcy1pcworICAgICAgICAgICAgICAgIGpzb24gPSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgYWRkTm9uZW1wdHlUcmFjaygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3JLZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucG9zaXRpb24nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbktleXMsICdwb3MnLCB0cmFja3MgKTsK
KyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiB0cmFjay5uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAndGltZXMnOiBBbmltYXRpb25VdGlscy5jb252ZXJ0QXJyYXkoIHRyYWNrLnRpbWVzLCBB
cnJheSApLAorICAgICAgICAgICAgICAgICAgICAndmFsdWVzJzogQW5pbWF0aW9uVXRpbHMuY29u
dmVydEFycmF5KCB0cmFjay52YWx1ZXMsIEFycmF5ICkKIAotICAgICAgICAgICAgICAgICAgICBh
ZGROb25lbXB0eVRyYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1YXRlcm5pb25L
ZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucXVhdGVybmlvbicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0aW9uS2V5cywgJ3JvdCcsIHRyYWNrcyApOworICAgICAgICAgICAg
ICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgYWRkTm9uZW1wdHlUcmFjaygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3JLZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcuc2Nh
bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbktleXMsICdzY2wnLCB0
cmFja3MgKTsKKyAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGlvbiA9IHRyYWNrLmdldElu
dGVycG9sYXRpb24oKTsKKworICAgICAgICAgICAgICAgIGlmICggaW50ZXJwb2xhdGlvbiAhPT0g
dHJhY2suRGVmYXVsdEludGVycG9sYXRpb24gKSB7CisKKyAgICAgICAgICAgICAgICAgICAganNv
bi5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjsKIAogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIHRyYWNrcy5sZW5ndGggPT09IDAgKSB7
CisgICAgICAgICAgICBqc29uLnR5cGUgPSB0cmFjay5WYWx1ZVR5cGVOYW1lOyAvLyBtYW5kYXRv
cnkKIAotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmV0dXJuIGpz
b247CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICAgICAgdmFyIGNsaXAg
PSBuZXcgQW5pbWF0aW9uQ2xpcCggY2xpcE5hbWUsIGR1cmF0aW9uLCB0cmFja3MgKTsKKyAgICAg
ICAgX2dldFRyYWNrVHlwZUZvclZhbHVlVHlwZU5hbWU6IGZ1bmN0aW9uICggdHlwZU5hbWUgKSB7
CiAKLSAgICAgICAgICAgIHJldHVybiBjbGlwOworICAgICAgICAgICAgc3dpdGNoICggdHlwZU5h
bWUudG9Mb3dlckNhc2UoKSApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSAn
c2NhbGFyJzoKKyAgICAgICAgICAgICAgICBjYXNlICdkb3VibGUnOgorICAgICAgICAgICAgICAg
IGNhc2UgJ2Zsb2F0JzoKKyAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOgorICAgICAgICAg
ICAgICAgIGNhc2UgJ2ludGVnZXInOgogCi0gICAgfSApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTnVtYmVyS2V5ZnJhbWVUcmFjazsKIAotICAgIE9iamVjdC5hc3NpZ24oIEFuaW1hdGlv
bkNsaXAucHJvdG90eXBlLCB7CisgICAgICAgICAgICAgICAgY2FzZSAndmVjdG9yJzoKKyAgICAg
ICAgICAgICAgICBjYXNlICd2ZWN0b3IyJzoKKyAgICAgICAgICAgICAgICBjYXNlICd2ZWN0b3Iz
JzoKKyAgICAgICAgICAgICAgICBjYXNlICd2ZWN0b3I0JzoKIAotICAgICAgICByZXNldER1cmF0
aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3JLZXlm
cmFtZVRyYWNrOwogCi0gICAgICAgICAgICB2YXIgdHJhY2tzID0gdGhpcy50cmFja3MsIGR1cmF0
aW9uID0gMDsKKyAgICAgICAgICAgICAgICBjYXNlICdjb2xvcic6CiAKLSAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbiA9IHRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcktleWZyYW1lVHJhY2s7CiAKLSAgICAgICAgICAg
ICAgICB2YXIgdHJhY2sgPSB0aGlzLnRyYWNrc1sgaSBdOworICAgICAgICAgICAgICAgIGNhc2Ug
J3F1YXRlcm5pb24nOgogCi0gICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1heCggZHVy
YXRpb24sIHRyYWNrLnRpbWVzWyB0cmFjay50aW1lcy5sZW5ndGggLSAxIF0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOworCisgICAgICAgICAg
ICAgICAgY2FzZSAnYm9vbCc6CisgICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6CisKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW5LZXlmcmFtZVRyYWNrOworCisgICAgICAg
ICAgICAgICAgY2FzZSAnc3RyaW5nJzoKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nS2V5ZnJhbWVUcmFjazsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmR1
cmF0aW9uID0gZHVyYXRpb247CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdUSFJFRS5L
ZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogJyArIHR5cGVOYW1lICk7CiAKLSAg
ICAgICAgfSwKKyAgICAgICAgfQogCi0gICAgICAgIHRyaW06IGZ1bmN0aW9uICgpIHsKKyAgICB9
ICk7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0
aDsgaSArKyApIHsKKyAgICBPYmplY3QuYXNzaWduKCBLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSwg
ewogCi0gICAgICAgICAgICAgICAgdGhpcy50cmFja3NbIGkgXS50cmltKCAwLCB0aGlzLmR1cmF0
aW9uICk7CisgICAgICAgIGNvbnN0cnVjdG9yOiBLZXlmcmFtZVRyYWNrLAogCi0gICAgICAgICAg
ICB9CisgICAgICAgIFRpbWVCdWZmZXJUeXBlOiBGbG9hdDMyQXJyYXksCiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICBWYWx1ZUJ1ZmZlclR5cGU6IEZsb2F0MzJBcnJheSwKKwor
ICAgICAgICBEZWZhdWx0SW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGVMaW5lYXIsCisKKyAgICAg
ICAgSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6IGZ1bmN0aW9uICggcmVzdWx0ICkg
eworCisgICAgICAgICAgICByZXR1cm4gbmV3IERpc2NyZXRlSW50ZXJwb2xhbnQoIHRoaXMudGlt
ZXMsIHRoaXMudmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQgKTsKIAogICAgICAg
ICB9LAogCi0gICAgICAgIG9wdGltaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIEludGVycG9s
YW50RmFjdG9yeU1ldGhvZExpbmVhcjogZnVuY3Rpb24gKCByZXN1bHQgKSB7CiAKLSAgICAgICAg
ICAgIGZvciAoIHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSArKyApIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgTGluZWFySW50ZXJwb2xhbnQoIHRoaXMudGltZXMsIHRoaXMu
dmFsdWVzLCB0aGlzLmdldFZhbHVlU2l6ZSgpLCByZXN1bHQgKTsKIAotICAgICAgICAgICAgICAg
IHRoaXMudHJhY2tzWyBpIF0ub3B0aW1pemUoKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAg
fQorICAgICAgICBJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6IGZ1bmN0aW9uICggcmVz
dWx0ICkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgQ3ViaWNJbnRlcnBvbGFudCggdGhpcy50aW1lcywgdGhpcy52YWx1ZXMsIHRoaXMuZ2V0VmFs
dWVTaXplKCksIHJlc3VsdCApOwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgIH0gKTsK
KyAgICAgICAgc2V0SW50ZXJwb2xhdGlvbjogZnVuY3Rpb24gKCBpbnRlcnBvbGF0aW9uICkgewog
Ci0gICAgLyoqCi0gICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAg
ICAgKi8KKyAgICAgICAgICAgIHZhciBmYWN0b3J5TWV0aG9kOwogCi0gICAgZnVuY3Rpb24gTWF0
ZXJpYWxMb2FkZXIoIG1hbmFnZXIgKSB7CisgICAgICAgICAgICBzd2l0Y2ggKCBpbnRlcnBvbGF0
aW9uICkgewogCi0gICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0gdW5kZWZpbmVk
ICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOwotICAgICAgICB0aGlzLnRleHR1
cmVzID0ge307CisgICAgICAgICAgICAgICAgY2FzZSBJbnRlcnBvbGF0ZURpc2NyZXRlOgogCi0g
ICAgfQorICAgICAgICAgICAgICAgICAgICBmYWN0b3J5TWV0aG9kID0gdGhpcy5JbnRlcnBvbGFu
dEZhY3RvcnlNZXRob2REaXNjcmV0ZTsKIAotICAgIE9iamVjdC5hc3NpZ24oIE1hdGVyaWFsTG9h
ZGVyLnByb3RvdHlwZSwgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBs
b2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dyZXNzLCBvbkVycm9yICkgeworICAg
ICAgICAgICAgICAgIGNhc2UgSW50ZXJwb2xhdGVMaW5lYXI6CiAKLSAgICAgICAgICAgIHZhciBz
Y29wZSA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGZhY3RvcnlNZXRob2QgPSB0aGlzLklu
dGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjsKIAotICAgICAgICAgICAgdmFyIGxvYWRlciA9
IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7Ci0gICAgICAgICAgICBsb2FkZXIubG9h
ZCggdXJsLCBmdW5jdGlvbiAoIHRleHQgKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICAgICAgb25Mb2FkKCBzY29wZS5wYXJzZSggSlNPTi5wYXJzZSggdGV4dCAp
ICkgKTsKKyAgICAgICAgICAgICAgICBjYXNlIEludGVycG9sYXRlU21vb3RoOgogCi0gICAgICAg
ICAgICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7CisgICAgICAgICAgICAgICAgICAgIGZhY3Rv
cnlNZXRob2QgPSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDsKIAotICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBzZXRUZXh0dXJlczog
ZnVuY3Rpb24gKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy50
ZXh0dXJlcyA9IHZhbHVlOworICAgICAgICAgICAgaWYgKCBmYWN0b3J5TWV0aG9kID09PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9ICJ1
bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiICsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5WYWx1ZVR5cGVOYW1lICsgIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiICsgdGhpcy5uYW1lOwog
Ci0gICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoIGpzb24gKSB7CisgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLmNyZWF0ZUludGVycG9sYW50ID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAg
IHZhciB0ZXh0dXJlcyA9IHRoaXMudGV4dHVyZXM7CisgICAgICAgICAgICAgICAgICAgIC8vIGZh
bGwgYmFjayB0byBkZWZhdWx0LCB1bmxlc3MgdGhlIGRlZmF1bHQgaXRzZWxmIGlzIG1lc3NlZCB1
cAorICAgICAgICAgICAgICAgICAgICBpZiAoIGludGVycG9sYXRpb24gIT09IHRoaXMuRGVmYXVs
dEludGVycG9sYXRpb24gKSB7CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGdldFRleHR1cmUoIG5h
bWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEludGVycG9sYXRpb24oIHRo
aXMuRGVmYXVsdEludGVycG9sYXRpb24gKTsKIAotICAgICAgICAgICAgICAgIGlmICggdGV4dHVy
ZXNbIG5hbWUgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGVyaWFsTG9h
ZGVyOiBVbmRlZmluZWQgdGV4dHVyZScsIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvciggbWVzc2FnZSApOyAvLyBmYXRhbCwgaW4gdGhpcyBjYXNlCisKKyAg
ICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHR1cmVzWyBuYW1lIF07CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuS2V5ZnJhbWVUcmFjazonLCBtZXNzYWdlICk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBN
YXRlcmlhbHNbIGpzb24udHlwZSBdKCk7Ci0KLSAgICAgICAgICAgIGlmICgganNvbi51dWlkICE9
PSB1bmRlZmluZWQgKSBtYXRlcmlhbC51dWlkID0ganNvbi51dWlkOwotICAgICAgICAgICAgaWYg
KCBqc29uLm5hbWUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm5hbWUgPSBqc29uLm5hbWU7Ci0g
ICAgICAgICAgICBpZiAoIGpzb24uY29sb3IgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNvbG9y
LnNldEhleCgganNvbi5jb2xvciApOwotICAgICAgICAgICAgaWYgKCBqc29uLnJvdWdobmVzcyAh
PT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucm91Z2huZXNzID0ganNvbi5yb3VnaG5lc3M7Ci0gICAg
ICAgICAgICBpZiAoIGpzb24ubWV0YWxuZXNzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tZXRh
bG5lc3MgPSBqc29uLm1ldGFsbmVzczsKLSAgICAgICAgICAgIGlmICgganNvbi5lbWlzc2l2ZSAh
PT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZW1pc3NpdmUuc2V0SGV4KCBqc29uLmVtaXNzaXZlICk7
Ci0gICAgICAgICAgICBpZiAoIGpzb24uc3BlY3VsYXIgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFs
LnNwZWN1bGFyLnNldEhleCgganNvbi5zcGVjdWxhciApOwotICAgICAgICAgICAgaWYgKCBqc29u
LnNoaW5pbmVzcyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2hpbmluZXNzID0ganNvbi5zaGlu
aW5lc3M7Ci0gICAgICAgICAgICBpZiAoIGpzb24uY2xlYXJDb2F0ICE9PSB1bmRlZmluZWQgKSBt
YXRlcmlhbC5jbGVhckNvYXQgPSBqc29uLmNsZWFyQ29hdDsKLSAgICAgICAgICAgIGlmICgganNv
bi5jbGVhckNvYXRSb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNsZWFyQ29hdFJv
dWdobmVzcyA9IGpzb24uY2xlYXJDb2F0Um91Z2huZXNzOwotICAgICAgICAgICAgaWYgKCBqc29u
LnVuaWZvcm1zICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC51bmlmb3JtcyA9IGpzb24udW5pZm9y
bXM7Ci0gICAgICAgICAgICBpZiAoIGpzb24udmVydGV4U2hhZGVyICE9PSB1bmRlZmluZWQgKSBt
YXRlcmlhbC52ZXJ0ZXhTaGFkZXIgPSBqc29uLnZlcnRleFNoYWRlcjsKLSAgICAgICAgICAgIGlm
ICgganNvbi5mcmFnbWVudFNoYWRlciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZnJhZ21lbnRT
aGFkZXIgPSBqc29uLmZyYWdtZW50U2hhZGVyOwotICAgICAgICAgICAgaWYgKCBqc29uLnZlcnRl
eENvbG9ycyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudmVydGV4Q29sb3JzID0ganNvbi52ZXJ0
ZXhDb2xvcnM7Ci0gICAgICAgICAgICBpZiAoIGpzb24uZm9nICE9PSB1bmRlZmluZWQgKSBtYXRl
cmlhbC5mb2cgPSBqc29uLmZvZzsKLSAgICAgICAgICAgIGlmICgganNvbi5zaGFkaW5nICE9PSB1
bmRlZmluZWQgKSBtYXRlcmlhbC5zaGFkaW5nID0ganNvbi5zaGFkaW5nOwotICAgICAgICAgICAg
aWYgKCBqc29uLmJsZW5kaW5nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5ibGVuZGluZyA9IGpz
b24uYmxlbmRpbmc7Ci0gICAgICAgICAgICBpZiAoIGpzb24uc2lkZSAhPT0gdW5kZWZpbmVkICkg
bWF0ZXJpYWwuc2lkZSA9IGpzb24uc2lkZTsKLSAgICAgICAgICAgIGlmICgganNvbi5vcGFjaXR5
ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5vcGFjaXR5ID0ganNvbi5vcGFjaXR5OwotICAgICAg
ICAgICAgaWYgKCBqc29uLnRyYW5zcGFyZW50ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC50cmFu
c3BhcmVudCA9IGpzb24udHJhbnNwYXJlbnQ7Ci0gICAgICAgICAgICBpZiAoIGpzb24uYWxwaGFU
ZXN0ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hbHBoYVRlc3QgPSBqc29uLmFscGhhVGVzdDsK
LSAgICAgICAgICAgIGlmICgganNvbi5kZXB0aFRlc3QgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFs
LmRlcHRoVGVzdCA9IGpzb24uZGVwdGhUZXN0OwotICAgICAgICAgICAgaWYgKCBqc29uLmRlcHRo
V3JpdGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRlcHRoV3JpdGUgPSBqc29uLmRlcHRoV3Jp
dGU7Ci0gICAgICAgICAgICBpZiAoIGpzb24uY29sb3JXcml0ZSAhPT0gdW5kZWZpbmVkICkgbWF0
ZXJpYWwuY29sb3JXcml0ZSA9IGpzb24uY29sb3JXcml0ZTsKLSAgICAgICAgICAgIGlmICgganNv
bi53aXJlZnJhbWUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLndpcmVmcmFtZSA9IGpzb24ud2ly
ZWZyYW1lOwotICAgICAgICAgICAgaWYgKCBqc29uLndpcmVmcmFtZUxpbmV3aWR0aCAhPT0gdW5k
ZWZpbmVkICkgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoID0ganNvbi53aXJlZnJhbWVMaW5l
d2lkdGg7Ci0gICAgICAgICAgICBpZiAoIGpzb24ud2lyZWZyYW1lTGluZWNhcCAhPT0gdW5kZWZp
bmVkICkgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCA9IGpzb24ud2lyZWZyYW1lTGluZWNhcDsK
LSAgICAgICAgICAgIGlmICgganNvbi53aXJlZnJhbWVMaW5lam9pbiAhPT0gdW5kZWZpbmVkICkg
bWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gPSBqc29uLndpcmVmcmFtZUxpbmVqb2luOwotICAg
ICAgICAgICAgaWYgKCBqc29uLnNraW5uaW5nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5za2lu
bmluZyA9IGpzb24uc2tpbm5pbmc7Ci0gICAgICAgICAgICBpZiAoIGpzb24ubW9ycGhUYXJnZXRz
ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tb3JwaFRhcmdldHMgPSBqc29uLm1vcnBoVGFyZ2V0
czsKKyAgICAgICAgICAgIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQgPSBmYWN0b3J5TWV0aG9kOwog
Ci0gICAgICAgICAgICAvLyBmb3IgUG9pbnRzTWF0ZXJpYWwKKyAgICAgICAgfSwKIAotICAgICAg
ICAgICAgaWYgKCBqc29uLnNpemUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNpemUgPSBqc29u
LnNpemU7Ci0gICAgICAgICAgICBpZiAoIGpzb24uc2l6ZUF0dGVudWF0aW9uICE9PSB1bmRlZmlu
ZWQgKSBtYXRlcmlhbC5zaXplQXR0ZW51YXRpb24gPSBqc29uLnNpemVBdHRlbnVhdGlvbjsKKyAg
ICAgICAgZ2V0SW50ZXJwb2xhdGlvbjogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAvLyBt
YXBzCisgICAgICAgICAgICBzd2l0Y2ggKCB0aGlzLmNyZWF0ZUludGVycG9sYW50ICkgewogCi0g
ICAgICAgICAgICBpZiAoIGpzb24ubWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5tYXAgPSBn
ZXRUZXh0dXJlKCBqc29uLm1hcCApOworICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5JbnRlcnBv
bGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZToKIAotICAgICAgICAgICAgaWYgKCBqc29uLmFscGhh
TWFwICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcnBv
bGF0ZURpc2NyZXRlOwogCi0gICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFNYXAgPSBnZXRU
ZXh0dXJlKCBqc29uLmFscGhhTWFwICk7Ci0gICAgICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNw
YXJlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3Rv
cnlNZXRob2RMaW5lYXI6CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEludGVycG9sYXRlTGluZWFyOwogCi0gICAgICAgICAgICBpZiAoIGpzb24uYnVtcE1hcCAh
PT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYnVtcE1hcCA9IGdldFRleHR1cmUoIGpzb24uYnVtcE1h
cCApOwotICAgICAgICAgICAgaWYgKCBqc29uLmJ1bXBTY2FsZSAhPT0gdW5kZWZpbmVkICkgbWF0
ZXJpYWwuYnVtcFNjYWxlID0ganNvbi5idW1wU2NhbGU7CisgICAgICAgICAgICAgICAgY2FzZSB0
aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDoKIAotICAgICAgICAgICAgaWYgKCBq
c29uLm5vcm1hbE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubm9ybWFsTWFwID0gZ2V0VGV4
dHVyZSgganNvbi5ub3JtYWxNYXAgKTsKLSAgICAgICAgICAgIGlmICgganNvbi5ub3JtYWxTY2Fs
ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJwb2xh
dGVTbW9vdGg7CiAKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsU2NhbGUgPSBqc29uLm5vcm1h
bFNjYWxlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0Fy
cmF5KCBub3JtYWxTY2FsZSApID09PSBmYWxzZSApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAg
ICAgICAgICAgICAvLyBCbGVuZGVyIGV4cG9ydGVyIHVzZWQgdG8gZXhwb3J0IGEgc2NhbGFyLiBT
ZWUgIzc0NTkKKyAgICAgICAgZ2V0VmFsdWVTaXplOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsU2NhbGUgPSBbIG5vcm1hbFNjYWxlLCBub3JtYWxTY2FsZSBdOwor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCAvIHRoaXMudGltZXMubGVuZ3Ro
OwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgbWF0
ZXJpYWwubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigpLmZyb21BcnJheSggbm9ybWFsU2NhbGUg
KTsKKyAgICAgICAgLy8gbW92ZSBhbGwga2V5ZnJhbWVzIGVpdGhlciBmb3J3YXJkcyBvciBiYWNr
d2FyZHMgaW4gdGltZQorICAgICAgICBzaGlmdDogZnVuY3Rpb24gKCB0aW1lT2Zmc2V0ICkgewog
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHRpbWVPZmZzZXQgIT09IDAuMCApIHsK
IAotICAgICAgICAgICAgaWYgKCBqc29uLmRpc3BsYWNlbWVudE1hcCAhPT0gdW5kZWZpbmVkICkg
bWF0ZXJpYWwuZGlzcGxhY2VtZW50TWFwID0gZ2V0VGV4dHVyZSgganNvbi5kaXNwbGFjZW1lbnRN
YXAgKTsKLSAgICAgICAgICAgIGlmICgganNvbi5kaXNwbGFjZW1lbnRTY2FsZSAhPT0gdW5kZWZp
bmVkICkgbWF0ZXJpYWwuZGlzcGxhY2VtZW50U2NhbGUgPSBqc29uLmRpc3BsYWNlbWVudFNjYWxl
OwotICAgICAgICAgICAgaWYgKCBqc29uLmRpc3BsYWNlbWVudEJpYXMgIT09IHVuZGVmaW5lZCAp
IG1hdGVyaWFsLmRpc3BsYWNlbWVudEJpYXMgPSBqc29uLmRpc3BsYWNlbWVudEJpYXM7CisgICAg
ICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhpcy50aW1lczsKIAotICAgICAgICAgICAgaWYgKCBq
c29uLnJvdWdobmVzc01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucm91Z2huZXNzTWFwID0g
Z2V0VGV4dHVyZSgganNvbi5yb3VnaG5lc3NNYXAgKTsKLSAgICAgICAgICAgIGlmICgganNvbi5t
ZXRhbG5lc3NNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1ldGFsbmVzc01hcCA9IGdldFRl
eHR1cmUoIGpzb24ubWV0YWxuZXNzTWFwICk7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIGkg
PSAwLCBuID0gdGltZXMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgewogCi0gICAgICAgICAgICBp
ZiAoIGpzb24uZW1pc3NpdmVNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVtaXNzaXZlTWFw
ID0gZ2V0VGV4dHVyZSgganNvbi5lbWlzc2l2ZU1hcCApOwotICAgICAgICAgICAgaWYgKCBqc29u
LmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5lbWlzc2l2ZUludGVu
c2l0eSA9IGpzb24uZW1pc3NpdmVJbnRlbnNpdHk7CisgICAgICAgICAgICAgICAgICAgIHRpbWVz
WyBpIF0gKz0gdGltZU9mZnNldDsKIAotICAgICAgICAgICAgaWYgKCBqc29uLnNwZWN1bGFyTWFw
ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhck1hcCA9IGdldFRleHR1cmUoIGpzb24u
c3BlY3VsYXJNYXAgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgganNv
bi5lbnZNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVudk1hcCA9IGdldFRleHR1cmUoIGpz
b24uZW52TWFwICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgganNvbi5yZWZs
ZWN0aXZpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJlZmxlY3Rpdml0eSA9IGpzb24ucmVm
bGVjdGl2aXR5OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgIGlmICgg
anNvbi5saWdodE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubGlnaHRNYXAgPSBnZXRUZXh0
dXJlKCBqc29uLmxpZ2h0TWFwICk7Ci0gICAgICAgICAgICBpZiAoIGpzb24ubGlnaHRNYXBJbnRl
bnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmxpZ2h0TWFwSW50ZW5zaXR5ID0ganNvbi5s
aWdodE1hcEludGVuc2l0eTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgaWYgKCBqc29uLmFv
TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5hb01hcCA9IGdldFRleHR1cmUoIGpzb24uYW9N
YXAgKTsKLSAgICAgICAgICAgIGlmICgganNvbi5hb01hcEludGVuc2l0eSAhPT0gdW5kZWZpbmVk
ICkgbWF0ZXJpYWwuYW9NYXBJbnRlbnNpdHkgPSBqc29uLmFvTWFwSW50ZW5zaXR5OworICAgICAg
ICAvLyBzY2FsZSBhbGwga2V5ZnJhbWUgdGltZXMgYnkgYSBmYWN0b3IgKHVzZWZ1bCBmb3IgZnJh
bWUgPC0+IHNlY29uZHMgY29udmVyc2lvbnMpCisgICAgICAgIHNjYWxlOiBmdW5jdGlvbiAoIHRp
bWVTY2FsZSApIHsKIAotICAgICAgICAgICAgaWYgKCBqc29uLmdyYWRpZW50TWFwICE9PSB1bmRl
ZmluZWQgKSBtYXRlcmlhbC5ncmFkaWVudE1hcCA9IGdldFRleHR1cmUoIGpzb24uZ3JhZGllbnRN
YXAgKTsKKyAgICAgICAgICAgIGlmICggdGltZVNjYWxlICE9PSAxLjAgKSB7CiAKLSAgICAgICAg
ICAgIHJldHVybiBtYXRlcmlhbDsKKyAgICAgICAgICAgICAgICB2YXIgdGltZXMgPSB0aGlzLnRp
bWVzOwogCi0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSB0
aW1lcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CiAKLSAgICB9ICk7CisgICAgICAgICAgICAg
ICAgICAgIHRpbWVzWyBpIF0gKj0gdGltZVNjYWxlOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKi8KKyAgICAgICAgICAgICAgICB9
CiAKLSAgICBmdW5jdGlvbiBCdWZmZXJHZW9tZXRyeUxvYWRlciggbWFuYWdlciApIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB0aGlzLm1hbmFnZXIgPSAoIG1hbmFnZXIgIT09IHVuZGVmaW5l
ZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOwogCi0gICAgfQorICAgICAgICB9LAogCi0gICAgT2JqZWN0LmFzc2lnbiggQnVmZmVy
R2VvbWV0cnlMb2FkZXIucHJvdG90eXBlLCB7CisgICAgICAgIC8vIHJlbW92ZXMga2V5ZnJhbWVz
IGJlZm9yZSBhbmQgYWZ0ZXIgYW5pbWF0aW9uIHdpdGhvdXQgY2hhbmdpbmcgYW55IHZhbHVlcyB3
aXRoaW4gdGhlIHJhbmdlIFtzdGFydFRpbWUsIGVuZFRpbWVdLgorICAgICAgICAvLyBJTVBPUlRB
TlQ6IFdlIGRvIG5vdCBzaGlmdCBhcm91bmQga2V5cyB0byB0aGUgc3RhcnQgb2YgdGhlIHRyYWNr
IHRpbWUsIGJlY2F1c2UgZm9yIGludGVycG9sYXRlZCBrZXlzIHRoaXMgd2lsbCBjaGFuZ2UgdGhl
aXIgdmFsdWVzCisgICAgICAgIHRyaW06IGZ1bmN0aW9uICggc3RhcnRUaW1lLCBlbmRUaW1lICkg
ewogCi0gICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9u
RXJyb3IgKSB7CisgICAgICAgICAgICB2YXIgdGltZXMgPSB0aGlzLnRpbWVzLAorICAgICAgICAg
ICAgICAgIG5LZXlzID0gdGltZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgIGZyb20gPSAwLAor
ICAgICAgICAgICAgICAgIHRvID0gbktleXMgLSAxOwogCi0gICAgICAgICAgICB2YXIgc2NvcGUg
PSB0aGlzOworICAgICAgICAgICAgd2hpbGUgKCBmcm9tICE9PSBuS2V5cyAmJiB0aW1lc1sgZnJv
bSBdIDwgc3RhcnRUaW1lICkgewogCi0gICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEZpbGVM
b2FkZXIoIHNjb3BlLm1hbmFnZXIgKTsKLSAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmwsIGZ1
bmN0aW9uICggdGV4dCApIHsKKyAgICAgICAgICAgICAgICArKyBmcm9tOwogCi0gICAgICAgICAg
ICAgICAgb25Mb2FkKCBzY29wZS5wYXJzZSggSlNPTi5wYXJzZSggdGV4dCApICkgKTsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgfSwgb25Qcm9ncmVzcywgb25FcnJvciApOworICAgICAg
ICAgICAgd2hpbGUgKCB0byAhPT0gLSAxICYmIHRpbWVzWyB0byBdID4gZW5kVGltZSApIHsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIC0tIHRvOwogCi0gICAgICAgIHBhcnNlOiBmdW5j
dGlvbiAoIGpzb24gKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBnZW9tZXRy
eSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworICAgICAgICAgICAgKysgdG87IC8vIGluY2x1c2l2
ZSAtPiBleGNsdXNpdmUgYm91bmQKIAotICAgICAgICAgICAgdmFyIGluZGV4ID0ganNvbi5kYXRh
LmluZGV4OworICAgICAgICAgICAgaWYgKCBmcm9tICE9PSAwIHx8IHRvICE9PSBuS2V5cyApIHsK
IAotICAgICAgICAgICAgaWYgKCBpbmRleCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgIC8vIGVtcHR5IHRyYWNrcyBhcmUgZm9yYmlkZGVuLCBzbyBrZWVwIGF0IGxlYXN0IG9uZSBr
ZXlmcmFtZQorICAgICAgICAgICAgICAgIGlmICggZnJvbSA+PSB0byApIHRvID0gTWF0aC5tYXgo
IHRvLCAxICksIGZyb20gPSB0byAtIDE7CiAKLSAgICAgICAgICAgICAgICB2YXIgdHlwZWRBcnJh
eSA9IG5ldyBUWVBFRF9BUlJBWVNbIGluZGV4LnR5cGUgXSggaW5kZXguYXJyYXkgKTsKLSAgICAg
ICAgICAgICAgICBnZW9tZXRyeS5zZXRJbmRleCggbmV3IEJ1ZmZlckF0dHJpYnV0ZSggdHlwZWRB
cnJheSwgMSApICk7CisgICAgICAgICAgICAgICAgdmFyIHN0cmlkZSA9IHRoaXMuZ2V0VmFsdWVT
aXplKCk7CisgICAgICAgICAgICAgICAgdGhpcy50aW1lcyA9IEFuaW1hdGlvblV0aWxzLmFycmF5
U2xpY2UoIHRpbWVzLCBmcm9tLCB0byApOworICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0g
QW5pbWF0aW9uVXRpbHMuYXJyYXlTbGljZSggdGhpcy52YWx1ZXMsIGZyb20gKiBzdHJpZGUsIHRv
ICogc3RyaWRlICk7CiAKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGF0dHJpYnV0
ZXMgPSBqc29uLmRhdGEuYXR0cmlidXRlczsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0g
ICAgICAgICAgICBmb3IgKCB2YXIga2V5IGluIGF0dHJpYnV0ZXMgKSB7CisgICAgICAgIH0sCiAK
LSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gYXR0cmlidXRlc1sga2V5IF07Ci0gICAg
ICAgICAgICAgICAgdmFyIHR5cGVkQXJyYXkgPSBuZXcgVFlQRURfQVJSQVlTWyBhdHRyaWJ1dGUu
dHlwZSBdKCBhdHRyaWJ1dGUuYXJyYXkgKTsKKyAgICAgICAgLy8gZW5zdXJlIHdlIGRvIG5vdCBn
ZXQgYSBHYXJiYWdlSW5HYXJiYWdlT3V0IHNpdHVhdGlvbiwgbWFrZSBzdXJlIHRyYWNrcyBhcmUg
YXQgbGVhc3QgbWluaW1hbGx5IHZpYWJsZQorICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKCkg
ewogCi0gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCBrZXksIG5ldyBCdWZm
ZXJBdHRyaWJ1dGUoIHR5cGVkQXJyYXksIGF0dHJpYnV0ZS5pdGVtU2l6ZSwgYXR0cmlidXRlLm5v
cm1hbGl6ZWQgKSApOworICAgICAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTsKIAotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIHZhbHVlU2l6ZSA9IHRoaXMuZ2V0VmFsdWVTaXplKCk7Cisg
ICAgICAgICAgICBpZiAoIHZhbHVlU2l6ZSAtIE1hdGguZmxvb3IoIHZhbHVlU2l6ZSApICE9PSAw
ICkgewogCi0gICAgICAgICAgICB2YXIgZ3JvdXBzID0ganNvbi5kYXRhLmdyb3VwcyB8fCBqc29u
LmRhdGEuZHJhd2NhbGxzIHx8IGpzb24uZGF0YS5vZmZzZXRzOworICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4g
dHJhY2suJywgdGhpcyApOworICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAKLSAgICAg
ICAgICAgIGlmICggZ3JvdXBzICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSBncm91cHMubGVuZ3RoOyBpICE9PSBu
OyArKyBpICkgeworICAgICAgICAgICAgdmFyIHRpbWVzID0gdGhpcy50aW1lcywKKyAgICAgICAg
ICAgICAgICB2YWx1ZXMgPSB0aGlzLnZhbHVlcywKIAotICAgICAgICAgICAgICAgICAgICB2YXIg
Z3JvdXAgPSBncm91cHNbIGkgXTsKKyAgICAgICAgICAgICAgICBuS2V5cyA9IHRpbWVzLmxlbmd0
aDsKIAotICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hZGRHcm91cCggZ3JvdXAuc3RhcnQs
IGdyb3VwLmNvdW50LCBncm91cC5tYXRlcmlhbEluZGV4ICk7CisgICAgICAgICAgICBpZiAoIG5L
ZXlzID09PSAwICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoICdUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4nLCB0aGlzICk7
CisgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICB2YXIgYm91bmRpbmdTcGhlcmUgPSBqc29uLmRhdGEuYm91bmRpbmdTcGhlcmU7Cisg
ICAgICAgICAgICB2YXIgcHJldlRpbWUgPSBudWxsOwogCi0gICAgICAgICAgICBpZiAoIGJvdW5k
aW5nU3BoZXJlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7
IGkgIT09IG5LZXlzOyBpICsrICkgewogCi0gICAgICAgICAgICAgICAgdmFyIGNlbnRlciA9IG5l
dyBWZWN0b3IzKCk7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJUaW1lID0gdGltZXNbIGkgXTsK
IAotICAgICAgICAgICAgICAgIGlmICggYm91bmRpbmdTcGhlcmUuY2VudGVyICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY3VyclRpbWUgPT09ICdudW1iZXIn
ICYmIGlzTmFOKCBjdXJyVGltZSApICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNlbnRlci5m
cm9tQXJyYXkoIGJvdW5kaW5nU3BoZXJlLmNlbnRlciApOworICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBu
dW1iZXIuJywgdGhpcywgaSwgY3VyclRpbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSA9IG5ldyBTcGhlcmUo
IGNlbnRlciwgYm91bmRpbmdTcGhlcmUucmFkaXVzICk7Ci0KLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIHByZXZUaW1lICE9PSBudWxsICYmIHByZXZUaW1lID4gY3VyclRpbWUg
KSB7CiAKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvciggJ1RIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLics
IHRoaXMsIGksIGN1cnJUaW1lLCBwcmV2VGltZSApOworICAgICAgICAgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgfSApOworICAgICAgICAgICAgICAgIHByZXZUaW1lID0gY3Vy
clRpbWU7CiAKLSAgICB2YXIgVFlQRURfQVJSQVlTID0gewotICAgICAgICBJbnQ4QXJyYXk6IElu
dDhBcnJheSwKLSAgICAgICAgVWludDhBcnJheTogVWludDhBcnJheSwKLSAgICAgICAgLy8gV29y
a2Fyb3VuZCBmb3IgSUUxMSBwcmUgS0IyOTI5NDM3LiBTZWUgIzExNDQwCi0gICAgICAgIFVpbnQ4
Q2xhbXBlZEFycmF5OiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnID8g
VWludDhDbGFtcGVkQXJyYXkgOiBVaW50OEFycmF5LAotICAgICAgICBJbnQxNkFycmF5OiBJbnQx
NkFycmF5LAotICAgICAgICBVaW50MTZBcnJheTogVWludDE2QXJyYXksCi0gICAgICAgIEludDMy
QXJyYXk6IEludDMyQXJyYXksCi0gICAgICAgIFVpbnQzMkFycmF5OiBVaW50MzJBcnJheSwKLSAg
ICAgICAgRmxvYXQzMkFycmF5OiBGbG9hdDMyQXJyYXksCi0gICAgICAgIEZsb2F0NjRBcnJheTog
RmxvYXQ2NEFycmF5Ci0gICAgfTsKKyAgICAgICAgICAgIH0KIAotICAgIC8qKgotICAgICAqIEBh
dXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vCi0gICAgICovCisgICAg
ICAgICAgICBpZiAoIHZhbHVlcyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgZnVuY3Rpb24gTG9h
ZGVyKCkgeworICAgICAgICAgICAgICAgIGlmICggQW5pbWF0aW9uVXRpbHMuaXNUeXBlZEFycmF5
KCB2YWx1ZXMgKSApIHsKIAotICAgICAgICB0aGlzLm9uTG9hZFN0YXJ0ID0gZnVuY3Rpb24gKCkg
e307Ci0gICAgICAgIHRoaXMub25Mb2FkUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7fTsKLSAgICAg
ICAgdGhpcy5vbkxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHt9OworICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSB2YWx1ZXMubGVuZ3RoOyBpICE9PSBuOyArKyBpICkg
ewogCi0gICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzWyBp
IF07CiAKLSAgICBMb2FkZXIuSGFuZGxlcnMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGlzTmFOKCB2YWx1ZSApICkgewogCi0gICAgICAgIGhhbmRsZXJzOiBbXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuS2V5ZnJhbWVUcmFjazog
VmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLicsIHRoaXMsIGksIHZhbHVlICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBhZGQ6IGZ1bmN0aW9uICggcmVnZXgsIGxvYWRlciAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5oYW5kbGVy
cy5wdXNoKCByZWdleCwgbG9hZGVyICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBnZXQ6IGZ1bmN0aW9uICggZmlsZSAp
IHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5k
bGVyczsKKyAgICAgICAgICAgIHJldHVybiB2YWxpZDsKIAotICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyICkgeworICAgICAgICB9
LAogCi0gICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gaGFuZGxlcnNbIGkgXTsKLSAgICAgICAg
ICAgICAgICB2YXIgbG9hZGVyID0gaGFuZGxlcnNbIGkgKyAxIF07CisgICAgICAgIC8vIHJlbW92
ZXMgZXF1aXZhbGVudCBzZXF1ZW50aWFsIGtleXMgYXMgY29tbW9uIGluIG1vcnBoIHRhcmdldCBz
ZXF1ZW5jZXMKKyAgICAgICAgLy8gKDAsMCwwLDAsMSwxLDEsMCwwLDAsMCwwLDAsMCkgLS0+ICgw
LDAsMSwxLDAsMCkKKyAgICAgICAgb3B0aW1pemU6IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICAg
ICAgICAgIGlmICggcmVnZXgudGVzdCggZmlsZSApICkgeworICAgICAgICAgICAgdmFyIHRpbWVz
ID0gdGhpcy50aW1lcywKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnZhbHVlcywKKyAg
ICAgICAgICAgICAgICBzdHJpZGUgPSB0aGlzLmdldFZhbHVlU2l6ZSgpLAogCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsb2FkZXI7CisgICAgICAgICAgICAgICAgc21vb3RoSW50ZXJwb2xh
dGlvbiA9IHRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpID09PSBJbnRlcnBvbGF0ZVNtb290aCwKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cml0ZUluZGV4ID0gMSwKKyAgICAg
ICAgICAgICAgICBsYXN0SW5kZXggPSB0aW1lcy5sZW5ndGggLSAxOwogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCBsYXN0SW5kZXg7ICsrIGkgKSB7CiAK
LSAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIHZhciBrZWVwID0gZmFs
c2U7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciB0aW1lID0gdGltZXNbIGkgXTsK
KyAgICAgICAgICAgICAgICB2YXIgdGltZU5leHQgPSB0aW1lc1sgaSArIDEgXTsKIAotICAgIH07
CisgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFkamFjZW50IGtleWZyYW1lcyBzY2hlZHVsZWQg
YXQgdGhlIHNhbWUgdGltZQogCi0gICAgT2JqZWN0LmFzc2lnbiggTG9hZGVyLnByb3RvdHlwZSwg
eworICAgICAgICAgICAgICAgIGlmICggdGltZSAhPT0gdGltZU5leHQgJiYgKCBpICE9PSAxIHx8
IHRpbWUgIT09IHRpbWVbIDAgXSApICkgewogCi0gICAgICAgIGNyb3NzT3JpZ2luOiB1bmRlZmlu
ZWQsCisgICAgICAgICAgICAgICAgICAgIGlmICggISBzbW9vdGhJbnRlcnBvbGF0aW9uICkgewog
Ci0gICAgICAgIGV4dHJhY3RVcmxCYXNlOiBmdW5jdGlvbiAoIHVybCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBrZXlmcmFtZXMgc2FtZSBhcyB0aGVp
ciBuZWlnaGJvcnMKIAotICAgICAgICAgICAgdmFyIHBhcnRzID0gdXJsLnNwbGl0KCAnLycgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogc3RyaWRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFAgPSBvZmZzZXQgLSBzdHJpZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TiA9IG9mZnNldCArIHN0cmlkZTsKIAotICAgICAg
ICAgICAgaWYgKCBwYXJ0cy5sZW5ndGggPT09IDEgKSByZXR1cm4gJy4vJzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkgewogCi0g
ICAgICAgICAgICBwYXJ0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dmFsdWUgPSB2YWx1ZXNbIG9mZnNldCArIGogXTsKIAotICAgICAgICAgICAgcmV0dXJuIHBhcnRz
LmpvaW4oICcvJyApICsgJy8nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFs
dWUgIT09IHZhbHVlc1sgb2Zmc2V0UCArIGogXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSAhPT0gdmFsdWVzWyBvZmZzZXROICsgaiBdICkgewogCi0gICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBpbml0TWF0ZXJpYWxzOiBm
dW5jdGlvbiAoIG1hdGVyaWFscywgdGV4dHVyZVBhdGgsIGNyb3NzT3JpZ2luICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGFycmF5ID0gW107Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsg
aSA8IG1hdGVyaWFscy5sZW5ndGg7ICsrIGkgKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAKLSAgICAgICAgICAgICAgICBhcnJheVsgaSBdID0gdGhpcy5jcmVhdGVNYXRlcmlhbCgg
bWF0ZXJpYWxzWyBpIF0sIHRleHR1cmVQYXRoLCBjcm9zc09yaWdpbiApOworICAgICAgICAgICAg
ICAgICAgICAgICAga2VlcCA9IHRydWU7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgLy8gaW4tcGxhY2UgY29tcGFjdGlvbgogCi0g
ICAgICAgIGNyZWF0ZU1hdGVyaWFsOiAoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGtlZXAgKSB7CiAKLSAgICAgICAgICAgIHZhciBCbGVuZGluZ01vZGUgPSB7Ci0gICAgICAg
ICAgICAgICAgTm9CbGVuZGluZzogTm9CbGVuZGluZywKLSAgICAgICAgICAgICAgICBOb3JtYWxC
bGVuZGluZzogTm9ybWFsQmxlbmRpbmcsCi0gICAgICAgICAgICAgICAgQWRkaXRpdmVCbGVuZGlu
ZzogQWRkaXRpdmVCbGVuZGluZywKLSAgICAgICAgICAgICAgICBTdWJ0cmFjdGl2ZUJsZW5kaW5n
OiBTdWJ0cmFjdGl2ZUJsZW5kaW5nLAotICAgICAgICAgICAgICAgIE11bHRpcGx5QmxlbmRpbmc6
IE11bHRpcGx5QmxlbmRpbmcsCi0gICAgICAgICAgICAgICAgQ3VzdG9tQmxlbmRpbmc6IEN1c3Rv
bUJsZW5kaW5nCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpZiAoIGkgIT09
IHdyaXRlSW5kZXggKSB7CiAKLSAgICAgICAgICAgIHZhciBjb2xvciA9IG5ldyBDb2xvcigpOwot
ICAgICAgICAgICAgdmFyIHRleHR1cmVMb2FkZXIgPSBuZXcgVGV4dHVyZUxvYWRlcigpOwotICAg
ICAgICAgICAgdmFyIG1hdGVyaWFsTG9hZGVyID0gbmV3IE1hdGVyaWFsTG9hZGVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lc1sgd3JpdGVJbmRleCBdID0gdGltZXNbIGkgXTsKIAot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZU1hdGVyaWFsKCBtLCB0ZXh0dXJlUGF0
aCwgY3Jvc3NPcmlnaW4gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZE9mZnNl
dCA9IGkgKiBzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVPZmZzZXQg
PSB3cml0ZUluZGV4ICogc3RyaWRlOwogCi0gICAgICAgICAgICAgICAgLy8gY29udmVydCBmcm9t
IG9sZCBtYXRlcmlhbCBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBq
ID0gMDsgaiAhPT0gc3RyaWRlOyArKyBqICkgewogCi0gICAgICAgICAgICAgICAgdmFyIHRleHR1
cmVzID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyB3cml0ZU9mZnNl
dCArIGogXSA9IHZhbHVlc1sgcmVhZE9mZnNldCArIGogXTsKIAotICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIGxvYWRUZXh0dXJlKCBwYXRoLCByZXBlYXQsIG9mZnNldCwgd3JhcCwgYW5pc290cm9w
eSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2
YXIgZnVsbFBhdGggPSB0ZXh0dXJlUGF0aCArIHBhdGg7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBsb2FkZXIgPSBMb2FkZXIuSGFuZGxlcnMuZ2V0KCBmdWxsUGF0aCApOworICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmU7CisgICAgICAgICAg
ICAgICAgICAgICsrIHdyaXRlSW5kZXg7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBsb2Fk
ZXIgIT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gbG9hZGVyLmxvYWQoIGZ1bGxQYXRoICk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGZsdXNoIGxhc3Qg
a2V5ZnJhbWUgKGNvbXBhY3Rpb24gbG9va3MgYWhlYWQpCiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVMb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oIGNyb3NzT3JpZ2luICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZUxvYWRlci5sb2FkKCBmdWxsUGF0aCAp
OworICAgICAgICAgICAgaWYgKCBsYXN0SW5kZXggPiAwICkgewogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB0aW1lc1sgd3JpdGVJbmRleCBdID0gdGltZXNbIGxhc3RJ
bmRleCBdOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggcmVwZWF0ICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgZm9yICggdmFyIHJlYWRPZmZzZXQgPSBsYXN0SW5kZXggKiBz
dHJpZGUsIHdyaXRlT2Zmc2V0ID0gd3JpdGVJbmRleCAqIHN0cmlkZSwgaiA9IDA7IGogIT09IHN0
cmlkZTsgKysgaiApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5yZXBlYXQu
ZnJvbUFycmF5KCByZXBlYXQgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyB3cml0ZU9m
ZnNldCArIGogXSA9IHZhbHVlc1sgcmVhZE9mZnNldCArIGogXTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCByZXBlYXRbIDAgXSAhPT0gMSApIHRleHR1cmUud3JhcFMgPSBSZXBlYXRX
cmFwcGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVwZWF0WyAxIF0gIT09IDEg
KSB0ZXh0dXJlLndyYXBUID0gUmVwZWF0V3JhcHBpbmc7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArKyB3cml0ZUluZGV4OwogCi0g
ICAgICAgICAgICAgICAgICAgIGlmICggb2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUub2Zmc2V0LmZyb21BcnJh
eSggb2Zmc2V0ICk7CisgICAgICAgICAgICBpZiAoIHdyaXRlSW5kZXggIT09IHRpbWVzLmxlbmd0
aCApIHsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy50aW1l
cyA9IEFuaW1hdGlvblV0aWxzLmFycmF5U2xpY2UoIHRpbWVzLCAwLCB3cml0ZUluZGV4ICk7Cisg
ICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBBbmltYXRpb25VdGlscy5hcnJheVNsaWNlKCB2
YWx1ZXMsIDAsIHdyaXRlSW5kZXggKiBzdHJpZGUgKTsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIHdyYXAgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB3cmFwWyAwIF0gPT09ICdyZXBlYXQnICkgdGV4dHVyZS53cmFwUyA9
IFJlcGVhdFdyYXBwaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3cmFwWyAwIF0g
PT09ICdtaXJyb3InICkgdGV4dHVyZS53cmFwUyA9IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3
cmFwWyAxIF0gPT09ICdyZXBlYXQnICkgdGV4dHVyZS53cmFwVCA9IFJlcGVhdFdyYXBwaW5nOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3cmFwWyAxIF0gPT09ICdtaXJyb3InICkgdGV4
dHVyZS53cmFwVCA9IE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7CisgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgfSApOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggYW5p
c290cm9weSAhPT0gdW5kZWZpbmVkICkgeworICAgIC8qKgorICAgICAqCisgICAgICogQSBUcmFj
ayBvZiB2ZWN0b3JlZCBrZXlmcmFtZSB2YWx1ZXMuCisgICAgICoKKyAgICAgKgorICAgICAqIEBh
dXRob3IgQmVuIEhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW8vCisgICAgICogQGF1dGhvciBEYXZp
ZCBTYXJubyAvIGh0dHA6Ly9saWdodGhhdXMudXMvCisgICAgICogQGF1dGhvciB0c2NodworICAg
ICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmFuaXNvdHJvcHkgPSBhbmlz
b3Ryb3B5OworICAgIGZ1bmN0aW9uIFZlY3RvcktleWZyYW1lVHJhY2soIG5hbWUsIHRpbWVzLCB2
YWx1ZXMsIGludGVycG9sYXRpb24gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICBLZXlmcmFtZVRyYWNrLmNhbGwoIHRoaXMsIG5hbWUsIHRpbWVzLCB2YWx1ZXMsIGludGVycG9s
YXRpb24gKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgdXVpZCA9IF9NYXRoLmdlbmVyYXRl
VVVJRCgpOworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlc1sgdXVpZCBdID0g
dGV4dHVyZTsKKyAgICBWZWN0b3JLZXlmcmFtZVRyYWNrLnByb3RvdHlwZSA9IE9iamVjdC5hc3Np
Z24oIE9iamVjdC5jcmVhdGUoIEtleWZyYW1lVHJhY2sucHJvdG90eXBlICksIHsKIAotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdXVpZDsKKyAgICAgICAgY29uc3RydWN0b3I6IFZlY3Rvcktl
eWZyYW1lVHJhY2ssCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIFZhbHVlVHlwZU5hbWU6
ICd2ZWN0b3InCiAKLSAgICAgICAgICAgICAgICAvLworICAgICAgICAvLyBWYWx1ZUJ1ZmZlclR5
cGUgaXMgaW5oZXJpdGVkCiAKLSAgICAgICAgICAgICAgICB2YXIganNvbiA9IHsKLSAgICAgICAg
ICAgICAgICAgICAgdXVpZDogX01hdGguZ2VuZXJhdGVVVUlEKCksCi0gICAgICAgICAgICAgICAg
ICAgIHR5cGU6ICdNZXNoTGFtYmVydE1hdGVyaWFsJwotICAgICAgICAgICAgICAgIH07CisgICAg
ICAgIC8vIERlZmF1bHRJbnRlcnBvbGF0aW9uIGlzIGluaGVyaXRlZAogCi0gICAgICAgICAgICAg
ICAgZm9yICggdmFyIG5hbWUgaW4gbSApIHsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHZhbHVlID0gbVsgbmFtZSBdOworICAgIC8qKgorICAgICAqCisgICAgICogUmV1c2Fi
bGUgc2V0IG9mIFRyYWNrcyB0aGF0IHJlcHJlc2VudCBhbiBhbmltYXRpb24uCisgICAgICoKKyAg
ICAgKiBAYXV0aG9yIEJlbiBIb3VzdG9uIC8gaHR0cDovL2NsYXJhLmlvLworICAgICAqIEBhdXRo
b3IgRGF2aWQgU2Fybm8gLyBodHRwOi8vbGlnaHRoYXVzLnVzLworICAgICAqLwogCi0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoIG5hbWUgKSB7CisgICAgZnVuY3Rpb24gQW5pbWF0aW9uQ2xp
cCggbmFtZSwgZHVyYXRpb24sIHRyYWNrcyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnRGJnQ29sb3InOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGJnSW5kZXgn
OgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3B0aWNhbERlbnNpdHknOgotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnaWxsdW1pbmF0aW9uJzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RiZ05hbWUn
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ubmFtZSA9IHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnYmxlbmRpbmcnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uYmxlbmRpbmcg
PSBCbGVuZGluZ01vZGVbIHZhbHVlIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xvckFtYmllbnQnOgotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQW1iaWVudCc6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOicsIG5h
bWUsICdpcyBubyBsb25nZXIgc3VwcG9ydGVkLicgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yRGlmZnVzZSc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5jb2xvciA9IGNvbG9yLmZyb21BcnJh
eSggdmFsdWUgKS5nZXRIZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yU3BlY3VsYXInOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpzb24uc3BlY3VsYXIgPSBjb2xvci5mcm9tQXJyYXkoIHZhbHVl
ICkuZ2V0SGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdjb2xvckVtaXNzaXZlJzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqc29uLmVtaXNzaXZlID0gY29sb3IuZnJvbUFycmF5KCB2YWx1ZSApLmdldEhl
eCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnc3BlY3VsYXJDb2VmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqc29uLnNoaW5pbmVzcyA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2hhZGluZyc6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAnYmFzaWMnICkg
anNvbi50eXBlID0gJ01lc2hCYXNpY01hdGVyaWFsJzsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdwaG9uZycgKSBqc29uLnR5cGUgPSAn
TWVzaFBob25nTWF0ZXJpYWwnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFs
dWUudG9Mb3dlckNhc2UoKSA9PT0gJ3N0YW5kYXJkJyApIGpzb24udHlwZSA9ICdNZXNoU3RhbmRh
cmRNYXRlcmlhbCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdtYXBEaWZmdXNlJzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqc29uLm1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBEaWZmdXNlUmVwZWF0
LCBtLm1hcERpZmZ1c2VPZmZzZXQsIG0ubWFwRGlmZnVzZVdyYXAsIG0ubWFwRGlmZnVzZUFuaXNv
dHJvcHkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ21hcERpZmZ1c2VSZXBlYXQnOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnbWFwRGlmZnVzZU9mZnNldCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdtYXBEaWZmdXNlV3JhcCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBE
aWZmdXNlQW5pc290cm9weSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZSc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAganNvbi5lbWlzc2l2ZU1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5t
YXBFbWlzc2l2ZVJlcGVhdCwgbS5tYXBFbWlzc2l2ZU9mZnNldCwgbS5tYXBFbWlzc2l2ZVdyYXAs
IG0ubWFwRW1pc3NpdmVBbmlzb3Ryb3B5ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZVJlcGVhdCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZU9mZnNldCc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBFbWlzc2l2ZVdyYXAnOgotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbWFwRW1pc3NpdmVBbmlzb3Ryb3B5JzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExp
Z2h0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmxpZ2h0TWFwID0gbG9hZFRl
eHR1cmUoIHZhbHVlLCBtLm1hcExpZ2h0UmVwZWF0LCBtLm1hcExpZ2h0T2Zmc2V0LCBtLm1hcExp
Z2h0V3JhcCwgbS5tYXBMaWdodEFuaXNvdHJvcHkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0UmVwZWF0
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0T2Zmc2V0JzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcExpZ2h0V3JhcCc6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdtYXBMaWdodEFuaXNvdHJvcHknOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQU8nOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uYW9NYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUs
IG0ubWFwQU9SZXBlYXQsIG0ubWFwQU9PZmZzZXQsIG0ubWFwQU9XcmFwLCBtLm1hcEFPQW5pc290
cm9weSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbWFwQU9SZXBlYXQnOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbWFwQU9PZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQU9X
cmFwJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFPQW5pc290cm9weSc6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdtYXBCdW1wJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmJ1bXBN
YXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwQnVtcFJlcGVhdCwgbS5tYXBCdW1wT2Zmc2V0
LCBtLm1hcEJ1bXBXcmFwLCBtLm1hcEJ1bXBBbmlzb3Ryb3B5ICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBCdW1w
U2NhbGUnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uYnVtcFNjYWxlID0gdmFs
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdtYXBCdW1wUmVwZWF0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcEJ1bXBPZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVt
cFdyYXAnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVtcEFuaXNvdHJvcHkn
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnbWFwTm9ybWFsJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29u
Lm5vcm1hbE1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBOb3JtYWxSZXBlYXQsIG0ubWFw
Tm9ybWFsT2Zmc2V0LCBtLm1hcE5vcm1hbFdyYXAsIG0ubWFwTm9ybWFsQW5pc290cm9weSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwTm9ybWFsRmFjdG9yJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c29uLm5vcm1hbFNjYWxlID0gWyB2YWx1ZSwgdmFsdWUgXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE5vcm1hbFJl
cGVhdCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBOb3JtYWxPZmZzZXQnOgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTm9ybWFsV3JhcCc6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdtYXBOb3JtYWxBbmlzb3Ryb3B5JzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFNw
ZWN1bGFyJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnNwZWN1bGFyTWFwID0g
bG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcFNwZWN1bGFyUmVwZWF0LCBtLm1hcFNwZWN1bGFyT2Zm
c2V0LCBtLm1hcFNwZWN1bGFyV3JhcCwgbS5tYXBTcGVjdWxhckFuaXNvdHJvcHkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcFNwZWN1bGFyUmVwZWF0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21h
cFNwZWN1bGFyT2Zmc2V0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFNwZWN1
bGFyV3JhcCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBTcGVjdWxhckFuaXNv
dHJvcHknOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbWFwTWV0YWxuZXNzJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqc29uLm1ldGFsbmVzc01hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBNZXRhbG5l
c3NSZXBlYXQsIG0ubWFwTWV0YWxuZXNzT2Zmc2V0LCBtLm1hcE1ldGFsbmVzc1dyYXAsIG0ubWFw
TWV0YWxuZXNzQW5pc290cm9weSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTWV0YWxuZXNzUmVwZWF0JzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcE1ldGFsbmVzc09mZnNldCc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdtYXBNZXRhbG5lc3NXcmFwJzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ21hcE1ldGFsbmVzc0FuaXNvdHJvcHknOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwUm91
Z2huZXNzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnJvdWdobmVzc01hcCA9
IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBSb3VnaG5lc3NSZXBlYXQsIG0ubWFwUm91Z2huZXNz
T2Zmc2V0LCBtLm1hcFJvdWdobmVzc1dyYXAsIG0ubWFwUm91Z2huZXNzQW5pc290cm9weSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwUm91Z2huZXNzUmVwZWF0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcFJvdWdobmVzc09mZnNldCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdt
YXBSb3VnaG5lc3NXcmFwJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFJvdWdo
bmVzc0FuaXNvdHJvcHknOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQWxwaGEnOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpzb24uYWxwaGFNYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwQWxwaGFS
ZXBlYXQsIG0ubWFwQWxwaGFPZmZzZXQsIG0ubWFwQWxwaGFXcmFwLCBtLm1hcEFscGhhQW5pc290
cm9weSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbWFwQWxwaGFSZXBlYXQnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwQWxwaGFPZmZzZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
bWFwQWxwaGFXcmFwJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFscGhhQW5p
c290cm9weSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdmbGlwU2lkZWQnOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzb24uc2lkZSA9IEJhY2tTaWRlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlU2lkZWQnOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpzb24uc2lkZSA9IERvdWJsZVNpZGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0
cmFuc3BhcmVuY3knOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
J1RIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDogdHJhbnNwYXJlbmN5IGhhcyBiZWVuIHJlbmFt
ZWQgdG8gb3BhY2l0eScgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLm9wYWNp
dHkgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2RlcHRoVGVzdCc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdkZXB0aFdyaXRlJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9y
V3JpdGUnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3BhY2l0eSc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdyZWZsZWN0aXZpdHknOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAndHJhbnNwYXJlbnQnOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
dmlzaWJsZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd3aXJlZnJhbWUnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzb25bIG5hbWUgXSA9IHZhbHVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
dmVydGV4Q29sb3JzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09
PSB0cnVlICkganNvbi52ZXJ0ZXhDb2xvcnMgPSBWZXJ0ZXhDb2xvcnM7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gJ2ZhY2UnICkganNvbi52ZXJ0ZXhDb2xvcnMg
PSBGYWNlQ29sb3JzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCAnVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCcs
IG5hbWUsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMudHJhY2tzID0gdHJhY2tzOworICAg
ICAgICB0aGlzLmR1cmF0aW9uID0gKCBkdXJhdGlvbiAhPT0gdW5kZWZpbmVkICkgPyBkdXJhdGlv
biA6IC0gMTsKIAotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHRoaXMudXVpZCA9IF9N
YXRoLmdlbmVyYXRlVVVJRCgpOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAvLyB0aGlz
IG1lYW5zIGl0IHNob3VsZCBmaWd1cmUgb3V0IGl0cyBkdXJhdGlvbiBieSBzY2FubmluZyB0aGUg
dHJhY2tzCisgICAgICAgIGlmICggdGhpcy5kdXJhdGlvbiA8IDAgKSB7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoIGpzb24udHlwZSA9PT0gJ01lc2hCYXNpY01hdGVyaWFsJyApIGRlbGV0ZSBqc29u
LmVtaXNzaXZlOwotICAgICAgICAgICAgICAgIGlmICgganNvbi50eXBlICE9PSAnTWVzaFBob25n
TWF0ZXJpYWwnICkgZGVsZXRlIGpzb24uc3BlY3VsYXI7CisgICAgICAgICAgICB0aGlzLnJlc2V0
RHVyYXRpb24oKTsKIAotICAgICAgICAgICAgICAgIGlmICgganNvbi5vcGFjaXR5IDwgMSApIGpz
b24udHJhbnNwYXJlbnQgPSB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtYXRl
cmlhbExvYWRlci5zZXRUZXh0dXJlcyggdGV4dHVyZXMgKTsKKyAgICAgICAgdGhpcy5vcHRpbWl6
ZSgpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGVyaWFsTG9hZGVyLnBhcnNlKCBqc29u
ICk7CisgICAgfQogCi0gICAgICAgICAgICB9OworICAgIE9iamVjdC5hc3NpZ24oIEFuaW1hdGlv
bkNsaXAsIHsKIAotICAgICAgICB9ICkoKQorICAgICAgICBwYXJzZTogZnVuY3Rpb24gKCBqc29u
ICkgewogCi0gICAgfSApOworICAgICAgICAgICAgdmFyIHRyYWNrcyA9IFtdLAorICAgICAgICAg
ICAgICAgIGpzb25UcmFja3MgPSBqc29uLnRyYWNrcywKKyAgICAgICAgICAgICAgICBmcmFtZVRp
bWUgPSAxLjAgLyAoIGpzb24uZnBzIHx8IDEuMCApOwogCi0gICAgLyoqCi0gICAgICogQGF1dGhv
ciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KLSAgICAgKiBAYXV0aG9yIGFsdGVyZWRxIC8g
aHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLwotICAgICAqLworICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwLCBuID0ganNvblRyYWNrcy5sZW5ndGg7IGkgIT09IG47ICsrIGkgKSB7CiAKLSAgICBm
dW5jdGlvbiBKU09OTG9hZGVyKCBtYW5hZ2VyICkgeworICAgICAgICAgICAgICAgIHRyYWNrcy5w
dXNoKCBLZXlmcmFtZVRyYWNrLnBhcnNlKCBqc29uVHJhY2tzWyBpIF0gKS5zY2FsZSggZnJhbWVU
aW1lICkgKTsKIAotICAgICAgICBpZiAoIHR5cGVvZiBtYW5hZ2VyID09PSAnYm9vbGVhbicgKSB7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkpTT05M
b2FkZXI6IHNob3dTdGF0dXMgcGFyYW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBjb25zdHJ1
Y3Rvci4nICk7Ci0gICAgICAgICAgICBtYW5hZ2VyID0gdW5kZWZpbmVkOworICAgICAgICAgICAg
cmV0dXJuIG5ldyBBbmltYXRpb25DbGlwKCBqc29uLm5hbWUsIGpzb24uZHVyYXRpb24sIHRyYWNr
cyApOwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgICAgICB0aGlzLm1hbmFnZXIgPSAo
IG1hbmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdl
cjsKKyAgICAgICAgdG9KU09OOiBmdW5jdGlvbiAoIGNsaXAgKSB7CiAKLSAgICAgICAgdGhpcy53
aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciB0cmFja3MgPSBbXSwKKyAg
ICAgICAgICAgICAgICBjbGlwVHJhY2tzID0gY2xpcC50cmFja3M7CiAKLSAgICB9CisgICAgICAg
ICAgICB2YXIganNvbiA9IHsKIAotICAgIE9iamVjdC5hc3NpZ24oIEpTT05Mb2FkZXIucHJvdG90
eXBlLCB7CisgICAgICAgICAgICAgICAgJ25hbWUnOiBjbGlwLm5hbWUsCisgICAgICAgICAgICAg
ICAgJ2R1cmF0aW9uJzogY2xpcC5kdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAndHJhY2tzJzog
dHJhY2tzLAorICAgICAgICAgICAgICAgICd1dWlkJzogY2xpcC51dWlkCiAKLSAgICAgICAgbG9h
ZDogZnVuY3Rpb24gKCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKKyAgICAg
ICAgICAgIH07CiAKLSAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IDAsIG4gPSBjbGlwVHJhY2tzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHsK
IAotICAgICAgICAgICAgdmFyIHRleHR1cmVQYXRoID0gdGhpcy50ZXh0dXJlUGF0aCAmJiAoIHR5
cGVvZiB0aGlzLnRleHR1cmVQYXRoID09PSAic3RyaW5nIiApID8gdGhpcy50ZXh0dXJlUGF0aCA6
IExvYWRlci5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2UoIHVybCApOworICAgICAgICAgICAgICAg
IHRyYWNrcy5wdXNoKCBLZXlmcmFtZVRyYWNrLnRvSlNPTiggY2xpcFRyYWNrc1sgaSBdICkgKTsK
IAotICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIg
KTsKLSAgICAgICAgICAgIGxvYWRlci5zZXRXaXRoQ3JlZGVudGlhbHMoIHRoaXMud2l0aENyZWRl
bnRpYWxzICk7Ci0gICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIHRleHQg
KSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFy
c2UoIHRleHQgKTsKLSAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGEgPSBqc29uLm1ldGFkYXRh
OworICAgICAgICAgICAgcmV0dXJuIGpzb247CiAKLSAgICAgICAgICAgICAgICBpZiAoIG1ldGFk
YXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHR5cGUgPSBtZXRhZGF0YS50eXBlOworICAgICAgICBDcmVhdGVGcm9tTW9ycGhUYXJnZXRT
ZXF1ZW5jZTogZnVuY3Rpb24gKCBuYW1lLCBtb3JwaFRhcmdldFNlcXVlbmNlLCBmcHMsIG5vTG9v
cCApIHsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgIT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgIHZhciBudW1Nb3JwaFRhcmdldHMgPSBtb3JwaFRhcmdldFNlcXVlbmNlLmxl
bmd0aDsKKyAgICAgICAgICAgIHZhciB0cmFja3MgPSBbXTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdvYmplY3QnICkgeworICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbnVtTW9ycGhUYXJnZXRzOyBpICsrICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkpTT05Mb2FkZXI6
ICcgKyB1cmwgKyAnIHNob3VsZCBiZSBsb2FkZWQgd2l0aCBUSFJFRS5PYmplY3RMb2FkZXIgaW5z
dGVhZC4nICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIHZhciB0aW1lcyA9IFtdOworICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRpbWVzLnB1c2go
CisgICAgICAgICAgICAgICAgICAgICggaSArIG51bU1vcnBoVGFyZ2V0cyAtIDEgKSAlIG51bU1v
cnBoVGFyZ2V0cywKKyAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAg
KCBpICsgMSApICUgbnVtTW9ycGhUYXJnZXRzICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdHlwZS50b0xvd2VyQ2FzZSgpID09PSAnc2NlbmUnICkgeworICAgICAgICAgICAgICAg
IHZhbHVlcy5wdXNoKCAwLCAxLCAwICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCAnVEhSRUUuSlNPTkxvYWRlcjogJyArIHVybCArICcgc2hvdWxkIGJlIGxv
YWRlZCB3aXRoIFRIUkVFLlNjZW5lTG9hZGVyIGluc3RlYWQuJyApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB2YXIgb3JkZXIgPSBBbmltYXRp
b25VdGlscy5nZXRLZXlmcmFtZU9yZGVyKCB0aW1lcyApOworICAgICAgICAgICAgICAgIHRpbWVz
ID0gQW5pbWF0aW9uVXRpbHMuc29ydGVkQXJyYXkoIHRpbWVzLCAxLCBvcmRlciApOworICAgICAg
ICAgICAgICAgIHZhbHVlcyA9IEFuaW1hdGlvblV0aWxzLnNvcnRlZEFycmF5KCB2YWx1ZXMsIDEs
IG9yZGVyICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBpZiB0aGVyZSBpcyBhIGtleSBhdCB0aGUgZmlyc3QgZnJhbWUsIGR1cGxpY2F0ZSBpdCBhcyB0
aGUKKyAgICAgICAgICAgICAgICAvLyBsYXN0IGZyYW1lIGFzIHdlbGwgZm9yIHBlcmZlY3QgbG9v
cC4KKyAgICAgICAgICAgICAgICBpZiAoICEgbm9Mb29wICYmIHRpbWVzWyAwIF0gPT09IDAgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aW1lcy5wdXNo
KCBudW1Nb3JwaFRhcmdldHMgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZh
bHVlc1sgMCBdICk7CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB2YXIg
b2JqZWN0ID0gc2NvcGUucGFyc2UoIGpzb24sIHRleHR1cmVQYXRoICk7Ci0gICAgICAgICAgICAg
ICAgb25Mb2FkKCBvYmplY3QuZ2VvbWV0cnksIG9iamVjdC5tYXRlcmlhbHMgKTsKKyAgICAgICAg
ICAgICAgICB0cmFja3MucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlcktleWZy
YW1lVHJhY2soCisgICAgICAgICAgICAgICAgICAgICAgICAnLm1vcnBoVGFyZ2V0SW5mbHVlbmNl
c1snICsgbW9ycGhUYXJnZXRTZXF1ZW5jZVsgaSBdLm5hbWUgKyAnXScsCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aW1lcywgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICkuc2NhbGUoIDEu
MCAvIGZwcyApICk7CiAKLSAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRp
b25DbGlwKCBuYW1lLCAtIDEsIHRyYWNrcyApOwogCi0gICAgICAgIHNldFRleHR1cmVQYXRoOiBm
dW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICB0aGlzLnRleHR1
cmVQYXRoID0gdmFsdWU7CisgICAgICAgIGZpbmRCeU5hbWU6IGZ1bmN0aW9uICggb2JqZWN0T3JD
bGlwQXJyYXksIG5hbWUgKSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIHZhciBjbGlwQXJy
YXkgPSBvYmplY3RPckNsaXBBcnJheTsKIAotICAgICAgICBwYXJzZTogKCBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICBpZiAoICEgQXJyYXkuaXNBcnJheSggb2JqZWN0T3JDbGlwQXJyYXkgKSAp
IHsKIAotICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VNb2RlbCgganNvbiwgZ2VvbWV0cnkgKSB7
CisgICAgICAgICAgICAgICAgdmFyIG8gPSBvYmplY3RPckNsaXBBcnJheTsKKyAgICAgICAgICAg
ICAgICBjbGlwQXJyYXkgPSBvLmdlb21ldHJ5ICYmIG8uZ2VvbWV0cnkuYW5pbWF0aW9ucyB8fCBv
LmFuaW1hdGlvbnM7CiAKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0JpdFNldCggdmFsdWUs
IHBvc2l0aW9uICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZSAmICggMSA8PCBwb3NpdGlvbiApOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgY2xpcEFycmF5Lmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIGNsaXBBcnJheVsgaSBdLm5hbWUgPT09IG5hbWUgKSB7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgaSwgaiwgZmksCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
bGlwQXJyYXlbIGkgXTsKIAotICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHpMZW5ndGgsCisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGNvbG9ySW5kZXgsIG5vcm1h
bEluZGV4LCB1dkluZGV4LCBtYXRlcmlhbEluZGV4LAorICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGlzUXVhZCwKLSAgICAgICAg
ICAgICAgICAgICAgaGFzTWF0ZXJpYWwsCi0gICAgICAgICAgICAgICAgICAgIGhhc0ZhY2VWZXJ0
ZXhVdiwKLSAgICAgICAgICAgICAgICAgICAgaGFzRmFjZU5vcm1hbCwgaGFzRmFjZVZlcnRleE5v
cm1hbCwKLSAgICAgICAgICAgICAgICAgICAgaGFzRmFjZUNvbG9yLCBoYXNGYWNlVmVydGV4Q29s
b3IsCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0
ZXgsIGZhY2UsIGZhY2VBLCBmYWNlQiwgaGV4LCBub3JtYWwsCisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgICAgICAgICAgdXZMYXllciwgdXYsIHUsIHYsCisgICAgICAgIENyZWF0ZUNsaXBzRnJv
bU1vcnBoVGFyZ2V0U2VxdWVuY2VzOiBmdW5jdGlvbiAoIG1vcnBoVGFyZ2V0cywgZnBzLCBub0xv
b3AgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgZmFjZXMgPSBqc29uLmZhY2VzLAotICAgICAg
ICAgICAgICAgICAgICB2ZXJ0aWNlcyA9IGpzb24udmVydGljZXMsCi0gICAgICAgICAgICAgICAg
ICAgIG5vcm1hbHMgPSBqc29uLm5vcm1hbHMsCi0gICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9
IGpzb24uY29sb3JzLAorICAgICAgICAgICAgdmFyIGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzID0g
e307CiAKLSAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBqc29uLnNjYWxlLAorICAgICAgICAg
ICAgLy8gdGVzdGVkIHdpdGggaHR0cHM6Ly9yZWdleDEwMS5jb20vIG9uIHRyaWNrIHNlcXVlbmNl
cworICAgICAgICAgICAgLy8gc3VjaCBmbGFtaW5nb19mbHlBXzAwMywgZmxhbWluZ29fcnVuMV8w
MDMsIGNyZGVhdGgwMDU5CisgICAgICAgICAgICB2YXIgcGF0dGVybiA9IC9eKFtcdy1dKj8pKFtc
ZF0rKSQvOwogCi0gICAgICAgICAgICAgICAgICAgIG5VdkxheWVycyA9IDA7CisgICAgICAgICAg
ICAvLyBzb3J0IG1vcnBoIHRhcmdldCBuYW1lcyBpbnRvIGFuaW1hdGlvbiBncm91cHMgYmFzZWQK
KyAgICAgICAgICAgIC8vIHBhdHRlcm5zIGxpa2UgV2Fsa18wMDEsIFdhbGtfMDAyLCBSdW5fMDAx
LCBSdW5fMDAyCisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gbW9ycGhUYXJnZXRz
Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCisgICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFy
Z2V0ID0gbW9ycGhUYXJnZXRzWyBpIF07CisgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gbW9y
cGhUYXJnZXQubmFtZS5tYXRjaCggcGF0dGVybiApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBq
c29uLnV2cyAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGlmICggcGFydHMgJiYg
cGFydHMubGVuZ3RoID4gMSApIHsKIAotICAgICAgICAgICAgICAgICAgICAvLyBkaXNyZWdhcmQg
ZW1wdHkgYXJyYXlzCisgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcGFydHNbIDEgXTsK
IAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGpzb24udXZzLmxlbmd0aDsg
aSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFuaW1hdGlvbk1vcnBoVGFyZ2V0cyA9
IGFuaW1hdGlvblRvTW9ycGhUYXJnZXRzWyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgIGlm
ICggISBhbmltYXRpb25Nb3JwaFRhcmdldHMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgganNvbi51dnNbIGkgXS5sZW5ndGggKSBuVXZMYXllcnMgKys7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhbmltYXRpb25Ub01vcnBoVGFyZ2V0c1sgbmFtZSBdID0gYW5pbWF0aW9uTW9y
cGhUYXJnZXRzID0gW107CiAKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoIGkgPSAwOyBpIDwgblV2TGF5ZXJzOyBpICsrICkgeworICAgICAgICAgICAg
ICAgICAgICBhbmltYXRpb25Nb3JwaFRhcmdldHMucHVzaCggbW9ycGhUYXJnZXQgKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZmFjZVZlcnRleFV2c1sgaSBdID0gW107Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbGlwcyA9IFtdOwogCi0gICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICB6TGVuZ3RoID0gdmVydGlj
ZXMubGVuZ3RoOworICAgICAgICAgICAgZm9yICggdmFyIG5hbWUgaW4gYW5pbWF0aW9uVG9Nb3Jw
aFRhcmdldHMgKSB7CiAKLSAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldCA8IHpMZW5ndGgg
KSB7CisgICAgICAgICAgICAgICAgY2xpcHMucHVzaCggQW5pbWF0aW9uQ2xpcC5DcmVhdGVGcm9t
TW9ycGhUYXJnZXRTZXF1ZW5jZSggbmFtZSwgYW5pbWF0aW9uVG9Nb3JwaFRhcmdldHNbIG5hbWUg
XSwgZnBzLCBub0xvb3AgKSApOwogCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleCA9IG5ldyBW
ZWN0b3IzKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4Lngg
PSB2ZXJ0aWNlc1sgb2Zmc2V0ICsrIF0gKiBzY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgdmVy
dGV4LnkgPSB2ZXJ0aWNlc1sgb2Zmc2V0ICsrIF0gKiBzY2FsZTsKLSAgICAgICAgICAgICAgICAg
ICAgdmVydGV4LnogPSB2ZXJ0aWNlc1sgb2Zmc2V0ICsrIF0gKiBzY2FsZTsKKyAgICAgICAgICAg
IHJldHVybiBjbGlwczsKIAotICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS52ZXJ0aWNlcy5w
dXNoKCB2ZXJ0ZXggKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
Ly8gcGFyc2UgdGhlIGFuaW1hdGlvbi5oaWVyYXJjaHkgZm9ybWF0CisgICAgICAgIHBhcnNlQW5p
bWF0aW9uOiBmdW5jdGlvbiAoIGFuaW1hdGlvbiwgYm9uZXMgKSB7CiAKLSAgICAgICAgICAgICAg
ICBvZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgIHpMZW5ndGggPSBmYWNlcy5sZW5ndGg7Cisg
ICAgICAgICAgICBpZiAoICEgYW5pbWF0aW9uICkgewogCi0gICAgICAgICAgICAgICAgd2hpbGUg
KCBvZmZzZXQgPCB6TGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdU
SFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLicgKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gZmFjZXNbIG9mZnNldCArKyBdOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgIGlzUXVhZCA9IGlzQml0U2V0KCB0eXBlLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIGhh
c01hdGVyaWFsID0gaXNCaXRTZXQoIHR5cGUsIDEgKTsKLSAgICAgICAgICAgICAgICAgICAgaGFz
RmFjZVZlcnRleFV2ID0gaXNCaXRTZXQoIHR5cGUsIDMgKTsKLSAgICAgICAgICAgICAgICAgICAg
aGFzRmFjZU5vcm1hbCA9IGlzQml0U2V0KCB0eXBlLCA0ICk7Ci0gICAgICAgICAgICAgICAgICAg
IGhhc0ZhY2VWZXJ0ZXhOb3JtYWwgPSBpc0JpdFNldCggdHlwZSwgNSApOwotICAgICAgICAgICAg
ICAgICAgICBoYXNGYWNlQ29sb3IgPSBpc0JpdFNldCggdHlwZSwgNiApOwotICAgICAgICAgICAg
ICAgICAgICBoYXNGYWNlVmVydGV4Q29sb3IgPSBpc0JpdFNldCggdHlwZSwgNyApOworICAgICAg
ICAgICAgdmFyIGFkZE5vbmVtcHR5VHJhY2sgPSBmdW5jdGlvbiAoIHRyYWNrVHlwZSwgdHJhY2tO
YW1lLCBhbmltYXRpb25LZXlzLCBwcm9wZXJ0eU5hbWUsIGRlc3RUcmFja3MgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coInR5cGUiLCB0eXBlLCAiYml0cyIsIGlzUXVh
ZCwgaGFzTWF0ZXJpYWwsIGhhc0ZhY2VWZXJ0ZXhVdiwgaGFzRmFjZU5vcm1hbCwgaGFzRmFjZVZl
cnRleE5vcm1hbCwgaGFzRmFjZUNvbG9yLCBoYXNGYWNlVmVydGV4Q29sb3IpOworICAgICAgICAg
ICAgICAgIC8vIG9ubHkgcmV0dXJuIHRyYWNrIGlmIHRoZXJlIGFyZSBhY3R1YWxseSBrZXlzLgor
ICAgICAgICAgICAgICAgIGlmICggYW5pbWF0aW9uS2V5cy5sZW5ndGggIT09IDAgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpc1F1YWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciB0aW1lcyA9IFtdOworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY2VBID0gbmV3IEZhY2UzKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmYWNlQS5hID0gZmFjZXNbIG9mZnNldCBdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZmFjZUEuYiA9IGZhY2VzWyBvZmZzZXQgKyAxIF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmYWNlQS5jID0gZmFjZXNbIG9mZnNldCArIDMgXTsKKyAgICAgICAgICAgICAgICAgICAg
QW5pbWF0aW9uVXRpbHMuZmxhdHRlbkpTT04oIGFuaW1hdGlvbktleXMsIHRpbWVzLCB2YWx1ZXMs
IHByb3BlcnR5TmFtZSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlQiA9IG5ldyBG
YWNlMygpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUIuYSA9IGZhY2VzWyBvZmZzZXQg
KyAxIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWNlQi5iID0gZmFjZXNbIG9mZnNldCAr
IDIgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VCLmMgPSBmYWNlc1sgb2Zmc2V0ICsg
MyBdOworICAgICAgICAgICAgICAgICAgICAvLyBlbXB0eSBrZXlzIGFyZSBmaWx0ZXJlZCBvdXQs
IHNvIGNoZWNrIGFnYWluCisgICAgICAgICAgICAgICAgICAgIGlmICggdGltZXMubGVuZ3RoICE9
PSAwICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RUcmFja3MucHVzaCggbmV3IHRyYWNrVHlwZSggdHJhY2tOYW1l
LCB0aW1lcywgdmFsdWVzICkgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYXNN
YXRlcmlhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWxJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWNlQS5tYXRlcmlhbEluZGV4ID0gbWF0ZXJpYWxJbmRleDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlQi5tYXRlcmlhbEluZGV4ID0gbWF0ZXJpYWxJ
bmRleDsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGdldCBmYWNlIDw9
PiB1diBpbmRleCBjb3JyZXNwb25kZW5jZQorICAgICAgICAgICAgdmFyIHRyYWNrcyA9IFtdOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaSA9IGdlb21ldHJ5LmZhY2VzLmxlbmd0aDsKKyAg
ICAgICAgICAgIHZhciBjbGlwTmFtZSA9IGFuaW1hdGlvbi5uYW1lIHx8ICdkZWZhdWx0JzsKKyAg
ICAgICAgICAgIC8vIGF1dG9tYXRpYyBsZW5ndGggZGV0ZXJtaW5hdGlvbiBpbiBBbmltYXRpb25D
bGlwLgorICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gYW5pbWF0aW9uLmxlbmd0aCB8fCAtIDE7
CisgICAgICAgICAgICB2YXIgZnBzID0gYW5pbWF0aW9uLmZwcyB8fCAzMDsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4VXYgKSB7CisgICAgICAgICAgICB2YXIg
aGllcmFyY2h5VHJhY2tzID0gYW5pbWF0aW9uLmhpZXJhcmNoeSB8fCBbXTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgblV2TGF5ZXJzOyBpICsrICkgewor
ICAgICAgICAgICAgZm9yICggdmFyIGggPSAwOyBoIDwgaGllcmFyY2h5VHJhY2tzLmxlbmd0aDsg
aCArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dkxheWVyID0ganNv
bi51dnNbIGkgXTsKKyAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uS2V5cyA9IGhpZXJhcmNo
eVRyYWNrc1sgaCBdLmtleXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vv
bWV0cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSBdID0gW107Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIGkgXVsgZmkgKyAxIF0gPSBbXTsK
KyAgICAgICAgICAgICAgICAvLyBza2lwIGVtcHR5IHRyYWNrcworICAgICAgICAgICAgICAgIGlm
ICggISBhbmltYXRpb25LZXlzIHx8IGFuaW1hdGlvbktleXMubGVuZ3RoID09PSAwICkgY29udGlu
dWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCA0
OyBqICsrICkgeworICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgbW9ycGggdGFyZ2V0cworICAg
ICAgICAgICAgICAgIGlmICggYW5pbWF0aW9uS2V5c1sgMCBdLm1vcnBoVGFyZ2V0cyApIHsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZJbmRleCA9IGZhY2VzWyBvZmZz
ZXQgKysgXTsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmlndXJlIG91dCBhbGwgbW9ycGggdGFy
Z2V0cyB1c2VkIGluIHRoaXMgdHJhY2sKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vcnBoVGFy
Z2V0TmFtZXMgPSB7fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9
IHV2TGF5ZXJbIHV2SW5kZXggKiAyIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ID0gdXZMYXllclsgdXZJbmRleCAqIDIgKyAxIF07CisgICAgICAgICAgICAgICAgICAg
IGZvciAoIHZhciBrID0gMDsgayA8IGFuaW1hdGlvbktleXMubGVuZ3RoOyBrICsrICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1diA9IG5ldyBWZWN0b3IyKCB1LCB2
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFuaW1hdGlvbktleXNbIGsgXS5tb3Jw
aFRhcmdldHMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aiAhPT0gMiApIGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIGkgXVsgZmkgXS5wdXNoKCB1diApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqICE9PSAwICkgZ2VvbWV0
cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSArIDEgXS5wdXNoKCB1diApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBtID0gMDsgbSA8IGFuaW1hdGlvbktleXNbIGsgXS5t
b3JwaFRhcmdldHMubGVuZ3RoOyBtICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXROYW1l
c1sgYW5pbWF0aW9uS2V5c1sgayBdLm1vcnBoVGFyZ2V0c1sgbSBdIF0gPSAtIDE7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlTm9ybWFsICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsSW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF0gKiAz
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUEubm9ybWFsLnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggKysgXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggKysgXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggXQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VCLm5vcm1hbC5jb3B5KCBmYWNlQS5ub3Jt
YWwgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgdHJhY2sgZm9yIGVhY2ggbW9y
cGggdGFyZ2V0IHdpdGggYWxsIHplcm8KKyAgICAgICAgICAgICAgICAgICAgLy8gbW9ycGhUYXJn
ZXRJbmZsdWVuY2VzIGV4Y2VwdCBmb3IgdGhlIGtleXMgaW4gd2hpY2gKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIG1vcnBoVGFyZ2V0IGlzIG5hbWVkLgorICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgbW9ycGhUYXJnZXROYW1lIGluIG1vcnBoVGFyZ2V0TmFtZXMgKSB7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcyA9
IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhOb3JtYWwgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB2YXIgbSA9IDA7IG0gIT09IGFuaW1hdGlvbktleXNbIGsgXS5t
b3JwaFRhcmdldHMubGVuZ3RoOyArKyBtICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCA0OyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBhbmltYXRpb25LZXkgPSBhbmltYXRpb25LZXlzWyBrIF07CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsSW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF0gKiAz
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzLnB1c2goIGFuaW1hdGlvbktleS50
aW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goICggYW5pbWF0
aW9uS2V5Lm1vcnBoVGFyZ2V0ID09PSBtb3JwaFRhcmdldE5hbWUgKSA/IDEgOiAwICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsID0gbmV3IFZlY3RvcjMoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCArKyBd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5k
ZXggKysgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5v
cm1hbEluZGV4IF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tzLnB1c2go
IG5ldyBOdW1iZXJLZXlmcmFtZVRyYWNrKCAnLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWycgKyBtb3Jw
aFRhcmdldE5hbWUgKyAnXScsIHRpbWVzLCB2YWx1ZXMgKSApOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaSAhPT0gMiApIGZhY2VBLnZlcnRleE5vcm1hbHMucHVzaCgg
bm9ybWFsICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaSAhPT0gMCAp
IGZhY2VCLnZlcnRleE5vcm1hbHMucHVzaCggbm9ybWFsICk7CisgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZHVyYXRpb24gPSBtb3JwaFRhcmdldE5hbWVzLmxlbmd0aCAqICggZnBzIHx8IDEuMCApOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAorICAg
ICAgICAgICAgICAgICAgICAvLyAuLi5hc3N1bWUgc2tlbGV0YWwgYW5pbWF0aW9uCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZUNvbG9yICkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgYm9uZU5hbWUgPSAnLmJvbmVzWycgKyBib25lc1sgaCBdLm5hbWUgKyAnXSc7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckluZGV4ID0gZmFjZXNbIG9mZnNldCAr
KyBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IGNvbG9yc1sgY29sb3JJbmRl
eCBdOworICAgICAgICAgICAgICAgICAgICBhZGROb25lbXB0eVRyYWNrKAorICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yS2V5ZnJhbWVUcmFjaywgYm9uZU5hbWUgKyAnLnBvc2l0aW9uJywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbktleXMsICdwb3MnLCB0cmFja3MgKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VBLmNvbG9yLnNldEhleCggaGV4ICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUIuY29sb3Iuc2V0SGV4KCBoZXggKTsK
KyAgICAgICAgICAgICAgICAgICAgYWRkTm9uZW1wdHlUcmFjaygKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrLCBib25lTmFtZSArICcucXVhdGVybmlvbics
CisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25LZXlzLCAncm90JywgdHJhY2tzICk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYWRkTm9u
ZW1wdHlUcmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcktleWZyYW1lVHJhY2ss
IGJvbmVOYW1lICsgJy5zY2FsZScsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25L
ZXlzLCAnc2NsJywgdHJhY2tzICk7CiAKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRleENvbG9yICkgeworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpICsrICkg
eworICAgICAgICAgICAgaWYgKCB0cmFja3MubGVuZ3RoID09PSAwICkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9ySW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IGNvbG9yc1sgY29sb3JJbmRleCBd
OworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaSAhPT0gMiApIGZhY2VBLnZlcnRleENvbG9ycy5wdXNoKCBuZXcgQ29s
b3IoIGhleCApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaSAhPT0g
MCApIGZhY2VCLnZlcnRleENvbG9ycy5wdXNoKCBuZXcgQ29sb3IoIGhleCApICk7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
Y2xpcCA9IG5ldyBBbmltYXRpb25DbGlwKCBjbGlwTmFtZSwgZHVyYXRpb24sIHRyYWNrcyApOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY2xpcDsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuZmFjZXMucHVzaCggZmFjZUEgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VzLnB1c2goIGZhY2VCICk7CisgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgIH0gKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgZmFjZSA9IG5ldyBGYWNlMygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZmFjZS5hID0gZmFjZXNbIG9mZnNldCArKyBdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZmFjZS5iID0gZmFjZXNbIG9mZnNldCArKyBdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZmFjZS5jID0gZmFjZXNbIG9mZnNldCArKyBdOworICAgIE9iamVjdC5hc3NpZ24oIEFuaW1hdGlv
bkNsaXAucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzTWF0
ZXJpYWwgKSB7CisgICAgICAgIHJlc2V0RHVyYXRpb246IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS5tYXRlcmlhbEluZGV4ID0gbWF0ZXJp
YWxJbmRleDsKKyAgICAgICAgICAgIHZhciB0cmFja3MgPSB0aGlzLnRyYWNrcywgZHVyYXRpb24g
PSAwOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIG4gPSB0cmFja3MubGVuZ3RoOyBpICE9PSBuOyArKyBpICkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0byBnZXQgZmFjZSA8PT4gdXYgaW5kZXggY29ycmVzcG9uZGVuY2UK
KyAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSB0aGlzLnRyYWNrc1sgaSBdOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmaSA9IGdlb21ldHJ5LmZhY2VzLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICBkdXJhdGlvbiA9IE1hdGgubWF4KCBkdXJhdGlvbiwgdHJhY2sudGltZXNbIHRyYWNrLnRp
bWVzLmxlbmd0aCAtIDEgXSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0Zh
Y2VWZXJ0ZXhVdiApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwOyBpIDwgblV2TGF5ZXJzOyBpICsrICkgeworICAgICAgICAgICAgdGhp
cy5kdXJhdGlvbiA9IGR1cmF0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHV2TGF5ZXIgPSBqc29uLnV2c1sgaSBdOworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIGkgXVsgZmkgXSA9IFtdOwor
ICAgICAgICB0cmltOiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggaiA9IDA7IGogPCAzOyBqICsrICkgeworICAgICAgICAgICAgZm9yICggdmFy
IGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpICsrICkgewogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1dkluZGV4ID0gZmFjZXNbIG9mZnNldCArKyBdOworICAg
ICAgICAgICAgICAgIHRoaXMudHJhY2tzWyBpIF0udHJpbSggMCwgdGhpcy5kdXJhdGlvbiApOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gdXZMYXllclsgdXZJbmRl
eCAqIDIgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB1dkxheWVy
WyB1dkluZGV4ICogMiArIDEgXTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXYgPSBuZXcgVmVjdG9yMiggdSwgdiApOworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21l
dHJ5LmZhY2VWZXJ0ZXhVdnNbIGkgXVsgZmkgXS5wdXNoKCB1diApOworICAgICAgICB9LAogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgb3B0aW1pemU6IGZ1bmN0
aW9uICgpIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMudHJhY2tzWyBpIF0ub3B0
aW1pemUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlTm9ybWFsICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsSW5k
ZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF0gKiAzOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLm5vcm1hbC5zZXQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4IF0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFj
ZVZlcnRleE5vcm1hbCApIHsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6
Ly9tcmRvb2IuY29tLworICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggaSA9IDA7IGkgPCAzOyBpICsrICkgeworICAgIGZ1bmN0aW9uIE1hdGVyaWFsTG9hZGVyKCBt
YW5hZ2VyICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbEluZGV4
ID0gZmFjZXNbIG9mZnNldCArKyBdICogMzsKKyAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5h
Z2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7Cisg
ICAgICAgIHRoaXMudGV4dHVyZXMgPSB7fTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub3JtYWwgPSBuZXcgVmVjdG9yMygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCArKyBdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggXQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWNlLnZlcnRleE5vcm1hbHMucHVzaCggbm9ybWFsICk7CisgICAgT2JqZWN0LmFz
c2lnbiggTWF0ZXJpYWxMb2FkZXIucHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jl
c3MsIG9uRXJyb3IgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBzY29wZSA9IHRoaXM7CiAKKyAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxv
YWRlciggc2NvcGUubWFuYWdlciApOworICAgICAgICAgICAgbG9hZGVyLmxvYWQoIHVybCwgZnVu
Y3Rpb24gKCB0ZXh0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VD
b2xvciApIHsKKyAgICAgICAgICAgICAgICBvbkxvYWQoIHNjb3BlLnBhcnNlKCBKU09OLnBhcnNl
KCB0ZXh0ICkgKSApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleCA9
IGZhY2VzWyBvZmZzZXQgKysgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLmNv
bG9yLnNldEhleCggY29sb3JzWyBjb2xvckluZGV4IF0gKTsKKyAgICAgICAgICAgIH0sIG9uUHJv
Z3Jlc3MsIG9uRXJyb3IgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9
LAogCisgICAgICAgIHNldFRleHR1cmVzOiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhDb2xvciApIHsKKyAgICAgICAgICAg
IHRoaXMudGV4dHVyZXMgPSB2YWx1ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBpIDwgMzsgaSArKyApIHsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2xvckluZGV4ID0gZmFjZXNbIG9mZnNldCArKyBdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLnZlcnRleENvbG9ycy5wdXNoKCBuZXcgQ29s
b3IoIGNvbG9yc1sgY29sb3JJbmRleCBdICkgKTsKKyAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICgg
anNvbiApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciB0ZXh0dXJlcyA9IHRoaXMudGV4dHVyZXM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZ1bmN0aW9uIGdldFRleHR1cmUoIG5hbWUgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VzLnB1c2goIGZhY2UgKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIHRleHR1cmVzWyBuYW1lIF0gPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk1hdGVy
aWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZScsIG5hbWUgKTsKIAogICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVNraW4oIGpz
b24sIGdlb21ldHJ5ICkgewotCi0gICAgICAgICAgICAgICAgdmFyIGluZmx1ZW5jZXNQZXJWZXJ0
ZXggPSAoIGpzb24uaW5mbHVlbmNlc1BlclZlcnRleCAhPT0gdW5kZWZpbmVkICkgPyBqc29uLmlu
Zmx1ZW5jZXNQZXJWZXJ0ZXggOiAyOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlc1sg
bmFtZSBdOwogCi0gICAgICAgICAgICAgICAgaWYgKCBqc29uLnNraW5XZWlnaHRzICkgeworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpz
b24uc2tpbldlaWdodHMubGVuZ3RoOyBpIDwgbDsgaSArPSBpbmZsdWVuY2VzUGVyVmVydGV4ICkg
eworICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsc1sganNvbi50eXBlIF0o
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBqc29uLnNraW5XZWlnaHRzWyBp
IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeSA9ICggaW5mbHVlbmNlc1BlclZlcnRl
eCA+IDEgKSA/IGpzb24uc2tpbldlaWdodHNbIGkgKyAxIF0gOiAwOwotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHogPSAoIGluZmx1ZW5jZXNQZXJWZXJ0ZXggPiAyICkgPyBqc29uLnNraW5X
ZWlnaHRzWyBpICsgMiBdIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gKCBp
bmZsdWVuY2VzUGVyVmVydGV4ID4gMyApID8ganNvbi5za2luV2VpZ2h0c1sgaSArIDMgXSA6IDA7
CisgICAgICAgICAgICBpZiAoIGpzb24udXVpZCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudXVp
ZCA9IGpzb24udXVpZDsKKyAgICAgICAgICAgIGlmICgganNvbi5uYW1lICE9PSB1bmRlZmluZWQg
KSBtYXRlcmlhbC5uYW1lID0ganNvbi5uYW1lOworICAgICAgICAgICAgaWYgKCBqc29uLmNvbG9y
ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5jb2xvci5zZXRIZXgoIGpzb24uY29sb3IgKTsKKyAg
ICAgICAgICAgIGlmICgganNvbi5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnJv
dWdobmVzcyA9IGpzb24ucm91Z2huZXNzOworICAgICAgICAgICAgaWYgKCBqc29uLm1ldGFsbmVz
cyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubWV0YWxuZXNzID0ganNvbi5tZXRhbG5lc3M7Cisg
ICAgICAgICAgICBpZiAoIGpzb24uZW1pc3NpdmUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmVt
aXNzaXZlLnNldEhleCgganNvbi5lbWlzc2l2ZSApOworICAgICAgICAgICAgaWYgKCBqc29uLnNw
ZWN1bGFyICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5zcGVjdWxhci5zZXRIZXgoIGpzb24uc3Bl
Y3VsYXIgKTsKKyAgICAgICAgICAgIGlmICgganNvbi5zaGluaW5lc3MgIT09IHVuZGVmaW5lZCAp
IG1hdGVyaWFsLnNoaW5pbmVzcyA9IGpzb24uc2hpbmluZXNzOworICAgICAgICAgICAgaWYgKCBq
c29uLmNsZWFyQ29hdCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuY2xlYXJDb2F0ID0ganNvbi5j
bGVhckNvYXQ7CisgICAgICAgICAgICBpZiAoIGpzb24uY2xlYXJDb2F0Um91Z2huZXNzICE9PSB1
bmRlZmluZWQgKSBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgPSBqc29uLmNsZWFyQ29hdFJv
dWdobmVzczsKKyAgICAgICAgICAgIGlmICgganNvbi51bmlmb3JtcyAhPT0gdW5kZWZpbmVkICkg
bWF0ZXJpYWwudW5pZm9ybXMgPSBqc29uLnVuaWZvcm1zOworICAgICAgICAgICAgaWYgKCBqc29u
LnZlcnRleFNoYWRlciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudmVydGV4U2hhZGVyID0ganNv
bi52ZXJ0ZXhTaGFkZXI7CisgICAgICAgICAgICBpZiAoIGpzb24uZnJhZ21lbnRTaGFkZXIgIT09
IHVuZGVmaW5lZCApIG1hdGVyaWFsLmZyYWdtZW50U2hhZGVyID0ganNvbi5mcmFnbWVudFNoYWRl
cjsKKyAgICAgICAgICAgIGlmICgganNvbi52ZXJ0ZXhDb2xvcnMgIT09IHVuZGVmaW5lZCApIG1h
dGVyaWFsLnZlcnRleENvbG9ycyA9IGpzb24udmVydGV4Q29sb3JzOworICAgICAgICAgICAgaWYg
KCBqc29uLmZvZyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZm9nID0ganNvbi5mb2c7CisgICAg
ICAgICAgICBpZiAoIGpzb24uZmxhdFNoYWRpbmcgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmZs
YXRTaGFkaW5nID0ganNvbi5mbGF0U2hhZGluZzsKKyAgICAgICAgICAgIGlmICgganNvbi5ibGVu
ZGluZyAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYmxlbmRpbmcgPSBqc29uLmJsZW5kaW5nOwor
ICAgICAgICAgICAgaWYgKCBqc29uLnNpZGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnNpZGUg
PSBqc29uLnNpZGU7CisgICAgICAgICAgICBpZiAoIGpzb24ub3BhY2l0eSAhPT0gdW5kZWZpbmVk
ICkgbWF0ZXJpYWwub3BhY2l0eSA9IGpzb24ub3BhY2l0eTsKKyAgICAgICAgICAgIGlmICgganNv
bi50cmFuc3BhcmVudCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBqc29u
LnRyYW5zcGFyZW50OworICAgICAgICAgICAgaWYgKCBqc29uLmFscGhhVGVzdCAhPT0gdW5kZWZp
bmVkICkgbWF0ZXJpYWwuYWxwaGFUZXN0ID0ganNvbi5hbHBoYVRlc3Q7CisgICAgICAgICAgICBp
ZiAoIGpzb24uZGVwdGhUZXN0ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kZXB0aFRlc3QgPSBq
c29uLmRlcHRoVGVzdDsKKyAgICAgICAgICAgIGlmICgganNvbi5kZXB0aFdyaXRlICE9PSB1bmRl
ZmluZWQgKSBtYXRlcmlhbC5kZXB0aFdyaXRlID0ganNvbi5kZXB0aFdyaXRlOworICAgICAgICAg
ICAgaWYgKCBqc29uLmNvbG9yV3JpdGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmNvbG9yV3Jp
dGUgPSBqc29uLmNvbG9yV3JpdGU7CisgICAgICAgICAgICBpZiAoIGpzb24ud2lyZWZyYW1lICE9
PSB1bmRlZmluZWQgKSBtYXRlcmlhbC53aXJlZnJhbWUgPSBqc29uLndpcmVmcmFtZTsKKyAgICAg
ICAgICAgIGlmICgganNvbi53aXJlZnJhbWVMaW5ld2lkdGggIT09IHVuZGVmaW5lZCApIG1hdGVy
aWFsLndpcmVmcmFtZUxpbmV3aWR0aCA9IGpzb24ud2lyZWZyYW1lTGluZXdpZHRoOworICAgICAg
ICAgICAgaWYgKCBqc29uLndpcmVmcmFtZUxpbmVjYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFs
LndpcmVmcmFtZUxpbmVjYXAgPSBqc29uLndpcmVmcmFtZUxpbmVjYXA7CisgICAgICAgICAgICBp
ZiAoIGpzb24ud2lyZWZyYW1lTGluZWpvaW4gIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLndpcmVm
cmFtZUxpbmVqb2luID0ganNvbi53aXJlZnJhbWVMaW5lam9pbjsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VvbWV0cnkuc2tpbldlaWdodHMucHVzaCggbmV3IFZlY3RvcjQoIHgsIHksIHos
IHcgKSApOworICAgICAgICAgICAgaWYgKCBqc29uLnJvdGF0aW9uICE9PSB1bmRlZmluZWQgKSBt
YXRlcmlhbC5yb3RhdGlvbiA9IGpzb24ucm90YXRpb247CiAKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCBqc29uLmxpbmV3aWR0aCAhPT0gMSApIG1hdGVyaWFsLmxpbmV3
aWR0aCA9IGpzb24ubGluZXdpZHRoOworICAgICAgICAgICAgaWYgKCBqc29uLmRhc2hTaXplICE9
PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kYXNoU2l6ZSA9IGpzb24uZGFzaFNpemU7CisgICAgICAg
ICAgICBpZiAoIGpzb24uZ2FwU2l6ZSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZ2FwU2l6ZSA9
IGpzb24uZ2FwU2l6ZTsKKyAgICAgICAgICAgIGlmICgganNvbi5zY2FsZSAhPT0gdW5kZWZpbmVk
ICkgbWF0ZXJpYWwuc2NhbGUgPSBqc29uLnNjYWxlOwogCi0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCBqc29uLnBvbHlnb25PZmZzZXQgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFs
LnBvbHlnb25PZmZzZXQgPSBqc29uLnBvbHlnb25PZmZzZXQ7CisgICAgICAgICAgICBpZiAoIGpz
b24ucG9seWdvbk9mZnNldEZhY3RvciAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucG9seWdvbk9m
ZnNldEZhY3RvciA9IGpzb24ucG9seWdvbk9mZnNldEZhY3RvcjsKKyAgICAgICAgICAgIGlmICgg
anNvbi5wb2x5Z29uT2Zmc2V0VW5pdHMgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnBvbHlnb25P
ZmZzZXRVbml0cyA9IGpzb24ucG9seWdvbk9mZnNldFVuaXRzOwogCi0gICAgICAgICAgICAgICAg
aWYgKCBqc29uLnNraW5JbmRpY2VzICkgeworICAgICAgICAgICAgaWYgKCBqc29uLnNraW5uaW5n
ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5za2lubmluZyA9IGpzb24uc2tpbm5pbmc7CisgICAg
ICAgICAgICBpZiAoIGpzb24ubW9ycGhUYXJnZXRzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5t
b3JwaFRhcmdldHMgPSBqc29uLm1vcnBoVGFyZ2V0czsKKyAgICAgICAgICAgIGlmICgganNvbi5k
aXRoZXJpbmcgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRpdGhlcmluZyA9IGpzb24uZGl0aGVy
aW5nOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGpzb24uc2tp
bkluZGljZXMubGVuZ3RoOyBpIDwgbDsgaSArPSBpbmZsdWVuY2VzUGVyVmVydGV4ICkgeworICAg
ICAgICAgICAgaWYgKCBqc29uLnZpc2libGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLnZpc2li
bGUgPSBqc29uLnZpc2libGU7CisgICAgICAgICAgICBpZiAoIGpzb24udXNlckRhdGEgIT09IHVu
ZGVmaW5lZCApIG1hdGVyaWFsLnVzZXJEYXRhID0ganNvbi51c2VyRGF0YTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGEgPSBqc29uLnNraW5JbmRpY2VzWyBpIF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgYiA9ICggaW5mbHVlbmNlc1BlclZlcnRleCA+IDEgKSA/IGpzb24u
c2tpbkluZGljZXNbIGkgKyAxIF0gOiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMg
PSAoIGluZmx1ZW5jZXNQZXJWZXJ0ZXggPiAyICkgPyBqc29uLnNraW5JbmRpY2VzWyBpICsgMiBd
IDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gKCBpbmZsdWVuY2VzUGVyVmVy
dGV4ID4gMyApID8ganNvbi5za2luSW5kaWNlc1sgaSArIDMgXSA6IDA7CisgICAgICAgICAgICAv
LyBEZXByZWNhdGVkCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LnNraW5JbmRp
Y2VzLnB1c2goIG5ldyBWZWN0b3I0KCBhLCBiLCBjLCBkICkgKTsKKyAgICAgICAgICAgIGlmICgg
anNvbi5zaGFkaW5nICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5mbGF0U2hhZGluZyA9IGpzb24u
c2hhZGluZyA9PT0gMTsgLy8gVEhSRUUuRmxhdFNoYWRpbmcKIAotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBmb3IgUG9pbnRzTWF0ZXJpYWwKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICgganNvbi5zaXplICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5z
aXplID0ganNvbi5zaXplOworICAgICAgICAgICAgaWYgKCBqc29uLnNpemVBdHRlbnVhdGlvbiAh
PT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uID0ganNvbi5zaXplQXR0ZW51
YXRpb247CiAKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib25lcyA9IGpzb24uYm9uZXM7Cisg
ICAgICAgICAgICAvLyBtYXBzCiAKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvbmVz
ICYmIGdlb21ldHJ5LmJvbmVzLmxlbmd0aCA+IDAgJiYgKCBnZW9tZXRyeS5za2luV2VpZ2h0cy5s
ZW5ndGggIT09IGdlb21ldHJ5LnNraW5JbmRpY2VzLmxlbmd0aCB8fCBnZW9tZXRyeS5za2luSW5k
aWNlcy5sZW5ndGggIT09IGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCApICkgeworICAgICAgICAg
ICAgaWYgKCBqc29uLm1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubWFwID0gZ2V0VGV4dHVy
ZSgganNvbi5tYXAgKTsKIAotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdXaGVu
IHNraW5uaW5nLCBudW1iZXIgb2YgdmVydGljZXMgKCcgKyBnZW9tZXRyeS52ZXJ0aWNlcy5sZW5n
dGggKyAnKSwgc2tpbkluZGljZXMgKCcgKwotICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0
cnkuc2tpbkluZGljZXMubGVuZ3RoICsgJyksIGFuZCBza2luV2VpZ2h0cyAoJyArIGdlb21ldHJ5
LnNraW5XZWlnaHRzLmxlbmd0aCArICcpIHNob3VsZCBtYXRjaC4nICk7CisgICAgICAgICAgICBp
ZiAoIGpzb24uYWxwaGFNYXAgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtYXRlcmlhbC5hbHBoYU1hcCA9IGdldFRleHR1cmUoIGpzb24uYWxw
aGFNYXAgKTsKKyAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7CiAK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VNb3JwaGluZygganNv
biwgZ2VvbWV0cnkgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBqc29uLnNjYWxl
OworICAgICAgICAgICAgaWYgKCBqc29uLmJ1bXBNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFs
LmJ1bXBNYXAgPSBnZXRUZXh0dXJlKCBqc29uLmJ1bXBNYXAgKTsKKyAgICAgICAgICAgIGlmICgg
anNvbi5idW1wU2NhbGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmJ1bXBTY2FsZSA9IGpzb24u
YnVtcFNjYWxlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBqc29uLm1vcnBoVGFyZ2V0cyAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCBqc29uLm5vcm1hbE1hcCAhPT0gdW5kZWZp
bmVkICkgbWF0ZXJpYWwubm9ybWFsTWFwID0gZ2V0VGV4dHVyZSgganNvbi5ub3JtYWxNYXAgKTsK
KyAgICAgICAgICAgIGlmICgganNvbi5ub3JtYWxNYXBUeXBlICE9PSB1bmRlZmluZWQgKSBtYXRl
cmlhbC5ub3JtYWxNYXBUeXBlID0ganNvbi5ub3JtYWxNYXBUeXBlOworICAgICAgICAgICAgaWYg
KCBqc29uLm5vcm1hbFNjYWxlICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5tb3JwaFRhcmdldHMubGVuZ3RoOyBpIDwgbDsg
aSArKyApIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9ybWFsU2NhbGUgPSBqc29uLm5vcm1hbFNj
YWxlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5tb3JwaFRhcmdldHNbIGkg
XSA9IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkubW9ycGhUYXJnZXRzWyBp
IF0ubmFtZSA9IGpzb24ubW9ycGhUYXJnZXRzWyBpIF0ubmFtZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1sgaSBdLnZlcnRpY2VzID0gW107CisgICAgICAg
ICAgICAgICAgaWYgKCBBcnJheS5pc0FycmF5KCBub3JtYWxTY2FsZSApID09PSBmYWxzZSApIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRzdFZlcnRpY2VzID0gZ2VvbWV0cnkubW9y
cGhUYXJnZXRzWyBpIF0udmVydGljZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Jj
VmVydGljZXMgPSBqc29uLm1vcnBoVGFyZ2V0c1sgaSBdLnZlcnRpY2VzOworICAgICAgICAgICAg
ICAgICAgICAvLyBCbGVuZGVyIGV4cG9ydGVyIHVzZWQgdG8gZXhwb3J0IGEgc2NhbGFyLiBTZWUg
Izc0NTkKIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIHYgPSAwLCB2bCA9IHNy
Y1ZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICs9IDMgKSB7CisgICAgICAgICAgICAgICAgICAg
IG5vcm1hbFNjYWxlID0gWyBub3JtYWxTY2FsZSwgbm9ybWFsU2NhbGUgXTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlcnRleC54ID0gc3JjVmVydGljZXNbIHYgXSAqIHNjYWxlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleC55ID0gc3JjVmVydGljZXNbIHYgKyAx
IF0gKiBzY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9IHNyY1Zl
cnRpY2VzWyB2ICsgMiBdICogc2NhbGU7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZHN0VmVydGljZXMucHVzaCggdmVydGV4ICk7CisgICAgICAgICAg
ICAgICAgbWF0ZXJpYWwubm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigpLmZyb21BcnJheSggbm9y
bWFsU2NhbGUgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgganNvbi5kaXNwbGFjZW1l
bnRNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRpc3BsYWNlbWVudE1hcCA9IGdldFRleHR1
cmUoIGpzb24uZGlzcGxhY2VtZW50TWFwICk7CisgICAgICAgICAgICBpZiAoIGpzb24uZGlzcGxh
Y2VtZW50U2NhbGUgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmRpc3BsYWNlbWVudFNjYWxlID0g
anNvbi5kaXNwbGFjZW1lbnRTY2FsZTsKKyAgICAgICAgICAgIGlmICgganNvbi5kaXNwbGFjZW1l
bnRCaWFzICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5kaXNwbGFjZW1lbnRCaWFzID0ganNvbi5k
aXNwbGFjZW1lbnRCaWFzOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBq
c29uLnJvdWdobmVzc01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwucm91Z2huZXNzTWFwID0g
Z2V0VGV4dHVyZSgganNvbi5yb3VnaG5lc3NNYXAgKTsKKyAgICAgICAgICAgIGlmICgganNvbi5t
ZXRhbG5lc3NNYXAgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLm1ldGFsbmVzc01hcCA9IGdldFRl
eHR1cmUoIGpzb24ubWV0YWxuZXNzTWFwICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGpzb24u
bW9ycGhDb2xvcnMgIT09IHVuZGVmaW5lZCAmJiBqc29uLm1vcnBoQ29sb3JzLmxlbmd0aCA+IDAg
KSB7CisgICAgICAgICAgICBpZiAoIGpzb24uZW1pc3NpdmVNYXAgIT09IHVuZGVmaW5lZCApIG1h
dGVyaWFsLmVtaXNzaXZlTWFwID0gZ2V0VGV4dHVyZSgganNvbi5lbWlzc2l2ZU1hcCApOworICAg
ICAgICAgICAgaWYgKCBqc29uLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQgKSBtYXRl
cmlhbC5lbWlzc2l2ZUludGVuc2l0eSA9IGpzb24uZW1pc3NpdmVJbnRlbnNpdHk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuSlNPTkxvYWRlcjogIm1vcnBoQ29s
b3JzIiBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2luZyB0aGVtIGFzIGZhY2UgY29sb3JzLicgKTsK
KyAgICAgICAgICAgIGlmICgganNvbi5zcGVjdWxhck1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJp
YWwuc3BlY3VsYXJNYXAgPSBnZXRUZXh0dXJlKCBqc29uLnNwZWN1bGFyTWFwICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGZhY2VzID0gZ2VvbWV0cnkuZmFjZXM7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBtb3JwaENvbG9ycyA9IGpzb24ubW9ycGhDb2xvcnNbIDAgXS5jb2xvcnM7Cisg
ICAgICAgICAgICBpZiAoIGpzb24uZW52TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5lbnZN
YXAgPSBnZXRUZXh0dXJlKCBqc29uLmVudk1hcCApOwogCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IGZhY2VzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAg
ICAgICBpZiAoIGpzb24ucmVmbGVjdGl2aXR5ICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5yZWZs
ZWN0aXZpdHkgPSBqc29uLnJlZmxlY3Rpdml0eTsKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ZmFjZXNbIGkgXS5jb2xvci5mcm9tQXJyYXkoIG1vcnBoQ29sb3JzLCBpICogMyApOworICAgICAg
ICAgICAgaWYgKCBqc29uLmxpZ2h0TWFwICE9PSB1bmRlZmluZWQgKSBtYXRlcmlhbC5saWdodE1h
cCA9IGdldFRleHR1cmUoIGpzb24ubGlnaHRNYXAgKTsKKyAgICAgICAgICAgIGlmICgganNvbi5s
aWdodE1hcEludGVuc2l0eSAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwubGlnaHRNYXBJbnRlbnNp
dHkgPSBqc29uLmxpZ2h0TWFwSW50ZW5zaXR5OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICgganNvbi5hb01hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuYW9NYXAg
PSBnZXRUZXh0dXJlKCBqc29uLmFvTWFwICk7CisgICAgICAgICAgICBpZiAoIGpzb24uYW9NYXBJ
bnRlbnNpdHkgIT09IHVuZGVmaW5lZCApIG1hdGVyaWFsLmFvTWFwSW50ZW5zaXR5ID0ganNvbi5h
b01hcEludGVuc2l0eTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgganNv
bi5ncmFkaWVudE1hcCAhPT0gdW5kZWZpbmVkICkgbWF0ZXJpYWwuZ3JhZGllbnRNYXAgPSBnZXRU
ZXh0dXJlKCBqc29uLmdyYWRpZW50TWFwICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBtYXRlcmlhbDsKIAotICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VBbmltYXRpb25z
KCBqc29uLCBnZW9tZXRyeSApIHsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIG91
dHB1dEFuaW1hdGlvbnMgPSBbXTsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAvLyBwYXJz
ZSBvbGQgc3R5bGUgQm9uZS9IaWVyYXJjaHkgYW5pbWF0aW9ucwotICAgICAgICAgICAgICAgIHZh
ciBhbmltYXRpb25zID0gW107CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KKyAgICAgKi8KIAotICAgICAgICAgICAgICAgIGlmICgganNvbi5hbmlt
YXRpb24gIT09IHVuZGVmaW5lZCApIHsKKyAgICBmdW5jdGlvbiBCdWZmZXJHZW9tZXRyeUxvYWRl
ciggbWFuYWdlciApIHsKIAotICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25zLnB1c2goIGpz
b24uYW5pbWF0aW9uICk7CisgICAgICAgIHRoaXMubWFuYWdlciA9ICggbWFuYWdlciAhPT0gdW5k
ZWZpbmVkICkgPyBtYW5hZ2VyIDogRGVmYXVsdExvYWRpbmdNYW5hZ2VyOwogCi0gICAgICAgICAg
ICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICgganNvbi5hbmltYXRpb25zICE9
PSB1bmRlZmluZWQgKSB7CisgICAgT2JqZWN0LmFzc2lnbiggQnVmZmVyR2VvbWV0cnlMb2FkZXIu
cHJvdG90eXBlLCB7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBqc29uLmFuaW1hdGlvbnMu
bGVuZ3RoICkgeworICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dy
ZXNzLCBvbkVycm9yICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25zID0g
YW5pbWF0aW9ucy5jb25jYXQoIGpzb24uYW5pbWF0aW9ucyApOworICAgICAgICAgICAgdmFyIHNj
b3BlID0gdGhpczsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7CisgICAgICAgICAg
ICBsb2FkZXIubG9hZCggdXJsLCBmdW5jdGlvbiAoIHRleHQgKSB7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFuaW1hdGlvbnMucHVzaCgganNvbi5hbmltYXRpb25zICk7CisgICAgICAgICAg
ICAgICAgb25Mb2FkKCBzY29wZS5wYXJzZSggSlNPTi5wYXJzZSggdGV4dCApICkgKTsKIAotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7
CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAgcGFy
c2U6IGZ1bmN0aW9uICgganNvbiApIHsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcCA9
IEFuaW1hdGlvbkNsaXAucGFyc2VBbmltYXRpb24oIGFuaW1hdGlvbnNbIGkgXSwgZ2VvbWV0cnku
Ym9uZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjbGlwICkgb3V0cHV0QW5pbWF0aW9u
cy5wdXNoKCBjbGlwICk7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2Vv
bWV0cnkoKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBpbmRleCA9IGpz
b24uZGF0YS5pbmRleDsKIAotICAgICAgICAgICAgICAgIC8vIHBhcnNlIGltcGxpY2l0IG1vcnBo
IGFuaW1hdGlvbnMKLSAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cyAp
IHsKKyAgICAgICAgICAgIGlmICggaW5kZXggIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAg
ICAgICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgYW4gYXBwcm9wcmFpdGUgRlBTIGlz
IGZvciBtb3JwaCB0YXJnZXQgYW5pbWF0aW9ucyAtLSBkZWZhdWx0aW5nIHRvIDEwLCBidXQgcmVh
bGx5IGl0IGlzIGNvbXBsZXRlbHkgYXJiaXRyYXJ5LgotICAgICAgICAgICAgICAgICAgICB2YXIg
bW9ycGhBbmltYXRpb25DbGlwcyA9IEFuaW1hdGlvbkNsaXAuQ3JlYXRlQ2xpcHNGcm9tTW9ycGhU
YXJnZXRTZXF1ZW5jZXMoIGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cywgMTAgKTsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0QW5pbWF0aW9ucyA9IG91dHB1dEFuaW1hdGlvbnMuY29uY2F0KCBtb3Jw
aEFuaW1hdGlvbkNsaXBzICk7CisgICAgICAgICAgICAgICAgdmFyIHR5cGVkQXJyYXkgPSBuZXcg
VFlQRURfQVJSQVlTWyBpbmRleC50eXBlIF0oIGluZGV4LmFycmF5ICk7CisgICAgICAgICAgICAg
ICAgZ2VvbWV0cnkuc2V0SW5kZXgoIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHR5cGVkQXJyYXksIDEg
KSApOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKCBvdXRwdXRBbmltYXRpb25zLmxlbmd0aCA+IDAgKSBnZW9tZXRyeS5hbmltYXRpb25z
ID0gb3V0cHV0QW5pbWF0aW9uczsKKyAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0ganNvbi5k
YXRhLmF0dHJpYnV0ZXM7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIHZhciBr
ZXkgaW4gYXR0cmlidXRlcyApIHsKIAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgganNv
biwgdGV4dHVyZVBhdGggKSB7CisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGF0dHJp
YnV0ZXNbIGtleSBdOworICAgICAgICAgICAgICAgIHZhciB0eXBlZEFycmF5ID0gbmV3IFRZUEVE
X0FSUkFZU1sgYXR0cmlidXRlLnR5cGUgXSggYXR0cmlidXRlLmFycmF5ICk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIGpzb24uZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
IGdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgga2V5LCBuZXcgQnVmZmVyQXR0cmlidXRlKCB0eXBlZEFy
cmF5LCBhdHRyaWJ1dGUuaXRlbVNpemUsIGF0dHJpYnV0ZS5ub3JtYWxpemVkICkgKTsKIAotICAg
ICAgICAgICAgICAgICAgICAvLyBHZW9tZXRyeSA0LjAgc3BlYwotICAgICAgICAgICAgICAgICAg
ICBqc29uID0ganNvbi5kYXRhOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFyIGdyb3VwcyA9IGpzb24uZGF0YS5ncm91cHMgfHwganNvbi5kYXRhLmRy
YXdjYWxscyB8fCBqc29uLmRhdGEub2Zmc2V0czsKIAotICAgICAgICAgICAgICAgIGlmICgganNv
bi5zY2FsZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCBncm91cHMgIT09IHVu
ZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICBqc29uLnNjYWxlID0gMS4wIC8ganNv
bi5zY2FsZTsKKyAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIG4gPSBncm91cHMubGVu
Z3RoOyBpICE9PSBuOyArKyBpICkgewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzWyBpIF07CiAKLSAgICAgICAgICAgICAg
ICAgICAganNvbi5zY2FsZSA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYWRk
R3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApOwog
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3
IEdlb21ldHJ5KCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwYXJzZU1vZGVs
KCBqc29uLCBnZW9tZXRyeSApOwotICAgICAgICAgICAgICAgIHBhcnNlU2tpbigganNvbiwgZ2Vv
bWV0cnkgKTsKLSAgICAgICAgICAgICAgICBwYXJzZU1vcnBoaW5nKCBqc29uLCBnZW9tZXRyeSAp
OwotICAgICAgICAgICAgICAgIHBhcnNlQW5pbWF0aW9ucygganNvbiwgZ2VvbWV0cnkgKTsKKyAg
ICAgICAgICAgIHZhciBib3VuZGluZ1NwaGVyZSA9IGpzb24uZGF0YS5ib3VuZGluZ1NwaGVyZTsK
IAotICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNvbXB1dGVGYWNlTm9ybWFscygpOwotICAgICAg
ICAgICAgICAgIGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOworICAgICAgICAgICAg
aWYgKCBib3VuZGluZ1NwaGVyZSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAg
aWYgKCBqc29uLm1hdGVyaWFscyA9PT0gdW5kZWZpbmVkIHx8IGpzb24ubWF0ZXJpYWxzLmxlbmd0
aCA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2VudGVyID0gbmV3IFZlY3RvcjMoKTsK
IAotICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBnZW9tZXRyeTogZ2VvbWV0cnkgfTsKKyAg
ICAgICAgICAgICAgICBpZiAoIGJvdW5kaW5nU3BoZXJlLmNlbnRlciAhPT0gdW5kZWZpbmVkICkg
ewogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2VudGVy
LmZyb21BcnJheSggYm91bmRpbmdTcGhlcmUuY2VudGVyICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG1hdGVyaWFscyA9IExvYWRlci5wcm90b3R5cGUuaW5pdE1hdGVyaWFscygganNvbi5t
YXRlcmlhbHMsIHRleHR1cmVQYXRoLCB0aGlzLmNyb3NzT3JpZ2luICk7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGdlb21ldHJ5OiBnZW9tZXRyeSwg
bWF0ZXJpYWxzOiBtYXRlcmlhbHMgfTsKKyAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGlu
Z1NwaGVyZSA9IG5ldyBTcGhlcmUoIGNlbnRlciwgYm91bmRpbmdTcGhlcmUucmFkaXVzICk7CiAK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH07CisgICAg
ICAgICAgICByZXR1cm4gZ2VvbWV0cnk7CiAKLSAgICAgICAgfSApKCkKKyAgICAgICAgfQogCiAg
ICAgfSApOwogCisgICAgdmFyIFRZUEVEX0FSUkFZUyA9IHsKKyAgICAgICAgSW50OEFycmF5OiBJ
bnQ4QXJyYXksCisgICAgICAgIFVpbnQ4QXJyYXk6IFVpbnQ4QXJyYXksCisgICAgICAgIC8vIFdv
cmthcm91bmQgZm9yIElFMTEgcHJlIEtCMjkyOTQzNy4gU2VlICMxMTQ0MAorICAgICAgICBVaW50
OENsYW1wZWRBcnJheTogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyA/
IFVpbnQ4Q2xhbXBlZEFycmF5IDogVWludDhBcnJheSwKKyAgICAgICAgSW50MTZBcnJheTogSW50
MTZBcnJheSwKKyAgICAgICAgVWludDE2QXJyYXk6IFVpbnQxNkFycmF5LAorICAgICAgICBJbnQz
MkFycmF5OiBJbnQzMkFycmF5LAorICAgICAgICBVaW50MzJBcnJheTogVWludDMyQXJyYXksCisg
ICAgICAgIEZsb2F0MzJBcnJheTogRmxvYXQzMkFycmF5LAorICAgICAgICBGbG9hdDY0QXJyYXk6
IEZsb2F0NjRBcnJheQorICAgIH07CisKICAgICAvKioKLSAgICAgKiBAYXV0aG9yIG1yZG9vYiAv
IGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0
ZXJlZHF1YWxpYS5jb20vCiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBPYmplY3RMb2FkZXIoIG1h
bmFnZXIgKSB7Ci0KLSAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBtYW5hZ2VyICE9PSB1bmRlZmlu
ZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7Ci0gICAgICAgIHRoaXMudGV4
dHVyZVBhdGggPSAnJzsKLQotICAgIH0KKyAgICBmdW5jdGlvbiBMb2FkZXIoKSB7fQogCi0gICAg
T2JqZWN0LmFzc2lnbiggT2JqZWN0TG9hZGVyLnByb3RvdHlwZSwgeworICAgIExvYWRlci5IYW5k
bGVycyA9IHsKIAotICAgICAgICBsb2FkOiBmdW5jdGlvbiAoIHVybCwgb25Mb2FkLCBvblByb2dy
ZXNzLCBvbkVycm9yICkgeworICAgICAgICBoYW5kbGVyczogW10sCiAKLSAgICAgICAgICAgIGlm
ICggdGhpcy50ZXh0dXJlUGF0aCA9PT0gJycgKSB7CisgICAgICAgIGFkZDogZnVuY3Rpb24gKCBy
ZWdleCwgbG9hZGVyICkgewogCi0gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlUGF0aCA9IHVy
bC5zdWJzdHJpbmcoIDAsIHVybC5sYXN0SW5kZXhPZiggJy8nICkgKyAxICk7CisgICAgICAgICAg
ICB0aGlzLmhhbmRsZXJzLnB1c2goIHJlZ2V4LCBsb2FkZXIgKTsKIAotICAgICAgICAgICAgfQor
ICAgICAgICB9LAogCi0gICAgICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOworICAgICAgICBnZXQ6
IGZ1bmN0aW9uICggZmlsZSApIHsKIAotICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBGaWxl
TG9hZGVyKCBzY29wZS5tYW5hZ2VyICk7Ci0gICAgICAgICAgICBsb2FkZXIubG9hZCggdXJsLCBm
dW5jdGlvbiAoIHRleHQgKSB7CisgICAgICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRs
ZXJzOwogCi0gICAgICAgICAgICAgICAgdmFyIGpzb24gPSBudWxsOworICAgICAgICAgICAgZm9y
ICggdmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyICkgewogCi0g
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSBoYW5kbGVy
c1sgaSBdOworICAgICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBoYW5kbGVyc1sgaSArIDEgXTsK
IAotICAgICAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZSggdGV4dCApOworICAgICAg
ICAgICAgICAgIGlmICggcmVnZXgudGVzdCggZmlsZSApICkgewogCi0gICAgICAgICAgICAgICAg
fSBjYXRjaCAoIGVycm9yICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyOwog
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggb25FcnJvciAhPT0gdW5kZWZpbmVkICkgb25FcnJv
ciggZXJyb3IgKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgY29u
c29sZS5lcnJvciggJ1RIUkVFOk9iamVjdExvYWRlcjogQ2FuXCd0IHBhcnNlICcgKyB1cmwgKyAn
LicsIGVycm9yLm1lc3NhZ2UgKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhID0ganNvbi5tZXRhZGF0
YTsKKyAgICB9OwogCi0gICAgICAgICAgICAgICAgaWYgKCBtZXRhZGF0YSA9PT0gdW5kZWZpbmVk
IHx8IG1ldGFkYXRhLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlLnRvTG93ZXJD
YXNlKCkgPT09ICdnZW9tZXRyeScgKSB7CisgICAgT2JqZWN0LmFzc2lnbiggTG9hZGVyLnByb3Rv
dHlwZSwgewogCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5PYmpl
Y3RMb2FkZXI6IENhblwndCBsb2FkICcgKyB1cmwgKyAnLiBVc2UgVEhSRUUuSlNPTkxvYWRlciBp
bnN0ZWFkLicgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjcm9zc09y
aWdpbjogJ2Fub255bW91cycsCiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIG9uTG9hZFN0
YXJ0OiBmdW5jdGlvbiAoKSB7fSwKIAotICAgICAgICAgICAgICAgIHNjb3BlLnBhcnNlKCBqc29u
LCBvbkxvYWQgKTsKKyAgICAgICAgb25Mb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHt9LAogCi0g
ICAgICAgICAgICB9LCBvblByb2dyZXNzLCBvbkVycm9yICk7CisgICAgICAgIG9uTG9hZENvbXBs
ZXRlOiBmdW5jdGlvbiAoKSB7fSwKIAotICAgICAgICB9LAorICAgICAgICBpbml0TWF0ZXJpYWxz
OiBmdW5jdGlvbiAoIG1hdGVyaWFscywgdGV4dHVyZVBhdGgsIGNyb3NzT3JpZ2luICkgewogCi0g
ICAgICAgIHNldFRleHR1cmVQYXRoOiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAg
dmFyIGFycmF5ID0gW107CiAKLSAgICAgICAgICAgIHRoaXMudGV4dHVyZVBhdGggPSB2YWx1ZTsK
KyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG1hdGVyaWFscy5sZW5ndGg7ICsrIGkg
KSB7CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBhcnJheVsgaSBdID0gdGhpcy5jcmVh
dGVNYXRlcmlhbCggbWF0ZXJpYWxzWyBpIF0sIHRleHR1cmVQYXRoLCBjcm9zc09yaWdpbiApOwog
Ci0gICAgICAgIHNldENyb3NzT3JpZ2luOiBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB0aGlzLmNyb3NzT3JpZ2luID0gdmFsdWU7CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CiAKICAgICAgICAgfSwKIAotICAgICAgICBwYXJzZTogZnVuY3Rpb24g
KCBqc29uLCBvbkxvYWQgKSB7CisgICAgICAgIGNyZWF0ZU1hdGVyaWFsOiAoIGZ1bmN0aW9uICgp
IHsKIAotICAgICAgICAgICAgdmFyIGdlb21ldHJpZXMgPSB0aGlzLnBhcnNlR2VvbWV0cmllcygg
anNvbi5nZW9tZXRyaWVzICk7CisgICAgICAgICAgICB2YXIgQmxlbmRpbmdNb2RlID0geworICAg
ICAgICAgICAgICAgIE5vQmxlbmRpbmc6IE5vQmxlbmRpbmcsCisgICAgICAgICAgICAgICAgTm9y
bWFsQmxlbmRpbmc6IE5vcm1hbEJsZW5kaW5nLAorICAgICAgICAgICAgICAgIEFkZGl0aXZlQmxl
bmRpbmc6IEFkZGl0aXZlQmxlbmRpbmcsCisgICAgICAgICAgICAgICAgU3VidHJhY3RpdmVCbGVu
ZGluZzogU3VidHJhY3RpdmVCbGVuZGluZywKKyAgICAgICAgICAgICAgICBNdWx0aXBseUJsZW5k
aW5nOiBNdWx0aXBseUJsZW5kaW5nLAorICAgICAgICAgICAgICAgIEN1c3RvbUJsZW5kaW5nOiBD
dXN0b21CbGVuZGluZworICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgdmFyIGltYWdlcyA9
IHRoaXMucGFyc2VJbWFnZXMoIGpzb24uaW1hZ2VzLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB2YXIgY29sb3IgPSBuZXcgQ29sb3IoKTsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlTG9hZGVy
ID0gbmV3IFRleHR1cmVMb2FkZXIoKTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbExvYWRlciA9
IG5ldyBNYXRlcmlhbExvYWRlcigpOwogCi0gICAgICAgICAgICAgICAgaWYgKCBvbkxvYWQgIT09
IHVuZGVmaW5lZCApIG9uTG9hZCggb2JqZWN0ICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24gY3JlYXRlTWF0ZXJpYWwoIG0sIHRleHR1cmVQYXRoLCBjcm9zc09yaWdpbiApIHsKIAotICAg
ICAgICAgICAgfSApOworICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBvbGQgbWF0ZXJp
YWwgZm9ybWF0CiAKLSAgICAgICAgICAgIHZhciB0ZXh0dXJlcyA9IHRoaXMucGFyc2VUZXh0dXJl
cygganNvbi50ZXh0dXJlcywgaW1hZ2VzICk7Ci0gICAgICAgICAgICB2YXIgbWF0ZXJpYWxzID0g
dGhpcy5wYXJzZU1hdGVyaWFscygganNvbi5tYXRlcmlhbHMsIHRleHR1cmVzICk7CisgICAgICAg
ICAgICAgICAgdmFyIHRleHR1cmVzID0ge307CiAKLSAgICAgICAgICAgIHZhciBvYmplY3QgPSB0
aGlzLnBhcnNlT2JqZWN0KCBqc29uLm9iamVjdCwgZ2VvbWV0cmllcywgbWF0ZXJpYWxzICk7Cisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9hZFRleHR1cmUoIHBhdGgsIHJlcGVhdCwgb2Zmc2V0
LCB3cmFwLCBhbmlzb3Ryb3B5ICkgewogCi0gICAgICAgICAgICBpZiAoIGpzb24uYW5pbWF0aW9u
cyApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxQYXRoID0gdGV4dHVyZVBhdGggKyBw
YXRoOworICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZGVyID0gTG9hZGVyLkhhbmRsZXJzLmdl
dCggZnVsbFBhdGggKTsKIAotICAgICAgICAgICAgICAgIG9iamVjdC5hbmltYXRpb25zID0gdGhp
cy5wYXJzZUFuaW1hdGlvbnMoIGpzb24uYW5pbWF0aW9ucyApOworICAgICAgICAgICAgICAgICAg
ICB2YXIgdGV4dHVyZTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
IGxvYWRlciAhPT0gbnVsbCApIHsKIAotICAgICAgICAgICAgaWYgKCBqc29uLmltYWdlcyA9PT0g
dW5kZWZpbmVkIHx8IGpzb24uaW1hZ2VzLmxlbmd0aCA9PT0gMCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSBsb2FkZXIubG9hZCggZnVsbFBhdGggKTsKIAotICAgICAgICAg
ICAgICAgIGlmICggb25Mb2FkICE9PSB1bmRlZmluZWQgKSBvbkxvYWQoIG9iamVjdCApOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlTG9hZGVyLnNldENyb3NzT3JpZ2luKCBjcm9zc09yaWdpbiApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVMb2FkZXIubG9hZCggZnVs
bFBhdGggKTsKIAotICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGlmICggcmVwZWF0ICE9PSB1
bmRlZmluZWQgKSB7CiAKLSAgICAgICAgcGFyc2VHZW9tZXRyaWVzOiBmdW5jdGlvbiAoIGpzb24g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnJlcGVhdC5mcm9tQXJyYXkoIHJl
cGVhdCApOwogCi0gICAgICAgICAgICB2YXIgZ2VvbWV0cmllcyA9IHt9OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCByZXBlYXRbIDAgXSAhPT0gMSApIHRleHR1cmUud3JhcFMgPSBSZXBl
YXRXcmFwcGluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVwZWF0WyAxIF0gIT09
IDEgKSB0ZXh0dXJlLndyYXBUID0gUmVwZWF0V3JhcHBpbmc7CiAKLSAgICAgICAgICAgIGlmICgg
anNvbiAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB2YXIgZ2VvbWV0cnlMb2FkZXIgPSBuZXcgSlNPTkxvYWRlcigpOwotICAgICAgICAg
ICAgICAgIHZhciBidWZmZXJHZW9tZXRyeUxvYWRlciA9IG5ldyBCdWZmZXJHZW9tZXRyeUxvYWRl
cigpOworICAgICAgICAgICAgICAgICAgICBpZiAoIG9mZnNldCAhPT0gdW5kZWZpbmVkICkgewog
Ci0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBs
OyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5vZmZzZXQuZnJvbUFy
cmF5KCBvZmZzZXQgKTsKIAotICAgICAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnk7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBkYXRhID0ganNvblsgaSBdOworICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggZGF0YS50eXBlICkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIHdyYXAgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnUGxhbmVHZW9tZXRyeSc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdQbGFuZUJ1ZmZlckdlb21ldHJ5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggd3JhcFsgMCBdID09PSAncmVwZWF0JyApIHRleHR1cmUud3JhcFMgPSBSZXBlYXRXcmFwcGlu
ZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggd3JhcFsgMCBdID09PSAnbWlycm9yJyAp
IHRleHR1cmUud3JhcFMgPSBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cmllc1sgZGF0YS50eXBlIF0oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEud2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEuaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLndpZHRoU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEuaGVpZ2h0U2VnbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3cmFwWyAxIF0gPT09ICdyZXBlYXQnICkgdGV4
dHVyZS53cmFwVCA9IFJlcGVhdFdyYXBwaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB3cmFwWyAxIF0gPT09ICdtaXJyb3InICkgdGV4dHVyZS53cmFwVCA9IE1pcnJvcmVkUmVwZWF0
V3JhcHBpbmc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCb3hHZW9tZXRy
eSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCb3hCdWZmZXJHZW9tZXRyeSc6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDdWJlR2VvbWV0cnknOiAvLyBiYWNrd2FyZHMg
Y29tcGF0aWJsZQorICAgICAgICAgICAgICAgICAgICBpZiAoIGFuaXNvdHJvcHkgIT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdl
b21ldHJpZXNbIGRhdGEudHlwZSBdKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLndpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5kZXB0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS53aWR0aFNlZ21lbnRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLmhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLmRlcHRoU2VnbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5hbmlzb3Ryb3B5ID0gYW5p
c290cm9weTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZUdlb21l
dHJ5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZUJ1ZmZlckdlb21ldHJ5
JzoKKyAgICAgICAgICAgICAgICAgICAgdmFyIHV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQoKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNb
IGRhdGEudHlwZSBdKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJhZGl1
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZWdtZW50cywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50aGV0YVN0YXJ0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLnRoZXRhTGVuZ3RoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXNbIHV1aWQgXSA9IHRleHR1
cmU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHV1aWQ7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0N5bGlu
ZGVyR2VvbWV0cnknOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3lsaW5kZXJCdWZm
ZXJHZW9tZXRyeSc6CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cmllc1sgZGF0YS50eXBlIF0oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmFkaXVzVG9wLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLnJhZGl1c0JvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEucmFkaWFsU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
aGVpZ2h0U2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEub3Bl
bkVuZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRoZXRhU3RhcnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudGhldGFMZW5ndGgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIC8vCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB2YXIganNvbiA9IHsK
KyAgICAgICAgICAgICAgICAgICAgdXVpZDogX01hdGguZ2VuZXJhdGVVVUlEKCksCisgICAgICAg
ICAgICAgICAgICAgIHR5cGU6ICdNZXNoTGFtYmVydE1hdGVyaWFsJworICAgICAgICAgICAgICAg
IH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbmVHZW9tZXRyeSc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdDb25lQnVmZmVyR2VvbWV0cnknOgorICAgICAgICAg
ICAgICAgIGZvciAoIHZhciBuYW1lIGluIG0gKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS5yYWRpdXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEuaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLnJhZGlhbFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LmhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm9w
ZW5FbmRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50aGV0YVN0YXJ0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRoZXRhTGVuZ3RoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVl
ID0gbVsgbmFtZSBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoIG5hbWUgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ1NwaGVyZUdlb21ldHJ5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J1NwaGVyZUJ1ZmZlckdlb21ldHJ5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Ri
Z0NvbG9yJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RiZ0luZGV4JzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ29wdGljYWxEZW5zaXR5JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ2lsbHVtaW5hdGlvbic6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEYmdOYW1lJzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqc29uLm5hbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JsZW5k
aW5nJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmJsZW5kaW5nID0gQmxlbmRp
bmdNb2RlWyB2YWx1ZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sb3JBbWJpZW50JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ21hcEFtYmllbnQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnNvbGUud2FybiggJ1RIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDonLCBuYW1lLCAnaXMg
bm8gbG9uZ2VyIHN1cHBvcnRlZC4nICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xvckRpZmZ1c2UnOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpzb24uY29sb3IgPSBjb2xvci5mcm9tQXJyYXkoIHZhbHVl
ICkuZ2V0SGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdjb2xvclNwZWN1bGFyJzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqc29uLnNwZWN1bGFyID0gY29sb3IuZnJvbUFycmF5KCB2YWx1ZSApLmdldEhl
eCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnY29sb3JFbWlzc2l2ZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganNvbi5lbWlzc2l2ZSA9IGNvbG9yLmZyb21BcnJheSggdmFsdWUgKS5nZXRIZXgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ3NwZWN1bGFyQ29lZic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5z
aGluaW5lc3MgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NoYWRpbmcnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2Jhc2ljJyApIGpzb24udHlw
ZSA9ICdNZXNoQmFzaWNNYXRlcmlhbCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAncGhvbmcnICkganNvbi50eXBlID0gJ01lc2hQaG9u
Z01hdGVyaWFsJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLnRvTG93
ZXJDYXNlKCkgPT09ICdzdGFuZGFyZCcgKSBqc29uLnR5cGUgPSAnTWVzaFN0YW5kYXJkTWF0ZXJp
YWwnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbWFwRGlmZnVzZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anNvbi5tYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwRGlmZnVzZVJlcGVhdCwgbS5tYXBE
aWZmdXNlT2Zmc2V0LCBtLm1hcERpZmZ1c2VXcmFwLCBtLm1hcERpZmZ1c2VBbmlzb3Ryb3B5ICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdtYXBEaWZmdXNlUmVwZWF0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcERpZmZ1c2VPZmZzZXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFw
RGlmZnVzZVdyYXAnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRGlmZnVzZUFu
aXNvdHJvcHknOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnbWFwRW1pc3NpdmUnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpzb24uZW1pc3NpdmVNYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwRW1pc3Np
dmVSZXBlYXQsIG0ubWFwRW1pc3NpdmVPZmZzZXQsIG0ubWFwRW1pc3NpdmVXcmFwLCBtLm1hcEVt
aXNzaXZlQW5pc290cm9weSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRW1pc3NpdmVSZXBlYXQnOgorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwRW1pc3NpdmVPZmZzZXQnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbWFwRW1pc3NpdmVXcmFwJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ21hcEVtaXNzaXZlQW5pc290cm9weSc6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBMaWdodCc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5saWdodE1hcCA9IGxvYWRUZXh0dXJlKCB2
YWx1ZSwgbS5tYXBMaWdodFJlcGVhdCwgbS5tYXBMaWdodE9mZnNldCwgbS5tYXBMaWdodFdyYXAs
IG0ubWFwTGlnaHRBbmlzb3Ryb3B5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBMaWdodFJlcGVhdCc6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBMaWdodE9mZnNldCc6CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdtYXBMaWdodFdyYXAnOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbWFwTGlnaHRBbmlzb3Ryb3B5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFPJzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqc29uLmFvTWFwID0gbG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcEFP
UmVwZWF0LCBtLm1hcEFPT2Zmc2V0LCBtLm1hcEFPV3JhcCwgbS5tYXBBT0FuaXNvdHJvcHkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ21hcEFPUmVwZWF0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21h
cEFPT2Zmc2V0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEFPV3JhcCc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBBT0FuaXNvdHJvcHknOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
bWFwQnVtcCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5idW1wTWFwID0gbG9h
ZFRleHR1cmUoIHZhbHVlLCBtLm1hcEJ1bXBSZXBlYXQsIG0ubWFwQnVtcE9mZnNldCwgbS5tYXBC
dW1wV3JhcCwgbS5tYXBCdW1wQW5pc290cm9weSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQnVtcFNjYWxlJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmJ1bXBTY2FsZSA9IHZhbHVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbWFwQnVtcFJlcGVhdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBC
dW1wT2Zmc2V0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEJ1bXBXcmFwJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcEJ1bXBBbmlzb3Ryb3B5JzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcE5vcm1hbCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5ub3JtYWxN
YXAgPSBsb2FkVGV4dHVyZSggdmFsdWUsIG0ubWFwTm9ybWFsUmVwZWF0LCBtLm1hcE5vcm1hbE9m
ZnNldCwgbS5tYXBOb3JtYWxXcmFwLCBtLm1hcE5vcm1hbEFuaXNvdHJvcHkgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J21hcE5vcm1hbEZhY3Rvcic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5ub3Jt
YWxTY2FsZSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwTm9ybWFsUmVwZWF0JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ21hcE5vcm1hbE9mZnNldCc6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdtYXBOb3JtYWxXcmFwJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J21hcE5vcm1hbEFuaXNvdHJvcHknOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwU3BlY3VsYXInOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpzb24uc3BlY3VsYXJNYXAgPSBsb2FkVGV4dHVyZSggdmFsdWUs
IG0ubWFwU3BlY3VsYXJSZXBlYXQsIG0ubWFwU3BlY3VsYXJPZmZzZXQsIG0ubWFwU3BlY3VsYXJX
cmFwLCBtLm1hcFNwZWN1bGFyQW5pc290cm9weSApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwU3BlY3VsYXJSZXBl
YXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwU3BlY3VsYXJPZmZzZXQnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwU3BlY3VsYXJXcmFwJzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ21hcFNwZWN1bGFyQW5pc290cm9weSc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdt
YXBNZXRhbG5lc3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ubWV0YWxuZXNz
TWFwID0gbG9hZFRleHR1cmUoIHZhbHVlLCBtLm1hcE1ldGFsbmVzc1JlcGVhdCwgbS5tYXBNZXRh
bG5lc3NPZmZzZXQsIG0ubWFwTWV0YWxuZXNzV3JhcCwgbS5tYXBNZXRhbG5lc3NBbmlzb3Ryb3B5
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdtYXBNZXRhbG5lc3NSZXBlYXQnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbWFwTWV0YWxuZXNzT2Zmc2V0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ21hcE1ldGFsbmVzc1dyYXAnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFw
TWV0YWxuZXNzQW5pc290cm9weSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBSb3VnaG5lc3MnOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpzb24ucm91Z2huZXNzTWFwID0gbG9hZFRleHR1cmUoIHZhbHVl
LCBtLm1hcFJvdWdobmVzc1JlcGVhdCwgbS5tYXBSb3VnaG5lc3NPZmZzZXQsIG0ubWFwUm91Z2hu
ZXNzV3JhcCwgbS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5ICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBSb3VnaG5l
c3NSZXBlYXQnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwUm91Z2huZXNzT2Zm
c2V0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21hcFJvdWdobmVzc1dyYXAnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwUm91Z2huZXNzQW5pc290cm9weSc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdtYXBBbHBoYSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5hbHBo
YU1hcCA9IGxvYWRUZXh0dXJlKCB2YWx1ZSwgbS5tYXBBbHBoYVJlcGVhdCwgbS5tYXBBbHBoYU9m
ZnNldCwgbS5tYXBBbHBoYVdyYXAsIG0ubWFwQWxwaGFBbmlzb3Ryb3B5ICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdt
YXBBbHBoYVJlcGVhdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBBbHBoYU9m
ZnNldCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtYXBBbHBoYVdyYXAnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFwQWxwaGFBbmlzb3Ryb3B5JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2ZsaXBTaWRlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5zaWRlID0gQmFj
a1NpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdkb3VibGVTaWRlZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganNvbi5zaWRlID0gRG91YmxlU2lkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RyYW5zcGFyZW5jeSc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTG9hZGVyLmNyZWF0
ZU1hdGVyaWFsOiB0cmFuc3BhcmVuY3kgaGFzIGJlZW4gcmVuYW1lZCB0byBvcGFjaXR5JyApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24ub3BhY2l0eSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnZGVwdGhUZXN0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlcHRoV3JpdGUn
OgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sb3JXcml0ZSc6CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdvcGFjaXR5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ3JlZmxlY3Rpdml0eSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0cmFuc3Bh
cmVudCc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2aXNpYmxlJzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3dpcmVmcmFtZSc6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganNvblsgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2ZXJ0ZXhDb2xvcnMnOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHRydWUgKSBqc29uLnZlcnRl
eENvbG9ycyA9IFZlcnRleENvbG9yczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHZhbHVlID09PSAnZmFjZScgKSBqc29uLnZlcnRleENvbG9ycyA9IEZhY2VDb2xvcnM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJF
RS5Mb2FkZXIuY3JlYXRlTWF0ZXJpYWw6IFVuc3VwcG9ydGVkJywgbmFtZSwgdmFsdWUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEudHlwZSBdKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS53aWR0aFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLmhlaWdodFNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLnBoaVN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LnBoaUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50aGV0YVN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRoZXRhTGVuZ3RoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEb2RlY2FoZWRyb25HZW9tZXRyeSc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdJY29zYWhlZHJvbkdlb21ldHJ5JzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ09jdGFoZWRyb25HZW9tZXRyeSc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdUZXRyYWhlZHJvbkdlb21ldHJ5JzoKKyAgICAgICAgICAgICAgICBp
ZiAoIGpzb24udHlwZSA9PT0gJ01lc2hCYXNpY01hdGVyaWFsJyApIGRlbGV0ZSBqc29uLmVtaXNz
aXZlOworICAgICAgICAgICAgICAgIGlmICgganNvbi50eXBlICE9PSAnTWVzaFBob25nTWF0ZXJp
YWwnICkgZGVsZXRlIGpzb24uc3BlY3VsYXI7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS5yYWRpdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEuZGV0YWlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIGpzb24ub3BhY2l0eSA8IDEgKSBqc29uLnRyYW5zcGFyZW50ID0gdHJ1
ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IG1hdGVyaWFsTG9hZGVyLnNldFRleHR1cmVzKCB0ZXh0dXJlcyApOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICdSaW5nR2VvbWV0cnknOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnUmluZ0J1ZmZlckdlb21ldHJ5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0ZXJp
YWxMb2FkZXIucGFyc2UoIGpzb24gKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
b21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEudHlwZSBdKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLmlubmVyUmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLm91dGVyUmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhLnRoZXRhU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEucGhpU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudGhl
dGFTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50aGV0YUxlbmd0
aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9OwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gKSgpCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ1RvcnVzR2VvbWV0cnknOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnVG9ydXNCdWZmZXJHZW9tZXRyeSc6CisgICAgfSApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cmllc1sgZGF0YS50eXBlIF0o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmFkaXVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnR1YmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEucmFkaWFsU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEudHVidWxhclNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLmFyYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgLyoqCisg
ICAgICogQGF1dGhvciBEb24gTWNDdXJkeSAvIGh0dHBzOi8vd3d3LmRvbm1jY3VyZHkuY29tCisg
ICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICB2YXIgTG9h
ZGVyVXRpbHMgPSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RvcnVzS25vdEdl
b21ldHJ5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RvcnVzS25vdEJ1ZmZlckdl
b21ldHJ5JzoKKyAgICAgICAgZGVjb2RlVGV4dDogZnVuY3Rpb24gKCBhcnJheSApIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEu
dHlwZSBdKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJhZGl1cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50dWJlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLnR1YnVsYXJTZWdtZW50cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5yYWRpYWxTZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS5wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LnEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKCB0eXBl
b2YgVGV4dERlY29kZXIgIT09ICd1bmRlZmluZWQnICkgewogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2Rlcigp
LmRlY29kZSggYXJyYXkgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGF0aGVH
ZW9tZXRyeSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMYXRoZUJ1ZmZlckdlb21l
dHJ5JzoKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21l
dHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEudHlwZSBdKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLnBvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5waGlT
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5waGlMZW5ndGgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgLy8gQXZvaWQgdGhlIFN0
cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYXJyYXkpIHNob3J0Y3V0LCB3aGljaAorICAg
ICAgICAgICAgLy8gdGhyb3dzIGEgIm1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkIiBl
cnJvciBmb3IgbGFyZ2UgYXJyYXlzLgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB2YXIgcyA9ICcnOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdCdWZmZXJHZW9tZXRyeSc6CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0g
YXJyYXkubGVuZ3RoOyBpIDwgaWw7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW9tZXRyeSA9IGJ1ZmZlckdlb21ldHJ5TG9hZGVyLnBhcnNlKCBkYXRhICk7CisgICAg
ICAgICAgICAgICAgLy8gSW1wbGljaXRseSBhc3N1bWVzIGxpdHRsZS1lbmRpYW4uCisgICAgICAg
ICAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBhcnJheVsgaSBdICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnR2VvbWV0cnknOgorICAgICAgICAgICAgLy8gTWVyZ2VzIG11
bHRpLWJ5dGUgdXRmLTggY2hhcmFjdGVycy4KKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklD
b21wb25lbnQoIGVzY2FwZSggcyApICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZW9tZXRyeSA9IGdlb21ldHJ5TG9hZGVyLnBhcnNlKCBkYXRhLCB0aGlzLnRleHR1cmVQYXRoICku
Z2VvbWV0cnk7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZXh0cmFjdFVybEJhc2U6IGZ1bmN0aW9uICggdXJsICkgewogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFyIGluZGV4ID0gdXJsLmxh
c3RJbmRleE9mKCAnLycgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJyAr
IGRhdGEudHlwZSArICciJyApOworICAgICAgICAgICAgaWYgKCBpbmRleCA9PT0gLSAxICkgcmV0
dXJuICcuLyc7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHJldHVybiB1cmwuc3Vic3RyKCAwLCBpbmRleCArIDEgKTsKIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS51dWlk
ID0gZGF0YS51dWlkOworICAgIH07CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLm5h
bWUgIT09IHVuZGVmaW5lZCApIGdlb21ldHJ5Lm5hbWUgPSBkYXRhLm5hbWU7CisgICAgLyoqCisg
ICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KKyAgICAgKiBAYXV0aG9y
IGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tLworICAgICAqLwogCi0gICAgICAg
ICAgICAgICAgICAgIGdlb21ldHJpZXNbIGRhdGEudXVpZCBdID0gZ2VvbWV0cnk7CisgICAgZnVu
Y3Rpb24gSlNPTkxvYWRlciggbWFuYWdlciApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKCB0eXBlb2YgbWFuYWdlciA9PT0gJ2Jvb2xlYW4nICkgewogCi0gICAgICAgICAgICB9
CisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5KU09OTG9hZGVyOiBzaG93U3RhdHVz
IHBhcmFtZXRlciBoYXMgYmVlbiByZW1vdmVkIGZyb20gY29uc3RydWN0b3IuJyApOworICAgICAg
ICAgICAgbWFuYWdlciA9IHVuZGVmaW5lZDsKIAotICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJp
ZXM7CisgICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICB0aGlzLm1hbmFnZXIgPSAoIG1h
bmFnZXIgIT09IHVuZGVmaW5lZCApID8gbWFuYWdlciA6IERlZmF1bHRMb2FkaW5nTWFuYWdlcjsK
IAotICAgICAgICBwYXJzZU1hdGVyaWFsczogZnVuY3Rpb24gKCBqc29uLCB0ZXh0dXJlcyApIHsK
KyAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTsKIAotICAgICAgICAgICAgdmFy
IG1hdGVyaWFscyA9IHt9OworICAgIH0KIAotICAgICAgICAgICAgaWYgKCBqc29uICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgT2JqZWN0LmFzc2lnbiggSlNPTkxvYWRlci5wcm90b3R5cGUsIHsKIAot
ICAgICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgTWF0ZXJpYWxMb2FkZXIoKTsKLSAgICAg
ICAgICAgICAgICBsb2FkZXIuc2V0VGV4dHVyZXMoIHRleHR1cmVzICk7CisgICAgICAgIGNyb3Nz
T3JpZ2luOiAnYW5vbnltb3VzJywKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgbG9hZDogZnVuY3Rpb24g
KCB1cmwsIG9uTG9hZCwgb25Qcm9ncmVzcywgb25FcnJvciApIHsKIAotICAgICAgICAgICAgICAg
ICAgICB2YXIgZGF0YSA9IGpzb25bIGkgXTsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IHRoaXM7
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnR5cGUgPT09ICdNdWx0aU1hdGVyaWFs
JyApIHsKKyAgICAgICAgICAgIHZhciB0ZXh0dXJlUGF0aCA9IHRoaXMudGV4dHVyZVBhdGggJiYg
KCB0eXBlb2YgdGhpcy50ZXh0dXJlUGF0aCA9PT0gJ3N0cmluZycgKSA/IHRoaXMudGV4dHVyZVBh
dGggOiBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSggdXJsICk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlcHJlY2F0ZWQKKyAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgRmls
ZUxvYWRlciggdGhpcy5tYW5hZ2VyICk7CisgICAgICAgICAgICBsb2FkZXIuc2V0V2l0aENyZWRl
bnRpYWxzKCB0aGlzLndpdGhDcmVkZW50aWFscyApOworICAgICAgICAgICAgbG9hZGVyLmxvYWQo
IHVybCwgZnVuY3Rpb24gKCB0ZXh0ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
YXJyYXkgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UoIHRleHQg
KTsKKyAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGEgPSBqc29uLm1ldGFkYXRhOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaiA9IDA7IGogPCBkYXRhLm1hdGVyaWFscy5s
ZW5ndGg7IGogKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBtZXRhZGF0YSAhPT0gdW5kZWZp
bmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCggbG9hZGVy
LnBhcnNlKCBkYXRhLm1hdGVyaWFsc1sgaiBdICkgKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHR5cGUgPSBtZXRhZGF0YS50eXBlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmICggdHlwZSAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbHNbIGRhdGEudXVpZCBdID0gYXJyYXk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ29iamVjdCcgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCAnVEhSRUUuSlNPTkxvYWRlcjogJyArIHVybCArICcgc2hvdWxkIGJl
IGxvYWRlZCB3aXRoIFRIUkVFLk9iamVjdExvYWRlciBpbnN0ZWFkLicgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVy
aWFsc1sgZGF0YS51dWlkIF0gPSBsb2FkZXIucGFyc2UoIGRhdGEgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0gc2NvcGUucGFy
c2UoIGpzb24sIHRleHR1cmVQYXRoICk7CisgICAgICAgICAgICAgICAgb25Mb2FkKCBvYmplY3Qu
Z2VvbWV0cnksIG9iamVjdC5tYXRlcmlhbHMgKTsKIAotICAgICAgICAgICAgcmV0dXJuIG1hdGVy
aWFsczsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKTsKIAogICAgICAgICB9
LAogCi0gICAgICAgIHBhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKCBqc29uICkgewotCi0gICAg
ICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IFtdOwotCi0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9
IDA7IGkgPCBqc29uLmxlbmd0aDsgaSArKyApIHsKKyAgICAgICAgc2V0Q3Jvc3NPcmlnaW46IGZ1
bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgY2xpcCA9IEFuaW1hdGlv
bkNsaXAucGFyc2UoIGpzb25bIGkgXSApOworICAgICAgICAgICAgdGhpcy5jcm9zc09yaWdpbiA9
IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICBhbmlt
YXRpb25zLnB1c2goIGNsaXAgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAgICAg
ICBzZXRUZXh0dXJlUGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgcmV0
dXJuIGFuaW1hdGlvbnM7CisgICAgICAgICAgICB0aGlzLnRleHR1cmVQYXRoID0gdmFsdWU7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKIAogICAgICAgICB9LAogCi0gICAgICAgIHBhcnNlSW1h
Z2VzOiBmdW5jdGlvbiAoIGpzb24sIG9uTG9hZCApIHsKLQotICAgICAgICAgICAgdmFyIHNjb3Bl
ID0gdGhpczsKLSAgICAgICAgICAgIHZhciBpbWFnZXMgPSB7fTsKKyAgICAgICAgcGFyc2U6ICgg
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICBmdW5jdGlvbiBsb2FkSW1hZ2UoIHVybCApIHsK
KyAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlTW9kZWwoIGpzb24sIGdlb21ldHJ5ICkgewogCi0g
ICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtU3RhcnQoIHVybCApOworICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIGlzQml0U2V0KCB2YWx1ZSwgcG9zaXRpb24gKSB7CiAKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWQoIHVybCwgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWUgJiAoIDEgPDwgcG9zaXRpb24gKTsKIAotICAgICAgICAg
ICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOworICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgIHZhciBpLCBqLCBmaSwKIAotICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5h
Z2VyLml0ZW1FbmQoIHVybCApOwotICAgICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0
ZW1FcnJvciggdXJsICk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgekxlbmd0aCwKIAot
ICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleCwgbm9y
bWFsSW5kZXgsIHV2SW5kZXgsIG1hdGVyaWFsSW5kZXgsCiAKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgaXNRdWFkLAorICAgICAg
ICAgICAgICAgICAgICBoYXNNYXRlcmlhbCwKKyAgICAgICAgICAgICAgICAgICAgaGFzRmFjZVZl
cnRleFV2LAorICAgICAgICAgICAgICAgICAgICBoYXNGYWNlTm9ybWFsLCBoYXNGYWNlVmVydGV4
Tm9ybWFsLAorICAgICAgICAgICAgICAgICAgICBoYXNGYWNlQ29sb3IsIGhhc0ZhY2VWZXJ0ZXhD
b2xvciwKIAotICAgICAgICAgICAgaWYgKCBqc29uICE9PSB1bmRlZmluZWQgJiYganNvbi5sZW5n
dGggPiAwICkgeworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgsIGZhY2UsIGZhY2VBLCBmYWNl
QiwgaGV4LCBub3JtYWwsCiAKLSAgICAgICAgICAgICAgICB2YXIgbWFuYWdlciA9IG5ldyBMb2Fk
aW5nTWFuYWdlciggb25Mb2FkICk7CisgICAgICAgICAgICAgICAgICAgIHV2TGF5ZXIsIHV2LCB1
LCB2LAogCi0gICAgICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlciggbWFu
YWdlciApOwotICAgICAgICAgICAgICAgIGxvYWRlci5zZXRDcm9zc09yaWdpbiggdGhpcy5jcm9z
c09yaWdpbiApOworICAgICAgICAgICAgICAgICAgICBmYWNlcyA9IGpzb24uZmFjZXMsCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRpY2VzID0ganNvbi52ZXJ0aWNlcywKKyAgICAgICAgICAgICAg
ICAgICAgbm9ybWFscyA9IGpzb24ubm9ybWFscywKKyAgICAgICAgICAgICAgICAgICAgY29sb3Jz
ID0ganNvbi5jb2xvcnMsCiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBq
c29uLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIHNjYWxlID0g
anNvbi5zY2FsZSwKIAotICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBqc29uWyBpIF07
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gL14oXC9cLyl8KFthLXpdKzooXC9cLyk/
KS9pLnRlc3QoIGltYWdlLnVybCApID8gaW1hZ2UudXJsIDogc2NvcGUudGV4dHVyZVBhdGggKyBp
bWFnZS51cmw7CisgICAgICAgICAgICAgICAgICAgIG5VdkxheWVycyA9IDA7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VzWyBpbWFnZS51dWlkIF0gPSBsb2FkSW1hZ2UoIHBhdGggKTsKIAot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGpzb24udXZzICE9PSB1bmRl
ZmluZWQgKSB7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gZGlzcmVn
YXJkIGVtcHR5IGFycmF5cwogCi0gICAgICAgICAgICByZXR1cm4gaW1hZ2VzOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGpzb24udXZzLmxlbmd0aDsgaSArKyApIHsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqc29uLnV2c1sgaSBdLmxl
bmd0aCApIG5VdkxheWVycyArKzsKIAotICAgICAgICBwYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAo
IGpzb24sIGltYWdlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBm
dW5jdGlvbiBwYXJzZUNvbnN0YW50KCB2YWx1ZSwgdHlwZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCBuVXZMYXllcnM7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIHR5cGVvZiggdmFsdWUgKSA9PT0gJ251bWJlcicgKSByZXR1cm4gdmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWyBpIF0gPSBbXTsKIAot
ICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlci5wYXJzZVRl
eHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uJywgdmFsdWUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVbIHZhbHVl
IF07CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICB6TGVuZ3RoID0gdmVydGljZXMubGVuZ3RoOwog
Ci0gICAgICAgICAgICB2YXIgdGV4dHVyZXMgPSB7fTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
IG9mZnNldCA8IHpMZW5ndGggKSB7CiAKLSAgICAgICAgICAgIGlmICgganNvbiAhPT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXggPSBuZXcgVmVjdG9yMygpOwogCi0g
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5sZW5ndGg7IGkgPCBsOyBp
ICsrICkgeworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueCA9IHZlcnRpY2VzWyBvZmZzZXQg
KysgXSAqIHNjYWxlOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueSA9IHZlcnRpY2VzWyBv
ZmZzZXQgKysgXSAqIHNjYWxlOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgueiA9IHZlcnRp
Y2VzWyBvZmZzZXQgKysgXSAqIHNjYWxlOwogCi0gICAgICAgICAgICAgICAgICAgIHZhciBkYXRh
ID0ganNvblsgaSBdOworICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS52ZXJ0aWNlcy5wdXNo
KCB2ZXJ0ZXggKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuaW1hZ2UgPT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQg
Zm9yJywgZGF0YS51dWlkICk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAg
ICAgICAgICB6TGVuZ3RoID0gZmFjZXMubGVuZ3RoOwogCi0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldCA8IHpMZW5ndGggKSB7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbWFnZXNbIGRhdGEuaW1hZ2UgXSA9PT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gZmFjZXNbIG9mZnNldCArKyBdOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVm
aW5lZCBpbWFnZScsIGRhdGEuaW1hZ2UgKTsKKyAgICAgICAgICAgICAgICAgICAgaXNRdWFkID0g
aXNCaXRTZXQoIHR5cGUsIDAgKTsKKyAgICAgICAgICAgICAgICAgICAgaGFzTWF0ZXJpYWwgPSBp
c0JpdFNldCggdHlwZSwgMSApOworICAgICAgICAgICAgICAgICAgICBoYXNGYWNlVmVydGV4VXYg
PSBpc0JpdFNldCggdHlwZSwgMyApOworICAgICAgICAgICAgICAgICAgICBoYXNGYWNlTm9ybWFs
ID0gaXNCaXRTZXQoIHR5cGUsIDQgKTsKKyAgICAgICAgICAgICAgICAgICAgaGFzRmFjZVZlcnRl
eE5vcm1hbCA9IGlzQml0U2V0KCB0eXBlLCA1ICk7CisgICAgICAgICAgICAgICAgICAgIGhhc0Zh
Y2VDb2xvciA9IGlzQml0U2V0KCB0eXBlLCA2ICk7CisgICAgICAgICAgICAgICAgICAgIGhhc0Zh
Y2VWZXJ0ZXhDb2xvciA9IGlzQml0U2V0KCB0eXBlLCA3ICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygidHlwZSIsIHR5cGUsICJi
aXRzIiwgaXNRdWFkLCBoYXNNYXRlcmlhbCwgaGFzRmFjZVZlcnRleFV2LCBoYXNGYWNlTm9ybWFs
LCBoYXNGYWNlVmVydGV4Tm9ybWFsLCBoYXNGYWNlQ29sb3IsIGhhc0ZhY2VWZXJ0ZXhDb2xvcik7
CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZSggaW1hZ2Vz
WyBkYXRhLmltYWdlIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmICggaXNRdWFkICkgewogCi0gICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUudXVpZCA9IGRhdGEudXVpZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZhY2VBID0gbmV3IEZhY2UzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWNl
QS5hID0gZmFjZXNbIG9mZnNldCBdOworICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUEuYiA9
IGZhY2VzWyBvZmZzZXQgKyAxIF07CisgICAgICAgICAgICAgICAgICAgICAgICBmYWNlQS5jID0g
ZmFjZXNbIG9mZnNldCArIDMgXTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEubmFt
ZSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5uYW1lID0gZGF0YS5uYW1lOworICAgICAgICAgICAg
ICAgICAgICAgICAgZmFjZUIgPSBuZXcgRmFjZTMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZhY2VCLmEgPSBmYWNlc1sgb2Zmc2V0ICsgMSBdOworICAgICAgICAgICAgICAgICAgICAgICAg
ZmFjZUIuYiA9IGZhY2VzWyBvZmZzZXQgKyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICBm
YWNlQi5jID0gZmFjZXNbIG9mZnNldCArIDMgXTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGEubWFwcGluZyAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5tYXBwaW5nID0gcGFyc2VDb25z
dGFudCggZGF0YS5tYXBwaW5nLCBURVhUVVJFX01BUFBJTkcgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldCArPSA0OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5vZmZz
ZXQgIT09IHVuZGVmaW5lZCApIHRleHR1cmUub2Zmc2V0LmZyb21BcnJheSggZGF0YS5vZmZzZXQg
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnJlcGVhdCAhPT0gdW5kZWZpbmVkICkg
dGV4dHVyZS5yZXBlYXQuZnJvbUFycmF5KCBkYXRhLnJlcGVhdCApOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRhdGEud3JhcCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBoYXNNYXRlcmlhbCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS53cmFwUyA9IHBhcnNlQ29uc3RhbnQoIGRhdGEud3JhcFsgMCBdLCBURVhUVVJFX1dSQVBQ
SU5HICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLndyYXBUID0gcGFyc2VDb25z
dGFudCggZGF0YS53cmFwWyAxIF0sIFRFWFRVUkVfV1JBUFBJTkcgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRlcmlhbEluZGV4ID0gZmFjZXNbIG9mZnNldCArKyBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY2VBLm1hdGVyaWFsSW5kZXggPSBtYXRlcmlhbEluZGV4
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VCLm1hdGVyaWFsSW5kZXggPSBtYXRl
cmlhbEluZGV4OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEubWluRmlsdGVyICE9PSB1bmRl
ZmluZWQgKSB0ZXh0dXJlLm1pbkZpbHRlciA9IHBhcnNlQ29uc3RhbnQoIGRhdGEubWluRmlsdGVy
LCBURVhUVVJFX0ZJTFRFUiApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEubWFnRmls
dGVyICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLm1hZ0ZpbHRlciA9IHBhcnNlQ29uc3RhbnQoIGRh
dGEubWFnRmlsdGVyLCBURVhUVVJFX0ZJTFRFUiApOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGEuYW5pc290cm9weSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5hbmlzb3Ryb3B5ID0gZGF0
YS5hbmlzb3Ryb3B5OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZ2V0IGZhY2UgPD0+
IHV2IGluZGV4IGNvcnJlc3BvbmRlbmNlCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRh
LmZsaXBZICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmZsaXBZID0gZGF0YS5mbGlwWTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpID0gZ2VvbWV0cnkuZmFjZXMubGVuZ3RoOwogCi0gICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVzWyBkYXRhLnV1aWQgXSA9IHRleHR1cmU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VWZXJ0ZXhVdiApIHsKIAotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5VdkxheWVy
czsgaSArKyApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1dkxheWVyID0ganNvbi51dnNbIGkgXTsKIAotICAgICAgICAgICAgcmV0dXJuIHRleHR1
cmVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5mYWNlVmVydGV4
VXZzWyBpIF1bIGZpIF0gPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vv
bWV0cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSArIDEgXSA9IFtdOwogCi0gICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgNDsgaiArKyAp
IHsKIAotICAgICAgICBwYXJzZU9iamVjdDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXZJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXTsKIAotICAg
ICAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1ID0gdXZMYXllclsgdXZJbmRleCAqIDIgXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB1dkxheWVyWyB1dkluZGV4ICogMiArIDEgXTsK
IAotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KCBkYXRhLCBnZW9tZXRy
aWVzLCBtYXRlcmlhbHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
diA9IG5ldyBWZWN0b3IyKCB1LCB2ICk7CiAKLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqICE9PSAyICkgZ2VvbWV0
cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSBdLnB1c2goIHV2ICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGogIT09IDAgKSBnZW9tZXRyeS5mYWNlVmVydGV4VXZz
WyBpIF1bIGZpICsgMSBdLnB1c2goIHV2ICk7CiAKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBn
ZXRHZW9tZXRyeSggbmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cmllc1sgbmFtZSBdID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9t
ZXRyeScsIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VOb3JtYWwgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJpZXNbIG5hbWUgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXSAq
IDM7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFj
ZUEubm9ybWFsLnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sg
bm9ybWFsSW5kZXggKysgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFs
c1sgbm9ybWFsSW5kZXggKysgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsc1sgbm9ybWFsSW5kZXggXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKLSAg
ICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRNYXRlcmlhbCggbmFtZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWNlQi5ub3JtYWwuY29weSggZmFjZUEubm9ybWFsICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSB1bmRlZmluZWQgKSByZXR1cm4gdW5kZWZp
bmVkOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlm
ICggQXJyYXkuaXNBcnJheSggbmFtZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBoYXNGYWNlVmVydGV4Tm9ybWFsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
YXJyYXkgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IDQ7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IG5hbWUubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsSW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF0gKiAzOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHV1aWQgPSBuYW1lWyBpIF07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5ldyBWZWN0b3IzKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgbm9ybWFsSW5kZXggKysgXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCBd
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGVyaWFsc1sgdXVpZCBdID09PSB1bmRlZmluZWQgKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0
TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwnLCB1dWlkICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaSAhPT0gMiApIGZhY2VBLnZlcnRleE5vcm1hbHMucHVzaCggbm9y
bWFsICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaSAhPT0gMCApIGZh
Y2VCLnZlcnRleE5vcm1hbHMucHVzaCggbm9ybWFsICk7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKCBtYXRl
cmlhbHNbIHV1aWQgXSApOwotCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbHNbIG5hbWUgXSA9PT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmpl
Y3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCcsIG5hbWUgKTsKLQotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc0ZhY2VDb2xvciApIHsKIAot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0ZXJpYWxzWyBuYW1lIF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3JJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZXggPSBjb2xvcnNbIGNvbG9ySW5kZXggXTsKIAotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlQS5jb2xvci5z
ZXRIZXgoIGhleCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VCLmNvbG9yLnNl
dEhleCggaGV4ICk7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBkYXRhLnR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2Nl
bmUnOgogCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgU2NlbmUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRleENvbG9yICkgewogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgNDsgaSArKyAp
IHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggTnVtYmVyLmlzSW50ZWdlcigg
ZGF0YS5iYWNrZ3JvdW5kICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bG9ySW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsrIF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhleCA9IGNvbG9yc1sgY29sb3JJbmRleCBdOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdC5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKCBkYXRhLmJhY2tncm91
bmQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpICE9PSAyICkgZmFj
ZUEudmVydGV4Q29sb3JzLnB1c2goIG5ldyBDb2xvciggaGV4ICkgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpICE9PSAwICkgZmFjZUIudmVydGV4Q29sb3JzLnB1c2go
IG5ldyBDb2xvciggaGV4ICkgKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGEuZm9nICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGRhdGEuZm9nLnR5cGUgPT09ICdGb2cnICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VvbWV0cnkuZmFjZXMucHVzaCggZmFjZUEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdlb21ldHJ5LmZhY2VzLnB1c2goIGZhY2VCICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LmZvZyA9IG5ldyBGb2coIGRhdGEuZm9nLmNvbG9yLCBkYXRhLmZvZy5u
ZWFyLCBkYXRhLmZvZy5mYXIgKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRhdGEuZm9nLnR5cGUgPT09ICdG
b2dFeHAyJyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBuZXcgRmFjZTMoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UuYSA9IGZhY2VzWyBvZmZzZXQgKysgXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY2UuYiA9IGZhY2VzWyBvZmZzZXQgKysgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZhY2UuYyA9IGZhY2VzWyBvZmZzZXQgKysgXTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZm9nID0gbmV3IEZvZ0V4cDIoIGRhdGEu
Zm9nLmNvbG9yLCBkYXRhLmZvZy5kZW5zaXR5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGhhc01hdGVyaWFsICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsSW5kZXggPSBmYWNlc1sgb2Zmc2V0ICsr
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS5tYXRlcmlhbEluZGV4ID0gbWF0
ZXJpYWxJbmRleDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGdldCBmYWNl
IDw9PiB1diBpbmRleCBjb3JyZXNwb25kZW5jZQogCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
J1BlcnNwZWN0aXZlQ2FtZXJhJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpID0gZ2VvbWV0
cnkuZmFjZXMubGVuZ3RoOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcg
UGVyc3BlY3RpdmVDYW1lcmEoIGRhdGEuZm92LCBkYXRhLmFzcGVjdCwgZGF0YS5uZWFyLCBkYXRh
LmZhciApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYXNGYWNlVmVydGV4VXYgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5mb2N1cyAhPT0gdW5kZWZpbmVk
ICkgb2JqZWN0LmZvY3VzID0gZGF0YS5mb2N1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZGF0YS56b29tICE9PSB1bmRlZmluZWQgKSBvYmplY3Quem9vbSA9IGRhdGEuem9vbTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5maWxtR2F1Z2UgIT09IHVuZGVmaW5lZCAp
IG9iamVjdC5maWxtR2F1Z2UgPSBkYXRhLmZpbG1HYXVnZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZGF0YS5maWxtT2Zmc2V0ICE9PSB1bmRlZmluZWQgKSBvYmplY3QuZmlsbU9mZnNl
dCA9IGRhdGEuZmlsbU9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS52
aWV3ICE9PSB1bmRlZmluZWQgKSBvYmplY3QudmlldyA9IE9iamVjdC5hc3NpZ24oIHt9LCBkYXRh
LnZpZXcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5V
dkxheWVyczsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV2TGF5ZXIgPSBqc29uLnV2c1sgaSBdOwogCi0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ09ydGhvZ3JhcGhpY0NhbWVyYSc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIGkgXVsgZmkgXSA9
IFtdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgT3J0aG9ncmFwaGlj
Q2FtZXJhKCBkYXRhLmxlZnQsIGRhdGEucmlnaHQsIGRhdGEudG9wLCBkYXRhLmJvdHRvbSwgZGF0
YS5uZWFyLCBkYXRhLmZhciApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBqID0gMDsgaiA8IDM7IGogKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXZJbmRleCA9IGZhY2VzWyBv
ZmZzZXQgKysgXTsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdBbWJpZW50TGlnaHQnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHV2TGF5ZXJbIHV2SW5kZXgg
KiAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gdXZMYXllclsg
dXZJbmRleCAqIDIgKyAxIF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG5l
dyBBbWJpZW50TGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5ICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1diA9IG5ldyBWZWN0b3IyKCB1LCB2ICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VvbWV0cnkuZmFjZVZlcnRleFV2c1sgaSBdWyBmaSBdLnB1c2goIHV2ICk7CiAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGlyZWN0aW9uYWxMaWdodCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5ICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBj
YXNlICdQb2ludExpZ2h0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZU5v
cm1hbCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFBvaW50TGln
aHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5LCBkYXRhLmRpc3RhbmNlLCBkYXRhLmRlY2F5
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsSW5kZXggPSBmYWNlc1sgb2Zm
c2V0ICsrIF0gKiAzOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWNlLm5vcm1hbC5zZXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4IF0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JlY3RBcmVhTGln
aHQnOgorICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvYmplY3QgPSBuZXcgUmVjdEFyZWFMaWdodCggZGF0YS5jb2xvciwgZGF0YS5pbnRlbnNpdHks
IGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGhhc0ZhY2VWZXJ0ZXhOb3JtYWwgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMzsgaSArKyAp
IHsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdTcG90TGlnaHQnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3JtYWxJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXSAqIDM7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBTcG90TGlnaHQoIGRhdGEu
Y29sb3IsIGRhdGEuaW50ZW5zaXR5LCBkYXRhLmRpc3RhbmNlLCBkYXRhLmFuZ2xlLCBkYXRhLnBl
bnVtYnJhLCBkYXRhLmRlY2F5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
cm1hbCA9IG5ldyBWZWN0b3IzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsc1sgbm9ybWFsSW5kZXggKysgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbHNbIG5vcm1hbEluZGV4ICsrIF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxzWyBub3JtYWxJbmRleCBdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLnZlcnRleE5vcm1hbHMucHVzaCggbm9ybWFs
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnSGVtaXNwaGVyZUxpZ2h0JzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dCA9IG5ldyBIZW1pc3BoZXJlTGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuZ3JvdW5kQ29sb3IsIGRh
dGEuaW50ZW5zaXR5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NraW5uZWRN
ZXNoJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZUNvbG9yICkgewogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXIu
cGFyc2VPYmplY3QoKSBkb2VzIG5vdCBzdXBwb3J0IFNraW5uZWRNZXNoIHlldC4nICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JJbmRleCA9IGZhY2VzWyBvZmZzZXQgKysgXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLmNvbG9yLnNldEhleCggY29sb3JzWyBj
b2xvckluZGV4IF0gKTsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlICdNZXNoJzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdlb21l
dHJ5ID0gZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBtYXRlcmlhbCA9IGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZ2VvbWV0cnkuYm9uZXMgJiYgZ2VvbWV0cnkuYm9uZXMu
bGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFzRmFjZVZlcnRl
eENvbG9yICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFNr
aW5uZWRNZXNoKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMDsgaSA8IDM7IGkgKysgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ySW5kZXgg
PSBmYWNlc1sgb2Zmc2V0ICsrIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
Y2UudmVydGV4Q29sb3JzLnB1c2goIG5ldyBDb2xvciggY29sb3JzWyBjb2xvckluZGV4IF0gKSAp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IE1lc2goIGdlb21l
dHJ5LCBtYXRlcmlhbCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmZhY2VzLnB1c2goIGZhY2UgKTsKIAotICAg
ICAgICAgICAgICAgICAgICBjYXNlICdMT0QnOgorICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBMT0QoKTsKKyAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmUnOgorICAgICAgICAgICAgZnVuY3Rpb24gcGFy
c2VTa2luKCBqc29uLCBnZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0ID0gbmV3IExpbmUoIGdldEdlb21ldHJ5KCBkYXRhLmdlb21ldHJ5ICksIGdldE1hdGVyaWFs
KCBkYXRhLm1hdGVyaWFsICksIGRhdGEubW9kZSApOworICAgICAgICAgICAgICAgIHZhciBpbmZs
dWVuY2VzUGVyVmVydGV4ID0gKCBqc29uLmluZmx1ZW5jZXNQZXJWZXJ0ZXggIT09IHVuZGVmaW5l
ZCApID8ganNvbi5pbmZsdWVuY2VzUGVyVmVydGV4IDogMjsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCBqc29uLnNraW5XZWlnaHRzICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmVMb29wJzoKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5za2luV2VpZ2h0cy5sZW5ndGg7IGkgPCBsOyBp
ICs9IGluZmx1ZW5jZXNQZXJWZXJ0ZXggKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdCA9IG5ldyBMaW5lTG9vcCggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0
ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgg
PSBqc29uLnNraW5XZWlnaHRzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeSA9
ICggaW5mbHVlbmNlc1BlclZlcnRleCA+IDEgKSA/IGpzb24uc2tpbldlaWdodHNbIGkgKyAxIF0g
OiAwOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHogPSAoIGluZmx1ZW5jZXNQZXJWZXJ0
ZXggPiAyICkgPyBqc29uLnNraW5XZWlnaHRzWyBpICsgMiBdIDogMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB3ID0gKCBpbmZsdWVuY2VzUGVyVmVydGV4ID4gMyApID8ganNvbi5za2lu
V2VpZ2h0c1sgaSArIDMgXSA6IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuc2tpbldlaWdodHMucHVzaCggbmV3IFZl
Y3RvcjQoIHgsIHksIHosIHcgKSApOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmVT
ZWdtZW50cyc6CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0ID0gbmV3IExpbmVTZWdtZW50cyggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkg
KSwgZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCBqc29u
LnNraW5JbmRpY2VzICkgewogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BvaW50Q2xvdWQn
OgotICAgICAgICAgICAgICAgICAgICBjYXNlICdQb2ludHMnOgorICAgICAgICAgICAgICAgICAg
ICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBqc29uLnNraW5JbmRpY2VzLmxlbmd0aDsgaSA8IGw7IGkg
Kz0gaW5mbHVlbmNlc1BlclZlcnRleCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0ID0gbmV3IFBvaW50cyggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0ZXJp
YWwoIGRhdGEubWF0ZXJpYWwgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBq
c29uLnNraW5JbmRpY2VzWyBpIF07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9ICgg
aW5mbHVlbmNlc1BlclZlcnRleCA+IDEgKSA/IGpzb24uc2tpbkluZGljZXNbIGkgKyAxIF0gOiAw
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSAoIGluZmx1ZW5jZXNQZXJWZXJ0ZXgg
PiAyICkgPyBqc29uLnNraW5JbmRpY2VzWyBpICsgMiBdIDogMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBkID0gKCBpbmZsdWVuY2VzUGVyVmVydGV4ID4gMyApID8ganNvbi5za2luSW5k
aWNlc1sgaSArIDMgXSA6IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuc2tpbkluZGljZXMucHVzaCggbmV3IFZlY3Rv
cjQoIGEsIGIsIGMsIGQgKSApOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1Nwcml0ZSc6
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
ID0gbmV3IFNwcml0ZSggZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSApOworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZ2VvbWV0cnkuYm9uZXMgPSBqc29uLmJvbmVzOwogCi0gICAgICAgICAgICAgICAgICAgIGNh
c2UgJ0dyb3VwJzoKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJ5LmJvbmVzICYmIGdlb21l
dHJ5LmJvbmVzLmxlbmd0aCA+IDAgJiYgKCBnZW9tZXRyeS5za2luV2VpZ2h0cy5sZW5ndGggIT09
IGdlb21ldHJ5LnNraW5JbmRpY2VzLmxlbmd0aCB8fCBnZW9tZXRyeS5za2luSW5kaWNlcy5sZW5n
dGggIT09IGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCApICkgewogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvYmplY3QgPSBuZXcgR3JvdXAoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnV2hlbiBza2lubmluZywgbnVtYmVyIG9mIHZlcnRpY2VzICgnICsgZ2VvbWV0cnku
dmVydGljZXMubGVuZ3RoICsgJyksIHNraW5JbmRpY2VzICgnICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdlb21ldHJ5LnNraW5JbmRpY2VzLmxlbmd0aCArICcpLCBhbmQgc2tpbldlaWdodHMg
KCcgKyBnZW9tZXRyeS5za2luV2VpZ2h0cy5sZW5ndGggKyAnKSBzaG91bGQgbWF0Y2guJyApOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0ID0gbmV3IE9iamVjdDNEKCk7CisgICAgICAgICAgICBmdW5jdGlv
biBwYXJzZU1vcnBoaW5nKCBqc29uLCBnZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBqc29uLnNjYWxlOwogCi0gICAgICAgICAgICAg
ICAgb2JqZWN0LnV1aWQgPSBkYXRhLnV1aWQ7CisgICAgICAgICAgICAgICAgaWYgKCBqc29uLm1v
cnBoVGFyZ2V0cyAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBkYXRh
Lm5hbWUgIT09IHVuZGVmaW5lZCApIG9iamVjdC5uYW1lID0gZGF0YS5uYW1lOwotICAgICAgICAg
ICAgICAgIGlmICggZGF0YS5tYXRyaXggIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0ganNvbi5tb3JwaFRhcmdldHMubGVuZ3RoOyBpIDwg
bDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICBtYXRyaXguZnJvbUFycmF5KCBkYXRh
Lm1hdHJpeCApOwotICAgICAgICAgICAgICAgICAgICBtYXRyaXguZGVjb21wb3NlKCBvYmplY3Qu
cG9zaXRpb24sIG9iamVjdC5xdWF0ZXJuaW9uLCBvYmplY3Quc2NhbGUgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1sgaSBdID0ge307CisgICAgICAgICAg
ICAgICAgICAgICAgICBnZW9tZXRyeS5tb3JwaFRhcmdldHNbIGkgXS5uYW1lID0ganNvbi5tb3Jw
aFRhcmdldHNbIGkgXS5uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkubW9y
cGhUYXJnZXRzWyBpIF0udmVydGljZXMgPSBbXTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHN0VmVydGljZXMgPSBnZW9tZXRyeS5tb3Jw
aFRhcmdldHNbIGkgXS52ZXJ0aWNlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmNW
ZXJ0aWNlcyA9IGpzb24ubW9ycGhUYXJnZXRzWyBpIF0udmVydGljZXM7CiAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCBkYXRhLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSBvYmplY3QucG9zaXRp
b24uZnJvbUFycmF5KCBkYXRhLnBvc2l0aW9uICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
ZGF0YS5yb3RhdGlvbiAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnJvdGF0aW9uLmZyb21BcnJheSgg
ZGF0YS5yb3RhdGlvbiApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEucXVhdGVybmlv
biAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnF1YXRlcm5pb24uZnJvbUFycmF5KCBkYXRhLnF1YXRl
cm5pb24gKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnNjYWxlICE9PSB1bmRlZmlu
ZWQgKSBvYmplY3Quc2NhbGUuZnJvbUFycmF5KCBkYXRhLnNjYWxlICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCB2YXIgdiA9IDAsIHZsID0gc3JjVmVydGljZXMubGVuZ3RoOyB2IDwg
dmw7IHYgKz0gMyApIHsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXgueCA9IHNyY1ZlcnRpY2VzWyB2IF0gKiBzY2FsZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2ZXJ0ZXgueSA9IHNyY1ZlcnRpY2VzWyB2ICsgMSBdICogc2NhbGU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4LnogPSBzcmNWZXJ0aWNlc1sgdiAr
IDIgXSAqIHNjYWxlOwogCi0gICAgICAgICAgICAgICAgaWYgKCBkYXRhLmNhc3RTaGFkb3cgIT09
IHVuZGVmaW5lZCApIG9iamVjdC5jYXN0U2hhZG93ID0gZGF0YS5jYXN0U2hhZG93OwotICAgICAg
ICAgICAgICAgIGlmICggZGF0YS5yZWNlaXZlU2hhZG93ICE9PSB1bmRlZmluZWQgKSBvYmplY3Qu
cmVjZWl2ZVNoYWRvdyA9IGRhdGEucmVjZWl2ZVNoYWRvdzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkc3RWZXJ0aWNlcy5wdXNoKCB2ZXJ0ZXggKTsKIAotICAgICAgICAgICAgICAgIGlm
ICggZGF0YS5zaGFkb3cgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkYXRhLnNoYWRvdy5iaWFzICE9PSB1bmRlZmluZWQgKSBvYmplY3Qu
c2hhZG93LmJpYXMgPSBkYXRhLnNoYWRvdy5iaWFzOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGEuc2hhZG93LnJhZGl1cyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnNoYWRvdy5yYWRpdXMg
PSBkYXRhLnNoYWRvdy5yYWRpdXM7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5zaGFk
b3cubWFwU2l6ZSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnNoYWRvdy5tYXBTaXplLmZyb21BcnJh
eSggZGF0YS5zaGFkb3cubWFwU2l6ZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEu
c2hhZG93LmNhbWVyYSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnNoYWRvdy5jYW1lcmEgPSB0aGlz
LnBhcnNlT2JqZWN0KCBkYXRhLnNoYWRvdy5jYW1lcmEgKTsKKyAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBkYXRhLnZpc2li
bGUgIT09IHVuZGVmaW5lZCApIG9iamVjdC52aXNpYmxlID0gZGF0YS52aXNpYmxlOwotICAgICAg
ICAgICAgICAgIGlmICggZGF0YS51c2VyRGF0YSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnVzZXJE
YXRhID0gZGF0YS51c2VyRGF0YTsKKyAgICAgICAgICAgICAgICBpZiAoIGpzb24ubW9ycGhDb2xv
cnMgIT09IHVuZGVmaW5lZCAmJiBqc29uLm1vcnBoQ29sb3JzLmxlbmd0aCA+IDAgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuSlNPTkxvYWRlcjogIm1vcnBo
Q29sb3JzIiBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2luZyB0aGVtIGFzIGZhY2UgY29sb3JzLicg
KTsKIAotICAgICAgICAgICAgICAgIGlmICggZGF0YS5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlczsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG1vcnBoQ29sb3JzID0ganNvbi5tb3JwaENvbG9yc1sgMCBdLmNv
bG9yczsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgY2hpbGQgaW4gZGF0YS5jaGls
ZHJlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gZmFjZXMu
bGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
LmFkZCggdGhpcy5wYXJzZU9iamVjdCggZGF0YS5jaGlsZHJlblsgY2hpbGQgXSwgZ2VvbWV0cmll
cywgbWF0ZXJpYWxzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VzWyBpIF0uY29s
b3IuZnJvbUFycmF5KCBtb3JwaENvbG9ycywgaSAqIDMgKTsKIAogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIGRhdGEudHlw
ZSA9PT0gJ0xPRCcgKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGxldmVscyA9IGRhdGEubGV2ZWxzOworICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VBbmltYXRp
b25zKCBqc29uLCBnZW9tZXRyeSApIHsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
bCA9IDA7IGwgPCBsZXZlbHMubGVuZ3RoOyBsICsrICkgeworICAgICAgICAgICAgICAgIHZhciBv
dXRwdXRBbmltYXRpb25zID0gW107CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZl
bCA9IGxldmVsc1sgbCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gb2Jq
ZWN0LmdldE9iamVjdEJ5UHJvcGVydHkoICd1dWlkJywgbGV2ZWwub2JqZWN0ICk7CisgICAgICAg
ICAgICAgICAgLy8gcGFyc2Ugb2xkIHN0eWxlIEJvbmUvSGllcmFyY2h5IGFuaW1hdGlvbnMKKyAg
ICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IFtdOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGNoaWxkICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBq
c29uLmFuaW1hdGlvbiAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0LmFkZExldmVsKCBjaGlsZCwgbGV2ZWwuZGlzdGFuY2UgKTsKKyAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKCBqc29uLmFuaW1hdGlvbiApOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIGpzb24uYW5pbWF0aW9ucyAhPT0gdW5kZWZpbmVk
ICkgewogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIGpzb24u
YW5pbWF0aW9ucy5sZW5ndGggKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuY29uY2F0KCBq
c29uLmFuaW1hdGlvbnMgKTsKIAotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKIAotICAgICAgICB9KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlv
bnMucHVzaCgganNvbi5hbmltYXRpb25zICk7CiAKLSAgICB9ICk7CisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgIHZhciBURVhUVVJFX01BUFBJTkcgPSB7Ci0gICAgICAgIFVWTWFwcGluZzog
VVZNYXBwaW5nLAotICAgICAgICBDdWJlUmVmbGVjdGlvbk1hcHBpbmc6IEN1YmVSZWZsZWN0aW9u
TWFwcGluZywKLSAgICAgICAgQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOiBDdWJlUmVmcmFjdGlvbk1h
cHBpbmcsCi0gICAgICAgIEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOiBFcXVpcmVj
dGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZywKLSAgICAgICAgRXF1aXJlY3Rhbmd1bGFyUmVmcmFj
dGlvbk1hcHBpbmc6IEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nLAotICAgICAgICBT
cGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZzogU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmcsCi0g
ICAgICAgIEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOiBDdWJlVVZSZWZsZWN0aW9uTWFwcGluZywK
LSAgICAgICAgQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6IEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5n
Ci0gICAgfTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICB2YXIgVEVYVFVSRV9XUkFQUElORyA9
IHsKLSAgICAgICAgUmVwZWF0V3JhcHBpbmc6IFJlcGVhdFdyYXBwaW5nLAotICAgICAgICBDbGFt
cFRvRWRnZVdyYXBwaW5nOiBDbGFtcFRvRWRnZVdyYXBwaW5nLAotICAgICAgICBNaXJyb3JlZFJl
cGVhdFdyYXBwaW5nOiBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nCi0gICAgfTsKKyAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgaSArKyApIHsKIAot
ICAgIHZhciBURVhUVVJFX0ZJTFRFUiA9IHsKLSAgICAgICAgTmVhcmVzdEZpbHRlcjogTmVhcmVz
dEZpbHRlciwKLSAgICAgICAgTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6IE5lYXJlc3RNaXBN
YXBOZWFyZXN0RmlsdGVyLAotICAgICAgICBOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOiBOZWFy
ZXN0TWlwTWFwTGluZWFyRmlsdGVyLAotICAgICAgICBMaW5lYXJGaWx0ZXI6IExpbmVhckZpbHRl
ciwKLSAgICAgICAgTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjogTGluZWFyTWlwTWFwTmVhcmVz
dEZpbHRlciwKLSAgICAgICAgTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOiBMaW5lYXJNaXBNYXBM
aW5lYXJGaWx0ZXIKLSAgICB9OworICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcCA9IEFuaW1h
dGlvbkNsaXAucGFyc2VBbmltYXRpb24oIGFuaW1hdGlvbnNbIGkgXSwgZ2VvbWV0cnkuYm9uZXMg
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjbGlwICkgb3V0cHV0QW5pbWF0aW9ucy5wdXNo
KCBjbGlwICk7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIHp6ODUgLyBodHRwOi8vd3d3Lmxh
YjRnYW1lcy5uZXQveno4NS9ibG9nCi0gICAgICoKLSAgICAgKiBCZXppZXIgQ3VydmVzIGZvcm11
bGFzIG9idGFpbmVkIGZyb20KLSAgICAgKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0LD
qXppZXJfY3VydmUKLSAgICAgKi8KKyAgICAgICAgICAgICAgICB9CiAKLSAgICBmdW5jdGlvbiBD
YXRtdWxsUm9tKCB0LCBwMCwgcDEsIHAyLCBwMyApIHsKKyAgICAgICAgICAgICAgICAvLyBwYXJz
ZSBpbXBsaWNpdCBtb3JwaCBhbmltYXRpb25zCisgICAgICAgICAgICAgICAgaWYgKCBnZW9tZXRy
eS5tb3JwaFRhcmdldHMgKSB7CiAKLSAgICAgICAgdmFyIHYwID0gKCBwMiAtIHAwICkgKiAwLjU7
Ci0gICAgICAgIHZhciB2MSA9ICggcDMgLSBwMSApICogMC41OwotICAgICAgICB2YXIgdDIgPSB0
ICogdDsKLSAgICAgICAgdmFyIHQzID0gdCAqIHQyOwotICAgICAgICByZXR1cm4gKCAyICogcDEg
LSAyICogcDIgKyB2MCArIHYxICkgKiB0MyArICggLSAzICogcDEgKyAzICogcDIgLSAyICogdjAg
LSB2MSApICogdDIgKyB2MCAqIHQgKyBwMTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzog
RmlndXJlIG91dCB3aGF0IGFuIGFwcHJvcHJhaXRlIEZQUyBpcyBmb3IgbW9ycGggdGFyZ2V0IGFu
aW1hdGlvbnMgLS0gZGVmYXVsdGluZyB0byAxMCwgYnV0IHJlYWxseSBpdCBpcyBjb21wbGV0ZWx5
IGFyYml0cmFyeS4KKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vcnBoQW5pbWF0aW9uQ2xpcHMg
PSBBbmltYXRpb25DbGlwLkNyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKCBnZW9t
ZXRyeS5tb3JwaFRhcmdldHMsIDEwICk7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dEFuaW1h
dGlvbnMgPSBvdXRwdXRBbmltYXRpb25zLmNvbmNhdCggbW9ycGhBbmltYXRpb25DbGlwcyApOwog
Ci0gICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgIC8vCisgICAgICAgICAgICAgICAgaWYg
KCBvdXRwdXRBbmltYXRpb25zLmxlbmd0aCA+IDAgKSBnZW9tZXRyeS5hbmltYXRpb25zID0gb3V0
cHV0QW5pbWF0aW9uczsKIAotICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllclAwKCB0LCBwICkg
eworICAgICAgICAgICAgfQogCi0gICAgICAgIHZhciBrID0gMSAtIHQ7Ci0gICAgICAgIHJldHVy
biBrICogayAqIHA7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2UoIGpzb24sIHRl
eHR1cmVQYXRoICkgewogCi0gICAgfQorICAgICAgICAgICAgICAgIGlmICgganNvbi5kYXRhICE9
PSB1bmRlZmluZWQgKSB7CiAKLSAgICBmdW5jdGlvbiBRdWFkcmF0aWNCZXppZXJQMSggdCwgcCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR2VvbWV0cnkgNC4wIHNwZWMKKyAgICAgICAgICAg
ICAgICAgICAganNvbiA9IGpzb24uZGF0YTsKIAotICAgICAgICByZXR1cm4gMiAqICggMSAtIHQg
KSAqIHQgKiBwOworICAgICAgICAgICAgICAgIH0KIAotICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIGpzb24uc2NhbGUgIT09IHVuZGVmaW5lZCApIHsKIAotICAgIGZ1bmN0aW9uIFF1YWRyYXRp
Y0JlemllclAyKCB0LCBwICkgeworICAgICAgICAgICAgICAgICAgICBqc29uLnNjYWxlID0gMS4w
IC8ganNvbi5zY2FsZTsKIAotICAgICAgICByZXR1cm4gdCAqIHQgKiBwOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgICAgIGpzb24uc2NhbGUgPSAx
LjA7CiAKLSAgICBmdW5jdGlvbiBRdWFkcmF0aWNCZXppZXIoIHQsIHAwLCBwMSwgcDIgKSB7Cisg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBRdWFkcmF0aWNCZXppZXJQMCggdCwg
cDAgKSArIFF1YWRyYXRpY0JlemllclAxKCB0LCBwMSApICsKLSAgICAgICAgICAgIFF1YWRyYXRp
Y0JlemllclAyKCB0LCBwMiApOworICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBH
ZW9tZXRyeSgpOwogCi0gICAgfQorICAgICAgICAgICAgICAgIHBhcnNlTW9kZWwoIGpzb24sIGdl
b21ldHJ5ICk7CisgICAgICAgICAgICAgICAgcGFyc2VTa2luKCBqc29uLCBnZW9tZXRyeSApOwor
ICAgICAgICAgICAgICAgIHBhcnNlTW9ycGhpbmcoIGpzb24sIGdlb21ldHJ5ICk7CisgICAgICAg
ICAgICAgICAgcGFyc2VBbmltYXRpb25zKCBqc29uLCBnZW9tZXRyeSApOwogCi0gICAgLy8KKyAg
ICAgICAgICAgICAgICBnZW9tZXRyeS5jb21wdXRlRmFjZU5vcm1hbHMoKTsKKyAgICAgICAgICAg
ICAgICBnZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTsKIAotICAgIGZ1bmN0aW9uIEN1
YmljQmV6aWVyUDAoIHQsIHAgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBqc29uLm1hdGVyaWFs
cyA9PT0gdW5kZWZpbmVkIHx8IGpzb24ubWF0ZXJpYWxzLmxlbmd0aCA9PT0gMCApIHsKIAotICAg
ICAgICB2YXIgayA9IDEgLSB0OwotICAgICAgICByZXR1cm4gayAqIGsgKiBrICogcDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgZ2VvbWV0cnk6IGdlb21ldHJ5IH07CiAKLSAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgIGZ1bmN0aW9uIEN1YmljQmV6aWVyUDEoIHQs
IHAgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbHMgPSBMb2FkZXIucHJvdG90
eXBlLmluaXRNYXRlcmlhbHMoIGpzb24ubWF0ZXJpYWxzLCB0ZXh0dXJlUGF0aCwgdGhpcy5jcm9z
c09yaWdpbiApOwogCi0gICAgICAgIHZhciBrID0gMSAtIHQ7Ci0gICAgICAgIHJldHVybiAzICog
ayAqIGsgKiB0ICogcDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZ2VvbWV0cnk6IGdl
b21ldHJ5LCBtYXRlcmlhbHM6IG1hdGVyaWFscyB9OwogCi0gICAgfQorICAgICAgICAgICAgICAg
IH0KIAotICAgIGZ1bmN0aW9uIEN1YmljQmV6aWVyUDIoIHQsIHAgKSB7CisgICAgICAgICAgICB9
OwogCi0gICAgICAgIHJldHVybiAzICogKCAxIC0gdCApICogdCAqIHQgKiBwOworICAgICAgICB9
ICkoKQogCi0gICAgfQorICAgIH0gKTsKIAotICAgIGZ1bmN0aW9uIEN1YmljQmV6aWVyUDMoIHQs
IHAgKSB7CisgICAgLyoqCisgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNv
bS8KKyAgICAgKi8KIAotICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogcDsKKyAgICBmdW5jdGlv
biBPYmplY3RMb2FkZXIoIG1hbmFnZXIgKSB7CisKKyAgICAgICAgdGhpcy5tYW5hZ2VyID0gKCBt
YW5hZ2VyICE9PSB1bmRlZmluZWQgKSA/IG1hbmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7
CisgICAgICAgIHRoaXMudGV4dHVyZVBhdGggPSAnJzsKIAogICAgIH0KIAotICAgIGZ1bmN0aW9u
IEN1YmljQmV6aWVyKCB0LCBwMCwgcDEsIHAyLCBwMyApIHsKKyAgICBPYmplY3QuYXNzaWduKCBP
YmplY3RMb2FkZXIucHJvdG90eXBlLCB7CiAKLSAgICAgICAgcmV0dXJuIEN1YmljQmV6aWVyUDAo
IHQsIHAwICkgKyBDdWJpY0JlemllclAxKCB0LCBwMSApICsgQ3ViaWNCZXppZXJQMiggdCwgcDIg
KSArCi0gICAgICAgICAgICBDdWJpY0JlemllclAzKCB0LCBwMyApOworICAgICAgICBjcm9zc09y
aWdpbjogJ2Fub255bW91cycsCiAKLSAgICB9CisgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICggdXJs
LCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CiAKLSAgICAvKioKLSAgICAgKiBAYXV0
aG9yIHp6ODUgLyBodHRwOi8vd3d3LmxhYjRnYW1lcy5uZXQveno4NS9ibG9nCi0gICAgICogRXh0
ZW5zaWJsZSBjdXJ2ZSBvYmplY3QKLSAgICAgKgotICAgICAqIFNvbWUgY29tbW9uIG9mIGN1cnZl
IG1ldGhvZHM6Ci0gICAgICogLmdldFBvaW50KHQpLCBnZXRUYW5nZW50KHQpCi0gICAgICogLmdl
dFBvaW50QXQodSksIGdldFRhbmdlbnRBdCh1KQotICAgICAqIC5nZXRQb2ludHMoKSwgLmdldFNw
YWNlZFBvaW50cygpCi0gICAgICogLmdldExlbmd0aCgpCi0gICAgICogLnVwZGF0ZUFyY0xlbmd0
aHMoKQotICAgICAqCi0gICAgICogVGhpcyBmb2xsb3dpbmcgY3VydmVzIGluaGVyaXQgZnJvbSBU
SFJFRS5DdXJ2ZToKLSAgICAgKgotICAgICAqIC0tIDJEIGN1cnZlcyAtLQotICAgICAqIFRIUkVF
LkFyY0N1cnZlCi0gICAgICogVEhSRUUuQ3ViaWNCZXppZXJDdXJ2ZQotICAgICAqIFRIUkVFLkVs
bGlwc2VDdXJ2ZQotICAgICAqIFRIUkVFLkxpbmVDdXJ2ZQotICAgICAqIFRIUkVFLlF1YWRyYXRp
Y0JlemllckN1cnZlCi0gICAgICogVEhSRUUuU3BsaW5lQ3VydmUKLSAgICAgKgotICAgICAqIC0t
IDNEIGN1cnZlcyAtLQotICAgICAqIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMKLSAgICAgKiBUSFJF
RS5DdWJpY0JlemllckN1cnZlMwotICAgICAqIFRIUkVFLkxpbmVDdXJ2ZTMKLSAgICAgKiBUSFJF
RS5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMKLSAgICAgKgotICAgICAqIEEgc2VyaWVzIG9mIGN1cnZl
cyBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBUSFJFRS5DdXJ2ZVBhdGguCi0gICAgICoKLSAgICAg
KiovCisgICAgICAgICAgICBpZiAoIHRoaXMudGV4dHVyZVBhdGggPT09ICcnICkgewogCi0gICAg
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCi0gICAgICogIEFic3RyYWN0IEN1cnZlIGJhc2UgY2xhc3MKLSAgICAgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisg
ICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlUGF0aCA9IHVybC5zdWJzdHJpbmcoIDAsIHVybC5s
YXN0SW5kZXhPZiggJy8nICkgKyAxICk7CiAKLSAgICBmdW5jdGlvbiBDdXJ2ZSgpIHsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucyA9IDIwMDsKKyAgICAg
ICAgICAgIHZhciBzY29wZSA9IHRoaXM7CiAKLSAgICB9CisgICAgICAgICAgICB2YXIgbG9hZGVy
ID0gbmV3IEZpbGVMb2FkZXIoIHNjb3BlLm1hbmFnZXIgKTsKKyAgICAgICAgICAgIGxvYWRlci5s
b2FkKCB1cmwsIGZ1bmN0aW9uICggdGV4dCApIHsKIAotICAgIE9iamVjdC5hc3NpZ24oIEN1cnZl
LnByb3RvdHlwZSwgeworICAgICAgICAgICAgICAgIHZhciBqc29uID0gbnVsbDsKIAotICAgICAg
ICAvLyBWaXJ0dWFsIGJhc2UgY2xhc3MgbWV0aG9kIHRvIG92ZXJ3cml0ZSBhbmQgaW1wbGVtZW50
IGluIHN1YmNsYXNzZXMKLSAgICAgICAgLy8gIC0gdCBbMCAuLiAxXQorICAgICAgICAgICAgICAg
IHRyeSB7CiAKLSAgICAgICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAganNvbiA9IEpTT04ucGFyc2UoIHRleHQgKTsKIAotICAgICAgICAgICAgY29uc29sZS53
YXJuKCAnVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4nICk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZXJyb3IgKSB7
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBvbkVycm9yICE9PSB1bmRl
ZmluZWQgKSBvbkVycm9yKCBlcnJvciApOwogCi0gICAgICAgIC8vIEdldCBwb2ludCBhdCByZWxh
dGl2ZSBwb3NpdGlvbiBpbiBjdXJ2ZSBhY2NvcmRpbmcgdG8gYXJjIGxlbmd0aAotICAgICAgICAv
LyAtIHUgWzAgLi4gMV0KKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVF
Ok9iamVjdExvYWRlcjogQ2FuXCd0IHBhcnNlICcgKyB1cmwgKyAnLicsIGVycm9yLm1lc3NhZ2Ug
KTsKIAotICAgICAgICBnZXRQb2ludEF0OiBmdW5jdGlvbiAoIHUgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmdldFV0b1RtYXBwaW5n
KCB1ICk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludCggdCApOworICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgIHZhciBtZXRhZGF0YSA9IGpz
b24ubWV0YWRhdGE7CiAKLSAgICAgICAgLy8gR2V0IHNlcXVlbmNlIG9mIHBvaW50cyB1c2luZyBn
ZXRQb2ludCggdCApCisgICAgICAgICAgICAgICAgaWYgKCBtZXRhZGF0YSA9PT0gdW5kZWZpbmVk
IHx8IG1ldGFkYXRhLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS50eXBlLnRvTG93ZXJD
YXNlKCkgPT09ICdnZW9tZXRyeScgKSB7CiAKLSAgICAgICAgZ2V0UG9pbnRzOiBmdW5jdGlvbiAo
IGRpdmlzaW9ucyApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVF
Lk9iamVjdExvYWRlcjogQ2FuXCd0IGxvYWQgJyArIHVybCArICcuIFVzZSBUSFJFRS5KU09OTG9h
ZGVyIGluc3RlYWQuJyApOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
ICAgIGlmICggZGl2aXNpb25zID09PSB1bmRlZmluZWQgKSBkaXZpc2lvbnMgPSA1OworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtdOworICAgICAgICAgICAg
ICAgIHNjb3BlLnBhcnNlKCBqc29uLCBvbkxvYWQgKTsKIAotICAgICAgICAgICAgZm9yICggdmFy
IGQgPSAwOyBkIDw9IGRpdmlzaW9uczsgZCArKyApIHsKKyAgICAgICAgICAgIH0sIG9uUHJvZ3Jl
c3MsIG9uRXJyb3IgKTsKIAotICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCB0aGlzLmdldFBv
aW50KCBkIC8gZGl2aXNpb25zICkgKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAg
ICAgICBzZXRUZXh0dXJlUGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAg
cmV0dXJuIHBvaW50czsKKyAgICAgICAgICAgIHRoaXMudGV4dHVyZVBhdGggPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgLy8gR2V0IHNl
cXVlbmNlIG9mIHBvaW50cyB1c2luZyBnZXRQb2ludEF0KCB1ICkKKyAgICAgICAgc2V0Q3Jvc3NP
cmlnaW46IGZ1bmN0aW9uICggdmFsdWUgKSB7CiAKLSAgICAgICAgZ2V0U3BhY2VkUG9pbnRzOiBm
dW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKKyAgICAgICAgICAgIHRoaXMuY3Jvc3NPcmlnaW4gPSB2
YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBpZiAoIGRpdmlz
aW9ucyA9PT0gdW5kZWZpbmVkICkgZGl2aXNpb25zID0gNTsKKyAgICAgICAgfSwKKworICAgICAg
ICBwYXJzZTogZnVuY3Rpb24gKCBqc29uLCBvbkxvYWQgKSB7CiAKLSAgICAgICAgICAgIHZhciBw
b2ludHMgPSBbXTsKKyAgICAgICAgICAgIHZhciBzaGFwZXMgPSB0aGlzLnBhcnNlU2hhcGUoIGpz
b24uc2hhcGVzICk7CisgICAgICAgICAgICB2YXIgZ2VvbWV0cmllcyA9IHRoaXMucGFyc2VHZW9t
ZXRyaWVzKCBqc29uLmdlb21ldHJpZXMsIHNoYXBlcyApOwogCi0gICAgICAgICAgICBmb3IgKCB2
YXIgZCA9IDA7IGQgPD0gZGl2aXNpb25zOyBkICsrICkgeworICAgICAgICAgICAgdmFyIGltYWdl
cyA9IHRoaXMucGFyc2VJbWFnZXMoIGpzb24uaW1hZ2VzLCBmdW5jdGlvbiAoKSB7CiAKLSAgICAg
ICAgICAgICAgICBwb2ludHMucHVzaCggdGhpcy5nZXRQb2ludEF0KCBkIC8gZGl2aXNpb25zICkg
KTsKKyAgICAgICAgICAgICAgICBpZiAoIG9uTG9hZCAhPT0gdW5kZWZpbmVkICkgb25Mb2FkKCBv
YmplY3QgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOwogCi0gICAgICAgICAg
ICByZXR1cm4gcG9pbnRzOworICAgICAgICAgICAgdmFyIHRleHR1cmVzID0gdGhpcy5wYXJzZVRl
eHR1cmVzKCBqc29uLnRleHR1cmVzLCBpbWFnZXMgKTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlh
bHMgPSB0aGlzLnBhcnNlTWF0ZXJpYWxzKCBqc29uLm1hdGVyaWFscywgdGV4dHVyZXMgKTsKIAot
ICAgICAgICB9LAorICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMucGFyc2VPYmplY3QoIGpz
b24ub2JqZWN0LCBnZW9tZXRyaWVzLCBtYXRlcmlhbHMgKTsKIAotICAgICAgICAvLyBHZXQgdG90
YWwgY3VydmUgYXJjIGxlbmd0aAorICAgICAgICAgICAgaWYgKCBqc29uLmFuaW1hdGlvbnMgKSB7
CiAKLSAgICAgICAgZ2V0TGVuZ3RoOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgb2Jq
ZWN0LmFuaW1hdGlvbnMgPSB0aGlzLnBhcnNlQW5pbWF0aW9ucygganNvbi5hbmltYXRpb25zICk7
CiAKLSAgICAgICAgICAgIHZhciBsZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbGVuZ3Roc1sgbGVuZ3Rocy5sZW5ndGggLSAxIF07CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgfSwKKyAgICAgICAgICAgIGlmICgganNvbi5pbWFnZXMgPT09IHVuZGVmaW5l
ZCB8fCBqc29uLmltYWdlcy5sZW5ndGggPT09IDAgKSB7CiAKLSAgICAgICAgLy8gR2V0IGxpc3Qg
b2YgY3VtdWxhdGl2ZSBzZWdtZW50IGxlbmd0aHMKKyAgICAgICAgICAgICAgICBpZiAoIG9uTG9h
ZCAhPT0gdW5kZWZpbmVkICkgb25Mb2FkKCBvYmplY3QgKTsKIAotICAgICAgICBnZXRMZW5ndGhz
OiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKCBkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCApIGRpdmlzaW9ucyA9IHRoaXMuYXJjTGVuZ3Ro
RGl2aXNpb25zOworICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKIAotICAgICAgICAgICAgaWYg
KCB0aGlzLmNhY2hlQXJjTGVuZ3RocyAmJgotICAgICAgICAgICAgICAgICggdGhpcy5jYWNoZUFy
Y0xlbmd0aHMubGVuZ3RoID09PSBkaXZpc2lvbnMgKyAxICkgJiYKLSAgICAgICAgICAgICAgICAh
IHRoaXMubmVlZHNVcGRhdGUgKSB7CisgICAgICAgIH0sCiAKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7CisgICAgICAgIHBhcnNlU2hhcGU6IGZ1bmN0aW9uICgg
anNvbiApIHsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHNoYXBlcyA9IHt9Owog
Ci0gICAgICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IGpzb24gIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgdmFyIGNhY2hlID0gW107Ci0g
ICAgICAgICAgICB2YXIgY3VycmVudCwgbGFzdCA9IHRoaXMuZ2V0UG9pbnQoIDAgKTsKLSAgICAg
ICAgICAgIHZhciBwLCBzdW0gPSAwOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgY2FjaGUucHVz
aCggMCApOworICAgICAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSBuZXcgU2hhcGUoKS5mcm9t
SlNPTigganNvblsgaSBdICk7CiAKLSAgICAgICAgICAgIGZvciAoIHAgPSAxOyBwIDw9IGRpdmlz
aW9uczsgcCArKyApIHsKKyAgICAgICAgICAgICAgICAgICAgc2hhcGVzWyBzaGFwZS51dWlkIF0g
PSBzaGFwZTsKIAotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLmdldFBvaW50KCBwIC8g
ZGl2aXNpb25zICk7Ci0gICAgICAgICAgICAgICAgc3VtICs9IGN1cnJlbnQuZGlzdGFuY2VUbygg
bGFzdCApOwotICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goIHN1bSApOwotICAgICAgICAgICAg
ICAgIGxhc3QgPSBjdXJyZW50OworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB0aGlzLmNhY2hlQXJjTGVuZ3RocyA9IGNhY2hlOwotCi0gICAgICAgICAg
ICByZXR1cm4gY2FjaGU7IC8vIHsgc3VtczogY2FjaGUsIHN1bTogc3VtIH07IFN1bSBpcyBpbiB0
aGUgbGFzdCBlbGVtZW50LgorICAgICAgICAgICAgcmV0dXJuIHNoYXBlczsKIAogICAgICAgICB9
LAogCi0gICAgICAgIHVwZGF0ZUFyY0xlbmd0aHM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcGFy
c2VHZW9tZXRyaWVzOiBmdW5jdGlvbiAoIGpzb24sIHNoYXBlcyApIHsKIAotICAgICAgICAgICAg
dGhpcy5uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmdldExlbmd0aHMoKTsK
KyAgICAgICAgICAgIHZhciBnZW9tZXRyaWVzID0ge307CiAKLSAgICAgICAgfSwKKyAgICAgICAg
ICAgIGlmICgganNvbiAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgIC8vIEdpdmVuIHUgKCAw
IC4uIDEgKSwgZ2V0IGEgdCB0byBmaW5kIHAuIFRoaXMgZ2l2ZXMgeW91IHBvaW50cyB3aGljaCBh
cmUgZXF1aWRpc3RhbnQKKyAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnlMb2FkZXIgPSBuZXcg
SlNPTkxvYWRlcigpOworICAgICAgICAgICAgICAgIHZhciBidWZmZXJHZW9tZXRyeUxvYWRlciA9
IG5ldyBCdWZmZXJHZW9tZXRyeUxvYWRlcigpOwogCi0gICAgICAgIGdldFV0b1RtYXBwaW5nOiBm
dW5jdGlvbiAoIHUsIGRpc3RhbmNlICkgeworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgbCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgdmFyIGFy
Y0xlbmd0aHMgPSB0aGlzLmdldExlbmd0aHMoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGdl
b21ldHJ5OworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGpzb25bIGkgXTsKIAotICAg
ICAgICAgICAgdmFyIGkgPSAwLCBpbCA9IGFyY0xlbmd0aHMubGVuZ3RoOworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKCBkYXRhLnR5cGUgKSB7CiAKLSAgICAgICAgICAgIHZhciB0YXJnZXRB
cmNMZW5ndGg7IC8vIFRoZSB0YXJnZXRlZCB1IGRpc3RhbmNlIHZhbHVlIHRvIGdldAorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnUGxhbmVHZW9tZXRyeSc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdQbGFuZUJ1ZmZlckdlb21ldHJ5JzoKIAotICAgICAgICAgICAgaWYgKCBk
aXN0YW5jZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IG5ldyBH
ZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS53aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEud2lkdGhTZWdtZW50cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWlnaHRTZWdtZW50cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICB0YXJnZXRBcmNMZW5n
dGggPSBkaXN0YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JveEdlb21l
dHJ5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JveEJ1ZmZlckdlb21ldHJ5JzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0N1YmVHZW9tZXRyeSc6IC8vIGJhY2t3YXJk
cyBjb21wYXRpYmxlCiAKLSAgICAgICAgICAgICAgICB0YXJnZXRBcmNMZW5ndGggPSB1ICogYXJj
TGVuZ3Roc1sgaWwgLSAxIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkg
PSBuZXcgR2VvbWV0cmllc1sgZGF0YS50eXBlIF0oCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLndpZHRoU2VnbWVudHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaGVpZ2h0U2VnbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVwdGhTZWdtZW50cworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgLy8gYmluYXJ5IHNlYXJjaCBmb3IgdGhlIGluZGV4
IHdpdGggbGFyZ2VzdCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGFyZ2V0IHUgZGlzdGFuY2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZUdlb21ldHJ5JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ0NpcmNsZUJ1ZmZlckdlb21ldHJ5JzoKIAotICAgICAgICAgICAgdmFy
IGxvdyA9IDAsIGhpZ2ggPSBpbCAtIDEsIGNvbXBhcmlzb247CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cmllc1sgZGF0YS50eXBlIF0oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmFkaXVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLnNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLnRoZXRhU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEudGhldGFMZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogCi0gICAgICAg
ICAgICB3aGlsZSAoIGxvdyA8PSBoaWdoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgaSA9IE1hdGguZmxvb3IoIGxvdyArICggaGlnaCAt
IGxvdyApIC8gMiApOyAvLyBsZXNzIGxpa2VseSB0byBvdmVyZmxvdywgdGhvdWdoIHByb2JhYmx5
IG5vdCBpc3N1ZSBoZXJlLCBKUyBkb2Vzbid0IHJlYWxseSBoYXZlIGludGVnZXJzLCBhbGwgbnVt
YmVycyBhcmUgZmxvYXRzCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDeWxpbmRlckdl
b21ldHJ5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0N5bGluZGVyQnVmZmVyR2Vv
bWV0cnknOgogCi0gICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9IGFyY0xlbmd0aHNbIGkgXSAt
IHRhcmdldEFyY0xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9
IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS5yYWRpdXNUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEucmFkaXVzQm90dG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yYWRpYWxTZWdtZW50
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWlnaHRTZWdtZW50cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5vcGVuRW5kZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudGhldGFTdGFydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YS50aGV0YUxlbmd0aAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIGNvbXBhcmlzb24gPCAwICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGxv
dyA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29uZUdlb21ldHJ5JzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbmVCdWZmZXJHZW9tZXRyeSc6CiAKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb21wYXJpc29uID4gMCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yYWRpdXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLnJhZGlhbFNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLmhlaWdodFNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLm9wZW5FbmRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YS50aGV0YVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRoZXRh
TGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgICAg
ICAgICBoaWdoID0gaSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
U3BoZXJlR2VvbWV0cnknOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3BoZXJlQnVm
ZmVyR2VvbWV0cnknOgogCi0gICAgICAgICAgICAgICAgICAgIGhpZ2ggPSBpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9
IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS5yYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
d2lkdGhTZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5oZWln
aHRTZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5waGlTdGFy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5waGlMZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudGhldGFTdGFydCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YS50aGV0YUxlbmd0aAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gRE9ORQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnRG9kZWNhaGVkcm9uR2VvbWV0cnknOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnknOgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnSWNvc2FoZWRyb25HZW9tZXRyeSc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5JzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ09jdGFoZWRyb25HZW9tZXRyeSc6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnknOgorICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnVGV0cmFoZWRyb25HZW9tZXRyeSc6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5JzoKIAotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEu
dHlwZSBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJhZGl1cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5kZXRhaWwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICBpID0gaGlnaDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCBhcmNMZW5ndGhzWyBpIF0g
PT09IHRhcmdldEFyY0xlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1Jp
bmdHZW9tZXRyeSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSaW5nQnVmZmVyR2Vv
bWV0cnknOgogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgLyAoIGlsIC0gMSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEudHlw
ZSBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmlubmVyUmFkaXVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm91dGVyUmFkaXVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRoZXRhU2VnbWVudHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGhpU2VnbWVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEudGhldGFTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS50aGV0YUxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgLy8gd2UgY291bGQgZ2V0IGZpbmVyIGdyYWluIGF0IGxlbmd0aHMsIG9yIHVz
ZSBzaW1wbGUgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBwb2ludHMKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ1RvcnVzR2VvbWV0cnknOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnVG9ydXNCdWZmZXJHZW9tZXRyeSc6CiAKLSAgICAgICAgICAgIHZhciBsZW5ndGhCZWZv
cmUgPSBhcmNMZW5ndGhzWyBpIF07Ci0gICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXIgPSBhcmNM
ZW5ndGhzWyBpICsgMSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0g
bmV3IEdlb21ldHJpZXNbIGRhdGEudHlwZSBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLnJhZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50
dWJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJhZGlhbFNlZ21lbnRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnR1YnVsYXJTZWdtZW50cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICB2YXIgc2VnbWVudExlbmd0aCA9IGxlbmd0
aEFmdGVyIC0gbGVuZ3RoQmVmb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hlcmUgd2UgYXJlIGJldHdlZW4gdGhlICdi
ZWZvcmUnIGFuZCAnYWZ0ZXInIHBvaW50cworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
VG9ydXNLbm90R2VvbWV0cnknOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVG9ydXNL
bm90QnVmZmVyR2VvbWV0cnknOgogCi0gICAgICAgICAgICB2YXIgc2VnbWVudEZyYWN0aW9uID0g
KCB0YXJnZXRBcmNMZW5ndGggLSBsZW5ndGhCZWZvcmUgKSAvIHNlZ21lbnRMZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cmllc1sgZGF0YS50
eXBlIF0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmFkaXVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnR1YmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEudHVidWxhclNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLnJhZGlhbFNlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
cQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIC8vIGFkZCB0
aGF0IGZyYWN0aW9uYWwgYW1vdW50IHRvIHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgdmFyIHQgPSAoIGkgKyBzZWdtZW50RnJhY3Rpb24gKSAvICgg
aWwgLSAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMYXRoZUdlb21ldHJ5JzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xhdGhlQnVmZmVyR2VvbWV0cnknOgogCi0g
ICAgICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRy
eSA9IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS5wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEuc2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGhpU3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucGhpTGVuZ3RoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIC8vIFJldHVybnMgYSB1bml0IHZlY3RvciB0
YW5nZW50IGF0IHQKLSAgICAgICAgLy8gSW4gY2FzZSBhbnkgc3ViIGN1cnZlIGRvZXMgbm90IGlt
cGxlbWVudCBpdHMgdGFuZ2VudCBkZXJpdmF0aW9uLAotICAgICAgICAvLyAyIHBvaW50cyBhIHNt
YWxsIGRlbHRhIGFwYXJ0IHdpbGwgYmUgdXNlZCB0byBmaW5kIGl0cyBncmFkaWVudAotICAgICAg
ICAvLyB3aGljaCBzZWVtcyB0byBnaXZlIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uCisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdQb2x5aGVkcm9uR2VvbWV0cnknOgorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5JzoKIAotICAgICAg
ICBnZXRUYW5nZW50OiBmdW5jdGlvbiAoIHQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cmllc1sgZGF0YS50eXBlIF0oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEudmVydGljZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEuaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5yYWRpdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGV0YWls
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIHZhciBkZWx0
YSA9IDAuMDAwMTsKLSAgICAgICAgICAgIHZhciB0MSA9IHQgLSBkZWx0YTsKLSAgICAgICAgICAg
IHZhciB0MiA9IHQgKyBkZWx0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgLy8gQ2FwcGluZyBpbiBjYXNlIG9mIGRhbmdlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnU2hhcGVHZW9tZXRyeSc6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdTaGFwZUJ1ZmZlckdlb21ldHJ5JzoKIAotICAgICAgICAgICAgaWYgKCB0MSA8IDAg
KSB0MSA9IDA7Ci0gICAgICAgICAgICBpZiAoIHQyID4gMSApIHQyID0gMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnlTaGFwZXMgPSBbXTsKIAotICAgICAgICAgICAg
dmFyIHB0MSA9IHRoaXMuZ2V0UG9pbnQoIHQxICk7Ci0gICAgICAgICAgICB2YXIgcHQyID0gdGhp
cy5nZXRQb2ludCggdDIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
aiA9IDAsIGpsID0gZGF0YS5zaGFwZXMubGVuZ3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICAg
ICAgICAgIHZhciB2ZWMgPSBwdDIuY2xvbmUoKS5zdWIoIHB0MSApOwotICAgICAgICAgICAgcmV0
dXJuIHZlYy5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNoYXBlID0gc2hhcGVzWyBkYXRhLnNoYXBlc1sgaiBdIF07CiAKLSAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlTaGFwZXMucHVzaCggc2hhcGUgKTsK
IAotICAgICAgICBnZXRUYW5nZW50QXQ6IGZ1bmN0aW9uICggdSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciB0ID0gdGhpcy5nZXRVdG9UbWFwcGlu
ZyggdSApOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFuZ2VudCggdCApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJpZXNbIGRhdGEudHlw
ZSBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYXBlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jdXJ2ZVNlZ21lbnRzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNvbXB1dGVGcmVuZXRGcmFtZXM6IGZ1bmN0aW9u
ICggc2VnbWVudHMsIGNsb3NlZCApIHsKIAotICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cu
Y3MuaW5kaWFuYS5lZHUvcHViL3RlY2hyZXBvcnRzL1RSNDI1LnBkZgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnRXh0cnVkZUdlb21ldHJ5JzoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ0V4dHJ1ZGVCdWZmZXJHZW9tZXRyeSc6CiAKLSAgICAgICAgICAgIHZhciBub3JtYWwg
PSBuZXcgVmVjdG9yMygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW9tZXRy
eVNoYXBlcyA9IFtdOwogCi0gICAgICAgICAgICB2YXIgdGFuZ2VudHMgPSBbXTsKLSAgICAgICAg
ICAgIHZhciBub3JtYWxzID0gW107Ci0gICAgICAgICAgICB2YXIgYmlub3JtYWxzID0gW107Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBqbCA9IGRhdGEuc2hh
cGVzLmxlbmd0aDsgaiA8IGpsOyBqICsrICkgewogCi0gICAgICAgICAgICB2YXIgdmVjID0gbmV3
IFZlY3RvcjMoKTsKLSAgICAgICAgICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSBzaGFwZXNbIGRhdGEuc2hhcGVz
WyBqIF0gXTsKIAotICAgICAgICAgICAgdmFyIGksIHUsIHRoZXRhOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYXBlcy5wdXNoKCBzaGFwZSApOwogCi0gICAgICAg
ICAgICAvLyBjb21wdXRlIHRoZSB0YW5nZW50IHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0
aGUgY3VydmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpICsrICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBleHRydWRlUGF0aCA9IGRhdGEub3B0aW9ucy5leHRydWRlUGF0aDsKIAotICAg
ICAgICAgICAgICAgIHUgPSBpIC8gc2VnbWVudHM7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBleHRydWRlUGF0aCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICAgICAg
dGFuZ2VudHNbIGkgXSA9IHRoaXMuZ2V0VGFuZ2VudEF0KCB1ICk7Ci0gICAgICAgICAgICAgICAg
dGFuZ2VudHNbIGkgXS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5vcHRpb25zLmV4dHJ1ZGVQYXRoID0gbmV3IEN1cnZlc1sgZXh0cnVkZVBhdGgudHlw
ZSBdKCkuZnJvbUpTT04oIGV4dHJ1ZGVQYXRoICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIHNlbGVjdCBhbiBpbml0aWFs
IG5vcm1hbCB2ZWN0b3IgcGVycGVuZGljdWxhciB0byB0aGUgZmlyc3QgdGFuZ2VudCB2ZWN0b3Is
Ci0gICAgICAgICAgICAvLyBhbmQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbWluaW11bSB0YW5n
ZW50IHh5eiBjb21wb25lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9
IG5ldyBHZW9tZXRyaWVzWyBkYXRhLnR5cGUgXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VvbWV0cnlTaGFwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEub3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAg
IG5vcm1hbHNbIDAgXSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICBiaW5vcm1hbHNbIDAg
XSA9IG5ldyBWZWN0b3IzKCk7Ci0gICAgICAgICAgICB2YXIgbWluID0gTnVtYmVyLk1BWF9WQUxV
RTsKLSAgICAgICAgICAgIHZhciB0eCA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnggKTsKLSAg
ICAgICAgICAgIHZhciB0eSA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnkgKTsKLSAgICAgICAg
ICAgIHZhciB0eiA9IE1hdGguYWJzKCB0YW5nZW50c1sgMCBdLnogKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCB0eCA8PSBtaW4gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCdWZmZXJHZW9tZXRyeSc6CiAKLSAgICAgICAg
ICAgICAgICBtaW4gPSB0eDsKLSAgICAgICAgICAgICAgICBub3JtYWwuc2V0KCAxLCAwLCAwICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBidWZmZXJHZW9tZXRyeUxv
YWRlci5wYXJzZSggZGF0YSApOwogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGlmICggdHkgPD0gbWluICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnR2VvbWV0cnknOgogCi0gICAgICAgICAgICAgICAgbWlu
ID0gdHk7Ci0gICAgICAgICAgICAgICAgbm9ybWFsLnNldCggMCwgMSwgMCApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gZ2VvbWV0cnlMb2FkZXIucGFyc2UoIGRhdGEs
IHRoaXMudGV4dHVyZVBhdGggKS5nZW9tZXRyeTsKIAotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBpZiAoIHR6IDw9IG1pbiAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAKLSAgICAgICAgICAgICAgICBu
b3JtYWwuc2V0KCAwLCAwLCAxICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9hZGVyOiBVbnN1cHBvcnRlZCBnZW9tZXRyeSB0eXBlICIn
ICsgZGF0YS50eXBlICsgJyInICk7CiAKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdmVjLmNyb3NzVmVjdG9ycyggdGFu
Z2VudHNbIDAgXSwgbm9ybWFsICkubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgbm9ybWFsc1sgMCBdLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIDAgXSwg
dmVjICk7Ci0gICAgICAgICAgICBiaW5vcm1hbHNbIDAgXS5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRz
WyAwIF0sIG5vcm1hbHNbIDAgXSApOworICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS51dWlk
ID0gZGF0YS51dWlkOwogCisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5uYW1lICE9PSB1
bmRlZmluZWQgKSBnZW9tZXRyeS5uYW1lID0gZGF0YS5uYW1lOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkgPT09IHRydWUgJiYgZGF0YS51c2VyRGF0
YSAhPT0gdW5kZWZpbmVkICkgZ2VvbWV0cnkudXNlckRhdGEgPSBkYXRhLnVzZXJEYXRhOwogCi0g
ICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBzbG93bHktdmFyeWluZyBub3JtYWwgYW5kIGJpbm9y
bWFsIHZlY3RvcnMgZm9yIGVhY2ggc2VnbWVudCBvbiB0aGUgY3VydmUKKyAgICAgICAgICAgICAg
ICAgICAgZ2VvbWV0cmllc1sgZGF0YS51dWlkIF0gPSBnZW9tZXRyeTsKIAotICAgICAgICAgICAg
Zm9yICggaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgbm9ybWFsc1sgaSBdID0gbm9ybWFsc1sgaSAtIDEgXS5jbG9uZSgp
OworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYmlub3JtYWxzWyBpIF0gPSBiaW5v
cm1hbHNbIGkgLSAxIF0uY2xvbmUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyaWVzOwog
Ci0gICAgICAgICAgICAgICAgdmVjLmNyb3NzVmVjdG9ycyggdGFuZ2VudHNbIGkgLSAxIF0sIHRh
bmdlbnRzWyBpIF0gKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGlmICggdmVjLmxl
bmd0aCgpID4gTnVtYmVyLkVQU0lMT04gKSB7CisgICAgICAgIHBhcnNlTWF0ZXJpYWxzOiBmdW5j
dGlvbiAoIGpzb24sIHRleHR1cmVzICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZlYy5ub3Jt
YWxpemUoKTsKKyAgICAgICAgICAgIHZhciBtYXRlcmlhbHMgPSB7fTsKIAotICAgICAgICAgICAg
ICAgICAgICB0aGV0YSA9IE1hdGguYWNvcyggX01hdGguY2xhbXAoIHRhbmdlbnRzWyBpIC0gMSBd
LmRvdCggdGFuZ2VudHNbIGkgXSApLCAtIDEsIDEgKSApOyAvLyBjbGFtcCBmb3IgZmxvYXRpbmcg
cHQgZXJyb3JzCisgICAgICAgICAgICBpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICBub3JtYWxzWyBpIF0uYXBwbHlNYXRyaXg0KCBtYXQubWFrZVJvdGF0
aW9uQXhpcyggdmVjLCB0aGV0YSApICk7CisgICAgICAgICAgICAgICAgdmFyIGxvYWRlciA9IG5l
dyBNYXRlcmlhbExvYWRlcigpOworICAgICAgICAgICAgICAgIGxvYWRlci5zZXRUZXh0dXJlcygg
dGV4dHVyZXMgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGwgPSBqc29uLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICBiaW5vcm1hbHNbIGkgXS5jcm9zc1ZlY3RvcnMoIHRhbmdlbnRzWyBpIF0sIG5vcm1hbHNb
IGkgXSApOworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGpzb25bIGkgXTsKIAotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEudHlwZSA9PT0gJ011bHRp
TWF0ZXJpYWwnICkgewogCi0gICAgICAgICAgICAvLyBpZiB0aGUgY3VydmUgaXMgY2xvc2VkLCBw
b3N0cHJvY2VzcyB0aGUgdmVjdG9ycyBzbyB0aGUgZmlyc3QgYW5kIGxhc3Qgbm9ybWFsIHZlY3Rv
cnMgYXJlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGVkCiAK
LSAgICAgICAgICAgIGlmICggY2xvc2VkID09PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGFycmF5ID0gW107CiAKLSAgICAgICAgICAgICAgICB0aGV0YSA9IE1hdGguYWNv
cyggX01hdGguY2xhbXAoIG5vcm1hbHNbIDAgXS5kb3QoIG5vcm1hbHNbIHNlZ21lbnRzIF0gKSwg
LSAxLCAxICkgKTsKLSAgICAgICAgICAgICAgICB0aGV0YSAvPSBzZWdtZW50czsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsgaiA8IGRhdGEubWF0ZXJpYWxzLmxlbmd0
aDsgaiArKyApIHsKIAotICAgICAgICAgICAgICAgIGlmICggdGFuZ2VudHNbIDAgXS5kb3QoIHZl
Yy5jcm9zc1ZlY3RvcnMoIG5vcm1hbHNbIDAgXSwgbm9ybWFsc1sgc2VnbWVudHMgXSApICkgPiAw
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goIGxvYWRlci5wYXJz
ZSggZGF0YS5tYXRlcmlhbHNbIGogXSApICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGhldGEg
PSAtIHRoZXRhOworICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxzWyBkYXRhLnV1aWQgXSA9IGFycmF5
OwogCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDE7IGkgPD0gc2VnbWVudHM7IGkgKysgKSB7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8g
dHdpc3QgYSBsaXR0bGUuLi4KLSAgICAgICAgICAgICAgICAgICAgbm9ybWFsc1sgaSBdLmFwcGx5
TWF0cml4NCggbWF0Lm1ha2VSb3RhdGlvbkF4aXMoIHRhbmdlbnRzWyBpIF0sIHRoZXRhICogaSAp
ICk7Ci0gICAgICAgICAgICAgICAgICAgIGJpbm9ybWFsc1sgaSBdLmNyb3NzVmVjdG9ycyggdGFu
Z2VudHNbIGkgXSwgbm9ybWFsc1sgaSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRl
cmlhbHNbIGRhdGEudXVpZCBdID0gbG9hZGVyLnBhcnNlKCBkYXRhICk7CisKKyAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdGFuZ2VudHM6IHRhbmdlbnRzLAotICAg
ICAgICAgICAgICAgIG5vcm1hbHM6IG5vcm1hbHMsCi0gICAgICAgICAgICAgICAgYmlub3JtYWxz
OiBiaW5vcm1hbHMKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gbWF0ZXJpYWxz
OwogCi0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgIH0gKTsKKyAgICAgICAgcGFyc2VBbmlt
YXRpb25zOiBmdW5jdGlvbiAoIGpzb24gKSB7CiAKLSAgICBmdW5jdGlvbiBMaW5lQ3VydmUoIHYx
LCB2MiApIHsKKyAgICAgICAgICAgIHZhciBhbmltYXRpb25zID0gW107CiAKLSAgICAgICAgQ3Vy
dmUuY2FsbCggdGhpcyApOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwganNvbi5s
ZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgdGhpcy52MSA9IHYxOwotICAgICAgICB0aGlzLnYy
ID0gdjI7CisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBqc29uWyBpIF07CiAKLSAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIGNsaXAgPSBBbmltYXRpb25DbGlwLnBhcnNlKCBkYXRhICk7CiAK
LSAgICBMaW5lQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBl
ICk7Ci0gICAgTGluZUN1cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExpbmVDdXJ2ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIGRhdGEudXVpZCAhPT0gdW5kZWZpbmVkICkgY2xpcC51dWlkID0g
ZGF0YS51dWlkOwogCi0gICAgTGluZUN1cnZlLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKCBjbGlwICk7CiAKLSAgICBMaW5lQ3Vy
dmUucHJvdG90eXBlLmdldFBvaW50ID0gZnVuY3Rpb24gKCB0ICkgeworICAgICAgICAgICAgfQog
Ci0gICAgICAgIGlmICggdCA9PT0gMSApIHsKKyAgICAgICAgICAgIHJldHVybiBhbmltYXRpb25z
OwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy52Mi5jbG9uZSgpOworICAgICAgICB9LAogCi0g
ICAgICAgIH0KKyAgICAgICAgcGFyc2VJbWFnZXM6IGZ1bmN0aW9uICgganNvbiwgb25Mb2FkICkg
ewogCi0gICAgICAgIHZhciBwb2ludCA9IHRoaXMudjIuY2xvbmUoKS5zdWIoIHRoaXMudjEgKTsK
LSAgICAgICAgcG9pbnQubXVsdGlwbHlTY2FsYXIoIHQgKS5hZGQoIHRoaXMudjEgKTsKKyAgICAg
ICAgICAgIHZhciBzY29wZSA9IHRoaXM7CisgICAgICAgICAgICB2YXIgaW1hZ2VzID0ge307CiAK
LSAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICAgICAgZnVuY3Rpb24gbG9hZEltYWdlKCB1
cmwgKSB7CiAKLSAgICB9OworICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbVN0YXJ0
KCB1cmwgKTsKIAotICAgIC8vIExpbmUgY3VydmUgaXMgbGluZWFyLCBzbyB3ZSBjYW4gb3Zlcndy
aXRlIGRlZmF1bHQgZ2V0UG9pbnRBdAorICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9h
ZCggdXJsLCBmdW5jdGlvbiAoKSB7CiAKLSAgICBMaW5lQ3VydmUucHJvdG90eXBlLmdldFBvaW50
QXQgPSBmdW5jdGlvbiAoIHUgKSB7CisgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIu
aXRlbUVuZCggdXJsICk7CiAKLSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnQoIHUgKTsKKyAg
ICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsKIAotICAgIH07CisgICAg
ICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7CisgICAgICAgICAg
ICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVycm9yKCB1cmwgKTsKIAotICAgIExpbmVDdXJ2
ZS5wcm90b3R5cGUuZ2V0VGFuZ2VudCA9IGZ1bmN0aW9uICggdCApIHsKKyAgICAgICAgICAgICAg
ICB9ICk7CiAKLSAgICAgICAgdmFyIHRhbmdlbnQgPSB0aGlzLnYyLmNsb25lKCkuc3ViKCB0aGlz
LnYxICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRhbmdlbnQubm9ybWFsaXpl
KCk7CisgICAgICAgICAgICBpZiAoIGpzb24gIT09IHVuZGVmaW5lZCAmJiBqc29uLmxlbmd0aCA+
IDAgKSB7CiAKLSAgICB9OworICAgICAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gbmV3IExvYWRp
bmdNYW5hZ2VyKCBvbkxvYWQgKTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Igeno4NSAvIGh0
dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKLSAgICAgKgotICAgICAqKi8KKyAgICAg
ICAgICAgICAgICB2YXIgbG9hZGVyID0gbmV3IEltYWdlTG9hZGVyKCBtYW5hZ2VyICk7CisgICAg
ICAgICAgICAgICAgbG9hZGVyLnNldENyb3NzT3JpZ2luKCB0aGlzLmNyb3NzT3JpZ2luICk7CiAK
LSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSAgICAgKiAgQ3VydmVkIFBhdGggLSBhIGN1cnZlIHBhdGggaXMgc2ltcGx5
IGEgYXJyYXkgb2YgY29ubmVjdGVkCi0gICAgICogIGN1cnZlcywgYnV0IHJldGFpbnMgdGhlIGFw
aSBvZiBhIGN1cnZlCi0gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MCwgaWwgPSBqc29uLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgZnVuY3Rpb24gQ3Vy
dmVQYXRoKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBqc29uWyBpIF07Cisg
ICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBpbWFnZS51cmw7CiAKLSAgICAgICAgQ3VydmUu
Y2FsbCggdGhpcyApOworICAgICAgICAgICAgICAgICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIHVy
bCApICkgewogCi0gICAgICAgIHRoaXMuY3VydmVzID0gW107CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBsb2FkIGFycmF5IG9mIGltYWdlcyBlLmcgQ3ViZVRleHR1cmUKIAotICAgICAgICB0
aGlzLmF1dG9DbG9zZSA9IGZhbHNlOyAvLyBBdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUgcGF0aAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyBpbWFnZS51dWlkIF0gPSBbXTsKIAotICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMCwgamwgPSB1cmwubGVu
Z3RoOyBqIDwgamw7IGogKysgKSB7CiAKLSAgICBDdXJ2ZVBhdGgucHJvdG90eXBlID0gT2JqZWN0
LmFzc2lnbiggT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICksIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFVybCA9IHVybFsgaiBdOwogCi0gICAgICAgIGNv
bnN0cnVjdG9yOiBDdXJ2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBh
dGggPSAvXihcL1wvKXwoW2Etel0rOihcL1wvKT8pL2kudGVzdCggY3VycmVudFVybCApID8gY3Vy
cmVudFVybCA6IHNjb3BlLnRleHR1cmVQYXRoICsgY3VycmVudFVybDsKIAotICAgICAgICBhZGQ6
IGZ1bmN0aW9uICggY3VydmUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Vz
WyBpbWFnZS51dWlkIF0ucHVzaCggbG9hZEltYWdlKCBwYXRoICkgKTsKIAotICAgICAgICAgICAg
dGhpcy5jdXJ2ZXMucHVzaCggY3VydmUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIGNsb3Nl
UGF0aDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZCBzaW5n
bGUgaW1hZ2UKIAotICAgICAgICAgICAgLy8gQWRkIGEgbGluZSBjdXJ2ZSBpZiBzdGFydCBhbmQg
ZW5kIG9mIGxpbmVzIGFyZSBub3QgY29ubmVjdGVkCi0gICAgICAgICAgICB2YXIgc3RhcnRQb2lu
dCA9IHRoaXMuY3VydmVzWyAwIF0uZ2V0UG9pbnQoIDAgKTsKLSAgICAgICAgICAgIHZhciBlbmRQ
b2ludCA9IHRoaXMuY3VydmVzWyB0aGlzLmN1cnZlcy5sZW5ndGggLSAxIF0uZ2V0UG9pbnQoIDEg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gL14oXC9cLyl8KFthLXpdKzoo
XC9cLyk/KS9pLnRlc3QoIGltYWdlLnVybCApID8gaW1hZ2UudXJsIDogc2NvcGUudGV4dHVyZVBh
dGggKyBpbWFnZS51cmw7CiAKLSAgICAgICAgICAgIGlmICggISBzdGFydFBvaW50LmVxdWFscygg
ZW5kUG9pbnQgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1sgaW1hZ2UudXVp
ZCBdID0gbG9hZEltYWdlKCBwYXRoICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnZlcy5w
dXNoKCBuZXcgTGluZUN1cnZlKCBlbmRQb2ludCwgc3RhcnRQb2ludCApICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICByZXR1cm4gaW1hZ2VzOworCiAgICAgICAgIH0sCiAKLSAgICAgICAgLy8gVG8gZ2V0
IGFjY3VyYXRlIHBvaW50IHdpdGggcmVmZXJlbmNlIHRvCi0gICAgICAgIC8vIGVudGlyZSBwYXRo
IGRpc3RhbmNlIGF0IHRpbWUgdCwKLSAgICAgICAgLy8gZm9sbG93aW5nIGhhcyB0byBiZSBkb25l
OgorICAgICAgICBwYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoIGpzb24sIGltYWdlcyApIHsKIAot
ICAgICAgICAvLyAxLiBMZW5ndGggb2YgZWFjaCBzdWIgcGF0aCBoYXZlIHRvIGJlIGtub3duCi0g
ICAgICAgIC8vIDIuIExvY2F0ZSBhbmQgaWRlbnRpZnkgdHlwZSBvZiBjdXJ2ZQotICAgICAgICAv
LyAzLiBHZXQgdCBmb3IgdGhlIGN1cnZlCi0gICAgICAgIC8vIDQuIFJldHVybiBjdXJ2ZS5nZXRQ
b2ludEF0KHQnKQorICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VDb25zdGFudCggdmFsdWUsIHR5
cGUgKSB7CiAKLSAgICAgICAgZ2V0UG9pbnQ6IGZ1bmN0aW9uICggdCApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgKSByZXR1cm4gdmFsdWU7CiAKLSAg
ICAgICAgICAgIHZhciBkID0gdCAqIHRoaXMuZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICB2YXIg
Y3VydmVMZW5ndGhzID0gdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTsKLSAgICAgICAgICAgIHZhciBp
ID0gMDsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXIu
cGFyc2VUZXh0dXJlOiBDb25zdGFudCBzaG91bGQgYmUgaW4gbnVtZXJpYyBmb3JtLicsIHZhbHVl
ICk7CiAKLSAgICAgICAgICAgIC8vIFRvIHRoaW5rIGFib3V0IGJvdW5kYXJpZXMgcG9pbnRzLgor
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlWyB2YWx1ZSBdOwogCi0gICAgICAgICAgICB3aGls
ZSAoIGkgPCBjdXJ2ZUxlbmd0aHMubGVuZ3RoICkgeworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaWYgKCBjdXJ2ZUxlbmd0aHNbIGkgXSA+PSBkICkgeworICAgICAgICAgICAgdmFy
IHRleHR1cmVzID0ge307CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBjdXJ2ZUxl
bmd0aHNbIGkgXSAtIGQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3Vy
dmVzWyBpIF07CisgICAgICAgICAgICBpZiAoIGpzb24gIT09IHVuZGVmaW5lZCApIHsKIAotICAg
ICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudExlbmd0aCA9IGN1cnZlLmdldExlbmd0aCgpOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IHNlZ21lbnRMZW5ndGggPT09IDAgPyAwIDogMSAt
IGRpZmYgLyBzZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwg
bCA9IGpzb24ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKIAotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3VydmUuZ2V0UG9pbnRBdCggdSApOworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0
YSA9IGpzb25bIGkgXTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBkYXRhLmltYWdlID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBpICsr
OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2JqZWN0TG9h
ZGVyOiBObyAiaW1hZ2UiIHNwZWNpZmllZCBmb3InLCBkYXRhLnV1aWQgKTsKIAotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIGltYWdlc1sgZGF0YS5pbWFnZSBdID09PSB1bmRlZmlu
ZWQgKSB7CiAKLSAgICAgICAgICAgIC8vIGxvb3Agd2hlcmUgc3VtICE9IDAsIHN1bSA+IGQgLCBz
dW0rMSA8ZAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuT2Jq
ZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UnLCBkYXRhLmltYWdlICk7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgdGhlIGRl
ZmF1bHQgVEhSRUUuQ3VydmUgZ2V0UG9pbnQoKSB3aXRoIGdldExlbmd0aCgpIGJlY2F1c2UgaW4K
LSAgICAgICAgLy8gVEhSRUUuQ3VydmUsIGdldExlbmd0aCgpIGRlcGVuZHMgb24gZ2V0UG9pbnQo
KSBidXQgaW4gVEhSRUUuQ3VydmVQYXRoCi0gICAgICAgIC8vIGdldFBvaW50KCkgZGVwZW5kcyBv
biBnZXRMZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmU7CiAKLSAgICAgICAg
Z2V0TGVuZ3RoOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggQXJyYXku
aXNBcnJheSggaW1hZ2VzWyBkYXRhLmltYWdlIF0gKSApIHsKIAotICAgICAgICAgICAgdmFyIGxl
bnMgPSB0aGlzLmdldEN1cnZlTGVuZ3RocygpOwotICAgICAgICAgICAgcmV0dXJuIGxlbnNbIGxl
bnMubGVuZ3RoIC0gMSBdOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBD
dWJlVGV4dHVyZSggaW1hZ2VzWyBkYXRhLmltYWdlIF0gKTsKIAotICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogCi0gICAgICAgIC8vIGNhY2hlTGVuZ3RocyBtdXN0IGJl
IHJlY2FsY3VsYXRlZC4KLSAgICAgICAgdXBkYXRlQXJjTGVuZ3RoczogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlKCBpbWFnZXNbIGRh
dGEuaW1hZ2UgXSApOwogCi0gICAgICAgICAgICB0aGlzLm5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHRoaXMuY2FjaGVMZW5ndGhzID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuZ2V0
Q3VydmVMZW5ndGhzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAotICAgICAgICAv
LyBDb21wdXRlIGxlbmd0aHMgYW5kIGNhY2hlIHRoZW0KLSAgICAgICAgLy8gV2UgY2Fubm90IG92
ZXJ3cml0ZSBnZXRMZW5ndGhzKCkgYmVjYXVzZSBVdG9UIG1hcHBpbmcgdXNlcyBpdC4KKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS51dWlkID0gZGF0YS51dWlkOwogCi0gICAgICAgIGdldEN1
cnZlTGVuZ3RoczogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEu
bmFtZSAhPT0gdW5kZWZpbmVkICkgdGV4dHVyZS5uYW1lID0gZGF0YS5uYW1lOwogCi0gICAgICAg
ICAgICAvLyBXZSB1c2UgY2FjaGUgdmFsdWVzIGlmIGN1cnZlcyBhbmQgY2FjaGUgYXJyYXkgYXJl
IHNhbWUgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5tYXBwaW5nICE9PSB1
bmRlZmluZWQgKSB0ZXh0dXJlLm1hcHBpbmcgPSBwYXJzZUNvbnN0YW50KCBkYXRhLm1hcHBpbmcs
IFRFWFRVUkVfTUFQUElORyApOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuY2FjaGVMZW5ndGhz
ICYmIHRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aCA9PT0gdGhpcy5jdXJ2ZXMubGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEub2Zmc2V0ICE9PSB1bmRlZmluZWQgKSB0ZXh0
dXJlLm9mZnNldC5mcm9tQXJyYXkoIGRhdGEub2Zmc2V0ICk7CisgICAgICAgICAgICAgICAgICAg
IGlmICggZGF0YS5yZXBlYXQgIT09IHVuZGVmaW5lZCApIHRleHR1cmUucmVwZWF0LmZyb21BcnJh
eSggZGF0YS5yZXBlYXQgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLmNlbnRlciAh
PT0gdW5kZWZpbmVkICkgdGV4dHVyZS5jZW50ZXIuZnJvbUFycmF5KCBkYXRhLmNlbnRlciApOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEucm90YXRpb24gIT09IHVuZGVmaW5lZCApIHRl
eHR1cmUucm90YXRpb24gPSBkYXRhLnJvdGF0aW9uOwogCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuY2FjaGVMZW5ndGhzOworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEud3JhcCAh
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLndyYXBTID0gcGFyc2VDb25zdGFudCggZGF0YS53cmFwWyAwIF0sIFRFWFRVUkVf
V1JBUFBJTkcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUud3JhcFQgPSBwYXJz
ZUNvbnN0YW50KCBkYXRhLndyYXBbIDEgXSwgVEVYVFVSRV9XUkFQUElORyApOwogCi0gICAgICAg
ICAgICAvLyBHZXQgbGVuZ3RoIG9mIHN1Yi1jdXJ2ZQotICAgICAgICAgICAgLy8gUHVzaCBzdW1z
IGludG8gY2FjaGVkIGFycmF5CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
dmFyIGxlbmd0aHMgPSBbXSwgc3VtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0
YS5mb3JtYXQgIT09IHVuZGVmaW5lZCApIHRleHR1cmUuZm9ybWF0ID0gZGF0YS5mb3JtYXQ7CiAK
LSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMuY3VydmVzLmxlbmd0aDsgaSA8
IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5taW5GaWx0ZXIgIT09
IHVuZGVmaW5lZCApIHRleHR1cmUubWluRmlsdGVyID0gcGFyc2VDb25zdGFudCggZGF0YS5taW5G
aWx0ZXIsIFRFWFRVUkVfRklMVEVSICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5t
YWdGaWx0ZXIgIT09IHVuZGVmaW5lZCApIHRleHR1cmUubWFnRmlsdGVyID0gcGFyc2VDb25zdGFu
dCggZGF0YS5tYWdGaWx0ZXIsIFRFWFRVUkVfRklMVEVSICk7CisgICAgICAgICAgICAgICAgICAg
IGlmICggZGF0YS5hbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQgKSB0ZXh0dXJlLmFuaXNvdHJvcHkg
PSBkYXRhLmFuaXNvdHJvcHk7CiAKLSAgICAgICAgICAgICAgICBzdW1zICs9IHRoaXMuY3VydmVz
WyBpIF0uZ2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgbGVuZ3Rocy5wdXNoKCBzdW1zICk7
CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5mbGlwWSAhPT0gdW5kZWZpbmVkICkgdGV4
dHVyZS5mbGlwWSA9IGRhdGEuZmxpcFk7CisKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZXNb
IGRhdGEudXVpZCBdID0gdGV4dHVyZTsKKworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB0aGlzLmNhY2hlTGVuZ3RocyA9IGxlbmd0aHM7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBsZW5ndGhzOworICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVzOwogCiAg
ICAgICAgIH0sCiAKLSAgICAgICAgZ2V0U3BhY2VkUG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9u
cyApIHsKLQotICAgICAgICAgICAgaWYgKCBkaXZpc2lvbnMgPT09IHVuZGVmaW5lZCApIGRpdmlz
aW9ucyA9IDQwOworICAgICAgICBwYXJzZU9iamVjdDogZnVuY3Rpb24gKCBkYXRhLCBnZW9tZXRy
aWVzLCBtYXRlcmlhbHMgKSB7CiAKLSAgICAgICAgICAgIHZhciBwb2ludHMgPSBbXTsKKyAgICAg
ICAgICAgIHZhciBvYmplY3Q7CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8PSBk
aXZpc2lvbnM7IGkgKysgKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBnZXRHZW9tZXRyeSggbmFt
ZSApIHsKIAotICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCB0aGlzLmdldFBvaW50KCBpIC8g
ZGl2aXNpb25zICkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGdlb21ldHJpZXNbIG5hbWUgXSA9
PT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUud2FybiggJ1RIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5JywgbmFt
ZSApOwogCi0gICAgICAgICAgICBpZiAoIHRoaXMuYXV0b0Nsb3NlICkgeworICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKCBwb2ludHNbIDAgXSApOworICAg
ICAgICAgICAgICAgIHJldHVybiBnZW9tZXRyaWVzWyBuYW1lIF07CiAKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgcmV0dXJuIHBvaW50czsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGdldE1h
dGVyaWFsKCBuYW1lICkgewogCi0gICAgICAgIH0sCisgICAgICAgICAgICAgICAgaWYgKCBuYW1l
ID09PSB1bmRlZmluZWQgKSByZXR1cm4gdW5kZWZpbmVkOwogCi0gICAgICAgIGdldFBvaW50czog
ZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBBcnJheS5pc0Fy
cmF5KCBuYW1lICkgKSB7CiAKLSAgICAgICAgICAgIGRpdmlzaW9ucyA9IGRpdmlzaW9ucyB8fCAx
MjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gW107CiAKLSAgICAgICAgICAgIHZh
ciBwb2ludHMgPSBbXSwgbGFzdDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpICsrICkgewogCi0gICAgICAgICAgICBmb3IgKCB2
YXIgaSA9IDAsIGN1cnZlcyA9IHRoaXMuY3VydmVzOyBpIDwgY3VydmVzLmxlbmd0aDsgaSArKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1dWlkID0gbmFtZVsgaSBdOwogCi0gICAg
ICAgICAgICAgICAgdmFyIGN1cnZlID0gY3VydmVzWyBpIF07Ci0gICAgICAgICAgICAgICAgdmFy
IHJlc29sdXRpb24gPSAoY3VydmUgJiYgY3VydmUuaXNFbGxpcHNlQ3VydmUpID8gZGl2aXNpb25z
ICogMgotICAgICAgICAgICAgICAgICAgICA6IChjdXJ2ZSAmJiBjdXJ2ZS5pc0xpbmVDdXJ2ZSkg
PyAxCi0gICAgICAgICAgICAgICAgICAgIDogKGN1cnZlICYmIGN1cnZlLmlzU3BsaW5lQ3VydmUp
ID8gZGl2aXNpb25zICogY3VydmUucG9pbnRzLmxlbmd0aAotICAgICAgICAgICAgICAgICAgICA6
IGRpdmlzaW9uczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxzWyB1dWlk
IF0gPT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICAgICAgICAgIHZhciBwdHMgPSBjdXJ2ZS5n
ZXRQb2ludHMoIHJlc29sdXRpb24gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oICdUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCcsIHV1aWQg
KTsKIAotICAgICAgICAgICAgICAgIGZvciAoIHZhciBqID0gMDsgaiA8IHB0cy5sZW5ndGg7IGor
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICB2
YXIgcG9pbnQgPSBwdHNbIGogXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2go
IG1hdGVyaWFsc1sgdXVpZCBdICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBsYXN0ICYm
IGxhc3QuZXF1YWxzKCBwb2ludCApICkgY29udGludWU7IC8vIGVuc3VyZXMgbm8gY29uc2VjdXRp
dmUgcG9pbnRzIGFyZSBkdXBsaWNhdGVzCisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBwb2ludHMucHVzaCggcG9pbnQgKTsKLSAgICAgICAgICAgICAgICAgICAg
bGFzdCA9IHBvaW50OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCB0aGlzLmF1
dG9DbG9zZSAmJiBwb2ludHMubGVuZ3RoID4gMSAmJiAhcG9pbnRzWyBwb2ludHMubGVuZ3RoIC0g
MSBdLmVxdWFscyggcG9pbnRzWyAwIF0gKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGVy
aWFsc1sgbmFtZSBdID09PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgICAgICBwb2ludHMu
cHVzaCggcG9pbnRzWyAwIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAn
VEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwnLCBuYW1lICk7CiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBwb2ludHM7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGVyaWFsc1sgbmFtZSBdOwogCi0gICAgICAgIH0s
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgICAqICBDcmVhdGUgR2Vv
bWV0cmllcyBIZWxwZXJzCi0gICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICAgIHN3aXRjaCAoIGRh
dGEudHlwZSApIHsKIAotICAgICAgICAvLy8gR2VuZXJhdGUgZ2VvbWV0cnkgZnJvbSBwYXRoIHBv
aW50cyAoZm9yIExpbmUgb3IgUG9pbnRzIG9iamVjdHMpCisgICAgICAgICAgICAgICAgY2FzZSAn
U2NlbmUnOgogCi0gICAgICAgIGNyZWF0ZVBvaW50c0dlb21ldHJ5OiBmdW5jdGlvbiAoIGRpdmlz
aW9ucyApIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFNjZW5lKCk7CiAKLSAg
ICAgICAgICAgIHZhciBwdHMgPSB0aGlzLmdldFBvaW50cyggZGl2aXNpb25zICk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeSggcHRzICk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggZGF0YS5iYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggTnVtYmVyLmlzSW50ZWdlciggZGF0YS5iYWNr
Z3JvdW5kICkgKSB7CiAKLSAgICAgICAgLy8gR2VuZXJhdGUgZ2VvbWV0cnkgZnJvbSBlcXVpZGlz
dGFudCBzYW1wbGluZyBhbG9uZyB0aGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdC5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKCBkYXRhLmJhY2tncm91bmQgKTsKIAotICAg
ICAgICBjcmVhdGVTcGFjZWRQb2ludHNHZW9tZXRyeTogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBwdHMgPSB0aGlz
LmdldFNwYWNlZFBvaW50cyggZGl2aXNpb25zICk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5j
cmVhdGVHZW9tZXRyeSggcHRzICk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZm9nICE9PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgY3JlYXRlR2VvbWV0cnk6IGZ1bmN0aW9uICggcG9pbnRzICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhLmZvZy50eXBlID09PSAnRm9nJyApIHsKIAotICAgICAg
ICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LmZvZyA9IG5ldyBGb2coIGRhdGEuZm9nLmNvbG9yLCBkYXRhLmZvZy5u
ZWFyLCBkYXRhLmZvZy5mYXIgKTsKIAotICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0g
cG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkgKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBkYXRhLmZvZy50eXBlID09PSAnRm9nRXhwMicgKSB7CiAKLSAgICAgICAgICAg
ICAgICB2YXIgcG9pbnQgPSBwb2ludHNbIGkgXTsKLSAgICAgICAgICAgICAgICBnZW9tZXRyeS52
ZXJ0aWNlcy5wdXNoKCBuZXcgVmVjdG9yMyggcG9pbnQueCwgcG9pbnQueSwgcG9pbnQueiB8fCAw
ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZm9nID0gbmV3IEZvZ0V4
cDIoIGRhdGEuZm9nLmNvbG9yLCBkYXRhLmZvZy5kZW5zaXR5ICk7CiAKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5
OworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgIH0gKTsKKyAgICAgICAgICAgICAgICBjYXNlICdQZXJzcGVjdGl2ZUNh
bWVyYSc6CiAKLSAgICBmdW5jdGlvbiBFbGxpcHNlQ3VydmUoIGFYLCBhWSwgeFJhZGl1cywgeVJh
ZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSwgYVJvdGF0aW9uICkgewor
ICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoIGRhdGEu
Zm92LCBkYXRhLmFzcGVjdCwgZGF0YS5uZWFyLCBkYXRhLmZhciApOwogCi0gICAgICAgIEN1cnZl
LmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLmZvY3VzICE9PSB1
bmRlZmluZWQgKSBvYmplY3QuZm9jdXMgPSBkYXRhLmZvY3VzOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGRhdGEuem9vbSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0Lnpvb20gPSBkYXRhLnpvb207
CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5maWxtR2F1Z2UgIT09IHVuZGVmaW5lZCAp
IG9iamVjdC5maWxtR2F1Z2UgPSBkYXRhLmZpbG1HYXVnZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBkYXRhLmZpbG1PZmZzZXQgIT09IHVuZGVmaW5lZCApIG9iamVjdC5maWxtT2Zmc2V0ID0g
ZGF0YS5maWxtT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEudmlldyAhPT0g
dW5kZWZpbmVkICkgb2JqZWN0LnZpZXcgPSBPYmplY3QuYXNzaWduKCB7fSwgZGF0YS52aWV3ICk7
CiAKLSAgICAgICAgdGhpcy5hWCA9IGFYOwotICAgICAgICB0aGlzLmFZID0gYVk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHRoaXMueFJhZGl1cyA9IHhSYWRpdXM7Ci0g
ICAgICAgIHRoaXMueVJhZGl1cyA9IHlSYWRpdXM7CisgICAgICAgICAgICAgICAgY2FzZSAnT3J0
aG9ncmFwaGljQ2FtZXJhJzoKIAotICAgICAgICB0aGlzLmFTdGFydEFuZ2xlID0gYVN0YXJ0QW5n
bGU7Ci0gICAgICAgIHRoaXMuYUVuZEFuZ2xlID0gYUVuZEFuZ2xlOworICAgICAgICAgICAgICAg
ICAgICBvYmplY3QgPSBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKCBkYXRhLmxlZnQsIGRhdGEucmln
aHQsIGRhdGEudG9wLCBkYXRhLmJvdHRvbSwgZGF0YS5uZWFyLCBkYXRhLmZhciApOwogCi0gICAg
ICAgIHRoaXMuYUNsb2Nrd2lzZSA9IGFDbG9ja3dpc2U7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZGF0YS56b29tICE9PSB1bmRlZmluZWQgKSBvYmplY3Quem9vbSA9IGRhdGEuem9vbTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnZpZXcgIT09IHVuZGVmaW5lZCApIG9iamVjdC52
aWV3ID0gT2JqZWN0LmFzc2lnbigge30sIGRhdGEudmlldyApOwogCi0gICAgICAgIHRoaXMuYVJv
dGF0aW9uID0gYVJvdGF0aW9uIHx8IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgfQorICAgICAgICAgICAgICAgIGNhc2UgJ0FtYmllbnRMaWdodCc6CiAKLSAgICBFbGxpcHNl
Q3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUucHJvdG90eXBlICk7Ci0gICAg
RWxsaXBzZUN1cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVsbGlwc2VDdXJ2ZTsKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IEFtYmllbnRMaWdodCggZGF0YS5jb2xvciwgZGF0
YS5pbnRlbnNpdHkgKTsKIAotICAgIEVsbGlwc2VDdXJ2ZS5wcm90b3R5cGUuaXNFbGxpcHNlQ3Vy
dmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIEVsbGlwc2VDdXJ2
ZS5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbiAoIHQgKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAnRGlyZWN0aW9uYWxMaWdodCc6CiAKLSAgICAgICAgdmFyIHR3b1BpID0gTWF0aC5QSSAq
IDI7Ci0gICAgICAgIHZhciBkZWx0YUFuZ2xlID0gdGhpcy5hRW5kQW5nbGUgLSB0aGlzLmFTdGFy
dEFuZ2xlOwotICAgICAgICB2YXIgc2FtZVBvaW50cyA9IE1hdGguYWJzKCBkZWx0YUFuZ2xlICkg
PCBOdW1iZXIuRVBTSUxPTjsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IERpcmVj
dGlvbmFsTGlnaHQoIGRhdGEuY29sb3IsIGRhdGEuaW50ZW5zaXR5ICk7CiAKLSAgICAgICAgLy8g
ZW5zdXJlcyB0aGF0IGRlbHRhQW5nbGUgaXMgMCAuLiAyIFBJCi0gICAgICAgIHdoaWxlICggZGVs
dGFBbmdsZSA8IDAgKSBkZWx0YUFuZ2xlICs9IHR3b1BpOwotICAgICAgICB3aGlsZSAoIGRlbHRh
QW5nbGUgPiB0d29QaSApIGRlbHRhQW5nbGUgLT0gdHdvUGk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgIGlmICggZGVsdGFBbmdsZSA8IE51bWJlci5FUFNJTE9OICkgewor
ICAgICAgICAgICAgICAgIGNhc2UgJ1BvaW50TGlnaHQnOgogCi0gICAgICAgICAgICBpZiAoIHNh
bWVQb2ludHMgKSB7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBQb2ludExpZ2h0
KCBkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSwgZGF0YS5kaXN0YW5jZSwgZGF0YS5kZWNheSAp
OwogCi0gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNhc2UgJ1Jl
Y3RBcmVhTGlnaHQnOgogCi0gICAgICAgICAgICAgICAgZGVsdGFBbmdsZSA9IHR3b1BpOworICAg
ICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgUmVjdEFyZWFMaWdodCggZGF0YS5jb2xvciwg
ZGF0YS5pbnRlbnNpdHksIGRhdGEud2lkdGgsIGRhdGEuaGVpZ2h0ICk7CiAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGNhc2UgJ1Nwb3RMaWdodCc6CiAKLSAgICAgICAgaWYgKCB0aGlzLmFDbG9ja3dpc2UgPT09
IHRydWUgJiYgISBzYW1lUG9pbnRzICkgeworICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBu
ZXcgU3BvdExpZ2h0KCBkYXRhLmNvbG9yLCBkYXRhLmludGVuc2l0eSwgZGF0YS5kaXN0YW5jZSwg
ZGF0YS5hbmdsZSwgZGF0YS5wZW51bWJyYSwgZGF0YS5kZWNheSApOwogCi0gICAgICAgICAgICBp
ZiAoIGRlbHRhQW5nbGUgPT09IHR3b1BpICkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgICAgIGRlbHRhQW5nbGUgPSAtIHR3b1BpOworICAgICAgICAgICAgICAg
IGNhc2UgJ0hlbWlzcGhlcmVMaWdodCc6CiAKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBIZW1pc3BoZXJlTGlnaHQoIGRhdGEuY29sb3IsIGRh
dGEuZ3JvdW5kQ29sb3IsIGRhdGEuaW50ZW5zaXR5ICk7CiAKLSAgICAgICAgICAgICAgICBkZWx0
YUFuZ2xlID0gZGVsdGFBbmdsZSAtIHR3b1BpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgJ1NraW5uZWRNZXNoJzoKIAot
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLk9iamVj
dExvYWRlci5wYXJzZU9iamVjdCgpIGRvZXMgbm90IHN1cHBvcnQgU2tpbm5lZE1lc2ggeWV0Licg
KTsKIAotICAgICAgICB2YXIgYW5nbGUgPSB0aGlzLmFTdGFydEFuZ2xlICsgdCAqIGRlbHRhQW5n
bGU7Ci0gICAgICAgIHZhciB4ID0gdGhpcy5hWCArIHRoaXMueFJhZGl1cyAqIE1hdGguY29zKCBh
bmdsZSApOwotICAgICAgICB2YXIgeSA9IHRoaXMuYVkgKyB0aGlzLnlSYWRpdXMgKiBNYXRoLnNp
biggYW5nbGUgKTsKKyAgICAgICAgICAgICAgICBjYXNlICdNZXNoJzoKIAotICAgICAgICBpZiAo
IHRoaXMuYVJvdGF0aW9uICE9PSAwICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0
cnkgPSBnZXRHZW9tZXRyeSggZGF0YS5nZW9tZXRyeSApOworICAgICAgICAgICAgICAgICAgICB2
YXIgbWF0ZXJpYWwgPSBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApOwogCi0gICAgICAgICAg
ICB2YXIgY29zID0gTWF0aC5jb3MoIHRoaXMuYVJvdGF0aW9uICk7Ci0gICAgICAgICAgICB2YXIg
c2luID0gTWF0aC5zaW4oIHRoaXMuYVJvdGF0aW9uICk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZ2VvbWV0cnkuYm9uZXMgJiYgZ2VvbWV0cnkuYm9uZXMubGVuZ3RoID4gMCApIHsKIAotICAg
ICAgICAgICAgdmFyIHR4ID0geCAtIHRoaXMuYVg7Ci0gICAgICAgICAgICB2YXIgdHkgPSB5IC0g
dGhpcy5hWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG5ldyBTa2lubmVkTWVz
aCggZ2VvbWV0cnksIG1hdGVyaWFsICk7CiAKLSAgICAgICAgICAgIC8vIFJvdGF0ZSB0aGUgcG9p
bnQgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS4KLSAgICAgICAgICAgIHggPSB0eCAq
IGNvcyAtIHR5ICogc2luICsgdGhpcy5hWDsKLSAgICAgICAgICAgIHkgPSB0eCAqIHNpbiArIHR5
ICogY29zICsgdGhpcy5hWTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgTWVzaCggZ2VvbWV0cnks
IG1hdGVyaWFsICk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKCB4LCB5ICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KIAotICAgIH07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgZnVuY3Rpb24gU3BsaW5lQ3VydmUoIHBvaW50cyAvKiBhcnJheSBvZiBWZWN0b3IyICov
ICkgeworICAgICAgICAgICAgICAgIGNhc2UgJ0xPRCc6CiAKLSAgICAgICAgQ3VydmUuY2FsbCgg
dGhpcyApOworICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgTE9EKCk7CiAKLSAgICAg
ICAgdGhpcy5wb2ludHMgPSAoIHBvaW50cyA9PT0gdW5kZWZpbmVkICkgPyBbXSA6IHBvaW50czsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgY2Fz
ZSAnTGluZSc6CiAKLSAgICBTcGxpbmVDdXJ2ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBD
dXJ2ZS5wcm90b3R5cGUgKTsKLSAgICBTcGxpbmVDdXJ2ZS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBTcGxpbmVDdXJ2ZTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IExpbmUoIGdl
dEdlb21ldHJ5KCBkYXRhLmdlb21ldHJ5ICksIGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICks
IGRhdGEubW9kZSApOwogCi0gICAgU3BsaW5lQ3VydmUucHJvdG90eXBlLmlzU3BsaW5lQ3VydmUg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIFNwbGluZUN1cnZlLnBy
b3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCApIHsKKyAgICAgICAgICAgICAgICBjYXNl
ICdMaW5lTG9vcCc6CiAKLSAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzOwotICAgICAg
ICB2YXIgcG9pbnQgPSAoIHBvaW50cy5sZW5ndGggLSAxICkgKiB0OworICAgICAgICAgICAgICAg
ICAgICBvYmplY3QgPSBuZXcgTGluZUxvb3AoIGdldEdlb21ldHJ5KCBkYXRhLmdlb21ldHJ5ICks
IGdldE1hdGVyaWFsKCBkYXRhLm1hdGVyaWFsICkgKTsKIAotICAgICAgICB2YXIgaW50UG9pbnQg
PSBNYXRoLmZsb29yKCBwb2ludCApOwotICAgICAgICB2YXIgd2VpZ2h0ID0gcG9pbnQgLSBpbnRQ
b2ludDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgdmFyIHBvaW50MCA9
IHBvaW50c1sgaW50UG9pbnQgPT09IDAgPyBpbnRQb2ludCA6IGludFBvaW50IC0gMSBdOwotICAg
ICAgICB2YXIgcG9pbnQxID0gcG9pbnRzWyBpbnRQb2ludCBdOwotICAgICAgICB2YXIgcG9pbnQy
ID0gcG9pbnRzWyBpbnRQb2ludCA+IHBvaW50cy5sZW5ndGggLSAyID8gcG9pbnRzLmxlbmd0aCAt
IDEgOiBpbnRQb2ludCArIDEgXTsKLSAgICAgICAgdmFyIHBvaW50MyA9IHBvaW50c1sgaW50UG9p
bnQgPiBwb2ludHMubGVuZ3RoIC0gMyA/IHBvaW50cy5sZW5ndGggLSAxIDogaW50UG9pbnQgKyAy
IF07CisgICAgICAgICAgICAgICAgY2FzZSAnTGluZVNlZ21lbnRzJzoKIAotICAgICAgICByZXR1
cm4gbmV3IFZlY3RvcjIoCi0gICAgICAgICAgICBDYXRtdWxsUm9tKCB3ZWlnaHQsIHBvaW50MC54
LCBwb2ludDEueCwgcG9pbnQyLngsIHBvaW50My54ICksCi0gICAgICAgICAgICBDYXRtdWxsUm9t
KCB3ZWlnaHQsIHBvaW50MC55LCBwb2ludDEueSwgcG9pbnQyLnksIHBvaW50My55ICkKLSAgICAg
ICAgKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IExpbmVTZWdtZW50cyggZ2V0
R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0ZXJpYWwoIGRhdGEubWF0ZXJpYWwgKSAp
OwogCi0gICAgfTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBmdW5jdGlvbiBD
dWJpY0JlemllckN1cnZlKCB2MCwgdjEsIHYyLCB2MyApIHsKKyAgICAgICAgICAgICAgICBjYXNl
ICdQb2ludENsb3VkJzoKKyAgICAgICAgICAgICAgICBjYXNlICdQb2ludHMnOgogCi0gICAgICAg
IEN1cnZlLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFBv
aW50cyggZ2V0R2VvbWV0cnkoIGRhdGEuZ2VvbWV0cnkgKSwgZ2V0TWF0ZXJpYWwoIGRhdGEubWF0
ZXJpYWwgKSApOwogCi0gICAgICAgIHRoaXMudjAgPSB2MDsKLSAgICAgICAgdGhpcy52MSA9IHYx
OwotICAgICAgICB0aGlzLnYyID0gdjI7Ci0gICAgICAgIHRoaXMudjMgPSB2MzsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICB9CisgICAgICAgICAgICAgICAgY2FzZSAnU3ByaXRl
JzoKIAotICAgIEN1YmljQmV6aWVyQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3Vy
dmUucHJvdG90eXBlICk7Ci0gICAgQ3ViaWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUuY29uc3RydWN0
b3IgPSBDdWJpY0JlemllckN1cnZlOworICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcg
U3ByaXRlKCBnZXRNYXRlcmlhbCggZGF0YS5tYXRlcmlhbCApICk7CiAKLSAgICBDdWJpY0Jlemll
ckN1cnZlLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgdmFyIHYwID0gdGhpcy52MCwgdjEgPSB0aGlzLnYx
LCB2MiA9IHRoaXMudjIsIHYzID0gdGhpcy52MzsKKyAgICAgICAgICAgICAgICBjYXNlICdHcm91
cCc6CiAKLSAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKAotICAgICAgICAgICAgQ3ViaWNCZXpp
ZXIoIHQsIHYwLngsIHYxLngsIHYyLngsIHYzLnggKSwKLSAgICAgICAgICAgIEN1YmljQmV6aWVy
KCB0LCB2MC55LCB2MS55LCB2Mi55LCB2My55ICkKLSAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0ID0gbmV3IEdyb3VwKCk7CiAKLSAgICB9OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllckN1cnZlKCB2MCwgdjEsIHYy
ICkgeworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAKLSAgICAgICAgQ3VydmUuY2FsbCggdGhp
cyApOworICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBuZXcgT2JqZWN0M0QoKTsKIAotICAg
ICAgICB0aGlzLnYwID0gdjA7Ci0gICAgICAgIHRoaXMudjEgPSB2MTsKLSAgICAgICAgdGhpcy52
MiA9IHYyOworICAgICAgICAgICAgfQogCi0gICAgfQorICAgICAgICAgICAgb2JqZWN0LnV1aWQg
PSBkYXRhLnV1aWQ7CiAKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5cGUgKTsKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZS5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBRdWFkcmF0aWNCZXppZXJDdXJ2ZTsKKyAgICAgICAgICAg
IGlmICggZGF0YS5uYW1lICE9PSB1bmRlZmluZWQgKSBvYmplY3QubmFtZSA9IGRhdGEubmFtZTsK
IAotICAgIFF1YWRyYXRpY0JlemllckN1cnZlLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9u
ICggdCApIHsKKyAgICAgICAgICAgIGlmICggZGF0YS5tYXRyaXggIT09IHVuZGVmaW5lZCApIHsK
IAotICAgICAgICB2YXIgdjAgPSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MjsK
KyAgICAgICAgICAgICAgICBvYmplY3QubWF0cml4LmZyb21BcnJheSggZGF0YS5tYXRyaXggKTsK
IAotICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoCi0gICAgICAgICAgICBRdWFkcmF0aWNCZXpp
ZXIoIHQsIHYwLngsIHYxLngsIHYyLnggKSwKLSAgICAgICAgICAgIFF1YWRyYXRpY0Jlemllcigg
dCwgdjAueSwgdjEueSwgdjIueSApCi0gICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKCBk
YXRhLm1hdHJpeEF1dG9VcGRhdGUgIT09IHVuZGVmaW5lZCApIG9iamVjdC5tYXRyaXhBdXRvVXBk
YXRlID0gZGF0YS5tYXRyaXhBdXRvVXBkYXRlOworICAgICAgICAgICAgICAgIGlmICggb2JqZWN0
Lm1hdHJpeEF1dG9VcGRhdGUgKSBvYmplY3QubWF0cml4LmRlY29tcG9zZSggb2JqZWN0LnBvc2l0
aW9uLCBvYmplY3QucXVhdGVybmlvbiwgb2JqZWN0LnNjYWxlICk7CiAKLSAgICB9OworICAgICAg
ICAgICAgfSBlbHNlIHsKIAotICAgIHZhciBQYXRoUHJvdG90eXBlID0gT2JqZWN0LmFzc2lnbigg
T2JqZWN0LmNyZWF0ZSggQ3VydmVQYXRoLnByb3RvdHlwZSApLCB7CisgICAgICAgICAgICAgICAg
aWYgKCBkYXRhLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSBvYmplY3QucG9zaXRpb24uZnJvbUFy
cmF5KCBkYXRhLnBvc2l0aW9uICk7CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnJvdGF0aW9u
ICE9PSB1bmRlZmluZWQgKSBvYmplY3Qucm90YXRpb24uZnJvbUFycmF5KCBkYXRhLnJvdGF0aW9u
ICk7CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnF1YXRlcm5pb24gIT09IHVuZGVmaW5lZCAp
IG9iamVjdC5xdWF0ZXJuaW9uLmZyb21BcnJheSggZGF0YS5xdWF0ZXJuaW9uICk7CisgICAgICAg
ICAgICAgICAgaWYgKCBkYXRhLnNjYWxlICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2NhbGUuZnJv
bUFycmF5KCBkYXRhLnNjYWxlICk7CiAKLSAgICAgICAgZnJvbVBvaW50czogZnVuY3Rpb24gKCB2
ZWN0b3JzICkgeworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLm1vdmVUbyggdmVj
dG9yc1sgMCBdLngsIHZlY3RvcnNbIDAgXS55ICk7CisgICAgICAgICAgICBpZiAoIGRhdGEuY2Fz
dFNoYWRvdyAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmNhc3RTaGFkb3cgPSBkYXRhLmNhc3RTaGFk
b3c7CisgICAgICAgICAgICBpZiAoIGRhdGEucmVjZWl2ZVNoYWRvdyAhPT0gdW5kZWZpbmVkICkg
b2JqZWN0LnJlY2VpdmVTaGFkb3cgPSBkYXRhLnJlY2VpdmVTaGFkb3c7CiAKLSAgICAgICAgICAg
IGZvciAoIHZhciBpID0gMSwgbCA9IHZlY3RvcnMubGVuZ3RoOyBpIDwgbDsgaSArKyApIHsKKyAg
ICAgICAgICAgIGlmICggZGF0YS5zaGFkb3cgKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmxp
bmVUbyggdmVjdG9yc1sgaSBdLngsIHZlY3RvcnNbIGkgXS55ICk7CisgICAgICAgICAgICAgICAg
aWYgKCBkYXRhLnNoYWRvdy5iaWFzICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2hhZG93LmJpYXMg
PSBkYXRhLnNoYWRvdy5iaWFzOworICAgICAgICAgICAgICAgIGlmICggZGF0YS5zaGFkb3cucmFk
aXVzICE9PSB1bmRlZmluZWQgKSBvYmplY3Quc2hhZG93LnJhZGl1cyA9IGRhdGEuc2hhZG93LnJh
ZGl1czsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEuc2hhZG93Lm1hcFNpemUgIT09IHVuZGVm
aW5lZCApIG9iamVjdC5zaGFkb3cubWFwU2l6ZS5mcm9tQXJyYXkoIGRhdGEuc2hhZG93Lm1hcFNp
emUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEuc2hhZG93LmNhbWVyYSAhPT0gdW5kZWZp
bmVkICkgb2JqZWN0LnNoYWRvdy5jYW1lcmEgPSB0aGlzLnBhcnNlT2JqZWN0KCBkYXRhLnNoYWRv
dy5jYW1lcmEgKTsKIAogICAgICAgICAgICAgfQogCi0gICAgICAgIH0sCi0KLSAgICAgICAgbW92
ZVRvOiBmdW5jdGlvbiAoIHgsIHkgKSB7Ci0KLSAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50
LnNldCggeCwgeSApOyAvLyBUT0RPIGNvbnNpZGVyIHJlZmVyZW5jaW5nIHZlY3RvcnMgaW5zdGVh
ZCBvZiBjb3B5aW5nPwotCi0gICAgICAgIH0sCisgICAgICAgICAgICBpZiAoIGRhdGEudmlzaWJs
ZSAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LnZpc2libGUgPSBkYXRhLnZpc2libGU7CisgICAgICAg
ICAgICBpZiAoIGRhdGEuZnJ1c3R1bUN1bGxlZCAhPT0gdW5kZWZpbmVkICkgb2JqZWN0LmZydXN0
dW1DdWxsZWQgPSBkYXRhLmZydXN0dW1DdWxsZWQ7CisgICAgICAgICAgICBpZiAoIGRhdGEucmVu
ZGVyT3JkZXIgIT09IHVuZGVmaW5lZCApIG9iamVjdC5yZW5kZXJPcmRlciA9IGRhdGEucmVuZGVy
T3JkZXI7CisgICAgICAgICAgICBpZiAoIGRhdGEudXNlckRhdGEgIT09IHVuZGVmaW5lZCApIG9i
amVjdC51c2VyRGF0YSA9IGRhdGEudXNlckRhdGE7CisgICAgICAgICAgICBpZiAoIGRhdGEubGF5
ZXJzICE9PSB1bmRlZmluZWQgKSBvYmplY3QubGF5ZXJzLm1hc2sgPSBkYXRhLmxheWVyczsKIAot
ICAgICAgICBsaW5lVG86IGZ1bmN0aW9uICggeCwgeSApIHsKKyAgICAgICAgICAgIGlmICggZGF0
YS5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB2YXIgY3VydmUgPSBu
ZXcgTGluZUN1cnZlKCB0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLCBuZXcgVmVjdG9yMiggeCwg
eSApICk7Ci0gICAgICAgICAgICB0aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOworICAgICAgICAg
ICAgICAgIHZhciBjaGlsZHJlbiA9IGRhdGEuY2hpbGRyZW47CiAKLSAgICAgICAgICAgIHRoaXMu
Y3VycmVudFBvaW50LnNldCggeCwgeSApOworICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0g
MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSArKyApIHsKIAotICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICAgICBvYmplY3QuYWRkKCB0aGlzLnBhcnNlT2JqZWN0KCBjaGlsZHJlblsgaSBdLCBn
ZW9tZXRyaWVzLCBtYXRlcmlhbHMgKSApOwogCi0gICAgICAgIHF1YWRyYXRpY0N1cnZlVG86IGZ1
bmN0aW9uICggYUNQeCwgYUNQeSwgYVgsIGFZICkgeworICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdmFyIGN1cnZlID0gbmV3IFF1YWRyYXRpY0JlemllckN1cnZlKAotICAgICAgICAg
ICAgICAgIHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksCi0gICAgICAgICAgICAgICAgbmV3IFZl
Y3RvcjIoIGFDUHgsIGFDUHkgKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYVgsIGFZ
ICkKLSAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRoaXMuY3Vy
dmVzLnB1c2goIGN1cnZlICk7CisgICAgICAgICAgICBpZiAoIGRhdGEudHlwZSA9PT0gJ0xPRCcg
KSB7CiAKLSAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50LnNldCggYVgsIGFZICk7CisgICAg
ICAgICAgICAgICAgdmFyIGxldmVscyA9IGRhdGEubGV2ZWxzOwogCi0gICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGwgPSAwOyBsIDwgbGV2ZWxzLmxlbmd0aDsgbCArKyApIHsK
IAotICAgICAgICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbiAoIGFDUDF4LCBhQ1AxeSwgYUNQMngs
IGFDUDJ5LCBhWCwgYVkgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IGxldmVs
c1sgbCBdOworICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBvYmplY3QuZ2V0T2JqZWN0
QnlQcm9wZXJ0eSggJ3V1aWQnLCBsZXZlbC5vYmplY3QgKTsKIAotICAgICAgICAgICAgdmFyIGN1
cnZlID0gbmV3IEN1YmljQmV6aWVyQ3VydmUoCi0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50
UG9pbnQuY2xvbmUoKSwKLSAgICAgICAgICAgICAgICBuZXcgVmVjdG9yMiggYUNQMXgsIGFDUDF5
ICksCi0gICAgICAgICAgICAgICAgbmV3IFZlY3RvcjIoIGFDUDJ4LCBhQ1AyeSApLAotICAgICAg
ICAgICAgICAgIG5ldyBWZWN0b3IyKCBhWCwgYVkgKQotICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjaGlsZCAhPT0gdW5kZWZpbmVkICkgewogCi0gICAgICAgICAgICB0
aGlzLmN1cnZlcy5wdXNoKCBjdXJ2ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
LmFkZExldmVsKCBjaGlsZCwgbGV2ZWwuZGlzdGFuY2UgKTsKIAotICAgICAgICAgICAgdGhpcy5j
dXJyZW50UG9pbnQuc2V0KCBhWCwgYVkgKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIHNwbGluZVRocnU6IGZ1bmN0aW9u
ICggcHRzIC8qQXJyYXkgb2YgVmVjdG9yKi8gKSB7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHZhciBucHRzID0gWyB0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpIF0uY29uY2F0KCBwdHMg
KTsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICAgICAgICAgIHZhciBjdXJ2ZSA9
IG5ldyBTcGxpbmVDdXJ2ZSggbnB0cyApOwotICAgICAgICAgICAgdGhpcy5jdXJ2ZXMucHVzaCgg
Y3VydmUgKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludC5jb3B5
KCBwdHNbIHB0cy5sZW5ndGggLSAxIF0gKTsKKyAgICB9ICk7CiAKLSAgICAgICAgfSwKKyAgICB2
YXIgVEVYVFVSRV9NQVBQSU5HID0geworICAgICAgICBVVk1hcHBpbmc6IFVWTWFwcGluZywKKyAg
ICAgICAgQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOiBDdWJlUmVmbGVjdGlvbk1hcHBpbmcsCisgICAg
ICAgIEN1YmVSZWZyYWN0aW9uTWFwcGluZzogQ3ViZVJlZnJhY3Rpb25NYXBwaW5nLAorICAgICAg
ICBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzogRXF1aXJlY3Rhbmd1bGFyUmVmbGVj
dGlvbk1hcHBpbmcsCisgICAgICAgIEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOiBF
cXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZywKKyAgICAgICAgU3BoZXJpY2FsUmVmbGVj
dGlvbk1hcHBpbmc6IFNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nLAorICAgICAgICBDdWJlVVZS
ZWZsZWN0aW9uTWFwcGluZzogQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmcsCisgICAgICAgIEN1YmVV
VlJlZnJhY3Rpb25NYXBwaW5nOiBDdWJlVVZSZWZyYWN0aW9uTWFwcGluZworICAgIH07CiAKLSAg
ICAgICAgYXJjOiBmdW5jdGlvbiAoIGFYLCBhWSwgYVJhZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRB
bmdsZSwgYUNsb2Nrd2lzZSApIHsKKyAgICB2YXIgVEVYVFVSRV9XUkFQUElORyA9IHsKKyAgICAg
ICAgUmVwZWF0V3JhcHBpbmc6IFJlcGVhdFdyYXBwaW5nLAorICAgICAgICBDbGFtcFRvRWRnZVdy
YXBwaW5nOiBDbGFtcFRvRWRnZVdyYXBwaW5nLAorICAgICAgICBNaXJyb3JlZFJlcGVhdFdyYXBw
aW5nOiBNaXJyb3JlZFJlcGVhdFdyYXBwaW5nCisgICAgfTsKIAotICAgICAgICAgICAgdmFyIHgw
ID0gdGhpcy5jdXJyZW50UG9pbnQueDsKLSAgICAgICAgICAgIHZhciB5MCA9IHRoaXMuY3VycmVu
dFBvaW50Lnk7CisgICAgdmFyIFRFWFRVUkVfRklMVEVSID0geworICAgICAgICBOZWFyZXN0Rmls
dGVyOiBOZWFyZXN0RmlsdGVyLAorICAgICAgICBOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjog
TmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXIsCisgICAgICAgIE5lYXJlc3RNaXBNYXBMaW5lYXJG
aWx0ZXI6IE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXIsCisgICAgICAgIExpbmVhckZpbHRlcjog
TGluZWFyRmlsdGVyLAorICAgICAgICBMaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyOiBMaW5lYXJN
aXBNYXBOZWFyZXN0RmlsdGVyLAorICAgICAgICBMaW5lYXJNaXBNYXBMaW5lYXJGaWx0ZXI6IExp
bmVhck1pcE1hcExpbmVhckZpbHRlcgorICAgIH07CiAKLSAgICAgICAgICAgIHRoaXMuYWJzYXJj
KCBhWCArIHgwLCBhWSArIHkwLCBhUmFkaXVzLAotICAgICAgICAgICAgICAgIGFTdGFydEFuZ2xl
LCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKTsKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIHRoZXNw
aXRlIC8gaHR0cDovL2NsaWNrdG9yZWxlYXNlLmNvbS8KKyAgICAgKi8KIAotICAgICAgICB9LAog
Ci0gICAgICAgIGFic2FyYzogZnVuY3Rpb24gKCBhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xl
LCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKSB7CisgICAgZnVuY3Rpb24gSW1hZ2VCaXRtYXBMb2Fk
ZXIoIG1hbmFnZXIgKSB7CiAKLSAgICAgICAgICAgIHRoaXMuYWJzZWxsaXBzZSggYVgsIGFZLCBh
UmFkaXVzLCBhUmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlICk7Cisg
ICAgICAgIGlmICggdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwID09PSAndW5kZWZpbmVkJyApIHsK
IAotICAgICAgICB9LAorICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuSW1hZ2VCaXRt
YXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4nICk7CiAKLSAgICAg
ICAgZWxsaXBzZTogZnVuY3Rpb24gKCBhWCwgYVksIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFu
Z2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UsIGFSb3RhdGlvbiApIHsKKyAgICAgICAgfQogCi0g
ICAgICAgICAgICB2YXIgeDAgPSB0aGlzLmN1cnJlbnRQb2ludC54OwotICAgICAgICAgICAgdmFy
IHkwID0gdGhpcy5jdXJyZW50UG9pbnQueTsKKyAgICAgICAgaWYgKCB0eXBlb2YgZmV0Y2ggPT09
ICd1bmRlZmluZWQnICkgewogCi0gICAgICAgICAgICB0aGlzLmFic2VsbGlwc2UoIGFYICsgeDAs
IGFZICsgeTAsIHhSYWRpdXMsIHlSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9j
a3dpc2UsIGFSb3RhdGlvbiApOworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuSW1h
Z2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4nICk7CiAKLSAgICAgICAgfSwK
KyAgICAgICAgfQogCi0gICAgICAgIGFic2VsbGlwc2U6IGZ1bmN0aW9uICggYVgsIGFZLCB4UmFk
aXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNlLCBhUm90YXRp
b24gKSB7CisgICAgICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXIgIT09IHVuZGVmaW5lZCA/IG1h
bmFnZXIgOiBEZWZhdWx0TG9hZGluZ01hbmFnZXI7CisgICAgICAgIHRoaXMub3B0aW9ucyA9IHVu
ZGVmaW5lZDsKIAotICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEVsbGlwc2VDdXJ2ZSggYVgs
IGFZLCB4UmFkaXVzLCB5UmFkaXVzLCBhU3RhcnRBbmdsZSwgYUVuZEFuZ2xlLCBhQ2xvY2t3aXNl
LCBhUm90YXRpb24gKTsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmICggdGhpcy5jdXJ2ZXMubGVu
Z3RoID4gMCApIHsKKyAgICBJbWFnZUJpdG1hcExvYWRlci5wcm90b3R5cGUgPSB7CiAKLSAgICAg
ICAgICAgICAgICAvLyBpZiBhIHByZXZpb3VzIGN1cnZlIGlzIHByZXNlbnQsIGF0dGVtcHQgdG8g
am9pbgotICAgICAgICAgICAgICAgIHZhciBmaXJzdFBvaW50ID0gY3VydmUuZ2V0UG9pbnQoIDAg
KTsKKyAgICAgICAgY29uc3RydWN0b3I6IEltYWdlQml0bWFwTG9hZGVyLAogCi0gICAgICAgICAg
ICAgICAgaWYgKCAhIGZpcnN0UG9pbnQuZXF1YWxzKCB0aGlzLmN1cnJlbnRQb2ludCApICkgewor
ICAgICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKCBvcHRpb25zICkgewogCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVRvKCBmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQu
eSApOworICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKIAotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICB9CisgICAgICAg
IH0sCiAKLSAgICAgICAgICAgIHRoaXMuY3VydmVzLnB1c2goIGN1cnZlICk7CisgICAgICAgIGxv
YWQ6IGZ1bmN0aW9uICggdXJsLCBvbkxvYWQsIG9uUHJvZ3Jlc3MsIG9uRXJyb3IgKSB7CiAKLSAg
ICAgICAgICAgIHZhciBsYXN0UG9pbnQgPSBjdXJ2ZS5nZXRQb2ludCggMSApOwotICAgICAgICAg
ICAgdGhpcy5jdXJyZW50UG9pbnQuY29weSggbGFzdFBvaW50ICk7CisgICAgICAgICAgICBpZiAo
IHVybCA9PT0gdW5kZWZpbmVkICkgdXJsID0gJyc7CiAKLSAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCB0aGlzLnBhdGggIT09IHVuZGVmaW5lZCApIHVybCA9IHRoaXMucGF0aCArIHVybDsKIAot
ICAgIH0gKTsKKyAgICAgICAgICAgIHVybCA9IHRoaXMubWFuYWdlci5yZXNvbHZlVVJMKCB1cmwg
KTsKIAotICAgIC8qKgotICAgICAqIEBhdXRob3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVz
Lm5ldC96ejg1L2Jsb2cKLSAgICAgKiBDcmVhdGVzIGZyZWUgZm9ybSAyZCBwYXRoIHVzaW5nIHNl
cmllcyBvZiBwb2ludHMsIGxpbmVzIG9yIGN1cnZlcy4KLSAgICAgKiovCisgICAgICAgICAgICB2
YXIgc2NvcGUgPSB0aGlzOwogCi0gICAgZnVuY3Rpb24gUGF0aCggcG9pbnRzICkgeworICAgICAg
ICAgICAgdmFyIGNhY2hlZCA9IENhY2hlLmdldCggdXJsICk7CiAKLSAgICAgICAgQ3VydmVQYXRo
LmNhbGwoIHRoaXMgKTsKLSAgICAgICAgdGhpcy5jdXJyZW50UG9pbnQgPSBuZXcgVmVjdG9yMigp
OworICAgICAgICAgICAgaWYgKCBjYWNoZWQgIT09IHVuZGVmaW5lZCApIHsKIAotICAgICAgICBp
ZiAoIHBvaW50cyApIHsKKyAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1TdGFydCgg
dXJsICk7CiAKLSAgICAgICAgICAgIHRoaXMuZnJvbVBvaW50cyggcG9pbnRzICk7CisgICAgICAg
ICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewogCi0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvbkxvYWQgKSBvbkxvYWQoIGNhY2hlZCApOwogCi0gICAgfQorICAg
ICAgICAgICAgICAgICAgICBzY29wZS5tYW5hZ2VyLml0ZW1FbmQoIHVybCApOwogCi0gICAgUGF0
aC5wcm90b3R5cGUgPSBQYXRoUHJvdG90eXBlOwotICAgIFBhdGhQcm90b3R5cGUuY29uc3RydWN0
b3IgPSBQYXRoOworICAgICAgICAgICAgICAgIH0sIDAgKTsKIAotICAgIC8qKgotICAgICAqIEBh
dXRob3Igeno4NSAvIGh0dHA6Ly93d3cubGFiNGdhbWVzLm5ldC96ejg1L2Jsb2cKLSAgICAgKiBE
ZWZpbmVzIGEgMmQgc2hhcGUgcGxhbmUgdXNpbmcgcGF0aHMuCi0gICAgICoqLworICAgICAgICAg
ICAgICAgIHJldHVybiBjYWNoZWQ7CiAKLSAgICAvLyBTVEVQIDEgQ3JlYXRlIGEgcGF0aC4KLSAg
ICAvLyBTVEVQIDIgVHVybiBwYXRoIGludG8gc2hhcGUuCi0gICAgLy8gU1RFUCAzIEV4dHJ1ZGVH
ZW9tZXRyeSB0YWtlcyBpbiBTaGFwZS9TaGFwZXMKLSAgICAvLyBTVEVQIDNhIC0gRXh0cmFjdCBw
b2ludHMgZnJvbSBlYWNoIHNoYXBlLCB0dXJuIHRvIHZlcnRpY2VzCi0gICAgLy8gU1RFUCAzYiAt
IFRyaWFuZ3VsYXRlIGVhY2ggc2hhcGUsIGFkZCBmYWNlcy4KKyAgICAgICAgICAgIH0KIAotICAg
IGZ1bmN0aW9uIFNoYXBlKCkgeworICAgICAgICAgICAgZmV0Y2goIHVybCApLnRoZW4oIGZ1bmN0
aW9uICggcmVzICkgewogCi0gICAgICAgIFBhdGguYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwor
ICAgICAgICAgICAgICAgIHJldHVybiByZXMuYmxvYigpOwogCi0gICAgICAgIHRoaXMuaG9sZXMg
PSBbXTsKKyAgICAgICAgICAgIH0gKS50aGVuKCBmdW5jdGlvbiAoIGJsb2IgKSB7CiAKLSAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKCBibG9iLCBzY29wZS5v
cHRpb25zICk7CiAKLSAgICBTaGFwZS5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3Qu
Y3JlYXRlKCBQYXRoUHJvdG90eXBlICksIHsKKyAgICAgICAgICAgIH0gKS50aGVuKCBmdW5jdGlv
biAoIGltYWdlQml0bWFwICkgewogCi0gICAgICAgIGNvbnN0cnVjdG9yOiBTaGFwZSwKKyAgICAg
ICAgICAgICAgICBDYWNoZS5hZGQoIHVybCwgaW1hZ2VCaXRtYXAgKTsKIAotICAgICAgICBnZXRQ
b2ludHNIb2xlczogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBvbkxvYWQgKSBvbkxvYWQoIGltYWdlQml0bWFwICk7CiAKLSAgICAgICAgICAgIHZhciBob2xl
c1B0cyA9IFtdOworICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRlbUVuZCggdXJsICk7
CiAKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMuaG9sZXMubGVuZ3RoOyBp
IDwgbDsgaSArKyApIHsKKyAgICAgICAgICAgIH0gKS5jYXRjaCggZnVuY3Rpb24gKCBlICkgewog
Ci0gICAgICAgICAgICAgICAgaG9sZXNQdHNbIGkgXSA9IHRoaXMuaG9sZXNbIGkgXS5nZXRQb2lu
dHMoIGRpdmlzaW9ucyApOworICAgICAgICAgICAgICAgIGlmICggb25FcnJvciApIG9uRXJyb3Io
IGUgKTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNjb3BlLm1hbmFnZXIuaXRl
bUVuZCggdXJsICk7CisgICAgICAgICAgICAgICAgc2NvcGUubWFuYWdlci5pdGVtRXJyb3IoIHVy
bCApOwogCi0gICAgICAgICAgICByZXR1cm4gaG9sZXNQdHM7CisgICAgICAgICAgICB9ICk7CiAK
ICAgICAgICAgfSwKIAotICAgICAgICAvLyBHZXQgcG9pbnRzIG9mIHNoYXBlIGFuZCBob2xlcyAo
a2V5cG9pbnRzIGJhc2VkIG9uIHNlZ21lbnRzIHBhcmFtZXRlcikKLQotICAgICAgICBleHRyYWN0
QWxsUG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKLQotICAgICAgICAgICAgcmV0dXJu
IHsKLQotICAgICAgICAgICAgICAgIHNoYXBlOiB0aGlzLmdldFBvaW50cyggZGl2aXNpb25zICks
Ci0gICAgICAgICAgICAgICAgaG9sZXM6IHRoaXMuZ2V0UG9pbnRzSG9sZXMoIGRpdmlzaW9ucyAp
CisgICAgICAgIHNldENyb3NzT3JpZ2luOiBmdW5jdGlvbiAoIC8qIHZhbHVlICovICkgewogCi0g
ICAgICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAgICAgfSwKIAot
ICAgICAgICBleHRyYWN0UG9pbnRzOiBmdW5jdGlvbiAoIGRpdmlzaW9ucyApIHsKKyAgICAgICAg
c2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKIAotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZXh0cmFjdEFsbFBvaW50cyggZGl2aXNpb25zICk7CisgICAgICAgICAgICB0aGlzLnBhdGggPSB2
YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgICAgIH0KIAotICAgIH0gKTsK
KyAgICB9OwogCiAgICAgLyoqCiAgICAgICogQGF1dGhvciB6ejg1IC8gaHR0cDovL3d3dy5sYWI0
Z2FtZXMubmV0L3p6ODUvYmxvZwpAQCAtMzU2MTIsNiArMzg3MzAsMTAgQEAKIAogICAgIGZ1bmN0
aW9uIFNoYXBlUGF0aCgpIHsKIAorICAgICAgICB0aGlzLnR5cGUgPSAnU2hhcGVQYXRoJzsKKwor
ICAgICAgICB0aGlzLmNvbG9yID0gbmV3IENvbG9yKCk7CisKICAgICAgICAgdGhpcy5zdWJQYXRo
cyA9IFtdOwogICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gbnVsbDsKIApAQCAtMzU2ODMsNyAr
Mzg4MDUsNyBAQAogICAgICAgICAgICAgICAgIHZhciBpbnNpZGUgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgcCA9IHBvbHlMZW4gLSAxLCBxID0gMDsgcSA8IHBvbHlMZW47IHAg
PSBxICsrICkgewogCi0gICAgICAgICAgICAgICAgICAgIHZhciBlZGdlTG93UHQgID0gaW5Qb2x5
Z29uWyBwIF07CisgICAgICAgICAgICAgICAgICAgIHZhciBlZGdlTG93UHQgPSBpblBvbHlnb25b
IHAgXTsKICAgICAgICAgICAgICAgICAgICAgdmFyIGVkZ2VIaWdoUHQgPSBpblBvbHlnb25bIHEg
XTsKIAogICAgICAgICAgICAgICAgICAgICB2YXIgZWRnZUR4ID0gZWRnZUhpZ2hQdC54IC0gZWRn
ZUxvd1B0Lng7CkBAIC0zNTY5NCw3ICszODgxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBub3QgcGFyYWxsZWwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWRnZUR5IDwg
MCApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VMb3dQdCAgPSBpblBvbHln
b25bIHEgXTsgZWRnZUR4ID0gLSBlZGdlRHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWRnZUxvd1B0ID0gaW5Qb2x5Z29uWyBxIF07IGVkZ2VEeCA9IC0gZWRnZUR4OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVkZ2VIaWdoUHQgPSBpblBvbHlnb25bIHAgXTsgZWRnZUR5ID0g
LSBlZGdlRHk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTM1ODg1LDggKzM5MDA3
LDExIEBACiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS8KICAgICAg
Ki8KIAorCiAgICAgZnVuY3Rpb24gRm9udCggZGF0YSApIHsKIAorICAgICAgICB0aGlzLnR5cGUg
PSAnRm9udCc7CisKICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKIAogICAgIH0KQEAgLTM1ODk1
LDE2OSArMzkwMjAsMTI5IEBACiAKICAgICAgICAgaXNGb250OiB0cnVlLAogCi0gICAgICAgIGdl
bmVyYXRlU2hhcGVzOiBmdW5jdGlvbiAoIHRleHQsIHNpemUsIGRpdmlzaW9ucyApIHsKLQotICAg
ICAgICAgICAgZnVuY3Rpb24gY3JlYXRlUGF0aHMoIHRleHQgKSB7Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgY2hhcnMgPSBTdHJpbmcoIHRleHQgKS5zcGxpdCggJycgKTsKLSAgICAgICAgICAgICAg
ICB2YXIgc2NhbGUgPSBzaXplIC8gZGF0YS5yZXNvbHV0aW9uOwotICAgICAgICAgICAgICAgIHZh
ciBsaW5lX2hlaWdodCA9ICggZGF0YS5ib3VuZGluZ0JveC55TWF4IC0gZGF0YS5ib3VuZGluZ0Jv
eC55TWluICsgZGF0YS51bmRlcmxpbmVUaGlja25lc3MgKSAqIHNjYWxlOwotCi0gICAgICAgICAg
ICAgICAgdmFyIG9mZnNldFggPSAwLCBvZmZzZXRZID0gMDsKLQotICAgICAgICAgICAgICAgIHZh
ciBwYXRocyA9IFtdOworICAgICAgICBnZW5lcmF0ZVNoYXBlczogZnVuY3Rpb24gKCB0ZXh0LCBz
aXplICkgewogCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgY2hhcnMubGVu
Z3RoOyBpICsrICkgewotCi0gICAgICAgICAgICAgICAgICAgIHZhciBjaGFyID0gY2hhcnNbIGkg
XTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIGNoYXIgPT09ICdcbicgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldFggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0WSAtPSBsaW5lX2hlaWdodDsKLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3JlYXRlUGF0aCggY2hhciwgc2Nh
bGUsIG9mZnNldFgsIG9mZnNldFkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFgg
Kz0gcmV0Lm9mZnNldFg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKCByZXQu
cGF0aCApOworICAgICAgICAgICAgaWYgKCBzaXplID09PSB1bmRlZmluZWQgKSBzaXplID0gMTAw
OwogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzaGFwZXMgPSBbXTsK
KyAgICAgICAgICAgIHZhciBwYXRocyA9IGNyZWF0ZVBhdGhzKCB0ZXh0LCBzaXplLCB0aGlzLmRh
dGEgKTsKIAotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIHZhciBwID0gMCwg
cGwgPSBwYXRocy5sZW5ndGg7IHAgPCBwbDsgcCArKyApIHsKIAotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXRoczsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSgg
c2hhcGVzLCBwYXRoc1sgcCBdLnRvU2hhcGVzKCkgKTsKIAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBmdW5jdGlvbiBjcmVhdGVQYXRoKCBjLCBzY2FsZSwgb2Zmc2V0WCwgb2Zmc2V0WSAp
IHsKLQotICAgICAgICAgICAgICAgIHZhciBnbHlwaCA9IGRhdGEuZ2x5cGhzWyBjIF0gfHwgZGF0
YS5nbHlwaHNbICc/JyBdOwotCi0gICAgICAgICAgICAgICAgaWYgKCAhIGdseXBoICkgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBuZXcgU2hhcGVQYXRoKCk7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgcHRzID0gW107Ci0gICAgICAgICAgICAgICAgdmFyIHgsIHksIGNweCwg
Y3B5LCBjcHgwLCBjcHkwLCBjcHgxLCBjcHkxLCBjcHgyLCBjcHkyLCBsYXN0ZTsKLQotICAgICAg
ICAgICAgICAgIGlmICggZ2x5cGgubyApIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgb3V0
bGluZSA9IGdseXBoLl9jYWNoZWRPdXRsaW5lIHx8ICggZ2x5cGguX2NhY2hlZE91dGxpbmUgPSBn
bHlwaC5vLnNwbGl0KCAnICcgKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMCwgbCA9IG91dGxpbmUubGVuZ3RoOyBpIDwgbDsgKSB7CisgICAgICAgICAgICByZXR1cm4g
c2hhcGVzOwogCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gb3V0bGluZVsg
aSArKyBdOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIGFj
dGlvbiApIHsKKyAgICB9ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdt
JzogLy8gbW92ZVRvCisgICAgZnVuY3Rpb24gY3JlYXRlUGF0aHMoIHRleHQsIHNpemUsIGRhdGEg
KSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IG91dGxpbmVbIGkgKysg
XSAqIHNjYWxlICsgb2Zmc2V0WDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9
IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WTsKKyAgICAgICAgdmFyIGNoYXJzID0g
QXJyYXkuZnJvbSA/IEFycmF5LmZyb20oIHRleHQgKSA6IFN0cmluZyggdGV4dCApLnNwbGl0KCAn
JyApOyAvLyBzZWUgIzEzOTg4CisgICAgICAgIHZhciBzY2FsZSA9IHNpemUgLyBkYXRhLnJlc29s
dXRpb247CisgICAgICAgIHZhciBsaW5lX2hlaWdodCA9ICggZGF0YS5ib3VuZGluZ0JveC55TWF4
IC0gZGF0YS5ib3VuZGluZ0JveC55TWluICsgZGF0YS51bmRlcmxpbmVUaGlja25lc3MgKSAqIHNj
YWxlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKCB4LCB5
ICk7CisgICAgICAgIHZhciBwYXRocyA9IFtdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB2YXIgb2Zmc2V0WCA9IDAsIG9mZnNldFkgPSAwOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbCc6IC8vIGxpbmVUbworICAgICAgICBm
b3IgKCB2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkgKysgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeCA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0
WDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IG91dGxpbmVbIGkgKysgXSAq
IHNjYWxlICsgb2Zmc2V0WTsKKyAgICAgICAgICAgIHZhciBjaGFyID0gY2hhcnNbIGkgXTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyggeCwgeSApOworICAg
ICAgICAgICAgaWYgKCBjaGFyID09PSAnXG4nICkgewogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG9mZnNldFggPSAwOworICAgICAgICAg
ICAgICAgIG9mZnNldFkgLT0gbGluZV9oZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICdxJzogLy8gcXVhZHJhdGljQ3VydmVUbworICAgICAgICAgICAgfSBlbHNlIHsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHggID0gb3V0bGluZVsgaSArKyBd
ICogc2NhbGUgKyBvZmZzZXRYOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHkg
ID0gb3V0bGluZVsgaSArKyBdICogc2NhbGUgKyBvZmZzZXRZOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcHgxID0gb3V0bGluZVsgaSArKyBdICogc2NhbGUgKyBvZmZzZXRYOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHkxID0gb3V0bGluZVsgaSArKyBdICog
c2NhbGUgKyBvZmZzZXRZOworICAgICAgICAgICAgICAgIHZhciByZXQgPSBjcmVhdGVQYXRoKCBj
aGFyLCBzY2FsZSwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGF0YSApOworICAgICAgICAgICAgICAgIG9m
ZnNldFggKz0gcmV0Lm9mZnNldFg7CisgICAgICAgICAgICAgICAgcGF0aHMucHVzaCggcmV0LnBh
dGggKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnF1YWRyYXRpY0N1
cnZlVG8oIGNweDEsIGNweTEsIGNweCwgY3B5ICk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGUgPSBwdHNbIHB0cy5sZW5ndGggLSAxIF07Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3RlICkg
eworICAgICAgICByZXR1cm4gcGF0aHM7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNweDAgPSBsYXN0ZS54OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3B5MCA9IGxhc3RlLnk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCB2YXIgaTIgPSAxOyBpMiA8PSBkaXZpc2lvbnM7IGkyICsrICkgeworICAg
IGZ1bmN0aW9uIGNyZWF0ZVBhdGgoIGNoYXIsIHNjYWxlLCBvZmZzZXRYLCBvZmZzZXRZLCBkYXRh
ICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBp
MiAvIGRpdmlzaW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR
dWFkcmF0aWNCZXppZXIoIHQsIGNweDAsIGNweDEsIGNweCApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFF1YWRyYXRpY0JlemllciggdCwgY3B5MCwgY3B5MSwgY3B5
ICk7CisgICAgICAgIHZhciBnbHlwaCA9IGRhdGEuZ2x5cGhzWyBjaGFyIF0gfHwgZGF0YS5nbHlw
aHNbICc/JyBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgIGlmICggISBnbHlwaCApIHJldHVybjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgIHZhciBwYXRoID0gbmV3IFNoYXBlUGF0aCgpOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB2YXIgeCwgeSwgY3B4LCBjcHks
IGNweDEsIGNweTEsIGNweDIsIGNweTI7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdiJzogLy8gYmV6aWVyQ3VydmVUbworICAgICAgICBpZiAoIGdseXBoLm8gKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICA9IG91dGxpbmVbIGkgKysgXSAqIHNj
YWxlICsgb2Zmc2V0WDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICA9IG91
dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3B4MSA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B5MSA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxl
ICsgb2Zmc2V0WTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B4MiA9IG91dGxp
bmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3B5MiA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WTsKKyAgICAgICAg
ICAgIHZhciBvdXRsaW5lID0gZ2x5cGguX2NhY2hlZE91dGxpbmUgfHwgKCBnbHlwaC5fY2FjaGVk
T3V0bGluZSA9IGdseXBoLm8uc3BsaXQoICcgJyApICk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGF0aC5iZXppZXJDdXJ2ZVRvKCBjcHgxLCBjcHkxLCBjcHgyLCBjcHkyLCBj
cHgsIGNweSApOworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gb3V0bGluZS5sZW5n
dGg7IGkgPCBsOyApIHsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ZSA9
IHB0c1sgcHRzLmxlbmd0aCAtIDEgXTsKKyAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gb3V0
bGluZVsgaSArKyBdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGFz
dGUgKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICggYWN0aW9uICkgewogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcHgwID0gbGFzdGUueDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNweTAgPSBsYXN0ZS55OworICAgICAgICAgICAgICAgICAg
ICBjYXNlICdtJzogLy8gbW92ZVRvCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIHZhciBpMiA9IDE7IGkyIDw9IGRpdmlzaW9uczsgaTIgKysgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB4ID0gb3V0bGluZVsgaSArKyBdICogc2NhbGUgKyBvZmZzZXRYOwor
ICAgICAgICAgICAgICAgICAgICAgICAgeSA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zm
c2V0WTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0g
aTIgLyBkaXZpc2lvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q3ViaWNCZXppZXIoIHQsIGNweDAsIGNweDEsIGNweDIsIGNweCApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEN1YmljQmV6aWVyKCB0LCBjcHkwLCBjcHkxLCBjcHky
LCBjcHkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKCB4LCB5ICk7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnbCc6IC8vIGxpbmVUbwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IG91dGxpbmVb
IGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBv
dXRsaW5lWyBpICsrIF0gKiBzY2FsZSArIG9mZnNldFk7CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKCB4LCB5ICk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3EnOiAvLyBxdWFkcmF0
aWNDdXJ2ZVRvCiAKLSAgICAgICAgICAgICAgICByZXR1cm4geyBvZmZzZXRYOiBnbHlwaC5oYSAq
IHNjYWxlLCBwYXRoOiBwYXRoIH07CisgICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBvdXRs
aW5lWyBpICsrIF0gKiBzY2FsZSArIG9mZnNldFg7CisgICAgICAgICAgICAgICAgICAgICAgICBj
cHkgPSBvdXRsaW5lWyBpICsrIF0gKiBzY2FsZSArIG9mZnNldFk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjcHgxID0gb3V0bGluZVsgaSArKyBdICogc2NhbGUgKyBvZmZzZXRYOworICAgICAg
ICAgICAgICAgICAgICAgICAgY3B5MSA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0
WTsKIAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5xdWFkcmF0
aWNDdXJ2ZVRvKCBjcHgxLCBjcHkxLCBjcHgsIGNweSApOwogCi0gICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGlmICggc2l6ZSA9PT0g
dW5kZWZpbmVkICkgc2l6ZSA9IDEwMDsKLSAgICAgICAgICAgIGlmICggZGl2aXNpb25zID09PSB1
bmRlZmluZWQgKSBkaXZpc2lvbnMgPSA0OworICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzog
Ly8gYmV6aWVyQ3VydmVUbwogCi0gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNweCA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zm
c2V0WDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IG91dGxpbmVbIGkgKysgXSAqIHNj
YWxlICsgb2Zmc2V0WTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNweDEgPSBvdXRsaW5lWyBp
ICsrIF0gKiBzY2FsZSArIG9mZnNldFg7CisgICAgICAgICAgICAgICAgICAgICAgICBjcHkxID0g
b3V0bGluZVsgaSArKyBdICogc2NhbGUgKyBvZmZzZXRZOworICAgICAgICAgICAgICAgICAgICAg
ICAgY3B4MiA9IG91dGxpbmVbIGkgKysgXSAqIHNjYWxlICsgb2Zmc2V0WDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNweTIgPSBvdXRsaW5lWyBpICsrIF0gKiBzY2FsZSArIG9mZnNldFk7CiAK
LSAgICAgICAgICAgIHZhciBwYXRocyA9IGNyZWF0ZVBhdGhzKCB0ZXh0ICk7Ci0gICAgICAgICAg
ICB2YXIgc2hhcGVzID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmJlemllckN1
cnZlVG8oIGNweDEsIGNweTEsIGNweDIsIGNweTIsIGNweCwgY3B5ICk7CiAKLSAgICAgICAgICAg
IGZvciAoIHZhciBwID0gMCwgcGwgPSBwYXRocy5sZW5ndGg7IHAgPCBwbDsgcCArKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgQXJyYXkucHJv
dG90eXBlLnB1c2guYXBwbHkoIHNoYXBlcywgcGF0aHNbIHAgXS50b1NoYXBlcygpICk7CisgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBzaGFw
ZXM7Ci0KICAgICAgICAgfQogCi0gICAgfSApOworICAgICAgICByZXR1cm4geyBvZmZzZXRYOiBn
bHlwaC5oYSAqIHNjYWxlLCBwYXRoOiBwYXRoIH07CisKKyAgICB9CiAKICAgICAvKioKICAgICAg
KiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwpAQCAtMzYwNzYsNiArMzkxNjEs
NyBAQAogICAgICAgICAgICAgdmFyIHNjb3BlID0gdGhpczsKIAogICAgICAgICAgICAgdmFyIGxv
YWRlciA9IG5ldyBGaWxlTG9hZGVyKCB0aGlzLm1hbmFnZXIgKTsKKyAgICAgICAgICAgIGxvYWRl
ci5zZXRQYXRoKCB0aGlzLnBhdGggKTsKICAgICAgICAgICAgIGxvYWRlci5sb2FkKCB1cmwsIGZ1
bmN0aW9uICggdGV4dCApIHsKIAogICAgICAgICAgICAgICAgIHZhciBqc29uOwpAQCAtMzYxMDMs
MTAgKzM5MTg5LDIxIEBACiAKICAgICAgICAgICAgIHJldHVybiBuZXcgRm9udCgganNvbiApOwog
CisgICAgICAgIH0sCisKKyAgICAgICAgc2V0UGF0aDogZnVuY3Rpb24gKCB2YWx1ZSApIHsKKwor
ICAgICAgICAgICAgdGhpcy5wYXRoID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsK
KwogICAgICAgICB9CiAKICAgICB9ICk7CiAKKyAgICAvKioKKyAgICAgKiBAYXV0aG9yIG1yZG9v
YiAvIGh0dHA6Ly9tcmRvb2IuY29tLworICAgICAqLworCiAgICAgdmFyIGNvbnRleHQ7CiAKICAg
ICB2YXIgQXVkaW9Db250ZXh0ID0gewpAQCAtMzYxNDksOSArMzkyNDYsMTIgQEAKICAgICAgICAg
ICAgIGxvYWRlci5zZXRSZXNwb25zZVR5cGUoICdhcnJheWJ1ZmZlcicgKTsKICAgICAgICAgICAg
IGxvYWRlci5sb2FkKCB1cmwsIGZ1bmN0aW9uICggYnVmZmVyICkgewogCi0gICAgICAgICAgICAg
ICAgdmFyIGNvbnRleHQgPSBBdWRpb0NvbnRleHQuZ2V0Q29udGV4dCgpOworICAgICAgICAgICAg
ICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGJ1ZmZlci4gVGhlIGBkZWNvZGVBdWRpb0RhdGFg
IG1ldGhvZAorICAgICAgICAgICAgICAgIC8vIGRldGFjaGVzIHRoZSBidWZmZXIgd2hlbiBjb21w
bGV0ZSwgcHJldmVudGluZyByZXVzZS4KKyAgICAgICAgICAgICAgICB2YXIgYnVmZmVyQ29weSA9
IGJ1ZmZlci5zbGljZSggMCApOwogCi0gICAgICAgICAgICAgICAgY29udGV4dC5kZWNvZGVBdWRp
b0RhdGEoIGJ1ZmZlciwgZnVuY3Rpb24gKCBhdWRpb0J1ZmZlciApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgY29udGV4dCA9IEF1ZGlvQ29udGV4dC5nZXRDb250ZXh0KCk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC5kZWNvZGVBdWRpb0RhdGEoIGJ1ZmZlckNvcHksIGZ1bmN0aW9uICggYXVkaW9C
dWZmZXIgKSB7CiAKICAgICAgICAgICAgICAgICAgICAgb25Mb2FkKCBhdWRpb0J1ZmZlciApOwog
CkBAIC0zNjMwNSw3ICszOTQwNSw3IEBACiAgICAgICAgIHRoaXMucmVuZGVyVGFyZ2V0ID0gbmV3
IFdlYkdMUmVuZGVyVGFyZ2V0Q3ViZSggY3ViZVJlc29sdXRpb24sIGN1YmVSZXNvbHV0aW9uLCBv
cHRpb25zICk7CiAgICAgICAgIHRoaXMucmVuZGVyVGFyZ2V0LnRleHR1cmUubmFtZSA9ICJDdWJl
Q2FtZXJhIjsKIAotICAgICAgICB0aGlzLnVwZGF0ZUN1YmVNYXAgPSBmdW5jdGlvbiAoIHJlbmRl
cmVyLCBzY2VuZSApIHsKKyAgICAgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbiAoIHJlbmRlcmVy
LCBzY2VuZSApIHsKIAogICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmVudCA9PT0gbnVsbCApIHRo
aXMudXBkYXRlTWF0cml4V29ybGQoKTsKIApAQCAtMzYzMzgsNiArMzk0MzgsMjMgQEAKIAogICAg
ICAgICB9OwogCisgICAgICAgIHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoIHJlbmRlcmVyLCBjb2xv
ciwgZGVwdGgsIHN0ZW5jaWwgKSB7CisKKyAgICAgICAgICAgIHZhciByZW5kZXJUYXJnZXQgPSB0
aGlzLnJlbmRlclRhcmdldDsKKworICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgNjsg
aSArKyApIHsKKworICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldC5hY3RpdmVDdWJlRmFjZSA9
IGk7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCByZW5kZXJUYXJn
ZXQgKTsKKworICAgICAgICAgICAgICAgIHJlbmRlcmVyLmNsZWFyKCBjb2xvciwgZGVwdGgsIHN0
ZW5jaWwgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZW5kZXJlci5zZXRSZW5k
ZXJUYXJnZXQoIG51bGwgKTsKKworICAgICAgICB9OworCiAgICAgfQogCiAgICAgQ3ViZUNhbWVy
YS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBPYmplY3QzRC5wcm90b3R5cGUgKTsKQEAgLTM2
MzgzLDYgKzM5NTAwLDggQEAKIAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICByZXR1cm4g
dGhpczsKKwogICAgICAgICB9LAogCiAgICAgICAgIGdldEZpbHRlcjogZnVuY3Rpb24gKCkgewpA
QCAtMzY0MDgsNiArMzk1MjcsOCBAQAogICAgICAgICAgICAgdGhpcy5nYWluLmNvbm5lY3QoIHRo
aXMuZmlsdGVyICk7CiAgICAgICAgICAgICB0aGlzLmZpbHRlci5jb25uZWN0KCB0aGlzLmNvbnRl
eHQuZGVzdGluYXRpb24gKTsKIAorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKICAgICAgICAg
fSwKIAogICAgICAgICBnZXRNYXN0ZXJWb2x1bWU6IGZ1bmN0aW9uICgpIHsKQEAgLTM2NDE4LDcg
KzM5NTM5LDkgQEAKIAogICAgICAgICBzZXRNYXN0ZXJWb2x1bWU6IGZ1bmN0aW9uICggdmFsdWUg
KSB7CiAKLSAgICAgICAgICAgIHRoaXMuZ2Fpbi5nYWluLnZhbHVlID0gdmFsdWU7CisgICAgICAg
ICAgICB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUoIHZhbHVlLCB0aGlzLmNvbnRleHQu
Y3VycmVudFRpbWUsIDAuMDEgKTsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAg
ICAgfSwKIApAQCAtMzY0ODcsNiArMzk2MTAsNyBAQAogICAgICAgICB0aGlzLmJ1ZmZlciA9IG51
bGw7CiAgICAgICAgIHRoaXMubG9vcCA9IGZhbHNlOwogICAgICAgICB0aGlzLnN0YXJ0VGltZSA9
IDA7CisgICAgICAgIHRoaXMub2Zmc2V0ID0gMDsKICAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUg
PSAxOwogICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlOwogICAgICAgICB0aGlzLmhhc1Bs
YXliYWNrQ29udHJvbCA9IHRydWU7CkBAIC0zNjUxNyw2ICszOTY0MSwxNyBAQAogCiAgICAgICAg
IH0sCiAKKyAgICAgICAgc2V0TWVkaWFFbGVtZW50U291cmNlOiBmdW5jdGlvbiAoIG1lZGlhRWxl
bWVudCApIHsKKworICAgICAgICAgICAgdGhpcy5oYXNQbGF5YmFja0NvbnRyb2wgPSBmYWxzZTsK
KyAgICAgICAgICAgIHRoaXMuc291cmNlVHlwZSA9ICdtZWRpYU5vZGUnOworICAgICAgICAgICAg
dGhpcy5zb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKCBtZWRp
YUVsZW1lbnQgKTsKKyAgICAgICAgICAgIHRoaXMuY29ubmVjdCgpOworCisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCiAgICAgICAgIHNldEJ1ZmZlcjogZnVuY3Rpb24g
KCBhdWRpb0J1ZmZlciApIHsKIAogICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBhdWRpb0J1ZmZl
cjsKQEAgLTM2NTUwLDcgKzM5Njg1LDggQEAKICAgICAgICAgICAgIHNvdXJjZS5sb29wID0gdGhp
cy5sb29wOwogICAgICAgICAgICAgc291cmNlLm9uZW5kZWQgPSB0aGlzLm9uRW5kZWQuYmluZCgg
dGhpcyApOwogICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS5zZXRWYWx1ZUF0VGltZSgg
dGhpcy5wbGF5YmFja1JhdGUsIHRoaXMuc3RhcnRUaW1lICk7Ci0gICAgICAgICAgICBzb3VyY2Uu
c3RhcnQoIDAsIHRoaXMuc3RhcnRUaW1lICk7CisgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9
IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTsKKyAgICAgICAgICAgIHNvdXJjZS5zdGFydCggdGhp
cy5zdGFydFRpbWUsIHRoaXMub2Zmc2V0ICk7CiAKICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5n
ID0gdHJ1ZTsKIApAQCAtMzY1NjksOSArMzk3MDUsMTMgQEAKIAogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICB0aGlzLnNvdXJjZS5zdG9wKCk7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0VGlt
ZSA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTsKLSAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5n
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlICkgewor
CisgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3RvcCgpOworICAgICAgICAgICAgICAgIHRo
aXMub2Zmc2V0ICs9ICggdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gdGhpcy5zdGFydFRpbWUg
KSAqIHRoaXMucGxheWJhY2tSYXRlOworICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKQEAg
LTM2NTg3LDcgKzM5NzI3LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdGhpcy5z
b3VyY2Uuc3RvcCgpOwotICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwOworICAgICAgICAg
ICAgdGhpcy5vZmZzZXQgPSAwOwogICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsK
IAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0zNjc1NSw3ICszOTg5NSw3IEBACiAKICAg
ICAgICAgc2V0Vm9sdW1lOiBmdW5jdGlvbiAoIHZhbHVlICkgewogCi0gICAgICAgICAgICB0aGlz
LmdhaW4uZ2Fpbi52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5nYWluLmdhaW4uc2V0
VGFyZ2V0QXRUaW1lKCB2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLCAwLjAxICk7CiAK
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwogCkBAIC0zNjc5Niw2ICszOTkzNiw4IEBACiAKICAg
ICAgICAgICAgIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlID0gdmFsdWU7CiAKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworCiAgICAgICAgIH0sCiAKICAgICAgICAgZ2V0Um9sbG9mZkZhY3Rvcjog
ZnVuY3Rpb24gKCkgewpAQCAtMzY4MDgsNiArMzk5NTAsOCBAQAogCiAgICAgICAgICAgICB0aGlz
LnBhbm5lci5yb2xsb2ZmRmFjdG9yID0gdmFsdWU7CiAKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworCiAgICAgICAgIH0sCiAKICAgICAgICAgZ2V0RGlzdGFuY2VNb2RlbDogZnVuY3Rpb24gKCkg
ewpAQCAtMzY4MjAsNiArMzk5NjQsOCBAQAogCiAgICAgICAgICAgICB0aGlzLnBhbm5lci5kaXN0
YW5jZU1vZGVsID0gdmFsdWU7CiAKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCiAgICAgICAg
IH0sCiAKICAgICAgICAgZ2V0TWF4RGlzdGFuY2U6IGZ1bmN0aW9uICgpIHsKQEAgLTM2ODMyLDE5
ICszOTk3OCwzOSBAQAogCiAgICAgICAgICAgICB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZSA9IHZh
bHVlOwogCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICB9LAorCisgICAgICAg
IHNldERpcmVjdGlvbmFsQ29uZTogZnVuY3Rpb24gKCBjb25lSW5uZXJBbmdsZSwgY29uZU91dGVy
QW5nbGUsIGNvbmVPdXRlckdhaW4gKSB7CisKKyAgICAgICAgICAgIHRoaXMucGFubmVyLmNvbmVJ
bm5lckFuZ2xlID0gY29uZUlubmVyQW5nbGU7CisgICAgICAgICAgICB0aGlzLnBhbm5lci5jb25l
T3V0ZXJBbmdsZSA9IGNvbmVPdXRlckFuZ2xlOworICAgICAgICAgICAgdGhpcy5wYW5uZXIuY29u
ZU91dGVyR2FpbiA9IGNvbmVPdXRlckdhaW47CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwor
CiAgICAgICAgIH0sCiAKICAgICAgICAgdXBkYXRlTWF0cml4V29ybGQ6ICggZnVuY3Rpb24gKCkg
ewogCiAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBuZXcgVmVjdG9yMygpOworICAgICAgICAg
ICAgdmFyIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpOworICAgICAgICAgICAgdmFyIHNj
YWxlID0gbmV3IFZlY3RvcjMoKTsKKworICAgICAgICAgICAgdmFyIG9yaWVudGF0aW9uID0gbmV3
IFZlY3RvcjMoKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZU1hdHJpeFdv
cmxkKCBmb3JjZSApIHsKIAogICAgICAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS51cGRh
dGVNYXRyaXhXb3JsZC5jYWxsKCB0aGlzLCBmb3JjZSApOwogCi0gICAgICAgICAgICAgICAgcG9z
aXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCB0aGlzLm1hdHJpeFdvcmxkICk7CisgICAgICAg
ICAgICAgICAgdmFyIHBhbm5lciA9IHRoaXMucGFubmVyOworICAgICAgICAgICAgICAgIHRoaXMu
bWF0cml4V29ybGQuZGVjb21wb3NlKCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgc2NhbGUgKTsKKwor
ICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uLnNldCggMCwgMCwgMSApLmFwcGx5UXVhdGVybmlv
biggcXVhdGVybmlvbiApOwogCi0gICAgICAgICAgICAgICAgdGhpcy5wYW5uZXIuc2V0UG9zaXRp
b24oIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnogKTsKKyAgICAgICAgICAgICAg
ICBwYW5uZXIuc2V0UG9zaXRpb24oIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnog
KTsKKyAgICAgICAgICAgICAgICBwYW5uZXIuc2V0T3JpZW50YXRpb24oIG9yaWVudGF0aW9uLngs
IG9yaWVudGF0aW9uLnksIG9yaWVudGF0aW9uLnogKTsKIAogICAgICAgICAgICAgfTsKIApAQCAt
MzcxMDksNiArNDAyNzUsOSBAQAogICAgICAqIEBhdXRob3IgdHNjaHcKICAgICAgKi8KIAorICAg
IC8vIENoYXJhY3RlcnMgW10uOi8gYXJlIHJlc2VydmVkIGZvciB0cmFjayBiaW5kaW5nIHN5bnRh
eC4KKyAgICB2YXIgUkVTRVJWRURfQ0hBUlNfUkUgPSAnXFxbXFxdXFwuOlxcLyc7CisKICAgICBm
dW5jdGlvbiBDb21wb3NpdGUoIHRhcmdldEdyb3VwLCBwYXRoLCBvcHRpb25hbFBhcnNlZFBhdGgg
KSB7CiAKICAgICAgICAgdmFyIHBhcnNlZFBhdGggPSBvcHRpb25hbFBhcnNlZFBhdGggfHwgUHJv
cGVydHlCaW5kaW5nLnBhcnNlVHJhY2tOYW1lKCBwYXRoICk7CkBAIC0zNzIxMCw4NyArNDAzNzks
OTkgQEAKICAgICAgICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIE5vZGUgbmFtZSB0byBiZSBz
YW5pdGl6ZWQuCiAgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICAgICovCi0gICAg
ICAgIHNhbml0aXplTm9kZU5hbWU6IGZ1bmN0aW9uICggbmFtZSApIHsKKyAgICAgICAgc2FuaXRp
emVOb2RlTmFtZTogKCBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgIHJldHVybiBuYW1lLnJl
cGxhY2UoIC9ccy9nLCAnXycgKS5yZXBsYWNlKCAvW15cdy1dL2csICcnICk7CisgICAgICAgICAg
ICB2YXIgcmVzZXJ2ZWRSZSA9IG5ldyBSZWdFeHAoICdbJyArIFJFU0VSVkVEX0NIQVJTX1JFICsg
J10nLCAnZycgKTsKIAotICAgICAgICB9LAorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNh
bml0aXplTm9kZU5hbWUoIG5hbWUgKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZS5y
ZXBsYWNlKCAvXHMvZywgJ18nICkucmVwbGFjZSggcmVzZXJ2ZWRSZSwgJycgKTsKKworICAgICAg
ICAgICAgfTsKKworICAgICAgICB9KCkgKSwKIAogICAgICAgICBwYXJzZVRyYWNrTmFtZTogZnVu
Y3Rpb24gKCkgewogCisgICAgICAgICAgICAvLyBBdHRlbXB0cyB0byBhbGxvdyBub2RlIG5hbWVz
IGZyb20gYW55IGxhbmd1YWdlLiBFUzUncyBgXHdgIHJlZ2V4cCBtYXRjaGVzCisgICAgICAgICAg
ICAvLyBvbmx5IGxhdGluIGNoYXJhY3RlcnMsIGFuZCB0aGUgdW5pY29kZSBccHtMfSBpcyBub3Qg
eWV0IHN1cHBvcnRlZC4gU28KKyAgICAgICAgICAgIC8vIGluc3RlYWQsIHdlIGV4Y2x1ZGUgcmVz
ZXJ2ZWQgY2hhcmFjdGVycyBhbmQgbWF0Y2ggZXZlcnl0aGluZyBlbHNlLgorICAgICAgICAgICAg
dmFyIHdvcmRDaGFyID0gJ1teJyArIFJFU0VSVkVEX0NIQVJTX1JFICsgJ10nOworICAgICAgICAg
ICAgdmFyIHdvcmRDaGFyT3JEb3QgPSAnW14nICsgUkVTRVJWRURfQ0hBUlNfUkUucmVwbGFjZSgg
J1xcLicsICcnICkgKyAnXSc7CisKICAgICAgICAgICAgIC8vIFBhcmVudCBkaXJlY3Rvcmllcywg
ZGVsaW1pdGVkIGJ5ICcvJyBvciAnOicuIEN1cnJlbnRseSB1bnVzZWQsIGJ1dCBtdXN0CiAgICAg
ICAgICAgICAvLyBiZSBtYXRjaGVkIHRvIHBhcnNlIHRoZSByZXN0IG9mIHRoZSB0cmFjayBuYW1l
LgotICAgICAgICAgICAgdmFyIGRpcmVjdG9yeVJlID0gLygoPzpbXHctXStbXC86XSkqKS87Cisg
ICAgICAgICAgICB2YXIgZGlyZWN0b3J5UmUgPSAvKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVw
bGFjZSggJ1dDJywgd29yZENoYXIgKTsKIAogICAgICAgICAgICAgLy8gVGFyZ2V0IG5vZGUuIE1h
eSBjb250YWluIHdvcmQgY2hhcmFjdGVycyAoYS16QS1aMC05XykgYW5kICcuJyBvciAnLScuCi0g
ICAgICAgICAgICB2YXIgbm9kZVJlID0gLyhbXHctXC5dKyk/LzsKKyAgICAgICAgICAgIHZhciBu
b2RlUmUgPSAvKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCAnV0NPRCcsIHdvcmRDaGFyT3JEb3Qg
KTsKIAotICAgICAgICAgICAgLy8gT2JqZWN0IG9uIHRhcmdldCBub2RlLCBhbmQgYWNjZXNzb3Iu
IE5hbWUgbWF5IGNvbnRhaW4gb25seSB3b3JkCisgICAgICAgICAgICAvLyBPYmplY3Qgb24gdGFy
Z2V0IG5vZGUsIGFuZCBhY2Nlc3Nvci4gTWF5IG5vdCBjb250YWluIHJlc2VydmVkCiAgICAgICAg
ICAgICAvLyBjaGFyYWN0ZXJzLiBBY2Nlc3NvciBtYXkgY29udGFpbiBhbnkgY2hhcmFjdGVyIGV4
Y2VwdCBjbG9zaW5nIGJyYWNrZXQuCi0gICAgICAgICAgICB2YXIgb2JqZWN0UmUgPSAvKD86XC4o
W1x3LV0rKSg/OlxbKC4rKVxdKT8pPy87CisgICAgICAgICAgICB2YXIgb2JqZWN0UmUgPSAvKD86
XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoICdXQycsIHdvcmRDaGFyICk7
CiAKLSAgICAgICAgICAgIC8vIFByb3BlcnR5IGFuZCBhY2Nlc3Nvci4gTWF5IGNvbnRhaW4gb25s
eSB3b3JkIGNoYXJhY3RlcnMuIEFjY2Vzc29yIG1heQorICAgICAgICAgICAgLy8gUHJvcGVydHkg
YW5kIGFjY2Vzc29yLiBNYXkgbm90IGNvbnRhaW4gcmVzZXJ2ZWQgY2hhcmFjdGVycy4gQWNjZXNz
b3IgbWF5CiAgICAgICAgICAgICAvLyBjb250YWluIGFueSBub24tYnJhY2tldCBjaGFyYWN0ZXJz
LgotICAgICAgICAgICAgdmFyIHByb3BlcnR5UmUgPSAvXC4oW1x3LV0rKSg/OlxbKC4rKVxdKT8v
OworICAgICAgICAgICAgdmFyIHByb3BlcnR5UmUgPSAvXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNv
dXJjZS5yZXBsYWNlKCAnV0MnLCB3b3JkQ2hhciApOwogCi0gICAgICAgICAgICB2YXIgdHJhY2tS
ZSA9IG5ldyBSZWdFeHAoJycKKyAgICAgICAgICAgIHZhciB0cmFja1JlID0gbmV3IFJlZ0V4cCgg
JycKICAgICAgICAgICAgICAgICArICdeJwotICAgICAgICAgICAgICAgICsgZGlyZWN0b3J5UmUu
c291cmNlCi0gICAgICAgICAgICAgICAgKyBub2RlUmUuc291cmNlCi0gICAgICAgICAgICAgICAg
KyBvYmplY3RSZS5zb3VyY2UKLSAgICAgICAgICAgICAgICArIHByb3BlcnR5UmUuc291cmNlCisg
ICAgICAgICAgICAgICAgKyBkaXJlY3RvcnlSZQorICAgICAgICAgICAgICAgICsgbm9kZVJlCisg
ICAgICAgICAgICAgICAgKyBvYmplY3RSZQorICAgICAgICAgICAgICAgICsgcHJvcGVydHlSZQog
ICAgICAgICAgICAgICAgICsgJyQnCiAgICAgICAgICAgICApOwogCiAgICAgICAgICAgICB2YXIg
c3VwcG9ydGVkT2JqZWN0TmFtZXMgPSBbICdtYXRlcmlhbCcsICdtYXRlcmlhbHMnLCAnYm9uZXMn
IF07CiAKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoIHRyYWNrTmFtZSApIHsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBwYXJzZVRyYWNrTmFtZSggdHJhY2tOYW1lICkgewogCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gdHJhY2tSZS5leGVjKCB0cmFja05hbWUg
KTsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHRyYWNrUmUuZXhlYyggdHJhY2tOYW1l
ICk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIG1hdGNoZXMgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhIG1hdGNoZXMgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvciggJ1Byb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogJyAr
IHRyYWNrTmFtZSApOwotCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCAnUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tO
YW1lOiAnICsgdHJhY2tOYW1lICk7CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMg
PSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXJlY3RvcnlOYW1lOiBtYXRjaGVzWyAx
IF0sIC8vICh0c2NodykgY3VycmVudGx5IHVudXNlZAotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZU5hbWU6IG1hdGNoZXNbIDIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdE5h
bWU6IG1hdGNoZXNbIDMgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEluZGV4OiBt
YXRjaGVzWyA0IF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IG1hdGNo
ZXNbIDUgXSwgICAgIC8vIHJlcXVpcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUluZGV4OiBtYXRjaGVzWyA2IF0KLSAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3REb3QgPSByZXN1bHRzLm5vZGVO
YW1lICYmIHJlc3VsdHMubm9kZU5hbWUubGFzdEluZGV4T2YoICcuJyApOworICAgICAgICAgICAg
ICAgIHZhciByZXN1bHRzID0geworICAgICAgICAgICAgICAgICAgICAvLyBkaXJlY3RvcnlOYW1l
OiBtYXRjaGVzWyAxIF0sIC8vICh0c2NodykgY3VycmVudGx5IHVudXNlZAorICAgICAgICAgICAg
ICAgICAgICBub2RlTmFtZTogbWF0Y2hlc1sgMiBdLAorICAgICAgICAgICAgICAgICAgICBvYmpl
Y3ROYW1lOiBtYXRjaGVzWyAzIF0sCisgICAgICAgICAgICAgICAgICAgIG9iamVjdEluZGV4OiBt
YXRjaGVzWyA0IF0sCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogbWF0Y2hlc1sg
NSBdLCAvLyByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUluZGV4OiBtYXRj
aGVzWyA2IF0KKyAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGlmICgg
bGFzdERvdCAhPT0gdW5kZWZpbmVkICYmIGxhc3REb3QgIT09IC0xICkgeworICAgICAgICAgICAg
ICAgIHZhciBsYXN0RG90ID0gcmVzdWx0cy5ub2RlTmFtZSAmJiByZXN1bHRzLm5vZGVOYW1lLmxh
c3RJbmRleE9mKCAnLicgKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdE5h
bWUgPSByZXN1bHRzLm5vZGVOYW1lLnN1YnN0cmluZyggbGFzdERvdCArIDEgKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIGxhc3REb3QgIT09IHVuZGVmaW5lZCAmJiBsYXN0RG90ICE9PSAtIDEgKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCBuYW1lcyBtdXN0IGJlIGNoZWNr
ZWQgYWdhaW5zdCBhIHdoaXRlbGlzdC4gT3RoZXJ3aXNlLCB0aGVyZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaXMgbm8gd2F5IHRvIHBhcnNlICdmb28uYmFyLmJheic6ICdiYXonIG11c3Qg
YmUgYSBwcm9wZXJ0eSwgYnV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFyJyBjb3Vs
ZCBiZSB0aGUgb2JqZWN0TmFtZSwgb3IgcGFydCBvZiBhIG5vZGVOYW1lICh3aGljaCBjYW4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgJy4nIGNoYXJhY3RlcnMpLgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBzdXBwb3J0ZWRPYmplY3ROYW1lcy5pbmRleE9mKCBvYmpl
Y3ROYW1lICkgIT09IC0xICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0TmFtZSA9
IHJlc3VsdHMubm9kZU5hbWUuc3Vic3RyaW5nKCBsYXN0RG90ICsgMSApOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cy5ub2RlTmFtZSA9IHJlc3VsdHMubm9kZU5hbWUuc3Vi
c3RyaW5nKCAwLCBsYXN0RG90ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5vYmplY3ROYW1lID0gb2JqZWN0TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0
IG5hbWVzIG11c3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGEgd2hpdGVsaXN0LiBPdGhlcndpc2UsIHRo
ZXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vIHdheSB0byBwYXJzZSAnZm9vLmJhci5i
YXonOiAnYmF6JyBtdXN0IGJlIGEgcHJvcGVydHksIGJ1dAorICAgICAgICAgICAgICAgICAgICAv
LyAnYmFyJyBjb3VsZCBiZSB0aGUgb2JqZWN0TmFtZSwgb3IgcGFydCBvZiBhIG5vZGVOYW1lICh3
aGljaCBjYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gaW5jbHVkZSAnLicgY2hhcmFjdGVycyku
CisgICAgICAgICAgICAgICAgICAgIGlmICggc3VwcG9ydGVkT2JqZWN0TmFtZXMuaW5kZXhPZigg
b2JqZWN0TmFtZSApICE9PSAtIDEgKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubm9kZU5hbWUgPSByZXN1bHRzLm5vZGVOYW1l
LnN1YnN0cmluZyggMCwgbGFzdERvdCApOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5vYmplY3ROYW1lID0gb2JqZWN0TmFtZTsKIAogICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzLnByb3BlcnR5TmFtZSA9PT0gbnVsbCB8fCBy
ZXN1bHRzLnByb3BlcnR5TmFtZS5sZW5ndGggPT09IDAgKSB7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdQcm9wZXJ0eUJpbmRp
bmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAnICsgdHJhY2tO
YW1lICk7CisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzLnByb3BlcnR5TmFtZSA9PT0gbnVs
bCB8fCByZXN1bHRzLnByb3BlcnR5TmFtZS5sZW5ndGggPT09IDAgKSB7CiAKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICdQcm9wZXJ0
eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAnICsg
dHJhY2tOYW1lICk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKKworICAgICAgICAgICAgfTsKIAogICAgICAgICB9KCksCiAKQEAgLTM3MzA1
LDI3ICs0MDQ4Niw5IEBACiAgICAgICAgICAgICAvLyBzZWFyY2ggaW50byBza2VsZXRvbiBib25l
cy4KICAgICAgICAgICAgIGlmICggcm9vdC5za2VsZXRvbiApIHsKIAotICAgICAgICAgICAgICAg
IHZhciBzZWFyY2hTa2VsZXRvbiA9IGZ1bmN0aW9uICggc2tlbGV0b24gKSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgc2tlbGV0b24uYm9uZXMubGVuZ3RoOyBp
ICsrICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9uZSA9IHNrZWxldG9uLmJv
bmVzWyBpIF07CisgICAgICAgICAgICAgICAgdmFyIGJvbmUgPSByb290LnNrZWxldG9uLmdldEJv
bmVCeU5hbWUoIG5vZGVOYW1lICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYm9u
ZS5uYW1lID09PSBub2RlTmFtZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBib25lOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHZhciBib25lID0gc2VhcmNoU2tlbGV0b24oIHJv
b3Quc2tlbGV0b24gKTsKLQotICAgICAgICAgICAgICAgIGlmICggYm9uZSApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIGJvbmUgIT09IHVuZGVmaW5lZCApIHsKIAogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYm9uZTsKIApAQCAtMzc0MzQsMjAgKzQwNTk3LDIwIEBACiAKICAgICAgICAgICAg
ICAgICBmdW5jdGlvbiBzZXRWYWx1ZV9kaXJlY3QoIGJ1ZmZlciwgb2Zmc2V0ICkgewogCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMubm9kZVsgdGhpcy5wcm9wZXJ0eU5hbWUgXSA9IGJ1ZmZlclsg
b2Zmc2V0IF07CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0T2JqZWN0WyB0aGlzLnBy
b3BlcnR5TmFtZSBdID0gYnVmZmVyWyBvZmZzZXQgXTsKIAogICAgICAgICAgICAgICAgIH0sCiAK
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUo
IGJ1ZmZlciwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZVsgdGhp
cy5wcm9wZXJ0eU5hbWUgXSA9IGJ1ZmZlclsgb2Zmc2V0IF07CisgICAgICAgICAgICAgICAgICAg
IHRoaXMudGFyZ2V0T2JqZWN0WyB0aGlzLnByb3BlcnR5TmFtZSBdID0gYnVmZmVyWyBvZmZzZXQg
XTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGUgPSB0
cnVlOwogCiAgICAgICAgICAgICAgICAgfSwKIAogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNl
dFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKCBidWZmZXIsIG9mZnNldCAp
IHsKIAotICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVbIHRoaXMucHJvcGVydHlOYW1lIF0g
PSBidWZmZXJbIG9mZnNldCBdOworICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE9iamVj
dFsgdGhpcy5wcm9wZXJ0eU5hbWUgXSA9IGJ1ZmZlclsgb2Zmc2V0IF07CiAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlOwog
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzc1ODAsOCArNDA3NDMsNyBAQAogCiAgICAgICAgICAg
ICBpZiAoICEgdGFyZ2V0T2JqZWN0ICkgewogCi0gICAgICAgICAgICAgICAgdGFyZ2V0T2JqZWN0
ID0gUHJvcGVydHlCaW5kaW5nLmZpbmROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yb290Tm9kZSwgcGFyc2VkUGF0aC5ub2RlTmFtZSApIHx8IHRoaXMucm9vdE5vZGU7CisgICAg
ICAgICAgICAgICAgdGFyZ2V0T2JqZWN0ID0gUHJvcGVydHlCaW5kaW5nLmZpbmROb2RlKCB0aGlz
LnJvb3ROb2RlLCBwYXJzZWRQYXRoLm5vZGVOYW1lICkgfHwgdGhpcy5yb290Tm9kZTsKIAogICAg
ICAgICAgICAgICAgIHRoaXMubm9kZSA9IHRhcmdldE9iamVjdDsKIApAQCAtMzc4NTksNyArNDEw
MjEsNyBAQAogICAgICAqIEBhdXRob3IgdHNjaHcKICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIEFu
aW1hdGlvbk9iamVjdEdyb3VwKCB2YXJfYXJncyApIHsKKyAgICBmdW5jdGlvbiBBbmltYXRpb25P
YmplY3RHcm91cCgpIHsKIAogICAgICAgICB0aGlzLnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVVSUQo
KTsKIApAQCAtMzc4ODgsMTEgKzQxMDUwLDIyIEBACiAgICAgICAgIHRoaXMuc3RhdHMgPSB7CiAK
ICAgICAgICAgICAgIG9iamVjdHM6IHsKLSAgICAgICAgICAgICAgICBnZXQgdG90YWwoKSB7IHJl
dHVybiBzY29wZS5fb2JqZWN0cy5sZW5ndGg7IH0sCi0gICAgICAgICAgICAgICAgZ2V0IGluVXNl
KCkgeyByZXR1cm4gdGhpcy50b3RhbCAtIHNjb3BlLm5DYWNoZWRPYmplY3RzXzsgfQorICAgICAg
ICAgICAgICAgIGdldCB0b3RhbCgpIHsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nv
cGUuX29iamVjdHMubGVuZ3RoOworCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICBnZXQgaW5Vc2UoKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWwg
LSBzY29wZS5uQ2FjaGVkT2JqZWN0c187CisKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCkgewogCi0gICAgICAgICAg
ICBnZXQgYmluZGluZ3NQZXJPYmplY3QoKSB7IHJldHVybiBzY29wZS5fYmluZGluZ3MubGVuZ3Ro
OyB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLl9iaW5kaW5ncy5sZW5ndGg7CisKKyAg
ICAgICAgICAgIH0KIAogICAgICAgICB9OwogCkBAIC0zNzkwMiw3ICs0MTA3NSw3IEBACiAKICAg
ICAgICAgaXNBbmltYXRpb25PYmplY3RHcm91cDogdHJ1ZSwKIAotICAgICAgICBhZGQ6IGZ1bmN0
aW9uKCB2YXJfYXJncyApIHsKKyAgICAgICAgYWRkOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAg
ICAgIHZhciBvYmplY3RzID0gdGhpcy5fb2JqZWN0cywKICAgICAgICAgICAgICAgICBuT2JqZWN0
cyA9IG9iamVjdHMubGVuZ3RoLApAQCAtMzc5MTEsMTQgKzQxMDg0LDE0IEBACiAgICAgICAgICAg
ICAgICAgcGF0aHMgPSB0aGlzLl9wYXRocywKICAgICAgICAgICAgICAgICBwYXJzZWRQYXRocyA9
IHRoaXMuX3BhcnNlZFBhdGhzLAogICAgICAgICAgICAgICAgIGJpbmRpbmdzID0gdGhpcy5fYmlu
ZGluZ3MsCi0gICAgICAgICAgICAgICAgbkJpbmRpbmdzID0gYmluZGluZ3MubGVuZ3RoOworICAg
ICAgICAgICAgICAgIG5CaW5kaW5ncyA9IGJpbmRpbmdzLmxlbmd0aCwKKyAgICAgICAgICAgICAg
ICBrbm93bk9iamVjdCA9IHVuZGVmaW5lZDsKIAogICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
LCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSAhPT0gbjsgKysgaSApIHsKIAogICAgICAgICAgICAg
ICAgIHZhciBvYmplY3QgPSBhcmd1bWVudHNbIGkgXSwKICAgICAgICAgICAgICAgICAgICAgdXVp
ZCA9IG9iamVjdC51dWlkLAotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGljZXNCeVVV
SURbIHV1aWQgXSwKLSAgICAgICAgICAgICAgICAgICAga25vd25PYmplY3QgPSB1bmRlZmluZWQ7
CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kaWNlc0J5VVVJRFsgdXVpZCBdOwogCiAg
ICAgICAgICAgICAgICAgaWYgKCBpbmRleCA9PT0gdW5kZWZpbmVkICkgewogCkBAIC0zNzkzMiw5
ICs0MTEwNSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBtID0g
bkJpbmRpbmdzOyBqICE9PSBtOyArKyBqICkgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBi
aW5kaW5nc1sgaiBdLnB1c2goCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQ
cm9wZXJ0eUJpbmRpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QsIHBhdGhzWyBqIF0sIHBhcnNlZFBhdGhzWyBqIF0gKSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgYmluZGluZ3NbIGogXS5wdXNoKCBuZXcgUHJvcGVydHlCaW5kaW5nKCBvYmplY3QsIHBh
dGhzWyBqIF0sIHBhcnNlZFBhdGhzWyBqIF0gKSApOwogCiAgICAgICAgICAgICAgICAgICAgIH0K
IApAQCAtMzc5NjksOCArNDExNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZvciBvYmplY3RzIHRoYXQgYXJlIGNhY2hlZCwgdGhlIGJpbmRpbmcgbWF5CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gb3IgbWF5IG5vdCBleGlzdAogCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmluZGluZyA9IG5ldyBQcm9wZXJ0eUJpbmRpbmcoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsIHBhdGhzWyBqIF0sIHBhcnNlZFBhdGhzWyBq
IF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gbmV3IFByb3BlcnR5
QmluZGluZyggb2JqZWN0LCBwYXRoc1sgaiBdLCBwYXJzZWRQYXRoc1sgaiBdICk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMzc5OTEsNyArNDExNjEsNyBAQAogCiAgICAgICAg
IH0sCiAKLSAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggdmFyX2FyZ3MgKSB7CisgICAgICAgIHJl
bW92ZTogZnVuY3Rpb24gKCkgewogCiAgICAgICAgICAgICB2YXIgb2JqZWN0cyA9IHRoaXMuX29i
amVjdHMsCiAgICAgICAgICAgICAgICAgbkNhY2hlZE9iamVjdHMgPSB0aGlzLm5DYWNoZWRPYmpl
Y3RzXywKQEAgLTM4MDQwLDcgKzQxMjEwLDcgQEAKICAgICAgICAgfSwKIAogICAgICAgICAvLyBy
ZW1vdmUgJiBmb3JnZXQKLSAgICAgICAgdW5jYWNoZTogZnVuY3Rpb24oIHZhcl9hcmdzICkgewor
ICAgICAgICB1bmNhY2hlOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAgICAgIHZhciBvYmplY3Rz
ID0gdGhpcy5fb2JqZWN0cywKICAgICAgICAgICAgICAgICBuT2JqZWN0cyA9IG9iamVjdHMubGVu
Z3RoLApAQCAtMzgyMTgsOCArNDEzODgsOCBAQAogICAgICAgICAgICAgaW50ZXJwb2xhbnRzID0g
bmV3IEFycmF5KCBuVHJhY2tzICk7CiAKICAgICAgICAgdmFyIGludGVycG9sYW50U2V0dGluZ3Mg
PSB7Ci0gICAgICAgICAgICAgICAgZW5kaW5nU3RhcnQ6ICAgIFplcm9DdXJ2YXR1cmVFbmRpbmcs
Ci0gICAgICAgICAgICAgICAgZW5kaW5nRW5kOiAgICAgIFplcm9DdXJ2YXR1cmVFbmRpbmcKKyAg
ICAgICAgICAgIGVuZGluZ1N0YXJ0OiBaZXJvQ3VydmF0dXJlRW5kaW5nLAorICAgICAgICAgICAg
ZW5kaW5nRW5kOiBaZXJvQ3VydmF0dXJlRW5kaW5nCiAgICAgICAgIH07CiAKICAgICAgICAgZm9y
ICggdmFyIGkgPSAwOyBpICE9PSBuVHJhY2tzOyArKyBpICkgewpAQCAtMzgyNDQsNyArNDE0MTQs
NyBAQAogICAgICAgICB0aGlzLl93ZWlnaHRJbnRlcnBvbGFudCA9IG51bGw7CiAKICAgICAgICAg
dGhpcy5sb29wID0gTG9vcFJlcGVhdDsKLSAgICAgICAgdGhpcy5fbG9vcENvdW50ID0gLTE7Cisg
ICAgICAgIHRoaXMuX2xvb3BDb3VudCA9IC0gMTsKIAogICAgICAgICAvLyBnbG9iYWwgbWl4ZXIg
dGltZSB3aGVuIHRoZSBhY3Rpb24gaXMgdG8gYmUgc3RhcnRlZAogICAgICAgICAvLyBpdCdzIHNl
dCBiYWNrIHRvICdudWxsJyB1cG9uIHN0YXJ0IG9mIHRoZSBhY3Rpb24KQEAgLTM4Mjc2LDcgKzQx
NDQ2LDcgQEAKIAogICAgICAgICAvLyBTdGF0ZSAmIFNjaGVkdWxpbmcKIAotICAgICAgICBwbGF5
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcGxheTogZnVuY3Rpb24gKCkgewogCiAgICAgICAgICAg
ICB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24oIHRoaXMgKTsKIApAQCAtMzgyODQsNyArNDE0
NTQsNyBAQAogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc3RvcDogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHN0b3A6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgdGhpcy5fbWl4ZXIuX2RlYWN0
aXZhdGVBY3Rpb24oIHRoaXMgKTsKIApAQCAtMzgyOTIsMjAgKzQxNDYyLDIwIEBACiAKICAgICAg
ICAgfSwKIAotICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJlc2V0OiBmdW5j
dGlvbiAoKSB7CiAKICAgICAgICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7CiAgICAgICAgICAg
ICB0aGlzLmVuYWJsZWQgPSB0cnVlOwogCiAgICAgICAgICAgICB0aGlzLnRpbWUgPSAwOyAgICAg
ICAgICAvLyByZXN0YXJ0IGNsaXAKLSAgICAgICAgICAgIHRoaXMuX2xvb3BDb3VudCA9IC0xOyAg
IC8vIGZvcmdldCBwcmV2aW91cyBsb29wcworICAgICAgICAgICAgdGhpcy5fbG9vcENvdW50ID0g
LSAxOyAgLy8gZm9yZ2V0IHByZXZpb3VzIGxvb3BzCiAgICAgICAgICAgICB0aGlzLl9zdGFydFRp
bWUgPSBudWxsOyAvLyBmb3JnZXQgc2NoZWR1bGluZwogCiAgICAgICAgICAgICByZXR1cm4gdGhp
cy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGlz
UnVubmluZzogZnVuY3Rpb24oKSB7CisgICAgICAgIGlzUnVubmluZzogZnVuY3Rpb24gKCkgewog
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkICYmICEgdGhpcy5wYXVzZWQgJiYgdGhp
cy50aW1lU2NhbGUgIT09IDAgJiYKICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1l
ID09PSBudWxsICYmIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbiggdGhpcyApOwpAQCAtMzgz
MTMsMTMgKzQxNDgzLDEzIEBACiAgICAgICAgIH0sCiAKICAgICAgICAgLy8gcmV0dXJuIHRydWUg
d2hlbiBwbGF5IGhhcyBiZWVuIGNhbGxlZAotICAgICAgICBpc1NjaGVkdWxlZDogZnVuY3Rpb24o
KSB7CisgICAgICAgIGlzU2NoZWR1bGVkOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24oIHRoaXMgKTsKIAogICAgICAgICB9LAog
Ci0gICAgICAgIHN0YXJ0QXQ6IGZ1bmN0aW9uKCB0aW1lICkgeworICAgICAgICBzdGFydEF0OiBm
dW5jdGlvbiAoIHRpbWUgKSB7CiAKICAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWU7
CiAKQEAgLTM4MzI3LDcgKzQxNDk3LDcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgIHNldExv
b3A6IGZ1bmN0aW9uKCBtb2RlLCByZXBldGl0aW9ucyApIHsKKyAgICAgICAgc2V0TG9vcDogZnVu
Y3Rpb24gKCBtb2RlLCByZXBldGl0aW9ucyApIHsKIAogICAgICAgICAgICAgdGhpcy5sb29wID0g
bW9kZTsKICAgICAgICAgICAgIHRoaXMucmVwZXRpdGlvbnMgPSByZXBldGl0aW9uczsKQEAgLTM4
MzQxLDcgKzQxNTExLDcgQEAKICAgICAgICAgLy8gc2V0IHRoZSB3ZWlnaHQgc3RvcHBpbmcgYW55
IHNjaGVkdWxlZCBmYWRpbmcKICAgICAgICAgLy8gYWx0aG91Z2ggLmVuYWJsZWQgPSBmYWxzZSB5
aWVsZHMgYW4gZWZmZWN0aXZlIHdlaWdodCBvZiB6ZXJvLCB0aGlzCiAgICAgICAgIC8vIG1ldGhv
ZCBkb2VzICpub3QqIGNoYW5nZSAuZW5hYmxlZCwgYmVjYXVzZSBpdCB3b3VsZCBiZSBjb25mdXNp
bmcKLSAgICAgICAgc2V0RWZmZWN0aXZlV2VpZ2h0OiBmdW5jdGlvbiggd2VpZ2h0ICkgeworICAg
ICAgICBzZXRFZmZlY3RpdmVXZWlnaHQ6IGZ1bmN0aW9uICggd2VpZ2h0ICkgewogCiAgICAgICAg
ICAgICB0aGlzLndlaWdodCA9IHdlaWdodDsKIApAQCAtMzgzNTMsMzAgKzQxNTIzLDMwIEBACiAg
ICAgICAgIH0sCiAKICAgICAgICAgLy8gcmV0dXJuIHRoZSB3ZWlnaHQgY29uc2lkZXJpbmcgZmFk
aW5nIGFuZCAuZW5hYmxlZAotICAgICAgICBnZXRFZmZlY3RpdmVXZWlnaHQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICBnZXRFZmZlY3RpdmVXZWlnaHQ6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodDsKIAogICAgICAgICB9LAogCi0gICAgICAg
IGZhZGVJbjogZnVuY3Rpb24oIGR1cmF0aW9uICkgeworICAgICAgICBmYWRlSW46IGZ1bmN0aW9u
ICggZHVyYXRpb24gKSB7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2hlZHVsZUZhZGlu
ZyggZHVyYXRpb24sIDAsIDEgKTsKIAogICAgICAgICB9LAogCi0gICAgICAgIGZhZGVPdXQ6IGZ1
bmN0aW9uKCBkdXJhdGlvbiApIHsKKyAgICAgICAgZmFkZU91dDogZnVuY3Rpb24gKCBkdXJhdGlv
biApIHsKIAogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKCBkdXJhdGlv
biwgMSwgMCApOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgY3Jvc3NGYWRlRnJvbTogZnVuY3Rp
b24oIGZhZGVPdXRBY3Rpb24sIGR1cmF0aW9uLCB3YXJwICkgeworICAgICAgICBjcm9zc0ZhZGVG
cm9tOiBmdW5jdGlvbiAoIGZhZGVPdXRBY3Rpb24sIGR1cmF0aW9uLCB3YXJwICkgewogCiAgICAg
ICAgICAgICBmYWRlT3V0QWN0aW9uLmZhZGVPdXQoIGR1cmF0aW9uICk7CiAgICAgICAgICAgICB0
aGlzLmZhZGVJbiggZHVyYXRpb24gKTsKIAotICAgICAgICAgICAgaWYoIHdhcnAgKSB7CisgICAg
ICAgICAgICBpZiAoIHdhcnAgKSB7CiAKICAgICAgICAgICAgICAgICB2YXIgZmFkZUluRHVyYXRp
b24gPSB0aGlzLl9jbGlwLmR1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICBmYWRlT3V0RHVy
YXRpb24gPSBmYWRlT3V0QWN0aW9uLl9jbGlwLmR1cmF0aW9uLApAQCAtMzgzOTMsMTMgKzQxNTYz
LDEzIEBACiAKICAgICAgICAgfSwKIAotICAgICAgICBjcm9zc0ZhZGVUbzogZnVuY3Rpb24oIGZh
ZGVJbkFjdGlvbiwgZHVyYXRpb24sIHdhcnAgKSB7CisgICAgICAgIGNyb3NzRmFkZVRvOiBmdW5j
dGlvbiAoIGZhZGVJbkFjdGlvbiwgZHVyYXRpb24sIHdhcnAgKSB7CiAKICAgICAgICAgICAgIHJl
dHVybiBmYWRlSW5BY3Rpb24uY3Jvc3NGYWRlRnJvbSggdGhpcywgZHVyYXRpb24sIHdhcnAgKTsK
IAogICAgICAgICB9LAogCi0gICAgICAgIHN0b3BGYWRpbmc6IGZ1bmN0aW9uKCkgeworICAgICAg
ICBzdG9wRmFkaW5nOiBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAgICAgIHZhciB3ZWlnaHRJbnRl
cnBvbGFudCA9IHRoaXMuX3dlaWdodEludGVycG9sYW50OwogCkBAIC0zODQxOSwyMyArNDE1ODks
MjMgQEAKICAgICAgICAgLy8gc2V0IHRoZSB0aW1lIHNjYWxlIHN0b3BwaW5nIGFueSBzY2hlZHVs
ZWQgd2FycGluZwogICAgICAgICAvLyBhbHRob3VnaCAucGF1c2VkID0gdHJ1ZSB5aWVsZHMgYW4g
ZWZmZWN0aXZlIHRpbWUgc2NhbGUgb2YgemVybywgdGhpcwogICAgICAgICAvLyBtZXRob2QgZG9l
cyAqbm90KiBjaGFuZ2UgLnBhdXNlZCwgYmVjYXVzZSBpdCB3b3VsZCBiZSBjb25mdXNpbmcKLSAg
ICAgICAgc2V0RWZmZWN0aXZlVGltZVNjYWxlOiBmdW5jdGlvbiggdGltZVNjYWxlICkgeworICAg
ICAgICBzZXRFZmZlY3RpdmVUaW1lU2NhbGU6IGZ1bmN0aW9uICggdGltZVNjYWxlICkgewogCiAg
ICAgICAgICAgICB0aGlzLnRpbWVTY2FsZSA9IHRpbWVTY2FsZTsKLSAgICAgICAgICAgIHRoaXMu
X2VmZmVjdGl2ZVRpbWVTY2FsZSA9IHRoaXMucGF1c2VkID8gMCA6dGltZVNjYWxlOworICAgICAg
ICAgICAgdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlID0gdGhpcy5wYXVzZWQgPyAwIDogdGltZVNj
YWxlOwogCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9wV2FycGluZygpOwogCiAgICAgICAg
IH0sCiAKICAgICAgICAgLy8gcmV0dXJuIHRoZSB0aW1lIHNjYWxlIGNvbnNpZGVyaW5nIHdhcnBp
bmcgYW5kIC5wYXVzZWQKLSAgICAgICAgZ2V0RWZmZWN0aXZlVGltZVNjYWxlOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgZ2V0RWZmZWN0aXZlVGltZVNjYWxlOiBmdW5jdGlvbiAoKSB7CiAKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU7CiAKICAgICAgICAgfSwKIAot
ICAgICAgICBzZXREdXJhdGlvbjogZnVuY3Rpb24oIGR1cmF0aW9uICkgeworICAgICAgICBzZXRE
dXJhdGlvbjogZnVuY3Rpb24gKCBkdXJhdGlvbiApIHsKIAogICAgICAgICAgICAgdGhpcy50aW1l
U2NhbGUgPSB0aGlzLl9jbGlwLmR1cmF0aW9uIC8gZHVyYXRpb247CiAKQEAgLTM4NDQzLDcgKzQx
NjEzLDcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgIHN5bmNXaXRoOiBmdW5jdGlvbiggYWN0
aW9uICkgeworICAgICAgICBzeW5jV2l0aDogZnVuY3Rpb24gKCBhY3Rpb24gKSB7CiAKICAgICAg
ICAgICAgIHRoaXMudGltZSA9IGFjdGlvbi50aW1lOwogICAgICAgICAgICAgdGhpcy50aW1lU2Nh
bGUgPSBhY3Rpb24udGltZVNjYWxlOwpAQCAtMzg0NTIsMTMgKzQxNjIyLDEzIEBACiAKICAgICAg
ICAgfSwKIAotICAgICAgICBoYWx0OiBmdW5jdGlvbiggZHVyYXRpb24gKSB7CisgICAgICAgIGhh
bHQ6IGZ1bmN0aW9uICggZHVyYXRpb24gKSB7CiAKICAgICAgICAgICAgIHJldHVybiB0aGlzLndh
cnAoIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwgMCwgZHVyYXRpb24gKTsKIAogICAgICAgICB9
LAogCi0gICAgICAgIHdhcnA6IGZ1bmN0aW9uKCBzdGFydFRpbWVTY2FsZSwgZW5kVGltZVNjYWxl
LCBkdXJhdGlvbiApIHsKKyAgICAgICAgd2FycDogZnVuY3Rpb24gKCBzdGFydFRpbWVTY2FsZSwg
ZW5kVGltZVNjYWxlLCBkdXJhdGlvbiApIHsKIAogICAgICAgICAgICAgdmFyIG1peGVyID0gdGhp
cy5fbWl4ZXIsIG5vdyA9IG1peGVyLnRpbWUsCiAgICAgICAgICAgICAgICAgaW50ZXJwb2xhbnQg
PSB0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudCwKQEAgLTM4NDg1LDcgKzQxNjU1LDcgQEAKIAog
ICAgICAgICB9LAogCi0gICAgICAgIHN0b3BXYXJwaW5nOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
c3RvcFdhcnBpbmc6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgdmFyIHRpbWVTY2FsZUlu
dGVycG9sYW50ID0gdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7CiAKQEAgLTM4NTAyLDE5ICs0
MTY3MiwxOSBAQAogCiAgICAgICAgIC8vIE9iamVjdCBBY2Nlc3NvcnMKIAotICAgICAgICBnZXRN
aXhlcjogZnVuY3Rpb24oKSB7CisgICAgICAgIGdldE1peGVyOiBmdW5jdGlvbiAoKSB7CiAKICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9taXhlcjsKIAogICAgICAgICB9LAogCi0gICAgICAgIGdl
dENsaXA6IGZ1bmN0aW9uKCkgeworICAgICAgICBnZXRDbGlwOiBmdW5jdGlvbiAoKSB7CiAKICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jbGlwOwogCiAgICAgICAgIH0sCiAKLSAgICAgICAgZ2V0
Um9vdDogZnVuY3Rpb24oKSB7CisgICAgICAgIGdldFJvb3Q6IGZ1bmN0aW9uICgpIHsKIAogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsUm9vdCB8fCB0aGlzLl9taXhlci5fcm9vdDsKIApA
QCAtMzg1MjIsNyArNDE2OTIsNyBAQAogCiAgICAgICAgIC8vIEludGVybmEKIAotICAgICAgICBf
dXBkYXRlOiBmdW5jdGlvbiggdGltZSwgZGVsdGFUaW1lLCB0aW1lRGlyZWN0aW9uLCBhY2N1SW5k
ZXggKSB7CisgICAgICAgIF91cGRhdGU6IGZ1bmN0aW9uICggdGltZSwgZGVsdGFUaW1lLCB0aW1l
RGlyZWN0aW9uLCBhY2N1SW5kZXggKSB7CiAKICAgICAgICAgICAgIC8vIGNhbGxlZCBieSB0aGUg
bWl4ZXIKIApAQCAtMzg1ODEsNyArNDE3NTEsNyBAQAogCiAgICAgICAgIH0sCiAKLSAgICAgICAg
X3VwZGF0ZVdlaWdodDogZnVuY3Rpb24oIHRpbWUgKSB7CisgICAgICAgIF91cGRhdGVXZWlnaHQ6
IGZ1bmN0aW9uICggdGltZSApIHsKIAogICAgICAgICAgICAgdmFyIHdlaWdodCA9IDA7CiAKQEAg
LTM4NjE4LDcgKzQxNzg4LDcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgIF91cGRhdGVUaW1l
U2NhbGU6IGZ1bmN0aW9uKCB0aW1lICkgeworICAgICAgICBfdXBkYXRlVGltZVNjYWxlOiBmdW5j
dGlvbiAoIHRpbWUgKSB7CiAKICAgICAgICAgICAgIHZhciB0aW1lU2NhbGUgPSAwOwogCkBAIC0z
ODY2MSw3ICs0MTgzMSw3IEBACiAKICAgICAgICAgfSwKIAotICAgICAgICBfdXBkYXRlVGltZTog
ZnVuY3Rpb24oIGRlbHRhVGltZSApIHsKKyAgICAgICAgX3VwZGF0ZVRpbWU6IGZ1bmN0aW9uICgg
ZGVsdGFUaW1lICkgewogCiAgICAgICAgICAgICB2YXIgdGltZSA9IHRoaXMudGltZSArIGRlbHRh
VGltZTsKIApAQCAtMzg2NzQsNyArNDE4NDQsOCBAQAogCiAgICAgICAgICAgICBpZiAoIGxvb3Ag
PT09IExvb3BPbmNlICkgewogCi0gICAgICAgICAgICAgICAgaWYgKCBsb29wQ291bnQgPT09IC0x
ICkgeworICAgICAgICAgICAgICAgIGlmICggbG9vcENvdW50ID09PSAtIDEgKSB7CisKICAgICAg
ICAgICAgICAgICAgICAgLy8ganVzdCBzdGFydGVkCiAKICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fbG9vcENvdW50ID0gMDsKQEAgLTM4Njk5LDcgKzQxODcwLDcgQEAKIAogICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiAnZmluaXNoZWQnLCBhY3Rpb246IHRoaXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rpb246IGRlbHRhVGltZSA8IDAgPyAtMSA6IDEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdGlvbjogZGVsdGFUaW1lIDwgMCA/IC0gMSA6IDEKICAgICAgICAgICAgICAg
ICAgICAgfSApOwogCiAgICAgICAgICAgICAgICAgfQpAQCAtMzg3MDgsMTUgKzQxODc5LDE1IEBA
CiAKICAgICAgICAgICAgICAgICB2YXIgcGluZ1BvbmcgPSAoIGxvb3AgPT09IExvb3BQaW5nUG9u
ZyApOwogCi0gICAgICAgICAgICAgICAgaWYgKCBsb29wQ291bnQgPT09IC0xICkgeworICAgICAg
ICAgICAgICAgIGlmICggbG9vcENvdW50ID09PSAtIDEgKSB7CisKICAgICAgICAgICAgICAgICAg
ICAgLy8ganVzdCBzdGFydGVkCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWx0YVRpbWUg
Pj0gMCApIHsKIAogICAgICAgICAgICAgICAgICAgICAgICAgbG9vcENvdW50ID0gMDsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RW5kaW5ncygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSwgdGhpcy5yZXBldGl0aW9ucyA9PT0gMCwgcGluZ1BvbmcgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEVuZGluZ3MoIHRydWUsIHRoaXMucmVw
ZXRpdGlvbnMgPT09IDAsIHBpbmdQb25nICk7CiAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKIApAQCAtMzg3MjQsMTQgKzQxODk1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0cmFuc2l0aW9uIHRocm91Z2ggemVybyBjb3VudHMgYXMgYSByZXBldGl0aW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc28gbGVhdmUgbG9vcENvdW50IGF0IC0xCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3NldEVuZGluZ3MoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucmVwZXRpdGlvbnMgPT09IDAsIHRydWUsIHBpbmdQb25nICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRFbmRpbmdzKCB0aGlzLnJlcGV0aXRpb25zID09
PSAwLCB0cnVlLCBwaW5nUG9uZyApOwogCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICggdGltZSA+PSBkdXJhdGlvbiB8fCB0
aW1lIDwgMCApIHsKKwogICAgICAgICAgICAgICAgICAgICAvLyB3cmFwIGFyb3VuZAogCiAgICAg
ICAgICAgICAgICAgICAgIHZhciBsb29wRGVsdGEgPSBNYXRoLmZsb29yKCB0aW1lIC8gZHVyYXRp
b24gKTsgLy8gc2lnbmVkCkBAIC0zODc0MSw3ICs0MTkxMiw4IEBACiAKICAgICAgICAgICAgICAg
ICAgICAgdmFyIHBlbmRpbmcgPSB0aGlzLnJlcGV0aXRpb25zIC0gbG9vcENvdW50OwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICggcGVuZGluZyA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICggcGVuZGluZyA8PSAwICkgeworCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZl
IHRvIHN0b3AgKHN3aXRjaCBzdGF0ZSwgY2xhbXAgdGltZSwgZmlyZSBldmVudCkKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNsYW1wV2hlbkZpbmlzaGVkICkgdGhpcy5wYXVz
ZWQgPSB0cnVlOwpAQCAtMzg3NTEsMTMgKzQxOTIzLDE1IEBACiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiAnZmluaXNoZWQnLCBhY3Rpb246IHRoaXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0aW9uOiBkZWx0YVRpbWUgPiAwID8gMSA6IC0xCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBkZWx0YVRpbWUgPiAwID8gMSA6IC0gMQogICAg
ICAgICAgICAgICAgICAgICAgICAgfSApOwogCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgcnVubmluZwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBlbmRpbmcgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHBlbmRpbmcgPT09IDEgKSB7CisKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBlbnRlcmluZyB0aGUgbGFzdCByb3VuZAogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGF0U3RhcnQgPSBkZWx0YVRpbWUgPCAwOwpAQCAtMzg3ODAsNiArNDE5NTQsNyBAQAog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICggcGluZ1BvbmcgJiYgKCBs
b29wQ291bnQgJiAxICkgPT09IDEgKSB7CisKICAgICAgICAgICAgICAgICAgICAgLy8gaW52ZXJ0
IHRpbWUgZm9yIHRoZSAicG9uZyByb3VuZCIKIAogICAgICAgICAgICAgICAgICAgICB0aGlzLnRp
bWUgPSB0aW1lOwpAQCAtMzg3OTQsNyArNDE5NjksNyBAQAogCiAgICAgICAgIH0sCiAKLSAgICAg
ICAgX3NldEVuZGluZ3M6IGZ1bmN0aW9uKCBhdFN0YXJ0LCBhdEVuZCwgcGluZ1BvbmcgKSB7Cisg
ICAgICAgIF9zZXRFbmRpbmdzOiBmdW5jdGlvbiAoIGF0U3RhcnQsIGF0RW5kLCBwaW5nUG9uZyAp
IHsKIAogICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5faW50ZXJwb2xhbnRTZXR0aW5n
czsKIApAQCAtMzg4MDksOCArNDE5ODQsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKCBhdFN0
YXJ0ICkgewogCi0gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmVuZGluZ1N0YXJ0ID0gdGhp
cy56ZXJvU2xvcGVBdFN0YXJ0ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBaZXJvU2xv
cGVFbmRpbmcgOiBaZXJvQ3VydmF0dXJlRW5kaW5nOworICAgICAgICAgICAgICAgICAgICBzZXR0
aW5ncy5lbmRpbmdTdGFydCA9IHRoaXMuemVyb1Nsb3BlQXRTdGFydCA/IFplcm9TbG9wZUVuZGlu
ZyA6IFplcm9DdXJ2YXR1cmVFbmRpbmc7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCkBA
IC0zODgyMCw4ICs0MTk5NCw3IEBACiAKICAgICAgICAgICAgICAgICBpZiAoIGF0RW5kICkgewog
Ci0gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmVuZGluZ0VuZCA9IHRoaXMuemVyb1Nsb3Bl
QXRFbmQgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplcm9TbG9wZUVuZGluZyA6IFpl
cm9DdXJ2YXR1cmVFbmRpbmc7CisgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmVuZGluZ0Vu
ZCA9IHRoaXMuemVyb1Nsb3BlQXRFbmQgPyBaZXJvU2xvcGVFbmRpbmcgOiBaZXJvQ3VydmF0dXJl
RW5kaW5nOwogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIApAQCAtMzg4MzMsNyArNDIwMDYs
NyBAQAogCiAgICAgICAgIH0sCiAKLSAgICAgICAgX3NjaGVkdWxlRmFkaW5nOiBmdW5jdGlvbigg
ZHVyYXRpb24sIHdlaWdodE5vdywgd2VpZ2h0VGhlbiApIHsKKyAgICAgICAgX3NjaGVkdWxlRmFk
aW5nOiBmdW5jdGlvbiAoIGR1cmF0aW9uLCB3ZWlnaHROb3csIHdlaWdodFRoZW4gKSB7CiAKICAg
ICAgICAgICAgIHZhciBtaXhlciA9IHRoaXMuX21peGVyLCBub3cgPSBtaXhlci50aW1lLAogICAg
ICAgICAgICAgICAgIGludGVycG9sYW50ID0gdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7CkBAIC0z
ODg3OSw3ICs0MjA1Miw5IEBACiAKICAgICB9CiAKLSAgICBPYmplY3QuYXNzaWduKCBBbmltYXRp
b25NaXhlci5wcm90b3R5cGUsIEV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUsIHsKKyAgICBBbmlt
YXRpb25NaXhlci5wcm90b3R5cGUgPSBPYmplY3QuYXNzaWduKCBPYmplY3QuY3JlYXRlKCBFdmVu
dERpc3BhdGNoZXIucHJvdG90eXBlICksIHsKKworICAgICAgICBjb25zdHJ1Y3RvcjogQW5pbWF0
aW9uTWl4ZXIsCiAKICAgICAgICAgX2JpbmRBY3Rpb246IGZ1bmN0aW9uICggYWN0aW9uLCBwcm90
b3R5cGVBY3Rpb24gKSB7CiAKQEAgLTM4OTI5LDcgKzQyMTA0LDcgQEAKICAgICAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gcHJvdG90eXBlQWN0aW9u
ICYmIHByb3RvdHlwZUFjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcHJvcGVy
dHlCaW5kaW5nc1sgaSBdLmJpbmRpbmcucGFyc2VkUGF0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9wcm9wZXJ0eUJpbmRpbmdzWyBpIF0uYmluZGluZy5wYXJzZWRQYXRoOwogCiAgICAgICAg
ICAgICAgICAgICAgIGJpbmRpbmcgPSBuZXcgUHJvcGVydHlNaXhlcigKICAgICAgICAgICAgICAg
ICAgICAgICAgIFByb3BlcnR5QmluZGluZy5jcmVhdGUoIHJvb3QsIHRyYWNrTmFtZSwgcGF0aCAp
LApAQCAtMzkwNDUsMTYgKzQyMjIwLDQwIEBACiAgICAgICAgICAgICB0aGlzLnN0YXRzID0gewog
CiAgICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICBnZXQgdG90
YWwoKSB7IHJldHVybiBzY29wZS5fYWN0aW9ucy5sZW5ndGg7IH0sCi0gICAgICAgICAgICAgICAg
ICAgIGdldCBpblVzZSgpIHsgcmV0dXJuIHNjb3BlLl9uQWN0aXZlQWN0aW9uczsgfQorICAgICAg
ICAgICAgICAgICAgICBnZXQgdG90YWwoKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzY29wZS5fYWN0aW9ucy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgZ2V0IGluVXNlKCkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2NvcGUuX25BY3RpdmVBY3Rpb25zOworCisgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIGJpbmRpbmdzOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdldCB0b3RhbCgpIHsgcmV0dXJuIHNjb3BlLl9iaW5kaW5ncy5sZW5ndGg7
IH0sCi0gICAgICAgICAgICAgICAgICAgIGdldCBpblVzZSgpIHsgcmV0dXJuIHNjb3BlLl9uQWN0
aXZlQmluZGluZ3M7IH0KKyAgICAgICAgICAgICAgICAgICAgZ2V0IHRvdGFsKCkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuX2JpbmRpbmdzLmxlbmd0aDsKKworICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBnZXQgaW5Vc2UoKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5fbkFjdGl2ZUJpbmRpbmdzOwor
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgIGNvbnRyb2xJbnRlcnBvbGFudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0IHRvdGFs
KCkgeyByZXR1cm4gc2NvcGUuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RoOyB9LAotICAgICAg
ICAgICAgICAgICAgICBnZXQgaW5Vc2UoKSB7IHJldHVybiBzY29wZS5fbkFjdGl2ZUNvbnRyb2xJ
bnRlcnBvbGFudHM7IH0KKyAgICAgICAgICAgICAgICAgICAgZ2V0IHRvdGFsKCkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVu
Z3RoOworCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGdldCBp
blVzZSgpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLl9uQWN0aXZl
Q29udHJvbEludGVycG9sYW50czsKKworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB9OwpAQCAtMzkyNTYsNyArNDI0NTUsNyBAQAogCiAgICAg
ICAgICAgICByZW1vdmVfZW1wdHlfbWFwOiB7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIg
XyBpbiBiaW5kaW5nQnlOYW1lICkgYnJlYWsgcmVtb3ZlX2VtcHR5X21hcDsKKyAgICAgICAgICAg
ICAgICBmb3IgKCB2YXIgXyBpbiBiaW5kaW5nQnlOYW1lICkgYnJlYWsgcmVtb3ZlX2VtcHR5X21h
cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwogCiAgICAgICAgICAgICAg
ICAgZGVsZXRlIGJpbmRpbmdzQnlSb290WyByb290VXVpZCBdOwogCkBAIC0zOTYyNSw0NyArNDI4
MjQsMTkgQEAKIAogICAgICAgICBpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiB0cnVlLAogCi0g
ICAgICAgIGFkZEdyb3VwOiBmdW5jdGlvbiAoIHN0YXJ0LCBjb3VudCwgbWF0ZXJpYWxJbmRleCAp
IHsKLQotICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaCggewotCi0gICAgICAgICAgICAgICAg
c3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudCwKLSAgICAgICAgICAg
ICAgICBtYXRlcmlhbEluZGV4OiBtYXRlcmlhbEluZGV4Ci0KLSAgICAgICAgICAgIH0gKTsKLQot
ICAgICAgICB9LAotCiAgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggc291cmNlICkgewogCi0gICAg
ICAgICAgICB2YXIgaW5kZXggPSBzb3VyY2UuaW5kZXg7CisgICAgICAgICAgICBCdWZmZXJHZW9t
ZXRyeS5wcm90b3R5cGUuY29weS5jYWxsKCB0aGlzLCBzb3VyY2UgKTsKIAotICAgICAgICAgICAg
aWYgKCBpbmRleCAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRoaXMubWF4SW5zdGFuY2VkQ291
bnQgPSBzb3VyY2UubWF4SW5zdGFuY2VkQ291bnQ7CiAKLSAgICAgICAgICAgICAgICB0aGlzLnNl
dEluZGV4KCBpbmRleC5jbG9uZSgpICk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dmFyIGF0dHJpYnV0ZXMgPSBzb3VyY2UuYXR0cmlidXRlczsKLQotICAgICAgICAgICAgZm9yICgg
dmFyIG5hbWUgaW4gYXR0cmlidXRlcyApIHsKLQotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1
dGUgPSBhdHRyaWJ1dGVzWyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRBdHRyaWJ1
dGUoIG5hbWUsIGF0dHJpYnV0ZS5jbG9uZSgpICk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmFyIGdyb3VwcyA9IHNvdXJjZS5ncm91cHM7Ci0KLSAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMCwgbCA9IGdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBpICsrICkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKLSAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSBncm91cHNbIGkgXTsK
LSAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwKCBncm91cC5zdGFydCwgZ3JvdXAuY291bnQs
IGdyb3VwLm1hdGVyaWFsSW5kZXggKTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgfQorICAg
ICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAog
ICAgICAgICB9CiAKQEAgLTM5Njc3LDggKzQyODQ4LDYgQEAKIAogICAgIGZ1bmN0aW9uIEludGVy
bGVhdmVkQnVmZmVyQXR0cmlidXRlKCBpbnRlcmxlYXZlZEJ1ZmZlciwgaXRlbVNpemUsIG9mZnNl
dCwgbm9ybWFsaXplZCApIHsKIAotICAgICAgICB0aGlzLnV1aWQgPSBfTWF0aC5nZW5lcmF0ZVVV
SUQoKTsKLQogICAgICAgICB0aGlzLmRhdGEgPSBpbnRlcmxlYXZlZEJ1ZmZlcjsKICAgICAgICAg
dGhpcy5pdGVtU2l6ZSA9IGl0ZW1TaXplOwogICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsK
QEAgLTM5ODE1LDggKzQyOTg0LDYgQEAKIAogICAgIGZ1bmN0aW9uIEludGVybGVhdmVkQnVmZmVy
KCBhcnJheSwgc3RyaWRlICkgewogCi0gICAgICAgIHRoaXMudXVpZCA9IF9NYXRoLmdlbmVyYXRl
VVVJRCgpOwotCiAgICAgICAgIHRoaXMuYXJyYXkgPSBhcnJheTsKICAgICAgICAgdGhpcy5zdHJp
ZGUgPSBzdHJpZGU7CiAgICAgICAgIHRoaXMuY291bnQgPSBhcnJheSAhPT0gdW5kZWZpbmVkID8g
YXJyYXkubGVuZ3RoIC8gc3RyaWRlIDogMDsKQEAgLTM5ODI0LDggKzQyOTkxLDYgQEAKICAgICAg
ICAgdGhpcy5keW5hbWljID0gZmFsc2U7CiAgICAgICAgIHRoaXMudXBkYXRlUmFuZ2UgPSB7IG9m
ZnNldDogMCwgY291bnQ6IC0gMSB9OwogCi0gICAgICAgIHRoaXMub25VcGxvYWRDYWxsYmFjayA9
IGZ1bmN0aW9uICgpIHt9OwotCiAgICAgICAgIHRoaXMudmVyc2lvbiA9IDA7CiAKICAgICB9CkBA
IC0zOTg0NCw2ICs0MzAwOSw4IEBACiAKICAgICAgICAgaXNJbnRlcmxlYXZlZEJ1ZmZlcjogdHJ1
ZSwKIAorICAgICAgICBvblVwbG9hZENhbGxiYWNrOiBmdW5jdGlvbiAoKSB7fSwKKwogICAgICAg
ICBzZXRBcnJheTogZnVuY3Rpb24gKCBhcnJheSApIHsKIAogICAgICAgICAgICAgaWYgKCBBcnJh
eS5pc0FycmF5KCBhcnJheSApICkgewpAQCAtMzk4NTUsNiArNDMwMjIsOCBAQAogICAgICAgICAg
ICAgdGhpcy5jb3VudCA9IGFycmF5ICE9PSB1bmRlZmluZWQgPyBhcnJheS5sZW5ndGggLyB0aGlz
LnN0cmlkZSA6IDA7CiAgICAgICAgICAgICB0aGlzLmFycmF5ID0gYXJyYXk7CiAKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOworCiAgICAgICAgIH0sCiAKICAgICAgICAgc2V0RHluYW1pYzogZnVu
Y3Rpb24gKCB2YWx1ZSApIHsKQEAgLTQwMDAyLDggKzQzMTcxLDEwIEBACiAgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0aWVzKCB0aGlzLnBhcmFtcywgewogICAgICAgICAgICAgUG9pbnRDbG91
ZDogewogICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlJheWNhc3RlcjogcGFyYW1zLlBvaW50Q2xvdWQg
aGFzIGJlZW4gcmVuYW1lZCB0byBwYXJhbXMuUG9pbnRzLicgKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuUG9pbnRzOworCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9ICk7CkBAIC00MDA2OCw5ICs0MzIzOSw5IEBACiAKICAgICAgICAgfSwKIAot
ICAgICAgICBpbnRlcnNlY3RPYmplY3Q6IGZ1bmN0aW9uICggb2JqZWN0LCByZWN1cnNpdmUgKSB7
CisgICAgICAgIGludGVyc2VjdE9iamVjdDogZnVuY3Rpb24gKCBvYmplY3QsIHJlY3Vyc2l2ZSwg
b3B0aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgICAgIHZhciBpbnRlcnNlY3RzID0gW107Cisg
ICAgICAgICAgICB2YXIgaW50ZXJzZWN0cyA9IG9wdGlvbmFsVGFyZ2V0IHx8IFtdOwogCiAgICAg
ICAgICAgICBpbnRlcnNlY3RPYmplY3QoIG9iamVjdCwgdGhpcywgaW50ZXJzZWN0cywgcmVjdXJz
aXZlICk7CiAKQEAgLTQwMDgwLDkgKzQzMjUxLDkgQEAKIAogICAgICAgICB9LAogCi0gICAgICAg
IGludGVyc2VjdE9iamVjdHM6IGZ1bmN0aW9uICggb2JqZWN0cywgcmVjdXJzaXZlICkgeworICAg
ICAgICBpbnRlcnNlY3RPYmplY3RzOiBmdW5jdGlvbiAoIG9iamVjdHMsIHJlY3Vyc2l2ZSwgb3B0
aW9uYWxUYXJnZXQgKSB7CiAKLSAgICAgICAgICAgIHZhciBpbnRlcnNlY3RzID0gW107CisgICAg
ICAgICAgICB2YXIgaW50ZXJzZWN0cyA9IG9wdGlvbmFsVGFyZ2V0IHx8IFtdOwogCiAgICAgICAg
ICAgICBpZiAoIEFycmF5LmlzQXJyYXkoIG9iamVjdHMgKSA9PT0gZmFsc2UgKSB7CiAKQEAgLTQw
MjI1LDcgKzQzMzk2LDcgQEAKICAgICAgICAgfSwKIAogICAgICAgICAvLyByZXN0cmljdCBwaGkg
dG8gYmUgYmV0d2VlIEVQUyBhbmQgUEktRVBTCi0gICAgICAgIG1ha2VTYWZlOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgbWFrZVNhZmU6IGZ1bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgdmFyIEVQ
UyA9IDAuMDAwMDAxOwogICAgICAgICAgICAgdGhpcy5waGkgPSBNYXRoLm1heCggRVBTLCBNYXRo
Lm1pbiggTWF0aC5QSSAtIEVQUywgdGhpcy5waGkgKSApOwpAQCAtNDAyMzQsNyArNDM0MDUsNyBA
QAogCiAgICAgICAgIH0sCiAKLSAgICAgICAgc2V0RnJvbVZlY3RvcjM6IGZ1bmN0aW9uKCB2ZWMz
ICkgeworICAgICAgICBzZXRGcm9tVmVjdG9yMzogZnVuY3Rpb24gKCB2ZWMzICkgewogCiAgICAg
ICAgICAgICB0aGlzLnJhZGl1cyA9IHZlYzMubGVuZ3RoKCk7CiAKQEAgLTQwMzAxLDcgKzQzNDcy
LDcgQEAKIAogICAgICAgICB9LAogCi0gICAgICAgIHNldEZyb21WZWN0b3IzOiBmdW5jdGlvbigg
dmVjMyApIHsKKyAgICAgICAgc2V0RnJvbVZlY3RvcjM6IGZ1bmN0aW9uICggdmVjMyApIHsKIAog
ICAgICAgICAgICAgdGhpcy5yYWRpdXMgPSBNYXRoLnNxcnQoIHZlYzMueCAqIHZlYzMueCArIHZl
YzMueiAqIHZlYzMueiApOwogICAgICAgICAgICAgdGhpcy50aGV0YSA9IE1hdGguYXRhbjIoIHZl
YzMueCwgdmVjMy56ICk7CkBAIC00MDMxNCwzMjAgKzQzNDg1LDI0NCBAQAogICAgIH0gKTsKIAog
ICAgIC8qKgotICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5j
b20vCisgICAgICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9jbGFyYS5pbwogICAgICAqLwog
Ci0gICAgZnVuY3Rpb24gTW9ycGhCbGVuZE1lc2goIGdlb21ldHJ5LCBtYXRlcmlhbCApIHsKLQot
ICAgICAgICBNZXNoLmNhbGwoIHRoaXMsIGdlb21ldHJ5LCBtYXRlcmlhbCApOwotCi0gICAgICAg
IHRoaXMuYW5pbWF0aW9uc01hcCA9IHt9OwotICAgICAgICB0aGlzLmFuaW1hdGlvbnNMaXN0ID0g
W107Ci0KLSAgICAgICAgLy8gcHJlcGFyZSBkZWZhdWx0IGFuaW1hdGlvbgotICAgICAgICAvLyAo
YWxsIGZyYW1lcyBwbGF5ZWQgdG9nZXRoZXIgaW4gMSBzZWNvbmQpCi0KLSAgICAgICAgdmFyIG51
bUZyYW1lcyA9IHRoaXMuZ2VvbWV0cnkubW9ycGhUYXJnZXRzLmxlbmd0aDsKLQotICAgICAgICB2
YXIgbmFtZSA9ICJfX2RlZmF1bHQiOwotCi0gICAgICAgIHZhciBzdGFydEZyYW1lID0gMDsKLSAg
ICAgICAgdmFyIGVuZEZyYW1lID0gbnVtRnJhbWVzIC0gMTsKLQotICAgICAgICB2YXIgZnBzID0g
bnVtRnJhbWVzIC8gMTsKKyAgICBmdW5jdGlvbiBCb3gyKCBtaW4sIG1heCApIHsKIAotICAgICAg
ICB0aGlzLmNyZWF0ZUFuaW1hdGlvbiggbmFtZSwgc3RhcnRGcmFtZSwgZW5kRnJhbWUsIGZwcyAp
OwotICAgICAgICB0aGlzLnNldEFuaW1hdGlvbldlaWdodCggbmFtZSwgMSApOworICAgICAgICB0
aGlzLm1pbiA9ICggbWluICE9PSB1bmRlZmluZWQgKSA/IG1pbiA6IG5ldyBWZWN0b3IyKCArIElu
ZmluaXR5LCArIEluZmluaXR5ICk7CisgICAgICAgIHRoaXMubWF4ID0gKCBtYXggIT09IHVuZGVm
aW5lZCApID8gbWF4IDogbmV3IFZlY3RvcjIoIC0gSW5maW5pdHksIC0gSW5maW5pdHkgKTsKIAog
ICAgIH0KIAotICAgIE1vcnBoQmxlbmRNZXNoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIE1l
c2gucHJvdG90eXBlICk7Ci0gICAgTW9ycGhCbGVuZE1lc2gucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gTW9ycGhCbGVuZE1lc2g7Ci0KLSAgICBNb3JwaEJsZW5kTWVzaC5wcm90b3R5cGUuY3JlYXRl
QW5pbWF0aW9uID0gZnVuY3Rpb24gKCBuYW1lLCBzdGFydCwgZW5kLCBmcHMgKSB7Ci0KLSAgICAg
ICAgdmFyIGFuaW1hdGlvbiA9IHsKLQotICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAg
ICAgICAgZW5kOiBlbmQsCi0KLSAgICAgICAgICAgIGxlbmd0aDogZW5kIC0gc3RhcnQgKyAxLAot
Ci0gICAgICAgICAgICBmcHM6IGZwcywKLSAgICAgICAgICAgIGR1cmF0aW9uOiAoIGVuZCAtIHN0
YXJ0ICkgLyBmcHMsCi0KLSAgICAgICAgICAgIGxhc3RGcmFtZTogMCwKLSAgICAgICAgICAgIGN1
cnJlbnRGcmFtZTogMCwKLQotICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSwKLQotICAgICAgICAg
ICAgdGltZTogMCwKLSAgICAgICAgICAgIGRpcmVjdGlvbjogMSwKLSAgICAgICAgICAgIHdlaWdo
dDogMSwKLQotICAgICAgICAgICAgZGlyZWN0aW9uQmFja3dhcmRzOiBmYWxzZSwKLSAgICAgICAg
ICAgIG1pcnJvcmVkTG9vcDogZmFsc2UKLQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuYW5p
bWF0aW9uc01hcFsgbmFtZSBdID0gYW5pbWF0aW9uOwotICAgICAgICB0aGlzLmFuaW1hdGlvbnNM
aXN0LnB1c2goIGFuaW1hdGlvbiApOwotCi0gICAgfTsKLQotICAgIE1vcnBoQmxlbmRNZXNoLnBy
b3RvdHlwZS5hdXRvQ3JlYXRlQW5pbWF0aW9ucyA9IGZ1bmN0aW9uICggZnBzICkgewotCi0gICAg
ICAgIHZhciBwYXR0ZXJuID0gLyhbYS16XSspXz8oXGQrKS9pOwotCi0gICAgICAgIHZhciBmaXJz
dEFuaW1hdGlvbiwgZnJhbWVSYW5nZXMgPSB7fTsKLQotICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0
aGlzLmdlb21ldHJ5OworICAgIE9iamVjdC5hc3NpZ24oIEJveDIucHJvdG90eXBlLCB7CiAKLSAg
ICAgICAgZm9yICggdmFyIGkgPSAwLCBpbCA9IGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy5sZW5ndGg7
IGkgPCBpbDsgaSArKyApIHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkgewog
Ci0gICAgICAgICAgICB2YXIgbW9ycGggPSBnZW9tZXRyeS5tb3JwaFRhcmdldHNbIGkgXTsKLSAg
ICAgICAgICAgIHZhciBjaHVua3MgPSBtb3JwaC5uYW1lLm1hdGNoKCBwYXR0ZXJuICk7CisgICAg
ICAgICAgICB0aGlzLm1pbi5jb3B5KCBtaW4gKTsKKyAgICAgICAgICAgIHRoaXMubWF4LmNvcHko
IG1heCApOwogCi0gICAgICAgICAgICBpZiAoIGNodW5rcyAmJiBjaHVua3MubGVuZ3RoID4gMSAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBjaHVua3NbIDEgXTsKKyAgICAgICAgfSwKIAotICAgICAgICAgICAgICAgIGlmICggISBmcmFt
ZVJhbmdlc1sgbmFtZSBdICkgZnJhbWVSYW5nZXNbIG5hbWUgXSA9IHsgc3RhcnQ6IEluZmluaXR5
LCBlbmQ6IC0gSW5maW5pdHkgfTsKKyAgICAgICAgc2V0RnJvbVBvaW50czogZnVuY3Rpb24gKCBw
b2ludHMgKSB7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBmcmFtZVJhbmdlc1sgbmFt
ZSBdOworICAgICAgICAgICAgdGhpcy5tYWtlRW1wdHkoKTsKIAotICAgICAgICAgICAgICAgIGlm
ICggaSA8IHJhbmdlLnN0YXJ0ICkgcmFuZ2Uuc3RhcnQgPSBpOwotICAgICAgICAgICAgICAgIGlm
ICggaSA+IHJhbmdlLmVuZCApIHJhbmdlLmVuZCA9IGk7CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkgewogCi0gICAgICAgICAg
ICAgICAgaWYgKCAhIGZpcnN0QW5pbWF0aW9uICkgZmlyc3RBbmltYXRpb24gPSBuYW1lOworICAg
ICAgICAgICAgICAgIHRoaXMuZXhwYW5kQnlQb2ludCggcG9pbnRzWyBpIF0gKTsKIAogICAgICAg
ICAgICAgfQogCi0gICAgICAgIH0KLQotICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBmcmFtZVJh
bmdlcyApIHsKLQotICAgICAgICAgICAgdmFyIHJhbmdlID0gZnJhbWVSYW5nZXNbIG5hbWUgXTsK
LSAgICAgICAgICAgIHRoaXMuY3JlYXRlQW5pbWF0aW9uKCBuYW1lLCByYW5nZS5zdGFydCwgcmFu
Z2UuZW5kLCBmcHMgKTsKLQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5maXJzdEFuaW1hdGlv
biA9IGZpcnN0QW5pbWF0aW9uOwotCi0gICAgfTsKLQotICAgIE1vcnBoQmxlbmRNZXNoLnByb3Rv
dHlwZS5zZXRBbmltYXRpb25EaXJlY3Rpb25Gb3J3YXJkID0gZnVuY3Rpb24gKCBuYW1lICkgewot
Ci0gICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbnNNYXBbIG5hbWUgXTsKLQot
ICAgICAgICBpZiAoIGFuaW1hdGlvbiApIHsKLQotICAgICAgICAgICAgYW5pbWF0aW9uLmRpcmVj
dGlvbiA9IDE7Ci0gICAgICAgICAgICBhbmltYXRpb24uZGlyZWN0aW9uQmFja3dhcmRzID0gZmFs
c2U7Ci0KLSAgICAgICAgfQotCi0gICAgfTsKLQotICAgIE1vcnBoQmxlbmRNZXNoLnByb3RvdHlw
ZS5zZXRBbmltYXRpb25EaXJlY3Rpb25CYWNrd2FyZCA9IGZ1bmN0aW9uICggbmFtZSApIHsKLQot
ICAgICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb25zTWFwWyBuYW1lIF07Ci0KLSAg
ICAgICAgaWYgKCBhbmltYXRpb24gKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAg
ICAgICAgICAgYW5pbWF0aW9uLmRpcmVjdGlvbiA9IC0gMTsKLSAgICAgICAgICAgIGFuaW1hdGlv
bi5kaXJlY3Rpb25CYWNrd2FyZHMgPSB0cnVlOworICAgICAgICB9LAogCi0gICAgICAgIH0KKyAg
ICAgICAgc2V0RnJvbUNlbnRlckFuZFNpemU6IGZ1bmN0aW9uICgpIHsKIAotICAgIH07CisgICAg
ICAgICAgICB2YXIgdjEgPSBuZXcgVmVjdG9yMigpOwogCi0gICAgTW9ycGhCbGVuZE1lc2gucHJv
dG90eXBlLnNldEFuaW1hdGlvbkZQUyA9IGZ1bmN0aW9uICggbmFtZSwgZnBzICkgeworICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEZyb21DZW50ZXJBbmRTaXplKCBjZW50ZXIsIHNpemUg
KSB7CiAKLSAgICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9uc01hcFsgbmFtZSBd
OworICAgICAgICAgICAgICAgIHZhciBoYWxmU2l6ZSA9IHYxLmNvcHkoIHNpemUgKS5tdWx0aXBs
eVNjYWxhciggMC41ICk7CisgICAgICAgICAgICAgICAgdGhpcy5taW4uY29weSggY2VudGVyICku
c3ViKCBoYWxmU2l6ZSApOworICAgICAgICAgICAgICAgIHRoaXMubWF4LmNvcHkoIGNlbnRlciAp
LmFkZCggaGFsZlNpemUgKTsKIAotICAgICAgICBpZiAoIGFuaW1hdGlvbiApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgYW5pbWF0aW9uLmZwcyA9IGZwczsK
LSAgICAgICAgICAgIGFuaW1hdGlvbi5kdXJhdGlvbiA9ICggYW5pbWF0aW9uLmVuZCAtIGFuaW1h
dGlvbi5zdGFydCApIC8gYW5pbWF0aW9uLmZwczsKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAg
fQorICAgICAgICB9KCksCiAKLSAgICB9OworICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkgewog
Ci0gICAgTW9ycGhCbGVuZE1lc2gucHJvdG90eXBlLnNldEFuaW1hdGlvbkR1cmF0aW9uID0gZnVu
Y3Rpb24gKCBuYW1lLCBkdXJhdGlvbiApIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcy5j
b25zdHJ1Y3RvcigpLmNvcHkoIHRoaXMgKTsKIAotICAgICAgICB2YXIgYW5pbWF0aW9uID0gdGhp
cy5hbmltYXRpb25zTWFwWyBuYW1lIF07CisgICAgICAgIH0sCiAKLSAgICAgICAgaWYgKCBhbmlt
YXRpb24gKSB7CisgICAgICAgIGNvcHk6IGZ1bmN0aW9uICggYm94ICkgewogCi0gICAgICAgICAg
ICBhbmltYXRpb24uZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICAgICAgICAgIGFuaW1hdGlvbi5m
cHMgPSAoIGFuaW1hdGlvbi5lbmQgLSBhbmltYXRpb24uc3RhcnQgKSAvIGFuaW1hdGlvbi5kdXJh
dGlvbjsKKyAgICAgICAgICAgIHRoaXMubWluLmNvcHkoIGJveC5taW4gKTsKKyAgICAgICAgICAg
IHRoaXMubWF4LmNvcHkoIGJveC5tYXggKTsKIAotICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdGhpczsKIAotICAgIH07CisgICAgICAgIH0sCiAKLSAgICBNb3JwaEJsZW5kTWVzaC5wcm90
b3R5cGUuc2V0QW5pbWF0aW9uV2VpZ2h0ID0gZnVuY3Rpb24gKCBuYW1lLCB3ZWlnaHQgKSB7Cisg
ICAgICAgIG1ha2VFbXB0eTogZnVuY3Rpb24gKCkgewogCi0gICAgICAgIHZhciBhbmltYXRpb24g
PSB0aGlzLmFuaW1hdGlvbnNNYXBbIG5hbWUgXTsKKyAgICAgICAgICAgIHRoaXMubWluLnggPSB0
aGlzLm1pbi55ID0gKyBJbmZpbml0eTsKKyAgICAgICAgICAgIHRoaXMubWF4LnggPSB0aGlzLm1h
eC55ID0gLSBJbmZpbml0eTsKIAotICAgICAgICBpZiAoIGFuaW1hdGlvbiApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgICAgICAgICBhbmltYXRpb24ud2VpZ2h0ID0gd2VpZ2h0
OworICAgICAgICB9LAogCi0gICAgICAgIH0KKyAgICAgICAgaXNFbXB0eTogZnVuY3Rpb24gKCkg
ewogCi0gICAgfTsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBtb3JlIHJvYnVzdCBjaGVjayBm
b3IgZW1wdHkgdGhhbiAoIHZvbHVtZSA8PSAwICkgYmVjYXVzZSB2b2x1bWUgY2FuIGdldCBwb3Np
dGl2ZSB3aXRoIHR3byBuZWdhdGl2ZSBheGVzCiAKLSAgICBNb3JwaEJsZW5kTWVzaC5wcm90b3R5
cGUuc2V0QW5pbWF0aW9uVGltZSA9IGZ1bmN0aW9uICggbmFtZSwgdGltZSApIHsKKyAgICAgICAg
ICAgIHJldHVybiAoIHRoaXMubWF4LnggPCB0aGlzLm1pbi54ICkgfHwgKCB0aGlzLm1heC55IDwg
dGhpcy5taW4ueSApOwogCi0gICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbnNN
YXBbIG5hbWUgXTsKKyAgICAgICAgfSwKIAotICAgICAgICBpZiAoIGFuaW1hdGlvbiApIHsKKyAg
ICAgICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKIAotICAgICAgICAgICAgYW5p
bWF0aW9uLnRpbWUgPSB0aW1lOworICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IHVuZGVmaW5l
ZCApIHsKIAotICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUu
Qm94MjogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAg
ICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjIoKTsKIAotICAgIH07CisgICAgICAgICAgICB9CiAK
LSAgICBNb3JwaEJsZW5kTWVzaC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9uVGltZSA9IGZ1bmN0aW9u
ICggbmFtZSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKSA/IHRhcmdldC5z
ZXQoIDAsIDAgKSA6IHRhcmdldC5hZGRWZWN0b3JzKCB0aGlzLm1pbiwgdGhpcy5tYXggKS5tdWx0
aXBseVNjYWxhciggMC41ICk7CiAKLSAgICAgICAgdmFyIHRpbWUgPSAwOworICAgICAgICB9LAog
Ci0gICAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbnNNYXBbIG5hbWUgXTsKKyAg
ICAgICAgZ2V0U2l6ZTogZnVuY3Rpb24gKCB0YXJnZXQgKSB7CiAKLSAgICAgICAgaWYgKCBhbmlt
YXRpb24gKSB7CisgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gdW5kZWZpbmVkICkgewogCi0g
ICAgICAgICAgICB0aW1lID0gYW5pbWF0aW9uLnRpbWU7CisgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCAnVEhSRUUuQm94MjogLmdldFNpemUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkJyAp
OworICAgICAgICAgICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IyKCk7CiAKLSAgICAgICAgfQor
ICAgICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB0aW1lOworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuaXNFbXB0eSgpID8gdGFyZ2V0LnNldCggMCwgMCApIDogdGFyZ2V0LnN1YlZlY3RvcnMo
IHRoaXMubWF4LCB0aGlzLm1pbiApOwogCi0gICAgfTsKKyAgICAgICAgfSwKIAotICAgIE1vcnBo
QmxlbmRNZXNoLnByb3RvdHlwZS5nZXRBbmltYXRpb25EdXJhdGlvbiA9IGZ1bmN0aW9uICggbmFt
ZSApIHsKKyAgICAgICAgZXhwYW5kQnlQb2ludDogZnVuY3Rpb24gKCBwb2ludCApIHsKIAotICAg
ICAgICB2YXIgZHVyYXRpb24gPSAtIDE7CisgICAgICAgICAgICB0aGlzLm1pbi5taW4oIHBvaW50
ICk7CisgICAgICAgICAgICB0aGlzLm1heC5tYXgoIHBvaW50ICk7CiAKLSAgICAgICAgdmFyIGFu
aW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9uc01hcFsgbmFtZSBdOworICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKLSAgICAgICAgaWYgKCBhbmltYXRpb24gKSB7CisgICAgICAgIH0sCiAKLSAgICAg
ICAgICAgIGR1cmF0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uOworICAgICAgICBleHBhbmRCeVZl
Y3RvcjogZnVuY3Rpb24gKCB2ZWN0b3IgKSB7CiAKLSAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5taW4uc3ViKCB2ZWN0b3IgKTsKKyAgICAgICAgICAgIHRoaXMubWF4LmFkZCggdmVjdG9yICk7
CiAKLSAgICAgICAgcmV0dXJuIGR1cmF0aW9uOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
LSAgICB9OworICAgICAgICB9LAogCi0gICAgTW9ycGhCbGVuZE1lc2gucHJvdG90eXBlLnBsYXlB
bmltYXRpb24gPSBmdW5jdGlvbiAoIG5hbWUgKSB7CisgICAgICAgIGV4cGFuZEJ5U2NhbGFyOiBm
dW5jdGlvbiAoIHNjYWxhciApIHsKIAotICAgICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5hbmlt
YXRpb25zTWFwWyBuYW1lIF07CisgICAgICAgICAgICB0aGlzLm1pbi5hZGRTY2FsYXIoIC0gc2Nh
bGFyICk7CisgICAgICAgICAgICB0aGlzLm1heC5hZGRTY2FsYXIoIHNjYWxhciApOwogCi0gICAg
ICAgIGlmICggYW5pbWF0aW9uICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICAg
ICAgICAgIGFuaW1hdGlvbi50aW1lID0gMDsKLSAgICAgICAgICAgIGFuaW1hdGlvbi5hY3RpdmUg
PSB0cnVlOworICAgICAgICB9LAogCi0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRhaW5z
UG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7CiAKLSAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
IlRIUkVFLk1vcnBoQmxlbmRNZXNoOiBhbmltYXRpb25bIiArIG5hbWUgKyAiXSB1bmRlZmluZWQg
aW4gLnBsYXlBbmltYXRpb24oKSIgKTsKKyAgICAgICAgICAgIHJldHVybiBwb2ludC54IDwgdGhp
cy5taW4ueCB8fCBwb2ludC54ID4gdGhpcy5tYXgueCB8fAorICAgICAgICAgICAgICAgIHBvaW50
LnkgPCB0aGlzLm1pbi55IHx8IHBvaW50LnkgPiB0aGlzLm1heC55ID8gZmFsc2UgOiB0cnVlOwog
Ci0gICAgICAgIH0KKyAgICAgICAgfSwKIAotICAgIH07CisgICAgICAgIGNvbnRhaW5zQm94OiBm
dW5jdGlvbiAoIGJveCApIHsKIAotICAgIE1vcnBoQmxlbmRNZXNoLnByb3RvdHlwZS5zdG9wQW5p
bWF0aW9uID0gZnVuY3Rpb24gKCBuYW1lICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMubWlu
LnggPD0gYm94Lm1pbi54ICYmIGJveC5tYXgueCA8PSB0aGlzLm1heC54ICYmCisgICAgICAgICAg
ICAgICAgdGhpcy5taW4ueSA8PSBib3gubWluLnkgJiYgYm94Lm1heC55IDw9IHRoaXMubWF4Lnk7
CiAKLSAgICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9uc01hcFsgbmFtZSBdOwor
ICAgICAgICB9LAogCi0gICAgICAgIGlmICggYW5pbWF0aW9uICkgeworICAgICAgICBnZXRQYXJh
bWV0ZXI6IGZ1bmN0aW9uICggcG9pbnQsIHRhcmdldCApIHsKIAotICAgICAgICAgICAgYW5pbWF0
aW9uLmFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgLy8gVGhpcyBjYW4gcG90ZW50aWFsbHkg
aGF2ZSBhIGRpdmlkZSBieSB6ZXJvIGlmIHRoZSBib3gKKyAgICAgICAgICAgIC8vIGhhcyBhIHNp
emUgZGltZW5zaW9uIG9mIDAuCiAKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCB0YXJnZXQg
PT09IHVuZGVmaW5lZCApIHsKIAotICAgIH07CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuQm94MjogLmdldFBhcmFtZXRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7
CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjIoKTsKIAotICAgIE1vcnBoQmxl
bmRNZXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoIGRlbHRhICkgeworICAgICAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoIHZhciBpID0gMCwgaWwgPSB0aGlzLmFuaW1hdGlvbnNMaXN0
Lmxlbmd0aDsgaSA8IGlsOyBpICsrICkgeworICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5zZXQo
CisgICAgICAgICAgICAgICAgKCBwb2ludC54IC0gdGhpcy5taW4ueCApIC8gKCB0aGlzLm1heC54
IC0gdGhpcy5taW4ueCApLAorICAgICAgICAgICAgICAgICggcG9pbnQueSAtIHRoaXMubWluLnkg
KSAvICggdGhpcy5tYXgueSAtIHRoaXMubWluLnkgKQorICAgICAgICAgICAgKTsKIAotICAgICAg
ICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9uc0xpc3RbIGkgXTsKKyAgICAgICAg
fSwKIAotICAgICAgICAgICAgaWYgKCAhIGFuaW1hdGlvbi5hY3RpdmUgKSBjb250aW51ZTsKKyAg
ICAgICAgaW50ZXJzZWN0c0JveDogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICAgICAgICAgIHZh
ciBmcmFtZVRpbWUgPSBhbmltYXRpb24uZHVyYXRpb24gLyBhbmltYXRpb24ubGVuZ3RoOworICAg
ICAgICAgICAgLy8gdXNpbmcgNCBzcGxpdHRpbmcgcGxhbmVzIHRvIHJ1bGUgb3V0IGludGVyc2Vj
dGlvbnMKIAotICAgICAgICAgICAgYW5pbWF0aW9uLnRpbWUgKz0gYW5pbWF0aW9uLmRpcmVjdGlv
biAqIGRlbHRhOworICAgICAgICAgICAgcmV0dXJuIGJveC5tYXgueCA8IHRoaXMubWluLnggfHwg
Ym94Lm1pbi54ID4gdGhpcy5tYXgueCB8fAorICAgICAgICAgICAgICAgIGJveC5tYXgueSA8IHRo
aXMubWluLnkgfHwgYm94Lm1pbi55ID4gdGhpcy5tYXgueSA/IGZhbHNlIDogdHJ1ZTsKIAotICAg
ICAgICAgICAgaWYgKCBhbmltYXRpb24ubWlycm9yZWRMb29wICkgeworICAgICAgICB9LAogCi0g
ICAgICAgICAgICAgICAgaWYgKCBhbmltYXRpb24udGltZSA+IGFuaW1hdGlvbi5kdXJhdGlvbiB8
fCBhbmltYXRpb24udGltZSA8IDAgKSB7CisgICAgICAgIGNsYW1wUG9pbnQ6IGZ1bmN0aW9uICgg
cG9pbnQsIHRhcmdldCApIHsKIAotICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24uZGlyZWN0
aW9uICo9IC0gMTsKKyAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSB1bmRlZmluZWQgKSB7CiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBhbmltYXRpb24udGltZSA+IGFuaW1hdGlvbi5kdXJh
dGlvbiApIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5Cb3gyOiAuY2xh
bXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQnICk7CisgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gbmV3IFZlY3RvcjIoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9u
LnRpbWUgPSBhbmltYXRpb24uZHVyYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmlt
YXRpb24uZGlyZWN0aW9uQmFja3dhcmRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNvcHkoIHBvaW50ICku
Y2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICgg
YW5pbWF0aW9uLnRpbWUgPCAwICkgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhbmltYXRpb24udGltZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRp
b24uZGlyZWN0aW9uQmFja3dhcmRzID0gZmFsc2U7CisgICAgICAgIGRpc3RhbmNlVG9Qb2ludDog
ZnVuY3Rpb24gKCkgewogCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB2
MSA9IG5ldyBWZWN0b3IyKCk7CiAKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gZGlzdGFuY2VUb1BvaW50KCBwb2ludCApIHsKIAotICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgY2xhbXBlZFBvaW50ID0gdjEuY29weSggcG9pbnQg
KS5jbGFtcCggdGhpcy5taW4sIHRoaXMubWF4ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNs
YW1wZWRQb2ludC5zdWIoIHBvaW50ICkubGVuZ3RoKCk7CiAKLSAgICAgICAgICAgICAgICBhbmlt
YXRpb24udGltZSA9IGFuaW1hdGlvbi50aW1lICUgYW5pbWF0aW9uLmR1cmF0aW9uOworICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgIGlmICggYW5pbWF0aW9uLnRpbWUgPCAwICkgYW5p
bWF0aW9uLnRpbWUgKz0gYW5pbWF0aW9uLmR1cmF0aW9uOworICAgICAgICB9KCksCiAKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgaW50ZXJzZWN0OiBmdW5jdGlvbiAoIGJveCApIHsKIAotICAgICAg
ICAgICAgdmFyIGtleWZyYW1lID0gYW5pbWF0aW9uLnN0YXJ0ICsgX01hdGguY2xhbXAoIE1hdGgu
Zmxvb3IoIGFuaW1hdGlvbi50aW1lIC8gZnJhbWVUaW1lICksIDAsIGFuaW1hdGlvbi5sZW5ndGgg
LSAxICk7Ci0gICAgICAgICAgICB2YXIgd2VpZ2h0ID0gYW5pbWF0aW9uLndlaWdodDsKKyAgICAg
ICAgICAgIHRoaXMubWluLm1heCggYm94Lm1pbiApOworICAgICAgICAgICAgdGhpcy5tYXgubWlu
KCBib3gubWF4ICk7CiAKLSAgICAgICAgICAgIGlmICgga2V5ZnJhbWUgIT09IGFuaW1hdGlvbi5j
dXJyZW50RnJhbWUgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAg
ICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBhbmltYXRpb24ubGFzdEZyYW1lIF0gPSAw
OwotICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBhbmltYXRpb24u
Y3VycmVudEZyYW1lIF0gPSAxICogd2VpZ2h0OworICAgICAgICB9LAogCi0gICAgICAgICAgICAg
ICAgdGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGtleWZyYW1lIF0gPSAwOworICAgICAgICB1
bmlvbjogZnVuY3Rpb24gKCBib3ggKSB7CiAKLSAgICAgICAgICAgICAgICBhbmltYXRpb24ubGFz
dEZyYW1lID0gYW5pbWF0aW9uLmN1cnJlbnRGcmFtZTsKLSAgICAgICAgICAgICAgICBhbmltYXRp
b24uY3VycmVudEZyYW1lID0ga2V5ZnJhbWU7CisgICAgICAgICAgICB0aGlzLm1pbi5taW4oIGJv
eC5taW4gKTsKKyAgICAgICAgICAgIHRoaXMubWF4Lm1heCggYm94Lm1heCApOwogCi0gICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKIAotICAgICAgICAgICAgdmFyIG1peCA9
ICggYW5pbWF0aW9uLnRpbWUgJSBmcmFtZVRpbWUgKSAvIGZyYW1lVGltZTsKKyAgICAgICAgfSwK
IAotICAgICAgICAgICAgaWYgKCBhbmltYXRpb24uZGlyZWN0aW9uQmFja3dhcmRzICkgbWl4ID0g
MSAtIG1peDsKKyAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoIG9mZnNldCApIHsKIAotICAg
ICAgICAgICAgaWYgKCBhbmltYXRpb24uY3VycmVudEZyYW1lICE9PSBhbmltYXRpb24ubGFzdEZy
YW1lICkgeworICAgICAgICAgICAgdGhpcy5taW4uYWRkKCBvZmZzZXQgKTsKKyAgICAgICAgICAg
IHRoaXMubWF4LmFkZCggb2Zmc2V0ICk7CiAKLSAgICAgICAgICAgICAgICB0aGlzLm1vcnBoVGFy
Z2V0SW5mbHVlbmNlc1sgYW5pbWF0aW9uLmN1cnJlbnRGcmFtZSBdID0gbWl4ICogd2VpZ2h0Owot
ICAgICAgICAgICAgICAgIHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBhbmltYXRpb24ubGFz
dEZyYW1lIF0gPSAoIDEgLSBtaXggKSAqIHdlaWdodDsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICB9LAogCi0gICAgICAgICAgICAgICAg
dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGFuaW1hdGlvbi5jdXJyZW50RnJhbWUgXSA9IHdl
aWdodDsKKyAgICAgICAgZXF1YWxzOiBmdW5jdGlvbiAoIGJveCApIHsKIAotICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGJveC5taW4uZXF1YWxzKCB0aGlzLm1pbiApICYmIGJveC5t
YXguZXF1YWxzKCB0aGlzLm1heCApOwogCiAgICAgICAgIH0KIAotICAgIH07CisgICAgfSApOwog
CiAgICAgLyoqCiAgICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlh
LmNvbS8KQEAgLTQwNjM4LDcgKzQzNzMzLDcgQEAKICAgICAgICAgT2JqZWN0M0QuY2FsbCggdGhp
cyApOwogCiAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDsKLSAgICAgICAgdGhpcy5y
ZW5kZXIgPSBmdW5jdGlvbiAoIHJlbmRlckNhbGxiYWNrICkge307CisgICAgICAgIHRoaXMucmVu
ZGVyID0gZnVuY3Rpb24gKCAvKiByZW5kZXJDYWxsYmFjayAqLyApIHt9OwogCiAgICAgfQogCkBA
IC00MDY1MCw3ICs0Mzc0NSw3IEBACiAgICAgLyoqCiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBo
dHRwOi8vbXJkb29iLmNvbS8KICAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dp
dGh1Yi5jb20vV2VzdExhbmdsZXkKLSAgICAqLworICAgICAqLwogCiAgICAgZnVuY3Rpb24gVmVy
dGV4Tm9ybWFsc0hlbHBlciggb2JqZWN0LCBzaXplLCBoZXgsIGxpbmV3aWR0aCApIHsKIApAQCAt
NDA3OTUsOSArNDM4OTAsOSBAQAogICAgICAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0
ZXJlZHF1YWxpYS5jb20vCiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNv
bS8KICAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExh
bmdsZXkKLSAgICAqLworICAgICAqLwogCi0gICAgZnVuY3Rpb24gU3BvdExpZ2h0SGVscGVyKCBs
aWdodCApIHsKKyAgICBmdW5jdGlvbiBTcG90TGlnaHRIZWxwZXIoIGxpZ2h0LCBjb2xvciApIHsK
IAogICAgICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CiAKQEAgLTQwODA3LDE0ICs0MzkwMiwx
NiBAQAogICAgICAgICB0aGlzLm1hdHJpeCA9IGxpZ2h0Lm1hdHJpeFdvcmxkOwogICAgICAgICB0
aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTsKIAorICAgICAgICB0aGlzLmNvbG9yID0gY29s
b3I7CisKICAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7CiAKICAg
ICAgICAgdmFyIHBvc2l0aW9ucyA9IFsKLSAgICAgICAgICAgIDAsIDAsIDAsICAgMCwgICAwLCAg
IDEsCi0gICAgICAgICAgICAwLCAwLCAwLCAgIDEsICAgMCwgICAxLAotICAgICAgICAgICAgMCwg
MCwgMCwgLSAxLCAgIDAsICAgMSwKLSAgICAgICAgICAgIDAsIDAsIDAsICAgMCwgICAxLCAgIDEs
Ci0gICAgICAgICAgICAwLCAwLCAwLCAgIDAsIC0gMSwgICAxCisgICAgICAgICAgICAwLCAwLCAw
LCAgICAwLCAwLCAxLAorICAgICAgICAgICAgMCwgMCwgMCwgICAgMSwgMCwgMSwKKyAgICAgICAg
ICAgIDAsIDAsIDAsICAgIC0gMSwgMCwgMSwKKyAgICAgICAgICAgIDAsIDAsIDAsICAgIDAsIDEs
IDEsCisgICAgICAgICAgICAwLCAwLCAwLCAgICAwLCAtIDEsIDEKICAgICAgICAgXTsKIAogICAg
ICAgICBmb3IgKCB2YXIgaSA9IDAsIGogPSAxLCBsID0gMzI7IGkgPCBsOyBpICsrLCBqICsrICkg
ewpAQCAtNDA4NjksNyArNDM5NjYsMTUgQEAKIAogICAgICAgICAgICAgdGhpcy5jb25lLmxvb2tB
dCggdmVjdG9yMi5zdWIoIHZlY3RvciApICk7CiAKLSAgICAgICAgICAgIHRoaXMuY29uZS5tYXRl
cmlhbC5jb2xvci5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9yICk7CisgICAgICAgICAgICBpZiAoIHRo
aXMuY29sb3IgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIHRoaXMuY29uZS5t
YXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsK
KworICAgICAgICAgICAgICAgIHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmxp
Z2h0LmNvbG9yICk7CisKKyAgICAgICAgICAgIH0KIAogICAgICAgICB9OwogCkBAIC00MDk0Mywy
MSArNDQwNDgsMTkgQEAKICAgICAgICAgdGhpcy5tYXRyaXggPSBvYmplY3QubWF0cml4V29ybGQ7
CiAgICAgICAgIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlOwogCi0gICAgICAgIHRoaXMu
b25CZWZvcmVSZW5kZXIoKTsKLQogICAgIH0KIAogICAgIFNrZWxldG9uSGVscGVyLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoIExpbmVTZWdtZW50cy5wcm90b3R5cGUgKTsKICAgICBTa2VsZXRv
bkhlbHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTa2VsZXRvbkhlbHBlcjsKIAotICAgIFNr
ZWxldG9uSGVscGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uICgpIHsKKyAg
ICBTa2VsZXRvbkhlbHBlci5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQgPSBmdW5jdGlvbiAo
KSB7CiAKICAgICAgICAgdmFyIHZlY3RvciA9IG5ldyBWZWN0b3IzKCk7CiAKICAgICAgICAgdmFy
IGJvbmVNYXRyaXggPSBuZXcgTWF0cml4NCgpOwogICAgICAgICB2YXIgbWF0cml4V29ybGRJbnYg
PSBuZXcgTWF0cml4NCgpOwogCi0gICAgICAgIHJldHVybiBmdW5jdGlvbiBvbkJlZm9yZVJlbmRl
cigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZU1hdHJpeFdvcmxkKCBmb3JjZSAp
IHsKIAogICAgICAgICAgICAgdmFyIGJvbmVzID0gdGhpcy5ib25lczsKIApAQCAtNDA5ODgsNiAr
NDQwOTEsOCBAQAogCiAgICAgICAgICAgICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlv
bicgKS5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKKyAgICAgICAgICAgIE9iamVjdDNELnByb3RvdHlw
ZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKCB0aGlzLCBmb3JjZSApOworCiAgICAgICAgIH07CiAK
ICAgICB9KCk7CkBAIC00MDk5NywyMCArNDQxMDIsMjQgQEAKICAgICAgKiBAYXV0aG9yIG1yZG9v
YiAvIGh0dHA6Ly9tcmRvb2IuY29tLwogICAgICAqLwogCi0gICAgZnVuY3Rpb24gUG9pbnRMaWdo
dEhlbHBlciggbGlnaHQsIHNwaGVyZVNpemUgKSB7CisgICAgZnVuY3Rpb24gUG9pbnRMaWdodEhl
bHBlciggbGlnaHQsIHNwaGVyZVNpemUsIGNvbG9yICkgewogCiAgICAgICAgIHRoaXMubGlnaHQg
PSBsaWdodDsKICAgICAgICAgdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpOwogCisgICAg
ICAgIHRoaXMuY29sb3IgPSBjb2xvcjsKKwogICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgU3Bo
ZXJlQnVmZmVyR2VvbWV0cnkoIHNwaGVyZVNpemUsIDQsIDIgKTsKICAgICAgICAgdmFyIG1hdGVy
aWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKCB7IHdpcmVmcmFtZTogdHJ1ZSwgZm9nOiBmYWxz
ZSB9ICk7Ci0gICAgICAgIG1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTsK
IAogICAgICAgICBNZXNoLmNhbGwoIHRoaXMsIGdlb21ldHJ5LCBtYXRlcmlhbCApOwogCiAgICAg
ICAgIHRoaXMubWF0cml4ID0gdGhpcy5saWdodC5tYXRyaXhXb3JsZDsKICAgICAgICAgdGhpcy5t
YXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7CiAKKyAgICAgICAgdGhpcy51cGRhdGUoKTsKKworCiAg
ICAgICAgIC8qCiAgICAgICAgIHZhciBkaXN0YW5jZUdlb21ldHJ5ID0gbmV3IFRIUkVFLkljb3Nh
aGVkcm9uR2VvbWV0cnkoIDEsIDIgKTsKICAgICAgICAgdmFyIGRpc3RhbmNlTWF0ZXJpYWwgPSBu
ZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGhleENvbG9yLCBmb2c6IGZhbHNl
LCB3aXJlZnJhbWU6IHRydWUsIG9wYWNpdHk6IDAuMSwgdHJhbnNwYXJlbnQ6IHRydWUgfSApOwpA
QCAtNDEwNDcsNyArNDQxNTYsMTUgQEAKIAogICAgIFBvaW50TGlnaHRIZWxwZXIucHJvdG90eXBl
LnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB0aGlzLm1hdGVyaWFsLmNvbG9yLmNv
cHkoIHRoaXMubGlnaHQuY29sb3IgKTsKKyAgICAgICAgaWYgKCB0aGlzLmNvbG9yICE9PSB1bmRl
ZmluZWQgKSB7CisKKyAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KCB0aGlzLmNv
bG9yICk7CisKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5j
b2xvci5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9yICk7CisKKyAgICAgICAgfQogCiAgICAgICAgIC8q
CiAgICAgICAgIHZhciBkID0gdGhpcy5saWdodC5kaXN0YW5jZTsKQEAgLTQxMDcyLDcgKzQ0MTg5
LDcgQEAKICAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2Vz
dExhbmdsZXkKICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIFJlY3RBcmVhTGlnaHRIZWxwZXIoIGxp
Z2h0ICkgeworICAgIGZ1bmN0aW9uIFJlY3RBcmVhTGlnaHRIZWxwZXIoIGxpZ2h0LCBjb2xvciAp
IHsKIAogICAgICAgICBPYmplY3QzRC5jYWxsKCB0aGlzICk7CiAKQEAgLTQxMDgyLDEzICs0NDE5
OSwxNyBAQAogICAgICAgICB0aGlzLm1hdHJpeCA9IGxpZ2h0Lm1hdHJpeFdvcmxkOwogICAgICAg
ICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTsKIAotICAgICAgICB2YXIgbWF0ZXJpYWwg
PSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgY29sb3I6IGxpZ2h0LmNvbG9yIH0gKTsKKyAgICAg
ICAgdGhpcy5jb2xvciA9IGNvbG9yOworCisgICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBMaW5l
QmFzaWNNYXRlcmlhbCggeyBmb2c6IGZhbHNlIH0gKTsKIAogICAgICAgICB2YXIgZ2VvbWV0cnkg
PSBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKIAogICAgICAgICBnZW9tZXRyeS5hZGRBdHRyaWJ1dGUo
ICdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIG5ldyBGbG9hdDMyQXJyYXkoIDUgKiAz
ICksIDMgKSApOwogCi0gICAgICAgIHRoaXMuYWRkKCBuZXcgTGluZSggZ2VvbWV0cnksIG1hdGVy
aWFsICkgKTsKKyAgICAgICAgdGhpcy5saW5lID0gbmV3IExpbmUoIGdlb21ldHJ5LCBtYXRlcmlh
bCApOworICAgICAgICB0aGlzLmFkZCggdGhpcy5saW5lICk7CisKIAogICAgICAgICB0aGlzLnVw
ZGF0ZSgpOwogCkBAIC00MTEwNiwzMCArNDQyMjcsMzQgQEAKIAogICAgIFJlY3RBcmVhTGlnaHRI
ZWxwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAgICB2YXIgbGlu
ZSA9IHRoaXMuY2hpbGRyZW5bIDAgXTsKLQotICAgICAgICAvLyB1cGRhdGUgbWF0ZXJpYWwKLQot
ICAgICAgICBsaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTsKLQog
ICAgICAgICAvLyBjYWxjdWxhdGUgbmV3IGRpbWVuc2lvbnMgb2YgdGhlIGhlbHBlcgogCiAgICAg
ICAgIHZhciBoeCA9IHRoaXMubGlnaHQud2lkdGggKiAwLjU7CiAgICAgICAgIHZhciBoeSA9IHRo
aXMubGlnaHQuaGVpZ2h0ICogMC41OwogCi0gICAgICAgIHZhciBwb3NpdGlvbiA9IGxpbmUuZ2Vv
bWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5s
aW5lLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247CiAgICAgICAgIHZhciBhcnJheSA9IHBv
c2l0aW9uLmFycmF5OwogCiAgICAgICAgIC8vIHVwZGF0ZSB2ZXJ0aWNlcwogCi0gICAgICAgIGFy
cmF5WyAgMCBdID0gICBoeDsgYXJyYXlbICAxIF0gPSAtIGh5OyBhcnJheVsgIDIgXSA9IDA7Ci0g
ICAgICAgIGFycmF5WyAgMyBdID0gICBoeDsgYXJyYXlbICA0IF0gPSAgIGh5OyBhcnJheVsgIDUg
XSA9IDA7Ci0gICAgICAgIGFycmF5WyAgNiBdID0gLSBoeDsgYXJyYXlbICA3IF0gPSAgIGh5OyBh
cnJheVsgIDggXSA9IDA7Ci0gICAgICAgIGFycmF5WyAgOSBdID0gLSBoeDsgYXJyYXlbIDEwIF0g
PSAtIGh5OyBhcnJheVsgMTEgXSA9IDA7Ci0gICAgICAgIGFycmF5WyAxMiBdID0gICBoeDsgYXJy
YXlbIDEzIF0gPSAtIGh5OyBhcnJheVsgMTQgXSA9IDA7CisgICAgICAgIGFycmF5WyAwIF0gPSBo
eDsgYXJyYXlbIDEgXSA9IC0gaHk7IGFycmF5WyAyIF0gPSAwOworICAgICAgICBhcnJheVsgMyBd
ID0gaHg7IGFycmF5WyA0IF0gPSBoeTsgYXJyYXlbIDUgXSA9IDA7CisgICAgICAgIGFycmF5WyA2
IF0gPSAtIGh4OyBhcnJheVsgNyBdID0gaHk7IGFycmF5WyA4IF0gPSAwOworICAgICAgICBhcnJh
eVsgOSBdID0gLSBoeDsgYXJyYXlbIDEwIF0gPSAtIGh5OyBhcnJheVsgMTEgXSA9IDA7CisgICAg
ICAgIGFycmF5WyAxMiBdID0gaHg7IGFycmF5WyAxMyBdID0gLSBoeTsgYXJyYXlbIDE0IF0gPSAw
OwogCiAgICAgICAgIHBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTsKIAorICAgICAgICBpZiAo
IHRoaXMuY29sb3IgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgdGhpcy5saW5lLm1h
dGVyaWFsLmNvbG9yLnNldCggdGhpcy5jb2xvciApOworCisgICAgICAgIH0gZWxzZSB7CisKKyAg
ICAgICAgICAgIHRoaXMubGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9y
ICk7CisKKyAgICAgICAgfQorCiAgICAgfTsKIAogICAgIC8qKgpAQCAtNDExMzgsNyArNDQyNjMs
NyBAQAogICAgICAqIEBhdXRob3IgTXVnZW44NyAvIGh0dHBzOi8vZ2l0aHViLmNvbS9NdWdlbjg3
CiAgICAgICovCiAKLSAgICBmdW5jdGlvbiBIZW1pc3BoZXJlTGlnaHRIZWxwZXIoIGxpZ2h0LCBz
aXplICkgeworICAgIGZ1bmN0aW9uIEhlbWlzcGhlcmVMaWdodEhlbHBlciggbGlnaHQsIHNpemUs
IGNvbG9yICkgewogCiAgICAgICAgIE9iamVjdDNELmNhbGwoIHRoaXMgKTsKIApAQCAtNDExNDgs
MTcgKzQ0MjczLDIwIEBACiAgICAgICAgIHRoaXMubWF0cml4ID0gbGlnaHQubWF0cml4V29ybGQ7
CiAgICAgICAgIHRoaXMubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlOwogCisgICAgICAgIHRoaXMu
Y29sb3IgPSBjb2xvcjsKKwogICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgT2N0YWhlZHJvbkJ1
ZmZlckdlb21ldHJ5KCBzaXplICk7CiAgICAgICAgIGdlb21ldHJ5LnJvdGF0ZVkoIE1hdGguUEkg
KiAwLjUgKTsKIAotICAgICAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwo
IHsgdmVydGV4Q29sb3JzOiBWZXJ0ZXhDb2xvcnMsIHdpcmVmcmFtZTogdHJ1ZSB9ICk7CisgICAg
ICAgIHRoaXMubWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoIHsgd2lyZWZyYW1lOiB0
cnVlLCBmb2c6IGZhbHNlIH0gKTsKKyAgICAgICAgaWYgKCB0aGlzLmNvbG9yID09PSB1bmRlZmlu
ZWQgKSB0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycyA9IFZlcnRleENvbG9yczsKIAogICAgICAg
ICB2YXIgcG9zaXRpb24gPSBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicgKTsKICAg
ICAgICAgdmFyIGNvbG9ycyA9IG5ldyBGbG9hdDMyQXJyYXkoIHBvc2l0aW9uLmNvdW50ICogMyAp
OwogCiAgICAgICAgIGdlb21ldHJ5LmFkZEF0dHJpYnV0ZSggJ2NvbG9yJywgbmV3IEJ1ZmZlckF0
dHJpYnV0ZSggY29sb3JzLCAzICkgKTsKIAotICAgICAgICB0aGlzLmFkZCggbmV3IE1lc2goIGdl
b21ldHJ5LCBtYXRlcmlhbCApICk7CisgICAgICAgIHRoaXMuYWRkKCBuZXcgTWVzaCggZ2VvbWV0
cnksIHRoaXMubWF0ZXJpYWwgKSApOwogCiAgICAgICAgIHRoaXMudXBkYXRlKCk7CiAKQEAgLTQx
MTg1LDIzICs0NDMxMywzMSBAQAogCiAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuY2hpbGRy
ZW5bIDAgXTsKIAotICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG1lc2guZ2VvbWV0cnkuZ2V0QXR0
cmlidXRlKCAnY29sb3InICk7CisgICAgICAgICAgICBpZiAoIHRoaXMuY29sb3IgIT09IHVuZGVm
aW5lZCApIHsKIAotICAgICAgICAgICAgY29sb3IxLmNvcHkoIHRoaXMubGlnaHQuY29sb3IgKTsK
LSAgICAgICAgICAgIGNvbG9yMi5jb3B5KCB0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yICk7CisgICAg
ICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTsKIAotICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gY29sb3JzLmNvdW50OyBpIDwgbDsgaSArKyAp
IHsKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0g
bWVzaC5nZW9tZXRyeS5nZXRBdHRyaWJ1dGUoICdjb2xvcicgKTsKKworICAgICAgICAgICAgICAg
IGNvbG9yMS5jb3B5KCB0aGlzLmxpZ2h0LmNvbG9yICk7CisgICAgICAgICAgICAgICAgY29sb3Iy
LmNvcHkoIHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IgKTsKKworICAgICAgICAgICAgICAgIGZvciAo
IHZhciBpID0gMCwgbCA9IGNvbG9ycy5jb3VudDsgaSA8IGw7IGkgKysgKSB7CiAKLSAgICAgICAg
ICAgICAgICB2YXIgY29sb3IgPSAoIGkgPCAoIGwgLyAyICkgKSA/IGNvbG9yMSA6IGNvbG9yMjsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gKCBpIDwgKCBsIC8gMiApICkgPyBjb2xv
cjEgOiBjb2xvcjI7CiAKLSAgICAgICAgICAgICAgICBjb2xvcnMuc2V0WFlaKCBpLCBjb2xvci5y
LCBjb2xvci5nLCBjb2xvci5iICk7CisgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5zZXRYWVoo
IGksIGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIgKTsKKworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbG9ycy5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbWVzaC5sb29rQXQoIHZlY3Rvci5zZXRGcm9tTWF0cml4UG9zaXRp
b24oIHRoaXMubGlnaHQubWF0cml4V29ybGQgKS5uZWdhdGUoKSApOwogCi0gICAgICAgICAgICBj
b2xvcnMubmVlZHNVcGRhdGUgPSB0cnVlOwotCiAgICAgICAgIH07CiAKICAgICB9KCk7CkBAIC00
MTM0MCw3ICs0NDQ3Niw3IEBACiAgICAgLyoqCiAgICAgICogQGF1dGhvciBtcmRvb2IgLyBodHRw
Oi8vbXJkb29iLmNvbS8KICAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1
Yi5jb20vV2VzdExhbmdsZXkKLSAgICAqLworICAgICAqLwogCiAgICAgZnVuY3Rpb24gRmFjZU5v
cm1hbHNIZWxwZXIoIG9iamVjdCwgc2l6ZSwgaGV4LCBsaW5ld2lkdGggKSB7CiAKQEAgLTQxNDUy
LDcgKzQ0NTg4LDcgQEAKICAgICAgKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1
Yi5jb20vV2VzdExhbmdsZXkKICAgICAgKi8KIAotICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFsTGln
aHRIZWxwZXIoIGxpZ2h0LCBzaXplICkgeworICAgIGZ1bmN0aW9uIERpcmVjdGlvbmFsTGlnaHRI
ZWxwZXIoIGxpZ2h0LCBzaXplLCBjb2xvciApIHsKIAogICAgICAgICBPYmplY3QzRC5jYWxsKCB0
aGlzICk7CiAKQEAgLTQxNDYyLDI1ICs0NDU5OCwyOSBAQAogICAgICAgICB0aGlzLm1hdHJpeCA9
IGxpZ2h0Lm1hdHJpeFdvcmxkOwogICAgICAgICB0aGlzLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxz
ZTsKIAorICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7CisKICAgICAgICAgaWYgKCBzaXplID09
PSB1bmRlZmluZWQgKSBzaXplID0gMTsKIAogICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQnVm
ZmVyR2VvbWV0cnkoKTsKICAgICAgICAgZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCAncG9zaXRpb24n
LCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggWwotICAgICAgICAgICAgLSBzaXplLCAgIHNp
emUsIDAsCi0gICAgICAgICAgICAgIHNpemUsICAgc2l6ZSwgMCwKLSAgICAgICAgICAgICAgc2l6
ZSwgLSBzaXplLCAwLAorICAgICAgICAgICAgLSBzaXplLCBzaXplLCAwLAorICAgICAgICAgICAg
c2l6ZSwgc2l6ZSwgMCwKKyAgICAgICAgICAgIHNpemUsIC0gc2l6ZSwgMCwKICAgICAgICAgICAg
IC0gc2l6ZSwgLSBzaXplLCAwLAotICAgICAgICAgICAgLSBzaXplLCAgIHNpemUsIDAKKyAgICAg
ICAgICAgIC0gc2l6ZSwgc2l6ZSwgMAogICAgICAgICBdLCAzICkgKTsKIAogICAgICAgICB2YXIg
bWF0ZXJpYWwgPSBuZXcgTGluZUJhc2ljTWF0ZXJpYWwoIHsgZm9nOiBmYWxzZSB9ICk7CiAKLSAg
ICAgICAgdGhpcy5hZGQoIG5ldyBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJpYWwgKSApOworICAgICAg
ICB0aGlzLmxpZ2h0UGxhbmUgPSBuZXcgTGluZSggZ2VvbWV0cnksIG1hdGVyaWFsICk7CisgICAg
ICAgIHRoaXMuYWRkKCB0aGlzLmxpZ2h0UGxhbmUgKTsKIAogICAgICAgICBnZW9tZXRyeSA9IG5l
dyBCdWZmZXJHZW9tZXRyeSgpOwogICAgICAgICBnZW9tZXRyeS5hZGRBdHRyaWJ1dGUoICdwb3Np
dGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKCBbIDAsIDAsIDAsIDAsIDAsIDEgXSwg
MyApICk7CiAKLSAgICAgICAgdGhpcy5hZGQoIG5ldyBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJpYWwg
KSk7CisgICAgICAgIHRoaXMudGFyZ2V0TGluZSA9IG5ldyBMaW5lKCBnZW9tZXRyeSwgbWF0ZXJp
YWwgKTsKKyAgICAgICAgdGhpcy5hZGQoIHRoaXMudGFyZ2V0TGluZSApOwogCiAgICAgICAgIHRo
aXMudXBkYXRlKCk7CiAKQEAgLTQxNDkxLDEzICs0NDYzMSwxMCBAQAogCiAgICAgRGlyZWN0aW9u
YWxMaWdodEhlbHBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHsKIAotICAgICAg
ICB2YXIgbGlnaHRQbGFuZSA9IHRoaXMuY2hpbGRyZW5bIDAgXTsKLSAgICAgICAgdmFyIHRhcmdl
dExpbmUgPSB0aGlzLmNoaWxkcmVuWyAxIF07Ci0KLSAgICAgICAgbGlnaHRQbGFuZS5nZW9tZXRy
eS5kaXNwb3NlKCk7Ci0gICAgICAgIGxpZ2h0UGxhbmUubWF0ZXJpYWwuZGlzcG9zZSgpOwotICAg
ICAgICB0YXJnZXRMaW5lLmdlb21ldHJ5LmRpc3Bvc2UoKTsKLSAgICAgICAgdGFyZ2V0TGluZS5t
YXRlcmlhbC5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNw
b3NlKCk7CisgICAgICAgIHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5kaXNwb3NlKCk7CisgICAg
ICAgIHRoaXMudGFyZ2V0TGluZS5nZW9tZXRyeS5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMudGFy
Z2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCk7CiAKICAgICB9OwogCkBAIC00MTUxMywxNCArNDQ2
NTAsMjIgQEAKICAgICAgICAgICAgIHYyLnNldEZyb21NYXRyaXhQb3NpdGlvbiggdGhpcy5saWdo
dC50YXJnZXQubWF0cml4V29ybGQgKTsKICAgICAgICAgICAgIHYzLnN1YlZlY3RvcnMoIHYyLCB2
MSApOwogCi0gICAgICAgICAgICB2YXIgbGlnaHRQbGFuZSA9IHRoaXMuY2hpbGRyZW5bIDAgXTsK
LSAgICAgICAgICAgIHZhciB0YXJnZXRMaW5lID0gdGhpcy5jaGlsZHJlblsgMSBdOworICAgICAg
ICAgICAgdGhpcy5saWdodFBsYW5lLmxvb2tBdCggdjMgKTsKKworICAgICAgICAgICAgaWYgKCB0
aGlzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7CiAKLSAgICAgICAgICAgIGxpZ2h0UGxhbmUubG9v
a0F0KCB2MyApOwotICAgICAgICAgICAgbGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0
aGlzLmxpZ2h0LmNvbG9yICk7CisgICAgICAgICAgICAgICAgdGhpcy5saWdodFBsYW5lLm1hdGVy
aWFsLmNvbG9yLnNldCggdGhpcy5jb2xvciApOworICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0
TGluZS5tYXRlcmlhbC5jb2xvci5zZXQoIHRoaXMuY29sb3IgKTsKIAotICAgICAgICAgICAgdGFy
Z2V0TGluZS5sb29rQXQoIHYzICk7Ci0gICAgICAgICAgICB0YXJnZXRMaW5lLnNjYWxlLnogPSB2
My5sZW5ndGgoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICB0aGlz
LmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3IuY29weSggdGhpcy5saWdodC5jb2xvciApOworICAg
ICAgICAgICAgICAgIHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KCB0aGlzLmxp
Z2h0LmNvbG9yICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy50YXJnZXRM
aW5lLmxvb2tBdCggdjMgKTsKKyAgICAgICAgICAgIHRoaXMudGFyZ2V0TGluZS5zY2FsZS56ID0g
djMubGVuZ3RoKCk7CiAKICAgICAgICAgfTsKIApAQCAtNDE1NTYsNTAgKzQ0NzAxLDUwIEBACiAK
ICAgICAgICAgLy8gbmVhcgogCi0gICAgICAgIGFkZExpbmUoICJuMSIsICJuMiIsIGNvbG9yRnJ1
c3R1bSApOwotICAgICAgICBhZGRMaW5lKCAibjIiLCAibjQiLCBjb2xvckZydXN0dW0gKTsKLSAg
ICAgICAgYWRkTGluZSggIm40IiwgIm4zIiwgY29sb3JGcnVzdHVtICk7Ci0gICAgICAgIGFkZExp
bmUoICJuMyIsICJuMSIsIGNvbG9yRnJ1c3R1bSApOworICAgICAgICBhZGRMaW5lKCAnbjEnLCAn
bjInLCBjb2xvckZydXN0dW0gKTsKKyAgICAgICAgYWRkTGluZSggJ24yJywgJ240JywgY29sb3JG
cnVzdHVtICk7CisgICAgICAgIGFkZExpbmUoICduNCcsICduMycsIGNvbG9yRnJ1c3R1bSApOwor
ICAgICAgICBhZGRMaW5lKCAnbjMnLCAnbjEnLCBjb2xvckZydXN0dW0gKTsKIAogICAgICAgICAv
LyBmYXIKIAotICAgICAgICBhZGRMaW5lKCAiZjEiLCAiZjIiLCBjb2xvckZydXN0dW0gKTsKLSAg
ICAgICAgYWRkTGluZSggImYyIiwgImY0IiwgY29sb3JGcnVzdHVtICk7Ci0gICAgICAgIGFkZExp
bmUoICJmNCIsICJmMyIsIGNvbG9yRnJ1c3R1bSApOwotICAgICAgICBhZGRMaW5lKCAiZjMiLCAi
ZjEiLCBjb2xvckZydXN0dW0gKTsKKyAgICAgICAgYWRkTGluZSggJ2YxJywgJ2YyJywgY29sb3JG
cnVzdHVtICk7CisgICAgICAgIGFkZExpbmUoICdmMicsICdmNCcsIGNvbG9yRnJ1c3R1bSApOwor
ICAgICAgICBhZGRMaW5lKCAnZjQnLCAnZjMnLCBjb2xvckZydXN0dW0gKTsKKyAgICAgICAgYWRk
TGluZSggJ2YzJywgJ2YxJywgY29sb3JGcnVzdHVtICk7CiAKICAgICAgICAgLy8gc2lkZXMKIAot
ICAgICAgICBhZGRMaW5lKCAibjEiLCAiZjEiLCBjb2xvckZydXN0dW0gKTsKLSAgICAgICAgYWRk
TGluZSggIm4yIiwgImYyIiwgY29sb3JGcnVzdHVtICk7Ci0gICAgICAgIGFkZExpbmUoICJuMyIs
ICJmMyIsIGNvbG9yRnJ1c3R1bSApOwotICAgICAgICBhZGRMaW5lKCAibjQiLCAiZjQiLCBjb2xv
ckZydXN0dW0gKTsKKyAgICAgICAgYWRkTGluZSggJ24xJywgJ2YxJywgY29sb3JGcnVzdHVtICk7
CisgICAgICAgIGFkZExpbmUoICduMicsICdmMicsIGNvbG9yRnJ1c3R1bSApOworICAgICAgICBh
ZGRMaW5lKCAnbjMnLCAnZjMnLCBjb2xvckZydXN0dW0gKTsKKyAgICAgICAgYWRkTGluZSggJ240
JywgJ2Y0JywgY29sb3JGcnVzdHVtICk7CiAKICAgICAgICAgLy8gY29uZQogCi0gICAgICAgIGFk
ZExpbmUoICJwIiwgIm4xIiwgY29sb3JDb25lICk7Ci0gICAgICAgIGFkZExpbmUoICJwIiwgIm4y
IiwgY29sb3JDb25lICk7Ci0gICAgICAgIGFkZExpbmUoICJwIiwgIm4zIiwgY29sb3JDb25lICk7
Ci0gICAgICAgIGFkZExpbmUoICJwIiwgIm40IiwgY29sb3JDb25lICk7CisgICAgICAgIGFkZExp
bmUoICdwJywgJ24xJywgY29sb3JDb25lICk7CisgICAgICAgIGFkZExpbmUoICdwJywgJ24yJywg
Y29sb3JDb25lICk7CisgICAgICAgIGFkZExpbmUoICdwJywgJ24zJywgY29sb3JDb25lICk7Cisg
ICAgICAgIGFkZExpbmUoICdwJywgJ240JywgY29sb3JDb25lICk7CiAKICAgICAgICAgLy8gdXAK
IAotICAgICAgICBhZGRMaW5lKCAidTEiLCAidTIiLCBjb2xvclVwICk7Ci0gICAgICAgIGFkZExp
bmUoICJ1MiIsICJ1MyIsIGNvbG9yVXAgKTsKLSAgICAgICAgYWRkTGluZSggInUzIiwgInUxIiwg
Y29sb3JVcCApOworICAgICAgICBhZGRMaW5lKCAndTEnLCAndTInLCBjb2xvclVwICk7CisgICAg
ICAgIGFkZExpbmUoICd1MicsICd1MycsIGNvbG9yVXAgKTsKKyAgICAgICAgYWRkTGluZSggJ3Uz
JywgJ3UxJywgY29sb3JVcCApOwogCiAgICAgICAgIC8vIHRhcmdldAogCi0gICAgICAgIGFkZExp
bmUoICJjIiwgInQiLCBjb2xvclRhcmdldCApOwotICAgICAgICBhZGRMaW5lKCAicCIsICJjIiwg
Y29sb3JDcm9zcyApOworICAgICAgICBhZGRMaW5lKCAnYycsICd0JywgY29sb3JUYXJnZXQgKTsK
KyAgICAgICAgYWRkTGluZSggJ3AnLCAnYycsIGNvbG9yQ3Jvc3MgKTsKIAogICAgICAgICAvLyBj
cm9zcwogCi0gICAgICAgIGFkZExpbmUoICJjbjEiLCAiY24yIiwgY29sb3JDcm9zcyApOwotICAg
ICAgICBhZGRMaW5lKCAiY24zIiwgImNuNCIsIGNvbG9yQ3Jvc3MgKTsKKyAgICAgICAgYWRkTGlu
ZSggJ2NuMScsICdjbjInLCBjb2xvckNyb3NzICk7CisgICAgICAgIGFkZExpbmUoICdjbjMnLCAn
Y240JywgY29sb3JDcm9zcyApOwogCi0gICAgICAgIGFkZExpbmUoICJjZjEiLCAiY2YyIiwgY29s
b3JDcm9zcyApOwotICAgICAgICBhZGRMaW5lKCAiY2YzIiwgImNmNCIsIGNvbG9yQ3Jvc3MgKTsK
KyAgICAgICAgYWRkTGluZSggJ2NmMScsICdjZjInLCBjb2xvckNyb3NzICk7CisgICAgICAgIGFk
ZExpbmUoICdjZjMnLCAnY2Y0JywgY29sb3JDcm9zcyApOwogCiAgICAgICAgIGZ1bmN0aW9uIGFk
ZExpbmUoIGEsIGIsIGNvbG9yICkgewogCkBAIC00MTY4NCw0MCArNDQ4MjksNDAgQEAKIAogICAg
ICAgICAgICAgLy8gY2VudGVyIC8gdGFyZ2V0CiAKLSAgICAgICAgICAgIHNldFBvaW50KCAiYyIs
IDAsIDAsIC0gMSApOwotICAgICAgICAgICAgc2V0UG9pbnQoICJ0IiwgMCwgMCwgIDEgKTsKKyAg
ICAgICAgICAgIHNldFBvaW50KCAnYycsIDAsIDAsIC0gMSApOworICAgICAgICAgICAgc2V0UG9p
bnQoICd0JywgMCwgMCwgMSApOwogCiAgICAgICAgICAgICAvLyBuZWFyCiAKLSAgICAgICAgICAg
IHNldFBvaW50KCAibjEiLCAtIHcsIC0gaCwgLSAxICk7Ci0gICAgICAgICAgICBzZXRQb2ludCgg
Im4yIiwgICB3LCAtIGgsIC0gMSApOwotICAgICAgICAgICAgc2V0UG9pbnQoICJuMyIsIC0gdywg
ICBoLCAtIDEgKTsKLSAgICAgICAgICAgIHNldFBvaW50KCAibjQiLCAgIHcsICAgaCwgLSAxICk7
CisgICAgICAgICAgICBzZXRQb2ludCggJ24xJywgLSB3LCAtIGgsIC0gMSApOworICAgICAgICAg
ICAgc2V0UG9pbnQoICduMicsIHcsIC0gaCwgLSAxICk7CisgICAgICAgICAgICBzZXRQb2ludCgg
J24zJywgLSB3LCBoLCAtIDEgKTsKKyAgICAgICAgICAgIHNldFBvaW50KCAnbjQnLCB3LCBoLCAt
IDEgKTsKIAogICAgICAgICAgICAgLy8gZmFyCiAKLSAgICAgICAgICAgIHNldFBvaW50KCAiZjEi
LCAtIHcsIC0gaCwgMSApOwotICAgICAgICAgICAgc2V0UG9pbnQoICJmMiIsICAgdywgLSBoLCAx
ICk7Ci0gICAgICAgICAgICBzZXRQb2ludCggImYzIiwgLSB3LCAgIGgsIDEgKTsKLSAgICAgICAg
ICAgIHNldFBvaW50KCAiZjQiLCAgIHcsICAgaCwgMSApOworICAgICAgICAgICAgc2V0UG9pbnQo
ICdmMScsIC0gdywgLSBoLCAxICk7CisgICAgICAgICAgICBzZXRQb2ludCggJ2YyJywgdywgLSBo
LCAxICk7CisgICAgICAgICAgICBzZXRQb2ludCggJ2YzJywgLSB3LCBoLCAxICk7CisgICAgICAg
ICAgICBzZXRQb2ludCggJ2Y0JywgdywgaCwgMSApOwogCiAgICAgICAgICAgICAvLyB1cAogCi0g
ICAgICAgICAgICBzZXRQb2ludCggInUxIiwgICB3ICogMC43LCBoICogMS4xLCAtIDEgKTsKLSAg
ICAgICAgICAgIHNldFBvaW50KCAidTIiLCAtIHcgKiAwLjcsIGggKiAxLjEsIC0gMSApOwotICAg
ICAgICAgICAgc2V0UG9pbnQoICJ1MyIsICAgICAgICAgMCwgaCAqIDIsICAgLSAxICk7CisgICAg
ICAgICAgICBzZXRQb2ludCggJ3UxJywgdyAqIDAuNywgaCAqIDEuMSwgLSAxICk7CisgICAgICAg
ICAgICBzZXRQb2ludCggJ3UyJywgLSB3ICogMC43LCBoICogMS4xLCAtIDEgKTsKKyAgICAgICAg
ICAgIHNldFBvaW50KCAndTMnLCAwLCBoICogMiwgLSAxICk7CiAKICAgICAgICAgICAgIC8vIGNy
b3NzCiAKLSAgICAgICAgICAgIHNldFBvaW50KCAiY2YxIiwgLSB3LCAgIDAsIDEgKTsKLSAgICAg
ICAgICAgIHNldFBvaW50KCAiY2YyIiwgICB3LCAgIDAsIDEgKTsKLSAgICAgICAgICAgIHNldFBv
aW50KCAiY2YzIiwgICAwLCAtIGgsIDEgKTsKLSAgICAgICAgICAgIHNldFBvaW50KCAiY2Y0Iiwg
ICAwLCAgIGgsIDEgKTsKKyAgICAgICAgICAgIHNldFBvaW50KCAnY2YxJywgLSB3LCAwLCAxICk7
CisgICAgICAgICAgICBzZXRQb2ludCggJ2NmMicsIHcsIDAsIDEgKTsKKyAgICAgICAgICAgIHNl
dFBvaW50KCAnY2YzJywgMCwgLSBoLCAxICk7CisgICAgICAgICAgICBzZXRQb2ludCggJ2NmNCcs
IDAsIGgsIDEgKTsKIAotICAgICAgICAgICAgc2V0UG9pbnQoICJjbjEiLCAtIHcsICAgMCwgLSAx
ICk7Ci0gICAgICAgICAgICBzZXRQb2ludCggImNuMiIsICAgdywgICAwLCAtIDEgKTsKLSAgICAg
ICAgICAgIHNldFBvaW50KCAiY24zIiwgICAwLCAtIGgsIC0gMSApOwotICAgICAgICAgICAgc2V0
UG9pbnQoICJjbjQiLCAgIDAsICAgaCwgLSAxICk7CisgICAgICAgICAgICBzZXRQb2ludCggJ2Nu
MScsIC0gdywgMCwgLSAxICk7CisgICAgICAgICAgICBzZXRQb2ludCggJ2NuMicsIHcsIDAsIC0g
MSApOworICAgICAgICAgICAgc2V0UG9pbnQoICdjbjMnLCAwLCAtIGgsIC0gMSApOworICAgICAg
ICAgICAgc2V0UG9pbnQoICdjbjQnLCAwLCBoLCAtIDEgKTsKIAogICAgICAgICAgICAgZ2VvbWV0
cnkuZ2V0QXR0cmlidXRlKCAncG9zaXRpb24nICkubmVlZHNVcGRhdGUgPSB0cnVlOwogCkBAIC00
MTc5NiwxMCArNDQ5NDEsMTAgQEAKICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2Vv
bWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjsKICAgICAgICAgICAgIHZhciBhcnJheSA9IHBvc2l0
aW9uLmFycmF5OwogCi0gICAgICAgICAgICBhcnJheVsgIDAgXSA9IG1heC54OyBhcnJheVsgIDEg
XSA9IG1heC55OyBhcnJheVsgIDIgXSA9IG1heC56OwotICAgICAgICAgICAgYXJyYXlbICAzIF0g
PSBtaW4ueDsgYXJyYXlbICA0IF0gPSBtYXgueTsgYXJyYXlbICA1IF0gPSBtYXguejsKLSAgICAg
ICAgICAgIGFycmF5WyAgNiBdID0gbWluLng7IGFycmF5WyAgNyBdID0gbWluLnk7IGFycmF5WyAg
OCBdID0gbWF4Lno7Ci0gICAgICAgICAgICBhcnJheVsgIDkgXSA9IG1heC54OyBhcnJheVsgMTAg
XSA9IG1pbi55OyBhcnJheVsgMTEgXSA9IG1heC56OworICAgICAgICAgICAgYXJyYXlbIDAgXSA9
IG1heC54OyBhcnJheVsgMSBdID0gbWF4Lnk7IGFycmF5WyAyIF0gPSBtYXguejsKKyAgICAgICAg
ICAgIGFycmF5WyAzIF0gPSBtaW4ueDsgYXJyYXlbIDQgXSA9IG1heC55OyBhcnJheVsgNSBdID0g
bWF4Lno7CisgICAgICAgICAgICBhcnJheVsgNiBdID0gbWluLng7IGFycmF5WyA3IF0gPSBtaW4u
eTsgYXJyYXlbIDggXSA9IG1heC56OworICAgICAgICAgICAgYXJyYXlbIDkgXSA9IG1heC54OyBh
cnJheVsgMTAgXSA9IG1pbi55OyBhcnJheVsgMTEgXSA9IG1heC56OwogICAgICAgICAgICAgYXJy
YXlbIDEyIF0gPSBtYXgueDsgYXJyYXlbIDEzIF0gPSBtYXgueTsgYXJyYXlbIDE0IF0gPSBtaW4u
ejsKICAgICAgICAgICAgIGFycmF5WyAxNSBdID0gbWluLng7IGFycmF5WyAxNiBdID0gbWF4Lnk7
IGFycmF5WyAxNyBdID0gbWluLno7CiAgICAgICAgICAgICBhcnJheVsgMTggXSA9IG1pbi54OyBh
cnJheVsgMTkgXSA9IG1pbi55OyBhcnJheVsgMjAgXSA9IG1pbi56OwpAQCAtNDE4MjIsNiArNDQ5
NjcsMTA2IEBACiAKICAgICB9OwogCisgICAgLyoqCisgICAgICogQGF1dGhvciBXZXN0TGFuZ2xl
eSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICovCisKKyAgICBmdW5jdGlv
biBCb3gzSGVscGVyKCBib3gsIGhleCApIHsKKworICAgICAgICB0aGlzLnR5cGUgPSAnQm94M0hl
bHBlcic7CisKKyAgICAgICAgdGhpcy5ib3ggPSBib3g7CisKKyAgICAgICAgdmFyIGNvbG9yID0g
KCBoZXggIT09IHVuZGVmaW5lZCApID8gaGV4IDogMHhmZmZmMDA7CisKKyAgICAgICAgdmFyIGlu
ZGljZXMgPSBuZXcgVWludDE2QXJyYXkoIFsgMCwgMSwgMSwgMiwgMiwgMywgMywgMCwgNCwgNSwg
NSwgNiwgNiwgNywgNywgNCwgMCwgNCwgMSwgNSwgMiwgNiwgMywgNyBdICk7CisKKyAgICAgICAg
dmFyIHBvc2l0aW9ucyA9IFsgMSwgMSwgMSwgLSAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgLSAx
LCAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgLSAxLCAtIDEsIC0gMSwgLSAxLCAxLCAtIDEsIC0gMSBd
OworCisgICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOworCisgICAg
ICAgIGdlb21ldHJ5LnNldEluZGV4KCBuZXcgQnVmZmVyQXR0cmlidXRlKCBpbmRpY2VzLCAxICkg
KTsKKworICAgICAgICBnZW9tZXRyeS5hZGRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBGbG9h
dDMyQnVmZmVyQXR0cmlidXRlKCBwb3NpdGlvbnMsIDMgKSApOworCisgICAgICAgIExpbmVTZWdt
ZW50cy5jYWxsKCB0aGlzLCBnZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGNvbG9y
OiBjb2xvciB9ICkgKTsKKworICAgICAgICB0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1Nw
aGVyZSgpOworCisgICAgfQorCisgICAgQm94M0hlbHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3Jl
YXRlKCBMaW5lU2VnbWVudHMucHJvdG90eXBlICk7CisgICAgQm94M0hlbHBlci5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBCb3gzSGVscGVyOworCisgICAgQm94M0hlbHBlci5wcm90b3R5cGUudXBk
YXRlTWF0cml4V29ybGQgPSBmdW5jdGlvbiAoIGZvcmNlICkgeworCisgICAgICAgIHZhciBib3gg
PSB0aGlzLmJveDsKKworICAgICAgICBpZiAoIGJveC5pc0VtcHR5KCkgKSByZXR1cm47CisKKyAg
ICAgICAgYm94LmdldENlbnRlciggdGhpcy5wb3NpdGlvbiApOworCisgICAgICAgIGJveC5nZXRT
aXplKCB0aGlzLnNjYWxlICk7CisKKyAgICAgICAgdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhcigg
MC41ICk7CisKKyAgICAgICAgT2JqZWN0M0QucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNh
bGwoIHRoaXMsIGZvcmNlICk7CisKKyAgICB9OworCisgICAgLyoqCisgICAgICogQGF1dGhvciBX
ZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5CisgICAgICovCisKKyAg
ICBmdW5jdGlvbiBQbGFuZUhlbHBlciggcGxhbmUsIHNpemUsIGhleCApIHsKKworICAgICAgICB0
aGlzLnR5cGUgPSAnUGxhbmVIZWxwZXInOworCisgICAgICAgIHRoaXMucGxhbmUgPSBwbGFuZTsK
KworICAgICAgICB0aGlzLnNpemUgPSAoIHNpemUgPT09IHVuZGVmaW5lZCApID8gMSA6IHNpemU7
CisKKyAgICAgICAgdmFyIGNvbG9yID0gKCBoZXggIT09IHVuZGVmaW5lZCApID8gaGV4IDogMHhm
ZmZmMDA7CisKKyAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFsgMSwgLSAxLCAxLCAtIDEsIDEsIDEs
IC0gMSwgLSAxLCAxLCAxLCAxLCAxLCAtIDEsIDEsIDEsIC0gMSwgLSAxLCAxLCAxLCAtIDEsIDEs
IDEsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAgXTsKKworICAgICAgICB2YXIgZ2VvbWV0cnkgPSBu
ZXcgQnVmZmVyR2VvbWV0cnkoKTsKKyAgICAgICAgZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCAncG9z
aXRpb24nLCBuZXcgRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25zLCAzICkgKTsKKyAg
ICAgICAgZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7CisKKyAgICAgICAgTGluZS5j
YWxsKCB0aGlzLCBnZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBjb2xv
ciB9ICkgKTsKKworICAgICAgICAvLworCisgICAgICAgIHZhciBwb3NpdGlvbnMyID0gWyAxLCAx
LCAxLCAtIDEsIDEsIDEsIC0gMSwgLSAxLCAxLCAxLCAxLCAxLCAtIDEsIC0gMSwgMSwgMSwgLSAx
LCAxIF07CisKKyAgICAgICAgdmFyIGdlb21ldHJ5MiA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOwor
ICAgICAgICBnZW9tZXRyeTIuYWRkQXR0cmlidXRlKCAncG9zaXRpb24nLCBuZXcgRmxvYXQzMkJ1
ZmZlckF0dHJpYnV0ZSggcG9zaXRpb25zMiwgMyApICk7CisgICAgICAgIGdlb21ldHJ5Mi5jb21w
dXRlQm91bmRpbmdTcGhlcmUoKTsKKworICAgICAgICB0aGlzLmFkZCggbmV3IE1lc2goIGdlb21l
dHJ5MiwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKCB7IGNvbG9yOiBjb2xvciwgb3BhY2l0eTogMC4y
LCB0cmFuc3BhcmVudDogdHJ1ZSwgZGVwdGhXcml0ZTogZmFsc2UgfSApICkgKTsKKworICAgIH0K
KworICAgIFBsYW5lSGVscGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIExpbmUucHJvdG90
eXBlICk7CisgICAgUGxhbmVIZWxwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGxhbmVIZWxw
ZXI7CisKKyAgICBQbGFuZUhlbHBlci5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQgPSBmdW5j
dGlvbiAoIGZvcmNlICkgeworCisgICAgICAgIHZhciBzY2FsZSA9IC0gdGhpcy5wbGFuZS5jb25z
dGFudDsKKworICAgICAgICBpZiAoIE1hdGguYWJzKCBzY2FsZSApIDwgMWUtOCApIHNjYWxlID0g
MWUtODsgLy8gc2lnbiBkb2VzIG5vdCBtYXR0ZXIKKworICAgICAgICB0aGlzLnNjYWxlLnNldCgg
MC41ICogdGhpcy5zaXplLCAwLjUgKiB0aGlzLnNpemUsIHNjYWxlICk7CisKKyAgICAgICAgdGhp
cy5jaGlsZHJlblsgMCBdLm1hdGVyaWFsLnNpZGUgPSAoIHNjYWxlIDwgMCApID8gQmFja1NpZGUg
OiBGcm9udFNpZGU7IC8vIHJlbmRlcmVyIGZsaXBzIHNpZGUgd2hlbiBkZXRlcm1pbmFudCA8IDA7
IGZsaXBwaW5nIG5vdCB3YW50ZWQgaGVyZQorCisgICAgICAgIHRoaXMubG9va0F0KCB0aGlzLnBs
YW5lLm5vcm1hbCApOworCisgICAgICAgIE9iamVjdDNELnByb3RvdHlwZS51cGRhdGVNYXRyaXhX
b3JsZC5jYWxsKCB0aGlzLCBmb3JjZSApOworCisgICAgfTsKKwogICAgIC8qKgogICAgICAqIEBh
dXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleQogICAgICAq
IEBhdXRob3Igeno4NSAvIGh0dHA6Ly9naXRodWIuY29tL3p6ODUKQEAgLTQxODM4LDggKzQ1MDgz
LDcgQEAKICAgICAgKiAgaGVhZFdpZHRoIC0gTnVtYmVyCiAgICAgICovCiAKLSAgICB2YXIgbGlu
ZUdlb21ldHJ5OwotICAgIHZhciBjb25lR2VvbWV0cnk7CisgICAgdmFyIGxpbmVHZW9tZXRyeSwg
Y29uZUdlb21ldHJ5OwogCiAgICAgZnVuY3Rpb24gQXJyb3dIZWxwZXIoIGRpciwgb3JpZ2luLCBs
ZW5ndGgsIGNvbG9yLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGggKSB7CiAKQEAgLTQxOTM3LDIwICs0
NTE4MSwyMCBAQAogICAgICAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vCiAg
ICAgICovCiAKLSAgICBmdW5jdGlvbiBBeGlzSGVscGVyKCBzaXplICkgeworICAgIGZ1bmN0aW9u
IEF4ZXNIZWxwZXIoIHNpemUgKSB7CiAKICAgICAgICAgc2l6ZSA9IHNpemUgfHwgMTsKIAogICAg
ICAgICB2YXIgdmVydGljZXMgPSBbCi0gICAgICAgICAgICAwLCAwLCAwLCAgc2l6ZSwgMCwgMCwK
LSAgICAgICAgICAgIDAsIDAsIDAsICAwLCBzaXplLCAwLAotICAgICAgICAgICAgMCwgMCwgMCwg
IDAsIDAsIHNpemUKKyAgICAgICAgICAgIDAsIDAsIDAsICAgIHNpemUsIDAsIDAsCisgICAgICAg
ICAgICAwLCAwLCAwLCAgICAwLCBzaXplLCAwLAorICAgICAgICAgICAgMCwgMCwgMCwgICAgMCwg
MCwgc2l6ZQogICAgICAgICBdOwogCiAgICAgICAgIHZhciBjb2xvcnMgPSBbCi0gICAgICAgICAg
ICAxLCAwLCAwLCAgMSwgMC42LCAwLAotICAgICAgICAgICAgMCwgMSwgMCwgIDAuNiwgMSwgMCwK
LSAgICAgICAgICAgIDAsIDAsIDEsICAwLCAwLjYsIDEKKyAgICAgICAgICAgIDEsIDAsIDAsICAg
IDEsIDAuNiwgMCwKKyAgICAgICAgICAgIDAsIDEsIDAsICAgIDAuNiwgMSwgMCwKKyAgICAgICAg
ICAgIDAsIDAsIDEsICAgIDAsIDAuNiwgMQogICAgICAgICBdOwogCiAgICAgICAgIHZhciBnZW9t
ZXRyeSA9IG5ldyBCdWZmZXJHZW9tZXRyeSgpOwpAQCAtNDE5NjMsMzE0ICs0NTIwNyw4IEBACiAK
ICAgICB9CiAKLSAgICBBeGlzSGVscGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIExpbmVT
ZWdtZW50cy5wcm90b3R5cGUgKTsKLSAgICBBeGlzSGVscGVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IEF4aXNIZWxwZXI7Ci0KLSAgICAvKioKLSAgICAgKiBAYXV0aG9yIHp6ODUgaHR0cHM6Ly9n
aXRodWIuY29tL3p6ODUKLSAgICAgKgotICAgICAqIENlbnRyaXBldGFsIENhdG11bGxSb20gQ3Vy
dmUgLSB3aGljaCBpcyB1c2VmdWwgZm9yIGF2b2lkaW5nCi0gICAgICogY3VzcHMgYW5kIHNlbGYt
aW50ZXJzZWN0aW9ucyBpbiBub24tdW5pZm9ybSBjYXRtdWxsIHJvbSBjdXJ2ZXMuCi0gICAgICog
aHR0cDovL3d3dy5jZW15dWtzZWwuY29tL3Jlc2VhcmNoL2NhdG11bGxyb21fcGFyYW0vY2F0bXVs
bHJvbS5wZGYKLSAgICAgKgotICAgICAqIGN1cnZlLnR5cGUgYWNjZXB0cyBjZW50cmlwZXRhbChk
ZWZhdWx0KSwgY2hvcmRhbCBhbmQgY2F0bXVsbHJvbQotICAgICAqIGN1cnZlLnRlbnNpb24gaXMg
dXNlZCBmb3IgY2F0bXVsbHJvbSB3aGljaCBkZWZhdWx0cyB0byAwLjUKLSAgICAgKi8KLQotCi0g
ICAgLyoKLSAgICBCYXNlZCBvbiBhbiBvcHRpbWl6ZWQgYysrIHNvbHV0aW9uIGluCi0gICAgIC0g
aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NDg5NzM2L2NhdG11bGwtcm9tLWN1
cnZlLXdpdGgtbm8tY3VzcHMtYW5kLW5vLXNlbGYtaW50ZXJzZWN0aW9ucy8KLSAgICAgLSBodHRw
Oi8vaWRlb25lLmNvbS9Ob0ViVk0KLQotICAgIFRoaXMgQ3ViaWNQb2x5IGNsYXNzIGNvdWxkIGJl
IHVzZWQgZm9yIHJldXNpbmcgc29tZSB2YXJpYWJsZXMgYW5kIGNhbGN1bGF0aW9ucywKLSAgICBi
dXQgZm9yIHRocmVlLmpzIGN1cnZlIHVzZSwgaXQgY291bGQgYmUgcG9zc2libGUgaW5saW5lZCBh
bmQgZmxhdHRlbiBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwKLSAgICB3aGljaCBjYW4gYmUg
cGxhY2VkIGluIEN1cnZlVXRpbHMuCi0gICAgKi8KLQotICAgIGZ1bmN0aW9uIEN1YmljUG9seSgp
IHsKLQotICAgICAgICB2YXIgYzAgPSAwLCBjMSA9IDAsIGMyID0gMCwgYzMgPSAwOwotCi0gICAg
ICAgIC8qCi0gICAgICAgICAqIENvbXB1dGUgY29lZmZpY2llbnRzIGZvciBhIGN1YmljIHBvbHlu
b21pYWwKLSAgICAgICAgICogICBwKHMpID0gYzAgKyBjMSpzICsgYzIqc14yICsgYzMqc14zCi0g
ICAgICAgICAqIHN1Y2ggdGhhdAotICAgICAgICAgKiAgIHAoMCkgPSB4MCwgcCgxKSA9IHgxCi0g
ICAgICAgICAqICBhbmQKLSAgICAgICAgICogICBwJygwKSA9IHQwLCBwJygxKSA9IHQxLgotICAg
ICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaW5pdCggeDAsIHgxLCB0MCwgdDEgKSB7Ci0KLSAg
ICAgICAgICAgIGMwID0geDA7Ci0gICAgICAgICAgICBjMSA9IHQwOwotICAgICAgICAgICAgYzIg
PSAtIDMgKiB4MCArIDMgKiB4MSAtIDIgKiB0MCAtIHQxOwotICAgICAgICAgICAgYzMgPSAyICog
eDAgLSAyICogeDEgKyB0MCArIHQxOwotCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewot
Ci0gICAgICAgICAgICBpbml0Q2F0bXVsbFJvbTogZnVuY3Rpb24gKCB4MCwgeDEsIHgyLCB4Mywg
dGVuc2lvbiApIHsKLQotICAgICAgICAgICAgICAgIGluaXQoIHgxLCB4MiwgdGVuc2lvbiAqICgg
eDIgLSB4MCApLCB0ZW5zaW9uICogKCB4MyAtIHgxICkgKTsKLQotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOiBmdW5jdGlvbiAoIHgwLCB4MSwg
eDIsIHgzLCBkdDAsIGR0MSwgZHQyICkgewotCi0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0
YW5nZW50cyB3aGVuIHBhcmFtZXRlcml6ZWQgaW4gW3QxLHQyXQotICAgICAgICAgICAgICAgIHZh
ciB0MSA9ICggeDEgLSB4MCApIC8gZHQwIC0gKCB4MiAtIHgwICkgLyAoIGR0MCArIGR0MSApICsg
KCB4MiAtIHgxICkgLyBkdDE7Ci0gICAgICAgICAgICAgICAgdmFyIHQyID0gKCB4MiAtIHgxICkg
LyBkdDEgLSAoIHgzIC0geDEgKSAvICggZHQxICsgZHQyICkgKyAoIHgzIC0geDIgKSAvIGR0MjsK
LQotICAgICAgICAgICAgICAgIC8vIHJlc2NhbGUgdGFuZ2VudHMgZm9yIHBhcmFtZXRyaXphdGlv
biBpbiBbMCwxXQotICAgICAgICAgICAgICAgIHQxICo9IGR0MTsKLSAgICAgICAgICAgICAgICB0
MiAqPSBkdDE7Ci0KLSAgICAgICAgICAgICAgICBpbml0KCB4MSwgeDIsIHQxLCB0MiApOwotCi0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjYWxjOiBmdW5jdGlvbiAoIHQgKSB7Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgdDIgPSB0ICogdDsKLSAgICAgICAgICAgICAgICB2YXIgdDMgPSB0
MiAqIHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGMwICsgYzEgKiB0ICsgYzIgKiB0MiArIGMz
ICogdDM7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9OwotCi0gICAgfQotCi0gICAgLy8K
LQotICAgIHZhciB0bXAgPSBuZXcgVmVjdG9yMygpOwotICAgIHZhciBweCA9IG5ldyBDdWJpY1Bv
bHkoKTsKLSAgICB2YXIgcHkgPSBuZXcgQ3ViaWNQb2x5KCk7Ci0gICAgdmFyIHB6ID0gbmV3IEN1
YmljUG9seSgpOwotCi0gICAgZnVuY3Rpb24gQ2F0bXVsbFJvbUN1cnZlMyggcG9pbnRzICkgewot
Ci0gICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKLQotICAgICAgICBpZiAoIHBvaW50cy5sZW5n
dGggPCAyICkgY29uc29sZS53YXJuKCAnVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMzogUG9pbnRzIGFy
cmF5IG5lZWRzIGF0IGxlYXN0IHR3byBlbnRyaWVzLicgKTsKLQotICAgICAgICB0aGlzLnBvaW50
cyA9IHBvaW50cyB8fCBbXTsKLSAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKLQotICAgIH0K
LQotICAgIENhdG11bGxSb21DdXJ2ZTMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ3VydmUu
cHJvdG90eXBlICk7Ci0gICAgQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PSBDYXRtdWxsUm9tQ3VydmUzOwotCi0gICAgQ2F0bXVsbFJvbUN1cnZlMy5wcm90b3R5cGUuZ2V0
UG9pbnQgPSBmdW5jdGlvbiAoIHQgKSB7Ci0KLSAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMucG9p
bnRzOwotICAgICAgICB2YXIgbCA9IHBvaW50cy5sZW5ndGg7Ci0KLSAgICAgICAgdmFyIHBvaW50
ID0gKCBsIC0gKCB0aGlzLmNsb3NlZCA/IDAgOiAxICkgKSAqIHQ7Ci0gICAgICAgIHZhciBpbnRQ
b2ludCA9IE1hdGguZmxvb3IoIHBvaW50ICk7Ci0gICAgICAgIHZhciB3ZWlnaHQgPSBwb2ludCAt
IGludFBvaW50OwotCi0gICAgICAgIGlmICggdGhpcy5jbG9zZWQgKSB7Ci0KLSAgICAgICAgICAg
IGludFBvaW50ICs9IGludFBvaW50ID4gMCA/IDAgOiAoIE1hdGguZmxvb3IoIE1hdGguYWJzKCBp
bnRQb2ludCApIC8gcG9pbnRzLmxlbmd0aCApICsgMSApICogcG9pbnRzLmxlbmd0aDsKLQotICAg
ICAgICB9IGVsc2UgaWYgKCB3ZWlnaHQgPT09IDAgJiYgaW50UG9pbnQgPT09IGwgLSAxICkgewot
Ci0gICAgICAgICAgICBpbnRQb2ludCA9IGwgLSAyOwotICAgICAgICAgICAgd2VpZ2h0ID0gMTsK
LQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHAwLCBwMSwgcDIsIHAzOyAvLyA0IHBvaW50cwot
Ci0gICAgICAgIGlmICggdGhpcy5jbG9zZWQgfHwgaW50UG9pbnQgPiAwICkgewotCi0gICAgICAg
ICAgICBwMCA9IHBvaW50c1sgKCBpbnRQb2ludCAtIDEgKSAlIGwgXTsKLQotICAgICAgICB9IGVs
c2UgewotCi0gICAgICAgICAgICAvLyBleHRyYXBvbGF0ZSBmaXJzdCBwb2ludAotICAgICAgICAg
ICAgdG1wLnN1YlZlY3RvcnMoIHBvaW50c1sgMCBdLCBwb2ludHNbIDEgXSApLmFkZCggcG9pbnRz
WyAwIF0gKTsKLSAgICAgICAgICAgIHAwID0gdG1wOwotCi0gICAgICAgIH0KLQotICAgICAgICBw
MSA9IHBvaW50c1sgaW50UG9pbnQgJSBsIF07Ci0gICAgICAgIHAyID0gcG9pbnRzWyAoIGludFBv
aW50ICsgMSApICUgbCBdOwotCi0gICAgICAgIGlmICggdGhpcy5jbG9zZWQgfHwgaW50UG9pbnQg
KyAyIDwgbCApIHsKLQotICAgICAgICAgICAgcDMgPSBwb2ludHNbICggaW50UG9pbnQgKyAyICkg
JSBsIF07Ci0KLSAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgLy8gZXh0cmFwb2xhdGUg
bGFzdCBwb2ludAotICAgICAgICAgICAgdG1wLnN1YlZlY3RvcnMoIHBvaW50c1sgbCAtIDEgXSwg
cG9pbnRzWyBsIC0gMiBdICkuYWRkKCBwb2ludHNbIGwgLSAxIF0gKTsKLSAgICAgICAgICAgIHAz
ID0gdG1wOwotCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gdW5kZWZp
bmVkIHx8IHRoaXMudHlwZSA9PT0gJ2NlbnRyaXBldGFsJyB8fCB0aGlzLnR5cGUgPT09ICdjaG9y
ZGFsJyApIHsKLQotICAgICAgICAgICAgLy8gaW5pdCBDZW50cmlwZXRhbCAvIENob3JkYWwgQ2F0
bXVsbC1Sb20KLSAgICAgICAgICAgIHZhciBwb3cgPSB0aGlzLnR5cGUgPT09ICdjaG9yZGFsJyA/
IDAuNSA6IDAuMjU7Ci0gICAgICAgICAgICB2YXIgZHQwID0gTWF0aC5wb3coIHAwLmRpc3RhbmNl
VG9TcXVhcmVkKCBwMSApLCBwb3cgKTsKLSAgICAgICAgICAgIHZhciBkdDEgPSBNYXRoLnBvdygg
cDEuZGlzdGFuY2VUb1NxdWFyZWQoIHAyICksIHBvdyApOwotICAgICAgICAgICAgdmFyIGR0MiA9
IE1hdGgucG93KCBwMi5kaXN0YW5jZVRvU3F1YXJlZCggcDMgKSwgcG93ICk7Ci0KLSAgICAgICAg
ICAgIC8vIHNhZmV0eSBjaGVjayBmb3IgcmVwZWF0ZWQgcG9pbnRzCi0gICAgICAgICAgICBpZiAo
IGR0MSA8IDFlLTQgKSBkdDEgPSAxLjA7Ci0gICAgICAgICAgICBpZiAoIGR0MCA8IDFlLTQgKSBk
dDAgPSBkdDE7Ci0gICAgICAgICAgICBpZiAoIGR0MiA8IDFlLTQgKSBkdDIgPSBkdDE7Ci0KLSAg
ICAgICAgICAgIHB4LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbSggcDAueCwgcDEueCwgcDIueCwg
cDMueCwgZHQwLCBkdDEsIGR0MiApOwotICAgICAgICAgICAgcHkuaW5pdE5vbnVuaWZvcm1DYXRt
dWxsUm9tKCBwMC55LCBwMS55LCBwMi55LCBwMy55LCBkdDAsIGR0MSwgZHQyICk7Ci0gICAgICAg
ICAgICBwei5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oIHAwLnosIHAxLnosIHAyLnosIHAzLnos
IGR0MCwgZHQxLCBkdDIgKTsKLQotICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLnR5cGUgPT09ICdj
YXRtdWxscm9tJyApIHsKLQotICAgICAgICAgICAgdmFyIHRlbnNpb24gPSB0aGlzLnRlbnNpb24g
IT09IHVuZGVmaW5lZCA/IHRoaXMudGVuc2lvbiA6IDAuNTsKLSAgICAgICAgICAgIHB4LmluaXRD
YXRtdWxsUm9tKCBwMC54LCBwMS54LCBwMi54LCBwMy54LCB0ZW5zaW9uICk7Ci0gICAgICAgICAg
ICBweS5pbml0Q2F0bXVsbFJvbSggcDAueSwgcDEueSwgcDIueSwgcDMueSwgdGVuc2lvbiApOwot
ICAgICAgICAgICAgcHouaW5pdENhdG11bGxSb20oIHAwLnosIHAxLnosIHAyLnosIHAzLnosIHRl
bnNpb24gKTsKLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKCBweC5j
YWxjKCB3ZWlnaHQgKSwgcHkuY2FsYyggd2VpZ2h0ICksIHB6LmNhbGMoIHdlaWdodCApICk7Ci0K
LSAgICB9OwotCi0gICAgZnVuY3Rpb24gQ3ViaWNCZXppZXJDdXJ2ZTMoIHYwLCB2MSwgdjIsIHYz
ICkgewotCi0gICAgICAgIEN1cnZlLmNhbGwoIHRoaXMgKTsKLQotICAgICAgICB0aGlzLnYwID0g
djA7Ci0gICAgICAgIHRoaXMudjEgPSB2MTsKLSAgICAgICAgdGhpcy52MiA9IHYyOwotICAgICAg
ICB0aGlzLnYzID0gdjM7Ci0KLSAgICB9Ci0KLSAgICBDdWJpY0JlemllckN1cnZlMy5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5cGUgKTsKLSAgICBDdWJpY0JlemllckN1
cnZlMy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdWJpY0JlemllckN1cnZlMzsKLQotICAgIEN1
YmljQmV6aWVyQ3VydmUzLnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCApIHsKLQot
ICAgICAgICB2YXIgdjAgPSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MiwgdjMg
PSB0aGlzLnYzOwotCi0gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygKLSAgICAgICAgICAgIEN1
YmljQmV6aWVyKCB0LCB2MC54LCB2MS54LCB2Mi54LCB2My54ICksCi0gICAgICAgICAgICBDdWJp
Y0JlemllciggdCwgdjAueSwgdjEueSwgdjIueSwgdjMueSApLAotICAgICAgICAgICAgQ3ViaWNC
ZXppZXIoIHQsIHYwLnosIHYxLnosIHYyLnosIHYzLnogKQotICAgICAgICApOwotCi0gICAgfTsK
LQotICAgIGZ1bmN0aW9uIFF1YWRyYXRpY0JlemllckN1cnZlMyggdjAsIHYxLCB2MiApIHsKLQot
ICAgICAgICBDdXJ2ZS5jYWxsKCB0aGlzICk7Ci0KLSAgICAgICAgdGhpcy52MCA9IHYwOwotICAg
ICAgICB0aGlzLnYxID0gdjE7Ci0gICAgICAgIHRoaXMudjIgPSB2MjsKLQotICAgIH0KLQotICAg
IFF1YWRyYXRpY0JlemllckN1cnZlMy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5w
cm90b3R5cGUgKTsKLSAgICBRdWFkcmF0aWNCZXppZXJDdXJ2ZTMucHJvdG90eXBlLmNvbnN0cnVj
dG9yID0gUXVhZHJhdGljQmV6aWVyQ3VydmUzOwotCi0gICAgUXVhZHJhdGljQmV6aWVyQ3VydmUz
LnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCApIHsKLQotICAgICAgICB2YXIgdjAg
PSB0aGlzLnYwLCB2MSA9IHRoaXMudjEsIHYyID0gdGhpcy52MjsKLQotICAgICAgICByZXR1cm4g
bmV3IFZlY3RvcjMoCi0gICAgICAgICAgICBRdWFkcmF0aWNCZXppZXIoIHQsIHYwLngsIHYxLngs
IHYyLnggKSwKLSAgICAgICAgICAgIFF1YWRyYXRpY0JlemllciggdCwgdjAueSwgdjEueSwgdjIu
eSApLAotICAgICAgICAgICAgUXVhZHJhdGljQmV6aWVyKCB0LCB2MC56LCB2MS56LCB2Mi56ICkK
LSAgICAgICAgKTsKLQotICAgIH07Ci0KLSAgICBmdW5jdGlvbiBMaW5lQ3VydmUzKCB2MSwgdjIg
KSB7Ci0KLSAgICAgICAgQ3VydmUuY2FsbCggdGhpcyApOwotCi0gICAgICAgIHRoaXMudjEgPSB2
MTsKLSAgICAgICAgdGhpcy52MiA9IHYyOwotCi0gICAgfQotCi0gICAgTGluZUN1cnZlMy5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBDdXJ2ZS5wcm90b3R5cGUgKTsKLSAgICBMaW5lQ3VydmUz
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExpbmVDdXJ2ZTM7Ci0KLSAgICBMaW5lQ3VydmUzLnBy
b3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uICggdCApIHsKLQotICAgICAgICBpZiAoIHQgPT09
IDEgKSB7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLnYyLmNsb25lKCk7Ci0KLSAgICAgICAg
fQotCi0gICAgICAgIHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpOwotCi0gICAgICAgIHZlY3Rv
ci5zdWJWZWN0b3JzKCB0aGlzLnYyLCB0aGlzLnYxICk7IC8vIGRpZmYKLSAgICAgICAgdmVjdG9y
Lm11bHRpcGx5U2NhbGFyKCB0ICk7Ci0gICAgICAgIHZlY3Rvci5hZGQoIHRoaXMudjEgKTsKLQot
ICAgICAgICByZXR1cm4gdmVjdG9yOwotCi0gICAgfTsKLQotICAgIGZ1bmN0aW9uIEFyY0N1cnZl
KCBhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5nbGUsIGFDbG9ja3dpc2UgKSB7
Ci0KLSAgICAgICAgRWxsaXBzZUN1cnZlLmNhbGwoIHRoaXMsIGFYLCBhWSwgYVJhZGl1cywgYVJh
ZGl1cywgYVN0YXJ0QW5nbGUsIGFFbmRBbmdsZSwgYUNsb2Nrd2lzZSApOwotCi0gICAgfQotCi0g
ICAgQXJjQ3VydmUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggRWxsaXBzZUN1cnZlLnByb3Rv
dHlwZSApOwotICAgIEFyY0N1cnZlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFyY0N1cnZlOwot
Ci0gICAgLyoqCi0gICAgICogQGF1dGhvciBhbHRlcmVkcSAvIGh0dHA6Ly9hbHRlcmVkcXVhbGlh
LmNvbS8KLSAgICAgKi8KLQotICAgIHZhciBTY2VuZVV0aWxzID0gewotCi0gICAgICAgIGNyZWF0
ZU11bHRpTWF0ZXJpYWxPYmplY3Q6IGZ1bmN0aW9uICggZ2VvbWV0cnksIG1hdGVyaWFscyApIHsK
LQotICAgICAgICAgICAgdmFyIGdyb3VwID0gbmV3IEdyb3VwKCk7Ci0KLSAgICAgICAgICAgIGZv
ciAoIHZhciBpID0gMCwgbCA9IG1hdGVyaWFscy5sZW5ndGg7IGkgPCBsOyBpICsrICkgewotCi0g
ICAgICAgICAgICAgICAgZ3JvdXAuYWRkKCBuZXcgTWVzaCggZ2VvbWV0cnksIG1hdGVyaWFsc1sg
aSBdICkgKTsKLQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZ3JvdXA7Ci0K
LSAgICAgICAgfSwKLQotICAgICAgICBkZXRhY2g6IGZ1bmN0aW9uICggY2hpbGQsIHBhcmVudCwg
c2NlbmUgKSB7Ci0KLSAgICAgICAgICAgIGNoaWxkLmFwcGx5TWF0cml4KCBwYXJlbnQubWF0cml4
V29ybGQgKTsKLSAgICAgICAgICAgIHBhcmVudC5yZW1vdmUoIGNoaWxkICk7Ci0gICAgICAgICAg
ICBzY2VuZS5hZGQoIGNoaWxkICk7Ci0KLSAgICAgICAgfSwKLQotICAgICAgICBhdHRhY2g6IGZ1
bmN0aW9uICggY2hpbGQsIHNjZW5lLCBwYXJlbnQgKSB7Ci0KLSAgICAgICAgICAgIGNoaWxkLmFw
cGx5TWF0cml4KCBuZXcgTWF0cml4NCgpLmdldEludmVyc2UoIHBhcmVudC5tYXRyaXhXb3JsZCAp
ICk7Ci0KLSAgICAgICAgICAgIHNjZW5lLnJlbW92ZSggY2hpbGQgKTsKLSAgICAgICAgICAgIHBh
cmVudC5hZGQoIGNoaWxkICk7Ci0KLSAgICAgICAgfQotCi0gICAgfTsKKyAgICBBeGVzSGVscGVy
LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIExpbmVTZWdtZW50cy5wcm90b3R5cGUgKTsKKyAg
ICBBeGVzSGVscGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEF4ZXNIZWxwZXI7CiAKICAgICAv
KioKICAgICAgKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tLwpAQCAtNDI0NDcs
NiArNDUzODUsNjQgQEAKIAogICAgIC8vCiAKKyAgICBPYmplY3QuYXNzaWduKCBDdXJ2ZVBhdGgu
cHJvdG90eXBlLCB7CisKKyAgICAgICAgY3JlYXRlUG9pbnRzR2VvbWV0cnk6IGZ1bmN0aW9uICgg
ZGl2aXNpb25zICkgeworCisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5DdXJ2ZVBh
dGg6IC5jcmVhdGVQb2ludHNHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhS
RUUuR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKCBwb2ludHMgKSBpbnN0ZWFkLicgKTsKKworICAg
ICAgICAgICAgLy8gZ2VuZXJhdGUgZ2VvbWV0cnkgZnJvbSBwYXRoIHBvaW50cyAoZm9yIExpbmUg
b3IgUG9pbnRzIG9iamVjdHMpCisKKyAgICAgICAgICAgIHZhciBwdHMgPSB0aGlzLmdldFBvaW50
cyggZGl2aXNpb25zICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeSgg
cHRzICk7CisKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTcGFjZWRQb2ludHNHZW9tZXRy
eTogZnVuY3Rpb24gKCBkaXZpc2lvbnMgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2Fybigg
J1RIUkVFLkN1cnZlUGF0aDogLmNyZWF0ZVNwYWNlZFBvaW50c0dlb21ldHJ5KCkgaGFzIGJlZW4g
cmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5HZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIHBvaW50cyAp
IGluc3RlYWQuJyApOworCisgICAgICAgICAgICAvLyBnZW5lcmF0ZSBnZW9tZXRyeSBmcm9tIGVx
dWlkaXN0YW50IHNhbXBsaW5nIGFsb25nIHRoZSBwYXRoCisKKyAgICAgICAgICAgIHZhciBwdHMg
PSB0aGlzLmdldFNwYWNlZFBvaW50cyggZGl2aXNpb25zICk7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5jcmVhdGVHZW9tZXRyeSggcHRzICk7CisKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVHZW9tZXRyeTogZnVuY3Rpb24gKCBwb2ludHMgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggJ1RIUkVFLkN1cnZlUGF0aDogLmNyZWF0ZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3Zl
ZC4gVXNlIG5ldyBUSFJFRS5HZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIHBvaW50cyApIGluc3Rl
YWQuJyApOworCisgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoKTsKKwor
ICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGw7IGkg
KysgKSB7CisKKyAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwb2ludHNbIGkgXTsKKyAgICAg
ICAgICAgICAgICBnZW9tZXRyeS52ZXJ0aWNlcy5wdXNoKCBuZXcgVmVjdG9yMyggcG9pbnQueCwg
cG9pbnQueSwgcG9pbnQueiB8fCAwICkgKTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZ2VvbWV0cnk7CisKKyAgICAgICAgfQorCisgICAgfSApOworCisgICAgLy8KKwor
ICAgIE9iamVjdC5hc3NpZ24oIFBhdGgucHJvdG90eXBlLCB7CisKKyAgICAgICAgZnJvbVBvaW50
czogZnVuY3Rpb24gKCBwb2ludHMgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RI
UkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50
cygpLicgKTsKKyAgICAgICAgICAgIHRoaXMuc2V0RnJvbVBvaW50cyggcG9pbnRzICk7CisKKyAg
ICAgICAgfQorCisgICAgfSApOworCisgICAgLy8KKwogICAgIGZ1bmN0aW9uIENsb3NlZFNwbGlu
ZUN1cnZlMyggcG9pbnRzICkgewogCiAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkNsb3Nl
ZFNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1
cnZlMyBpbnN0ZWFkLicgKTsKQEAgLTQyNDg3LDE3ICs0NTQ4MywxNyBAQAogCiAgICAgT2JqZWN0
LmFzc2lnbiggU3BsaW5lLnByb3RvdHlwZSwgewogCi0gICAgICAgIGluaXRGcm9tQXJyYXk6IGZ1
bmN0aW9uICggYSApIHsKKyAgICAgICAgaW5pdEZyb21BcnJheTogZnVuY3Rpb24gKCAvKiBhICov
ICkgewogCiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuU3BsaW5lOiAuaW5pdEZy
b21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApOwogCiAgICAgICAgIH0sCi0gICAgICAgIGdl
dENvbnRyb2xQb2ludHNBcnJheTogZnVuY3Rpb24gKCBvcHRpb25hbFRhcmdldCApIHsKKyAgICAg
ICAgZ2V0Q29udHJvbFBvaW50c0FycmF5OiBmdW5jdGlvbiAoIC8qIG9wdGlvbmFsVGFyZ2V0ICov
ICkgewogCiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuU3BsaW5lOiAuZ2V0Q29u
dHJvbFBvaW50c0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7CiAKICAgICAgICAgfSwKLSAg
ICAgICAgcmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoOiBmdW5jdGlvbiAoIHNhbXBsaW5nQ29lZiAp
IHsKKyAgICAgICAgcmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoOiBmdW5jdGlvbiAoIC8qIHNhbXBs
aW5nQ29lZiAqLyApIHsKIAogICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlNwbGlu
ZTogLnJlcGFyYW1ldHJpemVCeUFyY0xlbmd0aCgpIGhhcyBiZWVuIHJlbW92ZWQuJyApOwogCkBA
IC00MjUwNiw2ICs0NTUwMiwxNCBAQAogICAgIH0gKTsKIAogICAgIC8vCisKKyAgICBmdW5jdGlv
biBBeGlzSGVscGVyKCBzaXplICkgeworCisgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkF4
aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLicgKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBBeGVzSGVscGVyKCBzaXplICk7CisKKyAgICB9CisKICAgICBmdW5jdGlv
biBCb3VuZGluZ0JveEhlbHBlciggb2JqZWN0LCBjb2xvciApIHsKIAogICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5Cb3VuZGluZ0JveEhlbHBlciBoYXMgYmVlbiBkZXByZWNhdGVkLiBDcmVh
dGluZyBhIFRIUkVFLkJveEhlbHBlciBpbnN0ZWFkLicgKTsKQEAgLTQyNTQxLDYgKzQ1NTQ1LDE3
IEBACiAKICAgICAvLwogCisgICAgT2JqZWN0LmFzc2lnbiggTG9hZGVyLnByb3RvdHlwZSwgewor
CisgICAgICAgIGV4dHJhY3RVcmxCYXNlOiBmdW5jdGlvbiAoIHVybCApIHsKKworICAgICAgICAg
ICAgY29uc29sZS53YXJuKCAnVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVl
biBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0
ZWFkLicgKTsKKyAgICAgICAgICAgIHJldHVybiBMb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgg
dXJsICk7CisKKyAgICAgICAgfQorCisgICAgfSApOworCiAgICAgZnVuY3Rpb24gWEhSTG9hZGVy
KCBtYW5hZ2VyICkgewogCiAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlhIUkxvYWRlciBo
YXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuJyApOwpAQCAtNDI2MjYsMTIgKzQ1
NjQxLDMwIEBACiAKICAgICB9OwogCi0gICAgX01hdGgucmFuZG9tMTYgPSBmdW5jdGlvbiAoKSB7
CisgICAgT2JqZWN0LmFzc2lnbiggX01hdGgsIHsKIAotICAgICAgICBjb25zb2xlLndhcm4oICdU
SFJFRS5NYXRoLnJhbmRvbTE2KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIE1hdGgucmFuZG9t
KCkgaW5zdGVhZC4nICk7Ci0gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpOworICAgICAgICBy
YW5kb20xNjogZnVuY3Rpb24gKCkgewogCi0gICAgfTsKKyAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLk1hdGg6IC5yYW5kb20xNigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBNYXRo
LnJhbmRvbSgpIGluc3RlYWQuJyApOworICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCk7
CisKKyAgICAgICAgfSwKKworICAgICAgICBuZWFyZXN0UG93ZXJPZlR3bzogZnVuY3Rpb24gKCB2
YWx1ZSApIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTWF0aDogLm5lYXJl
c3RQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZmxvb3JQb3dlck9mVHdvKCkuJyAp
OworICAgICAgICAgICAgcmV0dXJuIF9NYXRoLmZsb29yUG93ZXJPZlR3byggdmFsdWUgKTsKKwor
ICAgICAgICB9LAorCisgICAgICAgIG5leHRQb3dlck9mVHdvOiBmdW5jdGlvbiAoIHZhbHVlICkg
eworCisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5NYXRoOiAubmV4dFBvd2VyT2ZU
d28oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jZWlsUG93ZXJPZlR3bygpLicgKTsKKyAgICAgICAg
ICAgIHJldHVybiBfTWF0aC5jZWlsUG93ZXJPZlR3byggdmFsdWUgKTsKKworICAgICAgICB9CisK
KyAgICB9ICk7CiAKICAgICBPYmplY3QuYXNzaWduKCBNYXRyaXgzLnByb3RvdHlwZSwgewogCkBA
IC00MjY0NywxOCArNDU2ODAsMTggQEAKICAgICAgICAgICAgIHJldHVybiB2ZWN0b3IuYXBwbHlN
YXRyaXgzKCB0aGlzICk7CiAKICAgICAgICAgfSwKLSAgICAgICAgbXVsdGlwbHlWZWN0b3IzQXJy
YXk6IGZ1bmN0aW9uICggYSApIHsKKyAgICAgICAgbXVsdGlwbHlWZWN0b3IzQXJyYXk6IGZ1bmN0
aW9uICggLyogYSAqLyApIHsKIAotICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLk1h
dHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyAgKTsKKyAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3Iz
QXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLicgKTsKIAogICAgICAgICB9LAotICAgICAgICBhcHBs
eVRvQnVmZmVyOiBmdW5jdGlvbiggYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCApIHsKKyAgICAgICAg
YXBwbHlUb0J1ZmZlcjogZnVuY3Rpb24gKCBidWZmZXIgLyosIG9mZnNldCwgbGVuZ3RoICovICkg
ewogCiAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1
ZmZlcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXguYXBwbHlUb0J1ZmZlckF0dHJpYnV0
ZSggYXR0cmlidXRlICkgaW5zdGVhZC4nICk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBs
eVRvQnVmZmVyQXR0cmlidXRlKCBidWZmZXIgKTsKIAogICAgICAgICB9LAotICAgICAgICBhcHBs
eVRvVmVjdG9yM0FycmF5OiBmdW5jdGlvbiggYXJyYXksIG9mZnNldCwgbGVuZ3RoICkgeworICAg
ICAgICBhcHBseVRvVmVjdG9yM0FycmF5OiBmdW5jdGlvbiAoIC8qIGFycmF5LCBvZmZzZXQsIGxl
bmd0aCAqLyApIHsKIAogICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDM6
IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7CiAKQEAgLTQyNzE2
LDkgKzQ1NzQ5LDkgQEAKICAgICAgICAgICAgIHJldHVybiB2ZWN0b3IuYXBwbHlNYXRyaXg0KCB0
aGlzICk7CiAKICAgICAgICAgfSwKLSAgICAgICAgbXVsdGlwbHlWZWN0b3IzQXJyYXk6IGZ1bmN0
aW9uICggYSApIHsKKyAgICAgICAgbXVsdGlwbHlWZWN0b3IzQXJyYXk6IGZ1bmN0aW9uICggLyog
YSAqLyApIHsKIAotICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5t
dWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyAgKTsKKyAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBo
YXMgYmVlbiByZW1vdmVkLicgKTsKIAogICAgICAgICB9LAogICAgICAgICByb3RhdGVBeGlzOiBm
dW5jdGlvbiAoIHYgKSB7CkBAIC00Mjc1OCwxOCArNDU3OTEsMTggQEAKICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVt
b3ZlZC4nICk7CiAKICAgICAgICAgfSwKLSAgICAgICAgYXBwbHlUb0J1ZmZlcjogZnVuY3Rpb24o
IGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGggKSB7CisgICAgICAgIGFwcGx5VG9CdWZmZXI6IGZ1bmN0
aW9uICggYnVmZmVyIC8qLCBvZmZzZXQsIGxlbmd0aCAqLyApIHsKIAogICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1v
dmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3Rl
YWQuJyApOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgg
YnVmZmVyICk7CiAKICAgICAgICAgfSwKLSAgICAgICAgYXBwbHlUb1ZlY3RvcjNBcnJheTogZnVu
Y3Rpb24oIGFycmF5LCBvZmZzZXQsIGxlbmd0aCApIHsKKyAgICAgICAgYXBwbHlUb1ZlY3RvcjNB
cnJheTogZnVuY3Rpb24gKCAvKiBhcnJheSwgb2Zmc2V0LCBsZW5ndGggKi8gKSB7CiAKICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJh
eSgpIGhhcyBiZWVuIHJlbW92ZWQuJyApOwogCiAgICAgICAgIH0sCi0gICAgICAgIG1ha2VGcnVz
dHVtOiBmdW5jdGlvbiggbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIgKSB7Cisg
ICAgICAgIG1ha2VGcnVzdHVtOiBmdW5jdGlvbiAoIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwg
bmVhciwgZmFyICkgewogCiAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0
OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSgg
bGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLicgKTsKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90
dG9tLCBuZWFyLCBmYXIgKTsKQEAgLTQyODE1LDggKzQ1ODQ4LDY2IEBACiAKICAgICB9ICk7CiAK
KyAgICBPYmplY3QuYXNzaWduKCBUcmlhbmdsZS5wcm90b3R5cGUsIHsKKworICAgICAgICBhcmVh
OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFu
Z2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4nICk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5nZXRBcmVhKCk7CisKKyAgICAgICAgfSwKKyAgICAgICAgYmFyeWNv
b3JkRnJvbVBvaW50OiBmdW5jdGlvbiAoIHBvaW50LCB0YXJnZXQgKSB7CisKKyAgICAgICAgICAg
IGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFz
IGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuJyApOworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZ2V0QmFyeWNvb3JkKCBwb2ludCwgdGFyZ2V0ICk7CisKKyAgICAgICAgfSwKKyAgICAg
ICAgbWlkcG9pbnQ6IGZ1bmN0aW9uICggdGFyZ2V0ICkgeworCisgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAu
Z2V0TWlkcG9pbnQoKS4nICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNaWRwb2ludCgg
dGFyZ2V0ICk7CisKKyAgICAgICAgfSwKKyAgICAgICAgbm9ybWFsOiBmdW5jdGlvbiAoIHRhcmdl
dCApIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVHJpYW5nbGU6IC5ub3Jt
YWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4nICk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5nZXROb3JtYWwoIHRhcmdldCApOworCisgICAgICAgIH0sCisgICAgICAgIHBs
YW5lOiBmdW5jdGlvbiAoIHRhcmdldCApIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAn
VEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCku
JyApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGxhbmUoIHRhcmdldCApOworCisgICAg
ICAgIH0KKworICAgIH0gKTsKKworICAgIE9iamVjdC5hc3NpZ24oIFRyaWFuZ2xlLCB7CisKKyAg
ICAgICAgYmFyeWNvb3JkRnJvbVBvaW50OiBmdW5jdGlvbiAoIHBvaW50LCBhLCBiLCBjLCB0YXJn
ZXQgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlRyaWFuZ2xlOiAuYmFy
eWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuJyAp
OworICAgICAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmdldEJhcnljb29yZCggcG9pbnQsIGEsIGIs
IGMsIHRhcmdldCApOworCisgICAgICAgIH0sCisgICAgICAgIG5vcm1hbDogZnVuY3Rpb24gKCBh
LCBiLCBjLCB0YXJnZXQgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlRy
aWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuJyApOwor
ICAgICAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmdldE5vcm1hbCggYSwgYiwgYywgdGFyZ2V0ICk7
CisKKyAgICAgICAgfQorCisgICAgfSApOworCiAgICAgT2JqZWN0LmFzc2lnbiggU2hhcGUucHJv
dG90eXBlLCB7CiAKKyAgICAgICAgZXh0cmFjdEFsbFBvaW50czogZnVuY3Rpb24gKCBkaXZpc2lv
bnMgKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlNoYXBlOiAuZXh0cmFj
dEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3Rl
YWQuJyApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFBvaW50cyggZGl2aXNpb25z
ICk7CisKKyAgICAgICAgfSwKICAgICAgICAgZXh0cnVkZTogZnVuY3Rpb24gKCBvcHRpb25zICkg
ewogCiAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBo
YXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4nICk7CkBAIC00
MjgzNiw5ICs0NTkyNywyMSBAQAogCiAgICAgICAgIGZyb21BdHRyaWJ1dGU6IGZ1bmN0aW9uICgg
YXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICkgewogCi0gICAgICAgICAgICBjb25zb2xlLmVycm9y
KCAnVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5m
cm9tQnVmZmVyQXR0cmlidXRlKCkuJyApOworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhS
RUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVm
ZmVyQXR0cmlidXRlKCkuJyApOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0
dHJpYnV0ZSggYXR0cmlidXRlLCBpbmRleCwgb2Zmc2V0ICk7CiAKKyAgICAgICAgfSwKKyAgICAg
ICAgZGlzdGFuY2VUb01hbmhhdHRhbjogZnVuY3Rpb24gKCB2ICkgeworCisgICAgICAgICAgICBj
b25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBi
ZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4nICk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKCB2ICk7CisKKyAgICAgICAgfSwKKyAgICAg
ICAgbGVuZ3RoTWFuaGF0dGFuOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUu
d2FybiggJ1RIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVk
IHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4nICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tYW5o
YXR0YW5MZW5ndGgoKTsKKwogICAgICAgICB9CiAKICAgICB9ICk7CkBAIC00Mjg4MSw5ICs0NTk4
NCwyMSBAQAogICAgICAgICB9LAogICAgICAgICBmcm9tQXR0cmlidXRlOiBmdW5jdGlvbiAoIGF0
dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHsKIAotICAgICAgICAgICAgY29uc29sZS5lcnJvcigg
J1RIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJv
bUJ1ZmZlckF0dHJpYnV0ZSgpLicgKTsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
LlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZl
ckF0dHJpYnV0ZSgpLicgKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21CdWZmZXJBdHRy
aWJ1dGUoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApOwogCisgICAgICAgIH0sCisgICAgICAg
IGRpc3RhbmNlVG9NYW5oYXR0YW46IGZ1bmN0aW9uICggdiApIHsKKworICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVl
biByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuJyApOworICAgICAgICAgICAgcmV0
dXJuIHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyggdiApOworCisgICAgICAgIH0sCisgICAgICAg
IGxlbmd0aE1hbmhhdHRhbjogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0
byAubWFuaGF0dGFuTGVuZ3RoKCkuJyApOworICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuaGF0
dGFuTGVuZ3RoKCk7CisKICAgICAgICAgfQogCiAgICAgfSApOwpAQCAtNDI4OTIsMjAgKzQ2MDA3
LDM1IEBACiAKICAgICAgICAgZnJvbUF0dHJpYnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGlu
ZGV4LCBvZmZzZXQgKSB7CiAKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5WZWN0
b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRy
aWJ1dGUoKS4nICk7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3I0OiAu
ZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUo
KS4nICk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKCBhdHRy
aWJ1dGUsIGluZGV4LCBvZmZzZXQgKTsKIAorICAgICAgICB9LAorICAgICAgICBsZW5ndGhNYW5o
YXR0YW46IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUu
VmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRh
bkxlbmd0aCgpLicgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgp
OworCiAgICAgICAgIH0KIAogICAgIH0gKTsKIAogICAgIC8vCiAKLSAgICBHZW9tZXRyeS5wcm90
b3R5cGUuY29tcHV0ZVRhbmdlbnRzID0gZnVuY3Rpb24gKCkgeworICAgIE9iamVjdC5hc3NpZ24o
IEdlb21ldHJ5LnByb3RvdHlwZSwgeworCisgICAgICAgIGNvbXB1dGVUYW5nZW50czogZnVuY3Rp
b24gKCkgewogCi0gICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkdlb21ldHJ5OiAuY29tcHV0
ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7CisgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCAnVEhSRUUuR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBoYXMgYmVlbiByZW1vdmVk
LicgKTsKIAotICAgIH07CisgICAgICAgIH0sCisgICAgICAgIGNvbXB1dGVMaW5lRGlzdGFuY2Vz
OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5HZW9t
ZXRyeTogLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVF
LkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBpbnN0ZWFkLicgKTsKKworICAgICAgICB9CisK
KyAgICB9ICk7CiAKICAgICBPYmplY3QuYXNzaWduKCBPYmplY3QzRC5wcm90b3R5cGUsIHsKIApA
QCAtNDI5MjUsNiArNDYwNTUsMTEgQEAKICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVF
Lk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVP
bkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4nICk7CiAgICAgICAgICAgICByZXR1cm4g
dGhpcy50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICk7CiAKKyAgICAgICAgfSwKKyAg
ICAgICAgZ2V0V29ybGRSb3RhdGlvbjogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCAnVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4g
cmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkg
aW5zdGVhZC4nICk7CisKICAgICAgICAgfQogCiAgICAgfSApOwpAQCAtNDMxMzQsNiArNDYyNjks
MTEgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGg7CiAKICAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgY29weUluZGljZXNBcnJheTogZnVuY3Rpb24g
KCAvKiBpbmRpY2VzICovICkgeworCisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUu
QnVmZmVyQXR0cmlidXRlOiAuY29weUluZGljZXNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuJyAp
OworCiAgICAgICAgIH0KIAogICAgIH0gKTsKQEAgLTQzMTk5LDYgKzQ2MzM5LDMwIEBACiAKICAg
ICAvLwogCisgICAgT2JqZWN0LmFzc2lnbiggRXh0cnVkZUJ1ZmZlckdlb21ldHJ5LnByb3RvdHlw
ZSwgeworCisgICAgICAgIGdldEFycmF5czogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCAnVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkg
aGFzIGJlZW4gcmVtb3ZlZC4nICk7CisKKyAgICAgICAgfSwKKworICAgICAgICBhZGRTaGFwZUxp
c3Q6IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkV4
dHJ1ZGVCdWZmZXJHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuJyAp
OworCisgICAgICAgIH0sCisKKyAgICAgICAgYWRkU2hhcGU6IGZ1bmN0aW9uICgpIHsKKworICAg
ICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogLmFk
ZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4nICk7CisKKyAgICAgICAgfQorCisgICAgfSApOwor
CisgICAgLy8KKwogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBVbmlmb3JtLnByb3RvdHlw
ZSwgewogCiAgICAgICAgIGR5bmFtaWM6IHsKQEAgLTQzMjQxLDYgKzQ2NDA1LDIwIEBACiAgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBi
ZWVuIHJlbW92ZWQuJyApOwogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoKTsKIAor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHNoYWRpbmc6IHsKKyAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigg
J1RIUkVFLicgKyB0aGlzLnR5cGUgKyAnOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ug
dGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuJyApOworCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIHZhbHVlICkgeworCisgICAgICAgICAgICAgICAg
Y29uc29sZS53YXJuKCAnVEhSRUUuJyArIHRoaXMudHlwZSArICc6IC5zaGFkaW5nIGhhcyBiZWVu
IHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4nICk7CisgICAg
ICAgICAgICAgICAgdGhpcy5mbGF0U2hhZGluZyA9ICggdmFsdWUgPT09IEZsYXRTaGFkaW5nICk7
CisKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC00MzI4Nyw2ICs0NjQ2NSwxMyBAQAog
CiAgICAgT2JqZWN0LmFzc2lnbiggV2ViR0xSZW5kZXJlci5wcm90b3R5cGUsIHsKIAorICAgICAg
ICBhbmltYXRlOiBmdW5jdGlvbiAoIGNhbGxiYWNrICkgeworCisgICAgICAgICAgICBjb25zb2xl
Lndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0
aW9uTG9vcCgpLicgKTsKKyAgICAgICAgICAgIHRoaXMuc2V0QW5pbWF0aW9uTG9vcCggY2FsbGJh
Y2sgKTsKKworICAgICAgICB9LAorCiAgICAgICAgIGdldEN1cnJlbnRSZW5kZXJUYXJnZXQ6IGZ1
bmN0aW9uICgpIHsKIAogICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5k
ZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgp
LicgKTsKQEAgLTQzMjk0LDYgKzQ2NDc5LDI3IEBACiAKICAgICAgICAgfSwKIAorICAgICAgICBn
ZXRNYXhBbmlzb3Ryb3B5OiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2Fy
biggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBh
YmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLicgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCk7CisKKyAgICAgICAgfSwKKworICAgICAg
ICBnZXRQcmVjaXNpb246IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgY29uc29sZS53YXJu
KCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0
aWVzLnByZWNpc2lvbi4nICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMu
cHJlY2lzaW9uOworCisgICAgICAgIH0sCisKKyAgICAgICAgcmVzZXRHTFN0YXRlOiBmdW5jdGlv
biAoKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6
IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuJyApOworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuc3RhdGUucmVzZXQoKTsKKworICAgICAgICB9LAorCiAgICAgICAgIHN1cHBv
cnRzRmxvYXRUZXh0dXJlczogZnVuY3Rpb24gKCkgewogCiAgICAgICAgICAgICBjb25zb2xlLndh
cm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93
IC5leHRlbnNpb25zLmdldCggXCdPRVNfdGV4dHVyZV9mbG9hdFwnICkuJyApOwpAQCAtNDMzNjcs
NiArNDY1NzMsMTEgQEAKIAogICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xS
ZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuJyApOwogCisgICAg
ICAgIH0sCisgICAgICAgIHNldEZhY2VDdWxsaW5nOiBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAg
ICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygp
IGhhcyBiZWVuIHJlbW92ZWQuJyApOworCiAgICAgICAgIH0KIAogICAgIH0gKTsKQEAgLTQzNDAy
LDEzICs0NjYxMywxMyBAQAogICAgICAgICBzaGFkb3dNYXBDdWxsRmFjZTogewogICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFk
b3dNYXAuY3VsbEZhY2U7CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2Vi
R0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRl
cmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApOworICAgICAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CiAKICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggdmFs
dWUgKSB7CisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICggLyogdmFsdWUgKi8gKSB7CiAKLSAg
ICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93
TWFwQ3VsbEZhY2UgaXMgbm93IC5zaGFkb3dNYXAuY3VsbEZhY2UuJyApOwotICAgICAgICAgICAg
ICAgIHRoaXMuc2hhZG93TWFwLmN1bGxGYWNlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBi
ZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApOwogCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQzNDE5LDE0ICs0NjYzMCwzOSBAQAogICAgICAgICBj
dWxsRmFjZTogewogICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5yZW5kZXJSZXZlcnNlU2lkZWQgPyBDdWxsRmFjZUZyb250IDogQ3Vs
bEZhY2VCYWNrOworICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLldlYkdMUmVu
ZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFs
LnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKIAogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCBjdWxsRmFj
ZSApIHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCAvKiBjdWxsRmFjZSAqLyApIHsKIAot
ICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICggY3VsbEZhY2UgIT09IEN1bGxGYWNlQmFjayAp
OwotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybiggIldlYkdMUmVuZGVyZXI6IC5zaGFkb3dN
YXAuY3VsbEZhY2UgaXMgZGVwcmVjYXRlZC4gU2V0IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNp
ZGVkIHRvICIgKyB2YWx1ZSArICIuIiApOwotICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUmV2
ZXJzZVNpZGVkID0gdmFsdWU7CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUu
V2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQg
TWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTsKKworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICByZW5kZXJSZXZlcnNlU2lkZWQ6IHsKKyAgICAgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xS
ZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4g
U2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKKworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldDogZnVuY3Rp
b24gKCkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xSZW5k
ZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0
IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4nICk7CisKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgcmVuZGVyU2luZ2xlU2lkZWQ6IHsKKyAgICAgICAgICAgIGdldDogZnVu
Y3Rpb24gKCkgeworCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViR0xS
ZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBT
ZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLicgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biAoKSB7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5XZWJHTFJlbmRl
cmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBN
YXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuJyApOwogCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTQzNTgyLDYgKzQ2ODE4LDIwIEBACiAKICAgICAvLwogCisgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnRpZXMoIFdlYlZSTWFuYWdlci5wcm90b3R5cGUsIHsKKworICAgICAgICBzdGFuZGlu
ZzogeworICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoIC8qIHZhbHVlICovICkgeworCisgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuV2ViVlJNYW5hZ2VyOiAuc3RhbmRpbmcg
aGFzIGJlZW4gcmVtb3ZlZC4nICk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
fSApOworCisgICAgLy8KKwogICAgIEF1ZGlvLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKCBm
aWxlICkgewogCiAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLkF1ZGlvOiAubG9hZCBoYXMg
YmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4nICk7CkBAIC00
MzYwNSw2ICs0Njg1NSwxNSBAQAogCiAgICAgLy8KIAorICAgIEN1YmVDYW1lcmEucHJvdG90eXBl
LnVwZGF0ZUN1YmVNYXAgPSBmdW5jdGlvbiAoIHJlbmRlcmVyLCBzY2VuZSApIHsKKworICAgICAg
ICBjb25zb2xlLndhcm4oICdUSFJFRS5DdWJlQ2FtZXJhOiAudXBkYXRlQ3ViZU1hcCgpIGlzIG5v
dyAudXBkYXRlKCkuJyApOworICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoIHJlbmRlcmVyLCBz
Y2VuZSApOworCisgICAgfTsKKworICAgIC8vCisKICAgICB2YXIgR2VvbWV0cnlVdGlscyA9IHsK
IAogICAgICAgICBtZXJnZTogZnVuY3Rpb24gKCBnZW9tZXRyeTEsIGdlb21ldHJ5MiwgbWF0ZXJp
YWxJbmRleE9mZnNldCApIHsKQEAgLTQzNzI0LDYgKzQ2OTgzLDM4IEBACiAKICAgICB9CiAKKyAg
ICAvLworCisgICAgdmFyIFNjZW5lVXRpbHMgPSB7CisKKyAgICAgICAgY3JlYXRlTXVsdGlNYXRl
cmlhbE9iamVjdDogZnVuY3Rpb24gKCAvKiBnZW9tZXRyeSwgbWF0ZXJpYWxzICovICkgeworCisg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCAnVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3Zl
ZCB0byAvZXhhbXBsZXMvanMvdXRpbHMvU2NlbmVVdGlscy5qcycgKTsKKworICAgICAgICB9LAor
CisgICAgICAgIGRldGFjaDogZnVuY3Rpb24gKCAvKiBjaGlsZCwgcGFyZW50LCBzY2VuZSAqLyAp
IHsKKworICAgICAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlNjZW5lVXRpbHMgaGFzIGJl
ZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzL3V0aWxzL1NjZW5lVXRpbHMuanMnICk7CisKKyAgICAg
ICAgfSwKKworICAgICAgICBhdHRhY2g6IGZ1bmN0aW9uICggLyogY2hpbGQsIHNjZW5lLCBwYXJl
bnQgKi8gKSB7CisKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5TY2VuZVV0aWxz
IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy91dGlscy9TY2VuZVV0aWxzLmpzJyApOwor
CisgICAgICAgIH0KKworICAgIH07CisKKyAgICAvLworCisgICAgZnVuY3Rpb24gTGVuc0ZsYXJl
KCkgeworCisgICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4g
bW92ZWQgdG8gL2V4YW1wbGVzL2pzL29iamVjdHMvTGVuc2ZsYXJlLmpzJyApOworCisgICAgfQor
CiAgICAgZXhwb3J0cy5XZWJHTFJlbmRlclRhcmdldEN1YmUgPSBXZWJHTFJlbmRlclRhcmdldEN1
YmU7CiAgICAgZXhwb3J0cy5XZWJHTFJlbmRlclRhcmdldCA9IFdlYkdMUmVuZGVyVGFyZ2V0Owog
ICAgIGV4cG9ydHMuV2ViR0xSZW5kZXJlciA9IFdlYkdMUmVuZGVyZXI7CkBAIC00MzczNCw3ICs0
NzAyNSw2IEBACiAgICAgZXhwb3J0cy5Gb2dFeHAyID0gRm9nRXhwMjsKICAgICBleHBvcnRzLkZv
ZyA9IEZvZzsKICAgICBleHBvcnRzLlNjZW5lID0gU2NlbmU7Ci0gICAgZXhwb3J0cy5MZW5zRmxh
cmUgPSBMZW5zRmxhcmU7CiAgICAgZXhwb3J0cy5TcHJpdGUgPSBTcHJpdGU7CiAgICAgZXhwb3J0
cy5MT0QgPSBMT0Q7CiAgICAgZXhwb3J0cy5Ta2lubmVkTWVzaCA9IFNraW5uZWRNZXNoOwpAQCAt
NDM3NjQsOSArNDcwNTQsMTEgQEAKICAgICBleHBvcnRzLkxvYWRpbmdNYW5hZ2VyID0gTG9hZGlu
Z01hbmFnZXI7CiAgICAgZXhwb3J0cy5KU09OTG9hZGVyID0gSlNPTkxvYWRlcjsKICAgICBleHBv
cnRzLkltYWdlTG9hZGVyID0gSW1hZ2VMb2FkZXI7CisgICAgZXhwb3J0cy5JbWFnZUJpdG1hcExv
YWRlciA9IEltYWdlQml0bWFwTG9hZGVyOwogICAgIGV4cG9ydHMuRm9udExvYWRlciA9IEZvbnRM
b2FkZXI7CiAgICAgZXhwb3J0cy5GaWxlTG9hZGVyID0gRmlsZUxvYWRlcjsKICAgICBleHBvcnRz
LkxvYWRlciA9IExvYWRlcjsKKyAgICBleHBvcnRzLkxvYWRlclV0aWxzID0gTG9hZGVyVXRpbHM7
CiAgICAgZXhwb3J0cy5DYWNoZSA9IENhY2hlOwogICAgIGV4cG9ydHMuQXVkaW9Mb2FkZXIgPSBB
dWRpb0xvYWRlcjsKICAgICBleHBvcnRzLlNwb3RMaWdodFNoYWRvdyA9IFNwb3RMaWdodFNoYWRv
dzsKQEAgLTQzODA2LDcgKzQ3MDk4LDYgQEAKICAgICBleHBvcnRzLlVuaWZvcm0gPSBVbmlmb3Jt
OwogICAgIGV4cG9ydHMuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgPSBJbnN0YW5jZWRCdWZmZXJH
ZW9tZXRyeTsKICAgICBleHBvcnRzLkJ1ZmZlckdlb21ldHJ5ID0gQnVmZmVyR2VvbWV0cnk7Ci0g
ICAgZXhwb3J0cy5HZW9tZXRyeUlkQ291bnQgPSBHZW9tZXRyeUlkQ291bnQ7CiAgICAgZXhwb3J0
cy5HZW9tZXRyeSA9IEdlb21ldHJ5OwogICAgIGV4cG9ydHMuSW50ZXJsZWF2ZWRCdWZmZXJBdHRy
aWJ1dGUgPSBJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTsKICAgICBleHBvcnRzLkluc3RhbmNl
ZEludGVybGVhdmVkQnVmZmVyID0gSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI7CkBAIC00Mzg0
Miw3ICs0NzEzMyw2IEBACiAgICAgZXhwb3J0cy5WZWN0b3IyID0gVmVjdG9yMjsKICAgICBleHBv
cnRzLlF1YXRlcm5pb24gPSBRdWF0ZXJuaW9uOwogICAgIGV4cG9ydHMuQ29sb3IgPSBDb2xvcjsK
LSAgICBleHBvcnRzLk1vcnBoQmxlbmRNZXNoID0gTW9ycGhCbGVuZE1lc2g7CiAgICAgZXhwb3J0
cy5JbW1lZGlhdGVSZW5kZXJPYmplY3QgPSBJbW1lZGlhdGVSZW5kZXJPYmplY3Q7CiAgICAgZXhw
b3J0cy5WZXJ0ZXhOb3JtYWxzSGVscGVyID0gVmVydGV4Tm9ybWFsc0hlbHBlcjsKICAgICBleHBv
cnRzLlNwb3RMaWdodEhlbHBlciA9IFNwb3RMaWdodEhlbHBlcjsKQEAgLTQzODU2LDE4ICs0NzE0
NiwxMCBAQAogICAgIGV4cG9ydHMuRGlyZWN0aW9uYWxMaWdodEhlbHBlciA9IERpcmVjdGlvbmFs
TGlnaHRIZWxwZXI7CiAgICAgZXhwb3J0cy5DYW1lcmFIZWxwZXIgPSBDYW1lcmFIZWxwZXI7CiAg
ICAgZXhwb3J0cy5Cb3hIZWxwZXIgPSBCb3hIZWxwZXI7CisgICAgZXhwb3J0cy5Cb3gzSGVscGVy
ID0gQm94M0hlbHBlcjsKKyAgICBleHBvcnRzLlBsYW5lSGVscGVyID0gUGxhbmVIZWxwZXI7CiAg
ICAgZXhwb3J0cy5BcnJvd0hlbHBlciA9IEFycm93SGVscGVyOwotICAgIGV4cG9ydHMuQXhpc0hl
bHBlciA9IEF4aXNIZWxwZXI7Ci0gICAgZXhwb3J0cy5DYXRtdWxsUm9tQ3VydmUzID0gQ2F0bXVs
bFJvbUN1cnZlMzsKLSAgICBleHBvcnRzLkN1YmljQmV6aWVyQ3VydmUzID0gQ3ViaWNCZXppZXJD
dXJ2ZTM7Ci0gICAgZXhwb3J0cy5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMgPSBRdWFkcmF0aWNCZXpp
ZXJDdXJ2ZTM7Ci0gICAgZXhwb3J0cy5MaW5lQ3VydmUzID0gTGluZUN1cnZlMzsKLSAgICBleHBv
cnRzLkFyY0N1cnZlID0gQXJjQ3VydmU7Ci0gICAgZXhwb3J0cy5FbGxpcHNlQ3VydmUgPSBFbGxp
cHNlQ3VydmU7Ci0gICAgZXhwb3J0cy5TcGxpbmVDdXJ2ZSA9IFNwbGluZUN1cnZlOwotICAgIGV4
cG9ydHMuQ3ViaWNCZXppZXJDdXJ2ZSA9IEN1YmljQmV6aWVyQ3VydmU7Ci0gICAgZXhwb3J0cy5R
dWFkcmF0aWNCZXppZXJDdXJ2ZSA9IFF1YWRyYXRpY0JlemllckN1cnZlOwotICAgIGV4cG9ydHMu
TGluZUN1cnZlID0gTGluZUN1cnZlOworICAgIGV4cG9ydHMuQXhlc0hlbHBlciA9IEF4ZXNIZWxw
ZXI7CiAgICAgZXhwb3J0cy5TaGFwZSA9IFNoYXBlOwogICAgIGV4cG9ydHMuUGF0aCA9IFBhdGg7
CiAgICAgZXhwb3J0cy5TaGFwZVBhdGggPSBTaGFwZVBhdGg7CkBAIC00Mzg3NSw3ICs0NzE1Nyw3
IEBACiAgICAgZXhwb3J0cy5DdXJ2ZVBhdGggPSBDdXJ2ZVBhdGg7CiAgICAgZXhwb3J0cy5DdXJ2
ZSA9IEN1cnZlOwogICAgIGV4cG9ydHMuU2hhcGVVdGlscyA9IFNoYXBlVXRpbHM7Ci0gICAgZXhw
b3J0cy5TY2VuZVV0aWxzID0gU2NlbmVVdGlsczsKKyAgICBleHBvcnRzLldlYkdMVXRpbHMgPSBX
ZWJHTFV0aWxzOwogICAgIGV4cG9ydHMuV2lyZWZyYW1lR2VvbWV0cnkgPSBXaXJlZnJhbWVHZW9t
ZXRyeTsKICAgICBleHBvcnRzLlBhcmFtZXRyaWNHZW9tZXRyeSA9IFBhcmFtZXRyaWNHZW9tZXRy
eTsKICAgICBleHBvcnRzLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeSA9IFBhcmFtZXRyaWNCdWZm
ZXJHZW9tZXRyeTsKQEAgLTQzOTMwLDYgKzQ3MjEyLDcgQEAKICAgICBleHBvcnRzLk1lc2hOb3Jt
YWxNYXRlcmlhbCA9IE1lc2hOb3JtYWxNYXRlcmlhbDsKICAgICBleHBvcnRzLk1lc2hMYW1iZXJ0
TWF0ZXJpYWwgPSBNZXNoTGFtYmVydE1hdGVyaWFsOwogICAgIGV4cG9ydHMuTWVzaERlcHRoTWF0
ZXJpYWwgPSBNZXNoRGVwdGhNYXRlcmlhbDsKKyAgICBleHBvcnRzLk1lc2hEaXN0YW5jZU1hdGVy
aWFsID0gTWVzaERpc3RhbmNlTWF0ZXJpYWw7CiAgICAgZXhwb3J0cy5NZXNoQmFzaWNNYXRlcmlh
bCA9IE1lc2hCYXNpY01hdGVyaWFsOwogICAgIGV4cG9ydHMuTGluZURhc2hlZE1hdGVyaWFsID0g
TGluZURhc2hlZE1hdGVyaWFsOwogICAgIGV4cG9ydHMuTGluZUJhc2ljTWF0ZXJpYWwgPSBMaW5l
QmFzaWNNYXRlcmlhbDsKQEAgLTQzOTQ0LDYgKzQ3MjI3LDE2IEBACiAgICAgZXhwb3J0cy5VaW50
OEJ1ZmZlckF0dHJpYnV0ZSA9IFVpbnQ4QnVmZmVyQXR0cmlidXRlOwogICAgIGV4cG9ydHMuSW50
OEJ1ZmZlckF0dHJpYnV0ZSA9IEludDhCdWZmZXJBdHRyaWJ1dGU7CiAgICAgZXhwb3J0cy5CdWZm
ZXJBdHRyaWJ1dGUgPSBCdWZmZXJBdHRyaWJ1dGU7CisgICAgZXhwb3J0cy5BcmNDdXJ2ZSA9IEFy
Y0N1cnZlOworICAgIGV4cG9ydHMuQ2F0bXVsbFJvbUN1cnZlMyA9IENhdG11bGxSb21DdXJ2ZTM7
CisgICAgZXhwb3J0cy5DdWJpY0JlemllckN1cnZlID0gQ3ViaWNCZXppZXJDdXJ2ZTsKKyAgICBl
eHBvcnRzLkN1YmljQmV6aWVyQ3VydmUzID0gQ3ViaWNCZXppZXJDdXJ2ZTM7CisgICAgZXhwb3J0
cy5FbGxpcHNlQ3VydmUgPSBFbGxpcHNlQ3VydmU7CisgICAgZXhwb3J0cy5MaW5lQ3VydmUgPSBM
aW5lQ3VydmU7CisgICAgZXhwb3J0cy5MaW5lQ3VydmUzID0gTGluZUN1cnZlMzsKKyAgICBleHBv
cnRzLlF1YWRyYXRpY0JlemllckN1cnZlID0gUXVhZHJhdGljQmV6aWVyQ3VydmU7CisgICAgZXhw
b3J0cy5RdWFkcmF0aWNCZXppZXJDdXJ2ZTMgPSBRdWFkcmF0aWNCZXppZXJDdXJ2ZTM7CisgICAg
ZXhwb3J0cy5TcGxpbmVDdXJ2ZSA9IFNwbGluZUN1cnZlOwogICAgIGV4cG9ydHMuUkVWSVNJT04g
PSBSRVZJU0lPTjsKICAgICBleHBvcnRzLk1PVVNFID0gTU9VU0U7CiAgICAgZXhwb3J0cy5DdWxs
RmFjZU5vbmUgPSBDdWxsRmFjZU5vbmU7CkBAIC00NDA0Nyw2ICs0NzM0MCwyMCBAQAogICAgIGV4
cG9ydHMuUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0ID0gUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0
OwogICAgIGV4cG9ydHMuUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0ID0gUkdCQV9QVlJUQ18yQlBQ
VjFfRm9ybWF0OwogICAgIGV4cG9ydHMuUkdCX0VUQzFfRm9ybWF0ID0gUkdCX0VUQzFfRm9ybWF0
OworICAgIGV4cG9ydHMuUkdCQV9BU1RDXzR4NF9Gb3JtYXQgPSBSR0JBX0FTVENfNHg0X0Zvcm1h
dDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ181eDRfRm9ybWF0ID0gUkdCQV9BU1RDXzV4NF9Gb3Jt
YXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfNXg1X0Zvcm1hdCA9IFJHQkFfQVNUQ181eDVfRm9y
bWF0OworICAgIGV4cG9ydHMuUkdCQV9BU1RDXzZ4NV9Gb3JtYXQgPSBSR0JBX0FTVENfNng1X0Zv
cm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ182eDZfRm9ybWF0ID0gUkdCQV9BU1RDXzZ4Nl9G
b3JtYXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfOHg1X0Zvcm1hdCA9IFJHQkFfQVNUQ184eDVf
Rm9ybWF0OworICAgIGV4cG9ydHMuUkdCQV9BU1RDXzh4Nl9Gb3JtYXQgPSBSR0JBX0FTVENfOHg2
X0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ184eDhfRm9ybWF0ID0gUkdCQV9BU1RDXzh4
OF9Gb3JtYXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4NV9Gb3JtYXQgPSBSR0JBX0FTVENf
MTB4NV9Gb3JtYXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4Nl9Gb3JtYXQgPSBSR0JBX0FT
VENfMTB4Nl9Gb3JtYXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4OF9Gb3JtYXQgPSBSR0JB
X0FTVENfMTB4OF9Gb3JtYXQ7CisgICAgZXhwb3J0cy5SR0JBX0FTVENfMTB4MTBfRm9ybWF0ID0g
UkdCQV9BU1RDXzEweDEwX0Zvcm1hdDsKKyAgICBleHBvcnRzLlJHQkFfQVNUQ18xMngxMF9Gb3Jt
YXQgPSBSR0JBX0FTVENfMTJ4MTBfRm9ybWF0OworICAgIGV4cG9ydHMuUkdCQV9BU1RDXzEyeDEy
X0Zvcm1hdCA9IFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ7CiAgICAgZXhwb3J0cy5Mb29wT25jZSA9
IExvb3BPbmNlOwogICAgIGV4cG9ydHMuTG9vcFJlcGVhdCA9IExvb3BSZXBlYXQ7CiAgICAgZXhw
b3J0cy5Mb29wUGluZ1BvbmcgPSBMb29wUGluZ1Bvbmc7CkBAIC00NDA2OSw2ICs0NzM3Niw4IEBA
CiAgICAgZXhwb3J0cy5SR0JERW5jb2RpbmcgPSBSR0JERW5jb2Rpbmc7CiAgICAgZXhwb3J0cy5C
YXNpY0RlcHRoUGFja2luZyA9IEJhc2ljRGVwdGhQYWNraW5nOwogICAgIGV4cG9ydHMuUkdCQURl
cHRoUGFja2luZyA9IFJHQkFEZXB0aFBhY2tpbmc7CisgICAgZXhwb3J0cy5UYW5nZW50U3BhY2VO
b3JtYWxNYXAgPSBUYW5nZW50U3BhY2VOb3JtYWxNYXA7CisgICAgZXhwb3J0cy5PYmplY3RTcGFj
ZU5vcm1hbE1hcCA9IE9iamVjdFNwYWNlTm9ybWFsTWFwOwogICAgIGV4cG9ydHMuQ3ViZUdlb21l
dHJ5ID0gQm94R2VvbWV0cnk7CiAgICAgZXhwb3J0cy5GYWNlNCA9IEZhY2U0OwogICAgIGV4cG9y
dHMuTGluZVN0cmlwID0gTGluZVN0cmlwOwpAQCAtNDQwOTUsNiArNDc0MDQsNyBAQAogICAgIGV4
cG9ydHMuQ2xvc2VkU3BsaW5lQ3VydmUzID0gQ2xvc2VkU3BsaW5lQ3VydmUzOwogICAgIGV4cG9y
dHMuU3BsaW5lQ3VydmUzID0gU3BsaW5lQ3VydmUzOwogICAgIGV4cG9ydHMuU3BsaW5lID0gU3Bs
aW5lOworICAgIGV4cG9ydHMuQXhpc0hlbHBlciA9IEF4aXNIZWxwZXI7CiAgICAgZXhwb3J0cy5C
b3VuZGluZ0JveEhlbHBlciA9IEJvdW5kaW5nQm94SGVscGVyOwogICAgIGV4cG9ydHMuRWRnZXNI
ZWxwZXIgPSBFZGdlc0hlbHBlcjsKICAgICBleHBvcnRzLldpcmVmcmFtZUhlbHBlciA9IFdpcmVm
cmFtZUhlbHBlcjsKQEAgLTQ0MTA0LDYgKzQ3NDE0LDggQEAKICAgICBleHBvcnRzLkltYWdlVXRp
bHMgPSBJbWFnZVV0aWxzOwogICAgIGV4cG9ydHMuUHJvamVjdG9yID0gUHJvamVjdG9yOwogICAg
IGV4cG9ydHMuQ2FudmFzUmVuZGVyZXIgPSBDYW52YXNSZW5kZXJlcjsKKyAgICBleHBvcnRzLlNj
ZW5lVXRpbHMgPSBTY2VuZVV0aWxzOworICAgIGV4cG9ydHMuTGVuc0ZsYXJlID0gTGVuc0ZsYXJl
OwogCiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2
YWx1ZTogdHJ1ZSB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGF5ZXJzM0RDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyczNEQ29udGVudFZpZXcuanMKaW5kZXggMzIw
NmEyNmU1NWM5ODg1NmM2ZmI3YzRkNmIyMDM1ODk2NjFiNmMwNC4uNTJhZTczMjYwM2ZkZWU4OWM0
ZTUzYzUwNDEwYTgwNWQ2ODM2MWZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvTGF5ZXJzM0RDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MYXllcnMzRENvbnRlbnRWaWV3Lmpz
CkBAIC0xNTAsMTIgKzE1MCwxNCBAQCBXSS5MYXllcnMzRENvbnRlbnRWaWV3ID0gY2xhc3MgTGF5
ZXJzM0RDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRWaWV3CiAKICAgICAgICAgdGhpcy5f
Y29udHJvbHMgPSBuZXcgVEhSRUUuT3JiaXRDb250cm9scyh0aGlzLl9jYW1lcmEsIHRoaXMuX3Jl
bmRlcmVyLmRvbUVsZW1lbnQpOwogICAgICAgICB0aGlzLl9jb250cm9scy5lbmFibGVEYW1waW5n
ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fY29udHJvbHMucGFuU3BlZWQgPSAwLjU7CiAgICAgICAg
IHRoaXMuX2NvbnRyb2xzLmVuYWJsZUtleXMgPSBmYWxzZTsKICAgICAgICAgdGhpcy5fY29udHJv
bHMuem9vbVNwZWVkID0gMC41OwogICAgICAgICB0aGlzLl9jb250cm9scy5taW5EaXN0YW5jZSA9
IDEwMDA7CiAgICAgICAgIHRoaXMuX2NvbnRyb2xzLnJvdGF0ZVNwZWVkID0gMC41OwogICAgICAg
ICB0aGlzLl9jb250cm9scy5taW5BemltdXRoQW5nbGUgPSAtTWF0aC5QSSAvIDI7CiAgICAgICAg
IHRoaXMuX2NvbnRyb2xzLm1heEF6aW11dGhBbmdsZSA9IE1hdGguUEkgLyAyOworICAgICAgICB0
aGlzLl9jb250cm9scy5zY3JlZW5TcGFjZVBhbm5pbmcgPSB0cnVlOwogICAgICAgICB0aGlzLl9y
ZW5kZXJlci5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgKGV2ZW50
KSA9PiB7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB9KTsKIAogICAgICAgICB0aGlzLl9zY2Vu
ZSA9IG5ldyBUSFJFRS5TY2VuZTsKQEAgLTM2NSw3ICszNjcsOCBAQCBXSS5MYXllcnMzRENvbnRl
bnRWaWV3ID0gY2xhc3MgTGF5ZXJzM0RDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRWaWV3
CiAKICAgICBfcmVzdHJpY3RQYW4oKQogICAgIHsKLSAgICAgICAgbGV0IGRlbHRhID0gdGhpcy5f
Ym91bmRpbmdCb3guY2xhbXBQb2ludCh0aGlzLl9jb250cm9scy50YXJnZXQpLnNldFooMCkuc3Vi
KHRoaXMuX2NvbnRyb2xzLnRhcmdldCk7CisgICAgICAgIGxldCBkZWx0YSA9IG5ldyBUSFJFRS5W
ZWN0b3IzOworICAgICAgICB0aGlzLl9ib3VuZGluZ0JveC5jbGFtcFBvaW50KHRoaXMuX2NvbnRy
b2xzLnRhcmdldCwgZGVsdGEpLnNldFooMCkuc3ViKHRoaXMuX2NvbnRyb2xzLnRhcmdldCk7CiAg
ICAgICAgIHRoaXMuX2NvbnRyb2xzLnRhcmdldC5hZGQoZGVsdGEpOwogICAgICAgICB0aGlzLl9j
YW1lcmEucG9zaXRpb24uYWRkKGRlbHRhKTsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>