<?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>200172</bug_id>
          
          <creation_ts>2019-07-26 12:01:00 -0700</creation_ts>
          <short_desc>results.webkit.org: Use canvas for timeline</short_desc>
          <delta_ts>2019-08-08 10:54:16 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1556193</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-07-26 12:01:00 -0700</bug_when>
    <thetext>Asking the browser to render large timelines is very slow. We have a canvas implementation of the timeline that we should use instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557814</commentid>
    <comment_count>1</comment_count>
      <attachid>375371</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-01 17:41:59 -0700</bug_when>
    <thetext>Created attachment 375371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558031</commentid>
    <comment_count>2</comment_count>
      <attachid>375439</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-02 11:51:52 -0700</bug_when>
    <thetext>Created attachment 375439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558121</commentid>
    <comment_count>3</comment_count>
      <attachid>375454</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-02 14:13:11 -0700</bug_when>
    <thetext>Created attachment 375454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558599</commentid>
    <comment_count>4</comment_count>
      <attachid>375574</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-05 15:58:19 -0700</bug_when>
    <thetext>Created attachment 375574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558858</commentid>
    <comment_count>5</comment_count>
      <attachid>375638</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-06 11:54:18 -0700</bug_when>
    <thetext>Created attachment 375638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559242</commentid>
    <comment_count>6</comment_count>
      <attachid>375638</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-07 12:29:37 -0700</bug_when>
    <thetext>Comment on attachment 375638
Patch

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

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/timeline.js:368
&gt;              }

Since now the element&apos;s children are multiple canvas, using element.innerHTML may cause some memory can not be gc, please use DOM.inject everywhere which will clean all the ref&apos;s reference, so that it can be gc finally.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/js/timeline.js:555
&gt; +                // FIXME: We should do something sane here, but we probably need another endpoint

I guess we will need a popover ?

&gt; Tools/resultsdbpy/resultsdbpy/view/templates/suite_results.html:66
&gt;          this.children = {};

Same thing around here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559243</commentid>
    <comment_count>7</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-07 12:29:57 -0700</bug_when>
    <thetext>unofficially r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559393</commentid>
    <comment_count>8</comment_count>
      <attachid>375769</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-07 17:15:33 -0700</bug_when>
    <thetext>Created attachment 375769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559516</commentid>
    <comment_count>9</comment_count>
      <attachid>375769</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-08-08 08:15:49 -0700</bug_when>
    <thetext>Comment on attachment 375769
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559542</commentid>
    <comment_count>10</comment_count>
      <attachid>375811</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-08 10:11:44 -0700</bug_when>
    <thetext>Created attachment 375811
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559565</commentid>
    <comment_count>11</comment_count>
      <attachid>375811</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-08 10:53:58 -0700</bug_when>
    <thetext>Comment on attachment 375811
Patch for landing

Clearing flags on attachment: 375811

Committed r248425: &lt;https://trac.webkit.org/changeset/248425&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559566</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-08 10:54:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559567</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-08 10:54:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/54086870&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375371</attachid>
            <date>2019-08-01 17:41:59 -0700</date>
            <delta_ts>2019-08-02 11:51:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200172-20190801174158.patch</filename>
            <type>text/plain</type>
            <size>51454</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODE0MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDE5LTA4LTAxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzOgorICAgICAgICAo
dGlja0ZvckNvbW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChtaW5pbXVtVXVpZEZvclJlc3VsdHMp
OiBHaXZlbiBhIGRpY3Rpb25hcnkgb2YgcmVzdWx0IGxpc3RzLCBkZXRlcm1pbmUgdGhlIG1pbmlt
dW0gVVVJRAorICAgICAgICB3aGljaCBlbmNvbXBhc3NlcyBhbGwgcmVzdWx0cy4gQ3J1Y2lhbGx5
LCB0aGlzIGZ1bmN0aW9uIG11c3QgZXhjbHVkZSBhbiBVVUlEcyB3aGljaCBtYXkKKyAgICAgICAg
cmVmZXIgdG8gcmVzdWx0cyBleGNsdWRlZCBiZWNhdXNlIG9mIHRoZSBsaW1pdCBhcmd1bWVudC4K
KyAgICAgICAgKHJlbmRlclRpbWVsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbW1pdHNGb3JS
ZXN1bHRzKTogR2l2ZW4gYSBkaWN0aW9uYXJ5IG9mIHJlc3VsdCBsaXN0cywgcmV0dXJuIGEgbGlz
dCBvZiBjb21taXRzIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aG9zZSByZXN1bHRzLgorICAg
ICAgICAoc2NhbGVGb3JDb21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIGdlbmVyYXRl
IGEgc2NhbGUgdG8gYmUgY29uc3VtZWQgYnkgdGhlIGNhbnZhcyBUaW1lbGluZS4KKyAgICAgICAg
KHJlcG9zaXRvcmllc0ZvckNvbW1pdHMpOiBHaXZlbiBhIGxpc3Qgb2YgY29tbWl0cywgcmV0dXJu
IGEgc29ydGVkIGxpc3Qgb2YgYXNzb2NpYXRlZCByZXBvc2l0b3J5IGlkcy4KKyAgICAgICAgKHhB
eGlzRnJvbVNjYWxlKTogQ3JlYXRlIGEgY2FudmFzLWJhc2VkIHgtYXhpcyBiYXNlZCBvbiB0aGUg
cHJvdmlkZWQgc2NhbGUgYW5kIGEgcmVwb3NpdG9yeSBpZC4KKyAgICAgICAgKGluUGxhY2VDb21i
aW5lKTogQ29tYmluZSByZXN1bHQgb2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKHN0YXRzRm9y
U2luZ2xlUmVzdWx0KTogVHVybiBhIHNpbmdsZSByZXN1bHQgaW50byBhIHN0YXQgb2JqZWN0Lgor
ICAgICAgICAoY29tYmluZVJlc3VsdHMpOiBHaXZlbiBsaXN0cyBvZiByZXN1bHRzLCBjb21iaW5l
IHRoZXNlIGxpc3RzIHdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIGxpc3RzIHVuY2hhbmdlZC4K
KyAgICAgICAgKERvdCk6IERlbGV0ZWQuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludCk6
IFJlbmFtZWQgZnJvbSBUaW1lbGluZS4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LmNv
bnN0cnVjdG9yKTogQ2FudmFzIFRpbWVsaW5lIG1hbmFnZXMgZXhwYW5zaW9uIGFuZCBjb2xsYXBz
aW5nIG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC50
ZWFyZG93bik6IERldGFjaCBjYWxsYmFja3MgZnJvbSBDb21taXRCYW5rLgorICAgICAgICAoVGlt
ZWxpbmVGcm9tRW5kcG9pbnQudXBkYXRlKTogVXBkYXRlIHdpdGggYW55IG5ldyBjb21taXQgaW5m
b3JtYXRpb24sIGZvcmNlIGEgcmUtZHJhdyBvZiB0aGUgY3VycmVudAorICAgICAgICBjYWNoZSBj
b250ZW50cy4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LnJlbG9hZCk6IFJlbW92ZSBt
YW5hZ2VtZW50IG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRw
b2ludC5yZW5kZXIpOiBVc2UgY2FudmFzIFRpbWVsaW5lIGluc3RlYWQgb2YgaHRtbCB0aW1lbGlu
ZSB0byB2aXN1YWxpemUgcmVzdWx0cy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbDogVXNlIFRpbWVsaW5lRnJvbUVuZHBvaW50IGNs
YXNzLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1
aXRlX3Jlc3VsdHMuaHRtbDogRGl0dG8uCisKIDIwMTktMDgtMDEgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIEZvcm1EYXRhIHppcCBm
aWxlIGdlbmVyYXRpb24gdG8gTmV0d29ya1Byb2Nlc3MgYW5kIGVuYWJsZSBpdCBmb3IgYWxsIFdl
YktpdCBjbGllbnRzIGZvciB1cGxvYWRpbmcgZGlyZWN0b3JpZXMKSW5kZXg6IFRvb2xzL3Jlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5l
LmpzCShyZXZpc2lvbiAyNDgxNDEpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsOCBA
QAogaW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7CiBpbXBv
cnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5qcyc7CiBp
bXBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHBhcmFtc1RvUXVlcnksIHF1ZXJ5VG9Q
YXJhbXN9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKLWltcG9ydCB7RE9NLCBFdmVudFN0
cmVhbSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtET00sIEV2ZW50
U3RyZWFtLCBSRUYsIEZQfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtUaW1l
bGluZX0gZnJvbSAnL2xpYnJhcnkvanMvY29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMn
OwogCiAKIGNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CkBAIC03MSwxNjUgKzcyLDI4OCBAQCBj
bGFzcyBFeHBlY3RhdGlvbnMKIH0KIGxldCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZTsKIAot
ZnVuY3Rpb24gdGlja0ZvckNvbW1pdChjb21taXQsIHNjYWxlKSB7Ci0gICAgbGV0IHBhcmFtcyA9
IHsKLSAgICAgICAgYnJhbmNoOiBjb21taXQuYnJhbmNoID8gW2NvbW1pdC5icmFuY2hdIDogcXVl
cnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoLAotICAgICAgICB1
dWlkOiBbY29tbWl0LnV1aWQoKV0sCi0gICAgfQotICAgIGlmICghcGFyYW1zLmJyYW5jaCkKLSAg
ICAgICAgZGVsZXRlIHBhcmFtcy5icmFuY2g7Ci0gICAgY29uc3QgcXVlcnkgPSBwYXJhbXNUb1F1
ZXJ5KHBhcmFtcyk7Ci0KLSAgICBpZiAoc2NhbGUgPD0gMCkKLSAgICAgICAgcmV0dXJuICcnOwot
ICAgIGlmIChzY2FsZSA9PT0gMSkKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzY2FsZSI+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+Ci0gICAgICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9InRleHQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJl
Zj0iL2NvbW1pdD8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7U3RyaW5nKGNvbW1pdC5pZCku
c3Vic3RyaW5nKDAsMTApfTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAg
ICAgICAgICAgPC9kaXY+YDsKLSAgICBsZXQgcmVzdWx0ID0gJyc7Ci0gICAgd2hpbGUgKHNjYWxl
ID4gMCkgewotICAgICAgICBsZXQgY291bnRUb1VzZSA9IHNjYWxlOwotICAgICAgICBpZiAoY291
bnRUb1VzZSA9PT0gMTEgfHwgY291bnRUb1VzZSA9PSAxMikKLSAgICAgICAgICAgIGNvdW50VG9V
c2UgPSA2OwotICAgICAgICBlbHNlIGlmIChjb3VudFRvVXNlID4gMTApCi0gICAgICAgICAgICBj
b3VudFRvVXNlID0gMTA7Ci0gICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2NhbGUgZ3Jv
dXAtJHtjb3VudFRvVXNlfSI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLWxp
bmUtbGVmdCI+PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dCI+Ci0gICAgICAgICAgICAgICAgICAg
IDxhIGhyZWY9Ii9jb21taXQ/JHtxdWVyeX0iIHRhcmdldD0iX2JsYW5rIj4ke1N0cmluZyhjb21t
aXQuaWQpLnN1YnN0cmluZygwLDEwKX08L2E+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLWxpbmUtcmlnaHQiPjwvZGl2PgotICAgICAg
ICAgICAgPC9kaXY+YDsKLSAgICAgICAgc2NhbGUgLT0gY291bnRUb1VzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KK2Z1bmN0aW9uIG1pbmltdW1VdWlkRm9yUmVzdWx0cyhyZXN1bHRz
LCBsaW1pdCkgeworICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwKTsK
KyAgICBsZXQgbWluRGlzcGxheWVkVXVpZCA9IG5vdzsKKyAgICBsZXQgbWF4TGltaXRlZFV1aWQg
PSAwOworCisgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaCgoa2V5KSA9PiB7CisgICAg
ICAgIHJlc3VsdHNba2V5XS5mb3JFYWNoKHBhaXIgPT4geworICAgICAgICAgICAgaWYgKCFwYWly
LnJlc3VsdHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
IChsaW1pdCAhPT0gMSAmJiBsaW1pdCA9PT0gcGFpci5yZXN1bHRzLmxlbmd0aCkKKyAgICAgICAg
ICAgICAgICBtYXhMaW1pdGVkVXVpZCA9IE1hdGgubWF4KHBhaXIucmVzdWx0c1swXS51dWlkLCBt
YXhMaW1pdGVkVXVpZCk7CisgICAgICAgICAgICBlbHNlIGlmIChsaW1pdCA9PT0gMSkKKyAgICAg
ICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzW3BhaXIu
cmVzdWx0cy5sZW5ndGggLSAxXS51dWlkLCBtaW5EaXNwbGF5ZWRVdWlkKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5y
ZXN1bHRzWzBdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQpOworICAgICAgICB9KTsKKyAgICB9KTsK
IAotZnVuY3Rpb24gcmVuZGVyVGltZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzID0gW10sIHRv
cCA9IGZhbHNlKSB7Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gYnJlYWtzIHdpdGggbW9y
ZSB0aGFuIDMgcmVwb3NpdG9yaWVzIGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzUxMDQyOTgx
PgotICAgIGlmIChyZXBvc2l0b3JpZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIGlmICh0b3Ap
Ci0gICAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgIHJlcG9zaXRvcmllcyA9IFtudWxsXTsK
LSAgICB9Ci0gICAgY29uc3Qgc3RhcnQgPSB0b3AgPyBNYXRoLmNlaWwocmVwb3NpdG9yaWVzLmxl
bmd0aCAvIDIpIDogMDsKLSAgICBjb25zdCBlbmQgPSB0b3AgPyByZXBvc2l0b3JpZXMubGVuZ3Ro
IDogTWF0aC5jZWlsKHJlcG9zaXRvcmllcy5sZW5ndGggLyAyKTsKLSAgICBjb25zdCBudW1iZXJP
ZkVsZW1lbnRzID0gY29tbWl0cy5sZW5ndGggLSBNYXRoLm1heChyZXBvc2l0b3JpZXMubGVuZ3Ro
IC0gMSwgMCkKLSAgICByZXR1cm4gcmVwb3NpdG9yaWVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChy
ZXBvc2l0b3J5ID0+IHsKLSAgICAgICAgbGV0IGNvbW1pdHNGcm9tT3RoZXJSZXBvcyA9IDA7Ci0g
ICAgICAgIGxldCByZW5kZXJlZEVsZW1lbnRzID0gMDsKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJ4LWF4aXMgJHt0b3AgPyAndG9wJyA6ICcnfSI+Ci0gICAgICAgICAgICAgICAgJHtjb21t
aXRzLm1hcChjb21taXQgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9z
aXRvcnlfaWQgJiYgY29tbWl0LnJlcG9zaXRvcnlfaWQgIT09IHJlcG9zaXRvcnkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsrY29tbWl0c0Zyb21PdGhlclJlcG9zOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHNjYWxlID0gIE1hdGgubWluKGNvbW1pdHNGcm9tT3RoZXJSZXBvcyAr
IDEsIG51bWJlck9mRWxlbWVudHMgLSByZW5kZXJlZEVsZW1lbnRzKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29tbWl0c0Zyb21PdGhlclJlcG9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyZWRFbGVtZW50cyArPSBzY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tG
b3JDb21taXQoY29tbWl0LCBzY2FsZSk7Ci0gICAgICAgICAgICAgICAgfSkuam9pbignJyl9Ci0g
ICAgICAgICAgICA8L2Rpdj5gOwotICAgIH0pLmpvaW4oJycpOworICAgIGlmIChtaW5EaXNwbGF5
ZWRVdWlkID09PSBub3cpCisgICAgICAgIHJldHVybiBtYXhMaW1pdGVkVXVpZDsKKyAgICByZXR1
cm4gTWF0aC5tYXgobWluRGlzcGxheWVkVXVpZCwgbWF4TGltaXRlZFV1aWQpOwogfQogCi1jbGFz
cyBEb3QgewotICAgIHN0YXRpYyBtZXJnZShkb3RzID0ge30pIHsKLSAgICAgICAgbGV0IHJlc3Vs
dCA9IFtdOwotICAgICAgICBsZXQgaW5kZXggPSAwOwotICAgICAgICBsZXQgaGFzRGF0YSA9IHRy
dWU7Ci0KLSAgICAgICAgd2hpbGUgKGhhc0RhdGEpIHsKLSAgICAgICAgICAgIGxldCBkb3QgPSBu
ZXcgRG90KCk7Ci0gICAgICAgICAgICBoYXNEYXRhID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIE9i
amVjdC5rZXlzKGRvdHMpLmZvckVhY2goa2V5ID0+IHsKLSAgICAgICAgICAgICAgICBpZiAoZG90
c1trZXldLmxlbmd0aCA8PSBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGhhc0RhdGEgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICghZG90c1tr
ZXldW2luZGV4XS5jb3VudCkKK2Z1bmN0aW9uIGNvbW1pdHNGb3JSZXN1bHRzKHJlc3VsdHMsIGxp
bWl0LCBhbGxDb21taXRzID0gdHJ1ZSkgeworICAgIGNvbnN0IG1pbkRpc3BsYXllZFV1aWQgPSBt
aW5pbXVtVXVpZEZvclJlc3VsdHMobGltaXQpOworICAgIGxldCBjb21taXRzID0gW107CisgICAg
bGV0IHJlcG9zaXRvcmllcyA9IG5ldyBTZXQoKTsKKyAgICBsZXQgY3VycmVudENvbW1pdEluZGV4
ID0gQ29tbWl0QmFuay5jb21taXRzLmxlbmd0aCAtIDE7CisgICAgT2JqZWN0LmtleXMocmVzdWx0
cykuZm9yRWFjaCgoa2V5KSA9PiB7CisgICAgICAgIHJlc3VsdHNba2V5XS5mb3JFYWNoKHBhaXIg
PT4geworICAgICAgICAgICAgcGFpci5yZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHsKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGRvdC5jb3VudCkKLSAgICAg
ICAgICAgICAgICAgICAgZG90LmNvbWJpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsZXQg
Y2FuZGlkYXRlQ29tbWl0cyA9IFtdOwogCi0gICAgICAgICAgICAgICAgZG90LmNvdW50ICs9IGRv
dHNba2V5XVtpbmRleF0uY291bnQ7Ci0gICAgICAgICAgICAgICAgZG90LmZhaWxlZCArPSBkb3Rz
W2tleV1baW5kZXhdLmZhaWxlZDsKLSAgICAgICAgICAgICAgICBkb3QudGltZW91dCArPSBkb3Rz
W2tleV1baW5kZXhdLnRpbWVvdXQ7Ci0gICAgICAgICAgICAgICAgZG90LmNyYXNoICs9IGRvdHNb
a2V5XVtpbmRleF0uY3Jhc2g7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdC5jb21iaW5lZCkKLSAg
ICAgICAgICAgICAgICAgICAgZG90LmxpbmsgPSBudWxsOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZG90LmxpbmsgPSBkb3RzW2tleV1baW5kZXhdLmxpbms7Cisg
ICAgICAgICAgICAgICAgaWYgKCFhbGxDb21taXRzKQorICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQoKSA8
IHJlc3VsdC51dWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChhbGxDb21taXRzIHx8IENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29t
bWl0SW5kZXhdLnV1aWQoKSA9PSByZXN1bHQudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhbmRpZGF0ZUNvbW1pdHMucHVzaChDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdElu
ZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGgg
PT09IDAgfHwgY2FuZGlkYXRlQ29tbWl0c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAtIDFdLnV1
aWQoKSAhPT0gcmVzdWx0LnV1aWQpCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1p
dHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAnPycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAndXVpZCc6ICgpID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQorICAgICAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7CisgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9PiB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcmllcy5hZGQoY29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPT09IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tbWl0LnV1aWQoKSA+IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuc3BsaWNlKGluZGV4LCAwLCBjb21taXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChoYXNEYXRhKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRvdCk7Ci0gICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBpZiAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYg
Y29tbWl0cy5sZW5ndGgpIHsKKyAgICAgICAgbGV0IHRyYWlsaW5nUmVwb3NpdG9yaWVzID0gbmV3
IFNldChyZXBvc2l0b3JpZXMpOworICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUo
Y29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOworICAgICAgICB3aGls
ZSAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYgdHJhaWxpbmdSZXBvc2l0b3JpZXMuc2l6ZSkg
eworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRD
b21taXRJbmRleF07CisgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMuaGFzKGNv
bW1pdC5yZXBvc2l0b3J5X2lkKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaChjb21t
aXQpOworICAgICAgICAgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0ZShjb21taXQu
cmVwb3NpdG9yeV9pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAtLWN1cnJlbnRDb21t
aXRJbmRleDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBj
b25zdHJ1Y3Rvcihjb3VudCA9IDAsIGZhaWxlZCA9IDAsIHRpbWVvdXQgPSAwLCBjcmFzaCA9IDAs
IGNvbWJpbmVkID0gZmFsc2UsIGxpbmsgPSBudWxsKSB7Ci0gICAgICAgIHRoaXMuY291bnQgPSBj
b3VudDsKLSAgICAgICAgdGhpcy5mYWlsZWQgPSBmYWlsZWQ7Ci0gICAgICAgIHRoaXMudGltZW91
dCA9IHRpbWVvdXQ7Ci0gICAgICAgIHRoaXMuY3Jhc2ggPSBjcmFzaDsKLSAgICAgICAgdGhpcy5j
b21iaW5lZCA9IGNvbWJpbmVkOwotICAgICAgICB0aGlzLmxpbmsgPSBsaW5rOworCisgICAgcmVw
b3NpdG9yaWVzID0gWy4uLnJlcG9zaXRvcmllc107CisgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsK
KyAgICByZXR1cm4gY29tbWl0czsKK30KKworZnVuY3Rpb24gc2NhbGVGb3JDb21taXRzKGNvbW1p
dHMpIHsKKyAgICBsZXQgc2NhbGUgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gY29tbWl0cy5sZW5n
dGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCByZXBvc2l0b3J5X2lkID0gY29t
bWl0c1tpXS5yZXBvc2l0b3J5X2lkID8gY29tbWl0c1tpXS5yZXBvc2l0b3J5X2lkIDogJz8nOwor
ICAgICAgICBzY2FsZS51bnNoaWZ0KHt9KTsKKyAgICAgICAgc2NhbGVbMF1bcmVwb3NpdG9yeV9p
ZF0gPSBjb21taXRzW2ldOworICAgICAgICBpZiAoc2NhbGUubGVuZ3RoIDwgMikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBPYmplY3Qua2V5cyhzY2FsZVsxXSkuZm9yRWFjaCgoa2V5
KSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5ID09PSByZXBvc2l0b3J5X2lkIHx8IGtleSA9PT0g
Jz8nIHx8IGtleSA9PT0gJ3V1aWQnKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHNjYWxlWzBdW2tleV0gPSBzY2FsZVsxXVtrZXldOworICAgICAgICB9KTsKKyAgICAgICAg
c2NhbGVbMF0udXVpZCA9IE1hdGgubWF4KC4uLk9iamVjdC5rZXlzKHNjYWxlWzBdKS5tYXAoKGtl
eSkgPT4geworICAgICAgICAgICAgcmV0dXJuIHNjYWxlWzBdW2tleV0udXVpZCgpOworICAgICAg
ICB9KSk7CiAgICAgfQotICAgIHRvU3RyaW5nKCkgewotICAgICAgICBpZiAoIXRoaXMuY291bnQp
Ci0gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImRvdCBlbXB0eSI+PC9kaXY+YDsKKyAg
ICByZXR1cm4gc2NhbGU7Cit9CiAKLSAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7CitmdW5jdGlv
biByZXBvc2l0b3JpZXNGb3JDb21taXRzKGNvbW1pdHMpIHsKKyAgICBsZXQgcmVwb3NpdG9yaWVz
ID0gbmV3IFNldCgpOworICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0KSA9PiB7CisgICAgICAg
IGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQo
Y29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAgIH0pOworICAgIHJlcG9zaXRvcmllcyA9IFsuLi5y
ZXBvc2l0b3JpZXNdOworICAgIGlmICghcmVwb3NpdG9yaWVzLmxlbmd0aCkKKyAgICAgICAgcmVw
b3NpdG9yaWVzID0gWyc/J107CisgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsKKyAgICByZXR1cm4g
cmVwb3NpdG9yaWVzOworfQogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlcihjc3NDbGFzcywgaW5z
aWRlPScnKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi5saW5rKQotICAgICAgICAgICAgICAgIHJl
dHVybiBgPGEgaHJlZj0iJHtzZWxmLmxpbmt9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiR7Y3Nz
Q2xhc3N9Ij4ke2luc2lkZX08L2E+YDsKLSAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0i
JHtjc3NDbGFzc30iPiR7aW5zaWRlfTwvZGl2PmA7CitmdW5jdGlvbiB4QXhpc0Zyb21TY2FsZShz
Y2FsZSwgcmVwb3NpdG9yeSwgdXBkYXRlc0FycmF5LCBpc1RvcD1mYWxzZSkKK3sKKyAgICBmdW5j
dGlvbiBzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpIHsKKyAgICAgICAgY29uc3Qgc3VsdCA9IHNj
YWxlLm1hcChub2RlID0+IHsKKyAgICAgICAgICAgIGxldCBjb21taXQgPSBub2RlW3JlcG9zaXRv
cnldOworICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgY29tbWl0ID0g
bm9kZVsnPyddOworICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHtpZDogJyd9OworICAgICAgICAgICAgcmV0dXJuIGNvbW1pdDsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiBzdWx0OworICAgIH0KKworICAgIHJldHVybiBUaW1lbGluZS5DYW52YXNY
QXhpc0NvbXBvbmVudChzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpLCB7CisgICAgICAgIGlzVG9w
OiBpc1RvcCwKKyAgICAgICAgaGVpZ2h0OiAxMzAsCisgICAgICAgIG9uU2NhbGVDbGljazogKG5v
ZGUpID0+IHsKKyAgICAgICAgICAgIGlmICghbm9kZS5sYWJlbC5pZCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBsZXQgcGFyYW1zID0geworICAgICAgICAgICAgICAgIGJy
YW5jaDogbm9kZS5sYWJlbC5icmFuY2ggPyBbbm9kZS5sYWJlbC5icmFuY2hdIDogcXVlcnlUb1Bh
cmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoLAorICAgICAgICAgICAgICAg
IHV1aWQ6IFtub2RlLmxhYmVsLnV1aWQoKV0sCisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIXBhcmFtcy5icmFuY2gpCisgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtcy5icmFuY2g7
CisgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHBhcmFtc1RvUXVlcnkocGFyYW1zKTsKKyAgICAg
ICAgICAgIHdpbmRvdy5vcGVuKGAvY29tbWl0PyR7cXVlcnl9YCwgJ19ibGFuaycpOworICAgICAg
ICB9LAorICAgICAgICAvLyBQZXIgdGhlIGJpcnRoZGF5IHBhcmFkb3gsIDEwJSBjaGFuZ2Ugb2Yg
Y29sbGlzaW9uIHdpdGggNy43IG1pbGxpb24gY29tbWl0cyB3aXRoIDEyIGNoYXJhY3RlciBjb21t
aXRzCisgICAgICAgIGdldExhYmVsRnVuYzogKGNvbW1pdCkgPT4ge3JldHVybiBjb21taXQgPyBj
b21taXQuaWQuc3Vic3RyaW5nKDAsMTIpIDogJz8nO30sCisgICAgICAgIGV4cG9ydGVyOiAodXBk
YXRlRnVuY3Rpb24pID0+IHsKKyAgICAgICAgICAgIHVwZGF0ZXNBcnJheS5wdXNoKChzY2FsZSkg
PT4ge3VwZGF0ZUZ1bmN0aW9uKHNjYWxlRm9yUmVwb3NpdG9yeShzY2FsZSkpO30pOworICAgICAg
ICB9LAorICAgIH0pOworfQorCitjb25zdCB0ZXN0c1JlZ2V4ID0gL3Rlc3RzXyhbYS16XSkrLzsK
K2NvbnN0IGZhaWx1cmVUeXBlT3JkZXIgPSBbJ2ZhaWxlZCcsICd0aW1lZG91dCcsICdjcmFzaGVk
J107Citjb25zdCBmYWlsdXJlVHlwZU1hcHBpbmcgPSB7CisgICAgZmFpbGVkOiAnRVJST1InLAor
ICAgIHRpbWVkb3V0OiAnVElNRU9VVCcsCisgICAgY3Jhc2hlZDogJ0NSQVNIJywKK30KKworZnVu
Y3Rpb24gaW5QbGFjZUNvbWJpbmUob3V0LCBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiBvdXQ7CisKKyAgICBpZiAoIW91dCkgeworICAgICAgICBvdXQgPSB7fTsKKyAgICAg
ICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7CisgICAgICAgICAgICBpZiAob2Jq
W2tleV0gaW5zdGFuY2VvZiBPYmplY3QpCisgICAgICAgICAgICAgICAgb3V0W2tleV0gPSBpblBs
YWNlQ29tYmluZShvdXRba2V5XSwgb2JqW2tleV0pOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG91dFtrZXldID0gb2JqW2tleV07CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7
CisgICAgICAgIE9iamVjdC5rZXlzKG91dCkuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAg
aWYgKG91dFtrZXldIGluc3RhbmNlb2YgT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgb3V0W2tl
eV0gPSBpblBsYWNlQ29tYmluZShvdXRba2V5XSwgb2JqW2tleV0pOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IG9mIHNwZWNpYWwg
Y2FzZSBrZXlzIHdoaWNoIG5lZWQgdG8gYmUgYWRkZWQgdG9nZXRoZXIKKyAgICAgICAgICAgIGlm
IChrZXkubWF0Y2godGVzdHNSZWdleCkpIHsKKyAgICAgICAgICAgICAgICBvdXRba2V5XSArPSBv
Ympba2V5XTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBrZXkgZXhpc3RzLCBidXQgZG9lc24ndCBtYXRjaCwgZGVsZXRlIGl0
CisgICAgICAgICAgICBpZiAoIShrZXkgaW4gb2JqKSB8fCBvdXRba2V5XSAhPSBvYmpba2V5XSkg
eworICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXRba2V5XTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBPYmplY3Qua2V5cyhvYmop
LmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXkubWF0Y2godGVzdHNSZWdleCkg
JiYgIShrZXkgaW4gb3V0KSkKKyAgICAgICAgICAgICAgICBvdXRba2V5XSA9IG9ialtrZXldOwor
ICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG91dDsKK30KKworZnVuY3Rpb24gc3RhdHNG
b3JTaW5nbGVSZXN1bHQocmVzdWx0KSB7CisgICAgY29uc3QgYWN0dWFsSWQgPSBFeHBlY3RhdGlv
bnMuc3RyaW5nVG9TdGF0ZUlkKHJlc3VsdC5hY3R1YWwpOworICAgIGNvbnN0IHVuZXhwZWN0ZWRJ
ZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRS
ZXN1bHRzKHJlc3VsdC5hY3R1YWwsIHJlc3VsdC5leHBlY3RlZCkpOworICAgIGxldCBzdGF0cyA9
IHsKKyAgICAgICAgdGVzdHNfcnVuOiAxLAorICAgICAgICB0ZXN0c19za2lwcGVkOiAwLAorICAg
IH0KKyAgICBmYWlsdXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgIGNvbnN0
IGlkRm9yVHlwZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBw
aW5nW3R5cGVdKTsKKyAgICAgICAgc3RhdHNbYHRlc3RzXyR7dHlwZX1gXSA9IGFjdHVhbElkID4g
aWRGb3JUeXBlICA/IDAgOiAxOworICAgICAgICBzdGF0c1tgdGVzdHNfdW5leHBlY3RlZF8ke3R5
cGV9YF0gPSB1bmV4cGVjdGVkSWQgPiBpZEZvclR5cGUgID8gMCA6IDE7CisgICAgfSk7CisgICAg
cmV0dXJuIHN0YXRzOworfQorCitmdW5jdGlvbiBjb21iaW5lUmVzdWx0cygpIHsKKyAgICBsZXQg
Y291bnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLmZpbGwoMCk7CisgICAgbGV0IGRh
dGEgPSBbXTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIEZpbmQgY2FuZGlkYXRl
IHV1aWQKKyAgICAgICAgbGV0IHV1aWQgPSAwOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGNvdW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZVV1aWQgPSBu
dWxsOworICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50c1tpXSAmJiBhcmd1bWVudHNbaV0ubGVu
Z3RoID4gY291bnRzW2ldKSB7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlVXVpZCA9IGFyZ3Vt
ZW50c1tpXVtjb3VudHNbaV1dLnV1aWQ7CisgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVV1
aWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICsrY291bnRz
W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVV1aWQpCisgICAg
ICAgICAgICAgICAgdXVpZCA9IE1hdGgubWF4KHV1aWQsIGNhbmRpZGF0ZVV1aWQpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCF0aGlzLmZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybiByZW5k
ZXIoJ2RvdCBzdWNjZXNzJyk7CisgICAgICAgIGlmICghdXVpZCkKKyAgICAgICAgICAgIHJldHVy
biBkYXRhOworCisgICAgICAgIC8vIENvbWJpbmUgcmVsZXZhbnQgcmVzdWx0cworICAgICAgICBs
ZXQgZGF0YU5vZGUgPSBudWxsOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50cy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGNvdW50c1tpXSA+PSBhcmd1bWVudHNbaV0u
bGVuZ3RoIHx8ICFhcmd1bWVudHNbaV1bY291bnRzW2ldXSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV1bY291bnRzW2ldXS51dWlkICE9PSB1
dWlkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoZGF0YU5v
ZGUgJiYgIWRhdGFOb2RlLnN0YXRzKQorICAgICAgICAgICAgICAgIGRhdGFOb2RlLnN0YXRzID0g
c3RhdHNGb3JTaW5nbGVSZXN1bHQoZGF0YU5vZGUpOworCisgICAgICAgICAgICBkYXRhTm9kZSA9
IGluUGxhY2VDb21iaW5lKGRhdGFOb2RlLCBhcmd1bWVudHNbaV1bY291bnRzW2ldXSk7CiAKLSAg
ICAgICAgbGV0IGtleSA9ICdmYWlsZWQnOwotICAgICAgICBpZiAodGhpcy50aW1lb3V0KQotICAg
ICAgICAgICAga2V5ID0gJ3RpbWVvdXQnOwotICAgICAgICBpZiAodGhpcy5jcmFzaCkKLSAgICAg
ICAgICAgIGtleSA9ICdjcmFzaCc7Ci0KLSAgICAgICAgaWYgKCF0aGlzLmNvbWJpbmVkKQotICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlcihgZG90ICR7a2V5fWAsIGA8ZGl2IGNsYXNzPSJ0YWciIHN0
eWxlPSJjb2xvcjp2YXIoLS1ib2xkSW52ZXJzZUNvbG9yKSI+JHt0aGlzLmZhaWxlZH08L2Rpdj5g
KTsKLQotICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtrZXl9YCwgYDxkaXYgY2xhc3M9InRh
ZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29sb3IpIj4KLSAgICAgICAgICAgICAg
ICAke2Z1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudCA9IE1hdGgu
Y2VpbChzZWxmLmZhaWxlZCAvIHNlbGYuY291bnQgKiAxMDAgLSAuNSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChwZXJjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
ZXJjZW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwxJzsKLSAgICAgICAgICAgICAg
ICB9KCl9ICUKLSAgICAgICAgICAgIDwvZGl2PmApOworICAgICAgICAgICAgaWYgKGRhdGFOb2Rl
LnN0YXRzICYmICFhcmd1bWVudHNbaV1bY291bnRzW2ldXS5zdGF0cykKKyAgICAgICAgICAgICAg
ICBkYXRhTm9kZS5zdGF0cyA9IGluUGxhY2VDb21iaW5lKGRhdGFOb2RlLnN0YXRzLCBzdGF0c0Zv
clNpbmdsZVJlc3VsdChhcmd1bWVudHNbaV1bY291bnRzW2ldXSkpOworCisKKyAgICAgICAgICAg
ICsrY291bnRzW2ldOworICAgICAgICB9CisgICAgICAgIGlmIChkYXRhTm9kZSkKKyAgICAgICAg
ICAgIGRhdGEucHVzaChkYXRhTm9kZSk7CiAgICAgfQorCisgICAgcmV0dXJuIGRhdGE7CiB9CiAK
LWNsYXNzIFRpbWVsaW5lIHsKK2NsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50IHsKICAgICBjb25z
dHJ1Y3RvcihlbmRwb2ludCwgc3VpdGUgPSBudWxsKSB7CiAgICAgICAgIHRoaXMuZW5kcG9pbnQg
PSBlbmRwb2ludDsKICAgICAgICAgdGhpcy5kaXNwbGF5QWxsQ29tbWl0cyA9IHRydWU7CiAKICAg
ICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IENvbmZpZ3VyYXRpb24uZnJvbVF1ZXJ5KCk7CiAg
ICAgICAgIHRoaXMucmVzdWx0cyA9IHt9OwotICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IHt9Owot
ICAgICAgICB0aGlzLmV4cGFuZGVkU0RLcyA9IHt9OwogICAgICAgICB0aGlzLnN1aXRlID0gc3Vp
dGU7ICAvLyBTdWl0ZSBpcyBvZnRlbiBpbXBsaWVkIGJ5IHRoZSBlbmRwb2ludCwgYnV0IHRyeWlu
ZyB0byBkZXRlcm1pbmUgc3VpdGUgZnJvbSBlbmRwb2ludCBpcyBub3QgdHJpdmlhbC4KIAorICAg
ICAgICB0aGlzLnVwZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhpcy54YXhpc1VwZGF0ZXMgPSBbXTsK
KyAgICAgICAgdGhpcy50aW1lbGluZVVwZGF0ZSA9IG51bGw7CisgICAgICAgIHRoaXMucmVwb3Np
dG9yaWVzID0gW107CisKICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7Ci0gICAgICAgIHRoaXMu
Y29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsKLSAgICAgICAgICAgIHRo
aXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldID0gW107Ci0gICAgICAgICAgICB0aGlz
LmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID0gdHJ1ZTsKLSAgICAgICAgfSk7CiAK
ICAgICAgICAgdGhpcy5sYXRlc3REaXNwYXRjaCA9IERhdGUubm93KCk7CiAgICAgICAgIHRoaXMu
cmVmID0gUkVGLmNyZWF0ZVJlZih7CkBAIC0yNDQsMTUgKzM2OCw0NiBAQCBjbGFzcyBUaW1lbGlu
ZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgICAgIENvbW1pdEJhbmsuY2Fs
bGJhY2tzLnB1c2goKCkgPT4gewotICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnlUb1Bh
cmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSk7Ci0gICAgICAgICAgICBzZWxmLnJlZi5z
ZXRTdGF0ZShwYXJhbXMubGltaXQgPyBwYXJzZUludChwYXJhbXMubGltaXRbcGFyYW1zLmxpbWl0
Lmxlbmd0aCAtIDFdKSA6IERFRkFVTFRfTElNSVQpOwotICAgICAgICB9KTsKKyAgICAgICAgdGhp
cy5jb21taXRfY2FsbGJhY2sgPSAoKSA9PiB7CisgICAgICAgICAgICBzZWxmLnVwZGF0ZSgpOwor
ICAgICAgICB9OworICAgICAgICBDb21taXRCYW5rLmNhbGxiYWNrcy5wdXNoKHRoaXMuY29tbWl0
X2NhbGxiYWNrKTsKIAogICAgICAgICB0aGlzLnJlbG9hZCgpOwogICAgIH0KKyAgICB0ZWFyZG93
bigpIHsKKyAgICAgICAgQ29tbWl0QmFuay5jYWxsYmFja3MgPSBDb21taXRCYW5rLmNhbGxiYWNr
cy5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5jb21taXRfY2FsbGJhY2sgPT09IHZhbHVlOworICAgICAgICB9KTsKKyAgICB9CisgICAgdXBk
YXRlKCkgeworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVS
TC5zcGxpdCgnPycpWzFdKTsKKyAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNGb3JSZXN1
bHRzKHRoaXMucmVzdWx0cywgcGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3Bh
cmFtcy5saW1pdC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJTUlULCB0aGlzLmFsbENvbW1pdHMp
OworICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlRm9yQ29tbWl0cyhjb21taXRzKTsKKworICAg
ICAgICBjb25zdCBuZXdSZXBvc2l0b3JpZXMgPSByZXBvc2l0b3JpZXNGb3JDb21taXRzKGNvbW1p
dHMpOworICAgICAgICBsZXQgaGF2ZU5ld1JlcG9zID0gdGhpcy5yZXBvc2l0b3JpZXMubGVuZ3Ro
ICE9IG5ld1JlcG9zaXRvcmllcy5sZW5ndGg7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyAhaGF2
ZU5ld1JlcG9zICYmIGkgPCB0aGlzLnJlcG9zaXRvcmllcy5sZW5ndGggJiYgaSA8IG5ld1JlcG9z
aXRvcmllcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGhhdmVOZXdSZXBvcyA9IHRoaXMucmVw
b3NpdG9yaWVzW2ldICE9IG5ld1JlcG9zaXRvcmllc1tpXTsKKyAgICAgICAgaWYgKGhhdmVOZXdS
ZXBvcyAmJiB0aGlzLnRpbWVsaW5lVXBkYXRlKSB7CisgICAgICAgICAgICB0aGlzLnhheGlzVXBk
YXRlcyA9IFtdOworICAgICAgICAgICAgbGV0IHRvcCA9IHRydWU7CisgICAgICAgICAgICBsZXQg
Y29tcG9uZW50cyA9IFtdOworCisgICAgICAgICAgICBuZXdSZXBvc2l0b3JpZXMuZm9yRWFjaChy
ZXBvc2l0b3J5ID0+IHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goeEF4aXNGcm9t
U2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHRoaXMueGF4aXNVcGRhdGVzLCB0b3ApKTsKKyAgICAg
ICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0
aGlzLnRpbWVsaW5lVXBkYXRlKGNvbXBvbmVudHMpOworICAgICAgICAgICAgdGhpcy5yZXBvc2l0
b3JpZXMgPSBuZXdSZXBvc2l0b3JpZXM7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnVwZGF0
ZXMuZm9yRWFjaChmdW5jID0+IHtmdW5jKHNjYWxlKTt9KQorICAgICAgICB0aGlzLnhheGlzVXBk
YXRlcy5mb3JFYWNoKGZ1bmMgPT4ge2Z1bmMoc2NhbGUpO30pOworICAgIH0KICAgICByZXJlbmRl
cigpIHsKLSAgICAgICAgbGV0IHBhcmFtcyA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNw
bGl0KCc/JylbMV0pOworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeVRvUGFyYW1zKGRvY3Vt
ZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKICAgICAgICAgdGhpcy5yZWYuc2V0U3RhdGUocGFyYW1z
LmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3BhcmFtcy5saW1pdC5sZW5ndGggLSAxXSkg
OiBERUZBVUxUX0xJTUlUKTsKICAgICB9CiAgICAgcmVsb2FkKCkgewpAQCAtMjczLDExICs0Mjgs
OCBAQCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgIGlmICghZGVlcENvbXBhcmUobmV3Q29uZmln
cywgdGhpcy5jb25maWd1cmF0aW9ucykpIHsKICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlv
bnMgPSBuZXdDb25maWdzOwogICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0ge307Ci0gICAgICAg
ICAgICB0aGlzLmNvbGxhcHNlZCA9IHt9OwotICAgICAgICAgICAgdGhpcy5leHBhbmRlZFNES3Mg
PSB7fTsKICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0
aW9uID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tl
eSgpXSA9IFtdOwotICAgICAgICAgICAgICAgIHRoaXMuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24u
dG9LZXkoKV0gPSB0cnVlOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIApAQCAtMzQxLDI2
OCArNDkzLDIxMiBAQCBjbGFzcyBUaW1lbGluZSB7CiAKICAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5yZWZ9Ij48L2Rpdj5gOwogICAgIH0KKwogICAgIHJl
bmRlcihsaW1pdCkgewotICAgICAgICBsZXQgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8g
MTApOwotICAgICAgICBsZXQgbWluRGlzcGxheWVkVXVpZCA9IG5vdzsKLSAgICAgICAgbGV0IG1h
eExpbWl0ZWRVdWlkID0gMDsKLSAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNv
bmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24u
dG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhaXIucmVz
dWx0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICBpZiAobGltaXQgIT09IDEgJiYgbGltaXQgPT09IHBhaXIucmVzdWx0cy5sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgICAgIG1heExpbWl0ZWRVdWlkID0gTWF0aC5tYXgocGFpci5yZXN1bHRzWzBd
LnV1aWQsIG1heExpbWl0ZWRVdWlkKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChsaW1pdCA9
PT0gMSkKLSAgICAgICAgICAgICAgICAgICAgbWluRGlzcGxheWVkVXVpZCA9IE1hdGgubWluKHBh
aXIucmVzdWx0c1twYWlyLnJlc3VsdHMubGVuZ3RoIC0gMV0udXVpZCwgbWluRGlzcGxheWVkVXVp
ZCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtaW5EaXNwbGF5
ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzWzBdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAobWluRGlzcGxheWVk
VXVpZCA9PT0gbm93KQotICAgICAgICAgICAgbWluRGlzcGxheWVkVXVpZCA9IG1heExpbWl0ZWRV
dWlkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5t
YXgobWluRGlzcGxheWVkVXVpZCwgbWF4TGltaXRlZFV1aWQpOwotCi0gICAgICAgIGxldCBjb21t
aXRzID0gW107Ci0gICAgICAgIGxldCByZXBvc2l0b3JpZXMgPSBuZXcgU2V0KCk7Ci0gICAgICAg
IGxldCBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsK
LSAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNvbmZpZ3VyYXRpb24gPT4gewot
ICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChw
YWlyID0+IHsKLSAgICAgICAgICAgICAgICBwYWlyLnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4g
ewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlk
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBs
ZXQgY2FuZGlkYXRlQ29tbWl0cyA9IFtdOworICAgICAgICBjb25zdCBzZWxmID0gdGhpczsKKyAg
ICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNGb3JSZXN1bHRzKHRoaXMucmVzdWx0cywgbGlt
aXQsIHRoaXMuYWxsQ29tbWl0cyk7CisgICAgICAgIGNvbnN0IHNjYWxlID0gc2NhbGVGb3JDb21t
aXRzKGNvbW1pdHMpOworCisgICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpOworICAgICAgICBjb25zdCBjb2xvck1hcCA9IHsKKyAgICAg
ICAgICAgIHN1Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ncmVlbkxp
Z2h0JykudHJpbSgpLAorICAgICAgICAgICAgZmFpbGVkOiBjb21wdXRlZFN0eWxlLmdldFByb3Bl
cnR5VmFsdWUoJy0tcmVkTGlnaHQnKS50cmltKCksCisgICAgICAgICAgICB0aW1lZG91dDogY29t
cHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5nZUxpZ2h0JykudHJpbSgpLAorICAg
ICAgICAgICAgY3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXB1cnBs
ZUxpZ2h0JykudHJpbSgpLAorICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmRpc3BsYXlBbGxDb21taXRzKQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENv
bW1pdEluZGV4ID0gQ29tbWl0QmFuay5jb21taXRzLmxlbmd0aCAtIDE7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQo
KSA8IHJlc3VsdC51dWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheUFsbENvbW1pdHMgfHwgQ29tbWl0
QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0udXVpZCgpID09IHJlc3VsdC51dWlkKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMucHVzaChDb21taXRC
YW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAtLWN1cnJlbnRDb21taXRJbmRleDsKKyAgICAgICAgdGhpcy51cGRhdGVzID0gW107CisgICAg
ICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAgICAgICBnZXRTY2FsZUZ1bmM6ICh2YWx1ZSkg
PT4geworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS51dWlkKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ge3V1aWQ6IHZhbHVlLnV1aWR9OworICAgICAgICAgICAgICAgIHJl
dHVybiB7fTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjb21wYXJlRnVuYzogKGEsIGIp
ID0+IHtyZXR1cm4gYi51dWlkIC0gYS51dWlkO30sCisgICAgICAgICAgICByZW5kZXJGYWN0b3J5
OiAoZHJhd0RvdCkgPT4gKGRhdGEsIGNvbnRleHQsIHgsIHkpID0+IHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkcmF3RG90KGNvbnRleHQs
IHgsIHksIHRydWUpOworCisgICAgICAgICAgICAgICAgbGV0IHRhZyA9IG51bGw7CisgICAgICAg
ICAgICAgICAgbGV0IGNvbG9yID0gY29sb3JNYXAuc3VjY2VzczsKKyAgICAgICAgICAgICAgICBp
ZiAoZGF0YS5zdGF0cykgeworICAgICAgICAgICAgICAgICAgICB0YWcgPSBkYXRhLnN0YXRzW2B0
ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9ZmFpbGVkYF07
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmYWlsdXJlcyB0aGF0IGFyZSBh
IHJlc3VsdCBvZiBtdWx0aXBsZSBydW5zLCBjb21iaW5lIHRoZW0uCisgICAgICAgICAgICAgICAg
ICAgIGlmICh0YWcgJiYgIWRhdGEuc3RhcnRfdGltZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGFnID0gTWF0aC5jZWlsKHRhZyAvIGRhdGEuc3RhdHMudGVzdHNfcnVuICogMTAwIC0gLjUp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFnID0gJzwxJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IGAke3Rh
Z30gJWAKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY2Fu
ZGlkYXRlQ29tbWl0cy5sZW5ndGggPT09IDAgfHwgY2FuZGlkYXRlQ29tbWl0c1tjYW5kaWRhdGVD
b21taXRzLmxlbmd0aCAtIDFdLnV1aWQoKSAhPT0gcmVzdWx0LnV1aWQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdpZCc6ICc/JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXVpZCc6ICgp
ID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAK
LSAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
Y2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9PiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yaWVzLmFkZChjb21taXQucmVwb3NpdG9yeV9pZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxlbmd0aCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCgpID09PSBjb21taXRzW2luZGV4XS51dWlk
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA+IGNvbW1pdHNbaW5kZXhdLnV1aWQo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRzLnNwbGljZShpbmRl
eCwgMCwgY29tbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVU
eXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
YXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAn
Xyd9JHt0eXBlfWBdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNv
bG9yTWFwW3R5cGVdOwogICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKGN1cnJlbnRDb21t
aXRJbmRleCA+PSAwICYmIGNvbW1pdHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBsZXQgdHJhaWxp
bmdSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KHJlcG9zaXRvcmllcyk7Ci0gICAgICAgICAgICB0cmFp
bGluZ1JlcG9zaXRvcmllcy5kZWxldGUoY29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdLnJlcG9z
aXRvcnlfaWQpOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDb21taXRJbmRleCA+PSAwICYm
IHRyYWlsaW5nUmVwb3NpdG9yaWVzLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjb21t
aXQgPSBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XTsKLSAgICAgICAgICAg
ICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMuaGFzKGNvbW1pdC5yZXBvc2l0b3J5X2lkKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb21taXRzLnB1c2goY29tbWl0KTsKLSAgICAgICAgICAg
ICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVsZXRlKGNvbW1pdC5yZXBvc2l0b3J5X2lk
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsZXQgcmVz
dWx0SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGRhdGEuYWN0dWFsKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJFeHBlY3RlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlv
bnMudW5leHBlY3RlZFJlc3VsdHMoZGF0YS5hY3R1YWwsIGRhdGEuZXhwZWN0ZWQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFpbHVyZVR5cGVPcmRlci5mb3JFYWNoKHR5cGUgPT4geworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoZmFpbHVy
ZVR5cGVNYXBwaW5nW3R5cGVdKSA+PSByZXN1bHRJZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZHJhd0RvdChjb250ZXh0
LCB4LCB5LCBmYWxzZSwgdGFnID8gdGFnIDogbnVsbCwgZmFsc2UsIGNvbG9yKTsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gb25Eb3RDbGlja0ZhY3Rvcnko
Y29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIChkYXRhKSA9PiB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBzb21ldGhpbmcgc2FuZSBoZXJlLCBidXQg
d2UgcHJvYmFibHkgbmVlZCBhbm90aGVyIGVuZHBvaW50CisgICAgICAgICAgICAgICAgaWYgKCFk
YXRhLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ05vZGUgaXMgYSBj
b21iaW5hdGlvbiBvZiBtdWx0aXBsZSBydW5zJyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLS1jdXJyZW50Q29tbWl0SW5k
ZXg7CisKKyAgICAgICAgICAgICAgICBsZXQgYnVpbGRQYXJhbXMgPSBjb25maWd1cmF0aW9uLnRv
UGFyYW1zKCk7CisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3N1aXRlJ10gPSBbc2VsZi5z
dWl0ZV07CisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3V1aWQnXSA9IFtkYXRhLnV1aWRd
OworICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydhZnRlcl90aW1lJ10gPSBbZGF0YS5zdGFy
dF90aW1lXTsKKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYmVmb3JlX3RpbWUnXSA9IFtk
YXRhLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGAvdXJscy9idWls
ZD8ke3BhcmFtc1RvUXVlcnkoYnVpbGRQYXJhbXMpfWAsICdfYmxhbmsnKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgfQogCisgICAgICAgIGZ1bmN0aW9uIGV4cG9ydGVyRmFjdG9yeShkYXRhKSB7
CisgICAgICAgICAgICByZXR1cm4gKHVwZGF0ZUZ1bmN0aW9uKSA9PiB7CisgICAgICAgICAgICAg
ICAgc2VsZi51cGRhdGVzLnB1c2goKHNjYWxlKSA9PiB7dXBkYXRlRnVuY3Rpb24oZGF0YSwgc2Nh
bGUpO30pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmVwb3NpdG9yaWVz
ID0gWy4uLnJlcG9zaXRvcmllc107Ci0gICAgICAgIHJlcG9zaXRvcmllcy5zb3J0KCk7CisgICAg
ICAgIGxldCBjaGlsZHJlbiA9IFtdOworICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZvckVh
Y2goY29uZmlndXJhdGlvbiA9PiB7CisgICAgICAgICAgICBpZiAoIXRoaXMucmVzdWx0c1tjb25m
aWd1cmF0aW9uLnRvS2V5KCldIHx8IE9iamVjdC5rZXlzKHRoaXMucmVzdWx0c1tjb25maWd1cmF0
aW9uLnRvS2V5KCldKS5sZW5ndGggPT09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0idGltZWxpbmUiPgotICAgICAgICAgICAgICAgIDxk
aXYgJHtyZXBvc2l0b3JpZXMubGVuZ3RoID4gMSA/IGBjbGFzcz0iaGVhZGVyIHdpdGgtdG9wLXgt
YXhpcyJgIDogYGNsYXNzPSJoZWFkZXIiYH0+Ci0gICAgICAgICAgICAgICAgICAgICR7dGhpcy5j
b25maWd1cmF0aW9ucy5tYXAoY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0p
Lmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGV4cGFuZGVyID0gUkVGLmNyZWF0ZVJlZih7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IGVsZW1lbnQgPT4gewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRv
S2V5KCldID0gIXNlbGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcmVuZGVyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gYDxkaXYgY2xhc3M9InNlcmllcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxhIHJlZj0iJHtleHBhbmRlcn0iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24oKSB7cmV0dXJuIHNl
bGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPyAnKycgOiAnLSd9KCl9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJHtjb25maWd1cmF0aW9ufQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
ZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkW2NvbmZp
Z3VyYXRpb24udG9LZXkoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
ZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnID0gY29uZmlnID0+IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzZXJpZXMi
PiR7Y29uZmlnfTwvZGl2PmA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IHF1ZXVlUGFyYW1zID0gY29uZmlnLnRvUGFyYW1zKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHF1ZXVlUGFyYW1zWydzdWl0ZSddID0gW3RoaXMuc3VpdGVdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdMaW5rID0gYDxhIGNsYXNzPSJ0ZXh0
IHRpbnkiIGhyZWY9Ii91cmxzL3F1ZXVlPyR7cGFyYW1zVG9RdWVyeShxdWV1ZVBhcmFtcyl9IiB0
YXJnZXQ9Il9ibGFuayI+JHtjb25maWd9PC9hPmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGtleSA9IGNvbmZpZy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBleHBhbmRlciA9IFJFRi5jcmVhdGVSZWYoewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IGVsZW1lbnQgPT4gewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgp
ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5l
eHBhbmRlZFNES3Nba2V5XSA9ICFzZWxmLmV4cGFuZGVkU0RLc1trZXldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcmVuZGVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkU0RLc1trZXld
ID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtjb25maWdMaW5rfTwvZGl2PmA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VyaWVzIHRleHQgdGlu
eSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgcmVmPSIke2V4
cGFuZGVyfSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiPgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkge3JldHVybiBzZWxmLmV4cGFuZGVk
U0RLc1trZXldID8gJy1zZGsnIDogJytzZGsnfSgpfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAke2NvbmZpZ0xpbmt9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZXQgbGFzdENvbmZpZyA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5mb3JFYWNoKHBh
aXIgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5yZXN1bHRz
Lmxlbmd0aCA8PSAwIHx8IHBhaXIucmVzdWx0c1twYWlyLnJlc3VsdHMubGVuZ3RoIC0gMV0udXVp
ZCA8IG1pbkRpc3BsYXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJyc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZp
ZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJhdGlvbik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNkayA9IGNvbmZpZy5zZGs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuc2RrOyAgLy8gU3RyaXAgb3V0IHNkayBp
bmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkg
PSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y29tcGFyZUluZGV4ID0gY29uZmlnLmNvbXBhcmUobGFzdENvbmZpZyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29uZmlnICE9PSBudWxsICYmIGNvbXBhcmVJbmRl
eCAhPSAwICYmICF0aGlzLmV4cGFuZGVkU0RLc1tsYXN0Q29uZmlnLnRvS2V5KCldKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlcmllc0hlYWRlckZvclNE
S0xlc3NDb25maWcobGFzdENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNvbXBhcmVJbmRleCA9PT0gMCAmJiB0aGlzLmV4cGFuZGVkU0RLc1trZXldID09
PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4
cGFuZGVkU0RLc1trZXldID0gZmFsc2U7ICAvLyBQb3B1bGF0ZSB0aGlzIGRpY3Rpb25hcnkgb24g
dGhlIGZseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5k
ZWRTREtzW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
b21wYXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IHNlcmllc0hlYWRlckZvclNES0xlc3NDb25maWcoY29uZmlnKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2VyaWVzIj4k
e3Nka308L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb25maWcgPSBjb25maWc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxh
c3RDb25maWcgIT09IG51bGwgJiYgIXRoaXMuZXhwYW5kZWRTREtzW2xhc3RDb25maWcudG9LZXko
KV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZXJpZXNIZWFk
ZXJGb3JTREtMZXNzQ29uZmlnKGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAg
ICAgICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0iY29udGVudCI+Ci0gICAgICAgICAgICAgICAgICAgICR7cmVuZGVyVGlt
ZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzLCB0cnVlKX0KLSAgICAgICAgICAgICAgICAgICAg
JHt0aGlzLmNvbmZpZ3VyYXRpb25zLm1hcChjb25maWd1cmF0aW9uID0+IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50
b0tleSgpXSkubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAnJzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRBcnJheUluZGV4ID0g
bmV3IEFycmF5KHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmxlbmd0aCkuZmls
bCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb3RzID0ge307Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0c1tjb25maWd1cmF0
aW9uLnRvS2V5KCldLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGFpckZvckluZGV4ID0gdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV1b
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXJGb3JJbmRleC5yZXN1bHRz
Lmxlbmd0aCA8PSAwIHx8IHBhaXJGb3JJbmRleC5yZXN1bHRzW3BhaXJGb3JJbmRleC5yZXN1bHRz
Lmxlbmd0aCAtIDFdLnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Rz
W25ldyBDb25maWd1cmF0aW9uKHBhaXJGb3JJbmRleC5jb25maWd1cmF0aW9uKS50b0tleSgpXSA9
IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWl0cy5zbGljZSgwLCBjb21taXRzLmxlbmd0aCAtIE1hdGgubWF4KHJlcG9zaXRvcmllcy5s
ZW5ndGggLSAxLCAwKSkuZm9yRWFjaChjb21taXQgPT4gewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEFycmF5SW5kZXgubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFpckZvckluZGV4ID0g
dGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV1baV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggPD0gMCB8fCBw
YWlyRm9ySW5kZXgucmVzdWx0c1twYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggLSAxXS51dWlk
IDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZp
ZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXJGb3JJbmRleC5jb25maWd1cmF0aW9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbktleSA9IGNvbmZp
Zy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0SW5k
ZXggPSBwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggLSBjdXJyZW50QXJyYXlJbmRleFtpXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEluZGV4IDwgMCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tjb25maWd1cmF0aW9uS2V5
XS5wdXNoKG5ldyBEb3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCgpID09PSBwYWlyRm9ySW5kZXgu
cmVzdWx0c1tyZXN1bHRJbmRleF0udXVpZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGV0IGJ1aWxkUGFyYW1zID0gY29uZmlnLnRvUGFyYW1zKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1
aXRlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWyd1
dWlkJ10gPSBbY29tbWl0LnV1aWQoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBidWlsZExpbmsgPSBgL3VybHMvYnVpbGQ/JHtwYXJhbXNUb1F1ZXJ5KGJ1aWxk
UGFyYW1zKX1gOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFp
ckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVzaChuZXcgRG90
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5k
ZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHMudGVzdHNfcnVuLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJ
bmRleF0uc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6
ICdfJ31mYWlsZWRgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRzW2B0ZXN0cyR7d2lsbEZp
bHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9dGltZWRvdXRgXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNb
cmVzdWx0SW5kZXhdLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVj
dGVkXycgOiAnXyd9Y3Jhc2hlZGBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVpbGRMaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdElkID0gRXhwZWN0YXRp
b25zLnN0cmluZ1RvU3RhdGVJZChwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uYWN0
dWFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lsbEZp
bHRlckV4cGVjdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVu
ZXhwZWN0ZWRSZXN1bHRzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLmFjdHVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJbmRleC5y
ZXN1bHRzW3Jlc3VsdEluZGV4XS5leHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25LZXldLnB1c2gobmV3IERvdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPD0gRXhwZWN0YXRpb25zLnN0cmluZ1Rv
U3RhdGVJZCgnRVJST1InKSA/IDEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRJZCA8PSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKCdU
SU1FT1VUJykgPyAxIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0SWQgPD0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCgnQ1JBU0gnKSA/
IDEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRMaW5r
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29u
ZmlndXJhdGlvbktleV0ucHVzaChuZXcgRG90KCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChyZXN1bHRJbmRleCA+PSAwICYmIGNvbW1pdC51dWlkKCkgPD0gcGFp
ckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnV1aWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsrY3VycmVudEFycmF5SW5kZXhbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJbmRleCA9IHBhaXJGb3JJbmRleC5yZXN1bHRz
Lmxlbmd0aCAtIGN1cnJlbnRBcnJheUluZGV4W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBDcmVhdGUgYSBsaXN0IG9mIGNvbmZpZ3VyYXRp
b25zIHRvIGRpc3BsYXkgd2l0aCBTREtzIHN0cmlwcGVkCisgICAgICAgICAgICBsZXQgbWFwcGVk
Q2hpbGRyZW5Db25maWdzID0ge307CisgICAgICAgICAgICBsZXQgY2hpbGRyZW5Db25maWdzQnlT
REsgPSB7fQorICAgICAgICAgICAgbGV0IHJlc3VsdHNCeUtleSA9IHt9OworICAgICAgICAgICAg
dGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBzdHJpcHBlZENvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBh
aXIuY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAgICAgcmVzdWx0c0J5S2V5W3N0cmlwcGVk
Q29uZmlnLnRvS2V5KCldID0gWy4uLnBhaXIucmVzdWx0c107CisgICAgICAgICAgICAgICAgcmVz
dWx0c0J5S2V5W3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldLnNvcnQoZnVuY3Rpb24oYSwgYikge3Jl
dHVybiBiLnV1aWQgLSBhLnV1aWQ7fSkKKyAgICAgICAgICAgICAgICBkZWxldGUgc3RyaXBwZWRD
b25maWcuc2RrOworICAgICAgICAgICAgICAgIG1hcHBlZENoaWxkcmVuQ29uZmlnc1tzdHJpcHBl
ZENvbmZpZy50b0tleSgpXSA9IHN0cmlwcGVkQ29uZmlnOworICAgICAgICAgICAgICAgIGlmICgh
Y2hpbGRyZW5Db25maWdzQnlTREtbc3RyaXBwZWRDb25maWcudG9LZXkoKV0pCisgICAgICAgICAg
ICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldID0g
W107CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtbc3RyaXBwZWRDb25maWcu
dG9LZXkoKV0ucHVzaChuZXcgQ29uZmlndXJhdGlvbihwYWlyLmNvbmZpZ3VyYXRpb24pKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgbGV0IGNoaWxkcmVuQ29uZmlncyA9IFtdOworICAg
ICAgICAgICAgT2JqZWN0LmtleXMobWFwcGVkQ2hpbGRyZW5Db25maWdzKS5mb3JFYWNoKGtleSA9
PiB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzLnB1c2gobWFwcGVkQ2hpbGRyZW5D
b25maWdzW2tleV0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjaGlsZHJlbkNvbmZp
Z3Muc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGEuY29tcGFyZShiKTt9KTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXko
KV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzZXJp
ZXMiPiR7RG90Lm1lcmdlKGRvdHMpLm1hcChkb3QgPT4ge3JldHVybiBkb3QudG9TdHJpbmcoKTt9
KS5qb2luKCcnKX08L2Rpdj5gOworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb2xsYXBzZWQg
dGltZWxpbmVzLCBjb2JpbmUgcmVzdWx0cworICAgICAgICAgICAgbGV0IGFsbFJlc3VsdHMgPSBb
XTsKKyAgICAgICAgICAgIGxldCBjb2xsYXBzZWRUaW1lbGluZXMgPSBbXTsKKyAgICAgICAgICAg
IGNoaWxkcmVuQ29uZmlncy5mb3JFYWNoKGNvbmZpZyA9PiB7CisgICAgICAgICAgICAgICAgY2hp
bGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLnNvcnQoZnVuY3Rpb24oYSwgYikge3Jl
dHVybiBhLmNvbXBhcmVTREtzKGIpO30pOworCisgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHNG
b3JDb25maWcgPSBbXTsKKyAgICAgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3NCeVNES1tjb25m
aWcudG9LZXkoKV0uZm9yRWFjaChzZGtDb25maWcgPT4geworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzRm9yQ29uZmlnID0gY29tYmluZVJlc3VsdHMocmVzdWx0c0ZvckNvbmZpZywgcmVzdWx0
c0J5S2V5W3Nka0NvbmZpZy50b0tleSgpXSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgYWxsUmVzdWx0cyA9IGNvbWJpbmVSZXN1bHRzKGFsbFJlc3VsdHMsIHJlc3VsdHNG
b3JDb25maWcpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudERvdHMgPSB7fTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCBsYXN0Q29uZmlnID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gbmV3IENvbmZpZ3Vy
YXRpb24ocGFpci5jb25maWd1cmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWRvdHNba2V5XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuc2RrOyAgLy8gU3RyaXAg
b3V0IHNkayBpbmZvcm1hdGlvbgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y29tcGFyZUluZGV4ID0gY29uZmlnLmNvbXBhcmUobGFzdENvbmZpZyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaXNTREtFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTREtzW2Nv
bmZpZy50b0tleSgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGFyZUlu
ZGV4IHx8IGlzU0RLRXhwYW5kZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdlKGN1cnJlbnREb3RzKS5t
YXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbignJyl9PC9kaXY+YDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvdHMgPSB7fTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bXBhcmVJbmRleCAmJiBpc1NES0V4cGFuZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gJzxkaXYgY2xhc3M9InNlcmllcyI+PC9kaXY+JzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50RG90c1trZXldID0gZG90c1trZXldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RDb25maWcgPSBjb25maWc7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RG90cykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDxkaXYgY2xhc3M9InNlcmllcyI+
JHtEb3QubWVyZ2UoY3VycmVudERvdHMpLm1hcChkb3QgPT4ge3JldHVybiBkb3QudG9TdHJpbmco
KTt9KS5qb2luKCcnKX08L2Rpdj5gOworICAgICAgICAgICAgICAgIGxldCBxdWV1ZVBhcmFtcyA9
IGNvbmZpZy50b1BhcmFtcygpOworICAgICAgICAgICAgICAgIHF1ZXVlUGFyYW1zWydzdWl0ZSdd
ID0gW3RoaXMuc3VpdGVdOworICAgICAgICAgICAgICAgIGxldCBteVRpbWVsaW5lID0gVGltZWxp
bmUuU2VyaWVzV2l0aEhlYWRlckNvbXBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgYCR7Y2hp
bGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmxlbmd0aCA+IDEgPyAnIHwgJyA6ICcn
fTxhIGhyZWY9Ii91cmxzL3F1ZXVlPyR7cGFyYW1zVG9RdWVyeShxdWV1ZVBhcmFtcyl9IiB0YXJn
ZXQ9Il9ibGFuayI+JHtjb25maWd9PC9hPmAsCisgICAgICAgICAgICAgICAgICAgIFRpbWVsaW5l
LkNhbnZhc1Nlcmllc0NvbXBvbmVudChyZXN1bHRzRm9yQ29uZmlnLCBzY2FsZSwgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0U2NhbGVGdW5jOiBvcHRpb25zLmdldFNjYWxlRnVuYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVGdW5jOiBvcHRpb25zLmNvbXBhcmVGdW5jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogb3B0aW9ucy5yZW5kZXJGYWN0
b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG9wdGlvbnMuZXhwb3J0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdENsaWNrOiBvbkRvdENsaWNrRmFjdG9yeShj
b25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IGV4cG9ydGVyRmFjdG9y
eShyZXN1bHRzRm9yQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgfSkpOworCisgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkcmVuQ29uZmlnc0J5U0RLW2NvbmZpZy50b0tleSgpXS5sZW5ndGgg
PiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lbGluZXNCeVNESyA9IFtdOworICAg
ICAgICAgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3NCeVNES1tjb25maWcudG9LZXkoKV0uZm9y
RWFjaChzZGtDb25maWcgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzQnlT
REsucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5TZXJpZXNXaXRo
SGVhZGVyQ29tcG9uZW50KGAke3Nka0NvbmZpZy5zZGt9YCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50KHJlc3VsdHNCeUtleVtz
ZGtDb25maWcudG9LZXkoKV0sIHNjYWxlLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZXRTY2FsZUZ1bmM6IG9wdGlvbnMuZ2V0U2NhbGVGdW5jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUZ1bmM6IG9wdGlvbnMuY29tcGFyZUZ1bmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGYWN0b3J5OiBvcHRp
b25zLnJlbmRlckZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBvcnRlcjogb3B0aW9ucy5leHBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0b3J5KHNka0NvbmZpZyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogZXhwb3J0ZXJGYWN0b3J5KHJl
c3VsdHNCeUtleVtzZGtDb25maWcudG9LZXkoKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgbXlUaW1lbGluZSA9IFRpbWVsaW5lLkV4cGFuZGFibGVTZXJpZXNXaXRoSGVhZGVyRXhwYW5k
ZXJDb21wb25lbnQobXlUaW1lbGluZSwgLi4udGltZWxpbmVzQnlTREspOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjb2xsYXBzZWRUaW1lbGluZXMucHVzaChteVRpbWVsaW5l
KTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KLSAgICAgICAgICAgICAgICAg
ICAgJHtyZW5kZXJUaW1lbGluZShjb21taXRzLCByZXBvc2l0b3JpZXMpfQotICAgICAgICAgICAg
ICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+YDsKKyAgICAgICAgICAgIGlmIChjb2xsYXBz
ZWRUaW1lbGluZXMubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGlmIChjb2xsYXBzZWRUaW1lbGluZXMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjb2xsYXBzZWRUaW1lbGluZXNbMF0uaGVhZGVyLmluY2x1ZGVzKCdjbGFzcz0i
c2VyaWVzIicpKQorICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRUaW1lbGluZXNbMF0uaGVh
ZGVyID0gVGltZWxpbmUuSGVhZGVyQ29tcG9uZW50KGNvbGxhcHNlZFRpbWVsaW5lc1swXS5oZWFk
ZXIpOworICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29sbGFwc2VkVGltZWxpbmVzWzBd
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNoaWxkcmVuLnB1c2goCisgICAgICAgICAgICAgICAgVGltZWxpbmUuRXhwYW5kYWJsZVNlcmll
c1dpdGhIZWFkZXJFeHBhbmRlckNvbXBvbmVudCgKKyAgICAgICAgICAgICAgICBUaW1lbGluZS5T
ZXJpZXNXaXRoSGVhZGVyQ29tcG9uZW50KGAgJHtjb25maWd1cmF0aW9ufWAsCisgICAgICAgICAg
ICAgICAgICAgIFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudChhbGxSZXN1bHRzLCBzY2Fs
ZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2NhbGVGdW5jOiBvcHRpb25zLmdldFNj
YWxlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVGdW5jOiBvcHRpb25zLmNv
bXBhcmVGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogb3B0aW9u
cy5yZW5kZXJGYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgb25Eb3RDbGljazogb25E
b3RDbGlja0ZhY3RvcnkoY29uZmlndXJhdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICBl
eHBvcnRlcjogZXhwb3J0ZXJGYWN0b3J5KGFsbFJlc3VsdHMpLAorICAgICAgICAgICAgICAgICAg
ICB9KSksCisgICAgICAgICAgICAgICAgLi4uY29sbGFwc2VkVGltZWxpbmVzCisgICAgICAgICAg
ICApKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgbGV0IHRvcCA9IHRydWU7CisgICAgICAgIHNl
bGYueGF4aXNVcGRhdGVzID0gW107CisgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzID0gcmVwb3Np
dG9yaWVzRm9yQ29tbWl0cyhjb21taXRzKTsKKyAgICAgICAgdGhpcy5yZXBvc2l0b3JpZXMuZm9y
RWFjaChyZXBvc2l0b3J5ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHhBeGlzQ29tcG9uZW50ID0g
eEF4aXNGcm9tU2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHNlbGYueGF4aXNVcGRhdGVzLCB0b3Ap
OworICAgICAgICAgICAgaWYgKHRvcCkKKyAgICAgICAgICAgICAgICBjaGlsZHJlbi51bnNoaWZ0
KHhBeGlzQ29tcG9uZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaGls
ZHJlbi5wdXNoKHhBeGlzQ29tcG9uZW50KTsKKyAgICAgICAgICAgIHRvcCA9IGZhbHNlOworICAg
ICAgICB9KTsKKworICAgICAgICBjb25zdCBjb21wb3NlciA9IEZQLmNvbXBvc2VyKCh1cGRhdGVU
aW1lbGluZSkgPT4geworICAgICAgICAgICAgc2VsZi50aW1lbGluZVVwZGF0ZSA9ICh4QXhpc2Vz
KSA9PiB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKDAsIDEpOworICAgICAgICAg
ICAgICAgIGlmIChzZWxmLnJlcG9zaXRvcmllcy5sZW5ndGggPiAxKQorICAgICAgICAgICAgICAg
ICAgICBjaGlsZHJlbi5zcGxpY2UoY2hpbGRyZW4ubGVuZ3RoIC0gc2VsZi5yZXBvc2l0b3JpZXMu
bGVuZ3RoLCBzZWxmLnJlcG9zaXRvcmllcy5sZW5ndGgpOworCisgICAgICAgICAgICAgICAgbGV0
IHRvcCA9IHRydWU7CisgICAgICAgICAgICAgICAgeEF4aXNlcy5mb3JFYWNoKGNvbXBvbmVudCA9
PiB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b3ApCisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZHJlbi51bnNoaWZ0KGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29tcG9uZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgdG9wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgdXBkYXRlVGltZWxpbmUoY2hpbGRyZW4pOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiBUaW1lbGluZS5DYW52YXNDb250YWluZXIoY29tcG9zZXIs
IC4uLmNoaWxkcmVuKTsKICAgICB9CiB9CiAKKwogZnVuY3Rpb24gTGVnZW5kTGFiZWwoZXZlbnRT
dHJlYW0sIGZpbHRlckV4cGVjdGVkVGV4dCwgZmlsdGVyVW5leHBlY3RlZFRleHQpIHsKICAgICBs
ZXQgcmVmID0gUkVGLmNyZWF0ZVJlZih7CiAgICAgICAgIHN0YXRlOiB3aWxsRmlsdGVyRXhwZWN0
ZWQsCkBAIC02ODAsNCArNzc2LDQgQEAgZnVuY3Rpb24gTGVnZW5kKGNhbGxiYWNrPW51bGwsIHBs
dXJhbD1mYQogICAgIHJldHVybiBgPGRpdiBjbGFzcz0iY29udGVudCI+JHtyZXN1bHR9PC9kaXY+
PGJyPmA7CiB9CiAKLWV4cG9ydCB7TGVnZW5kLCBUaW1lbGluZSwgRXhwZWN0YXRpb25zfTsKK2V4
cG9ydCB7TGVnZW5kLCBUaW1lbGluZUZyb21FbmRwb2ludCwgRXhwZWN0YXRpb25zfTsKSW5kZXg6
IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3NlYXJjaC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxh
dGVzL3NlYXJjaC5odG1sCShyZXZpc2lvbiAyNDgxNDEpCisrKyBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvCiBp
bXBvcnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENvbmZpZ3VyYXRpb25TZWxlY3RvcnMsIExp
bWl0U2xpZGVyfSBmcm9tICcvYXNzZXRzL2pzL2RyYXdlci5qcyc7CiBpbXBvcnQge0RPTSwgUkVG
fSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOwogaW1wb3J0IHtTZWFyY2hCYXJ9IGZyb20gJy9h
c3NldHMvanMvc2VhcmNoLmpzJzsKLWltcG9ydCB7TGVnZW5kLCBUaW1lbGluZX0gZnJvbSAnL2Fz
c2V0cy9qcy90aW1lbGluZS5qcyc7CitpbXBvcnQge0xlZ2VuZCwgVGltZWxpbmVGcm9tRW5kcG9p
bnR9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOwogCiBjb25zdCBERUZBVUxUX0xJTUlU
ID0gMTAwOwogY29uc3QgU1VJVEVTID0gSlNPTi5wYXJzZSgne3sgc3VpdGVzfHNhZmUgfX0nKTsg
ICAgCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIFNlYXJjaFZpZXcgewogICAgICAgICAgICAgICAg
IHN0YXRlLmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgICAgICAgICBzdWl0ZTogdGhpcy5j
dXJyZW50UGFyYW1zLnN1aXRlW2ldLAogICAgICAgICAgICAgICAgICAgICB0ZXN0OiB0aGlzLmN1
cnJlbnRQYXJhbXMudGVzdFtpXSwKLSAgICAgICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBU
aW1lbGluZShgYXBpL3Jlc3VsdHMvJHt0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV19LyR7dGhp
cy5jdXJyZW50UGFyYW1zLnRlc3RbaV19YCwgdGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldKSwK
KyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludChg
YXBpL3Jlc3VsdHMvJHt0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV19LyR7dGhpcy5jdXJyZW50
UGFyYW1zLnRlc3RbaV19YCwgdGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldKSwKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI5LDcgKzEyOSw3IEBA
IGNsYXNzIFNlYXJjaFZpZXcgewogICAgICAgICAgICAgICAgIGlmIChkaWZmLmNoaWxkcmVuKQog
ICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsIExlZ2VuZCgoKSA9PiB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZi5zdGF0ZS5jaGlsZHJlbi5mb3JFYWNoKChj
aGlsZCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRpbWVsaW5lLnJl
cmVuZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQudGltZWxpbmUudXBk
YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAg
fSwgZmFsc2UpICsgZGlmZi5jaGlsZHJlbi5tYXAocmVuZGVyQ2hpbGQpLmpvaW4oJycpKTsKICAg
ICAgICAgICAgICAgICBpZiAoZGlmZi5wcmVwZW5kaW5nKSB7CkBAIC0xNjAsNyArMTYwLDggQEAg
Y2xhc3MgU2VhcmNoVmlldyB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRGaW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLnN0YXRlLmNoaWxkcmVuLnNwbGlj
ZShzZWFyY2gsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlZi5zdGF0ZS5jaGlsZHJlbltzZWFyY2hdLnRpbWVsaW5lLnRlYXJkb3du
KCk7CiAgICAgICAgICAgICAgICAgICAgIG5lZWRSZVJlbmRlciA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghZGlkRmluZCkgewpAQCAtMTY5LDcgKzE3MCw3
IEBAIGNsYXNzIFNlYXJjaFZpZXcgewogICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5w
dXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlOiBwYXJhbXMuc3VpdGVbaV0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBwYXJhbXMudGVzdFtpXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9yZXN1bHRzLyR7cGFyYW1z
LnN1aXRlW2ldfS8ke3BhcmFtcy50ZXN0W2ldfWApLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGltZWxpbmU6IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludChgYXBpL3Jlc3VsdHMvJHtwYXJhbXMu
c3VpdGVbaV19LyR7cGFyYW1zLnRlc3RbaV19YCksCiAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzOSw3ICsyNDAsNyBAQCBET00u
aW5qZWN0KAogICAgICAgICAgICAgbGV0IGNoaWxkID0gewogICAgICAgICAgICAgICAgIHN1aXRl
OiBhcmd1bWVudHNbaV0uc3VpdGUsCiAgICAgICAgICAgICAgICAgdGVzdDogYXJndW1lbnRzW2ld
LnRlc3QsCi0gICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1lbGluZShgYXBpL3Jlc3Vs
dHMvJHthcmd1bWVudHNbaV0uc3VpdGV9LyR7YXJndW1lbnRzW2ldLnRlc3R9YCksCisgICAgICAg
ICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludChgYXBpL3Jlc3VsdHMv
JHthcmd1bWVudHNbaV0uc3VpdGV9LyR7YXJndW1lbnRzW2ldLnRlc3R9YCksCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHZpZXcucmVmLnNldFN0YXRlKHtwcmVwZW5kaW5nOiBbY2hpbGRd
fSk7CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9z
dWl0ZV9yZXN1bHRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0
c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCShyZXZpc2lvbiAyNDgxNDEp
CisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9y
ZXN1bHRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgaW1wb3J0IHtkZWVw
Q29tcGFyZSwgRXJyb3JEaXNwbGF5LCBxdWVyeQogaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9t
ICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnOwogaW1wb3J0IHtEcmF3ZXIsIEJyYW5jaFNl
bGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzLCBMaW1pdFNsaWRlcn0gZnJvbSAnL2Fzc2V0
cy9qcy9kcmF3ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJhcnkvanMvUmVm
LmpzJzsKLWltcG9ydCB7TGVnZW5kLCBUaW1lbGluZX0gZnJvbSAnL2Fzc2V0cy9qcy90aW1lbGlu
ZS5qcyc7CitpbXBvcnQge0xlZ2VuZCwgVGltZWxpbmVGcm9tRW5kcG9pbnR9IGZyb20gJy9hc3Nl
dHMvanMvdGltZWxpbmUuanMnOwogCiBjb25zdCBERUZBVUxUX0xJTUlUID0gMTAwOwogY29uc3Qg
U1VJVEVTID0gSlNPTi5wYXJzZSgne3sgc3VpdGVzfHNhZmUgfX0nKTsgICAgCkBAIC02Niw3ICs2
Niw3IEBAIGNsYXNzIE1haW5WaWV3IHsKICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHt9OwogCiAg
ICAgICAgIFNVSVRFUy5mb3JFYWNoKChzdWl0ZSkgPT4gewotICAgICAgICAgICAgdGhpcy5jaGls
ZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxpbmUoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSwgc3VpdGUp
OworICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxpbmVGcm9tRW5k
cG9pbnQoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSwgc3VpdGUpOwogICAgICAgICB9KTsKICAgICB9
CiAgICAgdW5wYWNrU3VpdGVzKHN1aXRlc0pzb24pIHsKQEAgLTgxLDkgKzgxLDEwIEBAIGNsYXNz
IE1haW5WaWV3IHsKICAgICAgICAgfSk7CiAKICAgICAgICAgbGV0IHNvcnRlZFN1aXRlcyA9IFsu
Li5zdWl0ZXNdLnNvcnQoKTsKKyAgICAgICAgT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikuZm9y
RWFjaChrZXkgPT4ge3RoaXMuY2hpbGRyZW5ba2V5XS50ZWFyZG93bigpO30pOwogICAgICAgICB0
aGlzLmNoaWxkcmVuID0ge307CiAgICAgICAgIHNvcnRlZFN1aXRlcy5mb3JFYWNoKChzdWl0ZSkg
PT4gewotICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxpbmUoJ2Fw
aS9yZXN1bHRzLycgKyBzdWl0ZSk7CisgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW3N1aXRlXSA9
IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludCgnYXBpL3Jlc3VsdHMvJyArIHN1aXRlKTsKICAgICAg
ICAgfSk7CiAgICAgICAgIHJldHVybiBzb3J0ZWRTdWl0ZXM7CiAgICAgfQpAQCAtMTQzLDcgKzE0
NCw3IEBAIGNsYXNzIE1haW5WaWV3IHsKICAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy5jaGls
ZHJlbjsKICAgICAgICAgcmV0dXJuIExlZ2VuZCgoKSA9PiB7CiAgICAgICAgICAgICBmb3IgKGxl
dCBzdWl0ZSBpbiBjaGlsZHJlbikgewotICAgICAgICAgICAgICAgIGNoaWxkcmVuW3N1aXRlXS5y
ZXJlbmRlcigpOworICAgICAgICAgICAgICAgIGNoaWxkcmVuW3N1aXRlXS51cGRhdGUoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSwgdHJ1ZSkgKyBzdWl0ZXMubWFwKHN1aXRlID0+IHsKICAg
ICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375439</attachid>
            <date>2019-08-02 11:51:52 -0700</date>
            <delta_ts>2019-08-02 14:13:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200172-20190802115151.patch</filename>
            <type>text/plain</type>
            <size>51412</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODE1NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDE5LTA4LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzOgorICAgICAgICAo
dGlja0ZvckNvbW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChtaW5pbXVtVXVpZEZvclJlc3VsdHMp
OiBHaXZlbiBhIGRpY3Rpb25hcnkgb2YgcmVzdWx0IGxpc3RzLCBkZXRlcm1pbmUgdGhlIG1pbmlt
dW0gVVVJRAorICAgICAgICB3aGljaCBlbmNvbXBhc3NlcyBhbGwgcmVzdWx0cy4gQ3J1Y2lhbGx5
LCB0aGlzIGZ1bmN0aW9uIG11c3QgZXhjbHVkZSBhbiBVVUlEcyB3aGljaCBtYXkKKyAgICAgICAg
cmVmZXIgdG8gcmVzdWx0cyBleGNsdWRlZCBiZWNhdXNlIG9mIHRoZSBsaW1pdCBhcmd1bWVudC4K
KyAgICAgICAgKHJlbmRlclRpbWVsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbW1pdHNGb3JS
ZXN1bHRzKTogR2l2ZW4gYSBkaWN0aW9uYXJ5IG9mIHJlc3VsdCBsaXN0cywgcmV0dXJuIGEgbGlz
dCBvZiBjb21taXRzIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aG9zZSByZXN1bHRzLgorICAg
ICAgICAoc2NhbGVGb3JDb21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIGdlbmVyYXRl
IGEgc2NhbGUgdG8gYmUgY29uc3VtZWQgYnkgdGhlIGNhbnZhcyBUaW1lbGluZS4KKyAgICAgICAg
KHJlcG9zaXRvcmllc0ZvckNvbW1pdHMpOiBHaXZlbiBhIGxpc3Qgb2YgY29tbWl0cywgcmV0dXJu
IGEgc29ydGVkIGxpc3Qgb2YgYXNzb2NpYXRlZCByZXBvc2l0b3J5IGlkcy4KKyAgICAgICAgKHhB
eGlzRnJvbVNjYWxlKTogQ3JlYXRlIGEgY2FudmFzLWJhc2VkIHgtYXhpcyBiYXNlZCBvbiB0aGUg
cHJvdmlkZWQgc2NhbGUgYW5kIGEgcmVwb3NpdG9yeSBpZC4KKyAgICAgICAgKGluUGxhY2VDb21i
aW5lKTogQ29tYmluZSByZXN1bHQgb2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKHN0YXRzRm9y
U2luZ2xlUmVzdWx0KTogVHVybiBhIHNpbmdsZSByZXN1bHQgaW50byBhIHN0YXQgb2JqZWN0Lgor
ICAgICAgICAoY29tYmluZVJlc3VsdHMpOiBHaXZlbiBsaXN0cyBvZiByZXN1bHRzLCBjb21iaW5l
IHRoZXNlIGxpc3RzIHdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIGxpc3RzIHVuY2hhbmdlZC4K
KyAgICAgICAgKERvdCk6IERlbGV0ZWQuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludCk6
IFJlbmFtZWQgZnJvbSBUaW1lbGluZS4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LmNv
bnN0cnVjdG9yKTogQ2FudmFzIFRpbWVsaW5lIG1hbmFnZXMgZXhwYW5zaW9uIGFuZCBjb2xsYXBz
aW5nIG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC50
ZWFyZG93bik6IERldGFjaCBjYWxsYmFja3MgZnJvbSBDb21taXRCYW5rLgorICAgICAgICAoVGlt
ZWxpbmVGcm9tRW5kcG9pbnQudXBkYXRlKTogVXBkYXRlIHdpdGggYW55IG5ldyBjb21taXQgaW5m
b3JtYXRpb24sIGZvcmNlIGEgcmUtZHJhdyBvZiB0aGUgY3VycmVudAorICAgICAgICBjYWNoZSBj
b250ZW50cy4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LnJlbG9hZCk6IFJlbW92ZSBt
YW5hZ2VtZW50IG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRw
b2ludC5yZW5kZXIpOiBVc2UgY2FudmFzIFRpbWVsaW5lIGluc3RlYWQgb2YgaHRtbCB0aW1lbGlu
ZSB0byB2aXN1YWxpemUgcmVzdWx0cy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbDogVXNlIFRpbWVsaW5lRnJvbUVuZHBvaW50IGNs
YXNzLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1
aXRlX3Jlc3VsdHMuaHRtbDogRGl0dG8uCisKIDIwMTktMDgtMDEgIFpoaWZlaSBGYW5nICA8emhp
ZmVpX2ZhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIHJlc3VsdHMud2Via2l0Lm9yZzogRm9yY2Ug
dXBkYXRlIGNhY2hlIHdoZW4gdGltZWxpbmUgdXBkYXRlZApJbmRleDogVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUuanMJ
KHJldmlzaW9uIDI0ODE1NSkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
c3RhdGljL2pzL3RpbWVsaW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw4IEBACiBp
bXBvcnQge0NvbW1pdEJhbmt9IGZyb20gJy9hc3NldHMvanMvY29tbWl0LmpzJzsKIGltcG9ydCB7
Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJzsKIGltcG9y
dCB7ZGVlcENvbXBhcmUsIEVycm9yRGlzcGxheSwgcGFyYW1zVG9RdWVyeSwgcXVlcnlUb1BhcmFt
c30gZnJvbSAnL2Fzc2V0cy9qcy9jb21tb24uanMnOwotaW1wb3J0IHtET00sIEV2ZW50U3RyZWFt
LCBSRUZ9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CitpbXBvcnQge0RPTSwgRXZlbnRTdHJl
YW0sIFJFRiwgRlB9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CitpbXBvcnQge1RpbWVsaW5l
fSBmcm9tICcvbGlicmFyeS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qcyc7CiAK
IAogY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKQEAgLTcxLDE2NSArNzIsMjg4IEBAIGNsYXNz
IEV4cGVjdGF0aW9ucwogfQogbGV0IHdpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNlOwogCi1mdW5j
dGlvbiB0aWNrRm9yQ29tbWl0KGNvbW1pdCwgc2NhbGUpIHsKLSAgICBsZXQgcGFyYW1zID0gewot
ICAgICAgICBicmFuY2g6IGNvbW1pdC5icmFuY2ggPyBbY29tbWl0LmJyYW5jaF0gOiBxdWVyeVRv
UGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFuY2gsCi0gICAgICAgIHV1aWQ6
IFtjb21taXQudXVpZCgpXSwKLSAgICB9Ci0gICAgaWYgKCFwYXJhbXMuYnJhbmNoKQotICAgICAg
ICBkZWxldGUgcGFyYW1zLmJyYW5jaDsKLSAgICBjb25zdCBxdWVyeSA9IHBhcmFtc1RvUXVlcnko
cGFyYW1zKTsKLQotICAgIGlmIChzY2FsZSA8PSAwKQotICAgICAgICByZXR1cm4gJyc7Ci0gICAg
aWYgKHNjYWxlID09PSAxKQotICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNjYWxlIj4KLSAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lIj48L2Rpdj4KLSAgICAgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0idGV4dCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIv
Y29tbWl0PyR7cXVlcnl9IiB0YXJnZXQ9Il9ibGFuayI+JHtTdHJpbmcoY29tbWl0LmlkKS5zdWJz
dHJpbmcoMCwxMCl9PC9hPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAg
ICAgICA8L2Rpdj5gOwotICAgIGxldCByZXN1bHQgPSAnJzsKLSAgICB3aGlsZSAoc2NhbGUgPiAw
KSB7Ci0gICAgICAgIGxldCBjb3VudFRvVXNlID0gc2NhbGU7Ci0gICAgICAgIGlmIChjb3VudFRv
VXNlID09PSAxMSB8fCBjb3VudFRvVXNlID09IDEyKQotICAgICAgICAgICAgY291bnRUb1VzZSA9
IDY7Ci0gICAgICAgIGVsc2UgaWYgKGNvdW50VG9Vc2UgPiAxMCkKLSAgICAgICAgICAgIGNvdW50
VG9Vc2UgPSAxMDsKLSAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzY2FsZSBncm91cC0k
e2NvdW50VG9Vc2V9Ij4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItbGluZS1s
ZWZ0Ij48L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lIj48L2Rpdj4KLSAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0Ij4KLSAgICAgICAgICAgICAgICAgICAgPGEg
aHJlZj0iL2NvbW1pdD8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7U3RyaW5nKGNvbW1pdC5p
ZCkuc3Vic3RyaW5nKDAsMTApfTwvYT4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItbGluZS1yaWdodCI+PC9kaXY+Ci0gICAgICAgICAg
ICA8L2Rpdj5gOwotICAgICAgICBzY2FsZSAtPSBjb3VudFRvVXNlOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQorZnVuY3Rpb24gbWluaW11bVV1aWRGb3JSZXN1bHRzKHJlc3VsdHMsIGxp
bWl0KSB7CisgICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTApOworICAg
IGxldCBtaW5EaXNwbGF5ZWRVdWlkID0gbm93OworICAgIGxldCBtYXhMaW1pdGVkVXVpZCA9IDA7
CisKKyAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKChrZXkpID0+IHsKKyAgICAgICAg
cmVzdWx0c1trZXldLmZvckVhY2gocGFpciA9PiB7CisgICAgICAgICAgICBpZiAoIXBhaXIucmVz
dWx0cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGxp
bWl0ICE9PSAxICYmIGxpbWl0ID09PSBwYWlyLnJlc3VsdHMubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIG1heExpbWl0ZWRVdWlkID0gTWF0aC5tYXgocGFpci5yZXN1bHRzWzBdLnV1aWQsIG1heExp
bWl0ZWRVdWlkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbWl0ID09PSAxKQorICAgICAgICAg
ICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3VsdHNbcGFpci5yZXN1
bHRzLmxlbmd0aCAtIDFdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3Vs
dHNbMF0udXVpZCwgbWluRGlzcGxheWVkVXVpZCk7CisgICAgICAgIH0pOworICAgIH0pOwogCi1m
dW5jdGlvbiByZW5kZXJUaW1lbGluZShjb21taXRzLCByZXBvc2l0b3JpZXMgPSBbXSwgdG9wID0g
ZmFsc2UpIHsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBicmVha3Mgd2l0aCBtb3JlIHRo
YW4gMyByZXBvc2l0b3JpZXMgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vNTEwNDI5ODE+Ci0g
ICAgaWYgKHJlcG9zaXRvcmllcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgaWYgKHRvcCkKLSAg
ICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgcmVwb3NpdG9yaWVzID0gW251bGxdOwotICAg
IH0KLSAgICBjb25zdCBzdGFydCA9IHRvcCA/IE1hdGguY2VpbChyZXBvc2l0b3JpZXMubGVuZ3Ro
IC8gMikgOiAwOwotICAgIGNvbnN0IGVuZCA9IHRvcCA/IHJlcG9zaXRvcmllcy5sZW5ndGggOiBN
YXRoLmNlaWwocmVwb3NpdG9yaWVzLmxlbmd0aCAvIDIpOwotICAgIGNvbnN0IG51bWJlck9mRWxl
bWVudHMgPSBjb21taXRzLmxlbmd0aCAtIE1hdGgubWF4KHJlcG9zaXRvcmllcy5sZW5ndGggLSAx
LCAwKQotICAgIHJldHVybiByZXBvc2l0b3JpZXMuc2xpY2Uoc3RhcnQsIGVuZCkubWFwKHJlcG9z
aXRvcnkgPT4gewotICAgICAgICBsZXQgY29tbWl0c0Zyb21PdGhlclJlcG9zID0gMDsKLSAgICAg
ICAgbGV0IHJlbmRlcmVkRWxlbWVudHMgPSAwOwotICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9
IngtYXhpcyAke3RvcCA/ICd0b3AnIDogJyd9Ij4KLSAgICAgICAgICAgICAgICAke2NvbW1pdHMu
bWFwKGNvbW1pdCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9y
eV9pZCAmJiBjb21taXQucmVwb3NpdG9yeV9pZCAhPT0gcmVwb3NpdG9yeSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKytjb21taXRzRnJvbU90aGVyUmVwb3M7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc2NhbGUgPSAgTWF0aC5taW4oY29tbWl0c0Zyb21PdGhlclJlcG9zICsgMSwg
bnVtYmVyT2ZFbGVtZW50cyAtIHJlbmRlcmVkRWxlbWVudHMpOwotICAgICAgICAgICAgICAgICAg
ICBjb21taXRzRnJvbU90aGVyUmVwb3MgPSAwOwotICAgICAgICAgICAgICAgICAgICByZW5kZXJl
ZEVsZW1lbnRzICs9IHNjYWxlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlja0ZvckNv
bW1pdChjb21taXQsIHNjYWxlKTsKLSAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KLSAgICAg
ICAgICAgIDwvZGl2PmA7Ci0gICAgfSkuam9pbignJyk7CisgICAgaWYgKG1pbkRpc3BsYXllZFV1
aWQgPT09IG5vdykKKyAgICAgICAgcmV0dXJuIG1heExpbWl0ZWRVdWlkOworICAgIHJldHVybiBN
YXRoLm1heChtaW5EaXNwbGF5ZWRVdWlkLCBtYXhMaW1pdGVkVXVpZCk7CiB9CiAKLWNsYXNzIERv
dCB7Ci0gICAgc3RhdGljIG1lcmdlKGRvdHMgPSB7fSkgewotICAgICAgICBsZXQgcmVzdWx0ID0g
W107Ci0gICAgICAgIGxldCBpbmRleCA9IDA7Ci0gICAgICAgIGxldCBoYXNEYXRhID0gdHJ1ZTsK
LQotICAgICAgICB3aGlsZSAoaGFzRGF0YSkgewotICAgICAgICAgICAgbGV0IGRvdCA9IG5ldyBE
b3QoKTsKLSAgICAgICAgICAgIGhhc0RhdGEgPSBmYWxzZTsKLQotICAgICAgICAgICAgT2JqZWN0
LmtleXMoZG90cykuZm9yRWFjaChrZXkgPT4gewotICAgICAgICAgICAgICAgIGlmIChkb3RzW2tl
eV0ubGVuZ3RoIDw9IGluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgaGFzRGF0YSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkb3RzW2tleV1b
aW5kZXhdLmNvdW50KQorZnVuY3Rpb24gY29tbWl0c0ZvclJlc3VsdHMocmVzdWx0cywgbGltaXQs
IGFsbENvbW1pdHMgPSB0cnVlKSB7CisgICAgY29uc3QgbWluRGlzcGxheWVkVXVpZCA9IG1pbmlt
dW1VdWlkRm9yUmVzdWx0cyhsaW1pdCk7CisgICAgbGV0IGNvbW1pdHMgPSBbXTsKKyAgICBsZXQg
cmVwb3NpdG9yaWVzID0gbmV3IFNldCgpOworICAgIGxldCBjdXJyZW50Q29tbWl0SW5kZXggPSBD
b21taXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5m
b3JFYWNoKChrZXkpID0+IHsKKyAgICAgICAgcmVzdWx0c1trZXldLmZvckVhY2gocGFpciA9PiB7
CisgICAgICAgICAgICBwYWlyLnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4geworICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQudXVpZCA8IG1pbkRpc3BsYXllZFV1aWQpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZG90LmNvdW50KQotICAgICAgICAg
ICAgICAgICAgICBkb3QuY29tYmluZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxldCBjYW5k
aWRhdGVDb21taXRzID0gW107CiAKLSAgICAgICAgICAgICAgICBkb3QuY291bnQgKz0gZG90c1tr
ZXldW2luZGV4XS5jb3VudDsKLSAgICAgICAgICAgICAgICBkb3QuZmFpbGVkICs9IGRvdHNba2V5
XVtpbmRleF0uZmFpbGVkOwotICAgICAgICAgICAgICAgIGRvdC50aW1lb3V0ICs9IGRvdHNba2V5
XVtpbmRleF0udGltZW91dDsKLSAgICAgICAgICAgICAgICBkb3QuY3Jhc2ggKz0gZG90c1trZXld
W2luZGV4XS5jcmFzaDsKLSAgICAgICAgICAgICAgICBpZiAoZG90LmNvbWJpbmVkKQotICAgICAg
ICAgICAgICAgICAgICBkb3QubGluayA9IG51bGw7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBkb3QubGluayA9IGRvdHNba2V5XVtpbmRleF0ubGluazsKKyAgICAg
ICAgICAgICAgICBpZiAoIWFsbENvbW1pdHMpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRD
b21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0cy5sZW5ndGggLSAxOworICAgICAgICAgICAg
ICAgIHdoaWxlIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0udXVpZCgpIDwgcmVz
dWx0LnV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGFsbENvbW1pdHMgfHwgQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJ
bmRleF0udXVpZCgpID09IHJlc3VsdC51dWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlQ29tbWl0cy5wdXNoKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhd
KTsKKyAgICAgICAgICAgICAgICAgICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVDb21taXRzLmxlbmd0aCA9PT0g
MCB8fCBjYW5kaWRhdGVDb21taXRzW2NhbmRpZGF0ZUNvbW1pdHMubGVuZ3RoIC0gMV0udXVpZCgp
ICE9PSByZXN1bHQudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5w
dXNoKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6ICc/JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICd1dWlkJzogKCkgPT4ge3JldHVybiByZXN1bHQudXVpZDt9CisgICAgICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDsKKyAgICAgICAg
ICAgICAgICBjYW5kaWRhdGVDb21taXRzLmZvckVhY2goY29tbWl0ID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbW1pdC5yZXBvc2l0b3J5X2lkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yaWVzLmFkZChjb21taXQucmVwb3NpdG9yeV9pZCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChpbmRleCA8IGNvbW1pdHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA9PT0gY29tbWl0c1tpbmRleF0udXVpZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb21taXQudXVpZCgpID4gY29tbWl0c1tpbmRleF0udXVpZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWl0cy5zcGxpY2UoaW5kZXgsIDAsIGNvbW1pdCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBjb21taXRzLnB1c2goY29tbWl0KTsKKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGhhc0RhdGEpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LnB1c2goZG90KTsKLSAgICAgICAgICAgICsraW5kZXg7CisgICAg
ICAgIH0pOworICAgIH0pOworICAgIGlmIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCAmJiBjb21t
aXRzLmxlbmd0aCkgeworICAgICAgICBsZXQgdHJhaWxpbmdSZXBvc2l0b3JpZXMgPSBuZXcgU2V0
KHJlcG9zaXRvcmllcyk7CisgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0ZShjb21t
aXRzW2NvbW1pdHMubGVuZ3RoIC0gMV0ucmVwb3NpdG9yeV9pZCk7CisgICAgICAgIHdoaWxlIChj
dXJyZW50Q29tbWl0SW5kZXggPj0gMCAmJiB0cmFpbGluZ1JlcG9zaXRvcmllcy5zaXplKSB7Cisg
ICAgICAgICAgICBjb25zdCBjb21taXQgPSBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1p
dEluZGV4XTsKKyAgICAgICAgICAgIGlmICh0cmFpbGluZ1JlcG9zaXRvcmllcy5oYXMoY29tbWl0
LnJlcG9zaXRvcnlfaWQpKSB7CisgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7
CisgICAgICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVsZXRlKGNvbW1pdC5yZXBv
c2l0b3J5X2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tY3VycmVudENvbW1pdElu
ZGV4OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGNvbnN0
cnVjdG9yKGNvdW50ID0gMCwgZmFpbGVkID0gMCwgdGltZW91dCA9IDAsIGNyYXNoID0gMCwgY29t
YmluZWQgPSBmYWxzZSwgbGluayA9IG51bGwpIHsKLSAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50
OwotICAgICAgICB0aGlzLmZhaWxlZCA9IGZhaWxlZDsKLSAgICAgICAgdGhpcy50aW1lb3V0ID0g
dGltZW91dDsKLSAgICAgICAgdGhpcy5jcmFzaCA9IGNyYXNoOwotICAgICAgICB0aGlzLmNvbWJp
bmVkID0gY29tYmluZWQ7Ci0gICAgICAgIHRoaXMubGluayA9IGxpbms7CisKKyAgICByZXBvc2l0
b3JpZXMgPSBbLi4ucmVwb3NpdG9yaWVzXTsKKyAgICByZXBvc2l0b3JpZXMuc29ydCgpOworICAg
IHJldHVybiBjb21taXRzOworfQorCitmdW5jdGlvbiBzY2FsZUZvckNvbW1pdHMoY29tbWl0cykg
eworICAgIGxldCBzY2FsZSA9IFtdOworICAgIGZvciAobGV0IGkgPSBjb21taXRzLmxlbmd0aCAt
IDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IHJlcG9zaXRvcnlfaWQgPSBjb21taXRz
W2ldLnJlcG9zaXRvcnlfaWQgPyBjb21taXRzW2ldLnJlcG9zaXRvcnlfaWQgOiAnPyc7CisgICAg
ICAgIHNjYWxlLnVuc2hpZnQoe30pOworICAgICAgICBzY2FsZVswXVtyZXBvc2l0b3J5X2lkXSA9
IGNvbW1pdHNbaV07CisgICAgICAgIGlmIChzY2FsZS5sZW5ndGggPCAyKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIE9iamVjdC5rZXlzKHNjYWxlWzFdKS5mb3JFYWNoKChrZXkpID0+
IHsKKyAgICAgICAgICAgIGlmIChrZXkgPT09IHJlcG9zaXRvcnlfaWQgfHwga2V5ID09PSAnPycg
fHwga2V5ID09PSAndXVpZCcpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
c2NhbGVbMF1ba2V5XSA9IHNjYWxlWzFdW2tleV07CisgICAgICAgIH0pOworICAgICAgICBzY2Fs
ZVswXS51dWlkID0gTWF0aC5tYXgoLi4uT2JqZWN0LmtleXMoc2NhbGVbMF0pLm1hcCgoa2V5KSA9
PiB7CisgICAgICAgICAgICByZXR1cm4gc2NhbGVbMF1ba2V5XS51dWlkKCk7CisgICAgICAgIH0p
KTsKICAgICB9Ci0gICAgdG9TdHJpbmcoKSB7Ci0gICAgICAgIGlmICghdGhpcy5jb3VudCkKLSAg
ICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iZG90IGVtcHR5Ij48L2Rpdj5gOworICAgIHJl
dHVybiBzY2FsZTsKK30KIAotICAgICAgICBjb25zdCBzZWxmID0gdGhpczsKK2Z1bmN0aW9uIHJl
cG9zaXRvcmllc0ZvckNvbW1pdHMoY29tbWl0cykgeworICAgIGxldCByZXBvc2l0b3JpZXMgPSBu
ZXcgU2V0KCk7CisgICAgY29tbWl0cy5mb3JFYWNoKChjb21taXQpID0+IHsKKyAgICAgICAgaWYg
KGNvbW1pdC5yZXBvc2l0b3J5X2lkKQorICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmFkZChjb21t
aXQucmVwb3NpdG9yeV9pZCk7CisgICAgfSk7CisgICAgcmVwb3NpdG9yaWVzID0gWy4uLnJlcG9z
aXRvcmllc107CisgICAgaWYgKCFyZXBvc2l0b3JpZXMubGVuZ3RoKQorICAgICAgICByZXBvc2l0
b3JpZXMgPSBbJz8nXTsKKyAgICByZXBvc2l0b3JpZXMuc29ydCgpOworICAgIHJldHVybiByZXBv
c2l0b3JpZXM7Cit9CiAKLSAgICAgICAgZnVuY3Rpb24gcmVuZGVyKGNzc0NsYXNzLCBpbnNpZGU9
JycpIHsKLSAgICAgICAgICAgIGlmIChzZWxmLmxpbmspCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGA8YSBocmVmPSIke3NlbGYubGlua30iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iJHtjc3NDbGFz
c30iPiR7aW5zaWRlfTwvYT5gOwotICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSIke2Nz
c0NsYXNzfSI+JHtpbnNpZGV9PC9kaXY+YDsKK2Z1bmN0aW9uIHhBeGlzRnJvbVNjYWxlKHNjYWxl
LCByZXBvc2l0b3J5LCB1cGRhdGVzQXJyYXksIGlzVG9wPWZhbHNlKQoreworICAgIGZ1bmN0aW9u
IHNjYWxlRm9yUmVwb3NpdG9yeShzY2FsZSkgeworICAgICAgICByZXR1cm4gc2NhbGUubWFwKG5v
ZGUgPT4geworICAgICAgICAgICAgbGV0IGNvbW1pdCA9IG5vZGVbcmVwb3NpdG9yeV07CisgICAg
ICAgICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgICAgICBjb21taXQgPSBub2RlWyc/J107
CisgICAgICAgICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgICAgICByZXR1cm4ge2lkOiAn
J307CisgICAgICAgICAgICByZXR1cm4gY29tbWl0OworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gVGltZWxpbmUuQ2FudmFzWEF4aXNDb21wb25lbnQoc2NhbGVGb3JSZXBvc2l0b3J5
KHNjYWxlKSwgeworICAgICAgICBpc1RvcDogaXNUb3AsCisgICAgICAgIGhlaWdodDogMTMwLAor
ICAgICAgICBvblNjYWxlQ2xpY2s6IChub2RlKSA9PiB7CisgICAgICAgICAgICBpZiAoIW5vZGUu
bGFiZWwuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbGV0IHBhcmFt
cyA9IHsKKyAgICAgICAgICAgICAgICBicmFuY2g6IG5vZGUubGFiZWwuYnJhbmNoID8gW25vZGUu
bGFiZWwuYnJhbmNoXSA6IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0p
LmJyYW5jaCwKKyAgICAgICAgICAgICAgICB1dWlkOiBbbm9kZS5sYWJlbC51dWlkKCldLAorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXJhbXMuYnJhbmNoKQorICAgICAgICAgICAg
ICAgIGRlbGV0ZSBwYXJhbXMuYnJhbmNoOworICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBwYXJh
bXNUb1F1ZXJ5KHBhcmFtcyk7CisgICAgICAgICAgICB3aW5kb3cub3BlbihgL2NvbW1pdD8ke3F1
ZXJ5fWAsICdfYmxhbmsnKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gUGVyIHRoZSBiaXJ0aGRh
eSBwYXJhZG94LCAxMCUgY2hhbmdlIG9mIGNvbGxpc2lvbiB3aXRoIDcuNyBtaWxsaW9uIGNvbW1p
dHMgd2l0aCAxMiBjaGFyYWN0ZXIgY29tbWl0cworICAgICAgICBnZXRMYWJlbEZ1bmM6IChjb21t
aXQpID0+IHtyZXR1cm4gY29tbWl0ID8gY29tbWl0LmlkLnN1YnN0cmluZygwLDEyKSA6ICc/Jzt9
LAorICAgICAgICBnZXRTY2FsZUtleTogKGNvbW1pdCkgPT4gY29tbWl0LnV1aWQsCisgICAgICAg
IGV4cG9ydGVyOiAodXBkYXRlRnVuY3Rpb24pID0+IHsKKyAgICAgICAgICAgIHVwZGF0ZXNBcnJh
eS5wdXNoKChzY2FsZSkgPT4ge3VwZGF0ZUZ1bmN0aW9uKHNjYWxlRm9yUmVwb3NpdG9yeShzY2Fs
ZSkpO30pOworICAgICAgICB9LAorICAgIH0pOworfQorCitjb25zdCB0ZXN0c1JlZ2V4ID0gL3Rl
c3RzXyhbYS16XSkrLzsKK2NvbnN0IGZhaWx1cmVUeXBlT3JkZXIgPSBbJ2ZhaWxlZCcsICd0aW1l
ZG91dCcsICdjcmFzaGVkJ107Citjb25zdCBmYWlsdXJlVHlwZU1hcHBpbmcgPSB7CisgICAgZmFp
bGVkOiAnRVJST1InLAorICAgIHRpbWVkb3V0OiAnVElNRU9VVCcsCisgICAgY3Jhc2hlZDogJ0NS
QVNIJywKK30KKworZnVuY3Rpb24gaW5QbGFjZUNvbWJpbmUob3V0LCBvYmopCit7CisgICAgaWYg
KCFvYmopCisgICAgICAgIHJldHVybiBvdXQ7CisKKyAgICBpZiAoIW91dCkgeworICAgICAgICBv
dXQgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7CisgICAg
ICAgICAgICBpZiAob2JqW2tleV0gaW5zdGFuY2VvZiBPYmplY3QpCisgICAgICAgICAgICAgICAg
b3V0W2tleV0gPSBpblBsYWNlQ29tYmluZShvdXRba2V5XSwgb2JqW2tleV0pOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG91dFtrZXldID0gb2JqW2tleV07CisgICAgICAgIH0p
OworICAgIH0gZWxzZSB7CisgICAgICAgIE9iamVjdC5rZXlzKG91dCkuZm9yRWFjaChrZXkgPT4g
eworICAgICAgICAgICAgaWYgKG91dFtrZXldIGluc3RhbmNlb2YgT2JqZWN0KSB7CisgICAgICAg
ICAgICAgICAgb3V0W2tleV0gPSBpblBsYWNlQ29tYmluZShvdXRba2V5XSwgb2JqW2tleV0pOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
U2V0IG9mIHNwZWNpYWwgY2FzZSBrZXlzIHdoaWNoIG5lZWQgdG8gYmUgYWRkZWQgdG9nZXRoZXIK
KyAgICAgICAgICAgIGlmIChrZXkubWF0Y2godGVzdHNSZWdleCkpIHsKKyAgICAgICAgICAgICAg
ICBvdXRba2V5XSArPSBvYmpba2V5XTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBrZXkgZXhpc3RzLCBidXQgZG9lc24ndCBt
YXRjaCwgZGVsZXRlIGl0CisgICAgICAgICAgICBpZiAoIShrZXkgaW4gb2JqKSB8fCBvdXRba2V5
XSAhPSBvYmpba2V5XSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXRba2V5XTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBP
YmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXkubWF0
Y2godGVzdHNSZWdleCkgJiYgIShrZXkgaW4gb3V0KSkKKyAgICAgICAgICAgICAgICBvdXRba2V5
XSA9IG9ialtrZXldOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG91dDsKK30KKwor
ZnVuY3Rpb24gc3RhdHNGb3JTaW5nbGVSZXN1bHQocmVzdWx0KSB7CisgICAgY29uc3QgYWN0dWFs
SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKHJlc3VsdC5hY3R1YWwpOworICAgIGNv
bnN0IHVuZXhwZWN0ZWRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRp
b25zLnVuZXhwZWN0ZWRSZXN1bHRzKHJlc3VsdC5hY3R1YWwsIHJlc3VsdC5leHBlY3RlZCkpOwor
ICAgIGxldCBzdGF0cyA9IHsKKyAgICAgICAgdGVzdHNfcnVuOiAxLAorICAgICAgICB0ZXN0c19z
a2lwcGVkOiAwLAorICAgIH0KKyAgICBmYWlsdXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7
CisgICAgICAgIGNvbnN0IGlkRm9yVHlwZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQo
ZmFpbHVyZVR5cGVNYXBwaW5nW3R5cGVdKTsKKyAgICAgICAgc3RhdHNbYHRlc3RzXyR7dHlwZX1g
XSA9IGFjdHVhbElkID4gaWRGb3JUeXBlICA/IDAgOiAxOworICAgICAgICBzdGF0c1tgdGVzdHNf
dW5leHBlY3RlZF8ke3R5cGV9YF0gPSB1bmV4cGVjdGVkSWQgPiBpZEZvclR5cGUgID8gMCA6IDE7
CisgICAgfSk7CisgICAgcmV0dXJuIHN0YXRzOworfQorCitmdW5jdGlvbiBjb21iaW5lUmVzdWx0
cygpIHsKKyAgICBsZXQgY291bnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLmZpbGwo
MCk7CisgICAgbGV0IGRhdGEgPSBbXTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8v
IEZpbmQgY2FuZGlkYXRlIHV1aWQKKyAgICAgICAgbGV0IHV1aWQgPSAwOworICAgICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGNvdW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGNh
bmRpZGF0ZVV1aWQgPSBudWxsOworICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50c1tpXSAmJiBh
cmd1bWVudHNbaV0ubGVuZ3RoID4gY291bnRzW2ldKSB7CisgICAgICAgICAgICAgICAgY2FuZGlk
YXRlVXVpZCA9IGFyZ3VtZW50c1tpXVtjb3VudHNbaV1dLnV1aWQ7CisgICAgICAgICAgICAgICAg
aWYgKGNhbmRpZGF0ZVV1aWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICsrY291bnRzW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZVV1aWQpCisgICAgICAgICAgICAgICAgdXVpZCA9IE1hdGgubWF4KHV1aWQsIGNhbmRpZGF0
ZVV1aWQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0aGlzLmZhaWxlZCkKLSAgICAgICAg
ICAgIHJldHVybiByZW5kZXIoJ2RvdCBzdWNjZXNzJyk7CisgICAgICAgIGlmICghdXVpZCkKKyAg
ICAgICAgICAgIHJldHVybiBkYXRhOworCisgICAgICAgIC8vIENvbWJpbmUgcmVsZXZhbnQgcmVz
dWx0cworICAgICAgICBsZXQgZGF0YU5vZGUgPSBudWxsOworICAgICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGNvdW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGNvdW50c1tpXSA+
PSBhcmd1bWVudHNbaV0ubGVuZ3RoIHx8ICFhcmd1bWVudHNbaV1bY291bnRzW2ldXSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV1bY291bnRz
W2ldXS51dWlkICE9PSB1dWlkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBpZiAoZGF0YU5vZGUgJiYgIWRhdGFOb2RlLnN0YXRzKQorICAgICAgICAgICAgICAgIGRh
dGFOb2RlLnN0YXRzID0gc3RhdHNGb3JTaW5nbGVSZXN1bHQoZGF0YU5vZGUpOworCisgICAgICAg
ICAgICBkYXRhTm9kZSA9IGluUGxhY2VDb21iaW5lKGRhdGFOb2RlLCBhcmd1bWVudHNbaV1bY291
bnRzW2ldXSk7CisKKyAgICAgICAgICAgIGlmIChkYXRhTm9kZS5zdGF0cyAmJiAhYXJndW1lbnRz
W2ldW2NvdW50c1tpXV0uc3RhdHMpCisgICAgICAgICAgICAgICAgZGF0YU5vZGUuc3RhdHMgPSBp
blBsYWNlQ29tYmluZShkYXRhTm9kZS5zdGF0cywgc3RhdHNGb3JTaW5nbGVSZXN1bHQoYXJndW1l
bnRzW2ldW2NvdW50c1tpXV0pKTsKIAotICAgICAgICBsZXQga2V5ID0gJ2ZhaWxlZCc7Ci0gICAg
ICAgIGlmICh0aGlzLnRpbWVvdXQpCi0gICAgICAgICAgICBrZXkgPSAndGltZW91dCc7Ci0gICAg
ICAgIGlmICh0aGlzLmNyYXNoKQotICAgICAgICAgICAga2V5ID0gJ2NyYXNoJzsKLQotICAgICAg
ICBpZiAoIXRoaXMuY29tYmluZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtr
ZXl9YCwgYDxkaXYgY2xhc3M9InRhZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29s
b3IpIj4ke3RoaXMuZmFpbGVkfTwvZGl2PmApOwotCi0gICAgICAgIHJldHVybiByZW5kZXIoYGRv
dCAke2tleX1gLCBgPGRpdiBjbGFzcz0idGFnIiBzdHlsZT0iY29sb3I6dmFyKC0tYm9sZEludmVy
c2VDb2xvcikiPgotICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxldCBwZXJjZW50ID0gTWF0aC5jZWlsKHNlbGYuZmFpbGVkIC8gc2VsZi5jb3VudCAq
IDEwMCAtIC41KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQgPiAwKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAnPDEnOwotICAgICAgICAgICAgICAgIH0oKX0gJQotICAgICAgICAgICAgPC9kaXY+YCk7
CisKKyAgICAgICAgICAgICsrY291bnRzW2ldOworICAgICAgICB9CisgICAgICAgIGlmIChkYXRh
Tm9kZSkKKyAgICAgICAgICAgIGRhdGEucHVzaChkYXRhTm9kZSk7CiAgICAgfQorCisgICAgcmV0
dXJuIGRhdGE7CiB9CiAKLWNsYXNzIFRpbWVsaW5lIHsKK2NsYXNzIFRpbWVsaW5lRnJvbUVuZHBv
aW50IHsKICAgICBjb25zdHJ1Y3RvcihlbmRwb2ludCwgc3VpdGUgPSBudWxsKSB7CiAgICAgICAg
IHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKICAgICAgICAgdGhpcy5kaXNwbGF5QWxsQ29tbWl0
cyA9IHRydWU7CiAKICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IENvbmZpZ3VyYXRpb24u
ZnJvbVF1ZXJ5KCk7CiAgICAgICAgIHRoaXMucmVzdWx0cyA9IHt9OwotICAgICAgICB0aGlzLmNv
bGxhcHNlZCA9IHt9OwotICAgICAgICB0aGlzLmV4cGFuZGVkU0RLcyA9IHt9OwogICAgICAgICB0
aGlzLnN1aXRlID0gc3VpdGU7ICAvLyBTdWl0ZSBpcyBvZnRlbiBpbXBsaWVkIGJ5IHRoZSBlbmRw
b2ludCwgYnV0IHRyeWluZyB0byBkZXRlcm1pbmUgc3VpdGUgZnJvbSBlbmRwb2ludCBpcyBub3Qg
dHJpdmlhbC4KIAorICAgICAgICB0aGlzLnVwZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhpcy54YXhp
c1VwZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhpcy50aW1lbGluZVVwZGF0ZSA9IG51bGw7CisgICAg
ICAgIHRoaXMucmVwb3NpdG9yaWVzID0gW107CisKICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7
Ci0gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsK
LSAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldID0gW107Ci0g
ICAgICAgICAgICB0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID0gdHJ1ZTsK
LSAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5sYXRlc3REaXNwYXRjaCA9IERhdGUubm93KCk7
CiAgICAgICAgIHRoaXMucmVmID0gUkVGLmNyZWF0ZVJlZih7CkBAIC0yNDQsMTUgKzM2OCw0NiBA
QCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgICAg
IENvbW1pdEJhbmsuY2FsbGJhY2tzLnB1c2goKCkgPT4gewotICAgICAgICAgICAgY29uc3QgcGFy
YW1zID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSk7Ci0gICAgICAg
ICAgICBzZWxmLnJlZi5zZXRTdGF0ZShwYXJhbXMubGltaXQgPyBwYXJzZUludChwYXJhbXMubGlt
aXRbcGFyYW1zLmxpbWl0Lmxlbmd0aCAtIDFdKSA6IERFRkFVTFRfTElNSVQpOwotICAgICAgICB9
KTsKKyAgICAgICAgdGhpcy5jb21taXRfY2FsbGJhY2sgPSAoKSA9PiB7CisgICAgICAgICAgICBz
ZWxmLnVwZGF0ZSgpOworICAgICAgICB9OworICAgICAgICBDb21taXRCYW5rLmNhbGxiYWNrcy5w
dXNoKHRoaXMuY29tbWl0X2NhbGxiYWNrKTsKIAogICAgICAgICB0aGlzLnJlbG9hZCgpOwogICAg
IH0KKyAgICB0ZWFyZG93bigpIHsKKyAgICAgICAgQ29tbWl0QmFuay5jYWxsYmFja3MgPSBDb21t
aXRCYW5rLmNhbGxiYWNrcy5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyKSA9PiB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5jb21taXRfY2FsbGJhY2sgPT09IHZhbHVlOworICAgICAgICB9KTsK
KyAgICB9CisgICAgdXBkYXRlKCkgeworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeVRvUGFy
YW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKKyAgICAgICAgY29uc3QgY29tbWl0cyA9
IGNvbW1pdHNGb3JSZXN1bHRzKHRoaXMucmVzdWx0cywgcGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQo
cGFyYW1zLmxpbWl0W3BhcmFtcy5saW1pdC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJTUlULCB0
aGlzLmFsbENvbW1pdHMpOworICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlRm9yQ29tbWl0cyhj
b21taXRzKTsKKworICAgICAgICBjb25zdCBuZXdSZXBvc2l0b3JpZXMgPSByZXBvc2l0b3JpZXNG
b3JDb21taXRzKGNvbW1pdHMpOworICAgICAgICBsZXQgaGF2ZU5ld1JlcG9zID0gdGhpcy5yZXBv
c2l0b3JpZXMubGVuZ3RoICE9IG5ld1JlcG9zaXRvcmllcy5sZW5ndGg7CisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyAhaGF2ZU5ld1JlcG9zICYmIGkgPCB0aGlzLnJlcG9zaXRvcmllcy5sZW5ndGgg
JiYgaSA8IG5ld1JlcG9zaXRvcmllcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGhhdmVOZXdS
ZXBvcyA9IHRoaXMucmVwb3NpdG9yaWVzW2ldICE9IG5ld1JlcG9zaXRvcmllc1tpXTsKKyAgICAg
ICAgaWYgKGhhdmVOZXdSZXBvcyAmJiB0aGlzLnRpbWVsaW5lVXBkYXRlKSB7CisgICAgICAgICAg
ICB0aGlzLnhheGlzVXBkYXRlcyA9IFtdOworICAgICAgICAgICAgbGV0IHRvcCA9IHRydWU7Cisg
ICAgICAgICAgICBsZXQgY29tcG9uZW50cyA9IFtdOworCisgICAgICAgICAgICBuZXdSZXBvc2l0
b3JpZXMuZm9yRWFjaChyZXBvc2l0b3J5ID0+IHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRz
LnB1c2goeEF4aXNGcm9tU2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHRoaXMueGF4aXNVcGRhdGVz
LCB0b3ApKTsKKyAgICAgICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICB0aGlzLnRpbWVsaW5lVXBkYXRlKGNvbXBvbmVudHMpOworICAgICAgICAg
ICAgdGhpcy5yZXBvc2l0b3JpZXMgPSBuZXdSZXBvc2l0b3JpZXM7CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLnVwZGF0ZXMuZm9yRWFjaChmdW5jID0+IHtmdW5jKHNjYWxlKTt9KQorICAgICAg
ICB0aGlzLnhheGlzVXBkYXRlcy5mb3JFYWNoKGZ1bmMgPT4ge2Z1bmMoc2NhbGUpO30pOworICAg
IH0KICAgICByZXJlbmRlcigpIHsKLSAgICAgICAgbGV0IHBhcmFtcyA9IHF1ZXJ5VG9QYXJhbXMo
ZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pOworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVy
eVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKICAgICAgICAgdGhpcy5yZWYu
c2V0U3RhdGUocGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3BhcmFtcy5saW1p
dC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJTUlUKTsKICAgICB9CiAgICAgcmVsb2FkKCkgewpA
QCAtMjczLDExICs0MjgsOCBAQCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgIGlmICghZGVlcENv
bXBhcmUobmV3Q29uZmlncywgdGhpcy5jb25maWd1cmF0aW9ucykpIHsKICAgICAgICAgICAgIHRo
aXMuY29uZmlndXJhdGlvbnMgPSBuZXdDb25maWdzOwogICAgICAgICAgICAgdGhpcy5yZXN1bHRz
ID0ge307Ci0gICAgICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IHt9OwotICAgICAgICAgICAgdGhp
cy5leHBhbmRlZFNES3MgPSB7fTsKICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9y
RWFjaChjb25maWd1cmF0aW9uID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29u
ZmlndXJhdGlvbi50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAgICAgIHRoaXMuY29sbGFwc2Vk
W2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSB0cnVlOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KIApAQCAtMzQxLDI2OCArNDkzLDIxMiBAQCBjbGFzcyBUaW1lbGluZSB7CiAKICAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5yZWZ9Ij48L2Rpdj5gOwog
ICAgIH0KKwogICAgIHJlbmRlcihsaW1pdCkgewotICAgICAgICBsZXQgbm93ID0gTWF0aC5mbG9v
cihEYXRlLm5vdygpIC8gMTApOwotICAgICAgICBsZXQgbWluRGlzcGxheWVkVXVpZCA9IG5vdzsK
LSAgICAgICAgbGV0IG1heExpbWl0ZWRVdWlkID0gMDsKLSAgICAgICAgdGhpcy5jb25maWd1cmF0
aW9ucy5mb3JFYWNoKGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgdGhpcy5yZXN1bHRz
W2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXBhaXIucmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICBpZiAobGltaXQgIT09IDEgJiYgbGltaXQgPT09IHBhaXIucmVzdWx0
cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIG1heExpbWl0ZWRVdWlkID0gTWF0aC5tYXgo
cGFpci5yZXN1bHRzWzBdLnV1aWQsIG1heExpbWl0ZWRVdWlkKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChsaW1pdCA9PT0gMSkKLSAgICAgICAgICAgICAgICAgICAgbWluRGlzcGxheWVkVXVp
ZCA9IE1hdGgubWluKHBhaXIucmVzdWx0c1twYWlyLnJlc3VsdHMubGVuZ3RoIC0gMV0udXVpZCwg
bWluRGlzcGxheWVkVXVpZCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzWzBdLnV1aWQsIG1p
bkRpc3BsYXllZFV1aWQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgICBp
ZiAobWluRGlzcGxheWVkVXVpZCA9PT0gbm93KQotICAgICAgICAgICAgbWluRGlzcGxheWVkVXVp
ZCA9IG1heExpbWl0ZWRVdWlkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtaW5EaXNwbGF5
ZWRVdWlkID0gTWF0aC5tYXgobWluRGlzcGxheWVkVXVpZCwgbWF4TGltaXRlZFV1aWQpOwotCi0g
ICAgICAgIGxldCBjb21taXRzID0gW107Ci0gICAgICAgIGxldCByZXBvc2l0b3JpZXMgPSBuZXcg
U2V0KCk7Ci0gICAgICAgIGxldCBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNvbW1p
dHMubGVuZ3RoIC0gMTsKLSAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNvbmZp
Z3VyYXRpb24gPT4gewotICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9L
ZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAgICAgICAgICBwYWlyLnJlc3VsdHMuZm9y
RWFjaChyZXN1bHQgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnV1aWQgPCBt
aW5EaXNwbGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICBsZXQgY2FuZGlkYXRlQ29tbWl0cyA9IFtdOworICAgICAgICBjb25zdCBz
ZWxmID0gdGhpczsKKyAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNGb3JSZXN1bHRzKHRo
aXMucmVzdWx0cywgbGltaXQsIHRoaXMuYWxsQ29tbWl0cyk7CisgICAgICAgIGNvbnN0IHNjYWxl
ID0gc2NhbGVGb3JDb21taXRzKGNvbW1pdHMpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5kaXNwbGF5QWxsQ29tbWl0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRD
b21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0cy5sZW5ndGggLSAxOwotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XS51dWlk
KCkgPCByZXN1bHQudXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlBbGxDb21taXRzIHx8IENvbW1p
dEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQoKSA9PSByZXN1bHQudXVpZCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2goQ29tbWl0
QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisgICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBn
ZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpOworICAgICAgICBjb25zdCBjb2xvck1hcCA9
IHsKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgn
LS1ncmVlbkxpZ2h0JykudHJpbSgpLAorICAgICAgICAgICAgZmFpbGVkOiBjb21wdXRlZFN0eWxl
LmdldFByb3BlcnR5VmFsdWUoJy0tcmVkTGlnaHQnKS50cmltKCksCisgICAgICAgICAgICB0aW1l
ZG91dDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5nZUxpZ2h0JykudHJp
bSgpLAorICAgICAgICAgICAgY3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVl
KCctLXB1cnBsZUxpZ2h0JykudHJpbSgpLAorICAgICAgICB9CisKKyAgICAgICAgdGhpcy51cGRh
dGVzID0gW107CisgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAgICAgICBnZXRTY2Fs
ZUZ1bmM6ICh2YWx1ZSkgPT4geworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS51
dWlkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3V1aWQ6IHZhbHVlLnV1aWR9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjb21w
YXJlRnVuYzogKGEsIGIpID0+IHtyZXR1cm4gYi51dWlkIC0gYS51dWlkO30sCisgICAgICAgICAg
ICByZW5kZXJGYWN0b3J5OiAoZHJhd0RvdCkgPT4gKGRhdGEsIGNvbnRleHQsIHgsIHkpID0+IHsK
KyAgICAgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBk
cmF3RG90KGNvbnRleHQsIHgsIHksIHRydWUpOworCisgICAgICAgICAgICAgICAgbGV0IHRhZyA9
IG51bGw7CisgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0gY29sb3JNYXAuc3VjY2VzczsKKyAg
ICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0cykgeworICAgICAgICAgICAgICAgICAgICB0YWcg
PSBkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycg
OiAnXyd9ZmFpbGVkYF07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmYWls
dXJlcyB0aGF0IGFyZSBhIHJlc3VsdCBvZiBtdWx0aXBsZSBydW5zLCBjb21iaW5lIHRoZW0uCisg
ICAgICAgICAgICAgICAgICAgIGlmICh0YWcgJiYgIWRhdGEuc3RhcnRfdGltZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdGFnID0gTWF0aC5jZWlsKHRhZyAvIGRhdGEuc3RhdHMudGVzdHNf
cnVuICogMTAwIC0gLjUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gJzwxJzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRhZyA9IGAke3RhZ30gJWAKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGggPT09IDAgfHwgY2FuZGlkYXRlQ29t
bWl0c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAtIDFdLnV1aWQoKSAhPT0gcmVzdWx0LnV1aWQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2goewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdpZCc6ICc/JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndXVpZCc6ICgpID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQotICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9PiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmFkZChjb21taXQucmVwb3NpdG9yeV9pZCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxlbmd0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCgpID09PSBjb21t
aXRzW2luZGV4XS51dWlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA+IGNvbW1p
dHNbaW5kZXhdLnV1aWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
aXRzLnNwbGljZShpbmRleCwgMCwgY29tbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAgICAgICAgICAg
ICAgICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191
bmV4cGVjdGVkXycgOiAnXyd9JHt0eXBlfWBdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOwogICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgICAg
aWYgKGN1cnJlbnRDb21taXRJbmRleCA+PSAwICYmIGNvbW1pdHMubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICBsZXQgdHJhaWxpbmdSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KHJlcG9zaXRvcmllcyk7Ci0g
ICAgICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUoY29tbWl0c1tjb21taXRzLmxl
bmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDb21t
aXRJbmRleCA+PSAwICYmIHRyYWlsaW5nUmVwb3NpdG9yaWVzLnNpemUpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBjb21taXQgPSBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4
XTsKLSAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMuaGFzKGNvbW1pdC5y
ZXBvc2l0b3J5X2lkKSkgewotICAgICAgICAgICAgICAgICAgICBjb21taXRzLnB1c2goY29tbWl0
KTsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVsZXRlKGNvbW1p
dC5yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBsZXQgcmVzdWx0SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGRhdGEu
YWN0dWFsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJFeHBlY3RlZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3Rh
dGVJZChFeHBlY3RhdGlvbnMudW5leHBlY3RlZFJlc3VsdHMoZGF0YS5hY3R1YWwsIGRhdGEuZXhw
ZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZVR5cGVPcmRlci5mb3JFYWNoKHR5
cGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEV4cGVjdGF0aW9ucy5zdHJpbmdU
b1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBwaW5nW3R5cGVdKSA+PSByZXN1bHRJZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZHJhd0RvdChjb250ZXh0LCB4LCB5LCBmYWxzZSwgdGFnID8gdGFnIDogbnVsbCwgZmFsc2UsIGNv
bG9yKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gb25E
b3RDbGlja0ZhY3RvcnkoY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIChkYXRh
KSA9PiB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBzb21ldGhpbmcg
c2FuZSBoZXJlLCBidXQgd2UgcHJvYmFibHkgbmVlZCBhbm90aGVyIGVuZHBvaW50CisgICAgICAg
ICAgICAgICAgaWYgKCFkYXRhLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxl
cnQoJ05vZGUgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBydW5zJyk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLS1j
dXJyZW50Q29tbWl0SW5kZXg7CisKKyAgICAgICAgICAgICAgICBsZXQgYnVpbGRQYXJhbXMgPSBj
b25maWd1cmF0aW9uLnRvUGFyYW1zKCk7CisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3N1
aXRlJ10gPSBbc2VsZi5zdWl0ZV07CisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3V1aWQn
XSA9IFtkYXRhLnV1aWRdOworICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydhZnRlcl90aW1l
J10gPSBbZGF0YS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYmVm
b3JlX3RpbWUnXSA9IFtkYXRhLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgICAgIHdpbmRvdy5v
cGVuKGAvdXJscy9idWlsZD8ke3BhcmFtc1RvUXVlcnkoYnVpbGRQYXJhbXMpfWAsICdfYmxhbmsn
KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAgICAgIGZ1bmN0aW9uIGV4cG9ydGVy
RmFjdG9yeShkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gKHVwZGF0ZUZ1bmN0aW9uKSA9PiB7
CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVzLnB1c2goKHNjYWxlKSA9PiB7dXBkYXRlRnVu
Y3Rpb24oZGF0YSwgc2NhbGUpO30pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgcmVwb3NpdG9yaWVzID0gWy4uLnJlcG9zaXRvcmllc107Ci0gICAgICAgIHJlcG9zaXRvcmll
cy5zb3J0KCk7CisgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdOworICAgICAgICB0aGlzLmNvbmZp
Z3VyYXRpb25zLmZvckVhY2goY29uZmlndXJhdGlvbiA9PiB7CisgICAgICAgICAgICBpZiAoIXRo
aXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldIHx8IE9iamVjdC5rZXlzKHRoaXMucmVz
dWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldKS5sZW5ndGggPT09IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0idGltZWxpbmUiPgotICAg
ICAgICAgICAgICAgIDxkaXYgJHtyZXBvc2l0b3JpZXMubGVuZ3RoID4gMSA/IGBjbGFzcz0iaGVh
ZGVyIHdpdGgtdG9wLXgtYXhpcyJgIDogYGNsYXNzPSJoZWFkZXIiYH0+Ci0gICAgICAgICAgICAg
ICAgICAgICR7dGhpcy5jb25maWd1cmF0aW9ucy5tYXAoY29uZmlndXJhdGlvbiA9PiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXN1bHRzW2NvbmZpZ3Vy
YXRpb24udG9LZXkoKV0pLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpczsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVyID0gUkVGLmNyZWF0ZVJlZih7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IGVsZW1lbnQgPT4g
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9
PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxhcHNlZFtj
b25maWd1cmF0aW9uLnRvS2V5KCldID0gIXNlbGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9L
ZXkoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcmVuZGVy
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgcmVzdWx0ID0gYDxkaXYgY2xhc3M9InNlcmllcyI+Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxhIHJlZj0iJHtleHBhbmRlcn0iIHN0eWxlPSJjdXJzb3I6
IHBvaW50ZXI7Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZnVuY3Rp
b24oKSB7cmV0dXJuIHNlbGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPyAnKycg
OiAnLSd9KCl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHtjb25maWd1cmF0aW9ufQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
Y29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnID0gY29uZmlnID0+IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdz
dHJpbmcnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2
IGNsYXNzPSJzZXJpZXMiPiR7Y29uZmlnfTwvZGl2PmA7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGV0IHF1ZXVlUGFyYW1zID0gY29uZmlnLnRvUGFyYW1zKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlUGFyYW1zWydzdWl0ZSddID0gW3RoaXMuc3Vp
dGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdMaW5rID0g
YDxhIGNsYXNzPSJ0ZXh0IHRpbnkiIGhyZWY9Ii91cmxzL3F1ZXVlPyR7cGFyYW1zVG9RdWVyeShx
dWV1ZVBhcmFtcyl9IiB0YXJnZXQ9Il9ibGFuayI+JHtjb25maWd9PC9hPmA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNvbmZpZy50b0tleSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlciA9IFJFRi5jcmVhdGVSZWYo
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IGVs
ZW1lbnQgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1l
bnQub25jbGljayA9ICgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5leHBhbmRlZFNES3Nba2V5XSA9ICFzZWxmLmV4cGFuZGVkU0RLc1trZXld
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcmVu
ZGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4
cGFuZGVkU0RLc1trZXldID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtjb25maWdMaW5rfTwvZGl2
PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0i
c2VyaWVzIHRleHQgdGlueSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGEgcmVmPSIke2V4cGFuZGVyfSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiPgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkge3JldHVy
biBzZWxmLmV4cGFuZGVkU0RLc1trZXldID8gJy1zZGsnIDogJytzZGsnfSgpfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAke2NvbmZpZ0xpbmt9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdENvbmZpZyA9IG51bGw7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tl
eSgpXS5mb3JFYWNoKHBhaXIgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGFpci5yZXN1bHRzLmxlbmd0aCA8PSAwIHx8IHBhaXIucmVzdWx0c1twYWlyLnJlc3VsdHMu
bGVuZ3RoIC0gMV0udXVpZCA8IG1pbkRpc3BsYXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gJyc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJhdGlvbik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNkayA9IGNvbmZpZy5zZGs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuc2RrOyAgLy8g
U3RyaXAgb3V0IHNkayBpbmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY29tcGFyZUluZGV4ID0gY29uZmlnLmNvbXBhcmUobGFzdENvbmZpZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29uZmlnICE9PSBudWxs
ICYmIGNvbXBhcmVJbmRleCAhPSAwICYmICF0aGlzLmV4cGFuZGVkU0RLc1tsYXN0Q29uZmlnLnRv
S2V5KCldKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNl
cmllc0hlYWRlckZvclNES0xlc3NDb25maWcobGFzdENvbmZpZyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVJbmRleCA9PT0gMCAmJiB0aGlzLmV4cGFu
ZGVkU0RLc1trZXldID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmV4cGFuZGVkU0RLc1trZXldID0gZmFsc2U7ICAvLyBQb3B1bGF0ZSB0aGlz
IGRpY3Rpb25hcnkgb24gdGhlIGZseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuZXhwYW5kZWRTREtzW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb21wYXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IHNlcmllc0hlYWRlckZvclNES0xlc3NDb25maWcoY29uZmln
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgPGRpdiBj
bGFzcz0ic2VyaWVzIj4ke3Nka308L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb25maWcgPSBjb25m
aWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxhc3RDb25maWcgIT09IG51bGwgJiYgIXRoaXMuZXhwYW5kZWRTREtzW2xh
c3RDb25maWcudG9LZXkoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBzZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnKGxhc3RDb25maWcpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+Ci0gICAgICAgICAgICAgICAg
ICAgICR7cmVuZGVyVGltZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzLCB0cnVlKX0KLSAgICAg
ICAgICAgICAgICAgICAgJHt0aGlzLmNvbmZpZ3VyYXRpb25zLm1hcChjb25maWd1cmF0aW9uID0+
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnJlc3VsdHNb
Y29uZmlndXJhdGlvbi50b0tleSgpXSkubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAnJzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJl
bnRBcnJheUluZGV4ID0gbmV3IEFycmF5KHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5
KCldLmxlbmd0aCkuZmlsbCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb3RzID0g
e307Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVz
dWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcGFpckZvckluZGV4ID0gdGhpcy5yZXN1bHRzW2NvbmZpZ3Vy
YXRpb24udG9LZXkoKV1baV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXJG
b3JJbmRleC5yZXN1bHRzLmxlbmd0aCA8PSAwIHx8IHBhaXJGb3JJbmRleC5yZXN1bHRzW3BhaXJG
b3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3RzW25ldyBDb25maWd1cmF0aW9uKHBhaXJGb3JJbmRleC5jb25maWd1cmF0
aW9uKS50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29tbWl0cy5zbGljZSgwLCBjb21taXRzLmxlbmd0aCAtIE1hdGgubWF4
KHJlcG9zaXRvcmllcy5sZW5ndGggLSAxLCAwKSkuZm9yRWFjaChjb21taXQgPT4gewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEFycmF5SW5k
ZXgubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cGFpckZvckluZGV4ID0gdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV1baV07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyRm9ySW5kZXgucmVzdWx0cy5s
ZW5ndGggPD0gMCB8fCBwYWlyRm9ySW5kZXgucmVzdWx0c1twYWlyRm9ySW5kZXgucmVzdWx0cy5s
ZW5ndGggLSAxXS51dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXJGb3JJbmRleC5jb25maWd1
cmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlndXJh
dGlvbktleSA9IGNvbmZpZy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgcmVzdWx0SW5kZXggPSBwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggLSBjdXJyZW50
QXJyYXlJbmRleFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dEluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tj
b25maWd1cmF0aW9uS2V5XS5wdXNoKG5ldyBEb3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCgpID09
PSBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0udXVpZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1aWxkUGFyYW1zID0gY29uZmlnLnRvUGFyYW1z
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snc3Vp
dGUnXSA9IFt0aGlzLnN1aXRlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1aWxkUGFyYW1zWyd1dWlkJ10gPSBbY29tbWl0LnV1aWQoKV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZExpbmsgPSBgL3VybHMvYnVpbGQ/JHtwYXJh
bXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKX1gOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktl
eV0ucHVzaChuZXcgRG90KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHMudGVzdHNfcnVuLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgu
cmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAn
X3VuZXhwZWN0ZWRfJyA6ICdfJ31mYWlsZWRgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRz
W2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9dGltZWRv
dXRgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZv
ckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVj
dGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9Y3Jhc2hlZGBdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVpbGRMaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3Vs
dElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChwYWlyRm9ySW5kZXgucmVzdWx0c1ty
ZXN1bHRJbmRleF0uYWN0dWFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAod2lsbEZpbHRlckV4cGVjdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQo
RXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhd
LmFjdHVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5leHBlY3RlZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25LZXldLnB1c2gobmV3IERv
dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPD0gRXhwZWN0
YXRpb25zLnN0cmluZ1RvU3RhdGVJZCgnRVJST1InKSA/IDEgOiAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJZCA8PSBFeHBlY3RhdGlvbnMuc3Ry
aW5nVG9TdGF0ZUlkKCdUSU1FT1VUJykgPyAxIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPD0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3Rh
dGVJZCgnQ1JBU0gnKSA/IDEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVpbGRMaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVzaChuZXcgRG90KCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXN1bHRJbmRleCA+PSAwICYmIGNvbW1p
dC51dWlkKCkgPD0gcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnV1aWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY3VycmVudEFycmF5SW5kZXhbaV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJbmRleCA9IHBhaXJG
b3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIGN1cnJlbnRBcnJheUluZGV4W2ldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBDcmVhdGUgYSBsaXN0
IG9mIGNvbmZpZ3VyYXRpb25zIHRvIGRpc3BsYXkgd2l0aCBTREtzIHN0cmlwcGVkCisgICAgICAg
ICAgICBsZXQgbWFwcGVkQ2hpbGRyZW5Db25maWdzID0ge307CisgICAgICAgICAgICBsZXQgY2hp
bGRyZW5Db25maWdzQnlTREsgPSB7fQorICAgICAgICAgICAgbGV0IHJlc3VsdHNCeUtleSA9IHt9
OworICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFj
aChwYWlyID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJpcHBlZENvbmZpZyA9IG5ldyBD
b25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAgICAgcmVzdWx0
c0J5S2V5W3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldID0gWy4uLnBhaXIucmVzdWx0c107CisgICAg
ICAgICAgICAgICAgcmVzdWx0c0J5S2V5W3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldLnNvcnQoZnVu
Y3Rpb24oYSwgYikge3JldHVybiBiLnV1aWQgLSBhLnV1aWQ7fSkKKyAgICAgICAgICAgICAgICBk
ZWxldGUgc3RyaXBwZWRDb25maWcuc2RrOworICAgICAgICAgICAgICAgIG1hcHBlZENoaWxkcmVu
Q29uZmlnc1tzdHJpcHBlZENvbmZpZy50b0tleSgpXSA9IHN0cmlwcGVkQ29uZmlnOworICAgICAg
ICAgICAgICAgIGlmICghY2hpbGRyZW5Db25maWdzQnlTREtbc3RyaXBwZWRDb25maWcudG9LZXko
KV0pCisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW3N0cmlwcGVkQ29u
ZmlnLnRvS2V5KCldID0gW107CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtb
c3RyaXBwZWRDb25maWcudG9LZXkoKV0ucHVzaChuZXcgQ29uZmlndXJhdGlvbihwYWlyLmNvbmZp
Z3VyYXRpb24pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbGV0IGNoaWxkcmVuQ29u
ZmlncyA9IFtdOworICAgICAgICAgICAgT2JqZWN0LmtleXMobWFwcGVkQ2hpbGRyZW5Db25maWdz
KS5mb3JFYWNoKGtleSA9PiB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzLnB1c2go
bWFwcGVkQ2hpbGRyZW5Db25maWdzW2tleV0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBjaGlsZHJlbkNvbmZpZ3Muc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGEuY29tcGFyZShi
KTt9KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkW2NvbmZp
Z3VyYXRpb24udG9LZXkoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8
ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdlKGRvdHMpLm1hcChkb3QgPT4ge3JldHVybiBk
b3QudG9TdHJpbmcoKTt9KS5qb2luKCcnKX08L2Rpdj5gOworICAgICAgICAgICAgLy8gQ3JlYXRl
IHRoZSBjb2xsYXBzZWQgdGltZWxpbmVzLCBjb2JpbmUgcmVzdWx0cworICAgICAgICAgICAgbGV0
IGFsbFJlc3VsdHMgPSBbXTsKKyAgICAgICAgICAgIGxldCBjb2xsYXBzZWRUaW1lbGluZXMgPSBb
XTsKKyAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlncy5mb3JFYWNoKGNvbmZpZyA9PiB7CisgICAg
ICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLnNvcnQoZnVu
Y3Rpb24oYSwgYikge3JldHVybiBhLmNvbXBhcmVTREtzKGIpO30pOworCisgICAgICAgICAgICAg
ICAgbGV0IHJlc3VsdHNGb3JDb25maWcgPSBbXTsKKyAgICAgICAgICAgICAgICBjaGlsZHJlbkNv
bmZpZ3NCeVNES1tjb25maWcudG9LZXkoKV0uZm9yRWFjaChzZGtDb25maWcgPT4geworICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzRm9yQ29uZmlnID0gY29tYmluZVJlc3VsdHMocmVzdWx0c0Zv
ckNvbmZpZywgcmVzdWx0c0J5S2V5W3Nka0NvbmZpZy50b0tleSgpXSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgYWxsUmVzdWx0cyA9IGNvbWJpbmVSZXN1bHRzKGFsbFJl
c3VsdHMsIHJlc3VsdHNGb3JDb25maWcpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gJyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudERvdHMgPSB7
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0Q29uZmlnID0gbnVsbDsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0u
Zm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmln
ID0gbmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWRvdHNba2V5XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcu
c2RrOyAgLy8gU3RyaXAgb3V0IHNkayBpbmZvcm1hdGlvbgotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY29tcGFyZUluZGV4ID0gY29uZmlnLmNvbXBhcmUobGFzdENvbmZpZyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTREtFeHBhbmRlZCA9IHRoaXMu
ZXhwYW5kZWRTREtzW2NvbmZpZy50b0tleSgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY29tcGFyZUluZGV4IHx8IGlzU0RLRXhwYW5kZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdl
KGN1cnJlbnREb3RzKS5tYXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbign
Jyl9PC9kaXY+YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvdHMg
PSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbXBhcmVJbmRleCAmJiBpc1NES0V4cGFuZGVkKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzxkaXYgY2xhc3M9InNlcmllcyI+PC9kaXY+
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RG90c1trZXldID0gZG90c1tr
ZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb25maWcgPSBjb25maWc7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50RG90cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDxkaXYg
Y2xhc3M9InNlcmllcyI+JHtEb3QubWVyZ2UoY3VycmVudERvdHMpLm1hcChkb3QgPT4ge3JldHVy
biBkb3QudG9TdHJpbmcoKTt9KS5qb2luKCcnKX08L2Rpdj5gOworICAgICAgICAgICAgICAgIGxl
dCBxdWV1ZVBhcmFtcyA9IGNvbmZpZy50b1BhcmFtcygpOworICAgICAgICAgICAgICAgIHF1ZXVl
UGFyYW1zWydzdWl0ZSddID0gW3RoaXMuc3VpdGVdOworICAgICAgICAgICAgICAgIGxldCBteVRp
bWVsaW5lID0gVGltZWxpbmUuU2VyaWVzV2l0aEhlYWRlckNvbXBvbmVudCgKKyAgICAgICAgICAg
ICAgICAgICAgYCR7Y2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmxlbmd0aCA+
IDEgPyAnIHwgJyA6ICcnfTxhIGhyZWY9Ii91cmxzL3F1ZXVlPyR7cGFyYW1zVG9RdWVyeShxdWV1
ZVBhcmFtcyl9IiB0YXJnZXQ9Il9ibGFuayI+JHtjb25maWd9PC9hPmAsCisgICAgICAgICAgICAg
ICAgICAgIFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudChyZXN1bHRzRm9yQ29uZmlnLCBz
Y2FsZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2NhbGVGdW5jOiBvcHRpb25zLmdl
dFNjYWxlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVGdW5jOiBvcHRpb25z
LmNvbXBhcmVGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogb3B0
aW9ucy5yZW5kZXJGYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG9w
dGlvbnMuZXhwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdENsaWNrOiBvbkRv
dENsaWNrRmFjdG9yeShjb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6
IGV4cG9ydGVyRmFjdG9yeShyZXN1bHRzRm9yQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAg
fSkpOworCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuQ29uZmlnc0J5U0RLW2NvbmZpZy50
b0tleSgpXS5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lbGluZXNC
eVNESyA9IFtdOworICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3NCeVNES1tjb25m
aWcudG9LZXkoKV0uZm9yRWFjaChzZGtDb25maWcgPT4geworICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZWxpbmVzQnlTREsucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1l
bGluZS5TZXJpZXNXaXRoSGVhZGVyQ29tcG9uZW50KGAke3Nka0NvbmZpZy5zZGt9YCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50
KHJlc3VsdHNCeUtleVtzZGtDb25maWcudG9LZXkoKV0sIHNjYWxlLCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZXRTY2FsZUZ1bmM6IG9wdGlvbnMuZ2V0U2NhbGVGdW5j
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUZ1bmM6IG9wdGlv
bnMuY29tcGFyZUZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJGYWN0b3J5OiBvcHRpb25zLnJlbmRlckZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBvcnRlcjogb3B0aW9ucy5leHBvcnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0b3J5KHNka0Nv
bmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogZXhw
b3J0ZXJGYWN0b3J5KHJlc3VsdHNCeUtleVtzZGtDb25maWcudG9LZXkoKV0pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgbXlUaW1lbGluZSA9IFRpbWVsaW5lLkV4cGFuZGFibGVTZXJpZXNX
aXRoSGVhZGVyRXhwYW5kZXJDb21wb25lbnQobXlUaW1lbGluZSwgLi4udGltZWxpbmVzQnlTREsp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb2xsYXBzZWRUaW1lbGluZXMu
cHVzaChteVRpbWVsaW5lKTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KLSAg
ICAgICAgICAgICAgICAgICAgJHtyZW5kZXJUaW1lbGluZShjb21taXRzLCByZXBvc2l0b3JpZXMp
fQotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+YDsKKyAgICAgICAg
ICAgIGlmIChjb2xsYXBzZWRUaW1lbGluZXMubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChjb2xsYXBzZWRUaW1lbGluZXMubGVuZ3RoID09PSAx
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzZWRUaW1lbGluZXNbMF0uaGVhZGVyLmlu
Y2x1ZGVzKCdjbGFzcz0ic2VyaWVzIicpKQorICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRU
aW1lbGluZXNbMF0uaGVhZGVyID0gVGltZWxpbmUuSGVhZGVyQ29tcG9uZW50KGNvbGxhcHNlZFRp
bWVsaW5lc1swXS5oZWFkZXIpOworICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29sbGFw
c2VkVGltZWxpbmVzWzBdKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goCisgICAgICAgICAgICAgICAgVGltZWxpbmUu
RXhwYW5kYWJsZVNlcmllc1dpdGhIZWFkZXJFeHBhbmRlckNvbXBvbmVudCgKKyAgICAgICAgICAg
ICAgICBUaW1lbGluZS5TZXJpZXNXaXRoSGVhZGVyQ29tcG9uZW50KGAgJHtjb25maWd1cmF0aW9u
fWAsCisgICAgICAgICAgICAgICAgICAgIFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudChh
bGxSZXN1bHRzLCBzY2FsZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2NhbGVGdW5j
OiBvcHRpb25zLmdldFNjYWxlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVG
dW5jOiBvcHRpb25zLmNvbXBhcmVGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
RmFjdG9yeTogb3B0aW9ucy5yZW5kZXJGYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAg
b25Eb3RDbGljazogb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlndXJhdGlvbiksCisgICAgICAgICAg
ICAgICAgICAgICAgICBleHBvcnRlcjogZXhwb3J0ZXJGYWN0b3J5KGFsbFJlc3VsdHMpLAorICAg
ICAgICAgICAgICAgICAgICB9KSksCisgICAgICAgICAgICAgICAgLi4uY29sbGFwc2VkVGltZWxp
bmVzCisgICAgICAgICAgICApKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgbGV0IHRvcCA9IHRy
dWU7CisgICAgICAgIHNlbGYueGF4aXNVcGRhdGVzID0gW107CisgICAgICAgIHRoaXMucmVwb3Np
dG9yaWVzID0gcmVwb3NpdG9yaWVzRm9yQ29tbWl0cyhjb21taXRzKTsKKyAgICAgICAgdGhpcy5y
ZXBvc2l0b3JpZXMuZm9yRWFjaChyZXBvc2l0b3J5ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHhB
eGlzQ29tcG9uZW50ID0geEF4aXNGcm9tU2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHNlbGYueGF4
aXNVcGRhdGVzLCB0b3ApOworICAgICAgICAgICAgaWYgKHRvcCkKKyAgICAgICAgICAgICAgICBj
aGlsZHJlbi51bnNoaWZ0KHhBeGlzQ29tcG9uZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHhBeGlzQ29tcG9uZW50KTsKKyAgICAgICAgICAgIHRv
cCA9IGZhbHNlOworICAgICAgICB9KTsKKworICAgICAgICBjb25zdCBjb21wb3NlciA9IEZQLmNv
bXBvc2VyKCh1cGRhdGVUaW1lbGluZSkgPT4geworICAgICAgICAgICAgc2VsZi50aW1lbGluZVVw
ZGF0ZSA9ICh4QXhpc2VzKSA9PiB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKDAs
IDEpOworICAgICAgICAgICAgICAgIGlmIChzZWxmLnJlcG9zaXRvcmllcy5sZW5ndGggPiAxKQor
ICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoY2hpbGRyZW4ubGVuZ3RoIC0gc2Vs
Zi5yZXBvc2l0b3JpZXMubGVuZ3RoLCBzZWxmLnJlcG9zaXRvcmllcy5sZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgbGV0IHRvcCA9IHRydWU7CisgICAgICAgICAgICAgICAgeEF4aXNlcy5mb3JF
YWNoKGNvbXBvbmVudCA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b3ApCisgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZHJlbi51bnNoaWZ0KGNvbXBvbmVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29t
cG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgdG9wID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgdXBkYXRlVGltZWxpbmUoY2hpbGRyZW4pOworICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBUaW1lbGluZS5DYW52YXNDb250
YWluZXIoY29tcG9zZXIsIC4uLmNoaWxkcmVuKTsKICAgICB9CiB9CiAKKwogZnVuY3Rpb24gTGVn
ZW5kTGFiZWwoZXZlbnRTdHJlYW0sIGZpbHRlckV4cGVjdGVkVGV4dCwgZmlsdGVyVW5leHBlY3Rl
ZFRleHQpIHsKICAgICBsZXQgcmVmID0gUkVGLmNyZWF0ZVJlZih7CiAgICAgICAgIHN0YXRlOiB3
aWxsRmlsdGVyRXhwZWN0ZWQsCkBAIC02ODAsNCArNzc2LDQgQEAgZnVuY3Rpb24gTGVnZW5kKGNh
bGxiYWNrPW51bGwsIHBsdXJhbD1mYQogICAgIHJldHVybiBgPGRpdiBjbGFzcz0iY29udGVudCI+
JHtyZXN1bHR9PC9kaXY+PGJyPmA7CiB9CiAKLWV4cG9ydCB7TGVnZW5kLCBUaW1lbGluZSwgRXhw
ZWN0YXRpb25zfTsKK2V4cG9ydCB7TGVnZW5kLCBUaW1lbGluZUZyb21FbmRwb2ludCwgRXhwZWN0
YXRpb25zfTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxh
dGVzL3NlYXJjaC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNk
YnB5L3ZpZXcvdGVtcGxhdGVzL3NlYXJjaC5odG1sCShyZXZpc2lvbiAyNDgxNTUpCisrKyBUb29s
cy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20g
Jy9hc3NldHMvanMvCiBpbXBvcnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENvbmZpZ3VyYXRp
b25TZWxlY3RvcnMsIExpbWl0U2xpZGVyfSBmcm9tICcvYXNzZXRzL2pzL2RyYXdlci5qcyc7CiBp
bXBvcnQge0RPTSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOwogaW1wb3J0IHtTZWFy
Y2hCYXJ9IGZyb20gJy9hc3NldHMvanMvc2VhcmNoLmpzJzsKLWltcG9ydCB7TGVnZW5kLCBUaW1l
bGluZX0gZnJvbSAnL2Fzc2V0cy9qcy90aW1lbGluZS5qcyc7CitpbXBvcnQge0xlZ2VuZCwgVGlt
ZWxpbmVGcm9tRW5kcG9pbnR9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOwogCiBjb25z
dCBERUZBVUxUX0xJTUlUID0gMTAwOwogY29uc3QgU1VJVEVTID0gSlNPTi5wYXJzZSgne3sgc3Vp
dGVzfHNhZmUgfX0nKTsgICAgCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIFNlYXJjaFZpZXcgewog
ICAgICAgICAgICAgICAgIHN0YXRlLmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgICAgICAg
ICBzdWl0ZTogdGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldLAogICAgICAgICAgICAgICAgICAg
ICB0ZXN0OiB0aGlzLmN1cnJlbnRQYXJhbXMudGVzdFtpXSwKLSAgICAgICAgICAgICAgICAgICAg
dGltZWxpbmU6IG5ldyBUaW1lbGluZShgYXBpL3Jlc3VsdHMvJHt0aGlzLmN1cnJlbnRQYXJhbXMu
c3VpdGVbaV19LyR7dGhpcy5jdXJyZW50UGFyYW1zLnRlc3RbaV19YCwgdGhpcy5jdXJyZW50UGFy
YW1zLnN1aXRlW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1lbGlu
ZUZyb21FbmRwb2ludChgYXBpL3Jlc3VsdHMvJHt0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV19
LyR7dGhpcy5jdXJyZW50UGFyYW1zLnRlc3RbaV19YCwgdGhpcy5jdXJyZW50UGFyYW1zLnN1aXRl
W2ldKSwKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTI5LDcgKzEyOSw3IEBAIGNsYXNzIFNlYXJjaFZpZXcgewogICAgICAgICAgICAgICAgIGlmIChk
aWZmLmNoaWxkcmVuKQogICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsIExl
Z2VuZCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZi5zdGF0ZS5jaGls
ZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkLnRpbWVsaW5lLnJlcmVuZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGQudGltZWxpbmUudXBkYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgICAgICAgfSwgZmFsc2UpICsgZGlmZi5jaGlsZHJlbi5tYXAocmVuZGVyQ2hpbGQp
LmpvaW4oJycpKTsKICAgICAgICAgICAgICAgICBpZiAoZGlmZi5wcmVwZW5kaW5nKSB7CkBAIC0x
NjAsNyArMTYwLDggQEAgY2xhc3MgU2VhcmNoVmlldyB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkaWRGaW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLnN0YXRl
LmNoaWxkcmVuLnNwbGljZShzZWFyY2gsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5zdGF0ZS5jaGlsZHJlbltzZWFyY2hdLnRp
bWVsaW5lLnRlYXJkb3duKCk7CiAgICAgICAgICAgICAgICAgICAgIG5lZWRSZVJlbmRlciA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghZGlkRmluZCkgewpA
QCAtMTY5LDcgKzE3MCw3IEBAIGNsYXNzIFNlYXJjaFZpZXcgewogICAgICAgICAgICAgICAgICAg
ICBuZXdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlOiBwYXJh
bXMuc3VpdGVbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBwYXJhbXMudGVzdFtp
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9y
ZXN1bHRzLyR7cGFyYW1zLnN1aXRlW2ldfS8ke3BhcmFtcy50ZXN0W2ldfWApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludChgYXBpL3Jl
c3VsdHMvJHtwYXJhbXMuc3VpdGVbaV19LyR7cGFyYW1zLnRlc3RbaV19YCksCiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzOSw3
ICsyNDAsNyBAQCBET00uaW5qZWN0KAogICAgICAgICAgICAgbGV0IGNoaWxkID0gewogICAgICAg
ICAgICAgICAgIHN1aXRlOiBhcmd1bWVudHNbaV0uc3VpdGUsCiAgICAgICAgICAgICAgICAgdGVz
dDogYXJndW1lbnRzW2ldLnRlc3QsCi0gICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1l
bGluZShgYXBpL3Jlc3VsdHMvJHthcmd1bWVudHNbaV0uc3VpdGV9LyR7YXJndW1lbnRzW2ldLnRl
c3R9YCksCisgICAgICAgICAgICAgICAgdGltZWxpbmU6IG5ldyBUaW1lbGluZUZyb21FbmRwb2lu
dChgYXBpL3Jlc3VsdHMvJHthcmd1bWVudHNbaV0uc3VpdGV9LyR7YXJndW1lbnRzW2ldLnRlc3R9
YCksCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZpZXcucmVmLnNldFN0YXRlKHtwcmVw
ZW5kaW5nOiBbY2hpbGRdfSk7CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCShy
ZXZpc2lvbiAyNDgxNTUpCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3Rl
bXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgaW1wb3J0IHtkZWVwQ29tcGFyZSwgRXJyb3JEaXNwbGF5LCBxdWVyeQogaW1wb3J0IHtDb25m
aWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnOwogaW1wb3J0IHtE
cmF3ZXIsIEJyYW5jaFNlbGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzLCBMaW1pdFNsaWRl
cn0gZnJvbSAnL2Fzc2V0cy9qcy9kcmF3ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAn
L2xpYnJhcnkvanMvUmVmLmpzJzsKLWltcG9ydCB7TGVnZW5kLCBUaW1lbGluZX0gZnJvbSAnL2Fz
c2V0cy9qcy90aW1lbGluZS5qcyc7CitpbXBvcnQge0xlZ2VuZCwgVGltZWxpbmVGcm9tRW5kcG9p
bnR9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOwogCiBjb25zdCBERUZBVUxUX0xJTUlU
ID0gMTAwOwogY29uc3QgU1VJVEVTID0gSlNPTi5wYXJzZSgne3sgc3VpdGVzfHNhZmUgfX0nKTsg
ICAgCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIE1haW5WaWV3IHsKICAgICAgICAgdGhpcy5jaGls
ZHJlbiA9IHt9OwogCiAgICAgICAgIFNVSVRFUy5mb3JFYWNoKChzdWl0ZSkgPT4gewotICAgICAg
ICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxpbmUoJ2FwaS9yZXN1bHRzLycg
KyBzdWl0ZSwgc3VpdGUpOworICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcg
VGltZWxpbmVGcm9tRW5kcG9pbnQoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSwgc3VpdGUpOwogICAg
ICAgICB9KTsKICAgICB9CiAgICAgdW5wYWNrU3VpdGVzKHN1aXRlc0pzb24pIHsKQEAgLTgxLDkg
KzgxLDEwIEBAIGNsYXNzIE1haW5WaWV3IHsKICAgICAgICAgfSk7CiAKICAgICAgICAgbGV0IHNv
cnRlZFN1aXRlcyA9IFsuLi5zdWl0ZXNdLnNvcnQoKTsKKyAgICAgICAgT2JqZWN0LmtleXModGhp
cy5jaGlsZHJlbikuZm9yRWFjaChrZXkgPT4ge3RoaXMuY2hpbGRyZW5ba2V5XS50ZWFyZG93bigp
O30pOwogICAgICAgICB0aGlzLmNoaWxkcmVuID0ge307CiAgICAgICAgIHNvcnRlZFN1aXRlcy5m
b3JFYWNoKChzdWl0ZSkgPT4gewotICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBu
ZXcgVGltZWxpbmUoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSk7CisgICAgICAgICAgICB0aGlzLmNo
aWxkcmVuW3N1aXRlXSA9IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludCgnYXBpL3Jlc3VsdHMvJyAr
IHN1aXRlKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBzb3J0ZWRTdWl0ZXM7CiAgICAg
fQpAQCAtMTQzLDcgKzE0NCw3IEBAIGNsYXNzIE1haW5WaWV3IHsKICAgICAgICAgbGV0IGNoaWxk
cmVuID0gdGhpcy5jaGlsZHJlbjsKICAgICAgICAgcmV0dXJuIExlZ2VuZCgoKSA9PiB7CiAgICAg
ICAgICAgICBmb3IgKGxldCBzdWl0ZSBpbiBjaGlsZHJlbikgewotICAgICAgICAgICAgICAgIGNo
aWxkcmVuW3N1aXRlXS5yZXJlbmRlcigpOworICAgICAgICAgICAgICAgIGNoaWxkcmVuW3N1aXRl
XS51cGRhdGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwgdHJ1ZSkgKyBzdWl0ZXMubWFw
KHN1aXRlID0+IHsKICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375454</attachid>
            <date>2019-08-02 14:13:11 -0700</date>
            <delta_ts>2019-08-05 15:58:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200172-20190802141310.patch</filename>
            <type>text/plain</type>
            <size>51500</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODE4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDE5LTA4LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzOgorICAgICAgICAo
dGlja0ZvckNvbW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChtaW5pbXVtVXVpZEZvclJlc3VsdHMp
OiBHaXZlbiBhIGRpY3Rpb25hcnkgb2YgcmVzdWx0IGxpc3RzLCBkZXRlcm1pbmUgdGhlIG1pbmlt
dW0gVVVJRAorICAgICAgICB3aGljaCBlbmNvbXBhc3NlcyBhbGwgcmVzdWx0cy4gQ3J1Y2lhbGx5
LCB0aGlzIGZ1bmN0aW9uIG11c3QgZXhjbHVkZSBhbiBVVUlEcyB3aGljaCBtYXkKKyAgICAgICAg
cmVmZXIgdG8gcmVzdWx0cyBleGNsdWRlZCBiZWNhdXNlIG9mIHRoZSBsaW1pdCBhcmd1bWVudC4K
KyAgICAgICAgKHJlbmRlclRpbWVsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbW1pdHNGb3JS
ZXN1bHRzKTogR2l2ZW4gYSBkaWN0aW9uYXJ5IG9mIHJlc3VsdCBsaXN0cywgcmV0dXJuIGEgbGlz
dCBvZiBjb21taXRzIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aG9zZSByZXN1bHRzLgorICAg
ICAgICAoc2NhbGVGb3JDb21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIGdlbmVyYXRl
IGEgc2NhbGUgdG8gYmUgY29uc3VtZWQgYnkgdGhlIGNhbnZhcyBUaW1lbGluZS4KKyAgICAgICAg
KHJlcG9zaXRvcmllc0ZvckNvbW1pdHMpOiBHaXZlbiBhIGxpc3Qgb2YgY29tbWl0cywgcmV0dXJu
IGEgc29ydGVkIGxpc3Qgb2YgYXNzb2NpYXRlZCByZXBvc2l0b3J5IGlkcy4KKyAgICAgICAgKHhB
eGlzRnJvbVNjYWxlKTogQ3JlYXRlIGEgY2FudmFzLWJhc2VkIHgtYXhpcyBiYXNlZCBvbiB0aGUg
cHJvdmlkZWQgc2NhbGUgYW5kIGEgcmVwb3NpdG9yeSBpZC4KKyAgICAgICAgKGluUGxhY2VDb21i
aW5lKTogQ29tYmluZSByZXN1bHQgb2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKHN0YXRzRm9y
U2luZ2xlUmVzdWx0KTogVHVybiBhIHNpbmdsZSByZXN1bHQgaW50byBhIHN0YXQgb2JqZWN0Lgor
ICAgICAgICAoY29tYmluZVJlc3VsdHMpOiBHaXZlbiBsaXN0cyBvZiByZXN1bHRzLCBjb21iaW5l
IHRoZXNlIGxpc3RzIHdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIGxpc3RzIHVuY2hhbmdlZC4K
KyAgICAgICAgKERvdCk6IERlbGV0ZWQuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludCk6
IFJlbmFtZWQgZnJvbSBUaW1lbGluZS4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LmNv
bnN0cnVjdG9yKTogQ2FudmFzIFRpbWVsaW5lIG1hbmFnZXMgZXhwYW5zaW9uIGFuZCBjb2xsYXBz
aW5nIG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC50
ZWFyZG93bik6IERldGFjaCBjYWxsYmFja3MgZnJvbSBDb21taXRCYW5rLgorICAgICAgICAoVGlt
ZWxpbmVGcm9tRW5kcG9pbnQudXBkYXRlKTogVXBkYXRlIHdpdGggYW55IG5ldyBjb21taXQgaW5m
b3JtYXRpb24sIGZvcmNlIGEgcmUtZHJhdyBvZiB0aGUgY3VycmVudAorICAgICAgICBjYWNoZSBj
b250ZW50cy4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LnJlbG9hZCk6IFJlbW92ZSBt
YW5hZ2VtZW50IG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRw
b2ludC5yZW5kZXIpOiBVc2UgY2FudmFzIFRpbWVsaW5lIGluc3RlYWQgb2YgaHRtbCB0aW1lbGlu
ZSB0byB2aXN1YWxpemUgcmVzdWx0cy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbDogVXNlIFRpbWVsaW5lRnJvbUVuZHBvaW50IGNs
YXNzLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1
aXRlX3Jlc3VsdHMuaHRtbDogRGl0dG8uCisKIDIwMTktMDgtMDIgIEFuZHJlcyBHb256YWxleiAg
PGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhY2Nlc3NpYmlsaXR5IG9iamVj
dCBtZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBpbnNpZGUgYSB0YWJs
ZSBjZWxsLiBOZWVkZWQgZm9yIGlPUyBhY2Nlc3NpYmlsaXR5IGNsaWVudC4KSW5kZXg6IFRvb2xz
L3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3Rp
bWVsaW5lLmpzCShyZXZpc2lvbiAyNDgxODApCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRz
ZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsOCBAQAogaW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7
CiBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5q
cyc7CiBpbXBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHBhcmFtc1RvUXVlcnksIHF1
ZXJ5VG9QYXJhbXN9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKLWltcG9ydCB7RE9NLCBF
dmVudFN0cmVhbSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtET00s
IEV2ZW50U3RyZWFtLCBSRUYsIEZQfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0
IHtUaW1lbGluZX0gZnJvbSAnL2xpYnJhcnkvanMvY29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVu
dHMuanMnOwogCiAKIGNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CkBAIC03MSwxNjUgKzcyLDI4
OCBAQCBjbGFzcyBFeHBlY3RhdGlvbnMKIH0KIGxldCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxz
ZTsKIAotZnVuY3Rpb24gdGlja0ZvckNvbW1pdChjb21taXQsIHNjYWxlKSB7Ci0gICAgbGV0IHBh
cmFtcyA9IHsKLSAgICAgICAgYnJhbmNoOiBjb21taXQuYnJhbmNoID8gW2NvbW1pdC5icmFuY2hd
IDogcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoLAotICAg
ICAgICB1dWlkOiBbY29tbWl0LnV1aWQoKV0sCi0gICAgfQotICAgIGlmICghcGFyYW1zLmJyYW5j
aCkKLSAgICAgICAgZGVsZXRlIHBhcmFtcy5icmFuY2g7Ci0gICAgY29uc3QgcXVlcnkgPSBwYXJh
bXNUb1F1ZXJ5KHBhcmFtcyk7Ci0KLSAgICBpZiAoc2NhbGUgPD0gMCkKLSAgICAgICAgcmV0dXJu
ICcnOwotICAgIGlmIChzY2FsZSA9PT0gMSkKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJz
Y2FsZSI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+Ci0gICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQiPgotICAgICAgICAgICAgICAgICAgICAgICAg
PGEgaHJlZj0iL2NvbW1pdD8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7U3RyaW5nKGNvbW1p
dC5pZCkuc3Vic3RyaW5nKDAsMTApfTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0g
ICAgICAgICAgICAgICAgPC9kaXY+YDsKLSAgICBsZXQgcmVzdWx0ID0gJyc7Ci0gICAgd2hpbGUg
KHNjYWxlID4gMCkgewotICAgICAgICBsZXQgY291bnRUb1VzZSA9IHNjYWxlOwotICAgICAgICBp
ZiAoY291bnRUb1VzZSA9PT0gMTEgfHwgY291bnRUb1VzZSA9PSAxMikKLSAgICAgICAgICAgIGNv
dW50VG9Vc2UgPSA2OwotICAgICAgICBlbHNlIGlmIChjb3VudFRvVXNlID4gMTApCi0gICAgICAg
ICAgICBjb3VudFRvVXNlID0gMTA7Ci0gICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2Nh
bGUgZ3JvdXAtJHtjb3VudFRvVXNlfSI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9y
ZGVyLWxpbmUtbGVmdCI+PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+
PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dCI+Ci0gICAgICAgICAgICAg
ICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtxdWVyeX0iIHRhcmdldD0iX2JsYW5rIj4ke1N0cmlu
Zyhjb21taXQuaWQpLnN1YnN0cmluZygwLDEwKX08L2E+Ci0gICAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLWxpbmUtcmlnaHQiPjwvZGl2Pgot
ICAgICAgICAgICAgPC9kaXY+YDsKLSAgICAgICAgc2NhbGUgLT0gY291bnRUb1VzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KK2Z1bmN0aW9uIG1pbmltdW1VdWlkRm9yUmVzdWx0cyhy
ZXN1bHRzLCBsaW1pdCkgeworICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAv
IDEwKTsKKyAgICBsZXQgbWluRGlzcGxheWVkVXVpZCA9IG5vdzsKKyAgICBsZXQgbWF4TGltaXRl
ZFV1aWQgPSAwOworCisgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaCgoa2V5KSA9PiB7
CisgICAgICAgIHJlc3VsdHNba2V5XS5mb3JFYWNoKHBhaXIgPT4geworICAgICAgICAgICAgaWYg
KCFwYWlyLnJlc3VsdHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGlmIChsaW1pdCAhPT0gMSAmJiBsaW1pdCA9PT0gcGFpci5yZXN1bHRzLmxlbmd0aCkKKyAg
ICAgICAgICAgICAgICBtYXhMaW1pdGVkVXVpZCA9IE1hdGgubWF4KHBhaXIucmVzdWx0c1swXS51
dWlkLCBtYXhMaW1pdGVkVXVpZCk7CisgICAgICAgICAgICBlbHNlIGlmIChsaW1pdCA9PT0gMSkK
KyAgICAgICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRz
W3BhaXIucmVzdWx0cy5sZW5ndGggLSAxXS51dWlkLCBtaW5EaXNwbGF5ZWRVdWlkKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4o
cGFpci5yZXN1bHRzWzBdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQpOworICAgICAgICB9KTsKKyAg
ICB9KTsKIAotZnVuY3Rpb24gcmVuZGVyVGltZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzID0g
W10sIHRvcCA9IGZhbHNlKSB7Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gYnJlYWtzIHdp
dGggbW9yZSB0aGFuIDMgcmVwb3NpdG9yaWVzIGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzUx
MDQyOTgxPgotICAgIGlmIChyZXBvc2l0b3JpZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIGlm
ICh0b3ApCi0gICAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgIHJlcG9zaXRvcmllcyA9IFtu
dWxsXTsKLSAgICB9Ci0gICAgY29uc3Qgc3RhcnQgPSB0b3AgPyBNYXRoLmNlaWwocmVwb3NpdG9y
aWVzLmxlbmd0aCAvIDIpIDogMDsKLSAgICBjb25zdCBlbmQgPSB0b3AgPyByZXBvc2l0b3JpZXMu
bGVuZ3RoIDogTWF0aC5jZWlsKHJlcG9zaXRvcmllcy5sZW5ndGggLyAyKTsKLSAgICBjb25zdCBu
dW1iZXJPZkVsZW1lbnRzID0gY29tbWl0cy5sZW5ndGggLSBNYXRoLm1heChyZXBvc2l0b3JpZXMu
bGVuZ3RoIC0gMSwgMCkKLSAgICByZXR1cm4gcmVwb3NpdG9yaWVzLnNsaWNlKHN0YXJ0LCBlbmQp
Lm1hcChyZXBvc2l0b3J5ID0+IHsKLSAgICAgICAgbGV0IGNvbW1pdHNGcm9tT3RoZXJSZXBvcyA9
IDA7Ci0gICAgICAgIGxldCByZW5kZXJlZEVsZW1lbnRzID0gMDsKLSAgICAgICAgcmV0dXJuIGA8
ZGl2IGNsYXNzPSJ4LWF4aXMgJHt0b3AgPyAndG9wJyA6ICcnfSI+Ci0gICAgICAgICAgICAgICAg
JHtjb21taXRzLm1hcChjb21taXQgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0
LnJlcG9zaXRvcnlfaWQgJiYgY29tbWl0LnJlcG9zaXRvcnlfaWQgIT09IHJlcG9zaXRvcnkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICsrY29tbWl0c0Zyb21PdGhlclJlcG9zOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gIE1hdGgubWluKGNvbW1pdHNGcm9tT3RoZXJS
ZXBvcyArIDEsIG51bWJlck9mRWxlbWVudHMgLSByZW5kZXJlZEVsZW1lbnRzKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29tbWl0c0Zyb21PdGhlclJlcG9zID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyZWRFbGVtZW50cyArPSBzY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRpY2tGb3JDb21taXQoY29tbWl0LCBzY2FsZSk7Ci0gICAgICAgICAgICAgICAgfSkuam9pbign
Jyl9Ci0gICAgICAgICAgICA8L2Rpdj5gOwotICAgIH0pLmpvaW4oJycpOworICAgIGlmIChtaW5E
aXNwbGF5ZWRVdWlkID09PSBub3cpCisgICAgICAgIHJldHVybiBtYXhMaW1pdGVkVXVpZDsKKyAg
ICByZXR1cm4gTWF0aC5tYXgobWluRGlzcGxheWVkVXVpZCwgbWF4TGltaXRlZFV1aWQpOwogfQog
Ci1jbGFzcyBEb3QgewotICAgIHN0YXRpYyBtZXJnZShkb3RzID0ge30pIHsKLSAgICAgICAgbGV0
IHJlc3VsdCA9IFtdOwotICAgICAgICBsZXQgaW5kZXggPSAwOwotICAgICAgICBsZXQgaGFzRGF0
YSA9IHRydWU7Ci0KLSAgICAgICAgd2hpbGUgKGhhc0RhdGEpIHsKLSAgICAgICAgICAgIGxldCBk
b3QgPSBuZXcgRG90KCk7Ci0gICAgICAgICAgICBoYXNEYXRhID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIE9iamVjdC5rZXlzKGRvdHMpLmZvckVhY2goa2V5ID0+IHsKLSAgICAgICAgICAgICAgICBp
ZiAoZG90c1trZXldLmxlbmd0aCA8PSBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIGhhc0RhdGEgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICgh
ZG90c1trZXldW2luZGV4XS5jb3VudCkKK2Z1bmN0aW9uIGNvbW1pdHNGb3JSZXN1bHRzKHJlc3Vs
dHMsIGxpbWl0LCBhbGxDb21taXRzID0gdHJ1ZSkgeworICAgIGNvbnN0IG1pbkRpc3BsYXllZFV1
aWQgPSBtaW5pbXVtVXVpZEZvclJlc3VsdHMobGltaXQpOworICAgIGxldCBjb21taXRzID0gW107
CisgICAgbGV0IHJlcG9zaXRvcmllcyA9IG5ldyBTZXQoKTsKKyAgICBsZXQgY3VycmVudENvbW1p
dEluZGV4ID0gQ29tbWl0QmFuay5jb21taXRzLmxlbmd0aCAtIDE7CisgICAgT2JqZWN0LmtleXMo
cmVzdWx0cykuZm9yRWFjaCgoa2V5KSA9PiB7CisgICAgICAgIHJlc3VsdHNba2V5XS5mb3JFYWNo
KHBhaXIgPT4geworICAgICAgICAgICAgcGFpci5yZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHsK
KyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGRvdC5jb3VudCkK
LSAgICAgICAgICAgICAgICAgICAgZG90LmNvbWJpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBsZXQgY2FuZGlkYXRlQ29tbWl0cyA9IFtdOwogCi0gICAgICAgICAgICAgICAgZG90LmNvdW50
ICs9IGRvdHNba2V5XVtpbmRleF0uY291bnQ7Ci0gICAgICAgICAgICAgICAgZG90LmZhaWxlZCAr
PSBkb3RzW2tleV1baW5kZXhdLmZhaWxlZDsKLSAgICAgICAgICAgICAgICBkb3QudGltZW91dCAr
PSBkb3RzW2tleV1baW5kZXhdLnRpbWVvdXQ7Ci0gICAgICAgICAgICAgICAgZG90LmNyYXNoICs9
IGRvdHNba2V5XVtpbmRleF0uY3Jhc2g7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdC5jb21iaW5l
ZCkKLSAgICAgICAgICAgICAgICAgICAgZG90LmxpbmsgPSBudWxsOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZG90LmxpbmsgPSBkb3RzW2tleV1baW5kZXhdLmxp
bms7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxDb21taXRzKQorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1
aWQoKSA8IHJlc3VsdC51dWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhbGxDb21taXRzIHx8IENvbW1pdEJhbmsuY29tbWl0c1tjdXJy
ZW50Q29tbWl0SW5kZXhdLnV1aWQoKSA9PSByZXN1bHQudXVpZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMucHVzaChDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENv
bW1pdEluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5s
ZW5ndGggPT09IDAgfHwgY2FuZGlkYXRlQ29tbWl0c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAt
IDFdLnV1aWQoKSAhPT0gcmVzdWx0LnV1aWQpCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0
ZUNvbW1pdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAnPycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAndXVpZCc6ICgpID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7
CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQoY29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPT09IGNvbW1pdHNbaW5kZXhdLnV1
aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA+IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuc3BsaWNlKGluZGV4LCAwLCBjb21t
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7Cisg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChoYXNE
YXRhKQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRvdCk7Ci0gICAgICAgICAgICArK2lu
ZGV4OworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBpZiAoY3VycmVudENvbW1pdEluZGV4ID49
IDAgJiYgY29tbWl0cy5sZW5ndGgpIHsKKyAgICAgICAgbGV0IHRyYWlsaW5nUmVwb3NpdG9yaWVz
ID0gbmV3IFNldChyZXBvc2l0b3JpZXMpOworICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5k
ZWxldGUoY29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOworICAgICAg
ICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYgdHJhaWxpbmdSZXBvc2l0b3JpZXMu
c2l6ZSkgeworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gQ29tbWl0QmFuay5jb21taXRzW2N1
cnJlbnRDb21taXRJbmRleF07CisgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMu
aGFzKGNvbW1pdC5yZXBvc2l0b3J5X2lkKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdHMucHVz
aChjb21taXQpOworICAgICAgICAgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0ZShj
b21taXQucmVwb3NpdG9yeV9pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAtLWN1cnJl
bnRDb21taXRJbmRleDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
LSAgICBjb25zdHJ1Y3Rvcihjb3VudCA9IDAsIGZhaWxlZCA9IDAsIHRpbWVvdXQgPSAwLCBjcmFz
aCA9IDAsIGNvbWJpbmVkID0gZmFsc2UsIGxpbmsgPSBudWxsKSB7Ci0gICAgICAgIHRoaXMuY291
bnQgPSBjb3VudDsKLSAgICAgICAgdGhpcy5mYWlsZWQgPSBmYWlsZWQ7Ci0gICAgICAgIHRoaXMu
dGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgICAgIHRoaXMuY3Jhc2ggPSBjcmFzaDsKLSAgICAgICAg
dGhpcy5jb21iaW5lZCA9IGNvbWJpbmVkOwotICAgICAgICB0aGlzLmxpbmsgPSBsaW5rOworCisg
ICAgcmVwb3NpdG9yaWVzID0gWy4uLnJlcG9zaXRvcmllc107CisgICAgcmVwb3NpdG9yaWVzLnNv
cnQoKTsKKyAgICByZXR1cm4gY29tbWl0czsKK30KKworZnVuY3Rpb24gc2NhbGVGb3JDb21taXRz
KGNvbW1pdHMpIHsKKyAgICBsZXQgc2NhbGUgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gY29tbWl0
cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCByZXBvc2l0b3J5X2lk
ID0gY29tbWl0c1tpXS5yZXBvc2l0b3J5X2lkID8gY29tbWl0c1tpXS5yZXBvc2l0b3J5X2lkIDog
Jz8nOworICAgICAgICBzY2FsZS51bnNoaWZ0KHt9KTsKKyAgICAgICAgc2NhbGVbMF1bcmVwb3Np
dG9yeV9pZF0gPSBjb21taXRzW2ldOworICAgICAgICBpZiAoc2NhbGUubGVuZ3RoIDwgMikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBPYmplY3Qua2V5cyhzY2FsZVsxXSkuZm9yRWFj
aCgoa2V5KSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5ID09PSByZXBvc2l0b3J5X2lkIHx8IGtl
eSA9PT0gJz8nIHx8IGtleSA9PT0gJ3V1aWQnKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHNjYWxlWzBdW2tleV0gPSBzY2FsZVsxXVtrZXldOworICAgICAgICB9KTsKKyAg
ICAgICAgc2NhbGVbMF0udXVpZCA9IE1hdGgubWF4KC4uLk9iamVjdC5rZXlzKHNjYWxlWzBdKS5t
YXAoKGtleSkgPT4geworICAgICAgICAgICAgcmV0dXJuIHNjYWxlWzBdW2tleV0udXVpZCgpOwor
ICAgICAgICB9KSk7CiAgICAgfQotICAgIHRvU3RyaW5nKCkgewotICAgICAgICBpZiAoIXRoaXMu
Y291bnQpCi0gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImRvdCBlbXB0eSI+PC9kaXY+
YDsKKyAgICByZXR1cm4gc2NhbGU7Cit9CiAKLSAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7Citm
dW5jdGlvbiByZXBvc2l0b3JpZXNGb3JDb21taXRzKGNvbW1pdHMpIHsKKyAgICBsZXQgcmVwb3Np
dG9yaWVzID0gbmV3IFNldCgpOworICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0KSA9PiB7Cisg
ICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAgIHJlcG9zaXRvcmll
cy5hZGQoY29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAgIH0pOworICAgIHJlcG9zaXRvcmllcyA9
IFsuLi5yZXBvc2l0b3JpZXNdOworICAgIGlmICghcmVwb3NpdG9yaWVzLmxlbmd0aCkKKyAgICAg
ICAgcmVwb3NpdG9yaWVzID0gWyc/J107CisgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsKKyAgICBy
ZXR1cm4gcmVwb3NpdG9yaWVzOworfQogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlcihjc3NDbGFz
cywgaW5zaWRlPScnKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi5saW5rKQotICAgICAgICAgICAg
ICAgIHJldHVybiBgPGEgaHJlZj0iJHtzZWxmLmxpbmt9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9
IiR7Y3NzQ2xhc3N9Ij4ke2luc2lkZX08L2E+YDsKLSAgICAgICAgICAgIHJldHVybiBgPGRpdiBj
bGFzcz0iJHtjc3NDbGFzc30iPiR7aW5zaWRlfTwvZGl2PmA7CitmdW5jdGlvbiB4QXhpc0Zyb21T
Y2FsZShzY2FsZSwgcmVwb3NpdG9yeSwgdXBkYXRlc0FycmF5LCBpc1RvcD1mYWxzZSkKK3sKKyAg
ICBmdW5jdGlvbiBzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIHNj
YWxlLm1hcChub2RlID0+IHsKKyAgICAgICAgICAgIGxldCBjb21taXQgPSBub2RlW3JlcG9zaXRv
cnldOworICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgY29tbWl0ID0g
bm9kZVsnPyddOworICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHtpZDogJycsIHV1aWQ6ICgpID0+IG51bGx9OworICAgICAgICAgICAgcmV0dXJuIGNvbW1p
dDsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIFRpbWVsaW5lLkNhbnZhc1hBeGlz
Q29tcG9uZW50KHNjYWxlRm9yUmVwb3NpdG9yeShzY2FsZSksIHsKKyAgICAgICAgaXNUb3A6IGlz
VG9wLAorICAgICAgICBoZWlnaHQ6IDEzMCwKKyAgICAgICAgb25TY2FsZUNsaWNrOiAobm9kZSkg
PT4geworICAgICAgICAgICAgaWYgKCFub2RlLmxhYmVsLmlkKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7CisgICAgICAgICAgICAgICAgYnJhbmNo
OiBub2RlLmxhYmVsLmJyYW5jaCA/IFtub2RlLmxhYmVsLmJyYW5jaF0gOiBxdWVyeVRvUGFyYW1z
KGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFuY2gsCisgICAgICAgICAgICAgICAgdXVp
ZDogW25vZGUubGFiZWwudXVpZCgpXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
cGFyYW1zLmJyYW5jaCkKKyAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLmJyYW5jaDsKKyAg
ICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zVG9RdWVyeShwYXJhbXMpOworICAgICAgICAg
ICAgd2luZG93Lm9wZW4oYC9jb21taXQ/JHtxdWVyeX1gLCAnX2JsYW5rJyk7CisgICAgICAgIH0s
CisgICAgICAgIC8vIFBlciB0aGUgYmlydGhkYXkgcGFyYWRveCwgMTAlIGNoYW5nZSBvZiBjb2xs
aXNpb24gd2l0aCA3LjcgbWlsbGlvbiBjb21taXRzIHdpdGggMTIgY2hhcmFjdGVyIGNvbW1pdHMK
KyAgICAgICAgZ2V0TGFiZWxGdW5jOiAoY29tbWl0KSA9PiB7cmV0dXJuIGNvbW1pdCA/IGNvbW1p
dC5pZC5zdWJzdHJpbmcoMCwxMikgOiAnPyc7fSwKKyAgICAgICAgZ2V0U2NhbGVGdW5jOiAoY29t
bWl0KSA9PiBjb21taXQudXVpZCgpLAorICAgICAgICBleHBvcnRlcjogKHVwZGF0ZUZ1bmN0aW9u
KSA9PiB7CisgICAgICAgICAgICB1cGRhdGVzQXJyYXkucHVzaCgoc2NhbGUpID0+IHt1cGRhdGVG
dW5jdGlvbihzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpKTt9KTsKKyAgICAgICAgfSwKKyAgICB9
KTsKK30KKworY29uc3QgdGVzdHNSZWdleCA9IC90ZXN0c18oW2Etel0pKy87Citjb25zdCBmYWls
dXJlVHlwZU9yZGVyID0gWydmYWlsZWQnLCAndGltZWRvdXQnLCAnY3Jhc2hlZCddOworY29uc3Qg
ZmFpbHVyZVR5cGVNYXBwaW5nID0geworICAgIGZhaWxlZDogJ0VSUk9SJywKKyAgICB0aW1lZG91
dDogJ1RJTUVPVVQnLAorICAgIGNyYXNoZWQ6ICdDUkFTSCcsCit9CisKK2Z1bmN0aW9uIGluUGxh
Y2VDb21iaW5lKG91dCwgb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gb3V0
OworCisgICAgaWYgKCFvdXQpIHsKKyAgICAgICAgb3V0ID0ge307CisgICAgICAgIE9iamVjdC5r
ZXlzKG9iaikuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgaWYgKG9ialtrZXldIGluc3Rh
bmNlb2YgT2JqZWN0KQorICAgICAgICAgICAgICAgIG91dFtrZXldID0gaW5QbGFjZUNvbWJpbmUo
b3V0W2tleV0sIG9ialtrZXldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBv
dXRba2V5XSA9IG9ialtrZXldOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBP
YmplY3Qua2V5cyhvdXQpLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChvdXRba2V5
XSBpbnN0YW5jZW9mIE9iamVjdCkgeworICAgICAgICAgICAgICAgIG91dFtrZXldID0gaW5QbGFj
ZUNvbWJpbmUob3V0W2tleV0sIG9ialtrZXldKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNldCBvZiBzcGVjaWFsIGNhc2Uga2V5cyB3
aGljaCBuZWVkIHRvIGJlIGFkZGVkIHRvZ2V0aGVyCisgICAgICAgICAgICBpZiAoa2V5Lm1hdGNo
KHRlc3RzUmVnZXgpKSB7CisgICAgICAgICAgICAgICAgb3V0W2tleV0gKz0gb2JqW2tleV07Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJ
ZiB0aGUga2V5IGV4aXN0cywgYnV0IGRvZXNuJ3QgbWF0Y2gsIGRlbGV0ZSBpdAorICAgICAgICAg
ICAgaWYgKCEoa2V5IGluIG9iaikgfHwgb3V0W2tleV0gIT0gb2JqW2tleV0pIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgb3V0W2tleV07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtl
eSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHRlc3RzUmVnZXgpICYmICEoa2V5IGlu
IG91dCkpCisgICAgICAgICAgICAgICAgb3V0W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgfSk7
CisgICAgfQorICAgIHJldHVybiBvdXQ7Cit9CisKK2Z1bmN0aW9uIHN0YXRzRm9yU2luZ2xlUmVz
dWx0KHJlc3VsdCkgeworICAgIGNvbnN0IGFjdHVhbElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1Rv
U3RhdGVJZChyZXN1bHQuYWN0dWFsKTsKKyAgICBjb25zdCB1bmV4cGVjdGVkSWQgPSBFeHBlY3Rh
dGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy51bmV4cGVjdGVkUmVzdWx0cyhyZXN1
bHQuYWN0dWFsLCByZXN1bHQuZXhwZWN0ZWQpKTsKKyAgICBsZXQgc3RhdHMgPSB7CisgICAgICAg
IHRlc3RzX3J1bjogMSwKKyAgICAgICAgdGVzdHNfc2tpcHBlZDogMCwKKyAgICB9CisgICAgZmFp
bHVyZVR5cGVPcmRlci5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICBjb25zdCBpZEZvclR5cGUg
PSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGZhaWx1cmVUeXBlTWFwcGluZ1t0eXBlXSk7
CisgICAgICAgIHN0YXRzW2B0ZXN0c18ke3R5cGV9YF0gPSBhY3R1YWxJZCA+IGlkRm9yVHlwZSAg
PyAwIDogMTsKKyAgICAgICAgc3RhdHNbYHRlc3RzX3VuZXhwZWN0ZWRfJHt0eXBlfWBdID0gdW5l
eHBlY3RlZElkID4gaWRGb3JUeXBlICA/IDAgOiAxOworICAgIH0pOworICAgIHJldHVybiBzdGF0
czsKK30KKworZnVuY3Rpb24gY29tYmluZVJlc3VsdHMoKSB7CisgICAgbGV0IGNvdW50cyA9IG5l
dyBBcnJheShhcmd1bWVudHMubGVuZ3RoKS5maWxsKDApOworICAgIGxldCBkYXRhID0gW107CisK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAvLyBGaW5kIGNhbmRpZGF0ZSB1dWlkCisgICAg
ICAgIGxldCB1dWlkID0gMDsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudHMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBjYW5kaWRhdGVVdWlkID0gbnVsbDsKKyAgICAg
ICAgICAgIHdoaWxlIChhcmd1bWVudHNbaV0gJiYgYXJndW1lbnRzW2ldLmxlbmd0aCA+IGNvdW50
c1tpXSkgeworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVV1aWQgPSBhcmd1bWVudHNbaV1bY291
bnRzW2ldXS51dWlkOworICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVVdWlkKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICArK2NvdW50c1tpXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVVdWlkKQorICAgICAgICAgICAgICAg
IHV1aWQgPSBNYXRoLm1heCh1dWlkLCBjYW5kaWRhdGVVdWlkKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghdGhpcy5mYWlsZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKCdkb3Qgc3Vj
Y2VzcycpOworICAgICAgICBpZiAoIXV1aWQpCisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKwor
ICAgICAgICAvLyBDb21iaW5lIHJlbGV2YW50IHJlc3VsdHMKKyAgICAgICAgbGV0IGRhdGFOb2Rl
ID0gbnVsbDsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChjb3VudHNbaV0gPj0gYXJndW1lbnRzW2ldLmxlbmd0aCB8fCAh
YXJndW1lbnRzW2ldW2NvdW50c1tpXV0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzW2ldW2NvdW50c1tpXV0udXVpZCAhPT0gdXVpZCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGRhdGFOb2RlICYmICFkYXRh
Tm9kZS5zdGF0cykKKyAgICAgICAgICAgICAgICBkYXRhTm9kZS5zdGF0cyA9IHN0YXRzRm9yU2lu
Z2xlUmVzdWx0KGRhdGFOb2RlKTsKKworICAgICAgICAgICAgZGF0YU5vZGUgPSBpblBsYWNlQ29t
YmluZShkYXRhTm9kZSwgYXJndW1lbnRzW2ldW2NvdW50c1tpXV0pOworCisgICAgICAgICAgICBp
ZiAoZGF0YU5vZGUuc3RhdHMgJiYgIWFyZ3VtZW50c1tpXVtjb3VudHNbaV1dLnN0YXRzKQorICAg
ICAgICAgICAgICAgIGRhdGFOb2RlLnN0YXRzID0gaW5QbGFjZUNvbWJpbmUoZGF0YU5vZGUuc3Rh
dHMsIHN0YXRzRm9yU2luZ2xlUmVzdWx0KGFyZ3VtZW50c1tpXVtjb3VudHNbaV1dKSk7CiAKLSAg
ICAgICAgbGV0IGtleSA9ICdmYWlsZWQnOwotICAgICAgICBpZiAodGhpcy50aW1lb3V0KQotICAg
ICAgICAgICAga2V5ID0gJ3RpbWVvdXQnOwotICAgICAgICBpZiAodGhpcy5jcmFzaCkKLSAgICAg
ICAgICAgIGtleSA9ICdjcmFzaCc7Ci0KLSAgICAgICAgaWYgKCF0aGlzLmNvbWJpbmVkKQotICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlcihgZG90ICR7a2V5fWAsIGA8ZGl2IGNsYXNzPSJ0YWciIHN0
eWxlPSJjb2xvcjp2YXIoLS1ib2xkSW52ZXJzZUNvbG9yKSI+JHt0aGlzLmZhaWxlZH08L2Rpdj5g
KTsKLQotICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtrZXl9YCwgYDxkaXYgY2xhc3M9InRh
ZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29sb3IpIj4KLSAgICAgICAgICAgICAg
ICAke2Z1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudCA9IE1hdGgu
Y2VpbChzZWxmLmZhaWxlZCAvIHNlbGYuY291bnQgKiAxMDAgLSAuNSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChwZXJjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
ZXJjZW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwxJzsKLSAgICAgICAgICAgICAg
ICB9KCl9ICUKLSAgICAgICAgICAgIDwvZGl2PmApOworCisgICAgICAgICAgICArK2NvdW50c1tp
XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGF0YU5vZGUpCisgICAgICAgICAgICBkYXRhLnB1
c2goZGF0YU5vZGUpOwogICAgIH0KKworICAgIHJldHVybiBkYXRhOwogfQogCi1jbGFzcyBUaW1l
bGluZSB7CitjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7CiAgICAgY29uc3RydWN0b3IoZW5k
cG9pbnQsIHN1aXRlID0gbnVsbCkgewogICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7
CiAgICAgICAgIHRoaXMuZGlzcGxheUFsbENvbW1pdHMgPSB0cnVlOwogCiAgICAgICAgIHRoaXMu
Y29uZmlndXJhdGlvbnMgPSBDb25maWd1cmF0aW9uLmZyb21RdWVyeSgpOwogICAgICAgICB0aGlz
LnJlc3VsdHMgPSB7fTsKLSAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSB7fTsKLSAgICAgICAgdGhp
cy5leHBhbmRlZFNES3MgPSB7fTsKICAgICAgICAgdGhpcy5zdWl0ZSA9IHN1aXRlOyAgLy8gU3Vp
dGUgaXMgb2Z0ZW4gaW1wbGllZCBieSB0aGUgZW5kcG9pbnQsIGJ1dCB0cnlpbmcgdG8gZGV0ZXJt
aW5lIHN1aXRlIGZyb20gZW5kcG9pbnQgaXMgbm90IHRyaXZpYWwuCiAKKyAgICAgICAgdGhpcy51
cGRhdGVzID0gW107CisgICAgICAgIHRoaXMueGF4aXNVcGRhdGVzID0gW107CisgICAgICAgIHRo
aXMudGltZWxpbmVVcGRhdGUgPSBudWxsOworICAgICAgICB0aGlzLnJlcG9zaXRvcmllcyA9IFtd
OworCiAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOwotICAgICAgICB0aGlzLmNvbmZpZ3VyYXRp
b25zLmZvckVhY2goY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICB0aGlzLnJlc3VsdHNb
Y29uZmlndXJhdGlvbi50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAgdGhpcy5jb2xsYXBzZWRb
Y29uZmlndXJhdGlvbi50b0tleSgpXSA9IHRydWU7Ci0gICAgICAgIH0pOwogCiAgICAgICAgIHRo
aXMubGF0ZXN0RGlzcGF0Y2ggPSBEYXRlLm5vdygpOwogICAgICAgICB0aGlzLnJlZiA9IFJFRi5j
cmVhdGVSZWYoewpAQCAtMjQ0LDE1ICszNjgsNDYgQEAgY2xhc3MgVGltZWxpbmUgewogICAgICAg
ICAgICAgfQogICAgICAgICB9KTsKIAotICAgICAgICBDb21taXRCYW5rLmNhbGxiYWNrcy5wdXNo
KCgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1l
bnQuVVJMLnNwbGl0KCc/JylbMV0pOwotICAgICAgICAgICAgc2VsZi5yZWYuc2V0U3RhdGUocGFy
YW1zLmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3BhcmFtcy5saW1pdC5sZW5ndGggLSAx
XSkgOiBERUZBVUxUX0xJTUlUKTsKLSAgICAgICAgfSk7CisgICAgICAgIHRoaXMuY29tbWl0X2Nh
bGxiYWNrID0gKCkgPT4geworICAgICAgICAgICAgc2VsZi51cGRhdGUoKTsKKyAgICAgICAgfTsK
KyAgICAgICAgQ29tbWl0QmFuay5jYWxsYmFja3MucHVzaCh0aGlzLmNvbW1pdF9jYWxsYmFjayk7
CiAKICAgICAgICAgdGhpcy5yZWxvYWQoKTsKICAgICB9CisgICAgdGVhcmRvd24oKSB7CisgICAg
ICAgIENvbW1pdEJhbmsuY2FsbGJhY2tzID0gQ29tbWl0QmFuay5jYWxsYmFja3MuZmlsdGVyKCh2
YWx1ZSwgaW5kZXgsIGFycikgPT4geworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWl0X2Nh
bGxiYWNrID09PSB2YWx1ZTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIHVwZGF0ZSgpIHsKKyAg
ICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8n
KVsxXSk7CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBjb21taXRzRm9yUmVzdWx0cyh0aGlzLnJl
c3VsdHMsIHBhcmFtcy5saW1pdCA/IHBhcnNlSW50KHBhcmFtcy5saW1pdFtwYXJhbXMubGltaXQu
bGVuZ3RoIC0gMV0pIDogREVGQVVMVF9MSU1JVCwgdGhpcy5hbGxDb21taXRzKTsKKyAgICAgICAg
Y29uc3Qgc2NhbGUgPSBzY2FsZUZvckNvbW1pdHMoY29tbWl0cyk7CisKKyAgICAgICAgY29uc3Qg
bmV3UmVwb3NpdG9yaWVzID0gcmVwb3NpdG9yaWVzRm9yQ29tbWl0cyhjb21taXRzKTsKKyAgICAg
ICAgbGV0IGhhdmVOZXdSZXBvcyA9IHRoaXMucmVwb3NpdG9yaWVzLmxlbmd0aCAhPSBuZXdSZXBv
c2l0b3JpZXMubGVuZ3RoOworICAgICAgICBmb3IgKGxldCBpID0gMDsgIWhhdmVOZXdSZXBvcyAm
JiBpIDwgdGhpcy5yZXBvc2l0b3JpZXMubGVuZ3RoICYmIGkgPCBuZXdSZXBvc2l0b3JpZXMubGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBoYXZlTmV3UmVwb3MgPSB0aGlzLnJlcG9zaXRvcmllc1tp
XSAhPSBuZXdSZXBvc2l0b3JpZXNbaV07CisgICAgICAgIGlmIChoYXZlTmV3UmVwb3MgJiYgdGhp
cy50aW1lbGluZVVwZGF0ZSkgeworICAgICAgICAgICAgdGhpcy54YXhpc1VwZGF0ZXMgPSBbXTsK
KyAgICAgICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAgICAgICAgbGV0IGNvbXBvbmVudHMg
PSBbXTsKKworICAgICAgICAgICAgbmV3UmVwb3NpdG9yaWVzLmZvckVhY2gocmVwb3NpdG9yeSA9
PiB7CisgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKHhBeGlzRnJvbVNjYWxlKHNjYWxl
LCByZXBvc2l0b3J5LCB0aGlzLnhheGlzVXBkYXRlcywgdG9wKSk7CisgICAgICAgICAgICAgICAg
dG9wID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy50aW1lbGlu
ZVVwZGF0ZShjb21wb25lbnRzKTsKKyAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzID0gbmV3
UmVwb3NpdG9yaWVzOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy51cGRhdGVzLmZvckVhY2go
ZnVuYyA9PiB7ZnVuYyhzY2FsZSk7fSkKKyAgICAgICAgdGhpcy54YXhpc1VwZGF0ZXMuZm9yRWFj
aChmdW5jID0+IHtmdW5jKHNjYWxlKTt9KTsKKyAgICB9CiAgICAgcmVyZW5kZXIoKSB7Ci0gICAg
ICAgIGxldCBwYXJhbXMgPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFd
KTsKKyAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3Bs
aXQoJz8nKVsxXSk7CiAgICAgICAgIHRoaXMucmVmLnNldFN0YXRlKHBhcmFtcy5saW1pdCA/IHBh
cnNlSW50KHBhcmFtcy5saW1pdFtwYXJhbXMubGltaXQubGVuZ3RoIC0gMV0pIDogREVGQVVMVF9M
SU1JVCk7CiAgICAgfQogICAgIHJlbG9hZCgpIHsKQEAgLTI3MywxMSArNDI4LDggQEAgY2xhc3Mg
VGltZWxpbmUgewogICAgICAgICBpZiAoIWRlZXBDb21wYXJlKG5ld0NvbmZpZ3MsIHRoaXMuY29u
ZmlndXJhdGlvbnMpKSB7CiAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gbmV3Q29u
ZmlnczsKICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHt9OwotICAgICAgICAgICAgdGhpcy5j
b2xsYXBzZWQgPSB7fTsKLSAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRTREtzID0ge307CiAgICAg
ICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmlndXJhdGlvbiA9PiB7CiAg
ICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSBbXTsK
LSAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID0g
dHJ1ZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKQEAgLTM0MSwyNjggKzQ5MywyMTIg
QEAgY2xhc3MgVGltZWxpbmUgewogCiAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iY29udGVu
dCIgcmVmPSIke3RoaXMucmVmfSI+PC9kaXY+YDsKICAgICB9CisKICAgICByZW5kZXIobGltaXQp
IHsKLSAgICAgICAgbGV0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwKTsKLSAgICAg
ICAgbGV0IG1pbkRpc3BsYXllZFV1aWQgPSBub3c7Ci0gICAgICAgIGxldCBtYXhMaW1pdGVkVXVp
ZCA9IDA7Ci0gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9u
ID0+IHsKLSAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmZv
ckVhY2gocGFpciA9PiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYWlyLnJlc3VsdHMubGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGxpbWl0
ICE9PSAxICYmIGxpbWl0ID09PSBwYWlyLnJlc3VsdHMubGVuZ3RoKQotICAgICAgICAgICAgICAg
ICAgICBtYXhMaW1pdGVkVXVpZCA9IE1hdGgubWF4KHBhaXIucmVzdWx0c1swXS51dWlkLCBtYXhM
aW1pdGVkVXVpZCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobGltaXQgPT09IDEpCi0gICAg
ICAgICAgICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3VsdHNb
cGFpci5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWluRGlzcGxheWVkVXVpZCA9IE1h
dGgubWluKHBhaXIucmVzdWx0c1swXS51dWlkLCBtaW5EaXNwbGF5ZWRVdWlkKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKG1pbkRpc3BsYXllZFV1aWQgPT09IG5v
dykKLSAgICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBtYXhMaW1pdGVkVXVpZDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWluRGlzcGxheWVkVXVpZCA9IE1hdGgubWF4KG1pbkRpc3Bs
YXllZFV1aWQsIG1heExpbWl0ZWRVdWlkKTsKLQotICAgICAgICBsZXQgY29tbWl0cyA9IFtdOwot
ICAgICAgICBsZXQgcmVwb3NpdG9yaWVzID0gbmV3IFNldCgpOwotICAgICAgICBsZXQgY3VycmVu
dENvbW1pdEluZGV4ID0gQ29tbWl0QmFuay5jb21taXRzLmxlbmd0aCAtIDE7Ci0gICAgICAgIHRo
aXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsKLSAgICAgICAgICAg
IHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7Ci0g
ICAgICAgICAgICAgICAgcGFpci5yZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC51dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgbGV0IGNhbmRpZGF0
ZUNvbW1pdHMgPSBbXTsKKyAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7CisgICAgICAgIGNvbnN0
IGNvbW1pdHMgPSBjb21taXRzRm9yUmVzdWx0cyh0aGlzLnJlc3VsdHMsIGxpbWl0LCB0aGlzLmFs
bENvbW1pdHMpOworICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlRm9yQ29tbWl0cyhjb21taXRz
KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzcGxheUFsbENvbW1pdHMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNv
bW1pdHMubGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDb21t
aXRJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ29tbWl0QmFuay5j
b21taXRzW2N1cnJlbnRDb21taXRJbmRleF0udXVpZCgpIDwgcmVzdWx0LnV1aWQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5kaXNwbGF5QWxsQ29tbWl0cyB8fCBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1p
dEluZGV4XS51dWlkKCkgPT0gcmVzdWx0LnV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlQ29tbWl0cy5wdXNoKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0
SW5kZXhdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4Owor
ICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KTsKKyAgICAgICAgY29uc3QgY29sb3JNYXAgPSB7CisgICAgICAgICAgICBzdWNjZXNzOiBj
b21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tZ3JlZW5MaWdodCcpLnRyaW0oKSwKKyAg
ICAgICAgICAgIGZhaWxlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXJlZExp
Z2h0JykudHJpbSgpLAorICAgICAgICAgICAgdGltZWRvdXQ6IGNvbXB1dGVkU3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSgnLS1vcmFuZ2VMaWdodCcpLnRyaW0oKSwKKyAgICAgICAgICAgIGNyYXNoZWQ6
IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1wdXJwbGVMaWdodCcpLnRyaW0oKSwK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMudXBkYXRlcyA9IFtdOworICAgICAgICBjb25zdCBv
cHRpb25zID0geworICAgICAgICAgICAgZ2V0U2NhbGVGdW5jOiAodmFsdWUpID0+IHsKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUudXVpZCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHt1dWlkOiB2YWx1ZS51dWlkfTsKKyAgICAgICAgICAgICAgICByZXR1cm4ge307Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgY29tcGFyZUZ1bmM6IChhLCBiKSA9PiB7cmV0dXJu
IGIudXVpZCAtIGEudXVpZDt9LAorICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogKGRyYXdEb3Qp
ID0+IChkYXRhLCBjb250ZXh0LCB4LCB5KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFkYXRh
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHJhd0RvdChjb250ZXh0LCB4LCB5LCB0cnVl
KTsKKworICAgICAgICAgICAgICAgIGxldCB0YWcgPSBudWxsOworICAgICAgICAgICAgICAgIGxl
dCBjb2xvciA9IGNvbG9yTWFwLnN1Y2Nlc3M7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3Rh
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGFnID0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxG
aWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZmFpbHVyZXMgdGhhdCBhcmUgYSByZXN1bHQgb2Yg
bXVsdGlwbGUgcnVucywgY29tYmluZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBpZiAodGFn
ICYmICFkYXRhLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IE1h
dGguY2VpbCh0YWcgLyBkYXRhLnN0YXRzLnRlc3RzX3J1biAqIDEwMCAtIC41KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
ZyA9ICc8MSc7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWcgPSBgJHt0YWd9ICVgCiAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUNvbW1p
dHMubGVuZ3RoID09PSAwIHx8IGNhbmRpZGF0ZUNvbW1pdHNbY2FuZGlkYXRlQ29tbWl0cy5sZW5n
dGggLSAxXS51dWlkKCkgIT09IHJlc3VsdC51dWlkKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FuZGlkYXRlQ29tbWl0cy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQn
OiAnPycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V1aWQnOiAoKSA9PiB7cmV0dXJu
IHJlc3VsdC51dWlkO30KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAg
ICAgICAgICAgIGxldCBpbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNv
bW1pdHMuZm9yRWFjaChjb21taXQgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bW1pdC5yZXBvc2l0b3J5X2lkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRv
cmllcy5hZGQoY29tbWl0LnJlcG9zaXRvcnlfaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGluZGV4IDwgY29tbWl0cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tbWl0LnV1aWQoKSA9PT0gY29tbWl0c1tpbmRleF0udXVpZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPiBjb21taXRzW2luZGV4XS51dWlkKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5zcGxpY2UoaW5kZXgsIDAsIGNvbW1p
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1p
dHMucHVzaChjb21taXQpOworICAgICAgICAgICAgICAgICAgICBmYWlsdXJlVHlwZU9yZGVyLmZv
ckVhY2godHlwZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0c1tg
dGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7dHlwZX1g
XSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvck1hcFt0eXBl
XTsKICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlmIChjdXJyZW50Q29tbWl0SW5kZXggPj0g
MCAmJiBjb21taXRzLmxlbmd0aCkgewotICAgICAgICAgICAgbGV0IHRyYWlsaW5nUmVwb3NpdG9y
aWVzID0gbmV3IFNldChyZXBvc2l0b3JpZXMpOwotICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0
b3JpZXMuZGVsZXRlKGNvbW1pdHNbY29tbWl0cy5sZW5ndGggLSAxXS5yZXBvc2l0b3J5X2lkKTsK
LSAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCAmJiB0cmFpbGluZ1Jl
cG9zaXRvcmllcy5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gQ29tbWl0
QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKHRy
YWlsaW5nUmVwb3NpdG9yaWVzLmhhcyhjb21taXQucmVwb3NpdG9yeV9pZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIHRy
YWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0ZShjb21taXQucmVwb3NpdG9yeV9pZCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdElkID0gRXhw
ZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChkYXRhLmFjdHVhbCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh3aWxsRmlsdGVyRXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0
ZWRSZXN1bHRzKGRhdGEuYWN0dWFsLCBkYXRhLmV4cGVjdGVkKSk7CisgICAgICAgICAgICAgICAg
ICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGZhaWx1cmVUeXBlTWFwcGlu
Z1t0eXBlXSkgPj0gcmVzdWx0SWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvck1hcFt0eXBlXTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGRyYXdEb3QoY29udGV4dCwgeCwgeSwgZmFs
c2UsIHRhZyA/IHRhZyA6IG51bGwsIGZhbHNlLCBjb2xvcik7CisgICAgICAgICAgICB9LAorICAg
ICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZpZ3VyYXRp
b24pIHsKKyAgICAgICAgICAgIHJldHVybiAoZGF0YSkgPT4geworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgZG8gc29tZXRoaW5nIHNhbmUgaGVyZSwgYnV0IHdlIHByb2JhYmx5
IG5lZWQgYW5vdGhlciBlbmRwb2ludAorICAgICAgICAgICAgICAgIGlmICghZGF0YS5zdGFydF90
aW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdOb2RlIGlzIGEgY29tYmluYXRpb24g
b2YgbXVsdGlwbGUgcnVucycpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4OworCisgICAg
ICAgICAgICAgICAgbGV0IGJ1aWxkUGFyYW1zID0gY29uZmlndXJhdGlvbi50b1BhcmFtcygpOwor
ICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydzdWl0ZSddID0gW3NlbGYuc3VpdGVdOworICAg
ICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWyd1dWlkJ10gPSBbZGF0YS51dWlkXTsKKyAgICAgICAg
ICAgICAgICBidWlsZFBhcmFtc1snYWZ0ZXJfdGltZSddID0gW2RhdGEuc3RhcnRfdGltZV07Cisg
ICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ2JlZm9yZV90aW1lJ10gPSBbZGF0YS5zdGFydF90
aW1lXTsKKyAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihgL3VybHMvYnVpbGQ/JHtwYXJhbXNU
b1F1ZXJ5KGJ1aWxkUGFyYW1zKX1gLCAnX2JsYW5rJyk7CiAgICAgICAgICAgICB9CisgICAgICAg
IH0KIAorICAgICAgICBmdW5jdGlvbiBleHBvcnRlckZhY3RvcnkoZGF0YSkgeworICAgICAgICAg
ICAgcmV0dXJuICh1cGRhdGVGdW5jdGlvbikgPT4geworICAgICAgICAgICAgICAgIHNlbGYudXBk
YXRlcy5wdXNoKChzY2FsZSkgPT4ge3VwZGF0ZUZ1bmN0aW9uKGRhdGEsIHNjYWxlKTt9KTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJlcG9zaXRvcmllcyA9IFsuLi5yZXBv
c2l0b3JpZXNdOwotICAgICAgICByZXBvc2l0b3JpZXMuc29ydCgpOworICAgICAgICBsZXQgY2hp
bGRyZW4gPSBbXTsKKyAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNvbmZpZ3Vy
YXRpb24gPT4geworICAgICAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50
b0tleSgpXSB8fCBPYmplY3Qua2V5cyh0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgp
XSkubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICByZXR1
cm4gYDxkaXYgY2xhc3M9InRpbWVsaW5lIj4KLSAgICAgICAgICAgICAgICA8ZGl2ICR7cmVwb3Np
dG9yaWVzLmxlbmd0aCA+IDEgPyBgY2xhc3M9ImhlYWRlciB3aXRoLXRvcC14LWF4aXMiYCA6IGBj
bGFzcz0iaGVhZGVyImB9PgotICAgICAgICAgICAgICAgICAgICAke3RoaXMuY29uZmlndXJhdGlv
bnMubWFwKGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9i
amVjdC5rZXlzKHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldKS5sZW5ndGggPT09
IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBleHBhbmRlciA9IFJFRi5jcmVhdGVSZWYoewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9uRWxlbWVudE1vdW50OiBlbGVtZW50ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gKCkgPT4gewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXSA9ICFz
ZWxmLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5yZXJlbmRlcigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGA8
ZGl2IGNsYXNzPSJzZXJpZXMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBy
ZWY9IiR7ZXhwYW5kZXJ9IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkge3JldHVybiBzZWxmLmNvbGxhcHNl
ZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID8gJysnIDogJy0nfSgpfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7
Y29uZmlndXJhdGlvbn0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRv
S2V5KCldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWVzSGVhZGVy
Rm9yU0RLTGVzc0NvbmZpZyA9IGNvbmZpZyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke2NvbmZpZ308
L2Rpdj5gOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdWV1ZVBhcmFt
cyA9IGNvbmZpZy50b1BhcmFtcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx
dWV1ZVBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1aXRlXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY29uZmlnTGluayA9IGA8YSBjbGFzcz0idGV4dCB0aW55IiBocmVm
PSIvdXJscy9xdWV1ZT8ke3BhcmFtc1RvUXVlcnkocXVldWVQYXJhbXMpfSIgdGFyZ2V0PSJfYmxh
bmsiPiR7Y29uZmlnfTwvYT5gOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZXhwYW5kZXIgPSBSRUYuY3JlYXRlUmVmKHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9uRWxlbWVudE1vdW50OiBlbGVtZW50ID0+IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRTREtz
W2tleV0gPSAhc2VsZi5leHBhbmRlZFNES3Nba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXJlbmRlcigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZFNES3Nba2V5XSA9PT0gdW5kZWZp
bmVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJzZXJpZXMiPiR7Y29uZmlnTGlua308L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlcmllcyB0ZXh0IHRpbnkiPgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHJlZj0iJHtleHBhbmRlcn0iIHN0
eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJHtmdW5jdGlvbigpIHtyZXR1cm4gc2VsZi5leHBhbmRlZFNES3Nba2V5XSA/
ICctc2RrJyA6ICcrc2RrJ30oKX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJHtj
b25maWdMaW5rfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGV0IGxhc3RDb25maWcgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIucmVzdWx0cy5sZW5ndGggPD0g
MCB8fCBwYWlyLnJlc3VsdHNbcGFpci5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQgPCBtaW5EaXNw
bGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcn
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBuZXcgQ29u
ZmlndXJhdGlvbihwYWlyLmNvbmZpZ3VyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzZGsgPSBjb25maWcuc2RrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgY29uZmlnLnNkazsgIC8vIFN0cmlwIG91dCBzZGsgaW5mb3JtYXRpb24u
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29uZmlnLnRv
S2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVJbmRl
eCA9IGNvbmZpZy5jb21wYXJlKGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGFzdENvbmZpZyAhPT0gbnVsbCAmJiBjb21wYXJlSW5kZXggIT0gMCAmJiAh
dGhpcy5leHBhbmRlZFNES3NbbGFzdENvbmZpZy50b0tleSgpXSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmln
KGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChj
b21wYXJlSW5kZXggPT09IDAgJiYgdGhpcy5leHBhbmRlZFNES3Nba2V5XSA9PT0gdW5kZWZpbmVk
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZFNES3Nb
a2V5XSA9IGZhbHNlOyAgLy8gUG9wdWxhdGUgdGhpcyBkaWN0aW9uYXJ5IG9uIHRoZSBmbHkuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkU0RLc1trZXld
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZXJp
ZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtzZGt9PC9kaXY+
YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsYXN0Q29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29uZmlnICE9
PSBudWxsICYmICF0aGlzLmV4cGFuZGVkU0RLc1tsYXN0Q29uZmlnLnRvS2V5KCldKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VyaWVzSGVhZGVyRm9yU0RLTGVz
c0NvbmZpZyhsYXN0Q29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0pLmpv
aW4oJycpfQotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9ImNvbnRlbnQiPgotICAgICAgICAgICAgICAgICAgICAke3JlbmRlclRpbWVsaW5lKGNvbW1p
dHMsIHJlcG9zaXRvcmllcywgdHJ1ZSl9Ci0gICAgICAgICAgICAgICAgICAgICR7dGhpcy5jb25m
aWd1cmF0aW9ucy5tYXAoY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0pLmxl
bmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QXJyYXlJbmRleCA9IG5ldyBBcnJheSh0
aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5sZW5ndGgpLmZpbGwoMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgZG90cyA9IHt9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgp
XS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhaXJG
b3JJbmRleCA9IHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldW2ldOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggPD0g
MCB8fCBwYWlyRm9ySW5kZXgucmVzdWx0c1twYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggLSAx
XS51dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tuZXcgQ29uZmln
dXJhdGlvbihwYWlyRm9ySW5kZXguY29uZmlndXJhdGlvbikudG9LZXkoKV0gPSBbXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuc2xp
Y2UoMCwgY29tbWl0cy5sZW5ndGggLSBNYXRoLm1heChyZXBvc2l0b3JpZXMubGVuZ3RoIC0gMSwg
MCkpLmZvckVhY2goY29tbWl0ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGN1cnJlbnRBcnJheUluZGV4Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhaXJGb3JJbmRleCA9IHRoaXMucmVzdWx0
c1tjb25maWd1cmF0aW9uLnRvS2V5KCldW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3RoIDw9IDAgfHwgcGFpckZvckluZGV4
LnJlc3VsdHNbcGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3RoIC0gMV0udXVpZCA8IG1pbkRpc3Bs
YXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBuZXcgQ29u
ZmlndXJhdGlvbihwYWlyRm9ySW5kZXguY29uZmlndXJhdGlvbik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25LZXkgPSBjb25maWcudG9LZXkoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdEluZGV4ID0gcGFpckZv
ckluZGV4LnJlc3VsdHMubGVuZ3RoIC0gY3VycmVudEFycmF5SW5kZXhbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJbmRleCA8IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVzaChuZXcg
RG90KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA9PT0gcGFpckZvckluZGV4LnJlc3VsdHNbcmVz
dWx0SW5kZXhdLnV1aWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
dCBidWlsZFBhcmFtcyA9IGNvbmZpZy50b1BhcmFtcygpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3N1aXRlJ10gPSBbdGhpcy5zdWl0ZV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1sndXVpZCddID0gW2Nv
bW1pdC51dWlkKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
YnVpbGRMaW5rID0gYC91cmxzL2J1aWxkPyR7cGFyYW1zVG9RdWVyeShidWlsZFBhcmFtcyl9YDsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXJGb3JJbmRleC5y
ZXN1bHRzW3Jlc3VsdEluZGV4XS5zdGF0cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25LZXldLnB1c2gobmV3IERvdCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNb
cmVzdWx0SW5kZXhdLnN0YXRzLnRlc3RzX3J1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRz
W2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9ZmFpbGVk
YF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJ
bmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3Rl
ZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfXRpbWVkb3V0YF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4
XS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18n
fWNyYXNoZWRgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxk
TGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdU
b1N0YXRlSWQocGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLmFjdHVhbCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJFeHBlY3Rl
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQg
PSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy51bmV4cGVjdGVkUmVz
dWx0cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
aXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5hY3R1YWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1
bHRJbmRleF0uZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90
c1tjb25maWd1cmF0aW9uS2V5XS5wdXNoKG5ldyBEb3QoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdElkIDw9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoJ0VS
Uk9SJykgPyAxIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0SWQgPD0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCgnVElNRU9VVCcpID8g
MSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dElkIDw9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoJ0NSQVNIJykgPyAxIDogMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkTGluaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25L
ZXldLnB1c2gobmV3IERvdCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAocmVzdWx0SW5kZXggPj0gMCAmJiBjb21taXQudXVpZCgpIDw9IHBhaXJGb3JJbmRleC5y
ZXN1bHRzW3Jlc3VsdEluZGV4XS51dWlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArK2N1cnJlbnRBcnJheUluZGV4W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0SW5kZXggPSBwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggLSBj
dXJyZW50QXJyYXlJbmRleFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbGlzdCBvZiBjb25maWd1cmF0aW9ucyB0byBkaXNw
bGF5IHdpdGggU0RLcyBzdHJpcHBlZAorICAgICAgICAgICAgbGV0IG1hcHBlZENoaWxkcmVuQ29u
ZmlncyA9IHt9OworICAgICAgICAgICAgbGV0IGNoaWxkcmVuQ29uZmlnc0J5U0RLID0ge30KKyAg
ICAgICAgICAgIGxldCByZXN1bHRzQnlLZXkgPSB7fTsKKyAgICAgICAgICAgIHRoaXMucmVzdWx0
c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7CisgICAgICAgICAgICAg
ICAgY29uc3Qgc3RyaXBwZWRDb25maWcgPSBuZXcgQ29uZmlndXJhdGlvbihwYWlyLmNvbmZpZ3Vy
YXRpb24pOworICAgICAgICAgICAgICAgIHJlc3VsdHNCeUtleVtzdHJpcHBlZENvbmZpZy50b0tl
eSgpXSA9IFsuLi5wYWlyLnJlc3VsdHNdOworICAgICAgICAgICAgICAgIHJlc3VsdHNCeUtleVtz
dHJpcHBlZENvbmZpZy50b0tleSgpXS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtyZXR1cm4gYi51dWlk
IC0gYS51dWlkO30pCisgICAgICAgICAgICAgICAgZGVsZXRlIHN0cmlwcGVkQ29uZmlnLnNkazsK
KyAgICAgICAgICAgICAgICBtYXBwZWRDaGlsZHJlbkNvbmZpZ3Nbc3RyaXBwZWRDb25maWcudG9L
ZXkoKV0gPSBzdHJpcHBlZENvbmZpZzsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuQ29u
Zmlnc0J5U0RLW3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldKQorICAgICAgICAgICAgICAgICAgICBj
aGlsZHJlbkNvbmZpZ3NCeVNES1tzdHJpcHBlZENvbmZpZy50b0tleSgpXSA9IFtdOworICAgICAg
ICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldLnB1
c2gobmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGxldCBjaGlsZHJlbkNvbmZpZ3MgPSBbXTsKKyAgICAgICAgICAgIE9i
amVjdC5rZXlzKG1hcHBlZENoaWxkcmVuQ29uZmlncykuZm9yRWFjaChrZXkgPT4geworICAgICAg
ICAgICAgICAgIGNoaWxkcmVuQ29uZmlncy5wdXNoKG1hcHBlZENoaWxkcmVuQ29uZmlnc1trZXld
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzLnNvcnQoZnVu
Y3Rpb24oYSwgYikge3JldHVybiBhLmNvbXBhcmUoYik7fSk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke0RvdC5t
ZXJnZShkb3RzKS5tYXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbignJyl9
PC9kaXY+YDsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29sbGFwc2VkIHRpbWVsaW5lcywg
Y29iaW5lIHJlc3VsdHMKKyAgICAgICAgICAgIGxldCBhbGxSZXN1bHRzID0gW107CisgICAgICAg
ICAgICBsZXQgY29sbGFwc2VkVGltZWxpbmVzID0gW107CisgICAgICAgICAgICBjaGlsZHJlbkNv
bmZpZ3MuZm9yRWFjaChjb25maWcgPT4geworICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmln
c0J5U0RLW2NvbmZpZy50b0tleSgpXS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtyZXR1cm4gYS5jb21w
YXJlU0RLcyhiKTt9KTsKKworICAgICAgICAgICAgICAgIGxldCByZXN1bHRzRm9yQ29uZmlnID0g
W107CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCld
LmZvckVhY2goc2RrQ29uZmlnID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c0ZvckNv
bmZpZyA9IGNvbWJpbmVSZXN1bHRzKHJlc3VsdHNGb3JDb25maWcsIHJlc3VsdHNCeUtleVtzZGtD
b25maWcudG9LZXkoKV0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFs
bFJlc3VsdHMgPSBjb21iaW5lUmVzdWx0cyhhbGxSZXN1bHRzLCByZXN1bHRzRm9yQ29uZmlnKTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbGV0IGN1cnJlbnREb3RzID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgbGFzdENvbmZpZyA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXIu
Y29uZmlndXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0g
Y29uZmlnLnRvS2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RzW2tl
eV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgY29uZmlnLnNkazsgIC8vIFN0cmlwIG91dCBzZGsgaW5m
b3JtYXRpb24KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVJbmRl
eCA9IGNvbmZpZy5jb21wYXJlKGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGlzU0RLRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkU0RLc1tjb25maWcudG9LZXko
KV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVJbmRleCB8fCBpc1NE
S0V4cGFuZGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBg
PGRpdiBjbGFzcz0ic2VyaWVzIj4ke0RvdC5tZXJnZShjdXJyZW50RG90cykubWFwKGRvdCA9PiB7
cmV0dXJuIGRvdC50b1N0cmluZygpO30pLmpvaW4oJycpfTwvZGl2PmA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnREb3RzID0ge307Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXgg
JiYgaXNTREtFeHBhbmRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9ICc8ZGl2IGNsYXNzPSJzZXJpZXMiPjwvZGl2Pic7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudERvdHNba2V5XSA9IGRvdHNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0Q29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudERvdHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdl
KGN1cnJlbnREb3RzKS5tYXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbign
Jyl9PC9kaXY+YDsKKyAgICAgICAgICAgICAgICBsZXQgcXVldWVQYXJhbXMgPSBjb25maWcudG9Q
YXJhbXMoKTsKKyAgICAgICAgICAgICAgICBxdWV1ZVBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1
aXRlXTsKKyAgICAgICAgICAgICAgICBsZXQgbXlUaW1lbGluZSA9IFRpbWVsaW5lLlNlcmllc1dp
dGhIZWFkZXJDb21wb25lbnQoCisgICAgICAgICAgICAgICAgICAgIGAke2NoaWxkcmVuQ29uZmln
c0J5U0RLW2NvbmZpZy50b0tleSgpXS5sZW5ndGggPiAxID8gJyB8ICcgOiAnJ308YSBocmVmPSIv
dXJscy9xdWV1ZT8ke3BhcmFtc1RvUXVlcnkocXVldWVQYXJhbXMpfSIgdGFyZ2V0PSJfYmxhbmsi
PiR7Y29uZmlnfTwvYT5gLAorICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5DYW52YXNTZXJp
ZXNDb21wb25lbnQocmVzdWx0c0ZvckNvbmZpZywgc2NhbGUsIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdldFNjYWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBvcHRpb25zLmV4cG9ydGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb25Eb3RDbGljazogb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlnKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBleHBvcnRlckZhY3RvcnkocmVzdWx0c0Zv
ckNvbmZpZyksCisgICAgICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIGlm
IChjaGlsZHJlbkNvbmZpZ3NCeVNES1tjb25maWcudG9LZXkoKV0ubGVuZ3RoID4gMSkgeworICAg
ICAgICAgICAgICAgICAgICBsZXQgdGltZWxpbmVzQnlTREsgPSBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmZvckVhY2goc2RrQ29u
ZmlnID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lc0J5U0RLLnB1c2goCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZWxpbmUuU2VyaWVzV2l0aEhlYWRlckNvbXBv
bmVudChgJHtzZGtDb25maWcuc2RrfWAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudChyZXN1bHRzQnlLZXlbc2RrQ29uZmlnLnRv
S2V5KCldLCBzY2FsZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
U2NhbGVGdW5jOiBvcHRpb25zLmdldFNjYWxlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBhcmVGdW5jOiBvcHRpb25zLmNvbXBhcmVGdW5jLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogb3B0aW9ucy5yZW5kZXJG
YWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG9w
dGlvbnMuZXhwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRv
dENsaWNrOiBvbkRvdENsaWNrRmFjdG9yeShzZGtDb25maWcpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IGV4cG9ydGVyRmFjdG9yeShyZXN1bHRzQnlLZXlb
c2RrQ29uZmlnLnRvS2V5KCldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIG15VGltZWxp
bmUgPSBUaW1lbGluZS5FeHBhbmRhYmxlU2VyaWVzV2l0aEhlYWRlckV4cGFuZGVyQ29tcG9uZW50
KG15VGltZWxpbmUsIC4uLnRpbWVsaW5lc0J5U0RLKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY29sbGFwc2VkVGltZWxpbmVzLnB1c2gobXlUaW1lbGluZSk7CisgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgICAgICAgICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICAgICAgICAgICR7cmVuZGVy
VGltZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzKX0KLSAgICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgIDwvZGl2PmA7CisgICAgICAgICAgICBpZiAoY29sbGFwc2VkVGltZWxpbmVz
Lmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAo
Y29sbGFwc2VkVGltZWxpbmVzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgICAgIGlmICgh
Y29sbGFwc2VkVGltZWxpbmVzWzBdLmhlYWRlci5pbmNsdWRlcygnY2xhc3M9InNlcmllcyInKSkK
KyAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkVGltZWxpbmVzWzBdLmhlYWRlciA9IFRpbWVs
aW5lLkhlYWRlckNvbXBvbmVudChjb2xsYXBzZWRUaW1lbGluZXNbMF0uaGVhZGVyKTsKKyAgICAg
ICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNvbGxhcHNlZFRpbWVsaW5lc1swXSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGlsZHJlbi5w
dXNoKAorICAgICAgICAgICAgICAgIFRpbWVsaW5lLkV4cGFuZGFibGVTZXJpZXNXaXRoSGVhZGVy
RXhwYW5kZXJDb21wb25lbnQoCisgICAgICAgICAgICAgICAgVGltZWxpbmUuU2VyaWVzV2l0aEhl
YWRlckNvbXBvbmVudChgICR7Y29uZmlndXJhdGlvbn1gLAorICAgICAgICAgICAgICAgICAgICBU
aW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQoYWxsUmVzdWx0cywgc2NhbGUsIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldFNjYWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFj
dG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0
b3J5KGNvbmZpZ3VyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IGV4
cG9ydGVyRmFjdG9yeShhbGxSZXN1bHRzKSwKKyAgICAgICAgICAgICAgICAgICAgfSkpLAorICAg
ICAgICAgICAgICAgIC4uLmNvbGxhcHNlZFRpbWVsaW5lcworICAgICAgICAgICAgKSk7CisgICAg
ICAgIH0pOworCisgICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAgICBzZWxmLnhheGlzVXBk
YXRlcyA9IFtdOworICAgICAgICB0aGlzLnJlcG9zaXRvcmllcyA9IHJlcG9zaXRvcmllc0ZvckNv
bW1pdHMoY29tbWl0cyk7CisgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzLmZvckVhY2gocmVwb3Np
dG9yeSA9PiB7CisgICAgICAgICAgICBjb25zdCB4QXhpc0NvbXBvbmVudCA9IHhBeGlzRnJvbVNj
YWxlKHNjYWxlLCByZXBvc2l0b3J5LCBzZWxmLnhheGlzVXBkYXRlcywgdG9wKTsKKyAgICAgICAg
ICAgIGlmICh0b3ApCisgICAgICAgICAgICAgICAgY2hpbGRyZW4udW5zaGlmdCh4QXhpc0NvbXBv
bmVudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh4
QXhpc0NvbXBvbmVudCk7CisgICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgY29uc3QgY29tcG9zZXIgPSBGUC5jb21wb3NlcigodXBkYXRlVGltZWxpbmUpID0+
IHsKKyAgICAgICAgICAgIHNlbGYudGltZWxpbmVVcGRhdGUgPSAoeEF4aXNlcykgPT4geworICAg
ICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZSgwLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2VsZi5yZXBvc2l0b3JpZXMubGVuZ3RoID4gMSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRy
ZW4uc3BsaWNlKGNoaWxkcmVuLmxlbmd0aCAtIHNlbGYucmVwb3NpdG9yaWVzLmxlbmd0aCwgc2Vs
Zi5yZXBvc2l0b3JpZXMubGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0cnVl
OworICAgICAgICAgICAgICAgIHhBeGlzZXMuZm9yRWFjaChjb21wb25lbnQgPT4geworICAgICAg
ICAgICAgICAgICAgICBpZiAodG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4u
dW5zaGlmdChjb21wb25lbnQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAg
ICAgIHRvcCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVw
ZGF0ZVRpbWVsaW5lKGNoaWxkcmVuKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gVGltZWxpbmUuQ2FudmFzQ29udGFpbmVyKGNvbXBvc2VyLCAuLi5jaGlsZHJl
bik7CiAgICAgfQogfQogCisKIGZ1bmN0aW9uIExlZ2VuZExhYmVsKGV2ZW50U3RyZWFtLCBmaWx0
ZXJFeHBlY3RlZFRleHQsIGZpbHRlclVuZXhwZWN0ZWRUZXh0KSB7CiAgICAgbGV0IHJlZiA9IFJF
Ri5jcmVhdGVSZWYoewogICAgICAgICBzdGF0ZTogd2lsbEZpbHRlckV4cGVjdGVkLApAQCAtNjgw
LDQgKzc3Niw0IEBAIGZ1bmN0aW9uIExlZ2VuZChjYWxsYmFjaz1udWxsLCBwbHVyYWw9ZmEKICAg
ICByZXR1cm4gYDxkaXYgY2xhc3M9ImNvbnRlbnQiPiR7cmVzdWx0fTwvZGl2Pjxicj5gOwogfQog
Ci1leHBvcnQge0xlZ2VuZCwgVGltZWxpbmUsIEV4cGVjdGF0aW9uc307CitleHBvcnQge0xlZ2Vu
ZCwgVGltZWxpbmVGcm9tRW5kcG9pbnQsIEV4cGVjdGF0aW9uc307CkluZGV4OiBUb29scy9yZXN1
bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2gu
aHRtbAkocmV2aXNpb24gMjQ4MTgwKQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkv
dmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzLwogaW1wb3J0IHtEcmF3
ZXIsIEJyYW5jaFNlbGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzLCBMaW1pdFNsaWRlcn0g
ZnJvbSAnL2Fzc2V0cy9qcy9kcmF3ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xp
YnJhcnkvanMvUmVmLmpzJzsKIGltcG9ydCB7U2VhcmNoQmFyfSBmcm9tICcvYXNzZXRzL2pzL3Nl
YXJjaC5qcyc7Ci1pbXBvcnQge0xlZ2VuZCwgVGltZWxpbmV9IGZyb20gJy9hc3NldHMvanMvdGlt
ZWxpbmUuanMnOworaW1wb3J0IHtMZWdlbmQsIFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcv
YXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKIAogY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKIGNv
bnN0IFNVSVRFUyA9IEpTT04ucGFyc2UoJ3t7IHN1aXRlc3xzYWZlIH19Jyk7ICAgIApAQCAtNTUs
NyArNTUsNyBAQCBjbGFzcyBTZWFyY2hWaWV3IHsKICAgICAgICAgICAgICAgICBzdGF0ZS5jaGls
ZHJlbi5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHRoaXMuY3VycmVudFBhcmFt
cy5zdWl0ZVtpXSwKICAgICAgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5jdXJyZW50UGFyYW1z
LnRlc3RbaV0sCi0gICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFw
aS9yZXN1bHRzLyR7dGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldfS8ke3RoaXMuY3VycmVudFBh
cmFtcy50ZXN0W2ldfWAsIHRoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXSksCisgICAgICAgICAg
ICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRz
LyR7dGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldfS8ke3RoaXMuY3VycmVudFBhcmFtcy50ZXN0
W2ldfWAsIHRoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXSksCiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyOSw3ICsxMjksNyBAQCBjbGFzcyBTZWFy
Y2hWaWV3IHsKICAgICAgICAgICAgICAgICBpZiAoZGlmZi5jaGlsZHJlbikKICAgICAgICAgICAg
ICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCBMZWdlbmQoKCkgPT4gewogICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5yZWYuc3RhdGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC50aW1lbGluZS5yZXJlbmRlcigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRpbWVsaW5lLnVwZGF0ZSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKSAr
IGRpZmYuY2hpbGRyZW4ubWFwKHJlbmRlckNoaWxkKS5qb2luKCcnKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGRpZmYucHJlcGVuZGluZykgewpAQCAtMTYwLDcgKzE2MCw4IEBAIGNsYXNzIFNlYXJj
aFZpZXcgewogICAgICAgICAgICAgICAgICAgICAgICAgZGlkRmluZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJlZi5zdGF0ZS5jaGlsZHJlbi5zcGxpY2Uoc2VhcmNoLCAx
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWYuc3RhdGUuY2hpbGRyZW5bc2VhcmNoXS50aW1lbGluZS50ZWFyZG93bigpOwogICAgICAg
ICAgICAgICAgICAgICBuZWVkUmVSZW5kZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIWRpZEZpbmQpIHsKQEAgLTE2OSw3ICsxNzAsNyBAQCBjbGFzcyBT
ZWFyY2hWaWV3IHsKICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdWl0ZTogcGFyYW1zLnN1aXRlW2ldLAogICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdDogcGFyYW1zLnRlc3RbaV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lbGluZTogbmV3IFRpbWVsaW5lKGBhcGkvcmVzdWx0cy8ke3BhcmFtcy5zdWl0ZVtpXX0v
JHtwYXJhbXMudGVzdFtpXX1gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBu
ZXcgVGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7cGFyYW1zLnN1aXRlW2ldfS8k
e3BhcmFtcy50ZXN0W2ldfWApLAogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yMzksNyArMjQwLDcgQEAgRE9NLmluamVjdCgKICAg
ICAgICAgICAgIGxldCBjaGlsZCA9IHsKICAgICAgICAgICAgICAgICBzdWl0ZTogYXJndW1lbnRz
W2ldLnN1aXRlLAogICAgICAgICAgICAgICAgIHRlc3Q6IGFyZ3VtZW50c1tpXS50ZXN0LAotICAg
ICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9yZXN1bHRzLyR7YXJndW1l
bnRzW2ldLnN1aXRlfS8ke2FyZ3VtZW50c1tpXS50ZXN0fWApLAorICAgICAgICAgICAgICAgIHRp
bWVsaW5lOiBuZXcgVGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7YXJndW1lbnRz
W2ldLnN1aXRlfS8ke2FyZ3VtZW50c1tpXS50ZXN0fWApLAogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICB2aWV3LnJlZi5zZXRTdGF0ZSh7cHJlcGVuZGluZzogW2NoaWxkXX0pOwpJbmRleDog
VG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
dGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjQ4MTgwKQorKysgVG9vbHMv
cmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGltcG9ydCB7ZGVlcENvbXBhcmUsIEVy
cm9yRGlzcGxheSwgcXVlcnkKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9q
cy9jb25maWd1cmF0aW9uLmpzJzsKIGltcG9ydCB7RHJhd2VyLCBCcmFuY2hTZWxlY3RvciwgQ29u
ZmlndXJhdGlvblNlbGVjdG9ycywgTGltaXRTbGlkZXJ9IGZyb20gJy9hc3NldHMvanMvZHJhd2Vy
LmpzJzsKIGltcG9ydCB7RE9NLCBSRUZ9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7Ci1pbXBv
cnQge0xlZ2VuZCwgVGltZWxpbmV9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOworaW1w
b3J0IHtMZWdlbmQsIFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcvYXNzZXRzL2pzL3RpbWVs
aW5lLmpzJzsKIAogY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKIGNvbnN0IFNVSVRFUyA9IEpT
T04ucGFyc2UoJ3t7IHN1aXRlc3xzYWZlIH19Jyk7ICAgIApAQCAtNjYsNyArNjYsNyBAQCBjbGFz
cyBNYWluVmlldyB7CiAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB7fTsKIAogICAgICAgICBTVUlU
RVMuZm9yRWFjaCgoc3VpdGUpID0+IHsKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVd
ID0gbmV3IFRpbWVsaW5lKCdhcGkvcmVzdWx0cy8nICsgc3VpdGUsIHN1aXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50KCdhcGkv
cmVzdWx0cy8nICsgc3VpdGUsIHN1aXRlKTsKICAgICAgICAgfSk7CiAgICAgfQogICAgIHVucGFj
a1N1aXRlcyhzdWl0ZXNKc29uKSB7CkBAIC04MSw5ICs4MSwxMCBAQCBjbGFzcyBNYWluVmlldyB7
CiAgICAgICAgIH0pOwogCiAgICAgICAgIGxldCBzb3J0ZWRTdWl0ZXMgPSBbLi4uc3VpdGVzXS5z
b3J0KCk7CisgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmZvckVhY2goa2V5ID0+
IHt0aGlzLmNoaWxkcmVuW2tleV0udGVhcmRvd24oKTt9KTsKICAgICAgICAgdGhpcy5jaGlsZHJl
biA9IHt9OwogICAgICAgICBzb3J0ZWRTdWl0ZXMuZm9yRWFjaCgoc3VpdGUpID0+IHsKLSAgICAg
ICAgICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lKCdhcGkvcmVzdWx0cy8n
ICsgc3VpdGUpOworICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxp
bmVGcm9tRW5kcG9pbnQoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSk7CiAgICAgICAgIH0pOwogICAg
ICAgICByZXR1cm4gc29ydGVkU3VpdGVzOwogICAgIH0KQEAgLTE0Myw3ICsxNDQsNyBAQCBjbGFz
cyBNYWluVmlldyB7CiAgICAgICAgIGxldCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47CiAgICAg
ICAgIHJldHVybiBMZWdlbmQoKCkgPT4gewogICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgaW4g
Y2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICBjaGlsZHJlbltzdWl0ZV0ucmVyZW5kZXIoKTsK
KyAgICAgICAgICAgICAgICBjaGlsZHJlbltzdWl0ZV0udXBkYXRlKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0sIHRydWUpICsgc3VpdGVzLm1hcChzdWl0ZSA9PiB7CiAgICAgICAgICAgICBy
ZXR1cm4gYDxkaXYgY2xhc3M9InNlY3Rpb24iPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375574</attachid>
            <date>2019-08-05 15:58:19 -0700</date>
            <delta_ts>2019-08-06 11:54:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200172-20190805155818.patch</filename>
            <type>text/plain</type>
            <size>51498</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODI3MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDE5LTA4LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzOgorICAgICAgICAo
dGlja0ZvckNvbW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChtaW5pbXVtVXVpZEZvclJlc3VsdHMp
OiBHaXZlbiBhIGRpY3Rpb25hcnkgb2YgcmVzdWx0IGxpc3RzLCBkZXRlcm1pbmUgdGhlIG1pbmlt
dW0gVVVJRAorICAgICAgICB3aGljaCBlbmNvbXBhc3NlcyBhbGwgcmVzdWx0cy4gQ3J1Y2lhbGx5
LCB0aGlzIGZ1bmN0aW9uIG11c3QgZXhjbHVkZSBhbiBVVUlEcyB3aGljaCBtYXkKKyAgICAgICAg
cmVmZXIgdG8gcmVzdWx0cyBleGNsdWRlZCBiZWNhdXNlIG9mIHRoZSBsaW1pdCBhcmd1bWVudC4K
KyAgICAgICAgKHJlbmRlclRpbWVsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbW1pdHNGb3JS
ZXN1bHRzKTogR2l2ZW4gYSBkaWN0aW9uYXJ5IG9mIHJlc3VsdCBsaXN0cywgcmV0dXJuIGEgbGlz
dCBvZiBjb21taXRzIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aG9zZSByZXN1bHRzLgorICAg
ICAgICAoc2NhbGVGb3JDb21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIGdlbmVyYXRl
IGEgc2NhbGUgdG8gYmUgY29uc3VtZWQgYnkgdGhlIGNhbnZhcyBUaW1lbGluZS4KKyAgICAgICAg
KHJlcG9zaXRvcmllc0ZvckNvbW1pdHMpOiBHaXZlbiBhIGxpc3Qgb2YgY29tbWl0cywgcmV0dXJu
IGEgc29ydGVkIGxpc3Qgb2YgYXNzb2NpYXRlZCByZXBvc2l0b3J5IGlkcy4KKyAgICAgICAgKHhB
eGlzRnJvbVNjYWxlKTogQ3JlYXRlIGEgY2FudmFzLWJhc2VkIHgtYXhpcyBiYXNlZCBvbiB0aGUg
cHJvdmlkZWQgc2NhbGUgYW5kIGEgcmVwb3NpdG9yeSBpZC4KKyAgICAgICAgKGluUGxhY2VDb21i
aW5lKTogQ29tYmluZSByZXN1bHQgb2JqZWN0cyB0b2dldGhlci4KKyAgICAgICAgKHN0YXRzRm9y
U2luZ2xlUmVzdWx0KTogVHVybiBhIHNpbmdsZSByZXN1bHQgaW50byBhIHN0YXQgb2JqZWN0Lgor
ICAgICAgICAoY29tYmluZVJlc3VsdHMpOiBHaXZlbiBsaXN0cyBvZiByZXN1bHRzLCBjb21iaW5l
IHRoZXNlIGxpc3RzIHdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIGxpc3RzIHVuY2hhbmdlZC4K
KyAgICAgICAgKERvdCk6IERlbGV0ZWQuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludCk6
IFJlbmFtZWQgZnJvbSBUaW1lbGluZS4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LmNv
bnN0cnVjdG9yKTogQ2FudmFzIFRpbWVsaW5lIG1hbmFnZXMgZXhwYW5zaW9uIGFuZCBjb2xsYXBz
aW5nIG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC50
ZWFyZG93bik6IERldGFjaCBjYWxsYmFja3MgZnJvbSBDb21taXRCYW5rLgorICAgICAgICAoVGlt
ZWxpbmVGcm9tRW5kcG9pbnQudXBkYXRlKTogVXBkYXRlIHdpdGggYW55IG5ldyBjb21taXQgaW5m
b3JtYXRpb24sIGZvcmNlIGEgcmUtZHJhdyBvZiB0aGUgY3VycmVudAorICAgICAgICBjYWNoZSBj
b250ZW50cy4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50LnJlbG9hZCk6IFJlbW92ZSBt
YW5hZ2VtZW50IG9mIG5lc3RlZCB0aW1lbGluZXMuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRw
b2ludC5yZW5kZXIpOiBVc2UgY2FudmFzIFRpbWVsaW5lIGluc3RlYWQgb2YgaHRtbCB0aW1lbGlu
ZSB0byB2aXN1YWxpemUgcmVzdWx0cy4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbDogVXNlIFRpbWVsaW5lRnJvbUVuZHBvaW50IGNs
YXNzLgorICAgICAgICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1
aXRlX3Jlc3VsdHMuaHRtbDogRGl0dG8uCisKIDIwMTktMDgtMDUgIEpvbmF0aGFuIEJlZGFyZCAg
PGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQtdGVzdHMgYXNzZXJ0cyB3
aGVuIHRoZSBpUGhvbmUgWFIgc2ltdWxhdG9yIGlzIHJ1bm5pbmcKSW5kZXg6IFRvb2xzL3Jlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5l
LmpzCShyZXZpc2lvbiAyNDgyNzApCisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsOCBA
QAogaW1wb3J0IHtDb21taXRCYW5rfSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7CiBpbXBv
cnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5qcyc7CiBp
bXBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHBhcmFtc1RvUXVlcnksIHF1ZXJ5VG9Q
YXJhbXN9IGZyb20gJy9hc3NldHMvanMvY29tbW9uLmpzJzsKLWltcG9ydCB7RE9NLCBFdmVudFN0
cmVhbSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtET00sIEV2ZW50
U3RyZWFtLCBSRUYsIEZQfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtUaW1l
bGluZX0gZnJvbSAnL2xpYnJhcnkvanMvY29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMn
OwogCiAKIGNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CkBAIC03MSwxNjUgKzcyLDI4OCBAQCBj
bGFzcyBFeHBlY3RhdGlvbnMKIH0KIGxldCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZTsKIAot
ZnVuY3Rpb24gdGlja0ZvckNvbW1pdChjb21taXQsIHNjYWxlKSB7Ci0gICAgbGV0IHBhcmFtcyA9
IHsKLSAgICAgICAgYnJhbmNoOiBjb21taXQuYnJhbmNoID8gW2NvbW1pdC5icmFuY2hdIDogcXVl
cnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoLAotICAgICAgICB1
dWlkOiBbY29tbWl0LnV1aWQoKV0sCi0gICAgfQotICAgIGlmICghcGFyYW1zLmJyYW5jaCkKLSAg
ICAgICAgZGVsZXRlIHBhcmFtcy5icmFuY2g7Ci0gICAgY29uc3QgcXVlcnkgPSBwYXJhbXNUb1F1
ZXJ5KHBhcmFtcyk7Ci0KLSAgICBpZiAoc2NhbGUgPD0gMCkKLSAgICAgICAgcmV0dXJuICcnOwot
ICAgIGlmIChzY2FsZSA9PT0gMSkKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzY2FsZSI+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+Ci0gICAgICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9InRleHQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJl
Zj0iL2NvbW1pdD8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7U3RyaW5nKGNvbW1pdC5pZCku
c3Vic3RyaW5nKDAsMTApfTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAg
ICAgICAgICAgPC9kaXY+YDsKLSAgICBsZXQgcmVzdWx0ID0gJyc7Ci0gICAgd2hpbGUgKHNjYWxl
ID4gMCkgewotICAgICAgICBsZXQgY291bnRUb1VzZSA9IHNjYWxlOwotICAgICAgICBpZiAoY291
bnRUb1VzZSA9PT0gMTEgfHwgY291bnRUb1VzZSA9PSAxMikKLSAgICAgICAgICAgIGNvdW50VG9V
c2UgPSA2OwotICAgICAgICBlbHNlIGlmIChjb3VudFRvVXNlID4gMTApCi0gICAgICAgICAgICBj
b3VudFRvVXNlID0gMTA7Ci0gICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2NhbGUgZ3Jv
dXAtJHtjb3VudFRvVXNlfSI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLWxp
bmUtbGVmdCI+PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dCI+Ci0gICAgICAgICAgICAgICAgICAg
IDxhIGhyZWY9Ii9jb21taXQ/JHtxdWVyeX0iIHRhcmdldD0iX2JsYW5rIj4ke1N0cmluZyhjb21t
aXQuaWQpLnN1YnN0cmluZygwLDEwKX08L2E+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLWxpbmUtcmlnaHQiPjwvZGl2PgotICAgICAg
ICAgICAgPC9kaXY+YDsKLSAgICAgICAgc2NhbGUgLT0gY291bnRUb1VzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KK2Z1bmN0aW9uIG1pbmltdW1VdWlkRm9yUmVzdWx0cyhyZXN1bHRz
LCBsaW1pdCkgeworICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwKTsK
KyAgICBsZXQgbWluRGlzcGxheWVkVXVpZCA9IG5vdzsKKyAgICBsZXQgbWF4TGltaXRlZFV1aWQg
PSAwOworCisgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaCgoa2V5KSA9PiB7CisgICAg
ICAgIHJlc3VsdHNba2V5XS5mb3JFYWNoKHBhaXIgPT4geworICAgICAgICAgICAgaWYgKCFwYWly
LnJlc3VsdHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
IChsaW1pdCAhPT0gMSAmJiBsaW1pdCA9PT0gcGFpci5yZXN1bHRzLmxlbmd0aCkKKyAgICAgICAg
ICAgICAgICBtYXhMaW1pdGVkVXVpZCA9IE1hdGgubWF4KHBhaXIucmVzdWx0c1swXS51dWlkLCBt
YXhMaW1pdGVkVXVpZCk7CisgICAgICAgICAgICBlbHNlIGlmIChsaW1pdCA9PT0gMSkKKyAgICAg
ICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzW3BhaXIu
cmVzdWx0cy5sZW5ndGggLSAxXS51dWlkLCBtaW5EaXNwbGF5ZWRVdWlkKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5y
ZXN1bHRzWzBdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQpOworICAgICAgICB9KTsKKyAgICB9KTsK
IAotZnVuY3Rpb24gcmVuZGVyVGltZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzID0gW10sIHRv
cCA9IGZhbHNlKSB7Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gYnJlYWtzIHdpdGggbW9y
ZSB0aGFuIDMgcmVwb3NpdG9yaWVzIGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzUxMDQyOTgx
PgotICAgIGlmIChyZXBvc2l0b3JpZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIGlmICh0b3Ap
Ci0gICAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgIHJlcG9zaXRvcmllcyA9IFtudWxsXTsK
LSAgICB9Ci0gICAgY29uc3Qgc3RhcnQgPSB0b3AgPyBNYXRoLmNlaWwocmVwb3NpdG9yaWVzLmxl
bmd0aCAvIDIpIDogMDsKLSAgICBjb25zdCBlbmQgPSB0b3AgPyByZXBvc2l0b3JpZXMubGVuZ3Ro
IDogTWF0aC5jZWlsKHJlcG9zaXRvcmllcy5sZW5ndGggLyAyKTsKLSAgICBjb25zdCBudW1iZXJP
ZkVsZW1lbnRzID0gY29tbWl0cy5sZW5ndGggLSBNYXRoLm1heChyZXBvc2l0b3JpZXMubGVuZ3Ro
IC0gMSwgMCkKLSAgICByZXR1cm4gcmVwb3NpdG9yaWVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChy
ZXBvc2l0b3J5ID0+IHsKLSAgICAgICAgbGV0IGNvbW1pdHNGcm9tT3RoZXJSZXBvcyA9IDA7Ci0g
ICAgICAgIGxldCByZW5kZXJlZEVsZW1lbnRzID0gMDsKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJ4LWF4aXMgJHt0b3AgPyAndG9wJyA6ICcnfSI+Ci0gICAgICAgICAgICAgICAgJHtjb21t
aXRzLm1hcChjb21taXQgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9z
aXRvcnlfaWQgJiYgY29tbWl0LnJlcG9zaXRvcnlfaWQgIT09IHJlcG9zaXRvcnkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsrY29tbWl0c0Zyb21PdGhlclJlcG9zOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHNjYWxlID0gIE1hdGgubWluKGNvbW1pdHNGcm9tT3RoZXJSZXBvcyAr
IDEsIG51bWJlck9mRWxlbWVudHMgLSByZW5kZXJlZEVsZW1lbnRzKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29tbWl0c0Zyb21PdGhlclJlcG9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyZWRFbGVtZW50cyArPSBzY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tG
b3JDb21taXQoY29tbWl0LCBzY2FsZSk7Ci0gICAgICAgICAgICAgICAgfSkuam9pbignJyl9Ci0g
ICAgICAgICAgICA8L2Rpdj5gOwotICAgIH0pLmpvaW4oJycpOworICAgIGlmIChtaW5EaXNwbGF5
ZWRVdWlkID09PSBub3cpCisgICAgICAgIHJldHVybiBtYXhMaW1pdGVkVXVpZDsKKyAgICByZXR1
cm4gTWF0aC5tYXgobWluRGlzcGxheWVkVXVpZCwgbWF4TGltaXRlZFV1aWQpOwogfQogCi1jbGFz
cyBEb3QgewotICAgIHN0YXRpYyBtZXJnZShkb3RzID0ge30pIHsKLSAgICAgICAgbGV0IHJlc3Vs
dCA9IFtdOwotICAgICAgICBsZXQgaW5kZXggPSAwOwotICAgICAgICBsZXQgaGFzRGF0YSA9IHRy
dWU7Ci0KLSAgICAgICAgd2hpbGUgKGhhc0RhdGEpIHsKLSAgICAgICAgICAgIGxldCBkb3QgPSBu
ZXcgRG90KCk7Ci0gICAgICAgICAgICBoYXNEYXRhID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIE9i
amVjdC5rZXlzKGRvdHMpLmZvckVhY2goa2V5ID0+IHsKLSAgICAgICAgICAgICAgICBpZiAoZG90
c1trZXldLmxlbmd0aCA8PSBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGhhc0RhdGEgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICghZG90c1tr
ZXldW2luZGV4XS5jb3VudCkKK2Z1bmN0aW9uIGNvbW1pdHNGb3JSZXN1bHRzKHJlc3VsdHMsIGxp
bWl0LCBhbGxDb21taXRzID0gdHJ1ZSkgeworICAgIGNvbnN0IG1pbkRpc3BsYXllZFV1aWQgPSBt
aW5pbXVtVXVpZEZvclJlc3VsdHMobGltaXQpOworICAgIGxldCBjb21taXRzID0gW107CisgICAg
bGV0IHJlcG9zaXRvcmllcyA9IG5ldyBTZXQoKTsKKyAgICBsZXQgY3VycmVudENvbW1pdEluZGV4
ID0gQ29tbWl0QmFuay5jb21taXRzLmxlbmd0aCAtIDE7CisgICAgT2JqZWN0LmtleXMocmVzdWx0
cykuZm9yRWFjaCgoa2V5KSA9PiB7CisgICAgICAgIHJlc3VsdHNba2V5XS5mb3JFYWNoKHBhaXIg
PT4geworICAgICAgICAgICAgcGFpci5yZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHsKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGRvdC5jb3VudCkKLSAgICAg
ICAgICAgICAgICAgICAgZG90LmNvbWJpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsZXQg
Y2FuZGlkYXRlQ29tbWl0cyA9IFtdOwogCi0gICAgICAgICAgICAgICAgZG90LmNvdW50ICs9IGRv
dHNba2V5XVtpbmRleF0uY291bnQ7Ci0gICAgICAgICAgICAgICAgZG90LmZhaWxlZCArPSBkb3Rz
W2tleV1baW5kZXhdLmZhaWxlZDsKLSAgICAgICAgICAgICAgICBkb3QudGltZW91dCArPSBkb3Rz
W2tleV1baW5kZXhdLnRpbWVvdXQ7Ci0gICAgICAgICAgICAgICAgZG90LmNyYXNoICs9IGRvdHNb
a2V5XVtpbmRleF0uY3Jhc2g7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdC5jb21iaW5lZCkKLSAg
ICAgICAgICAgICAgICAgICAgZG90LmxpbmsgPSBudWxsOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZG90LmxpbmsgPSBkb3RzW2tleV1baW5kZXhdLmxpbms7Cisg
ICAgICAgICAgICAgICAgaWYgKCFhbGxDb21taXRzKQorICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQoKSA8
IHJlc3VsdC51dWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChhbGxDb21taXRzIHx8IENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29t
bWl0SW5kZXhdLnV1aWQoKSA9PSByZXN1bHQudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhbmRpZGF0ZUNvbW1pdHMucHVzaChDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdElu
ZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGgg
PT09IDAgfHwgY2FuZGlkYXRlQ29tbWl0c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAtIDFdLnV1
aWQoKSAhPT0gcmVzdWx0LnV1aWQpCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1p
dHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAnPycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAndXVpZCc6ICgpID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQorICAgICAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7CisgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9PiB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcmllcy5hZGQoY29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPT09IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tbWl0LnV1aWQoKSA+IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuc3BsaWNlKGluZGV4LCAwLCBjb21taXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChoYXNEYXRhKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRvdCk7Ci0gICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBpZiAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYg
Y29tbWl0cy5sZW5ndGgpIHsKKyAgICAgICAgbGV0IHRyYWlsaW5nUmVwb3NpdG9yaWVzID0gbmV3
IFNldChyZXBvc2l0b3JpZXMpOworICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUo
Y29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOworICAgICAgICB3aGls
ZSAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYgdHJhaWxpbmdSZXBvc2l0b3JpZXMuc2l6ZSkg
eworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRD
b21taXRJbmRleF07CisgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMuaGFzKGNv
bW1pdC5yZXBvc2l0b3J5X2lkKSkgeworICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaChjb21t
aXQpOworICAgICAgICAgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0ZShjb21taXQu
cmVwb3NpdG9yeV9pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAtLWN1cnJlbnRDb21t
aXRJbmRleDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBj
b25zdHJ1Y3Rvcihjb3VudCA9IDAsIGZhaWxlZCA9IDAsIHRpbWVvdXQgPSAwLCBjcmFzaCA9IDAs
IGNvbWJpbmVkID0gZmFsc2UsIGxpbmsgPSBudWxsKSB7Ci0gICAgICAgIHRoaXMuY291bnQgPSBj
b3VudDsKLSAgICAgICAgdGhpcy5mYWlsZWQgPSBmYWlsZWQ7Ci0gICAgICAgIHRoaXMudGltZW91
dCA9IHRpbWVvdXQ7Ci0gICAgICAgIHRoaXMuY3Jhc2ggPSBjcmFzaDsKLSAgICAgICAgdGhpcy5j
b21iaW5lZCA9IGNvbWJpbmVkOwotICAgICAgICB0aGlzLmxpbmsgPSBsaW5rOworCisgICAgcmVw
b3NpdG9yaWVzID0gWy4uLnJlcG9zaXRvcmllc107CisgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsK
KyAgICByZXR1cm4gY29tbWl0czsKK30KKworZnVuY3Rpb24gc2NhbGVGb3JDb21taXRzKGNvbW1p
dHMpIHsKKyAgICBsZXQgc2NhbGUgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gY29tbWl0cy5sZW5n
dGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCByZXBvc2l0b3J5X2lkID0gY29t
bWl0c1tpXS5yZXBvc2l0b3J5X2lkID8gY29tbWl0c1tpXS5yZXBvc2l0b3J5X2lkIDogJz8nOwor
ICAgICAgICBzY2FsZS51bnNoaWZ0KHt9KTsKKyAgICAgICAgc2NhbGVbMF1bcmVwb3NpdG9yeV9p
ZF0gPSBjb21taXRzW2ldOworICAgICAgICBpZiAoc2NhbGUubGVuZ3RoIDwgMikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBPYmplY3Qua2V5cyhzY2FsZVsxXSkuZm9yRWFjaCgoa2V5
KSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5ID09PSByZXBvc2l0b3J5X2lkIHx8IGtleSA9PT0g
Jz8nIHx8IGtleSA9PT0gJ3V1aWQnKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHNjYWxlWzBdW2tleV0gPSBzY2FsZVsxXVtrZXldOworICAgICAgICB9KTsKKyAgICAgICAg
c2NhbGVbMF0udXVpZCA9IE1hdGgubWF4KC4uLk9iamVjdC5rZXlzKHNjYWxlWzBdKS5tYXAoKGtl
eSkgPT4geworICAgICAgICAgICAgcmV0dXJuIHNjYWxlWzBdW2tleV0udXVpZCgpOworICAgICAg
ICB9KSk7CiAgICAgfQotICAgIHRvU3RyaW5nKCkgewotICAgICAgICBpZiAoIXRoaXMuY291bnQp
Ci0gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImRvdCBlbXB0eSI+PC9kaXY+YDsKKyAg
ICByZXR1cm4gc2NhbGU7Cit9CiAKLSAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7CitmdW5jdGlv
biByZXBvc2l0b3JpZXNGb3JDb21taXRzKGNvbW1pdHMpIHsKKyAgICBsZXQgcmVwb3NpdG9yaWVz
ID0gbmV3IFNldCgpOworICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0KSA9PiB7CisgICAgICAg
IGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQo
Y29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAgIH0pOworICAgIHJlcG9zaXRvcmllcyA9IFsuLi5y
ZXBvc2l0b3JpZXNdOworICAgIGlmICghcmVwb3NpdG9yaWVzLmxlbmd0aCkKKyAgICAgICAgcmVw
b3NpdG9yaWVzID0gWyc/J107CisgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsKKyAgICByZXR1cm4g
cmVwb3NpdG9yaWVzOworfQogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlcihjc3NDbGFzcywgaW5z
aWRlPScnKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi5saW5rKQotICAgICAgICAgICAgICAgIHJl
dHVybiBgPGEgaHJlZj0iJHtzZWxmLmxpbmt9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiR7Y3Nz
Q2xhc3N9Ij4ke2luc2lkZX08L2E+YDsKLSAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0i
JHtjc3NDbGFzc30iPiR7aW5zaWRlfTwvZGl2PmA7CitmdW5jdGlvbiB4QXhpc0Zyb21TY2FsZShz
Y2FsZSwgcmVwb3NpdG9yeSwgdXBkYXRlc0FycmF5LCBpc1RvcD1mYWxzZSkKK3sKKyAgICBmdW5j
dGlvbiBzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIHNjYWxlLm1h
cChub2RlID0+IHsKKyAgICAgICAgICAgIGxldCBjb21taXQgPSBub2RlW3JlcG9zaXRvcnldOwor
ICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgY29tbWl0ID0gbm9kZVsn
PyddOworICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHtp
ZDogJycsIHV1aWQ6ICgpID0+IG51bGx9OworICAgICAgICAgICAgcmV0dXJuIGNvbW1pdDsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9u
ZW50KHNjYWxlRm9yUmVwb3NpdG9yeShzY2FsZSksIHsKKyAgICAgICAgaXNUb3A6IGlzVG9wLAor
ICAgICAgICBoZWlnaHQ6IDEzMCwKKyAgICAgICAgb25TY2FsZUNsaWNrOiAobm9kZSkgPT4gewor
ICAgICAgICAgICAgaWYgKCFub2RlLmxhYmVsLmlkKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7CisgICAgICAgICAgICAgICAgYnJhbmNoOiBub2Rl
LmxhYmVsLmJyYW5jaCA/IFtub2RlLmxhYmVsLmJyYW5jaF0gOiBxdWVyeVRvUGFyYW1zKGRvY3Vt
ZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFuY2gsCisgICAgICAgICAgICAgICAgdXVpZDogW25v
ZGUubGFiZWwudXVpZCgpXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcGFyYW1z
LmJyYW5jaCkKKyAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLmJyYW5jaDsKKyAgICAgICAg
ICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zVG9RdWVyeShwYXJhbXMpOworICAgICAgICAgICAgd2lu
ZG93Lm9wZW4oYC9jb21taXQ/JHtxdWVyeX1gLCAnX2JsYW5rJyk7CisgICAgICAgIH0sCisgICAg
ICAgIC8vIFBlciB0aGUgYmlydGhkYXkgcGFyYWRveCwgMTAlIGNoYW5nZSBvZiBjb2xsaXNpb24g
d2l0aCA3LjcgbWlsbGlvbiBjb21taXRzIHdpdGggMTIgY2hhcmFjdGVyIGNvbW1pdHMKKyAgICAg
ICAgZ2V0TGFiZWxGdW5jOiAoY29tbWl0KSA9PiB7cmV0dXJuIGNvbW1pdCA/IGNvbW1pdC5pZC5z
dWJzdHJpbmcoMCwxMikgOiAnPyc7fSwKKyAgICAgICAgZ2V0U2NhbGVGdW5jOiAoY29tbWl0KSA9
PiBjb21taXQudXVpZCgpLAorICAgICAgICBleHBvcnRlcjogKHVwZGF0ZUZ1bmN0aW9uKSA9PiB7
CisgICAgICAgICAgICB1cGRhdGVzQXJyYXkucHVzaCgoc2NhbGUpID0+IHt1cGRhdGVGdW5jdGlv
bihzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpKTt9KTsKKyAgICAgICAgfSwKKyAgICB9KTsKK30K
KworY29uc3QgdGVzdHNSZWdleCA9IC90ZXN0c18oW2Etel0pKy87Citjb25zdCBmYWlsdXJlVHlw
ZU9yZGVyID0gWydmYWlsZWQnLCAndGltZWRvdXQnLCAnY3Jhc2hlZCddOworY29uc3QgZmFpbHVy
ZVR5cGVNYXBwaW5nID0geworICAgIGZhaWxlZDogJ0VSUk9SJywKKyAgICB0aW1lZG91dDogJ1RJ
TUVPVVQnLAorICAgIGNyYXNoZWQ6ICdDUkFTSCcsCit9CisKK2Z1bmN0aW9uIGluUGxhY2VDb21i
aW5lKG91dCwgb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gb3V0OworCisg
ICAgaWYgKCFvdXQpIHsKKyAgICAgICAgb3V0ID0ge307CisgICAgICAgIE9iamVjdC5rZXlzKG9i
aikuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdfJykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG9ialtrZXldIGluc3Rh
bmNlb2YgT2JqZWN0KQorICAgICAgICAgICAgICAgIG91dFtrZXldID0gaW5QbGFjZUNvbWJpbmUo
b3V0W2tleV0sIG9ialtrZXldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBv
dXRba2V5XSA9IG9ialtrZXldOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBP
YmplY3Qua2V5cyhvdXQpLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXkuc3Rh
cnRzV2l0aCgnXycpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KG91dFtrZXldIGluc3RhbmNlb2YgT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgb3V0W2tleV0g
PSBpblBsYWNlQ29tYmluZShvdXRba2V5XSwgb2JqW2tleV0pOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IG9mIHNwZWNpYWwgY2Fz
ZSBrZXlzIHdoaWNoIG5lZWQgdG8gYmUgYWRkZWQgdG9nZXRoZXIKKyAgICAgICAgICAgIGlmIChr
ZXkubWF0Y2godGVzdHNSZWdleCkpIHsKKyAgICAgICAgICAgICAgICBvdXRba2V5XSArPSBvYmpb
a2V5XTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIElmIHRoZSBrZXkgZXhpc3RzLCBidXQgZG9lc24ndCBtYXRjaCwgZGVsZXRlIGl0Cisg
ICAgICAgICAgICBpZiAoIShrZXkgaW4gb2JqKSB8fCBvdXRba2V5XSAhPSBvYmpba2V5XSkgewor
ICAgICAgICAgICAgICAgIGRlbGV0ZSBvdXRba2V5XTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBPYmplY3Qua2V5cyhvYmopLmZv
ckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXkubWF0Y2godGVzdHNSZWdleCkgJiYg
IShrZXkgaW4gb3V0KSkKKyAgICAgICAgICAgICAgICBvdXRba2V5XSA9IG9ialtrZXldOworICAg
ICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG91dDsKK30KKworZnVuY3Rpb24gc3RhdHNGb3JT
aW5nbGVSZXN1bHQocmVzdWx0KSB7CisgICAgY29uc3QgYWN0dWFsSWQgPSBFeHBlY3RhdGlvbnMu
c3RyaW5nVG9TdGF0ZUlkKHJlc3VsdC5hY3R1YWwpOworICAgIGNvbnN0IHVuZXhwZWN0ZWRJZCA9
IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1
bHRzKHJlc3VsdC5hY3R1YWwsIHJlc3VsdC5leHBlY3RlZCkpOworICAgIGxldCBzdGF0cyA9IHsK
KyAgICAgICAgdGVzdHNfcnVuOiAxLAorICAgICAgICB0ZXN0c19za2lwcGVkOiAwLAorICAgIH0K
KyAgICBmYWlsdXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgIGNvbnN0IGlk
Rm9yVHlwZSA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBwaW5n
W3R5cGVdKTsKKyAgICAgICAgc3RhdHNbYHRlc3RzXyR7dHlwZX1gXSA9IGFjdHVhbElkID4gaWRG
b3JUeXBlICA/IDAgOiAxOworICAgICAgICBzdGF0c1tgdGVzdHNfdW5leHBlY3RlZF8ke3R5cGV9
YF0gPSB1bmV4cGVjdGVkSWQgPiBpZEZvclR5cGUgID8gMCA6IDE7CisgICAgfSk7CisgICAgcmV0
dXJuIHN0YXRzOworfQorCitmdW5jdGlvbiBjb21iaW5lUmVzdWx0cygpIHsKKyAgICBsZXQgY291
bnRzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLmZpbGwoMCk7CisgICAgbGV0IGRhdGEg
PSBbXTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIEZpbmQgY2FuZGlkYXRlIHV1
aWQKKyAgICAgICAgbGV0IHV1aWQgPSAwOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNv
dW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZVV1aWQgPSBudWxs
OworICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50c1tpXSAmJiBhcmd1bWVudHNbaV0ubGVuZ3Ro
ID4gY291bnRzW2ldKSB7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlVXVpZCA9IGFyZ3VtZW50
c1tpXVtjb3VudHNbaV1dLnV1aWQ7CisgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVV1aWQp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICsrY291bnRzW2ld
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVV1aWQpCisgICAgICAg
ICAgICAgICAgdXVpZCA9IE1hdGgubWF4KHV1aWQsIGNhbmRpZGF0ZVV1aWQpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCF0aGlzLmZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybiByZW5kZXIo
J2RvdCBzdWNjZXNzJyk7CisgICAgICAgIGlmICghdXVpZCkKKyAgICAgICAgICAgIHJldHVybiBk
YXRhOworCisgICAgICAgIC8vIENvbWJpbmUgcmVsZXZhbnQgcmVzdWx0cworICAgICAgICBsZXQg
ZGF0YU5vZGUgPSBudWxsOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50cy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgd2hpbGUgKGNvdW50c1tpXSA8IGFyZ3VtZW50c1tpXS5s
ZW5ndGggJiYgYXJndW1lbnRzW2ldW2NvdW50c1tpXV0gJiYgYXJndW1lbnRzW2ldW2NvdW50c1tp
XV0udXVpZCA9PT0gdXVpZCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZSAmJiAhZGF0
YU5vZGUuc3RhdHMpCisgICAgICAgICAgICAgICAgICAgIGRhdGFOb2RlLnN0YXRzID0gc3RhdHNG
b3JTaW5nbGVSZXN1bHQoZGF0YU5vZGUpOworCisgICAgICAgICAgICAgICAgZGF0YU5vZGUgPSBp
blBsYWNlQ29tYmluZShkYXRhTm9kZSwgYXJndW1lbnRzW2ldW2NvdW50c1tpXV0pOworCisgICAg
ICAgICAgICAgICAgaWYgKGRhdGFOb2RlLnN0YXRzICYmICFhcmd1bWVudHNbaV1bY291bnRzW2ld
XS5zdGF0cykKKyAgICAgICAgICAgICAgICAgICAgZGF0YU5vZGUuc3RhdHMgPSBpblBsYWNlQ29t
YmluZShkYXRhTm9kZS5zdGF0cywgc3RhdHNGb3JTaW5nbGVSZXN1bHQoYXJndW1lbnRzW2ldW2Nv
dW50c1tpXV0pKTsKIAotICAgICAgICBsZXQga2V5ID0gJ2ZhaWxlZCc7Ci0gICAgICAgIGlmICh0
aGlzLnRpbWVvdXQpCi0gICAgICAgICAgICBrZXkgPSAndGltZW91dCc7Ci0gICAgICAgIGlmICh0
aGlzLmNyYXNoKQotICAgICAgICAgICAga2V5ID0gJ2NyYXNoJzsKLQotICAgICAgICBpZiAoIXRo
aXMuY29tYmluZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtrZXl9YCwgYDxk
aXYgY2xhc3M9InRhZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29sb3IpIj4ke3Ro
aXMuZmFpbGVkfTwvZGl2PmApOwotCi0gICAgICAgIHJldHVybiByZW5kZXIoYGRvdCAke2tleX1g
LCBgPGRpdiBjbGFzcz0idGFnIiBzdHlsZT0iY29sb3I6dmFyKC0tYm9sZEludmVyc2VDb2xvciki
PgotICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxl
dCBwZXJjZW50ID0gTWF0aC5jZWlsKHNlbGYuZmFpbGVkIC8gc2VsZi5jb3VudCAqIDEwMCAtIC41
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQgPiAwKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnPDEn
OwotICAgICAgICAgICAgICAgIH0oKX0gJQotICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgICAg
ICAgICAgICAgKytjb3VudHNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGRhdGFOb2RlKQorICAgICAgICAgICAgZGF0YS5wdXNoKGRhdGFOb2RlKTsKICAgICB9Cisg
ICAgcmV0dXJuIGRhdGE7CiB9CiAKLWNsYXNzIFRpbWVsaW5lIHsKK2NsYXNzIFRpbWVsaW5lRnJv
bUVuZHBvaW50IHsKICAgICBjb25zdHJ1Y3RvcihlbmRwb2ludCwgc3VpdGUgPSBudWxsKSB7CiAg
ICAgICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKICAgICAgICAgdGhpcy5kaXNwbGF5QWxs
Q29tbWl0cyA9IHRydWU7CiAKICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IENvbmZpZ3Vy
YXRpb24uZnJvbVF1ZXJ5KCk7CiAgICAgICAgIHRoaXMucmVzdWx0cyA9IHt9OwotICAgICAgICB0
aGlzLmNvbGxhcHNlZCA9IHt9OwotICAgICAgICB0aGlzLmV4cGFuZGVkU0RLcyA9IHt9OwogICAg
ICAgICB0aGlzLnN1aXRlID0gc3VpdGU7ICAvLyBTdWl0ZSBpcyBvZnRlbiBpbXBsaWVkIGJ5IHRo
ZSBlbmRwb2ludCwgYnV0IHRyeWluZyB0byBkZXRlcm1pbmUgc3VpdGUgZnJvbSBlbmRwb2ludCBp
cyBub3QgdHJpdmlhbC4KIAorICAgICAgICB0aGlzLnVwZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhp
cy54YXhpc1VwZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhpcy50aW1lbGluZVVwZGF0ZSA9IG51bGw7
CisgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzID0gW107CisKICAgICAgICAgY29uc3Qgc2VsZiA9
IHRoaXM7Ci0gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9u
ID0+IHsKLSAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldID0g
W107Ci0gICAgICAgICAgICB0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID0g
dHJ1ZTsKLSAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5sYXRlc3REaXNwYXRjaCA9IERhdGUu
bm93KCk7CiAgICAgICAgIHRoaXMucmVmID0gUkVGLmNyZWF0ZVJlZih7CkBAIC0yNDQsMTUgKzM2
OCw0NiBAQCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0g
ICAgICAgIENvbW1pdEJhbmsuY2FsbGJhY2tzLnB1c2goKCkgPT4gewotICAgICAgICAgICAgY29u
c3QgcGFyYW1zID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSk7Ci0g
ICAgICAgICAgICBzZWxmLnJlZi5zZXRTdGF0ZShwYXJhbXMubGltaXQgPyBwYXJzZUludChwYXJh
bXMubGltaXRbcGFyYW1zLmxpbWl0Lmxlbmd0aCAtIDFdKSA6IERFRkFVTFRfTElNSVQpOwotICAg
ICAgICB9KTsKKyAgICAgICAgdGhpcy5jb21taXRfY2FsbGJhY2sgPSAoKSA9PiB7CisgICAgICAg
ICAgICBzZWxmLnVwZGF0ZSgpOworICAgICAgICB9OworICAgICAgICBDb21taXRCYW5rLmNhbGxi
YWNrcy5wdXNoKHRoaXMuY29tbWl0X2NhbGxiYWNrKTsKIAogICAgICAgICB0aGlzLnJlbG9hZCgp
OwogICAgIH0KKyAgICB0ZWFyZG93bigpIHsKKyAgICAgICAgQ29tbWl0QmFuay5jYWxsYmFja3Mg
PSBDb21taXRCYW5rLmNhbGxiYWNrcy5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyKSA9PiB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5jb21taXRfY2FsbGJhY2sgPT09IHZhbHVlOworICAgICAg
ICB9KTsKKyAgICB9CisgICAgdXBkYXRlKCkgeworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVy
eVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKKyAgICAgICAgY29uc3QgY29t
bWl0cyA9IGNvbW1pdHNGb3JSZXN1bHRzKHRoaXMucmVzdWx0cywgcGFyYW1zLmxpbWl0ID8gcGFy
c2VJbnQocGFyYW1zLmxpbWl0W3BhcmFtcy5saW1pdC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJ
TUlULCB0aGlzLmFsbENvbW1pdHMpOworICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlRm9yQ29t
bWl0cyhjb21taXRzKTsKKworICAgICAgICBjb25zdCBuZXdSZXBvc2l0b3JpZXMgPSByZXBvc2l0
b3JpZXNGb3JDb21taXRzKGNvbW1pdHMpOworICAgICAgICBsZXQgaGF2ZU5ld1JlcG9zID0gdGhp
cy5yZXBvc2l0b3JpZXMubGVuZ3RoICE9IG5ld1JlcG9zaXRvcmllcy5sZW5ndGg7CisgICAgICAg
IGZvciAobGV0IGkgPSAwOyAhaGF2ZU5ld1JlcG9zICYmIGkgPCB0aGlzLnJlcG9zaXRvcmllcy5s
ZW5ndGggJiYgaSA8IG5ld1JlcG9zaXRvcmllcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGhh
dmVOZXdSZXBvcyA9IHRoaXMucmVwb3NpdG9yaWVzW2ldICE9IG5ld1JlcG9zaXRvcmllc1tpXTsK
KyAgICAgICAgaWYgKGhhdmVOZXdSZXBvcyAmJiB0aGlzLnRpbWVsaW5lVXBkYXRlKSB7CisgICAg
ICAgICAgICB0aGlzLnhheGlzVXBkYXRlcyA9IFtdOworICAgICAgICAgICAgbGV0IHRvcCA9IHRy
dWU7CisgICAgICAgICAgICBsZXQgY29tcG9uZW50cyA9IFtdOworCisgICAgICAgICAgICBuZXdS
ZXBvc2l0b3JpZXMuZm9yRWFjaChyZXBvc2l0b3J5ID0+IHsKKyAgICAgICAgICAgICAgICBjb21w
b25lbnRzLnB1c2goeEF4aXNGcm9tU2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHRoaXMueGF4aXNV
cGRhdGVzLCB0b3ApKTsKKyAgICAgICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICB0aGlzLnRpbWVsaW5lVXBkYXRlKGNvbXBvbmVudHMpOworICAg
ICAgICAgICAgdGhpcy5yZXBvc2l0b3JpZXMgPSBuZXdSZXBvc2l0b3JpZXM7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLnVwZGF0ZXMuZm9yRWFjaChmdW5jID0+IHtmdW5jKHNjYWxlKTt9KQor
ICAgICAgICB0aGlzLnhheGlzVXBkYXRlcy5mb3JFYWNoKGZ1bmMgPT4ge2Z1bmMoc2NhbGUpO30p
OworICAgIH0KICAgICByZXJlbmRlcigpIHsKLSAgICAgICAgbGV0IHBhcmFtcyA9IHF1ZXJ5VG9Q
YXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pOworICAgICAgICBjb25zdCBwYXJhbXMg
PSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKICAgICAgICAgdGhp
cy5yZWYuc2V0U3RhdGUocGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3BhcmFt
cy5saW1pdC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJTUlUKTsKICAgICB9CiAgICAgcmVsb2Fk
KCkgewpAQCAtMjczLDExICs0MjgsOCBAQCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgIGlmICgh
ZGVlcENvbXBhcmUobmV3Q29uZmlncywgdGhpcy5jb25maWd1cmF0aW9ucykpIHsKICAgICAgICAg
ICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBuZXdDb25maWdzOwogICAgICAgICAgICAgdGhpcy5y
ZXN1bHRzID0ge307Ci0gICAgICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IHt9OwotICAgICAgICAg
ICAgdGhpcy5leHBhbmRlZFNES3MgPSB7fTsKICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlv
bnMuZm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLnJlc3Vs
dHNbY29uZmlndXJhdGlvbi50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAgICAgIHRoaXMuY29s
bGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSB0cnVlOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KIApAQCAtMzQxLDI2OCArNDkzLDIxMSBAQCBjbGFzcyBUaW1lbGluZSB7CiAKICAg
ICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJjb250ZW50IiByZWY9IiR7dGhpcy5yZWZ9Ij48L2Rp
dj5gOwogICAgIH0KKwogICAgIHJlbmRlcihsaW1pdCkgewotICAgICAgICBsZXQgbm93ID0gTWF0
aC5mbG9vcihEYXRlLm5vdygpIC8gMTApOwotICAgICAgICBsZXQgbWluRGlzcGxheWVkVXVpZCA9
IG5vdzsKLSAgICAgICAgbGV0IG1heExpbWl0ZWRVdWlkID0gMDsKLSAgICAgICAgdGhpcy5jb25m
aWd1cmF0aW9ucy5mb3JFYWNoKGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgdGhpcy5y
ZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXBhaXIucmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICBpZiAobGltaXQgIT09IDEgJiYgbGltaXQgPT09IHBhaXIu
cmVzdWx0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIG1heExpbWl0ZWRVdWlkID0gTWF0
aC5tYXgocGFpci5yZXN1bHRzWzBdLnV1aWQsIG1heExpbWl0ZWRVdWlkKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChsaW1pdCA9PT0gMSkKLSAgICAgICAgICAgICAgICAgICAgbWluRGlzcGxh
eWVkVXVpZCA9IE1hdGgubWluKHBhaXIucmVzdWx0c1twYWlyLnJlc3VsdHMubGVuZ3RoIC0gMV0u
dXVpZCwgbWluRGlzcGxheWVkVXVpZCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzWzBdLnV1
aWQsIG1pbkRpc3BsYXllZFV1aWQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICBpZiAobWluRGlzcGxheWVkVXVpZCA9PT0gbm93KQotICAgICAgICAgICAgbWluRGlzcGxh
eWVkVXVpZCA9IG1heExpbWl0ZWRVdWlkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtaW5E
aXNwbGF5ZWRVdWlkID0gTWF0aC5tYXgobWluRGlzcGxheWVkVXVpZCwgbWF4TGltaXRlZFV1aWQp
OwotCi0gICAgICAgIGxldCBjb21taXRzID0gW107Ci0gICAgICAgIGxldCByZXBvc2l0b3JpZXMg
PSBuZXcgU2V0KCk7Ci0gICAgICAgIGxldCBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5r
LmNvbW1pdHMubGVuZ3RoIC0gMTsKLSAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNo
KGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRp
b24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAgICAgICAgICBwYWlyLnJlc3Vs
dHMuZm9yRWFjaChyZXN1bHQgPT4gewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnV1
aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgICAgICBsZXQgY2FuZGlkYXRlQ29tbWl0cyA9IFtdOworICAgICAgICBj
b25zdCBzZWxmID0gdGhpczsKKyAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNGb3JSZXN1
bHRzKHRoaXMucmVzdWx0cywgbGltaXQsIHRoaXMuYWxsQ29tbWl0cyk7CisgICAgICAgIGNvbnN0
IHNjYWxlID0gc2NhbGVGb3JDb21taXRzKGNvbW1pdHMpOwogCi0gICAgICAgICAgICAgICAgICAg
IGlmICghdGhpcy5kaXNwbGF5QWxsQ29tbWl0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRDb21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0cy5sZW5ndGggLSAxOwotICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4
XS51dWlkKCkgPCByZXN1bHQudXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlBbGxDb21taXRzIHx8
IENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQoKSA9PSByZXN1bHQu
dXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2go
Q29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisgICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5
bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpOworICAgICAgICBjb25zdCBjb2xv
ck1hcCA9IHsKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlW
YWx1ZSgnLS1ncmVlbkxpZ2h0JykudHJpbSgpLAorICAgICAgICAgICAgZmFpbGVkOiBjb21wdXRl
ZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tcmVkTGlnaHQnKS50cmltKCksCisgICAgICAgICAg
ICB0aW1lZG91dDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5nZUxpZ2h0
JykudHJpbSgpLAorICAgICAgICAgICAgY3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0
eVZhbHVlKCctLXB1cnBsZUxpZ2h0JykudHJpbSgpLAorICAgICAgICB9CisKKyAgICAgICAgdGhp
cy51cGRhdGVzID0gW107CisgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAgICAgICBn
ZXRTY2FsZUZ1bmM6ICh2YWx1ZSkgPT4geworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS51dWlkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3V1aWQ6IHZhbHVlLnV1aWR9
OworICAgICAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBjb21wYXJlRnVuYzogKGEsIGIpID0+IHtyZXR1cm4gYi51dWlkIC0gYS51dWlkO30sCisgICAg
ICAgICAgICByZW5kZXJGYWN0b3J5OiAoZHJhd0RvdCkgPT4gKGRhdGEsIGNvbnRleHQsIHgsIHkp
ID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkcmF3RG90KGNvbnRleHQsIHgsIHksIHRydWUpOworCisgICAgICAgICAgICAgICAgbGV0
IHRhZyA9IG51bGw7CisgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0gY29sb3JNYXAuc3VjY2Vz
czsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0cykgeworICAgICAgICAgICAgICAgICAg
ICB0YWcgPSBkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVj
dGVkXycgOiAnXyd9ZmFpbGVkYF07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBmYWlsdXJlcyB0aGF0IGFyZSBhIHJlc3VsdCBvZiBtdWx0aXBsZSBydW5zLCBjb21iaW5lIHRo
ZW0uCisgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgJiYgIWRhdGEuc3RhcnRfdGltZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gTWF0aC5jZWlsKHRhZyAvIGRhdGEuc3RhdHMu
dGVzdHNfcnVuICogMTAwIC0gLjUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gJzwxJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZyA9IGAke3RhZ30gJWAKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGggPT09IDAgfHwgY2FuZGlk
YXRlQ29tbWl0c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAtIDFdLnV1aWQoKSAhPT0gcmVzdWx0
LnV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2goewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6ICc/JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAndXVpZCc6ICgpID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmFkZChjb21taXQucmVwb3NpdG9y
eV9pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxl
bmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCgpID09
PSBjb21taXRzW2luZGV4XS51dWlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA+
IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21taXRzLnNwbGljZShpbmRleCwgMCwgY29tbWl0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7CisgICAgICAg
ICAgICAgICAgICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVk
ID8gJ191bmV4cGVjdGVkXycgOiAnXyd9JHt0eXBlfWBdID4gMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOwogICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAg
ICAgICAgaWYgKGN1cnJlbnRDb21taXRJbmRleCA+PSAwICYmIGNvbW1pdHMubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBsZXQgdHJhaWxpbmdSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KHJlcG9zaXRvcmll
cyk7Ci0gICAgICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUoY29tbWl0c1tjb21t
aXRzLmxlbmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJl
bnRDb21taXRJbmRleCA+PSAwICYmIHRyYWlsaW5nUmVwb3NpdG9yaWVzLnNpemUpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBjb21taXQgPSBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1p
dEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMuaGFzKGNv
bW1pdC5yZXBvc2l0b3J5X2lkKSkgewotICAgICAgICAgICAgICAgICAgICBjb21taXRzLnB1c2go
Y29tbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVsZXRl
KGNvbW1pdC5yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBsZXQgcmVzdWx0SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlk
KGRhdGEuYWN0dWFsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJFeHBlY3Rl
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmlu
Z1RvU3RhdGVJZChFeHBlY3RhdGlvbnMudW5leHBlY3RlZFJlc3VsdHMoZGF0YS5hY3R1YWwsIGRh
dGEuZXhwZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZVR5cGVPcmRlci5mb3JF
YWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEV4cGVjdGF0aW9ucy5z
dHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBwaW5nW3R5cGVdKSA+PSByZXN1bHRJZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZHJhd0RvdChjb250ZXh0LCB4LCB5LCBmYWxzZSwgdGFnID8gdGFnIDogbnVsbCwgZmFs
c2UsIGNvbG9yKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rp
b24gb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgcmV0dXJu
IChkYXRhKSA9PiB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBzb21l
dGhpbmcgc2FuZSBoZXJlLCBidXQgd2UgcHJvYmFibHkgbmVlZCBhbm90aGVyIGVuZHBvaW50Cisg
ICAgICAgICAgICAgICAgaWYgKCFkYXRhLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYWxlcnQoJ05vZGUgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBydW5zJyk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisKKyAgICAgICAgICAgICAgICBsZXQgYnVpbGRQYXJh
bXMgPSBjb25maWd1cmF0aW9uLnRvUGFyYW1zKCk7CisgICAgICAgICAgICAgICAgYnVpbGRQYXJh
bXNbJ3N1aXRlJ10gPSBbc2VsZi5zdWl0ZV07CisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNb
J3V1aWQnXSA9IFtkYXRhLnV1aWRdOworICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydhZnRl
cl90aW1lJ10gPSBbZGF0YS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgICAgICBidWlsZFBhcmFt
c1snYmVmb3JlX3RpbWUnXSA9IFtkYXRhLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgICAgIHdp
bmRvdy5vcGVuKGAvdXJscy9idWlsZD8ke3BhcmFtc1RvUXVlcnkoYnVpbGRQYXJhbXMpfWAsICdf
YmxhbmsnKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAgICAgIGZ1bmN0aW9uIGV4
cG9ydGVyRmFjdG9yeShkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gKHVwZGF0ZUZ1bmN0aW9u
KSA9PiB7CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVzLnB1c2goKHNjYWxlKSA9PiB7dXBk
YXRlRnVuY3Rpb24oZGF0YSwgc2NhbGUpO30pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgcmVwb3NpdG9yaWVzID0gWy4uLnJlcG9zaXRvcmllc107Ci0gICAgICAgIHJlcG9z
aXRvcmllcy5zb3J0KCk7CisgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdOworICAgICAgICB0aGlz
LmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmlndXJhdGlvbiA9PiB7CisgICAgICAgICAgICBp
ZiAoIXRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldIHx8IE9iamVjdC5rZXlzKHRo
aXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldKS5sZW5ndGggPT09IDApCisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0idGltZWxpbmUi
PgotICAgICAgICAgICAgICAgIDxkaXYgJHtyZXBvc2l0b3JpZXMubGVuZ3RoID4gMSA/IGBjbGFz
cz0iaGVhZGVyIHdpdGgtdG9wLXgtYXhpcyJgIDogYGNsYXNzPSJoZWFkZXIiYH0+Ci0gICAgICAg
ICAgICAgICAgICAgICR7dGhpcy5jb25maWd1cmF0aW9ucy5tYXAoY29uZmlndXJhdGlvbiA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXN1bHRzW2Nv
bmZpZ3VyYXRpb24udG9LZXkoKV0pLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxmID0g
dGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVyID0gUkVGLmNyZWF0
ZVJlZih7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IGVsZW1l
bnQgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sg
PSAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxh
cHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID0gIXNlbGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRp
b24udG9LZXkoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJl
cmVuZGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYDxkaXYgY2xhc3M9InNlcmllcyI+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHJlZj0iJHtleHBhbmRlcn0iIHN0eWxlPSJj
dXJzb3I6IHBvaW50ZXI7Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7
ZnVuY3Rpb24oKSB7cmV0dXJuIHNlbGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0g
PyAnKycgOiAnLSd9KCl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb25maWd1cmF0aW9ufQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnID0gY29uZmln
ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcg
PT09ICdzdHJpbmcnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7Y29uZmlnfTwvZGl2PmA7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHF1ZXVlUGFyYW1zID0gY29uZmlnLnRvUGFyYW1zKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlUGFyYW1zWydzdWl0ZSddID0gW3Ro
aXMuc3VpdGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdM
aW5rID0gYDxhIGNsYXNzPSJ0ZXh0IHRpbnkiIGhyZWY9Ii91cmxzL3F1ZXVlPyR7cGFyYW1zVG9R
dWVyeShxdWV1ZVBhcmFtcyl9IiB0YXJnZXQ9Il9ibGFuayI+JHtjb25maWd9PC9hPmA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNvbmZpZy50b0tleSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlciA9IFJFRi5jcmVh
dGVSZWYoewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FbGVtZW50TW91
bnQ6IGVsZW1lbnQgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnQub25jbGljayA9ICgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5leHBhbmRlZFNES3Nba2V5XSA9ICFzZWxmLmV4cGFuZGVkU0RL
c1trZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJlcmVuZGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLmV4cGFuZGVkU0RLc1trZXldID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtjb25maWdMaW5r
fTwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBj
bGFzcz0ic2VyaWVzIHRleHQgdGlueSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGEgcmVmPSIke2V4cGFuZGVyfSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiPgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkg
e3JldHVybiBzZWxmLmV4cGFuZGVkU0RLc1trZXldID8gJy1zZGsnIDogJytzZGsnfSgpfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAke2NvbmZpZ0xpbmt9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdENvbmZpZyA9IG51bGw7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlv
bi50b0tleSgpXS5mb3JFYWNoKHBhaXIgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGFpci5yZXN1bHRzLmxlbmd0aCA8PSAwIHx8IHBhaXIucmVzdWx0c1twYWlyLnJl
c3VsdHMubGVuZ3RoIC0gMV0udXVpZCA8IG1pbkRpc3BsYXllZFV1aWQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJh
dGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNkayA9IGNvbmZp
Zy5zZGs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuc2Rr
OyAgLy8gU3RyaXAgb3V0IHNkayBpbmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZUluZGV4ID0gY29uZmlnLmNvbXBhcmUobGFzdENv
bmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29uZmlnICE9
PSBudWxsICYmIGNvbXBhcmVJbmRleCAhPSAwICYmICF0aGlzLmV4cGFuZGVkU0RLc1tsYXN0Q29u
ZmlnLnRvS2V5KCldKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IHNlcmllc0hlYWRlckZvclNES0xlc3NDb25maWcobGFzdENvbmZpZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVJbmRleCA9PT0gMCAmJiB0aGlz
LmV4cGFuZGVkU0RLc1trZXldID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU0RLc1trZXldID0gZmFsc2U7ICAvLyBQb3B1bGF0
ZSB0aGlzIGRpY3Rpb25hcnkgb24gdGhlIGZseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZXhwYW5kZWRTREtzW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlcmllc0hlYWRlckZvclNES0xlc3NDb25maWco
Y29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBg
PGRpdiBjbGFzcz0ic2VyaWVzIj4ke3Nka308L2Rpdj5gOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb25maWcg
PSBjb25maWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxhc3RDb25maWcgIT09IG51bGwgJiYgIXRoaXMuZXhwYW5kZWRT
REtzW2xhc3RDb25maWcudG9LZXkoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBzZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnKGxhc3RDb25maWcpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICAgICAg
PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+Ci0gICAgICAgICAg
ICAgICAgICAgICR7cmVuZGVyVGltZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzLCB0cnVlKX0K
LSAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmNvbmZpZ3VyYXRpb25zLm1hcChjb25maWd1cmF0
aW9uID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnJl
c3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXSkubGVuZ3RoID09PSAwKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IGN1cnJlbnRBcnJheUluZGV4ID0gbmV3IEFycmF5KHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9u
LnRvS2V5KCldLmxlbmd0aCkuZmlsbCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBk
b3RzID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRo
aXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFpckZvckluZGV4ID0gdGhpcy5yZXN1bHRzW2Nv
bmZpZ3VyYXRpb24udG9LZXkoKV1baV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhaXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCA8PSAwIHx8IHBhaXJGb3JJbmRleC5yZXN1bHRz
W3BhaXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlk
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3RzW25ldyBDb25maWd1cmF0aW9uKHBhaXJGb3JJbmRleC5jb25m
aWd1cmF0aW9uKS50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5zbGljZSgwLCBjb21taXRzLmxlbmd0aCAtIE1h
dGgubWF4KHJlcG9zaXRvcmllcy5sZW5ndGggLSAxLCAwKSkuZm9yRWFjaChjb21taXQgPT4gewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEFy
cmF5SW5kZXgubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGFpckZvckluZGV4ID0gdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV1b
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyRm9ySW5kZXgucmVz
dWx0cy5sZW5ndGggPD0gMCB8fCBwYWlyRm9ySW5kZXgucmVzdWx0c1twYWlyRm9ySW5kZXgucmVz
dWx0cy5sZW5ndGggLSAxXS51dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXJGb3JJbmRleC5j
b25maWd1cmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29u
ZmlndXJhdGlvbktleSA9IGNvbmZpZy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgcmVzdWx0SW5kZXggPSBwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5ndGggLSBj
dXJyZW50QXJyYXlJbmRleFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdEluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG90c1tjb25maWd1cmF0aW9uS2V5XS5wdXNoKG5ldyBEb3QoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVp
ZCgpID09PSBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0udXVpZCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1aWxkUGFyYW1zID0gY29uZmlnLnRv
UGFyYW1zKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFt
c1snc3VpdGUnXSA9IFt0aGlzLnN1aXRlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1aWxkUGFyYW1zWyd1dWlkJ10gPSBbY29tbWl0LnV1aWQoKV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZExpbmsgPSBgL3VybHMvYnVpbGQ/
JHtwYXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKX1gOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRz
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29uZmlndXJh
dGlvbktleV0ucHVzaChuZXcgRG90KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHMudGVzdHNf
cnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9y
SW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0
ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ31mYWlsZWRgXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhd
LnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9
dGltZWRvdXRgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRl
ckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9Y3Jhc2hlZGBdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRMaW5rLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChwYWlyRm9ySW5kZXgucmVz
dWx0c1tyZXN1bHRJbmRleF0uYWN0dWFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAod2lsbEZpbHRlckV4cGVjdGVkKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0
YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0
SW5kZXhdLmFjdHVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5leHBlY3RlZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25LZXldLnB1c2go
bmV3IERvdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPD0g
RXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCgnRVJST1InKSA/IDEgOiAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJZCA8PSBFeHBlY3RhdGlv
bnMuc3RyaW5nVG9TdGF0ZUlkKCdUSU1FT1VUJykgPyAxIDogMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPD0gRXhwZWN0YXRpb25zLnN0cmlu
Z1RvU3RhdGVJZCgnQ1JBU0gnKSA/IDEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRMaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVzaChuZXcgRG90KCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXN1bHRJbmRleCA+PSAwICYm
IGNvbW1pdC51dWlkKCkgPD0gcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLnV1aWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY3VycmVudEFycmF5SW5k
ZXhbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJbmRleCA9
IHBhaXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIGN1cnJlbnRBcnJheUluZGV4W2ldOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBDcmVhdGUg
YSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIHRvIGRpc3BsYXkgd2l0aCBTREtzIHN0cmlwcGVkCisg
ICAgICAgICAgICBsZXQgbWFwcGVkQ2hpbGRyZW5Db25maWdzID0ge307CisgICAgICAgICAgICBs
ZXQgY2hpbGRyZW5Db25maWdzQnlTREsgPSB7fQorICAgICAgICAgICAgbGV0IHJlc3VsdHNCeUtl
eSA9IHt9OworICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0u
Zm9yRWFjaChwYWlyID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJpcHBlZENvbmZpZyA9
IG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJhdGlvbik7CisgICAgICAgICAgICAgICAg
cmVzdWx0c0J5S2V5W3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldID0gY29tYmluZVJlc3VsdHMoW10s
IFsuLi5wYWlyLnJlc3VsdHNdLnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBiLnV1aWQgLSBh
LnV1aWQ7fSkpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBzdHJpcHBlZENvbmZpZy5zZGs7Cisg
ICAgICAgICAgICAgICAgbWFwcGVkQ2hpbGRyZW5Db25maWdzW3N0cmlwcGVkQ29uZmlnLnRvS2V5
KCldID0gc3RyaXBwZWRDb25maWc7CisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbkNvbmZp
Z3NCeVNES1tzdHJpcHBlZENvbmZpZy50b0tleSgpXSkKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGRyZW5Db25maWdzQnlTREtbc3RyaXBwZWRDb25maWcudG9LZXkoKV0gPSBbXTsKKyAgICAgICAg
ICAgICAgICBjaGlsZHJlbkNvbmZpZ3NCeVNES1tzdHJpcHBlZENvbmZpZy50b0tleSgpXS5wdXNo
KG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJhdGlvbikpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBsZXQgY2hpbGRyZW5Db25maWdzID0gW107CisgICAgICAgICAgICBPYmpl
Y3Qua2V5cyhtYXBwZWRDaGlsZHJlbkNvbmZpZ3MpLmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAg
ICAgICAgICBjaGlsZHJlbkNvbmZpZ3MucHVzaChtYXBwZWRDaGlsZHJlbkNvbmZpZ3Nba2V5XSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlncy5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHtyZXR1cm4gYS5jb21wYXJlKGIpO30pOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtEb3QubWVy
Z2UoZG90cykubWFwKGRvdCA9PiB7cmV0dXJuIGRvdC50b1N0cmluZygpO30pLmpvaW4oJycpfTwv
ZGl2PmA7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbGxhcHNlZCB0aW1lbGluZXMsIGNv
YmluZSByZXN1bHRzCisgICAgICAgICAgICBsZXQgYWxsUmVzdWx0cyA9IFtdOworICAgICAgICAg
ICAgbGV0IGNvbGxhcHNlZFRpbWVsaW5lcyA9IFtdOworICAgICAgICAgICAgY2hpbGRyZW5Db25m
aWdzLmZvckVhY2goY29uZmlnID0+IHsKKyAgICAgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3NC
eVNES1tjb25maWcudG9LZXkoKV0uc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGEuY29tcGFy
ZVNES3MoYik7fSk7CisKKyAgICAgICAgICAgICAgICBsZXQgcmVzdWx0c0ZvckNvbmZpZyA9IFtd
OworICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW2NvbmZpZy50b0tleSgpXS5m
b3JFYWNoKHNka0NvbmZpZyA9PiB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNGb3JDb25m
aWcgPSBjb21iaW5lUmVzdWx0cyhyZXN1bHRzRm9yQ29uZmlnLCByZXN1bHRzQnlLZXlbc2RrQ29u
ZmlnLnRvS2V5KCldKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhbGxS
ZXN1bHRzID0gY29tYmluZVJlc3VsdHMoYWxsUmVzdWx0cywgcmVzdWx0c0ZvckNvbmZpZyk7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBjdXJyZW50RG90cyA9IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAg
bGV0IGxhc3RDb25maWcgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJl
c3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5mb3JFYWNoKHBhaXIgPT4gewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBuZXcgQ29uZmlndXJhdGlvbihwYWlyLmNv
bmZpZ3VyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNv
bmZpZy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG90c1trZXld
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5zZGs7ICAvLyBTdHJpcCBvdXQgc2RrIGluZm9y
bWF0aW9uCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJlSW5kZXgg
PSBjb25maWcuY29tcGFyZShsYXN0Q29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpc1NES0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNES3NbY29uZmlnLnRvS2V5KCld
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXggfHwgaXNTREtF
eHBhbmRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDxk
aXYgY2xhc3M9InNlcmllcyI+JHtEb3QubWVyZ2UoY3VycmVudERvdHMpLm1hcChkb3QgPT4ge3Jl
dHVybiBkb3QudG9TdHJpbmcoKTt9KS5qb2luKCcnKX08L2Rpdj5gOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50RG90cyA9IHt9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGFyZUluZGV4ICYm
IGlzU0RLRXhwYW5kZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAnPGRpdiBjbGFzcz0ic2VyaWVzIj48L2Rpdj4nOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnREb3RzW2tleV0gPSBkb3RzW2tleV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdENvbmZpZyA9IGNvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnREb3RzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke0RvdC5tZXJnZShj
dXJyZW50RG90cykubWFwKGRvdCA9PiB7cmV0dXJuIGRvdC50b1N0cmluZygpO30pLmpvaW4oJycp
fTwvZGl2PmA7CisgICAgICAgICAgICAgICAgbGV0IHF1ZXVlUGFyYW1zID0gY29uZmlnLnRvUGFy
YW1zKCk7CisgICAgICAgICAgICAgICAgcXVldWVQYXJhbXNbJ3N1aXRlJ10gPSBbdGhpcy5zdWl0
ZV07CisgICAgICAgICAgICAgICAgbGV0IG15VGltZWxpbmUgPSBUaW1lbGluZS5TZXJpZXNXaXRo
SGVhZGVyQ29tcG9uZW50KAorICAgICAgICAgICAgICAgICAgICBgJHtjaGlsZHJlbkNvbmZpZ3NC
eVNES1tjb25maWcudG9LZXkoKV0ubGVuZ3RoID4gMSA/ICcgfCAnIDogJyd9PGEgaHJlZj0iL3Vy
bHMvcXVldWU/JHtwYXJhbXNUb1F1ZXJ5KHF1ZXVlUGFyYW1zKX0iIHRhcmdldD0iX2JsYW5rIj4k
e2NvbmZpZ308L2E+YCwKKyAgICAgICAgICAgICAgICAgICAgVGltZWxpbmUuQ2FudmFzU2VyaWVz
Q29tcG9uZW50KHJlc3VsdHNGb3JDb25maWcsIHNjYWxlLCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnZXRTY2FsZUZ1bmM6IG9wdGlvbnMuZ2V0U2NhbGVGdW5jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcGFyZUZ1bmM6IG9wdGlvbnMuY29tcGFyZUZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICByZW5kZXJGYWN0b3J5OiBvcHRpb25zLnJlbmRlckZhY3RvcnksCisgICAgICAg
ICAgICAgICAgICAgICAgICBleHBvcnRlcjogb3B0aW9ucy5leHBvcnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZpZyksCisgICAg
ICAgICAgICAgICAgICAgICAgICBleHBvcnRlcjogZXhwb3J0ZXJGYWN0b3J5KHJlc3VsdHNGb3JD
b25maWcpLAorICAgICAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
Y2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmxlbmd0aCA+IDEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGV0IHRpbWVsaW5lc0J5U0RLID0gW107CisgICAgICAgICAgICAgICAg
ICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW2NvbmZpZy50b0tleSgpXS5mb3JFYWNoKHNka0NvbmZp
ZyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXNCeVNESy5wdXNoKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVsaW5lLlNlcmllc1dpdGhIZWFkZXJDb21wb25l
bnQoYCR7c2RrQ29uZmlnLnNka31gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
aW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQocmVzdWx0c0J5S2V5W3Nka0NvbmZpZy50b0tl
eSgpXSwgc2NhbGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNj
YWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFj
dG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBvcHRp
b25zLmV4cG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Eb3RD
bGljazogb25Eb3RDbGlja0ZhY3Rvcnkoc2RrQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBleHBvcnRlckZhY3RvcnkocmVzdWx0c0J5S2V5W3Nk
a0NvbmZpZy50b0tleSgpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBteVRpbWVsaW5l
ID0gVGltZWxpbmUuRXhwYW5kYWJsZVNlcmllc1dpdGhIZWFkZXJFeHBhbmRlckNvbXBvbmVudCht
eVRpbWVsaW5lLCAuLi50aW1lbGluZXNCeVNESyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGNvbGxhcHNlZFRpbWVsaW5lcy5wdXNoKG15VGltZWxpbmUpOworICAgICAgICAg
ICAgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pLmpvaW4oJycpfQotICAgICAgICAgICAgICAgICAgICAke3JlbmRlclRp
bWVsaW5lKGNvbW1pdHMsIHJlcG9zaXRvcmllcyl9Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0g
ICAgICAgICAgICA8L2Rpdj5gOworICAgICAgICAgICAgaWYgKGNvbGxhcHNlZFRpbWVsaW5lcy5s
ZW5ndGggPT09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGNv
bGxhcHNlZFRpbWVsaW5lcy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNv
bGxhcHNlZFRpbWVsaW5lc1swXS5oZWFkZXIuaW5jbHVkZXMoJ2NsYXNzPSJzZXJpZXMiJykpCisg
ICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZFRpbWVsaW5lc1swXS5oZWFkZXIgPSBUaW1lbGlu
ZS5IZWFkZXJDb21wb25lbnQoY29sbGFwc2VkVGltZWxpbmVzWzBdLmhlYWRlcik7CisgICAgICAg
ICAgICAgICAgY2hpbGRyZW4ucHVzaChjb2xsYXBzZWRUaW1lbGluZXNbMF0pOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2hpbGRyZW4ucHVz
aCgKKyAgICAgICAgICAgICAgICBUaW1lbGluZS5FeHBhbmRhYmxlU2VyaWVzV2l0aEhlYWRlckV4
cGFuZGVyQ29tcG9uZW50KAorICAgICAgICAgICAgICAgIFRpbWVsaW5lLlNlcmllc1dpdGhIZWFk
ZXJDb21wb25lbnQoYCAke2NvbmZpZ3VyYXRpb259YCwKKyAgICAgICAgICAgICAgICAgICAgVGlt
ZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50KGFsbFJlc3VsdHMsIHNjYWxlLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRTY2FsZUZ1bmM6IG9wdGlvbnMuZ2V0U2NhbGVGdW5jLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUZ1bmM6IG9wdGlvbnMuY29tcGFyZUZ1bmMsCisg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGYWN0b3J5OiBvcHRpb25zLnJlbmRlckZhY3Rv
cnksCisgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdENsaWNrOiBvbkRvdENsaWNrRmFjdG9y
eShjb25maWd1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBleHBv
cnRlckZhY3RvcnkoYWxsUmVzdWx0cyksCisgICAgICAgICAgICAgICAgICAgIH0pKSwKKyAgICAg
ICAgICAgICAgICAuLi5jb2xsYXBzZWRUaW1lbGluZXMKKyAgICAgICAgICAgICkpOworICAgICAg
ICB9KTsKKworICAgICAgICBsZXQgdG9wID0gdHJ1ZTsKKyAgICAgICAgc2VsZi54YXhpc1VwZGF0
ZXMgPSBbXTsKKyAgICAgICAgdGhpcy5yZXBvc2l0b3JpZXMgPSByZXBvc2l0b3JpZXNGb3JDb21t
aXRzKGNvbW1pdHMpOworICAgICAgICB0aGlzLnJlcG9zaXRvcmllcy5mb3JFYWNoKHJlcG9zaXRv
cnkgPT4geworICAgICAgICAgICAgY29uc3QgeEF4aXNDb21wb25lbnQgPSB4QXhpc0Zyb21TY2Fs
ZShzY2FsZSwgcmVwb3NpdG9yeSwgc2VsZi54YXhpc1VwZGF0ZXMsIHRvcCk7CisgICAgICAgICAg
ICBpZiAodG9wKQorICAgICAgICAgICAgICAgIGNoaWxkcmVuLnVuc2hpZnQoeEF4aXNDb21wb25l
bnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goeEF4
aXNDb21wb25lbnQpOworICAgICAgICAgICAgdG9wID0gZmFsc2U7CisgICAgICAgIH0pOworCisg
ICAgICAgIGNvbnN0IGNvbXBvc2VyID0gRlAuY29tcG9zZXIoKHVwZGF0ZVRpbWVsaW5lKSA9PiB7
CisgICAgICAgICAgICBzZWxmLnRpbWVsaW5lVXBkYXRlID0gKHhBeGlzZXMpID0+IHsKKyAgICAg
ICAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoMCwgMSk7CisgICAgICAgICAgICAgICAgaWYgKHNl
bGYucmVwb3NpdG9yaWVzLmxlbmd0aCA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVu
LnNwbGljZShjaGlsZHJlbi5sZW5ndGggLSBzZWxmLnJlcG9zaXRvcmllcy5sZW5ndGgsIHNlbGYu
cmVwb3NpdG9yaWVzLmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBsZXQgdG9wID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB4QXhpc2VzLmZvckVhY2goY29tcG9uZW50ID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnVu
c2hpZnQoY29tcG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjb21wb25lbnQpOworICAgICAgICAgICAgICAgICAg
ICB0b3AgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB1cGRh
dGVUaW1lbGluZShjaGlsZHJlbik7CisgICAgICAgICAgICB9OworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIFRpbWVsaW5lLkNhbnZhc0NvbnRhaW5lcihjb21wb3NlciwgLi4uY2hpbGRyZW4p
OwogICAgIH0KIH0KIAorCiBmdW5jdGlvbiBMZWdlbmRMYWJlbChldmVudFN0cmVhbSwgZmlsdGVy
RXhwZWN0ZWRUZXh0LCBmaWx0ZXJVbmV4cGVjdGVkVGV4dCkgewogICAgIGxldCByZWYgPSBSRUYu
Y3JlYXRlUmVmKHsKICAgICAgICAgc3RhdGU6IHdpbGxGaWx0ZXJFeHBlY3RlZCwKQEAgLTY4MCw0
ICs3NzUsNCBAQCBmdW5jdGlvbiBMZWdlbmQoY2FsbGJhY2s9bnVsbCwgcGx1cmFsPWZhCiAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJjb250ZW50Ij4ke3Jlc3VsdH08L2Rpdj48YnI+YDsKIH0KIAot
ZXhwb3J0IHtMZWdlbmQsIFRpbWVsaW5lLCBFeHBlY3RhdGlvbnN9OworZXhwb3J0IHtMZWdlbmQs
IFRpbWVsaW5lRnJvbUVuZHBvaW50LCBFeHBlY3RhdGlvbnN9OwpJbmRleDogVG9vbHMvcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0
bWwJKHJldmlzaW9uIDI0ODI3MCkKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvdGVtcGxhdGVzL3NlYXJjaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IGltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy8KIGltcG9ydCB7RHJhd2Vy
LCBCcmFuY2hTZWxlY3RvciwgQ29uZmlndXJhdGlvblNlbGVjdG9ycywgTGltaXRTbGlkZXJ9IGZy
b20gJy9hc3NldHMvanMvZHJhd2VyLmpzJzsKIGltcG9ydCB7RE9NLCBSRUZ9IGZyb20gJy9saWJy
YXJ5L2pzL1JlZi5qcyc7CiBpbXBvcnQge1NlYXJjaEJhcn0gZnJvbSAnL2Fzc2V0cy9qcy9zZWFy
Y2guanMnOwotaW1wb3J0IHtMZWdlbmQsIFRpbWVsaW5lfSBmcm9tICcvYXNzZXRzL2pzL3RpbWVs
aW5lLmpzJzsKK2ltcG9ydCB7TGVnZW5kLCBUaW1lbGluZUZyb21FbmRwb2ludH0gZnJvbSAnL2Fz
c2V0cy9qcy90aW1lbGluZS5qcyc7CiAKIGNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CiBjb25z
dCBTVUlURVMgPSBKU09OLnBhcnNlKCd7eyBzdWl0ZXN8c2FmZSB9fScpOyAgICAKQEAgLTU1LDcg
KzU1LDcgQEAgY2xhc3MgU2VhcmNoVmlldyB7CiAgICAgICAgICAgICAgICAgc3RhdGUuY2hpbGRy
ZW4ucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgIHN1aXRlOiB0aGlzLmN1cnJlbnRQYXJhbXMu
c3VpdGVbaV0sCiAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuY3VycmVudFBhcmFtcy50
ZXN0W2ldLAotICAgICAgICAgICAgICAgICAgICB0aW1lbGluZTogbmV3IFRpbWVsaW5lKGBhcGkv
cmVzdWx0cy8ke3RoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXX0vJHt0aGlzLmN1cnJlbnRQYXJh
bXMudGVzdFtpXX1gLCB0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV0pLAorICAgICAgICAgICAg
ICAgICAgICB0aW1lbGluZTogbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50KGBhcGkvcmVzdWx0cy8k
e3RoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXX0vJHt0aGlzLmN1cnJlbnRQYXJhbXMudGVzdFtp
XX1gLCB0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV0pLAogICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjksNyArMTI5LDcgQEAgY2xhc3MgU2VhcmNo
VmlldyB7CiAgICAgICAgICAgICAgICAgaWYgKGRpZmYuY2hpbGRyZW4pCiAgICAgICAgICAgICAg
ICAgICAgIERPTS5pbmplY3QoZWxlbWVudCwgTGVnZW5kKCgpID0+IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYucmVmLnN0YXRlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQudGltZWxpbmUucmVyZW5kZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC50aW1lbGluZS51cGRhdGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSkgKyBk
aWZmLmNoaWxkcmVuLm1hcChyZW5kZXJDaGlsZCkuam9pbignJykpOwogICAgICAgICAgICAgICAg
IGlmIChkaWZmLnByZXBlbmRpbmcpIHsKQEAgLTE2MCw3ICsxNjAsOCBAQCBjbGFzcyBTZWFyY2hW
aWV3IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZpbmQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5yZWYuc3RhdGUuY2hpbGRyZW4uc3BsaWNlKHNlYXJjaCwgMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVmLnN0YXRlLmNoaWxkcmVuW3NlYXJjaF0udGltZWxpbmUudGVhcmRvd24oKTsKICAgICAgICAg
ICAgICAgICAgICAgbmVlZFJlUmVuZGVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKCFkaWRGaW5kKSB7CkBAIC0xNjksNyArMTcwLDcgQEAgY2xhc3MgU2Vh
cmNoVmlldyB7CiAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2goewogICAgICAg
ICAgICAgICAgICAgICAgICAgc3VpdGU6IHBhcmFtcy5zdWl0ZVtpXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3Q6IHBhcmFtcy50ZXN0W2ldLAotICAgICAgICAgICAgICAgICAgICAgICAg
dGltZWxpbmU6IG5ldyBUaW1lbGluZShgYXBpL3Jlc3VsdHMvJHtwYXJhbXMuc3VpdGVbaV19LyR7
cGFyYW1zLnRlc3RbaV19YCksCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZTogbmV3
IFRpbWVsaW5lRnJvbUVuZHBvaW50KGBhcGkvcmVzdWx0cy8ke3BhcmFtcy5zdWl0ZVtpXX0vJHtw
YXJhbXMudGVzdFtpXX1gKSwKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtMjM5LDcgKzI0MCw3IEBAIERPTS5pbmplY3QoCiAgICAg
ICAgICAgICBsZXQgY2hpbGQgPSB7CiAgICAgICAgICAgICAgICAgc3VpdGU6IGFyZ3VtZW50c1tp
XS5zdWl0ZSwKICAgICAgICAgICAgICAgICB0ZXN0OiBhcmd1bWVudHNbaV0udGVzdCwKLSAgICAg
ICAgICAgICAgICB0aW1lbGluZTogbmV3IFRpbWVsaW5lKGBhcGkvcmVzdWx0cy8ke2FyZ3VtZW50
c1tpXS5zdWl0ZX0vJHthcmd1bWVudHNbaV0udGVzdH1gKSwKKyAgICAgICAgICAgICAgICB0aW1l
bGluZTogbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50KGBhcGkvcmVzdWx0cy8ke2FyZ3VtZW50c1tp
XS5zdWl0ZX0vJHthcmd1bWVudHNbaV0udGVzdH1gKSwKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgdmlldy5yZWYuc2V0U3RhdGUoe3ByZXBlbmRpbmc6IFtjaGlsZF19KTsKSW5kZXg6IFRv
b2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3Rl
bXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWwJKHJldmlzaW9uIDI0ODI3MCkKKysrIFRvb2xzL3Jl
c3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBpbXBvcnQge2RlZXBDb21wYXJlLCBFcnJv
ckRpc3BsYXksIHF1ZXJ5CiBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMv
Y29uZmlndXJhdGlvbi5qcyc7CiBpbXBvcnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENvbmZp
Z3VyYXRpb25TZWxlY3RvcnMsIExpbWl0U2xpZGVyfSBmcm9tICcvYXNzZXRzL2pzL2RyYXdlci5q
cyc7CiBpbXBvcnQge0RPTSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOwotaW1wb3J0
IHtMZWdlbmQsIFRpbWVsaW5lfSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKK2ltcG9y
dCB7TGVnZW5kLCBUaW1lbGluZUZyb21FbmRwb2ludH0gZnJvbSAnL2Fzc2V0cy9qcy90aW1lbGlu
ZS5qcyc7CiAKIGNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CiBjb25zdCBTVUlURVMgPSBKU09O
LnBhcnNlKCd7eyBzdWl0ZXN8c2FmZSB9fScpOyAgICAKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3Mg
TWFpblZpZXcgewogICAgICAgICB0aGlzLmNoaWxkcmVuID0ge307CiAKICAgICAgICAgU1VJVEVT
LmZvckVhY2goKHN1aXRlKSA9PiB7Ci0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW3N1aXRlXSA9
IG5ldyBUaW1lbGluZSgnYXBpL3Jlc3VsdHMvJyArIHN1aXRlLCBzdWl0ZSk7CisgICAgICAgICAg
ICB0aGlzLmNoaWxkcmVuW3N1aXRlXSA9IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludCgnYXBpL3Jl
c3VsdHMvJyArIHN1aXRlLCBzdWl0ZSk7CiAgICAgICAgIH0pOwogICAgIH0KICAgICB1bnBhY2tT
dWl0ZXMoc3VpdGVzSnNvbikgewpAQCAtODEsOSArODEsMTAgQEAgY2xhc3MgTWFpblZpZXcgewog
ICAgICAgICB9KTsKIAogICAgICAgICBsZXQgc29ydGVkU3VpdGVzID0gWy4uLnN1aXRlc10uc29y
dCgpOworICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKGtleSA9PiB7
dGhpcy5jaGlsZHJlbltrZXldLnRlYXJkb3duKCk7fSk7CiAgICAgICAgIHRoaXMuY2hpbGRyZW4g
PSB7fTsKICAgICAgICAgc29ydGVkU3VpdGVzLmZvckVhY2goKHN1aXRlKSA9PiB7Ci0gICAgICAg
ICAgICB0aGlzLmNoaWxkcmVuW3N1aXRlXSA9IG5ldyBUaW1lbGluZSgnYXBpL3Jlc3VsdHMvJyAr
IHN1aXRlKTsKKyAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5l
RnJvbUVuZHBvaW50KCdhcGkvcmVzdWx0cy8nICsgc3VpdGUpOwogICAgICAgICB9KTsKICAgICAg
ICAgcmV0dXJuIHNvcnRlZFN1aXRlczsKICAgICB9CkBAIC0xNDMsNyArMTQ0LDcgQEAgY2xhc3Mg
TWFpblZpZXcgewogICAgICAgICBsZXQgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwogICAgICAg
ICByZXR1cm4gTGVnZW5kKCgpID0+IHsKICAgICAgICAgICAgIGZvciAobGV0IHN1aXRlIGluIGNo
aWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW5bc3VpdGVdLnJlcmVuZGVyKCk7Cisg
ICAgICAgICAgICAgICAgY2hpbGRyZW5bc3VpdGVdLnVwZGF0ZSgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9LCB0cnVlKSArIHN1aXRlcy5tYXAoc3VpdGUgPT4gewogICAgICAgICAgICAgcmV0
dXJuIGA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375638</attachid>
            <date>2019-08-06 11:54:18 -0700</date>
            <delta_ts>2019-08-07 17:15:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200172-20190806115417.patch</filename>
            <type>text/plain</type>
            <size>55082</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODMwNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDE5LTA4LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAgKENv
bW1pdC5jb25zdHJ1Y3Rvcik6IE1ha2UgdXVpZCBhIG1lbWJlciB2YXJpYWJsZSBpbnN0ZWFkIG9m
IGEgbWVtYmVyIGZ1bmN0aW9uIGZvciBlZmZpY2llbmN5LgorICAgICAgICAoQ29tbWl0LmNvbXBh
cmUpOiBEaXR0by4KKyAgICAgICAgKF9Db21taXRCYW5rLmNvbW1pdEJ5VXVpZCk6IERpdHRvLgor
ICAgICAgICAoX0NvbW1pdEJhbmsuX2xvYWRTaWJsaW5ncyk6IERpdHRvLgorICAgICAgICAoX0Nv
bW1pdEJhbmsuX2xvYWQpOiBEaXR0by4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qczoKKyAgICAgICAgKHRpY2tGb3JDb21taXQpOiBE
ZWxldGVkLgorICAgICAgICAobWluaW11bVV1aWRGb3JSZXN1bHRzKTogR2l2ZW4gYSBkaWN0aW9u
YXJ5IG9mIHJlc3VsdCBsaXN0cywgZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIFVVSUQKKyAgICAgICAg
d2hpY2ggZW5jb21wYXNzZXMgYWxsIHJlc3VsdHMuIENydWNpYWxseSwgdGhpcyBmdW5jdGlvbiBt
dXN0IGV4Y2x1ZGUgYW4gVVVJRHMgd2hpY2ggbWF5CisgICAgICAgIHJlZmVyIHRvIHJlc3VsdHMg
ZXhjbHVkZWQgYmVjYXVzZSBvZiB0aGUgbGltaXQgYXJndW1lbnQuCisgICAgICAgIChyZW5kZXJU
aW1lbGluZSk6IERlbGV0ZWQuCisgICAgICAgIChjb21taXRzRm9yUmVzdWx0cyk6IEdpdmVuIGEg
ZGljdGlvbmFyeSBvZiByZXN1bHQgbGlzdHMsIHJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBhc3Nv
Y2lhdGVkCisgICAgICAgIHdpdGggdGhvc2UgcmVzdWx0cy4KKyAgICAgICAgKHNjYWxlRm9yQ29t
bWl0cyk6IEdpdmVuIGEgbGlzdCBvZiBjb21taXRzLCBnZW5lcmF0ZSBhIHNjYWxlIHRvIGJlIGNv
bnN1bWVkIGJ5IHRoZSBjYW52YXMgVGltZWxpbmUuCisgICAgICAgIChyZXBvc2l0b3JpZXNGb3JD
b21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIHJldHVybiBhIHNvcnRlZCBsaXN0IG9m
IGFzc29jaWF0ZWQgcmVwb3NpdG9yeSBpZHMuCisgICAgICAgICh4QXhpc0Zyb21TY2FsZSk6IENy
ZWF0ZSBhIGNhbnZhcy1iYXNlZCB4LWF4aXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxlIGFu
ZCBhIHJlcG9zaXRvcnkgaWQuCisgICAgICAgIChpblBsYWNlQ29tYmluZSk6IENvbWJpbmUgcmVz
dWx0IG9iamVjdHMgdG9nZXRoZXIuCisgICAgICAgIChzdGF0c0ZvclNpbmdsZVJlc3VsdCk6IFR1
cm4gYSBzaW5nbGUgcmVzdWx0IGludG8gYSBzdGF0IG9iamVjdC4KKyAgICAgICAgKGNvbWJpbmVS
ZXN1bHRzKTogR2l2ZW4gbGlzdHMgb2YgcmVzdWx0cywgY29tYmluZSB0aGVzZSBsaXN0cyB3aGls
ZSBrZWVwaW5nIHRoZSBvcmlnaW5hbCBsaXN0cyB1bmNoYW5nZWQuCisgICAgICAgIChEb3QpOiBE
ZWxldGVkLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQpOiBSZW5hbWVkIGZyb20gVGlt
ZWxpbmUuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC5jb25zdHJ1Y3Rvcik6IENhbnZh
cyBUaW1lbGluZSBtYW5hZ2VzIGV4cGFuc2lvbiBhbmQgY29sbGFwc2luZyBvZiBuZXN0ZWQgdGlt
ZWxpbmVzLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQudGVhcmRvd24pOiBEZXRhY2gg
Y2FsbGJhY2tzIGZyb20gQ29tbWl0QmFuay4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50
LnVwZGF0ZSk6IFVwZGF0ZSB3aXRoIGFueSBuZXcgY29tbWl0IGluZm9ybWF0aW9uLCBmb3JjZSBh
IHJlLWRyYXcgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgY2FjaGUgY29udGVudHMuCisgICAgICAg
IChUaW1lbGluZUZyb21FbmRwb2ludC5yZWxvYWQpOiBSZW1vdmUgbWFuYWdlbWVudCBvZiBuZXN0
ZWQgdGltZWxpbmVzLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucmVuZGVyKTogVXNl
IGNhbnZhcyBUaW1lbGluZSBpbnN0ZWFkIG9mIGh0bWwgdGltZWxpbmUgdG8gdmlzdWFsaXplIHJl
c3VsdHMuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMv
c2VhcmNoLmh0bWw6IFVzZSBUaW1lbGluZUZyb21FbmRwb2ludCBjbGFzcy4KKyAgICAgICAgKiBy
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWw6
IERpdHRvLgorCiAyMDE5LTA4LTA2ICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBbcmVzdWx0cy53ZWJraXQub3JnIFRpbWVsaW5lXSBQZXJmb3JtYW5jZSBp
bXByb3ZlbWVudHMKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3Rh
dGljL2pzL2NvbW1pdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRz
ZGJweS92aWV3L3N0YXRpYy9qcy9jb21taXQuanMJKHJldmlzaW9uIDI0ODMwNikKKysrIFRvb2xz
L3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTI3LDEyICsxMjcsMTAgQEAgY2xhc3MgQ29tbWl0IHsKICAgICAgICAgdGhp
cy5vcmRlciA9IGpzb24ub3JkZXI7CiAgICAgICAgIHRoaXMucmVwb3NpdG9yeV9pZCA9IGpzb24u
cmVwb3NpdG9yeV9pZDsKICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBqc29uLnRpbWVzdGFtcDsK
LSAgICB9Ci0gICAgdXVpZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudGltZXN0YW1wICogVElN
RVNUQU1QX1RPX1VVSURfTVVMVElQTElFUiArIHRoaXMub3JkZXI7CisgICAgICAgIHRoaXMudXVp
ZCA9IHRoaXMudGltZXN0YW1wICogVElNRVNUQU1QX1RPX1VVSURfTVVMVElQTElFUiArIHRoaXMu
b3JkZXI7CiAgICAgfQogICAgIGNvbXBhcmUoY29tbWl0KSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LnV1aWQoKSAtIGNvbW1pdC51dWlkKCk7CisgICAgICAgIHJldHVybiB0aGlzLnV1aWQgLSBjb21t
aXQudXVpZDsKICAgICB9CiB9OwogCkBAIC0xNTUsOSArMTUzLDkgQEAgY2xhc3MgX0NvbW1pdEJh
bmsgewogICAgICAgICB3aGlsZSAoYmVnaW4gPD0gZW5kKSB7CiAgICAgICAgICAgICBjb25zdCBt
aWQgPSBNYXRoLmNlaWwoKGJlZ2luICsgZW5kKSAvIDIpOwogICAgICAgICAgICAgY29uc3QgY2Fu
ZGlkYXRlID0gdGhpcy5jb21taXRzW21pZF07Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLnV1
aWQoKSA9PT0gdXVpZCkKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudXVpZCA9PT0gdXVpZCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOwotICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS51dWlkKCkgPCB1dWlkKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS51dWlkIDwgdXVp
ZCkKICAgICAgICAgICAgICAgICBiZWdpbiA9IG1pZCArIDE7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgZW5kID0gbWlkIC0gMTsKQEAgLTE4MywxMiArMTgxLDEyIEBAIGNsYXNz
IF9Db21taXRCYW5rIHsKICAgICAgICAgICAgICAgICAgICAganNvbltrZXldLmZvckVhY2goY29t
bWl0SnNvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21taXQgPSBuZXcg
Q29tbWl0KGNvbW1pdEpzb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4
ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb21taXRzW2lu
ZGV4XS51dWlkKCkgPCBjb21taXQudXVpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNlbGYuY29tbWl0c1tpbmRleF0udXVpZCA8IGNvbW1pdC51dWlkKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0cy5zcGxpY2UoaW5kZXgsIDAsIGNv
bW1pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5kZXg7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb21taXRzW2luZGV4
XS51dWlkKCkgPT09IGNvbW1pdC51dWlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNlbGYuY29tbWl0c1tpbmRleF0udXVpZCA9PT0gY29tbWl0LnV1aWQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0taW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNDAsMTIgKzIzOCwxMiBA
QCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudEZvclJl
cG9zaXRvcnkuc2V0KGNvbW1pdC5yZXBvc2l0b3J5X2lkLCBjb3VudEZvclJlcG9zaXRvcnkuZ2V0
KGNvbW1pdC5yZXBvc2l0b3J5X2lkKSArIDEpOwogCiAgICAgICAgICAgICAgICAgICAgIHdoaWxl
IChjb21taXRzSW5kZXggPCBzZWxmLmNvbW1pdHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2VsZi5jb21taXRzW2NvbW1pdHNJbmRleF0udXVpZCgpID4gY29tbWl0LnV1
aWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29tbWl0c1tjb21taXRz
SW5kZXhdLnV1aWQgPiBjb21taXQudXVpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuY29tbWl0cy5zcGxpY2UoY29tbWl0c0luZGV4LCAwLCBjb21taXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsrY29tbWl0c0luZGV4OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNlbGYuY29tbWl0c1tjb21taXRzSW5kZXhdLnV1aWQoKSA9PT0gY29tbWl0
LnV1aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbW1pdHNbY29tbWl0
c0luZGV4XS51dWlkID09PSBjb21taXQudXVpZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICsrY29tbWl0c0luZGV4OwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC0yNjAsNyArMjU4LDcgQEAgY2xhc3MgX0NvbW1pdEJhbmsgewog
ICAgICAgICAgICAgICAgIGNvdW50Rm9yUmVwb3NpdG9yeS5mb3JFYWNoKChjb3VudCwgcmVwbykg
PT4gewogICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IGxpbWl0KSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgY29tbWl0ID0gbmV3IENvbW1pdChqc29uW2ZpcnN0SW5kZXhG
b3JSZXBvc2l0b3J5LmdldChyZXBvKV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbWluRm91
bmQgPSBNYXRoLm1heChtaW5Gb3VuZCwgY29tbWl0LnV1aWQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtaW5Gb3VuZCA9IE1hdGgubWF4KG1pbkZvdW5kLCBjb21taXQudXVpZCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBp
ZiAobWluRm91bmQgIT0gYmVnaW5VdWlkKQpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0
c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUuanMJKHJldmlzaW9u
IDI0ODMwNikKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pz
L3RpbWVsaW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw4IEBACiBpbXBvcnQge0Nv
bW1pdEJhbmt9IGZyb20gJy9hc3NldHMvanMvY29tbWl0LmpzJzsKIGltcG9ydCB7Q29uZmlndXJh
dGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0aW9uLmpzJzsKIGltcG9ydCB7ZGVlcENv
bXBhcmUsIEVycm9yRGlzcGxheSwgcGFyYW1zVG9RdWVyeSwgcXVlcnlUb1BhcmFtc30gZnJvbSAn
L2Fzc2V0cy9qcy9jb21tb24uanMnOwotaW1wb3J0IHtET00sIEV2ZW50U3RyZWFtLCBSRUZ9IGZy
b20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CitpbXBvcnQge0RPTSwgRXZlbnRTdHJlYW0sIFJFRiwg
RlB9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7CitpbXBvcnQge1RpbWVsaW5lfSBmcm9tICcv
bGlicmFyeS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qcyc7CiAKIAogY29uc3Qg
REVGQVVMVF9MSU1JVCA9IDEwMDsKQEAgLTcxLDE2NSArNzIsMjg4IEBAIGNsYXNzIEV4cGVjdGF0
aW9ucwogfQogbGV0IHdpbGxGaWx0ZXJFeHBlY3RlZCA9IGZhbHNlOwogCi1mdW5jdGlvbiB0aWNr
Rm9yQ29tbWl0KGNvbW1pdCwgc2NhbGUpIHsKLSAgICBsZXQgcGFyYW1zID0gewotICAgICAgICBi
cmFuY2g6IGNvbW1pdC5icmFuY2ggPyBbY29tbWl0LmJyYW5jaF0gOiBxdWVyeVRvUGFyYW1zKGRv
Y3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKS5icmFuY2gsCi0gICAgICAgIHV1aWQ6IFtjb21taXQu
dXVpZCgpXSwKLSAgICB9Ci0gICAgaWYgKCFwYXJhbXMuYnJhbmNoKQotICAgICAgICBkZWxldGUg
cGFyYW1zLmJyYW5jaDsKLSAgICBjb25zdCBxdWVyeSA9IHBhcmFtc1RvUXVlcnkocGFyYW1zKTsK
LQotICAgIGlmIChzY2FsZSA8PSAwKQotICAgICAgICByZXR1cm4gJyc7Ci0gICAgaWYgKHNjYWxl
ID09PSAxKQotICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNjYWxlIj4KLSAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJsaW5lIj48L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0idGV4dCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvY29tbWl0PyR7
cXVlcnl9IiB0YXJnZXQ9Il9ibGFuayI+JHtTdHJpbmcoY29tbWl0LmlkKS5zdWJzdHJpbmcoMCwx
MCl9PC9hPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rp
dj5gOwotICAgIGxldCByZXN1bHQgPSAnJzsKLSAgICB3aGlsZSAoc2NhbGUgPiAwKSB7Ci0gICAg
ICAgIGxldCBjb3VudFRvVXNlID0gc2NhbGU7Ci0gICAgICAgIGlmIChjb3VudFRvVXNlID09PSAx
MSB8fCBjb3VudFRvVXNlID09IDEyKQotICAgICAgICAgICAgY291bnRUb1VzZSA9IDY7Ci0gICAg
ICAgIGVsc2UgaWYgKGNvdW50VG9Vc2UgPiAxMCkKLSAgICAgICAgICAgIGNvdW50VG9Vc2UgPSAx
MDsKLSAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzY2FsZSBncm91cC0ke2NvdW50VG9V
c2V9Ij4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItbGluZS1sZWZ0Ij48L2Rp
dj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lIj48L2Rpdj4KLSAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJ0ZXh0Ij4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2Nv
bW1pdD8ke3F1ZXJ5fSIgdGFyZ2V0PSJfYmxhbmsiPiR7U3RyaW5nKGNvbW1pdC5pZCkuc3Vic3Ry
aW5nKDAsMTApfTwvYT4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJib3JkZXItbGluZS1yaWdodCI+PC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj5g
OwotICAgICAgICBzY2FsZSAtPSBjb3VudFRvVXNlOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQorZnVuY3Rpb24gbWluaW11bVV1aWRGb3JSZXN1bHRzKHJlc3VsdHMsIGxpbWl0KSB7Cisg
ICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTApOworICAgIGxldCBtaW5E
aXNwbGF5ZWRVdWlkID0gbm93OworICAgIGxldCBtYXhMaW1pdGVkVXVpZCA9IDA7CisKKyAgICBP
YmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKChrZXkpID0+IHsKKyAgICAgICAgcmVzdWx0c1tr
ZXldLmZvckVhY2gocGFpciA9PiB7CisgICAgICAgICAgICBpZiAoIXBhaXIucmVzdWx0cy5sZW5n
dGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGxpbWl0ICE9PSAx
ICYmIGxpbWl0ID09PSBwYWlyLnJlc3VsdHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIG1heExp
bWl0ZWRVdWlkID0gTWF0aC5tYXgocGFpci5yZXN1bHRzWzBdLnV1aWQsIG1heExpbWl0ZWRVdWlk
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpbWl0ID09PSAxKQorICAgICAgICAgICAgICAgIG1p
bkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3VsdHNbcGFpci5yZXN1bHRzLmxlbmd0
aCAtIDFdLnV1aWQsIG1pbkRpc3BsYXllZFV1aWQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3VsdHNbMF0udXVp
ZCwgbWluRGlzcGxheWVkVXVpZCk7CisgICAgICAgIH0pOworICAgIH0pOwogCi1mdW5jdGlvbiBy
ZW5kZXJUaW1lbGluZShjb21taXRzLCByZXBvc2l0b3JpZXMgPSBbXSwgdG9wID0gZmFsc2UpIHsK
LSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBicmVha3Mgd2l0aCBtb3JlIHRoYW4gMyByZXBv
c2l0b3JpZXMgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vNTEwNDI5ODE+Ci0gICAgaWYgKHJl
cG9zaXRvcmllcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgaWYgKHRvcCkKLSAgICAgICAgICAg
IHJldHVybiAnJzsKLSAgICAgICAgcmVwb3NpdG9yaWVzID0gW251bGxdOwotICAgIH0KLSAgICBj
b25zdCBzdGFydCA9IHRvcCA/IE1hdGguY2VpbChyZXBvc2l0b3JpZXMubGVuZ3RoIC8gMikgOiAw
OwotICAgIGNvbnN0IGVuZCA9IHRvcCA/IHJlcG9zaXRvcmllcy5sZW5ndGggOiBNYXRoLmNlaWwo
cmVwb3NpdG9yaWVzLmxlbmd0aCAvIDIpOwotICAgIGNvbnN0IG51bWJlck9mRWxlbWVudHMgPSBj
b21taXRzLmxlbmd0aCAtIE1hdGgubWF4KHJlcG9zaXRvcmllcy5sZW5ndGggLSAxLCAwKQotICAg
IHJldHVybiByZXBvc2l0b3JpZXMuc2xpY2Uoc3RhcnQsIGVuZCkubWFwKHJlcG9zaXRvcnkgPT4g
ewotICAgICAgICBsZXQgY29tbWl0c0Zyb21PdGhlclJlcG9zID0gMDsKLSAgICAgICAgbGV0IHJl
bmRlcmVkRWxlbWVudHMgPSAwOwotICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9IngtYXhpcyAk
e3RvcCA/ICd0b3AnIDogJyd9Ij4KLSAgICAgICAgICAgICAgICAke2NvbW1pdHMubWFwKGNvbW1p
dCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCAmJiBj
b21taXQucmVwb3NpdG9yeV9pZCAhPT0gcmVwb3NpdG9yeSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgKytjb21taXRzRnJvbU90aGVyUmVwb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2NhbGUgPSAgTWF0aC5taW4oY29tbWl0c0Zyb21PdGhlclJlcG9zICsgMSwgbnVtYmVyT2ZF
bGVtZW50cyAtIHJlbmRlcmVkRWxlbWVudHMpOwotICAgICAgICAgICAgICAgICAgICBjb21taXRz
RnJvbU90aGVyUmVwb3MgPSAwOwotICAgICAgICAgICAgICAgICAgICByZW5kZXJlZEVsZW1lbnRz
ICs9IHNjYWxlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlja0ZvckNvbW1pdChjb21t
aXQsIHNjYWxlKTsKLSAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KLSAgICAgICAgICAgIDwv
ZGl2PmA7Ci0gICAgfSkuam9pbignJyk7CisgICAgaWYgKG1pbkRpc3BsYXllZFV1aWQgPT09IG5v
dykKKyAgICAgICAgcmV0dXJuIG1heExpbWl0ZWRVdWlkOworICAgIHJldHVybiBNYXRoLm1heCht
aW5EaXNwbGF5ZWRVdWlkLCBtYXhMaW1pdGVkVXVpZCk7CiB9CiAKLWNsYXNzIERvdCB7Ci0gICAg
c3RhdGljIG1lcmdlKGRvdHMgPSB7fSkgewotICAgICAgICBsZXQgcmVzdWx0ID0gW107Ci0gICAg
ICAgIGxldCBpbmRleCA9IDA7Ci0gICAgICAgIGxldCBoYXNEYXRhID0gdHJ1ZTsKLQotICAgICAg
ICB3aGlsZSAoaGFzRGF0YSkgewotICAgICAgICAgICAgbGV0IGRvdCA9IG5ldyBEb3QoKTsKLSAg
ICAgICAgICAgIGhhc0RhdGEgPSBmYWxzZTsKLQotICAgICAgICAgICAgT2JqZWN0LmtleXMoZG90
cykuZm9yRWFjaChrZXkgPT4gewotICAgICAgICAgICAgICAgIGlmIChkb3RzW2tleV0ubGVuZ3Ro
IDw9IGluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
aGFzRGF0YSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkb3RzW2tleV1baW5kZXhdLmNv
dW50KQorZnVuY3Rpb24gY29tbWl0c0ZvclJlc3VsdHMocmVzdWx0cywgbGltaXQsIGFsbENvbW1p
dHMgPSB0cnVlKSB7CisgICAgY29uc3QgbWluRGlzcGxheWVkVXVpZCA9IG1pbmltdW1VdWlkRm9y
UmVzdWx0cyhsaW1pdCk7CisgICAgbGV0IGNvbW1pdHMgPSBbXTsKKyAgICBsZXQgcmVwb3NpdG9y
aWVzID0gbmV3IFNldCgpOworICAgIGxldCBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5r
LmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKChr
ZXkpID0+IHsKKyAgICAgICAgcmVzdWx0c1trZXldLmZvckVhY2gocGFpciA9PiB7CisgICAgICAg
ICAgICBwYWlyLnJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4geworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQudXVpZCA8IG1pbkRpc3BsYXllZFV1aWQpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZG90LmNvdW50KQotICAgICAgICAgICAgICAgICAg
ICBkb3QuY29tYmluZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxldCBjYW5kaWRhdGVDb21t
aXRzID0gW107CiAKLSAgICAgICAgICAgICAgICBkb3QuY291bnQgKz0gZG90c1trZXldW2luZGV4
XS5jb3VudDsKLSAgICAgICAgICAgICAgICBkb3QuZmFpbGVkICs9IGRvdHNba2V5XVtpbmRleF0u
ZmFpbGVkOwotICAgICAgICAgICAgICAgIGRvdC50aW1lb3V0ICs9IGRvdHNba2V5XVtpbmRleF0u
dGltZW91dDsKLSAgICAgICAgICAgICAgICBkb3QuY3Jhc2ggKz0gZG90c1trZXldW2luZGV4XS5j
cmFzaDsKLSAgICAgICAgICAgICAgICBpZiAoZG90LmNvbWJpbmVkKQotICAgICAgICAgICAgICAg
ICAgICBkb3QubGluayA9IG51bGw7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBkb3QubGluayA9IGRvdHNba2V5XVtpbmRleF0ubGluazsKKyAgICAgICAgICAgICAg
ICBpZiAoIWFsbENvbW1pdHMpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb21taXRJbmRl
eCA9IENvbW1pdEJhbmsuY29tbWl0cy5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgIHdoaWxl
IChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQ29t
bWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0udXVpZCA8IHJlc3VsdC51dWlkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
bGxDb21taXRzIHx8IENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQg
PT09IHJlc3VsdC51dWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0
cy5wdXNoKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdKTsKKyAgICAgICAg
ICAgICAgICAgICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVDb21taXRzLmxlbmd0aCA9PT0gMCB8fCBjYW5kaWRh
dGVDb21taXRzW2NhbmRpZGF0ZUNvbW1pdHMubGVuZ3RoIC0gMV0udXVpZCAhPT0gcmVzdWx0LnV1
aWQpCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZDogJz8nLAorICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDog
cmVzdWx0LnV1aWQsCisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
bGV0IGluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLmZvckVhY2go
Y29tbWl0ID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC5yZXBvc2l0b3J5X2lk
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmFkZChjb21taXQucmVwb3Np
dG9yeV9pZCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGNvbW1pdHMubGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQgPT09IGNvbW1p
dHNbaW5kZXhdLnV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkID4gY29tbWl0c1tpbmRleF0udXVp
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuc3BsaWNlKGluZGV4LCAw
LCBjb21taXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1p
dCk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlm
IChoYXNEYXRhKQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRvdCk7Ci0gICAgICAgICAg
ICArK2luZGV4OworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBpZiAoY3VycmVudENvbW1pdElu
ZGV4ID49IDAgJiYgY29tbWl0cy5sZW5ndGgpIHsKKyAgICAgICAgbGV0IHRyYWlsaW5nUmVwb3Np
dG9yaWVzID0gbmV3IFNldChyZXBvc2l0b3JpZXMpOworICAgICAgICB0cmFpbGluZ1JlcG9zaXRv
cmllcy5kZWxldGUoY29tbWl0c1tjb21taXRzLmxlbmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOwor
ICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYgdHJhaWxpbmdSZXBvc2l0
b3JpZXMuc2l6ZSkgeworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gQ29tbWl0QmFuay5jb21t
aXRzW2N1cnJlbnRDb21taXRJbmRleF07CisgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0
b3JpZXMuaGFzKGNvbW1pdC5yZXBvc2l0b3J5X2lkKSkgeworICAgICAgICAgICAgICAgIGNvbW1p
dHMucHVzaChjb21taXQpOworICAgICAgICAgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRl
bGV0ZShjb21taXQucmVwb3NpdG9yeV9pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAt
LWN1cnJlbnRDb21taXRJbmRleDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KLSAgICBjb25zdHJ1Y3Rvcihjb3VudCA9IDAsIGZhaWxlZCA9IDAsIHRpbWVvdXQgPSAw
LCBjcmFzaCA9IDAsIGNvbWJpbmVkID0gZmFsc2UsIGxpbmsgPSBudWxsKSB7Ci0gICAgICAgIHRo
aXMuY291bnQgPSBjb3VudDsKLSAgICAgICAgdGhpcy5mYWlsZWQgPSBmYWlsZWQ7Ci0gICAgICAg
IHRoaXMudGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgICAgIHRoaXMuY3Jhc2ggPSBjcmFzaDsKLSAg
ICAgICAgdGhpcy5jb21iaW5lZCA9IGNvbWJpbmVkOwotICAgICAgICB0aGlzLmxpbmsgPSBsaW5r
OworCisgICAgcmVwb3NpdG9yaWVzID0gWy4uLnJlcG9zaXRvcmllc107CisgICAgcmVwb3NpdG9y
aWVzLnNvcnQoKTsKKyAgICByZXR1cm4gY29tbWl0czsKK30KKworZnVuY3Rpb24gc2NhbGVGb3JD
b21taXRzKGNvbW1pdHMpIHsKKyAgICBsZXQgc2NhbGUgPSBbXTsKKyAgICBmb3IgKGxldCBpID0g
Y29tbWl0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCByZXBvc2l0
b3J5X2lkID0gY29tbWl0c1tpXS5yZXBvc2l0b3J5X2lkID8gY29tbWl0c1tpXS5yZXBvc2l0b3J5
X2lkIDogJz8nOworICAgICAgICBzY2FsZS51bnNoaWZ0KHt9KTsKKyAgICAgICAgc2NhbGVbMF1b
cmVwb3NpdG9yeV9pZF0gPSBjb21taXRzW2ldOworICAgICAgICBpZiAoc2NhbGUubGVuZ3RoIDwg
MikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBPYmplY3Qua2V5cyhzY2FsZVsxXSku
Zm9yRWFjaCgoa2V5KSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5ID09PSByZXBvc2l0b3J5X2lk
IHx8IGtleSA9PT0gJz8nIHx8IGtleSA9PT0gJ3V1aWQnKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHNjYWxlWzBdW2tleV0gPSBzY2FsZVsxXVtrZXldOworICAgICAgICB9
KTsKKyAgICAgICAgc2NhbGVbMF0udXVpZCA9IE1hdGgubWF4KC4uLk9iamVjdC5rZXlzKHNjYWxl
WzBdKS5tYXAoKGtleSkgPT4geworICAgICAgICAgICAgcmV0dXJuIHNjYWxlWzBdW2tleV0udXVp
ZDsKKyAgICAgICAgfSkpOwogICAgIH0KLSAgICB0b1N0cmluZygpIHsKLSAgICAgICAgaWYgKCF0
aGlzLmNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJkb3QgZW1wdHkiPjwv
ZGl2PmA7CisgICAgcmV0dXJuIHNjYWxlOworfQogCi0gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlz
OworZnVuY3Rpb24gcmVwb3NpdG9yaWVzRm9yQ29tbWl0cyhjb21taXRzKSB7CisgICAgbGV0IHJl
cG9zaXRvcmllcyA9IG5ldyBTZXQoKTsKKyAgICBjb21taXRzLmZvckVhY2goKGNvbW1pdCkgPT4g
eworICAgICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQpCisgICAgICAgICAgICByZXBvc2l0
b3JpZXMuYWRkKGNvbW1pdC5yZXBvc2l0b3J5X2lkKTsKKyAgICB9KTsKKyAgICByZXBvc2l0b3Jp
ZXMgPSBbLi4ucmVwb3NpdG9yaWVzXTsKKyAgICBpZiAoIXJlcG9zaXRvcmllcy5sZW5ndGgpCisg
ICAgICAgIHJlcG9zaXRvcmllcyA9IFsnPyddOworICAgIHJlcG9zaXRvcmllcy5zb3J0KCk7Cisg
ICAgcmV0dXJuIHJlcG9zaXRvcmllczsKK30KIAotICAgICAgICBmdW5jdGlvbiByZW5kZXIoY3Nz
Q2xhc3MsIGluc2lkZT0nJykgewotICAgICAgICAgICAgaWYgKHNlbGYubGluaykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYDxhIGhyZWY9IiR7c2VsZi5saW5rfSIgdGFyZ2V0PSJfYmxhbmsiIGNs
YXNzPSIke2Nzc0NsYXNzfSI+JHtpbnNpZGV9PC9hPmA7Ci0gICAgICAgICAgICByZXR1cm4gYDxk
aXYgY2xhc3M9IiR7Y3NzQ2xhc3N9Ij4ke2luc2lkZX08L2Rpdj5gOworZnVuY3Rpb24geEF4aXNG
cm9tU2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHVwZGF0ZXNBcnJheSwgaXNUb3A9ZmFsc2UpCit7
CisgICAgZnVuY3Rpb24gc2NhbGVGb3JSZXBvc2l0b3J5KHNjYWxlKSB7CisgICAgICAgIHJldHVy
biBzY2FsZS5tYXAobm9kZSA9PiB7CisgICAgICAgICAgICBsZXQgY29tbWl0ID0gbm9kZVtyZXBv
c2l0b3J5XTsKKyAgICAgICAgICAgIGlmICghY29tbWl0KQorICAgICAgICAgICAgICAgIGNvbW1p
dCA9IG5vZGVbJz8nXTsKKyAgICAgICAgICAgIGlmICghY29tbWl0KQorICAgICAgICAgICAgICAg
IHJldHVybiB7aWQ6ICcnLCB1dWlkOiBudWxsfTsKKyAgICAgICAgICAgIHJldHVybiBjb21taXQ7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBUaW1lbGluZS5DYW52YXNYQXhpc0Nv
bXBvbmVudChzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpLCB7CisgICAgICAgIGlzVG9wOiBpc1Rv
cCwKKyAgICAgICAgaGVpZ2h0OiAxMzAsCisgICAgICAgIG9uU2NhbGVDbGljazogKG5vZGUpID0+
IHsKKyAgICAgICAgICAgIGlmICghbm9kZS5sYWJlbC5pZCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBsZXQgcGFyYW1zID0geworICAgICAgICAgICAgICAgIGJyYW5jaDog
bm9kZS5sYWJlbC5icmFuY2ggPyBbbm9kZS5sYWJlbC5icmFuY2hdIDogcXVlcnlUb1BhcmFtcyhk
b2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoLAorICAgICAgICAgICAgICAgIHV1aWQ6
IFtub2RlLmxhYmVsLnV1aWRdLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXJh
bXMuYnJhbmNoKQorICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuYnJhbmNoOworICAgICAg
ICAgICAgY29uc3QgcXVlcnkgPSBwYXJhbXNUb1F1ZXJ5KHBhcmFtcyk7CisgICAgICAgICAgICB3
aW5kb3cub3BlbihgL2NvbW1pdD8ke3F1ZXJ5fWAsICdfYmxhbmsnKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgLy8gUGVyIHRoZSBiaXJ0aGRheSBwYXJhZG94LCAxMCUgY2hhbmdlIG9mIGNvbGxpc2lv
biB3aXRoIDcuNyBtaWxsaW9uIGNvbW1pdHMgd2l0aCAxMiBjaGFyYWN0ZXIgY29tbWl0cworICAg
ICAgICBnZXRMYWJlbEZ1bmM6IChjb21taXQpID0+IHtyZXR1cm4gY29tbWl0ID8gY29tbWl0Lmlk
LnN1YnN0cmluZygwLDEyKSA6ICc/Jzt9LAorICAgICAgICBnZXRTY2FsZUZ1bmM6IChjb21taXQp
ID0+IGNvbW1pdC51dWlkLAorICAgICAgICBleHBvcnRlcjogKHVwZGF0ZUZ1bmN0aW9uKSA9PiB7
CisgICAgICAgICAgICB1cGRhdGVzQXJyYXkucHVzaCgoc2NhbGUpID0+IHt1cGRhdGVGdW5jdGlv
bihzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpKTt9KTsKKyAgICAgICAgfSwKKyAgICB9KTsKK30K
KworY29uc3QgdGVzdHNSZWdleCA9IC90ZXN0c18oW2Etel0pKy87Citjb25zdCBmYWlsdXJlVHlw
ZU9yZGVyID0gWydmYWlsZWQnLCAndGltZWRvdXQnLCAnY3Jhc2hlZCddOworY29uc3QgZmFpbHVy
ZVR5cGVNYXBwaW5nID0geworICAgIGZhaWxlZDogJ0VSUk9SJywKKyAgICB0aW1lZG91dDogJ1RJ
TUVPVVQnLAorICAgIGNyYXNoZWQ6ICdDUkFTSCcsCit9CisKK2Z1bmN0aW9uIGluUGxhY2VDb21i
aW5lKG91dCwgb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gb3V0OworCisg
ICAgaWYgKCFvdXQpIHsKKyAgICAgICAgb3V0ID0ge307CisgICAgICAgIE9iamVjdC5rZXlzKG9i
aikuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgaWYgKGtleVswXSA9PT0gJ18nKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChvYmpba2V5XSBpbnN0YW5jZW9m
IE9iamVjdCkKKyAgICAgICAgICAgICAgICBvdXRba2V5XSA9IGluUGxhY2VDb21iaW5lKG91dFtr
ZXldLCBvYmpba2V5XSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0W2tl
eV0gPSBvYmpba2V5XTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgT2JqZWN0
LmtleXMob3V0KS5mb3JFYWNoKGtleSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5WzBdID09PSAn
XycpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAob3V0W2tleV0g
aW5zdGFuY2VvZiBPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBvdXRba2V5XSA9IGluUGxhY2VD
b21iaW5lKG91dFtrZXldLCBvYmpba2V5XSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQgb2Ygc3BlY2lhbCBjYXNlIGtleXMgd2hp
Y2ggbmVlZCB0byBiZSBhZGRlZCB0b2dldGhlcgorICAgICAgICAgICAgaWYgKGtleS5tYXRjaCh0
ZXN0c1JlZ2V4KSkgeworICAgICAgICAgICAgICAgIG91dFtrZXldICs9IG9ialtrZXldOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
dGhlIGtleSBleGlzdHMsIGJ1dCBkb2Vzbid0IG1hdGNoLCBkZWxldGUgaXQKKyAgICAgICAgICAg
IGlmICghKGtleSBpbiBvYmopIHx8IG91dFtrZXldICE9PSBvYmpba2V5XSkgeworICAgICAgICAg
ICAgICAgIGRlbGV0ZSBvdXRba2V5XTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5
ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXkubWF0Y2godGVzdHNSZWdleCkgJiYgIShrZXkgaW4g
b3V0KSkKKyAgICAgICAgICAgICAgICBvdXRba2V5XSA9IG9ialtrZXldOworICAgICAgICB9KTsK
KyAgICB9CisgICAgcmV0dXJuIG91dDsKK30KKworZnVuY3Rpb24gc3RhdHNGb3JTaW5nbGVSZXN1
bHQocmVzdWx0KSB7CisgICAgY29uc3QgYWN0dWFsSWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9T
dGF0ZUlkKHJlc3VsdC5hY3R1YWwpOworICAgIGNvbnN0IHVuZXhwZWN0ZWRJZCA9IEV4cGVjdGF0
aW9ucy5zdHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKHJlc3Vs
dC5hY3R1YWwsIHJlc3VsdC5leHBlY3RlZCkpOworICAgIGxldCBzdGF0cyA9IHsKKyAgICAgICAg
dGVzdHNfcnVuOiAxLAorICAgICAgICB0ZXN0c19za2lwcGVkOiAwLAorICAgIH0KKyAgICBmYWls
dXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7CisgICAgICAgIGNvbnN0IGlkRm9yVHlwZSA9
IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBwaW5nW3R5cGVdKTsK
KyAgICAgICAgc3RhdHNbYHRlc3RzXyR7dHlwZX1gXSA9IGFjdHVhbElkID4gaWRGb3JUeXBlICA/
IDAgOiAxOworICAgICAgICBzdGF0c1tgdGVzdHNfdW5leHBlY3RlZF8ke3R5cGV9YF0gPSB1bmV4
cGVjdGVkSWQgPiBpZEZvclR5cGUgID8gMCA6IDE7CisgICAgfSk7CisgICAgcmV0dXJuIHN0YXRz
OworfQorCitmdW5jdGlvbiBjb21iaW5lUmVzdWx0cygpIHsKKyAgICBsZXQgY291bnRzID0gbmV3
IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLmZpbGwoMCk7CisgICAgbGV0IGRhdGEgPSBbXTsKKwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIEZpbmQgY2FuZGlkYXRlIHV1aWQKKyAgICAg
ICAgbGV0IHV1aWQgPSAwOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50cy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZVV1aWQgPSBudWxsOworICAgICAg
ICAgICAgd2hpbGUgKGFyZ3VtZW50c1tpXSAmJiBhcmd1bWVudHNbaV0ubGVuZ3RoID4gY291bnRz
W2ldKSB7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlVXVpZCA9IGFyZ3VtZW50c1tpXVtjb3Vu
dHNbaV1dLnV1aWQ7CisgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVV1aWQpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICsrY291bnRzW2ldOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVV1aWQpCisgICAgICAgICAgICAgICAg
dXVpZCA9IE1hdGgubWF4KHV1aWQsIGNhbmRpZGF0ZVV1aWQpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCF0aGlzLmZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybiByZW5kZXIoJ2RvdCBzdWNj
ZXNzJyk7CisgICAgICAgIGlmICghdXVpZCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworCisg
ICAgICAgIC8vIENvbWJpbmUgcmVsZXZhbnQgcmVzdWx0cworICAgICAgICBsZXQgZGF0YU5vZGUg
PSBudWxsOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50cy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgd2hpbGUgKGNvdW50c1tpXSA8IGFyZ3VtZW50c1tpXS5sZW5ndGggJiYg
YXJndW1lbnRzW2ldW2NvdW50c1tpXV0gJiYgYXJndW1lbnRzW2ldW2NvdW50c1tpXV0udXVpZCA9
PT0gdXVpZCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZSAmJiAhZGF0YU5vZGUuc3Rh
dHMpCisgICAgICAgICAgICAgICAgICAgIGRhdGFOb2RlLnN0YXRzID0gc3RhdHNGb3JTaW5nbGVS
ZXN1bHQoZGF0YU5vZGUpOworCisgICAgICAgICAgICAgICAgZGF0YU5vZGUgPSBpblBsYWNlQ29t
YmluZShkYXRhTm9kZSwgYXJndW1lbnRzW2ldW2NvdW50c1tpXV0pOworCisgICAgICAgICAgICAg
ICAgaWYgKGRhdGFOb2RlLnN0YXRzICYmICFhcmd1bWVudHNbaV1bY291bnRzW2ldXS5zdGF0cykK
KyAgICAgICAgICAgICAgICAgICAgZGF0YU5vZGUuc3RhdHMgPSBpblBsYWNlQ29tYmluZShkYXRh
Tm9kZS5zdGF0cywgc3RhdHNGb3JTaW5nbGVSZXN1bHQoYXJndW1lbnRzW2ldW2NvdW50c1tpXV0p
KTsKIAotICAgICAgICBsZXQga2V5ID0gJ2ZhaWxlZCc7Ci0gICAgICAgIGlmICh0aGlzLnRpbWVv
dXQpCi0gICAgICAgICAgICBrZXkgPSAndGltZW91dCc7Ci0gICAgICAgIGlmICh0aGlzLmNyYXNo
KQotICAgICAgICAgICAga2V5ID0gJ2NyYXNoJzsKLQotICAgICAgICBpZiAoIXRoaXMuY29tYmlu
ZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtrZXl9YCwgYDxkaXYgY2xhc3M9
InRhZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29sb3IpIj4ke3RoaXMuZmFpbGVk
fTwvZGl2PmApOwotCi0gICAgICAgIHJldHVybiByZW5kZXIoYGRvdCAke2tleX1gLCBgPGRpdiBj
bGFzcz0idGFnIiBzdHlsZT0iY29sb3I6dmFyKC0tYm9sZEludmVyc2VDb2xvcikiPgotICAgICAg
ICAgICAgICAgICR7ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBwZXJjZW50
ID0gTWF0aC5jZWlsKHNlbGYuZmFpbGVkIC8gc2VsZi5jb3VudCAqIDEwMCAtIC41KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnPDEnOwotICAgICAg
ICAgICAgICAgIH0oKX0gJQotICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgICAgICAgICAgICAg
Kytjb3VudHNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRhdGFO
b2RlKQorICAgICAgICAgICAgZGF0YS5wdXNoKGRhdGFOb2RlKTsKICAgICB9CisgICAgcmV0dXJu
IGRhdGE7CiB9CiAKLWNsYXNzIFRpbWVsaW5lIHsKK2NsYXNzIFRpbWVsaW5lRnJvbUVuZHBvaW50
IHsKICAgICBjb25zdHJ1Y3RvcihlbmRwb2ludCwgc3VpdGUgPSBudWxsKSB7CiAgICAgICAgIHRo
aXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKICAgICAgICAgdGhpcy5kaXNwbGF5QWxsQ29tbWl0cyA9
IHRydWU7CiAKICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IENvbmZpZ3VyYXRpb24uZnJv
bVF1ZXJ5KCk7CiAgICAgICAgIHRoaXMucmVzdWx0cyA9IHt9OwotICAgICAgICB0aGlzLmNvbGxh
cHNlZCA9IHt9OwotICAgICAgICB0aGlzLmV4cGFuZGVkU0RLcyA9IHt9OwogICAgICAgICB0aGlz
LnN1aXRlID0gc3VpdGU7ICAvLyBTdWl0ZSBpcyBvZnRlbiBpbXBsaWVkIGJ5IHRoZSBlbmRwb2lu
dCwgYnV0IHRyeWluZyB0byBkZXRlcm1pbmUgc3VpdGUgZnJvbSBlbmRwb2ludCBpcyBub3QgdHJp
dmlhbC4KIAorICAgICAgICB0aGlzLnVwZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhpcy54YXhpc1Vw
ZGF0ZXMgPSBbXTsKKyAgICAgICAgdGhpcy50aW1lbGluZVVwZGF0ZSA9IG51bGw7CisgICAgICAg
IHRoaXMucmVwb3NpdG9yaWVzID0gW107CisKICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7Ci0g
ICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsKLSAg
ICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldID0gW107Ci0gICAg
ICAgICAgICB0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID0gdHJ1ZTsKLSAg
ICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5sYXRlc3REaXNwYXRjaCA9IERhdGUubm93KCk7CiAg
ICAgICAgIHRoaXMucmVmID0gUkVGLmNyZWF0ZVJlZih7CkBAIC0yNDQsMTUgKzM2OCw0NiBAQCBj
bGFzcyBUaW1lbGluZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgICAgIENv
bW1pdEJhbmsuY2FsbGJhY2tzLnB1c2goKCkgPT4gewotICAgICAgICAgICAgY29uc3QgcGFyYW1z
ID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSk7Ci0gICAgICAgICAg
ICBzZWxmLnJlZi5zZXRTdGF0ZShwYXJhbXMubGltaXQgPyBwYXJzZUludChwYXJhbXMubGltaXRb
cGFyYW1zLmxpbWl0Lmxlbmd0aCAtIDFdKSA6IERFRkFVTFRfTElNSVQpOwotICAgICAgICB9KTsK
KyAgICAgICAgdGhpcy5jb21taXRfY2FsbGJhY2sgPSAoKSA9PiB7CisgICAgICAgICAgICBzZWxm
LnVwZGF0ZSgpOworICAgICAgICB9OworICAgICAgICBDb21taXRCYW5rLmNhbGxiYWNrcy5wdXNo
KHRoaXMuY29tbWl0X2NhbGxiYWNrKTsKIAogICAgICAgICB0aGlzLnJlbG9hZCgpOwogICAgIH0K
KyAgICB0ZWFyZG93bigpIHsKKyAgICAgICAgQ29tbWl0QmFuay5jYWxsYmFja3MgPSBDb21taXRC
YW5rLmNhbGxiYWNrcy5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyKSA9PiB7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5jb21taXRfY2FsbGJhY2sgPT09IHZhbHVlOworICAgICAgICB9KTsKKyAg
ICB9CisgICAgdXBkYXRlKCkgeworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeVRvUGFyYW1z
KGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKKyAgICAgICAgY29uc3QgY29tbWl0cyA9IGNv
bW1pdHNGb3JSZXN1bHRzKHRoaXMucmVzdWx0cywgcGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQocGFy
YW1zLmxpbWl0W3BhcmFtcy5saW1pdC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJTUlULCB0aGlz
LmFsbENvbW1pdHMpOworICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlRm9yQ29tbWl0cyhjb21t
aXRzKTsKKworICAgICAgICBjb25zdCBuZXdSZXBvc2l0b3JpZXMgPSByZXBvc2l0b3JpZXNGb3JD
b21taXRzKGNvbW1pdHMpOworICAgICAgICBsZXQgaGF2ZU5ld1JlcG9zID0gdGhpcy5yZXBvc2l0
b3JpZXMubGVuZ3RoICE9PSBuZXdSZXBvc2l0b3JpZXMubGVuZ3RoOworICAgICAgICBmb3IgKGxl
dCBpID0gMDsgIWhhdmVOZXdSZXBvcyAmJiBpIDwgdGhpcy5yZXBvc2l0b3JpZXMubGVuZ3RoICYm
IGkgPCBuZXdSZXBvc2l0b3JpZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBoYXZlTmV3UmVw
b3MgPSB0aGlzLnJlcG9zaXRvcmllc1tpXSAhPT0gbmV3UmVwb3NpdG9yaWVzW2ldOworICAgICAg
ICBpZiAoaGF2ZU5ld1JlcG9zICYmIHRoaXMudGltZWxpbmVVcGRhdGUpIHsKKyAgICAgICAgICAg
IHRoaXMueGF4aXNVcGRhdGVzID0gW107CisgICAgICAgICAgICBsZXQgdG9wID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxldCBjb21wb25lbnRzID0gW107CisKKyAgICAgICAgICAgIG5ld1JlcG9zaXRv
cmllcy5mb3JFYWNoKHJlcG9zaXRvcnkgPT4geworICAgICAgICAgICAgICAgIGNvbXBvbmVudHMu
cHVzaCh4QXhpc0Zyb21TY2FsZShzY2FsZSwgcmVwb3NpdG9yeSwgdGhpcy54YXhpc1VwZGF0ZXMs
IHRvcCkpOworICAgICAgICAgICAgICAgIHRvcCA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgIHRoaXMudGltZWxpbmVVcGRhdGUoY29tcG9uZW50cyk7CisgICAgICAgICAg
ICB0aGlzLnJlcG9zaXRvcmllcyA9IG5ld1JlcG9zaXRvcmllczsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMudXBkYXRlcy5mb3JFYWNoKGZ1bmMgPT4ge2Z1bmMoc2NhbGUpO30pCisgICAgICAg
IHRoaXMueGF4aXNVcGRhdGVzLmZvckVhY2goZnVuYyA9PiB7ZnVuYyhzY2FsZSk7fSk7CisgICAg
fQogICAgIHJlcmVuZGVyKCkgewotICAgICAgICBsZXQgcGFyYW1zID0gcXVlcnlUb1BhcmFtcyhk
b2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSk7CisgICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5
VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pOwogICAgICAgICB0aGlzLnJlZi5z
ZXRTdGF0ZShwYXJhbXMubGltaXQgPyBwYXJzZUludChwYXJhbXMubGltaXRbcGFyYW1zLmxpbWl0
Lmxlbmd0aCAtIDFdKSA6IERFRkFVTFRfTElNSVQpOwogICAgIH0KICAgICByZWxvYWQoKSB7CkBA
IC0yNzMsMTEgKzQyOCw4IEBAIGNsYXNzIFRpbWVsaW5lIHsKICAgICAgICAgaWYgKCFkZWVwQ29t
cGFyZShuZXdDb25maWdzLCB0aGlzLmNvbmZpZ3VyYXRpb25zKSkgewogICAgICAgICAgICAgdGhp
cy5jb25maWd1cmF0aW9ucyA9IG5ld0NvbmZpZ3M7CiAgICAgICAgICAgICB0aGlzLnJlc3VsdHMg
PSB7fTsKLSAgICAgICAgICAgIHRoaXMuY29sbGFwc2VkID0ge307Ci0gICAgICAgICAgICB0aGlz
LmV4cGFuZGVkU0RLcyA9IHt9OwogICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JF
YWNoKGNvbmZpZ3VyYXRpb24gPT4gewogICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25m
aWd1cmF0aW9uLnRvS2V5KCldID0gW107Ci0gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZWRb
Y29uZmlndXJhdGlvbi50b0tleSgpXSA9IHRydWU7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogCkBAIC0zNDEsMjY4ICs0OTMsMjExIEBAIGNsYXNzIFRpbWVsaW5lIHsKIAogICAgICAgICBy
ZXR1cm4gYDxkaXYgY2xhc3M9ImNvbnRlbnQiIHJlZj0iJHt0aGlzLnJlZn0iPjwvZGl2PmA7CiAg
ICAgfQorCiAgICAgcmVuZGVyKGxpbWl0KSB7Ci0gICAgICAgIGxldCBub3cgPSBNYXRoLmZsb29y
KERhdGUubm93KCkgLyAxMCk7Ci0gICAgICAgIGxldCBtaW5EaXNwbGF5ZWRVdWlkID0gbm93Owot
ICAgICAgICBsZXQgbWF4TGltaXRlZFV1aWQgPSAwOwotICAgICAgICB0aGlzLmNvbmZpZ3VyYXRp
b25zLmZvckVhY2goY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICB0aGlzLnJlc3VsdHNb
Y29uZmlndXJhdGlvbi50b0tleSgpXS5mb3JFYWNoKHBhaXIgPT4gewotICAgICAgICAgICAgICAg
IGlmICghcGFpci5yZXN1bHRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIGlmIChsaW1pdCAhPT0gMSAmJiBsaW1pdCA9PT0gcGFpci5yZXN1bHRz
Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgbWF4TGltaXRlZFV1aWQgPSBNYXRoLm1heChw
YWlyLnJlc3VsdHNbMF0udXVpZCwgbWF4TGltaXRlZFV1aWQpOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGxpbWl0ID09PSAxKQotICAgICAgICAgICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlk
ID0gTWF0aC5taW4ocGFpci5yZXN1bHRzW3BhaXIucmVzdWx0cy5sZW5ndGggLSAxXS51dWlkLCBt
aW5EaXNwbGF5ZWRVdWlkKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG1pbkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3VsdHNbMF0udXVpZCwgbWlu
RGlzcGxheWVkVXVpZCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlm
IChtaW5EaXNwbGF5ZWRVdWlkID09PSBub3cpCi0gICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlk
ID0gbWF4TGltaXRlZFV1aWQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1pbkRpc3BsYXll
ZFV1aWQgPSBNYXRoLm1heChtaW5EaXNwbGF5ZWRVdWlkLCBtYXhMaW1pdGVkVXVpZCk7Ci0KLSAg
ICAgICAgbGV0IGNvbW1pdHMgPSBbXTsKLSAgICAgICAgbGV0IHJlcG9zaXRvcmllcyA9IG5ldyBT
ZXQoKTsKLSAgICAgICAgbGV0IGN1cnJlbnRDb21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0
cy5sZW5ndGggLSAxOwotICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmln
dXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tl
eSgpXS5mb3JFYWNoKHBhaXIgPT4gewotICAgICAgICAgICAgICAgIHBhaXIucmVzdWx0cy5mb3JF
YWNoKHJlc3VsdCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudXVpZCA8IG1p
bkRpc3BsYXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgIGxldCBjYW5kaWRhdGVDb21taXRzID0gW107CisgICAgICAgIGNvbnN0IHNl
bGYgPSB0aGlzOworICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0c0ZvclJlc3VsdHModGhp
cy5yZXN1bHRzLCBsaW1pdCwgdGhpcy5hbGxDb21taXRzKTsKKyAgICAgICAgY29uc3Qgc2NhbGUg
PSBzY2FsZUZvckNvbW1pdHMoY29tbWl0cyk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmRpc3BsYXlBbGxDb21taXRzKQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENv
bW1pdEluZGV4ID0gQ29tbWl0QmFuay5jb21taXRzLmxlbmd0aCAtIDE7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQo
KSA8IHJlc3VsdC51dWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheUFsbENvbW1pdHMgfHwgQ29tbWl0
QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0udXVpZCgpID09IHJlc3VsdC51dWlkKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMucHVzaChDb21taXRC
YW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAtLWN1cnJlbnRDb21taXRJbmRleDsKKyAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7CisgICAgICAgIGNvbnN0IGNvbG9yTWFwID0g
eworICAgICAgICAgICAgc3VjY2VzczogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCct
LWdyZWVuTGlnaHQnKS50cmltKCksCisgICAgICAgICAgICBmYWlsZWQ6IGNvbXB1dGVkU3R5bGUu
Z2V0UHJvcGVydHlWYWx1ZSgnLS1yZWRMaWdodCcpLnRyaW0oKSwKKyAgICAgICAgICAgIHRpbWVk
b3V0OiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tb3JhbmdlTGlnaHQnKS50cmlt
KCksCisgICAgICAgICAgICBjcmFzaGVkOiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUo
Jy0tcHVycGxlTGlnaHQnKS50cmltKCksCisgICAgICAgIH0KKworICAgICAgICB0aGlzLnVwZGF0
ZXMgPSBbXTsKKyAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKKyAgICAgICAgICAgIGdldFNjYWxl
RnVuYzogKHZhbHVlKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnV1
aWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7dXVpZDogdmFsdWUudXVpZH07CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHt9OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNvbXBh
cmVGdW5jOiAoYSwgYikgPT4ge3JldHVybiBiLnV1aWQgLSBhLnV1aWQ7fSwKKyAgICAgICAgICAg
IHJlbmRlckZhY3Rvcnk6IChkcmF3RG90KSA9PiAoZGF0YSwgY29udGV4dCwgeCwgeSkgPT4gewor
ICAgICAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRy
YXdEb3QoY29udGV4dCwgeCwgeSwgdHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBsZXQgdGFnID0g
bnVsbDsKKyAgICAgICAgICAgICAgICBsZXQgY29sb3IgPSBjb2xvck1hcC5zdWNjZXNzOworICAg
ICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRzKSB7CisgICAgICAgICAgICAgICAgICAgIHRhZyA9
IGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6
ICdfJ31mYWlsZWRgXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGZhaWx1
cmVzIHRoYXQgYXJlIGEgcmVzdWx0IG9mIG11bHRpcGxlIHJ1bnMsIGNvbWJpbmUgdGhlbS4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRhZyAmJiAhZGF0YS5zdGFydF90aW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0YWcgPSBNYXRoLmNlaWwodGFnIC8gZGF0YS5zdGF0cy50ZXN0c19y
dW4gKiAxMDAgLSAuNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhZykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWcgPSAnPDEnOworICAgICAgICAgICAgICAgICAgICAg
ICAgdGFnID0gYCR7dGFnfSAlYAogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChjYW5kaWRhdGVDb21taXRzLmxlbmd0aCA9PT0gMCB8fCBjYW5kaWRhdGVDb21t
aXRzW2NhbmRpZGF0ZUNvbW1pdHMubGVuZ3RoIC0gMV0udXVpZCgpICE9PSByZXN1bHQudXVpZCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMucHVzaCh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2lkJzogJz8nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd1dWlkJzogKCkgPT4ge3JldHVybiByZXN1bHQudXVpZDt9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKIAotICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwOwotICAgICAg
ICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLmZvckVhY2goY29tbWl0ID0+IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuYWRkKGNvbW1pdC5yZXBvc2l0b3J5X2lkKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGNvbW1pdHMubGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPT09IGNvbW1p
dHNbaW5kZXhdLnV1aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCgpID4gY29tbWl0
c1tpbmRleF0udXVpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1p
dHMuc3BsaWNlKGluZGV4LCAwLCBjb21taXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb21taXRzLnB1c2goY29tbWl0KTsKKyAgICAgICAgICAgICAg
ICAgICAgZmFpbHVyZVR5cGVPcmRlci5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRhdGEuc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3Vu
ZXhwZWN0ZWRfJyA6ICdfJ30ke3R5cGV9YF0gPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JNYXBbdHlwZV07CiAgICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgICBp
ZiAoY3VycmVudENvbW1pdEluZGV4ID49IDAgJiYgY29tbWl0cy5sZW5ndGgpIHsKLSAgICAgICAg
ICAgIGxldCB0cmFpbGluZ1JlcG9zaXRvcmllcyA9IG5ldyBTZXQocmVwb3NpdG9yaWVzKTsKLSAg
ICAgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0ZShjb21taXRzW2NvbW1pdHMubGVu
Z3RoIC0gMV0ucmVwb3NpdG9yeV9pZCk7Ci0gICAgICAgICAgICB3aGlsZSAoY3VycmVudENvbW1p
dEluZGV4ID49IDAgJiYgdHJhaWxpbmdSZXBvc2l0b3JpZXMuc2l6ZSkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IGNvbW1pdCA9IENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhd
OwotICAgICAgICAgICAgICAgIGlmICh0cmFpbGluZ1JlcG9zaXRvcmllcy5oYXMoY29tbWl0LnJl
cG9zaXRvcnlfaWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaChjb21taXQp
OwotICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUoY29tbWl0
LnJlcG9zaXRvcnlfaWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGxldCByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoZGF0YS5h
Y3R1YWwpOworICAgICAgICAgICAgICAgICAgICBpZiAod2lsbEZpbHRlckV4cGVjdGVkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0
ZUlkKEV4cGVjdGF0aW9ucy51bmV4cGVjdGVkUmVzdWx0cyhkYXRhLmFjdHVhbCwgZGF0YS5leHBl
Y3RlZCkpOworICAgICAgICAgICAgICAgICAgICBmYWlsdXJlVHlwZU9yZGVyLmZvckVhY2godHlw
ZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRXhwZWN0YXRpb25zLnN0cmluZ1Rv
U3RhdGVJZChmYWlsdXJlVHlwZU1hcHBpbmdbdHlwZV0pID49IHJlc3VsdElkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JNYXBbdHlwZV07CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBk
cmF3RG90KGNvbnRleHQsIHgsIHksIGZhbHNlLCB0YWcgPyB0YWcgOiBudWxsLCBmYWxzZSwgY29s
b3IpOworICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBvbkRv
dENsaWNrRmFjdG9yeShjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gKGRhdGEp
ID0+IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHNvbWV0aGluZyBz
YW5lIGhlcmUsIGJ1dCB3ZSBwcm9iYWJseSBuZWVkIGFub3RoZXIgZW5kcG9pbnQKKyAgICAgICAg
ICAgICAgICBpZiAoIWRhdGEuc3RhcnRfdGltZSkgeworICAgICAgICAgICAgICAgICAgICBhbGVy
dCgnTm9kZSBpcyBhIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIHJ1bnMnKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAtLWN1
cnJlbnRDb21taXRJbmRleDsKKworICAgICAgICAgICAgICAgIGxldCBidWlsZFBhcmFtcyA9IGNv
bmZpZ3VyYXRpb24udG9QYXJhbXMoKTsKKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snc3Vp
dGUnXSA9IFtzZWxmLnN1aXRlXTsKKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1sndXVpZCdd
ID0gW2RhdGEudXVpZF07CisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ2FmdGVyX3RpbWUn
XSA9IFtkYXRhLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydiZWZv
cmVfdGltZSddID0gW2RhdGEuc3RhcnRfdGltZV07CisgICAgICAgICAgICAgICAgd2luZG93Lm9w
ZW4oYC91cmxzL2J1aWxkPyR7cGFyYW1zVG9RdWVyeShidWlsZFBhcmFtcyl9YCwgJ19ibGFuaycp
OwogICAgICAgICAgICAgfQorICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gZXhwb3J0ZXJG
YWN0b3J5KGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiAodXBkYXRlRnVuY3Rpb24pID0+IHsK
KyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZXMucHVzaCgoc2NhbGUpID0+IHt1cGRhdGVGdW5j
dGlvbihkYXRhLCBzY2FsZSk7fSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICByZXBvc2l0b3JpZXMgPSBbLi4ucmVwb3NpdG9yaWVzXTsKLSAgICAgICAgcmVwb3NpdG9yaWVz
LnNvcnQoKTsKKyAgICAgICAgbGV0IGNoaWxkcmVuID0gW107CisgICAgICAgIHRoaXMuY29uZmln
dXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsKKyAgICAgICAgICAgIGlmICghdGhp
cy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gfHwgT2JqZWN0LmtleXModGhpcy5yZXN1
bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0pLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ0aW1lbGluZSI+Ci0gICAg
ICAgICAgICAgICAgPGRpdiAke3JlcG9zaXRvcmllcy5sZW5ndGggPiAxID8gYGNsYXNzPSJoZWFk
ZXIgd2l0aC10b3AteC1heGlzImAgOiBgY2xhc3M9ImhlYWRlciJgfT4KLSAgICAgICAgICAgICAg
ICAgICAgJHt0aGlzLmNvbmZpZ3VyYXRpb25zLm1hcChjb25maWd1cmF0aW9uID0+IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnJlc3VsdHNbY29uZmlndXJh
dGlvbi50b0tleSgpXSkubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAnJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZXIgPSBSRUYuY3JlYXRlUmVmKHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDogZWxlbWVudCA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGFwc2VkW2Nv
bmZpZ3VyYXRpb24udG9LZXkoKV0gPSAhc2VsZi5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tl
eSgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVyZW5kZXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBgPGRpdiBjbGFzcz0ic2VyaWVzIj4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGEgcmVmPSIke2V4cGFuZGVyfSIgc3R5bGU9ImN1cnNvcjog
cG9pbnRlcjsiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtmdW5jdGlv
bigpIHtyZXR1cm4gc2VsZi5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXSA/ICcrJyA6
ICctJ30oKX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAke2NvbmZpZ3VyYXRpb259Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPC9kaXY+YDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5j
b2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHNlcmllc0hlYWRlckZvclNES0xlc3NDb25maWcgPSBjb25maWcgPT4gewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0
cmluZycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYg
Y2xhc3M9InNlcmllcyI+JHtjb25maWd9PC9kaXY+YDsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgcXVldWVQYXJhbXMgPSBjb25maWcudG9QYXJhbXMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVQYXJhbXNbJ3N1aXRlJ10gPSBbdGhpcy5zdWl0
ZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0xpbmsgPSBg
PGEgY2xhc3M9InRleHQgdGlueSIgaHJlZj0iL3VybHMvcXVldWU/JHtwYXJhbXNUb1F1ZXJ5KHF1
ZXVlUGFyYW1zKX0iIHRhcmdldD0iX2JsYW5rIj4ke2NvbmZpZ308L2E+YDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29uZmlnLnRvS2V5KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVyID0gUkVGLmNyZWF0ZVJlZih7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDogZWxl
bWVudCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dC5vbmNsaWNrID0gKCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmV4cGFuZGVkU0RLc1trZXldID0gIXNlbGYuZXhwYW5kZWRTREtzW2tleV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVyZW5k
ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhw
YW5kZWRTREtzW2tleV0gPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke2NvbmZpZ0xpbmt9PC9kaXY+
YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJz
ZXJpZXMgdGV4dCB0aW55Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8YSByZWY9IiR7ZXhwYW5kZXJ9IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24oKSB7cmV0dXJu
IHNlbGYuZXhwYW5kZWRTREtzW2tleV0gPyAnLXNkaycgOiAnK3Nkayd9KCl9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICR7Y29uZmlnTGlua30KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0Q29uZmlnID0gbnVsbDsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5
KCldLmZvckVhY2gocGFpciA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYWlyLnJlc3VsdHMubGVuZ3RoIDw9IDAgfHwgcGFpci5yZXN1bHRzW3BhaXIucmVzdWx0cy5s
ZW5ndGggLSAxXS51dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZXQgY29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2RrID0gY29uZmlnLnNkazsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5zZGs7ICAvLyBT
dHJpcCBvdXQgc2RrIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGtleSA9IGNvbmZpZy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjb21wYXJlSW5kZXggPSBjb25maWcuY29tcGFyZShsYXN0Q29uZmlnKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDb25maWcgIT09IG51bGwg
JiYgY29tcGFyZUluZGV4ICE9IDAgJiYgIXRoaXMuZXhwYW5kZWRTREtzW2xhc3RDb25maWcudG9L
ZXkoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2Vy
aWVzSGVhZGVyRm9yU0RLTGVzc0NvbmZpZyhsYXN0Q29uZmlnKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZUluZGV4ID09PSAwICYmIHRoaXMuZXhwYW5k
ZWRTREtzW2tleV0gPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZXhwYW5kZWRTREtzW2tleV0gPSBmYWxzZTsgIC8vIFBvcHVsYXRlIHRoaXMg
ZGljdGlvbmFyeSBvbiB0aGUgZmx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5leHBhbmRlZFNES3Nba2V5XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbXBhcmVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gc2VyaWVzSGVhZGVyRm9yU0RLTGVzc0NvbmZpZyhjb25maWcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNs
YXNzPSJzZXJpZXMiPiR7c2RrfTwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENvbmZpZyA9IGNvbmZp
ZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGFzdENvbmZpZyAhPT0gbnVsbCAmJiAhdGhpcy5leHBhbmRlZFNES3NbbGFz
dENvbmZpZy50b0tleSgpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IHNlcmllc0hlYWRlckZvclNES0xlc3NDb25maWcobGFzdENvbmZpZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKX0KLSAgICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KLSAgICAgICAgICAgICAgICAg
ICAgJHtyZW5kZXJUaW1lbGluZShjb21taXRzLCByZXBvc2l0b3JpZXMsIHRydWUpfQotICAgICAg
ICAgICAgICAgICAgICAke3RoaXMuY29uZmlndXJhdGlvbnMubWFwKGNvbmZpZ3VyYXRpb24gPT4g
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucmVzdWx0c1tj
b25maWd1cmF0aW9uLnRvS2V5KCldKS5sZW5ndGggPT09IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICcnOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVu
dEFycmF5SW5kZXggPSBuZXcgQXJyYXkodGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXko
KV0ubGVuZ3RoKS5maWxsKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvdHMgPSB7
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1
bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBwYWlyRm9ySW5kZXggPSB0aGlzLnJlc3VsdHNbY29uZmlndXJh
dGlvbi50b0tleSgpXVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpckZv
ckluZGV4LnJlc3VsdHMubGVuZ3RoIDw9IDAgfHwgcGFpckZvckluZGV4LnJlc3VsdHNbcGFpckZv
ckluZGV4LnJlc3VsdHMubGVuZ3RoIC0gMV0udXVpZCA8IG1pbkRpc3BsYXllZFV1aWQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdHNbbmV3IENvbmZpZ3VyYXRpb24ocGFpckZvckluZGV4LmNvbmZpZ3VyYXRp
b24pLnRvS2V5KCldID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb21taXRzLnNsaWNlKDAsIGNvbW1pdHMubGVuZ3RoIC0gTWF0aC5tYXgo
cmVwb3NpdG9yaWVzLmxlbmd0aCAtIDEsIDApKS5mb3JFYWNoKGNvbW1pdCA9PiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50QXJyYXlJbmRl
eC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YWlyRm9ySW5kZXggPSB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXVtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXJGb3JJbmRleC5yZXN1bHRzLmxl
bmd0aCA8PSAwIHx8IHBhaXJGb3JJbmRleC5yZXN1bHRzW3BhaXJGb3JJbmRleC5yZXN1bHRzLmxl
bmd0aCAtIDFdLnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24ocGFpckZvckluZGV4LmNvbmZpZ3Vy
YXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWd1cmF0
aW9uS2V5ID0gY29uZmlnLnRvS2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxldCByZXN1bHRJbmRleCA9IHBhaXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIGN1cnJlbnRB
cnJheUluZGV4W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
SW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzW2Nv
bmZpZ3VyYXRpb25LZXldLnB1c2gobmV3IERvdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPT09
IHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS51dWlkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnVpbGRQYXJhbXMgPSBjb25maWcudG9QYXJhbXMo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydzdWl0
ZSddID0gW3RoaXMuc3VpdGVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGRQYXJhbXNbJ3V1aWQnXSA9IFtjb21taXQudXVpZCgpXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkTGluayA9IGAvdXJscy9idWlsZD8ke3BhcmFt
c1RvUXVlcnkoYnVpbGRQYXJhbXMpfWA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHMpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tjb25maWd1cmF0aW9uS2V5
XS5wdXNoKG5ldyBEb3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5zdGF0cy50ZXN0c19ydW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJbmRleC5y
ZXN1bHRzW3Jlc3VsdEluZGV4XS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdf
dW5leHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHNb
YHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ310aW1lZG91
dGBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9y
SW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0
ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ31jcmFzaGVkYF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWlsZExpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0
SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jl
c3VsdEluZGV4XS5hY3R1YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh3aWxsRmlsdGVyRXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChF
eHBlY3RhdGlvbnMudW5leHBlY3RlZFJlc3VsdHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0u
YWN0dWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLmV4cGVjdGVkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVzaChuZXcgRG90
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJZCA8PSBFeHBlY3Rh
dGlvbnMuc3RyaW5nVG9TdGF0ZUlkKCdFUlJPUicpID8gMSA6IDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdElkIDw9IEV4cGVjdGF0aW9ucy5zdHJp
bmdUb1N0YXRlSWQoJ1RJTUVPVVQnKSA/IDEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRJZCA8PSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0
ZUlkKCdDUkFTSCcpID8gMSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBidWlsZExpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG90c1tjb25maWd1cmF0aW9uS2V5XS5wdXNoKG5ldyBEb3QoKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlc3VsdEluZGV4ID49IDAgJiYgY29tbWl0
LnV1aWQoKSA8PSBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0udXVpZCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50QXJyYXlJbmRleFtpXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEluZGV4ID0gcGFpckZv
ckluZGV4LnJlc3VsdHMubGVuZ3RoIC0gY3VycmVudEFycmF5SW5kZXhbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxpc3Qg
b2YgY29uZmlndXJhdGlvbnMgdG8gZGlzcGxheSB3aXRoIFNES3Mgc3RyaXBwZWQKKyAgICAgICAg
ICAgIGxldCBtYXBwZWRDaGlsZHJlbkNvbmZpZ3MgPSB7fTsKKyAgICAgICAgICAgIGxldCBjaGls
ZHJlbkNvbmZpZ3NCeVNESyA9IHt9CisgICAgICAgICAgICBsZXQgcmVzdWx0c0J5S2V5ID0ge307
CisgICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5mb3JFYWNo
KHBhaXIgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlwcGVkQ29uZmlnID0gbmV3IENv
bmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgICAgICByZXN1bHRz
QnlLZXlbc3RyaXBwZWRDb25maWcudG9LZXkoKV0gPSBjb21iaW5lUmVzdWx0cyhbXSwgWy4uLnBh
aXIucmVzdWx0c10uc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGIudXVpZCAtIGEudXVpZDt9
KSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHN0cmlwcGVkQ29uZmlnLnNkazsKKyAgICAgICAg
ICAgICAgICBtYXBwZWRDaGlsZHJlbkNvbmZpZ3Nbc3RyaXBwZWRDb25maWcudG9LZXkoKV0gPSBz
dHJpcHBlZENvbmZpZzsKKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuQ29uZmlnc0J5U0RL
W3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldKQorICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkNv
bmZpZ3NCeVNES1tzdHJpcHBlZENvbmZpZy50b0tleSgpXSA9IFtdOworICAgICAgICAgICAgICAg
IGNoaWxkcmVuQ29uZmlnc0J5U0RLW3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldLnB1c2gobmV3IENv
bmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGxldCBjaGlsZHJlbkNvbmZpZ3MgPSBbXTsKKyAgICAgICAgICAgIE9iamVjdC5rZXlz
KG1hcHBlZENoaWxkcmVuQ29uZmlncykuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgICAg
IGNoaWxkcmVuQ29uZmlncy5wdXNoKG1hcHBlZENoaWxkcmVuQ29uZmlnc1trZXldKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzLnNvcnQoZnVuY3Rpb24oYSwg
Yikge3JldHVybiBhLmNvbXBhcmUoYik7fSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke0RvdC5tZXJnZShkb3Rz
KS5tYXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbignJyl9PC9kaXY+YDsK
KyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29sbGFwc2VkIHRpbWVsaW5lcywgY29iaW5lIHJl
c3VsdHMKKyAgICAgICAgICAgIGxldCBhbGxSZXN1bHRzID0gW107CisgICAgICAgICAgICBsZXQg
Y29sbGFwc2VkVGltZWxpbmVzID0gW107CisgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3MuZm9y
RWFjaChjb25maWcgPT4geworICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW2Nv
bmZpZy50b0tleSgpXS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtyZXR1cm4gYS5jb21wYXJlU0RLcyhi
KTt9KTsKKworICAgICAgICAgICAgICAgIGxldCByZXN1bHRzRm9yQ29uZmlnID0gW107CisgICAg
ICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmZvckVhY2go
c2RrQ29uZmlnID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c0ZvckNvbmZpZyA9IGNv
bWJpbmVSZXN1bHRzKHJlc3VsdHNGb3JDb25maWcsIHJlc3VsdHNCeUtleVtzZGtDb25maWcudG9L
ZXkoKV0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFsbFJlc3VsdHMg
PSBjb21iaW5lUmVzdWx0cyhhbGxSZXN1bHRzLCByZXN1bHRzRm9yQ29uZmlnKTsKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbGV0IGN1cnJlbnREb3RzID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFz
dENvbmZpZyA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c1tj
b25maWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJh
dGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29uZmlnLnRv
S2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RzW2tleV0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgY29uZmlnLnNkazsgIC8vIFN0cmlwIG91dCBzZGsgaW5mb3JtYXRpb24K
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVJbmRleCA9IGNvbmZp
Zy5jb21wYXJlKGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGlzU0RLRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkU0RLc1tjb25maWcudG9LZXkoKV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVJbmRleCB8fCBpc1NES0V4cGFuZGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFz
cz0ic2VyaWVzIj4ke0RvdC5tZXJnZShjdXJyZW50RG90cykubWFwKGRvdCA9PiB7cmV0dXJuIGRv
dC50b1N0cmluZygpO30pLmpvaW4oJycpfTwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnREb3RzID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlSW5kZXggJiYgaXNTREtF
eHBhbmRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc8ZGl2
IGNsYXNzPSJzZXJpZXMiPjwvZGl2Pic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudERvdHNba2V5XSA9IGRvdHNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0Q29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudERvdHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdlKGN1cnJlbnRE
b3RzKS5tYXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbignJyl9PC9kaXY+
YDsKKyAgICAgICAgICAgICAgICBsZXQgcXVldWVQYXJhbXMgPSBjb25maWcudG9QYXJhbXMoKTsK
KyAgICAgICAgICAgICAgICBxdWV1ZVBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1aXRlXTsKKyAg
ICAgICAgICAgICAgICBsZXQgbXlUaW1lbGluZSA9IFRpbWVsaW5lLlNlcmllc1dpdGhIZWFkZXJD
b21wb25lbnQoCisgICAgICAgICAgICAgICAgICAgIGAke2NoaWxkcmVuQ29uZmlnc0J5U0RLW2Nv
bmZpZy50b0tleSgpXS5sZW5ndGggPiAxID8gJyB8ICcgOiAnJ308YSBocmVmPSIvdXJscy9xdWV1
ZT8ke3BhcmFtc1RvUXVlcnkocXVldWVQYXJhbXMpfSIgdGFyZ2V0PSJfYmxhbmsiPiR7Y29uZmln
fTwvYT5gLAorICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25l
bnQocmVzdWx0c0ZvckNvbmZpZywgc2NhbGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdl
dFNjYWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFjdG9yeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cG9ydGVyOiBvcHRpb25zLmV4cG9ydGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgb25Eb3RDbGljazogb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cG9ydGVyOiBleHBvcnRlckZhY3RvcnkocmVzdWx0c0ZvckNvbmZpZyks
CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIGlmIChjaGlsZHJl
bkNvbmZpZ3NCeVNES1tjb25maWcudG9LZXkoKV0ubGVuZ3RoID4gMSkgeworICAgICAgICAgICAg
ICAgICAgICBsZXQgdGltZWxpbmVzQnlTREsgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmZvckVhY2goc2RrQ29uZmlnID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lc0J5U0RLLnB1c2goCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGltZWxpbmUuU2VyaWVzV2l0aEhlYWRlckNvbXBvbmVudChgJHtz
ZGtDb25maWcuc2RrfWAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVsaW5l
LkNhbnZhc1Nlcmllc0NvbXBvbmVudChyZXN1bHRzQnlLZXlbc2RrQ29uZmlnLnRvS2V5KCldLCBz
Y2FsZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2NhbGVGdW5j
OiBvcHRpb25zLmdldFNjYWxlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBhcmVGdW5jOiBvcHRpb25zLmNvbXBhcmVGdW5jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogb3B0aW9ucy5yZW5kZXJGYWN0b3J5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG9wdGlvbnMuZXhw
b3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdENsaWNrOiBv
bkRvdENsaWNrRmFjdG9yeShzZGtDb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwb3J0ZXI6IGV4cG9ydGVyRmFjdG9yeShyZXN1bHRzQnlLZXlbc2RrQ29uZmln
LnRvS2V5KCldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIG15VGltZWxpbmUgPSBUaW1l
bGluZS5FeHBhbmRhYmxlU2VyaWVzV2l0aEhlYWRlckV4cGFuZGVyQ29tcG9uZW50KG15VGltZWxp
bmUsIC4uLnRpbWVsaW5lc0J5U0RLKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY29sbGFwc2VkVGltZWxpbmVzLnB1c2gobXlUaW1lbGluZSk7CisgICAgICAgICAgICB9KTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAg
ICAgICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICAgICAgICAgICR7cmVuZGVyVGltZWxpbmUo
Y29tbWl0cywgcmVwb3NpdG9yaWVzKX0KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAg
ICAgIDwvZGl2PmA7CisgICAgICAgICAgICBpZiAoY29sbGFwc2VkVGltZWxpbmVzLmxlbmd0aCA9
PT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoY29sbGFwc2Vk
VGltZWxpbmVzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgICAgIGlmICghY29sbGFwc2Vk
VGltZWxpbmVzWzBdLmhlYWRlci5pbmNsdWRlcygnY2xhc3M9InNlcmllcyInKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29sbGFwc2VkVGltZWxpbmVzWzBdLmhlYWRlciA9IFRpbWVsaW5lLkhlYWRl
ckNvbXBvbmVudChjb2xsYXBzZWRUaW1lbGluZXNbMF0uaGVhZGVyKTsKKyAgICAgICAgICAgICAg
ICBjaGlsZHJlbi5wdXNoKGNvbGxhcHNlZFRpbWVsaW5lc1swXSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKAorICAg
ICAgICAgICAgICAgIFRpbWVsaW5lLkV4cGFuZGFibGVTZXJpZXNXaXRoSGVhZGVyRXhwYW5kZXJD
b21wb25lbnQoCisgICAgICAgICAgICAgICAgVGltZWxpbmUuU2VyaWVzV2l0aEhlYWRlckNvbXBv
bmVudChgICR7Y29uZmlndXJhdGlvbn1gLAorICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5D
YW52YXNTZXJpZXNDb21wb25lbnQoYWxsUmVzdWx0cywgc2NhbGUsIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdldFNjYWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFjdG9yeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZp
Z3VyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IGV4cG9ydGVyRmFj
dG9yeShhbGxSZXN1bHRzKSwKKyAgICAgICAgICAgICAgICAgICAgfSkpLAorICAgICAgICAgICAg
ICAgIC4uLmNvbGxhcHNlZFRpbWVsaW5lcworICAgICAgICAgICAgKSk7CisgICAgICAgIH0pOwor
CisgICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAgICBzZWxmLnhheGlzVXBkYXRlcyA9IFtd
OworICAgICAgICB0aGlzLnJlcG9zaXRvcmllcyA9IHJlcG9zaXRvcmllc0ZvckNvbW1pdHMoY29t
bWl0cyk7CisgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzLmZvckVhY2gocmVwb3NpdG9yeSA9PiB7
CisgICAgICAgICAgICBjb25zdCB4QXhpc0NvbXBvbmVudCA9IHhBeGlzRnJvbVNjYWxlKHNjYWxl
LCByZXBvc2l0b3J5LCBzZWxmLnhheGlzVXBkYXRlcywgdG9wKTsKKyAgICAgICAgICAgIGlmICh0
b3ApCisgICAgICAgICAgICAgICAgY2hpbGRyZW4udW5zaGlmdCh4QXhpc0NvbXBvbmVudCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh4QXhpc0NvbXBv
bmVudCk7CisgICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
Y29uc3QgY29tcG9zZXIgPSBGUC5jb21wb3NlcigodXBkYXRlVGltZWxpbmUpID0+IHsKKyAgICAg
ICAgICAgIHNlbGYudGltZWxpbmVVcGRhdGUgPSAoeEF4aXNlcykgPT4geworICAgICAgICAgICAg
ICAgIGNoaWxkcmVuLnNwbGljZSgwLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5yZXBv
c2l0b3JpZXMubGVuZ3RoID4gMSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNl
KGNoaWxkcmVuLmxlbmd0aCAtIHNlbGYucmVwb3NpdG9yaWVzLmxlbmd0aCwgc2VsZi5yZXBvc2l0
b3JpZXMubGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHhBeGlzZXMuZm9yRWFjaChjb21wb25lbnQgPT4geworICAgICAgICAgICAgICAg
ICAgICBpZiAodG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4udW5zaGlmdChj
b21wb25lbnQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgIHRvcCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWVs
aW5lKGNoaWxkcmVuKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gVGltZWxpbmUuQ2FudmFzQ29udGFpbmVyKGNvbXBvc2VyLCAuLi5jaGlsZHJlbik7CiAgICAg
fQogfQogCisKIGZ1bmN0aW9uIExlZ2VuZExhYmVsKGV2ZW50U3RyZWFtLCBmaWx0ZXJFeHBlY3Rl
ZFRleHQsIGZpbHRlclVuZXhwZWN0ZWRUZXh0KSB7CiAgICAgbGV0IHJlZiA9IFJFRi5jcmVhdGVS
ZWYoewogICAgICAgICBzdGF0ZTogd2lsbEZpbHRlckV4cGVjdGVkLApAQCAtNjgwLDQgKzc3NSw0
IEBAIGZ1bmN0aW9uIExlZ2VuZChjYWxsYmFjaz1udWxsLCBwbHVyYWw9ZmEKICAgICByZXR1cm4g
YDxkaXYgY2xhc3M9ImNvbnRlbnQiPiR7cmVzdWx0fTwvZGl2Pjxicj5gOwogfQogCi1leHBvcnQg
e0xlZ2VuZCwgVGltZWxpbmUsIEV4cGVjdGF0aW9uc307CitleHBvcnQge0xlZ2VuZCwgVGltZWxp
bmVGcm9tRW5kcG9pbnQsIEV4cGVjdGF0aW9uc307CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAkocmV2
aXNpb24gMjQ4MzA2KQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1w
bGF0ZXMvc2VhcmNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgaW1wb3J0
IHtDb25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzLwogaW1wb3J0IHtEcmF3ZXIsIEJyYW5j
aFNlbGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzLCBMaW1pdFNsaWRlcn0gZnJvbSAnL2Fz
c2V0cy9qcy9kcmF3ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJhcnkvanMv
UmVmLmpzJzsKIGltcG9ydCB7U2VhcmNoQmFyfSBmcm9tICcvYXNzZXRzL2pzL3NlYXJjaC5qcyc7
Ci1pbXBvcnQge0xlZ2VuZCwgVGltZWxpbmV9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMn
OworaW1wb3J0IHtMZWdlbmQsIFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcvYXNzZXRzL2pz
L3RpbWVsaW5lLmpzJzsKIAogY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKIGNvbnN0IFNVSVRF
UyA9IEpTT04ucGFyc2UoJ3t7IHN1aXRlc3xzYWZlIH19Jyk7ICAgIApAQCAtNTUsNyArNTUsNyBA
QCBjbGFzcyBTZWFyY2hWaWV3IHsKICAgICAgICAgICAgICAgICBzdGF0ZS5jaGlsZHJlbi5wdXNo
KHsKICAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHRoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtp
XSwKICAgICAgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5jdXJyZW50UGFyYW1zLnRlc3RbaV0s
Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9yZXN1bHRz
LyR7dGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldfS8ke3RoaXMuY3VycmVudFBhcmFtcy50ZXN0
W2ldfWAsIHRoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXSksCisgICAgICAgICAgICAgICAgICAg
IHRpbWVsaW5lOiBuZXcgVGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7dGhpcy5j
dXJyZW50UGFyYW1zLnN1aXRlW2ldfS8ke3RoaXMuY3VycmVudFBhcmFtcy50ZXN0W2ldfWAsIHRo
aXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXSksCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTEyOSw3ICsxMjksNyBAQCBjbGFzcyBTZWFyY2hWaWV3IHsK
ICAgICAgICAgICAgICAgICBpZiAoZGlmZi5jaGlsZHJlbikKICAgICAgICAgICAgICAgICAgICAg
RE9NLmluamVjdChlbGVtZW50LCBMZWdlbmQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5yZWYuc3RhdGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZC50aW1lbGluZS5yZXJlbmRlcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkLnRpbWVsaW5lLnVwZGF0ZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKSArIGRpZmYuY2hp
bGRyZW4ubWFwKHJlbmRlckNoaWxkKS5qb2luKCcnKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRp
ZmYucHJlcGVuZGluZykgewpAQCAtMTYwLDcgKzE2MCw4IEBAIGNsYXNzIFNlYXJjaFZpZXcgewog
ICAgICAgICAgICAgICAgICAgICAgICAgZGlkRmluZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlZi5zdGF0ZS5jaGlsZHJlbi5zcGxpY2Uoc2VhcmNoLCAxKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYuc3Rh
dGUuY2hpbGRyZW5bc2VhcmNoXS50aW1lbGluZS50ZWFyZG93bigpOwogICAgICAgICAgICAgICAg
ICAgICBuZWVkUmVSZW5kZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoIWRpZEZpbmQpIHsKQEAgLTE2OSw3ICsxNzAsNyBAQCBjbGFzcyBTZWFyY2hWaWV3
IHsKICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWl0ZTogcGFyYW1zLnN1aXRlW2ldLAogICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdDogcGFyYW1zLnRlc3RbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGlu
ZTogbmV3IFRpbWVsaW5lKGBhcGkvcmVzdWx0cy8ke3BhcmFtcy5zdWl0ZVtpXX0vJHtwYXJhbXMu
dGVzdFtpXX1gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxp
bmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7cGFyYW1zLnN1aXRlW2ldfS8ke3BhcmFtcy50
ZXN0W2ldfWApLAogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC0yMzksNyArMjQwLDcgQEAgRE9NLmluamVjdCgKICAgICAgICAgICAg
IGxldCBjaGlsZCA9IHsKICAgICAgICAgICAgICAgICBzdWl0ZTogYXJndW1lbnRzW2ldLnN1aXRl
LAogICAgICAgICAgICAgICAgIHRlc3Q6IGFyZ3VtZW50c1tpXS50ZXN0LAotICAgICAgICAgICAg
ICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9yZXN1bHRzLyR7YXJndW1lbnRzW2ldLnN1
aXRlfS8ke2FyZ3VtZW50c1tpXS50ZXN0fWApLAorICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBu
ZXcgVGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7YXJndW1lbnRzW2ldLnN1aXRl
fS8ke2FyZ3VtZW50c1tpXS50ZXN0fWApLAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2
aWV3LnJlZi5zZXRTdGF0ZSh7cHJlcGVuZGluZzogW2NoaWxkXX0pOwpJbmRleDogVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVz
L3N1aXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjQ4MzA2KQorKysgVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGltcG9ydCB7ZGVlcENvbXBhcmUsIEVycm9yRGlzcGxh
eSwgcXVlcnkKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1
cmF0aW9uLmpzJzsKIGltcG9ydCB7RHJhd2VyLCBCcmFuY2hTZWxlY3RvciwgQ29uZmlndXJhdGlv
blNlbGVjdG9ycywgTGltaXRTbGlkZXJ9IGZyb20gJy9hc3NldHMvanMvZHJhd2VyLmpzJzsKIGlt
cG9ydCB7RE9NLCBSRUZ9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7Ci1pbXBvcnQge0xlZ2Vu
ZCwgVGltZWxpbmV9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOworaW1wb3J0IHtMZWdl
bmQsIFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsK
IAogY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKIGNvbnN0IFNVSVRFUyA9IEpTT04ucGFyc2Uo
J3t7IHN1aXRlc3xzYWZlIH19Jyk7ICAgIApAQCAtNjYsNyArNjYsNyBAQCBjbGFzcyBNYWluVmll
dyB7CiAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB7fTsKIAogICAgICAgICBTVUlURVMuZm9yRWFj
aCgoc3VpdGUpID0+IHsKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRp
bWVsaW5lKCdhcGkvcmVzdWx0cy8nICsgc3VpdGUsIHN1aXRlKTsKKyAgICAgICAgICAgIHRoaXMu
Y2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50KCdhcGkvcmVzdWx0cy8n
ICsgc3VpdGUsIHN1aXRlKTsKICAgICAgICAgfSk7CiAgICAgfQogICAgIHVucGFja1N1aXRlcyhz
dWl0ZXNKc29uKSB7CkBAIC04MSw5ICs4MSwxMCBAQCBjbGFzcyBNYWluVmlldyB7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGxldCBzb3J0ZWRTdWl0ZXMgPSBbLi4uc3VpdGVzXS5zb3J0KCk7Cisg
ICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmZvckVhY2goa2V5ID0+IHt0aGlzLmNo
aWxkcmVuW2tleV0udGVhcmRvd24oKTt9KTsKICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHt9Owog
ICAgICAgICBzb3J0ZWRTdWl0ZXMuZm9yRWFjaCgoc3VpdGUpID0+IHsKLSAgICAgICAgICAgIHRo
aXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lKCdhcGkvcmVzdWx0cy8nICsgc3VpdGUp
OworICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxpbmVGcm9tRW5k
cG9pbnQoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1
cm4gc29ydGVkU3VpdGVzOwogICAgIH0KQEAgLTE0Myw3ICsxNDQsNyBAQCBjbGFzcyBNYWluVmll
dyB7CiAgICAgICAgIGxldCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47CiAgICAgICAgIHJldHVy
biBMZWdlbmQoKCkgPT4gewogICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgaW4gY2hpbGRyZW4p
IHsKLSAgICAgICAgICAgICAgICBjaGlsZHJlbltzdWl0ZV0ucmVyZW5kZXIoKTsKKyAgICAgICAg
ICAgICAgICBjaGlsZHJlbltzdWl0ZV0udXBkYXRlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0sIHRydWUpICsgc3VpdGVzLm1hcChzdWl0ZSA9PiB7CiAgICAgICAgICAgICByZXR1cm4gYDxk
aXYgY2xhc3M9InNlY3Rpb24iPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375769</attachid>
            <date>2019-08-07 17:15:33 -0700</date>
            <delta_ts>2019-08-08 10:11:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200172-20190807171532.patch</filename>
            <type>text/plain</type>
            <size>55820</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODM5MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDE5LTA4LTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlc3Vs
dHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAgKENv
bW1pdC5jb25zdHJ1Y3Rvcik6IE1ha2UgdXVpZCBhIG1lbWJlciB2YXJpYWJsZSBpbnN0ZWFkIG9m
IGEgbWVtYmVyIGZ1bmN0aW9uIGZvciBlZmZpY2llbmN5LgorICAgICAgICAoQ29tbWl0LmNvbXBh
cmUpOiBEaXR0by4KKyAgICAgICAgKF9Db21taXRCYW5rLmNvbW1pdEJ5VXVpZCk6IERpdHRvLgor
ICAgICAgICAoX0NvbW1pdEJhbmsuX2xvYWRTaWJsaW5ncyk6IERpdHRvLgorICAgICAgICAoX0Nv
bW1pdEJhbmsuX2xvYWQpOiBEaXR0by4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJw
eS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qczoKKyAgICAgICAgKHRpY2tGb3JDb21taXQpOiBE
ZWxldGVkLgorICAgICAgICAobWluaW11bVV1aWRGb3JSZXN1bHRzKTogR2l2ZW4gYSBkaWN0aW9u
YXJ5IG9mIHJlc3VsdCBsaXN0cywgZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIFVVSUQKKyAgICAgICAg
d2hpY2ggZW5jb21wYXNzZXMgYWxsIHJlc3VsdHMuIENydWNpYWxseSwgdGhpcyBmdW5jdGlvbiBt
dXN0IGV4Y2x1ZGUgYW4gVVVJRHMgd2hpY2ggbWF5CisgICAgICAgIHJlZmVyIHRvIHJlc3VsdHMg
ZXhjbHVkZWQgYmVjYXVzZSBvZiB0aGUgbGltaXQgYXJndW1lbnQuCisgICAgICAgIChyZW5kZXJU
aW1lbGluZSk6IERlbGV0ZWQuCisgICAgICAgIChjb21taXRzRm9yUmVzdWx0cyk6IEdpdmVuIGEg
ZGljdGlvbmFyeSBvZiByZXN1bHQgbGlzdHMsIHJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBhc3Nv
Y2lhdGVkCisgICAgICAgIHdpdGggdGhvc2UgcmVzdWx0cy4KKyAgICAgICAgKHNjYWxlRm9yQ29t
bWl0cyk6IEdpdmVuIGEgbGlzdCBvZiBjb21taXRzLCBnZW5lcmF0ZSBhIHNjYWxlIHRvIGJlIGNv
bnN1bWVkIGJ5IHRoZSBjYW52YXMgVGltZWxpbmUuCisgICAgICAgIChyZXBvc2l0b3JpZXNGb3JD
b21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIHJldHVybiBhIHNvcnRlZCBsaXN0IG9m
IGFzc29jaWF0ZWQgcmVwb3NpdG9yeSBpZHMuCisgICAgICAgICh4QXhpc0Zyb21TY2FsZSk6IENy
ZWF0ZSBhIGNhbnZhcy1iYXNlZCB4LWF4aXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxlIGFu
ZCBhIHJlcG9zaXRvcnkgaWQuCisgICAgICAgIChpblBsYWNlQ29tYmluZSk6IENvbWJpbmUgcmVz
dWx0IG9iamVjdHMgdG9nZXRoZXIuCisgICAgICAgIChzdGF0c0ZvclNpbmdsZVJlc3VsdCk6IFR1
cm4gYSBzaW5nbGUgcmVzdWx0IGludG8gYSBzdGF0IG9iamVjdC4KKyAgICAgICAgKGNvbWJpbmVS
ZXN1bHRzKTogR2l2ZW4gbGlzdHMgb2YgcmVzdWx0cywgY29tYmluZSB0aGVzZSBsaXN0cyB3aGls
ZSBrZWVwaW5nIHRoZSBvcmlnaW5hbCBsaXN0cyB1bmNoYW5nZWQuCisgICAgICAgIChEb3QpOiBE
ZWxldGVkLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQpOiBSZW5hbWVkIGZyb20gVGlt
ZWxpbmUuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC5jb25zdHJ1Y3Rvcik6IENhbnZh
cyBUaW1lbGluZSBtYW5hZ2VzIGV4cGFuc2lvbiBhbmQgY29sbGFwc2luZyBvZiBuZXN0ZWQgdGlt
ZWxpbmVzLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQudGVhcmRvd24pOiBEZXRhY2gg
Y2FsbGJhY2tzIGZyb20gQ29tbWl0QmFuay4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBvaW50
LnVwZGF0ZSk6IFVwZGF0ZSB3aXRoIGFueSBuZXcgY29tbWl0IGluZm9ybWF0aW9uLCBmb3JjZSBh
IHJlLWRyYXcgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgY2FjaGUgY29udGVudHMuCisgICAgICAg
IChUaW1lbGluZUZyb21FbmRwb2ludC5yZWxvYWQpOiBSZW1vdmUgbWFuYWdlbWVudCBvZiBuZXN0
ZWQgdGltZWxpbmVzLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucmVuZGVyKTogVXNl
IGNhbnZhcyBUaW1lbGluZSBpbnN0ZWFkIG9mIGh0bWwgdGltZWxpbmUgdG8gdmlzdWFsaXplIHJl
c3VsdHMuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMv
c2VhcmNoLmh0bWw6IFVzZSBUaW1lbGluZUZyb21FbmRwb2ludCBjbGFzcy4KKyAgICAgICAgKiBy
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0bWw6
IERpdHRvLgorCiAyMDE5LTA4LTA3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIFdITFNMIGFuZCBXZWJHUFUgdG8gdGhlIHdhdGNobGlzdCBm
aWxlCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9j
b21taXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmll
dy9zdGF0aWMvanMvY29tbWl0LmpzCShyZXZpc2lvbiAyNDgzOTIpCisrKyBUb29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy9jb21taXQuanMJKHdvcmtpbmcgY29weSkK
QEAgLTEyNywxMiArMTI3LDEwIEBAIGNsYXNzIENvbW1pdCB7CiAgICAgICAgIHRoaXMub3JkZXIg
PSBqc29uLm9yZGVyOwogICAgICAgICB0aGlzLnJlcG9zaXRvcnlfaWQgPSBqc29uLnJlcG9zaXRv
cnlfaWQ7CiAgICAgICAgIHRoaXMudGltZXN0YW1wID0ganNvbi50aW1lc3RhbXA7Ci0gICAgfQot
ICAgIHV1aWQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnRpbWVzdGFtcCAqIFRJTUVTVEFNUF9U
T19VVUlEX01VTFRJUExJRVIgKyB0aGlzLm9yZGVyOworICAgICAgICB0aGlzLnV1aWQgPSB0aGlz
LnRpbWVzdGFtcCAqIFRJTUVTVEFNUF9UT19VVUlEX01VTFRJUExJRVIgKyB0aGlzLm9yZGVyOwog
ICAgIH0KICAgICBjb21wYXJlKGNvbW1pdCkgewotICAgICAgICByZXR1cm4gdGhpcy51dWlkKCkg
LSBjb21taXQudXVpZCgpOworICAgICAgICByZXR1cm4gdGhpcy51dWlkIC0gY29tbWl0LnV1aWQ7
CiAgICAgfQogfTsKIApAQCAtMTU1LDkgKzE1Myw5IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAg
ICAgICAgd2hpbGUgKGJlZ2luIDw9IGVuZCkgewogICAgICAgICAgICAgY29uc3QgbWlkID0gTWF0
aC5jZWlsKChiZWdpbiArIGVuZCkgLyAyKTsKICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9
IHRoaXMuY29tbWl0c1ttaWRdOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS51dWlkKCkgPT09
IHV1aWQpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLnV1aWQgPT09IHV1aWQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudXVp
ZCgpIDwgdXVpZCkKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudXVpZCA8IHV1aWQpCiAgICAg
ICAgICAgICAgICAgYmVnaW4gPSBtaWQgKyAxOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGVuZCA9IG1pZCAtIDE7CkBAIC0xODMsMTIgKzE4MSwxMiBAQCBjbGFzcyBfQ29tbWl0
QmFuayB7CiAgICAgICAgICAgICAgICAgICAgIGpzb25ba2V5XS5mb3JFYWNoKGNvbW1pdEpzb24g
PT4gewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gbmV3IENvbW1pdChj
b21taXRKc29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA+PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29tbWl0c1tpbmRleF0udXVp
ZCgpIDwgY29tbWl0LnV1aWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
ZWxmLmNvbW1pdHNbaW5kZXhdLnV1aWQgPCBjb21taXQudXVpZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdHMuc3BsaWNlKGluZGV4LCAwLCBjb21taXQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluZGV4OwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29tbWl0c1tpbmRleF0udXVpZCgp
ID09PSBjb21taXQudXVpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxm
LmNvbW1pdHNbaW5kZXhdLnV1aWQgPT09IGNvbW1pdC51dWlkKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluZGV4
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjQwLDEyICsyMzgsMTIgQEAgY2xhc3Mg
X0NvbW1pdEJhbmsgewogICAgICAgICAgICAgICAgICAgICAgICAgY291bnRGb3JSZXBvc2l0b3J5
LnNldChjb21taXQucmVwb3NpdG9yeV9pZCwgY291bnRGb3JSZXBvc2l0b3J5LmdldChjb21taXQu
cmVwb3NpdG9yeV9pZCkgKyAxKTsKIAogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29tbWl0
c0luZGV4IDwgc2VsZi5jb21taXRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNlbGYuY29tbWl0c1tjb21taXRzSW5kZXhdLnV1aWQoKSA+IGNvbW1pdC51dWlkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbW1pdHNbY29tbWl0c0luZGV4XS51
dWlkID4gY29tbWl0LnV1aWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNv
bW1pdHMuc3BsaWNlKGNvbW1pdHNJbmRleCwgMCwgY29tbWl0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArK2NvbW1pdHNJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzZWxmLmNvbW1pdHNbY29tbWl0c0luZGV4XS51dWlkKCkgPT09IGNvbW1pdC51dWlkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb21taXRzW2NvbW1pdHNJbmRleF0u
dXVpZCA9PT0gY29tbWl0LnV1aWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICArK2NvbW1pdHNJbmRleDsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMjYwLDcgKzI1OCw3IEBAIGNsYXNzIF9Db21taXRCYW5rIHsKICAgICAgICAg
ICAgICAgICBjb3VudEZvclJlcG9zaXRvcnkuZm9yRWFjaCgoY291bnQsIHJlcG8pID0+IHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSBsaW1pdCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgbGV0IGNvbW1pdCA9IG5ldyBDb21taXQoanNvbltmaXJzdEluZGV4Rm9yUmVwb3Np
dG9yeS5nZXQocmVwbyldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbkZvdW5kID0gTWF0
aC5tYXgobWluRm91bmQsIGNvbW1pdC51dWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
bWluRm91bmQgPSBNYXRoLm1heChtaW5Gb3VuZCwgY29tbWl0LnV1aWQpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgaWYgKG1pbkZv
dW5kICE9IGJlZ2luVXVpZCkKSW5kZXg6IFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3Zp
ZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5
L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL3RpbWVsaW5lLmpzCShyZXZpc2lvbiAyNDgzOTIp
CisrKyBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGlu
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsOCBAQAogaW1wb3J0IHtDb21taXRCYW5r
fSBmcm9tICcvYXNzZXRzL2pzL2NvbW1pdC5qcyc7CiBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZy
b20gJy9hc3NldHMvanMvY29uZmlndXJhdGlvbi5qcyc7CiBpbXBvcnQge2RlZXBDb21wYXJlLCBF
cnJvckRpc3BsYXksIHBhcmFtc1RvUXVlcnksIHF1ZXJ5VG9QYXJhbXN9IGZyb20gJy9hc3NldHMv
anMvY29tbW9uLmpzJzsKLWltcG9ydCB7RE9NLCBFdmVudFN0cmVhbSwgUkVGfSBmcm9tICcvbGli
cmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtET00sIEV2ZW50U3RyZWFtLCBSRUYsIEZQfSBmcm9t
ICcvbGlicmFyeS9qcy9SZWYuanMnOworaW1wb3J0IHtUaW1lbGluZX0gZnJvbSAnL2xpYnJhcnkv
anMvY29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMnOwogCiAKIGNvbnN0IERFRkFVTFRf
TElNSVQgPSAxMDA7CkBAIC03MSwxNjUgKzcyLDI4OCBAQCBjbGFzcyBFeHBlY3RhdGlvbnMKIH0K
IGxldCB3aWxsRmlsdGVyRXhwZWN0ZWQgPSBmYWxzZTsKIAotZnVuY3Rpb24gdGlja0ZvckNvbW1p
dChjb21taXQsIHNjYWxlKSB7Ci0gICAgbGV0IHBhcmFtcyA9IHsKLSAgICAgICAgYnJhbmNoOiBj
b21taXQuYnJhbmNoID8gW2NvbW1pdC5icmFuY2hdIDogcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5V
Ukwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoLAotICAgICAgICB1dWlkOiBbY29tbWl0LnV1aWQoKV0s
Ci0gICAgfQotICAgIGlmICghcGFyYW1zLmJyYW5jaCkKLSAgICAgICAgZGVsZXRlIHBhcmFtcy5i
cmFuY2g7Ci0gICAgY29uc3QgcXVlcnkgPSBwYXJhbXNUb1F1ZXJ5KHBhcmFtcyk7Ci0KLSAgICBp
ZiAoc2NhbGUgPD0gMCkKLSAgICAgICAgcmV0dXJuICcnOwotICAgIGlmIChzY2FsZSA9PT0gMSkK
LSAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzY2FsZSI+Ci0gICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0ibGluZSI+PC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRl
eHQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2NvbW1pdD8ke3F1ZXJ5fSIg
dGFyZ2V0PSJfYmxhbmsiPiR7U3RyaW5nKGNvbW1pdC5pZCkuc3Vic3RyaW5nKDAsMTApfTwvYT4K
LSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+YDsKLSAg
ICBsZXQgcmVzdWx0ID0gJyc7Ci0gICAgd2hpbGUgKHNjYWxlID4gMCkgewotICAgICAgICBsZXQg
Y291bnRUb1VzZSA9IHNjYWxlOwotICAgICAgICBpZiAoY291bnRUb1VzZSA9PT0gMTEgfHwgY291
bnRUb1VzZSA9PSAxMikKLSAgICAgICAgICAgIGNvdW50VG9Vc2UgPSA2OwotICAgICAgICBlbHNl
IGlmIChjb3VudFRvVXNlID4gMTApCi0gICAgICAgICAgICBjb3VudFRvVXNlID0gMTA7Ci0gICAg
ICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2NhbGUgZ3JvdXAtJHtjb3VudFRvVXNlfSI+Ci0g
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLWxpbmUtbGVmdCI+PC9kaXY+Ci0gICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0idGV4dCI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtx
dWVyeX0iIHRhcmdldD0iX2JsYW5rIj4ke1N0cmluZyhjb21taXQuaWQpLnN1YnN0cmluZygwLDEw
KX08L2E+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0iYm9yZGVyLWxpbmUtcmlnaHQiPjwvZGl2PgotICAgICAgICAgICAgPC9kaXY+YDsKLSAgICAg
ICAgc2NhbGUgLT0gY291bnRUb1VzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KK2Z1
bmN0aW9uIG1pbmltdW1VdWlkRm9yUmVzdWx0cyhyZXN1bHRzLCBsaW1pdCkgeworICAgIGNvbnN0
IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwKTsKKyAgICBsZXQgbWluRGlzcGxheWVk
VXVpZCA9IG5vdzsKKyAgICBsZXQgbWF4TGltaXRlZFV1aWQgPSAwOworCisgICAgT2JqZWN0Lmtl
eXMocmVzdWx0cykuZm9yRWFjaCgoa2V5KSA9PiB7CisgICAgICAgIHJlc3VsdHNba2V5XS5mb3JF
YWNoKHBhaXIgPT4geworICAgICAgICAgICAgaWYgKCFwYWlyLnJlc3VsdHMubGVuZ3RoKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChsaW1pdCAhPT0gMSAmJiBsaW1p
dCA9PT0gcGFpci5yZXN1bHRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBtYXhMaW1pdGVkVXVp
ZCA9IE1hdGgubWF4KHBhaXIucmVzdWx0c1swXS51dWlkLCBtYXhMaW1pdGVkVXVpZCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChsaW1pdCA9PT0gMSkKKyAgICAgICAgICAgICAgICBtaW5EaXNwbGF5
ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzW3BhaXIucmVzdWx0cy5sZW5ndGggLSAxXS51
dWlkLCBtaW5EaXNwbGF5ZWRVdWlkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0aC5taW4ocGFpci5yZXN1bHRzWzBdLnV1aWQsIG1pbkRp
c3BsYXllZFV1aWQpOworICAgICAgICB9KTsKKyAgICB9KTsKIAotZnVuY3Rpb24gcmVuZGVyVGlt
ZWxpbmUoY29tbWl0cywgcmVwb3NpdG9yaWVzID0gW10sIHRvcCA9IGZhbHNlKSB7Ci0gICAgLy8g
RklYTUU6IFRoaXMgZnVuY3Rpb24gYnJlYWtzIHdpdGggbW9yZSB0aGFuIDMgcmVwb3NpdG9yaWVz
IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzUxMDQyOTgxPgotICAgIGlmIChyZXBvc2l0b3Jp
ZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIGlmICh0b3ApCi0gICAgICAgICAgICByZXR1cm4g
Jyc7Ci0gICAgICAgIHJlcG9zaXRvcmllcyA9IFtudWxsXTsKLSAgICB9Ci0gICAgY29uc3Qgc3Rh
cnQgPSB0b3AgPyBNYXRoLmNlaWwocmVwb3NpdG9yaWVzLmxlbmd0aCAvIDIpIDogMDsKLSAgICBj
b25zdCBlbmQgPSB0b3AgPyByZXBvc2l0b3JpZXMubGVuZ3RoIDogTWF0aC5jZWlsKHJlcG9zaXRv
cmllcy5sZW5ndGggLyAyKTsKLSAgICBjb25zdCBudW1iZXJPZkVsZW1lbnRzID0gY29tbWl0cy5s
ZW5ndGggLSBNYXRoLm1heChyZXBvc2l0b3JpZXMubGVuZ3RoIC0gMSwgMCkKLSAgICByZXR1cm4g
cmVwb3NpdG9yaWVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcChyZXBvc2l0b3J5ID0+IHsKLSAgICAg
ICAgbGV0IGNvbW1pdHNGcm9tT3RoZXJSZXBvcyA9IDA7Ci0gICAgICAgIGxldCByZW5kZXJlZEVs
ZW1lbnRzID0gMDsKLSAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJ4LWF4aXMgJHt0b3AgPyAn
dG9wJyA6ICcnfSI+Ci0gICAgICAgICAgICAgICAgJHtjb21taXRzLm1hcChjb21taXQgPT4gewot
ICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQgJiYgY29tbWl0LnJl
cG9zaXRvcnlfaWQgIT09IHJlcG9zaXRvcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsr
Y29tbWl0c0Zyb21PdGhlclJlcG9zOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcn
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxl
ID0gIE1hdGgubWluKGNvbW1pdHNGcm9tT3RoZXJSZXBvcyArIDEsIG51bWJlck9mRWxlbWVudHMg
LSByZW5kZXJlZEVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0c0Zyb21PdGhl
clJlcG9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRFbGVtZW50cyArPSBzY2Fs
ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tGb3JDb21taXQoY29tbWl0LCBzY2Fs
ZSk7Ci0gICAgICAgICAgICAgICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICA8L2Rpdj5gOwot
ICAgIH0pLmpvaW4oJycpOworICAgIGlmIChtaW5EaXNwbGF5ZWRVdWlkID09PSBub3cpCisgICAg
ICAgIHJldHVybiBtYXhMaW1pdGVkVXVpZDsKKyAgICByZXR1cm4gTWF0aC5tYXgobWluRGlzcGxh
eWVkVXVpZCwgbWF4TGltaXRlZFV1aWQpOwogfQogCi1jbGFzcyBEb3QgewotICAgIHN0YXRpYyBt
ZXJnZShkb3RzID0ge30pIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IFtdOwotICAgICAgICBsZXQg
aW5kZXggPSAwOwotICAgICAgICBsZXQgaGFzRGF0YSA9IHRydWU7Ci0KLSAgICAgICAgd2hpbGUg
KGhhc0RhdGEpIHsKLSAgICAgICAgICAgIGxldCBkb3QgPSBuZXcgRG90KCk7Ci0gICAgICAgICAg
ICBoYXNEYXRhID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIE9iamVjdC5rZXlzKGRvdHMpLmZvckVh
Y2goa2V5ID0+IHsKLSAgICAgICAgICAgICAgICBpZiAoZG90c1trZXldLmxlbmd0aCA8PSBpbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGhhc0RhdGEg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICghZG90c1trZXldW2luZGV4XS5jb3VudCkKK2Z1
bmN0aW9uIGNvbW1pdHNGb3JSZXN1bHRzKHJlc3VsdHMsIGxpbWl0LCBhbGxDb21taXRzID0gdHJ1
ZSkgeworICAgIGNvbnN0IG1pbkRpc3BsYXllZFV1aWQgPSBtaW5pbXVtVXVpZEZvclJlc3VsdHMo
bGltaXQpOworICAgIGxldCBjb21taXRzID0gW107CisgICAgbGV0IHJlcG9zaXRvcmllcyA9IG5l
dyBTZXQoKTsKKyAgICBsZXQgY3VycmVudENvbW1pdEluZGV4ID0gQ29tbWl0QmFuay5jb21taXRz
Lmxlbmd0aCAtIDE7CisgICAgT2JqZWN0LmtleXMocmVzdWx0cykuZm9yRWFjaCgoa2V5KSA9PiB7
CisgICAgICAgIHJlc3VsdHNba2V5XS5mb3JFYWNoKHBhaXIgPT4geworICAgICAgICAgICAgcGFp
ci5yZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LnV1aWQgPCBtaW5EaXNwbGF5ZWRVdWlkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgaWYgKGRvdC5jb3VudCkKLSAgICAgICAgICAgICAgICAgICAgZG90LmNv
bWJpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsZXQgY2FuZGlkYXRlQ29tbWl0cyA9IFtd
OwogCi0gICAgICAgICAgICAgICAgZG90LmNvdW50ICs9IGRvdHNba2V5XVtpbmRleF0uY291bnQ7
Ci0gICAgICAgICAgICAgICAgZG90LmZhaWxlZCArPSBkb3RzW2tleV1baW5kZXhdLmZhaWxlZDsK
LSAgICAgICAgICAgICAgICBkb3QudGltZW91dCArPSBkb3RzW2tleV1baW5kZXhdLnRpbWVvdXQ7
Ci0gICAgICAgICAgICAgICAgZG90LmNyYXNoICs9IGRvdHNba2V5XVtpbmRleF0uY3Jhc2g7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRvdC5jb21iaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgZG90
LmxpbmsgPSBudWxsOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ZG90LmxpbmsgPSBkb3RzW2tleV1baW5kZXhdLmxpbms7CisgICAgICAgICAgICAgICAgaWYgKCFh
bGxDb21taXRzKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21t
aXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVu
dENvbW1pdEluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENvbW1pdEJhbmsu
Y29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQgPCByZXN1bHQudXVpZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ29tbWl0
cyB8fCBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XS51dWlkID09PSByZXN1
bHQudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMucHVzaChD
b21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XSk7CisgICAgICAgICAgICAgICAg
ICAgIC0tY3VycmVudENvbW1pdEluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGggPT09IDAgfHwgY2FuZGlkYXRlQ29tbWl0
c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAtIDFdLnV1aWQgIT09IHJlc3VsdC51dWlkKQorICAg
ICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2goeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWQ6ICc/JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ6IHJlc3VsdC51
dWlkLAorICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGxldCBpbmRl
eCA9IDA7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1pdCA9
PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQoY29tbWl0LnJlcG9zaXRvcnlfaWQp
OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21taXRzLmxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkID09PSBjb21taXRzW2luZGV4
XS51dWlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCA+IGNvbW1pdHNbaW5kZXhdLnV1aWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRzLnNwbGljZShpbmRleCwgMCwgY29tbWl0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaChjb21taXQpOworICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoaGFzRGF0
YSkKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaChkb3QpOwotICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgaWYgKGN1cnJlbnRDb21taXRJbmRleCA+PSAw
ICYmIGNvbW1pdHMubGVuZ3RoKSB7CisgICAgICAgIGxldCB0cmFpbGluZ1JlcG9zaXRvcmllcyA9
IG5ldyBTZXQocmVwb3NpdG9yaWVzKTsKKyAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVs
ZXRlKGNvbW1pdHNbY29tbWl0cy5sZW5ndGggLSAxXS5yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAg
d2hpbGUgKGN1cnJlbnRDb21taXRJbmRleCA+PSAwICYmIHRyYWlsaW5nUmVwb3NpdG9yaWVzLnNp
emUpIHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IENvbW1pdEJhbmsuY29tbWl0c1tjdXJy
ZW50Q29tbWl0SW5kZXhdOworICAgICAgICAgICAgaWYgKHRyYWlsaW5nUmVwb3NpdG9yaWVzLmhh
cyhjb21taXQucmVwb3NpdG9yeV9pZCkpIHsKKyAgICAgICAgICAgICAgICBjb21taXRzLnB1c2go
Y29tbWl0KTsKKyAgICAgICAgICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUoY29t
bWl0LnJlcG9zaXRvcnlfaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLS1jdXJyZW50
Q29tbWl0SW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0g
ICAgY29uc3RydWN0b3IoY291bnQgPSAwLCBmYWlsZWQgPSAwLCB0aW1lb3V0ID0gMCwgY3Jhc2gg
PSAwLCBjb21iaW5lZCA9IGZhbHNlLCBsaW5rID0gbnVsbCkgewotICAgICAgICB0aGlzLmNvdW50
ID0gY291bnQ7Ci0gICAgICAgIHRoaXMuZmFpbGVkID0gZmFpbGVkOwotICAgICAgICB0aGlzLnRp
bWVvdXQgPSB0aW1lb3V0OwotICAgICAgICB0aGlzLmNyYXNoID0gY3Jhc2g7Ci0gICAgICAgIHRo
aXMuY29tYmluZWQgPSBjb21iaW5lZDsKLSAgICAgICAgdGhpcy5saW5rID0gbGluazsKKworICAg
IHJlcG9zaXRvcmllcyA9IFsuLi5yZXBvc2l0b3JpZXNdOworICAgIHJlcG9zaXRvcmllcy5zb3J0
KCk7CisgICAgcmV0dXJuIGNvbW1pdHM7Cit9CisKK2Z1bmN0aW9uIHNjYWxlRm9yQ29tbWl0cyhj
b21taXRzKSB7CisgICAgbGV0IHNjYWxlID0gW107CisgICAgZm9yIChsZXQgaSA9IGNvbW1pdHMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgcmVwb3NpdG9yeV9pZCA9
IGNvbW1pdHNbaV0ucmVwb3NpdG9yeV9pZCA/IGNvbW1pdHNbaV0ucmVwb3NpdG9yeV9pZCA6ICc/
JzsKKyAgICAgICAgc2NhbGUudW5zaGlmdCh7fSk7CisgICAgICAgIHNjYWxlWzBdW3JlcG9zaXRv
cnlfaWRdID0gY29tbWl0c1tpXTsKKyAgICAgICAgaWYgKHNjYWxlLmxlbmd0aCA8IDIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgT2JqZWN0LmtleXMoc2NhbGVbMV0pLmZvckVhY2go
KGtleSkgPT4geworICAgICAgICAgICAgaWYgKGtleSA9PT0gcmVwb3NpdG9yeV9pZCB8fCBrZXkg
PT09ICc/JyB8fCBrZXkgPT09ICd1dWlkJykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBzY2FsZVswXVtrZXldID0gc2NhbGVbMV1ba2V5XTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHNjYWxlWzBdLnV1aWQgPSBNYXRoLm1heCguLi5PYmplY3Qua2V5cyhzY2FsZVswXSkubWFw
KChrZXkpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBzY2FsZVswXVtrZXldLnV1aWQ7CisgICAg
ICAgIH0pKTsKICAgICB9Ci0gICAgdG9TdHJpbmcoKSB7Ci0gICAgICAgIGlmICghdGhpcy5jb3Vu
dCkKLSAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iZG90IGVtcHR5Ij48L2Rpdj5gOwor
ICAgIHJldHVybiBzY2FsZTsKK30KIAotICAgICAgICBjb25zdCBzZWxmID0gdGhpczsKK2Z1bmN0
aW9uIHJlcG9zaXRvcmllc0ZvckNvbW1pdHMoY29tbWl0cykgeworICAgIGxldCByZXBvc2l0b3Jp
ZXMgPSBuZXcgU2V0KCk7CisgICAgY29tbWl0cy5mb3JFYWNoKChjb21taXQpID0+IHsKKyAgICAg
ICAgaWYgKGNvbW1pdC5yZXBvc2l0b3J5X2lkKQorICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmFk
ZChjb21taXQucmVwb3NpdG9yeV9pZCk7CisgICAgfSk7CisgICAgcmVwb3NpdG9yaWVzID0gWy4u
LnJlcG9zaXRvcmllc107CisgICAgaWYgKCFyZXBvc2l0b3JpZXMubGVuZ3RoKQorICAgICAgICBy
ZXBvc2l0b3JpZXMgPSBbJz8nXTsKKyAgICByZXBvc2l0b3JpZXMuc29ydCgpOworICAgIHJldHVy
biByZXBvc2l0b3JpZXM7Cit9CiAKLSAgICAgICAgZnVuY3Rpb24gcmVuZGVyKGNzc0NsYXNzLCBp
bnNpZGU9JycpIHsKLSAgICAgICAgICAgIGlmIChzZWxmLmxpbmspCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGA8YSBocmVmPSIke3NlbGYubGlua30iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iJHtj
c3NDbGFzc30iPiR7aW5zaWRlfTwvYT5gOwotICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNz
PSIke2Nzc0NsYXNzfSI+JHtpbnNpZGV9PC9kaXY+YDsKK2Z1bmN0aW9uIHhBeGlzRnJvbVNjYWxl
KHNjYWxlLCByZXBvc2l0b3J5LCB1cGRhdGVzQXJyYXksIGlzVG9wPWZhbHNlKQoreworICAgIGZ1
bmN0aW9uIHNjYWxlRm9yUmVwb3NpdG9yeShzY2FsZSkgeworICAgICAgICByZXR1cm4gc2NhbGUu
bWFwKG5vZGUgPT4geworICAgICAgICAgICAgbGV0IGNvbW1pdCA9IG5vZGVbcmVwb3NpdG9yeV07
CisgICAgICAgICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgICAgICBjb21taXQgPSBub2Rl
Wyc/J107CisgICAgICAgICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
e2lkOiAnJywgdXVpZDogbnVsbH07CisgICAgICAgICAgICByZXR1cm4gY29tbWl0OworICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gVGltZWxpbmUuQ2FudmFzWEF4aXNDb21wb25lbnQo
c2NhbGVGb3JSZXBvc2l0b3J5KHNjYWxlKSwgeworICAgICAgICBpc1RvcDogaXNUb3AsCisgICAg
ICAgIGhlaWdodDogMTMwLAorICAgICAgICBvblNjYWxlQ2xpY2s6IChub2RlKSA9PiB7CisgICAg
ICAgICAgICBpZiAoIW5vZGUubGFiZWwuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgbGV0IHBhcmFtcyA9IHsKKyAgICAgICAgICAgICAgICBicmFuY2g6IG5vZGUubGFi
ZWwuYnJhbmNoID8gW25vZGUubGFiZWwuYnJhbmNoXSA6IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQu
VVJMLnNwbGl0KCc/JylbMV0pLmJyYW5jaCwKKyAgICAgICAgICAgICAgICB1dWlkOiBbbm9kZS5s
YWJlbC51dWlkXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcGFyYW1zLmJyYW5j
aCkKKyAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1zLmJyYW5jaDsKKyAgICAgICAgICAgIGNv
bnN0IHF1ZXJ5ID0gcGFyYW1zVG9RdWVyeShwYXJhbXMpOworICAgICAgICAgICAgd2luZG93Lm9w
ZW4oYC9jb21taXQ/JHtxdWVyeX1gLCAnX2JsYW5rJyk7CisgICAgICAgIH0sCisgICAgICAgIC8v
IFBlciB0aGUgYmlydGhkYXkgcGFyYWRveCwgMTAlIGNoYW5nZSBvZiBjb2xsaXNpb24gd2l0aCA3
LjcgbWlsbGlvbiBjb21taXRzIHdpdGggMTIgY2hhcmFjdGVyIGNvbW1pdHMKKyAgICAgICAgZ2V0
TGFiZWxGdW5jOiAoY29tbWl0KSA9PiB7cmV0dXJuIGNvbW1pdCA/IGNvbW1pdC5pZC5zdWJzdHJp
bmcoMCwxMikgOiAnPyc7fSwKKyAgICAgICAgZ2V0U2NhbGVGdW5jOiAoY29tbWl0KSA9PiBjb21t
aXQudXVpZCwKKyAgICAgICAgZXhwb3J0ZXI6ICh1cGRhdGVGdW5jdGlvbikgPT4geworICAgICAg
ICAgICAgdXBkYXRlc0FycmF5LnB1c2goKHNjYWxlKSA9PiB7dXBkYXRlRnVuY3Rpb24oc2NhbGVG
b3JSZXBvc2l0b3J5KHNjYWxlKSk7fSk7CisgICAgICAgIH0sCisgICAgfSk7Cit9CisKK2NvbnN0
IHRlc3RzUmVnZXggPSAvdGVzdHNfKFthLXpdKSsvOworY29uc3QgZmFpbHVyZVR5cGVPcmRlciA9
IFsnZmFpbGVkJywgJ3RpbWVkb3V0JywgJ2NyYXNoZWQnXTsKK2NvbnN0IGZhaWx1cmVUeXBlTWFw
cGluZyA9IHsKKyAgICBmYWlsZWQ6ICdFUlJPUicsCisgICAgdGltZWRvdXQ6ICdUSU1FT1VUJywK
KyAgICBjcmFzaGVkOiAnQ1JBU0gnLAorfQorCitmdW5jdGlvbiBpblBsYWNlQ29tYmluZShvdXQs
IG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIG91dDsKKworICAgIGlmICgh
b3V0KSB7CisgICAgICAgIG91dCA9IHt9OworICAgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVh
Y2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXlbMF0gPT09ICdfJykKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAob2JqW2tleV0gaW5zdGFuY2VvZiBPYmplY3Qp
CisgICAgICAgICAgICAgICAgb3V0W2tleV0gPSBpblBsYWNlQ29tYmluZShvdXRba2V5XSwgb2Jq
W2tleV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dFtrZXldID0gb2Jq
W2tleV07CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIE9iamVjdC5rZXlzKG91
dCkuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgaWYgKGtleVswXSA9PT0gJ18nKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKG91dFtrZXldIGluc3RhbmNl
b2YgT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgb3V0W2tleV0gPSBpblBsYWNlQ29tYmluZShv
dXRba2V5XSwgb2JqW2tleV0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gU2V0IG9mIHNwZWNpYWwgY2FzZSBrZXlzIHdoaWNoIG5lZWQg
dG8gYmUgYWRkZWQgdG9nZXRoZXIKKyAgICAgICAgICAgIGlmIChrZXkubWF0Y2godGVzdHNSZWdl
eCkpIHsKKyAgICAgICAgICAgICAgICBvdXRba2V5XSArPSBvYmpba2V5XTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBrZXkg
ZXhpc3RzLCBidXQgZG9lc24ndCBtYXRjaCwgZGVsZXRlIGl0CisgICAgICAgICAgICBpZiAoIShr
ZXkgaW4gb2JqKSB8fCBvdXRba2V5XSAhPT0gb2JqW2tleV0pIHsKKyAgICAgICAgICAgICAgICBk
ZWxldGUgb3V0W2tleV07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7Cisg
ICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHRlc3RzUmVnZXgpICYmICEoa2V5IGluIG91dCkpCisg
ICAgICAgICAgICAgICAgb3V0W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgfSk7CisgICAgfQor
ICAgIHJldHVybiBvdXQ7Cit9CisKK2Z1bmN0aW9uIHN0YXRzRm9yU2luZ2xlUmVzdWx0KHJlc3Vs
dCkgeworICAgIGNvbnN0IGFjdHVhbElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChy
ZXN1bHQuYWN0dWFsKTsKKyAgICBjb25zdCB1bmV4cGVjdGVkSWQgPSBFeHBlY3RhdGlvbnMuc3Ry
aW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy51bmV4cGVjdGVkUmVzdWx0cyhyZXN1bHQuYWN0dWFs
LCByZXN1bHQuZXhwZWN0ZWQpKTsKKyAgICBsZXQgc3RhdHMgPSB7CisgICAgICAgIHRlc3RzX3J1
bjogMSwKKyAgICAgICAgdGVzdHNfc2tpcHBlZDogMCwKKyAgICB9CisgICAgZmFpbHVyZVR5cGVP
cmRlci5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICBjb25zdCBpZEZvclR5cGUgPSBFeHBlY3Rh
dGlvbnMuc3RyaW5nVG9TdGF0ZUlkKGZhaWx1cmVUeXBlTWFwcGluZ1t0eXBlXSk7CisgICAgICAg
IHN0YXRzW2B0ZXN0c18ke3R5cGV9YF0gPSBhY3R1YWxJZCA+IGlkRm9yVHlwZSAgPyAwIDogMTsK
KyAgICAgICAgc3RhdHNbYHRlc3RzX3VuZXhwZWN0ZWRfJHt0eXBlfWBdID0gdW5leHBlY3RlZElk
ID4gaWRGb3JUeXBlICA/IDAgOiAxOworICAgIH0pOworICAgIHJldHVybiBzdGF0czsKK30KKwor
ZnVuY3Rpb24gY29tYmluZVJlc3VsdHMoKSB7CisgICAgbGV0IGNvdW50cyA9IG5ldyBBcnJheShh
cmd1bWVudHMubGVuZ3RoKS5maWxsKDApOworICAgIGxldCBkYXRhID0gW107CisKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAvLyBGaW5kIGNhbmRpZGF0ZSB1dWlkCisgICAgICAgIGxldCB1
dWlkID0gMDsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGxldCBjYW5kaWRhdGVVdWlkID0gbnVsbDsKKyAgICAgICAgICAgIHdo
aWxlIChhcmd1bWVudHNbaV0gJiYgYXJndW1lbnRzW2ldLmxlbmd0aCA+IGNvdW50c1tpXSkgewor
ICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVV1aWQgPSBhcmd1bWVudHNbaV1bY291bnRzW2ldXS51
dWlkOworICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVVdWlkKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICArK2NvdW50c1tpXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVVdWlkKQorICAgICAgICAgICAgICAgIHV1aWQgPSBN
YXRoLm1heCh1dWlkLCBjYW5kaWRhdGVVdWlkKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgh
dGhpcy5mYWlsZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKCdkb3Qgc3VjY2VzcycpOwor
ICAgICAgICBpZiAoIXV1aWQpCisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKworICAgICAgICAv
LyBDb21iaW5lIHJlbGV2YW50IHJlc3VsdHMKKyAgICAgICAgbGV0IGRhdGFOb2RlID0gbnVsbDsK
KyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudHMubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIHdoaWxlIChjb3VudHNbaV0gPCBhcmd1bWVudHNbaV0ubGVuZ3RoICYmIGFyZ3VtZW50
c1tpXVtjb3VudHNbaV1dICYmIGFyZ3VtZW50c1tpXVtjb3VudHNbaV1dLnV1aWQgPT09IHV1aWQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YU5vZGUgJiYgIWRhdGFOb2RlLnN0YXRzKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTm9kZS5zdGF0cyA9IHN0YXRzRm9yU2luZ2xlUmVzdWx0KGRh
dGFOb2RlKTsKIAotICAgICAgICBsZXQga2V5ID0gJ2ZhaWxlZCc7Ci0gICAgICAgIGlmICh0aGlz
LnRpbWVvdXQpCi0gICAgICAgICAgICBrZXkgPSAndGltZW91dCc7Ci0gICAgICAgIGlmICh0aGlz
LmNyYXNoKQotICAgICAgICAgICAga2V5ID0gJ2NyYXNoJzsKLQotICAgICAgICBpZiAoIXRoaXMu
Y29tYmluZWQpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtrZXl9YCwgYDxkaXYg
Y2xhc3M9InRhZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29sb3IpIj4ke3RoaXMu
ZmFpbGVkfTwvZGl2PmApOwotCi0gICAgICAgIHJldHVybiByZW5kZXIoYGRvdCAke2tleX1gLCBg
PGRpdiBjbGFzcz0idGFnIiBzdHlsZT0iY29sb3I6dmFyKC0tYm9sZEludmVyc2VDb2xvcikiPgot
ICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBw
ZXJjZW50ID0gTWF0aC5jZWlsKHNlbGYuZmFpbGVkIC8gc2VsZi5jb3VudCAqIDEwMCAtIC41KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQgPiAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnPDEnOwot
ICAgICAgICAgICAgICAgIH0oKX0gJQotICAgICAgICAgICAgPC9kaXY+YCk7CisgICAgICAgICAg
ICAgICAgZGF0YU5vZGUgPSBpblBsYWNlQ29tYmluZShkYXRhTm9kZSwgYXJndW1lbnRzW2ldW2Nv
dW50c1tpXV0pOworCisgICAgICAgICAgICAgICAgaWYgKGRhdGFOb2RlLnN0YXRzICYmICFhcmd1
bWVudHNbaV1bY291bnRzW2ldXS5zdGF0cykKKyAgICAgICAgICAgICAgICAgICAgZGF0YU5vZGUu
c3RhdHMgPSBpblBsYWNlQ29tYmluZShkYXRhTm9kZS5zdGF0cywgc3RhdHNGb3JTaW5nbGVSZXN1
bHQoYXJndW1lbnRzW2ldW2NvdW50c1tpXV0pKTsKKworICAgICAgICAgICAgICAgICsrY291bnRz
W2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChkYXRhTm9kZSkKKyAg
ICAgICAgICAgIGRhdGEucHVzaChkYXRhTm9kZSk7CiAgICAgfQorICAgIHJldHVybiBkYXRhOwog
fQogCi1jbGFzcyBUaW1lbGluZSB7CitjbGFzcyBUaW1lbGluZUZyb21FbmRwb2ludCB7CiAgICAg
Y29uc3RydWN0b3IoZW5kcG9pbnQsIHN1aXRlID0gbnVsbCkgewogICAgICAgICB0aGlzLmVuZHBv
aW50ID0gZW5kcG9pbnQ7CiAgICAgICAgIHRoaXMuZGlzcGxheUFsbENvbW1pdHMgPSB0cnVlOwog
CiAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBDb25maWd1cmF0aW9uLmZyb21RdWVyeSgp
OwogICAgICAgICB0aGlzLnJlc3VsdHMgPSB7fTsKLSAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSB7
fTsKLSAgICAgICAgdGhpcy5leHBhbmRlZFNES3MgPSB7fTsKICAgICAgICAgdGhpcy5zdWl0ZSA9
IHN1aXRlOyAgLy8gU3VpdGUgaXMgb2Z0ZW4gaW1wbGllZCBieSB0aGUgZW5kcG9pbnQsIGJ1dCB0
cnlpbmcgdG8gZGV0ZXJtaW5lIHN1aXRlIGZyb20gZW5kcG9pbnQgaXMgbm90IHRyaXZpYWwuCiAK
KyAgICAgICAgdGhpcy51cGRhdGVzID0gW107CisgICAgICAgIHRoaXMueGF4aXNVcGRhdGVzID0g
W107CisgICAgICAgIHRoaXMudGltZWxpbmVVcGRhdGUgPSBudWxsOworICAgICAgICB0aGlzLnJl
cG9zaXRvcmllcyA9IFtdOworCiAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOwotICAgICAgICB0
aGlzLmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAg
ICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAg
dGhpcy5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXSA9IHRydWU7Ci0gICAgICAgIH0p
OwogCiAgICAgICAgIHRoaXMubGF0ZXN0RGlzcGF0Y2ggPSBEYXRlLm5vdygpOwogICAgICAgICB0
aGlzLnJlZiA9IFJFRi5jcmVhdGVSZWYoewpAQCAtMjQ0LDE1ICszNjgsNDYgQEAgY2xhc3MgVGlt
ZWxpbmUgewogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAgICAgICBDb21taXRCYW5r
LmNhbGxiYWNrcy5wdXNoKCgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5
VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pOwotICAgICAgICAgICAgc2VsZi5y
ZWYuc2V0U3RhdGUocGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3BhcmFtcy5s
aW1pdC5sZW5ndGggLSAxXSkgOiBERUZBVUxUX0xJTUlUKTsKLSAgICAgICAgfSk7CisgICAgICAg
IHRoaXMuY29tbWl0X2NhbGxiYWNrID0gKCkgPT4geworICAgICAgICAgICAgc2VsZi51cGRhdGUo
KTsKKyAgICAgICAgfTsKKyAgICAgICAgQ29tbWl0QmFuay5jYWxsYmFja3MucHVzaCh0aGlzLmNv
bW1pdF9jYWxsYmFjayk7CiAKICAgICAgICAgdGhpcy5yZWxvYWQoKTsKICAgICB9CisgICAgdGVh
cmRvd24oKSB7CisgICAgICAgIENvbW1pdEJhbmsuY2FsbGJhY2tzID0gQ29tbWl0QmFuay5jYWxs
YmFja3MuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycikgPT4geworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuY29tbWl0X2NhbGxiYWNrID09PSB2YWx1ZTsKKyAgICAgICAgfSk7CisgICAgfQorICAg
IHVwZGF0ZSgpIHsKKyAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVu
dC5VUkwuc3BsaXQoJz8nKVsxXSk7CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBjb21taXRzRm9y
UmVzdWx0cyh0aGlzLnJlc3VsdHMsIHBhcmFtcy5saW1pdCA/IHBhcnNlSW50KHBhcmFtcy5saW1p
dFtwYXJhbXMubGltaXQubGVuZ3RoIC0gMV0pIDogREVGQVVMVF9MSU1JVCwgdGhpcy5hbGxDb21t
aXRzKTsKKyAgICAgICAgY29uc3Qgc2NhbGUgPSBzY2FsZUZvckNvbW1pdHMoY29tbWl0cyk7CisK
KyAgICAgICAgY29uc3QgbmV3UmVwb3NpdG9yaWVzID0gcmVwb3NpdG9yaWVzRm9yQ29tbWl0cyhj
b21taXRzKTsKKyAgICAgICAgbGV0IGhhdmVOZXdSZXBvcyA9IHRoaXMucmVwb3NpdG9yaWVzLmxl
bmd0aCAhPT0gbmV3UmVwb3NpdG9yaWVzLmxlbmd0aDsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
ICFoYXZlTmV3UmVwb3MgJiYgaSA8IHRoaXMucmVwb3NpdG9yaWVzLmxlbmd0aCAmJiBpIDwgbmV3
UmVwb3NpdG9yaWVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgaGF2ZU5ld1JlcG9zID0gdGhp
cy5yZXBvc2l0b3JpZXNbaV0gIT09IG5ld1JlcG9zaXRvcmllc1tpXTsKKyAgICAgICAgaWYgKGhh
dmVOZXdSZXBvcyAmJiB0aGlzLnRpbWVsaW5lVXBkYXRlKSB7CisgICAgICAgICAgICB0aGlzLnhh
eGlzVXBkYXRlcyA9IFtdOworICAgICAgICAgICAgbGV0IHRvcCA9IHRydWU7CisgICAgICAgICAg
ICBsZXQgY29tcG9uZW50cyA9IFtdOworCisgICAgICAgICAgICBuZXdSZXBvc2l0b3JpZXMuZm9y
RWFjaChyZXBvc2l0b3J5ID0+IHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goeEF4
aXNGcm9tU2NhbGUoc2NhbGUsIHJlcG9zaXRvcnksIHRoaXMueGF4aXNVcGRhdGVzLCB0b3ApKTsK
KyAgICAgICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICB0aGlzLnRpbWVsaW5lVXBkYXRlKGNvbXBvbmVudHMpOworICAgICAgICAgICAgdGhpcy5y
ZXBvc2l0b3JpZXMgPSBuZXdSZXBvc2l0b3JpZXM7CisgICAgICAgIH0KKworICAgICAgICB0aGlz
LnVwZGF0ZXMuZm9yRWFjaChmdW5jID0+IHtmdW5jKHNjYWxlKTt9KQorICAgICAgICB0aGlzLnhh
eGlzVXBkYXRlcy5mb3JFYWNoKGZ1bmMgPT4ge2Z1bmMoc2NhbGUpO30pOworICAgIH0KICAgICBy
ZXJlbmRlcigpIHsKLSAgICAgICAgbGV0IHBhcmFtcyA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQu
VVJMLnNwbGl0KCc/JylbMV0pOworICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeVRvUGFyYW1z
KGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKICAgICAgICAgdGhpcy5yZWYuc2V0U3RhdGUo
cGFyYW1zLmxpbWl0ID8gcGFyc2VJbnQocGFyYW1zLmxpbWl0W3BhcmFtcy5saW1pdC5sZW5ndGgg
LSAxXSkgOiBERUZBVUxUX0xJTUlUKTsKICAgICB9CiAgICAgcmVsb2FkKCkgewpAQCAtMjczLDEx
ICs0MjgsOCBAQCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgIGlmICghZGVlcENvbXBhcmUobmV3
Q29uZmlncywgdGhpcy5jb25maWd1cmF0aW9ucykpIHsKICAgICAgICAgICAgIHRoaXMuY29uZmln
dXJhdGlvbnMgPSBuZXdDb25maWdzOwogICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0ge307Ci0g
ICAgICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IHt9OwotICAgICAgICAgICAgdGhpcy5leHBhbmRl
ZFNES3MgPSB7fTsKICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25m
aWd1cmF0aW9uID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlv
bi50b0tleSgpXSA9IFtdOwotICAgICAgICAgICAgICAgIHRoaXMuY29sbGFwc2VkW2NvbmZpZ3Vy
YXRpb24udG9LZXkoKV0gPSB0cnVlOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIApAQCAt
MzMxLDI3OCArNDgzLDIyNiBAQCBjbGFzcyBUaW1lbGluZSB7CiAgICAgICAgICAgICBzdGF0ZTog
dGhpcy5yZWYuc3RhdGUsCiAgICAgICAgICAgICBvblN0YXRlVXBkYXRlOiAoZWxlbWVudCwgc3Rh
dGUpID0+IHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZXJyb3IpCi0gICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gRXJyb3JEaXNwbGF5KHN0YXRlKTsKKyAgICAgICAg
ICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCBFcnJvckRpc3BsYXkoc3RhdGUpKTsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSA+IDApCiAgICAgICAgICAgICAgICAgICAgIERP
TS5pbmplY3QoZWxlbWVudCwgdGhpcy5yZW5kZXIoc3RhdGUpKTsKICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wbGFjZWhv
bGRlcigpOworICAgICAgICAgICAgICAgICAgICBET00uaW5qZWN0KGVsZW1lbnQsIHRoaXMucGxh
Y2Vob2xkZXIoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVy
biBgPGRpdiBjbGFzcz0iY29udGVudCIgcmVmPSIke3RoaXMucmVmfSI+PC9kaXY+YDsKICAgICB9
CisKICAgICByZW5kZXIobGltaXQpIHsKLSAgICAgICAgbGV0IG5vdyA9IE1hdGguZmxvb3IoRGF0
ZS5ub3coKSAvIDEwKTsKLSAgICAgICAgbGV0IG1pbkRpc3BsYXllZFV1aWQgPSBub3c7Ci0gICAg
ICAgIGxldCBtYXhMaW1pdGVkVXVpZCA9IDA7Ci0gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMu
Zm9yRWFjaChjb25maWd1cmF0aW9uID0+IHsKLSAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25m
aWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFwYWlyLnJlc3VsdHMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgaWYgKGxpbWl0ICE9PSAxICYmIGxpbWl0ID09PSBwYWlyLnJlc3VsdHMubGVu
Z3RoKQotICAgICAgICAgICAgICAgICAgICBtYXhMaW1pdGVkVXVpZCA9IE1hdGgubWF4KHBhaXIu
cmVzdWx0c1swXS51dWlkLCBtYXhMaW1pdGVkVXVpZCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAobGltaXQgPT09IDEpCi0gICAgICAgICAgICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBN
YXRoLm1pbihwYWlyLnJlc3VsdHNbcGFpci5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQsIG1pbkRp
c3BsYXllZFV1aWQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
bWluRGlzcGxheWVkVXVpZCA9IE1hdGgubWluKHBhaXIucmVzdWx0c1swXS51dWlkLCBtaW5EaXNw
bGF5ZWRVdWlkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKG1p
bkRpc3BsYXllZFV1aWQgPT09IG5vdykKLSAgICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQgPSBt
YXhMaW1pdGVkVXVpZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWluRGlzcGxheWVkVXVp
ZCA9IE1hdGgubWF4KG1pbkRpc3BsYXllZFV1aWQsIG1heExpbWl0ZWRVdWlkKTsKLQotICAgICAg
ICBsZXQgY29tbWl0cyA9IFtdOwotICAgICAgICBsZXQgcmVwb3NpdG9yaWVzID0gbmV3IFNldCgp
OwotICAgICAgICBsZXQgY3VycmVudENvbW1pdEluZGV4ID0gQ29tbWl0QmFuay5jb21taXRzLmxl
bmd0aCAtIDE7Ci0gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWd1cmF0
aW9uID0+IHsKLSAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCld
LmZvckVhY2gocGFpciA9PiB7Ci0gICAgICAgICAgICAgICAgcGFpci5yZXN1bHRzLmZvckVhY2go
cmVzdWx0ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC51dWlkIDwgbWluRGlz
cGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgbGV0IGNhbmRpZGF0ZUNvbW1pdHMgPSBbXTsKKyAgICAgICAgY29uc3QgYnJhbmNo
ID0gcXVlcnlUb1BhcmFtcyhkb2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSkuYnJhbmNoOworICAg
ICAgICBjb25zdCBzZWxmID0gdGhpczsKKyAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdHNG
b3JSZXN1bHRzKHRoaXMucmVzdWx0cywgbGltaXQsIHRoaXMuYWxsQ29tbWl0cyk7CisgICAgICAg
IGNvbnN0IHNjYWxlID0gc2NhbGVGb3JDb21taXRzKGNvbW1pdHMpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5kaXNwbGF5QWxsQ29tbWl0cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRDb21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0cy5sZW5ndGggLSAxOwot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudENvbW1pdEluZGV4ID49IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1p
dEluZGV4XS51dWlkKCkgPCByZXN1bHQudXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlBbGxDb21t
aXRzIHx8IENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdLnV1aWQoKSA9PSBy
ZXN1bHQudXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRz
LnB1c2goQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisgICAgICAgIGNvbnN0IGNvbXB1
dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpOworICAgICAgICBjb25z
dCBjb2xvck1hcCA9IHsKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGNvbXB1dGVkU3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSgnLS1ncmVlbkxpZ2h0JykudHJpbSgpLAorICAgICAgICAgICAgZmFpbGVkOiBj
b21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tcmVkTGlnaHQnKS50cmltKCksCisgICAg
ICAgICAgICB0aW1lZG91dDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLW9yYW5n
ZUxpZ2h0JykudHJpbSgpLAorICAgICAgICAgICAgY3Jhc2hlZDogY29tcHV0ZWRTdHlsZS5nZXRQ
cm9wZXJ0eVZhbHVlKCctLXB1cnBsZUxpZ2h0JykudHJpbSgpLAorICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy51cGRhdGVzID0gW107CisgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAg
ICAgICBnZXRTY2FsZUZ1bmM6ICh2YWx1ZSkgPT4geworICAgICAgICAgICAgICAgIGlmICh2YWx1
ZSAmJiB2YWx1ZS51dWlkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3V1aWQ6IHZhbHVl
LnV1aWR9OworICAgICAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBjb21wYXJlRnVuYzogKGEsIGIpID0+IHtyZXR1cm4gYi51dWlkIC0gYS51dWlkO30s
CisgICAgICAgICAgICByZW5kZXJGYWN0b3J5OiAoZHJhd0RvdCkgPT4gKGRhdGEsIGNvbnRleHQs
IHgsIHkpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkcmF3RG90KGNvbnRleHQsIHgsIHksIHRydWUpOworCisgICAgICAgICAgICAg
ICAgbGV0IHRhZyA9IG51bGw7CisgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0gY29sb3JNYXAu
c3VjY2VzczsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0cykgeworICAgICAgICAgICAg
ICAgICAgICB0YWcgPSBkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191
bmV4cGVjdGVkXycgOiAnXyd9ZmFpbGVkYF07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBmYWlsdXJlcyB0aGF0IGFyZSBhIHJlc3VsdCBvZiBtdWx0aXBsZSBydW5zLCBjb21i
aW5lIHRoZW0uCisgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgJiYgIWRhdGEuc3RhcnRfdGlt
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gTWF0aC5jZWlsKHRhZyAvIGRhdGEu
c3RhdHMudGVzdHNfcnVuICogMTAwIC0gLjUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCF0YWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gJzwxJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRhZyA9IGAke3RhZ30gJWAKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGggPT09IDAgfHwg
Y2FuZGlkYXRlQ29tbWl0c1tjYW5kaWRhdGVDb21taXRzLmxlbmd0aCAtIDFdLnV1aWQoKSAhPT0g
cmVzdWx0LnV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1
c2goewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6ICc/JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndXVpZCc6ICgpID0+IHtyZXR1cm4gcmVzdWx0LnV1aWQ7fQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5mb3JFYWNoKGNvbW1p
dCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmFkZChjb21taXQucmVw
b3NpdG9yeV9pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBjb21t
aXRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVp
ZCgpID09PSBjb21taXRzW2luZGV4XS51dWlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1
aWQoKSA+IGNvbW1pdHNbaW5kZXhdLnV1aWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb21taXRzLnNwbGljZShpbmRleCwgMCwgY29tbWl0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNvbW1pdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGZhaWx1cmVUeXBlT3JkZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4
cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9JHt0eXBlfWBdID4gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKLSAgICAgICAgaWYgKGN1cnJlbnRDb21taXRJbmRleCA+PSAwICYmIGNvbW1pdHMubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBsZXQgdHJhaWxpbmdSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KHJlcG9z
aXRvcmllcyk7Ci0gICAgICAgICAgICB0cmFpbGluZ1JlcG9zaXRvcmllcy5kZWxldGUoY29tbWl0
c1tjb21taXRzLmxlbmd0aCAtIDFdLnJlcG9zaXRvcnlfaWQpOwotICAgICAgICAgICAgd2hpbGUg
KGN1cnJlbnRDb21taXRJbmRleCA+PSAwICYmIHRyYWlsaW5nUmVwb3NpdG9yaWVzLnNpemUpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBjb21taXQgPSBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVu
dENvbW1pdEluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdSZXBvc2l0b3JpZXMu
aGFzKGNvbW1pdC5yZXBvc2l0b3J5X2lkKSkgewotICAgICAgICAgICAgICAgICAgICBjb21taXRz
LnB1c2goY29tbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMu
ZGVsZXRlKGNvbW1pdC5yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9T
dGF0ZUlkKGRhdGEuYWN0dWFsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJF
eHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdElkID0gRXhwZWN0YXRpb25z
LnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlvbnMudW5leHBlY3RlZFJlc3VsdHMoZGF0YS5hY3R1
YWwsIGRhdGEuZXhwZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZVR5cGVPcmRl
ci5mb3JFYWNoKHR5cGUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEV4cGVjdGF0
aW9ucy5zdHJpbmdUb1N0YXRlSWQoZmFpbHVyZVR5cGVNYXBwaW5nW3R5cGVdKSA+PSByZXN1bHRJ
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yTWFwW3R5cGVdOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZHJhd0RvdChjb250ZXh0LCB4LCB5LCBmYWxzZSwgdGFnID8gdGFnIDogbnVs
bCwgZmFsc2UsIGNvbG9yKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisKKyAgICAgICAg
ZnVuY3Rpb24gb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAg
cmV0dXJuIChkYXRhKSA9PiB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBk
byBzb21ldGhpbmcgc2FuZSBoZXJlLCBidXQgd2UgcHJvYmFibHkgbmVlZCBhbm90aGVyIGVuZHBv
aW50CisgICAgICAgICAgICAgICAgaWYgKCFkYXRhLnN0YXJ0X3RpbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWxlcnQoJ05vZGUgaXMgYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBydW5zJyk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgLS1jdXJyZW50Q29tbWl0SW5kZXg7CisKKyAgICAgICAgICAgICAgICBsZXQgYnVp
bGRQYXJhbXMgPSBjb25maWd1cmF0aW9uLnRvUGFyYW1zKCk7CisgICAgICAgICAgICAgICAgYnVp
bGRQYXJhbXNbJ3N1aXRlJ10gPSBbc2VsZi5zdWl0ZV07CisgICAgICAgICAgICAgICAgYnVpbGRQ
YXJhbXNbJ3V1aWQnXSA9IFtkYXRhLnV1aWRdOworICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1z
WydhZnRlcl90aW1lJ10gPSBbZGF0YS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgICAgICBidWls
ZFBhcmFtc1snYmVmb3JlX3RpbWUnXSA9IFtkYXRhLnN0YXJ0X3RpbWVdOworICAgICAgICAgICAg
ICAgIGlmIChicmFuY2gpCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydicmFuY2gn
XSA9IGJyYW5jaDsKKyAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihgL3VybHMvYnVpbGQ/JHtw
YXJhbXNUb1F1ZXJ5KGJ1aWxkUGFyYW1zKX1gLCAnX2JsYW5rJyk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgIH0KIAorICAgICAgICBmdW5jdGlvbiBleHBvcnRlckZhY3RvcnkoZGF0YSkgeworICAg
ICAgICAgICAgcmV0dXJuICh1cGRhdGVGdW5jdGlvbikgPT4geworICAgICAgICAgICAgICAgIHNl
bGYudXBkYXRlcy5wdXNoKChzY2FsZSkgPT4ge3VwZGF0ZUZ1bmN0aW9uKGRhdGEsIHNjYWxlKTt9
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJlcG9zaXRvcmllcyA9IFsu
Li5yZXBvc2l0b3JpZXNdOwotICAgICAgICByZXBvc2l0b3JpZXMuc29ydCgpOworICAgICAgICBs
ZXQgY2hpbGRyZW4gPSBbXTsKKyAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNv
bmZpZ3VyYXRpb24gPT4geworICAgICAgICAgICAgaWYgKCF0aGlzLnJlc3VsdHNbY29uZmlndXJh
dGlvbi50b0tleSgpXSB8fCBPYmplY3Qua2V5cyh0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50
b0tleSgpXSkubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICByZXR1cm4gYDxkaXYgY2xhc3M9InRpbWVsaW5lIj4KLSAgICAgICAgICAgICAgICA8ZGl2ICR7
cmVwb3NpdG9yaWVzLmxlbmd0aCA+IDEgPyBgY2xhc3M9ImhlYWRlciB3aXRoLXRvcC14LWF4aXMi
YCA6IGBjbGFzcz0iaGVhZGVyImB9PgotICAgICAgICAgICAgICAgICAgICAke3RoaXMuY29uZmln
dXJhdGlvbnMubWFwKGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKE9iamVjdC5rZXlzKHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldKS5sZW5n
dGggPT09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBleHBhbmRlciA9IFJFRi5jcmVhdGVSZWYoewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9uRWxlbWVudE1vdW50OiBlbGVtZW50ID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gKCkgPT4gewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgp
XSA9ICFzZWxmLmNvbGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXJlbmRlcigpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3Vs
dCA9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8YSByZWY9IiR7ZXhwYW5kZXJ9IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkge3JldHVybiBzZWxmLmNv
bGxhcHNlZFtjb25maWd1cmF0aW9uLnRvS2V5KCldID8gJysnIDogJy0nfSgpfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICR7Y29uZmlndXJhdGlvbn0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5g
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0
aW9uLnRvS2V5KCldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWVz
SGVhZGVyRm9yU0RLTGVzc0NvbmZpZyA9IGNvbmZpZyA9PiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke2Nv
bmZpZ308L2Rpdj5gOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdWV1
ZVBhcmFtcyA9IGNvbmZpZy50b1BhcmFtcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxdWV1ZVBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1aXRlXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnTGluayA9IGA8YSBjbGFzcz0idGV4dCB0aW55
IiBocmVmPSIvdXJscy9xdWV1ZT8ke3BhcmFtc1RvUXVlcnkocXVldWVQYXJhbXMpfSIgdGFyZ2V0
PSJfYmxhbmsiPiR7Y29uZmlnfTwvYT5gOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZXhwYW5kZXIgPSBSRUYuY3JlYXRlUmVmKHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9uRWxlbWVudE1vdW50OiBlbGVtZW50ID0+IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwYW5k
ZWRTREtzW2tleV0gPSAhc2VsZi5leHBhbmRlZFNES3Nba2V5XTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXJlbmRlcigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZFNES3Nba2V5XSA9PT0g
dW5kZWZpbmVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8
ZGl2IGNsYXNzPSJzZXJpZXMiPiR7Y29uZmlnTGlua308L2Rpdj5gOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlcmllcyB0ZXh0IHRpbnkiPgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHJlZj0iJHtleHBhbmRl
cn0iIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHtmdW5jdGlvbigpIHtyZXR1cm4gc2VsZi5leHBhbmRlZFNES3Nb
a2V5XSA/ICctc2RrJyA6ICcrc2RrJ30oKX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgJHtjb25maWdMaW5rfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGV0IGxhc3RDb25maWcgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0uZm9yRWFjaChwYWlyID0+
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIucmVzdWx0cy5sZW5n
dGggPD0gMCB8fCBwYWlyLnJlc3VsdHNbcGFpci5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQgPCBt
aW5EaXNwbGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICcnOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBu
ZXcgQ29uZmlndXJhdGlvbihwYWlyLmNvbmZpZ3VyYXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzZGsgPSBjb25maWcuc2RrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgY29uZmlnLnNkazsgIC8vIFN0cmlwIG91dCBzZGsgaW5mb3Jt
YXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29u
ZmlnLnRvS2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBh
cmVJbmRleCA9IGNvbmZpZy5jb21wYXJlKGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobGFzdENvbmZpZyAhPT0gbnVsbCAmJiBjb21wYXJlSW5kZXggIT0g
MCAmJiAhdGhpcy5leHBhbmRlZFNES3NbbGFzdENvbmZpZy50b0tleSgpXSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZXJpZXNIZWFkZXJGb3JTREtMZXNz
Q29uZmlnKGxhc3RDb25maWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChjb21wYXJlSW5kZXggPT09IDAgJiYgdGhpcy5leHBhbmRlZFNES3Nba2V5XSA9PT0gdW5k
ZWZpbmVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRl
ZFNES3Nba2V5XSA9IGZhbHNlOyAgLy8gUG9wdWxhdGUgdGhpcyBkaWN0aW9uYXJ5IG9uIHRoZSBm
bHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkU0RL
c1trZXldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGFy
ZUluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBzZXJpZXNIZWFkZXJGb3JTREtMZXNzQ29uZmlnKGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtzZGt9
PC9kaXY+YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0Q29uZmlnID0gY29uZmlnOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29u
ZmlnICE9PSBudWxsICYmICF0aGlzLmV4cGFuZGVkU0RLc1tsYXN0Q29uZmlnLnRvS2V5KCldKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VyaWVzSGVhZGVyRm9y
U0RLTGVzc0NvbmZpZyhsYXN0Q29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAg
IH0pLmpvaW4oJycpfQotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9ImNvbnRlbnQiPgotICAgICAgICAgICAgICAgICAgICAke3JlbmRlclRpbWVsaW5l
KGNvbW1pdHMsIHJlcG9zaXRvcmllcywgdHJ1ZSl9Ci0gICAgICAgICAgICAgICAgICAgICR7dGhp
cy5jb25maWd1cmF0aW9ucy5tYXAoY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXko
KV0pLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50QXJyYXlJbmRleCA9IG5ldyBB
cnJheSh0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5sZW5ndGgpLmZpbGwoMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG90cyA9IHt9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50
b0tleSgpXS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHBhaXJGb3JJbmRleCA9IHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldW2ldOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5n
dGggPD0gMCB8fCBwYWlyRm9ySW5kZXgucmVzdWx0c1twYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5n
dGggLSAxXS51dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tuZXcg
Q29uZmlndXJhdGlvbihwYWlyRm9ySW5kZXguY29uZmlndXJhdGlvbikudG9LZXkoKV0gPSBbXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1p
dHMuc2xpY2UoMCwgY29tbWl0cy5sZW5ndGggLSBNYXRoLm1heChyZXBvc2l0b3JpZXMubGVuZ3Ro
IC0gMSwgMCkpLmZvckVhY2goY29tbWl0ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRBcnJheUluZGV4Lmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhaXJGb3JJbmRleCA9IHRoaXMu
cmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldW2ldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3RoIDw9IDAgfHwgcGFpckZv
ckluZGV4LnJlc3VsdHNbcGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3RoIC0gMV0udXVpZCA8IG1p
bkRpc3BsYXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBu
ZXcgQ29uZmlndXJhdGlvbihwYWlyRm9ySW5kZXguY29uZmlndXJhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25LZXkgPSBjb25maWcudG9L
ZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdEluZGV4ID0g
cGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3RoIC0gY3VycmVudEFycmF5SW5kZXhbaV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJbmRleCA8IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVz
aChuZXcgRG90KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQoKSA9PT0gcGFpckZvckluZGV4LnJlc3Vs
dHNbcmVzdWx0SW5kZXhdLnV1aWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxldCBidWlsZFBhcmFtcyA9IGNvbmZpZy50b1BhcmFtcygpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3N1aXRlJ10gPSBbdGhpcy5zdWl0ZV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1sndXVpZCdd
ID0gW2NvbW1pdC51dWlkKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYnVpbGRMaW5rID0gYC91cmxzL2J1aWxkPyR7cGFyYW1zVG9RdWVyeShidWlsZFBhcmFt
cyl9YDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXJGb3JJ
bmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5zdGF0cykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25LZXldLnB1c2gobmV3IERvdCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJl
c3VsdHNbcmVzdWx0SW5kZXhdLnN0YXRzLnRlc3RzX3J1biwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhd
LnN0YXRzW2B0ZXN0cyR7d2lsbEZpbHRlckV4cGVjdGVkID8gJ191bmV4cGVjdGVkXycgOiAnXyd9
ZmFpbGVkYF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
aXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJF
eHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfXRpbWVkb3V0YF0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3Vs
dEluZGV4XS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8n
IDogJ18nfWNyYXNoZWRgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1aWxkTGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5z
dHJpbmdUb1N0YXRlSWQocGFpckZvckluZGV4LnJlc3VsdHNbcmVzdWx0SW5kZXhdLmFjdHVhbCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGxGaWx0ZXJF
eHBlY3RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0SWQgPSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKEV4cGVjdGF0aW9ucy51bmV4cGVj
dGVkUmVzdWx0cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5hY3R1YWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0
c1tyZXN1bHRJbmRleF0uZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG90c1tjb25maWd1cmF0aW9uS2V5XS5wdXNoKG5ldyBEb3QoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdElkIDw9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRl
SWQoJ0VSUk9SJykgPyAxIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0SWQgPD0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZCgnVElNRU9V
VCcpID8gMSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdElkIDw9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoJ0NSQVNIJykgPyAxIDog
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkTGluaywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzW2NvbmZpZ3Vy
YXRpb25LZXldLnB1c2gobmV3IERvdCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAocmVzdWx0SW5kZXggPj0gMCAmJiBjb21taXQudXVpZCgpIDw9IHBhaXJGb3JJ
bmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS51dWlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArK2N1cnJlbnRBcnJheUluZGV4W2ldOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0SW5kZXggPSBwYWlyRm9ySW5kZXgucmVzdWx0cy5sZW5n
dGggLSBjdXJyZW50QXJyYXlJbmRleFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbGlzdCBvZiBjb25maWd1cmF0aW9ucyB0
byBkaXNwbGF5IHdpdGggU0RLcyBzdHJpcHBlZAorICAgICAgICAgICAgbGV0IG1hcHBlZENoaWxk
cmVuQ29uZmlncyA9IHt9OworICAgICAgICAgICAgbGV0IGNoaWxkcmVuQ29uZmlnc0J5U0RLID0g
e30KKyAgICAgICAgICAgIGxldCByZXN1bHRzQnlLZXkgPSB7fTsKKyAgICAgICAgICAgIHRoaXMu
cmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7CisgICAgICAg
ICAgICAgICAgY29uc3Qgc3RyaXBwZWRDb25maWcgPSBuZXcgQ29uZmlndXJhdGlvbihwYWlyLmNv
bmZpZ3VyYXRpb24pOworICAgICAgICAgICAgICAgIHJlc3VsdHNCeUtleVtzdHJpcHBlZENvbmZp
Zy50b0tleSgpXSA9IGNvbWJpbmVSZXN1bHRzKFtdLCBbLi4ucGFpci5yZXN1bHRzXS5zb3J0KGZ1
bmN0aW9uKGEsIGIpIHtyZXR1cm4gYi51dWlkIC0gYS51dWlkO30pKTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgc3RyaXBwZWRDb25maWcuc2RrOworICAgICAgICAgICAgICAgIG1hcHBlZENoaWxk
cmVuQ29uZmlnc1tzdHJpcHBlZENvbmZpZy50b0tleSgpXSA9IHN0cmlwcGVkQ29uZmlnOworICAg
ICAgICAgICAgICAgIGlmICghY2hpbGRyZW5Db25maWdzQnlTREtbc3RyaXBwZWRDb25maWcudG9L
ZXkoKV0pCisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW3N0cmlwcGVk
Q29uZmlnLnRvS2V5KCldID0gW107CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlT
REtbc3RyaXBwZWRDb25maWcudG9LZXkoKV0ucHVzaChuZXcgQ29uZmlndXJhdGlvbihwYWlyLmNv
bmZpZ3VyYXRpb24pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbGV0IGNoaWxkcmVu
Q29uZmlncyA9IFtdOworICAgICAgICAgICAgT2JqZWN0LmtleXMobWFwcGVkQ2hpbGRyZW5Db25m
aWdzKS5mb3JFYWNoKGtleSA9PiB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzLnB1
c2gobWFwcGVkQ2hpbGRyZW5Db25maWdzW2tleV0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBjaGlsZHJlbkNvbmZpZ3Muc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGEuY29tcGFy
ZShiKTt9KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkW2Nv
bmZpZ3VyYXRpb24udG9LZXkoKV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdlKGRvdHMpLm1hcChkb3QgPT4ge3JldHVy
biBkb3QudG9TdHJpbmcoKTt9KS5qb2luKCcnKX08L2Rpdj5gOworICAgICAgICAgICAgLy8gQ3Jl
YXRlIHRoZSBjb2xsYXBzZWQgdGltZWxpbmVzLCBjb2JpbmUgcmVzdWx0cworICAgICAgICAgICAg
bGV0IGFsbFJlc3VsdHMgPSBbXTsKKyAgICAgICAgICAgIGxldCBjb2xsYXBzZWRUaW1lbGluZXMg
PSBbXTsKKyAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlncy5mb3JFYWNoKGNvbmZpZyA9PiB7Cisg
ICAgICAgICAgICAgICAgY2hpbGRyZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLnNvcnQo
ZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmNvbXBhcmVTREtzKGIpO30pOworCisgICAgICAgICAg
ICAgICAgbGV0IHJlc3VsdHNGb3JDb25maWcgPSBbXTsKKyAgICAgICAgICAgICAgICBjaGlsZHJl
bkNvbmZpZ3NCeVNES1tjb25maWcudG9LZXkoKV0uZm9yRWFjaChzZGtDb25maWcgPT4geworICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzRm9yQ29uZmlnID0gY29tYmluZVJlc3VsdHMocmVzdWx0
c0ZvckNvbmZpZywgcmVzdWx0c0J5S2V5W3Nka0NvbmZpZy50b0tleSgpXSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgYWxsUmVzdWx0cyA9IGNvbWJpbmVSZXN1bHRzKGFs
bFJlc3VsdHMsIHJlc3VsdHNGb3JDb25maWcpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgcmVzdWx0ID0gJyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudERvdHMg
PSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0Q29uZmlnID0gbnVsbDsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXko
KV0uZm9yRWFjaChwYWlyID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29u
ZmlnID0gbmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBjb25maWcudG9LZXkoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWRvdHNba2V5XSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25m
aWcuc2RrOyAgLy8gU3RyaXAgb3V0IHNkayBpbmZvcm1hdGlvbgotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY29tcGFyZUluZGV4ID0gY29uZmlnLmNvbXBhcmUobGFzdENvbmZp
Zyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTREtFeHBhbmRlZCA9IHRo
aXMuZXhwYW5kZWRTREtzW2NvbmZpZy50b0tleSgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tcGFyZUluZGV4IHx8IGlzU0RLRXhwYW5kZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1l
cmdlKGN1cnJlbnREb3RzKS5tYXAoZG90ID0+IHtyZXR1cm4gZG90LnRvU3RyaW5nKCk7fSkuam9p
bignJyl9PC9kaXY+YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERv
dHMgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbXBhcmVJbmRleCAmJiBpc1NES0V4cGFuZGVkKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJzxkaXYgY2xhc3M9InNlcmllcyI+PC9k
aXY+JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RG90c1trZXldID0gZG90
c1trZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb25maWcgPSBjb25maWc7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50RG90cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDxk
aXYgY2xhc3M9InNlcmllcyI+JHtEb3QubWVyZ2UoY3VycmVudERvdHMpLm1hcChkb3QgPT4ge3Jl
dHVybiBkb3QudG9TdHJpbmcoKTt9KS5qb2luKCcnKX08L2Rpdj5gOworICAgICAgICAgICAgICAg
IGxldCBxdWV1ZVBhcmFtcyA9IGNvbmZpZy50b1BhcmFtcygpOworICAgICAgICAgICAgICAgIHF1
ZXVlUGFyYW1zWydzdWl0ZSddID0gW3RoaXMuc3VpdGVdOworICAgICAgICAgICAgICAgIGlmIChi
cmFuY2gpCisgICAgICAgICAgICAgICAgICAgIHF1ZXVlUGFyYW1zWydicmFuY2gnXTsKKyAgICAg
ICAgICAgICAgICBsZXQgbXlUaW1lbGluZSA9IFRpbWVsaW5lLlNlcmllc1dpdGhIZWFkZXJDb21w
b25lbnQoCisgICAgICAgICAgICAgICAgICAgIGAke2NoaWxkcmVuQ29uZmlnc0J5U0RLW2NvbmZp
Zy50b0tleSgpXS5sZW5ndGggPiAxID8gJyB8ICcgOiAnJ308YSBocmVmPSIvdXJscy9xdWV1ZT8k
e3BhcmFtc1RvUXVlcnkocXVldWVQYXJhbXMpfSIgdGFyZ2V0PSJfYmxhbmsiPiR7Y29uZmlnfTwv
YT5gLAorICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQo
cmVzdWx0c0ZvckNvbmZpZywgc2NhbGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldFNj
YWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFjdG9yeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydGVyOiBvcHRpb25zLmV4cG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgb25Eb3RDbGljazogb25Eb3RDbGlja0ZhY3RvcnkoY29uZmlnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cG9ydGVyOiBleHBvcnRlckZhY3RvcnkocmVzdWx0c0ZvckNvbmZpZyksCisg
ICAgICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbkNv
bmZpZ3NCeVNES1tjb25maWcudG9LZXkoKV0ubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAg
ICAgICBsZXQgdGltZWxpbmVzQnlTREsgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRy
ZW5Db25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmZvckVhY2goc2RrQ29uZmlnID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lc0J5U0RLLnB1c2goCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGltZWxpbmUuU2VyaWVzV2l0aEhlYWRlckNvbXBvbmVudChgJHtzZGtD
b25maWcuc2RrfWAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVsaW5lLkNh
bnZhc1Nlcmllc0NvbXBvbmVudChyZXN1bHRzQnlLZXlbc2RrQ29uZmlnLnRvS2V5KCldLCBzY2Fs
ZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2NhbGVGdW5jOiBv
cHRpb25zLmdldFNjYWxlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXBhcmVGdW5jOiBvcHRpb25zLmNvbXBhcmVGdW5jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogb3B0aW9ucy5yZW5kZXJGYWN0b3J5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IG9wdGlvbnMuZXhwb3J0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdENsaWNrOiBvbkRv
dENsaWNrRmFjdG9yeShzZGtDb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwb3J0ZXI6IGV4cG9ydGVyRmFjdG9yeShyZXN1bHRzQnlLZXlbc2RrQ29uZmlnLnRv
S2V5KCldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIG15VGltZWxpbmUgPSBUaW1lbGlu
ZS5FeHBhbmRhYmxlU2VyaWVzV2l0aEhlYWRlckV4cGFuZGVyQ29tcG9uZW50KG15VGltZWxpbmUs
IC4uLnRpbWVsaW5lc0J5U0RLKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y29sbGFwc2VkVGltZWxpbmVzLnB1c2gobXlUaW1lbGluZSk7CisgICAgICAgICAgICB9KTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICAg
ICAgfSkuam9pbignJyl9Ci0gICAgICAgICAgICAgICAgICAgICR7cmVuZGVyVGltZWxpbmUoY29t
bWl0cywgcmVwb3NpdG9yaWVzKX0KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAg
IDwvZGl2PmA7CisgICAgICAgICAgICBpZiAoY29sbGFwc2VkVGltZWxpbmVzLmxlbmd0aCA9PT0g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoY29sbGFwc2VkVGlt
ZWxpbmVzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgICAgIGlmICghY29sbGFwc2VkVGlt
ZWxpbmVzWzBdLmhlYWRlci5pbmNsdWRlcygnY2xhc3M9InNlcmllcyInKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29sbGFwc2VkVGltZWxpbmVzWzBdLmhlYWRlciA9IFRpbWVsaW5lLkhlYWRlckNv
bXBvbmVudChjb2xsYXBzZWRUaW1lbGluZXNbMF0uaGVhZGVyKTsKKyAgICAgICAgICAgICAgICBj
aGlsZHJlbi5wdXNoKGNvbGxhcHNlZFRpbWVsaW5lc1swXSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKAorICAgICAg
ICAgICAgICAgIFRpbWVsaW5lLkV4cGFuZGFibGVTZXJpZXNXaXRoSGVhZGVyRXhwYW5kZXJDb21w
b25lbnQoCisgICAgICAgICAgICAgICAgVGltZWxpbmUuU2VyaWVzV2l0aEhlYWRlckNvbXBvbmVu
dChgICR7Y29uZmlndXJhdGlvbn1gLAorICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5DYW52
YXNTZXJpZXNDb21wb25lbnQoYWxsUmVzdWx0cywgc2NhbGUsIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdldFNjYWxlRnVuYzogb3B0aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZpZ3Vy
YXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZXI6IGV4cG9ydGVyRmFjdG9y
eShhbGxSZXN1bHRzKSwKKyAgICAgICAgICAgICAgICAgICAgfSkpLAorICAgICAgICAgICAgICAg
IC4uLmNvbGxhcHNlZFRpbWVsaW5lcworICAgICAgICAgICAgKSk7CisgICAgICAgIH0pOworCisg
ICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAgICBzZWxmLnhheGlzVXBkYXRlcyA9IFtdOwor
ICAgICAgICB0aGlzLnJlcG9zaXRvcmllcyA9IHJlcG9zaXRvcmllc0ZvckNvbW1pdHMoY29tbWl0
cyk7CisgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzLmZvckVhY2gocmVwb3NpdG9yeSA9PiB7Cisg
ICAgICAgICAgICBjb25zdCB4QXhpc0NvbXBvbmVudCA9IHhBeGlzRnJvbVNjYWxlKHNjYWxlLCBy
ZXBvc2l0b3J5LCBzZWxmLnhheGlzVXBkYXRlcywgdG9wKTsKKyAgICAgICAgICAgIGlmICh0b3Ap
CisgICAgICAgICAgICAgICAgY2hpbGRyZW4udW5zaGlmdCh4QXhpc0NvbXBvbmVudCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh4QXhpc0NvbXBvbmVu
dCk7CisgICAgICAgICAgICB0b3AgPSBmYWxzZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29u
c3QgY29tcG9zZXIgPSBGUC5jb21wb3NlcigodXBkYXRlVGltZWxpbmUpID0+IHsKKyAgICAgICAg
ICAgIHNlbGYudGltZWxpbmVVcGRhdGUgPSAoeEF4aXNlcykgPT4geworICAgICAgICAgICAgICAg
IGNoaWxkcmVuLnNwbGljZSgwLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5yZXBvc2l0
b3JpZXMubGVuZ3RoID4gMSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGNo
aWxkcmVuLmxlbmd0aCAtIHNlbGYucmVwb3NpdG9yaWVzLmxlbmd0aCwgc2VsZi5yZXBvc2l0b3Jp
ZXMubGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHhBeGlzZXMuZm9yRWFjaChjb21wb25lbnQgPT4geworICAgICAgICAgICAgICAgICAg
ICBpZiAodG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4udW5zaGlmdChjb21w
b25lbnQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgIHRvcCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWVsaW5l
KGNoaWxkcmVuKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
VGltZWxpbmUuQ2FudmFzQ29udGFpbmVyKGNvbXBvc2VyLCAuLi5jaGlsZHJlbik7CiAgICAgfQog
fQogCisKIGZ1bmN0aW9uIExlZ2VuZExhYmVsKGV2ZW50U3RyZWFtLCBmaWx0ZXJFeHBlY3RlZFRl
eHQsIGZpbHRlclVuZXhwZWN0ZWRUZXh0KSB7CiAgICAgbGV0IHJlZiA9IFJFRi5jcmVhdGVSZWYo
ewogICAgICAgICBzdGF0ZTogd2lsbEZpbHRlckV4cGVjdGVkLApAQCAtNjgwLDQgKzc4MCw0IEBA
IGZ1bmN0aW9uIExlZ2VuZChjYWxsYmFjaz1udWxsLCBwbHVyYWw9ZmEKICAgICByZXR1cm4gYDxk
aXYgY2xhc3M9ImNvbnRlbnQiPiR7cmVzdWx0fTwvZGl2Pjxicj5gOwogfQogCi1leHBvcnQge0xl
Z2VuZCwgVGltZWxpbmUsIEV4cGVjdGF0aW9uc307CitleHBvcnQge0xlZ2VuZCwgVGltZWxpbmVG
cm9tRW5kcG9pbnQsIEV4cGVjdGF0aW9uc307CkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9y
ZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zZWFyY2guaHRtbAkocmV2aXNp
b24gMjQ4MzkyKQorKysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0
ZXMvc2VhcmNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgaW1wb3J0IHtD
b25maWd1cmF0aW9ufSBmcm9tICcvYXNzZXRzL2pzLwogaW1wb3J0IHtEcmF3ZXIsIEJyYW5jaFNl
bGVjdG9yLCBDb25maWd1cmF0aW9uU2VsZWN0b3JzLCBMaW1pdFNsaWRlcn0gZnJvbSAnL2Fzc2V0
cy9qcy9kcmF3ZXIuanMnOwogaW1wb3J0IHtET00sIFJFRn0gZnJvbSAnL2xpYnJhcnkvanMvUmVm
LmpzJzsKIGltcG9ydCB7U2VhcmNoQmFyfSBmcm9tICcvYXNzZXRzL2pzL3NlYXJjaC5qcyc7Ci1p
bXBvcnQge0xlZ2VuZCwgVGltZWxpbmV9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOwor
aW1wb3J0IHtMZWdlbmQsIFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcvYXNzZXRzL2pzL3Rp
bWVsaW5lLmpzJzsKIAogY29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKIGNvbnN0IFNVSVRFUyA9
IEpTT04ucGFyc2UoJ3t7IHN1aXRlc3xzYWZlIH19Jyk7ICAgIApAQCAtNTUsNyArNTUsNyBAQCBj
bGFzcyBTZWFyY2hWaWV3IHsKICAgICAgICAgICAgICAgICBzdGF0ZS5jaGlsZHJlbi5wdXNoKHsK
ICAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHRoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXSwK
ICAgICAgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5jdXJyZW50UGFyYW1zLnRlc3RbaV0sCi0g
ICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9yZXN1bHRzLyR7
dGhpcy5jdXJyZW50UGFyYW1zLnN1aXRlW2ldfS8ke3RoaXMuY3VycmVudFBhcmFtcy50ZXN0W2ld
fWAsIHRoaXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXSksCisgICAgICAgICAgICAgICAgICAgIHRp
bWVsaW5lOiBuZXcgVGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7dGhpcy5jdXJy
ZW50UGFyYW1zLnN1aXRlW2ldfS8ke3RoaXMuY3VycmVudFBhcmFtcy50ZXN0W2ldfWAsIHRoaXMu
Y3VycmVudFBhcmFtcy5zdWl0ZVtpXSksCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTEyOSw3ICsxMjksNyBAQCBjbGFzcyBTZWFyY2hWaWV3IHsKICAg
ICAgICAgICAgICAgICBpZiAoZGlmZi5jaGlsZHJlbikKICAgICAgICAgICAgICAgICAgICAgRE9N
LmluamVjdChlbGVtZW50LCBMZWdlbmQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5yZWYuc3RhdGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC50aW1lbGluZS5yZXJlbmRlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkLnRpbWVsaW5lLnVwZGF0ZSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKSArIGRpZmYuY2hpbGRy
ZW4ubWFwKHJlbmRlckNoaWxkKS5qb2luKCcnKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRpZmYu
cHJlcGVuZGluZykgewpAQCAtMTYwLDcgKzE2MCw4IEBAIGNsYXNzIFNlYXJjaFZpZXcgewogICAg
ICAgICAgICAgICAgICAgICAgICAgZGlkRmluZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnJlZi5zdGF0ZS5jaGlsZHJlbi5zcGxpY2Uoc2VhcmNoLCAxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYuc3RhdGUu
Y2hpbGRyZW5bc2VhcmNoXS50aW1lbGluZS50ZWFyZG93bigpOwogICAgICAgICAgICAgICAgICAg
ICBuZWVkUmVSZW5kZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBpZiAoIWRpZEZpbmQpIHsKQEAgLTE2OSw3ICsxNzAsNyBAQCBjbGFzcyBTZWFyY2hWaWV3IHsK
ICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdWl0ZTogcGFyYW1zLnN1aXRlW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAg
dGVzdDogcGFyYW1zLnRlc3RbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZTog
bmV3IFRpbWVsaW5lKGBhcGkvcmVzdWx0cy8ke3BhcmFtcy5zdWl0ZVtpXX0vJHtwYXJhbXMudGVz
dFtpXX1gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcgVGltZWxpbmVG
cm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7cGFyYW1zLnN1aXRlW2ldfS8ke3BhcmFtcy50ZXN0
W2ldfWApLAogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yMzksNyArMjQwLDcgQEAgRE9NLmluamVjdCgKICAgICAgICAgICAgIGxl
dCBjaGlsZCA9IHsKICAgICAgICAgICAgICAgICBzdWl0ZTogYXJndW1lbnRzW2ldLnN1aXRlLAog
ICAgICAgICAgICAgICAgIHRlc3Q6IGFyZ3VtZW50c1tpXS50ZXN0LAotICAgICAgICAgICAgICAg
IHRpbWVsaW5lOiBuZXcgVGltZWxpbmUoYGFwaS9yZXN1bHRzLyR7YXJndW1lbnRzW2ldLnN1aXRl
fS8ke2FyZ3VtZW50c1tpXS50ZXN0fWApLAorICAgICAgICAgICAgICAgIHRpbWVsaW5lOiBuZXcg
VGltZWxpbmVGcm9tRW5kcG9pbnQoYGFwaS9yZXN1bHRzLyR7YXJndW1lbnRzW2ldLnN1aXRlfS8k
e2FyZ3VtZW50c1tpXS50ZXN0fWApLAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2aWV3
LnJlZi5zZXRTdGF0ZSh7cHJlcGVuZGluZzogW2NoaWxkXX0pOwpJbmRleDogVG9vbHMvcmVzdWx0
c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1
aXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjQ4MzkyKQorKysgVG9vbHMvcmVzdWx0c2RicHkv
cmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc3VpdGVfcmVzdWx0cy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBAIGltcG9ydCB7ZGVlcENvbXBhcmUsIEVycm9yRGlzcGxheSwg
cXVlcnkKIGltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy9jb25maWd1cmF0
aW9uLmpzJzsKIGltcG9ydCB7RHJhd2VyLCBCcmFuY2hTZWxlY3RvciwgQ29uZmlndXJhdGlvblNl
bGVjdG9ycywgTGltaXRTbGlkZXJ9IGZyb20gJy9hc3NldHMvanMvZHJhd2VyLmpzJzsKIGltcG9y
dCB7RE9NLCBSRUZ9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5qcyc7Ci1pbXBvcnQge0xlZ2VuZCwg
VGltZWxpbmV9IGZyb20gJy9hc3NldHMvanMvdGltZWxpbmUuanMnOworaW1wb3J0IHtMZWdlbmQs
IFRpbWVsaW5lRnJvbUVuZHBvaW50fSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKIAog
Y29uc3QgREVGQVVMVF9MSU1JVCA9IDEwMDsKIGNvbnN0IFNVSVRFUyA9IEpTT04ucGFyc2UoJ3t7
IHN1aXRlc3xzYWZlIH19Jyk7ICAgIApAQCAtNjYsNyArNjYsNyBAQCBjbGFzcyBNYWluVmlldyB7
CiAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB7fTsKIAogICAgICAgICBTVUlURVMuZm9yRWFjaCgo
c3VpdGUpID0+IHsKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVs
aW5lKCdhcGkvcmVzdWx0cy8nICsgc3VpdGUsIHN1aXRlKTsKKyAgICAgICAgICAgIHRoaXMuY2hp
bGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50KCdhcGkvcmVzdWx0cy8nICsg
c3VpdGUsIHN1aXRlKTsKICAgICAgICAgfSk7CiAgICAgfQogICAgIHVucGFja1N1aXRlcyhzdWl0
ZXNKc29uKSB7CkBAIC04MSw5ICs4MSwxMCBAQCBjbGFzcyBNYWluVmlldyB7CiAgICAgICAgIH0p
OwogCiAgICAgICAgIGxldCBzb3J0ZWRTdWl0ZXMgPSBbLi4uc3VpdGVzXS5zb3J0KCk7CisgICAg
ICAgIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmZvckVhY2goa2V5ID0+IHt0aGlzLmNoaWxk
cmVuW2tleV0udGVhcmRvd24oKTt9KTsKICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHt9OwogICAg
ICAgICBzb3J0ZWRTdWl0ZXMuZm9yRWFjaCgoc3VpdGUpID0+IHsKLSAgICAgICAgICAgIHRoaXMu
Y2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lKCdhcGkvcmVzdWx0cy8nICsgc3VpdGUpOwor
ICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltzdWl0ZV0gPSBuZXcgVGltZWxpbmVGcm9tRW5kcG9p
bnQoJ2FwaS9yZXN1bHRzLycgKyBzdWl0ZSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4g
c29ydGVkU3VpdGVzOwogICAgIH0KQEAgLTE0Myw3ICsxNDQsNyBAQCBjbGFzcyBNYWluVmlldyB7
CiAgICAgICAgIGxldCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47CiAgICAgICAgIHJldHVybiBM
ZWdlbmQoKCkgPT4gewogICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgaW4gY2hpbGRyZW4pIHsK
LSAgICAgICAgICAgICAgICBjaGlsZHJlbltzdWl0ZV0ucmVyZW5kZXIoKTsKKyAgICAgICAgICAg
ICAgICBjaGlsZHJlbltzdWl0ZV0udXBkYXRlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0s
IHRydWUpICsgc3VpdGVzLm1hcChzdWl0ZSA9PiB7CiAgICAgICAgICAgICByZXR1cm4gYDxkaXYg
Y2xhc3M9InNlY3Rpb24iPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375811</attachid>
            <date>2019-08-08 10:11:44 -0700</date>
            <delta_ts>2019-08-08 10:53:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-200172-20190808101143.patch</filename>
            <type>text/plain</type>
            <size>55875</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0ODQyMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDE5LTA4LTA4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICByZXN1bHRzLndlYmtpdC5vcmc6IFVzZSBjYW52YXMgZm9yIHRpbWVsaW5l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAxNzIK
KworICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBYWthc2ggSmFpbi4KKworICAgICAgICAqIHJl
c3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2pzL2NvbW1pdC5qczoKKyAgICAgICAg
KENvbW1pdC5jb25zdHJ1Y3Rvcik6IE1ha2UgdXVpZCBhIG1lbWJlciB2YXJpYWJsZSBpbnN0ZWFk
IG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGZvciBlZmZpY2llbmN5LgorICAgICAgICAoQ29tbWl0LmNv
bXBhcmUpOiBEaXR0by4KKyAgICAgICAgKF9Db21taXRCYW5rLmNvbW1pdEJ5VXVpZCk6IERpdHRv
LgorICAgICAgICAoX0NvbW1pdEJhbmsuX2xvYWRTaWJsaW5ncyk6IERpdHRvLgorICAgICAgICAo
X0NvbW1pdEJhbmsuX2xvYWQpOiBEaXR0by4KKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRz
ZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qczoKKyAgICAgICAgKHRpY2tGb3JDb21taXQp
OiBEZWxldGVkLgorICAgICAgICAobWluaW11bVV1aWRGb3JSZXN1bHRzKTogR2l2ZW4gYSBkaWN0
aW9uYXJ5IG9mIHJlc3VsdCBsaXN0cywgZGV0ZXJtaW5lIHRoZSBtaW5pbXVtIFVVSUQKKyAgICAg
ICAgd2hpY2ggZW5jb21wYXNzZXMgYWxsIHJlc3VsdHMuIENydWNpYWxseSwgdGhpcyBmdW5jdGlv
biBtdXN0IGV4Y2x1ZGUgYW4gVVVJRHMgd2hpY2ggbWF5CisgICAgICAgIHJlZmVyIHRvIHJlc3Vs
dHMgZXhjbHVkZWQgYmVjYXVzZSBvZiB0aGUgbGltaXQgYXJndW1lbnQuCisgICAgICAgIChyZW5k
ZXJUaW1lbGluZSk6IERlbGV0ZWQuCisgICAgICAgIChjb21taXRzRm9yUmVzdWx0cyk6IEdpdmVu
IGEgZGljdGlvbmFyeSBvZiByZXN1bHQgbGlzdHMsIHJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBh
c3NvY2lhdGVkCisgICAgICAgIHdpdGggdGhvc2UgcmVzdWx0cy4KKyAgICAgICAgKHNjYWxlRm9y
Q29tbWl0cyk6IEdpdmVuIGEgbGlzdCBvZiBjb21taXRzLCBnZW5lcmF0ZSBhIHNjYWxlIHRvIGJl
IGNvbnN1bWVkIGJ5IHRoZSBjYW52YXMgVGltZWxpbmUuCisgICAgICAgIChyZXBvc2l0b3JpZXNG
b3JDb21taXRzKTogR2l2ZW4gYSBsaXN0IG9mIGNvbW1pdHMsIHJldHVybiBhIHNvcnRlZCBsaXN0
IG9mIGFzc29jaWF0ZWQgcmVwb3NpdG9yeSBpZHMuCisgICAgICAgICh4QXhpc0Zyb21TY2FsZSk6
IENyZWF0ZSBhIGNhbnZhcy1iYXNlZCB4LWF4aXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxl
IGFuZCBhIHJlcG9zaXRvcnkgaWQuCisgICAgICAgIChpblBsYWNlQ29tYmluZSk6IENvbWJpbmUg
cmVzdWx0IG9iamVjdHMgdG9nZXRoZXIuCisgICAgICAgIChzdGF0c0ZvclNpbmdsZVJlc3VsdCk6
IFR1cm4gYSBzaW5nbGUgcmVzdWx0IGludG8gYSBzdGF0IG9iamVjdC4KKyAgICAgICAgKGNvbWJp
bmVSZXN1bHRzKTogR2l2ZW4gbGlzdHMgb2YgcmVzdWx0cywgY29tYmluZSB0aGVzZSBsaXN0cyB3
aGlsZSBrZWVwaW5nIHRoZSBvcmlnaW5hbCBsaXN0cyB1bmNoYW5nZWQuCisgICAgICAgIChEb3Qp
OiBEZWxldGVkLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQpOiBSZW5hbWVkIGZyb20g
VGltZWxpbmUuCisgICAgICAgIChUaW1lbGluZUZyb21FbmRwb2ludC5jb25zdHJ1Y3Rvcik6IENh
bnZhcyBUaW1lbGluZSBtYW5hZ2VzIGV4cGFuc2lvbiBhbmQgY29sbGFwc2luZyBvZiBuZXN0ZWQg
dGltZWxpbmVzLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQudGVhcmRvd24pOiBEZXRh
Y2ggY2FsbGJhY2tzIGZyb20gQ29tbWl0QmFuay4KKyAgICAgICAgKFRpbWVsaW5lRnJvbUVuZHBv
aW50LnVwZGF0ZSk6IFVwZGF0ZSB3aXRoIGFueSBuZXcgY29tbWl0IGluZm9ybWF0aW9uLCBmb3Jj
ZSBhIHJlLWRyYXcgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgY2FjaGUgY29udGVudHMuCisgICAg
ICAgIChUaW1lbGluZUZyb21FbmRwb2ludC5yZWxvYWQpOiBSZW1vdmUgbWFuYWdlbWVudCBvZiBu
ZXN0ZWQgdGltZWxpbmVzLgorICAgICAgICAoVGltZWxpbmVGcm9tRW5kcG9pbnQucmVuZGVyKTog
VXNlIGNhbnZhcyBUaW1lbGluZSBpbnN0ZWFkIG9mIGh0bWwgdGltZWxpbmUgdG8gdmlzdWFsaXpl
IHJlc3VsdHMuCisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0
ZXMvc2VhcmNoLmh0bWw6IFVzZSBUaW1lbGluZUZyb21FbmRwb2ludCBjbGFzcy4KKyAgICAgICAg
KiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0ZV9yZXN1bHRzLmh0
bWw6IERpdHRvLgorCiAyMDE5LTA4LTA4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBEbyBub3QgYWxsb3cgbmF2aWdhdGlvbnMgb2YgZnJhbWVzIGFib3V0IHRv
IGdldCByZXBsYWNlZCBieSB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgamF2YXNjcmlwdDogVVJM
cwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29t
bWl0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcv
c3RhdGljL2pzL2NvbW1pdC5qcwkocmV2aXNpb24gMjQ4NDIzKQorKysgVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvY29tbWl0LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjcsMTIgKzEyNywxMCBAQCBjbGFzcyBDb21taXQgewogICAgICAgICB0aGlzLm9yZGVyID0g
anNvbi5vcmRlcjsKICAgICAgICAgdGhpcy5yZXBvc2l0b3J5X2lkID0ganNvbi5yZXBvc2l0b3J5
X2lkOwogICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IGpzb24udGltZXN0YW1wOwotICAgIH0KLSAg
ICB1dWlkKCkgewotICAgICAgICByZXR1cm4gdGhpcy50aW1lc3RhbXAgKiBUSU1FU1RBTVBfVE9f
VVVJRF9NVUxUSVBMSUVSICsgdGhpcy5vcmRlcjsKKyAgICAgICAgdGhpcy51dWlkID0gdGhpcy50
aW1lc3RhbXAgKiBUSU1FU1RBTVBfVE9fVVVJRF9NVUxUSVBMSUVSICsgdGhpcy5vcmRlcjsKICAg
ICB9CiAgICAgY29tcGFyZShjb21taXQpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudXVpZCgpIC0g
Y29tbWl0LnV1aWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMudXVpZCAtIGNvbW1pdC51dWlkOwog
ICAgIH0KIH07CiAKQEAgLTE1NSw5ICsxNTMsOSBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAg
ICAgIHdoaWxlIChiZWdpbiA8PSBlbmQpIHsKICAgICAgICAgICAgIGNvbnN0IG1pZCA9IE1hdGgu
Y2VpbCgoYmVnaW4gKyBlbmQpIC8gMik7CiAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0
aGlzLmNvbW1pdHNbbWlkXTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudXVpZCgpID09PSB1
dWlkKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS51dWlkID09PSB1dWlkKQogICAgICAgICAg
ICAgICAgIHJldHVybiBjYW5kaWRhdGU7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLnV1aWQo
KSA8IHV1aWQpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLnV1aWQgPCB1dWlkKQogICAgICAg
ICAgICAgICAgIGJlZ2luID0gbWlkICsgMTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBlbmQgPSBtaWQgLSAxOwpAQCAtMTgzLDEyICsxODEsMTIgQEAgY2xhc3MgX0NvbW1pdEJh
bmsgewogICAgICAgICAgICAgICAgICAgICBqc29uW2tleV0uZm9yRWFjaChjb21taXRKc29uID0+
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IG5ldyBDb21taXQoY29t
bWl0SnNvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPj0gMCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbW1pdHNbaW5kZXhdLnV1aWQo
KSA8IGNvbW1pdC51dWlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vs
Zi5jb21taXRzW2luZGV4XS51dWlkIDwgY29tbWl0LnV1aWQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5jb21taXRzLnNwbGljZShpbmRleCwgMCwgY29tbWl0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmRleDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbW1pdHNbaW5kZXhdLnV1aWQoKSA9
PT0gY29tbWl0LnV1aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5j
b21taXRzW2luZGV4XS51dWlkID09PSBjb21taXQudXVpZCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmRleDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI0MCwxMiArMjM4LDEyIEBAIGNsYXNzIF9D
b21taXRCYW5rIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Rm9yUmVwb3NpdG9yeS5z
ZXQoY29tbWl0LnJlcG9zaXRvcnlfaWQsIGNvdW50Rm9yUmVwb3NpdG9yeS5nZXQoY29tbWl0LnJl
cG9zaXRvcnlfaWQpICsgMSk7CiAKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbW1pdHNJ
bmRleCA8IHNlbGYuY29tbWl0cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzZWxmLmNvbW1pdHNbY29tbWl0c0luZGV4XS51dWlkKCkgPiBjb21taXQudXVpZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb21taXRzW2NvbW1pdHNJbmRleF0udXVp
ZCA+IGNvbW1pdC51dWlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21t
aXRzLnNwbGljZShjb21taXRzSW5kZXgsIDAsIGNvbW1pdCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKytjb21taXRzSW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc2VsZi5jb21taXRzW2NvbW1pdHNJbmRleF0udXVpZCgpID09PSBjb21taXQudXVpZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29tbWl0c1tjb21taXRzSW5kZXhdLnV1
aWQgPT09IGNvbW1pdC51dWlkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgKytjb21taXRzSW5kZXg7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTI2MCw3ICsyNTgsNyBAQCBjbGFzcyBfQ29tbWl0QmFuayB7CiAgICAgICAgICAg
ICAgICAgY291bnRGb3JSZXBvc2l0b3J5LmZvckVhY2goKGNvdW50LCByZXBvKSA9PiB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gbGltaXQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCBjb21taXQgPSBuZXcgQ29tbWl0KGpzb25bZmlyc3RJbmRleEZvclJlcG9zaXRv
cnkuZ2V0KHJlcG8pXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW5Gb3VuZCA9IE1hdGgu
bWF4KG1pbkZvdW5kLCBjb21taXQudXVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1p
bkZvdW5kID0gTWF0aC5tYXgobWluRm91bmQsIGNvbW1pdC51dWlkKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGlmIChtaW5Gb3Vu
ZCAhPSBiZWdpblV1aWQpCkluZGV4OiBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3
L3N0YXRpYy9qcy90aW1lbGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9y
ZXN1bHRzZGJweS92aWV3L3N0YXRpYy9qcy90aW1lbGluZS5qcwkocmV2aXNpb24gMjQ4NDIzKQor
KysgVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvanMvdGltZWxpbmUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDggQEAKIGltcG9ydCB7Q29tbWl0QmFua30g
ZnJvbSAnL2Fzc2V0cy9qcy9jb21taXQuanMnOwogaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9t
ICcvYXNzZXRzL2pzL2NvbmZpZ3VyYXRpb24uanMnOwogaW1wb3J0IHtkZWVwQ29tcGFyZSwgRXJy
b3JEaXNwbGF5LCBwYXJhbXNUb1F1ZXJ5LCBxdWVyeVRvUGFyYW1zfSBmcm9tICcvYXNzZXRzL2pz
L2NvbW1vbi5qcyc7Ci1pbXBvcnQge0RPTSwgRXZlbnRTdHJlYW0sIFJFRn0gZnJvbSAnL2xpYnJh
cnkvanMvUmVmLmpzJzsKK2ltcG9ydCB7RE9NLCBFdmVudFN0cmVhbSwgUkVGLCBGUH0gZnJvbSAn
L2xpYnJhcnkvanMvUmVmLmpzJzsKK2ltcG9ydCB7VGltZWxpbmV9IGZyb20gJy9saWJyYXJ5L2pz
L2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzJzsKIAogCiBjb25zdCBERUZBVUxUX0xJ
TUlUID0gMTAwOwpAQCAtNzEsMTY1ICs3MiwyODggQEAgY2xhc3MgRXhwZWN0YXRpb25zCiB9CiBs
ZXQgd2lsbEZpbHRlckV4cGVjdGVkID0gZmFsc2U7CiAKLWZ1bmN0aW9uIHRpY2tGb3JDb21taXQo
Y29tbWl0LCBzY2FsZSkgewotICAgIGxldCBwYXJhbXMgPSB7Ci0gICAgICAgIGJyYW5jaDogY29t
bWl0LmJyYW5jaCA/IFtjb21taXQuYnJhbmNoXSA6IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJM
LnNwbGl0KCc/JylbMV0pLmJyYW5jaCwKLSAgICAgICAgdXVpZDogW2NvbW1pdC51dWlkKCldLAot
ICAgIH0KLSAgICBpZiAoIXBhcmFtcy5icmFuY2gpCi0gICAgICAgIGRlbGV0ZSBwYXJhbXMuYnJh
bmNoOwotICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zVG9RdWVyeShwYXJhbXMpOwotCi0gICAgaWYg
KHNjYWxlIDw9IDApCi0gICAgICAgIHJldHVybiAnJzsKLSAgICBpZiAoc2NhbGUgPT09IDEpCi0g
ICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ic2NhbGUiPgotICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9ImxpbmUiPjwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0
Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9jb21taXQ/JHtxdWVyeX0iIHRh
cmdldD0iX2JsYW5rIj4ke1N0cmluZyhjb21taXQuaWQpLnN1YnN0cmluZygwLDEwKX08L2E+Ci0g
ICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2PmA7Ci0gICAg
bGV0IHJlc3VsdCA9ICcnOwotICAgIHdoaWxlIChzY2FsZSA+IDApIHsKLSAgICAgICAgbGV0IGNv
dW50VG9Vc2UgPSBzY2FsZTsKLSAgICAgICAgaWYgKGNvdW50VG9Vc2UgPT09IDExIHx8IGNvdW50
VG9Vc2UgPT0gMTIpCi0gICAgICAgICAgICBjb3VudFRvVXNlID0gNjsKLSAgICAgICAgZWxzZSBp
ZiAoY291bnRUb1VzZSA+IDEwKQotICAgICAgICAgICAgY291bnRUb1VzZSA9IDEwOwotICAgICAg
ICByZXN1bHQgKz0gYDxkaXYgY2xhc3M9InNjYWxlIGdyb3VwLSR7Y291bnRUb1VzZX0iPgotICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlci1saW5lLWxlZnQiPjwvZGl2PgotICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUiPjwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9InRleHQiPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvY29tbWl0PyR7cXVl
cnl9IiB0YXJnZXQ9Il9ibGFuayI+JHtTdHJpbmcoY29tbWl0LmlkKS5zdWJzdHJpbmcoMCwxMCl9
PC9hPgotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
ImJvcmRlci1saW5lLXJpZ2h0Ij48L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PmA7Ci0gICAgICAg
IHNjYWxlIC09IGNvdW50VG9Vc2U7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19CitmdW5j
dGlvbiBtaW5pbXVtVXVpZEZvclJlc3VsdHMocmVzdWx0cywgbGltaXQpIHsKKyAgICBjb25zdCBu
b3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMCk7CisgICAgbGV0IG1pbkRpc3BsYXllZFV1
aWQgPSBub3c7CisgICAgbGV0IG1heExpbWl0ZWRVdWlkID0gMDsKKworICAgIE9iamVjdC5rZXlz
KHJlc3VsdHMpLmZvckVhY2goKGtleSkgPT4geworICAgICAgICByZXN1bHRzW2tleV0uZm9yRWFj
aChwYWlyID0+IHsKKyAgICAgICAgICAgIGlmICghcGFpci5yZXN1bHRzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAobGltaXQgIT09IDEgJiYgbGltaXQg
PT09IHBhaXIucmVzdWx0cy5sZW5ndGgpCisgICAgICAgICAgICAgICAgbWF4TGltaXRlZFV1aWQg
PSBNYXRoLm1heChwYWlyLnJlc3VsdHNbMF0udXVpZCwgbWF4TGltaXRlZFV1aWQpOworICAgICAg
ICAgICAgZWxzZSBpZiAobGltaXQgPT09IDEpCisgICAgICAgICAgICAgICAgbWluRGlzcGxheWVk
VXVpZCA9IE1hdGgubWluKHBhaXIucmVzdWx0c1twYWlyLnJlc3VsdHMubGVuZ3RoIC0gMV0udXVp
ZCwgbWluRGlzcGxheWVkVXVpZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bWluRGlzcGxheWVkVXVpZCA9IE1hdGgubWluKHBhaXIucmVzdWx0c1swXS51dWlkLCBtaW5EaXNw
bGF5ZWRVdWlkKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiAKLWZ1bmN0aW9uIHJlbmRlclRpbWVs
aW5lKGNvbW1pdHMsIHJlcG9zaXRvcmllcyA9IFtdLCB0b3AgPSBmYWxzZSkgewotICAgIC8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGJyZWFrcyB3aXRoIG1vcmUgdGhhbiAzIHJlcG9zaXRvcmllcyBi
ZWNhdXNlIG9mIDxyZGFyOi8vcHJvYmxlbS81MTA0Mjk4MT4KLSAgICBpZiAocmVwb3NpdG9yaWVz
Lmxlbmd0aCA9PT0gMCkgewotICAgICAgICBpZiAodG9wKQotICAgICAgICAgICAgcmV0dXJuICcn
OwotICAgICAgICByZXBvc2l0b3JpZXMgPSBbbnVsbF07Ci0gICAgfQotICAgIGNvbnN0IHN0YXJ0
ID0gdG9wID8gTWF0aC5jZWlsKHJlcG9zaXRvcmllcy5sZW5ndGggLyAyKSA6IDA7Ci0gICAgY29u
c3QgZW5kID0gdG9wID8gcmVwb3NpdG9yaWVzLmxlbmd0aCA6IE1hdGguY2VpbChyZXBvc2l0b3Jp
ZXMubGVuZ3RoIC8gMik7Ci0gICAgY29uc3QgbnVtYmVyT2ZFbGVtZW50cyA9IGNvbW1pdHMubGVu
Z3RoIC0gTWF0aC5tYXgocmVwb3NpdG9yaWVzLmxlbmd0aCAtIDEsIDApCi0gICAgcmV0dXJuIHJl
cG9zaXRvcmllcy5zbGljZShzdGFydCwgZW5kKS5tYXAocmVwb3NpdG9yeSA9PiB7Ci0gICAgICAg
IGxldCBjb21taXRzRnJvbU90aGVyUmVwb3MgPSAwOwotICAgICAgICBsZXQgcmVuZGVyZWRFbGVt
ZW50cyA9IDA7Ci0gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0ieC1heGlzICR7dG9wID8gJ3Rv
cCcgOiAnJ30iPgotICAgICAgICAgICAgICAgICR7Y29tbWl0cy5tYXAoY29tbWl0ID0+IHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC5yZXBvc2l0b3J5X2lkICYmIGNvbW1pdC5yZXBv
c2l0b3J5X2lkICE9PSByZXBvc2l0b3J5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK2Nv
bW1pdHNGcm9tT3RoZXJSZXBvczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9
ICBNYXRoLm1pbihjb21taXRzRnJvbU90aGVyUmVwb3MgKyAxLCBudW1iZXJPZkVsZW1lbnRzIC0g
cmVuZGVyZWRFbGVtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1pdHNGcm9tT3RoZXJS
ZXBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkRWxlbWVudHMgKz0gc2NhbGU7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrRm9yQ29tbWl0KGNvbW1pdCwgc2NhbGUp
OwotICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpfQotICAgICAgICAgICAgPC9kaXY+YDsKLSAg
ICB9KS5qb2luKCcnKTsKKyAgICBpZiAobWluRGlzcGxheWVkVXVpZCA9PT0gbm93KQorICAgICAg
ICByZXR1cm4gbWF4TGltaXRlZFV1aWQ7CisgICAgcmV0dXJuIE1hdGgubWF4KG1pbkRpc3BsYXll
ZFV1aWQsIG1heExpbWl0ZWRVdWlkKTsKIH0KIAotY2xhc3MgRG90IHsKLSAgICBzdGF0aWMgbWVy
Z2UoZG90cyA9IHt9KSB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBbXTsKLSAgICAgICAgbGV0IGlu
ZGV4ID0gMDsKLSAgICAgICAgbGV0IGhhc0RhdGEgPSB0cnVlOwotCi0gICAgICAgIHdoaWxlICho
YXNEYXRhKSB7Ci0gICAgICAgICAgICBsZXQgZG90ID0gbmV3IERvdCgpOwotICAgICAgICAgICAg
aGFzRGF0YSA9IGZhbHNlOwotCi0gICAgICAgICAgICBPYmplY3Qua2V5cyhkb3RzKS5mb3JFYWNo
KGtleSA9PiB7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdHNba2V5XS5sZW5ndGggPD0gaW5kZXgp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBoYXNEYXRhID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWRvdHNba2V5XVtpbmRleF0uY291bnQpCitmdW5j
dGlvbiBjb21taXRzRm9yUmVzdWx0cyhyZXN1bHRzLCBsaW1pdCwgYWxsQ29tbWl0cyA9IHRydWUp
IHsKKyAgICBjb25zdCBtaW5EaXNwbGF5ZWRVdWlkID0gbWluaW11bVV1aWRGb3JSZXN1bHRzKGxp
bWl0KTsKKyAgICBsZXQgY29tbWl0cyA9IFtdOworICAgIGxldCByZXBvc2l0b3JpZXMgPSBuZXcg
U2V0KCk7CisgICAgbGV0IGN1cnJlbnRDb21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0cy5s
ZW5ndGggLSAxOworICAgIE9iamVjdC5rZXlzKHJlc3VsdHMpLmZvckVhY2goKGtleSkgPT4gewor
ICAgICAgICByZXN1bHRzW2tleV0uZm9yRWFjaChwYWlyID0+IHsKKyAgICAgICAgICAgIHBhaXIu
cmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC51
dWlkIDwgbWluRGlzcGxheWVkVXVpZCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGlmIChkb3QuY291bnQpCi0gICAgICAgICAgICAgICAgICAgIGRvdC5jb21i
aW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZUNvbW1pdHMgPSBbXTsK
IAotICAgICAgICAgICAgICAgIGRvdC5jb3VudCArPSBkb3RzW2tleV1baW5kZXhdLmNvdW50Owot
ICAgICAgICAgICAgICAgIGRvdC5mYWlsZWQgKz0gZG90c1trZXldW2luZGV4XS5mYWlsZWQ7Ci0g
ICAgICAgICAgICAgICAgZG90LnRpbWVvdXQgKz0gZG90c1trZXldW2luZGV4XS50aW1lb3V0Owot
ICAgICAgICAgICAgICAgIGRvdC5jcmFzaCArPSBkb3RzW2tleV1baW5kZXhdLmNyYXNoOwotICAg
ICAgICAgICAgICAgIGlmIChkb3QuY29tYmluZWQpCi0gICAgICAgICAgICAgICAgICAgIGRvdC5s
aW5rID0gbnVsbDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRv
dC5saW5rID0gZG90c1trZXldW2luZGV4XS5saW5rOworICAgICAgICAgICAgICAgIGlmICghYWxs
Q29tbWl0cykKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbW1pdEluZGV4ID0gQ29tbWl0
QmFuay5jb21taXRzLmxlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRD
b21taXRJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChDb21taXRCYW5rLmNv
bW1pdHNbY3VycmVudENvbW1pdEluZGV4XS51dWlkIDwgcmVzdWx0LnV1aWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbENvbW1pdHMg
fHwgQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0udXVpZCA9PT0gcmVzdWx0
LnV1aWQpCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVDb21taXRzLnB1c2goQ29t
bWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJbmRleF0pOworICAgICAgICAgICAgICAgICAg
ICAtLWN1cnJlbnRDb21taXRJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZUNvbW1pdHMubGVuZ3RoID09PSAwIHx8IGNhbmRpZGF0ZUNvbW1pdHNb
Y2FuZGlkYXRlQ29tbWl0cy5sZW5ndGggLSAxXS51dWlkICE9PSByZXN1bHQudXVpZCkKKyAgICAg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5wdXNoKHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlkOiAnPycsCisgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByZXN1bHQudXVp
ZCwKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBsZXQgaW5kZXgg
PSAwOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMuZm9yRWFjaChjb21taXQgPT4g
eworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnJlcG9zaXRvcnlfaWQpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuYWRkKGNvbW1pdC5yZXBvc2l0b3J5X2lkKTsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgY29tbWl0cy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQudXVpZCA9PT0gY29tbWl0c1tpbmRleF0u
dXVpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQgPiBjb21taXRzW2luZGV4XS51dWlkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5zcGxpY2UoaW5kZXgsIDAsIGNvbW1pdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb21taXRzLnB1c2goY29tbWl0KTsKKyAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGhhc0RhdGEp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZG90KTsKLSAgICAgICAgICAgICsraW5kZXg7
CisgICAgICAgIH0pOworICAgIH0pOworICAgIGlmIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCAm
JiBjb21taXRzLmxlbmd0aCkgeworICAgICAgICBsZXQgdHJhaWxpbmdSZXBvc2l0b3JpZXMgPSBu
ZXcgU2V0KHJlcG9zaXRvcmllcyk7CisgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRlbGV0
ZShjb21taXRzW2NvbW1pdHMubGVuZ3RoIC0gMV0ucmVwb3NpdG9yeV9pZCk7CisgICAgICAgIHdo
aWxlIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCAmJiB0cmFpbGluZ1JlcG9zaXRvcmllcy5zaXpl
KSB7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVu
dENvbW1pdEluZGV4XTsKKyAgICAgICAgICAgIGlmICh0cmFpbGluZ1JlcG9zaXRvcmllcy5oYXMo
Y29tbWl0LnJlcG9zaXRvcnlfaWQpKSB7CisgICAgICAgICAgICAgICAgY29tbWl0cy5wdXNoKGNv
bW1pdCk7CisgICAgICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVsZXRlKGNvbW1p
dC5yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tY3VycmVudENv
bW1pdEluZGV4OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAg
IGNvbnN0cnVjdG9yKGNvdW50ID0gMCwgZmFpbGVkID0gMCwgdGltZW91dCA9IDAsIGNyYXNoID0g
MCwgY29tYmluZWQgPSBmYWxzZSwgbGluayA9IG51bGwpIHsKLSAgICAgICAgdGhpcy5jb3VudCA9
IGNvdW50OwotICAgICAgICB0aGlzLmZhaWxlZCA9IGZhaWxlZDsKLSAgICAgICAgdGhpcy50aW1l
b3V0ID0gdGltZW91dDsKLSAgICAgICAgdGhpcy5jcmFzaCA9IGNyYXNoOwotICAgICAgICB0aGlz
LmNvbWJpbmVkID0gY29tYmluZWQ7Ci0gICAgICAgIHRoaXMubGluayA9IGxpbms7CisKKyAgICBy
ZXBvc2l0b3JpZXMgPSBbLi4ucmVwb3NpdG9yaWVzXTsKKyAgICByZXBvc2l0b3JpZXMuc29ydCgp
OworICAgIHJldHVybiBjb21taXRzOworfQorCitmdW5jdGlvbiBzY2FsZUZvckNvbW1pdHMoY29t
bWl0cykgeworICAgIGxldCBzY2FsZSA9IFtdOworICAgIGZvciAobGV0IGkgPSBjb21taXRzLmxl
bmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IHJlcG9zaXRvcnlfaWQgPSBj
b21taXRzW2ldLnJlcG9zaXRvcnlfaWQgPyBjb21taXRzW2ldLnJlcG9zaXRvcnlfaWQgOiAnPyc7
CisgICAgICAgIHNjYWxlLnVuc2hpZnQoe30pOworICAgICAgICBzY2FsZVswXVtyZXBvc2l0b3J5
X2lkXSA9IGNvbW1pdHNbaV07CisgICAgICAgIGlmIChzY2FsZS5sZW5ndGggPCAyKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIE9iamVjdC5rZXlzKHNjYWxlWzFdKS5mb3JFYWNoKChr
ZXkpID0+IHsKKyAgICAgICAgICAgIGlmIChrZXkgPT09IHJlcG9zaXRvcnlfaWQgfHwga2V5ID09
PSAnPycgfHwga2V5ID09PSAndXVpZCcpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2NhbGVbMF1ba2V5XSA9IHNjYWxlWzFdW2tleV07CisgICAgICAgIH0pOworICAgICAg
ICBzY2FsZVswXS51dWlkID0gTWF0aC5tYXgoLi4uT2JqZWN0LmtleXMoc2NhbGVbMF0pLm1hcCgo
a2V5KSA9PiB7CisgICAgICAgICAgICByZXR1cm4gc2NhbGVbMF1ba2V5XS51dWlkOworICAgICAg
ICB9KSk7CiAgICAgfQotICAgIHRvU3RyaW5nKCkgewotICAgICAgICBpZiAoIXRoaXMuY291bnQp
Ci0gICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImRvdCBlbXB0eSI+PC9kaXY+YDsKKyAg
ICByZXR1cm4gc2NhbGU7Cit9CiAKLSAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7CitmdW5jdGlv
biByZXBvc2l0b3JpZXNGb3JDb21taXRzKGNvbW1pdHMpIHsKKyAgICBsZXQgcmVwb3NpdG9yaWVz
ID0gbmV3IFNldCgpOworICAgIGNvbW1pdHMuZm9yRWFjaCgoY29tbWl0KSA9PiB7CisgICAgICAg
IGlmIChjb21taXQucmVwb3NpdG9yeV9pZCkKKyAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQo
Y29tbWl0LnJlcG9zaXRvcnlfaWQpOworICAgIH0pOworICAgIHJlcG9zaXRvcmllcyA9IFsuLi5y
ZXBvc2l0b3JpZXNdOworICAgIGlmICghcmVwb3NpdG9yaWVzLmxlbmd0aCkKKyAgICAgICAgcmVw
b3NpdG9yaWVzID0gWyc/J107CisgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsKKyAgICByZXR1cm4g
cmVwb3NpdG9yaWVzOworfQogCi0gICAgICAgIGZ1bmN0aW9uIHJlbmRlcihjc3NDbGFzcywgaW5z
aWRlPScnKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi5saW5rKQotICAgICAgICAgICAgICAgIHJl
dHVybiBgPGEgaHJlZj0iJHtzZWxmLmxpbmt9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IiR7Y3Nz
Q2xhc3N9Ij4ke2luc2lkZX08L2E+YDsKLSAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0i
JHtjc3NDbGFzc30iPiR7aW5zaWRlfTwvZGl2PmA7CitmdW5jdGlvbiB4QXhpc0Zyb21TY2FsZShz
Y2FsZSwgcmVwb3NpdG9yeSwgdXBkYXRlc0FycmF5LCBpc1RvcD1mYWxzZSkKK3sKKyAgICBmdW5j
dGlvbiBzY2FsZUZvclJlcG9zaXRvcnkoc2NhbGUpIHsKKyAgICAgICAgcmV0dXJuIHNjYWxlLm1h
cChub2RlID0+IHsKKyAgICAgICAgICAgIGxldCBjb21taXQgPSBub2RlW3JlcG9zaXRvcnldOwor
ICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgY29tbWl0ID0gbm9kZVsn
PyddOworICAgICAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHtp
ZDogJycsIHV1aWQ6IG51bGx9OworICAgICAgICAgICAgcmV0dXJuIGNvbW1pdDsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgcmV0dXJuIFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50KHNj
YWxlRm9yUmVwb3NpdG9yeShzY2FsZSksIHsKKyAgICAgICAgaXNUb3A6IGlzVG9wLAorICAgICAg
ICBoZWlnaHQ6IDEzMCwKKyAgICAgICAgb25TY2FsZUNsaWNrOiAobm9kZSkgPT4geworICAgICAg
ICAgICAgaWYgKCFub2RlLmxhYmVsLmlkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGxldCBwYXJhbXMgPSB7CisgICAgICAgICAgICAgICAgYnJhbmNoOiBub2RlLmxhYmVs
LmJyYW5jaCA/IFtub2RlLmxhYmVsLmJyYW5jaF0gOiBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVS
TC5zcGxpdCgnPycpWzFdKS5icmFuY2gsCisgICAgICAgICAgICAgICAgdXVpZDogW25vZGUubGFi
ZWwudXVpZF0sCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXBhcmFtcy5icmFuY2gp
CisgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtcy5icmFuY2g7CisgICAgICAgICAgICBjb25z
dCBxdWVyeSA9IHBhcmFtc1RvUXVlcnkocGFyYW1zKTsKKyAgICAgICAgICAgIHdpbmRvdy5vcGVu
KGAvY29tbWl0PyR7cXVlcnl9YCwgJ19ibGFuaycpOworICAgICAgICB9LAorICAgICAgICAvLyBQ
ZXIgdGhlIGJpcnRoZGF5IHBhcmFkb3gsIDEwJSBjaGFuZ2Ugb2YgY29sbGlzaW9uIHdpdGggNy43
IG1pbGxpb24gY29tbWl0cyB3aXRoIDEyIGNoYXJhY3RlciBjb21taXRzCisgICAgICAgIGdldExh
YmVsRnVuYzogKGNvbW1pdCkgPT4ge3JldHVybiBjb21taXQgPyBjb21taXQuaWQuc3Vic3RyaW5n
KDAsMTIpIDogJz8nO30sCisgICAgICAgIGdldFNjYWxlRnVuYzogKGNvbW1pdCkgPT4gY29tbWl0
LnV1aWQsCisgICAgICAgIGV4cG9ydGVyOiAodXBkYXRlRnVuY3Rpb24pID0+IHsKKyAgICAgICAg
ICAgIHVwZGF0ZXNBcnJheS5wdXNoKChzY2FsZSkgPT4ge3VwZGF0ZUZ1bmN0aW9uKHNjYWxlRm9y
UmVwb3NpdG9yeShzY2FsZSkpO30pOworICAgICAgICB9LAorICAgIH0pOworfQorCitjb25zdCB0
ZXN0c1JlZ2V4ID0gL3Rlc3RzXyhbYS16XSkrLzsKK2NvbnN0IGZhaWx1cmVUeXBlT3JkZXIgPSBb
J2ZhaWxlZCcsICd0aW1lZG91dCcsICdjcmFzaGVkJ107Citjb25zdCBmYWlsdXJlVHlwZU1hcHBp
bmcgPSB7CisgICAgZmFpbGVkOiAnRVJST1InLAorICAgIHRpbWVkb3V0OiAnVElNRU9VVCcsCisg
ICAgY3Jhc2hlZDogJ0NSQVNIJywKK30KKworZnVuY3Rpb24gaW5QbGFjZUNvbWJpbmUob3V0LCBv
YmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiBvdXQ7CisKKyAgICBpZiAoIW91
dCkgeworICAgICAgICBvdXQgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNo
KGtleSA9PiB7CisgICAgICAgICAgICBpZiAoa2V5WzBdID09PSAnXycpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKG9ialtrZXldIGluc3RhbmNlb2YgT2JqZWN0KQor
ICAgICAgICAgICAgICAgIG91dFtrZXldID0gaW5QbGFjZUNvbWJpbmUob3V0W2tleV0sIG9ialtr
ZXldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXRba2V5XSA9IG9ialtr
ZXldOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBPYmplY3Qua2V5cyhvdXQp
LmZvckVhY2goa2V5ID0+IHsKKyAgICAgICAgICAgIGlmIChrZXlbMF0gPT09ICdfJykKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChvdXRba2V5XSBpbnN0YW5jZW9m
IE9iamVjdCkgeworICAgICAgICAgICAgICAgIG91dFtrZXldID0gaW5QbGFjZUNvbWJpbmUob3V0
W2tleV0sIG9ialtrZXldKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFNldCBvZiBzcGVjaWFsIGNhc2Uga2V5cyB3aGljaCBuZWVkIHRv
IGJlIGFkZGVkIHRvZ2V0aGVyCisgICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHRlc3RzUmVnZXgp
KSB7CisgICAgICAgICAgICAgICAgb3V0W2tleV0gKz0gb2JqW2tleV07CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB0aGUga2V5IGV4
aXN0cywgYnV0IGRvZXNuJ3QgbWF0Y2gsIGRlbGV0ZSBpdAorICAgICAgICAgICAgaWYgKCEoa2V5
IGluIG9iaikgfHwgb3V0W2tleV0gIT09IG9ialtrZXldKSB7CisgICAgICAgICAgICAgICAgZGVs
ZXRlIG91dFtrZXldOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4geworICAg
ICAgICAgICAgaWYgKGtleS5tYXRjaCh0ZXN0c1JlZ2V4KSAmJiAhKGtleSBpbiBvdXQpKQorICAg
ICAgICAgICAgICAgIG91dFtrZXldID0gb2JqW2tleV07CisgICAgICAgIH0pOworICAgIH0KKyAg
ICByZXR1cm4gb3V0OworfQorCitmdW5jdGlvbiBzdGF0c0ZvclNpbmdsZVJlc3VsdChyZXN1bHQp
IHsKKyAgICBjb25zdCBhY3R1YWxJZCA9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQocmVz
dWx0LmFjdHVhbCk7CisgICAgY29uc3QgdW5leHBlY3RlZElkID0gRXhwZWN0YXRpb25zLnN0cmlu
Z1RvU3RhdGVJZChFeHBlY3RhdGlvbnMudW5leHBlY3RlZFJlc3VsdHMocmVzdWx0LmFjdHVhbCwg
cmVzdWx0LmV4cGVjdGVkKSk7CisgICAgbGV0IHN0YXRzID0geworICAgICAgICB0ZXN0c19ydW46
IDEsCisgICAgICAgIHRlc3RzX3NraXBwZWQ6IDAsCisgICAgfQorICAgIGZhaWx1cmVUeXBlT3Jk
ZXIuZm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgY29uc3QgaWRGb3JUeXBlID0gRXhwZWN0YXRp
b25zLnN0cmluZ1RvU3RhdGVJZChmYWlsdXJlVHlwZU1hcHBpbmdbdHlwZV0pOworICAgICAgICBz
dGF0c1tgdGVzdHNfJHt0eXBlfWBdID0gYWN0dWFsSWQgPiBpZEZvclR5cGUgID8gMCA6IDE7Cisg
ICAgICAgIHN0YXRzW2B0ZXN0c191bmV4cGVjdGVkXyR7dHlwZX1gXSA9IHVuZXhwZWN0ZWRJZCA+
IGlkRm9yVHlwZSAgPyAwIDogMTsKKyAgICB9KTsKKyAgICByZXR1cm4gc3RhdHM7Cit9CisKK2Z1
bmN0aW9uIGNvbWJpbmVSZXN1bHRzKCkgeworICAgIGxldCBjb3VudHMgPSBuZXcgQXJyYXkoYXJn
dW1lbnRzLmxlbmd0aCkuZmlsbCgwKTsKKyAgICBsZXQgZGF0YSA9IFtdOworCisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgLy8gRmluZCBjYW5kaWRhdGUgdXVpZAorICAgICAgICBsZXQgdXVp
ZCA9IDA7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBsZXQgY2FuZGlkYXRlVXVpZCA9IG51bGw7CisgICAgICAgICAgICB3aGls
ZSAoYXJndW1lbnRzW2ldICYmIGFyZ3VtZW50c1tpXS5sZW5ndGggPiBjb3VudHNbaV0pIHsKKyAg
ICAgICAgICAgICAgICBjYW5kaWRhdGVVdWlkID0gYXJndW1lbnRzW2ldW2NvdW50c1tpXV0udXVp
ZDsKKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlVXVpZCkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgKytjb3VudHNbaV07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlVXVpZCkKKyAgICAgICAgICAgICAgICB1dWlkID0gTWF0
aC5tYXgodXVpZCwgY2FuZGlkYXRlVXVpZCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXRo
aXMuZmFpbGVkKQotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcignZG90IHN1Y2Nlc3MnKTsKKyAg
ICAgICAgaWYgKCF1dWlkKQorICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisKKyAgICAgICAgLy8g
Q29tYmluZSByZWxldmFudCByZXN1bHRzCisgICAgICAgIGxldCBkYXRhTm9kZSA9IG51bGw7Cisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICB3aGlsZSAoY291bnRzW2ldIDwgYXJndW1lbnRzW2ldLmxlbmd0aCAmJiBhcmd1bWVudHNb
aV1bY291bnRzW2ldXSAmJiBhcmd1bWVudHNbaV1bY291bnRzW2ldXS51dWlkID09PSB1dWlkKSB7
CisgICAgICAgICAgICAgICAgaWYgKGRhdGFOb2RlICYmICFkYXRhTm9kZS5zdGF0cykKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YU5vZGUuc3RhdHMgPSBzdGF0c0ZvclNpbmdsZVJlc3VsdChkYXRh
Tm9kZSk7CiAKLSAgICAgICAgbGV0IGtleSA9ICdmYWlsZWQnOwotICAgICAgICBpZiAodGhpcy50
aW1lb3V0KQotICAgICAgICAgICAga2V5ID0gJ3RpbWVvdXQnOwotICAgICAgICBpZiAodGhpcy5j
cmFzaCkKLSAgICAgICAgICAgIGtleSA9ICdjcmFzaCc7Ci0KLSAgICAgICAgaWYgKCF0aGlzLmNv
bWJpbmVkKQotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihgZG90ICR7a2V5fWAsIGA8ZGl2IGNs
YXNzPSJ0YWciIHN0eWxlPSJjb2xvcjp2YXIoLS1ib2xkSW52ZXJzZUNvbG9yKSI+JHt0aGlzLmZh
aWxlZH08L2Rpdj5gKTsKLQotICAgICAgICByZXR1cm4gcmVuZGVyKGBkb3QgJHtrZXl9YCwgYDxk
aXYgY2xhc3M9InRhZyIgc3R5bGU9ImNvbG9yOnZhcigtLWJvbGRJbnZlcnNlQ29sb3IpIj4KLSAg
ICAgICAgICAgICAgICAke2Z1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBsZXQgcGVy
Y2VudCA9IE1hdGguY2VpbChzZWxmLmZhaWxlZCAvIHNlbGYuY291bnQgKiAxMDAgLSAuNSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChwZXJjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBwZXJjZW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwxJzsKLSAg
ICAgICAgICAgICAgICB9KCl9ICUKLSAgICAgICAgICAgIDwvZGl2PmApOworICAgICAgICAgICAg
ICAgIGRhdGFOb2RlID0gaW5QbGFjZUNvbWJpbmUoZGF0YU5vZGUsIGFyZ3VtZW50c1tpXVtjb3Vu
dHNbaV1dKTsKKworICAgICAgICAgICAgICAgIGlmIChkYXRhTm9kZS5zdGF0cyAmJiAhYXJndW1l
bnRzW2ldW2NvdW50c1tpXV0uc3RhdHMpCisgICAgICAgICAgICAgICAgICAgIGRhdGFOb2RlLnN0
YXRzID0gaW5QbGFjZUNvbWJpbmUoZGF0YU5vZGUuc3RhdHMsIHN0YXRzRm9yU2luZ2xlUmVzdWx0
KGFyZ3VtZW50c1tpXVtjb3VudHNbaV1dKSk7CisKKyAgICAgICAgICAgICAgICArK2NvdW50c1tp
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZGF0YU5vZGUpCisgICAg
ICAgICAgICBkYXRhLnB1c2goZGF0YU5vZGUpOwogICAgIH0KKyAgICByZXR1cm4gZGF0YTsKIH0K
IAotY2xhc3MgVGltZWxpbmUgeworY2xhc3MgVGltZWxpbmVGcm9tRW5kcG9pbnQgewogICAgIGNv
bnN0cnVjdG9yKGVuZHBvaW50LCBzdWl0ZSA9IG51bGwpIHsKICAgICAgICAgdGhpcy5lbmRwb2lu
dCA9IGVuZHBvaW50OwogICAgICAgICB0aGlzLmRpc3BsYXlBbGxDb21taXRzID0gdHJ1ZTsKIAog
ICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gQ29uZmlndXJhdGlvbi5mcm9tUXVlcnkoKTsK
ICAgICAgICAgdGhpcy5yZXN1bHRzID0ge307Ci0gICAgICAgIHRoaXMuY29sbGFwc2VkID0ge307
Ci0gICAgICAgIHRoaXMuZXhwYW5kZWRTREtzID0ge307CiAgICAgICAgIHRoaXMuc3VpdGUgPSBz
dWl0ZTsgIC8vIFN1aXRlIGlzIG9mdGVuIGltcGxpZWQgYnkgdGhlIGVuZHBvaW50LCBidXQgdHJ5
aW5nIHRvIGRldGVybWluZSBzdWl0ZSBmcm9tIGVuZHBvaW50IGlzIG5vdCB0cml2aWFsLgogCisg
ICAgICAgIHRoaXMudXBkYXRlcyA9IFtdOworICAgICAgICB0aGlzLnhheGlzVXBkYXRlcyA9IFtd
OworICAgICAgICB0aGlzLnRpbWVsaW5lVXBkYXRlID0gbnVsbDsKKyAgICAgICAgdGhpcy5yZXBv
c2l0b3JpZXMgPSBbXTsKKwogICAgICAgICBjb25zdCBzZWxmID0gdGhpczsKLSAgICAgICAgdGhp
cy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAg
dGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSBbXTsKLSAgICAgICAgICAgIHRo
aXMuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0gPSB0cnVlOwotICAgICAgICB9KTsK
IAogICAgICAgICB0aGlzLmxhdGVzdERpc3BhdGNoID0gRGF0ZS5ub3coKTsKICAgICAgICAgdGhp
cy5yZWYgPSBSRUYuY3JlYXRlUmVmKHsKQEAgLTI0NCwxNSArMzY4LDQ2IEBAIGNsYXNzIFRpbWVs
aW5lIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICAgICAgQ29tbWl0QmFuay5j
YWxsYmFja3MucHVzaCgoKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeVRv
UGFyYW1zKGRvY3VtZW50LlVSTC5zcGxpdCgnPycpWzFdKTsKLSAgICAgICAgICAgIHNlbGYucmVm
LnNldFN0YXRlKHBhcmFtcy5saW1pdCA/IHBhcnNlSW50KHBhcmFtcy5saW1pdFtwYXJhbXMubGlt
aXQubGVuZ3RoIC0gMV0pIDogREVGQVVMVF9MSU1JVCk7Ci0gICAgICAgIH0pOworICAgICAgICB0
aGlzLmNvbW1pdF9jYWxsYmFjayA9ICgpID0+IHsKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKCk7
CisgICAgICAgIH07CisgICAgICAgIENvbW1pdEJhbmsuY2FsbGJhY2tzLnB1c2godGhpcy5jb21t
aXRfY2FsbGJhY2spOwogCiAgICAgICAgIHRoaXMucmVsb2FkKCk7CiAgICAgfQorICAgIHRlYXJk
b3duKCkgeworICAgICAgICBDb21taXRCYW5rLmNhbGxiYWNrcyA9IENvbW1pdEJhbmsuY2FsbGJh
Y2tzLmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnIpID0+IHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmNvbW1pdF9jYWxsYmFjayA9PT0gdmFsdWU7CisgICAgICAgIH0pOworICAgIH0KKyAgICB1
cGRhdGUoKSB7CisgICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQu
VVJMLnNwbGl0KCc/JylbMV0pOworICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0c0ZvclJl
c3VsdHModGhpcy5yZXN1bHRzLCBwYXJhbXMubGltaXQgPyBwYXJzZUludChwYXJhbXMubGltaXRb
cGFyYW1zLmxpbWl0Lmxlbmd0aCAtIDFdKSA6IERFRkFVTFRfTElNSVQsIHRoaXMuYWxsQ29tbWl0
cyk7CisgICAgICAgIGNvbnN0IHNjYWxlID0gc2NhbGVGb3JDb21taXRzKGNvbW1pdHMpOworCisg
ICAgICAgIGNvbnN0IG5ld1JlcG9zaXRvcmllcyA9IHJlcG9zaXRvcmllc0ZvckNvbW1pdHMoY29t
bWl0cyk7CisgICAgICAgIGxldCBoYXZlTmV3UmVwb3MgPSB0aGlzLnJlcG9zaXRvcmllcy5sZW5n
dGggIT09IG5ld1JlcG9zaXRvcmllcy5sZW5ndGg7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyAh
aGF2ZU5ld1JlcG9zICYmIGkgPCB0aGlzLnJlcG9zaXRvcmllcy5sZW5ndGggJiYgaSA8IG5ld1Jl
cG9zaXRvcmllcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGhhdmVOZXdSZXBvcyA9IHRoaXMu
cmVwb3NpdG9yaWVzW2ldICE9PSBuZXdSZXBvc2l0b3JpZXNbaV07CisgICAgICAgIGlmIChoYXZl
TmV3UmVwb3MgJiYgdGhpcy50aW1lbGluZVVwZGF0ZSkgeworICAgICAgICAgICAgdGhpcy54YXhp
c1VwZGF0ZXMgPSBbXTsKKyAgICAgICAgICAgIGxldCB0b3AgPSB0cnVlOworICAgICAgICAgICAg
bGV0IGNvbXBvbmVudHMgPSBbXTsKKworICAgICAgICAgICAgbmV3UmVwb3NpdG9yaWVzLmZvckVh
Y2gocmVwb3NpdG9yeSA9PiB7CisgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKHhBeGlz
RnJvbVNjYWxlKHNjYWxlLCByZXBvc2l0b3J5LCB0aGlzLnhheGlzVXBkYXRlcywgdG9wKSk7Cisg
ICAgICAgICAgICAgICAgdG9wID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgdGhpcy50aW1lbGluZVVwZGF0ZShjb21wb25lbnRzKTsKKyAgICAgICAgICAgIHRoaXMucmVw
b3NpdG9yaWVzID0gbmV3UmVwb3NpdG9yaWVzOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy51
cGRhdGVzLmZvckVhY2goZnVuYyA9PiB7ZnVuYyhzY2FsZSk7fSkKKyAgICAgICAgdGhpcy54YXhp
c1VwZGF0ZXMuZm9yRWFjaChmdW5jID0+IHtmdW5jKHNjYWxlKTt9KTsKKyAgICB9CiAgICAgcmVy
ZW5kZXIoKSB7Ci0gICAgICAgIGxldCBwYXJhbXMgPSBxdWVyeVRvUGFyYW1zKGRvY3VtZW50LlVS
TC5zcGxpdCgnPycpWzFdKTsKKyAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnlUb1BhcmFtcyhk
b2N1bWVudC5VUkwuc3BsaXQoJz8nKVsxXSk7CiAgICAgICAgIHRoaXMucmVmLnNldFN0YXRlKHBh
cmFtcy5saW1pdCA/IHBhcnNlSW50KHBhcmFtcy5saW1pdFtwYXJhbXMubGltaXQubGVuZ3RoIC0g
MV0pIDogREVGQVVMVF9MSU1JVCk7CiAgICAgfQogICAgIHJlbG9hZCgpIHsKQEAgLTI3MywxMSAr
NDI4LDggQEAgY2xhc3MgVGltZWxpbmUgewogICAgICAgICBpZiAoIWRlZXBDb21wYXJlKG5ld0Nv
bmZpZ3MsIHRoaXMuY29uZmlndXJhdGlvbnMpKSB7CiAgICAgICAgICAgICB0aGlzLmNvbmZpZ3Vy
YXRpb25zID0gbmV3Q29uZmlnczsKICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHt9OwotICAg
ICAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSB7fTsKLSAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRT
REtzID0ge307CiAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmln
dXJhdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24u
dG9LZXkoKV0gPSBbXTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlZFtjb25maWd1cmF0
aW9uLnRvS2V5KCldID0gdHJ1ZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKQEAgLTMz
MSwyNzggKzQ4MywyMjYgQEAgY2xhc3MgVGltZWxpbmUgewogICAgICAgICAgICAgc3RhdGU6IHRo
aXMucmVmLnN0YXRlLAogICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIHN0YXRl
KSA9PiB7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmVycm9yKQotICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50LmlubmVySFRNTCA9IEVycm9yRGlzcGxheShzdGF0ZSk7CisgICAgICAgICAg
ICAgICAgICAgIERPTS5pbmplY3QoZWxlbWVudCwgRXJyb3JEaXNwbGF5KHN0YXRlKSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgPiAwKQogICAgICAgICAgICAgICAgICAgICBET00u
aW5qZWN0KGVsZW1lbnQsIHRoaXMucmVuZGVyKHN0YXRlKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGxhY2Vob2xk
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgRE9NLmluamVjdChlbGVtZW50LCB0aGlzLnBsYWNl
aG9sZGVyKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4g
YDxkaXYgY2xhc3M9ImNvbnRlbnQiIHJlZj0iJHt0aGlzLnJlZn0iPjwvZGl2PmA7CiAgICAgfQor
CiAgICAgcmVuZGVyKGxpbWl0KSB7Ci0gICAgICAgIGxldCBub3cgPSBNYXRoLmZsb29yKERhdGUu
bm93KCkgLyAxMCk7Ci0gICAgICAgIGxldCBtaW5EaXNwbGF5ZWRVdWlkID0gbm93OwotICAgICAg
ICBsZXQgbWF4TGltaXRlZFV1aWQgPSAwOwotICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZv
ckVhY2goY29uZmlndXJhdGlvbiA9PiB7Ci0gICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmln
dXJhdGlvbi50b0tleSgpXS5mb3JFYWNoKHBhaXIgPT4gewotICAgICAgICAgICAgICAgIGlmICgh
cGFpci5yZXN1bHRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGlmIChsaW1pdCAhPT0gMSAmJiBsaW1pdCA9PT0gcGFpci5yZXN1bHRzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgbWF4TGltaXRlZFV1aWQgPSBNYXRoLm1heChwYWlyLnJl
c3VsdHNbMF0udXVpZCwgbWF4TGltaXRlZFV1aWQpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGxpbWl0ID09PSAxKQotICAgICAgICAgICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gTWF0
aC5taW4ocGFpci5yZXN1bHRzW3BhaXIucmVzdWx0cy5sZW5ndGggLSAxXS51dWlkLCBtaW5EaXNw
bGF5ZWRVdWlkKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1p
bkRpc3BsYXllZFV1aWQgPSBNYXRoLm1pbihwYWlyLnJlc3VsdHNbMF0udXVpZCwgbWluRGlzcGxh
eWVkVXVpZCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlmIChtaW5E
aXNwbGF5ZWRVdWlkID09PSBub3cpCi0gICAgICAgICAgICBtaW5EaXNwbGF5ZWRVdWlkID0gbWF4
TGltaXRlZFV1aWQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1pbkRpc3BsYXllZFV1aWQg
PSBNYXRoLm1heChtaW5EaXNwbGF5ZWRVdWlkLCBtYXhMaW1pdGVkVXVpZCk7Ci0KLSAgICAgICAg
bGV0IGNvbW1pdHMgPSBbXTsKLSAgICAgICAgbGV0IHJlcG9zaXRvcmllcyA9IG5ldyBTZXQoKTsK
LSAgICAgICAgbGV0IGN1cnJlbnRDb21taXRJbmRleCA9IENvbW1pdEJhbmsuY29tbWl0cy5sZW5n
dGggLSAxOwotICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZvckVhY2goY29uZmlndXJhdGlv
biA9PiB7Ci0gICAgICAgICAgICB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5m
b3JFYWNoKHBhaXIgPT4gewotICAgICAgICAgICAgICAgIHBhaXIucmVzdWx0cy5mb3JFYWNoKHJl
c3VsdCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudXVpZCA8IG1pbkRpc3Bs
YXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgIGxldCBjYW5kaWRhdGVDb21taXRzID0gW107CisgICAgICAgIGNvbnN0IGJyYW5jaCA9
IHF1ZXJ5VG9QYXJhbXMoZG9jdW1lbnQuVVJMLnNwbGl0KCc/JylbMV0pLmJyYW5jaDsKKyAgICAg
ICAgY29uc3Qgc2VsZiA9IHRoaXM7CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBjb21taXRzRm9y
UmVzdWx0cyh0aGlzLnJlc3VsdHMsIGxpbWl0LCB0aGlzLmFsbENvbW1pdHMpOworICAgICAgICBj
b25zdCBzY2FsZSA9IHNjYWxlRm9yQ29tbWl0cyhjb21taXRzKTsKIAotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuZGlzcGxheUFsbENvbW1pdHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50Q29tbWl0SW5kZXggPSBDb21taXRCYW5rLmNvbW1pdHMubGVuZ3RoIC0gMTsKLSAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDb21taXRJbmRleCA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRDb21taXRJ
bmRleF0udXVpZCgpIDwgcmVzdWx0LnV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5QWxsQ29tbWl0
cyB8fCBDb21taXRCYW5rLmNvbW1pdHNbY3VycmVudENvbW1pdEluZGV4XS51dWlkKCkgPT0gcmVz
dWx0LnV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5w
dXNoKENvbW1pdEJhbmsuY29tbWl0c1tjdXJyZW50Q29tbWl0SW5kZXhdKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4OworICAgICAgICBjb25zdCBjb21wdXRl
ZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTsKKyAgICAgICAgY29uc3Qg
Y29sb3JNYXAgPSB7CisgICAgICAgICAgICBzdWNjZXNzOiBjb21wdXRlZFN0eWxlLmdldFByb3Bl
cnR5VmFsdWUoJy0tZ3JlZW5MaWdodCcpLnRyaW0oKSwKKyAgICAgICAgICAgIGZhaWxlZDogY29t
cHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXJlZExpZ2h0JykudHJpbSgpLAorICAgICAg
ICAgICAgdGltZWRvdXQ6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1vcmFuZ2VM
aWdodCcpLnRyaW0oKSwKKyAgICAgICAgICAgIGNyYXNoZWQ6IGNvbXB1dGVkU3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSgnLS1wdXJwbGVMaWdodCcpLnRyaW0oKSwKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMudXBkYXRlcyA9IFtdOworICAgICAgICBjb25zdCBvcHRpb25zID0geworICAgICAgICAg
ICAgZ2V0U2NhbGVGdW5jOiAodmFsdWUpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUg
JiYgdmFsdWUudXVpZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt1dWlkOiB2YWx1ZS51
dWlkfTsKKyAgICAgICAgICAgICAgICByZXR1cm4ge307CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgY29tcGFyZUZ1bmM6IChhLCBiKSA9PiB7cmV0dXJuIGIudXVpZCAtIGEudXVpZDt9LAor
ICAgICAgICAgICAgcmVuZGVyRmFjdG9yeTogKGRyYXdEb3QpID0+IChkYXRhLCBjb250ZXh0LCB4
LCB5KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZHJhd0RvdChjb250ZXh0LCB4LCB5LCB0cnVlKTsKKworICAgICAgICAgICAgICAg
IGxldCB0YWcgPSBudWxsOworICAgICAgICAgICAgICAgIGxldCBjb2xvciA9IGNvbG9yTWFwLnN1
Y2Nlc3M7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGFnID0gZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5l
eHBlY3RlZF8nIDogJ18nfWZhaWxlZGBdOworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGhhdmUgZmFpbHVyZXMgdGhhdCBhcmUgYSByZXN1bHQgb2YgbXVsdGlwbGUgcnVucywgY29tYmlu
ZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBpZiAodGFnICYmICFkYXRhLnN0YXJ0X3RpbWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IE1hdGguY2VpbCh0YWcgLyBkYXRhLnN0
YXRzLnRlc3RzX3J1biAqIDEwMCAtIC41KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9ICc8MSc7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0YWcgPSBgJHt0YWd9ICVgCiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUNvbW1pdHMubGVuZ3RoID09PSAwIHx8IGNh
bmRpZGF0ZUNvbW1pdHNbY2FuZGlkYXRlQ29tbWl0cy5sZW5ndGggLSAxXS51dWlkKCkgIT09IHJl
c3VsdC51dWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ29tbWl0cy5wdXNo
KHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAnPycsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3V1aWQnOiAoKSA9PiB7cmV0dXJuIHJlc3VsdC51dWlkO30KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUNvbW1pdHMuZm9yRWFjaChjb21taXQg
PT4gewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC5yZXBvc2l0b3J5X2lkKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy5hZGQoY29tbWl0LnJlcG9z
aXRvcnlfaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgY29tbWl0
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0LnV1aWQo
KSA9PT0gY29tbWl0c1tpbmRleF0udXVpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlk
KCkgPiBjb21taXRzW2luZGV4XS51dWlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWl0cy5zcGxpY2UoaW5kZXgsIDAsIGNvbW1pdCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaChjb21taXQpOworICAg
ICAgICAgICAgICAgICAgICBmYWlsdXJlVHlwZU9yZGVyLmZvckVhY2godHlwZSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBl
Y3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfSR7dHlwZX1gXSA+IDApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvck1hcFt0eXBlXTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIGlmIChjdXJyZW50Q29tbWl0SW5kZXggPj0gMCAmJiBjb21taXRzLmxlbmd0aCkg
ewotICAgICAgICAgICAgbGV0IHRyYWlsaW5nUmVwb3NpdG9yaWVzID0gbmV3IFNldChyZXBvc2l0
b3JpZXMpOwotICAgICAgICAgICAgdHJhaWxpbmdSZXBvc2l0b3JpZXMuZGVsZXRlKGNvbW1pdHNb
Y29tbWl0cy5sZW5ndGggLSAxXS5yZXBvc2l0b3J5X2lkKTsKLSAgICAgICAgICAgIHdoaWxlIChj
dXJyZW50Q29tbWl0SW5kZXggPj0gMCAmJiB0cmFpbGluZ1JlcG9zaXRvcmllcy5zaXplKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gQ29tbWl0QmFuay5jb21taXRzW2N1cnJlbnRD
b21taXRJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKHRyYWlsaW5nUmVwb3NpdG9yaWVzLmhh
cyhjb21taXQucmVwb3NpdG9yeV9pZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0cy5w
dXNoKGNvbW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nUmVwb3NpdG9yaWVzLmRl
bGV0ZShjb21taXQucmVwb3NpdG9yeV9pZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3Rh
dGVJZChkYXRhLmFjdHVhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aWxsRmlsdGVyRXhw
ZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJZCA9IEV4cGVjdGF0aW9ucy5z
dHJpbmdUb1N0YXRlSWQoRXhwZWN0YXRpb25zLnVuZXhwZWN0ZWRSZXN1bHRzKGRhdGEuYWN0dWFs
LCBkYXRhLmV4cGVjdGVkKSk7CisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVUeXBlT3JkZXIu
Zm9yRWFjaCh0eXBlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFeHBlY3RhdGlv
bnMuc3RyaW5nVG9TdGF0ZUlkKGZhaWx1cmVUeXBlTWFwcGluZ1t0eXBlXSkgPj0gcmVzdWx0SWQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvck1hcFt0eXBlXTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRyYXdEb3QoY29udGV4dCwgeCwgeSwgZmFsc2UsIHRhZyA/IHRhZyA6IG51bGws
IGZhbHNlLCBjb2xvcik7CisgICAgICAgICAgICB9LAorICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybiAoZGF0YSkgPT4geworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8g
c29tZXRoaW5nIHNhbmUgaGVyZSwgYnV0IHdlIHByb2JhYmx5IG5lZWQgYW5vdGhlciBlbmRwb2lu
dAorICAgICAgICAgICAgICAgIGlmICghZGF0YS5zdGFydF90aW1lKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFsZXJ0KCdOb2RlIGlzIGEgY29tYmluYXRpb24gb2YgbXVsdGlwbGUgcnVucycpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC0tY3VycmVudENvbW1pdEluZGV4OworCisgICAgICAgICAgICAgICAgbGV0IGJ1aWxk
UGFyYW1zID0gY29uZmlndXJhdGlvbi50b1BhcmFtcygpOworICAgICAgICAgICAgICAgIGJ1aWxk
UGFyYW1zWydzdWl0ZSddID0gW3NlbGYuc3VpdGVdOworICAgICAgICAgICAgICAgIGJ1aWxkUGFy
YW1zWyd1dWlkJ10gPSBbZGF0YS51dWlkXTsKKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1sn
YWZ0ZXJfdGltZSddID0gW2RhdGEuc3RhcnRfdGltZV07CisgICAgICAgICAgICAgICAgYnVpbGRQ
YXJhbXNbJ2JlZm9yZV90aW1lJ10gPSBbZGF0YS5zdGFydF90aW1lXTsKKyAgICAgICAgICAgICAg
ICBpZiAoYnJhbmNoKQorICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtc1snYnJhbmNoJ10g
PSBicmFuY2g7CisgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oYC91cmxzL2J1aWxkPyR7cGFy
YW1zVG9RdWVyeShidWlsZFBhcmFtcyl9YCwgJ19ibGFuaycpOwogICAgICAgICAgICAgfQorICAg
ICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gZXhwb3J0ZXJGYWN0b3J5KGRhdGEpIHsKKyAgICAg
ICAgICAgIHJldHVybiAodXBkYXRlRnVuY3Rpb24pID0+IHsKKyAgICAgICAgICAgICAgICBzZWxm
LnVwZGF0ZXMucHVzaCgoc2NhbGUpID0+IHt1cGRhdGVGdW5jdGlvbihkYXRhLCBzY2FsZSk7fSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICByZXBvc2l0b3JpZXMgPSBbLi4u
cmVwb3NpdG9yaWVzXTsKLSAgICAgICAgcmVwb3NpdG9yaWVzLnNvcnQoKTsKKyAgICAgICAgbGV0
IGNoaWxkcmVuID0gW107CisgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25m
aWd1cmF0aW9uID0+IHsKKyAgICAgICAgICAgIGlmICghdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRp
b24udG9LZXkoKV0gfHwgT2JqZWN0LmtleXModGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9L
ZXkoKV0pLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJ0aW1lbGluZSI+Ci0gICAgICAgICAgICAgICAgPGRpdiAke3Jl
cG9zaXRvcmllcy5sZW5ndGggPiAxID8gYGNsYXNzPSJoZWFkZXIgd2l0aC10b3AteC1heGlzImAg
OiBgY2xhc3M9ImhlYWRlciJgfT4KLSAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmNvbmZpZ3Vy
YXRpb25zLm1hcChjb25maWd1cmF0aW9uID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChPYmplY3Qua2V5cyh0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXSkubGVuZ3Ro
ID09PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZXhwYW5kZXIgPSBSRUYuY3JlYXRlUmVmKHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbkVsZW1lbnRNb3VudDogZWxlbWVudCA9PiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGFwc2VkW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0g
PSAhc2VsZi5jb2xsYXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVyZW5kZXIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQg
PSBgPGRpdiBjbGFzcz0ic2VyaWVzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGEgcmVmPSIke2V4cGFuZGVyfSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtmdW5jdGlvbigpIHtyZXR1cm4gc2VsZi5jb2xs
YXBzZWRbY29uZmlndXJhdGlvbi50b0tleSgpXSA/ICcrJyA6ICctJ30oKX0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAke2NvbmZpZ3VyYXRpb259Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWRbY29uZmlndXJhdGlv
bi50b0tleSgpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcmllc0hl
YWRlckZvclNES0xlc3NDb25maWcgPSBjb25maWcgPT4gewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9InNlcmllcyI+JHtjb25m
aWd9PC9kaXY+YDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVldWVQ
YXJhbXMgPSBjb25maWcudG9QYXJhbXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcXVldWVQYXJhbXNbJ3N1aXRlJ10gPSBbdGhpcy5zdWl0ZV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0xpbmsgPSBgPGEgY2xhc3M9InRleHQgdGlueSIg
aHJlZj0iL3VybHMvcXVldWU/JHtwYXJhbXNUb1F1ZXJ5KHF1ZXVlUGFyYW1zKX0iIHRhcmdldD0i
X2JsYW5rIj4ke2NvbmZpZ308L2E+YDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qga2V5ID0gY29uZmlnLnRvS2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGV4cGFuZGVyID0gUkVGLmNyZWF0ZVJlZih7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbkVsZW1lbnRNb3VudDogZWxlbWVudCA9PiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5vbmNsaWNrID0gKCkgPT4gewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGFuZGVk
U0RLc1trZXldID0gIXNlbGYuZXhwYW5kZWRTREtzW2tleV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVyZW5kZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWRTREtzW2tleV0gPT09IHVu
ZGVmaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRp
diBjbGFzcz0ic2VyaWVzIj4ke2NvbmZpZ0xpbmt9PC9kaXY+YDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJzZXJpZXMgdGV4dCB0aW55Ij4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSByZWY9IiR7ZXhwYW5kZXJ9
IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICR7ZnVuY3Rpb24oKSB7cmV0dXJuIHNlbGYuZXhwYW5kZWRTREtzW2tl
eV0gPyAnLXNkaycgOiAnK3Nkayd9KCl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICR7Y29uZmlnTGlua30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2
PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCBsYXN0Q29uZmlnID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCldLmZvckVhY2gocGFpciA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyLnJlc3VsdHMubGVuZ3Ro
IDw9IDAgfHwgcGFpci5yZXN1bHRzW3BhaXIucmVzdWx0cy5sZW5ndGggLSAxXS51dWlkIDwgbWlu
RGlzcGxheWVkVXVpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAnJzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gbmV3
IENvbmZpZ3VyYXRpb24ocGFpci5jb25maWd1cmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2RrID0gY29uZmlnLnNkazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5zZGs7ICAvLyBTdHJpcCBvdXQgc2RrIGluZm9ybWF0
aW9uLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNvbmZp
Zy50b0tleSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJl
SW5kZXggPSBjb25maWcuY29tcGFyZShsYXN0Q29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGxhc3RDb25maWcgIT09IG51bGwgJiYgY29tcGFyZUluZGV4ICE9IDAg
JiYgIXRoaXMuZXhwYW5kZWRTREtzW2xhc3RDb25maWcudG9LZXkoKV0pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VyaWVzSGVhZGVyRm9yU0RLTGVzc0Nv
bmZpZyhsYXN0Q29uZmlnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY29tcGFyZUluZGV4ID09PSAwICYmIHRoaXMuZXhwYW5kZWRTREtzW2tleV0gPT09IHVuZGVm
aW5lZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRT
REtzW2tleV0gPSBmYWxzZTsgIC8vIFBvcHVsYXRlIHRoaXMgZGljdGlvbmFyeSBvbiB0aGUgZmx5
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZFNES3Nb
a2V5XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVJ
bmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
c2VyaWVzSGVhZGVyRm9yU0RLTGVzc0NvbmZpZyhjb25maWcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8ZGl2IGNsYXNzPSJzZXJpZXMiPiR7c2RrfTwv
ZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdENvbmZpZyA9IGNvbmZpZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENvbmZp
ZyAhPT0gbnVsbCAmJiAhdGhpcy5leHBhbmRlZFNES3NbbGFzdENvbmZpZy50b0tleSgpXSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlcmllc0hlYWRlckZvclNE
S0xlc3NDb25maWcobGFzdENvbmZpZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB9
KS5qb2luKCcnKX0KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJjb250ZW50Ij4KLSAgICAgICAgICAgICAgICAgICAgJHtyZW5kZXJUaW1lbGluZShj
b21taXRzLCByZXBvc2l0b3JpZXMsIHRydWUpfQotICAgICAgICAgICAgICAgICAgICAke3RoaXMu
Y29uZmlndXJhdGlvbnMubWFwKGNvbmZpZ3VyYXRpb24gPT4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCld
KS5sZW5ndGggPT09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEFycmF5SW5kZXggPSBuZXcgQXJy
YXkodGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9LZXkoKV0ubGVuZ3RoKS5maWxsKDEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvdHMgPSB7fTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRzW2NvbmZpZ3VyYXRpb24udG9L
ZXkoKV0ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YWlyRm9ySW5kZXggPSB0aGlzLnJlc3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXVtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3Ro
IDw9IDAgfHwgcGFpckZvckluZGV4LnJlc3VsdHNbcGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3Ro
IC0gMV0udXVpZCA8IG1pbkRpc3BsYXllZFV1aWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbbmV3IENv
bmZpZ3VyYXRpb24ocGFpckZvckluZGV4LmNvbmZpZ3VyYXRpb24pLnRvS2V5KCldID0gW107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21taXRz
LnNsaWNlKDAsIGNvbW1pdHMubGVuZ3RoIC0gTWF0aC5tYXgocmVwb3NpdG9yaWVzLmxlbmd0aCAt
IDEsIDApKS5mb3JFYWNoKGNvbW1pdCA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50QXJyYXlJbmRleC5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWlyRm9ySW5kZXggPSB0aGlzLnJl
c3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhaXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCA8PSAwIHx8IHBhaXJGb3JJ
bmRleC5yZXN1bHRzW3BhaXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIDFdLnV1aWQgPCBtaW5E
aXNwbGF5ZWRVdWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gbmV3
IENvbmZpZ3VyYXRpb24ocGFpckZvckluZGV4LmNvbmZpZ3VyYXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uS2V5ID0gY29uZmlnLnRvS2V5
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRJbmRleCA9IHBh
aXJGb3JJbmRleC5yZXN1bHRzLmxlbmd0aCAtIGN1cnJlbnRBcnJheUluZGV4W2ldOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0SW5kZXggPCAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzW2NvbmZpZ3VyYXRpb25LZXldLnB1c2go
bmV3IERvdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbW1pdC51dWlkKCkgPT09IHBhaXJGb3JJbmRleC5yZXN1bHRz
W3Jlc3VsdEluZGV4XS51dWlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgYnVpbGRQYXJhbXMgPSBjb25maWcudG9QYXJhbXMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zWydzdWl0ZSddID0gW3RoaXMuc3VpdGVdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXNbJ3V1aWQnXSA9
IFtjb21taXQudXVpZCgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGJ1aWxkTGluayA9IGAvdXJscy9idWlsZD8ke3BhcmFtc1RvUXVlcnkoYnVpbGRQYXJhbXMp
fWA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWlyRm9ySW5k
ZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG90c1tjb25maWd1cmF0aW9uS2V5XS5wdXNoKG5ldyBEb3QoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJbmRleC5yZXN1
bHRzW3Jlc3VsdEluZGV4XS5zdGF0cy50ZXN0c19ydW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5z
dGF0c1tgdGVzdHMke3dpbGxGaWx0ZXJFeHBlY3RlZCA/ICdfdW5leHBlY3RlZF8nIDogJ18nfWZh
aWxlZGBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWly
Rm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhw
ZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6ICdfJ310aW1lZG91dGBdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJ
bmRleF0uc3RhdHNbYHRlc3RzJHt3aWxsRmlsdGVyRXhwZWN0ZWQgPyAnX3VuZXhwZWN0ZWRfJyA6
ICdfJ31jcmFzaGVkYF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWlsZExpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0SWQgPSBFeHBlY3RhdGlvbnMuc3Ry
aW5nVG9TdGF0ZUlkKHBhaXJGb3JJbmRleC5yZXN1bHRzW3Jlc3VsdEluZGV4XS5hY3R1YWwpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWxsRmlsdGVyRXhw
ZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dElkID0gRXhwZWN0YXRpb25zLnN0cmluZ1RvU3RhdGVJZChFeHBlY3RhdGlvbnMudW5leHBlY3Rl
ZFJlc3VsdHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYWlyRm9ySW5kZXgucmVzdWx0c1tyZXN1bHRJbmRleF0uYWN0dWFsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpckZvckluZGV4LnJlc3VsdHNb
cmVzdWx0SW5kZXhdLmV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdHNbY29uZmlndXJhdGlvbktleV0ucHVzaChuZXcgRG90KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRJZCA8PSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlk
KCdFUlJPUicpID8gMSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdElkIDw9IEV4cGVjdGF0aW9ucy5zdHJpbmdUb1N0YXRlSWQoJ1RJTUVPVVQn
KSA/IDEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRJZCA8PSBFeHBlY3RhdGlvbnMuc3RyaW5nVG9TdGF0ZUlkKCdDUkFTSCcpID8gMSA6IDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZExpbmssCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1tjb25maWd1cmF0
aW9uS2V5XS5wdXNoKG5ldyBEb3QoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKHJlc3VsdEluZGV4ID49IDAgJiYgY29tbWl0LnV1aWQoKSA8PSBwYWlyRm9ySW5k
ZXgucmVzdWx0c1tyZXN1bHRJbmRleF0udXVpZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKytjdXJyZW50QXJyYXlJbmRleFtpXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdEluZGV4ID0gcGFpckZvckluZGV4LnJlc3VsdHMubGVuZ3Ro
IC0gY3VycmVudEFycmF5SW5kZXhbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgdG8g
ZGlzcGxheSB3aXRoIFNES3Mgc3RyaXBwZWQKKyAgICAgICAgICAgIGxldCBtYXBwZWRDaGlsZHJl
bkNvbmZpZ3MgPSB7fTsKKyAgICAgICAgICAgIGxldCBjaGlsZHJlbkNvbmZpZ3NCeVNESyA9IHt9
CisgICAgICAgICAgICBsZXQgcmVzdWx0c0J5S2V5ID0ge307CisgICAgICAgICAgICB0aGlzLnJl
c3VsdHNbY29uZmlndXJhdGlvbi50b0tleSgpXS5mb3JFYWNoKHBhaXIgPT4geworICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmlwcGVkQ29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25m
aWd1cmF0aW9uKTsKKyAgICAgICAgICAgICAgICByZXN1bHRzQnlLZXlbc3RyaXBwZWRDb25maWcu
dG9LZXkoKV0gPSBjb21iaW5lUmVzdWx0cyhbXSwgWy4uLnBhaXIucmVzdWx0c10uc29ydChmdW5j
dGlvbihhLCBiKSB7cmV0dXJuIGIudXVpZCAtIGEudXVpZDt9KSk7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIHN0cmlwcGVkQ29uZmlnLnNkazsKKyAgICAgICAgICAgICAgICBtYXBwZWRDaGlsZHJl
bkNvbmZpZ3Nbc3RyaXBwZWRDb25maWcudG9LZXkoKV0gPSBzdHJpcHBlZENvbmZpZzsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNoaWxkcmVuQ29uZmlnc0J5U0RLW3N0cmlwcGVkQ29uZmlnLnRvS2V5
KCldKQorICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3NCeVNES1tzdHJpcHBlZENv
bmZpZy50b0tleSgpXSA9IFtdOworICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RL
W3N0cmlwcGVkQ29uZmlnLnRvS2V5KCldLnB1c2gobmV3IENvbmZpZ3VyYXRpb24ocGFpci5jb25m
aWd1cmF0aW9uKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGxldCBjaGlsZHJlbkNv
bmZpZ3MgPSBbXTsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKG1hcHBlZENoaWxkcmVuQ29uZmln
cykuZm9yRWFjaChrZXkgPT4geworICAgICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlncy5wdXNo
KG1hcHBlZENoaWxkcmVuQ29uZmlnc1trZXldKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgY2hpbGRyZW5Db25maWdzLnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmNvbXBhcmUo
Yik7fSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZFtjb25m
aWd1cmF0aW9uLnRvS2V5KCldKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBg
PGRpdiBjbGFzcz0ic2VyaWVzIj4ke0RvdC5tZXJnZShkb3RzKS5tYXAoZG90ID0+IHtyZXR1cm4g
ZG90LnRvU3RyaW5nKCk7fSkuam9pbignJyl9PC9kaXY+YDsKKyAgICAgICAgICAgIC8vIENyZWF0
ZSB0aGUgY29sbGFwc2VkIHRpbWVsaW5lcywgY29iaW5lIHJlc3VsdHMKKyAgICAgICAgICAgIGxl
dCBhbGxSZXN1bHRzID0gW107CisgICAgICAgICAgICBsZXQgY29sbGFwc2VkVGltZWxpbmVzID0g
W107CisgICAgICAgICAgICBjaGlsZHJlbkNvbmZpZ3MuZm9yRWFjaChjb25maWcgPT4geworICAg
ICAgICAgICAgICAgIGNoaWxkcmVuQ29uZmlnc0J5U0RLW2NvbmZpZy50b0tleSgpXS5zb3J0KGZ1
bmN0aW9uKGEsIGIpIHtyZXR1cm4gYS5jb21wYXJlU0RLcyhiKTt9KTsKKworICAgICAgICAgICAg
ICAgIGxldCByZXN1bHRzRm9yQ29uZmlnID0gW107CisgICAgICAgICAgICAgICAgY2hpbGRyZW5D
b25maWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmZvckVhY2goc2RrQ29uZmlnID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0c0ZvckNvbmZpZyA9IGNvbWJpbmVSZXN1bHRzKHJlc3VsdHNG
b3JDb25maWcsIHJlc3VsdHNCeUtleVtzZGtDb25maWcudG9LZXkoKV0pOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIGFsbFJlc3VsdHMgPSBjb21iaW5lUmVzdWx0cyhhbGxS
ZXN1bHRzLCByZXN1bHRzRm9yQ29uZmlnKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IHJlc3VsdCA9ICcnOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnREb3RzID0g
e307Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdENvbmZpZyA9IG51bGw7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c1tjb25maWd1cmF0aW9uLnRvS2V5KCld
LmZvckVhY2gocGFpciA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZp
ZyA9IG5ldyBDb25maWd1cmF0aW9uKHBhaXIuY29uZmlndXJhdGlvbik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29uZmlnLnRvS2V5KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkb3RzW2tleV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29uZmln
LnNkazsgIC8vIFN0cmlwIG91dCBzZGsgaW5mb3JtYXRpb24KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNvbXBhcmVJbmRleCA9IGNvbmZpZy5jb21wYXJlKGxhc3RDb25maWcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU0RLRXhwYW5kZWQgPSB0aGlz
LmV4cGFuZGVkU0RLc1tjb25maWcudG9LZXkoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbXBhcmVJbmRleCB8fCBpc1NES0V4cGFuZGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgPGRpdiBjbGFzcz0ic2VyaWVzIj4ke0RvdC5tZXJn
ZShjdXJyZW50RG90cykubWFwKGRvdCA9PiB7cmV0dXJuIGRvdC50b1N0cmluZygpO30pLmpvaW4o
JycpfTwvZGl2PmA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREb3Rz
ID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb21wYXJlSW5kZXggJiYgaXNTREtFeHBhbmRlZCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc8ZGl2IGNsYXNzPSJzZXJpZXMiPjwvZGl2
Pic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERvdHNba2V5XSA9IGRvdHNb
a2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q29uZmlnID0gY29uZmlnOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudERvdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8ZGl2
IGNsYXNzPSJzZXJpZXMiPiR7RG90Lm1lcmdlKGN1cnJlbnREb3RzKS5tYXAoZG90ID0+IHtyZXR1
cm4gZG90LnRvU3RyaW5nKCk7fSkuam9pbignJyl9PC9kaXY+YDsKKyAgICAgICAgICAgICAgICBs
ZXQgcXVldWVQYXJhbXMgPSBjb25maWcudG9QYXJhbXMoKTsKKyAgICAgICAgICAgICAgICBxdWV1
ZVBhcmFtc1snc3VpdGUnXSA9IFt0aGlzLnN1aXRlXTsKKyAgICAgICAgICAgICAgICBpZiAoYnJh
bmNoKQorICAgICAgICAgICAgICAgICAgICBxdWV1ZVBhcmFtc1snYnJhbmNoJ107CisgICAgICAg
ICAgICAgICAgbGV0IG15VGltZWxpbmUgPSBUaW1lbGluZS5TZXJpZXNXaXRoSGVhZGVyQ29tcG9u
ZW50KAorICAgICAgICAgICAgICAgICAgICBgJHtjaGlsZHJlbkNvbmZpZ3NCeVNES1tjb25maWcu
dG9LZXkoKV0ubGVuZ3RoID4gMSA/ICcgfCAnIDogJyd9PGEgaHJlZj0iL3VybHMvcXVldWU/JHtw
YXJhbXNUb1F1ZXJ5KHF1ZXVlUGFyYW1zKX0iIHRhcmdldD0iX2JsYW5rIj4ke2NvbmZpZ308L2E+
YCwKKyAgICAgICAgICAgICAgICAgICAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50KHJl
c3VsdHNGb3JDb25maWcsIHNjYWxlLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRTY2Fs
ZUZ1bmM6IG9wdGlvbnMuZ2V0U2NhbGVGdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgY29t
cGFyZUZ1bmM6IG9wdGlvbnMuY29tcGFyZUZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJGYWN0b3J5OiBvcHRpb25zLnJlbmRlckZhY3RvcnksCisgICAgICAgICAgICAgICAgICAg
ICAgICBleHBvcnRlcjogb3B0aW9ucy5leHBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9uRG90Q2xpY2s6IG9uRG90Q2xpY2tGYWN0b3J5KGNvbmZpZyksCisgICAgICAgICAgICAgICAg
ICAgICAgICBleHBvcnRlcjogZXhwb3J0ZXJGYWN0b3J5KHJlc3VsdHNGb3JDb25maWcpLAorICAg
ICAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5Db25m
aWdzQnlTREtbY29uZmlnLnRvS2V5KCldLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IHRpbWVsaW5lc0J5U0RLID0gW107CisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVu
Q29uZmlnc0J5U0RLW2NvbmZpZy50b0tleSgpXS5mb3JFYWNoKHNka0NvbmZpZyA9PiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXNCeVNESy5wdXNoKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRpbWVsaW5lLlNlcmllc1dpdGhIZWFkZXJDb21wb25lbnQoYCR7c2RrQ29u
ZmlnLnNka31gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lbGluZS5DYW52
YXNTZXJpZXNDb21wb25lbnQocmVzdWx0c0J5S2V5W3Nka0NvbmZpZy50b0tleSgpXSwgc2NhbGUs
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNjYWxlRnVuYzogb3B0
aW9ucy5nZXRTY2FsZUZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21wYXJlRnVuYzogb3B0aW9ucy5jb21wYXJlRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbmRlckZhY3Rvcnk6IG9wdGlvbnMucmVuZGVyRmFjdG9yeSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBvcHRpb25zLmV4cG9ydGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Eb3RDbGljazogb25Eb3RD
bGlja0ZhY3Rvcnkoc2RrQ29uZmlnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cG9ydGVyOiBleHBvcnRlckZhY3RvcnkocmVzdWx0c0J5S2V5W3Nka0NvbmZpZy50b0tl
eSgpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBteVRpbWVsaW5lID0gVGltZWxpbmUu
RXhwYW5kYWJsZVNlcmllc1dpdGhIZWFkZXJFeHBhbmRlckNvbXBvbmVudChteVRpbWVsaW5lLCAu
Li50aW1lbGluZXNCeVNESyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bGxhcHNlZFRpbWVsaW5lcy5wdXNoKG15VGltZWxpbmUpOworICAgICAgICAgICAgfSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAg
IH0pLmpvaW4oJycpfQotICAgICAgICAgICAgICAgICAgICAke3JlbmRlclRpbWVsaW5lKGNvbW1p
dHMsIHJlcG9zaXRvcmllcyl9Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8
L2Rpdj5gOworICAgICAgICAgICAgaWYgKGNvbGxhcHNlZFRpbWVsaW5lcy5sZW5ndGggPT09IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGNvbGxhcHNlZFRpbWVs
aW5lcy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbGxhcHNlZFRpbWVs
aW5lc1swXS5oZWFkZXIuaW5jbHVkZXMoJ2NsYXNzPSJzZXJpZXMiJykpCisgICAgICAgICAgICAg
ICAgICAgIGNvbGxhcHNlZFRpbWVsaW5lc1swXS5oZWFkZXIgPSBUaW1lbGluZS5IZWFkZXJDb21w
b25lbnQoY29sbGFwc2VkVGltZWxpbmVzWzBdLmhlYWRlcik7CisgICAgICAgICAgICAgICAgY2hp
bGRyZW4ucHVzaChjb2xsYXBzZWRUaW1lbGluZXNbMF0pOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCgKKyAgICAgICAg
ICAgICAgICBUaW1lbGluZS5FeHBhbmRhYmxlU2VyaWVzV2l0aEhlYWRlckV4cGFuZGVyQ29tcG9u
ZW50KAorICAgICAgICAgICAgICAgIFRpbWVsaW5lLlNlcmllc1dpdGhIZWFkZXJDb21wb25lbnQo
YCAke2NvbmZpZ3VyYXRpb259YCwKKyAgICAgICAgICAgICAgICAgICAgVGltZWxpbmUuQ2FudmFz
U2VyaWVzQ29tcG9uZW50KGFsbFJlc3VsdHMsIHNjYWxlLCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnZXRTY2FsZUZ1bmM6IG9wdGlvbnMuZ2V0U2NhbGVGdW5jLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcGFyZUZ1bmM6IG9wdGlvbnMuY29tcGFyZUZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICByZW5kZXJGYWN0b3J5OiBvcHRpb25zLnJlbmRlckZhY3RvcnksCisgICAgICAg
ICAgICAgICAgICAgICAgICBvbkRvdENsaWNrOiBvbkRvdENsaWNrRmFjdG9yeShjb25maWd1cmF0
aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVyOiBleHBvcnRlckZhY3Rvcnko
YWxsUmVzdWx0cyksCisgICAgICAgICAgICAgICAgICAgIH0pKSwKKyAgICAgICAgICAgICAgICAu
Li5jb2xsYXBzZWRUaW1lbGluZXMKKyAgICAgICAgICAgICkpOworICAgICAgICB9KTsKKworICAg
ICAgICBsZXQgdG9wID0gdHJ1ZTsKKyAgICAgICAgc2VsZi54YXhpc1VwZGF0ZXMgPSBbXTsKKyAg
ICAgICAgdGhpcy5yZXBvc2l0b3JpZXMgPSByZXBvc2l0b3JpZXNGb3JDb21taXRzKGNvbW1pdHMp
OworICAgICAgICB0aGlzLnJlcG9zaXRvcmllcy5mb3JFYWNoKHJlcG9zaXRvcnkgPT4geworICAg
ICAgICAgICAgY29uc3QgeEF4aXNDb21wb25lbnQgPSB4QXhpc0Zyb21TY2FsZShzY2FsZSwgcmVw
b3NpdG9yeSwgc2VsZi54YXhpc1VwZGF0ZXMsIHRvcCk7CisgICAgICAgICAgICBpZiAodG9wKQor
ICAgICAgICAgICAgICAgIGNoaWxkcmVuLnVuc2hpZnQoeEF4aXNDb21wb25lbnQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goeEF4aXNDb21wb25lbnQp
OworICAgICAgICAgICAgdG9wID0gZmFsc2U7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0
IGNvbXBvc2VyID0gRlAuY29tcG9zZXIoKHVwZGF0ZVRpbWVsaW5lKSA9PiB7CisgICAgICAgICAg
ICBzZWxmLnRpbWVsaW5lVXBkYXRlID0gKHhBeGlzZXMpID0+IHsKKyAgICAgICAgICAgICAgICBj
aGlsZHJlbi5zcGxpY2UoMCwgMSk7CisgICAgICAgICAgICAgICAgaWYgKHNlbGYucmVwb3NpdG9y
aWVzLmxlbmd0aCA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShjaGls
ZHJlbi5sZW5ndGggLSBzZWxmLnJlcG9zaXRvcmllcy5sZW5ndGgsIHNlbGYucmVwb3NpdG9yaWVz
Lmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBsZXQgdG9wID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB4QXhpc2VzLmZvckVhY2goY29tcG9uZW50ID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnVuc2hpZnQoY29tcG9u
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRyZW4ucHVzaChjb21wb25lbnQpOworICAgICAgICAgICAgICAgICAgICB0b3AgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB1cGRhdGVUaW1lbGluZShj
aGlsZHJlbik7CisgICAgICAgICAgICB9OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIFRp
bWVsaW5lLkNhbnZhc0NvbnRhaW5lcihjb21wb3NlciwgLi4uY2hpbGRyZW4pOwogICAgIH0KIH0K
IAorCiBmdW5jdGlvbiBMZWdlbmRMYWJlbChldmVudFN0cmVhbSwgZmlsdGVyRXhwZWN0ZWRUZXh0
LCBmaWx0ZXJVbmV4cGVjdGVkVGV4dCkgewogICAgIGxldCByZWYgPSBSRUYuY3JlYXRlUmVmKHsK
ICAgICAgICAgc3RhdGU6IHdpbGxGaWx0ZXJFeHBlY3RlZCwKQEAgLTY4MCw0ICs3ODAsNCBAQCBm
dW5jdGlvbiBMZWdlbmQoY2FsbGJhY2s9bnVsbCwgcGx1cmFsPWZhCiAgICAgcmV0dXJuIGA8ZGl2
IGNsYXNzPSJjb250ZW50Ij4ke3Jlc3VsdH08L2Rpdj48YnI+YDsKIH0KIAotZXhwb3J0IHtMZWdl
bmQsIFRpbWVsaW5lLCBFeHBlY3RhdGlvbnN9OworZXhwb3J0IHtMZWdlbmQsIFRpbWVsaW5lRnJv
bUVuZHBvaW50LCBFeHBlY3RhdGlvbnN9OwpJbmRleDogVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0
c2RicHkvdmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy90ZW1wbGF0ZXMvc2VhcmNoLmh0bWwJKHJldmlzaW9u
IDI0ODQyMykKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVz
L3NlYXJjaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGltcG9ydCB7Q29u
ZmlndXJhdGlvbn0gZnJvbSAnL2Fzc2V0cy9qcy8KIGltcG9ydCB7RHJhd2VyLCBCcmFuY2hTZWxl
Y3RvciwgQ29uZmlndXJhdGlvblNlbGVjdG9ycywgTGltaXRTbGlkZXJ9IGZyb20gJy9hc3NldHMv
anMvZHJhd2VyLmpzJzsKIGltcG9ydCB7RE9NLCBSRUZ9IGZyb20gJy9saWJyYXJ5L2pzL1JlZi5q
cyc7CiBpbXBvcnQge1NlYXJjaEJhcn0gZnJvbSAnL2Fzc2V0cy9qcy9zZWFyY2guanMnOwotaW1w
b3J0IHtMZWdlbmQsIFRpbWVsaW5lfSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKK2lt
cG9ydCB7TGVnZW5kLCBUaW1lbGluZUZyb21FbmRwb2ludH0gZnJvbSAnL2Fzc2V0cy9qcy90aW1l
bGluZS5qcyc7CiAKIGNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CiBjb25zdCBTVUlURVMgPSBK
U09OLnBhcnNlKCd7eyBzdWl0ZXN8c2FmZSB9fScpOyAgICAKQEAgLTU1LDcgKzU1LDcgQEAgY2xh
c3MgU2VhcmNoVmlldyB7CiAgICAgICAgICAgICAgICAgc3RhdGUuY2hpbGRyZW4ucHVzaCh7CiAg
ICAgICAgICAgICAgICAgICAgIHN1aXRlOiB0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV0sCiAg
ICAgICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuY3VycmVudFBhcmFtcy50ZXN0W2ldLAotICAg
ICAgICAgICAgICAgICAgICB0aW1lbGluZTogbmV3IFRpbWVsaW5lKGBhcGkvcmVzdWx0cy8ke3Ro
aXMuY3VycmVudFBhcmFtcy5zdWl0ZVtpXX0vJHt0aGlzLmN1cnJlbnRQYXJhbXMudGVzdFtpXX1g
LCB0aGlzLmN1cnJlbnRQYXJhbXMuc3VpdGVbaV0pLAorICAgICAgICAgICAgICAgICAgICB0aW1l
bGluZTogbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50KGBhcGkvcmVzdWx0cy8ke3RoaXMuY3VycmVu
dFBhcmFtcy5zdWl0ZVtpXX0vJHt0aGlzLmN1cnJlbnRQYXJhbXMudGVzdFtpXX1gLCB0aGlzLmN1
cnJlbnRQYXJhbXMuc3VpdGVbaV0pLAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xMjksNyArMTI5LDcgQEAgY2xhc3MgU2VhcmNoVmlldyB7CiAgICAg
ICAgICAgICAgICAgaWYgKGRpZmYuY2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgICAgIERPTS5p
bmplY3QoZWxlbWVudCwgTGVnZW5kKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYucmVmLnN0YXRlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGQudGltZWxpbmUucmVyZW5kZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZC50aW1lbGluZS51cGRhdGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSkgKyBkaWZmLmNoaWxkcmVu
Lm1hcChyZW5kZXJDaGlsZCkuam9pbignJykpOwogICAgICAgICAgICAgICAgIGlmIChkaWZmLnBy
ZXBlbmRpbmcpIHsKQEAgLTE2MCw3ICsxNjAsOCBAQCBjbGFzcyBTZWFyY2hWaWV3IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZEZpbmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5yZWYuc3RhdGUuY2hpbGRyZW4uc3BsaWNlKHNlYXJjaCwgMSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLnN0YXRlLmNo
aWxkcmVuW3NlYXJjaF0udGltZWxpbmUudGVhcmRvd24oKTsKICAgICAgICAgICAgICAgICAgICAg
bmVlZFJlUmVuZGVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKCFkaWRGaW5kKSB7CkBAIC0xNjksNyArMTcwLDcgQEAgY2xhc3MgU2VhcmNoVmlldyB7CiAg
ICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgICAgICAg
ICAgICAgc3VpdGU6IHBhcmFtcy5zdWl0ZVtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3Q6IHBhcmFtcy50ZXN0W2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmU6IG5l
dyBUaW1lbGluZShgYXBpL3Jlc3VsdHMvJHtwYXJhbXMuc3VpdGVbaV19LyR7cGFyYW1zLnRlc3Rb
aV19YCksCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZTogbmV3IFRpbWVsaW5lRnJv
bUVuZHBvaW50KGBhcGkvcmVzdWx0cy8ke3BhcmFtcy5zdWl0ZVtpXX0vJHtwYXJhbXMudGVzdFtp
XX1gKSwKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtMjM5LDcgKzI0MCw3IEBAIERPTS5pbmplY3QoCiAgICAgICAgICAgICBsZXQg
Y2hpbGQgPSB7CiAgICAgICAgICAgICAgICAgc3VpdGU6IGFyZ3VtZW50c1tpXS5zdWl0ZSwKICAg
ICAgICAgICAgICAgICB0ZXN0OiBhcmd1bWVudHNbaV0udGVzdCwKLSAgICAgICAgICAgICAgICB0
aW1lbGluZTogbmV3IFRpbWVsaW5lKGBhcGkvcmVzdWx0cy8ke2FyZ3VtZW50c1tpXS5zdWl0ZX0v
JHthcmd1bWVudHNbaV0udGVzdH1gKSwKKyAgICAgICAgICAgICAgICB0aW1lbGluZTogbmV3IFRp
bWVsaW5lRnJvbUVuZHBvaW50KGBhcGkvcmVzdWx0cy8ke2FyZ3VtZW50c1tpXS5zdWl0ZX0vJHth
cmd1bWVudHNbaV0udGVzdH1gKSwKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdmlldy5y
ZWYuc2V0U3RhdGUoe3ByZXBlbmRpbmc6IFtjaGlsZF19KTsKSW5kZXg6IFRvb2xzL3Jlc3VsdHNk
YnB5L3Jlc3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3RlbXBsYXRlcy9zdWl0
ZV9yZXN1bHRzLmh0bWwJKHJldmlzaW9uIDI0ODQyMykKKysrIFRvb2xzL3Jlc3VsdHNkYnB5L3Jl
c3VsdHNkYnB5L3ZpZXcvdGVtcGxhdGVzL3N1aXRlX3Jlc3VsdHMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQCBpbXBvcnQge2RlZXBDb21wYXJlLCBFcnJvckRpc3BsYXksIHF1
ZXJ5CiBpbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy9hc3NldHMvanMvY29uZmlndXJhdGlv
bi5qcyc7CiBpbXBvcnQge0RyYXdlciwgQnJhbmNoU2VsZWN0b3IsIENvbmZpZ3VyYXRpb25TZWxl
Y3RvcnMsIExpbWl0U2xpZGVyfSBmcm9tICcvYXNzZXRzL2pzL2RyYXdlci5qcyc7CiBpbXBvcnQg
e0RPTSwgUkVGfSBmcm9tICcvbGlicmFyeS9qcy9SZWYuanMnOwotaW1wb3J0IHtMZWdlbmQsIFRp
bWVsaW5lfSBmcm9tICcvYXNzZXRzL2pzL3RpbWVsaW5lLmpzJzsKK2ltcG9ydCB7TGVnZW5kLCBU
aW1lbGluZUZyb21FbmRwb2ludH0gZnJvbSAnL2Fzc2V0cy9qcy90aW1lbGluZS5qcyc7CiAKIGNv
bnN0IERFRkFVTFRfTElNSVQgPSAxMDA7CiBjb25zdCBTVUlURVMgPSBKU09OLnBhcnNlKCd7eyBz
dWl0ZXN8c2FmZSB9fScpOyAgICAKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgTWFpblZpZXcgewog
ICAgICAgICB0aGlzLmNoaWxkcmVuID0ge307CiAKICAgICAgICAgU1VJVEVTLmZvckVhY2goKHN1
aXRlKSA9PiB7Ci0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW3N1aXRlXSA9IG5ldyBUaW1lbGlu
ZSgnYXBpL3Jlc3VsdHMvJyArIHN1aXRlLCBzdWl0ZSk7CisgICAgICAgICAgICB0aGlzLmNoaWxk
cmVuW3N1aXRlXSA9IG5ldyBUaW1lbGluZUZyb21FbmRwb2ludCgnYXBpL3Jlc3VsdHMvJyArIHN1
aXRlLCBzdWl0ZSk7CiAgICAgICAgIH0pOwogICAgIH0KICAgICB1bnBhY2tTdWl0ZXMoc3VpdGVz
SnNvbikgewpAQCAtODEsOSArODEsMTAgQEAgY2xhc3MgTWFpblZpZXcgewogICAgICAgICB9KTsK
IAogICAgICAgICBsZXQgc29ydGVkU3VpdGVzID0gWy4uLnN1aXRlc10uc29ydCgpOworICAgICAg
ICBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKGtleSA9PiB7dGhpcy5jaGlsZHJl
bltrZXldLnRlYXJkb3duKCk7fSk7CiAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB7fTsKICAgICAg
ICAgc29ydGVkU3VpdGVzLmZvckVhY2goKHN1aXRlKSA9PiB7Ci0gICAgICAgICAgICB0aGlzLmNo
aWxkcmVuW3N1aXRlXSA9IG5ldyBUaW1lbGluZSgnYXBpL3Jlc3VsdHMvJyArIHN1aXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuY2hpbGRyZW5bc3VpdGVdID0gbmV3IFRpbWVsaW5lRnJvbUVuZHBvaW50
KCdhcGkvcmVzdWx0cy8nICsgc3VpdGUpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHNv
cnRlZFN1aXRlczsKICAgICB9CkBAIC0xNDMsNyArMTQ0LDcgQEAgY2xhc3MgTWFpblZpZXcgewog
ICAgICAgICBsZXQgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwogICAgICAgICByZXR1cm4gTGVn
ZW5kKCgpID0+IHsKICAgICAgICAgICAgIGZvciAobGV0IHN1aXRlIGluIGNoaWxkcmVuKSB7Ci0g
ICAgICAgICAgICAgICAgY2hpbGRyZW5bc3VpdGVdLnJlcmVuZGVyKCk7CisgICAgICAgICAgICAg
ICAgY2hpbGRyZW5bc3VpdGVdLnVwZGF0ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9LCB0
cnVlKSArIHN1aXRlcy5tYXAoc3VpdGUgPT4gewogICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNs
YXNzPSJzZWN0aW9uIj4K
</data>

          </attachment>
      

    </bug>

</bugzilla>