<?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>128362</bug_id>
          
          <creation_ts>2014-02-06 22:52:53 -0800</creation_ts>
          <short_desc>Upstream perf.webkit.org</short_desc>
          <delta_ts>2014-02-07 19:07:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Website</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>lforschler</cc>
    
    <cc>matthew_hanson</cc>
    
    <cc>pdr</cc>
    
    <cc>rmondello</cc>
    
    <cc>slewis</cc>
    
    <cc>wsiegrist</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>977733</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-06 22:52:53 -0800</bug_when>
    <thetext>It has been a long overdue to upstream perf.webkit.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977734</commentid>
    <comment_count>1</comment_count>
      <attachid>223425</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-06 22:53:54 -0800</bug_when>
    <thetext>Created attachment 223425
Adds Websites/perf.webkit.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978254</commentid>
    <comment_count>2</comment_count>
      <attachid>223425</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-07 19:04:21 -0800</bug_when>
    <thetext>Comment on attachment 223425
Adds Websites/perf.webkit.org

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978255</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-02-07 19:07:59 -0800</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/163688</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223425</attachid>
            <date>2014-02-06 22:53:54 -0800</date>
            <delta_ts>2014-02-07 19:04:20 -0800</delta_ts>
            <desc>Adds Websites/perf.webkit.org</desc>
            <filename>fix128362</filename>
            <type>text/plain</type>
            <size>895122</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MDU4IEBACisyMDE0LTAxLTMxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIE1lcmdlIGRhdGFiYXNlLWNvbW1vbi5qcyBhbmQgdXRpbGl0eS5qcyBpbnRvIHJ1bi10
ZXN0cy5qcy4KKworICAgICAgICBSZXZpZXdlZCBieSBNYXR0aGV3IEhhbnNvbi4KKworICAgICAg
ICBOb3cgdGhhdCBydW4tdGVzdHMgaXMgdGhlIG9ubHkgbm9kZS5qcyBzY3JpcHQsIG1lcmdlZCBk
YXRhYmFzZS1jb21tb24uanMgYW5kIHV0aWxpdHkuanMgaW50byBpdC4KKyAgICAgICAgQWxzbyBt
b3ZlZCBpbml0LWRhdGFiYXNlLnNxbCBvdXQgb2YgdGhlIGRhdGFiYXNlIGRpcmVjdG9yeSBhbmQg
cmVtb3ZlZCB0aGUgZGlyZWN0b3J5IGVudGlyZWx5LgorCisgICAgICAgICogZGF0YWJhc2U6IFJl
bW92ZWQuCisgICAgICAgICogZGF0YWJhc2UvZGF0YWJhc2UtY29tbW9uLmpzOiBSZW1vdmVkLgor
ICAgICAgICAqIGRhdGFiYXNlL3V0aWxpdHkuanM6IFJlbW92ZWQuCisgICAgICAgICogaW5pdC1k
YXRhYmFzZS5zcWw6IE1vdmVkIGZyb20gZGF0YWJhc2UvaW5pdC1kYXRhYmFzZS5zcWwuCisgICAg
ICAgICogcnVuLXRlc3RzLmpzOgorICAgICAgICAoY29ubmVjdCk6IE1vdmVkIGZyb20gZGF0YWJh
c2UtY29tbW9uLmpzLgorICAgICAgICAocGF0aFRvRGF0YWJzZVNRTCk6IEV4dHJhY3RlZCBmcm9t
IHBhdGhUb0xvY2FsU2NyaXB0LgorICAgICAgICAocGF0aFRvVGVzdHMpOiBNb3ZlZCBmcm9tIGRh
dGFiYXNlLWNvbW1vbi5qcy4KKyAgICAgICAgKGNvbmZpZyk6IERpdHRvLgorICAgICAgICAoVGFz
a1F1ZXVlKTogRGl0dG8uCisgICAgICAgIChTZXJpYWxpemVkVGFza1F1ZXVlKTogRGl0dG8uCisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKGluaXRpYWxpemVEYXRhYmFzZSk6CisgICAgICAgIChU
ZXN0RW52aXJvbm1lbnQuaXQpOgorICAgICAgICAoVGVzdEVudmlyb25tZW50LnF1ZXJ5QW5kRmV0
Y2hBbGwpOgorICAgICAgICAoc2VuZEh0dHBSZXF1ZXN0KToKKworMjAxNC0wMS0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGRlcGVuZGVu
Y3kgb24gbm9kZS5qcyBmcm9tIHRoZSBwcm9kdWN0aW9uIGNvZGUuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgV29yayB0b3dhcmRzIDxyZGFyOi8vcHJv
YmxlbS8xNTk1NTA1Mz4gVXBzdHJlYW0gU2FmYXJpUGVyZk1vbml0b3IuCisKKyAgICAgICAgUmVt
b3ZlZCBub2RlLmpzIGRlcGVuZGVuY3kgZnJvbSBUZXN0UnVuc0dlbmVyYXRvci4gSXQgd2FzIHJl
YWxseSBhIGRlc2lnbiBtaXN0YWtlIHRvIGludm9rZSBub2RlLmpzIGZyb20gcGhwLgorICAgICAg
ICBJdCBhZGRlZCBzbyBtdWNoIGNvbXBsZXhpdHkgd2l0aCBvbmx5IHRoZW9yZXRpY2FsIGV4dGVu
c2liaWxpdHkgb2YgYWRkaW5nIGFnZ3JlZ2F0b3JzLiAgSXQgdHVybnMgb3V0IHRoYXQKKyAgICAg
ICAgbWFueSBhZ2dyZWdhdG9ycyB3ZSdkIGxpa2UgdG8gYWRkIGFyZSBhIGxvdCBtb3JlIGNvbXBs
aWNhdGVkIHRoYW4gb25lcyB0aGF0IGNvdWxkIGJlIHdyaXR0ZW4gdW5kZXIgdGhlIGN1cnJlbnQK
KyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3ZSBuZWVkIHRvIG1ha2UgdGhlIG90aGVyIGFz
cGVjdHMgKGUuZy4gdGhlIGxldmVsIG9mIGFnZ3JlZ2F0aW9ucykgYSBsb3QgbW9yZSBleHRlbnNp
YmxlLgorICAgICAgICBSZW1vdmluZyBhbmQgc2ltcGxpZnlpbmcgVGVzdFJ1bnNHZW5lcmF0b3Ig
YWxsb3dzIHVzIHRvIGltcGxlbWVudCBzdWNoIGV4dGVuc2lvbnMgaW4gdGhlIGZ1dHVyZS4KKwor
ICAgICAgICBBbHNvIHJlbW92ZWQgdGhlIGpzIGZpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciB1c2Vk
LgorCisgICAgICAgICogY29uZmlnLmpzb246IE1vdmVkIGZyb20gZGF0YWJhc2UvY29uZmlnLmpz
b24uCisgICAgICAgICogZGF0YWJhc2UvYWdncmVnYXRlLmpzOiBSZW1vdmVkLiBObyBsb25nZXIg
dXNlZC4KKyAgICAgICAgKiBkYXRhYmFzZS9kYXRhYmFzZS1jb21tb24uanM6IFJlbW92ZWQgdW51
c2VkIGZ1bmN0aW9ucywgYW5kIHVwZGF0ZWQgdGhlIHBhdGggdG8gY29uZmlnLmpzb24uCisgICAg
ICAgICogZGF0YWJhc2UvcHJvY2Vzcy1qb2JzLmpzOiBSZW1vdmVkLiBObyBsb25nZXIgdXNlZC4K
KyAgICAgICAgKiBkYXRhYmFzZS9zYW1wbGUtZGF0YS5zcWw6IFJlbW92ZWQuIFdlIGhhdmUgYSBt
dWNoIGJldHRlciBjb3JwdXMgb2YgZGF0YSBub3cuCisgICAgICAgICogZGF0YWJhc2Uvc2NoZW1h
LmdyYWZmbGU6IFJlbW92ZWQuIEl0J3MgY29tcGxldGVseSBvYnNvbGV0ZS4KKyAgICAgICAgKiBw
dWJsaWMvaW5jbHVkZS9kYi5waHA6IFVwZGF0ZWQgdGhlIHBhdGggdG8gY29uZmlnLmpzb24uCisg
ICAgICAgICogcHVibGljL2luY2x1ZGUvZXZhbHVhdG9yLmpzOiBSZW1vdmVkLgorCisgICAgICAg
ICogcHVibGljL2luY2x1ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHA6CisgICAgICAgIChUZXN0UnVu
c0dlbmVyYXRvcjo6YWdncmVnYXRlKTogRGlyZWN0bHkgYWdncmVnYXRlIHZhbHVlcyB2aWEgbmV3
bHkgYWRkZWQgYWdncmVnYXRlX3ZhbHVlcyBtZXRob2QgaW5zdGVhZCBvZgorICAgICAgICBzdG9y
aW5nIHZhbHVlcyBpbnRvICRleHByZXNzaW9ucyBhbmQgY2FsbGluZyBldmFsdWF0ZV9leHByZXNz
aW9uc19ieV9ub2RlLgorICAgICAgICAoVGVzdFJ1bnNHZW5lcmF0b3I6OmFnZ3JlZ2F0ZV92YWx1
ZXMpOiBBZGRlZC4KKyAgICAgICAgKFRlc3RSdW5zR2VuZXJhdG9yOjpjb21wdXRlX2NhY2hlcyk6
IERpcmVjdGx5IGNvbXB1dGUgdGhlIGNhY2hlcy4KKworMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBCdWlsZCBmaXguIERvbid0IGZhaWwgdGhl
IHBsYXRmb3JtIG1lcmdlcyBldmVuIGlmIHRoZXJlIGFyZSBubyB0ZXN0IGNvbmZpZ3VyYXRpb25z
IHRvIGJlIG1vdmVkIHRvIHRoZSBuZXcgcGxhdGZvcm0uCisKKyAgICAgICAgKiBwdWJsaWMvYWRt
aW4vcGxhdGZvcm1zLnBocDoKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9kYi5waHA6CisKKzIw
MTQtMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgWm9v
bWVkIHktYXhpcyB2aWV3IGlzIHVudW5zYWJsZSB3aGVuIHRoZSBsYXN0IHJlc3VsdCBpcyBhbiBv
dXRsaWVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoYW5pZSBMZXdpcy4KKworICAgICAg
ICBTaG93IHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIGZyb20gdGhlIGV4cG9uZW50aWFsIG1vdmlu
ZyBhdmVyYWdlIHdpdGggYWxwaGEgPSAwLjMgaW5zdGVhZCBvZiB0aGUgbWVhbiBvZgorICAgICAg
ICB0aGUgbGFzdCByZXN1bHQgc28gdGhhdCB0aGUgZ3JhcGggbG9va3Mgc2FuZSBpZiB0aGUgbGFz
dCByZXN1bHQgd2FzIGFuIG91dGxpZXIuIEhvd2V2ZXIsIGFsd2F5cyBzaG93CisgICAgICAgIHRo
ZSBsYXN0IHJlc3VsdCdzIG1lYW4gZXZlbiBpZiBpdCB3YXMgYW4gb3V0bGllci4KKworICAgICAg
ICAqIHB1YmxpYy9pbmRleC5odG1sOgorICAgICAgICAqIHB1YmxpYy9qcy9oZWxwZXItY2xhc3Nl
cy5qczoKKyAgICAgICAgKHVuc2NhbGVkTWVhbnNGb3JBbGxSZXN1bHRzKTogRXh0cmFjdGVkIGZy
b20gbWluL21heC9zYW1wbGVTdGFuZGFyZERldmlhdGlvbi4KKyAgICAgICAgQWxzbyBhZGRlZCB0
aGUgYWJpbGl0eSB0byBjYWNoZSB0aGUgdW5zY2FsZWQgbWVhbnMgdG8gYXZvaWQgcmVjb21wdXRh
dGlvbi4KKyAgICAgICAgKFBlcmZUZXN0UnVucy5taW4pOiBSZWZhY3RvcmVkIHRvIHVzZSB1bnNj
YWxlZE1lYW5zRm9yQWxsUmVzdWx0cy4KKyAgICAgICAgKFBlcmZUZXN0UnVucy5tYXgpOiBEaXR0
by4KKyAgICAgICAgKFBlcmZUZXN0UnVucy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbik6IERpdHRv
LgorICAgICAgICAoUGVyZlRlc3RSdW5zLmV4cG9uZW50aWFsTW92aW5nQXJpdGhtZXRpY01lYW4p
OiBBZGRlZC4KKworMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBNaW5vciBmaXhlcy4KKworICAgICAgICAqIHB1YmxpYy9hZG1pbi90ZXN0cy5w
aHA6CisgICAgICAgICogcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorCisyMDE0LTAxLTI5
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSB0d28gc3Rh
bmRhcmQgZGV2aWF0aW9ucyBpbnN0ZWFkIGFzIEkgbWVudGlvbmVkIGluIHRoZSBtYWlsaW5nIGxp
c3QuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKworMjAxNC0wMS0yOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBUaGUgcGVyZm9ybWFuY2UgZGFz
aGJvYXJkIGVycm9uZW91c2x5IHNob3dzIHVwd2FyZCBhcnJvdyBmb3IgY29tYmluZWQgbWV0cmlj
cy4KKworICAgICAgICBBIHNpbmdsZSBvdXRsaWVyIGNhbiBydWluIHRoZSB6b29tZWQgeS1heGlz
IHZpZXcuCisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAg
ICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKyAgICAgICAgKGNvbXB1dGVZQXhpc0JvdW5kc1Rv
Rml0TGluZXMpOiBBZGRlZCBhZGp1c3RlZE1heCBhbmQgYWRqdXN0ZWRNaW4sIHdoaWNoIGFyZSBw
ZWdnZWQgYXQgNCBzdGFuZGFyZCBkZXZpYXRpb25zCisgICAgICAgIGZyb20gdGhlIGxhdGVzdCBy
ZXN1bHRzJyBtZWFuLgorICAgICAgICAoQ2hhcnQpOiBSZW5hbWVkIHNob3VsZFN0YXJ0WUF4aXNB
dFplcm8gdG8gc2hvdWxkU2hvd0VudGlyZVlBeGlzLgorICAgICAgICAoQ2hhcnQuYXR0YWNoTWFp
blBsb3QpOiBVc2UgdGhlIGFkanVzdGVkIG1heCBhbmQgbWluIHdoZW4gd2UncmUgbm90IHNob3dp
bmcgdGhlIGVudGlyZSB5LWF4aXMuCisgICAgICAgIChDaGFydC50b2dnbGVZQXhpcyk6CisgICAg
ICAgICogcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorICAgICAgICAoUGVyZlRlc3RSdW5z
LnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKTogQWRkZWQuCisgICAgICAgIChQZXJmVGVzdFJ1bnMu
c21hbGxlcklzQmV0dGVyKTogJ0NvbWJpbmVkJyBpcyBhIHNtYWxsZXIgaXMgYmV0dGVyIG1ldHJp
Yy4KKworMjAxNC0wMS0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAg
ICAgICBEb24ndCBpbmNsdWRlIHRoZSBjb25maWRlbmNlIGludGVydmFsIHdoZW4gY29tcHV0aW5n
IHRoZSB5LWF4aXMuCisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgU2ltb24gRnJhc2VyLgor
CisgICAgICAgICogcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorICAgICAgICAoUGVyZlRl
c3RSdW5zLm1pbik6CisgICAgICAgIChQZXJmVGVzdFJ1bnMubWF4KToKKworMjAxNC0wMS0yNSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBUaW55IENTUyB0d2Vh
ayBmb3IgdG9vbHRpcHMuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKworMjAxNC0w
MS0yNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUg
dGhlIGVycm9uZW91c2x5IHJlcGVhdGVkIGNvZGUuCisKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4v
dGVzdC1jb25maWd1cmF0aW9ucy5waHA6CisKKzIwMTQtMDEtMjQgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1NzA0ODkzPiBwZXJm
IGRhc2hib2FyZCBzaG91bGQgc2hvdyBiYXNlbGluZSBudW1iZXJzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU3RlcGhhbmllIExld2lzLgorCisgICAgICAgICogcHVibGljL2FkbWluL2J1Zy10cmFj
a2Vycy5waHA6CisgICAgICAgIChhc3NvY2lhdGVkX3JlcG9zaXRvcmllcyk6IFJldHVybiBhbiBh
cnJheSBvZiBIVE1McyBpbnN0ZWFkIG9mIGVjaG8naW5nIGFzIGV4cGVjdGVkIGJ5IEFkbWluaXN0
cmF0aXZlUGFnZS4KKyAgICAgICAgQWxzbyBmaXhlZCBhIHR5cG8uCisKKyAgICAgICAgKiBwdWJs
aWMvYWRtaW4vcGxhdGZvcm1zLnBocDoKKyAgICAgICAgKG1lcmdlX2xpc3QpOiBEaXR0by4KKwor
ICAgICAgICAqIHB1YmxpYy9hZG1pbi90ZXN0LWNvbmZpZ3VyYXRpb25zLnBocDogQWRkZWQuCisg
ICAgICAgIChhZGRfcnVuKTogQWRkcyBhICJzeW50aGV0aWMiIHRlc3QgcnVuIGFuZCBhIGNvcnJl
c3BvbmRpbmcgYnVpbGQuIEl0IGRvZXNuJ3QgY3JlYXRlIHJ1bl9pdGVyYXRpb25zIGFuZAorICAg
ICAgICBidWlsZF9yZXZpc2lvbnMgYXMgdGhleSdyZSBub3QgbWVhbmluZ2Z1bCBmb3IgYmFzZWxp
bmUgLyB0YXJnZXQgbnVtYmVycy4KKyAgICAgICAgKGRlbGV0ZV9ydW4pOiBEZWxldGVzIGEgc3lu
dGhldGljIHRlc3QgcnVuIGFuZCBpdHMgYnVpbGQuIEl0IHZlcmlmaWVzIHRoYXQgdGhlIHNwZWNp
ZmllZCBidWlsZCBoYXMgZXhhY3RseQorICAgICAgICBvbmUgdGVzdCBydW4gc28gdGhhdCB3ZSBk
b24ndCBhY2NpZGVudGFsbHkgZGVsZXRlIGEgcmVwb3J0ZWQgdGVzdCBydW4uCisgICAgICAgIChn
ZW5lcmF0ZV9yb3dzX2Zvcl9jb25maWd1cmF0aW9ucyk6IEdlbmVyYXRlcyByb3dzIG9mIGNvbmZp
Z3VyYXRpb24gSURzIGFuZCB0eXBlcy4KKyAgICAgICAgKGdlbmVyYXRlX3Jvd3NfZm9yX3Rlc3Rf
cnVucyk6IERpdHRvIGZvciB0ZXN0IHJ1bnMuIEl0IGFsc28gZW1pdHMgdGhlIGZvcm0gdG8gYWRk
IG5ldyAic3ludGhldGljIiB0ZXN0IHJ1bnMKKyAgICAgICAgYW5kIGRlbGV0ZSBleGlzdGluZyBv
bmVzLgorCisgICAgICAgICogcHVibGljL2FkbWluL3Rlc3RzLnBocDogV2Ugd3JvbmdmdWxseSBh
c3N1bWVkIHRoZXJlIGlzIGV4YWN0bHkgb25lIHRlc3QgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBt
ZXRyaWMKKyAgICAgICAgb24gZWFjaCBwbGF0Zm9ybTsgdGhlcmUgY291bGQgYmUgY29uZmlndXJh
dGlvbnMgb2YgZGlzdGluY3QgdHlwZXMgc3VjaCBhcyAiY3VycmVudCIgYW5kICJiYXNlbGluZSIu
CisgICAgICAgIFRodXMsIHVwZGF0ZSBhbGwgdGVzdCBjb25maWd1cmF0aW9ucyBmb3IgYSBnaXZl
biBtZXRyaWMgd2hlbiB1cGRhdGluZyBjb25maWdfaXNfaW5fZGFzaGJvYXJkLgorCisgICAgICAg
ICogcHVibGljL2FwaS9ydW5zLnBocDogUmVtb3ZlIHRoZSBOb3RJbXBsZW1lbnRlZCB3aGVuIHdl
IGhhdmUgbXVsdGlwbGUgdGVzdCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgKGZldGNoX3J1bnNf
Zm9yX2NvbmZpZyk6ICJTeW50aGV0aWMiIHRlc3QgcnVucyBjcmVhdGVkIG9uIHRlc3QtY29uZmln
dXJhdGlvbnMgcGFnZSBhcmUgbWlzc2luZyByZXZpc2lvbgorICAgICAgICBkYXRhIHNvIHdlIG5l
ZWQgdG8gbGVmdC1vdXRlci1qb2luIChpbnN0ZWFkIG9mIGlubmVyLWpvaW4pIGJ1aWxkX3Jldmlz
aW9ucy4gVG8gYXZvaWQgbWFraW5nIHRoZSBxdWVyeQorICAgICAgICB1bnJlYWRhYmxlLCBkb24n
dCBqb2luIHJldmlzaW9uX3JlcG9zaXRvcnkgaGVyZS4gSW5zdGVhZCwgZmV0Y2ggdGhlIGxpc3Qg
b2YgcmVwb3NpdG9yaWVzIHVwZnJvbnQgYW5kCisgICAgICAgIHJlc29sdmUgbmFtZXMgaW4gcGFy
c2VfcmV2aXNpb25zX2FycmF5LiBUaGlzIGFjdHVhbGx5IHJlZHVjZXMgdGhlIHF1ZXJ5IHRpbWUg
YnkgfjEwJS4KKworICAgICAgICAocGFyc2VfcmV2aXNpb25zX2FycmF5KTogU2tpcCBhbiBlbXB0
eSBhcnJheSBjcmVhdGVkIGZvciAic3ludGhldGljIiB0ZXN0IHJ1bnMuCisKKyAgICAgICAgKiBw
dWJsaWMvaW5jbHVkZS9hZG1pbi1oZWFkZXIucGhwOgorICAgICAgICAoQWRtaW5pc3RyYXRpdmVQ
YWdlOjpyZW5kZXJfdGFibGUpOiBOb3cgY3VzdG9tIGNvbHVtbnMgc3VwcG9ydCBzdWIgY29sdW1u
cy4gZS5nLiBhIGNvbmZpZ3VyYXRpb24gY29sdW1uIG1heQorICAgICAgICBoYXZlIGlkIGFuZCB0
eXBlIHN1YiBjb2x1bW5zLCBhbmQgZWFjaCBjdXN0b20gY29sdW1uIGNvdWxkIGdlbmVyYXRlIG11
bHRpcGxlIHJvd3MuCisKKyAgICAgICAgQW55IHRhYmxlIHdpdGggc3ViIGNvbHVtbnMgbm93IGdl
bmVyYXRlcyB0d28gcm93cyBmb3IgdGhlYWQuIFdlIGdlbmVyYXRlIHRkJ3MgaW4gaW4gdGhlIGZp
cnN0IHJvdyB3aXRob3V0CisgICAgICAgIHN1YiBjb2x1bW5zIHdpdGggcm93c3BhbiBvZiAyLCBh
bmQgZ2VuZXJhdGUgb25lcyB3aXRoIHN1YiBjb2x1bW5zIHdpdGggY29sc3BhbiBzZXQgdG8gdGhl
IHN1YiBjb2x1bW4gY291bnQuCisgICAgICAgIFdlIHRoZW4gcHJvY2VlZCB0byBnZW5lcmF0ZSB0
aGUgc2Vjb25kIGhlYWRlciByb3cgd2l0aCBzdWIgY29sdW1uIG5hbWVzLgorCisgICAgICAgIFdo
ZW4gZ2VuZXJhdGluZyB0aGUgYWN0dWFsIGNvbnRlbnQsIHdlIGZpcnN0IGdlbmVyYXRlIGFsbCBj
dXN0b20gY29sdW1ucyBhcyB0aGV5IG1heSBoYXZlIG11bHRpcGxlIHJvd3MgaW4KKyAgICAgICAg
d2hpY2ggY2FzZSByZWd1bGFyIGNvbHVtbnMgbmVlZCByb3dzcGFuIHNldCB0byB0aGUgbWF4aW11
bSBudW1iZXIgb2Ygcm93cy4KKworICAgICAgICBPbmNlIHdlJ3ZlIGdlbmVyYXRlZCB0aGUgZmly
c3Qgcm93LCB3ZSBwcm9jZWVkIHRvIGdlbmVyYXRlIHN1YnNlcXVlbnQgcm93cyBmb3IgdGhvc2Ug
Y3VzdG9tIGNvbHVtbnMgdGhhdAorICAgICAgICBoYXZlIG11bHRpcGxlIHJvd3MuCisKKyAgICAg
ICAgKEFkbWluaXN0cmF0aXZlUGFnZTo6cmVuZGVyX2N1c3RvbV9jZWxscyk6IEFkZGVkLiBUaGlz
IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRhYmxlIGNlbGxzCisgICAg
ICAgIGZvciBhIGdpdmVuIHJvdyBpbiBhIGdpdmVuIGN1c3RvbSBjb2x1bW4uIEl0IGdlbmVyYXRl
cyBhbiBlbXB0eSB0ZCB3aGVuIHRoZSBjdXN0b20gY29sdW1uIGRvZXNuJ3QgaGF2ZQorICAgICAg
ICBlbm91Z2ggcm93cy4gSXQgYWxzbyBnZW5lcmF0ZXMgZW1wdHkgYW4gdGQgd2hlbiBpdCBkb2Vz
bid0IGhhdmUgZW5vdWdoIGNvbHVtbnMgaW4gc29tZSByb3dzIGV4Y2VwdCB3aGVuCisgICAgICAg
IHRoZSBlbnRpcmUgcm93IGNvbnNpc3RzIG9mIGV4YWN0bHkgb25lIGNlbGwgZm9yIGEgY3VzdG9t
IGNvbHVtbiB3aXRoIHN1YiBjb2x1bW5zLCBpbiB3aGljaCBjYXNlIHRoZSBjZWxsIGlzCisgICAg
ICAgIGV4cGFuZGVkIHRvIG9jY3VweSBhbGwgc3ViIGNvbHVtbnMuCisKKyAgICAgICAgKiBwdWJs
aWMvaW5jbHVkZS9tYW5pZmVzdC5waHA6CisgICAgICAgIChNYW5pZmVzdEdlbmVyYXRvcjo6cGxh
dGZvcm1zKTogRG9uJ3QgYWRkIHRoZSBtZXRyaWMgbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgICAg
KiBwdWJsaWMvaW5jbHVkZS90ZXN0LW5hbWUtcmVzb2x2ZXIucGhwOgorICAgICAgICAoVGVzdE5h
bWVSZXNvbHZlcjo6X19jb25zdHJ1Y3QpOiBXZSBoYWQgd3JvbmdmdWxseSBhc3N1bWVkIHRoYXQg
d2UgaGF2ZSBleGFjdGx5IG9uZSB0ZXN0IGNvbmZpZ3VyYXRpb24gb24KKyAgICAgICAgZWFjaCBw
bGF0Zm9ybSBmb3IgZWFjaCBtZXRyaWMgbGlrZSB0ZXN0cy5waHAuIEZpeGVkIHRoYXQuIEFsc28g
ZmV0Y2ggdGhlIGxpc3Qgb2YgYWdncmVnYXRvcnMgdG8gY29tcHV0ZSB0aGUKKyAgICAgICAgZnVs
bCBtZXRyaWMgbmFtZSBsYXRlci4KKyAgICAgICAgKFRlc3ROYW1lUmVzb2x2ZXI6Om1hcF9tZXRy
aWNzX3RvX3Rlc3RzKTogUG9wdWxhdGUgJHRoaXMtPmlkX3RvX21ldHJpYy4KKyAgICAgICAgKFRl
c3ROYW1lUmVzb2x2ZXI6OnRlc3RfaWRfZm9yX2Z1bGxfbmFtZSk6IFNpbXBsaWZpZWQgdGhlIGNv
ZGUgdXNpbmcgYXJyYXlfZ2V0LgorICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6ZnVsbF9uYW1l
X2Zvcl90ZXN0KTogQWRkZWQuCisgICAgICAgIChUZXN0TmFtZVJlc29sdmVyOjpmdWxsX25hbWVf
Zm9yX21ldHJpYyk6IEFkZGVkLgorICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6Y29uZmlndXJh
dGlvbnNfZm9yX21ldHJpY19hbmRfcGxhdGZvcm0pOiBSZW5hbWVkIGFzIGl0IHJldHVybnMgbXVs
dGlwbGUgY29uZmlndXJhdGlvbnMuCisKKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNsYXNz
ZXMuanM6CisgICAgICAgIChUZXN0QnVpbGQpOiBVc2UgdGhlIGJ1aWxkIHRpbWUgYXMgdGhlIG1h
eGltdW0gdGltZSB3aGVuIHJldmlzaW9uIGluZm9ybWF0aW9uIGlzIG1pc3NpbmcgZm9yICJzeW50
aGV0aWMiCisgICAgICAgIHRlc3QgcnVucyBjcmVhdGVkIHRvIHNldCBiYXNlbGluZSBhbmQgdGFy
Z2V0IHBvaW50cy4KKworMjAxNC0wMS0yNCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KKworICAgICAgICBCdWlsZCBmaXggYWZ0ZXIgcjU3OTI4LiBSZW1vdmVkIGEgc3VwZXJmbHVv
dXMgY2xvc2UgcGFyZW50aGVzaXMuCisKKyAgICAgICAgKiBwdWJsaWMvYXBpL3J1bnMucGhwOgor
CisyMDE0LTAxLTI0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IFVucmV2aWV3ZWQgYnVpbGQgJiB0eXBvIGZpeGVzLgorCisgICAgICAgICogcHVibGljL2FkbWlu
L3BsYXRmb3Jtcy5waHA6CisgICAgICAgICogdGVzdHMvYWRtaW4tcGxhdGZvcm1zLmpzOgorCisy
MDE0LTAxLTI0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xNTcwNDg5Mz4gcGVyZiBkYXNoYm9hcmQgc2hvdWxkIHNob3cgYmFzZWxp
bmUgbnVtYmVycworCisgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFudHRpIEtvaXZpc3RvLgor
CisgICAgICAgIE9yZ2FuaXplIHNvbWUgY29kZSBpbnRvIGZ1bmN0aW9ucyBpbiBydW5zLnBocC4K
KworICAgICAgICBBbHNvIGFkZGVkIGJhY2sgJHBhdGhzIHRoYXQgd2FzIGVycm9uZW91c2x5IHJl
bW92ZWQgaW4gcjU3OTI1IGZyb20ganNvbi1oZWFkZXIucGhwLgorCisgICAgICAgICogcHVibGlj
L2FwaS9ydW5zLnBocDoKKyAgICAgICAgKGZldGNoX3J1bnNfZm9yX2NvbmZpZyk6IEV4dHJhY3Rl
ZC4KKyAgICAgICAgKGZvcm1hdF9ydW4pOiBEaXR0by4KKworMjAxNC0wMS0yMyAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBNZXJnZSB0aGUgdXBzdHJlYW0ganNv
bi1zaGFyZWQucGhwIGFzIG9mIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3IxNjI2OTMuCisKKyAg
ICAgICAgKiBkYXRhYmFzZS9jb25maWcuanNvbjoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vcmVw
cm9jZXNzLXJlcG9ydC5waHA6CisgICAgICAgICogcHVibGljL2FwaS9yZXBvcnQucGhwOgorICAg
ICAgICAqIHB1YmxpYy9hcGkvcnVucy5waHA6CisgICAgICAgICogcHVibGljL2luY2x1ZGUvanNv
bi1oZWFkZXIucGhwOgorCisyMDE0LTAxLTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIENvbW1pdCB5ZXQgYW5vdGhlciBmb3Jnb3R0ZW4gY2hhbmdlLgorCisg
ICAgICAgIFNvbWV0aGluZyB3ZW50IGhvcnJpYmx5IHdyb25nIHdpdGggbXkgbWVyZ2UgOigKKwor
ICAgICAgICAqIGRhdGFiYXNlL2luaXQtZGF0YWJhc2Uuc3FsOgorCisyMDE0LTAxLTIzICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENvbW1pdCBvbmUgbW9yZSBm
b3Jnb3R0ZW4gY2hhbmdlLiBTb3JyeSBmb3IgbWFraW5nIGEgbWVzcyBoZXJlLgorCisyMDE0LTAx
LTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENvbW1pdCB0
aGUgZm9yZ290dGVuIGZpbGVzLgorCisgICAgICAgICogcHVibGljL2FkbWluL3BsYXRmb3Jtcy5w
aHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2FkbWluLXBsYXRmb3Jtcy5qczogQWRkZWQuCisK
KzIwMTQtMDEtMjMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzE1ODg5OTA1PiBTYWZhcmlQZXJmTW9uaXRvcjogdGhlcmUgc2hvdWxk
IGJlIGEgd2F5IHRvIG1lcmdlIGFuZCBoaWRlIHBsYXRmb3JtcworCisgICAgICAgIFJldmlld2Vk
IGJ5IFN0ZXBoYW5pZSBMZXdpcy4KKworICAgICAgICBBZGRlZCAvYWRtaW4vcGxhdGZvcm1zLyBw
YWdlIHRvIGhpZGUgYW5kIG1lcmdlIHBsYXRmb3Jtcy4KKworICAgICAgICBNZXJnaW5nIHR3byBw
bGF0Zm9ybXMgaXMgdHJpY2t5IGJlY2F1c2Ugd2UgbmVlZCB0byBtaWdyYXRlIHRlc3QgcnVucyBh
cyB3ZWxsIGFzIHNvbWUgdGVzdCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgUmVjYWxsIHRoYXQg
ZWFjaCB0ZXN0IChlLmcuIERyb21hZW8pIGNhbiBoYXZlIG1hbnkgInRlc3QgbWV0cmljcyIgKGUu
Zy4gTWF4QWxsb2NhdGlvbnMsIEVuZEFsbG9jYXRpb25zKSwKKyAgICAgICAgYW5kIHRoZXkgaGF2
ZSBhIGRpc3RpbmN0ICJ0ZXN0IGNvbmZpZ3VyYXRpb24iIGZvciBlYWNoIHBsYXRmb3JtIChlLmcu
IE1heEFsbG9jYXRpb24gb24gTW91bnRhaW4gTGlvbiksIGFuZAorICAgICAgICBlYWNoIHRlc3Qg
Y29uZmlndXJhdGlvbiBhIGRpc3RpbmN0ICJ0ZXN0IHJ1biIgZm9yIGVhY2ggYnVpbGQuCisKKyAg
ICAgICAgSW4gb3JkZXIgdG8gbWVyZ2UgcGxhdGZvcm0gQSBpbnRvIHBsYXRmb3JtIEIsIHdlIG11
c3QgbWlncmF0ZSBhbGwgdGVzdCBydW5zIHRoYXQgYmVsb25nIHRvIHBsYXRmb3JtIEEgdmlhCisg
ICAgICAgIHRoZWlyIHRlc3QgY29uZmlndXJhdGlvbnMgaW50byBwbGF0Zm9ybSBCLgorCisgICAg
ICAgIFN1cHBvc2Ugd2UncmUgbWlncmF0aW5nIGEgdGVzdCBydW4gUiBmb3IgdGVzdCBjb25maWd1
cmF0aW9uIFRfQSBpbiBwbGF0Zm9ybSBBIGZvciBtZXRyaWMgTS4gU2luY2UgTSBleGlzdHMKKyAg
ICAgICAgaW5kZXBlbmRlbnQgb2YgcGxhdGZvcm1zLCBSIHNob3VsZCBjb250aW51ZSB0byByZWxh
dGUgdG8gTSB0aHJvdWdoIHNvbWUgdGVzdCBjb25maWd1cmF0aW9uLiBVbmZvcnR1bmF0ZWx5LAor
ICAgICAgICB3ZSBjYW4ndCBzaW1wbHkgbW92ZSBUX0EgaW50byBwbGF0Zm9ybSBCIHNpbmNlIHdl
IG1heSBhbHJlYWR5IGhhdmUgYSB0ZXN0IGNvbmZpZ3VyYXRpb24gVF9CIGZvciBtZXRyaWMgTQor
ICAgICAgICBpbiBwbGF0Zm9ybSBCLCBpbiB3aGljaCBjYXNlIFIgc2hvdWxkIHJlbGF0ZSB0byBU
X0IgaW5zdGVhZC4KKworICAgICAgICBUaHVzLCB3ZSBmaXJzdCBtaWdyYXRlIGFsbCB0ZXN0IHJ1
bnMgZm9yIHdoaWNoIHdlIGFscmVhZHkgaGF2ZSBjb3JyZXNwb25kaW5nIHRlc3QgY29uZmlndXJh
dGlvbnMgaW4gdGhlCisgICAgICAgIG5ldyBwbGF0Zm9ybS4gV2UgdGhlbiBtaWdyYXRlIHRoZSB0
ZXN0IGNvbmZpZ3VyYXRpb25zIG9mIHRoZSByZW1haW5pbmcgdGVzdCBydW5zLgorCisgICAgICAg
ICogZGF0YWJhc2UvaW5pdC1kYXRhYmFzZS5zcWw6IEFkZGVkIHBsYXRmb3JtX2hpZGRlbi4KKwor
ICAgICAgICAqIHB1YmxpYy9hZG1pbi9wbGF0Zm9ybXMucGhwOiBBZGRlZC4KKyAgICAgICAgKG1l
cmdlX3BsYXRmb3Jtcyk6IEFkZGVkLiBJbXBsZW1lbnRzIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVk
IGFib3ZlLgorICAgICAgICAobWVyZ2VfbGlzdCk6IEFkZGVkLgorCisgICAgICAgICogcHVibGlj
L2FkbWluL3Rlc3RzLnBocDogRGlzYWJsZSB0aGUgY2hlY2tib3ggdG8gc2hvdyBhIHRlc3QgY29u
ZmlndXJhdGlvbiBvbiB0aGUgZGFzaGJvYXJkIGlmIGl0cyBwbGF0Zm9ybQorICAgICAgICBpcyBo
aWRkZW4gc2luY2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KKworICAgICAgICAqIHB1YmxpYy9p
bmNsdWRlL2FkbWluLWhlYWRlci5waHA6IEFkZGVkIHRoZSBoeXBlcmxpbmsgdG8gL2FkbWluL3Bs
YXRmb3Jtcy4KKyAgICAgICAgKHVwZGF0ZV9maWVsZCk6IERvbid0IGJhaWwgb3V0IGlmIHRoZSBu
ZXdseSBhZGRlZCAidXBkYXRlLWNvbHVtbiIgaXMgc2V0IHRvIHRoZSBmaWVsZCBuYW1lIGV2ZW4g
aWYgJF9QT1NUIGlzCisgICAgICAgIG1pc3NpbmcgaXQgc2luY2UgdW5jaGVja2VkIGNoZWNrYm94
IGRvZXNuJ3Qgc2V0IHRoZSB2YWx1ZSBpbiAkX1BPU1QuCisgICAgICAgIChBZG1pbmlzdHJhdGl2
ZVBhZ2U6OnJlbmRlcl9mb3JtX2NvbnRyb2xfZm9yX2NvbHVtbik6IEFkZGVkIHRoZSBzdXBwb3J0
IGZvciBib29sZWFuIGVkaXQgbW9kZS4gQWxzbyB1c2VkCisgICAgICAgIHN3aXRjaCBzdGF0ZW1l
bnQgaW5zdGVhZCBvZiByZXBlYXRlZCBpZidzLgorICAgICAgICAoQWRtaW5pc3RyYXRpdmVQYWdl
OjpyZW5kZXJfdGFibGUpOiBFbWl0ICJ1cGRhdGUtY29sdW1uIiBmb3IgdXBkYXRlX2ZpZWxkLgor
CisgICAgICAgICogcHVibGljL2luY2x1ZGUvZGIucGhwOiBEaXNhYmxlIHdhcm5pbmdzIHdoZW4g
d2UncmUgbm90IGluIHRoZSBkZWJ1ZyBtb2RlLgorCisgICAgICAgICogcHVibGljL2luY2x1ZGUv
bWFuaWZlc3QucGhwOgorICAgICAgICAoTWFuaWZlc3RHZW5lcmF0b3I6OnBsYXRmb3Jtcyk6IFNr
aXAgcGxhdGZvcm1zIHRoYXQgaGF2ZSBiZWVuIGhpZGRlbi4KKworICAgICAgICAqIHJ1bi10ZXN0
cy5qczoKKyAgICAgICAgKFRlc3RFbnZpcm9ubWVudC5wb3N0SlNPTik6CisgICAgICAgIChUZXN0
RW52aXJvbm1lbnQuaHR0cEdldCk6CisgICAgICAgIChUZXN0RW52aXJvbm1lbnQuaHR0cFBvc3Qp
OiBBZGRlZC4KKyAgICAgICAgKHNlbmRIdHRwUmVxdWVzdCk6IFNldCB0aGUgY29udGVudCB0eXBl
IGlmIHNwZWNpZmllZC4KKworICAgICAgICAqIHRlc3RzL2FkbWluLXBsYXRmb3Jtcy5qczogQWRk
ZWQgdGVzdHMuCisKKzIwMTQtMDEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgRXh0cmFjdCB0aGUgY29kZSB0byBjb21wdXRlIGZ1bGwgdGVzdCBuYW1lcyBm
cm9tIHRlc3RzLnBocC4KKworICAgICAgICBSZXZpZXdlZCBieSBTdGVwaGFuaWUgTGV3aXMuCisK
KyAgICAgICAgRXh0cmFjdGVkIFRlc3ROYW1lUmVzb2x2ZXIgb3V0IG9mIHRlc3RzLnBocC4gVGhp
cyByZWR1Y2VzIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0ZXN0cy5waHAKKyAg
ICAgICAgYW5kIHBhdmVzIG91ciB3YXkgdG8gcmUtdXNlIHRoZSBjb2RlIGluIG90aGVyIHBhZ2Vz
LgorCisgICAgICAgICogcHVibGljL2FkbWluL3Rlc3RzLnBocDoKKworICAgICAgICAqIHB1Ymxp
Yy9pbmNsdWRlL2RiLnBocDoKKyAgICAgICAgKGFycmF5X3NldF9kZWZhdWx0KTogUmVuYW1lZCBm
cm9tIGFycmF5X2l0ZW1fc2V0X2RlZmF1bHQgYW5kIG1vdmVkIGZyb20gdGVzdHMucGhwIGFzIGl0
J3MgdXNlZCBpbiBib3RoCisgICAgICAgIHRlc3RzLnBocCBhbmQgdGVzdC1uYW1lLXJlc29sdmVy
LnBocC4KKworICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL3Rlc3QtbmFtZS1yZXNvbHZlci5waHA6
IEFkZGVkLgorICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6X19jb25zdHJ1Y3QpOgorICAgICAg
ICAoVGVzdE5hbWVSZXNvbHZlcjo6Y29tcHV0ZV9mdWxsX25hbWUpOiBNb3ZlZCBmcm9tIHRlc3Rz
LnBocC4KKyAgICAgICAgKFRlc3ROYW1lUmVzb2x2ZXI6Om1hcF9tZXRyaWNzX3RvX3Rlc3RzKTog
RGl0dG8uCisgICAgICAgIChUZXN0TmFtZVJlc29sdmVyOjpzb3J0X3Rlc3RzX2J5X2Z1bGxfbmFt
ZSk6IERpdHRvLgorICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6dGVzdHMpOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3ROYW1lUmVzb2x2ZXI6OnRlc3RfaWRfZm9yX2Z1bGxfbmFtZSk6IERpdHRvLgor
ICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6bWV0cmljc19mb3JfdGVzdF9pZCk6IERpdHRvLgor
ICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6Y2hpbGRfbWV0cmljc19mb3JfdGVzdF9pZCk6IERp
dHRvLgorICAgICAgICAoVGVzdE5hbWVSZXNvbHZlcjo6Y29uZmlndXJhdGlvbl9mb3JfbWV0cmlj
X2FuZF9wbGF0Zm9ybSk6IERpdHRvLgorCisyMDE0LTAxLTIxICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTg2NzMyNT4gUGVyZiBk
YXNoYm9hcmQgaXMgZXJyb25lb3VzbHkgYXNzb2NpYXRpbmcgcmVwb3J0ZWQgcmVzdWx0cyB3aXRo
IG9sZCByZXZpc2lvbnMKKworICAgICAgICBSZXZpZXdlZCBieSBTdGVwaGFuaWUgTGV3aXMuCisK
KyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIHJlcHJvY2VzcyByZXBvcnRzIHNvIHRoYXQgSSBj
YW4gcmUtYXNzb2NpYXRlIHdyb25nZnVsbHkgYXNzb2NpYXRlZCByZXBvcnRzLgorCisgICAgICAg
IEFkZGVkIHB1YmxpYy9hZG1pbi9yZXByb2Nlc3MtcmVwb3J0LnBocC4gSXQgZG9lc24ndCBoYXZl
IGFueSBuaWNlIFVJIHRvIGZpbmQgcmVwb3J0cyBhbmQgaXQgcmV0dXJucyBKU09OCisgICAgICAg
IGJ1dCB0aGF0J3Mgc3VmZmljaWVudCB0byBjb3JyZWN0IHRoZSB3cm9uZ2Z1bGx5IHByb2Nlc3Nl
ZCByZXBvcnRzIGZvciBub3cuCisKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vcmVwcm9jZXNzLXJl
cG9ydC5waHA6IEFkZGVkLiBUYWtlcyBhIHJlcG9ydCBpZCBpbiAkX0dFVCBvciAkX1BPU1QgYW5k
IHByb2Nlc3MgdGhlIHJlcG9ydC4KKyAgICAgICAgV2Ugc2hvdWxkIGV2ZW50dWFsbHkgYWRkIGEg
bmljZSBVSSB0byBmaW5kIGFuZCByZXByb2Nlc3MgcmVwb3J0cy4KKworICAgICAgICAqIHB1Ymxp
Yy9hcGkvcmVwb3J0LnBocDogUmVwb3J0UHJvY2Vzc29yIGFuZCBUZXN0UnVuc0dlbmVyYXRvciBo
YXZlIGJlZW4gcmVtb3ZlZC4KKworICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2RiLnBocDogQWRk
ZWQgdGhlIGZvcmdvdHRlbiBjYWxsIHRvIHByZWZpeGVkX2NvbHVtbl9uYW1lcy4KKworICAgICAg
ICAqIHB1YmxpYy9pbmNsdWRlL3JlcG9ydC1wcm9jZXNzb3IucGhwOiBDb3BpZWQgZnJvbSBwdWJs
aWMvYXBpL3JlcG9ydC5waHAuCisgICAgICAgIChSZXBvcnRQcm9jZXNzb3I6Ol9fY29uc3RydWN0
KTogRmV0Y2ggdGhlIGxpc3Qgb2YgYWdncmVnYXRvcnMgaGVyZSBmb3Igc2ltcGxpY2l0eS4KKyAg
ICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6cHJvY2Vzcyk6IE9wdGlvbmFsbHkgdGFrZXMgJGV4aXN0
aW5nX3JlcG9ydF9pZC4gV2hlbiB0aGlzIHZhbHVlIGlzIHNwZWNpZmllZCwgd2UgZG9uJ3QKKyAg
ICAgICAgY3JlYXRlIGEgbmV3IHJlcG9ydCBvciBhdXRoZW50aWNhdGUgdGhlIGJ1aWxkZXIgcGFz
c3dvcmQgKHRoZSBwYXNzd29yZCBpcyBuZXZlciBzdG9yZWQgaW4gdGhlIHJlcG9ydCkuCisgICAg
ICAgIEFsc28gdXNlIHNlbGVjdF9maXJzdF9yb3cgaW5zdGVhZCBvZiBxdWVyeV9hbmRfZmV0Y2hf
YWxsIHRvIGZpbmQgdGhlIGJ1aWxkZXIgZm9yIHNpbXBsaWNpdHkuCisgICAgICAgIChSZXBvcnRQ
cm9jZXNzb3I6OmNvbnN0cnVjdF9idWlsZF9kYXRhKTogRXh0cmFjdGVkIGZyb20gc3RvcmVfcmVw
b3J0X2FuZF9nZXRfYnVpbGRfZGF0YS4KKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6c3RvcmVf
cmVwb3J0KTogRGl0dG8uCisKKyAgICAgICAgKiB0ZXN0cy9hZG1pbi1yZXByb2Nlc3MtcmVwb3J0
LmpzOiBBZGRlZC4KKworMjAxNC0wMS0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU4NjczMjU+IFBlcmYgZGFzaGJvYXJkIGlz
IGVycm9uZW91c2x5IGFzc29jaWF0aW5nIHJlcG9ydGVkIHJlc3VsdHMgd2l0aCBvbGQgcmV2aXNp
b25zCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgVGhl
IGJ1ZyB3YXMgY2F1c2VkIGJ5IGEgYnVpbGQgZml4IHI1NzY0NS4gSXQgYXR0ZW1wdGVkIHRvIHRy
ZWF0IG11bHRpcGxlIHJlcG9ydHMgZnJvbSB0aGUgc2FtZSBidWlsZGVyCisgICAgICAgIGZvciB0
aGUgc2FtZSBidWlsZCBudW1iZXIgYXMgYSBzaW5nbGUgYnVpbGQgYnkgaWdub3JpbmcgYnVpbGQg
dGltZS4gVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGFzc29jaWF0ZQorICAgICAgICBtdWx0aXBsZSBy
ZXBvcnRzIGJ5IGEgc2luZ2xlIGJ1aWxkIC0gZS5nLiBmb3IgZGlmZmVyZW50IHBlcmZvcm1hbmNl
IHRlc3Qgc3VpdGVzIC0gYmVjYXVzZSB0aGUgc2NyaXB0cworICAgICAgICB3ZSB1c2UgdG8gc3Vi
bWl0IHJlc3VsdHMgY29tcHV0ZWQgaXRzIG93biAiYnVpbGQgdGltZSIgd2hlbiB0aGV5J3JlIGNh
bGxlZC4KKworICAgICAgICBBbiB1bmludGVuZGVkIGNvbnNlcXVlbmNlIG9mIHRoaXMgY2hhbmdl
IHdhcyByZXZlYWxlZCB3aGVuIHdlIG1vdmVkIGEgYnVpbGRib3QgbWFzdGVyIHRvIHRoZSBuZXcg
bWFjaGluZQorICAgICAgICBsYXN0IHdlZWs7IG5ldyByZXBvcnRzIHdlcmUgd3JvbmdmdWxseSBh
c3NvY2lhdGVkIHdpdGggb2xkIGJ1aWxkIG51bWJlcnMuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1
ZyBieSBub3QgYWxsb3dpbmcgcmVwb3J0cyBtYWRlIG1vcmUgdGhhbiAxIGRheSBhZnRlciB0aGUg
aW5pdGlhbCBidWlsZCB0aW1lIHRvIGJlIGFzc2lnbmVkCisgICAgICAgIHRvIHRoZSBzYW1lIGJ1
aWxkLiBJbnN0ZWFkLCB3ZSBjcmVhdGUgYSBuZXcgYnVpbGQgb2JqZWN0IGZvciB0aG9zZSByZXBv
cnRzLiBTaW5jZSB0aGUgbG9uZ2VzdCBzZXQgb2YKKyAgICAgICAgdGVzdHMgd2UgaGF2ZSBvbmx5
IHRha2UgYSBjb3VwbGUgb2YgaG91cnMgdG8gcnVuLCAyNCBob3VycyBzaG91bGQgYmUgbW9yZSB0
aGFuIGVub3VnaC4KKworICAgICAgICAqIGRhdGFiYXNlL2luaXQtZGF0YWJhc2Uuc3FsOiBXZSBj
YW4gbm8gbG9uZ2VyIGNvbnN0cmFpbiB0aGF0IGVhY2ggYnVpbGQgbnVtYmVyIGlzIHVuaXF1ZSB0
byBhIGJ1aWxkZXIKKyAgICAgICAgb3IgdGhhdCBidWlsZCBudW1iZXIgYW5kIGJ1aWxkIHRpbWUg
cGFpciBpcyB1bmlxdWUuIEluc3RlYWQsIGNvbnN0cmFpbiB0aGUgdW5pcXVlbmVzcyBvZiB0aGUg
dHVwbGUKKyAgICAgICAgKGJ1aWxkZXIsIGJ1aWxkIG51bWJlciwgYnVpbGQgdGltZSkuCisKKyAg
ICAgICAgKiBwdWJsaWMvYXBpL3JlcG9ydC5waHA6CisgICAgICAgIChSZXBvcnRQcm9jZXNzb3I6
OnJlc29sdmVfYnVpbGRfaWQpOiBMb29rIGZvciBhbnkgYnVpbGRzIG1hZGUgd2l0aGluIHRoZSBw
YXN0IG9uZSBkYXkuIENyZWF0ZSBhIG5ldyBidWlsZAorICAgICAgICB3aGVuIG5vIHN1Y2ggYnVp
bGQgZXhpc3RzLiBUaGlzIHByZXZlbnRzIGEgcmVwb3J0IGZyb20gYmVpbmcgYXNzb2NpYXRlZCB3
aXRoIGEgdmVyeSBvbGQgYnVpbGQgb2YgdGhlIHNhbWUKKyAgICAgICAgYnVpbGQgbnVtYmVyLgor
CisgICAgICAgIEFsc28gY2hlY2sgdGhhdCByZXZpc2lvbiBudW1iZXJzIG9yIGhhc2hlcyBtYXRj
aCB3aGVuIHdlJ3JlIGFkZGluZyByZXZpc2lvbiBpbmZvLiBUaGlzIHdpbGwgbGV0IHVzIGNhdGNo
CisgICAgICAgIGEgc2ltaWxhciBidWcgaW4gdGhlIGZ1dHVyZSBzb29uZXIuCisKKyAgICAgICAg
KiB0ZXN0cy9hcGktcmVwb3J0LmpzOiBBZGRlZCB0aHJlZSB0ZXN0IGNhc2VzLgorCisyMDE0LTAx
LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlZCB0
aGUgdXBzdHJlYW0gY2hhbmdlcyB0byBkYi5waHAKKyAgICAgICAgU2VlIGh0dHA6Ly90cmFjLndl
YmtpdC5vcmcvYnJvd3Nlci90cnVuay9XZWJzaXRlcy90ZXN0LXJlc3VsdHMvcHVibGljL2luY2x1
ZGUvZGIucGhwCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9kYi5waHA6CisKKzIwMTQtMDEt
MjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlIG90
aGVyIHNjcmlwdHMgYW5kIHRlc3RzIHBlciBwcmV2aW91cyBwYXRjaC4KKworICAgICAgICAqIHB1
YmxpYy9pbmNsdWRlL21hbmlmZXN0LnBocDoKKyAgICAgICAgKiB0ZXN0cy9hZG1pbi1yZWdlbmVy
YXRlLW1hbmlmZXN0LmpzOgorCisyMDE0LTAxLTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJlbW92ZSBtZXRyaWNzX3VuaXQuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgVGhpcyBjb2x1bW4gaXMgbm8gbG9uZ2Vy
IHVzZWQgYnkgdGhlIGZyb250LWVuZCBjb2RlIHNpbmNlIHI0ODM2MC4KKworICAgICAgICAqIGRh
dGFiYXNlL2luaXQtZGF0YWJhc2Uuc3FsOgorICAgICAgICAqIHB1YmxpYy9hZG1pbi90ZXN0cy5w
aHA6CisKKzIwMTQtMDEtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCisKKyAgICAgICAgKiBwdWJsaWMvYXBpL3JlcG9y
dC5waHA6CisKKzIwMTQtMDEtMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1ODMyNDU2PiBBdXRvbWF0ZSBEb1lvdUV2ZW5CZW5j
aCAoMTI0NDk3KQorCisgICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAg
ICAgIFN1cHBvcnQgYSBuZXcgYWx0ZXJuYXRpdmUgZm9ybWF0IGZvciBhZ2dyZWdhdGVkIHJlc3Vs
dHMgd2hlcmUgd2UgaGF2ZSByYXcgdmFsdWVzIGFzIHdlbGwgYXMKKyAgICAgICAgdGhlIGxpc3Qg
YWdncmVnYXRvcnMgc28gdGhhdCBpbnN0ZWFkIG9mCisgICAgICAgICJtZXRyaWNzIjogeyJUaW1l
IjogWyJBcml0aG1ldGljIl19CisgICAgICAgIHdlIGNhbiBoYXZlCisgICAgICAgICJtZXRyaWNz
IjogeyJUaW1lIjogeyAiYWdncmVnYXRvcnMiIDogWyJBcml0aG1ldGljIl0sICJjdXJyZW50Ijog
WzMwMCwgMzEwLCAzMjAsIDMzMF0gfX0KKworICAgICAgICBUaGlzIGFsbG93cyBzaW5nbGUgSlNP
TiBnZW5lcmF0ZWQgYnkgcnVuLXBlcmYtdGVzdHMgaW4gV2ViS2l0IHRvIGJlIHNoYXJlZCBiZXR3
ZWVuIHRoZSBwZXJmCisgICAgICAgIGRhc2hib2FyZCBhbmQgdGhlIGdlbmVyYXRlZCByZXN1bHRz
IHBhZ2UsIHdoaWNoIGRvZXNuJ3Qga25vdyBob3cgdG8gYWdncmVnYXRlIHZhbHVlcy4KKworICAg
ICAgICBXZSBuZWVkIHRvIGtlZXAgdGhlIHN1cHBvcnQgZm9yIHRoZSBvbGQgZm9ybWF0IGJlY2F1
c2UgYWxsIG90aGVyIGV4aXN0aW5nIHBlcmZvcm1hbmNlIHRlc3RzCisgICAgICAgIGFsbCByZWx5
IG9uIHRoZSBvbGQgZm9ybWF0LiBFdmVuIGlmIHdlIHVwZGF0ZWQgdGhlIHRlc3RzLCB3ZSBuZWVk
IHRoZSBkYXNoYm9hcmQgdG8gc3VwcG9ydAorICAgICAgICB0aGUgb2xkIGZvcm1hdCBkdXJpbmcg
dGhlIHRyYW5zaXRpb24uCisKKyAgICAgICAgKiBwdWJsaWMvYXBpL3JlcG9ydC5waHA6CisgICAg
ICAgIChSZXBvcnRQcm9jZXNzb3I6OnJlY3Vyc2l2ZWx5X2Vuc3VyZV90ZXN0cyk6IFN1cHBvcnQg
dGhlIG5ldyBmb3JtYXQgaW4gYWRkaXRpb24gdG8gdGhlIG9sZCBvbmUuCisgICAgICAgIChSZXBv
cnRQcm9jZXNzb3I6OmFnZ3JlZ2F0b3JfbGlzdF9pZl9leGlzdHMpOiBSZXBsYWNlZCBpc19saXN0
X29mX2FnZ3JlZ2F0b3JzLgorCisgICAgICAgICogdGVzdHMvYXBpLXJlcG9ydC5qczogVXBkYXRl
ZCBvbmUgb2YgYWdncmVnYXRvciB0ZXN0IGNhc2VzIHRvIHRlc3QgdGhlIG5ldyBmb3JtYXQuCisK
KzIwMTMtMDUtMzEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
VW5yZXZpZXdlZDsgVHdlYWsgdGhlIENTUyBzbyB0aGF0IGNoYXJ0IHBhbmVzIGFsaWduIHZlcnRp
Y2FsbHkuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKworMjAxMy0wNS0zMSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTYWZhcmlQZXJmTW9uaXRv
ciBzaG91bGQgc3VwcG9ydCBDb21iaW5lZCBtZXRyaWMuCisKKyAgICAgICAgKiBwdWJsaWMvanMv
aGVscGVyLWNsYXNzZXMuanM6CisgICAgICAgIChQZXJmVGVzdFJ1bnMpOiBBZGRlZCAnQ29tYmlu
ZWQnIG1ldHJpYy4gSW4gZ2VuZXJhbCwgaXQgY291bGQgYmUgdXNlZCBmb3Igc21hbGxlci1pcy1i
ZXR0ZXIKKyAgICAgICAgdmFsdWUgYXMgd2VsbCBidXQgYXNzdW1lIGl0IHRvIGJlIGdyZWF0ZXIt
aXMtYmV0dGVyIGZvciBub3cuCisKKzIwMTMtMDUtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQ29tbWl0IHRoZSBmb3Jnb3R0ZW4gaW5pdC1kYXRhYmFzZSBj
aGFuZ2UgdG8gYWRkIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lLgorCisgICAgICAgICogZGF0YWJh
c2UvaW5pdC1kYXRhYmFzZS5zcWw6CisKKzIwMTMtMDUtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTkzMDY5PiBTYWZhcmlQ
ZXJmTW9uaXRvcjogU3VwcG9ydCBhY2NlcHRpbmcgKHJlbGF0aXZlIHRpbWUsIHZhbHVlKSBwYWly
cworCisgICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAgICAgIEFkZCB0
aGUgc3VwcG9ydCBmb3IgZWFjaCB2YWx1ZSB0byBoYXZlIGEgcmVsYXRpdmUgdGltZS4gVGhpcyBp
cyBuZWNlc3NhcnkgZm9yIGZyYW1lIHJhdGUgaGlzdG9yeQorICAgICAgICBzaW5jZSBhIGZyYW1l
IHJhdGUgbmVlZHMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgdGltZSBpdCB3YXMgc2FtcGxlZC4K
KworICAgICAgICAqIGRhdGFiYXNlL2luaXQtZGF0YWJhc2Uuc3FsOiBBZGRlZCBpdGVyYXRpb25f
cmVsYXRpdmVfdGltZSB0byBydW5faXRlcmF0aW9ucy4KKworICAgICAgICAqIHB1YmxpYy9hcGkv
cmVwb3J0LnBocDoKKyAgICAgICAgKFRlc3RSdW5zR2VuZXJhdG9yOjp0ZXN0X3ZhbHVlX2xpc3Rf
dG9fdmFsdWVzX2J5X2l0ZXJhdGlvbnMpOiBSZWplY3QgYW55IG5vbi1udW1lcmFsIHZhbHVlcyBo
ZXJlLgorICAgICAgICBUaGlzIGNvZGUgaXMgdXNlZCB0byBhZ2dyZWdhdGUgdmFsdWVzIGJ1dCBp
dCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gYWdncmVnYXRlIGl0ZXJhdGlvbiB2YWx1ZXMKKyAgICAg
ICAgd2l0aCByZWxhdGl2ZSB0aW1lIHNpbmNlIHRha2luZyB0aGUgYXZlcmFnZSBvZiB0d28gZnJh
bWUgcmF0ZXMgZm9yIHR3byBzdWJ0ZXN0cyB0YWtlbiBhdCB0d28KKyAgICAgICAgZGlmZmVyZW50
IHRpbWVzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuCisgICAgICAgIChUZXN0UnVuc0dlbmVyYXRv
cjo6Y29tcHV0ZV9jYWNoZXMpOiBXaGVuIHdlIGVuY291bnRlciBhbiBhcnJheSB2YWx1ZSB3aGls
ZSBjb21wdXRpbmcgc3VtLCBtZWFuLAorICAgICAgICBldGMuLi4sIHVzZSB0aGUgc2Vjb25kIGVs
ZW1lbnQgc2luY2Ugd2UgYXNzdW1lIHZhbHVlcyBhcmUgb2YgdGhlIGZvcm0gKHJlbGF0aXZlIHRp
bWUsIGZyYW1lIHJhdGUpLgorICAgICAgICBBbHNvIGV4aXQgZWFybHkgd2l0aCBhbiBlcnJvciBp
ZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSBpcyBub3QgYSBwYWlyLgorICAg
ICAgICAoVGVzdFJ1bnNHZW5lcmF0b3I6OmNvbW1pdCk6IFN0b3JlIHRoZSByZWxhdGl2ZSB0aW1l
IGFuZCB0aGUgZnJhbWUgcmF0ZSBhcyBuZWVkZWQuCisKKyAgICAgICAgKiB0ZXN0cy9hcGktcmVw
b3J0LmpzOiBBZGRlZCBhIHRlc3QgY2FzZS4gQWxzbyBtb2RpZmllZCBleGlzdGluZyB0ZXN0IGNh
c2VzIHRvIGFjY291bnQgZm9yCisgICAgICAgIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lLgorCisy
MDEzLTA1LTI3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xMzY1NDQ4OD4gU2FmYXJpUGVyZk1vbml0b3I6IFN1cHBvcnQgYWNjZXB0
aW5nIHNpbmdsZS12YWx1ZSByZXN1bHRzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9u
ZGVsbG8uCisKKyAgICAgICAgU3VwcG9ydCB0aGF0LiBJdCdzIG9uZSBsaW5lIGNoYW5nZS4KKwor
ICAgICAgICAqIHB1YmxpYy9hcGkvcmVwb3J0LnBocDoKKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nv
ci5yZWN1cnNpdmVseV9lbnN1cmVfdGVzdHMpOiBXaGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIHZh
bHVlLCB3cmFwIGl0IGluc2lkZSBhbiBhcnJheQorICAgICAgICB0byBtYXRjaCB0aGUgY29udmVu
dGlvbiBhc3N1bWVkIGVsc2V3aGVyZS4KKyAgICAgICAgKiB0ZXN0cy9hcGktcmVwb3J0LmpzOiBB
ZGRlZCBhIHRlc3QgY2FzZS4KKworMjAxMy0wNS0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBTYWZhcmlQZXJmTW9uaXRvciBzaG93cyBwb3B1cHMgZm9yIHBv
aW50cyBvdXRzaWRlIG9mIHRoZSB2aXNpYmxlIHJlZ2lvbi4KKworICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKyAg
ICAgICAgKENoYXJ0LmNsb3Nlc3RJdGVtRm9yUGFnZVhSZXNwZWN0aW5nUGxvdE9mZnNldCk6IHJl
bmFtZWQgZnJvbSBjbG9zZXN0SXRlbUZvclBhZ2VYLgorICAgICAgICAoQ2hhcnQuYXR0YWNoKTog
QWx3YXlzIHVzZSBjbG9zZXN0SXRlbUZvclBhZ2VYUmVzcGVjdGluZ1Bsb3RPZmZzZXQgdG8gd29y
ayBhcm91bmQgdGhlIGZhY3QgZmxvdAorICAgICAgICBtYXkgcmV0dXJuIGFuIGl0ZW0gdW5kZXJu
ZWF0aCB5LWF4aXMgbGFiZWxzLgorCisyMDEzLTA1LTI2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgorCisgICAgICAgIFR3ZWFrIHRoZSBDU1MgYSBsaXR0bGUgdG8gYXZvaWQgdGhl
IHRlc3QgbmFtZSBvdmVybGFwcGluZyB3aXRoIHRoZSBzdW1tYXJ5IHRhYmxlLgorCisgICAgICAg
ICogcHVibGljL2luZGV4Lmh0bWw6CisKKzIwMTMtMDUtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZC4gRml4IHRoZSB0eXBvLiBUaGUgYW5j
aG9yIGVsZW1lbnQgc2hvdWxkIHdyYXAgdGhlIHN2ZyBlbGVtZW50LCBub3QgdGhlIG90aGVyIHdh
eSBhcm91bmQuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKworMjAxMy0wNS0yNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTM5OTIyNjY+IFNob3VsZCBiZSBhIHRvZ2dsZSB0byBzaG93IGVudGlyZSBZLWF4aXMgcmFu
Z2UKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzOTkyMjcxPiBTaG91bGQgc2NhbGUgWSBheGlz
IHRvIGluY2x1ZGUgZXJyb3IgcmFuZ2VzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9u
ZGVsbG8uCisKKyAgICAgICAgQWRkIHRoZSBmZWF0dXJlLiBBbHNvIG1hZGUgYWRqdXN0IHktYXhp
cyByZXNwZWN0IGNvbmZpZGVuY2UgaW50ZXJ2YWwgZGVsdGEgc28gdGhhdCB0aGUgZ3JheSBzaGFk
ZSBiZWhpbmQKKyAgICAgICAgdGhlIG1haW4gZ3JhcGggZG9lc24ndCBnbyBvdXRzaWRlIHRoZSBn
cmFwaCBldmVuIHdoZW4gdGhlIHktYXhpcyBpcyBhZGp1c3RlZC4KKworICAgICAgICAqIGRhdGFi
YXNlL2NvbmZpZy5qc29uOgorICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgorICAgICAgICAo
Q2hhcnQpOiBBZGQgYSBTVkcgYXJyb3cgdG8gdG9nZ2xlIHktYXhpcyBtb2RlLCBhbmQgYmluZCBj
bGljayBvbiB0aGUgYXJyb3cgdG8gdG9nZ2xlWUF4aXMoKS4KKyAgICAgICAgKENoYXJ0LmF0dGFj
aE1haW5QbG90KTogUmVzcGVjdCBzaG91bGRTdGFydFlBeGlzQXRaZXJvLgorICAgICAgICAoQ2hh
cnQudG9nZ2xlWUF4aXMpOiBUb2dnbGUgdGhlIHktYXhpcyBtb2RlIG9mIHRoaXMgY2hhcnQgYnkg
dG9nZ2xpbmcgc2hvdWxkU3RhcnRZQXhpc0F0WmVybyBhbmQgY2FsbGluZworICAgICAgICBhdHRh
Y2hNYWluUGxvdC4KKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanM6CisgICAg
ICAgIChQZXJmVGVzdFJlc3VsdC5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk6CisgICAgICAgIChQ
ZXJmVGVzdFJlc3VsdC51bnNjYWxlZENvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTogRXh0cmFjdGVk
LgorICAgICAgICAoUGVyZlRlc3RSdW5zLm1pbik6IFRha2UgY29uZmlkZW5jZSBpbnRlcnZhbCBk
ZWx0YSBpbnRvIGFjY291bnQuCisgICAgICAgIChQZXJmVGVzdFJ1bnMubWF4KTogRGl0dG8uCisg
ICAgICAgIChQZXJmVGVzdFJ1bnMuaGFzQ29uZmlkZW5jZUludGVydmFsKTogTm90IHN1cmUgd2h5
IHRoaXMgZnVuY3Rpb24gd2FzIGNoZWNraW5nIHRoZSB0eXBlb2YuIEp1c3QgdXNlIGlzTmFOLgor
CisyMDEzLTA0LTI2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IEEgYnVpbGQgZml4IG9mIHRoZSBwcmV2aW91cy4gRG9uJ3QgbG9vayBmb3IgYSB0ZXN0IHdpdGgg
TlVMTCBwYXJlbnQgYmVjYXVzZSBOVUxMICE9IE5VTEwgaW4gb3VyIGJlbG92ZWQgU1FMLgorCisg
ICAgICAgICogcHVibGljL2FwaS9yZXBvcnQucGhwOgorICAgICAgICAoUmVwb3J0UHJvY2Vzc29y
OjpyZWN1cnNpdmVseV9lbnN1cmVfdGVzdHMpOgorICAgICAgICAqIHRlc3RzL2FwaS1yZXBvcnQu
anM6IEFkZGVkIGEgdGVzdC4KKworMjAxMy0wNC0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeGVzLgorCisgICAgICAgICog
cHVibGljL2FwaS9yZXBvcnQucGhwOgorICAgICAgICAoUmVwb3J0UHJvY2Vzc29yOjpwcm9jZXNz
KTogRXhwbGljaXRseSBleGl0IHdpdGggZXJyb3Igd2hlbiBidWlsZGVyIG5hbWUgb3IgYnVpbGQg
dGltZSBpcyBtaXNzaW5nLgorICAgICAgICBBbHNvLCB0b2xlcmF0ZSByZXBvcnRzIHdpdGhvdXQg
YW55IHJldmlzaW9uIGluZm9ybWF0aW9uLgorCisgICAgICAgIChSZXBvcnRQcm9jZXNzb3I6OnJl
Y3Vyc2l2ZWx5X2Vuc3VyZV90ZXN0cyk6IFdoZW4gbG9va2luZyBmb3IgYSB0ZXN0LCBkb24ndCBm
b3JnZXQgdG8gY29tcGFyZSBpdHMKKyAgICAgICAgcGFyZW50IHRlc3QuCisKKyAgICAgICAgKiB0
ZXN0cy9hcGktcmVwb3J0LmpzOiBBZGRlZCBmZXcgdGVzdCBjYXNlcy4KKworMjAxMy0wNC0yNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBDb21taXQgYW5vdGhl
ciBjaGFuZ2UgdGhhdCB3YXMgc3VwcG9zZWQgdG8gYmUgY29tbWl0dGVkIGluIHI1MDMzMS4KKwor
ICAgICAgICAqIHJ1bi10ZXN0cy5qczoKKyAgICAgICAgKFRlc3RFbnZpcm9ubWVudC50aGlzLnBv
c3RKU09OKToKKyAgICAgICAgKFRlc3RFbnZpcm9ubWVudC50aGlzLmh0dHBHZXQpOgorICAgICAg
ICAoc2VuZEh0dHBSZXF1ZXN0KToKKworMjAxMy0wNC0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBDb21taXQgdGhlIHJlbWFpbmluZyBmaWxlcy4KKworICAg
ICAgICAqIHB1YmxpYy9hZG1pbi9yZWdlbmVyYXRlLW1hbmlmZXN0LnBocDoKKyAgICAgICAgKiBw
dWJsaWMvaW5jbHVkZS9hZG1pbi1oZWFkZXIucGhwOgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRl
L2pzb24taGVhZGVyLnBocDoKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9tYW5pZmVzdC5waHA6
CisgICAgICAgICogcnVuLXRlc3RzLmpzOgorICAgICAgICAoVGVzdEVudmlyb25tZW50LnRoaXMu
cG9zdEpTT04pOgorICAgICAgICAoVGVzdEVudmlyb25tZW50LnRoaXMuaHR0cEdldCk6CisgICAg
ICAgIChzZW5kSHR0cFJlcXVlc3QpOgorCisyMDEzLTAzLTE1ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaVBlcmZNb25pdG9yOiBBZGQgc29tZSB0ZXN0
cyBmb3IgYWRtaW4vcmVnZW5lcmF0ZS1tYW5pZmVzdC4KKworICAgICAgICBSZXZpZXdlZCBieSBS
aWNreSBNb25kZWxsby4KKworICAgICAgICBBZGRlZCBzb21lIHRlc3RzIGZvciBhZG1pbi9yZWdl
bmVyYXRlLW1hbmlmZXN0LgorCisgICAgICAgICogcHVibGljL2FkbWluL3JlZ2VuZXJhdGUtbWFu
aWZlc3QucGhwOiBVc2UgcmVxdWlyZV9vbmNlIGluc3RlYWQgb2YgcmVxdWlyZS4KKyAgICAgICAg
KiBwdWJsaWMvaW5jbHVkZS9hZG1pbi1oZWFkZXIucGhwOiBEaXR0by4KKyAgICAgICAgKiBwdWJs
aWMvaW5jbHVkZS9qc29uLWhlYWRlci5waHA6IERpdHRvLgorCisgICAgICAgICogcHVibGljL2lu
Y2x1ZGUvbWFuaWZlc3QucGhwOgorICAgICAgICAoTWFuaWZlc3RHZW5lcmF0b3I6OmJ1aWxkZXJz
KTogUmVtb3ZlZCBhIHJlZmVyZW5jZSB0byBhIG5vbi1leGlzdGVudCB2YXJpYWJsZS4KKyAgICAg
ICAgV2hlbiB0aGVyZSBhcmUgbm8gYnVpbGRlcnMsIHNpbXBseSByZXR1cm4gYW4gZW1wdHkgYXJy
YXkuCisKKyAgICAgICAgKiBydW4tdGVzdHMuanM6CisgICAgICAgIChUZXN0RW52aXJvbm1lbnQu
cG9zdEpTT04pOgorICAgICAgICAoVGVzdEVudmlyb25tZW50Lmh0dHBHZXQpOiBBZGRlZC4KKyAg
ICAgICAgKHNlbmRIdHRwUmVxdWVzdCk6IFJlbmFtZWQgZnJvbSBwb3N0SHR0cFJlcXVlc3QgYXMg
aXQgbm93IHRha2VzIG1ldGhvZCBhcyBhbiBhcmd1bWVudC4KKworICAgICAgICAqIHRlc3RzL2Fk
bWluLXJlZ2VuZXJhdGUtbWFuaWZlc3QuanM6IEFkZGVkIHdpdGggYSBidW5jaCBvZiB0ZXN0IGNh
c2VzLgorCisyMDEzLTAzLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFVucmV2aWV3ZWQuIEFkZGVkIG1vcmUgdGVzdHMgZm9yIGFwaS9yZXBvcnQgdG8gZW5z
dXJlIGl0IGNyZWF0ZXMgdGVzdHMsIG1ldHJpY3MsIHRlc3RfcnVucywKKyAgICAgICAgYW5kIHJ1
bl9pdGVyYXRpb25zLiBBbHNvIGZpeGVkIGEgdHlwbyBpbiByZXBvcnQucGhwIGZvdW5kIGJ5IG5l
dyB0ZXN0cy4KKworICAgICAgICAqIHB1YmxpYy9hcGkvcmVwb3J0LnBocDoKKyAgICAgICAgKG1h
aW4pOiBGaXggYSBidWcgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB3cmFwIG51bWJlcnMg
d2l0aCBkb3VibGUgcXVvdGF0aW9ucy4KKyAgICAgICAgKiB0ZXN0cy9hcGktcmVwb3J0LmpzOiBB
ZGRlZCBtb3JlIHRlc3QgY2FzZXMuCisKKzIwMTMtMDMtMTIgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMzk5MDM4PiBTYWZhcmlQ
ZXJmTW9uaXRvcjogTmVlZCBpbnRlZ3JhdGlvbiB0ZXN0cworCisgICAgICAgIFJldmlld2VkIGJ5
IFJpY2t5IE1vbmRlbGxvLgorCisgICAgICAgIEFkZCBhIHRlc3QgcnVubmVyIHNjcmlwdCBhbmQg
c29tZSBzaW1wbGUgdGVzdCBjYXNlcy4KKworICAgICAgICAqIGRhdGFiYXNlL2NvbmZpZy5qc29u
OiBBZGRlZCB0aGUgY29uZmlndXJhdGlvbiBmb3IgInRlc3RTZXJ2ZXIiLgorICAgICAgICAqIGRh
dGFiYXNlL2RhdGFiYXNlLWNvbW1vbi5qczoKKyAgICAgICAgKHBhdGhUb1Rlc3RzKTogQWRkZWQu
CisgICAgICAgICogcnVuLXRlc3RzLmpzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorCisgICAg
ICAgIChjb25maXJtVXNlcldhbnRzRGF0YWJhc2VUb0JlSW5pdGlhbGl6ZWRJZk5lZWRlZCk6IENo
ZWNrcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbm9uLWVtcHR5IHRhYmxlcywKKyAgICAgICAgYW5k
IGlmIHRoZXJlIGFyZSwgYXNrcyB0aGUgdXNlciBpZiBpdOKAmXMgb2theSB0byBkZWxldGUgYWxs
IG9mIHRoZSBkYXRhIGNvbnRhaW5lZCB0aGVyZWluLgorICAgICAgICAoY29uZmlybVVzZXJXYW50
c0RhdGFiYXNlVG9CZUluaXRpYWxpemVkSWZOZWVkZWQuZmluZE5vbkVtcHR5VGFibGUpOiBGaW5k
IGEgdGFibGUgd2l0aCBub24temVybworICAgICAgICBudW1iZXIgb2Ygcm93cy4KKyAgICAgICAg
KGNvbmZpcm1Vc2VyV2FudHNEYXRhYmFzZVRvQmVJbml0aWFsaXplZElmTmVlZGVkLmZldGNoVGFi
bGVOYW1lcyk6IEZldGNoIHRoZSBsaXN0IG9mIGFsbCB0YWJsZXMKKyAgICAgICAgaW4gdGhlIGN1
cnJlbnQgZGF0YWJhc2UgdXNpbmcgUG9zdGdyZVNRTCdzIGluZm9ybWF0aW9uX3NjaGVtYS4KKyAg
ICAgICAgKGFza1llc09yTm9RdWVzdGlvbik6CisKKyAgICAgICAgKGluaXRpYWxpemVEYXRhYmFz
ZSk6IEV4ZWN1dGVzIGluaXQtZGF0YWJhc2Uuc3FsLiBJdCBkcm9wcyBhbGwgdGFibGVzIGFuZCBj
cmVhdGVzIHRoZW0gYWdhaW4uCisKKyAgICAgICAgKFRlc3RFbnZpcm9ubWVudCk6IFRoZSBnbG9i
YWwgb2JqZWN0IGV4cG9zZWQgaW4gdGVzdHMuIFByb3ZpZGVzIHZhcmlvdXMgdXRpbGl0eSBmdW5j
dGlvbnMuCisgICAgICAgIChUZXN0RW52aXJvbm1lbnQuYXNzZXJ0KTogRXhwb3NlcyBhc3NlcnQg
dG8gdGVzdHMuCisgICAgICAgIChUZXN0RW52aXJvbm1lbnQuY29uc29sZSk6IEV4cG9zZXMgY29u
c29sZSB0byB0ZXN0cy4KKyAgICAgICAgKFRlc3RFbnZpcm9ubWVudC5kZXNjcmliZSk6IEFkZHMg
YSBkZXNjcmlwdGlvbi4KKyAgICAgICAgKFRlc3RFbnZpcm9ubWVudC5pdCk6IEFkZHMgYSB0ZXN0
IGNhc2UuCisgICAgICAgIChUZXN0RW52aXJvbm1lbnQucG9zdEpTT04pOgorICAgICAgICAoVGVz
dEVudmlyb25tZW50LnF1ZXJ5QW5kRmV0Y2hBbGwpOgorICAgICAgICAoVGVzdEVudmlyb25tZW50
LnNoYTI1Nik6CisgICAgICAgIChUZXN0RW52aXJvbm1lbnQubm90aWZ5RG9uZSk6IEVuZHMgdGhl
IGN1cnJlbnQgdGVzdCBjYXNlLgorCisgICAgICAgIChwb3N0SHR0cFJlcXVlc3QpOgorCisgICAg
ICAgIChUZXN0Q29udGV4dCk6IEFuIG9iamVjdCBjcmVhdGVkIGZvciBlYWNoIHRlc3QgY2FzZS4g
Q29uY2VwdHVhbGx5LCB0aGlzIG9iamVjdCBpcyBhbHdheXMgb24KKyAgICAgICAgInN0YWNrIiB3
aGVuIGEgdGVzdCBjYXNlIGlzIHJ1bm5pbmcuIFRlc3RFbnZpcm9ubWVudCBhbmQgYW4gdW5jYXVn
aHRFeGNlcHRpb24gaGFuZGxlciBhY2Nlc3NlcworICAgICAgICB0aGlzIG9iamVjdCB2aWEgY3Vy
cmVudFRlc3RDb250ZXh0LgorICAgICAgICAoVGVzdENvbnRleHQuZGVzY3JpcHRpb24pOgorICAg
ICAgICAoVGVzdENvbnRleHQuZG9uZSk6CisgICAgICAgIChUZXN0Q29udGV4dC5sb2dFcnJvcik6
CisKKyAgICAgICAgKiB0ZXN0czogQWRkZWQuCisgICAgICAgICogdGVzdHMvYXBpLXJlcG9ydC5q
czogQWRkZWQgc29tZSBiYXNpYyB0ZXN0cyBmb3IgL2FwaS9yZXBvcnQucGhwLgorCisyMDEzLTAz
LTA4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3
ZWQgYWRtaW5pc3RyYXRpdmUgcGFnZSBmaXguIE1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGFs
bCBjb25maWd1cmF0aW9uIGZyb20gZGFzaGJvYXJkLgorCisgICAgICAgIFRoZSBwcm9ibGVtIHdh
cyB0aGF0IHdlIHdlcmUgZGV0ZWN0aW5nIHdoZXRoZXIgd2UncmUgdXBkYXRpbmcgZGFzaGJvYXJk
IG9yIG5vdCBieSBjaGVja2luZworICAgICAgICB0aGUgZXhpc3RlbmNlIG9mIG1ldHJpY19jb25m
aWd1cmF0aW9ucyBpbiAkX1BPU1QgYnV0IHRoaXMga2V5IGRvZXNuJ3QgZXhpc3Qgd2hlbiB3ZSdy
ZSByZW1vdmluZworICAgICAgICBhbGwgY29uZmlndXJhdGlvbnMuIFVzZSBzZXBhcmF0ZSAnZGFz
aGJvYXJkJyBhY3Rpb24gdG8gZXhlY3V0ZSB0aGUgY29kZSBldmVuIHdoZW4KKyAgICAgICAgbWV0
cmljX2NvbmZpZ3VyYXRpb25zIGlzIGVtcHR5LgorCisgICAgICAgICogcHVibGljL2FkbWluL3Rl
c3RzLnBocDoKKworMjAxMy0wMy0wOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBTYWZhcmlQZXJmTW9uaXRvcjogRXh0cmFjdCBhIGNsYXNzIHRvIGFnZ3JlZ2F0
ZSBhbmQgc3RvcmUgdmFsdWVzIGZyb20gUmVwb3J0UHJvY2Vzc29yLgorCisgICAgICAgIFJldmll
d2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFjdHMgVGVz
dFJ1bnNHZW5lcmF0b3IsIHdoaWNoIGFnZ3JlZ2F0ZXMgYW5kIGNvbXB1dGUgY2FjaGVzIG9mIHZh
bHVlcywKKyAgICAgICAgZnJvbSBSZXBvcnRQcm9jZXNzb3IgYXMgYSBwcmVwYXJhdGlvbiB0byBy
ZXBsYWNlIGRlcHJlY2F0ZWQgYWdncmVnYXRlLmpzLgorCisgICAgICAgICogcHVibGljL2FwaS9y
ZXBvcnQucGhwOgorICAgICAgICAoUmVwb3J0UHJvY2Vzc29yOjpleGl0X3dpdGhfZXJyb3IpOiBN
b3ZlZC4KKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6cHJvY2Vzcyk6IFVzZSB0aGUgZXh0cmFj
dGVkIFRlc3RSdW5zR2VuZXJhdG9yLgorICAgICAgICAoVGVzdFJ1bnNHZW5lcmF0b3IpOiBBZGRl
ZC4KKyAgICAgICAgKFRlc3RSdW5zR2VuZXJhdG9yOjpleGl0X3dpdGhfZXJyb3IpOiBDb3BpZWQg
ZnJvbSBSZXBvcnRQcm9jZXNzb3IuCisgICAgICAgIChUZXN0UnVuc0dlbmVyYXRvcjo6YWRkX2Fn
Z3JlZ2F0ZWRfbWV0cmljKTogTW92ZWQuCisgICAgICAgIChUZXN0UnVuc0dlbmVyYXRvcjo6YWRk
X3ZhbHVlc19mb3JfYWdncmVnYXRpb24pOiBNb3ZlZC4gTWFkZSBwdWJsaWMuCisgICAgICAgIChU
ZXN0UnVuc0dlbmVyYXRvcjo6YWdncmVnYXRlKTogTW92ZWQuIE1hZGUgcHVibGljLgorICAgICAg
ICAoVGVzdFJ1bnNHZW5lcmF0b3I6OmFnZ3JlZ2F0ZV9jdXJyZW50X3Rlc3RfbGV2ZWwpOiBNb3Zl
ZC4KKyAgICAgICAgKFRlc3RSdW5zR2VuZXJhdG9yOjp0ZXN0X3ZhbHVlX2xpc3RfdG9fdmFsdWVz
X2J5X2l0ZXJhdGlvbnMpOiBNb3ZlZC4KKyAgICAgICAgKFRlc3RSdW5zR2VuZXJhdG9yOjpldmFs
dWF0ZV9leHByZXNzaW9uc19ieV9ub2RlKTogTW92ZWQuCisgICAgICAgIChUZXN0UnVuc0dlbmVy
YXRvcjo6Y29tcHV0ZV9jYWNoZXMpOiBNb3ZlZC4gTWFkZSBwdWJsaWMuCisgICAgICAgIChUZXN0
UnVuc0dlbmVyYXRvcjo6YWRkX3ZhbHVlc190b19jb21taXQpOiBNb3ZlZC4gTWFkZSBwdWJsaWMu
CisgICAgICAgIChUZXN0UnVuc0dlbmVyYXRvcjo6Y29tbWl0KTogTW92ZWQuIE1hZGUgcHVibGlj
LiBBbHNvIHRha2VzIGJ1aWxkX2lkIGFuZCBwbGF0Zm9ybV9pZC4KKyAgICAgICAgKFRlc3RSdW5z
R2VuZXJhdG9yOjpyb2xsYmFja193aXRoX2Vycm9yKTogTW92ZWQuCisKKzIwMTMtMDMtMDggIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2FmYXJpUGVyZk1vbml0
b3I6IEFkbWluaXN0cmF0aXZlIHBhZ2VzIHNob3VsZCB1cGRhdGUgbWFuaWZlc3QgSlNPTiBhcyBu
ZWVkZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmVteSBEZW1hcmVzdC4KKworICAgICAgICBS
ZWdlbmVyYXRlIHRoZSBtYW5pZmVzdCBmaWxlIHdoZW4gdXBkYXRpbmcgZmllbGRzIG9yIGFkZGlu
ZyBuZXcgaXRlbXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4KKyAgICAgICAgdGhlIG1hbmlmZXN0IEpT
T04uCisKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vYnVnLXRyYWNrZXJzLnBocDoKKyAgICAgICAg
KiBwdWJsaWMvYWRtaW4vYnVpbGRlcnMucGhwOgorICAgICAgICAqIHB1YmxpYy9hZG1pbi9yZWdl
bmVyYXRlLW1hbmlmZXN0LnBocDoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vcmVwb3NpdG9yaWVz
LnBocDoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vdGVzdHMucGhwOgorICAgICAgICAqIHB1Ymxp
Yy9pbmNsdWRlL2FkbWluLWhlYWRlci5waHA6CisgICAgICAgIChyZWdlbmVyYXRlX21hbmlmZXN0
KTogRXh0cmFjdGVkIGZyb20gcmVnZW5lcmF0ZS1tYW5pZmVzdC5waHAuCisKKzIwMTMtMDMtMDgg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZCBmaXggZm9yIG1lbW9yeSB0ZXN0IHJlc3VsdHMuCisKKyAgICAgICAgTWFrZSBhZ2dyZWdh
dGlvbiB3b3JrIGluIHRoZSBuZXN0ZWQgY2FzZXMuIFdlIHN0YXJ0IGZyb20gdGhlICJsZWFmIiB0
ZXN0cyBhbmQgbW92ZSBvdXIgd2F5cyB1cCwKKyAgICAgICAgYWdncmVnYXRpbmcgYXQgZWFjaCBs
ZXZlbC4KKworICAgICAgICAqIHB1YmxpYy9hcGkvcmVwb3J0LnBocDoKKyAgICAgICAgKFJlcG9y
dFByb2Nlc3Nvcjo6cmVjdXJzaXZlbHlfZW5zdXJlX3Rlc3RzKToKKyAgICAgICAgKFJlcG9ydFBy
b2Nlc3Nvcjo6YWRkX2FnZ3JlZ2F0ZWRfbWV0cmljKTogUmVuYW1lZCBmcm9tIGVuc3VyZV9hZ2dy
ZWdhdGVkX21ldHJpYy4KKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6YWRkX3ZhbHVlc19mb3Jf
YWdncmVnYXRpb24pOgorICAgICAgICAoUmVwb3J0UHJvY2Vzc29yOjphZ2dyZWdhdGUpOgorICAg
ICAgICAoUmVwb3J0UHJvY2Vzc29yOjphZ2dyZWdhdGVfY3VycmVudF90ZXN0X2xldmVsKTogRXh0
cmFjdGVkIGZyb20gYWdncmVnYXRlLgorCisyMDEzLTAzLTAyICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEJ1aWxkIGZpeGVzLiBpdGVyYXRpb25fY291bnRfY2Fj
aGUgc2hvdWxkIGJlIHRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIGluIGFsbCBpdGVyYXRpb24g
Z3JvdXAsCisgICAgICAgIG5vdCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbiBncm91cHMuIEFsc28s
IGRvbid0IHNldCBncm91cCBudW1iZXIgd2hlbiB0aGUgZW50aXJlIHJ1biBiZWxvbmdzCisgICAg
ICAgIGEgc2luZ2xlIGl0ZXJhdGlvbiBncm91cC4KKworICAgICAgICAqIHB1YmxpYy9hcGkvcmVw
b3J0LnBocDoKKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6Y29tbWl0KToKKworMjAxMy0wMy0w
MSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTYWZhcmlQZXJm
TW9uaXRvcjogSW50cm9kdWNlIGl0ZXJhdGlvbiBncm91cHMKKworICAgICAgICBSZXZpZXdlZCBi
eSBSZW15IERlbWFyZXN0LgorCisgICAgICAgIEluIFdlYktpdCBsYW5kLCB3ZSdyZSBnb2luZyB0
byB1c2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIER1bXBSZW5kZXJUcmVlIG9yIFdlYktpdFRlc3RS
dW5uZXIgdG8gYW1vcnRpemUKKyAgICAgICAgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgdmFyaWFu
Y2VzIHRvIGdldCBtb3JlIHN0YWJsZSByZXN1bHRzLiBBbmQgaXQncyBkZXNpcmFibGUgdG8ga2Vl
cCB0cmFjayBvZgorICAgICAgICB0aGUgaW5zdGFuY2Ugb2YgRHVtcFJlbmRlclRyZWUgb3IgV2Vi
S2l0VGVzdFJ1bm5lciB1c2VkIHRvIGdlbmVyYXRlIGVhY2ggaXRlcmF0aW9uIHZhbHVlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyAiaXRlcmF0aW9uIGdyb3VwcyIgdG8ga2VlcCB0
cmFjayBvZiB0aGlzIGV4dHJhIGluZm9ybWF0aW9uLgorCisgICAgICAgIEluc3RlYWQgb2YgcmVj
ZWl2aW5nIGEgZmxhdCBhcnJheSBvZiBpdGVyYXRpb24gdmFsdWVzLCB3ZSBjYW4gbm93IHJlY2Vp
dmUgYSB0d28gZGltZW5zaW9uYWwgYXJyYXkgd2hlcmUKKyAgICAgICAgdGhlIG91dGVyIGFycmF5
IGRlbm90ZXMgaXRlcmF0aW9uIGdyb3VwcyBhbmQgZWFjaCBpbm5lciBhcnJheSBjb250YWlucyBp
dGVyYXRpb24gdmFsdWVzIGZvciBlYWNoIGdyb3VwLgorCisKKyAgICAgICAgKiBkYXRhYmFzZS9p
bml0LWRhdGFiYXNlLnNxbDogQWRkIGl0ZXJhdGlvbl9ncm91cCBjb2x1bW4uCisgICAgICAgICog
cHVibGljL2FwaS9yZXBvcnQucGhwOgorICAgICAgICAoUmVwb3J0UHJvY2Vzc29yOjpyZWN1cnNp
dmVseV9lbnN1cmVfdGVzdHMpOiBBbHdheXMgdXNlIHRoZSB0d28gZGltZW5zaW9uYWwgYXJyYXkg
aW50ZXJuYWxseS4KKworICAgICAgICAoUmVwb3J0UHJvY2Vzc29yOjphZ2dyZWdhdGUpOiB0ZXN0
X3ZhbHVlX2xpc3RfdG9fdmFsdWVzX2J5X2l0ZXJhdGlvbnMgbm93IHJldHVybnMgYW4gYXNzb2Np
YXRpdmUgYXJyYXkKKyAgICAgICAgY29udGFpbnMgdGhlIGxpc3Qgb2YgdmFsdWVzIGluZGV4ZWQg
YnkgdGhlIGl0ZXJhdGlvbiBvcmRlciBhbmQgZ3JvdXAgc2l6ZXMuIFN0b3JlIHRoZSBncm91cCBz
aXplIHNvCisgICAgICAgIHRoYXQgd2UgY2FuIHJlc3RvcmUgdGhlIGl0ZXJhdGlvbiBncm91cHMg
YmVmb3JlIHBhc3NpbmcgaXQgdG8gbm9kZS5qcyBhbmQgcmVzdG9yZSB0aGVtIGxhdGVyLgorCisg
ICAgICAgIChSZXBvcnRQcm9jZXNzb3I6OnRlc3RfdmFsdWVfbGlzdF90b192YWx1ZXNfYnlfaXRl
cmF0aW9ucyk6IEZsYXR0ZW4gaXRlcmF0aW9uIGdyb3VwcyBpbnRvIGFuIGFycmF5CisgICAgICAg
IG9mIHZhbHVlcyBhbmQgY29uc3RydWN0IGdyb3VwX3NpemUgYXJyYXkgdG8gcmVzdG9yZSB0aGUg
Z3JvdXBzIGxhdGVyIGluIFJlcG9ydFByb2Nlc3Nvcjo6YWdncmVnYXRlLgorCisgICAgICAgIEFs
c28gY2hlY2sgdGhhdCBlYWNoIGl0ZXJhdGlvbiBncm91cCBpbiBlYWNoIHN1YnRlc3QgYXJlIGNv
bnNpc3RlbnQgd2l0aCBvbmUgYW5vdGhlci4gVG8gc2VlIHdoeSB3ZSBuZWVkCisgICAgICAgIHRv
IGRvIHRoaXMsIHN1cHBvc2Ugd2UncmUgYWdncmVnYXRpbmcgdHdvIHRlc3RzIFQxIGFuZCBUMiB3
aXRoIHRoZSBmb2xsb3dpbmcgdmFsdWVzLiBUaGVuIGl0J3MgaW1wb3J0YW50CisgICAgICAgIHRo
YXQgZWFjaCBpdGVyYXRpb24gZ3JvdXAgaW4gVDEgYW5kIFQyIGhhdmUgdGhlIHNhbWUgc2l6ZToK
KyAgICAgICAgVDEgPSBbWzEsIDJdLCBbMywgNCwgNV1dCisgICAgICAgIFQyID0gW1s2LCA3XSwg
WzgsIDksIDEwXV0KKworICAgICAgICBzbyB0aGF0IHRoZSBhZ2dyZWdhdGVkIHJlc3VsdCAodGhl
IHN1bSBpbiB0aGlzIGNhc2UpIGNhbiBoYXZlIHRoZSBzYW1lIGdyb3VwcyBhcyBpbjoKKyAgICAg
ICAgVCAgPSBbWzcsIDldLCBbMTEsIDEzLCAxNV1dCisKKyAgICAgICAgSWYgc29tZSBpdGVyYXRp
b24gZ3JvdXBzIGluIFQxIGFuZCBUMiBoYWQgYSBkaWZmZXJlbnQgc2l6ZSBhcyBpbjoKKyAgICAg
ICAgVDEgPSBbWzEsIDIsIDNdLCBbNCwgNV1dCisgICAgICAgIFQyID0gW1s2LCA3XSwgWzgsIDks
IDEwXV0KKworICAgICAgICBUaGVuIGl0ZXJhdGlvbiBncm91cHMgb2YgdGhlIGFnZ3JlZ2F0ZWQg
VCBpcyBhbWJpZ3VvdXMuCisKKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6Y29tcHV0ZV9jYWNo
ZXMpOiBGbGF0dGVuIGl0ZXJhdGlvbiBncm91cHMgdG8gY29tcHV0ZSBjYWNoZXMgKGUuZy4gbWVh
biwgc3RkZXYsIGV0Yy4uLikKKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvcjo6Y29tbWl0KTogU3Rv
cmUgaXRlcmF0aW9uX2dyb3VwIHZhbHVlcy4KKworMjAxMy0wMy0wMSAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2VkLiBEZWxldGUgdGhlIG1pZ3Jh
dGlvbiB0b29sIGZvciB3ZWJraXQtcGVyZi5hcHBzcG90LmNvbSBub3cgdGhhdCB3ZSBoYXZlIHN1
Y2Nlc3NmdWxseQorICAgICAgICBtaWdyYXRlZCB0byBwZXJmLndlYmtpdC5vcmcuCisKKyAgICAg
ICAgKiBkYXRhYmFzZS9wZXJmLXdlYmtpdC1taWdyYXRvci5qczogUmVtb3ZlZC4KKworMjAxMy0w
My0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBCdWlsZCBm
aXguIERvbid0IGZvcmdldCB0byBhZGQgbWV0cmljcyBvZiB0aGUgdG9wIGxldmVsIHRlc3RzIGUu
Zy4gRHJvbWFlbzpUaW1lOkFyaXRobWV0aWMuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRt
bDoKKyAgICAgICAgKC5zaG93Q2hhcnRzKToKKworMjAxMy0wMy0wMSAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTYWZhcmlQZXJmTW9uaXRvcjogTWFrZSBpdCBw
b3NzaWJsZSB0byBhZGQgY2hhcnRzIGZvciBhbGwgc3VidGVzdHMgb3IgYWxsIHBsYXRmb3Jtcy4K
KworICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KKworICAgICAgICBJdCBpcyBv
ZnRlbiBkZXNpcmFibGUgdG8gc2VlIGNoYXJ0cyBvZiBhIGdpdmVuIHRlc3QgZm9yIGFsbCBwbGF0
Zm9ybXMsIG9yIHRvIGJlIGFibGUgdG8gc2VlCisgICAgICAgIGNoYXJ0cyBvZiBhbGwgc3VidGVz
dHMgb24gYSBnaXZlbiBwbGF0Zm9ybSB3aGVuIHRyeWluZyB0byB0cmlhZ2UgcGVyZi4gcmVncmVz
c2lvbnMuCisKKyAgICAgICAgU3VwcG9ydCB0aGlzIHVzZSBjYXNlIGJ5IGFkZGluZyB0aGUgYWJp
bGl0eSB0byBkbyBzbyBvbiB0aGUgY2hhcnRzIHBhZ2UuCisKKyAgICAgICAgQWxzbywgd2UgdXNl
ZCB0byBkaXNhYmxlIGl0ZW1zIG9uIHRoZSB0ZXN0IGxpc3QgYmFzZWQgb24gdGhlIHBsYXRmb3Jt
IGNob3Nlbi4gVGhpcyB0dXJuZWQgb3V0CisgICAgICAgIHRvIGJlIGEgYmFkIFVJIGJlY2F1c2Ug
aW4gbWFueSBzaXR1YXRpb25zIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY29tcGFyZSByZXN1bHRz
IG9mIHRoZSBzYW1lIHRlc3QKKyAgICAgICAgb24gbXVsdGlwbGUgcGxhdGZvcm1zLgorCisgICAg
ICAgIEluIHRoaXMgbmV3IFVJLCB3ZSBoYXZlIHRocmVlIHNlbGVjdCBlbGVtZW50cywgZWFjaCBv
ZiB3aGljaCBzZWxlY3RzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDEuIFRvcC1sZXZlbCB0ZXN0
IC0gVGVzdCBzdWl0ZSBzdWNoIGFzIERyb21hZW8KKyAgICAgICAgMi4gTWV0cmljIC0gUGFnZXMg
YW5kIHN1YnRlc3RzIHVuZGVyIHRoZSBzdWl0ZSBzdWNoIGFzIHd3dy53ZWJraXQub3JnIGZvciBk
b20tbW9kaWZ5OlJ1bnMKKyAgICAgICAgICAgKHdoZXJlIGRvbS1tb2RpZnkgaXMgdGhlIG5hbWUg
b2YgdGhlIHN1YnRlc3QgYW5kIFJ1bnMgaXMgYSBtZXRyaWMgaW4gdGhhdCBzdWJ0ZXN0KSBmb3Ig
RHJvbWFlby4KKyAgICAgICAgMy4gUGxhdGZvcm0gLSBNb3VudGFpbiBMaW9uLCBRdCwgZXRjLi4u
CisKKyAgICAgICAgQSB1c2VyIGNhbiBzZWxlY3QgImFsbCIgZm9yIG1ldHJpYyBhbmQgcGxhdGZv
cm0gYnV0IHdlIGRpc2FsbG93IGRvaW5nIGJvdGggYXQgb25jZSBzaW5jZSBhZGRpbmcKKyAgICAg
ICAgYWxsIG1ldHJpY3Mgb24gYWxsIHBsYXRmb3JtcyB0ZW5kcyB0byBhZGQgd2F5IHRvbyBtYW55
IGNoYXJ0cyBhbmQgaGFuZyB0aGUgYnJvd3Nlci4gSSBhbHNvIGNhbid0CisgICAgICAgIHRoaW5r
IG9mIGEgdXNlIGNhc2Ugd2hlcmUgeW91IHdhbnQgdG8gbG9vayBhdCB0aGF0IG1hbnkgY2hhcnRz
IGF0IG9uY2UuIFdlIGNhbiBzdXBwb3J0IHRoaXMgbGF0ZXIKKyAgICAgICAgaWYgdmFsaWQgdXNl
IGNhc2VzIGNvbWUgdXAuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKyAgICAgICAg
KC5zaG93Q2hhcnRzLmFkZE9wdGlvbik6IEV4dHJhY3RlZC4KKyAgICAgICAgKC5zaG93Q2hhcnRz
KTogQWRkZWQgIm1ldHJpY0xpc3QiIHRoYXQgc2hvd3MgdGhlIGxpc3Qgb2YgdGVzdCBhbmQgbWV0
cmljcyAoaW4gdGhlIGZvcm0gb2YKKyAgICAgICAgcmVsYXRpdmUgbWV0cmljcyBwYXRocyBzdWNo
IGFzICJET01XYWxrOlRpbWUiKSBmb3IgZWFjaCB0b3AtbGV2ZWwgdGVzdCBzZWxlY3RlZCBpbiB0
ZXN0TGlzdC4KKyAgICAgICAgbWV0cmljTGlzdCBoYXMgb25jaGFuZ2UgaGFuZGxlciB0aGF0IGVu
YWJsZXMvZGlzYWJsZXMgaXRlbXMgb24gcGxhdGZvcm1MaXN0LgorICAgICAgICAKKyAgICAgICAg
KGluaXQpOiBTb3J0IHRlc3RzIGFuZCB0ZXN0IG1ldHJpY3MgaGVyZSBpbnN0ZWFkIG9mIGRvaW5n
IHRoYXQgaW4gc2hvd0NoYXJ0cy4KKworMjAxMy0wMi0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMzMTY3NTY+IFNhZmFyaVBl
cmZNb25pdG9yOiB0b29sdGlwIHNob3VsZCBpbmNsdWRlIGEgbGluayB0byBidWlsZCBVUkxzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUmVteSBEZW1hcmVzdCBhbmQgUmlja3kgTW9uZGVsbG8uCisK
KyAgICAgICAgQWRkZWQgYSBoeXBlcmxpbmsgdG8gYnVpbGQgcGFnZSBpbiB0b29sdGlwcy4gUmVw
ZWF0aW5nIHRoZSBlbnRpcmUgYnVpbGQgVVJMIGluIGVhY2ggYnVpbGQKKyAgICAgICAgd2FzIGEg
YmFkIGlkZWEgYmVjYXVzZSBpdCBibG9hdHMgdGhlIHJlc3VsdGFudCBKU09OIGZpbGUgdG9vIG11
Y2guIFNvIG1vdmUgdGhlIGJ1aWxkIFVSTAorICAgICAgICB0ZW1wbGF0ZXMgdG8gdGhlIG1hbmlm
ZXN0IGZpbGUgaW5zdGVhZC4gRWFjaCBidWlsZCBub3cgb25seSBjb250YWlucyB0aGUgYnVpbGRl
ciBpZC4KKworICAgICAgICAqIHB1YmxpYy9hcGkvcnVucy5waHA6IFJlbW92ZWQgdGhlIHBhcnQg
b2YgdGhlIHF1ZXJ5IHRoYXQgam9pbmVkIGJ1aWxkZXJzIHRhYmxlLiBUaGlzCisgICAgICAgIHNw
ZWVkcyB1cCB0aGUgcXVlcnkgcXVpdGUgYSBiaXQuCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVk
ZS9tYW5pZmVzdC5waHA6CisgICAgICAgIChNYW5pZmVzdEdlbmVyYXRvcjo6Z2VuZXJhdGUpOiBH
ZW5lcmF0ZSBidWlsZGVycyBmaWVsZC4KKyAgICAgICAgKE1hbmlmZXN0R2VuZXJhdG9yOjpidWls
ZGVycyk6IEFkZGVkLiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGJ1aWxkZXIgaWRz
IHRvIGFuCisgICAgICAgIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgY29udGFpbnMgbmFtZSBhbmQg
aXRzIGJ1aWxkIFVSTCB0ZW1wbGF0ZS4KKworICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgor
ICAgICAgICAoLmJ1aWxkTGFiZWxXaXRoTGlua3MubGlua2lmeUlmTm90TnVsbCk6IFJlbmFtZWQg
ZnJvbSBsaW5raWZpZWRMYWJlbC4gVGFrZSBhIGxhYmVsIGFuZCB1cmwKKyAgICAgICAgaW5zdGVh
ZCBvZiBhIHJldmlzaW9uIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgcmV2aXNpb25z
IGFuZCBidWlsZCBwYWdlIFVSTHMgbm93LgorICAgICAgICAoLmJ1aWxkTGFiZWxXaXRoTGlua3Mp
OiBJbmNsdWRlIHRoZSBsaW5raWZpZWQgYnVpbGQgbnVtYmVyLgorCisgICAgICAgICogcHVibGlj
L2pzL2hlbHBlci1jbGFzc2VzLmpzOgorICAgICAgICAoVGVzdEJ1aWxkLmJ1aWxkZXIpOiBBZGRl
ZC4KKyAgICAgICAgKFRlc3RCdWlsZC5idWlsZE51bWJlcik6IEFkZGVkLgorICAgICAgICAoVGVz
dEJ1aWxkLmJ1aWxkVXJsKTogUmV0dXJucyB0aGUgYnVpbGQgVVJMLiBUaGUgdmFyaWFibGUgbmFt
ZSBpbiB0aGUgVVJMIHRlbXBsYXRlIGhhcyBiZWVuCisgICAgICAgIGNoYW5nZWQgZnJvbSAlcyB0
byAkYnVpbGROdW1iZXIgdG8gYmUgbW9yZSBkZXNjcmlwdGl2ZSBhbmQgY29uc2lzdGVudCB3aXRo
IG90aGVyIFVSTCB0ZW1wbGF0ZXMuCisKKzIwMTMtMDItMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgVG9vbHRpcHMgaW50ZXJmZXJlIHdpdGggdXNlciBpbnRl
cmFjdGlvbnMKKworICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAg
ICAgICAgRGlzYWJsZSB0b29sdGlwIG9uIHRoZSBkYXNoYm9hcmQgcGFnZSBzaW5jZSBncmFwaHMg
YXJlIHRvbyBzbWFsbCB0byBiZSB1c2VmdWwgdGhlcmUuCisgICAgICAgIEFsc28sIHNob3cgZ3Jh
cGhzIGZvciBvbmx5IDEwIGRheXMgYnkgZGVmYXVsdCBhcyBvcHBvc2VkIHRvIDIwLgorICAgICAg
ICBGaW5hbGx5LCBkaXNtaXNzIHRoZSBob3ZlcmluZyB0b29sdGlwIHdoZW4gbW91c2UgZW50ZXJz
IGEgInBpbm5lZCIgdG9vbHRpcC4KKworICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgorICAg
ICAgICAqIHB1YmxpYy9qcy9oZWxwZXItY2xhc3Nlcy5qczoKKworMjAxMy0wMi0yNCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBGaXggc29tZSBzZXJpb3VzIHR5
cG8uIFdlJ3JlIHN1cHBvc2VkIHRvIGJlIHVzaW5nIFNIQS0yNTYsIG5vdCBTSEEtMSB0byBoYXNo
IG91ciBwYXNzd29yZHMsCisgICAgICAgIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB3ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS4KKworICAgICAgICAqIHB1YmxpYy9hZG1pbi9idWlsZGVycy5waHA6Cisg
ICAgICAgICogcHVibGljL2FwaS9yZXBvcnQucGhwOgorCisyMDEzLTAyLTIzICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQuCisKKyAgICAgICAg
QWRkIGEgbWlzc2luZyBjb25zdHJhaW50IG9uIGJ1aWxkcyB0YWJsZS4gRm9yIGEgZ2l2ZW4gYnVp
bGRlciwgdGhlcmUgc2hvdWxkIGJlIGV4YWN0bHkKKyAgICAgICAgb25lIGJ1aWxkIGZvciBhIGdp
dmVuIGJ1aWxkIG51bWJlci4KKworICAgICAgICBBbHNvIGFkZCByZXBvcnRfY29tbWl0dGVkX2F0
IHRvIHJlcG9ydHMgdGFibGUgdG8gcmVjb3JkIHRoZSB0aW1lIGF0IHdoaWNoIGEgZ2l2ZW4gcmVw
b3J0CisgICAgICAgIHdhcyBwcm9jZXNzZWQgYW5kIHRlc3RfcnVucyBhbmQgcnVuX2l0ZXJhdGlv
bnMgcm93cyB3ZXJlIGNvbW1pdHRlZCBpbnRvIHRoZSBkYXRhYmFzZS4KKworICAgICAgICAqIGRh
dGFiYXNlL2NvbmZpZy5qc29uOgorICAgICAgICAqIHB1YmxpYy9hcGkvcmVwb3J0LnBocDoKKwor
MjAxMy0wMi0yMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBV
bnJldmlld2VkLiBBZGQgbW9yZSBjaGVja3MgZm9yIGVtcHR5IFNRTCBxdWVyeSByZXN1bHRzLgor
CisgICAgICAgICogcHVibGljL2luY2x1ZGUvbWFuaWZlc3QucGhwOgorCisyMDEzLTAyLTIxICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vcmUgYnVpbGQgZml4
ZXMgb24gcGVyZi53ZWJraXQub3JnLgorCisgICAgICAgICogcHVibGljL2FwaS9ydW5zLnBocDog
TWFrZSBQb3N0Z3JlU1FMIGhhcHBpZXIuCisgICAgICAgICogcHVibGljL2luY2x1ZGUvbWFuaWZl
c3QucGhwOiBEb24ndCBhc3N1bWUgd2UgYWx3YXlzIGhhdmUgYnVnIHRyYWNrZXJzLgorCisyMDEz
LTAyLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFy
aVBlcmZNb25pdG9yOiBpbmRleC5odG1sIGR1cGxpY2F0ZXMgdGhlIGNvZGUgaW4gUGVyZlRlc3RS
dW5zIHRvIGRldGVybWluZSBzbWFsbGVySXNCZXR0ZXIKKyAgICAgICAgYW5kIGZpeCBvdGhlciBt
aXNjZWxsYW5lb3VzIFVJIGJ1Z3MuCisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgU2ltb24g
RnJhc2VyLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg
c21hbGxlciB2YWx1ZSBpcyBiZXR0ZXIgb3Igbm90IGZvciBhIGdpdmVuIHRlc3QgaW4gaW5kZXgu
aHRtbAorICAgICAgICBpbiB0aGUgZmF2b3Igb2YgdXNpbmcgdGhhdCBvZiBQZXJmVGVzdFJ1bnMu
CisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9tYW5pZmVzdC5waHA6IEZpeGVkIGEgdHlwby4K
KyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKyAgICAgICAgKENoYXJ0KToKKyAgICAgICAg
KENoYXJ0LmF0dGFjaE1haW5QbG90KTogRml4ZWQgYSBidWcgdG8gYWNjZXNzIHByZXZpb3VzUG9p
bnQubGVmdCBldmVuIHdoZW4gcHJldmlvdXNQb2ludCBpcyBudWxsLgorCisgICAgICAgICogcHVi
bGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorICAgICAgICAoUGVyZlRlc3RSdW5zKTogQWRkZWQg
RW5kQWxsb2NhdGlvbnMsIE1heEFsbG9jYXRpb25zLCBhbmQgTWVhbkFsbG9jYXRpb25zLgorCisg
ICAgICAgIChQZXJmVGVzdFJ1bnMuY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCk6IFdoZW4g
dGhlIG1lYW4gaXMgYWxtb3N0IDEwLDAwMCB1bml0cywgd2UgbWF5IGVuZCB1cAorICAgICAgICB1
c2luZyA1IGRpZ2l0cyBpbnN0ZWFkIG9mIDQsIHJlc3VsdGluZyBpbiB0aGUgdXNlIG9mIHNjaWVu
dGlmaWMgbm90YXRpb25zLiBHbyB1cCB0byB0aGUgbmV4dCB1bml0CisgICAgICAgIGF0IHJvdWdo
bHkgMiwwMDAgdW5pdHMgdG8gYXZvaWQgdGhpcy4KKworICAgICAgICAoVG9vbHRpcC5zaG93KTog
U2hvdyB0aGUgdG9vbHRpcCBldmVuIHdoZW4gdGhlIG5ldyBjb250ZW50IGlzIGlkZW50aWNhbCB0
byB0aGUgcHJldmlvdXMgY29udGVudC4KKyAgICAgICAgVGhlIG9ubHkgdGhpbmcgd2UgY2FuIGF2
b2lkIGlzIGlubmVySFRNTC4KKworMjAxMy0wMi0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBBbm90aGVyIGJ1aWxkIGZpeC4gVGhlIHBhdGggdG8gbm9kZSBp
cyAvdXNyL2xvY2FsL2Jpbi9ub2RlLCBub3QgL3Vzci9iaW4vbG9jYWwvbm9kZQorCisgICAgICAg
ICogcHVibGljL2luY2x1ZGUvZXZhbHVhdG9yLmpzOgorCisyMDEzLTAyLTIxICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI2Nzg5
OD4gU2FmYXJpUGVyZk1vbml0b3I6IEJ1ZyB0cmFja2VycyBzaG91bGQgYmUgY29uZmlndXJhYmxl
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmVteSBEZW1hcmVzdC4KKworICAgICAgICBNYWRlIHRo
ZSBsaXN0IG9mIGJ1ZyB0cmFja2VycyBjb25maWd1cmFibGUuIE5hbWVseSwgZWFjaCBidWcgdHJh
Y2tlciBjYW4gYmUgYWRkZWQgaW4KKyAgICAgICAgYWRtaW4vYnVnLXRyYWNrZXJzLnBocCBhbmQg
Y2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSByZXBvc2l0b3JpZXMuCisKKyAgICAgICAg
VGhlIGFzc29jaWF0aW9uIGJldHdlZW4gYnVnIHRyYWNrZXJzIGFuZCByZXBvc2l0b3JpZXMgKHN1
Y2ggYXMgV2ViS2l0LCBTYWZhcmksIGV0Yy4uLikgYXJlIHVzZWQKKyAgICAgICAgdG8gZGV0ZXJt
aW5lIHRoZSBzZXQgb2YgYnVnIHRyYWNrZXJzIHRvIHNob3cgZm9yIGEgZ2l2ZW4gc2V0IG9mIGJs
YW1lIGxpc3RzLgorICAgICAgICBlLmcuIGlmIGEgdGVzdCByZWdyZXNzZWQgZHVlIHRvIGEgY2hh
bmdlIGluIFNhZmFyaSwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIHNob3cgV2ViS2l0IEJ1Z3ppbGxh
IGFzCisgICAgICAgIGEgcGxhY2UgdG8gZmlsZSBidWdzIGFnYWluc3QgdGhlIHJlZ3Jlc3Npb24u
CitGCisgICAgICAgICogZGF0YWJhc2UvaW5pdC1kYXRhYmFzZS5zcWw6IEFkZGVkIGJ1Z190cmFj
a2VycyBhbmQgdHJhY2tlcl9yZXBvc2l0b3JpZXMuCisgICAgICAgIEFsc28gZHJvcCB0aG9zZSB0
YWJsZXMgYmVmb3JlIGNyZWF0aW5nIHRoZW0gKG5vdGUgIkRST1AgVEFCTEUgcmVwb3J0cyIgd2Fz
IG1pc3NpbmcpLgorCisgICAgICAgICogcHVibGljL2FkbWluL2J1Zy10cmFja2Vycy5waHA6IEFk
ZGVkLiBUaGUgYWRtaW5pc3RyYXRpdmUgaW50ZXJmYWNlIGZvciBhZGRpbmcgYW5kIG1hbmFnaW5n
CisgICAgICAgIGJ1ZyB0cmFja2VycywgbmFtZWx5IGFzc29jaWF0ZWQgcmVwb3NpdG9yaWVzLgor
CisgICAgICAgICogcHVibGljL2luY2x1ZGUvYWRtaW4taGVhZGVyLnBocDogQWRkZWQgYSBsaW5r
IHRvIGJ1Zy10cmFja2Vycy5waHAKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9tYW5pZmVzdC5w
aHA6CisgICAgICAgIChNYW5pZmVzdEdlbmVyYXRvcjo6Z2VuZXJhdGUpOiBJbmNsdWRlIHRoZSBs
aXN0IG9mIGJ1ZyB0cmFja2VycyBpbiB0aGUgbWFuaWZlc3QuCisgICAgICAgIEFsc28gbW92ZWQg
dGhlIGNvZGUgdG8gZmV0Y2ggcmVwb3NpdG9yaWVzIHRhYmxlIGhlcmUgZnJvbSBNYW5pZmVzdEdl
bmVyYXRvcjo6cmVwb3NpdG9yaWVzLgorCisgICAgICAgIChNYW5pZmVzdEdlbmVyYXRvcjo6cmVw
b3NpdG9yaWVzKToKKworICAgICAgICAoTWFuaWZlc3RHZW5lcmF0b3I6OmJ1Z190cmFja2Vycyk6
IEFkZGVkLiBHZW5lcmF0ZXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgYnVnIHRyYWNrZXJzIHdo
ZXJlCisgICAgICAgIGtleXMgYXJlIG5hbWVzIG9mIGJ1ZyB0cmFja2VycyBhbmQgdmFsdWVzIGFy
ZSBhc3NvY2lhdGl2ZSBhcnJheXMgd2l0aCBrZXlzICduZXdfYnVnX3VybCcgYW5kCisgICAgICAg
ICdyZXBvc2l0b3JpZXMnIHdoZXJlIHRoZSBsYXR0ZXIgY29udGFpbnMgdGhlIGxpc3Qgb2YgYXNz
b2NpYXRlZCByZXBvc2l0b3J5IG5hbWVzLgorCisgICAgICAgICogcHVibGljL2luZGV4Lmh0bWw6
CisgICAgICAgIChDaGFydCk6IFRha2VzIGJ1Z1RyYWNrZXJzIGFzIGFzIGFyZ3VtZW50LgorICAg
ICAgICAoQ2hhcnQuc2hvd1Rvb2x0aXBXaXRoUmVzdWx0cyk6IFJlbW92ZWQgdGhlIGhhcmQtY29k
ZWQgbGlzdC4KKyAgICAgICAgKGluaXQpOgorICAgICAgICAoaW5pdC5hZGRQbGF0Zm9ybXNUb0Rh
c2hib2FyZCk6CisgICAgICAgIChpbml0LnNob3dDaGFydHMuY3JlYXRlQ2hhcnRGcm9tTGlzdFBh
aXIpOgorICAgICAgICAoaW5pdCk6IFN0b3JlcyB0aGUgbGlzdCBvZiBidWcgdHJhY2tlcnMgaW4g
dGhlIG1hbmlmZXN0IHRvIGEgbG9jYWwgdmFyaWFibGUuCisKKzIwMTMtMDItMjEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQSBmb2xsb3cgdXAgb24gdGhlIHBy
ZXZpb3VzIGJ1aWxkIGZpeC4gV2hlbiB1c2luZyBwcm9jX29wZW4sIHdlIG5lZWQgdG8gbWFrZSBl
dmFsdWxhdG9yLmpzIGV4ZWN1dGFibGUuCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9ldmFs
dWF0b3IuanM6CisKKzIwMTMtMDItMjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgU2FmYXJpUGVyZk1vbml0b3I6IEV4dHJhY3QgdGhlIGNvZGUgdG8gZ2VuZXJh
dGUgdGFidWxhciB2aWV3IGluIGFkbWluaXN0cmF0aXZlIHBhZ2VzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgUmVteSBEZW1hcmVzdC4KKworICAgICAgICBFeHRyYWN0ZWQgQWRtaW5pc3RyYXRpdmVQ
YWdlIHRvIHNoYXJlIHRoZSBjb2RlIHRvIGdlbmVyYXRlIGEgdGFidWxhciB2aWV3IG9mIGRhdGEg
YW5kIGEgZm9ybSB0byBpbnNlcnQKKyAgICAgICAgbmV3IHJvdyBpbnRvIHRoZSBkYXRhYmFzZS4K
KworICAgICAgICAqIHB1YmxpYy9hZG1pbi9hZ2dyZWdhdG9ycy5waHA6IFVzZSBBZG1pbmlzdHJh
dGl2ZVBhZ2UuCisgICAgICAgICogcHVibGljL2FkbWluL2J1aWxkZXJzLnBocDogRGl0dG8uCisg
ICAgICAgICogcHVibGljL2FkbWluL3JlcG9zaXRvcmllcy5waHA6IERpdHRvLgorICAgICAgICAq
IHB1YmxpYy9pbmNsdWRlL2FkbWluLWhlYWRlci5waHA6CisgICAgICAgIChBZG1pbmlzdHJhdGl2
ZVBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKEFkbWluaXN0cmF0aXZlUGFnZTo6X19jb25zdHJ1Y3Qp
OiBjb2x1bW5faW5mbyBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IG1hcHMgYSBTUUwgY29s
dW1uIG5hbWUKKyAgICAgICAgdG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCBkZXNjcmliZXMg
dGhlIGNvbHVtbi4KKyAgICAgICAgICAgIC0gZWRpdGluZ19tb2RlOiBTcGVjaWZpZXMgdGhlIHR5
cGUgb2YgZm9ybSAoJ3RleHQnLCAndXJsJywgb3IgJ3N0cmluZycpIHRvIHNob3cgZm9yIHRoaXMg
Y29sdW1uLgorICAgICAgICAgICAgLSBsYWJlbDogSHVtYW4gcmVhZGFibGUgbmFtZSBvZiB0aGUg
Y29sdW1uLgorICAgICAgICAgICAgLSBwcmVfaW5zZXJ0aW9uOiBTaWduaWZpZXMgdGhhdCB0aGlz
IGNvbHVtbiBleGlzdHMgb25seSBiZWZvcmUgdGhlIHJvdyBpcyBpbnNlcnRlZC4gZS5nLiBwYXNz
d29yZAorICAgICAgICAgICAgICBjb2x1bW4gZXhpc3RzIG9ubHkgYmVmb3JlIHdlIGNyZWF0ZSBw
YXNzd29yZF9oYXNoIGNvbHVtbiBhdCB0aGUgaW5zZXJ0aW9uIHRpbWUuCisKKyAgICAgICAgKEFk
bWluaXN0cmF0aXZlUGFnZTo6bmFtZV90b190aXRsZWNhc2UpOiBDb252ZXJ0cyBhbiB1bmRlcnNj
b3JlZCBsb3dlcmNhc2UgbmFtZSB0byBhIGh1bWFuIHJlYWRhYmxlCisgICAgICAgIHRpdGxlY2Fz
ZSAoZS5nLiBuZXdfYnVnIGlzIGNvbnZlcnRlZCB0byBOZXcgQnVnKS4KKyAgICAgICAgKEFkbWlu
aXN0cmF0aXZlUGFnZTo6Y29sdW1uX2xhYmVsKTogT2J0YWlucyB0aGUgbGFiZWwgc3BlY2lmaWVk
IGluIGNvbHVtbl9pbmZvIG9yIHRpdGxlY2FzZWQgY29sdW1uIG5hbWUuCisgICAgICAgIChBZG1p
bmlzdHJhdGl2ZVBhZ2U6OnJlbmRlcl9mb3JtX2NvbnRyb2xfZm9yX2NvbHVtbik6ICJSZW5kZXJz
IiBhIHRleHQgZm9ybSBjb250cm9sIHN1Y2ggYXMgaW5wdXQgYW5kCisgICAgICAgIHRleHRhcmVh
IGZvciBhIGdpdmVuIGVkaXRpbmcgbW9kZSAoJ3RleHQnLCAndXJsJywgb3IgJ3N0cmluZycpLgor
ICAgICAgICAoQWRtaW5pc3RyYXRpdmVQYWdlOjpyZW5kZXJfdGFibGUpOiBSZW5kZXJzIGEgd2hv
bGUgU1FMIHRhYmxlIGFmdGVyIHNvcnRpbmcgcm93cyBieSB0aGUgc3BlY2lmaWVkIGNvbHVtbi4K
KyAgICAgICAgKEFkbWluaXN0cmF0aXZlUGFnZTo6cmVuZGVyX2Zvcm1fdG9fYWRkKTogUmVuZGVy
cyBhIGZvcm0gdG8gaW5zZXJ0IG5ldyByb3cuCisKKzIwMTMtMDItMjAgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQnVpbGQgZml4LiBTb21lIHN5c3RlbXMgZG9u
J3Qgc3VwcG9ydCByKy4gVXNlIHByb2Nfb3BlbiBpbnN0ZWFkLgorCisgICAgICAgICogcHVibGlj
L2FwaS9yZXBvcnQucGhwOgorCisyMDEzLTAyLTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgorCisgICAgICAgIEJ1aWxkIGZpeC4gVXNlIHRoZSBtZWFuIGRhdGEgc2VyaWVzIGFz
IHN1cHBvc2VkIHRvIHVwcGVyIG9yIGxvd2VyIGNvbmZpZGVuY2UgYm91bmRzCisgICAgICAgIHdo
ZW4gY29tcHV0aW5nIHRoZSB5LWF4aXMgb2YgZGF0YSBwb2ludHMgdG8gc2hvdyB0b29sdGlwcyBh
dC4KKworICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgorCisyMDEzLTAyLTE1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQuIFJlbW92ZWQg
Lmh0YWNjZXNzIGluIGZhdm9yIG9mIGRpcmVjdGx5IHB1dHRpbmcgZGlyZWN0aXZlcyBpbiBodHRw
ZC5jb25mLgorCisgICAgICAgICogSW5zdGFsbC5tZDoKKyAgICAgICAgKiBwdWJsaWMvLmh0YWNj
ZXNzOiBSZW1vdmVkLgorCisyMDEzLTAyLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQuCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9t
YW5pZmVzdC5waHA6IEJ1aWxkIGZpeC4gZGIgaXMgb24gdGhpcy4KKyAgICAgICAgKiBwdWJsaWMv
anMvc3RhdGlzdGljcy5qczoKKyAgICAgICAgKFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVydmFs
KTogQWRkZWQuIEFuIHV0aWxpdHkgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKwor
MjAxMy0wMi0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTMxNjU2Njc+IFNhZmFyaVBlcmZNb25pdG9yIGRvZXNuJ3Qgd29yayBv
biBwZXJmLndlYmtpdC5vcmcgKFBhcnQgMikKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMg
Q2FybHNzb24uCisKKyAgICAgICAgUmV3cm90ZSBhbmQgbWVyZ2VkIHBvcHVsYXRlLWZyb20tcmVw
b3J0LmpzIGludG8gcmVwb3J0LnBocC4KKworICAgICAgICAqIGRhdGFiYXNlL2NvbmZpZy5qc29u
OiBBZGRlZCBhIHBhdGggdG8gbm9kZS5qcy4KKworICAgICAgICAqIGRhdGFiYXNlL2luaXQtZGF0
YWJhc2Uuc3FsOiBEb24ndCByZXF1aXJlIHVuaXQgdG8gYmUgYWx3YXlzIHByZXNlbnQgc2luY2Ug
aXQncyBubyBsb25nZXIgdXNlZCBieSB0aGUgZnJvbnQgZW5kLgorICAgICAgICBPbmNlIHdlIGxh
bmQgdGhpcyBwYXRjaCBhbmQgdXBkYXRlIHRoZSBhZG1pbmlzdHJhdGl2ZSBwYWdlcywgd2UgY2Fu
IHJlbW92ZSB0aGlzIGNvbHVtbi4KKworICAgICAgICBBbHNvIGFkZCBhIG5ldyByZXBvcnRzIHRh
YmxlIHRvIHN0b3JlIEpTT04gcmVwb3J0ZWQgYnkgYnVpbGRlcnMuIFdlIHVzZWQgdG8gc3RvcmUg
ZXZlcnl0aGluZyBpbiBqb2JzIHRhYmxlIGJ1dAorICAgICAgICB0aGF0IHRhYmxlIGlzIGdvaW5n
IGF3YXkgb25jZSB3ZSByZW1vdmUgdGhlIG5vZGUuanMgYmFja2VuZC4KKworICAgICAgICAqIGRh
dGFiYXNlL3BvcHVsYXRlLWZyb20tcmVwb3J0LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1Ymxp
Yy9hcGkvcmVwb3J0LnBocDogQWRkZWQuCisgICAgICAgIChSZXBvcnRQcm9jZXNzb3IpOgorICAg
ICAgICAoUmVwb3J0UHJvY2Vzc29yLl9fY29uc3RydWN0KToKKyAgICAgICAgKFJlcG9ydFByb2Nl
c3Nvci5wcm9jZXNzKToKKworICAgICAgICAoUmVwb3J0UHJvY2Vzc29yLnN0b3JlX3JlcG9ydF9h
bmRfZ2V0X2J1aWxkX2RhdGEpOiBXZSBzdG9yZSB0aGUgcmVwb3J0IGludG8gdGhlIGRhdGFiYXNl
IGFzIHNvb24gYXMgaXQgaGFzIGJlZW4KKyAgICAgICAgdmVyaWZpZWQgdG8gYmUgc3VibWl0dGVk
IGJ5IGEga25vd24gYnVpbGRlci4KKworICAgICAgICAoUmVwb3J0UHJvY2Vzc29yLmV4aXRfd2l0
aF9lcnJvcik6IFN0b3JlIHRoZSBlcnJvciBtZXNzYWdlIGFuZCBkZXRhaWxzIGluIHRoZSBkYXRh
YmFzZSBpZiB0aGUgcmVwb3J0IGhhZCBiZWVuCisgICAgICAgIHN0b3JlZC4gSWYgbm90LCB0aGVu
IG5vdGlmeSB0aGF0IHRvIHRoZSBjbGllbnQgdmlhICdmYWlsdXJlU3RvcmVkJyBpbiB0aGUgSlNP
TiByZXNwb25zZS4KKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvci5yZXNvbHZlX2J1aWxkX2lkKTog
SW5zZXJ0IGJ1aWxkIGFuZCBidWlsZF9yZXZpc2lvbnMgcm93cyBpZiBuZWVkZWQuIFdlIGRvbid0
IGRvIHRoaXMgYXRvbWljYWxseQorICAgICAgICBpbnNpZGUgYSB0cmFuc2FjdGlvbiBiZWNhdXNl
IHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIHJlcG9ydHMgZm9yIGEgc2luZ2xlIGJ1aWxkLCBlYWNo
IGNvbnRhaW5pbmcgcmVzdWx0cyBmb3IKKyAgICAgICAgZGlmZmVyZW50IHRlc3RzLgorCisgICAg
ICAgIChSZXBvcnRQcm9jZXNzb3IucmVjdXJzaXZlbHlfZW5zdXJlX3Rlc3RzKTogUGFyc2UgYSB0
cmVlIG9mIHRlc3RzIGFuZCBpbnNlcnQgdGVzdHMgYW5kIHRlc3RfbWV0cmljcyByb3dzIGFzCisg
ICAgICAgIG5lZWRlZC4gSXQgYWxzbyBjb21wdXRlcyB0aGUgbWV0cmljcyB0byBhZ2dyZWdhdGUg
YW5kIHByZXBhcmVzIHZhbHVlcyB0byBjb21taXQgdmlhIGVuc3VyZV9hZ2dyZWdhdGVkX21ldHJp
YywKKyAgICAgICAgYWRkX3ZhbHVlc190b19jb21taXQsIGFuZCBhZGRfdmFsdWVzX2Zvcl9hZ2dy
ZWdhdGlvbi4KKworICAgICAgICAoUmVwb3J0UHJvY2Vzc29yLmlzX2xpc3Rfb2ZfYWdncmVnYXRv
cnMpOiBXaGVuIGEgbWV0cmljIGlzIGFuIGFnZ3JlZ2F0aW9uLCBpdCBjb250YWlucyBhbiBhcnJh
eSBvZiBhZ2dyZWdhdG9yCisgICAgICAgIG5hbWVzLCBlLmcuIFsiQXJpdGhtZXRpYyIsICJHZW9t
ZXRyaWMiXSwgaW5zdGVhZCBvZiBhIGRpY3Rpb25hcnkgb2YgY29uZmlndXJhdGlvbiB0eXBlcyB0
byB0aGVpciB2YWx1ZXMsCisgICAgICAgIGUuZy4ge1RpbWU6IHtjdXJyZW50OiBbMSwgMiwgMyxd
fX0uIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB0aGUgZm9ybWVyLiAoTm90ZSB0aGF0IGRpY3Rpb25h
cnkgYW5kIGxpc3QgYXJlIGJvdGgKKyAgICAgICAgYXJyYXkncyBpbiBQSFApLgorCisgICAgICAg
IChSZXBvcnRQcm9jZXNzb3IuZW5zdXJlX2FnZ3JlZ2F0ZWRfbWV0cmljKTogQ3JlYXRlIGEgbWV0
cmljIHdpdGggYWdncmVnYXRvciB0byBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgbWV0cmljcworICAg
ICAgICB0byBiZSBhZ2dyZWdhdGVkIGluIFJlcG9ydFByb2Nlc3Nvci5hZ2dyZWdhdGUuCisKKyAg
ICAgICAgKFJlcG9ydFByb2Nlc3Nvci5hZGRfdmFsdWVzX2Zvcl9hZ2dyZWdhdGlvbik6IENhbGxl
ZCBieSB0ZXN0IG1ldHJpY3Mgd2l0aCBhZ2dyZWdhdGVkIHBhcmVudCB0ZXN0IG1ldHJpY3MuCisK
KyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvci5hZ2dyZWdhdGUpOiBDb21wdXRlIHJlc3VsdHMgZm9y
IGFnZ3JlZ2F0ZWQgbWV0cmljcy4gQ29uc2lkZXIgYSBtYXRyaXggd2l0aCByb3dzIHJlcHJlc2Vu
dGluZworICAgICAgICBjaGlsZCB0ZXN0cyBhbmQgY29sdW1ucyByZXByZXNlbnRpbmcgIml0ZXJh
dGlvbnMiIGZvciBhIGdpdmVuIGFnZ3JlZ2F0ZWQgbWV0cmljcyBNLiBJbml0aWFsbHksIHdlIGhh
dmUgdmFsdWVzCisgICAgICAgIGdpdmVuIGZvciBlYWNoIHJvdyAoY2hpbGQgbWV0cmljcyBvZiBN
KS4gVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBlYWNoIGNvbHVtbiAoaXRlcmF0aW9uKSB2aWEKKyAg
ICAgICAgdGVzdF92YWx1ZV9saXN0X3RvX3ZhbHVlc19ieV9pdGVyYXRpb25zLCBhbmQgZmVlZHMg
aXQgaW50byBldmFsdWF0ZV9leHByZXNzaW9uc19ieV9ub2RlIHRvIGdldCBhZ2dyZWdhdGVkIHZh
bHVlcworICAgICAgICBmb3IgZWFjaCBjb2x1bW4gKGl0ZXJhdGlvbiBvZiBNKS4gRmluYWxseSwg
aXQgcmVnaXN0ZXJzIHRob3NlIGFnZ3JlZ2F0ZWQgdmFsdWVzIHRvIGJlIGNvbW1pdHRlZC4KKwor
ICAgICAgICBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBzdGFydCBhIG5ldyBub2RlLmpzIHBy
b2Nlc3MgZm9yIGVhY2ggYWdncmVnYXRpb24sIHNvIHdlIGFjY3VtdWxhdGUgYWxsIHZhbHVlcyB0
byBiZQorICAgICAgICBhZ2dyZWdhdGVkIGluIG5vZGUuanMgaW4gJGV4cHJlc3Npb25zLiBFYWNo
IGVudHJ5IGluICRleHByZXNzaW9ucyBpcyBhIEpTT04gc3RyaW5nIHRoYXQgY29udGFpbnMgY29k
ZSBhbmQKKyAgICAgICAgdmFsdWVzIHRvIGJlIGFnZ3JlZ2F0ZWQuIG5vZGUuanMgZ2l2ZXMgdXMg
YmFjayBhIGxpc3Qgb2YgSlNPTiBzdHJpbmdzIHRoYXQgY29udGFpbiBhZ2dyZWdhdGVkIHZhbHVl
cy4KKworICAgICAgICAoUmVwb3J0UHJvY2Vzc29yLnRlc3RfdmFsdWVfbGlzdF90b192YWx1ZXNf
YnlfaXRlcmF0aW9ucyk6IFNlZSBhYm92ZS4KKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nvci5ldmFs
dWF0ZV9leHByZXNzaW9uc19ieV9ub2RlKTogU2VlIGFib3ZlLgorCisgICAgICAgIChSZXBvcnRQ
cm9jZXNzb3IuY29tcHV0ZV9jYWNoZXMpOiBDb21wdXRlIGNhY2hlZCBtZWFuLCBzdW0sIGFuZCBz
cXVhcmUgc3VtcyBmb3IgZWFjaCBydW4gd2UncmUgYWJvdXQgdG8gYWRkCisgICAgICAgIHVzaW5n
IGV2YWx1YXRlX2V4cHJlc3Npb25zX2J5X25vZGUuIFdlIGNhbid0IGRvIHRoaXMgYmVmb3JlIGNv
bXB1dGluZyBhZ2dyZWdhdGVkIHJlc3VsdHMgc2luY2UgdGhvc2UgYWdncmVnYXRlZAorICAgICAg
ICByZXN1bHRzIGFsc28gbmVlZCB0aGUgc2FpZCBjYWNoZXMuCisKKyAgICAgICAgKFJlcG9ydFBy
b2Nlc3Nvci5hZGRfdmFsdWVzX3RvX2NvbW1pdCk6CisKKyAgICAgICAgKFJlcG9ydFByb2Nlc3Nv
ci5jb21taXQpOiBBZGQgdGVzdF9ydW5zIGFuZCBydW5faXRlcmF0aW9ucyBhdG9taWNhbGx5IGlu
c2lkZSBhIHRyYW5zYWN0aW9uLCByb2xsaW5nIGJhY2sKKyAgICAgICAgdGhlIHRyYW5zYWN0aW9u
IGFzIG5lZWRlZCBpZiBhbnl0aGluZyBnb2VzIHdyb25nLgorCisgICAgICAgIChSZXBvcnRQcm9j
ZXNzb3Iucm9sbGJhY2tfd2l0aF9lcnJvcikKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHB1
YmxpYy9pbmNsdWRlL2RiLnBocDoKKyAgICAgICAgKERhdGFiYXNlLnByZXBhcmVfcGFyYW1zKTog
VXNlICR2YWx1ZXMgKGluc3RlYWQgb2YgJHBsYWNlaG9sZGVycykgdG8gY29tcHV0ZSB0aGUgY3Vy
cmVudCBpbmRleCBzaW5jZQorICAgICAgICBwbGFjZWhvbGRlcnMgKCQxLCAkMiwgZXRjLi4uKSBt
YXkgYmUgc3BsaXQgdXAgaW50byBtdWx0aXBsZSBhcnJheXMgZ2l2ZW4gdGhleSBtYXkgbm90IG5l
Y2Vzc2FyaWx5IHNob3cgdXAKKyAgICAgICAgY29udGlndW91c2x5IGluIGEgU1FMIHN0YXRlbWVu
dC4KKworICAgICAgICAoRGF0YWJhc2Uuc2VsZWN0X29yX2luc2VydF9yb3cpOiBBZGRlZC4gU2Vs
ZWN0cyBhIHJvdyBpZiB0aGUgYXR0ZW1wdCB0byBpbnNlcnQgdGhlIHNhbWUgcm93IGZhaWxzLiBJ
dAorICAgICAgICBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBxdWVyeSBzdHJpbmcgZnJvbSBhIGRp
Y3Rpb25hcnkgb2YgdW5wcmVmaXhlZCBjb2x1bW4gbmFtZXMgYW5kIHRhYmxlLiBJdCByZXR1cm5z
CisgICAgICAgIGEgY29sdW1uIHZhbHVlIG9mIHRoZSBjaG9pY2UuCisKKyAgICAgICAgKERhdGFi
YXNlLmJlZ2luX3RyYW5zYWN0aW9uKTogQWRkZWQuCisgICAgICAgIChEYXRhYmFzZS5jb21taXRf
dHJhbnNhY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKERhdGFiYXNlLnJvbGxiYWNrX3RyYW5zYWN0
aW9uKTogQWRkZWQuCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9ldmFsdWF0b3IuanM6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocDoKKyAgICAgICAg
KGV4aXRfd2l0aF9lcnJvcik6IFRha2UgZXJyb3IgZGV0YWlscyBhbmQgbWVyZ2UgaXQgd2l0aCAi
YWRkaXRpb25hbCBkZXRhaWxzIi4gVGhpcyBhbGxvd3MgcmVwb3J0LnBocCB0byBwcm92aWRlCisg
ICAgICAgIGNvbnRleHQgdW5kZXIgd2hpY2ggdGhlIHJlcXVlc3QgZmFpbGVkLgorICAgICAgICAo
c3VjY2Vzc2Z1bF9leGl0KTogTWVyZ2UgImFkZGl0aW9uYWwgZGV0YWlscyIuCisgICAgICAgIChz
ZXRfZXhpdF9kZXRhaWwpOiBBZGRlZC4gU2V0cyAiYWRkaXRpb25hbCBkZXRhaWxzIiB0byB0aGUg
SlNPTiByZXR1cm5lZCBieSBleGl0X3dpdGhfZXJyb3Igb3Igc3VjY2Vzc2Z1bF9leGl0LgorICAg
ICAgICAobWVyZ2VfYWRkaXRpb25hbF9kZXRhaWxzKToKKworMjAxMy0wMi0xMiAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTYWZhcmlQZXJmTW9uaXRvcjogQWRk
IG1vcmUgaGVscGVyIGZ1bmN0aW9ucyB0byBkYi5waHAKKworICAgICAgICBSZXZpZXdlZCBieSBS
ZW15IERlbWFyZXN0LgorCisgICAgICAgIEFkZGVkIERhdGFiYXNlOjppbnNlcnRfcm93IGFuZCBh
cnJheV9nZXQgdG8gbWFrZSBjb21tb24gZGF0YWJhc2Ugb3BlcmF0aW9ucyBlYXNpZXIuCisKKyAg
ICAgICAgKiBwdWJsaWMvYWRtaW4vYWdncmVnYXRvcnMucGhwOiBVc2UgRGF0YWJhc2U6Omluc2Vy
dF9yb3cgaW5zdGVhZCBvZgorICAgICAgICBleGVjdXRlX3F1ZXJ5X2FuZF9leHBlY3Rfb25lX3Jv
d190b19iZV9hZmZlY3RlZC4KKworICAgICAgICAqIHB1YmxpYy9hZG1pbi9idWlsZGVycy5waHA6
IERpdHRvLgorCisgICAgICAgICogcHVibGljL2FkbWluL3Rlc3RzLnBocDogRGl0dG87IFdlIHVz
ZWQgdG8gcnVuIGEgc2VwYXJhdGUgU0VMRUNUIHF1ZXJ5IGp1c3QgdG8gZ2V0IHRoZSBpZCBhZnRl
cgorICAgICAgICBpbnNlcnRpbmcgYSByb3cuIFdpdGggaW5zZXJ0X3Jvdywgd2UgZG9uJ3QgbmVl
ZCB0aGF0LgorCisgICAgICAgICogcHVibGljL2luY2x1ZGUvYWRtaW4taGVhZGVyLnBocDogRGl0
dG8uCisKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9kYi5waHA6CisgICAgICAgIChhcnJheV9n
ZXQpOiBBZGRlZC4gSXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgYW4gYXJyYXkgZ2l2ZW4gYSBrZXkg
aWYgdGhlIGtleSBleGlzdHM7IG90aGVyd2lzZQorICAgICAgICByZXR1cm4gdGhlIGRlZmF1bHQg
dmFsdWUgKGRlZmF1bHRzIHRvIE5VTEwpIGlmIHRoZSBrZXkgZG9lc24ndCBleGlzdC4KKworICAg
ICAgICAoRGF0YWJhc2U6OmNvbHVtbl9uYW1lcyk6IEFkZGVkLiBQcmVmaXhlcyBhbiBhcnJheSBv
ZiBjb2x1bW4gbmFtZXMgYW5kIGNyZWF0ZXMgYSBjb21tYSBzZXBhcmF0ZWQKKyAgICAgICAgbGlz
dCBvZiB0aGUgbmFtZXMuCisKKyAgICAgICAgKERhdGFiYXNlOjpwcmVwYXJlX3BhcmFtcyk6IEFk
ZGVkLiBUYWtlcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb2x1bW4gbmFtZXMgYW5kIHRoZWly
IHZhbHVlcywKKyAgICAgICAgYW5kIGJ1aWxkcyB1cCBhcnJheXMgZm9yIHBsYWNlaG9sZGVyIChl
LmcuICQxLCAkMiwgZXRjLi4uKSBhbmQgdmFsdWVzLCB0aGVuIHJldHVybnMgYW4gYXJyYXkgb2YK
KyAgICAgICAgY29sdW1uIG5hbWVzIGFsbCBpbiB0aGUgc2FtZSBvcmRlci4KKworICAgICAgICAo
RGF0YWJhc2U6Omluc2VydF9yb3cpOiBBZGRlZC4gSW5zZXJ0cyBhIG5ldyByb3cgaW50byB0aGUg
c3BlY2lmaWVkIHRhYmxlIHdoZXJlIGNvbHVtbiBuYW1lcyBoYXZlCisgICAgICAgIHRoZSBnaXZl
biBwcmVmaXguIFZhbHVlcyBhcmUgZ2l2ZW4gaW4gYSBmb3JtIG9mIGFuIGFzc29jaWF0aXZlIGFy
cmF5IHdoZXJlIGtleXMgYXJlIHVucHJlZml4ZWQKKyAgICAgICAgY29sdW1uIG5hbWVzIGFuZCB2
YWx1ZXMgYXJlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBXaGVuIHRoZSByb3cgaXMgc3VjY2Vzc2Z1
bGx5IGluc2VydGVkLCBpdCByZXR1cm5zCisgICAgICAgIHRoZSBzcGVjaWZpZWQgY29sdW1uJ3Mg
dmFsdWUgKGRlZmF1bHRzIHRvIHByZWZpeF9pZCkuIElmIE5VTEwgaXMgc3BlY2lmaWVkLCBpdCBy
ZXR1cm5zIGEgYm9vbGVhbgorICAgICAgICBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9mIHRoZSBp
bnNlcnRpb24uCisKKzIwMTMtMDItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMTY1NjY3PiBTYWZhcmlQZXJmTW9uaXRvciBk
b2Vzbid0IHdvcmsgb24gcGVyZi53ZWJraXQub3JnIChQYXJ0IDEpCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQ29ucmFkIFNodWx0ei4KKworICAgICAgICBSZXdyb3RlIHRoZSBtYW5pZmVzdCBnZW5l
cmF0b3IgaW4gUEhQLgorCisgICAgICAgICogZGF0YWJhc2UvZ2VuZXJhdGUtbWFuaWZlc3QuanM6
IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2FkbWluL3JlZ2VuZXJhdGUtbWFuaWZlc3QucGhw
OiBBZGRlZC4gVXNlIE1hbmlmZXN0R2VuZXJhdG9yIHRvIGdlbmVyYXRlIGFuZCBzdG9yZSB0aGUg
bWFuaWZlc3QuCisgICAgICAgICogcHVibGljL2luY2x1ZGUvZGIucGhwOgorICAgICAgICAoYXJy
YXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5KTogQWRkZWQuCisgICAgICAgICogcHVibGljL2luY2x1
ZGUvZXZhbHVhdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9qc29uLWhl
YWRlci5waHA6CisgICAgICAgICogcHVibGljL2luY2x1ZGUvbWFuaWZlc3QucGhwOiBBZGRlZC4K
KworMjAxMy0wMi0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBEYXRlcyBvbiBvdmVyZmxvdyBwbG90IGFyZSBvdmVybGFwcGluZworCisgICAgICAgIFJ1YmJl
ci1zdGFtcGVkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBEb24ndCBzaG93IG1vcmUgdGhh
biA1IGRheXMuCisKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDoKKyAgICAgICAgKiBwdWJs
aWMvanMvaGVscGVyLWNsYXNzZXMuanM6CisgICAgICAgIChUZXN0QnVpbGQuVVRDdG9QU1QpOgor
ICAgICAgICAoVGVzdEJ1aWxkLm5vdyk6CisKKzIwMTMtMDItMDcgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2hvdyBidWlsZCB0aW1lIGFzIHdlbGwgYXMgY29t
bWl0IHRpbWUgb24gdGhlIGRhc2hib2FyZCBhbmQgdG9vbHRpcHMuCisKKyAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIEluY2x1ZGUgYm90aCB0aGUgbWF4
aW11bSBjb21taXQgdGltZSBhbmQgYnVpbGQgdGltZSBpbiBidWlsZExhYmVsV2l0aExpbmtzLgor
ICAgICAgICBBbHNvIHVzZSBJU08gZm9ybWF0IHRvIHNhdmUgdGhlIHNjcmVlbiByZWFsIGVzdGF0
ZS4KKworICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgorICAgICAgICAoYnVpbGRMYWJlbFdp
dGhMaW5rcyk6CisgICAgICAgICogcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorICAgICAg
ICAoVGVzdEJ1aWxkKToKKyAgICAgICAgKFRlc3RCdWlsZC5idWlsZFRpbWUpOgorICAgICAgICAo
VGVzdEJ1aWxkLmZvcm1hdHRlZEJ1aWxkVGltZSk6CisKKzIwMTMtMDItMDggIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZDsgQ29udmVydCBtZXRy
aWMubmFtZSB0byBtZXRyaWMudW5pdCBpbiB0aGUgZnJvbnQgZW5kLgorCisgICAgICAgICogcHVi
bGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorCisyMDEzLTAyLTA3ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzE2NjI3Nj4gU2Fm
YXJpUGVyZk1vbml0b3I6IE5lZWQgaHlwZXJsaW5rcyB0byBmaWxlIGJ1Z3MKKworICAgICAgICBS
dWJiZXItc3RhbXBlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IGh5cGVybGlua3MgdG8gZmlsZSBuZXcgYnVncyBvbiBSYWRhciBhbmQgV2ViS2l0IEJ1Z3ppbGxh
LiBCZWNhdXNlIHdlIHdhbnQgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbgorICAgICAgICBzdWNoIGFz
IHRoZSBkZWdyZWUgb2YgcHJvZ3Jlc3Npb24gb3IgcmVncmVzc2lvbiBhbmQgdGhlIHJlZ3Jlc3Np
b24gcmFuZ2VzIHdoZW4gZmlsaW5nIG5ldyBidWdzLCBicm9rZSB2YXJpb3VzCisgICAgICAgIGxh
YmVsKCkgZnVuY3Rpb25zIGludG8gc21hbGxlciBwaWVjZXMgdG8gYmUgdXNlZCBpbiBib3RoIGdl
bmVyYXRpbmcgdG9vbHRpcHMgYW5kIHRoZSBoeXBlcmxpbmtzLgorCisgICAgICAgICogcHVibGlj
L2luZGV4Lmh0bWw6CisgICAgICAgICguYnVpbGRMYWJlbFdpdGhMaW5rcyk6IEV4dHJhY3RlZCBm
cm9tIFRlc3RCdWlsZC5sYWJlbC4KKyAgICAgICAgKC5zaG93VG9vbHRpcFdpdGhSZXN1bHRzKTog
RXh0cmFjdGVkIGZyb20gVG9vbHRpcC5zaG93LiBBbHNvIGFkZGVkIHRoZSBjb2RlIHRvIGdlbmVy
YXRlIGh5cGVybGlua3MgdG8gZmlsZSBuZXcgYnVncworICAgICAgICBvbiBSYWRhciBhbmQgV2Vi
S2l0IEJ1Z3ppbGxhLgorICAgICAgICAqIHB1YmxpYy9qcy9oZWxwZXItY2xhc3Nlcy5qczoKKyAg
ICAgICAgKFBlcmZUZXN0UmVzdWx0Lm1ldHJpYyk6IFJlcGxhY2VkIHRlc3QoKSBhcyBydW5zLnRl
c3QoKSBubyBsb25nZXIgZXhpc3RzLgorICAgICAgICAoUGVyZlRlc3RSZXN1bHQuaXNCZXR0ZXJU
aGFuKTogQWRkZWQuCisgICAgICAgIChQZXJmVGVzdFJlc3VsdC5mb3JtYXR0ZWRSZWxhdGl2ZURp
ZmZlcmVuY2UpOiBFeHRyYWN0ZWQgZnJvbSBQZXJmVGVzdFJlc3VsdC5sYWJlbC4KKyAgICAgICAg
KFBlcmZUZXN0UmVzdWx0LmZvcm1hdHRlZFByb2dyZXNzaW9uT3JSZWdyZXNzaW9uKTogRGl0dG8u
IEFsc28gdXNlICJiZXR0ZXIiIGFuZCAid29yc2UiIGluc3RlYWQgb2YgYXJyb3cgc3ltYm9scwor
ICAgICAgICB0byBpbmRpY2F0ZSBwcm9ncmVzc2lvbnMgb3IgcmVncmVzc2lvbnMuCisgICAgICAg
IChQZXJmVGVzdFJlc3VsdC5sYWJlbCk6CisgICAgICAgIChUZXN0QnVpbGQuZm9ybWF0dGVkVGlt
ZSk6IEFkZGVkLgorICAgICAgICAoVGVzdEJ1aWxkLnBsYXRmb3JtKTogQWRkZWQuCisgICAgICAg
IChUZXN0QnVpbGQuZm9ybWF0dGVkUmV2aXNpb25zKTogRXh0cmFjdGVkIGZyb20gVGVzdEJ1aWxk
LmxhYmVsLiBNZXJnZWQgYSBwYXJ0IG9mIGxpbmtpZnlMYWJlbC4KKyAgICAgICAgKFRlc3RCdWls
ZC5zbWFsbGVySXNCZXR0ZXIpOiBBZGRlZC4KKyAgICAgICAgKFRvb2x0aXAuc2hvdyk6IFRha2Ug
YSByYXcgbWFya3VwIGluc3RlYWQgb2YgdHdvIHJlc3VsdHMuCisKKzIwMTMtMDItMDYgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEz
MTUxNTIwPiBTYWZhcmlQZXJmTW9uaXRvcjogRGFzaGJvYXJkIGNhbiBjYXVzZSBleGNlc3NpdmUg
aG9yaXpvbnRhbCBzY3JvbGxpbmcgd2hlbiB0aGVyZSBhcmUgbWFueSBwbGF0Zm9ybXMKKworICAg
ICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIFN0YWNrIHBsYXRm
b3JtcyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gMyBvZiB0aGVtIHNpbmNlIG1ha2luZyB0aGUg
bGF5b3V0IGFkYXB0aXZlIGlzIHRyaWNreQorICAgICAgICBzaW5jZSBlYWNoIHBsYXRmb3JtIG1h
eSBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiB0ZXN0cyB0byBiZSBzaG93biBvbiB0aGUgZGFz
aGJvYXJkLgorCisgICAgICAgICogcHVibGljL2luZGV4Lmh0bWw6CisKKzIwMTMtMDItMDUgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQnVpbGQgZml4LiBEb24n
dCBwcmVmaXggYSBTVm4gcmV2aXNpb24gd2l0aCAncicgd2hlbiBjb25zdHJ1Y3RpbmcgYSBjaGFu
Z2VzZXQgLyBibGFtZSBVUkwuCisKKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNsYXNzZXMu
anM6CisgICAgICAgIChUZXN0QnVpbGQubGFiZWwpOgorCisyMDEzLTAyLTA1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaVBlcmZNb25pdG9yOiByZXBv
c2l0b3J5IG5hbWVzIG9yIHJldmlzaW9ucyBhcmUgZG91YmxlLXF1b3RlZCB3aGVuIHRoZXkgY29u
dGFpbiBhIHNwYWNlCisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgVGltIEhvcnRvbi4KKwor
ICAgICAgICBUaGUgYnVnIHdhcyBpbiB0aGUgUEhQIGNvZGUgdGhhdCBwYXJzZWQgUG9zdGdyZXMg
YXJyYXkuIFRyaW0gZG91YmxlIHF1b3RhdGlvbnMgYXMgbmVlZGVkLgorCisgICAgICAgIEFsc28g
Zml4ZWQgYSBidWcgaW4gVGVzdEJ1aWxkIHdoZXJlIHdlIHVzZWQgdG8gc2hvdyB0aGUgcmV2aXNp
b24gcmFuZ2UgYXMgcjEyMzQtMTI1MCB3aGVuCisgICAgICAgIHRoZSByZXZpc2lvbiByMTIzNCB3
YXMgdGhlIHJldmlzaW9uIHVzZWQgaW4gdGhlIHByZXZpb3VzIGJ1aWxkLgorCisgICAgICAgICog
cHVibGljL2FwaS9ydW5zLnBocDoKKyAgICAgICAgKHBhcnNlX3JldmlzaW9uc19hcnJheSk6IFRy
aW0gZG91YmxlIHF1b3RhdGlvbnMgYXJvdW5kIHJlcG9zaXRvcnkgbmFtZXMgYW5kIHJldmlzaW9u
cy4KKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanM6CisgICAgICAgIChUZXN0
QnVpbGQubGFiZWwpOgorCisyMDEzLTAyLTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzE1MTU1OD4gU2FmYXJpUGVyZk1vbml0
b3I6IFRvb2x0aXAgaXMgdW51c2FibGUKKworICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW0g
SG9ydG9uLgorCisgICAgICAgICogcHVibGljL2luZGV4Lmh0bWw6CisgICAgICAgIChDaGFydC5h
dHRhY2hNYWluUGxvdCk6IERpc2FibGUgYXV0byBoaWdobGlnaHRpbmcgKGNpcmNsZSBhcm91bmQg
YSBkYXRhIHBvaW50IHRoYXQgc2hvd3MgdXAgb24gaG92ZXIpCisgICAgICAgIG9uIHRoZSBkYXNo
Ym9hcmQgcGFnZSBhcyBpdCdzIHdheSB0b28gbm9pc3kuCisKKyAgICAgICAgKENoYXJ0LmhpZGVU
b29sdGlwKTogQWRkZWQuIEhpZGVzIHRoZSB0b29sdGlwIHRoYXQgc2hvd3MgdXAgb24gaG92ZXIu
CisKKyAgICAgICAgKC50b2dnbGVDbGlja1Rvb2x0aXApOiBFeHRyYWN0ZWQgZnJvbSB0aGUgY29k
ZSBmb3IgIm1vdXNlb3V0IiBiaW5kIChub3cgcmVwbGFjZWQgYnkgIm1vdXNlbGVhdmUiKS4KKyAg
ICAgICAgUGlucyBvciB1bnBpbnMgYSB0b29sdGlwLiBXaGVuIHBpbm5pbmcgYSB0b29sdGlwLCB3
ZSBjcmVhdGUgYSB0b29sdGlwIGJlaGluZCB0aGUgc2NlbmUgYW5kIHNob3cgdGhhdAorICAgICAg
ICBzbyB0aGF0IHRoZSB0b29sdGlwIGZvciBob3ZlciBjYW4gYmUgcmV1c2VkIGZ1cnRoZXIuCisK
KyAgICAgICAgKC5jbG9zZXN0SXRlbUZvclBhZ2VYKTogRmluZCB0aGUgY2xvc2VzdCBpdGVtIGdp
dmVuIHBhZ2VYLiBXZSBpdGVyYXRlIGRhdGEgcG9pbnRzIGZyb20gbGVmdCB0byByaWdodCwKKyAg
ICAgICAgYW5kIGZpbmQgdGhlIGZpcnN0IHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcmlnaHQgb2Yg
dGhlIGN1cnNvciBwb3NpdGlvbi4gV2UgdGhlbiBjb21wdXRlIHRoZSBtaWRwb2ludAorICAgICAg
ICBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBwcmV2aW91cyBwb2ludCBhbmQgcGljayB0aGUgY2xvc2Vy
IG9mIHRoZSB0d28uIEl0IHJldHVybnMgYW4gaXRlbS1saWtlIG9iamVjdAorICAgICAgICB0aGF0
IGhhcyBhbGwgcHJvcGVydGllcyB3ZSBuZWVkIHNpbmNlIGZsb3QgZG9lc24ndCBwcm92aWRlIGFu
IEFQSSB0byByZXRyaWV2ZSB0aGUgcmVhbCBpdGVtIG9iamVjdC4KKworICAgICAgICAoQ2hhcnQp
OiBDYWxsIHRvZ2dsZUNsaWNrVG9vbHRpcCB3aGVuIGEgKGhvdmVyKSB0b29sdGlwIGlzIGNsaWNr
ZWQuCisKKyAgICAgICAgKENoYXJ0LmF0dGFjaCk6IEluICJwbG90aG92ZXIiIGJpbmQsIGNhbGwg
Y2xvc2VzdEl0ZW1Gb3JQYWdlWCB3aGVuIGl0ZW0gaXMgbm90IHByb3ZpZGVkIGJ5IGZsb3Qgb24K
KyAgICAgICAgdGhlIGZpcnN0IG9yICJjdXJyZW50IiBkYXRhIHBvaW50cyAoYXMgb3Bwb3NlZCB0
byB0YXJnZXQgb3IgYmFzZWxpbmUgZGF0YSBwb2ludHMpLgorCisgICAgICAgIEFsc28gYmluZCB0
aGUgY29kZSB0byBjbGVhciBjcm9zc2hhaXIgYW5kIGhpZGUgdG9vbHRpcHMgdG8gIm1vdXNlbGVh
dmUiIGluc3RlYWQgb2YgIm1vdXNlb3V0IiwgYW5kCisgICAgICAgIGF2b2lkIHRyaWdnZXJpbmcg
dGhpcyBjb2RlIHdoZW4gdGhlIGN1cnNvciBpcyBzdGlsbCB3aXRoaW4gdGhlIHBsb3QncyByZWN0
YW5nbGUgKGUuZy4gd2hlbiBhIGN1cnNvcgorICAgICAgICBtb3ZlcyBvbnRvIGEgdG9vbHRpcCkg
dG8gYXZvaWQgdGhlIHByZW1hdHVyZSBkaXNtaXNzYWwgb2YgYSB0b29sdGlwLgorCisgICAgICAg
ICogcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzOgorICAgICAgICAoVG9vbHRpcC5lbnN1cmVD
b250YWluZXIpOiBEb24ndCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZW4gdGhlIHVzZXIgY2xpY2tz
IG9uIHRvb2x0aXAuIERlbGVnYXRlIHRoaXMKKyAgICAgICAgd29yayB0byB0aGUgY2xpZW50IHZp
YSBiaW5kQ2xpY2suCisKKyAgICAgICAgKFRvb2x0aXAuc2hvdyk6IE1vdmUgdG9vbHRpcCB1cCBi
eSA1cHguIEFsc28gYWRkZWQgYSBGSVhNRSB0byBtb3ZlIHRoaXMgb2Zmc2V0IGNvbXB1dGF0aW9u
IHRvIHRoZSBjbGllbnQuCisKKyAgICAgICAgKFRvb2x0aXAuYmluZENsaWNrKTogQWRkZWQuCisK
KzIwMTMtMDItMDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
WWV0IGFub3RoZXIgYnVpbGQgZml4LiBtZXRyaWNJZCpzKi4KKworICAgICAgICAqIHB1YmxpYy9h
ZG1pbi90ZXN0cy5waHA6CisKKzIwMTMtMDItMDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQW5vdGhlciBidWlsZCBmaXguIFVzZSB0aGUgbmV3IHBheWxvYWQg
Zm9ybWF0IGZvciB0aGUgYWdncmVnYXRlIGpvYi4KKworICAgICAgICAqIHB1YmxpYy9hZG1pbi90
ZXN0cy5waHA6CisKKzIwMTMtMDItMDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQnVpbGQgZml4ZXMuCisKKyAgICAgICAgKiBkYXRhYmFzZS9hZ2dyZWdhdGUu
anM6IFVzZSB2YXJpYWJsZXMgdGhhdCBhY3R1YWxseSBleGlzdC4KKyAgICAgICAgKiBkYXRhYmFz
ZS9kYXRhYmFzZS1jb21tb24uanM6CisgICAgICAgIChlbnN1cmVDb25maWd1cmF0aW9uSWRGcm9t
TGlzdCk6IEFkZCB0aGUgbmV3bHkgYWRkZWQgY29uZmlndXJhdGlvbiB0byB0aGUgbGlzdCBzbyB0
aGF0IHN1YnNlcXVlbnQKKyAgICAgICAgZnVuY3Rpb24gY2FsbHMgd2lsbCBmaW5kIHRoaXMgY29u
ZmlndXJhdGlvbi4KKworMjAxMy0wMS0zMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxMzAxMzk+IFNhZmFyaVBlcmZNb25pdG9y
OiBBZGQgUmVhZE1lCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAg
ICAgICAgVHVybmVkIEluc3RhbGxNYW51YWwgaW50byBhIHByb3BlciBtYXJrZG93biBkb2N1bWVu
dCBhbmQgYWRkZWQgUmVhZE1lLm1kLgorCisgICAgICAgICogSW5zdGFsbE1hbnVhbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBJbnN0YWxsTWFudWFsLm1kOiBNb3ZlZCBmcm9tIEluc3RhbGxNYW51YWwu
CisgICAgICAgICogUmVhZE1lLm1kOiBBZGRlZC4KKworMjAxMy0wMS0zMSAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxMDkzMzU+
IFNhZmFyaVBlcmZNb25pdG9yOiBBZGQgYmFzZWxpbmUgYW5kIHRhcmdldCBsaW5lcworCisgICAg
ICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcHJl
cGFyZXMgdGhlIGZyb250IGVuZCBjb2RlIHRvIHByb2Nlc3MgYmFzZWxpbmUgYW5kIHRhcmdldCBy
ZXN1bHRzIHByb3Blcmx5LgorCisgICAgICAgICogcHVibGljL2luZGV4Lmh0bWw6CisgICAgICAg
IChmZXRjaFRlc3QuY3JlYXRlUnVuQW5kUmVzdWx0cyk6IEV4dHJhY3RlZC4KKyAgICAgICAgKGZl
dGNoVGVzdCk6IENhbGwgY3JlYXRlUnVuQW5kUmVzdWx0cyBvbiBjdXJyZW50LCBiYXNlbGluZSwg
YW5kIHRhcmdldCB2YWx1ZXMgb2YgdGhlIEpTT04uCisgICAgICAgIERlbGV0ZWQgdGhlIGNvbW1l
bnQgYWJvdXQgaG93IHNvcnRpbmcgd2lsbCBiZSB1bm5lY2Vzc2FyeSBvbmNlIHdlIHN0YXJ0IHJl
c3VsdHMgaW4gdGhlIHNlcnZlciBzaWRlCisgICAgICAgIHNpbmNlIHNvcnRpbmcgYnkgdGhlIG1h
eGltdW0gcmV2aXNpb24gY29tbWl0IHRpbWUgdHVybmVkIG91dCB0byBiZSBub24tdHJpdmlhbCBp
biBwaHAuCisKKzIwMTMtMDEtMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDU3MDcxPiBTYWZhcmlQZXJmTW9uaXRvcjogVXNl
IG5ld2VyIHZlcnNpb24gb2YgZmxvdCB0aGF0IHN1cHBvcnRzIHRpbWV6b25lIHByb3Blcmx5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBVc2UgZmxvdCBhdCBo
dHRwczovL2dpdGh1Yi5jb20vZmxvdC9mbG90L2NvbW1pdC9lYzE2OGRhMmNiODYxOWViZjU5Yzdl
NzIxZDEyYzQ0YTc5NjBmZjQxLgorICAgICAgICBUaGVzZSBmaWxlcyBhcmUgImR5bmFtaWNhbGx5
IGxpbmtlZCIgdG8gb3VyIGFwcC4KKworICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgorICAg
ICAgICAqIHB1YmxpYy9qcy9qcXVlcnktMS44LjIubWluLmpzOiBSZW1vdmVkLgorICAgICAgICAq
IHB1YmxpYy9qcy9qcXVlcnkuY29sb3JoZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJs
aWMvanMvanF1ZXJ5LmZsb3QuY2F0ZWdvcmllcy5qczogQWRkZWQuCisgICAgICAgICogcHVibGlj
L2pzL2pxdWVyeS5mbG90LmNyb3NzaGFpci5qczogQWRkZWQuCisgICAgICAgICogcHVibGljL2pz
L2pxdWVyeS5mbG90LmVycm9yYmFycy5qczogQWRkZWQuCisgICAgICAgICogcHVibGljL2pzL2px
dWVyeS5mbG90LmZpbGxiZXR3ZWVuLmpzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1
ZXJ5LmZsb3QuanM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5taW4u
anM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90Lm5hdmlnYXRlLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QucmVzaXplLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3Quc2VsZWN0aW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3Quc3RhY2suanM6IEFkZGVkLgorICAgICAg
ICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5zeW1ib2wuanM6IEFkZGVkLgorICAgICAgICAqIHB1
YmxpYy9qcy9qcXVlcnkuZmxvdC50aHJlc2hvbGQuanM6IEFkZGVkLgorICAgICAgICAqIHB1Ymxp
Yy9qcy9qcXVlcnkuZmxvdC50aW1lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1
ZXJ5LmpzOiBBZGRlZC4KKworMjAxMy0wMS0yOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXR1cm4gTmFOIGluc3RlYWQgb2YgdGhyb3dpbmcgd2hlbiB0aGVy
ZSBhcmVuJ3QgZW5vdWdoIHNhbXBsZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KKworICAgICAgICBJdCdzIGJldHRlciB0byByZXR1cm4gTmFOIHdoZW4gd2UgZG9uJ3QgaGF2
ZSBlbm91Z2ggc2FtcGxlcyBzbyB0aGF0IHdlIGNhbiB0cmVhdCBpdAorICAgICAgICBhcyBpZiB3
ZSBkb24ndCBoYXZlIGFueSBjb25maWRlbmNlIGludGVydmFsLgorCisgICAgICAgICogcHVibGlj
L2pzL3N0YXRpc3RpY3MuanM6CisgICAgICAgIChTdGF0aXN0aWNzLm5ldyk6CisKKzIwMTMtMDEt
MjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQnVpbGQgZml4
LiBBcHBhcmVudGx5IFNhZmFyaSBzb21ldGltZXMgYXBwZW5kcyAvIGF0IHRoZSBlbmQgb2YgaGFz
aCBsb2NhdGlvbi4gUmVtb3ZlIHRoYXQuCisKKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNs
YXNzZXMuanM6CisgICAgICAgIChVUkxTdGF0ZS5wYXJzZUlmTmVlZGVkKToKKworMjAxMy0wMS0y
OCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTMwODE1ODI+IFNhZmFyaVBlcmZNb25pdG9yOiBBbHdheXMgdXNlIHBhcmFtZXRlcml6
ZWQgU1FMIGZ1bmN0aW9ucyBpbiBwaHAgY29kZQorCisgICAgICAgIFJldmlld2VkIGJ5IFJpY2t5
IE1vbmRlbGxvLgorCisgICAgICAgIFBhcmFtZXRlcml6ZWQgZXhlY3V0ZV9xdWVyeV9hbmRfZXhw
ZWN0X29uZV9yb3dfdG9fYmVfYWZmZWN0ZWQgYW5kIHVwZGF0ZWQgdGhlIGNvZGUgYWNjb3JkaW5n
bHkuCisKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vYWdncmVnYXRvcnMucGhwOiBVc2UgaGVyZWRv
Yy4KKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vYnVpbGRlcnMucGhwOgorICAgICAgICAqIHB1Ymxp
Yy9hZG1pbi9qb2JzLnBocDoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vcmVwb3NpdG9yaWVzLnBo
cDoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vdGVzdHMucGhwOiBVcGRhdGVkIHRoZSBmb3JtcyB0
byB1c2UgdW5wcmVmaXhlZCBmaWVsZCBuYW1lcyB0byBtYXRjaCBvdGhlciBwYWdlcy4KKyAgICAg
ICAgVGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVwZGF0ZV9maWVsZCB3aGVuIHVwZGF0aW5nIHRlc3Qn
cyB1cmwgYW5kIG1ldHJpYydzIHVuaXQuIENoYW5nZWQgdGhlIGFjdGlvbgorICAgICAgICB0byBy
ZWdlbmVyYXRlIGFnZ3JlZ2F0ZWQgbWF0cml4IGZyb20gInVwZGF0ZSIgdG8gImFkZCIgdG8gc2lt
cGxpZnkgdGhlIGRlcGVuZGVuY2llcyBpbiBpZi1lbHNlLgorICAgICAgICBBbHNvIHJlbW92ZWQg
YSBzdHJheSBjb2RlIHRvIHVwZGF0ZSB1bml0IGFuZCB1cmwgc2ltdWx0YW5lb3VzbHkgc2luY2Ug
aXQncyBuZXZlciB1c2VkLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2FkbWluLWhlYWRlci5w
aHA6CisgICAgICAgIChleGVjdXRlX3F1ZXJ5X2FuZF9leHBlY3Rfb25lX3Jvd190b19iZV9hZmZl
Y3RlZCk6IEFkZGVkICRwYXJhbXMuIEFsc28gYXV0b21hdGljYWxseSBjb252ZXJ0CisgICAgICAg
IGVtcHR5IHN0cmluZ3MgdG8gTlVMTCBhcyBpdCB3YXMgcHJldmlvdXNseSBkb25lIHZpYSAkZGIt
PnF1b3RlX3N0cmluZ19vcl9udWxsX2lmX2VtcHR5IGluIGNhbGxlcnMuCisgICAgICAgICh1cGRh
dGVfZmllbGQpOiBNb3ZlZCBmcm9tIHJlcG9zaXRvcmllcy5waHAuCisgICAgICAgIChhZGRfam9i
KToKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9kYi5waHA6CisgICAgICAgIChxdW90ZV9zdHJp
bmdfb3JfbnVsbF9pZl9lbXB0eSk6IFJlbW92ZWQgbm93IHRoYXQgbm9ib2R5IHVzZXMgdGhpcyBm
dW5jdGlvbi4KKworMjAxMy0wMS0yNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBCdWlsZCBmaXhlcy4gVHJlYXQgbWVhbiwgc3VtLCBhbmQgc3F1YXJlIHN1bSBh
cyBmbG9hdCwgbm90IGludC4KKworICAgICAgICBBbHNvIHVzZSA5NSUgY29uZmlkZW5jZSBpbnRl
cnZhbCBpbnN0ZWFkIG9mIDkwJSBjb25maWRlbmNlIGludGVydmFsLgorCisgICAgICAgICogcHVi
bGljL2FwaS9ydW5zLnBocDoKKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanM6
CisgICAgICAgICgudGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSk6CisKKzIwMTMtMDEtMjQg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGFuIGFkbWlu
aXN0cmF0aXZlIHBhZ2UgdG8gZWRpdCByZXBvc2l0b3J5IGluZm9ybWF0aW9uLgorCisgICAgICAg
IFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAgICAgICogcHVibGljL2FkbWluL3Jl
cG9zaXRvcmllcy5waHA6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2FkbWluLWhl
YWRlci5waHA6CisKKzIwMTMtMDEtMjMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzMDY3NTM5PiBTYWZhcmlQZXJmTW9uaXRvcjog
QXV0b21hdGljYWxseSBjcmVhdGUgYWdncmVnYXRlZCBtZXRyaWNzIGZyb20gYnVpbGRlciByZXBv
cnRzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgQXV0
by1jcmVhdGUgYWdncmVnYXRlZCBtYXRyaXggc3VjaCBhcyBhcml0aG1ldGljIG1lYW5zIGFuZCBn
ZW9tZXRyaWMgbWVhbnMgYXMgcmVxdWVzdGVkIGFuZCBhZGQgYSBqb2IKKyAgICAgICAgdG8gYWdn
cmVnYXRlIHJlc3VsdHMgZm9yIHRob3NlIG1hdHJpeCBpbiBwb3B1bGF0ZS1mcm9tLXJlcG9ydC5q
cy4KKworICAgICAgICAqIGRhdGFiYXNlL2dlbmVyYXRlLW1hbmlmZXN0LmpzOgorICAgICAgICAo
Lik6IEluY2x1ZGUgYWdncmVnYXRvciBuYW1lcyBzdWNoIGFzIEFyaXRobWV0aWMgYW5kIEdlb21l
dHJpYyBpbiB0aGUgbGlzdCBvZiBtZXRyaWNzLgorICAgICAgICAqIGRhdGFiYXNlL2luaXQtZGF0
YWJhc2Uuc3FsOiBSZW1vdmUgYW4gZXJyb25lb3VzIHVuaXF1ZSBjb25zdHJhaW50LiBUaGVyZSBj
b3VsZCBiZSBtdWx0aXBsZSBtYXRyaXggdGhhdCBzaGFyZQorICAgICAgICB0aGUgc2FtZSB0ZXN0
IGFuZCBuYW1lIChlLmcuIERyb21hZW8sIFRpbWUpIHdpdGggZGlmZmVyZW50IGFnZ3JlZ2F0b3Jz
IChlLmcuIEFyaXRobWV0aWMgYW5kIEdlb21ldHJpYykuCisgICAgICAgICogZGF0YWJhc2UvcG9w
dWxhdGUtZnJvbS1yZXBvcnQuanM6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKGdldFJlcG9y
dCk6IE5vIGNoYW5nZSBldmVuIHRob3VnaCB0aGUgZGlmZiBsb29rcyBhcyBpZiBpdCBtb3ZlZC4K
KyAgICAgICAgKHByb2Nlc3NSZXBvcnQpOiBFeHRyYWN0ZWQgZnJvbSBtYWluLiBGZXRjaCB0aGUg
bGlzdCBvZiBhZ2dyZWdhdG9ycywgcGFzcyB0aGF0IHRvIHJlY3Vyc2l2ZWx5RW5zdXJlVGVzdHNJ
ZHNBbmRNZXRyaWNzSWRzCisgICAgICAgIHRvIG9idGFpbiB0aGUgbGlzdCBvZiBhZ2dyZWdhdGVk
IG1ldHJpY3MgKHN1Y2ggYXMgYXJpdGhtZXRpYyBtZWFucykgdGhhdCBuZWVkIHRvIGJlIHBhc3Nl
ZCB0byBhZ2dyZWdhdGUuanMKKyAgICAgICAgKHNjaGVkdWxlSm9icyk6IEV4dHJhY3RlZCBmcm9t
IHByb2Nlc3NSZXBvcnQuIEFkZCBhIGpvYiB0byBhZ2dyZWdhdGUgcmVzdWx0cy4KKyAgICAgICAg
KHJlY3Vyc2l2ZWx5RW5zdXJlVGVzdHNJZHNBbmRNZXRyaWNzSWRzKTogV2hlbiBhIG1ldHJpYyBp
cyBhIGxpc3Qgb2YgbmFtZXMsIGFzc3VtZSB0aGVtIGFzIGFnZ3JlZ2F0b3IgbmFtZXMsCisgICAg
ICAgIGFuZCBhZGQgY29ycmVzcG9uZGluZyBtZXRyaWNzIGZvciB0aGVtLiBOb3RlIHdlIGNvbnZl
cnQgdGhvc2UgbmFtZXMgdG8gaWRzIHVzaW5nIHRoZSBkaWN0aW9uYXJ5IHdlIG9idGFpbmVkCisg
ICAgICAgIGluIHByb2Nlc3NSZXBvcnQuCisgICAgICAgIChlbnN1cmVNZXRyaWNJZCk6IFRha2Ug
YW4gYWdncmVnYXRvciBpZCBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAgKiBkYXRhYmFzZS9wcm9j
ZXNzLWpvYnMuanM6IFN1cHBvcnQgbXVsdGlwbGUgbWV0cmljIGlkcyBhbmQgYnVpbGQgaWQuIE5v
dGUgdGhhdCBhZ2dyZWdhdGUuanMgYWdncmVnYXRlcyByZXN1bHRzCisgICAgICAgIGZvciBhbGwg
YnVpbGRzIHdoZW4gdGhlIGJ1aWxkIGlkIGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICogcHVi
bGljL2FkbWluL3Rlc3RzLnBocDoKKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDogSW5jbHVk
ZSB0aGUgYWdncmVnYXRvciBuYW1lIGluIHRoZSBmdWxsIG5hbWUgc2luY2UgdGhlcmUgY291bGQg
YmUgbXVsdGlwbGUgbWV0cmljcworICAgICAgICBvZiB0aGUgc2FtZSBuYW1lIHdpdGggZGlmZmVy
ZW50IGFnZ3JlZ2F0b3JzLgorCisyMDEzLTAxLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgorCisgICAgICAgIEJ1aWxkIGZpeC4gRG9uJ3QgcGFzcyBpbiBhcmd1bWVudHMgdG8g
aW4gdGhlIHdyb25nIG9yZGVyLgorCisgICAgICAgICogZGF0YWJhc2UvYWdncmVnYXRlLmpzOgor
CisyMDEzLTAxLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xMzA1NzExMD4gU2FmYXJpUGVyZk1vbml0b3I6IHgtYXhpcyBpcyBt
ZXNzZWQgdXAKKworICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KKworICAgICAg
ICBTaW5jZSB0aGUgdmVyc2lvbiBvZiBmbG90IHdlIHVzZSBkb2Vzbid0IHN1cHBvcnQgc2hvd2lu
ZyBncmFwaHMgaW4gdGhlIGN1cnJlbnQgbG9jYXRlIG9yCisgICAgICAgIGluIGEgc3BlY2lmaWMg
dGltZXpvbmUsIGNvbnZlcnQgYWxsIHRpbWVzdGFtcHMgdG8gUFNUIG1hbnVhbGx5IChEYXRlJ3Mg
Y29uc3RydWN0b3Igd2lsbCBzdGlsbAorICAgICAgICB0cmVhdCB0aGVtIGFzIGluIFVUQykuIFdl
IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBjdXJyZW50IGxvY2F0ZSBiZWNhdXNlIG90aGVyIHdlYnNp
dGVzIG9uCisgICAgICAgIHdlYmtpdC5vcmcgYXNzdW1lIFBTVC4KKworICAgICAgICBBbHNvIGFw
cGVuZCB0aGlzIGluZm9ybWF0aW9uIHRvIGJ1aWxkJ3MgbGFiZWwuCisKKyAgICAgICAgKiBwdWJs
aWMvanMvaGVscGVyLWNsYXNzZXMuanM6CisgICAgICAgIChUZXN0QnVpbGQpOgorICAgICAgICAo
VGVzdEJ1aWxkLmxhYmVsKToKKworMjAxMy0wMS0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBTdG9yZSB0ZXN0IFVSTHMgcmVwb3J0ZWQgYnkgYnVpbGRlcnMu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgKiBkYXRh
YmFzZS9wb3B1bGF0ZS1mcm9tLXJlcG9ydC5qczoKKyAgICAgICAgKHJlY3Vyc2l2ZWx5RW5zdXJl
VGVzdHNJZHNBbmRNZXRyaWNzSWRzKTogUGFzcyBpbiB0aGUgdGVzdCB1cmwuCisgICAgICAgIChl
bnN1cmVUZXN0SWQpOiBTdG9yZSB0aGUgVVJMLgorCisyMDEzLTAxLTIwICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFlldCBhbm90aGVyIGJ1aWxkIGZpeDsgZG9u
J3QgYmxvdyB1cCBldmVuIGlmIHdlIGRpZG4ndCBoYXZlIGFueSB0ZXN0IGNvbmZpZ3VyYXRpb25z
LgorCisgICAgICAgICogcHVibGljL2FkbWluL3Rlc3RzLnBocDoKKworMjAxMy0wMS0yMSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBCdWlsZCBmaXg7IGRvbid0
IGluc3RhbnRpYXRlIERhdGUgd2hlbiBhIHRpbWVzdGFtcCB3YXNuJ3QgcHJvdmlkZWQuCisKKyAg
ICAgICAgKiBkYXRhYmFzZS9wb3B1bGF0ZS1mcm9tLXJlcG9ydC5qczoKKworMjAxMy0wMS0xOCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW5hbWUgU2FmYXJp
UGVyZkRhc2hib2FyZCB0byBTYWZhcmlQZXJmTW9uaXRvciBhbmQgYWRkIGEgaW5zdGFsbCBtYW51
YWwuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBBZGRlZCBh
biBpbnN0YWxsIG1hbnVhbC4KKworICAgICAgICAqIEluc3RhbGxNYW51YWw6IEFkZGVkLgorCisy
MDEyLTEyLTIxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1p
bm9yIGJ1aWxkIGZpeC4gRG9uJ3QgdW5zZXQgYnVpbGRlclBhc3N3b3JkIHdoZW4gaXQncyBub3Qg
c2V0LgorCisgICAgICAgICogcHVibGljL2FwaS9yZXBvcnQucGhwOgorCisyMDEyLTEyLTE4ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFByZXR0aWZ5IEpTT04g
cGF5bG9hZHMgYW5kIG1ha2UgdmVyeSBsYXJnZSBwYXlsb2FkcyBub3QgZXhwbG9kZSB0aGUgdGFi
bGUgaW4gam9icy5waHAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisK
KyAgICAgICAgKiBwdWJsaWMvYWRtaW4vYWRtaW4uY3NzOiBNYWtlIGEgdmVyeSBsYXJnZSBwYXls
b2FkIHNjcm9sbGFibGUuCisgICAgICAgICogcHVibGljL2FkbWluL2pvYnMucGhwOiBGb3JtYXQg
SlNPTnMuCisKKzIwMTItMTItMTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyODk3NDI0PiBTYWZhcmlQZXJmTW9uaXRvcjogQWRk
IGFiaWxpdHkgdG8gcmVwb3J0IHJlc3VsdHMgZnJvbSBib3RzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgQWRkIHJlcG9ydC5waHAgYW5kIHBvcHVsYXRl
LWZyb20tcmVwb3J0LmpzIHRoYXQgcHJvY2VzcyBKU09OIGZpbGVzIHN1Ym1pdHRlZCBieSBidWls
ZGVycy4KKworICAgICAgICAqIGRhdGFiYXNlL3BvcHVsYXRlLWZyb20tcmVwb3J0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAoZ2V0UmVwb3J0KTogT2J0YWlucyB0aGUgcGF5
bG9hZCAodGhlIGFjdHVhbCByZXBvcnQpIGZyb20gImpvYnMiIHRhYmxlLgorICAgICAgICAocmVj
dXJzaXZlbHlFbnN1cmVUZXN0c0lkc0FuZE1ldHJpY3NJZHMpOiAicmVwb3J0cy50ZXN0cyIgY29u
dGFpbiBhIHRyZWUgb2YgdGVzdHMsIHRlc3QgbWV0cmljcywKKyAgICAgICAgYW5kIHRoZWlyIHJl
c3VsdHMuIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgdHJhdmVyc2VzIHRlc3RzIGFuZCBtZXRy
aWNzIGFuZCBlbnN1cmUgdGhlaXIgaWRzLgorICAgICAgICAoZW5zdXJlVGVzdElkKToKKyAgICAg
ICAgKG1ldHJpY1RvVW5pdCk6IE1hcHMgYSBtZXRyaWMgbmFtZSB0byBhIHVuaXQuIFRoaXMgc2hv
dWxkIHJlYWxseSBiZSBkb25lIGluIHRoZSBjbGllbnQgc2lkZSBzaW5jZQorICAgICAgICB0aGVy
ZSBpcyBubyBwb2ludCBpbiBzdG9yaW5nIHVuaXQgZ2l2ZW4gdGhhdCBldmVyeSBtZXRyaWMgbWFw
cyB0byBleGFjdGx5IG9uZSB1bml0IChpLmUuIHRoZSBtYXBwaW5nCisgICAgICAgIGlzIGEgImZ1
bmN0aW9uIiBpbiBtYXRoZW1hdGljYWwgc2Vuc2UpLgorICAgICAgICAoZW5zdXJlTWV0cmljSWQp
OgorICAgICAgICAoZW5zdXJlUmVwb3NpdG9yeUlkc0ZvckFsbFJldmlzaW9ucyk6CisgICAgICAg
IChnZXRJZE9yQ3JlYXRlQnVpbGRXaXRoUmV2aXNpb25zKToKKyAgICAgICAgKGVuc3VyZUJ1aWxk
SWRBbmRSZXZpc2lvbnMpOiBPYnRhaW5zIGEgYnVpbGQgaWQgZ2l2ZW4gYSBidWlsZGVyIG5hbWUs
IGEgYnVpbGQgbnVtYmVyLCBhbmQgYSBidWlsZCB0aW1lCisgICAgICAgIGlmIG9uZSBhbHJlYWR5
IGV4aXN0cy4gSWYgbm90LCB0aGVuIGluc2VydHMgYSBuZXcgYnVpbGQgYW5kIGNvcnJlc3BvbmRp
bmcgcmV2aXNpb25zIGluZm9ybWF0aW9uIChlLmcuCisgICAgICAgIGJ1aWxkIDEyMyBtYXkgY29u
dGFpbiBXZWJLaXQgcmV2aXNpb24gcjQ1Njc4OSkuIFdlIGRvbid0IHJldHJpZXZlIHJvd3MgZm9y
IHJldmlzaW9ucyBzaW5jZSB3ZSBkb24ndCB1c2UKKyAgICAgICAgaXQgZWxzZXdoZXJlLgorICAg
ICAgICAoaW5zZXJ0UnVuKTogSW5zZXJ0IG5ldyByb3dzIGludG8gInRlc3RfcnVucyIgYW5kICJy
dW5faXRlcmF0aW9ucyIgdGFibGVzLCB0aGVyZWJ5IHJlY29yZGluZyB0aGUgbmV3CisgICAgICAg
IHRlc3QgcmVzdWx0cyBhbGwgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRoaXMgYWxsb3dzIHVz
IHRvIGtlZXAgdGhlIGRhdGFiYXNlIGNvbnNpc3RlbnQgaW4gdGhhdCBlaXRoZXIKKyAgICAgICAg
YSBidWlsZCBoYXMgYmVlbiByZXBvcnRlZCBvciBub3QgYXQgbGVhc3QgaW4gInRlc3RfcnVucyIg
YW5kICJydW5faXRlcmF0aW9ucyIgdGFibGVzLiBJdCdsbCBiZSBpZGVhbCBpZgorICAgICAgICB3
ZSBjb3VsZCBkbyB0aGUgc2FtZSBmb3IgImJ1aWxkcyIgYW5kICJidWlsZF9yZXZpc2lvbnMiIGJ1
dCB0aGF0J3Mgbm90IGEgaGFyZCByZXF1aXJlbWVudCBhcyBmYXIgYXMKKyAgICAgICAgb3RoZXIg
cGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uIGFyZSBjb25jZXJuZWQuCisgICAgICAgIChzY2hlZHVs
ZVF1ZXJpZXNUb0luc2VydFJ1bik6CisgICAgICAgICogZGF0YWJhc2UvcHJvY2Vzcy1qb2JzLmpz
OiBBZGQgYSBjYWxsIHRvIHBvcHVsYXRlLWZyb20tcmVwb3J0LmpzLgorICAgICAgICAqIHB1Ymxp
Yy9hcGkvcmVwb3J0LnBocDogQWRkZWQuIEFkZHMgYSBuZXcgam9iIG5hbWVkICJyZXBvcnQiIHRv
IGJlIHByb2Nlc3NlZCBieSBwb3B1bGF0ZS1mcm9tLXJlcG9ydC5qcy4KKyAgICAgICAgKiBwdWJs
aWMvaW5jbHVkZS9kYi5waHA6IFN1cHBvcnQgcGFyYW1ldGVyaXplZCBxdWVyeS4KKyAgICAgICAg
KiBwdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRlci5waHA6IEFsd2F5cyBpbmNsdWRlICdzdGF0dXMn
IGluIHRoZSByZXNwb25zZSBzbyB0aGF0IGJ1aWxkZXIgc3VibWl0dGluZworICAgICAgICBhIHRl
c3QgcmVzdWx0IGNvdWxkIGNvbmZpcm0gdGhhdCB0aGUgc3VibWlzc2lvbiBpbmRlZWQgc3VjY2Vl
ZGVkLgorCisyMDEyLTEyLTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJlbmFtZSBnZXQoSWQpT3JDcmVhdGUqKElkKSB0byBlbnN1cmUqSWQgYXMgc3VnZ2Vz
dGVkIGJ5IFJpY2t5IG9uIG9uZSBvZiBoaXMgY29kZSByZXZpZXdzLgorCisgICAgICAgICogZGF0
YWJhc2UvYWdncmVnYXRlLmpzOgorICAgICAgICAqIGRhdGFiYXNlL2RhdGFiYXNlLWNvbW1vbi5q
czoKKyAgICAgICAgKHNlbGVjdENvbHVtbkNyZWF0aW5nUm93SWZOZWVkZWQpOgorICAgICAgICAo
ZW5zdXJlUmVwb3NpdG9yeUlkKToKKyAgICAgICAgKGVuc3VyZUNvbmZpZ3VyYXRpb25JZEZyb21M
aXN0KToKKyAgICAgICAgKiBkYXRhYmFzZS9wZXJmLXdlYmtpdC1taWdyYXRvci5qczoKKyAgICAg
ICAgKC5taWdyYXRlU3RhdC4pOgorICAgICAgICAoLm1pZ3JhdGVTdGF0KToKKyAgICAgICAgKGdl
dE9yQ3JlYXRlQnVpbGRJZCk6CisKKzIwMTItMTItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgRXh0cmFjdCBjb21tb25seS11c2VkIGZ1bmN0aW9ucyBmcm9t
IGFnZ3JlZ2F0ZS5qcyBhbmQgcGVyZi13ZWJraXQtbWlncmF0b3IuanMuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgUmlja3kgTW9uZGVsbG8uCisKKyAgICAgICAgQXMgYSBwcmVwYXJhdGlvbiB0byBh
ZGQgcmVwb3J0LmpzIHRoYXQgcHJvY2Vzc2VzIGEgSlNPTiBmaWxlIHN1Ym1pdHRlZCBieSBib3Rz
LCBleHRyYWN0IHZhcmlvdXMgZnVuY3Rpb25zCisgICAgICAgIGFuZCBjbGFzc2VzIGZyb20gYWdn
cmVnYXRlLmpzIGFuZCBwZXJmLXdlYmtpdC1taWdyYXRvci5qcyB0byBiZSBzaGFyZWQuCisKKyAg
ICAgICAgKiBkYXRhYmFzZS9hZ2dyZWdhdGUuanM6IEV4dHJhY3RlZCBUYXNrUXVldWUgYW5kIFNl
cmlhbGl6ZWRUYXNrUXVldWUgaW50byB1dGlsaXR5LmpzLgorICAgICAgICAobWFpbik6CisgICAg
ICAgIChwcm9jZXNzQnVpbGQpOgorICAgICAgICAoc2F2ZUFnZ3JlZ2F0ZWRSZXN1bHRzKToKKyAg
ICAgICAgKiBkYXRhYmFzZS9kYXRhYmFzZS1jb21tb24uanM6CisgICAgICAgIChnZXRJZE9yQ3Jl
YXRlUGxhdGZvcm0pOiBFeHRyYWN0ZWQgZnJvbSB3ZWJraXQtcGVyZi1taWdyYXRvci5qcy4KKyAg
ICAgICAgKGdldElkT3JDcmVhdGVSZXBvc2l0b3J5KTogRGl0dG8uCisgICAgICAgIChnZXRDb25m
aWd1cmF0aW9uc0ZvclBsYXRmb3JtQW5kTWV0cmljcyk6IFJlbmFtZWQgZnJvbSBmZXRjaENvbmZp
Z3VyYXRpb25zLiBFeHRyYWN0ZWQgZnJvbSBhZ2dyZWdhdG9yLmpzLgorICAgICAgICAoZ2V0SWRG
cm9tTGlzdE9ySW5zZXJ0Q29uZmlndXJhdGlvbik6IFJlbmFtZWQgZnJvbSBnZXRPckluc2VydENv
bmZpZ3VyYXRpb24uIEV4dHJhY3RlZCBmcm9tIGFnZ3JlZ2F0b3IuanMuCisgICAgICAgICogZGF0
YWJhc2UvcGVyZi13ZWJraXQtbWlncmF0b3IuanM6CisgICAgICAgICogZGF0YWJhc2UvdXRpbGl0
eS5qczogQWRkZWQuCisgICAgICAgIChUYXNrUXVldWUpOiBFeHRyYWN0ZWQgZnJvbSBhZ2dyZWdh
dG9yLmpzLiBGaXhlZCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCB0YXNrcyBhZGRlZCBhZnRlciBzdGFy
dCgpIGlzIGNhbGxlZAorICAgICAgICBmcm9tIGJlaW5nIGV4ZWN1dGVkLgorICAgICAgICAoVGFz
a1F1ZXVlLnN0YXJ0VGFza3NJblF1ZXVlKTogRXhlY3V0ZSByZW1haW5pbmcgdGFza3Mgd2l0aG91
dCBzZXJpYWxpemluZyB0aGVtLiBJZiB0aGUgcXVldWUgaXMgZW1wdHksCisgICAgICAgIGNhbGwg
dGhlIGNhbGxiYWNrIHBhc3NlZCBpbnRvIHN0YXJ0KCkuCisgICAgICAgIChUYXNrUXVldWUudGFz
a0NhbGxiYWNrKTogVGhlIGZ1bmN0aW9uIGVhY2ggdGFzayBjYWxscyBiYWNrLiBEZWNyZW1lbnQg
dGhlIGNvdW50ZXIgYW5kIGNhbGwgc3RhdFRhc2tzSW5RdWV1ZS4KKyAgICAgICAgKFRhc2tRdWV1
ZS5hZGRUYXNrKToKKyAgICAgICAgKFRhc2tRdWV1ZS5zdGFydCk6CisgICAgICAgIChTZXJpYWxp
emVkVGFza1F1ZXVlKTogVW5saWtlIFRhc2tRdWV1ZSwgdGhpcyBjbGFzcyBleGVjdXRlcyBlYWNo
IHRhc2sgc2VxdWVudGlhbGx5LgorICAgICAgICAoU2VyaWFsaXplZFRhc2tRdWV1ZS5leGVjdXRl
TmV4dFRhc2spOgorICAgICAgICAoU2VyaWFsaXplZFRhc2tRdWV1ZS5hZGRUYXNrKToKKyAgICAg
ICAgKFNlcmlhbGl6ZWRUYXNrUXVldWUuc3RhcnQpOgorCisyMDEyLTEyLTE4ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmVydCBlcnJvbmVvdXNseSBjb21t
aXR0ZWQgY2hhbmdlcy4KKworICAgICAgICAqIGRhdGFiYXNlL2NvbmZpZy5qc29uOgorCisyMDEy
LTEyLTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGFnZ3Jl
Z2F0b3IuanMgc2hvdWxkIGJlIGFibGUgdG8gYWNjZXB0IG11bHRpcGxlIG1ldHJpYyBpZHMgYW5k
IGEgc2luZ2xlIGJ1aWxkIGlkLgorCisgICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxv
LgorCisgICAgICAgIE1ha2UgYWdncmVnYXRvci5qcyBhY2NlcHQgbXVsdGlwbGUgaWRzIGFuZCBn
ZW5lcmF0ZSByZXN1bHRzIGZvciBzaW5nbGUgYnVpbGQgd2hlbiBib3RzIGFyZQorICAgICAgICBy
ZXBvcnRpbmcgbmV3IHJlc3VsdHMuCisKKyAgICAgICAgKiBkYXRhYmFzZS9hZ2dyZWdhdGUuanM6
CisgICAgICAgIChwYXJzZUFyZ3YpOiBBZGRlZC4gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmlu
ZyB0aGUgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGFyZ3YsCisgICAgICAgIHdoaWNoIGN1cnJl
bnRseSBjb250YWlucyBtZXRyaWNJRHMgYW5kIGJ1aWxkSWRzLgorICAgICAgICAobWFpbik6IFVz
ZSBwYXJzZUFyZ3YgYW5kIHByb2Nlc3NDb25maWd1cmF0aW9ucworICAgICAgICAocHJvY2Vzc1Bs
YXRmb3JtKTogVXNlIGJ1aWxkIGlkcyBwYXNzZWQgaW4gb3Igb2J0YWluIGFsbCBidWlsZHMgZm9y
IHRoZSBnaXZlbiBwbGF0Zm9ybS4KKyAgICAgICAgKHByb2Nlc3NQbGF0Zm9ybS5wcm9jZXNzQ29u
ZmlndXJhdGlvbnMpOiBFeHRyYWN0ZWQuCisKKzIwMTItMTItMTcgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGFuIGFkbWluaXN0cmF0aXZlIHBhZ2UgZm9y
IGJ1aWxkZXJzLgorCisgICAgICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAg
ICAgIFdlIG5lZWQgYW4gYWRtaW5pc3RyYXRpdmUgcGFnZSB0byBhZGQgYW5kIGVkaXQgYnVpbGRl
ciBpbmZvcm1hdGlvbi4KKyAgICAgICAgQWxzbyByZW5hbWVkICJzbGF2ZXMiIHRvICJidWlsZGVy
cyIgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgdGVjaG5pY2FsIGphcmdvbiB3ZSB1
c2UuCisKKyAgICAgICAgKiBkYXRhYmFzZS9pbml0LWRhdGFiYXNlLnNxbDogUmVuYW1lZCBzbGF2
ZXMgdGFibGUgdG8gYnVpbGRlcnMuIERyb3Agc2xhdmVfb3MgYW5kIHNsYXZlX3NwZWMKKyAgICAg
ICAgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBwbGFucyB0byB1c2UgdGhvc2UgY29sdW1ucyBpbiBuZWFy
IGZ1dHVyZS4gQWxzbyBtYWtlIGJ1aWxkZXJfbmFtZSB1bmlxdWUKKyAgICAgICAgYXMgcmVxdWly
ZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGFwcC4KKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vYnVpbGRl
cnMucGhwOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvYXBpL3J1bnMucGhwOiBVcGRhdGVkIHBl
ciB0aGUgdGFibGUgcmVuYW1lLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2FkbWluLWhlYWRl
ci5waHA6IEFkZGVkIGEgbGluayB0byBidWlsZGVycy5waHAuCisKKzIwMTItMTItMTQgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQnVpbGQgZml4ZXMgZm9yIHI0
Njk4Mi4KKworICAgICAgICAqIGRhdGFiYXNlL2FnZ3JlZ2F0ZS5qczoKKyAgICAgICAgKGZldGNo
Q29uZmlndXJhdGlvbnMpOiAgQmluZCBpIHNvIHRoYXQgaXQncyBub3QgYWx3YXlzIG1ldHJpY0lk
cy5sZW5ndGguCisgICAgICAgIChmZXRjaEJ1aWxkc0ZvclBsYXRmb3JtKTogUmV0dXJuIHJ1bl9i
dWlsZCBhcyBidWlsZF9pZCBzaW5jZSB0aGF0J3Mgd2hhdCBjYWxsZXIgZXhwZWN0cy4KKyAgICAg
ICAgKHByb2Nlc3NCdWlsZCk6IERvbid0IHByaW50ICIuIiB1bnRpbCB3ZSd2ZSBjb21taXR0ZWQg
dHJhbnNhY3Rpb25zLiBJdCdzIG1pc2xlYWRpbmcuCisKKzIwMTItMTItMTMgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZC4gTW92ZSBzb21lIHBo
cCBmaWxlcyB0byBwdWJsaWMvaW5jbHVkZSBhcyBzdWdnZXN0ZWQgYnkgTWFyayBvbiBhIGNvZGUg
cmV2aWV3LgorCisgICAgICAgICogcHVibGljL2FkbWluL2FnZ3JlZ2F0b3JzLnBocDoKKyAgICAg
ICAgKiBwdWJsaWMvYWRtaW4vZm9vdGVyLnBocDogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMv
YWRtaW4vaGVhZGVyLnBocDogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vaW5kZXgu
cGhwOgorICAgICAgICAqIHB1YmxpYy9hZG1pbi9qb2JzLnBocDoKKyAgICAgICAgKiBwdWJsaWMv
YWRtaW4vdGVzdHMucGhwOgorICAgICAgICAqIHB1YmxpYy9hcGkvanNvbi1oZWFkZXIucGhwOiBS
ZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9hcGkvcnVucy5waHA6CisgICAgICAgICogcHVibGlj
L2RiLnBocDogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZTogQWRkZWQuCisgICAg
ICAgICogcHVibGljL2luY2x1ZGUvYWRtaW4tZm9vdGVyLnBocDogQ29waWVkIGZyb20gcHVibGlj
L2FkbWluL2Zvb3Rlci5waHAuCisgICAgICAgICogcHVibGljL2luY2x1ZGUvYWRtaW4taGVhZGVy
LnBocDogQ29waWVkIGZyb20gcHVibGljL2FkbWluL2hlYWRlci5waHAuCisgICAgICAgICogcHVi
bGljL2luY2x1ZGUvZGIucGhwOiBDb3BpZWQgZnJvbSBwdWJsaWMvZGIucGhwLgorICAgICAgICAq
IHB1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocDogQ29waWVkIGZyb20gcHVibGljL2FwaS9q
c29uLWhlYWRlci5waHAuCisKKzIwMTItMTItMTMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyODIyNjEzPiBTYWZhcmlQZXJmTW9u
aXRvcjogaW1wbGVtZW50IG5haXZlIHZhbHVlIGFnZ3JlZ2F0aW9uIG1lY2hhbmlzbQorCisgICAg
ICAgIFJldmlld2VkIGJ5IFJpY2t5IE1vbmRlbGxvLgorCisgICAgICAgIEFkZGVkIHRoZSBpbml0
aWFsIGltcGxlbWVudGF0aW9uIG9mIHZhbHVlIGFnZ3JlZ2F0aW9uLgorICAgICAgICBBbHNvIGFk
ZGVkIGFiaWxpdGllcyB0byBjb25maWd1cmUgdGhlIGRhc2hib2FyZCBwYWdlIGluIHRlc3RzLnBo
cC4KKworICAgICAgICAqIGRhdGFiYXNlL2FnZ3JlZ2F0ZS5qczogQWRkZWQuCisgICAgICAgIChU
YXNrUXVldWUpOiBBZGRlZC4gRXhlY3V0ZSBhbGwgdGFza3MgYXQgb25jZSBhbmQgd2FpdHMgZm9y
IHRob3NlIHRhc2tzIHRvIGNvbXBsZXRlLgorICAgICAgICAoVGFza1F1ZXVlLmFkZFRhc2spOgor
ICAgICAgICAoVGFza1F1ZXVlLnN0YXJ0KToKKyAgICAgICAgKFNlcmlhbGl6ZWRUYXNrUXVldWUp
OiBBZGRlZC4gRXhlY3V0ZSB0YXNrcyBzZXF1ZW50aWFsbHkgYWZ0ZXIgb25lIGFub3RoZXIgdW50
aWwgYWxsIG9mIHRoZW0gYXJlIGNvbXBsZXRlZC4KKyAgICAgICAgKFNlcmlhbGl6ZWRUYXNrUXVl
dWUuYWRkVGFzayk6CisgICAgICAgIChTZXJpYWxpemVkVGFza1F1ZXVlLnN0YXJ0KToKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAocHJvY2Vzc1BsYXRmb3JtKToKKyAgICAgICAgKGZldGNoQ29u
ZmlndXJhdGlvbnMpOgorICAgICAgICAoZmV0Y2hCdWlsZHNGb3JQbGF0Zm9ybSk6CisgICAgICAg
IChwcm9jZXNzQnVpbGQpOgorICAgICAgICAodGVzdHNXaXRoRGlmZmVyZW50SXRlcmF0aW9uQ291
bnRzKToKKyAgICAgICAgKGFnZ3JlZ2F0ZUl0ZXJhdGlvbnNGb3JNZXRyaWMpOiBSZXRyaWV2ZSBy
dW5faXRlcmF0aW9ucyBhbmQgYWdncmVnYXRlIHJlc3VsdHMgaW4gbWVtb3J5LgorICAgICAgICAo
c2F2ZUFnZ3JlZ2F0ZWRSZXN1bHRzKTogSW5zZXJ0IGludG8gdGVzdF9ydW5zIGFuZCB0ZXN0X2Nv
bmZpZyBpbiB0cmFuc2FjdGlvbnMuCisgICAgICAgIChnZXRPckluc2VydENvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoZmV0Y2hBZ2dyZWdhdG9ycyk6CisgICAgICAgICogZGF0YWJhc2UvZGF0YWJh
c2UtY29tbW9uLmpzOgorICAgICAgICAoZmV0Y2hUYWJsZSk6IExvZyBhbiBlcnJvciBhcyBhbiBl
cnJvci4KKyAgICAgICAgKGdldE9yQ3JlYXRlSWQpOiBFeHRyYWN0ZWQgZnJvbSBwZXJmLXdlYmtp
dC1taWdyYXRvci4KKyAgICAgICAgKHN0YXRpc3RpY3MpOiBBZGRlZC4KKyAgICAgICAgKiBkYXRh
YmFzZS9wZXJmLXdlYmtpdC1taWdyYXRvci5qczoKKyAgICAgICAgKG1pZ3JhdGVUZXN0Q29uZmln
KTogQ29udmVydGVkIHVuaXRzIHRvIHJlc3BlY3RpdmUgbWV0cmljIG5hbWVzLiBBbHNvIHJlbW92
ZWQgdGhlIGNvZGUgdG8gYWRkIGpvYnMgdG8gdXBkYXRlCisgICAgICAgIHJ1bnMgSlNPTiBzaW5j
ZSBydW5zIEpTT05zIGFyZSBnZW5lcmF0ZWQgb24gZGVtYW5kIG5vdy4KKyAgICAgICAgKG1pZ3Jh
dGVTdGF0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlUGxhdGZvcm1JZCk6CisgICAgICAgIChnZXRP
ckNyZWF0ZVRlc3RJZCk6CisgICAgICAgIChnZXRPckNyZWF0ZUNvbmZpZ3VyYXRpb25JZCk6Cisg
ICAgICAgIChnZXRPckNyZWF0ZVJldmlzaW9uSWQpOgorICAgICAgICAoZ2V0T3JDcmVhdGVSZXBv
c2l0b3J5SWQpOgorICAgICAgICAoZ2V0T3JDcmVhdGVCdWlsZElkKToKKyAgICAgICAgKiBkYXRh
YmFzZS9wcm9jZXNzLWpvYnMuanM6CisgICAgICAgIChwcm9jZXNzSm9iKTogSGFuZGxlICdhZ2dy
ZWdhdGUnIHR5cGUuCisKKzIwMTItMTItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgRml4IHRoZSBkYXNoYm9hcmQgYWZ0ZXIgYWRkaW5nIHRlc3RfbWV0cmlj
cy4KKworICAgICAgICBSZXZpZXdlZCBieSBSaWNreSBNb25kZWxsby4KKworICAgICAgICBSZW5h
bWUgdGVzdCB0byBtZXRyaWNzIGluIHZhcmlvdXMgZnVuY3Rpb25zIGFuZCBzb3J0IHRlc3RzIG9u
IHRoZSBjaGFydHMgcGFnZS4KKyAgICAgICAgQWxzbyByZXByZXNlbnRpbmcgd2hldGhlciBhIHRl
c3QgYXBwZWFycyBvciBub3QgYnkgc2V0dGluZyBhIGZsYWcgb24gZGFzaGJvYXJkCisgICAgICAg
IHdhcyBib2d1cyBiZWNhdXNlIHRlc3Qgb2JqZWN0cyBhcmUgc2hhcmVkIGJ5IG11bHRpcGxlIHBs
YXRmb3Jtcy4gSW5zdGVhZCwgc3RvcmUKKyAgICAgICAgZGFzaGJvYXJkIHBsYXRmb3JtIGxpc3Qg
YXMgaW50ZW5kZWQgYnkgdGhlIG1hbmlmZXN0IEpTT04uCisKKyAgICAgICAgKiBwdWJsaWMvaW5k
ZXguaHRtbDoKKyAgICAgICAgKFBlcmZUZXN0UnVucyk6IFJlbmFtZWQgdGVzdCB0byBtZXRyaWMu
CisgICAgICAgIChmZXRjaFRlc3QpOiBEaXR0by4KKyAgICAgICAgKHNob3dDaGFydHMpOiBEaXR0
bzsgYWxzbyBzb3J0IG1ldHJpY3MnIGZ1bGwgbmFtZXMgYmVmb3JlIGFkZGluZyB0aGVtIHRvIHRo
ZSBzZWxlY3QgZWxlbWVudC4KKyAgICAgICAgKGZ1bGxOYW1lKTogTW92ZWQgc28gdGhhdCBpdCBh
cHBlYXJzIGFib3ZlIHdoZXJlIGl0J3MgY2FsbGVkLgorICAgICAgICAqIHB1YmxpYy9qcy9oZWxw
ZXItY2xhc3Nlcy5qczoKKworMjAxMi0xMi0xMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KKworICAgICAgICBVcGRhdGUgdGVzdHMucGhwIHRvIHJlZmxlY3QgcmVjZW50IGNoYW5n
ZXMgaW4gdGhlIGRhdGFiYXNlIHNjaGVtYS4KKworICAgICAgICBSZXZpZXdlZCBieSBDb25yYWQg
U2h1bHR6LgorCisgICAgICAgIE1hZGUgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRlc3RzLnBo
cDoKKyAgICAgICAgMS4gRGlzYWxsb3cgYWRkaW5nIG1ldHJpY3MgdG8gdGVzdHMgd2l0aG91dCBz
dWJ0ZXN0cy4KKyAgICAgICAgMi4gTWFkZSBkYXNoYm9hcmQgY29uZmlndXJhYmxlIGJ5IGFkZGlu
ZyBjaGVja2JveGVzIGZvciBlYWNoIHBsYXRmb3JtIG9uIGVhY2ggbWV0cmljLgorICAgICAgICAz
LiBMaW5raWZpZWQgdGVzdHMgd2l0aCBzdWJ0ZXN0cyBpbnN0ZWFkIG9mIHNob3dpbmcgYWxsIHRo
ZW0gYXQgb25jZS4KKworICAgICAgICAqIHB1YmxpYy9hZG1pbi9hZG1pbi5jc3M6CisgICAgICAg
ICguYWN0aW9uLWZpZWxkLCAubm90aWNlKToKKyAgICAgICAgKGxhYmVsKToKKyAgICAgICAgKiBw
dWJsaWMvYWRtaW4vaGVhZGVyLnBocDogU3BlY2lmeSBwYXRocyBieSBhYnNvbHV0ZSBwYXRocyBz
byB0aGF0IHRlc3RzLnBocCBjYW4gdXNlIFBBVEhfSU5GTy4KKyAgICAgICAgKGV4ZWN1dGVfcXVl
cnlfYW5kX2V4cGVjdF9vbmVfcm93X3RvX2JlX2FmZmVjdGVkKTogUmV0dXJuIGEgYm9vbGVhbi4g
VXNlZCBpbiB0ZXN0cy5waHAgd2hpbGUgYWRkaW5nIHRlc3RfbWV0cmljcy4KKyAgICAgICAgKGFk
ZF9qb2IpOiBFeHRyYWN0ZWQuCisgICAgICAgICogcHVibGljL2FkbWluL3Rlc3RzLnBocDogU2Vl
IGFib3ZlLgorICAgICAgICAoYXJyYXlfaXRlbV9zZXRfZGVmYXVsdCk6IEFkZGVkLgorICAgICAg
ICAoYXJyYXlfaXRlbV9vcl9kZWZhdWx0KTogUmVuYW1lZCBmcm9tIGdldF92YWx1ZV93aXRoX2Rl
ZmF1bHQuCisgICAgICAgIChjb21wdXRlX2Z1bGxfbmFtZSk6IEV4dHJhY3RlZC4KKyAgICAgICAg
KHNvcnRfdGVzdHMpOiBEaXR0by4KKyAgICAgICAgKG1hcF9tZXRyaWNzX3RvX3Rlc3RzKTogRGl0
dG8uCisKKzIwMTItMTItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyODMyMzI0PiBTYWZhcmlQZXJmTW9uaXRvcjogTGlua2lm
eSB0ZXN0IG5hbWVzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAg
ICAgIExpbmtpZnkgdGhlIGhlYWRlcnMgdXNpbmcgbWV0cmljLnRlc3QudXJsIHdoZW4gaXQncyBw
cm92aWRlZC4KKworICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOgorCisyMDEyLTEyLTAzICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBwYXJhbWV0ZXJp
emVkIHBnX3F1ZXJ5X3BhcmFtcyBpbiBxdWVyeV9hbmRfZmV0Y2hfYWxsCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQ29ucmFkIFNodWx0ei4KKworICAgICAgICBBZGRyZXNzIGEgcmV2aWV3IGNvbW1l
bnQgYnkgTWFyayBieSB1c2luZyBwZ19xdWVyeV9wYXJhbXMgaW5zdGVhZCBvZiBwZ19xdWVyeSBp
biBxdWVyeV9hbmRfZmV0Y2hfYWxsLgorCisgICAgICAgICogcHVibGljL2FwaS9ydW5zLnBocDoK
KyAgICAgICAgKiBwdWJsaWMvZGIucGhwOgorICAgICAgICAoY3R5cGVfYWxudW1fdW5kZXJzY29y
ZSk6IEFkZGVkLgorCisyMDEyLTEyLTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFVwZGF0ZSB0aGUgbWlncmF0aW9uIHRvb2wgdG8gc3VwcG9ydCB0ZXN0X21l
dHJpY3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgorCisgICAgICAgIFVwZGF0
ZWQgdGhlIG1pZ3JhdGlvbiB0b29sIGZyb20gd2Via2l0LXBlcmYuYXBwc3BvdC5jb20gdG8gc3Vw
cG9ydCB0ZXN0X21ldHJpY3MuCisgICAgICAgIEFsc28gaW1wb3J0IHJ1bl9pdGVyYXRpb24gcm93
cyBhcyBydW5zIEpTT04gZmlsZXMgbm93IGluY2x1ZGUgaW5kaXZpZHVhbCB2YWx1ZXMuCisKKyAg
ICAgICAgKiBkYXRhYmFzZS9kYXRhYmFzZS1jb21tb24uanM6CisgICAgICAgIChhZGRKb2IpOiBF
eHRyYWN0ZWQuCisgICAgICAgICogZGF0YWJhc2UvcGVyZi13ZWJraXQtbWlncmF0b3IuanM6Cisg
ICAgICAgIChtaWdyYXRlVGVzdENvbmZpZyk6IEludGVyY2hhbmdlIHRoZSBvcmRlciBpbiB3aGlj
aCB3ZSBmZXRjaCBydW5zIGFuZCBhZGQgY29uZmlndXJhdGlvbnMKKyAgICAgICAgc28gdGhhdCB3
ZSBjYW4gcGFzcyBpbiB0aGUgbWV0cmljIG5hbWUgYW5kIHVuaXQgdG8gZ2V0T3JDcmVhdGVDb25m
aWd1cmF0aW9uSWQuCisgICAgICAgIChnZXRPckNyZWF0ZUNvbmZpZ3VyYXRpb25JZCk6IFVwZGF0
ZWQgdG8gYWRkIGJvdGggdGVzdCBjb25maWd1cmF0aW9uIGFuZCB0ZXN0IG1ldHJpYy4KKyAgICAg
ICAgKGVuc3VyZUNoZWNrb3V0KToKKworMjAxMi0xMi0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBCdWlsZCBmaXguIFN1cHByZXNzICJVbmRlZmluZWQgaW5k
ZXgiIHdhcm5pbmcuCisKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vdGVzdHMucGhwOgorCisyMDEy
LTEyLTAzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEZpeCBh
IGNvbW1pdCBlcnJvciBpbiByNDY3NTYuIGFwaS8gc2hvdWxkIG9idmlvdXNseSBiZSBhZGRlZCB1
bmRlciBwdWJsaWMvCisKKyAgICAgICAgKiBhcGk6IFJlbW92ZWQuCisgICAgICAgICogYXBpL2pz
b24taGVhZGVyLnBocDogUmVtb3ZlZC4KKyAgICAgICAgKiBhcGkvcnVucy5waHA6IFJlbW92ZWQu
CisgICAgICAgICogcHVibGljL2FwaTogQ29waWVkIGZyb20gYXBpLgorCisyMDEyLTEyLTAzICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaVBlcmZNb25p
dG9yOiBMaW5raWZ5IHJldmlzaW9ucyBhbmQgcmV2aXNpb25zIHJhbmdlCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMjgwMTAxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCisK
KyAgICAgICAgTGlua2lmeSByZXZpc2lvbnMgaW4gVGVzdEJ1aWxkLmxhYmVsLiBQYXNzIGluIG1h
bmlmZXN0LnJlcG9zaXRvcmllcyB0byBUZXN0QnVpbGQncyBjb25zdHJ1Y3RvcgorICAgICAgICBz
aW5jZSBpdCBuZWVkcyB0byBrbm93ICJ1cmwiIGFuZCAiYmxhbWVVcmwiLgorCisgICAgICAgIEFs
c28gdHdlYWtlZCB0aGUgYXBwZWFyYW5jZSBvZiBncmFwaHMgb24gY2hhcnRzIHBhZ2UgdG8gYmV0
dGVyIGFsaWduIGdyYXBocyB3aGVuIHVuaXQgbmFtZXMgYXJlIGxvbmcuCisKKyAgICAgICAgKiBw
dWJsaWMvaW5kZXguaHRtbDoKKyAgICAgICAgKiBwdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanM6
CisgICAgICAgIChUZXN0QnVpbGQpOgorICAgICAgICAoVGVzdEJ1aWxkLnJldmlzaW9uKTogUmVu
YW1lZCBmcm9tIHdlYmtpdFJldmlzaW9uLiBOb3cgcmV0dXJucyBhbiBhcmJpdHJhcnkgcmV2aXNp
b24gbnVtYmVyLgorICAgICAgICAoVGVzdEJ1aWxkLmxhYmVsKTogQWRkIGxhYmVscyBmb3IgYWxs
IHJldmlzaW9ucy4KKyAgICAgICAgKFRlc3RCdWlsZCk6CisgICAgICAgICguZW5zdXJlQ29udGFp
bmVyKToKKworMjAxMi0xMi0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBNYWtlIHRoZSBnZW5lcmF0aW9uIG9mICJydW5zIiBKU09OIGR5bmFtaWMgYW5kIHN1
cHBvcnQgdGVzdF9tZXRyaWNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KKwor
ICAgICAgICBJdCB0dXJuZWQgb3V0IHRoYXQgd2UgY2FuIGZldGNoIGFsbCBydW5zIGZvciBhIGdp
dmVuIGNvbmZpZ3VyYXRpb24gaW4gcm91Z2hseSAxMDAtMjAwbXMuCisKKyAgICAgICAgU2luY2Ug
dGhlcmUgY291bGQgYmUgaHVuZHJlZHMsIGlmIG5vdCB0aG91c2FuZHMsIG9mIHRlc3RzIGZvciBl
YWNoIGNvbmZpZ3VyYXRpb24gYW5kIHVzZXJzCisgICAgICAgIGFyZW4ndCBuZWNlc3NhcmlseSBp
bnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgYWxsIHRlc3QgcmVzdWx0cywgaXQncyBtdWNoIG1vcmUg
ZWZmaWNpZW50IHRvCisgICAgICAgIGdlbmVyYXRlIHJ1bnMgSlNPTiBkeW5hbWljYWxseSAoaS5l
LiBwb2xsaW5nKSB1cG9uIGEgcmVxdWVzdCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYWxsIG9mIHRo
ZW0KKyAgICAgICAgd2hlbiBib3RzIHJlcG9ydCBuZXcgcmVzdWx0cyAoaS5lLiBwdXNoaW5nKS4K
KworICAgICAgICBSZXdyb3RlIHRoZSBzY3JpcHQgdG8gZ2VuZXJhdGUgcnVucyBKU09OIGluIHBo
cCBhbmQgYWxzbyBzdXBwb3J0ZWQgdGVzdF9tZXRyaWNzIHRhYmxlLgorCisgICAgICAgICogYXBp
OiBBZGRlZC4KKyAgICAgICAgKiBhcGkvanNvbi1oZWFkZXIucGhwOiBBZGRlZC4gU2V0cyBDb250
ZW50LVR5cGUgYW5kIGNhY2hlIHBvbGljaWVzICgxMCBtaW51dGVzIGJ5IGRlZmF1bHQpLgorICAg
ICAgICAoZXhpdF93aXRoX2Vycm9yKTogQWRkZWQuCisgICAgICAgIChzdWNjZXNzZnVsX2V4aXQp
OiBBZGRlZC4KKyAgICAgICAgKiBhcGkvcnVucy5waHA6IEFkZGVkLiBQb3J0ZWQgZGF0YWJhc2Uv
ZGF0YWJhc2UtY29tbW9uLmpzLiBJdCdzIG11Y2ggc2hvcnRlciBpbiBwaHAhCisgICAgICAgICog
ZGF0YWJhc2UvZ2VuZXJhdGUtcnVucy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBkYXRhYmFzZS9w
cm9jZXNzLWpvYnMuanM6IE5vIGxvbmdlciBzdXBwb3J0cyAicnVucyIuCisgICAgICAgICogcHVi
bGljLy5odGFjY2VzczogQWRkZWQuIEFsd2F5cyBhZGQgTXVsdGlWaWV3IHNvIHRoYXQgYXBpL3J1
bnMgY2FuIHJlY2VpdmUgYSBwYXRoIGluZm8uCisgICAgICAgICogcHVibGljL2RiLnBocDogUHJp
bnQgIk5vdGhpbmcgdG8gc2VlIGhlcmUuIiB3aGVuIGl0J3MgYWNjZXNzZWQgZGlyZWN0bHkuCisg
ICAgICAgIChlbmRzX3dpdGgpOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvaW5kZXguaHRtbDog
RmV0Y2ggcnVucyBKU09OcyBmcm9tIC9hcGkvcnVucy8gaW5zdGVhZCBvZiBkYXRhLy4KKworMjAx
Mi0xMi0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBVcGRh
dGUgdGVzdHMucGhwIGFuZCBzYW1wbGUtZGF0YS5zcWwgcGVyIGFkZGl0aW9uIG9mIHRlc3RfbWV0
cmljcy4KKworICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisKKyAg
ICAgICAgUmVtb3ZlIGEgdXNlbGVzcyBjb2RlIGZyb20gdGVzdHMucGhwIHRoYXQgdXNlZCB0byB1
cGRhdGUgdGhlIHVuaXQgYW5kIHRoZSB1cmwgb2YgYSB0ZXN0CisgICAgICAgIHNpbmNlIGl0J3Mg
bm8gbG9uZ2VyIHVzZWQsIGFuZCBhZGQgdGhlIFVJIGFuZCB0aGUgYWJpbGl0eSB0byBhZGQgYSBu
ZXcgYWdncmVnYXRvciB0byBhIHRlc3QuCisKKyAgICAgICAgQWxzbyB1cGRhdGUgdGhlIHNhbXBs
ZSBkYXRhIHRvIHJlZmxlY3QgdGhlIGFkZGl0aW9uIG9mIHRlc3RfbWV0cmljcy4KKworICAgICAg
ICAqIGRhdGFiYXNlL3NhbXBsZS1kYXRhLnNxbDoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vdGVz
dHMucGhwOgorCisyMDEyLTExLTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFNoYXJlIG1vcmUgY29kZSBiZXR3ZWVuIGFkbWluIHBhZ2VzLgorCisgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KKworICAgICAgICBBZGRlZCBub3RpY2UgYW5k
IGV4ZWN1dGVfcXVlcnlfYW5kX2V4cGVjdF9vbmVfcm93X3RvX2JlX2FmZmVjdGVkIGhlbHBlciBm
dW5jdGlvbnMgdG8gc2hhcmUgbW9yZSBjb2RlCisgICAgICAgIGJldHdlZW4gYWRtaW4gcGFnZXMu
CisKKyAgICAgICAgQWxzbyBtb3ZlZCB0aGUgY29kZSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFz
ZSBpbnRvIGhlYWRlci5waHAgdG8gYmUgc2hhcmVkLiBBZG1pbiBwYWdlcyBqdXN0IG5lZWQKKyAg
ICAgICAgdG8gY2hlY2sgdGhlIG51bGxpdHkgb2YgZ2xvYmFsICRkYiBub3cuCisKKyAgICAgICAg
KiBwdWJsaWMvYWRtaW4vYWdncmVnYXRvcnMucGhwOgorICAgICAgICAqIHB1YmxpYy9hZG1pbi9o
ZWFkZXIucGhwOgorICAgICAgICAobm90aWNlKTogQWRkZWQKKyAgICAgICAgKGV4ZWN1dGVfcXVl
cnlfYW5kX2V4cGVjdF9vbmVfcm93X3RvX2JlX2FmZmVjdGVkKTogQWRkZWQuCisgICAgICAgICog
cHVibGljL2FkbWluL2luZGV4LnBocDoKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vam9icy5waHA6
CisgICAgICAgICogcHVibGljL2FkbWluL3Rlc3RzLnBocDoKKworMjAxMi0xMS0yOSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTYWZhcmlQZXJmTW9uaXRvcjog
QWRkIGFkbWluIHBhZ2UgdG8gZWRpdCBhZ2dyZWdhdG9ycworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTI3ODI2ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgorCisgICAgICAg
IEFkZCBhZ2dyZWdhdG9ycy5waHAuIEl0J3MgdmVyeSBzaW1wbGUuIFdlIHNob3VsZCBwcm9iYWJs
eSBzaGFyZSBtb3JlIGNvZGUgYmV0d2VlbiB2YXJpb3VzIGFkbWluIHBhZ2VzLgorCisgICAgICAg
ICogcHVibGljL2FkbWluL2FnZ3JlZ2F0b3JzLnBocDogQWRkZWQuCisgICAgICAgICogcHVibGlj
L2FkbWluL2hlYWRlci5waHA6CisgICAgICAgICogcHVibGljL2FkbWluL2pvYnMucGhwOiBSZW1v
dmVkIGFuIGVycm9uZW91cyBoaWRkZW4gaW5wdXQgZWxlbWVudC4KKworMjAxMi0xMS0yOCAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBGaXggYSBzeW50YXggZXJy
b3IgaW4gaW5pdC1kYXRhYmFzZS5zcWwgYW5kIGFkZCB0aGUgbWlzc2luZyBkcm9wIHRhYmxlIGF0
IHRoZSBiZWdpbm5pbmcuCisKKyAgICAgICAgKiBkYXRhYmFzZS9pbml0LWRhdGFiYXNlLnNxbDoK
KworMjAxMi0xMS0yOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBTYWZhcmlQZXJmTW9uaXRvcjogQWxsb3cgbXVsdGlwbGUgbWV0cmljcyBwZXIgdGVzdAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTI3NzM1MDY+CisKKyAgICAgICAgUnViYmVyLXN0YW1wZWQg
YnkgTWFyayBSb3dlLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyB0YWJsZSB0ZXN0X21ldHJp
Y3MuIFRoaXMgdGFibGUgcmVwcmVzZW50cyBtZXRyaWNzIGVhY2ggdGVzdCBjYW4gaGF2ZQorICAg
ICAgICBzdWNoIGFzIHRpbWUsIG1lbW9yeSBhbGxvY2F0aW9uLCBmcmFtZSByYXRlIGFzIHdlbGwg
YXMgYWdncmVnYXRpb24gc3VjaCBhcyBhcml0aG1ldGljIG1lYW4KKyAgICAgICAgYW5kIGdlb21l
dHJpYyBtZWFuLgorCisgICAgICAgIFVwZGF0ZWQgYWRtaW4vdGVzdHMucGhwIGFuZCBpbmRleC5o
dG1sIGFjY29yZGluZ2x5LgorCisgICAgICAgIEFsc28gY3JlYXRlIGZldyBpbmRleGVzIGJhc2Vk
IG9uIHBvc3RncmVzJyAiZXhwbGFpbiBhbmFseXNpcyIgYXMgc3VnZ2VzdGVkIGJ5IE1hcmsuCisK
KyAgICAgICAgKiBkYXRhYmFzZS9nZW5lcmF0ZS1tYW5pZmVzdC5qczoKKyAgICAgICAgKGJ1aWxk
UGxhdGZvcm1NYXBJZlBvc3NpYmxlKToKKyAgICAgICAgKiBkYXRhYmFzZS9nZW5lcmF0ZS1ydW5z
LmpzOgorICAgICAgICAoZmV0Y2hSdW5zKToKKyAgICAgICAgKiBkYXRhYmFzZS9pbml0LWRhdGFi
YXNlLnNxbDoKKyAgICAgICAgKiBkYXRhYmFzZS9zY2hlbWEuZ3JhZmZsZToKKyAgICAgICAgKiBw
dWJsaWMvYWRtaW4vYWRtaW4uY3NzOgorICAgICAgICAodGFibGUpOgorICAgICAgICAodGJvZHku
b2RkKToKKyAgICAgICAgKiBwdWJsaWMvYWRtaW4vdGVzdHMucGhwOgorICAgICAgICAqIHB1Ymxp
Yy9pbmRleC5odG1sOgorCisyMDEyLTExLTI3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFNhZmFyaVBlcmZNb25pdG9yOiBJbXByb3ZlIHRoZSB3ZWJraXQtcGVy
ZiBtaWdyYXRpb24gdG9vbAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI3NjA4ODI+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgorCisgICAgICAgIE1ha2UgdGhlIG1pZ3JhdG9y
IHRvb2wgc2tpcCBydW5zIHdoZW4gZmV0Y2hpbmcgcnVucyBmYWlsZWQgc2luY2Ugd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20gaXMgdW5yZWxpYWJsZQorICAgICAgICBhbmQgd2UgZG9uJ3Qgd2FudCB0
byBwYXVzZSB0aGUgd2hvbGUgaW1wb3J0YXRpb24gcHJvY2VzcyB1bnRpbCB0aGUgdXNlciBjb21l
cyBiYWNrIHRvIGRlY2lkZSB3aGV0aGVyCisgICAgICAgIHRvIHJldHJ5IG9yIG5vdC4KKworICAg
ICAgICBBbHNvIHBsYWNlIGZvcm0gY29udHJvbHMgbmV4dCB0byBlYWNoIHRlc3QgaW4gdGVzdHMu
cGhwIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBzY3JvbGwgYWxsIHRoZSB3YXkKKyAgICAg
ICAgZG93biB0byBtYWtlIG1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgRmluYWxseSwgYWRkIHVu
aXF1ZSBjb25zdHJhaW50IHRvIChydW5fY29uZmlnLCBydW5fYnVpbGQpIGluIHRlc3RfcnVucyB0
YWJsZSBpbiBvcmRlciB0byBvcHRpbWl6ZSBhIHF1ZXJ5CisgICAgICAgIG9mIHRoZSBmb3JtOiAi
U0VMRUNUIHJ1bl9pZCBGUk9NIHRlc3RfcnVucyBXSEVSRSBydW5fY29uZmlnID0gJDEgQU5EIHJ1
bl9idWlsZCA9ICQyIiwKKworICAgICAgICAqIGRhdGFiYXNlL2luaXQtZGF0YWJhc2Uuc3FsOgor
ICAgICAgICAqIGRhdGFiYXNlL3BlcmYtd2Via2l0LW1pZ3JhdG9yLmpzOgorICAgICAgICAobWln
cmF0ZVRlc3RDb25maWcpOgorICAgICAgICAqIGRhdGFiYXNlL3NjaGVtYS5ncmFmZmxlOgorICAg
ICAgICAqIHB1YmxpYy9hZG1pbi9hZG1pbi5jc3M6CisgICAgICAgICh0YWJsZSk6CisgICAgICAg
ICogcHVibGljL2FkbWluL3Rlc3RzLnBocDoKKworMjAxMi0xMS0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBDcmVhdGUgYSBuZXcgcGVyZm9ybWFuY2UgZGFz
aGJvYXJkCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjYyNTU4Mj4KKworICAgICAgICBSdWJi
ZXItc3RhbXBlZCBieSBNYXJrIFJvd2UuCisKKyAgICAgICAgQWRkIHRoZSBpbml0aWFsIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBwZXJmIGRhc2hib2FyZC4KKworICAgICAgICAqIGRhdGFiYXNlOiBB
ZGRlZC4KKyAgICAgICAgKiBkYXRhYmFzZS9jb25maWcuanNvbjogQWRkZWQuCisgICAgICAgICog
ZGF0YWJhc2UvZGF0YWJhc2UtY29tbW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbm5lY3QpOgor
ICAgICAgICAoZmV0Y2hUYWJsZSk6CisgICAgICAgIChtYW5pZmVzdFBhdGgpOgorICAgICAgICAo
cGF0aFRvUnVuc0pTT04pOgorICAgICAgICAocGF0aFRvTG9jYWxTY3JpcHQpOgorICAgICAgICAo
Y29uZmlnKToKKyAgICAgICAgKiBkYXRhYmFzZS9nZW5lcmF0ZS1tYW5pZmVzdC5qczogQWRkZWQu
CisgICAgICAgIChlbnN1cmVQcm9wZXJ0eSk6CisgICAgICAgIChidWlsZFRlc3RNYXApOgorICAg
ICAgICAoYnVpbGRQbGF0Zm9ybU1hcElmUG9zc2libGUpOgorICAgICAgICAoZ2VuZXJhdGVGaWxl
SWZQb3NzaWJsZSk6CisgICAgICAgICogZGF0YWJhc2UvcGVyZi13ZWJraXQtbWlncmF0b3IuanM6
IEFkZGVkLgorICAgICAgICAqIGRhdGFiYXNlL3Byb2Nlc3Mtam9icy5qczogQWRkZWQuCisgICAg
ICAgICogZGF0YWJhc2Uvc2FtcGxlLWRhdGEuc3FsOiBBZGRlZC4KKyAgICAgICAgKiBkYXRhYmFz
ZS9zY2hlbWEuZ3JhZmZsZTogQWRkZWQuCisgICAgICAgICogcHVibGljOiBBZGRlZC4KKyAgICAg
ICAgKiBwdWJsaWMvYWRtaW46IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9hZG1pbi9SRUFETUU6
IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9hZG1pbi9hZG1pbi5jc3M6IEFkZGVkLgorICAgICAg
ICAqIHB1YmxpYy9hZG1pbi9mb290ZXIucGhwOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvYWRt
aW4vaGVhZGVyLnBocDogQWRkZWQuCisgICAgICAgICogcHVibGljL2FkbWluL2luZGV4LnBocDog
QWRkZWQuCisgICAgICAgICogcHVibGljL2FkbWluL2pvYnMucGhwOiBBZGRlZC4KKyAgICAgICAg
KiBwdWJsaWMvYWRtaW4vdGVzdHMucGhwOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvY29tbW9u
LmNzczogQWRkZWQuCisgICAgICAgICogcHVibGljL2RhdGE6IEFkZGVkLgorICAgICAgICAqIHB1
YmxpYy9kYi5waHA6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9pbmRleC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwdWJsaWMvanM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9qcy9oZWxwZXIt
Y2xhc3Nlcy5qczogQWRkZWQuCisgICAgICAgICogcHVibGljL2pzL2pxdWVyeS0xLjguMi5taW4u
anM6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5taW4uanM6IEFkZGVk
LgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5wbHVnaW5zLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBwdWJsaWMvanMvc2hhcmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGZpbGVOYW1lRnJv
bVBsYXRmb3JtQW5kVGVzdCk6CisgICAgICAgICogcHVibGljL2pzL3N0YXRpc3RpY3MuanM6IEFk
ZGVkLgorCkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvSW5zdGFsbC5tZAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvSW5zdGFsbC5tZAkocmV2aXNpb24gMCkK
KysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9JbnN0YWxsLm1kCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzkgQEAKKyMgQ2hlY2tpbmcgT3V0IHRoZSBDb2RlIGFuZCBJbnN0YWxsaW5nIFJl
cXVpcmVkIEFwcGxpY2F0aW9ucworCitOb3RlOiBUaGVzZSBpbnN0cnVjdGlvbnMgYXNzdW1lIHlv
dSdyZSB1c2luZyBNYWMgT1MgWCBNb3VudGFpbiBMaW9uIGFzIHRoZSBob3N0IHNlcnZlciwgYW5k
IGFzc3VtZSB0aGF0IHdlJ3JlIGluc3RhbGxpbmcKK3RoaXMgYXBwbGljYXRpb24gYXQgYC9Wb2x1
bWVzL0RhdGEvV2ViS2l0UGVyZk1vbml0b3JgLgorCisxLiBJbnN0YWxsIFNlcnZlciAoRE8gTk9U
IGxhdW5jaCB0aGUgU2VydmVyIGFwcCkKKzIuIEluc3RhbGwgbm9kZS4KKzMuIEluc3RhbGwgWGNv
ZGUgd2l0aCBjb21tYW5kIGxpbmUgdG9vbHMgKG9ubHkgbmVlZGVkIGZvciBzdm4pCis0LiBgc3Zu
IGNvIGh0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnIC9Wb2x1bWVzL0RhdGEvV2ViS2l0UGVyZk1vbml0b3JgCis1LiBJ
bnNpZGUgYC9Wb2x1bWVzL0RhdGEvV2ViS2l0UGVyZk1vbml0b3JgLCBydW4gYG5wbSBpbnN0YWxs
IHBnYC4KKworCisjIENvbmZpZ3VyaW5nIEFwYWNoZQorCitEb24ndCB1c2UgdGhlIFNlcnZlciBB
cHAgdG8gc3RhcnQgb3Igc3RvcCBBcGFjaGUuIEl0IGRvZXMgd2VpcmQgdGhpbmdzIHRvIGh0dHBk
IGNvbmZpZ3VyYXRpb25zLiBVc2UgYXBhY2hlY3RsIGluc3RlYWQ6CisgLSBTdGFydGluZyBodHRw
ZDogYHN1ZG8gYXBhY2hlY3RsIHN0b3BgCisgLSBTdG9wcGluZyBodHRwZDogYHN1ZG8gYXBhY2hl
Y3RsIHJlc3RhcnRgCisKKyMjIEVkaXQgL3ByaXZhdGUvZXRjL2FwYWNoZTIvaHR0cGQuY29uZgor
CisxLiBVcGRhdGUgU2VydmVyQWRtaW4gdG8geW91ciBlbWFpbCBhZGRyZXNzCisyLiBDaGFuZ2Ug
RG9jdW1lbnRSb290IHRvIGAvVm9sdW1lcy9EYXRhL1dlYktpdFBlcmZNb25pdG9yL3B1YmxpYy9g
CiszLiBVbmNvbW1lbnQgYCJMb2FkTW9kdWxlIHBocDVfbW9kdWxlIGxpYmV4ZWMvYXBhY2hlMi9s
aWJwaHA1LnNvImAKKzQuIE1vZGlmeSB0aGUgZGlyZWN0aXZlcyBmb3IgdGhlIGRvY3VtZW50IHJv
b3QgYW5kIC8gdG8gYWxsb3cgb3ZlcnJpZGluZyBgIkFsbCJgCis1LiBEZWxldGUgZGlyZWN0aXZl
cyBvbiBDR0ktRXhlY3V0YWJsZXMKKzYuIEFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgdG8g
ZW5hYmxlIGd6aXA6CisgICAgCisgICAgICAgIDxJZk1vZHVsZSBtb2RfZGVmbGF0ZS5jPgorICAg
ICAgICAgICAgQWRkT3V0cHV0RmlsdGVyQnlUeXBlIERFRkxBVEUgdGV4dC9odG1sIHRleHQveG1s
IHRleHQvcGxhaW4gYXBwbGljYXRpb24vanNvbiBhcHBsaWNhdGlvbi94bWwgYXBwbGljYXRpb24v
eGh0bWwreG1sCisgICAgICAgIDwvSWZNb2R1bGU+CisKKzcuIEFkZCB0aGUgZm9sbG93aW5nIGRp
cmVjdGl2ZXMgdG8gZW5hYmxlIHpsaWIgY29tcHJlc3Npb24gYW5kIE11bHRpVmlld3Mgb24gV2Vi
S2l0UGVyZk1vbml0b3IvcHVibGljOgorCisgICAgICAgIE9wdGlvbnMgSW5kZXhlcyBNdWx0aVZp
ZXdzCisgICAgICAgIHBocF9mbGFnIHpsaWIub3V0cHV0X2NvbXByZXNzaW9uIG9uCisKK05vdGU6
IElmIHlvdSd2ZSBhY2NpZGVudGFsbHkgdHVybmVkIG9uIHRoZSBTZXJ2ZXIgYXBwLCBodHRwZC5j
b25mIGlzIGxvY2F0ZWQgYXQgYC9MaWJyYXJ5L1NlcnZlci9XZWIvQ29uZmlnL2FwYWNoZTIvYCBp
bnN0ZWFkLgorRGVsZXRlIHRoZSBXZWIgU2hhcmluZyByZWxhdGVkIHN0dWZmIGFuZCBpbmNsdWRl
IGAvcHJpdmF0ZS9ldGMvYXBhY2hlMi9odHRwZC5jb25mYCBhdCB0aGUgdmVyeSBlbmQuCisKK1Ro
ZSBsb2cgaXMgbG9jYXRlZCBhdCBgL3ByaXZhdGUvdmFyL2xvZy9hcGFjaGUyYC4KKworCisjIFBy
b3RlY3RpbmcgdGhlIEFkbWluaXN0cmF0aXZlIFBhZ2VzIHRvIFByZXZlbnQgRXhlY3V0aW9uIG9m
IEFyYml0cmFyeSBDb2RlCisKK0J5IGRlZmF1bHQsIHRoZSBhcHBsaWNhdGlvbiBnaXZlcyB0aGUg
YWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlIHRvIGV2ZXJ5b25lLiBBbnlvbmUgY2FuIGFkZCwgcmVt
b3ZlLCBvciBlZGl0IHRlc3RzLAorYnVpbGRlcnMsIGFuZCBvdGhlciBlbnRpdGllcyBpbiB0aGUg
ZGF0YWJhc2UgYW5kIG1heSBldmVuIGV4ZWN1dGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQgb24gdGhl
IHNlcnZlciB2aWEgYWdncmVnYXRvcnMuCisKK1dlIHJlY29tbWVuZCBwcm90ZWN0aW9uIHZpYSBE
aWdlc3QgQXV0aCBvbiBodHRwcyBjb25uZWN0aW9uLgorCitHZW5lcmF0ZSBhIHBhc3N3b3JkIGZp
bGUgdmlhIGBodGRpZ2VzdCAtYyA8cGF0aD4gPHJlYWxtPiA8dXNlcm5hbWU+YCwgYW5kIHRoZW4g
Y3JlYXRlIGFkbWluLy5odGFjY2VzcyB3aXRoOgorCisJQXV0aFR5cGUgRGlnZXN0CisJQXV0aE5h
bWUgIjxSZWFsbT4iCisJQXV0aERpZ2VzdFByb3ZpZGVyIGZpbGUKKwlBdXRoVXNlckZpbGUgIjxS
ZWFsbT4iCisJUmVxdWlyZSB2YWxpZC11c2VyCisKK3doZXJlIDxSZWFsbT4gaXMgcmVwbGFjZWQg
d2l0aCB0aGUgcmVhbG0gb2YgeW91ciBjaG9pY2UuCisKKworIyBDb25maWd1cmluZyBQb3N0Z3Jl
U1FMCisKKzEuIENyZWF0ZSBkYXRhYmFzZTogYC9BcHBsaWNhdGlvbnMvU2VydmVyLmFwcC9Db250
ZW50cy9TZXJ2ZXJSb290L3Vzci9iaW4vaW5pdGRiIC9Wb2x1bWVzL0RhdGEvV2ViS2l0UGVyZk1v
bml0b3IvUG9zdGdyZXNTUUxgCisyLiBTdGFydCBkYXRhYmFzZToKKyAgIGAvQXBwbGljYXRpb25z
L1NlcnZlci5hcHAvQ29udGVudHMvU2VydmVyUm9vdC91c3IvYmluL3BnX2N0bCAtRCAvVm9sdW1l
cy9EYXRhL1dlYktpdFBlcmZNb25pdG9yL1Bvc3RncmVzU1FMCisgICAtbCBsb2dmaWxlIC1vICIt
ayAvVm9sdW1lcy9EYXRhL1dlYktpdFBlcmZNb25pdG9yL1Bvc3RncmVzU1FMIiBzdGFydGAKKwor
IyMgQ3JlYXRpbmcgYSBEYXRhYmFzZSBhbmQgYSBVc2VyCisKKzEuIENyZWF0ZSBhIGRhdGFiYXNl
OiBgY3JlYXRlZGIgd2Via2l0LXBlcmYtZGIgLWggbG9jYWxob3N0YAorMi4gQ3JlYXRlIGEgdXNl
cjogYGNyZWF0ZXVzZXIgLVAgLVMgLWUgd2Via2l0LXBlcmYtZGItdXNlciAtaCBsb2NhbGhvc3Rg
CiszLiBDb25uZWN0IHRvIGRhdGFiYXNlOiBgcHNxbCB3ZWJraXQtcGVyZi1kYiAtaCBsb2NhbGhv
c3RgCis0LiBHcmFudCBhbGwgcGVybWlzc2lvbnMgdG8gdGhlIG5ldyB1c2VyOiBgZ3JhbnQgYWxs
IHByaXZpbGVnZXMgb24gZGF0YWJhc2UgIndlYmtpdC1wZXJmLWRiIiB0byAid2Via2l0LXBlcmYt
ZGItdXNlciI7YAorNS4gVXBkYXRlIGRhdGFiYXNlL2NvbmZpZy5qc29uLgorCisjIyBJbml0aWFs
aXppbmcgdGhlIERhdGFiYXNlCisKK1J1biBgZGF0YWJhc2UvaW5pdC1kYXRhYmFzZS5zcWxgIGlu
IHBzcWwgYXMgYHdlYmtpdC1wZXJmLWRiLXVzZXJgOgorYHBzcWwgd2Via2l0LXBlcmYtZGIgLWgg
bG9jYWxob3N0IC0tdXNlcm5hbWUgd2Via2l0LXBlcmYtZGItdXNlciAtZiBkYXRhYmFzZS9pbml0
LWRhdGFiYXNlLnNxbGAKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9SZWFkTWUubWQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL1JlYWRNZS5tZAkocmV2aXNp
b24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9SZWFkTWUubWQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDEgQEAKKyMgQ29uY2VwdHMKKworIyMgUGxhdGZvcm0KKworQSBwbGF0
Zm9ybSBpcyBhbiBlbnZpcm9ubWVudGFsIGNvbmZpZ3VyYXRpb24gdW5kZXIgd2hpY2ggcGVyZm9y
bWFuY2UgdGVzdHMgcnVuLiBUaGlzIGlzIHR5cGljYWxseQorYW4gb3BlcmF0aW5nIHN5c3RlbSBz
dWNoIGFzIExpb24sIE1vdW50YWluIExpb24sIG9yIFdpbmRvd3MgNy4KKworIyMgQnVpbGRlcgor
CitBIGJ1aWxkZXIgaXMgYSBwaHlzaWNhbCBtYWNoaW5lIHRoYXQgc3VibWl0cyBhIHJlc3VsdCBv
ZiBvbmUgb3IgbW9yZSB0ZXN0cyB0byBvbmUgb3IgbW9yZSBwbGF0Zm9ybXMuCitFYWNoIGJ1aWxk
ZXIgc2hvdWxkIGhhdmUgYSBwYXNzd29yZCBpdCB1c2VzIHRvIHN1Ym1pdCB0aGUgcmVzdWx0cyB0
byB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgaXQgbWF5IGFsc28KK2hhdmUgYSBVUkwgYXNzb2NpYXRl
ZCB3aXRoIGl0LgorCisjIyBCdWlsZAorCitBIGJ1aWxkIGlzIGEgc2luZ2xlIHJ1biBvZiB0ZXN0
cyBvbiBhIGdpdmVuIGJ1aWxkZXIuIEl0J3MgcG9zc2libGUgZm9yIGEgc2luZ2xlIGJ1aWxkIHRv
IGhhdmUgcmFuIG11bHRpcGxlCit0ZXN0cyBvbiBtdWx0aXBsZSBwbGF0Zm9ybXMuCisKKyMjIFRl
c3QgTWV0cmljCisKK0EgdGVzdCBtZXRyaWMgaXMgYSB0eXBlIG9mIG1lYXN1cmVtZW50IGEgdGVz
dCBtYWtlcy4gQSBzaW5nbGUgdGVzdCBtYXkgbWVhc3VyZSBtdWx0aXBsZSBtZXRyaWNzIHN1Y2gg
YXMKK1RpbWUgKG1zKSwgTWFsbG9jIChieXRlcyksIGFuZCBKU0hlYXAgKGJ5dGVzKS4gVGhlIG1h
cHBpbmcgZnJvbSBtZXRyaWNzIHRvIHVuaXRzIGlzIGEgZnVuY3Rpb24KKyhpbiBtYXRoZW1hdGlj
YWwgc2Vuc2UpLgorCisjIyBUZXN0IENvbmZpZ3VyYXRpb24KKworQSB0ZXN0IGNvbmZpZ3VyYXRp
b24gaXMgYSBjb21iaW5hdGlvbiBvZiBhIHRlc3QgbWV0cmljLCBhIHBsYXRmb3JtLCBhbmQgYSBj
b25maWd1cmF0aW9uIHR5cGU6ICJjdXJyZW50IiwKKyJiYXNlbGluZSIsIG9yICJ0YXJnZXQiLiBX
aXRoIG1ldHJpYywgY29uZmlndXJhdGlvbiBjcmVhdGVzIGEgdGhyZWUtbGV2ZWwgdHJlZSBzdHJ1
Y3R1cmUgdW5kZXIgYSB0ZXN0IGFzIGZvbGxvd3M6CisKKy0gTXlUZXN0IChUZXN0IDEpCisgICAg
LSBUaW1lIChNZXRyaWMgMSkKKyAgICAgICAgLSBMaW9uIDogY3VycmVudCAoQ29uZmlndXJhdGlv
biAxKQorICAgICAgICAtIExpb24gOiBiYXNlbGluZSAoQ29uZmlndXJhdGlvbiAyKQorICAgICAg
ICAtIExpb24gOiB0YXJnZXQgKENvbmZpZ3VyYXRpb24gMykKKyAgICAgICAgLSBNb3VudGFpbiBM
aW9uIDogY3VycmVudCAoQ29uZmlndXJhdGlvbiA0KQorICAgICAgICAtIE1vdW50YWluIExpb24g
OiBiYXNlbGluZSAoQ29uZmlndXJhdGlvbiA1KQorICAgICAgICAtIE1vdW50YWluIExpb24gOiB0
YXJnZXQgKENvbmZpZ3VyYXRpb24gNikKKyAgICAtIE1hbGxvYyAoTWV0cmljIDIpCisgICAgICAg
IC0gTGlvbiA6IGN1cnJlbnQgKENvbmZpZ3VyYXRpb24gNykKKyAgICAgICAgLSBMaW9uIDogYmFz
ZWxpbmUgKENvbmZpZ3VyYXRpb24gOCkKKyAgICAgICAgLSBMaW9uIDogdGFyZ2V0IChDb25maWd1
cmF0aW9uIDkpCisgICAgICAgIC0gTW91bnRhaW4gTGlvbiA6IGN1cnJlbnQgKENvbmZpZ3VyYXRp
b24gMTApCisgICAgICAgIC0gTW91bnRhaW4gTGlvbiA6IGJhc2VsaW5lIChDb25maWd1cmF0aW9u
IDExKQorICAgICAgICAtIE1vdW50YWluIExpb24gOiB0YXJnZXQgKENvbmZpZ3VyYXRpb24gMTIp
CistIEFub3RoZXJUZXN0IChUZXN0IDIpCisgICAgLSBUaW1lIChNZXRyaWMgMykKKyAgICAgICAg
LSBMaW9uIDogY3VycmVudCAoQ29uZmlndXJhdGlvbiAxMykKKyAgICAgICAgLSBNb3VudGFpbiBM
aW9uIDogY3VycmVudCAoQ29uZmlndXJhdGlvbiAxNCkKKworIyMgUnVuIGFuZCBJdGVyYXRpb24K
KworQSBydW4gaXMgYSBvcmRlcmVkIGxpc3Qgb2YgdmFsdWVzIG9idGFpbmVkIGZvciBhIHNpbmds
ZSBjb25maWd1cmF0aW9uIG9uIGEgc2luZ2xlIGJ1aWxkLiBGb3IgZXhhbXBsZSwgYSBMaW9uCiti
dWlsZGVyIG1heSBleGVjdXRlIE15VGVzdCAxMCB0aW1lcywgaS5lLiAxMCBpdGVyYXRpb25zLCBh
bmQgY3JlYXRlIGEgc2luZ2xlIHJ1biBhZnRlciBjb21wdXRpbmcgdGhlIGFyaXRobWV0aWMKK21l
YW4gb2YgMTAgdmFsdWVzIG9idGFpbmVkIGluIHRoaXMgcHJvY2Vzcy4gRWFjaCBydW4gaGFzIGFz
c29jaWF0ZWQgaXRlcmF0aW9ucywgd2hpY2ggcmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsCittZWFz
dXJlbWVudCBvZiB0aGUgc2FtZSBjb25maWd1cmF0aW9uIChvZiBhIHNpbmdsZSB0ZXN0IG1ldHJp
YykgaW4gdGhlIHJ1bi4KKworIyMgQWdncmVnYXRpb24gYW5kIEFnZ3JlZ2F0b3IKKworQWdncmVn
YXRpb24gaXMgYSBwcm9jZXNzIGJ5IHdoaWNoIGEgdGVzdCB3aXRoIGNoaWxkIHRlc3RzIHN5bnRo
ZXRpY2FsbHkgZ2VuZXJhdGVzIHJlc3VsdHMgZm9yIGl0c2VsZiB1c2luZworcmVzdWx0cyBvZiBz
dWIgdGVzdHMuIEZvciBleGFtcGxlLCB3ZSBtYXkgaGF2ZSBhIHBhZ2UgbG9hZGluZyB0ZXN0IChQ
YWdlTG9hZGluZ1Rlc3QpLCB3aGljaCBsb2Fkcword3d3LndlYmtpdC5vcmcgYW5kIHd3dy5tb3pp
bGxhLm9yZyBhcyBmb2xsb3dzOgorCistIFBhZ2VMb2FkaW5nVGVzdCAoVGVzdCAxKQorICAgIC0g
d3d3LndlYmtpdC5vcmcgKFRlc3QgMikKKyAgICAtIHd3dy5tb3ppbGxhLm9yZyAoVGVzdCAzKQor
CisoTm90ZSB0aGF0IFBhZ2VMb2FkaW5nVGVzdCwgd3d3LndlYmtpdC5vcmcsIGFuZCB3d3cubW96
aWxsYS5vcmcgZWFjaCBoYXMgaXRzIG93biBtZXRyaWNzIGFuZCBjb25maWd1cmF0aW9ucywKK3do
aWNoIGFyZSBub3Qgc2hvd24gaGVyZS4pCisKK1RoZW4gcmVzdWx0cyBmb3IgYSBtZXRyaWMsIGUu
Zy4gVGltZSwgb2YgUGFnZUxvYWRpbmdUZXN0IGNvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIHJlc3Vs
dHMgb2YgdGhlIHNhbWUgbWV0cmljIGluCitzdWJ0ZXN0cywgbmFtZWx5IHd3dy53ZWJraXQub3Jn
IGFuZCB3d3cubW96aWxsYS5vcmcuIFRoZSBwcm9jZXNzIGlzIGNhbGxlZCAiYWdncmVnYXRpb24i
LCBhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZgordGhlIGFnZ3JlZ2F0aW9uIGlzIGRlZmluZWQgaW4g
dGVybXMgb2YgYW4gYWdncmVnYXRvci4gQWxsIGFnZ3JlZ2F0b3JzIGFyZSB3cml0dGVuIGluIEph
dmFTY3JpcHQuCisKK1RoZSBhZ2dyZWdhdG9yIGZvciBhcml0aG1ldGljIG1lYW4gY291bGQgYmUg
aW1wbGVtZW50ZWQgYXM6CisgICAgCisgICAgdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikg
eyByZXR1cm4gYSArIGI7IH0pIC8gdmFsdWVzLmxlbmd0aDsKKworV2hlbiBhIGJ1aWxkZXIgcmVw
b3J0cyBhIHJlc3VsdCBKU09OIHRvIHRoZSBhcHBsaWNhdGlvbiwgdGhlIGJhY2tncm91bmQgcHJv
Y2VzcyBhdXRvbWF0aWNhbGx5IHNjaGVkdWxlcyBhIGpvYgordG8gYWdncmVnYXRlIHJlc3VsdHMg
Zm9yIGFsbCB0ZXN0cyBzcGVjaWZpZWQgaW4gdGhlIEpTT04uIFRoZSBhZ2dyZWdhdGlvbiBjYW4g
YWxzbyBiZSB0cmlnZ2VyZWQgbWFudWFsbHkgb24KK2AvYWRtaW4vdGVzdHNgLgorCitSZXBvcnRp
bmcgUmVzdWx0cworPT09PT09PT09PT09PT09PT0KKworVG8gc3VibWl0IHRoZSByZXN1bHRzIG9m
IGEgbmV3IHRlc3QgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcCwgeW91IG5lZWQgdGhlIGZvbGxv
d2luZzoKKworIC0gQSBidWlsZGVyIGFscmVhZHkgYWRkZWQgb24gYC9hZG1pbi9idWlsZGVyc2AK
KyAtIEEgc2NyaXB0IHRoYXQgc3VibWl0cyBhIEpTT04gcGF5bG9hZCBvZiB0aGUgc3VwcG9ydGVk
IGZvcm1hdCB2aWEgYSBIVFRQL0hUVFBTIHJlcXVlc3QgdG8gYC9hcGkvcmVwb3J0YAorCitKU09O
IEZvcm1hdAorLS0tLS0tLS0tLS0KKworVGhlIEpTT04gc3VibWl0dGVkIHRvIGAvYXBpL3JlcG9y
dGAgc2hvdWxkIGJlIGFuIGFycmF5IG9mIGRpY3Rpb25hcmllcywgZWFjaCBvZiB3aGljaCBzaG91
bGQKK2NvbnRhaW4gdGhlIGZvbGxvd2luZyBrZXktdmFsdWUgcGFpcnMgcmVwcmVzZW50aW5nIGEg
c2luZ2xlIHJ1biBvZiB0ZXN0cyBvbiBhIHNpbmdsZSBidWlsZDoKKworLSBgYnVpbGRlck5hbWVg
IC0gVGhlIG5hbWUgb2YgYSBidWlsZGVyIHByZXNlbnQgb24gYC9hZG1pbi9idWlsZGVyc2AuCist
IGBidWlsZGVyUGFzc3dvcmRgIC0gVGhlIHBhc3N3b3JkIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVp
bGRlci4KKy0gYGJ1aWxkTnVtYmVyYCAtIFRoZSBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlm
aWVzIGEgZ2l2ZW4gYnVpbGQgb24gdGhlIGJ1aWxkZXIuCistIGBidWlsZFRpbWVgIC0gVGhlIHRp
bWUgYXQgd2hpY2ggdGhpcyBidWlsZCBzdGFydGVkIGluICoqVVRDKiogKFVzZSBJU08gdGltZSBm
b3JtYXQgc3VjaCBhcworICAgMjAxMy0wMS0zMVQyMjoyMjoxMi4xMjEwNTEpLiBUaGlzIGlzIGNv
bXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGltZXN0YW1wIG9mIHJlcG9zaXRvcnkgcmV2aXNpb25z
LgorLSBgcGxhdGZvcm1gIC0gVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgYSBwbGF0Zm9ybSBz
dWNoIGFzIGBNb3VudGFpbiBMaW9uYCBvciBgV2luZG93cyA3YC4KKy0gYHJldmlzaW9uc2AgLSBB
IGRpY3Rpb25hcnkgdGhhdCBtYXBzIGEgcmVwb3NpdG9yeSBuYW1lIHRvIGEgZGljdGlvbmFyeSB3
aXRoICJyZXZpc2lvbiIgYW5kIG9wdGlvbmFsbHkKKyAgICJ0aW1lc3RhbXAiIGFzIGtleXMgZWFj
aCBvZiB3aGljaCBtYXBzIHRvLCByZXNwZWN0aXZlbHksIHRoZSByZXZpc2lvbiBpbiAqKnN0cmlu
ZyoqIGFzc29jaWF0ZWQgd2l0aAorICAgdGhlIGJ1aWxkIGFuZCB0aGUgdGltZXMgYXQgd2hpY2gg
dGhlIHJldmlzaW9uIHdhcyBjb21taXR0ZWQgdG8gdGhlIHJlcG9zaXRvcnkgcmVzcGVjdGl2ZWx5
LgorICAgZS5nLiBgeyJXZWJLaXQiOiB7InJldmlzaW9uIjogIjEyMyIsICJ0aW1lc3RhbXAiOiAi
MjAwMS0wOS0xMFQxNzo1MzoxOS4wMDAwMDBaIn19YAorLSBgdGVzdHNgIC0gQSBkaWN0aW9uYXJ5
IHRoYXQgbWFwcyBhIHRlc3QgbmFtZSB0byBhIGRpY3Rpb25hcnkgdGhhdCByZXByZXNlbnRzIGEg
dGVzdC4gVGhlIHZhbHVlIG9mIGEgdGVzdAorICAgaXRzZWxmIGlzIGEgZGljdGlvbmFyeSB3aXRo
IHRoZSBmb2xsb3dpbmcga2V5czoKKyAgICAtIGBtZXRyaWNzYCAtIEEgZGljdGlvbmFyeSB0aGF0
IG1hcHMgYSBtZXRyaWMgbmFtZSB0byBhIGRpY3Rpb25hcnkgb2YgY29uZmlndXJhdGlvbiB0eXBl
cyB0byBhbiBhcnJheSBvZgorICAgICAgaXRlcmF0aW9uIHZhbHVlcy4gZS5nLiBgeyJUaW1lIjog
eyJjdXJyZW50IjogWzYyOS4xLCA2NTQuOCwgNTk4LjldLCAidGFyZ2V0IjogWzU0NCwgNTg1LjEs
IDU1Nl19fWAKKyAgICAgIFdoZW4gYSBtZXRyaWMgcmVwcmVzZW50cyBhbiBhZ2dyZWdhdGVkIHZh
bHVlLCBpdCBzaG91bGQgYmUgYW4gYXJyYXkgb2YgYWdncmVnYXRvciBuYW1lcyBpbnN0ZWFkLiBl
LmcuCisgICAgICBgeyJUaW1lIjogWyJBcml0aG1ldGljIiwgIkdlb21ldHJpYyJdfWAgKipUaGlz
IGZvcm1hdCBtYXkgY2hhbmdlIGluIG5lYXIgZnV0dXJlKiouCisgICAgLSBgdXJsYCAtIFRoZSBV
Ukwgb2YgdGhlIHRlc3QuIFRoaXMgdmFsdWUgc2hvdWxkIG5vdCBjaGFuZ2Ugb3ZlciB0aW1lIGFz
IG9ubHkgdGhlIGxhdGVzdCB2YWx1ZSBpcyBzdG9yZWQKKyAgICAgICAgaW4gdGhlIGFwcGxpY2F0
aW9uLgorICAgIC0gYHRlc3RzYCAtIEEgZGljdGlvbmFyeSBvZiB0ZXN0czsgdGhlIHNhbWUgZm9y
bWF0IGFzIHRoaXMgZGljdGlvbmFyeS4KKworQSBzYW1wbGUgSlNPTjoKKworICAgIHsKKyAgICAg
ICAgImJ1aWxkTnVtYmVyIjogIjY1MSIsCisgICAgICAgICJidWlsZFRpbWUiOiAiMjAxMy0wMS0z
MVQyMjoyMjoxMi4xMjEwNTEiLAorICAgICAgICAiYnVpbGRlck5hbWUiOiAiYm90LTExMSIsCisg
ICAgICAgICJidWlsZGVyUGFzc3dvcmQiOiAiKioqKioqKioiCisgICAgICAgICJwbGF0Zm9ybSI6
ICJNb3VudGFpbiBMaW9uIiwKKyAgICAgICAgInJldmlzaW9ucyI6IHsKKyAgICAgICAgICAgICJP
UyBYIjogeyJyZXZpc2lvbiI6ICIxMC44LjIifSwKKyAgICAgICAgICAgICJXZWJLaXQiOiB7InJl
dmlzaW9uIjogIjE0MTQ2OSIsICJ0aW1lc3RhbXAiOiAiMjAxMy0wMS0zMVQyMDo1NToxNS40NTIy
NjdaIn0KKyAgICAgICAgfSwKKwkJInRlc3RzIjogeworICAgICAgICAgICAgIlBhZ2VMb2FkaW5n
VGVzdCI6IHsKKyAgICAgICAgICAgICAgICAibWV0cmljcyI6IHsiVGltZSI6IFsiQXJpdGhtZXRp
YyIsICJHZW9tZXRyaWMiXX0sCisgICAgICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAg
ICAgICAgICAgICAid2Via2l0Lm9yZyI6IHsKKyAgICAgICAgICAgICAgICAgICAgIm1ldHJpY3Mi
OiB7IlRpbWUiOiB7ImN1cnJlbnQiOiBbNjI5LjEsIDY1NC44LCA1OTguOV19fQorICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgInVybCI6ICJodHRwOi8vd3d3LndlYmtpdC5vcmcv
IgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKK0ZJWE1FOiBBZGQgYSBzZWN0
aW9uIGRlc2NyaWJpbmcgaG93IHRoZSBhcHBsaWNhdGlvbiBpcyBzdHJ1Y3R1cmVkLgpJbmRleDog
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2NvbmZpZy5qc29uCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9jb25maWcuanNvbgkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9jb25maWcuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
IEBACit7CisgICAgImRlYnVnIjogdHJ1ZSwKKyAgICAianNvbkNhY2hlTWF4QWdlIjogNjAwLAor
ICAgICJKU09ORGlyZWN0b3J5IjogIi4uL3B1YmxpYy9kYXRhLyIsCisgICAgImRhdGFiYXNlIjog
eworICAgICAgICAiaG9zdCI6ICJsb2NhbGhvc3QiLAorICAgICAgICAicG9ydCI6ICI1NDMyIiwK
KyAgICAgICAgInVzZXJuYW1lIjogIndlYmtpdC1wZXJmLWRiLXVzZXIiLAorICAgICAgICAicGFz
c3dvcmQiOiAicGFzc3dvcmQiLAorICAgICAgICAibmFtZSI6ICJ3ZWJraXQtcGVyZi1kYiIKKyAg
ICB9LAorICAgICJ0ZXN0U2VydmVyIjogeworICAgICAgICAiaG9zdG5hbWUiOiAibG9jYWxob3N0
IiwKKyAgICAgICAgInBvcnQiOiA4MAorICAgIH0KK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9pbml0LWRhdGFiYXNlLnNxbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvaW5pdC1kYXRhYmFzZS5zcWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvaW5pdC1kYXRhYmFzZS5zcWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzAgQEAKK0RST1AgVEFCTEUgcnVuX2l0ZXJhdGlvbnMgQ0FTQ0FERTsKK0RST1AgVEFCTEUgdGVz
dF9ydW5zIENBU0NBREU7CitEUk9QIFRBQkxFIHRlc3RfY29uZmlndXJhdGlvbnMgQ0FTQ0FERTsK
K0RST1AgVFlQRSB0ZXN0X2NvbmZpZ3VyYXRpb25fdHlwZSBDQVNDQURFOworRFJPUCBUQUJMRSBh
Z2dyZWdhdG9ycyBDQVNDQURFOworRFJPUCBUQUJMRSBidWlsZF9yZXZpc2lvbnMgQ0FTQ0FERTsK
K0RST1AgVEFCTEUgYnVpbGRzIENBU0NBREU7CitEUk9QIFRBQkxFIGJ1aWxkZXJzIENBU0NBREU7
CitEUk9QIFRBQkxFIHJlcG9zaXRvcmllcyBDQVNDQURFOworRFJPUCBUQUJMRSBwbGF0Zm9ybXMg
Q0FTQ0FERTsKK0RST1AgVEFCTEUgdGVzdF9tZXRyaWNzIENBU0NBREU7CitEUk9QIFRBQkxFIHRl
c3RzIENBU0NBREU7CitEUk9QIFRBQkxFIGpvYnMgQ0FTQ0FERTsKK0RST1AgVEFCTEUgcmVwb3J0
cyBDQVNDQURFOworRFJPUCBUQUJMRSB0cmFja2VyX3JlcG9zaXRvcmllcyBDQVNDQURFOworRFJP
UCBUQUJMRSBidWdfdHJhY2tlcnMgQ0FTQ0FERTsKKworQ1JFQVRFIFRBQkxFIHBsYXRmb3JtcyAo
CisgICAgcGxhdGZvcm1faWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIHBsYXRmb3JtX25hbWUg
dmFyY2hhcig2NCkgTk9UIE5VTEwsCisgICAgcGxhdGZvcm1faGlkZGVuIGJvb2xlYW4gTk9UIE5V
TEwgREVGQVVMVCBGQUxTRSk7CisKK0NSRUFURSBUQUJMRSByZXBvc2l0b3JpZXMgKAorICAgIHJl
cG9zaXRvcnlfaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAorICAgIHJlcG9zaXRvcnlfbmFtZSB2YXJj
aGFyKDY0KSBOT1QgTlVMTCwKKyAgICByZXBvc2l0b3J5X3VybCB2YXJjaGFyKDEwMjQpLAorICAg
IHJlcG9zaXRvcnlfYmxhbWVfdXJsIHZhcmNoYXIoMTAyNCkpOworCitDUkVBVEUgVEFCTEUgYnVn
X3RyYWNrZXJzICgKKyAgICB0cmFja2VyX2lkIHNlcmlhbCBQUklNQVJZIEtFWSwKKyAgICB0cmFj
a2VyX25hbWUgdmFyY2hhcig2NCkgTk9UIE5VTEwsCisgICAgdHJhY2tlcl9uZXdfYnVnX3VybCB2
YXJjaGFyKDEwMjQpKTsKKworQ1JFQVRFIFRBQkxFIHRyYWNrZXJfcmVwb3NpdG9yaWVzICgKKyAg
ICB0cmFjcmVwb190cmFja2VyIGludGVnZXIgTk9UIE5VTEwgUkVGRVJFTkNFUyBidWdfdHJhY2tl
cnMgT04gREVMRVRFIENBU0NBREUsCisgICAgdHJhY3JlcG9fcmVwb3NpdG9yeSBpbnRlZ2VyIE5P
VCBOVUxMIFJFRkVSRU5DRVMgcmVwb3NpdG9yaWVzIE9OIERFTEVURSBDQVNDQURFKTsKKworQ1JF
QVRFIFRBQkxFIGJ1aWxkZXJzICgKKyAgICBidWlsZGVyX2lkIHNlcmlhbCBQUklNQVJZIEtFWSwK
KyAgICBidWlsZGVyX25hbWUgdmFyY2hhcig2NCkgTk9UIE5VTEwgVU5JUVVFLAorICAgIGJ1aWxk
ZXJfcGFzc3dvcmRfaGFzaCBjaGFyYWN0ZXIoNjQpIE5PVCBOVUxMLAorICAgIGJ1aWxkZXJfYnVp
bGRfdXJsIHZhcmNoYXIoMTAyNCkpOworCitDUkVBVEUgVEFCTEUgYnVpbGRzICgKKyAgICBidWls
ZF9pZCBzZXJpYWwgUFJJTUFSWSBLRVksCisgICAgYnVpbGRfYnVpbGRlciBpbnRlZ2VyIFJFRkVS
RU5DRVMgYnVpbGRlcnMgT04gREVMRVRFIENBU0NBREUsCisgICAgYnVpbGRfbnVtYmVyIGludGVn
ZXIgTk9UIE5VTEwsCisgICAgYnVpbGRfdGltZSB0aW1lc3RhbXAgTk9UIE5VTEwsCisgICAgYnVp
bGRfbGF0ZXN0X3JldmlzaW9uIHRpbWVzdGFtcCwKKyAgICBDT05TVFJBSU5UIGJ1aWxkZXJfYnVp
bGRfdGltZV90dXBsZV9tdXN0X2JlX3VuaXF1ZSBVTklRVUUoYnVpbGRfYnVpbGRlciwgYnVpbGRf
bnVtYmVyLCBidWlsZF90aW1lKSk7CitDUkVBVEUgSU5ERVggYnVpbGRfYnVpbGRlcl9pbmRleCBP
TiBidWlsZHMoYnVpbGRfYnVpbGRlcik7CisKK0NSRUFURSBUQUJMRSBidWlsZF9yZXZpc2lvbnMg
KAorICAgIHJldmlzaW9uX2J1aWxkIGludGVnZXIgTk9UIE5VTEwgUkVGRVJFTkNFUyBidWlsZHMg
T04gREVMRVRFIENBU0NBREUsCisgICAgcmV2aXNpb25fcmVwb3NpdG9yeSBpbnRlZ2VyIE5PVCBO
VUxMIFJFRkVSRU5DRVMgcmVwb3NpdG9yaWVzIE9OIERFTEVURSBDQVNDQURFLAorICAgIHJldmlz
aW9uX3ZhbHVlIHZhcmNoYXIoNjQpIE5PVCBOVUxMLAorICAgIHJldmlzaW9uX3RpbWUgdGltZXN0
YW1wLAorICAgIFBSSU1BUlkgS0VZIChyZXZpc2lvbl9yZXBvc2l0b3J5LCByZXZpc2lvbl9idWls
ZCkpOworQ1JFQVRFIElOREVYIHJldmlzaW9uX2J1aWxkX2luZGV4IE9OIGJ1aWxkX3JldmlzaW9u
cyhyZXZpc2lvbl9idWlsZCk7CitDUkVBVEUgSU5ERVggcmV2aXNpb25fcmVwb3NpdG9yeV9pbmRl
eCBPTiBidWlsZF9yZXZpc2lvbnMocmV2aXNpb25fcmVwb3NpdG9yeSk7CisKK0NSRUFURSBUQUJM
RSBhZ2dyZWdhdG9ycyAoCisgICAgYWdncmVnYXRvcl9pZCBzZXJpYWwgUFJJTUFSWSBLRVksCisg
ICAgYWdncmVnYXRvcl9uYW1lIHZhcmNoYXIoNjQpLAorICAgIGFnZ3JlZ2F0b3JfZGVmaW5pdGlv
biB0ZXh0KTsKKworQ1JFQVRFIFRBQkxFIHRlc3RzICgKKyAgICB0ZXN0X2lkIHNlcmlhbCBQUklN
QVJZIEtFWSwKKyAgICB0ZXN0X25hbWUgdmFyY2hhcigyNTUpIE5PVCBOVUxMLAorICAgIHRlc3Rf
cGFyZW50IGludGVnZXIgUkVGRVJFTkNFUyB0ZXN0cyBPTiBERUxFVEUgQ0FTQ0FERSwKKyAgICB0
ZXN0X3VybCB2YXJjaGFyKDEwMjQpIERFRkFVTFQgTlVMTCwKKyAgICBDT05TVFJBSU5UIHBhcmVu
dF90ZXN0X211c3RfYmVfdW5pcXVlIFVOSVFVRSh0ZXN0X3BhcmVudCwgdGVzdF9uYW1lKSk7CisK
K0NSRUFURSBUQUJMRSB0ZXN0X21ldHJpY3MgKAorICAgIG1ldHJpY19pZCBzZXJpYWwgUFJJTUFS
WSBLRVksCisgICAgbWV0cmljX3Rlc3QgaW50ZWdlciBOT1QgTlVMTCBSRUZFUkVOQ0VTIHRlc3Rz
IE9OIERFTEVURSBDQVNDQURFLAorICAgIG1ldHJpY19uYW1lIHZhcmNoYXIoNjQpIE5PVCBOVUxM
LAorICAgIG1ldHJpY19hZ2dyZWdhdG9yIGludGVnZXIgUkVGRVJFTkNFUyBhZ2dyZWdhdG9ycyBP
TiBERUxFVEUgQ0FTQ0FERSk7CisKK0NSRUFURSBUWVBFIHRlc3RfY29uZmlndXJhdGlvbl90eXBl
IGFzIEVOVU0gKCdjdXJyZW50JywgJ2Jhc2VsaW5lJywgJ3RhcmdldCcpOworQ1JFQVRFIFRBQkxF
IHRlc3RfY29uZmlndXJhdGlvbnMgKAorICAgIGNvbmZpZ19pZCBzZXJpYWwgUFJJTUFSWSBLRVks
CisgICAgY29uZmlnX21ldHJpYyBpbnRlZ2VyIE5PVCBOVUxMIFJFRkVSRU5DRVMgdGVzdF9tZXRy
aWNzIE9OIERFTEVURSBDQVNDQURFLAorICAgIGNvbmZpZ19wbGF0Zm9ybSBpbnRlZ2VyIE5PVCBO
VUxMIFJFRkVSRU5DRVMgcGxhdGZvcm1zIE9OIERFTEVURSBDQVNDQURFLAorICAgIGNvbmZpZ190
eXBlIHRlc3RfY29uZmlndXJhdGlvbl90eXBlIE5PVCBOVUxMLAorICAgIGNvbmZpZ19pc19pbl9k
YXNoYm9hcmQgYm9vbGVhbiBOT1QgTlVMTCBERUZBVUxUIEZBTFNFLAorICAgIENPTlNUUkFJTlQg
Y29uZmlndXJhdGlvbl9tdXN0X2JlX3VuaXF1ZSBVTklRVUUoY29uZmlnX21ldHJpYywgY29uZmln
X3BsYXRmb3JtLCBjb25maWdfdHlwZSkpOworQ1JFQVRFIElOREVYIGNvbmZpZ19wbGF0Zm9ybV9p
bmRleCBPTiB0ZXN0X2NvbmZpZ3VyYXRpb25zKGNvbmZpZ19wbGF0Zm9ybSk7CisKK0NSRUFURSBU
QUJMRSB0ZXN0X3J1bnMgKAorICAgIHJ1bl9pZCBzZXJpYWwgUFJJTUFSWSBLRVksCisgICAgcnVu
X2NvbmZpZyBpbnRlZ2VyIE5PVCBOVUxMIFJFRkVSRU5DRVMgdGVzdF9jb25maWd1cmF0aW9ucyBP
TiBERUxFVEUgQ0FTQ0FERSwKKyAgICBydW5fYnVpbGQgaW50ZWdlciBOT1QgTlVMTCBSRUZFUkVO
Q0VTIGJ1aWxkcyBPTiBERUxFVEUgQ0FTQ0FERSwKKyAgICBydW5faXRlcmF0aW9uX2NvdW50X2Nh
Y2hlIHNtYWxsaW50LAorICAgIHJ1bl9tZWFuX2NhY2hlIGRvdWJsZSBwcmVjaXNpb24sCisgICAg
cnVuX3N1bV9jYWNoZSBkb3VibGUgcHJlY2lzaW9uLAorICAgIHJ1bl9zcXVhcmVfc3VtX2NhY2hl
IGRvdWJsZSBwcmVjaXNpb24sCisgICAgQ09OU1RSQUlOVCB0ZXN0X2NvbmZpZ19idWlsZF9tdXN0
X2JlX3VuaXF1ZSBVTklRVUUocnVuX2NvbmZpZywgcnVuX2J1aWxkKSk7CitDUkVBVEUgSU5ERVgg
cnVuX2NvbmZpZ19pbmRleCBPTiB0ZXN0X3J1bnMocnVuX2NvbmZpZyk7CitDUkVBVEUgSU5ERVgg
cnVuX2J1aWxkX2luZGV4IE9OIHRlc3RfcnVucyhydW5fYnVpbGQpOworCitDUkVBVEUgVEFCTEUg
cnVuX2l0ZXJhdGlvbnMgKAorICAgIGl0ZXJhdGlvbl9ydW4gaW50ZWdlciBOT1QgTlVMTCBSRUZF
UkVOQ0VTIHRlc3RfcnVucyBPTiBERUxFVEUgQ0FTQ0FERSwKKyAgICBpdGVyYXRpb25fb3JkZXIg
c21hbGxpbnQgTk9UIE5VTEwgQ0hFQ0soaXRlcmF0aW9uX29yZGVyID49IDApLAorICAgIGl0ZXJh
dGlvbl9ncm91cCBzbWFsbGludCBDSEVDSyhpdGVyYXRpb25fZ3JvdXAgPj0gMCksCisgICAgaXRl
cmF0aW9uX3ZhbHVlIGRvdWJsZSBwcmVjaXNpb24sCisgICAgaXRlcmF0aW9uX3JlbGF0aXZlX3Rp
bWUgZmxvYXQsCisgICAgUFJJTUFSWSBLRVkgKGl0ZXJhdGlvbl9ydW4sIGl0ZXJhdGlvbl9vcmRl
cikpOworCitDUkVBVEUgVEFCTEUgam9icyAoCisgICAgam9iX2lkIHNlcmlhbCBQUklNQVJZIEtF
WSwKKyAgICBqb2JfdHlwZSB2YXJjaGFyKDY0KSBOT1QgTlVMTCwKKyAgICBqb2JfY3JlYXRlZF9h
dCB0aW1lc3RhbXAgTk9UIE5VTEwgREVGQVVMVCBOT1coKSwKKyAgICBqb2Jfc3RhcnRlZF9hdCB0
aW1lc3RhbXAsCisgICAgam9iX3N0YXJ0ZWRfYnlfcGlkIGludGVnZXIsCisgICAgam9iX2NvbXBs
ZXRlZF9hdCB0aW1lc3RhbXAsCisgICAgam9iX2F0dGVtcHRzIGludGVnZXIgTk9UIE5VTEwgREVG
QVVMVCAwLAorICAgIGpvYl9wYXlsb2FkIHRleHQsCisgICAgam9iX2xvZyB0ZXh0KTsKKworQ1JF
QVRFIFRBQkxFIHJlcG9ydHMgKAorICAgIHJlcG9ydF9pZCBzZXJpYWwgUFJJTUFSWSBLRVksCisg
ICAgcmVwb3J0X2J1aWxkZXIgaW50ZWdlciBOT1QgTlVMTCBSRUZFUkVOQ0VTIGJ1aWxkZXJzIE9O
IERFTEVURSBSRVNUUklDVCwKKyAgICByZXBvcnRfYnVpbGRfbnVtYmVyIGludGVnZXIsCisgICAg
cmVwb3J0X2J1aWxkIGludGVnZXIgUkVGRVJFTkNFUyBidWlsZHMsCisgICAgcmVwb3J0X2NyZWF0
ZWRfYXQgdGltZXN0YW1wIE5PVCBOVUxMIERFRkFVTFQgKENVUlJFTlRfVElNRVNUQU1QIEFUIFRJ
TUUgWk9ORSAnVVRDJyksCisgICAgcmVwb3J0X2NvbW1pdHRlZF9hdCB0aW1lc3RhbXAsCisgICAg
cmVwb3J0X2NvbnRlbnQgdGV4dCwKKyAgICByZXBvcnRfZmFpbHVyZSB2YXJjaGFyKDY0KSwKKyAg
ICByZXBvcnRfZmFpbHVyZV9kZXRhaWxzIHRleHQpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3J1bi10ZXN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcnVuLXRlc3RzLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3J1bi10ZXN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzNyBAQAorIyEvdXNyL2xv
Y2FsL2Jpbi9ub2RlCisKK3ZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKK3ZhciBjcnlw
dG8gPSByZXF1aXJlKCdjcnlwdG8nKTsKK3ZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7Cit2YXIgaHR0
cCA9IHJlcXVpcmUoJ2h0dHAnKTsKK3ZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpOwordmFyIHZt
ID0gcmVxdWlyZSgndm0nKTsKKworZnVuY3Rpb24gY29ubmVjdChrZWVwQWxpdmUpIHsKKyAgICB2
YXIgcGcgPSByZXF1aXJlKCdwZycpOworICAgIHZhciBkYXRhYmFzZSA9IGNvbmZpZygnZGF0YWJh
c2UnKTsKKyAgICB2YXIgY29ubmVjdGlvblN0cmluZyA9ICd0Y3A6Ly8nICsgZGF0YWJhc2UudXNl
cm5hbWUgKyAnOicgKyBkYXRhYmFzZS5wYXNzd29yZCArICdAJyArIGRhdGFiYXNlLmhvc3QgKyAn
OicgKyBkYXRhYmFzZS5wb3J0CisgICAgICAgICsgJy8nICsgZGF0YWJhc2UubmFtZTsKKworICAg
IHZhciBjbGllbnQgPSBuZXcgcGcuQ2xpZW50KGNvbm5lY3Rpb25TdHJpbmcpOworICAgIGlmICgh
a2VlcEFsaXZlKSB7CisgICAgICAgIGNsaWVudC5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBjbGllbnQuZW5kKCk7CisgICAgICAgICAgICBjbGllbnQgPSB1bmRlZmluZWQ7
CisgICAgICAgIH0pOworICAgIH0KKyAgICBjbGllbnQuY29ubmVjdCgpOworCisgICAgcmV0dXJu
IGNsaWVudDsKK30KKworZnVuY3Rpb24gcGF0aFRvRGF0YWJzZVNRTChyZWxhdGl2ZVBhdGgpIHsK
KyAgICByZXR1cm4gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2luaXQtZGF0YWJhc2Uuc3FsJyk7
Cit9CisKK2Z1bmN0aW9uIHBhdGhUb1Rlc3RzKHRlc3ROYW1lKSB7CisgICAgcmV0dXJuIHBhdGgu
cmVzb2x2ZShfX2Rpcm5hbWUsICd0ZXN0cycsIHRlc3ROYW1lKTsKK30KKwordmFyIGNvbmZpZ3Vy
YXRpb25KU09OID0gcmVxdWlyZSgnLi9jb25maWcuanNvbicpOworZnVuY3Rpb24gY29uZmlnKGtl
eSkgeworICAgIHJldHVybiBjb25maWd1cmF0aW9uSlNPTltrZXldOworfQorCitmdW5jdGlvbiBU
YXNrUXVldWUoKSB7CisgICAgdmFyIHF1ZXVlID0gW107CisgICAgdmFyIG51bWJlck9mUmVtYWlu
aW5nVGFza3MgPSAwOworICAgIHZhciBlbXB0eVF1ZXVlQ2FsbGJhY2s7CisKKyAgICBmdW5jdGlv
biBzdGFydFRhc2tzSW5RdWV1ZSgpIHsKKyAgICAgICAgaWYgKCFxdWV1ZS5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm4gZW1wdHlRdWV1ZUNhbGxiYWNrKCk7CisKKyAgICAgICAgdmFyIHN3YXBw
ZWRRdWV1ZSA9IHF1ZXVlOworICAgICAgICBxdWV1ZSA9IFtdOworCisgICAgICAgIC8vIEluY3Jl
YXNlIHRoZSBjb3VudGVyIGJlZm9yZSB0aGUgbG9vcCBpbiB0aGUgY2FzZSB0YXNrQ2FsbGJhY2sg
aXMgY2FsbGVkIHN5bmNocm9ub3VzbHkuCisgICAgICAgIG51bWJlck9mUmVtYWluaW5nVGFza3Mg
Kz0gc3dhcHBlZFF1ZXVlLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2Fw
cGVkUXVldWUubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzd2FwcGVkUXVldWVbaV0obnVsbCwg
dGFza0NhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0YXNrQ2FsbGJhY2soZXJyb3Ip
IHsKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBlcnJvci4KKyAgICAgICAgY29uc29sZS5hc3Nl
cnQobnVtYmVyT2ZSZW1haW5pbmdUYXNrcyA+IDApOworICAgICAgICBudW1iZXJPZlJlbWFpbmlu
Z1Rhc2tzLS07CisgICAgICAgIGlmICghbnVtYmVyT2ZSZW1haW5pbmdUYXNrcykKKyAgICAgICAg
ICAgIHNldFRpbWVvdXQoc3RhcnRUYXNrc0luUXVldWUsIDApOworICAgIH0KKworICAgIHRoaXMu
YWRkVGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7IHF1ZXVlLnB1c2godGFzayk7IH0KKyAgICB0aGlz
LnN0YXJ0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIGVtcHR5UXVldWVDYWxsYmFj
ayA9IGNhbGxiYWNrOworICAgICAgICBzdGFydFRhc2tzSW5RdWV1ZSgpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gU2VyaWFsaXplZFRhc2tRdWV1ZSgpIHsKKyAgICB2YXIgcXVldWUgPSBbXTsKKwor
ICAgIGZ1bmN0aW9uIGV4ZWN1dGVOZXh0VGFzayhlcnJvcikgeworICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIGVycm9yLgorICAgICAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZS5wb3AoKTsKKyAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKG51bGwsIGV4ZWN1dGVOZXh0VGFz
ayk7IH0sIDApOworICAgIH0KKworICAgIHRoaXMuYWRkVGFzayA9IGZ1bmN0aW9uICh0YXNrKSB7
IHF1ZXVlLnB1c2godGFzayk7IH0KKyAgICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24gKGNhbGxiYWNr
KSB7CisgICAgICAgIHF1ZXVlLnB1c2goY2FsbGJhY2spOworICAgICAgICBxdWV1ZS5yZXZlcnNl
KCk7CisgICAgICAgIGV4ZWN1dGVOZXh0VGFzaygpOworICAgIH0KK30KKworZnVuY3Rpb24gbWFp
bigpIHsKKyAgICB2YXIgY2xpZW50ID0gY29ubmVjdCh0cnVlKTsKKyAgICBjb25maXJtVXNlcldh
bnRzRGF0YWJhc2VUb0JlSW5pdGlhbGl6ZWRJZk5lZWRlZChjbGllbnQsIGZ1bmN0aW9uIChlcnJv
ciwgc2hvdWxkQ29udGludWUpIHsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgY29u
c29sZS5lcnJvcihlcnJvcik7CisKKyAgICAgICAgaWYgKGVycm9yIHx8ICFzaG91bGRDb250aW51
ZSkgeworICAgICAgICAgICAgY2xpZW50LmVuZCgpOworICAgICAgICAgICAgcHJvY2Vzcy5leGl0
KDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW5pdGlhbGl6
ZURhdGFiYXNlKGNsaWVudCwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICBpZiAoZXJy
b3IpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6
ZSB0aGUgZGF0YWJhc2UnLCBlcnJvcik7CisgICAgICAgICAgICAgICAgY2xpZW50LmVuZCgpOwor
ICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmFyIHRlc3RDYXNlUXVldWUgPSBuZXcgU2VyaWFsaXplZFRhc2tRdWV1ZSgpOworICAg
ICAgICAgICAgdmFyIHRlc3RGaWxlUXVldWUgPSBuZXcgU2VyaWFsaXplZFRhc2tRdWV1ZSgpOwor
ICAgICAgICAgICAgZnMucmVhZGRpclN5bmMocGF0aFRvVGVzdHMoKSkubWFwKGZ1bmN0aW9uICh0
ZXN0RmlsZSkgeworICAgICAgICAgICAgICAgIGlmICghdGVzdEZpbGUubWF0Y2goLy5qcyQvKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHRlc3RGaWxlUXVl
dWUuYWRkVGFzayhmdW5jdGlvbiAoZXJyb3IsIGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciB0ZXN0Q29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoVG9UZXN0cyh0ZXN0Rmls
ZSksICd1dGYtOCcpOworICAgICAgICAgICAgICAgICAgICB2YXIgZW52aXJvbm1lbnQgPSBuZXcg
VGVzdEVudmlyb25tZW50KHRlc3RDYXNlUXVldWUpOworICAgICAgICAgICAgICAgICAgICB2bS5y
dW5Jbk5ld0NvbnRleHQodGVzdENvbnRlbnQsIGVudmlyb25tZW50LCBwYXRoVG9UZXN0cyh0ZXN0
RmlsZSkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0RmlsZVF1ZXVlLnN0YXJ0KGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBjbGllbnQuZW5kKCk7CisgICAgICAgICAgICAg
ICAgdGVzdENhc2VRdWV1ZS5zdGFydChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnNvbGUubG9nKCdET05FJyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGNvbmZpcm1Vc2VyV2FudHNE
YXRhYmFzZVRvQmVJbml0aWFsaXplZElmTmVlZGVkKGNsaWVudCwgY2FsbGJhY2spIHsKKyAgICBm
dW5jdGlvbiBmZXRjaFRhYmxlTmFtZXMoZXJyb3IsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChl
cnJvcikKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7CisKKyAgICAgICAgY2xp
ZW50LnF1ZXJ5KCdTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJs
ZXMgV0hFUkUgdGFibGVfdHlwZSA9IFwnQkFTRSBUQUJMRVwnIGFuZCB0YWJsZV9zY2hlbWEgPSBc
J3B1YmxpY1wnJywgZnVuY3Rpb24gKGVycm9yLCByZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChl
cnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpOworICAgICAgICAg
ICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0LnJvd3MubWFwKGZ1bmN0aW9uIChyb3cpIHsgcmV0dXJu
IHJvd1sndGFibGVfbmFtZSddOyB9KSk7ICAgICAgICAgICAgCisgICAgICAgIH0pOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmROb25FbXB0eVRhYmxlKGVycm9yLCBsaXN0LCBjYWxsYmFjaykg
eworICAgICAgICBpZiAoZXJyb3IgfHwgIWxpc3QubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJu
IGNhbGxiYWNrKGVycm9yKTsKKworICAgICAgICB2YXIgdGFibGVOYW1lID0gbGlzdC5zaGlmdCgp
OworICAgICAgICBjbGllbnQucXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcgKyB0YWJsZU5h
bWUgKyAnIExJTUlUIDEnLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3VsdCkgeworICAgICAgICAgICAg
aWYgKGVycm9yKQorICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7CisKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQucm93c1swXVsnY291bnQnXSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FsbGJhY2sobnVsbCwgdGFibGVOYW1lKTsKKworICAgICAgICAgICAgZmluZE5vbkVt
cHR5VGFibGUobnVsbCwgbGlzdCwgY2FsbGJhY2spOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBmZXRjaFRhYmxlTmFtZXMobnVsbCwgZnVuY3Rpb24gKGVycm9yLCB0YWJsZU5hbWVzKSB7Cisg
ICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvciwgZmFs
c2UpOworCisgICAgICAgIGZpbmROb25FbXB0eVRhYmxlKG51bGwsIHRhYmxlTmFtZXMsIGZ1bmN0
aW9uIChlcnJvciwgbm9uRW1wdHlUYWJsZSkgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvciwgZmFsc2UpOworCisgICAgICAgICAg
ICBpZiAoIW5vbkVtcHR5VGFibGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51
bGwsIHRydWUpOworCisgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RhYmxlICcgKyBub25FbXB0
eVRhYmxlICsgJyBpcyBub3QgZW1wdHkgYnV0IHJ1bm5pbmcgdGVzdHMgd2lsbCBkcm9wIGFsbCB0
YWJsZXMuJyk7CisgICAgICAgICAgICBhc2tZZXNPck5vUXVlc3Rpb24obnVsbCwgJ0RvIHlvdSBy
ZWFsbHkgd2FudCB0byBjb250aW51ZT8nLCBjYWxsYmFjayk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCitmdW5jdGlvbiBhc2tZZXNPck5vUXVlc3Rpb24oZXJyb3IsIHF1ZXN0aW9uLCBjYWxs
YmFjaykgeworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTsK
KworICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHF1ZXN0aW9uICsgJyAoeS9uKTonKTsKKyAgICBw
cm9jZXNzLnN0ZGluLnJlc3VtZSgpOworICAgIHByb2Nlc3Muc3RkaW4uc2V0RW5jb2RpbmcoJ3V0
Zi04Jyk7CisgICAgcHJvY2Vzcy5zdGRpbi5vbignZGF0YScsIGZ1bmN0aW9uIChsaW5lKSB7Cisg
ICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTsKKyAgICAgICAgaWYgKGxpbmUgPT09ICd5Jykgewor
ICAgICAgICAgICAgcHJvY2Vzcy5zdGRpbi5wYXVzZSgpOworICAgICAgICAgICAgY2FsbGJhY2so
bnVsbCwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAobGluZSA9PT0gJ24nKSB7CisgICAgICAg
ICAgICBwcm9jZXNzLnN0ZGluLnBhdXNlKCk7CisgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBm
YWxzZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlk
IGlucHV0OicsIGxpbmUpOworICAgIH0pOworfQorCitmdW5jdGlvbiBpbml0aWFsaXplRGF0YWJh
c2UoY2xpZW50LCBjYWxsYmFjaykgeworICAgIHZhciBjb21tYVNlcGFyYXRlZFNxbFN0YXRlbWVu
dHMgPSBmcy5yZWFkRmlsZVN5bmMocGF0aFRvRGF0YWJzZVNRTCgpLCAidXRmOCIpOworCisgICAg
dmFyIGZpcnN0RXJyb3I7CisgICAgdmFyIHF1ZXVlID0gbmV3IFRhc2tRdWV1ZSgpOworICAgIGNv
bW1hU2VwYXJhdGVkU3FsU3RhdGVtZW50cy5zcGxpdCgvO1xzKi8pLmZvckVhY2goZnVuY3Rpb24g
KHN0YXRlbWVudCkgeworICAgICAgICBxdWV1ZS5hZGRUYXNrKGZ1bmN0aW9uIChlcnJvciwgY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGNsaWVudC5xdWVyeShzdGF0ZW1lbnQsIGZ1bmN0aW9uIChl
cnJvcikgeworICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiAhZmlyc3RFcnJvcikKKyAgICAg
ICAgICAgICAgICAgICAgZmlyc3RFcnJvciA9IGVycm9yOworICAgICAgICAgICAgICAgIGNhbGxi
YWNrKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSkKKyAgICB9KTsKKworICAgIHF1ZXVl
LnN0YXJ0KGZ1bmN0aW9uICgpIHsgY2FsbGJhY2soZmlyc3RFcnJvcik7IH0pOworfQorCit2YXIg
Y3VycmVudFRlc3RDb250ZXh0OworZnVuY3Rpb24gVGVzdEVudmlyb25tZW50KHRlc3RDYXNlUXVl
dWUpIHsKKyAgICB2YXIgY3VycmVudFRlc3RHcm91cDsKKworICAgIHRoaXMuYXNzZXJ0ID0gYXNz
ZXJ0OworICAgIHRoaXMuY29uc29sZSA9IGNvbnNvbGU7CisKKyAgICAvLyBkZXNjcmliZSgifiIs
IGZ1bmN0aW9uICgpIHsKKyAgICAvLyAgICAgaXQoIn4iLCBmdW5jdGlvbiAoKSB7IGFzc2VydCh0
cnVlKTsgfSk7CisgICAgLy8gfSk7CisgICAgdGhpcy5kZXNjcmliZSA9IGZ1bmN0aW9uICh0ZXN0
R3JvdXAsIGNhbGxiYWNrKSB7CisgICAgICAgIGN1cnJlbnRUZXN0R3JvdXAgPSB0ZXN0R3JvdXA7
CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfQorCisgICAgdGhpcy5pdCA9IGZ1bmN0aW9uICh0
ZXN0Q2FzZURlc2NyaXB0aW9uLCB0ZXN0Q2FzZSkgeworICAgICAgICB0ZXN0Q2FzZVF1ZXVlLmFk
ZFRhc2soZnVuY3Rpb24gKGVycm9yLCBjYWxsYmFjaykgeworICAgICAgICAgICAgY3VycmVudFRl
c3RDb250ZXh0ID0gbmV3IFRlc3RDb250ZXh0KGN1cnJlbnRUZXN0R3JvdXAsIHRlc3RDYXNlRGVz
Y3JpcHRpb24sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGVzdENvbnRl
eHQgPSBudWxsOworICAgICAgICAgICAgICAgIGluaXRpYWxpemVEYXRhYmFzZShjb25uZWN0KCks
IGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2UoKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy5wb3N0SlNPTiA9IGZ1bmN0aW9uIChwYXRoLCBj
b250ZW50LCBjYWxsYmFjaykgeworICAgICAgICBzZW5kSHR0cFJlcXVlc3QocGF0aCwgJ1BPU1Qn
LCAnYXBwbGljYXRpb24vanNvbicsIEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpLCBmdW5jdGlvbiAo
ZXJyb3IsIHJlc3BvbnNlKSB7CisgICAgICAgICAgICBhc3NlcnQuaWZFcnJvcihlcnJvcik7Cisg
ICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHRoaXMuaHR0cEdldCA9IGZ1bmN0aW9uIChwYXRoLCBjYWxsYmFjaykgeworICAgICAgICBzZW5k
SHR0cFJlcXVlc3QocGF0aCwgJ0dFVCcsIG51bGwsICcnLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3Bv
bnNlKSB7CisgICAgICAgICAgICBhc3NlcnQuaWZFcnJvcihlcnJvcik7CisgICAgICAgICAgICBj
YWxsYmFjayhyZXNwb25zZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHRoaXMuaHR0cFBv
c3Q9IGZ1bmN0aW9uIChwYXRoLCBjb250ZW50LCBjYWxsYmFjaykgeworICAgICAgICB2YXIgY29u
dGVudFR5cGUgPSBudWxsOworICAgICAgICBpZiAodHlwZW9mKGNvbnRlbnQpICE9ICJzdHJpbmci
KSB7CisgICAgICAgICAgICBjb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQnOworICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbXTsKKyAgICAgICAgICAg
IGZvciAodmFyIGtleSBpbiBjb250ZW50KQorICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucHVz
aChrZXkgKyAnPScgKyBlc2NhcGUoY29udGVudFtrZXldKSk7CisgICAgICAgICAgICBjb250ZW50
ID0gY29tcG9uZW50cy5qb2luKCcmJyk7CisgICAgICAgIH0KKyAgICAgICAgc2VuZEh0dHBSZXF1
ZXN0KHBhdGgsICdQT1NUJywgY29udGVudFR5cGUsIGNvbnRlbnQsIGZ1bmN0aW9uIChlcnJvciwg
cmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGFzc2VydC5pZkVycm9yKGVycm9yKTsKKyAgICAgICAg
ICAgIGNhbGxiYWNrKHJlc3BvbnNlKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy5x
dWVyeUFuZEZldGNoQWxsID0gZnVuY3Rpb24gKHF1ZXJ5LCBwYXJhbWV0ZXJzLCBjYWxsYmFjaykg
eworICAgICAgICB2YXIgY2xpZW50ID0gY29ubmVjdCgpOworICAgICAgICBjbGllbnQucXVlcnko
cXVlcnksIHBhcmFtZXRlcnMsIGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0KSB7CisgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuaWZFcnJv
cihlcnJvcik7CisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0LnJvd3MpOworICAgICAg
ICAgICAgfSwgMCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHRoaXMuc2hhMjU2ID0gZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgdmFyIGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hh
MjU2Jyk7CisgICAgICAgIGhhc2gudXBkYXRlKGRhdGEpOworICAgICAgICByZXR1cm4gaGFzaC5k
aWdlc3QoJ2hleCcpOworICAgIH0KKworICAgIHRoaXMubm90aWZ5RG9uZSA9IGZ1bmN0aW9uICgp
IHsgY3VycmVudFRlc3RDb250ZXh0LmRvbmUoKTsgfQorfQorCitwcm9jZXNzLm9uKCd1bmNhdWdo
dEV4Y2VwdGlvbicsIGZ1bmN0aW9uIChlcnJvcikgeworICAgIGlmICghY3VycmVudFRlc3RDb250
ZXh0KQorICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICBjdXJyZW50VGVzdENvbnRleHQubG9nRXJy
b3IoJ1VuY2F1Z2h0IGV4Y2VwdGlvbicsIGVycm9yKTsKKyAgICBjdXJyZW50VGVzdENvbnRleHQu
ZG9uZSgpOworfSk7CisKK2Z1bmN0aW9uIHNlbmRIdHRwUmVxdWVzdChwYXRoLCBtZXRob2QsIGNv
bnRlbnRUeXBlLCBjb250ZW50LCBjYWxsYmFjaykgeworICAgIHZhciBvcHRpb25zID0gY29uZmln
KCd0ZXN0U2VydmVyJyk7CisgICAgb3B0aW9ucy5wYXRoID0gcGF0aDsKKyAgICBvcHRpb25zLm1l
dGhvZCA9IG1ldGhvZDsKKworICAgIHZhciByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMs
IGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VUZXh0ID0gJyc7Cisg
ICAgICAgIHJlc3BvbnNlLnNldEVuY29kaW5nKCd1dGY4Jyk7CisgICAgICAgIHJlc3BvbnNlLm9u
KCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHJlc3BvbnNlVGV4dCArPSBjaHVuazsgfSk7Cisg
ICAgICAgIHJlc3BvbnNlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3Rh
dHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSwgcmVzcG9uc2VUZXh0OiByZXNwb25zZVRleHR9
KTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICByZXF1ZXN0
Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTsKKyAgICBpZiAoY29udGVudFR5cGUpCisgICAgICAgIHJl
cXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7CisgICAgaWYgKGNv
bnRlbnQpCisgICAgICAgIHJlcXVlc3Qud3JpdGUoY29udGVudCk7CisgICAgcmVxdWVzdC5lbmQo
KTsKK30KKworZnVuY3Rpb24gVGVzdENvbnRleHQodGVzdEdyb3VwLCB0ZXN0Q2FzZSwgY2FsbGJh
Y2spIHsKKyAgICB2YXIgZmFpbGVkID0gZmFsc2U7CisKKyAgICB0aGlzLmRlc2NyaXB0aW9uID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGVzdEdyb3VwICsgJyAnICsgdGVzdENhc2U7
CisgICAgfQorICAgIHRoaXMuZG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCFmYWls
ZWQpCisgICAgICAgICAgICBjb25zb2xlLmxvZygnUEFTUycpOworICAgICAgICBjYWxsYmFjaygp
OworICAgIH0KKyAgICB0aGlzLmxvZ0Vycm9yID0gZnVuY3Rpb24gKGVycm9yLCBkZXRhaWxzKSB7
CisgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IsIGRl
dGFpbHMpOworICAgIH0KKworICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRoaXMuZGVzY3JpcHRp
b24oKSArICc6ICcpOworfQorCittYWluKCk7CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2NvbW1vbi5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy9jb21tb24uY3NzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9jb21tb24uY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAK
KworaHRtbCwgYm9keSB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9CisKK2Jv
ZHkgeworICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgICBmb250LWZhbWlseTog
c2Fucy1zZXJpZjsKKyAgICBwYWRkaW5nOiAxMHB4OworfQorCisjdGl0bGUgeworICAgIGJhY2tn
cm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChib3R0b20sIHJnYigyNDAsMjQwLDI0MCkgMzEl
LCByZ2IoMjU1LDI1NSwyNTUpIDkwJSk7CisgICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFy
LWdyYWRpZW50KGJvdHRvbSwgcmdiKDI0MCwyNDAsMjQwKSAzMSUsIHJnYigyNTUsMjU1LDI1NSkg
OTAlKTsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChib3R0b20s
IHJnYigyNDAsMjQwLDI0MCkgMzElLCByZ2IoMjU1LDI1NSwyNTUpIDkwJSk7CisgICAgYmFja2dy
b3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoYm90dG9tLCByZ2IoMjQwLDI0MCwy
NDApIDMxJSwgcmdiKDI1NSwyNTUsMjU1KSA5MCUpOworICAgIGJhY2tncm91bmQtaW1hZ2U6IC1t
cy1saW5lYXItZ3JhZGllbnQoYm90dG9tLCByZ2IoMjQwLDI0MCwyNDApIDMxJSwgcmdiKDI1NSwy
NTUsMjU1KSA5MCUpOworICAgIC1tb3otYm94LXNoYWRvdzogICAgMXB4IDFweCAzcHggMXB4ICNj
Y2M7CisgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMXB4IDNweCAxcHggI2NjYzsKKyAgICBi
b3gtc2hhZG93OiAgICAgICAgIDFweCAxcHggM3B4IDFweCAjY2NjOworICAgIHBhZGRpbmc6IDVw
eCAxMHB4OworICAgIG1hcmdpbjogMCAwIDIwcHggMDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7
CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworfQorCisjdGl0bGUgaDEgeworICAgIGZvbnQtd2Vp
Z2h0OiBub3JtYWw7CisgICAgdGV4dC1zaGFkb3c6ICNiYmIgMXB4IDFweCAycHg7CisgICAgbWFy
Z2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgZm9udC1zaXplOiAyZW07Cit9CisjdGl0bGUg
bGksICN0aXRsZSB1bCB7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBtYXJnaW46IDA7Cisg
ICAgcGFkZGluZzogMDsKK30KKworI3RpdGxlIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9
CisKKyN0aXRsZSBsaTphZnRlciB7CisgICAgY29udGVudDogJyB8ICc7Cit9CisKKyN0aXRsZSBs
aTpsYXN0LWNoaWxkOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKK30KKworI3RpdGxlIHVsIHsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAg
ICB0b3A6IDVweDsKKyAgICByaWdodDogMjBweDsKKyAgICBwYWRkaW5nLXRvcDogMC42ZW07Cit9
CisKK2EgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xvcjogIzAwMDsKKyAg
ICB0ZXh0LXNoYWRvdzogI2JiYiAxcHggMXB4IDJweDsKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvaW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTY3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViS2l0
IFBlcmYgTW9uaXRvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmpzIiBkZWZlcj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5qcyIgZGVmZXI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QuY3Jvc3NoYWlyLmpzIiBkZWZlcj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5maWxsYmV0d2Vlbi5qcyIgZGVmZXI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QucmVzaXplLmpzIiBkZWZlcj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5zZWxlY3Rpb24uanMiIGRlZmVyPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5mbG90LnRpbWUuanMiIGRlZmVyPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImpzL2hlbHBlci1jbGFzc2VzLmpzIiBkZWZlcj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJqcy9zaGFyZWQuanMiIGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3N0YXRpc3RpY3MuanMiIGRlZmVyPjwvc2NyaXB0PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJjb21tb24uY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisKKyNudW1iZXJP
ZkRheXNQaWNrZXIgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBtYXJnaW46IDVw
eCAwcHg7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICBjb2xvcjogIzY2NjsKKyAg
ICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgcGFkZGluZzogNXB4IDhweDsKK30KKworI251bWJl
ck9mRGF5c1BpY2tlciBpbnB1dCB7CisgICAgaGVpZ2h0OiAwLjllbTsKKyAgICBtYXJnaW4tcmln
aHQ6IDFlbTsKK30KKwordGQsIHRoIHsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYm9yZGVyLWNv
bGxhcHNlOiBjb2xsYXBzZTsKK30KKworI2Rhc2hib2FyZCA+IHRib2R5ID4gdHIgPiB0ZCB7Cisg
ICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworI2Rhc2hib2FyZCA+IHRoZWFkIHRoIHsKKyAg
ICBwYWRkaW5nLXRvcDogMS41ZW07CisgICAgdGV4dC1zaGFkb3c6ICNiYmIgMXB4IDFweCAycHg7
CisgICAgZm9udC1zaXplOiBsYXJnZTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisj
ZGFzaGJvYXJkIHRkIHsKKyAgICAKK30KKworLmNoYXJ0IHsKKyAgICBwb3NpdGlvbjogcmVsYXRp
dmU7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7
CisgICAgbWFyZ2luOiAxMHB4IDEwcHggMHB4IDBweDsKK30KKworLmNoYXJ0LndvcnNlIHsKKyAg
ICBiYWNrZ3JvdW5kOiAjZmNjOworfQorCisuY2hhcnQuYmV0dGVyIHsKKyAgICBiYWNrZ3JvdW5k
OiAjY2ZjOworfQorCisjY2hhcnRzIC5wYW5lIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgbGVmdDogMTBweDsKKyAgICB0b3A6IDEwcHg7CisgICAgd2lkdGg6IDIwMHB4OworfQorCisu
Y2hhcnQgaGVhZGVyIHsKKyAgICBoZWlnaHQ6IDNlbTsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxs
OworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKyNkYXNoYm9hcmQgaGVhZGVyIHsK
KyAgICBwYWRkaW5nOiAxMHB4OworICAgIHdpZHRoOiAyMDBweDsKK30KKworLmNoYXJ0IGgyLCAu
Y2hhcnQgaDMgeworICAgIG1hcmdpbjogMCAwIDAuM2VtIDA7CisgICAgcGFkZGluZzogMDsKKyAg
ICBmb250LXNpemU6IDFlbTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgIHdpZHRoOiAy
MDBweDsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cit9CisKKy5jaGFydCBoMiB7CisgICAg
Zm9udC1zaXplOiBub3JtYWw7Cit9CisKKy5jaGFydCBoMyB7CisgICAgZm9udC1zaXplOiBub3Jt
YWw7Cit9CisKKyNkYXNoYm9hcmQgLmNoYXJ0IGgzIHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisuY2hhcnQgLnN0YXR1cyB7CisgICAgZm9udC1zaXplOiBzbWFsbDsKKyAgICBjb2xvcjogIzY2
NjsKK30KKworLnBsb3QgeworICAgIG1hcmdpbjogNXB4IDVweCAxMHB4IDVweDsKK30KKworLmNs
b3NlQnV0dG9uIHN2ZyB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGxlZnQ6IDhweDsK
KyAgICBib3R0b206IDhweDsKKyAgICB3aWR0aDogMTVweDsKKyAgICBoZWlnaHQ6IDE1cHg7Cit9
CisKKyNkYXNoYm9hcmQgLnBsb3QgeworICAgIHdpZHRoOiA0MDBweDsKKyAgICBoZWlnaHQ6IDEw
MHB4OworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBjdXJzb3I6IGhhbmQ7Cit9CisKKyNjaGFy
dHMgLnBsb3QgeworICAgIGhlaWdodDogMzAwcHg7CisgICAgbWFyZ2luLWxlZnQ6IDI1MHB4Owor
fQorCisjZGFzaGJvYXJkIC5vdmVydmlld1Bsb3QgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
KyNjaGFydHMgLm92ZXJ2aWV3UGxvdCB7CisgICAgbWFyZ2luOiAxMHB4IDBweCAwcHggMHB4Owor
ICAgIHBhZGRpbmc6IDA7CisgICAgaGVpZ2h0OiA3MHB4OworfQorCisuc3VtbWFyeVRhYmxlIHsK
KyAgICBmb250LXNpemU6IHNtYWxsOworICAgIGNvbG9yOiAjNjY2OworICAgIGJvcmRlcjogMDsK
K30KKworI2Rhc2hib2FyZCAuc3VtbWFyeVRhYmxlIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgcmlnaHQ6IDEwcHg7CisgICAgdG9wOiAxMHB4OworICAgIHdpZHRoOiAxODBweDsKK30K
KworI2Rhc2hib2FyZCAuYXJyb3cgeworICAgIHdpZHRoOiAyMHB4OworICAgIGhlaWdodDogNDBw
eDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiA1MHB4OworICAgIGxlZnQ6
IDVweDsKK30KKworI2Rhc2hib2FyZCAudW5pdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKwor
I2NoYXJ0cyAudW5pdCB7CisgICAgZm9udC1zaXplOiBzbWFsbDsKKyAgICB3aWR0aDogNTBweDsK
KyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJv
dHRvbTogMTBweDsKKyAgICBsZWZ0OiAyNDVweDsKK30KKworI2NoYXJ0cyAuYXJyb3cgeworICAg
IHdpZHRoOiAyMHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAxMHB4OworICAgIGxlZnQ6IDIyMHB4OworfQorCisuY2hhcnQgc3ZnIHsKKyAg
ICBzdHJva2U6ICNjY2M7CisgICAgZmlsbDogI2NjYzsKKyAgICBjb2xvcjogI2NjYzsKK30KKwor
LmNoYXJ0LndvcnNlIHN2ZyB7CisgICAgc3Ryb2tlOiAjYzk5OworICAgIGZpbGw6ICNjOTk7Cisg
ICAgY29sb3I6ICNjOTk7Cit9CisKKy5jaGFydC5iZXR0ZXIgc3ZnIHsKKyAgICBzdHJva2U6ICM5
Yzk7CisgICAgZmlsbDogIzljOTsKKyAgICBjb2xvcjogIzljOTsKK30KKworLmNoYXJ0IC55YXhp
c3RvZ2dsZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IDEwcHg7Cisg
ICAgbGVmdDogMjI1cHg7CisgICAgd2lkdGg6IDEwcHg7CisgICAgaGVpZ2h0OiAyNXB4OworfQor
CisjZGFzaGJvYXJkICAueWF4aXN0b2dnbGVyIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisu
dG9vbHRpcCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGJvcmRlci1yYWRpdXM6IDVw
eDsKKyAgICBwYWRkaW5nOiA1cHg7CisgICAgb3BhY2l0eTogMC44OworICAgIGJhY2tncm91bmQ6
ICMzMzM7CisgICAgY29sb3I6ICNlZWU7CisgICAgZm9udC1zaXplOiBzbWFsbDsKKyAgICBsaW5l
LWhlaWdodDogMTMwJTsKKyAgICB3aWR0aDogMzBleDsKK30KKworLnRvb2x0aXA6YWZ0ZXIgewor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMDsKKyAgICBoZWlnaHQ6IDA7Cisg
ICAgbGVmdDogNTAlOworICAgIG1hcmdpbi1sZWZ0OiAtOXB4OworICAgIGJvdHRvbTogLTE5cHg7
CisgICAgY29udGVudDogIiI7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgYm9yZGVyLXN0eWxl
OiBzb2xpZDsKKyAgICBib3JkZXItd2lkdGg6IDEwcHg7CisgICAgYm9yZGVyLWNvbG9yOiAjMzMz
IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50OworfQorCisudG9vbHRpcCBhIHsK
KyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjogI2ZmZjsKKyAgICB0
ZXh0LXNoYWRvdzogbm9uZTsKK30KKworLmNsaWNrVG9vbHRpcCB7CisgICAgb3BhY2l0eTogMC42
OworfQorCisuaG92ZXJUb29sdGlwIHsKKyAgICB6LWluZGV4OiA5OTk5OTsKK30KKworI3Rlc3RQ
aWNrZXIgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBtYXJnaW46IDEwcHggMHB4
OworICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgY29sb3I6ICM2NjY7CisgICAgYm9y
ZGVyLXJhZGl1czogNXB4OworICAgIHBhZGRpbmc6IDVweCA4cHg7Cit9CisKKyNudW1iZXJPZkRh
eXNQaWNrZXIgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBtYXJnaW46IDVweCAw
cHg7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICBjb2xvcjogIzY2NjsKKyAgICBi
b3JkZXItcmFkaXVzOiA1cHg7CisgICAgcGFkZGluZzogNXB4IDhweDsKK30KKworI251bWJlck9m
RGF5c1BpY2tlciBpbnB1dCB7CisgICAgaGVpZ2h0OiAwLjllbTsKKyAgICBtYXJnaW4tcmlnaHQ6
IDFlbTsKK30KKworPC9zdHlsZT4KKzxzY3JpcHQ+CisKKyhmdW5jdGlvbiAoKSB7CisgICAgdmFy
IGNoYXJ0cyA9IFtdOworICAgIHZhciBtaW5UaW1lOworICAgIHZhciBjdXJyZW50Wm9vbTsKKyAg
ICB2YXIgc2hhcmVkUGxvdE9wdGlvbnMgPSB7CisgICAgICAgIGxpbmVzOiB7IHNob3c6IHRydWUs
IGxpbmVXaWR0aDogMSB9LAorICAgICAgICB4YXhpczogeworICAgICAgICAgICAgbW9kZTogInRp
bWUiLAorICAgICAgICAgICAgdGltZWZvcm1hdDogIiVtLyVkIiwKKyAgICAgICAgICAgIG1pblRp
Y2tTaXplOiBbMSwgJ2RheSddLAorICAgICAgICAgICAgbWF4OiBEYXRlLm5vdygpLCAvLyBGSVhN
RTogVGhpcyBpcyBsaWtlbHkgYnJva2VuIGZvciBub24tUFNUCisgICAgICAgIH0sCisgICAgICAg
IHlheGlzOiB7IHRpY2tMZW5ndGg6IDAgfSwKKyAgICAgICAgc2VyaWVzOiB7IHNoYWRvd1NpemU6
IDAgfSwKKyAgICAgICAgcG9pbnRzOiB7IHNob3c6IGZhbHNlIH0sCisgICAgICAgIGdyaWQ6IHsK
KyAgICAgICAgICAgIGhvdmVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGJvcmRlcldpZHRoOiAx
LAorICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjOTk5JywKKyAgICAgICAgICAgIGJhY2tncm91
bmRDb2xvcjogJyNmZmYnLAorICAgICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGNvbXB1
dGVZQXhpc0JvdW5kc1RvRml0TGluZXMobWluVGltZSwgcmVzdWx0cywgYmFzZWxpbmUsIHRhcmdl
dCkgeworICAgICAgICB2YXIgc3RkZXZPZkFsbFJ1bnMgPSByZXN1bHRzLnNhbXBsZVN0YW5kYXJk
RGV2aWF0aW9uKG1pblRpbWUpOworICAgICAgICB2YXIgbW92aW5nQXZlcmFnZSA9IHJlc3VsdHMu
ZXhwb25lbnRpYWxNb3ZpbmdBcml0aG1ldGljTWVhbihtaW5UaW1lLCAvKiBhbHBoYSwgdGhlIGRl
Z3JlZSBvZiB3ZWlnaHRpbmcgZGVjcmVhc2UgKi8gMC4zKTsKKyAgICAgICAgdmFyIG1pbiA9IHJl
c3VsdHMubWluKG1pblRpbWUpOworICAgICAgICB2YXIgbWF4ID0gcmVzdWx0cy5tYXgobWluVGlt
ZSk7CisKKyAgICAgICAgaWYgKGJhc2VsaW5lKSB7CisgICAgICAgICAgICBtaW4gPSBNYXRoLm1p
bihtaW4sIGJhc2VsaW5lLm1pbihtaW5UaW1lKSk7CisgICAgICAgICAgICBtYXggPSBNYXRoLm1h
eChtYXgsIGJhc2VsaW5lLm1heChtaW5UaW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRh
cmdldCkgeworICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCB0YXJnZXQubWluKG1pblRp
bWUpKTsKKyAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgdGFyZ2V0Lm1heChtaW5UaW1l
KSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbWFyZ2luU2l6ZSA9IChtYXggLSBtaW4pICog
MC4xOworICAgICAgICByZXR1cm4ge21pbjogbWluIC0gbWFyZ2luU2l6ZSwgbWF4OiBtYXggKyBt
YXJnaW5TaXplLAorICAgICAgICAgICAgYWRqdXN0ZWRNaW46IE1hdGgubWluKHJlc3VsdHMubGFz
dFJlc3VsdCgpLm1lYW4oKSAtIG1hcmdpblNpemUsIE1hdGgubWF4KG1vdmluZ0F2ZXJhZ2UgLSBz
dGRldk9mQWxsUnVucyAqIDIsIG1pbikgLSBtYXJnaW5TaXplKSwKKyAgICAgICAgICAgIGFkanVz
dGVkTWF4OiBNYXRoLm1heChyZXN1bHRzLmxhc3RSZXN1bHQoKS5tZWFuKCkgKyBtYXJnaW5TaXpl
LCBNYXRoLm1pbihtb3ZpbmdBdmVyYWdlICsgc3RkZXZPZkFsbFJ1bnMgKiAyLCBtYXgpICsgbWFy
Z2luU2l6ZSkgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb21wdXRlU3RhdHVzKHNtYWxsZXJJ
c0JldHRlciwgbGFzdFJlc3VsdCwgYmFzZWxpbmUsIHRhcmdldCkgeworICAgICAgICB2YXIgcmVs
YXRpdmVEaWZmZXJlbmNlV2l0aEJhc2VsaW5lID0gYmFzZWxpbmUgPyBsYXN0UmVzdWx0LnJlbGF0
aXZlRGlmZmVyZW5jZShiYXNlbGluZS5sYXN0UmVzdWx0KCkpIDogMDsKKyAgICAgICAgdmFyIHJl
bGF0aXZlRGlmZmVyZW5jZVdpdGhUYXJnZXQgPSB0YXJnZXQgPyBsYXN0UmVzdWx0LnJlbGF0aXZl
RGlmZmVyZW5jZSh0YXJnZXQubGFzdFJlc3VsdCgpKSA6IDA7CisgICAgICAgIHZhciBzdGF0dXNU
ZXh0ID0gJyc7CisgICAgICAgIHZhciBzdGF0dXMgPSAnJzsKKworICAgICAgICBpZiAocmVsYXRp
dmVEaWZmZXJlbmNlV2l0aEJhc2VsaW5lICYmIHJlbGF0aXZlRGlmZmVyZW5jZVdpdGhCYXNlbGlu
ZSA+IDAgIT0gc21hbGxlcklzQmV0dGVyKSB7CisgICAgICAgICAgICBzdGF0dXNUZXh0ID0gTWF0
aC5hYnMocmVsYXRpdmVEaWZmZXJlbmNlV2l0aEJhc2VsaW5lICogMTAwKS50b0ZpeGVkKDIpICsg
JyUgJyArIChzbWFsbGVySXNCZXR0ZXIgPyAnYWJvdmUnIDogJ2JlbG93JykgKyAnIGJhc2VsaW5l
JzsKKyAgICAgICAgICAgIHN0YXR1cyA9ICd3b3JzZSc7CisgICAgICAgIH0gZWxzZSBpZiAocmVs
YXRpdmVEaWZmZXJlbmNlV2l0aFRhcmdldCAmJiByZWxhdGl2ZURpZmZlcmVuY2VXaXRoVGFyZ2V0
ID4gMCA9PSBzbWFsbGVySXNCZXR0ZXIpIHsKKyAgICAgICAgICAgIHN0YXR1c1RleHQgPSBNYXRo
LmFicyhyZWxhdGl2ZURpZmZlcmVuY2VXaXRoVGFyZ2V0ICogMTAwKS50b0ZpeGVkKDIpICsgJyUg
JyArIChzbWFsbGVySXNCZXR0ZXIgPyAnYmVsb3cnIDogJ2Fib3ZlJykgKyAnIHRhcmdldCc7Cisg
ICAgICAgICAgICBzdGF0dXMgPSAnYmV0dGVyJzsKKyAgICAgICAgfSBlbHNlIGlmIChyZWxhdGl2
ZURpZmZlcmVuY2VXaXRoVGFyZ2V0KQorICAgICAgICAgICAgc3RhdHVzVGV4dCA9IE1hdGguYWJz
KHJlbGF0aXZlRGlmZmVyZW5jZVdpdGhUYXJnZXQgKiAxMDApLnRvRml4ZWQoMikgKyAnJSB1bnRp
bCB0YXJnZXQnOworCisgICAgICAgIGlmIChzdGF0dXNUZXh0KQorICAgICAgICAgICAgc3RhdHVz
VGV4dCArPSAnPGJyPic7CisgICAgICAgIHN0YXR1c1RleHQgKz0gYnVpbGRMYWJlbFdpdGhMaW5r
cyhsYXN0UmVzdWx0LmJ1aWxkKCkpOworCisgICAgICAgIHJldHVybiB7Y2xhc3M6IHN0YXR1cywg
dGV4dDogc3RhdHVzVGV4dH07CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkUGxvdERhdGFGb3JS
dW4ocGxvdERhdGEsIG5hbWUsIHJ1bnMsIGNvbG9yLCBpbnRlcmFjdGl2ZSkgeworICAgICAgICB2
YXIgZW50cnkgPSB7Y29sb3I6IGNvbG9yLCBkYXRhOiBydW5zLm1lYW5QbG90RGF0YSgpfTsKKyAg
ICAgICAgaWYgKCFpbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgZW50cnkuY2xpY2thYmxlID0g
ZmFsc2U7CisgICAgICAgICAgICBlbnRyeS5ob3ZlcmFibGUgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocnVucy5oYXNDb25maWRlbmNlSW50ZXJ2YWwoKSkgeworICAgICAgICAgICAg
dmFyIGxvd2VyTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHZhciBjb25m
aWVuY2VFbnRyeSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBlbnRyeSwge2xpbmVzOiB7bGluZVdpZHRo
OiAwfSwgY2xpY2thYmxlOiBmYWxzZSwgaG92ZXJhYmxlOiBmYWxzZX0pOworICAgICAgICAgICAg
cGxvdERhdGEucHVzaCgkLmV4dGVuZCh0cnVlLCB7fSwgY29uZmllbmNlRW50cnksIHtpZDogbG93
ZXJOYW1lLCBkYXRhOiBydW5zLnVwcGVyQ29uZmlkZW5jZVBsb3REYXRhKCl9KSk7CisgICAgICAg
ICAgICBwbG90RGF0YS5wdXNoKCQuZXh0ZW5kKHRydWUsIHt9LCBjb25maWVuY2VFbnRyeSwKKyAg
ICAgICAgICAgICAgICB7ZmlsbEJldHdlZW46IGxvd2VyTmFtZSwgbGluZXM6IHtmaWxsOiAwLjN9
LCBkYXRhOiBydW5zLmxvd2VyQ29uZmlkZW5jZVBsb3REYXRhKCl9KSk7CisgICAgICAgIH0KKyAg
ICAgICAgcGxvdERhdGEucHVzaChlbnRyeSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY3JlYXRl
U3VtbWFyeVJvd01hcmt1cChuYW1lLCBydW5zKSB7CisgICAgICAgIHJldHVybiAnPHRyPjx0ZD4n
ICsgbmFtZSArICc8L3RkPjx0ZD4nICsgcnVucy5sYXN0UmVzdWx0KCkubGFiZWwoKSArICc8L3Rk
PjwvdHI+JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBidWlsZExhYmVsV2l0aExpbmtzKGJ1aWxk
LCBwcmV2aW91c0J1aWxkKSB7CisgICAgICAgIGZ1bmN0aW9uIGxpbmtpZnlJZk5vdE51bGwobGFi
ZWwsIHVybCkgeworICAgICAgICAgICAgcmV0dXJuIHVybCA/ICc8YSBocmVmPSInICsgdXJsICsg
JyIgdGFyZ2V0PSJfYmxhbmsiPicgKyBsYWJlbCArICc8L2E+JyA6IGxhYmVsOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGZvcm1hdHRlZFJldmlzaW9ucyA9IGJ1aWxkLmZvcm1hdHRlZFJldmlz
aW9ucyhwcmV2aW91c0J1aWxkKTsKKyAgICAgICAgdmFyIG1hcmt1cCA9IFsnQ29tbWl0dGVkOiAn
ICsgYnVpbGQuZm9ybWF0dGVkVGltZSgpLAorICAgICAgICAgICAgJ0J1aWxkOiAnICsgbGlua2lm
eUlmTm90TnVsbChidWlsZC5idWlsZE51bWJlcigpLCBidWlsZC5idWlsZFVybCgpKSArICcgKCcg
KyBidWlsZC5mb3JtYXR0ZWRCdWlsZFRpbWUoKSArICcpJ107CisgICAgICAgIGZvciAodmFyIHJl
cG9zaXRvcnlOYW1lIGluIGZvcm1hdHRlZFJldmlzaW9ucykKKyAgICAgICAgICAgIG1hcmt1cC5w
dXNoKGxpbmtpZnlJZk5vdE51bGwoZm9ybWF0dGVkUmV2aXNpb25zW3JlcG9zaXRvcnlOYW1lXS5s
YWJlbCwgZm9ybWF0dGVkUmV2aXNpb25zW3JlcG9zaXRvcnlOYW1lXS51cmwpKTsKKyAgICAgICAg
cmV0dXJuIG1hcmt1cC5qb2luKCc8YnI+Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gQ2hhcnQo
Y29udGFpbmVyLCBpc0Rhc2hib2FyZCwgcGxhdGZvcm0sIG1ldHJpYywgYnVnVHJhY2tlcnMsIG9u
Q2xvc2UpIHsKKyAgICAgICAgdmFyIGxpbmtpZmllZEZ1bGxOYW1lID0gbWV0cmljLmZ1bGxOYW1l
OworICAgICAgICBpZiAobWV0cmljLnRlc3QudXJsKQorICAgICAgICAgICAgbGlua2lmaWVkRnVs
bE5hbWUgPSAnPGEgaHJlZj0iJyArIG1ldHJpYy50ZXN0LnVybCArICciPicgKyBsaW5raWZpZWRG
dWxsTmFtZSArICc8L2E+JzsKKyAgICAgICAgdmFyIHNlY3Rpb24gPSAkKCc8c2VjdGlvbiBjbGFz
cz0iY2hhcnQiPjxkaXYgY2xhc3M9InBhbmUiPjxoZWFkZXI+PGgyPicgKyBsaW5raWZpZWRGdWxs
TmFtZSArICc8L2gyPicKKyAgICAgICAgICAgICsgJzxoMyBjbGFzcz0icGxhdGZvcm0iPicgKyBw
bGF0Zm9ybS5uYW1lICsgJzwvaDM+JworICAgICAgICAgICAgKyAnPHNwYW4gY2xhc3M9InN0YXR1
cyI+PC9zcGFuPjwvaGVhZGVyPicKKyAgICAgICAgICAgICsgJzx0YWJsZSBjbGFzcz0ic3VtbWFy
eVRhYmxlIj48dGJvZHk+PC90Ym9keT48L3RhYmxlPicKKyAgICAgICAgICAgICsgJzxkaXYgY2xh
c3M9Im92ZXJ2aWV3UGxvdCI+PC9kaXY+PC9kaXY+JworICAgICAgICAgICAgKyAnPGRpdiBjbGFz
cz0icGxvdCI+PC9kaXY+JworICAgICAgICAgICAgKyAnPGRpdiBjbGFzcz0idW5pdCI+PC9kaXY+
JworICAgICAgICAgICAgKyAnPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTAwIiBjbGFzcz0iYXJyb3ci
PicKKyAgICAgICAgICAgICsgJzxnIHN0cm9rZS13aWR0aD0iMTAiPjxsaW5lIHgxPSIxMCIgeTE9
IjgiIHgyPSIxMCIgeTI9IjkyIiAvPicKKyAgICAgICAgICAgICsgJzxwb2x5Z29uIHBvaW50cz0i
NSw4NSAxNSw4NSAxMCw5MCIgY2xhc3M9ImRvd253YXJkQXJyb3dIZWFkIiAvPicKKyAgICAgICAg
ICAgICsgJzxwb2x5Z29uIHBvaW50cz0iNSwxNSAxNSwxNSAxMCwxMCIgY2xhc3M9InVwd2FyZEFy
cm93SGVhZCIgLz4nCisgICAgICAgICAgICArICc8L2c+PC9zdmc+JworICAgICAgICAgICAgKyAn
PGEgaHJlZj0iIyIgY2xhc3M9InRvZ2dsZVlBeGlzIj48c3ZnIHZpZXdCb3g9IjAgMCA0MCAxMDAi
IGNsYXNzPSJ5YXhpc3RvZ2dsZXIiPjxnIHN0cm9rZS13aWR0aD0iMTAiPicKKyAgICAgICAgICAg
ICsgJzxsaW5lIHgxPSIyMCIgeTE9IjgiIHgyPSIyMCIgeTI9IjgyIiAvPicKKyAgICAgICAgICAg
ICsgJzxwb2x5Z29uIHBvaW50cz0iMTUsMTUgMjUsMTUgMjAsMTAiIC8+JworICAgICAgICAgICAg
KyAnPHBvbHlnb24gcG9pbnRzPSIxNSw3NSAyNSw3NSAyMCw4MCIgLz4nCisgICAgICAgICAgICAr
ICc8bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iNDAiIHkyPSI5MiIgLz4nCisgICAgICAgICAgICAr
ICc8L2c+PC9zdmc+PC9hPicKKyAgICAgICAgICAgICsgJzxhIGhyZWY9IiMiIGNsYXNzPSJjbG9z
ZUJ1dHRvbiI+PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+JworICAgICAgICAgICAgKyAnPGcg
c3Ryb2tlLXdpZHRoPSIxMCI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDUiIGZpbGw9InRy
YW5zcGFyZW50Ii8+PHBvbHlnb24gcG9pbnRzPSIzMCwzMCA3MCw3MCIgLz4nCisgICAgICAgICAg
ICArICc8cG9seWdvbiBwb2ludHM9IjMwLDcwIDcwLDMwIiAvPjwvZz48L3N2Zz48L2E+PC9zZWN0
aW9uPicpOworCisgICAgICAgICQoY29udGFpbmVyKS5hcHBlbmQoc2VjdGlvbik7CisKKyAgICAg
ICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBpZiAob25DbG9zZSkgeworICAgICAgICAgICAg
c2VjdGlvbi5maW5kKCcuY2xvc2VCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVu
dCkgeworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAg
ICAgICAgc2VjdGlvbi5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICBjaGFydHMuc3BsaWNlKGNo
YXJ0cy5pbmRleE9mKHNlbGYpLCAxKTsKKyAgICAgICAgICAgICAgICBvbkNsb3NlKHNlbGYpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHNlY3Rpb24uZmluZCgnLmNsb3NlQnV0dG9uJykuaGlkZSgpOwor
CisgICAgICAgIHNlY3Rpb24uZmluZCgnLnlheGlzdG9nZ2xlcicpLmJpbmQoJ2NsaWNrJywgZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBzZWxmLnRvZ2dsZVlBeGlzKCk7CisgICAgICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9KTsKKworICAgICAgICB2YXIgcGxvdERhdGEgPSBbXTsKKyAgICAgICAgdmFyIHJl
c3VsdHM7CisgICAgICAgIHZhciBiYXNlbGluZTsKKyAgICAgICAgdmFyIHRhcmdldDsKKworICAg
ICAgICB2YXIgdG9vbHRpcCA9IG5ldyBUb29sdGlwKGNvbnRhaW5lciwgJ3Rvb2x0aXAgaG92ZXJU
b29sdGlwJyk7CisgICAgICAgIHZhciBib3VuZHM7CisgICAgICAgIHZhciBwbG90Q29udGFpbmVy
ID0gc2VjdGlvbi5maW5kKCcucGxvdCcpOworICAgICAgICB2YXIgbWFpblBsb3Q7CisgICAgICAg
IHZhciBvdmVydmlld1Bsb3Q7CisgICAgICAgIHZhciBjbGlja1Rvb2x0aXBzID0gW107CisgICAg
ICAgIHZhciBzaG91bGRTaG93RW50aXJlWUF4aXMgPSBmYWxzZTsKKworICAgICAgICB0aGlzLnBs
YXRmb3JtID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm07IH0KKyAgICAgICAgdGhpcy5t
ZXRyaWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KKworICAgICAgICB0aGlzLnBv
cHVsYXRlID0gZnVuY3Rpb24gKHBhc3NlZFJlc3VsdHMsIHBhc3NlZEJhc2VsaW5lLCBwYXNzZWRU
YXJnZXQpIHsKKyAgICAgICAgICAgIHJlc3VsdHMgPSBwYXNzZWRSZXN1bHRzOworICAgICAgICAg
ICAgYmFzZWxpbmUgPSBwYXNzZWRCYXNlbGluZTsKKyAgICAgICAgICAgIHRhcmdldCA9IHBhc3Nl
ZFRhcmdldDsKKworICAgICAgICAgICAgdmFyIHN1bW1hcnlSb3dzID0gJyc7CisgICAgICAgICAg
ICBpZiAodGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgYWRkUGxvdERhdGFGb3JSdW4ocGxvdERh
dGEsICdUYXJnZXQnLCB0YXJnZXQsICcjMDM5Jyk7CisgICAgICAgICAgICAgICAgc3VtbWFyeVJv
d3MgPSBjcmVhdGVTdW1tYXJ5Um93TWFya3VwKCdUYXJnZXQnLCB0YXJnZXQpICsgc3VtbWFyeVJv
d3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmFzZWxpbmUpIHsKKyAgICAgICAg
ICAgICAgICBhZGRQbG90RGF0YUZvclJ1bihwbG90RGF0YSwgJ0Jhc2VsaW5lJywgYmFzZWxpbmUs
ICcjOTMwJyk7CisgICAgICAgICAgICAgICAgc3VtbWFyeVJvd3MgPSBjcmVhdGVTdW1tYXJ5Um93
TWFya3VwKCdCYXNlbGluZScsIGJhc2VsaW5lKSArIHN1bW1hcnlSb3dzOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYWRkUGxvdERhdGFGb3JSdW4ocGxvdERhdGEsICdDdXJyZW50JywgcmVz
dWx0cywgJyM2NjYnLCB0cnVlKTsKKyAgICAgICAgICAgIHN1bW1hcnlSb3dzID0gY3JlYXRlU3Vt
bWFyeVJvd01hcmt1cCgnQ3VycmVudCcsIHJlc3VsdHMpICsgc3VtbWFyeVJvd3M7CisKKyAgICAg
ICAgICAgIHZhciBzdGF0dXMgPSBjb21wdXRlU3RhdHVzKHJlc3VsdHMuc21hbGxlcklzQmV0dGVy
KCksIHJlc3VsdHMubGFzdFJlc3VsdCgpLCBiYXNlbGluZSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IHNlY3Rpb24uYWRkQ2xhc3Moc3RhdHVzLmNsYXNzKTsKKyAgICAgICAgICAgIHNlY3Rpb24uZmlu
ZCgnLnN0YXR1cycpLmh0bWwoc3RhdHVzLnRleHQpOworICAgICAgICAgICAgc2VjdGlvbi5maW5k
KCcuc3VtbWFyeVRhYmxlIHRib2R5JykuaHRtbChzdW1tYXJ5Um93cyk7CisgICAgICAgICAgICBz
ZWN0aW9uLmZpbmQoJy51bml0JykuaHRtbChyZXN1bHRzLnVuaXQoKSk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0cy5zbWFsbGVySXNCZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24u
ZmluZCgnLmFycm93IC5kb3dud2FyZEFycm93SGVhZCcpLnNob3coKTsKKyAgICAgICAgICAgICAg
ICBzZWN0aW9uLmZpbmQoJy5hcnJvdyAudXB3YXJkQXJyb3dIZWFkJykuaGlkZSgpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmZpbmQoJy5hcnJvdyAuZG93
bndhcmRBcnJvd0hlYWQnKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcu
YXJyb3cgLnVwd2FyZEFycm93SGVhZCcpLnNob3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuYXR0YWNoTWFpblBsb3QgPSBmdW5jdGlvbiAoeE1pbiwgeE1heCkg
eworICAgICAgICAgICAgaWYgKCFib3VuZHMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICB2YXIgbWFpblBsb3RPcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIHNoYXJl
ZFBsb3RPcHRpb25zLCB7CisgICAgICAgICAgICAgICAgeGF4aXM6IHsKKyAgICAgICAgICAgICAg
ICAgICAgbWluOiB4TWluLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeWF4
aXM6IHsKKyAgICAgICAgICAgICAgICAgICAgdGlja0xlbmd0aDogbnVsbCwKKyAgICAgICAgICAg
ICAgICAgICAgbWluOiBzaG91bGRTaG93RW50aXJlWUF4aXMgPyAwIDogYm91bmRzLmFkanVzdGVk
TWluLAorICAgICAgICAgICAgICAgICAgICBtYXg6IHNob3VsZFNob3dFbnRpcmVZQXhpcyA/IGJv
dW5kcy5tYXggOiBib3VuZHMuYWRqdXN0ZWRNYXgsCisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBjcm9zc2hhaXI6IHsnbW9kZSc6ICd4JywgY29sb3I6ICcjYzkwJywgbGluZVdp
ZHRoOiAxfSwKKyAgICAgICAgICAgICAgICBncmlkOiB7Y2xpY2thYmxlOiB0cnVlfSwKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHhNYXgpCisgICAgICAgICAgICAgICAgbWFpblBs
b3RPcHRpb25zLnhheGlzLm1heCA9IHhNYXg7CisgICAgICAgICAgICBpZiAoaXNEYXNoYm9hcmQp
IHsKKyAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlvbnMueWF4aXMubGFiZWxXaWR0aCA9IDIw
OworICAgICAgICAgICAgICAgIG1haW5QbG90T3B0aW9ucy55YXhpcy50aWNrcyA9IFttYWluUGxv
dE9wdGlvbnMueWF4aXMubWluLCBtYWluUGxvdE9wdGlvbnMueWF4aXMubWF4XTsKKyAgICAgICAg
ICAgICAgICBtYWluUGxvdE9wdGlvbnMuZ3JpZC5hdXRvSGlnaGxpZ2h0ID0gZmFsc2U7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1haW5QbG90T3B0aW9ucy55YXhpcy5s
YWJlbFdpZHRoID0gMzA7CisgICAgICAgICAgICAgICAgbWFpblBsb3RPcHRpb25zLnNlbGVjdGlv
biA9IHttb2RlOiAieCJ9OworICAgICAgICAgICAgICAgIHBsb3REYXRhW3Bsb3REYXRhLmxlbmd0
aCAtIDFdLnBvaW50cyA9IHtzaG93OiB0cnVlLCByYWRpdXM6IDF9OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbWFpblBsb3QgPSAkLnBsb3QocGxvdENvbnRhaW5lciwgcGxvdERhdGEsIG1h
aW5QbG90T3B0aW9ucyk7CisgICAgICAgICAgICBwbG90RGF0YVtwbG90RGF0YS5sZW5ndGggLSAx
XS5wb2ludHMgPSB7fTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlja1Rv
b2x0aXBzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNsaWNrVG9vbHRpcHNb
aV0pCisgICAgICAgICAgICAgICAgICAgIGNsaWNrVG9vbHRpcHNbaV0ucmVtb3ZlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjbGlja1Rvb2x0aXBzID0gW107CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLnRvZ2dsZVlBeGlzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2hv
dWxkU2hvd0VudGlyZVlBeGlzID0gIXNob3VsZFNob3dFbnRpcmVZQXhpczsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50Wm9vbSkKKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaE1haW5QbG90KGN1
cnJlbnRab29tLmZyb20sIGN1cnJlbnRab29tLnRvKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB0aGlzLmF0dGFjaE1haW5QbG90KG1pblRpbWUpOworICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy56b29tID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAgICAgICAgICB0aGlz
LmF0dGFjaE1haW5QbG90KGZyb20sIHRvKTsKKyAgICAgICAgICAgIGlmIChvdmVydmlld1Bsb3Qp
CisgICAgICAgICAgICAgICAgb3ZlcnZpZXdQbG90LnNldFNlbGVjdGlvbih7eGF4aXM6IHtmcm9t
OiBmcm9tLCB0bzogdG99fSwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmNsZWFy
Wm9vbSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0YWNoTWFpblBsb3QobWlu
VGltZSk7CisgICAgICAgICAgICBpZiAob3ZlcnZpZXdQbG90KQorICAgICAgICAgICAgICAgIG92
ZXJ2aWV3UGxvdC5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB0aGlzLnNldENyb3NzaGFpciA9IGZ1bmN0aW9uIChwb3MpIHsKKyAgICAgICAgICAgIGlmICht
YWluUGxvdCkKKyAgICAgICAgICAgICAgICBtYWluUGxvdC5zZXRDcm9zc2hhaXIocG9zKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuY2xlYXJDcm9zc2hhaXIgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBpZiAobWFpblBsb3QpCisgICAgICAgICAgICAgICAgbWFpblBsb3QuY2xlYXJD
cm9zc2hhaXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuaGlkZVRvb2x0aXAgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGlmICh0b29sdGlwKQorICAgICAgICAgICAgICAgIHRvb2x0
aXAuaGlkZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdG9nZ2xlQ2xpY2tUb29s
dGlwKGluZGV4LCBwYWdlWCwgcGFnZVkpIHsKKyAgICAgICAgICAgIGlmIChjbGlja1Rvb2x0aXBz
W2luZGV4XSkKKyAgICAgICAgICAgICAgICBjbGlja1Rvb2x0aXBzW2luZGV4XS50b2dnbGUoKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBQdXQgdGhpcyBv
biBVUkxTdGF0ZS4KKyAgICAgICAgICAgICAgICB2YXIgbmV3VG9vbHRpcCA9IG5ldyBUb29sdGlw
KGNvbnRhaW5lciwgJ3Rvb2x0aXAgY2xpY2tUb29sdGlwJyk7CisgICAgICAgICAgICAgICAgc2hv
d1Rvb2x0aXBXaXRoUmVzdWx0cyhuZXdUb29sdGlwLCBwYWdlWCwgcGFnZVksIHJlc3VsdHMucmVz
dWx0QXQoaW5kZXgpLCByZXN1bHRzLnJlc3VsdEF0KGluZGV4IC0gMSkpOworICAgICAgICAgICAg
ICAgIG5ld1Rvb2x0aXAuYmluZENsaWNrKGZ1bmN0aW9uICgpIHsgdG9nZ2xlQ2xpY2tUb29sdGlw
KGluZGV4LCBwYWdlWCwgcGFnZVkpOyB9KTsKKyAgICAgICAgICAgICAgICBuZXdUb29sdGlwLmJp
bmRNb3VzZUVudGVyKGZ1bmN0aW9uICgpIHsgdG9vbHRpcC5oaWRlKCk7IH0pOworICAgICAgICAg
ICAgICAgIGNsaWNrVG9vbHRpcHNbaW5kZXhdID0gbmV3VG9vbHRpcDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gc2hvd1Rvb2x0aXBXaXRoUmVzdWx0cyh0b29sdGlwLCB4LCB5LCByZXN1bHQsIHJlc3VsdFRv
Q29tcGFyZSkgeworICAgICAgICAgICAgdmFyIG5ld0J1Z1VybHMgPSAnJzsKKyAgICAgICAgICAg
IGlmIChyZXN1bHRUb0NvbXBhcmUpIHsKKyAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAocmVz
dWx0VG9Db21wYXJlLmlzQmV0dGVyVGhhbihyZXN1bHQpID8gJ1JFR1JFU1NJT046ICcgOiAnJykg
KyByZXN1bHQubWV0cmljKCkuZnVsbE5hbWUKKyAgICAgICAgICAgICAgICAgICAgKyAnIGdvdCAn
ICsgcmVzdWx0LmZvcm1hdHRlZFByb2dyZXNzaW9uT3JSZWdyZXNzaW9uKHJlc3VsdFRvQ29tcGFy
ZSkKKyAgICAgICAgICAgICAgICAgICAgKyAnIGFyb3VuZCAnICsgcmVzdWx0LmJ1aWxkKCkuZm9y
bWF0dGVkVGltZSgpOworICAgICAgICAgICAgICAgIHZhciByZXZpc2lvbnMgPSByZXN1bHQuYnVp
bGQoKS5mb3JtYXR0ZWRSZXZpc2lvbnMocmVzdWx0VG9Db21wYXJlLmJ1aWxkKCkpOworCisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgdHJhY2tlck5hbWUgaW4gYnVnVHJhY2tlcnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHJlcG9zaXRvcmllcyA9IGJ1Z1RyYWNrZXJzW3RyYWNrZXJOYW1l
XS5yZXBvc2l0b3JpZXM7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9ICdQ
bGF0Zm9ybTogJyArIHJlc3VsdC5idWlsZCgpLnBsYXRmb3JtKCkubmFtZSArICdcblxuJzsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBvc2l0b3JpZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBvc2l0b3J5TmFtZSA9IHJl
cG9zaXRvcmllc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IHJl
dmlzaW9uc1tyZXBvc2l0b3J5TmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJl
dmlzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJldmlzaW9uLnVybCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXNjcmlwdGlvbiArPSByZXBvc2l0b3J5TmFtZSArICc6ICcgKyByZXZpc2lvbi51cmw7
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb24gKz0gcmV2aXNpb24ubGFiZWw7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvbiArPSAnXG4nOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHZhciB1cmwgPSBidWdUcmFja2Vyc1t0cmFja2VyTmFtZV0ubmV3QnVnVXJsCisg
ICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXCR0aXRsZS9nLCBlbmNvZGVVUklDb21w
b25lbnQodGl0bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wkZGVzY3Jp
cHRpb24vZywgZW5jb2RlVVJJQ29tcG9uZW50KGRlc2NyaXB0aW9uKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5yZXBsYWNlKC9cJGxpbmsvZywgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9u
LmhyZWYpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0J1Z1VybHMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdCdWdVcmxzICs9ICcsJzsKKyAgICAgICAgICAgICAgICAgICAgbmV3
QnVnVXJscyArPSAnIDxhIGhyZWY9IicgKyB1cmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArIHRy
YWNrZXJOYW1lICsgJzwvYT4nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
ZXdCdWdVcmxzID0gJ0ZpbGU6JyArIG5ld0J1Z1VybHM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0b29sdGlwLnNob3coeCwgeSwgcmVzdWx0LmxhYmVsKHJlc3VsdFRvQ29tcGFyZSkgKyAn
PGJyPicKKyAgICAgICAgICAgICAgICArIGJ1aWxkTGFiZWxXaXRoTGlua3MocmVzdWx0LmJ1aWxk
KCksIHJlc3VsdFRvQ29tcGFyZSA/IHJlc3VsdFRvQ29tcGFyZS5idWlsZCgpIDogbnVsbCkgKyAn
PGJyPicKKyAgICAgICAgICAgICAgICArIG5ld0J1Z1VybHMpOworICAgICAgICB9CisKKyAgICAg
ICAgdG9vbHRpcC5iaW5kQ2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRvb2x0
aXAuY3VycmVudEl0ZW0pCisgICAgICAgICAgICAgICAgdG9nZ2xlQ2xpY2tUb29sdGlwKHRvb2x0
aXAuY3VycmVudEl0ZW0uZGF0YUluZGV4LCB0b29sdGlwLmN1cnJlbnRJdGVtLnBhZ2VYLCB0b29s
dGlwLmN1cnJlbnRJdGVtLnBhZ2VZKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZnVuY3Rpb24g
Y2xvc2VzdEl0ZW1Gb3JQYWdlWFJlc3BlY3RpbmdQbG90T2Zmc2V0KGl0ZW0sIHBsb3QsIHNlcmll
cywgcGFnZVgpIHsKKyAgICAgICAgICAgIGlmICghc2VyaWVzIHx8ICFzZXJpZXMuZGF0YS5sZW5n
dGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICAgIHZhciBvZmZz
ZXQgPSAkKHBsb3RDb250YWluZXIpLm9mZnNldCgpOworICAgICAgICAgICAgdmFyIHBvaW50cyA9
IHNlcmllcy5kYXRhcG9pbnRzLnBvaW50czsKKyAgICAgICAgICAgIHZhciBzaXplID0gc2VyaWVz
LmRhdGFwb2ludHMucG9pbnRzaXplOworICAgICAgICAgICAgdmFyIHhJblBsb3QgPSBwYWdlWCAt
IG9mZnNldC5sZWZ0OworCisgICAgICAgICAgICBpZiAoeEluUGxvdCA8IHBsb3QuZ2V0UGxvdE9m
ZnNldCgpLmxlZnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICBp
ZiAoaXRlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsKKworICAgICAgICAgICAgdmFy
IHByZXZpb3VzUG9pbnQ7CisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvaW50ID0gcGxvdC5wb2lu
dE9mZnNldCh7eDogcG9pbnRzW2luZGV4ICogc2l6ZV0sIHk6IHBvaW50c1tpbmRleCAqIHNpemUg
KyAxXX0pOworICAgICAgICAgICAgICAgIGlmICh4SW5QbG90IDwgY3VycmVudFBvaW50LmxlZnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUG9pbnQgJiYgeEluUGxvdCA8IChw
cmV2aW91c1BvaW50LmxlZnQgKyBjdXJyZW50UG9pbnQubGVmdCkgLyAyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleCAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFBvaW50ID0gcHJldmlvdXNQb2ludDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGluZGV4ICsgMSA+PSBzZXJpZXMuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIHByZXZpb3VzUG9pbnQgPSBjdXJyZW50UG9pbnQ7CisgICAg
ICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWRl
YWxseSB3ZSB3YW50IHRvIHJldHVybiBhIHJlYWwgaXRlbSBvYmplY3QgYnV0IGZsb3QgZG9lc24n
dCBwcm92aWRlIGFuIEFQSSB0byBvYnRhaW4gb25lCisgICAgICAgICAgICAvLyBzbyBjcmVhdGUg
YW4gb2JqZWN0IHRoYXQgY29udGFpbiBwcm9wZXJ0aWVzIHdlIHVzZS4KKyAgICAgICAgICAgIHJl
dHVybiB7ZGF0YUluZGV4OiBpbmRleCwgcGFnZVg6IG9mZnNldC5sZWZ0ICsgY3VycmVudFBvaW50
LmxlZnQsIHBhZ2VZOiBvZmZzZXQudG9wICsgY3VycmVudFBvaW50LnRvcH07CisgICAgICAgIH0K
KworICAgICAgICAvLyBSZXR1cm4gYSBwbG90IGdlbmVyYXRvci4gVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbiB3ZSBjaGFuZ2UgdGhlIG51bWJlciBvZiBkYXlzIHRvIHNob3cuCisgICAgICAg
IHRoaXMuYXR0YWNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFyZXN1bHRzKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYm91bmRzID0gY29tcHV0ZVlB
eGlzQm91bmRzVG9GaXRMaW5lcyhtaW5UaW1lLCByZXN1bHRzLCBiYXNlbGluZSwgdGFyZ2V0KTsK
KworICAgICAgICAgICAgdmFyIG92ZXJ2aWV3Q29udGFpbmVyID0gc2VjdGlvbi5maW5kKCcub3Zl
cnZpZXdQbG90Jyk7CisgICAgICAgICAgICBpZiAoIWlzRGFzaGJvYXJkKSB7CisgICAgICAgICAg
ICAgICAgb3ZlcnZpZXdQbG90ID0gJC5wbG90KG92ZXJ2aWV3Q29udGFpbmVyLCBwbG90RGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwge30sIHNoYXJlZFBsb3RPcHRpb25z
LCB7CisgICAgICAgICAgICAgICAgICAgICAgICB4YXhpczogeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1pbjogbWluVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgbWF4aW11bSBudW1iZXIgb2YgdGlja3Mgd2UgY2FuIGZpdCBvbiB0aGUgb3ZlcmZsb3cgcGxv
dCBpcyA0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tTaXplOiBbKFRlc3RCdWls
ZC5ub3coKSAtIG1pblRpbWUpIC8gNCAvIDEwMDAsICdzZWNvbmQnXQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IHsgaG92ZXJhYmxlOiBm
YWxzZSwgY2xpY2thYmxlOiBmYWxzZSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uOiB7IG1vZGU6ICJ4IiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeWF4aXM6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtaW46IGJvdW5kcy5taW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4OiBib3VuZHMubWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0pKTsKKworICAgICAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgicGxvdHNl
bGVjdGVkIiwgZnVuY3Rpb24gKGV2ZW50LCByYW5nZXMpIHsgQ2hhcnQuem9vbShyYW5nZXMueGF4
aXMuZnJvbSwgcmFuZ2VzLnhheGlzLnRvKTsgfSk7CisgICAgICAgICAgICAgICAgJChvdmVydmll
d0NvbnRhaW5lcikuYmluZCgicGxvdHNlbGVjdGVkIiwgZnVuY3Rpb24gKGV2ZW50LCByYW5nZXMp
IHsgQ2hhcnQuem9vbShyYW5nZXMueGF4aXMuZnJvbSwgcmFuZ2VzLnhheGlzLnRvKTsgfSk7Cisg
ICAgICAgICAgICAgICAgJChvdmVydmlld0NvbnRhaW5lcikuYmluZCgicGxvdHVuc2VsZWN0ZWQi
LCBmdW5jdGlvbiAoKSB7IENoYXJ0LmNsZWFyWm9vbShtaW5UaW1lKSB9KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGN1cnJlbnRab29tKQorICAgICAgICAgICAgICAgIHRoaXMu
em9vbShjdXJyZW50Wm9vbS5mcm9tLCBjdXJyZW50Wm9vbS50byk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hNYWluUGxvdChtaW5UaW1lKTsKKworICAgICAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAgICAvLyBGSVhNRTogQ3Jvc3NoYWly
IHNob3VsZCBzdGF5IHdoZXJlIGl0IHdhcyBiZXR3ZWVuIGNoYXJ0cy4KKyAgICAgICAgICAgICQo
cGxvdENvbnRhaW5lcikuYmluZCgicGxvdGhvdmVyIiwgZnVuY3Rpb24gKGV2ZW50LCBwb3MsIGl0
ZW0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJ0cy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnRzW2ldICE9PSBzZWxmKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFydHNbaV0uc2V0Q3Jvc3NoYWlyKHBvcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFydHNbaV0uaGlkZVRvb2x0aXAoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNEYXNo
Ym9hcmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB2YXIg
ZGF0YSA9IG1haW5QbG90LmdldERhdGEoKTsKKyAgICAgICAgICAgICAgICBpdGVtID0gY2xvc2Vz
dEl0ZW1Gb3JQYWdlWFJlc3BlY3RpbmdQbG90T2Zmc2V0KGl0ZW0sIG1haW5QbG90LCBkYXRhW2Rh
dGEubGVuZ3RoIC0gMV0sIHBvcy5wYWdlWCk7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVtKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBzaG93VG9vbHRp
cFdpdGhSZXN1bHRzKHRvb2x0aXAsIGl0ZW0ucGFnZVgsIGl0ZW0ucGFnZVksIHJlc3VsdHMucmVz
dWx0QXQoaXRlbS5kYXRhSW5kZXgpLCByZXN1bHRzLnJlc3VsdEF0KGl0ZW0uZGF0YUluZGV4IC0g
MSkpOworICAgICAgICAgICAgICAgIHRvb2x0aXAuY3VycmVudEl0ZW0gPSBpdGVtOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgibW91c2VsZWF2
ZSIsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAkKHBs
b3RDb250YWluZXIpLm9mZnNldCgpOworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQubGVmdCA8
PSBldmVudC5wYWdlWCAmJiBvZmZzZXQudG9wIDw9IGV2ZW50LnBhZ2VZICYmIGV2ZW50LnBhZ2VY
IDw9IG9mZnNldC5sZWZ0ICsgJChwbG90Q29udGFpbmVyKS5vdXRlcldpZHRoKCkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgZXZlbnQucGFnZVkgPD0gb2Zmc2V0LnRvcCArICQocGxvdENvbnRhaW5l
cikub3V0ZXJIZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydHMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2hhcnRzW2ldLmNsZWFyQ3Jvc3NoYWlyKCk7CisgICAgICAgICAgICAg
ICAgICAgIGNoYXJ0c1tpXS5oaWRlVG9vbHRpcCgpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChpc0Rhc2hib2FyZCkgeyAvLyBGSVhNRTog
VGhpcyBjb2RlIGRvZXNuJ3QgYmVsb25nIGhlcmUuCisgICAgICAgICAgICAgICAgJChwbG90Q29u
dGFpbmVyKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAg
ICAgICBvcGVuQ2hhcnQocmVzdWx0cy5wbGF0Zm9ybSgpLCByZXN1bHRzLm1ldHJpYygpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
JChwbG90Q29udGFpbmVyKS5iaW5kKCJwbG90Y2xpY2siLCBmdW5jdGlvbiAoZXZlbnQsIHBvcywg
aXRlbSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG9vbHRpcC5jdXJyZW50SXRlbSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsaWNrVG9vbHRpcCh0b29sdGlwLmN1cnJlbnRJ
dGVtLmRhdGFJbmRleCwgdG9vbHRpcC5jdXJyZW50SXRlbS5wYWdlWCwgdG9vbHRpcC5jdXJyZW50
SXRlbS5wYWdlWSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICBjaGFydHMucHVzaCh0aGlzKTsKKyAgICB9CisKKyAgICBD
aGFydC5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY2hhcnRzID0gW107CisgICAgfQor
CisgICAgQ2hhcnQuc2V0TWluVGltZSA9IGZ1bmN0aW9uIChuZXdNaW5UaW1lKSB7CisgICAgICAg
IG1pblRpbWUgPSBuZXdNaW5UaW1lOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJ0
cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGNoYXJ0c1tpXS5hdHRhY2goKTsKKyAgICB9CisK
KyAgICBDaGFydC5vbnpvb21jaGFuZ2UgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsgfTsKKworICAg
IENoYXJ0Lnpvb20gPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKKyAgICAgICAgY3VycmVudFpvb20g
PSB7ZnJvbTogZnJvbSwgdG86IHRvfTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFy
dHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBjaGFydHNbaV0uem9vbShmcm9tLCB0byk7Cisg
ICAgICAgIHRoaXMub256b29tY2hhbmdlKGZyb20sIHRvKTsKKyAgICB9CisKKyAgICBDaGFydC5j
bGVhclpvb20gPSBmdW5jdGlvbiAobWluVGltZSkgeworICAgICAgICBjdXJyZW50Wm9vbSA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydHMubGVuZ3RoOyBpKysp
CisgICAgICAgICAgICBjaGFydHNbaV0uY2xlYXJab29tKCk7CisgICAgICAgIHRoaXMub256b29t
Y2hhbmdlKCk7CisgICAgfQorCisgICAgd2luZG93LkNoYXJ0ID0gQ2hhcnQ7Cit9KSgpOworCisv
LyBGSVhNRTogV2UgbmVlZCB0byBkZXZpc2UgYSB3YXkgdG8gZmV0Y2ggcnVucyBpbiBtdWx0aXBs
ZSBjaHVua3Mgc28gdGhhdAorLy8gd2UgZG9uJ3QgaGF2ZSB0byBmZXRjaCB0aGUgZW50aXJlIHRp
bWUgc2VyaWVzIHRvIGp1c3Qgc2hvdyB0aGUgbGFzdCAzIGRheXMuCisvLyBGSVhNRTogV2Ugc2hv
dWxkIGRvIGEgbWFzcy1mZXRjaCB3aGVyZSB3ZSBmZXRjaCBKU09OcyBmb3IgbXVsdGlwbGUgcnVu
cyBhdCBvbmNlLgorZnVuY3Rpb24gZmV0Y2hUZXN0KHJlcG9zaXRvcmllcywgYnVpbGRlcnMsIGZp
bGVuYW1lLCBwbGF0Zm9ybSwgbWV0cmljLCBjYWxsYmFjaykgeworCisgICAgZnVuY3Rpb24gY3Jl
YXRlUnVuQW5kUmVzdWx0cyhyYXdSdW5zKSB7CisgICAgICAgIGlmICghcmF3UnVucykKKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciBydW5zID0gbmV3IFBlcmZUZXN0UnVu
cyhtZXRyaWMsIHBsYXRmb3JtKTsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSByYXdSdW5zLm1hcChm
dW5jdGlvbiAocmF3UnVuKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQ3JlYXRpbmcgUGVyZlRl
c3RSZXN1bHQgYW5kIGtlZXBpbmcgdGhlbSBhbGl2ZSBpbiBtZW1vcnkgYWxsIHRoZSB0aW1lIHNl
ZW1zIGxpa2UgYSB0ZXJyaWJsZSBpZGVhLgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGNyZWF0
ZSBQZXJmVGVzdFJlc3VsdCBvbiBkZW1hbmQuCisgICAgICAgICAgICByZXR1cm4gbmV3IFBlcmZU
ZXN0UmVzdWx0KHJ1bnMsIHJhd1J1biwgbmV3IFRlc3RCdWlsZChyZXBvc2l0b3JpZXMsIGJ1aWxk
ZXJzLCBwbGF0Zm9ybSwgcmF3UnVuKSk7CisgICAgICAgIH0pOworICAgICAgICBzb3J0ZWRSZXN1
bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmJ1aWxkKCkudGlt
ZSgpIC0gYi5idWlsZCgpLnRpbWUoKTsgfSk7CisgICAgICAgIHNvcnRlZFJlc3VsdHMuZm9yRWFj
aChmdW5jdGlvbiAocmVzdWx0KSB7IHJ1bnMuYWRkUmVzdWx0KHJlc3VsdCk7IH0pOworICAgICAg
ICByZXR1cm4gcnVuczsKKyAgICB9CisKKyAgICAkLmdldEpTT04oJ2FwaS9ydW5zLycgKyBmaWxl
bmFtZSwgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgY2FsbGJhY2soY3JlYXRlUnVuQW5kUmVz
dWx0cyhkYXRhLmN1cnJlbnQpLCBjcmVhdGVSdW5BbmRSZXN1bHRzKGRhdGEuYmFzZWxpbmUpLCBj
cmVhdGVSdW5BbmRSZXN1bHRzKGRhdGEudGFyZ2V0KSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9u
IGluaXQoKSB7CisgICAgdmFyIGFsbFBsYXRmb3JtczsKKyAgICB2YXIgdGVzdHMgPSBbXTsKKyAg
ICB2YXIgZnVsbE5hbWVUb01ldHJpYzsKKyAgICB2YXIgZGFzaGJvYXJkUGxhdGZvcm1zOworICAg
IHZhciBydW5zQ2FjaGUgPSB7fTsgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2xlYXIgdGhpcyBjYWNo
ZSBhdCBzb21lIHBvaW50LgorICAgIHZhciByZXBvc2l0b3JpZXM7CisgICAgdmFyIGJ1aWxkZXJz
OworICAgIHZhciBidWdUcmFja2VyczsKKworICAgIC8vIEZJWE1FOiBTaG93IHNvbWUgZXJyb3Ig
bWVzc2FnZSB3aGVuIHdlIGdldCA0MDQuCisgICAgZnVuY3Rpb24gZ2V0T3JGZXRjaFRlc3QocGxh
dGZvcm0sIG1ldHJpYywgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGZpbGVuYW1lID0gZmlsZU5h
bWVGcm9tUGxhdGZvcm1BbmRUZXN0KHBsYXRmb3JtLmlkLCBtZXRyaWMuaWQpOworICAgICAgICB2
YXIgY2FjaGVzID0gcnVuc0NhY2hlW2ZpbGVuYW1lXTsKKworICAgICAgICBpZiAoY2FjaGVzKQor
ICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKGNhY2hlcy5jdXJy
ZW50LCBjYWNoZXMuYmFzZWxpbmUsIGNhY2hlcy50YXJnZXQpOyB9LCAwKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBmZXRjaFRlc3QocmVwb3NpdG9yaWVzLCBidWlsZGVycywgZmlsZW5h
bWUsIHBsYXRmb3JtLCBtZXRyaWMsIGZ1bmN0aW9uIChjdXJyZW50LCBiYXNlbGluZSwgdGFyZ2V0
KSB7CisgICAgICAgICAgICAgICAgcnVuc0NhY2hlW2ZpbGVuYW1lXSA9IHtjdXJyZW50OmN1cnJl
bnQsIGJhc2VsaW5lOmJhc2VsaW5lLCB0YXJnZXQ6dGFyZ2V0fTsKKyAgICAgICAgICAgICAgICBj
YWxsYmFjayhjdXJyZW50LCBiYXNlbGluZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc2hvd0Rhc2hib2FyZCgpIHsKKyAgICAgICAg
dmFyIGRhc2hib2FyZFRhYmxlID0gJCgnPHRhYmxlIGlkPSJkYXNoYm9hcmQiPjwvdGFibGU+Jyk7
CisgICAgICAgICQoJyNtYWluQ29udGVudHMnKS5odG1sKGRhc2hib2FyZFRhYmxlKTsKKworICAg
ICAgICAvLyBTcGxpdCBkYXNoYm9hcmQgcGxhdGZvcm1zIGludG8gZ3JvdXBzIG9mIHRocmVlIHNv
IHRoYXQgaXQgZG9lc24ndCBncm93IGhvcml6b250YWxseSB0b28gbXVjaC4KKyAgICAgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBhZGFwdGl2ZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBN
YXRoLmNlaWwoZGFzaGJvYXJkUGxhdGZvcm1zLmxlbmd0aCAvIDMpOyBpKyspCisgICAgICAgICAg
ICBhZGRQbGF0Zm9ybXNUb0Rhc2hib2FyZChkYXNoYm9hcmRUYWJsZSwgZGFzaGJvYXJkUGxhdGZv
cm1zLnNsaWNlKGkgKiAzLCAoaSArIDEpICogMykpOworCisgICAgICAgIFVSTFN0YXRlLnJlbW92
ZSgnY2hhcnRMaXN0Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkUGxhdGZvcm1zVG9EYXNo
Ym9hcmQoZGFzaGJvYXJkVGFibGUsIHNlbGVjdGVkUGxhdGZvcm1zKSB7CisgICAgICAgIHZhciBo
ZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aGVhZCcpOworICAgICAgICBzZWxlY3Rl
ZFBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uIChwbGF0Zm9ybSkgeworICAgICAgICAgICAgdmFy
IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpOworICAgICAgICAgICAgJChjZWxs
KS50ZXh0KHBsYXRmb3JtLm5hbWUpOworICAgICAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNl
bGwpOworICAgICAgICB9KTsKKyAgICAgICAgZGFzaGJvYXJkVGFibGUuYXBwZW5kKGhlYWRlcik7
CisKKyAgICAgICAgdmFyIHRib2R5ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Ym9keScp
KTsKKyAgICAgICAgZGFzaGJvYXJkVGFibGUuYXBwZW5kKHRib2R5KTsKKyAgICAgICAgdmFyIHJv
dyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgICAgIHRib2R5LmFwcGVuZChy
b3cpOworCisgICAgICAgIHNlbGVjdGVkUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rpb24gKHBsYXRm
b3JtKSB7CisgICAgICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rk
Jyk7CisgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoY2VsbCk7CisKKyAgICAgICAgICAgIHBs
YXRmb3JtLm1ldHJpY3MuZm9yRWFjaChmdW5jdGlvbiAobWV0cmljKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGNoYXJ0ID0gbmV3IENoYXJ0KGNlbGwsIHRydWUsIHBsYXRmb3JtLCBtZXRyaWMsIGJ1
Z1RyYWNrZXJzKTsKKyAgICAgICAgICAgICAgICBnZXRPckZldGNoVGVzdChwbGF0Zm9ybSwgbWV0
cmljLCBmdW5jdGlvbiAocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHJlbHkgb24gdGhlIG9yZGVyIGluIHdoaWNo
IFhIUiBmaW5pc2hlcyB0byBvcmRlciBwbG90cy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRh
c2hib2FyZFRhYmxlLnBhcmVudCgpLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhcnQucG9wdWxhdGUocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFydC5hdHRhY2goKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHNob3dDaGFydHMobGlzdHMpIHsKKyAgICAgICAgdmFyIGNoYXJ0c0NvbnRhaW5l
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKKyAgICAgICAgY2hhcnRzQ29u
dGFpbmVyLmlkID0gJ2NoYXJ0cyc7CisgICAgICAgICQoJyNtYWluQ29udGVudHMnKS5odG1sKGNo
YXJ0c0NvbnRhaW5lcik7CisKKyAgICAgICAgdmFyIHRlc3RQaWNrZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzZWN0aW9uJyk7CisgICAgICAgIHRlc3RQaWNrZXIuaWQgPSAndGVzdFBpY2tl
cic7CisKKyAgICAgICAgZnVuY3Rpb24gYWRkT3B0aW9uKHNlbGVjdCwgbGFiZWwsIHZhbHVlKSB7
CisgICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9u
Jyk7CisgICAgICAgICAgICBvcHRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUobGFiZWwpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICBvcHRp
b24udmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24p
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlc3RMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnc2VsZWN0Jyk7CisgICAgICAgIHRlc3RMaXN0LmlkID0gJ3Rlc3RMaXN0JzsKKyAgICAg
ICAgdGVzdFBpY2tlci5hcHBlbmRDaGlsZCh0ZXN0TGlzdCk7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0ZXN0c1tpXS5w
YXJlbnRUZXN0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRkT3B0
aW9uKHRlc3RMaXN0LCB0ZXN0c1tpXS5mdWxsTmFtZSwgdGVzdHNbaV0uaWQpOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIG1ldHJpY0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxl
Y3QnKTsKKyAgICAgICAgbWV0cmljTGlzdC5pZCA9ICdtZXRyaWNMaXN0JzsKKyAgICAgICAgdGVz
dFBpY2tlci5hcHBlbmRDaGlsZChtZXRyaWNMaXN0KTsKKworICAgICAgICB2YXIgcGxhdGZvcm1M
aXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CisgICAgICAgIHBsYXRmb3Jt
TGlzdC5pZCA9ICdwbGF0Zm9ybUxpc3QnOworICAgICAgICB0ZXN0UGlja2VyLmFwcGVuZENoaWxk
KHBsYXRmb3JtTGlzdCk7CisgICAgICAgIGNvbnN0IE9QVElPTl9WQUxVRV9GT1JfQUxMID0gJy0n
OworICAgICAgICBhZGRPcHRpb24ocGxhdGZvcm1MaXN0LCAnQWxsIHBsYXRmb3JtcycsIE9QVElP
Tl9WQUxVRV9GT1JfQUxMKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQbGF0Zm9y
bXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhZGRPcHRpb24ocGxhdGZvcm1MaXN0LCBhbGxQ
bGF0Zm9ybXNbaV0ubmFtZSk7CisKKyAgICAgICAgdGVzdExpc3Qub25jaGFuZ2UgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICB3aGlsZSAobWV0cmljTGlzdC5maXJzdENoaWxkKQorICAgICAg
ICAgICAgICAgIG1ldHJpY0xpc3QucmVtb3ZlQ2hpbGQobWV0cmljTGlzdC5maXJzdENoaWxkKTsK
KworICAgICAgICAgICAgYWRkT3B0aW9uKG1ldHJpY0xpc3QsICdBbGwgbWV0cmljcycsIE9QVElP
Tl9WQUxVRV9GT1JfQUxMKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodGVzdHNbaV0uaWQgIT0gdGVzdExp
c3QudmFsdWUgJiYgKCF0ZXN0c1tpXS5wYXJlbnRUZXN0IHx8IHRlc3RzW2ldLnBhcmVudFRlc3Qu
aWQgIT0gdGVzdExpc3QudmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRUZXN0ID0gdGVzdHNbaV0uaWQgPT0gdGVzdExpc3Qu
dmFsdWUgPyB0ZXN0c1tpXSA6IHRlc3RzW2ldLnBhcmVudFRlc3Q7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCB0ZXN0c1tpXS5tZXRyaWNzLmxlbmd0aDsgKytqKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBmdWxsTmFtZSA9IHRlc3RzW2ldLm1ldHJpY3Nbal0uZnVsbE5h
bWU7CisgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU5hbWUgPSBmdWxsTmFtZS5yZXBs
YWNlKHNlbGVjdGVkVGVzdC5mdWxsTmFtZSwgJycpLnJlcGxhY2UoL15bOi9dLywgJycpOworICAg
ICAgICAgICAgICAgICAgICBhZGRPcHRpb24obWV0cmljTGlzdCwgcmVsYXRpdmVOYW1lLCBmdWxs
TmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIG1ldHJpY0xpc3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIg
bWV0cmljID0gZnVsbE5hbWVUb01ldHJpY1ttZXRyaWNMaXN0LnZhbHVlXTsKKyAgICAgICAgICAg
IHZhciBzaG91bGRBZGRBbGxNZXRyaWNzID0gbWV0cmljTGlzdC52YWx1ZSA9PT0gT1BUSU9OX1ZB
TFVFX0ZPUl9BTEw7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYXRmb3JtTGlz
dC5vcHRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiA9IHBs
YXRmb3JtTGlzdC5vcHRpb25zW2ldOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUg
PT09IE9QVElPTl9WQUxVRV9GT1JfQUxMKSAvLyBBZGRpbmcgYWxsIG1ldHJpY3MgZm9yIGFsbCBw
bGF0Zm9ybXMgd2lsbCBiZSB0b28gc2xvdy4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmRp
c2FibGVkID0gc2hvdWxkQWRkQWxsTWV0cmljczsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmFtZVRvUGxhdGZvcm1bb3B0aW9uLnZh
bHVlXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtSGFzTWV0cmljID0gcGxhdGZv
cm0ubWV0cmljcy5pbmRleE9mKG1ldHJpYykgPj0gMDsKKyAgICAgICAgICAgICAgICAgICAgb3B0
aW9uLmRpc2FibGVkID0gIXNob3VsZEFkZEFsbE1ldHJpY3MgJiYgIXBsYXRmb3JtSGFzTWV0cmlj
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
ZXN0TGlzdC5vbmNoYW5nZSgpOworICAgICAgICBtZXRyaWNMaXN0Lm9uY2hhbmdlKCk7CisKKyAg
ICAgICAgJCh0ZXN0UGlja2VyKS5hcHBlbmQoJyA8YSBocmVmPSIiPkFkZCBDaGFydDwvYT4nKTsK
KworICAgICAgICBmdW5jdGlvbiByZW1vdmVDaGFydChjaGFydCkgeworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjaGFydExpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2hhcnRMaXN0W2ldWzBdID09IGNoYXJ0LnBsYXRmb3JtKCkubmFtZSAmJiBjaGFydExp
c3RbaV1bMV0gPT0gY2hhcnQubWV0cmljKCkuZnVsbE5hbWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2hhcnRMaXN0LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgVVJMU3RhdGUuc2V0
KCdjaGFydExpc3QnLCBKU09OLnN0cmluZ2lmeShjaGFydExpc3QpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKHBsYXRmb3JtTmFtZSwgbWV0
cmljRnVsbE5hbWUpIHsKKyAgICAgICAgICAgIHZhciBwbGF0Zm9ybSA9IG5hbWVUb1BsYXRmb3Jt
W3BsYXRmb3JtTmFtZV07CisgICAgICAgICAgICB2YXIgbWV0cmljID0gZnVsbE5hbWVUb01ldHJp
Y1ttZXRyaWNGdWxsTmFtZV0KKyAgICAgICAgICAgIHZhciBjaGFydCA9IG5ldyBDaGFydChjaGFy
dHNDb250YWluZXIsIGZhbHNlLCBwbGF0Zm9ybSwgbWV0cmljLCBidWdUcmFja2VycywgcmVtb3Zl
Q2hhcnQpOworCisgICAgICAgICAgICBnZXRPckZldGNoVGVzdChwbGF0Zm9ybSwgbWV0cmljLCBm
dW5jdGlvbiAocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCkgeworICAgICAgICAgICAgICAgIGlm
ICghY2hhcnRzQ29udGFpbmVyLnBhcmVudE5vZGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBjaGFydC5wb3B1bGF0ZShyZXN1bHRzLCBiYXNlbGluZSwgdGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBjaGFydC5hdHRhY2goKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisKKyAgICAgICAgJCh0ZXN0UGlja2VyKS5jaGlsZHJlbignYScpLmJpbmQoJ2Ns
aWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOworCisgICAgICAgICAgICB2YXIgbmV3Q2hhcnRMaXN0ID0gW107CisgICAgICAgICAgICBp
ZiAocGxhdGZvcm1MaXN0LnZhbHVlID09PSBPUFRJT05fVkFMVUVfRk9SX0FMTCkgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUGxhdGZvcm1zLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKGFsbFBsYXRmb3Jt
c1tpXS5uYW1lLCBtZXRyaWNMaXN0LnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2hh
cnRMaXN0LnB1c2goW2FsbFBsYXRmb3Jtc1tpXS5uYW1lLCBtZXRyaWNMaXN0LnZhbHVlXSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRyaWNMaXN0LnZhbHVl
ID09PSBPUFRJT05fVkFMVUVfRk9SX0FMTCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRl
c3RzW2ldLmlkICE9IHRlc3RMaXN0LnZhbHVlICYmICghdGVzdHNbaV0ucGFyZW50VGVzdCB8fCB0
ZXN0c1tpXS5wYXJlbnRUZXN0LmlkICE9IHRlc3RMaXN0LnZhbHVlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IHRlc3RzW2ldLm1ldHJpY3MubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKHBsYXRmb3JtTGlzdC52YWx1ZSwgdGVzdHNbaV0u
bWV0cmljc1tqXS5mdWxsTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGFydExp
c3QucHVzaChbcGxhdGZvcm1MaXN0LnZhbHVlLCB0ZXN0c1tpXS5tZXRyaWNzW2pdLmZ1bGxOYW1l
XSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKHBsYXRm
b3JtTGlzdC52YWx1ZSwgbWV0cmljTGlzdC52YWx1ZSk7CisgICAgICAgICAgICAgICAgbmV3Q2hh
cnRMaXN0LnB1c2goW3BsYXRmb3JtTGlzdC52YWx1ZSwgbWV0cmljTGlzdC52YWx1ZV0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjaGFydExpc3QgPSBjaGFydExpc3QuY29uY2F0KG5l
d0NoYXJ0TGlzdCk7CisgICAgICAgICAgICBVUkxTdGF0ZS5zZXQoJ2NoYXJ0TGlzdCcsIEpTT04u
c3RyaW5naWZ5KGNoYXJ0TGlzdCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0pOworCisgICAgICAgICQoJyNtYWluQ29udGVudHMnKS5hcHBlbmQodGVzdFBpY2tlcik7
CisKKyAgICAgICAgdmFyIGNoYXJ0TGlzdCA9IFtdOworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgY2hhcnRMaXN0ID0gSlNPTi5wYXJzZShVUkxTdGF0ZS5nZXQoJ2NoYXJ0TGlzdCcsICcnKSk7
CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHZlcmlmeSB0aGF0IHBsYXRmb3JtIGFu
ZCB0ZXN0IG5hbWVzIGFyZSB2YWxpZCBoZXJlPworICAgICAgICB9IGNhdGNoIChleGNlcHRpb24p
IHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBhbnkgZXhjZXB0aW9uIHRocm93biBieSBwYXJzZS4K
KyAgICAgICAgfQorCisgICAgICAgIGNoYXJ0TGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7
IGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKGl0ZW1bMF0sIGl0ZW1bMV0pOyB9KTsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBleHBvbmVudGlhbCBzbGlkZXIgZm9yIGNoYXJ0
cyBwYWdlIHdoZXJlIHdlIGV4cGVjdCB0byBoYXZlCisgICAgLy8gdGhlIGZ1bGwgSlNPTiBhcyBv
cHBvc2VkIHRvIHRoZSBkYXNoYm9hcmQgd2hlcmUgd2UgY2FuJ3QgYWZmb3JkIGxvYWRpbmcgcmVh
bGx5IGJpZyBKU09OIGZpbGVzLgorICAgIHZhciBleHBvbmVudGlhbCA9IHRydWU7CisgICAgKGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlucHV0ID0gJCgnI251bWJlck9mRGF5cycpWzBdOwor
ICAgICAgICB2YXIgdXBkYXRpbmcgPSAwOworICAgICAgICBmdW5jdGlvbiB1cGRhdGVTcGFuQW5k
Q2FsbChuZXdOdW1iZXJPZkRheXMpIHsKKyAgICAgICAgICAgICQoJyNudW1iZXJPZkRheXMnKS5u
ZXh0KCkudGV4dChuZXdOdW1iZXJPZkRheXMgKyAnIGRheXMnKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGxpa2VseSBicm9rZW4gZm9yIG5vbi1QU1QuCisgICAgICAgICAgICBDaGFy
dC5zZXRNaW5UaW1lKERhdGUubm93KCkgLSBuZXdOdW1iZXJPZkRheXMgKiAyNCAqIDM2MDAgKiAx
MDAwKTsKKyAgICAgICAgfQorICAgICAgICAkKCcjbnVtYmVyT2ZEYXlzJykuYmluZCgnY2hhbmdl
JywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5ld051bWJlck9mRGF5cyA9IE1hdGgu
cm91bmQoZXhwb25lbnRpYWwgPyBNYXRoLmV4cChpbnB1dC52YWx1ZSkgOiBpbnB1dC52YWx1ZSk7
CisgICAgICAgICAgICBVUkxTdGF0ZS5yZW1vdmUoJ3pvb20nKTsKKyAgICAgICAgICAgIENoYXJ0
LmNsZWFyWm9vbSgpOworICAgICAgICAgICAgVVJMU3RhdGUuc2V0KCdkYXlzJywgbmV3TnVtYmVy
T2ZEYXlzKTsKKyAgICAgICAgICAgIHVwZGF0ZVNwYW5BbmRDYWxsKG5ld051bWJlck9mRGF5cyk7
CisgICAgICAgIH0pOworICAgICAgICBmdW5jdGlvbiBvbmNoYW5nZSgpIHsKKyAgICAgICAgICAg
IHZhciBuZXdOdW1iZXJPZkRheXMgPSBVUkxTdGF0ZS5nZXQoJ2RheXMnLCBNYXRoLnJvdW5kKGV4
cG9uZW50aWFsID8gTWF0aC5leHAoaW5wdXQuZGVmYXVsdFZhbHVlKSA6IGlucHV0LmRlZmF1bHRW
YWx1ZSkpOworICAgICAgICAgICAgJCgnI251bWJlck9mRGF5cycpLnZhbChleHBvbmVudGlhbCA/
IE1hdGgubG9nKG5ld051bWJlck9mRGF5cykgOiBuZXdOdW1iZXJPZkRheXMpOworICAgICAgICAg
ICAgdXBkYXRlU3BhbkFuZENhbGwobmV3TnVtYmVyT2ZEYXlzKTsKKyAgICAgICAgfQorICAgICAg
ICBVUkxTdGF0ZS53YXRjaCgnZGF5cycsIG9uY2hhbmdlKTsKKyAgICAgICAgb25jaGFuZ2UoKTsK
KyAgICB9KSgpOworCisgICAgVVJMU3RhdGUud2F0Y2goJ21vZGUnLCBmdW5jdGlvbiAoKSB7IHNl
dE1vZGUoVVJMU3RhdGUuZ2V0KCdtb2RlJykpOyB9KTsKKyAgICBVUkxTdGF0ZS53YXRjaCgnY2hh
cnRMaXN0JywgZnVuY3Rpb24gKGNoYW5nZWRTdGF0ZXMpIHsKKyAgICAgICAgdmFyIG1vZGVDaGFu
Z2VkID0gY2hhbmdlZFN0YXRlcy5pbmRleE9mKCdtb2RlJykgPj0gMDsKKyAgICAgICAgaWYgKFVS
TFN0YXRlLmdldCgnbW9kZScpID09ICdjaGFydHMnICYmICFtb2RlQ2hhbmdlZCkKKyAgICAgICAg
ICAgIHNldE1vZGUoJ2NoYXJ0cycpOworICAgIH0pOworCisgICAgZnVuY3Rpb24gem9vbUNoYXJ0
c0lmUGFyc2VkQ29ycmVjdGx5KCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgem9vbVZh
bHVlcyA9IEpTT04ucGFyc2UoVVJMU3RhdGUuZ2V0KCd6b29tJywgJ1tdJykpOworICAgICAgICAg
ICAgaWYgKHpvb21WYWx1ZXMubGVuZ3RoICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgQ2hhcnQuem9vbShwYXJzZUZsb2F0KHpvb21WYWx1ZXNbMF0pLCBw
YXJzZUZsb2F0KHpvb21WYWx1ZXNbMV0pKTsKKyAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IEpTT04ucGFy
c2UuCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVVJMU3Rh
dGUud2F0Y2goJ3pvb20nLCBmdW5jdGlvbiAoY2hhbmdlZFN0YXRlcykgeworICAgICAgICB2YXIg
bW9kZUNoYW5nZWQgPSBjaGFuZ2VkU3RhdGVzLmluZGV4T2YoJ21vZGUnKSA+PSAwOworICAgICAg
ICBpZiAoVVJMU3RhdGUuZ2V0KCdtb2RlJykgPT0gJ2NoYXJ0cycgJiYgIW1vZGVDaGFuZ2VkKSB7
CisgICAgICAgICAgICBpZiAoIXpvb21DaGFydHNJZlBhcnNlZENvcnJlY3RseSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBDaGFydC5jbGVhclpvb20oKTsKKyAgICAgICAgfQorICAgIH0pOwor
CisgICAgQ2hhcnQub256b29tY2hhbmdlID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAgICAg
IGlmIChmcm9tICYmIHRvKQorICAgICAgICAgICAgVVJMU3RhdGUuc2V0KCd6b29tJywgSlNPTi5z
dHJpbmdpZnkoW2Zyb20sIHRvXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBVUkxTdGF0
ZS5yZW1vdmUoJ3pvb20nKTsKKyAgICB9CisKKyAgICB3aW5kb3cub3BlbkNoYXJ0ID0gZnVuY3Rp
b24gKHBsYXRmb3JtLCBtZXRyaWMpIHsKKyAgICAgICAgVVJMU3RhdGUuc2V0KCdjaGFydExpc3Qn
LCBKU09OLnN0cmluZ2lmeShbW3BsYXRmb3JtLm5hbWUsIG1ldHJpYy5mdWxsTmFtZV1dKSk7Cisg
ICAgICAgIHNldE1vZGUoJ2NoYXJ0cycpOworICAgIH0KKworICAgIHdpbmRvdy5zZXRNb2RlID0g
ZnVuY3Rpb24gKG5ld01vZGUpIHsKKyAgICAgICAgVVJMU3RhdGUuc2V0KCdtb2RlJywgbmV3TW9k
ZSk7CisKKyAgICAgICAgQ2hhcnQuY2xlYXIoKTsKKyAgICAgICAgaWYgKG5ld01vZGUgPT0gJ2Rh
c2hib2FyZCcpIHsKKyAgICAgICAgICAgIFVSTFN0YXRlLnJlbW92ZSgnem9vbScpOworICAgICAg
ICAgICAgQ2hhcnQuY2xlYXJab29tKCk7CisgICAgICAgICAgICBzaG93RGFzaGJvYXJkKCk7Cisg
ICAgICAgIH0gZWxzZSB7IC8vIEZJWE1FOiBEeW5hbWljYWxseSBvYnRhaW4gdGhlIGxpc3Qgb2Yg
dGVzdHMgdG8gc2hvdy4KKyAgICAgICAgICAgIHNob3dDaGFydHMoKTsKKyAgICAgICAgICAgIHpv
b21DaGFydHNJZlBhcnNlZENvcnJlY3RseSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gZnVsbE5hbWUodGVzdCkgeworICAgICAgICB2YXIgbmFtZXMgPSBbXTsKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbmFtZXMucHVzaCh0ZXN0Lm5hbWUpOworICAgICAgICAgICAgdGVz
dCA9IHRlc3QucGFyZW50VGVzdDsKKyAgICAgICAgfSB3aGlsZSAodGVzdCk7CisgICAgICAgIG5h
bWVzLnJldmVyc2UoKTsKKyAgICAgICAgcmV0dXJuIG5hbWVzLmpvaW4oJy8nKTsKKyAgICB9CisK
KyAgICAvLyBQZXJoYXBzIHdlIHdhbnQgYW4gb3JkZXJlZCBsaXN0IG9mIHBsYXRmb3Jtcy4KKyAg
ICAkLmdldEpTT04oJ2RhdGEvbWFuaWZlc3QuanNvbicsIGZ1bmN0aW9uIChkYXRhKSB7CisgICAg
ICAgIHZhciBtYW5pZmVzdCA9IGRhdGE7CisKKyAgICAgICAgbmFtZVRvVGVzdCA9IHt9OworICAg
ICAgICBmb3IgKHZhciB0ZXN0SWQgaW4gbWFuaWZlc3QudGVzdHMpIHsKKyAgICAgICAgICAgIHZh
ciB0ZXN0ID0gbWFuaWZlc3QudGVzdHNbdGVzdElkXTsKKyAgICAgICAgICAgIHRlc3QucGFyZW50
VGVzdCA9IG1hbmlmZXN0LnRlc3RzW21hbmlmZXN0LnRlc3RzW3Rlc3RJZF0ucGFyZW50SWRdOwor
ICAgICAgICAgICAgdGVzdC5pZCA9IHRlc3RJZDsKKyAgICAgICAgICAgIHRlc3QubWV0cmljcyA9
IFtdOworICAgICAgICAgICAgdGVzdHMucHVzaCh0ZXN0KTsKKyAgICAgICAgfQorICAgICAgICB0
ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZXN0KSB7CisgICAgICAgICAgICB0ZXN0LmZ1bGxOYW1l
ID0gZnVsbE5hbWUodGVzdCk7CisgICAgICAgICAgICBuYW1lVG9UZXN0W3Rlc3QuZnVsbE5hbWVd
ID0gdGVzdDsKKyAgICAgICAgfSk7CisgICAgICAgIHRlc3RzLnNvcnQoZnVuY3Rpb24gKGEsIGIp
IHsKKyAgICAgICAgICAgIGlmIChhLmZ1bGxOYW1lIDwgYi5mdWxsTmFtZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYS5mdWxsTmFtZSA+IGIuZnVsbE5hbWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgZnVsbE5hbWVUb01ldHJpYyA9IHt9OworICAgICAgICBmb3IgKHZh
ciBtZXRyaWNJZCBpbiBtYW5pZmVzdC5tZXRyaWNzKSB7CisgICAgICAgICAgICB2YXIgZW50cnkg
PSBtYW5pZmVzdC5tZXRyaWNzW21ldHJpY0lkXTsKKyAgICAgICAgICAgIGVudHJ5LmlkID0gbWV0
cmljSWQ7CisgICAgICAgICAgICBlbnRyeS50ZXN0ID0gbWFuaWZlc3QudGVzdHNbZW50cnkudGVz
dF07CisgICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSA9IGVudHJ5LnRlc3QuZnVsbE5hbWUgKyAn
OicgKyBlbnRyeS5uYW1lOworICAgICAgICAgICAgaWYgKGVudHJ5LmFnZ3JlZ2F0b3IpCisgICAg
ICAgICAgICAgICAgZW50cnkuZnVsbE5hbWUgKz0gJzonICsgZW50cnkuYWdncmVnYXRvcjsKKyAg
ICAgICAgICAgIGVudHJ5LnRlc3QubWV0cmljcy5wdXNoKGVudHJ5KTsKKyAgICAgICAgICAgIGZ1
bGxOYW1lVG9NZXRyaWNbZW50cnkuZnVsbE5hbWVdID0gZW50cnk7CisgICAgICAgIH0KKworICAg
ICAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZXN0KSB7CisgICAgICAgICAgICB0ZXN0Lm1l
dHJpY3Muc29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgICAgIGlmIChhLm5hbWUg
PCBiLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAg
ICBpZiAoYS5uYW1lID4gYi5uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKwor
ICAgICAgICBhbGxQbGF0Zm9ybXMgPSBbXTsKKyAgICAgICAgbmFtZVRvUGxhdGZvcm0gPSB7fTsK
KyAgICAgICAgZm9yICh2YXIgcGxhdGZvcm1JZCBpbiBtYW5pZmVzdC5hbGwpIHsKKyAgICAgICAg
ICAgIHZhciBwbGF0Zm9ybSA9IG1hbmlmZXN0LmFsbFtwbGF0Zm9ybUlkXTsKKyAgICAgICAgICAg
IHBsYXRmb3JtLmlkID0gcGxhdGZvcm1JZDsKKyAgICAgICAgICAgIGFsbFBsYXRmb3Jtcy5wdXNo
KHBsYXRmb3JtKTsKKyAgICAgICAgICAgIG5hbWVUb1BsYXRmb3JtW3BsYXRmb3JtLm5hbWVdID0g
cGxhdGZvcm07CisgICAgICAgICAgICAvLyBGSVhNRTogU29ydCB0ZXN0cworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwbGF0Zm9ybS5tZXRyaWNzLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgICAgIHBsYXRmb3JtLm1ldHJpY3NbaV0gPSBtYW5pZmVzdC5tZXRyaWNzW3BsYXRmb3Jt
Lm1ldHJpY3NbaV1dOworICAgICAgICB9CisgICAgICAgIGFsbFBsYXRmb3Jtcy5zb3J0KGZ1bmN0
aW9uIChhLCBiKSB7IHJldHVybiBhLm5hbWUgPCBiLm5hbWUgPyAtMSA6IChhLm5hbWUgPiBiLm5h
bWUgPyAxIDogMCk7IH0pOworCisgICAgICAgIGRhc2hib2FyZFBsYXRmb3JtcyA9IFtdOworICAg
ICAgICBmb3IgKHZhciBwbGF0Zm9ybUlkIGluIG1hbmlmZXN0LmRhc2hib2FyZCkgeworICAgICAg
ICAgICAgdmFyIHBsYXRmb3JtID0gbWFuaWZlc3QuZGFzaGJvYXJkW3BsYXRmb3JtSWRdOworICAg
ICAgICAgICAgcGxhdGZvcm0uaWQgPSBwbGF0Zm9ybUlkOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwbGF0Zm9ybS5tZXRyaWNzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAg
IHBsYXRmb3JtLm1ldHJpY3NbaV0gPSBtYW5pZmVzdC5tZXRyaWNzW3BsYXRmb3JtLm1ldHJpY3Nb
aV1dOworICAgICAgICAgICAgcGxhdGZvcm0ubWV0cmljcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7
IHJldHVybiBhLmZ1bGxOYW1lIDwgYi5mdWxsTmFtZSA/IC0xIDogKGEuZnVsbE5hbWUgPiBiLmZ1
bGxOYW1lID8gMSA6IDApOyB9KTsKKyAgICAgICAgICAgIGRhc2hib2FyZFBsYXRmb3Jtcy5wdXNo
KG1hbmlmZXN0LmRhc2hib2FyZFtwbGF0Zm9ybUlkXSk7CisgICAgICAgIH0KKyAgICAgICAgZGFz
aGJvYXJkUGxhdGZvcm1zLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEubmFtZSA8IGIu
bmFtZSA/IC0xIDogKGEubmFtZSA+IGIubmFtZSA/IDEgOiAwKTsgfSk7CisKKyAgICAgICAgcmVw
b3NpdG9yaWVzID0gbWFuaWZlc3QucmVwb3NpdG9yaWVzOworICAgICAgICBidWlsZGVycyA9IG1h
bmlmZXN0LmJ1aWxkZXJzOworICAgICAgICBidWdUcmFja2VycyA9IG1hbmlmZXN0LmJ1Z1RyYWNr
ZXJzOworCisgICAgICAgIHNldE1vZGUoVVJMU3RhdGUuZ2V0KCdtb2RlJywgJ2Rhc2hib2FyZCcp
KTsKKyAgICB9KTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2Fk
ZWQnLCBpbml0LCBmYWxzZSk7CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxoZWFk
ZXIgaWQ9InRpdGxlIj4KKzxoMT48YSBocmVmPSIvIj5XZWJLaXQgUGVyZiBNb25pdG9yPC9hPjwv
aDE+Cis8dWw+CisgICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9kZSgnZGFzaGJvYXJk
Jyk7Ij5EYXNoYm9hcmQ8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpzZXRN
b2RlKCdjaGFydHMnKTsiPkNoYXJ0czwvYT48L2xpPgorPC91bD4KKzwvaGVhZGVyPgorCis8ZGl2
IGlkPSJudW1iZXJPZkRheXNQaWNrZXIiPjxpbnB1dCBpZD0ibnVtYmVyT2ZEYXlzIiB0eXBlPSJy
YW5nZSIgbWluPSIxIiBtYXg9IjUuOSIgc3RlcD0iMC4wMDEiIHZhbHVlPSIyLjMiPjxzcGFuIGNs
YXNzPSJvdXRwdXQiPjwvc3Bhbj48L2Rpdj4KKworPGRpdiBpZD0ibWFpbkNvbnRlbnRzIj48L2Rp
dj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvYWRtaW4vUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvYWRtaW4vUkVBRE1FCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy9hZG1pbi9SRUFETUUJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorVGhp
cyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHBhc3N3b3JkLXByb3RlY3RlZCB1bmxlc3MgeW91IHdhbnQg
YW55b25lIHRvIGJlIGFibGUgdG8gbWVzcyB3aXRoIHRoZSBkYXRhYmFzZS4KSW5kZXg6IFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vYWRtaW4uY3NzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vYWRtaW4uY3NzCShyZXZpc2lv
biAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9hZG1pbi5jc3MJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAordGFibGUgeworICAgIGZvbnQtc2l6ZTog
c21hbGw7Cit9CisKK3RhYmxlLCB0ZCB7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsK
KyAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworfQorCit0ZCB7CisgICAgcGFkZGluZzogNXB4
OworfQorCit0ZCBwcmUgeworICAgIG1heC1oZWlnaHQ6IDMwZW07CisgICAgb3ZlcmZsb3c6IHNj
cm9sbDsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKwordGJvZHkub2RkIHsK
KyAgICBiYWNrZ3JvdW5kOiAjZjZmNmY2OworfQorCisuYWN0aW9uLWZpZWxkLCAubm90aWNlIHsK
KyAgICBtaW4td2lkdGg6IDUwZXg7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIG1h
cmdpbjogMWVtIDBweDsKKyAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKKyAgICBib3JkZXI6IHNvbGlk
IDFweCAjY2NjOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBwYWRkaW5nOiA1cHg7Cit9
CisKKy5hY3Rpb24tZmllbGQgaDIgeworICAgIGZvbnQtc2l6ZTogMWVtOworICAgIGZvbnQtd2Vp
Z2h0OiBub3JtYWw7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAxZW0gMDsKK30K
KworZm9ybSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCitsYWJlbCB7CisgICAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOworfQorCitwcmUgeworICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsK
KyAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CisgICAgd29yZC1icmVhazogYnJlYWstYWxsOwor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvYWRtaW4vYWdncmVnYXRvcnMucGhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vYWdncmVnYXRvcnMucGhwCShyZXZpc2lvbiAw
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9hZ2dyZWdhdG9ycy5w
aHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorPD9waHAKKworaW5jbHVkZSgnLi4v
aW5jbHVkZS9hZG1pbi1oZWFkZXIucGhwJyk7CisKK2lmICgkZGIpIHsKKworICAgIGlmICgkYWN0
aW9uID09ICdhZGQnKSB7CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCduYW1lJywgJF9Q
T1NUKSAmJiBhcnJheV9rZXlfZXhpc3RzKCdkZWZpbml0aW9uJywgJF9QT1NUKSkgeworICAgICAg
ICAgICAgaWYgKCRkYi0+aW5zZXJ0X3JvdygnYWdncmVnYXRvcnMnLCAnYWdncmVnYXRvcicsIGFy
cmF5KCduYW1lJyA9PiAkX1BPU1RbJ25hbWUnXSwgJ2RlZmluaXRpb24nID0+ICRfUE9TVFsnZGVm
aW5pdGlvbiddKSkpCisgICAgICAgICAgICAgICAgbm90aWNlKCdJbnNlcnRlZCB0aGUgbmV3IGFn
Z3JlZ2F0b3InKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub3RpY2UoJ0Nv
dWxkIG5vdCBhZGQgdGhlIGFnZ3JlZ2F0b3InKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBub3RpY2UoJ0ludmFsaWQgcGFyYW1ldGVycy4nKTsKKyAgICB9IGVsc2UgaWYgKCRhY3Rpb24g
PT0gJ3VwZGF0ZScpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVfZmllbGQoJ2FnZ3JlZ2F0b3JzJywg
J2FnZ3JlZ2F0b3InLCAnbmFtZScpICYmICF1cGRhdGVfZmllbGQoJ2FnZ3JlZ2F0b3JzJywgJ2Fn
Z3JlZ2F0b3InLCAnZGVmaW5pdGlvbicpKQorICAgICAgICAgICAgbm90aWNlKCdJbnZhbGlkIHBh
cmFtZXRlcnMuJyk7CisgICAgfQorCisgICAgJHBhZ2UgPSBuZXcgQWRtaW5pc3RyYXRpdmVQYWdl
KCRkYiwgJ2FnZ3JlZ2F0b3JzJywgJ2FnZ3JlZ2F0b3InLCBhcnJheSgKKyAgICAgICAgJ25hbWUn
ID0+IGFycmF5KCdlZGl0aW5nX21vZGUnID0+ICdzdHJpbmcnKSwKKyAgICAgICAgJ2RlZmluaXRp
b24nID0+IGFycmF5KCdlZGl0aW5nX21vZGUnID0+ICd0ZXh0JyksCisgICAgKSk7CisKKyAgICAk
cGFnZS0+cmVuZGVyX3RhYmxlKCduYW1lJyk7CisgICAgJHBhZ2UtPnJlbmRlcl9mb3JtX3RvX2Fk
ZCgpOworCit9CisKK2luY2x1ZGUoJy4uL2luY2x1ZGUvYWRtaW4tZm9vdGVyLnBocCcpOworCis/
PgpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9idWctdHJhY2tl
cnMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRt
aW4vYnVnLXRyYWNrZXJzLnBocAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvYWRtaW4vYnVnLXRyYWNrZXJzLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc3IEBACis8P3BocAorCitpbmNsdWRlKCcuLi9pbmNsdWRlL2FkbWluLWhlYWRlci5waHAn
KTsKKworaWYgKCRkYikgeworICAgIGlmICgkYWN0aW9uID09ICdhZGQnKSB7CisgICAgICAgIGlm
ICgkZGItPmluc2VydF9yb3coJ2J1Z190cmFja2VycycsICd0cmFja2VyJywgYXJyYXkoCisgICAg
ICAgICAgICAnbmFtZScgPT4gJF9QT1NUWyduYW1lJ10sICduZXdfYnVnX3VybCcgPT4gJF9QT1NU
WyduZXdfYnVnX3VybCddKSkpIHsKKyAgICAgICAgICAgIG5vdGljZSgnSW5zZXJ0ZWQgdGhlIG5l
dyBidWcgdHJhY2tlci4nKTsKKyAgICAgICAgICAgIHJlZ2VuZXJhdGVfbWFuaWZlc3QoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBub3RpY2UoJ0NvdWxkIG5vdCBhZGQgdGhlIGJ1ZyB0
cmFja2VyLicpOworICAgIH0gZWxzZSBpZiAoJGFjdGlvbiA9PSAndXBkYXRlJykgeworICAgICAg
ICBpZiAodXBkYXRlX2ZpZWxkKCdidWdfdHJhY2tlcnMnLCAndHJhY2tlcicsICduYW1lJykgfHwg
dXBkYXRlX2ZpZWxkKCdidWdfdHJhY2tlcnMnLCAndHJhY2tlcicsICduZXdfYnVnX3VybCcpKQor
ICAgICAgICAgICAgcmVnZW5lcmF0ZV9tYW5pZmVzdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBub3RpY2UoJ0ludmFsaWQgcGFyYW1ldGVycy4nKTsKKyAgICB9IGVsc2UgaWYgKCRhY3Rp
b24gPT0gJ2Fzc29jaWF0ZScpIHsKKyAgICAgICAgJHRyYWNrZXJfaWQgPSBpbnR2YWwoJF9QT1NU
WydpZCddKTsKKyAgICAgICAgJGRiLT5xdWVyeV9hbmRfZ2V0X2FmZmVjdGVkX3Jvd3MoIkRFTEVU
RSBGUk9NIHRyYWNrZXJfcmVwb3NpdG9yaWVzIFdIRVJFIHRyYWNyZXBvX3RyYWNrZXIgPSAkMSIs
IGFycmF5KCR0cmFja2VyX2lkKSk7CisKKyAgICAgICAgJHN1Y2VlZGVkID0gVFJVRTsKKyAgICAg
ICAgJHRyYWNrZXJfcmVwb3NpdG9yaWVzID0gYXJyYXlfZ2V0KCRfUE9TVCwgJ3RyYWNrZXJfcmVw
b3NpdG9yaWVzJyk7CisgICAgICAgIGlmICgkdHJhY2tlcl9yZXBvc2l0b3JpZXMpIHsKKyAgICAg
ICAgICAgIGZvcmVhY2ggKCR0cmFja2VyX3JlcG9zaXRvcmllcyBhcyAkcmVwb3NpdG9yeV9pZCkg
eworICAgICAgICAgICAgICAgIGlmICghJGRiLT5pbnNlcnRfcm93KCd0cmFja2VyX3JlcG9zaXRv
cmllcycsICd0cmFjcmVwbycsCisgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0cmFja2VyJyA9
PiAkdHJhY2tlcl9pZCwgJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkKSwgTlVMTCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgJHN1Y2VlZGVkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAg
ICAgbm90aWNlKCJGYWlsZWQgdG8gYXNzb2NpYXRlIHJlcG9zaXRvcnkgJHJlcG9zaXRvcnlfaWQg
d2l0aCB0cmFja2VyICR0cmFja2VyX2lkLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoJHN1Y2VlZGVkKSB7CisgICAgICAgICAgICBu
b3RpY2UoJ1VwZGF0ZWQgdGhlIGFzc29jaWF0aW9uLicpOworICAgICAgICAgICAgcmVnZW5lcmF0
ZV9tYW5pZmVzdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gYXNzb2NpYXRl
ZF9yZXBvc2l0b3JpZXMoJHJvdykgeworICAgICAgICBnbG9iYWwgJGRiOworCisgICAgICAgICR0
cmFja2VyX3JlcG9zaXRvcmllcyA9ICRkYi0+cXVlcnlfYW5kX2ZldGNoX2FsbCgnU0VMRUNUICog
RlJPTSByZXBvc2l0b3JpZXMgTEVGVCBPVVRFUiBKT0lOIHRyYWNrZXJfcmVwb3NpdG9yaWVzCisg
ICAgICAgICAgICBPTiB0cmFjcmVwb19yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeV9pZCBBTkQgKHRy
YWNyZXBvX3RyYWNrZXIgPSAkMSBPUiB0cmFjcmVwb190cmFja2VyIElTIE5VTEwpCisgICAgICAg
ICAgICBPUkRFUiBCWSByZXBvc2l0b3J5X25hbWUnLCBhcnJheSgkcm93Wyd0cmFja2VyX2lkJ10p
KTsKKworICAgICAgICAkY29udGVudCA9IDw8PCBFTkQKKzxmb3JtIG1ldGhvZD0iUE9TVCI+PGlu
cHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaWQiIHZhbHVlPSJ7JHJvd1sndHJhY2tlcl9pZCddfSI+
CitFTkQ7CisKKyAgICAgICAgZm9yZWFjaCAoJHRyYWNrZXJfcmVwb3NpdG9yaWVzIGFzICRyZXBv
c2l0b3J5KSB7CisgICAgICAgICAgICAkaWQgPSBpbnR2YWwoJHJlcG9zaXRvcnlbJ3JlcG9zaXRv
cnlfaWQnXSk7CisgICAgICAgICAgICAkbmFtZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHJlcG9zaXRv
cnlbJ3JlcG9zaXRvcnlfbmFtZSddKTsKKworICAgICAgICAgICAgJGNoZWNrZWQgPSAkcmVwb3Np
dG9yeVsndHJhY3JlcG9fdHJhY2tlciddID8gJyBjaGVja2VkJyA6ICcnOworICAgICAgICAgICAg
JGNvbnRlbnQgLj0gIjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInRyYWNr
ZXJfcmVwb3NpdG9yaWVzW11cIiB2YWx1ZT1cInskaWR9XCIkY2hlY2tlZD4kbmFtZTwvbGFiZWw+
IjsKKyAgICAgICAgfQorCisgICAgICAgICRjb250ZW50IC49IDw8PCBFTkQKKzxidXR0b24gdHlw
ZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJhc3NvY2lhdGUiPlNhdmU8L2J1dHRvbj48
L2Zvcm0+CitFTkQ7CisgICAgICAgIHJldHVybiBhcnJheSgkY29udGVudCk7CisgICAgfQorCisg
ICAgJHBhZ2UgPSBuZXcgQWRtaW5pc3RyYXRpdmVQYWdlKCRkYiwgJ2J1Z190cmFja2VycycsICd0
cmFja2VyJywgYXJyYXkoCisgICAgICAgICduYW1lJyA9PiBhcnJheSgnZWRpdGluZ19tb2RlJyA9
PiAnc3RyaW5nJyksCisgICAgICAgICduZXdfYnVnX3VybCcgPT4gYXJyYXkoJ2VkaXRpbmdfbW9k
ZScgPT4gJ3RleHQnLCAnbGFiZWwnID0+ICdOZXcgQnVnIFVSTCAoJHRpdGxlLCAkZGVzY3JpcHRp
b24pJyksCisgICAgICAgICdBc3NvY2lhdGVkIHJlcG9zaXRvcmllcycgPT4gYXJyYXkoJ2N1c3Rv
bScgPT4gZnVuY3Rpb24gKCRyb3cpIHsgcmV0dXJuIGFzc29jaWF0ZWRfcmVwb3NpdG9yaWVzKCRy
b3cpOyB9KSwKKyAgICApKTsKKworICAgICRwYWdlLT5yZW5kZXJfdGFibGUoJ25hbWUnKTsKKyAg
ICAkcGFnZS0+cmVuZGVyX2Zvcm1fdG9fYWRkKCdOZXcgQnVnIFRyYWNrZXInKTsKKworfQorCitp
bmNsdWRlKCcuLi9pbmNsdWRlL2FkbWluLWZvb3Rlci5waHAnKTsKKworPz4KSW5kZXg6IFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vYnVpbGRlcnMucGhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vYnVpbGRlcnMucGhwCShy
ZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9idWls
ZGVycy5waHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorPD9waHAKKworcmVxdWly
ZSgnLi4vaW5jbHVkZS9hZG1pbi1oZWFkZXIucGhwJyk7CisKK2lmICgkZGIpIHsKKworICAgIGlm
ICgkYWN0aW9uID09ICdhZGQnKSB7CisgICAgICAgIGlmICgkZGItPmluc2VydF9yb3coJ2J1aWxk
ZXJzJywgJ2J1aWxkZXInLCBhcnJheSgKKyAgICAgICAgICAgICduYW1lJyA9PiAkX1BPU1RbJ25h
bWUnXSwgJ3Bhc3N3b3JkX2hhc2gnID0+IGhhc2goJ3NoYTI1NicsICRfUE9TVFsncGFzc3dvcmQn
XSksICdidWlsZF91cmwnID0+IGFycmF5X2dldCgkX1BPU1QsICdidWlsZF91cmwnKSkpKSB7Cisg
ICAgICAgICAgICBub3RpY2UoJ0luc2VydGVkIHRoZSBuZXcgYnVpbGRlci4nKTsKKyAgICAgICAg
ICAgIHJlZ2VuZXJhdGVfbWFuaWZlc3QoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBu
b3RpY2UoJ0NvdWxkIG5vdCBhZGQgdGhlIGJ1aWxkZXIuJyk7CisgICAgfSBlbHNlIGlmICgkYWN0
aW9uID09ICd1cGRhdGUnKSB7CisgICAgICAgIGlmICh1cGRhdGVfZmllbGQoJ2J1aWxkZXJzJywg
J2J1aWxkZXInLCAnbmFtZScpIHx8IHVwZGF0ZV9maWVsZCgnYnVpbGRlcnMnLCAnYnVpbGRlcics
ICdidWlsZF91cmwnKSkKKyAgICAgICAgICAgIHJlZ2VuZXJhdGVfbWFuaWZlc3QoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbm90aWNlKCdJbnZhbGlkIHBhcmFtZXRlcnMuJyk7CisgICAg
fQorCisgICAgJHBhZ2UgPSBuZXcgQWRtaW5pc3RyYXRpdmVQYWdlKCRkYiwgJ2J1aWxkZXJzJywg
J2J1aWxkZXInLCBhcnJheSgKKyAgICAgICAgJ25hbWUnID0+IGFycmF5KCdzaXplJyA9PiA1MCwg
J2VkaXRpbmdfbW9kZScgPT4gJ3N0cmluZycpLAorICAgICAgICAncGFzc3dvcmRfaGFzaCcgPT4g
YXJyYXkoKSwKKyAgICAgICAgJ3Bhc3N3b3JkJyA9PiBhcnJheSgncHJlX2luc2VydGlvbicgPT4g
VFJVRSwgJ2VkaXRpbmdfbW9kZScgPT4gJ3N0cmluZycpLAorICAgICAgICAnYnVpbGRfdXJsJyA9
PiBhcnJheSgnbGFiZWwnID0+ICdCdWlsZCBVUkwnLCAnc2l6ZScgPT4gMTAwLCAnZWRpdGluZ19t
b2RlJyA9PiAndXJsJyksCisgICAgKSk7CisKKyAgICAkcGFnZS0+cmVuZGVyX3RhYmxlKCduYW1l
Jyk7CisgICAgJHBhZ2UtPnJlbmRlcl9mb3JtX3RvX2FkZCgpOworfQorCityZXF1aXJlKCcuLi9p
bmNsdWRlL2FkbWluLWZvb3Rlci5waHAnKTsKKworPz4KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvYWRtaW4vaW5kZXgucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vaW5kZXgucGhwCShyZXZpc2lvbiAwKQorKysgV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9pbmRleC5waHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5IEBACis8P3BocAorCityZXF1aXJlKCcuLi9pbmNsdWRlL2FkbWluLWhl
YWRlci5waHAnKTsKKworPz48cD48cT5XZSBvdWdodCBuZXZlciB0byBhbGxvdyBvdXJzZWx2ZXMg
dG8gYmUgcGVyc3VhZGVkIG9mIHRoZSB0cnV0aCBvZiBhbnl0aGluZyB1bmxlc3Mgb24gdGhlIGV2
aWRlbmNlIG9mIG91ciByZWFzb24uPC9xPiAtIFJlbiYjeGU5OyBEZXNjYXJ0ZXM8L3A+PD9waHAK
KworcmVxdWlyZSgnLi4vaW5jbHVkZS9hZG1pbi1mb290ZXIucGhwJyk7CisKKz8+CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FkbWluL2pvYnMucGhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vam9icy5waHAJKHJldmlz
aW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FkbWluL2pvYnMucGhw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKzw/cGhwCisKK3JlcXVpcmUoJy4uL2lu
Y2x1ZGUvYWRtaW4taGVhZGVyLnBocCcpOworCitpZiAoJGFjdGlvbiA9PSAnZGVsZXRlJykgewor
ICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdpZCcsICRfUE9TVCkpIHsKKyAgICAgICAgJGpvYl9p
ZCA9IGludHZhbCgkX1BPU1RbJ2lkJ10pOworICAgICAgICBleGVjdXRlX3F1ZXJ5X2FuZF9leHBl
Y3Rfb25lX3Jvd190b19iZV9hZmZlY3RlZCgnREVMRVRFIEZST00gam9icyBXSEVSRSBqb2JfaWQg
PSAkMScsIGFycmF5KCRqb2JfaWQpLAorICAgICAgICAgICAgIkRlbGV0ZWQgam9iICRqb2JfaWQi
LCAiQ291bGQgbm90IGRlbGV0ZSBqb2IgJGpvYl9pZCIpOworICAgIH0gZWxzZQorICAgICAgICBu
b3RpY2UoJ0ludmFsaWQgSUQuJyk7Cit9IGVsc2UgaWYgKCRhY3Rpb24gPT0gJ21hbmlmZXN0Jykg
eworICAgIGV4ZWN1dGVfcXVlcnlfYW5kX2V4cGVjdF9vbmVfcm93X3RvX2JlX2FmZmVjdGVkKCdJ
TlNFUlQgSU5UTyBqb2JzIChqb2JfdHlwZSkgVkFMVUVTIChcJ21hbmlmZXN0XCcpJywgYXJyYXko
KSwKKyAgICAgICAgJ1JlcXVlc3RlZCB0byByZWdlbmVyYXRlIHRoZSBtYW5pZmVzdC4nLCAnQ291
bGQgbm90IGFkZCBhIGpvYicpOworfQorCitpZiAoJGRiKSB7CisKKz8+Cis8dGFibGU+Cis8dGhl
YWQ+CisgICAgPHRyPjx0ZD5JRDwvdGQ+PHRkPlR5cGU8L3RkPjx0ZD5DcmVhdGVkIEF0PC90ZD48
dGQ+U3RhcnRlZCBBdDwvdGQ+PHRkPlBJRDwvdGQ+PHRkPkF0dGVtcHRzPC90ZD48dGQ+UGF5bG9h
ZDwvdGQ+PHRkPkxvZzwvdGQ+PHRkPkFjdGlvbnM8L3RkPgorPC90aGVhZD4KKzx0Ym9keT4KKzw/
cGhwCisKKyAgICBmdW5jdGlvbiBnZXRfdmFsdWVfd2l0aF9kZWZhdWx0KCRhcnJheSwgJGtleSwg
JGRlZmF1bHQpIHsKKyAgICAgICAgJHZhbHVlID0gJGFycmF5WyRrZXldOworICAgICAgICBpZiAo
ISR2YWx1ZSkKKyAgICAgICAgICAgICR2YWx1ZSA9ICRkZWZhdWx0OworICAgICAgICByZXR1cm4g
JHZhbHVlOworICAgIH0KKworICAgICMgRklYTUU6IEFkZCBhIG5hdmlnYXRpb24gYmFyIGZvciB3
aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gNTAgam9icy4KKyAgICAkdW5jb21wbGV0ZWRfam9icyA9
ICRkYi0+cXVlcnlfYW5kX2ZldGNoX2FsbCgnU0VMRUNUICogRlJPTSBqb2JzIFdIRVJFIGpvYl9j
b21wbGV0ZWRfYXQgSVMgTlVMTCBMSU1JVCA1MCcpOworICAgIGlmICgkdW5jb21wbGV0ZWRfam9i
cykgeworICAgICAgICBmb3JlYWNoICgkdW5jb21wbGV0ZWRfam9icyBhcyAkam9iKSB7CisgICAg
ICAgICAgICAkaWQgPSAkam9iWydqb2JfaWQnXTsKKyAgICAgICAgICAgICRzdGFydGVkX2F0ID0g
Z2V0X3ZhbHVlX3dpdGhfZGVmYXVsdCgkam9iLCAnam9iX3N0YXJ0ZWRfYXQnLCAnJyk7CisgICAg
ICAgICAgICAkcGlkID0gZ2V0X3ZhbHVlX3dpdGhfZGVmYXVsdCgkam9iLCAnam9iX3N0YXJ0ZWRf
YnlfcGlkJywgJycpOworICAgICAgICAgICAgZWNobyA8PDwgRU9GCisgICAgPHRyPgorICAgICAg
ICA8dGQ+JGlkPC90ZD4KKyAgICAgICAgPHRkPnskam9iWydqb2JfdHlwZSddfTwvdGQ+CisgICAg
ICAgIDx0ZD57JGpvYlsnam9iX2NyZWF0ZWRfYXQnXX08L3RkPgorICAgICAgICA8dGQ+JHN0YXJ0
ZWRfYXQ8L3RkPjx0ZD4kcGlkPC90ZD4KKyAgICAgICAgPHRkPnskam9iWydqb2JfYXR0ZW1wdHMn
XX08L3RkPgorICAgICAgICA8dGQ+PHByZSBjbGFzcz0icGF5bG9hZCI+eyRqb2JbJ2pvYl9wYXls
b2FkJ119PC9wcmU+PC90ZD4KKyAgICAgICAgPHRkPjxwcmU+eyRqb2JbJ2pvYl9sb2cnXX08L3By
ZT48L3RkPgorICAgICAgICA8dGQ+PGZvcm0gbWV0aG9kPSdQT1NUJz48YnV0dG9uIHR5cGU9J3N1
Ym1pdCcgbmFtZT0nYWN0aW9uJyB2YWx1ZT0nZGVsZXRlJz5EZWxldGU8L2J1dHRvbj48aW5wdXQg
dHlwZT0naGlkZGVuJyBuYW1lPSdpZCcgdmFsdWU9JyRpZCc+PC9mb3JtPjwvdGQ+CisgICAgPC90
cj4KK0VPRjsKKyAgICAgICAgfQorICAgIH0KKworPz48L3Rib2R5PgorPC90YWJsZT4KKworPHNj
cmlwdD4KKwordmFyIHBheWxvYWRQcmVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBh
eWxvYWQnKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZFByZXMubGVuZ3RoOyArK2kpIHsK
KyAgICB2YXIgcHJlID0gcGF5bG9hZFByZXNbaV07CisgICAgdHJ5IHsKKyAgICAgICAgcHJlLnRl
eHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoSlNPTi5wYXJzZShwcmUudGV4dENvbnRlbnQpLCBu
dWxsLCAnICAnKTsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsgfSAvLyBJZ25vcmUgZXhjZXB0
aW9ucy4KK30KKworPC9zY3JpcHQ+CisKKzxzZWN0aW9uIGNsYXNzPSJhY3Rpb24tZmllbGQiPgor
PGgyPk5ldyBqb2I8L2gyPgorPGZvcm0gbWV0aG9kPSdQT1NUJz48YnV0dG9uIHR5cGU9J3N1Ym1p
dCcgbmFtZT0nYWN0aW9uJyB2YWx1ZT0nbWFuaWZlc3QnPlJlLWdlbmVyYXRlIG1hbmlmZXN0PC9i
dXR0b24+PC9mb3JtPgorPC9zZWN0aW9uPgorCis8P3BocAorCit9CisKK2luY2x1ZGUoJy4uL2lu
Y2x1ZGUvYWRtaW4tZm9vdGVyLnBocCcpOworCis/PgpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9hZG1pbi9wbGF0Zm9ybXMucGhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vcGxhdGZvcm1zLnBocAkocmV2aXNpb24gMCkK
KysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vcGxhdGZvcm1zLnBocAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACis8P3BocAorCitpbmNsdWRlKCcuLi9pbmNs
dWRlL2FkbWluLWhlYWRlci5waHAnKTsKKworZnVuY3Rpb24gbWVyZ2VfcGxhdGZvcm1zKCRwbGF0
Zm9ybV90b19tZXJnZSwgJGRlc3RpbmF0aW9uX3BsYXRmb3JtKSB7CisgICAgZ2xvYmFsICRkYjsK
KworICAgICRkYi0+YmVnaW5fdHJhbnNhY3Rpb24oKTsKKworICAgIC8vIEZpcnN0LCBtb3ZlIGFs
bCB0ZXN0IHJ1bnMgdG8gdGhlIHRlc3QgY29uZmlndXJhdGlvbnMgaW4gdGhlIGRlc3RpbmF0aW9u
IGZvciBhbGwgdGVzdCBjb25maWd1cmF0aW9ucyB0aGF0CisgICAgLy8gZXhpc3QgaW4gYm90aCB0
aGUgb3JpZ2luYWwgcGxhdGZvcm0gYW5kIHRoZSBwbGF0Zm9ybSBpbnRvIHdoaWNoIHdlJ3JlIG1l
cmdpbmcuCisgICAgaWYgKCEkZGItPnF1ZXJ5X2FuZF9nZXRfYWZmZWN0ZWRfcm93cygnVVBEQVRF
IHRlc3RfcnVucyBTRVQgcnVuX2NvbmZpZyA9IGRlc3RpbmF0aW9uLmNvbmZpZ19pZAorICAgICAg
ICBGUk9NIHRlc3RfY29uZmlndXJhdGlvbnMgYXMgbWVyZ2VkLCB0ZXN0X2NvbmZpZ3VyYXRpb25z
IGFzIGRlc3RpbmF0aW9uCisgICAgICAgIFdIRVJFIG1lcmdlZC5jb25maWdfcGxhdGZvcm0gPSAk
MSBBTkQgZGVzdGluYXRpb24uY29uZmlnX3BsYXRmb3JtID0gJDIgQU5EIHJ1bl9jb25maWcgPSBt
ZXJnZWQuY29uZmlnX2lkCisgICAgICAgICAgICBBTkQgZGVzdGluYXRpb24uY29uZmlnX21ldHJp
YyA9IG1lcmdlZC5jb25maWdfbWV0cmljJywgYXJyYXkoJHBsYXRmb3JtX3RvX21lcmdlLCAkZGVz
dGluYXRpb25fcGxhdGZvcm0pKSkgeworICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9u
KCk7CisgICAgICAgIHJldHVybiBub3RpY2UoIkZhaWxlZCB0byBtaWdyYXRlIHRlc3QgcnVucyBm
b3IgJHBsYXRmb3JtX3RvX21lcmdlIHRoYXQgaGF2ZSB0ZXN0IGNvbmZpZ3VyYXRpb25zIGluICRk
ZXN0aW5hdGlvbl9wbGF0Zm9ybS4iKTsKKyAgICB9CisKKyAgICAvLyBUaGVuIG1pZ3JhdGUgdGVz
dCBjb25maWd1cmF0aW9ucyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBkZXN0aW5hdGlvbiBwbGF0
Zm9ybSB0byB0aGUgbmV3IHBsYXRmb3JtCisgICAgLy8gc28gdGhhdCB0ZXN0IHJ1bnMgYXNzb2Np
YXRlZCB3aXRoIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBtb3ZlZCB0byB0aGUgZGVzdGluYXRp
b24uCisgICAgaWYgKCRkYi0+cXVlcnlfYW5kX2dldF9hZmZlY3RlZF9yb3dzKCdVUERBVEUgdGVz
dF9jb25maWd1cmF0aW9ucyBTRVQgY29uZmlnX3BsYXRmb3JtID0gJDIKKyAgICAgICAgV0hFUkUg
Y29uZmlnX3BsYXRmb3JtID0gJDEgQU5EIGNvbmZpZ19tZXRyaWMgTk9UIElOIChTRUxFQ1QgY29u
ZmlnX21ldHJpYyBGUk9NIHRlc3RfY29uZmlndXJhdGlvbnMgV0hFUkUgY29uZmlnX3BsYXRmb3Jt
ID0gJDIpJywKKyAgICAgICAgYXJyYXkoJHBsYXRmb3JtX3RvX21lcmdlLCAkZGVzdGluYXRpb25f
cGxhdGZvcm0pKSA9PT0gRkFMU0UpIHsKKyAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlv
bigpOworICAgICAgICByZXR1cm4gbm90aWNlKCJGYWlsZWQgdG8gbWlncmF0ZSB0ZXN0IGNvbmZp
Z3VyYXRpb25zIGZvciAkcGxhdGZvcm1fdG9fbWVyZ2UuIik7CisgICAgfQorCisgICAgaWYgKCRk
Yi0+cXVlcnlfYW5kX2ZldGNoX2FsbCgnU0VMRUNUICogRlJPTSB0ZXN0X3J1bnMsIHRlc3RfY29u
ZmlndXJhdGlvbnMgV0hFUkUgcnVuX2NvbmZpZyA9IGNvbmZpZ19pZCBBTkQgY29uZmlnX3BsYXRm
b3JtID0gJDEnLCBhcnJheSgkcGxhdGZvcm1fdG9fbWVyZ2UpKSkgeworICAgICAgICAvLyBXZSBz
aG91bGQgbmV2ZXIgcmVhY2ggaGVyZS4KKyAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlv
bigpOworICAgICAgICByZXR1cm4gbm90aWNlKCdGYWlsZWQgdG8gbWlncmF0ZSBhbGwgdGVzdCBy
dW5zLicpOworICAgIH0KKworICAgICRkYi0+cXVlcnlfYW5kX2dldF9hZmZlY3RlZF9yb3dzKCdE
RUxFVEUgRlJPTSBwbGF0Zm9ybXMgV0hFUkUgcGxhdGZvcm1faWQgPSAkMScsIGFycmF5KCRwbGF0
Zm9ybV90b19tZXJnZSkpOworICAgICRkYi0+Y29tbWl0X3RyYW5zYWN0aW9uKCk7Cit9CisKK2lm
ICgkZGIpIHsKKyAgICBpZiAoJGFjdGlvbiA9PSAndXBkYXRlJykgeworICAgICAgICBpZiAodXBk
YXRlX2ZpZWxkKCdwbGF0Zm9ybXMnLCAncGxhdGZvcm0nLCAnbmFtZScpCisgICAgICAgICAgICB8
fCB1cGRhdGVfZmllbGQoJ3BsYXRmb3JtcycsICdwbGF0Zm9ybScsICdoaWRkZW4nKSkKKyAgICAg
ICAgICAgIHJlZ2VuZXJhdGVfbWFuaWZlc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bm90aWNlKCdJbnZhbGlkIHBhcmFtZXRlcnMuJyk7CisgICAgfSBlbHNlIGlmICgkYWN0aW9uID09
ICdtZXJnZScpCisgICAgICAgIG1lcmdlX3BsYXRmb3JtcyhpbnR2YWwoJF9QT1NUWydpZCddKSwg
aW50dmFsKCRfUE9TVFsnZGVzdGluYXRpb24nXSkpOworCisgICAgJHBsYXRmb3JtcyA9ICRkYi0+
ZmV0Y2hfdGFibGUoJ3BsYXRmb3JtcycsICdwbGF0Zm9ybV9uYW1lJyk7CisKKyAgICBmdW5jdGlv
biBtZXJnZV9saXN0KCRwbGF0Zm9ybV9yb3cpIHsKKyAgICAgICAgZ2xvYmFsICRkYjsKKyAgICAg
ICAgZ2xvYmFsICRwbGF0Zm9ybXM7CisKKyAgICAgICAgJGlkID0gJHBsYXRmb3JtX3Jvd1sncGxh
dGZvcm1faWQnXTsKKyAgICAgICAgJGNvbnRlbnQgPSA8PDwgRU5ECis8Zm9ybSBtZXRob2Q9IlBP
U1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImlkIiB2YWx1ZT0iJGlkIj4KKzxzZWxlY3Qg
bmFtZT0iZGVzdGluYXRpb24iPgorRU5EOworCisgICAgICAgIGZvcmVhY2ggKCRwbGF0Zm9ybXMg
YXMgJHBsYXRmb3JtKSB7CisgICAgICAgICAgICBpZiAoJHBsYXRmb3JtWydwbGF0Zm9ybV9pZCdd
ID09ICRpZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICRjb250ZW50
IC49IDw8PCBFTkQKKzxvcHRpb24gdmFsdWU9InskcGxhdGZvcm1bJ3BsYXRmb3JtX2lkJ119Ij57
JHBsYXRmb3JtWydwbGF0Zm9ybV9uYW1lJ119PC9vcHRpb24+CitFTkQ7CisgICAgICAgIH0KKwor
ICAgICAgICAkY29udGVudCAuPSA8PDwgRU5ECis8L3NlbGVjdD4KKzxidXR0b24gdHlwZT0ic3Vi
bWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJtZXJnZSI+TWVyZ2U8L2J1dHRvbj4KKzwvZm9ybT4K
K0VORDsKKyAgICAgICAgcmV0dXJuIGFycmF5KCRjb250ZW50KTsKKyAgICB9CisKKyAgICAkcGFn
ZSA9IG5ldyBBZG1pbmlzdHJhdGl2ZVBhZ2UoJGRiLCAncGxhdGZvcm1zJywgJ3BsYXRmb3JtJywg
YXJyYXkoCisgICAgICAgICduYW1lJyA9PiBhcnJheSgnZWRpdGluZ19tb2RlJyA9PiAnc3RyaW5n
JyksCisgICAgICAgICdoaWRkZW4nID0+IGFycmF5KCdlZGl0aW5nX21vZGUnID0+ICdib29sZWFu
JyksCisgICAgICAgICdtZXJnZSBpbnRvJyA9PiBhcnJheSgnY3VzdG9tJyA9PiBmdW5jdGlvbiAo
JHBsYXRmb3JtX3JvdykgeyByZXR1cm4gbWVyZ2VfbGlzdCgkcGxhdGZvcm1fcm93KTsgfSksCisg
ICAgKSk7CisKKyAgICAkcGFnZS0+cmVuZGVyX3RhYmxlKCduYW1lJyk7Cit9CisKK2luY2x1ZGUo
Jy4uL2luY2x1ZGUvYWRtaW4tZm9vdGVyLnBocCcpOworCis/PgpJbmRleDogV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9yZWdlbmVyYXRlLW1hbmlmZXN0LnBocAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FkbWluL3JlZ2VuZXJhdGUt
bWFuaWZlc3QucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9hZG1pbi9yZWdlbmVyYXRlLW1hbmlmZXN0LnBocAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzIEBACis8P3BocAorCityZXF1aXJlX29uY2UoJy4uL2luY2x1ZGUvYWRtaW4taGVhZGVy
LnBocCcpOworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL21hbmlmZXN0LnBocCcpOworCitpZiAo
JGRiKSB7CisgICAgaWYgKHJlZ2VuZXJhdGVfbWFuaWZlc3QoKSkKKyAgICAgICAgbm90aWNlKCJS
ZWdlbmVyYXRlZCB0aGUgbWFuaWZlc3QiKTsKK30KKworcmVxdWlyZSgnLi4vaW5jbHVkZS9hZG1p
bi1mb290ZXIucGhwJyk7CisKKz8+CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL2FkbWluL3JlcG9ydHMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvYWRtaW4vcmVwb3J0cy5waHAJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2FkbWluL3JlcG9ydHMucGhwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOSBAQAorPD9waHAKKworcmVxdWlyZSgnLi4vaW5jbHVkZS9hZG1pbi1oZWFkZXIu
cGhwJyk7CisKKz8+PHA+PHE+V2Ugb3VnaHQgbmV2ZXIgdG8gYWxsb3cgb3Vyc2VsdmVzIHRvIGJl
IHBlcnN1YWRlZCBvZiB0aGUgdHJ1dGggb2YgYW55dGhpbmcgdW5sZXNzIG9uIHRoZSBldmlkZW5j
ZSBvZiBvdXIgcmVhc29uLjwvcT4gLSBSZW4mI3hlOTsgRGVzY2FydGVzPC9wPjw/cGhwCisKK3Jl
cXVpcmUoJy4uL2luY2x1ZGUvYWRtaW4tZm9vdGVyLnBocCcpOworCis/PgpJbmRleDogV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9yZXBvc2l0b3JpZXMucGhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vcmVwb3NpdG9yaWVz
LnBocAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRt
aW4vcmVwb3NpdG9yaWVzLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACis8P3Bo
cAorCitpbmNsdWRlKCcuLi9pbmNsdWRlL2FkbWluLWhlYWRlci5waHAnKTsKKworaWYgKCRkYikg
eworICAgIGlmICgkYWN0aW9uID09ICd1cGRhdGUnKSB7CisgICAgICAgIGlmICh1cGRhdGVfZmll
bGQoJ3JlcG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgJ25hbWUnKQorICAgICAgICAgICAgfHwg
dXBkYXRlX2ZpZWxkKCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsICd1cmwnKQorICAgICAg
ICAgICAgfHwgdXBkYXRlX2ZpZWxkKCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsICdibGFt
ZV91cmwnKSkKKyAgICAgICAgICAgIHJlZ2VuZXJhdGVfbWFuaWZlc3QoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbm90aWNlKCdJbnZhbGlkIHBhcmFtZXRlcnMuJyk7CisgICAgfQorCisg
ICAgJHBhZ2UgPSBuZXcgQWRtaW5pc3RyYXRpdmVQYWdlKCRkYiwgJ3JlcG9zaXRvcmllcycsICdy
ZXBvc2l0b3J5JywgYXJyYXkoCisgICAgICAgICduYW1lJyA9PiBhcnJheSgnZWRpdGluZ19tb2Rl
JyA9PiAnc3RyaW5nJyksCisgICAgICAgICd1cmwnID0+IGFycmF5KCdsYWJlbCcgPT4gJ1Jldmlz
aW9uIFVSTCAoQXQgcmV2aXNpb24gJDEpJywgJ2VkaXRpbmdfbW9kZScgPT4gJ3VybCcpLAorICAg
ICAgICAnYmxhbWVfdXJsJyA9PiBhcnJheSgnbGFiZWwnID0+ICdCbGFtZSBVUkwgKEZyb20gcmV2
aXNpb24gJDEgdG8gcmV2aXNpb24gJDIpJywgJ2VkaXRpbmdfbW9kZScgPT4gJ3VybCcpCisgICAg
KSk7CisKKyAgICAkcGFnZS0+cmVuZGVyX3RhYmxlKCduYW1lJyk7Cit9CisKK2luY2x1ZGUoJy4u
L2luY2x1ZGUvYWRtaW4tZm9vdGVyLnBocCcpOworCis/PgpJbmRleDogV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9hZG1pbi9yZXByb2Nlc3MtcmVwb3J0LnBocAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FkbWluL3JlcHJvY2Vzcy1yZXBvcnQu
cGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hZG1p
bi9yZXByb2Nlc3MtcmVwb3J0LnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACis8
P3BocAorCityZXF1aXJlX29uY2UoJy4uL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwJyk7CityZXF1
aXJlX29uY2UoJy4uL2luY2x1ZGUvbWFuaWZlc3QucGhwJyk7CityZXF1aXJlX29uY2UoJy4uL2lu
Y2x1ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHAnKTsKKworJGRiID0gbmV3IERhdGFiYXNlOworaWYg
KCEkZGItPmNvbm5lY3QoKSkKKyAgICBleGl0X3dpdGhfZXJyb3IoJ0RhdGFiYXNlQ29ubmVjdGlv
bkZhaWx1cmUnKTsKKworJHJlcG9ydF9pZCA9IGFycmF5X2dldCgkX1BPU1QsICdyZXBvcnQnKTsK
K2lmICghJHJlcG9ydF9pZCkKKyAgICAkcmVwb3J0X2lkID0gYXJyYXlfZ2V0KCRfR0VULCAncmVw
b3J0Jyk7CiskcmVwb3J0X2lkID0gaW50dmFsKCRyZXBvcnRfaWQpOworaWYgKCEkcmVwb3J0X2lk
KQorICAgIGV4aXRfd2l0aF9lcnJvcignUmVwb3J0SWROb3RTcGVjaWZpZWQnKTsKKworJHJlcG9y
dF9yb3cgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ3JlcG9ydHMnLCAncmVwb3J0JywgYXJyYXko
J2lkJyA9PiAkcmVwb3J0X2lkKSk7CitpZiAoISRyZXBvcnRfcm93KQorICAgIHJldHVybiBleGl0
X3dpdGhfZXJyb3IoJ1JlcG9ydE5vdEZvdW5kJywgYXJyYXkoJ3JlcG9ydElkJywgJHJlcG9ydF9p
ZCkpOworCiskcHJvY2Vzc29yID0gbmV3IFJlcG9ydFByb2Nlc3NvcigkZGIpOworJHByb2Nlc3Nv
ci0+cHJvY2Vzcyhqc29uX2RlY29kZSgkcmVwb3J0X3Jvd1sncmVwb3J0X2NvbnRlbnQnXSwgdHJ1
ZSksICRyZXBvcnRfaWQpOworCiskZ2VuZXJhdG9yID0gbmV3IE1hbmlmZXN0R2VuZXJhdG9yKCRk
Yik7CitpZiAoISRnZW5lcmF0b3ItPmdlbmVyYXRlKCkpCisgICAgZXhpdF93aXRoX2Vycm9yKCdG
YWlsZWRUb0dlbmVyYXRlTWFuaWZlc3QnKTsKK2Vsc2UgaWYgKCEkZ2VuZXJhdG9yLT5zdG9yZSgp
KQorICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9TdG9yZU1hbmlmZXN0Jyk7CisKK2V4aXRf
d2l0aF9zdWNjZXNzKCk7CisKKz8+CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL2FkbWluL3Rlc3QtY29uZmlndXJhdGlvbnMucGhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vdGVzdC1jb25maWd1cmF0aW9ucy5waHAJKHJl
dmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FkbWluL3Rlc3Qt
Y29uZmlndXJhdGlvbnMucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACis8P3Bo
cAorCityZXF1aXJlKCcuLi9pbmNsdWRlL2FkbWluLWhlYWRlci5waHAnKTsKK3JlcXVpcmUoJy4u
L2luY2x1ZGUvdGVzdC1uYW1lLXJlc29sdmVyLnBocCcpOworCitmdW5jdGlvbiBhZGRfcnVuKCRt
ZXRyaWNfaWQsICRwbGF0Zm9ybV9pZCwgJHR5cGUsICRkYXRlLCAkbWVhbikgeworICAgIGdsb2Jh
bCAkZGI7CisKKyAgICAkZGItPmJlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICAkY29uZmlnX2lk
ID0gJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JvdygndGVzdF9jb25maWd1cmF0aW9ucycsICdjb25m
aWcnLCBhcnJheSgnbWV0cmljJyA9PiAkbWV0cmljX2lkLCAncGxhdGZvcm0nID0+ICRwbGF0Zm9y
bV9pZCwgJ3R5cGUnID0+ICR0eXBlKSk7CisgICAgaWYgKCEkY29uZmlnX2lkKSB7CisgICAgICAg
ICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIG5vdGljZSgiRmFp
bGVkIHRvIGFkZCB0aGUgY29uZmlndXJhdGlvbiBmb3IgbWV0cmljICRtZXRyaWNfaWQgYW5kIHBs
YXRmb3JtICRwbGF0Zm9ybV9pZCIpOworICAgIH0KKworICAgICRidWlsZF9pZCA9ICRkYi0+aW5z
ZXJ0X3JvdygnYnVpbGRzJywgJ2J1aWxkJywgYXJyYXkoJ251bWJlcicgPT4gMCwgJ3RpbWUnID0+
ICRkYXRlKSk7CisgICAgaWYgKCEkYnVpbGRfaWQpIHsKKyAgICAgICAgJGRiLT5yb2xsYmFja190
cmFuc2FjdGlvbigpOworICAgICAgICByZXR1cm4gbm90aWNlKCJGYWlsZWQgdG8gYWRkIGEgYnVp
bGQiKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGluc2VydCBydW5faXRlcmF0
aW9ucz8KKyAgICAkcnVuX2lkID0gJGRiLT5pbnNlcnRfcm93KCd0ZXN0X3J1bnMnLCAncnVuJywg
YXJyYXkoJ2NvbmZpZycgPT4gJGNvbmZpZ19pZCwgJ2J1aWxkJyA9PiAkYnVpbGRfaWQsICdpdGVy
YXRpb25fY291bnRfY2FjaGUnID0+IDEsICdtZWFuX2NhY2hlJyA9PiAkbWVhbikpOworICAgIGlm
ICghJHJ1bl9pZCkgeworICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7CisgICAg
ICAgIHJldHVybiBub3RpY2UoIkZhaWxlZCB0byBhZGQgYSBydW4iKTsKKyAgICB9CisKKyAgICAk
ZGItPmNvbW1pdF90cmFuc2FjdGlvbigpOworICAgIG5vdGljZSgiQWRkZWQgYSBiYXNlbGluZSB0
ZXN0IHJ1bi4iKTsKK30KKworZnVuY3Rpb24gZGVsZXRlX3J1bigkcnVuX2lkLCAkYnVpbGRfaWQp
IHsKKyAgICBnbG9iYWwgJGRiOworCisgICAgJGRiLT5iZWdpbl90cmFuc2FjdGlvbigpOworCisg
ICAgJGJ1aWxkX2NvdW50cyA9ICRkYi0+cXVlcnlfYW5kX2ZldGNoX2FsbCgnU0VMRUNUIENPVU5U
KCopIEZST00gdGVzdF9ydW5zIFdIRVJFIHJ1bl9idWlsZCA9ICQxJywgYXJyYXkoJGJ1aWxkX2lk
KSk7CisgICAgaWYgKCEkYnVpbGRfY291bnRzKSB7CisgICAgICAgICRkYi0+cm9sbGJhY2tfdHJh
bnNhY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIG5vdGljZSgiRmFpbGVkIHRvIG9idGFpbiB0aGUg
bnVtYmVyIG9mIHJ1bnMgZm9yIHRoZSBidWlsZCAkYnVpbGRfaWQiKTsKKyAgICB9CisKKyAgICBp
ZiAoJGJ1aWxkX2NvdW50c1swXVsnY291bnQnXSAhPSAxKSB7CisgICAgICAgICRkYi0+cm9sbGJh
Y2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuIG5vdGljZSgiVGhlIGJ1aWxkICRidWls
ZF9pZCBkb2Vzbid0IGhhdmUgZXhhY3RseSBvbmUgcnVuLiBFaXRoZXIgdGhlIGJ1aWxkIGlkIGlz
IHdyb25nIG9yIGl0J3Mgbm90IGEgc3ludGhldGljIGJ1aWxkLiIpOworICAgIH0KKworICAgICRy
ZW1vdmVkX3J1bnMgPSAkZGItPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJ0RFTEVURSBGUk9NIHRlc3Rf
cnVucyBXSEVSRSBydW5faWQgPSAkMSBSRVRVUk5JTkcgcnVuX2J1aWxkJywgYXJyYXkoJHJ1bl9p
ZCkpOworICAgIGlmICghJHJlbW92ZWRfcnVucyB8fCBjb3VudCgkcmVtb3ZlZF9ydW5zKSAhPSAx
KSB7CisgICAgICAgICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgcmV0dXJu
IG5vdGljZSgiRmFpbGVkIHRvIGRlbGV0ZSB0aGUgcnVuICRydW5faWQuIik7CisgICAgfQorICAg
ICRhc3NvY2lhdGVkX2J1aWxkID0gJHJlbW92ZWRfcnVuc1swXVsncnVuX2J1aWxkJ107CisgICAg
aWYgKCRhc3NvY2lhdGVkX2J1aWxkICE9ICRidWlsZF9pZCkgeworICAgICAgICAkZGItPnJvbGxi
YWNrX3RyYW5zYWN0aW9uKCk7CisgICAgICAgIHJldHVybiBub3RpY2UoIkZhaWxlZCB0byBkZWxl
dGUgdGhlIHJ1biAkcnVuX2lkIGJlY2F1c2UgaXQgd2FzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVp
bGQgJGFzc29jaWF0ZWRfYnVpbGQgaW5zdGVhZCBvZiB0aGUgYnVpbGQgJGJ1aWxkX2lkIik7Cisg
ICAgfQorCisgICAgJHJlbW92ZWRfYnVpbGRzID0gJGRiLT5xdWVyeV9hbmRfZ2V0X2FmZmVjdGVk
X3Jvd3MoJ0RFTEVURSBGUk9NIGJ1aWxkcyBXSEVSRSBidWlsZF9pZCA9ICQxJywgYXJyYXkoJGJ1
aWxkX2lkKSk7CisgICAgaWYgKCEkcmVtb3ZlZF9ydW5zIHx8IGNvdW50KCRyZW1vdmVkX3J1bnMp
ICE9IDEpIHsKKyAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOworICAgICAgICBy
ZXR1cm4gbm90aWNlKCJGYWlsZWQgdG8gZGVsZXRlIHRoZSBidWlsZCAkYnVpbGRfaWQuIik7Cisg
ICAgfQorCisgICAgJGRiLT5jb21taXRfdHJhbnNhY3Rpb24oKTsKK30KKworaWYgKCRkYikgewor
ICAgIGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V0Yy9VVEMnKTsKKworICAgIGlmICgkYWN0
aW9uID09ICdhZGQtcnVuJyAmJiBhcnJheV9nZXQoJF9QT1NULCAnbWV0cmljJykgJiYgYXJyYXlf
Z2V0KCRfUE9TVCwgJ3BsYXRmb3JtJykKKyAgICAgICAgJiYgYXJyYXlfZ2V0KCRfUE9TVCwgJ2Nv
bmZpZy10eXBlJykgJiYgYXJyYXlfZ2V0KCRfUE9TVCwgJ2RhdGUnKSAmJiBhcnJheV9nZXQoJF9Q
T1NULCAnbWVhbicpKQorICAgICAgICBhZGRfcnVuKGludHZhbCgkX1BPU1RbJ21ldHJpYyddKSwg
aW50dmFsKCRfUE9TVFsncGxhdGZvcm0nXSksICRfUE9TVFsnY29uZmlnLXR5cGUnXSwgJF9QT1NU
WydkYXRlJ10sIGZsb2F0dmFsKCRfUE9TVFsnbWVhbiddKSk7CisgICAgZWxzZSBpZiAoJGFjdGlv
biA9PSAnZGVsZXRlLXJ1bicgJiYgYXJyYXlfZ2V0KCRfUE9TVCwgJ3J1bicpICYmIGFycmF5X2dl
dCgkX1BPU1QsICdidWlsZCcpKQorICAgICAgICBkZWxldGVfcnVuKGludHZhbCgkX1BPU1RbJ3J1
biddKSwgaW50dmFsKCRfUE9TVFsnYnVpbGQnXSkpOworICAgIGVsc2UgaWYgKCRhY3Rpb24pCisg
ICAgICAgIG5vdGljZSgiSW52YWxpZCBhcmd1bWVudHMiKTsKKworICAgICRtZXRyaWNfaWQgPSBp
bnR2YWwoYXJyYXlfZ2V0KCRfR0VULCAnbWV0cmljJykpOworCisgICAgJHRlc3RfbmFtZV9yZXNv
bHZlciA9IG5ldyBUZXN0TmFtZVJlc29sdmVyKCRkYik7CisgICAgJGZ1bGxfbWV0cmljX25hbWUg
PSAkdGVzdF9uYW1lX3Jlc29sdmVyLT5mdWxsX25hbWVfZm9yX21ldHJpYygkbWV0cmljX2lkKTsK
KyAgICBlY2hvICI8aDI+JGZ1bGxfbWV0cmljX25hbWU8L2gyPiI7CisKKyAgICAkcGFnZSA9IG5l
dyBBZG1pbmlzdHJhdGl2ZVBhZ2UoJGRiLCAncGxhdGZvcm1zJywgJ3BsYXRmb3JtJywgYXJyYXko
CisgICAgICAgICduYW1lJyA9PiBhcnJheSgnbGFiZWwnID0+ICdQbGF0Zm9ybSBOYW1lJyksCisg
ICAgICAgICdDb25maWd1cmF0aW9ucycgPT4gYXJyYXkoJ3N1YmNvbHVtbnMnPT4gYXJyYXkoJ0lE
JywgJ1R5cGUnKSwgJ2N1c3RvbScgPT4gZnVuY3Rpb24gKCRwbGF0Zm9ybV9yb3cpIHsKKyAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0ZV9yb3dzX2Zvcl9jb25maWd1cmF0aW9ucygkcGxhdGZvcm1f
cm93WydwbGF0Zm9ybV9pZCddKTsKKyAgICAgICAgfSksCisgICAgICAgICdCYXNlbGluZSBUZXN0
IFJ1bnMnID0+IGFycmF5KCdzdWJjb2x1bW5zJz0+IGFycmF5KCdSdW4gSUQnLCAnQnVpbGQgSUQn
LCAnVGltZScsICdNZWFuJywgJ0FjdGlvbnMnKSwgJ2N1c3RvbScgPT4gZnVuY3Rpb24gKCRwbGF0
Zm9ybV9yb3cpIHsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZV9yb3dzX2Zvcl90ZXN0X3J1
bnMoJHBsYXRmb3JtX3Jvd1sncGxhdGZvcm1faWQnXSwgJ2Jhc2VsaW5lJyk7CisgICAgICAgIH0p
LAorICAgICAgICAnVGFyZ2V0IFRlc3QgUnVucycgPT4gYXJyYXkoJ3N1YmNvbHVtbnMnPT4gYXJy
YXkoJ1J1biBJRCcsICdCdWlsZCBJRCcsICdUaW1lJywgJ01lYW4nLCAnQWN0aW9ucycpLCAnY3Vz
dG9tJyA9PiBmdW5jdGlvbiAoJHBsYXRmb3JtX3JvdykgeworICAgICAgICAgICAgcmV0dXJuIGdl
bmVyYXRlX3Jvd3NfZm9yX3Rlc3RfcnVucygkcGxhdGZvcm1fcm93WydwbGF0Zm9ybV9pZCddLCAn
dGFyZ2V0Jyk7CisgICAgICAgIH0pLAorICAgICkpOworCisgICAgZnVuY3Rpb24gZ2VuZXJhdGVf
cm93c19mb3JfY29uZmlndXJhdGlvbnMoJHBsYXRmb3JtX2lkKSB7CisgICAgICAgIGdsb2JhbCAk
dGVzdF9uYW1lX3Jlc29sdmVyOworICAgICAgICBnbG9iYWwgJG1ldHJpY19pZDsKKyAgICAgICAg
JHJvd3MgPSBhcnJheSgpOworICAgICAgICBpZiAoJGNvbmZpZ3VyYXRpb25zID0gJHRlc3RfbmFt
ZV9yZXNvbHZlci0+Y29uZmlndXJhdGlvbnNfZm9yX21ldHJpY19hbmRfcGxhdGZvcm0oJG1ldHJp
Y19pZCwgJHBsYXRmb3JtX2lkKSkgeworICAgICAgICAgICAgZm9yZWFjaCAoJGNvbmZpZ3VyYXRp
b25zIGFzICRjb25maWcpCisgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkcm93cywgYXJyYXko
JGNvbmZpZ1snY29uZmlnX2lkJ10sICRjb25maWdbJ2NvbmZpZ190eXBlJ10pKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gJHJvd3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2VuZXJhdGVf
cm93c19mb3JfdGVzdF9ydW5zKCRwbGF0Zm9ybV9pZCwgJGNvbmZpZ190eXBlKSB7CisgICAgICAg
IGdsb2JhbCAkbWV0cmljX2lkOworICAgICAgICBnbG9iYWwgJGRiOworCisgICAgICAgICRiYXNl
bGluZV9ydW5zID0gJGRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCdTRUxFQ1QgKiBGUk9NIHRlc3Rf
cnVucywgdGVzdF9jb25maWd1cmF0aW9ucywgYnVpbGRzCisgICAgICAgICAgICBXSEVSRSBydW5f
Y29uZmlnID0gY29uZmlnX2lkIEFORCBydW5fYnVpbGQgPSBidWlsZF9pZAorICAgICAgICAgICAg
QU5EIGNvbmZpZ19tZXRyaWMgPSAkMSBBTkQgY29uZmlnX3BsYXRmb3JtID0gJDIgQU5EIGNvbmZp
Z190eXBlID0gJDMKKyAgICAgICAgICAgIE9SREVSIEJZIGJ1aWxkX3RpbWUgREVTQyBMSU1JVCA2
JywgYXJyYXkoJG1ldHJpY19pZCwgJHBsYXRmb3JtX2lkLCAkY29uZmlnX3R5cGUpKTsKKworICAg
ICAgICAkcm93cyA9IGFycmF5KCk7CisgICAgICAgIGlmICgkYmFzZWxpbmVfcnVucykgeworICAg
ICAgICAgICAgZm9yZWFjaCAoJGJhc2VsaW5lX3J1bnMgYXMgJHJ1bikgeworICAgICAgICAgICAg
ICAgICRkZWxldGlvbl9mb3JtID0gPDw8IEVORAorPGZvcm0gbWV0aG9kPSJQT1NUIj4KKzxpbnB1
dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJ1biIgdmFsdWU9InskcnVuWydydW5faWQnXX0iPgorPGlu
cHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYnVpbGQiIHZhbHVlPSJ7JHJ1blsncnVuX2J1aWxkJ119
Ij4KKzxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJkZWxldGUtcnVu
Ij5EZWxldGU8L2J1dHRvbj4KKzwvZm9ybT4KK0VORDsKKyAgICAgICAgICAgICAgICBhcnJheV9w
dXNoKCRyb3dzLCBhcnJheSgkcnVuWydydW5faWQnXSwgJHJ1blsnYnVpbGRfaWQnXSwgJHJ1blsn
YnVpbGRfdGltZSddLCAkcnVuWydydW5fbWVhbl9jYWNoZSddLCAkZGVsZXRpb25fZm9ybSkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICAkZm9ybSA9IDw8PCBFTkQKKzxm
b3JtIG1ldGhvZD0iUE9TVCI+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtZXRyaWMiIHZh
bHVlPSIkbWV0cmljX2lkIj4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBsYXRmb3JtIiB2
YWx1ZT0iJHBsYXRmb3JtX2lkIj4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbmZpZy10
eXBlIiB2YWx1ZT0iJGNvbmZpZ190eXBlIj4KKzxsYWJlbD5EYXRlOiA8aW5wdXQgdHlwZT0idGV4
dCIgbmFtZT0iZGF0ZSI+PC9sYWJlbD4KKzxsYWJlbD5NZWFuOiA8aW5wdXQgdHlwZT0idGV4dCIg
bmFtZT0ibWVhbiI+PC9sYWJlbD4KKzxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24i
IHZhbHVlPSJhZGQtcnVuIj5BZGQ8L2J1dHRvbj4KKzwvZm9ybT4KK0VORDsKKworICAgICAgICBh
cnJheV9wdXNoKCRyb3dzLCAkZm9ybSk7CisKKyAgICAgICAgcmV0dXJuICRyb3dzOworICAgIH0K
KworICAgICRwYWdlLT5yZW5kZXJfdGFibGUoJ25hbWUnKTsKK30KKworcmVxdWlyZSgnLi4vaW5j
bHVkZS9hZG1pbi1mb290ZXIucGhwJyk7CisKKz8+CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2FkbWluL3Rlc3RzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2FkbWluL3Rlc3RzLnBocAkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYWRtaW4vdGVzdHMucGhwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjEzIEBACis8P3BocAorCityZXF1aXJlX29uY2UoJy4uL2luY2x1ZGUvYWRt
aW4taGVhZGVyLnBocCcpOworcmVxdWlyZV9vbmNlKCcuLi9pbmNsdWRlL3Rlc3QtbmFtZS1yZXNv
bHZlci5waHAnKTsKKworaWYgKCRhY3Rpb24gPT0gJ2Rhc2hib2FyZCcpIHsKKyAgICBpZiAoYXJy
YXlfa2V5X2V4aXN0cygnbWV0cmljX2lkJywgJF9QT1NUKSkgeworICAgICAgICAkbWV0cmljX2lk
ID0gaW50dmFsKCRfUE9TVFsnbWV0cmljX2lkJ10pOworICAgICAgICAkY29uZmlnX2lkcyA9IGFy
cmF5KCk7CisgICAgICAgICRzdWNjZWVkZWQgPSBUUlVFOworICAgICAgICBpZiAoISRkYi0+cXVl
cnlfYW5kX2dldF9hZmZlY3RlZF9yb3dzKCJVUERBVEUgdGVzdF9jb25maWd1cmF0aW9ucyBTRVQg
Y29uZmlnX2lzX2luX2Rhc2hib2FyZCA9IGZhbHNlIFdIRVJFIGNvbmZpZ19tZXRyaWMgPSAkMSIs
IGFycmF5KCRtZXRyaWNfaWQpKSkgeworICAgICAgICAgICAgJHN1Y2NlZWRlZCA9IEZBTFNFOwor
ICAgICAgICAgICAgbm90aWNlKCJGYWlsZWQgdG8gcmVtb3ZlIHNvbWUgY29uZmlndXJhdGlvbnMg
ZnJvbSB0aGUgZGFzaGJvYXJkLiIpOworICAgICAgICB9CisKKyAgICAgICAgZWxzZSBpZiAoYXJy
YXlfa2V5X2V4aXN0cygnbWV0cmljX3BsYXRmb3JtcycsICRfUE9TVCkpIHsKKyAgICAgICAgICAg
IGZvcmVhY2ggKCRfUE9TVFsnbWV0cmljX3BsYXRmb3JtcyddIGFzICRwbGF0Zm9ybV9pZCkgewor
ICAgICAgICAgICAgICAgIGlmICghJGRiLT5xdWVyeV9hbmRfZ2V0X2FmZmVjdGVkX3Jvd3MoIlVQ
REFURSB0ZXN0X2NvbmZpZ3VyYXRpb25zIFNFVCBjb25maWdfaXNfaW5fZGFzaGJvYXJkID0gdHJ1
ZQorICAgICAgICAgICAgICAgICAgICBXSEVSRSBjb25maWdfbWV0cmljID0gJDEgQU5EIGNvbmZp
Z19wbGF0Zm9ybSA9ICQyIiwgYXJyYXkoJG1ldHJpY19pZCwgJHBsYXRmb3JtX2lkKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgJHN1Y2NlZWRlZCA9IEZBTFNFOworICAgICAgICAgICAgICAgICAg
ICBub3RpY2UoIkZhaWxlZCB0byBhZGQgY29uZmlndXJhdGlvbnMgZm9yIG1ldHJpYyAkbWV0cmlj
X2lkIGFuZCBwbGF0Zm9ybSAkcGxhdGZvcm1faWQgdG8gdGhlIGRhc2hib2FyZC4iKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoJHN1
Y2NlZWRlZCkgeworICAgICAgICAgICAgbm90aWNlKCJVcGRhdGVkIHRoZSBkYXNoYm9hcmQuIik7
CisgICAgICAgICAgICByZWdlbmVyYXRlX21hbmlmZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgbm90aWNlKCdJbnZhbGlkIHBhcmFtZXRlcnMnKTsKK30gZWxzZSBpZiAoJGFj
dGlvbiA9PSAndXBkYXRlJykgeworICAgIGlmICghdXBkYXRlX2ZpZWxkKCd0ZXN0cycsICd0ZXN0
JywgJ3VybCcpKQorICAgICAgICBub3RpY2UoJ0ludmFsaWQgcGFyYW1ldGVycycpOworfSBlbHNl
IGlmICgkYWN0aW9uID09ICdhZGQnKSB7CisgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3Rlc3Rf
aWQnLCAkX1BPU1QpICYmIGFycmF5X2tleV9leGlzdHMoJ21ldHJpY19uYW1lJywgJF9QT1NUKSkg
eworICAgICAgICAkaWQgPSBpbnR2YWwoJF9QT1NUWyd0ZXN0X2lkJ10pOworICAgICAgICAkYWdn
cmVnYXRvciA9IGludHZhbCgkX1BPU1RbJ21ldHJpY19hZ2dyZWdhdG9yJ10pOworICAgICAgICBp
ZiAoISRhZ2dyZWdhdG9yKQorICAgICAgICAgICAgbm90aWNlKCdJbnZhbGlkIGFnZ3JlZ2F0b3Iu
IFlvdSBtdXN0IHNwZWNpZnkgb25lLicpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICRt
ZXRyaWNfaWQgPSAkZGItPmluc2VydF9yb3coJ3Rlc3RfbWV0cmljcycsICdtZXRyaWMnLAorICAg
ICAgICAgICAgICAgIGFycmF5KCd0ZXN0JyA9PiAkaWQsICduYW1lJyA9PiAkX1BPU1RbJ21ldHJp
Y19uYW1lJ10sICdhZ2dyZWdhdG9yJyA9PiAkYWdncmVnYXRvcikpOworICAgICAgICAgICAgaWYg
KCEkbWV0cmljX2lkKQorICAgICAgICAgICAgICAgIG5vdGljZSgiQ291bGQgbm90IGluc2VydCB0
aGUgbmV3IG1ldHJpYyBmb3IgdGVzdCAkaWQiKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGFkZF9qb2IoJ2FnZ3JlZ2F0ZScsICd7Im1ldHJpY0lkcyI6IFsgJyAuICRtZXRy
aWNfaWQgLiAnXX0nKTsKKyAgICAgICAgICAgICAgICBub3RpY2UoIkluc2VydGVkIHRoZSBtZXRy
aWMgZm9yIHRlc3QgJGlkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGFycmF5X2tleV9leGlzdHMoJ21ldHJpY19pZCcsICRfUE9TVCkpCisgICAgICAgIHJlZ2Vu
ZXJhdGVfbWFuaWZlc3QoKTsKKyAgICBlbHNlCisgICAgICAgIG5vdGljZSgnSW52YWxpZCBwYXJh
bWV0ZXJzJyk7Cit9CisKK2lmICgkZGIpIHsKKyAgICAkYWdncmVnYXRvcnMgPSBhcnJheSgpOwor
ICAgIGlmICgkYWdncmVnYXRvcnNfdGFibGUgPSAkZGItPmZldGNoX3RhYmxlKCdhZ2dyZWdhdG9y
cycpKSB7CisgICAgICAgIGZvcmVhY2ggKCRhZ2dyZWdhdG9yc190YWJsZSBhcyAkYWdncmVnYXRv
cl9yb3cpCisgICAgICAgICAgICAkYWdncmVnYXRvcnNbJGFnZ3JlZ2F0b3Jfcm93WydhZ2dyZWdh
dG9yX2lkJ11dID0gJGFnZ3JlZ2F0b3Jfcm93WydhZ2dyZWdhdG9yX25hbWUnXTsKKyAgICB9CisK
KyAgICAkdGVzdF9uYW1lX3Jlc29sdmVyID0gbmV3IFRlc3ROYW1lUmVzb2x2ZXIoJGRiKTsKKyAg
ICBpZiAoJHRlc3RfbmFtZV9yZXNvbHZlci0+dGVzdHMoKSkgeworICAgICAgICAkbmFtZV90b19w
bGF0Zm9ybSA9IGFycmF5KCk7CisKKyAgICAgICAgZm9yZWFjaCAoJGRiLT5mZXRjaF90YWJsZSgn
cGxhdGZvcm1zJykgYXMgJHBsYXRmb3JtKQorICAgICAgICAgICAgJG5hbWVfdG9fcGxhdGZvcm1b
JHBsYXRmb3JtWydwbGF0Zm9ybV9uYW1lJ11dID0gJHBsYXRmb3JtOworCisgICAgICAgICRwbGF0
Zm9ybV9uYW1lcyA9IGFycmF5X2tleXMoJG5hbWVfdG9fcGxhdGZvcm0pOworICAgICAgICBhc29y
dCgkcGxhdGZvcm1fbmFtZXMpOworCisgICAgICAgICRvZGQgPSBmYWxzZTsKKyAgICAgICAgJHNl
bGVjdGVkX3BhcmVudF9mdWxsX25hbWUgPSB0cmltKGFycmF5X2dldCgkX1NFUlZFUiwgJ1BBVEhf
SU5GTycsICcnKSwgJy8nKTsKKyAgICAgICAgJHNlbGVjdGVkX3BhcmVudCA9ICR0ZXN0X25hbWVf
cmVzb2x2ZXItPnRlc3RfaWRfZm9yX2Z1bGxfbmFtZSgkc2VsZWN0ZWRfcGFyZW50X2Z1bGxfbmFt
ZSk7CisgICAgICAgIGlmICgkc2VsZWN0ZWRfcGFyZW50KQorICAgICAgICAgICAgZWNobyAnPGgy
PicgLiBodG1sc3BlY2lhbGNoYXJzKCRzZWxlY3RlZF9wYXJlbnRfZnVsbF9uYW1lKSAuICc8L2gy
Pic7CisKKz8+Cis8dGFibGU+Cis8dGhlYWQ+CisgICAgPHRyPjx0ZD5UZXN0IElEPC90ZD48dGQ+
RnVsbCBOYW1lPC90ZD48dGQ+UGFyZW50IElEPC90ZD48dGQ+VVJMPC90ZD4KKyAgICAgICAgPHRk
Pk1ldHJpYyBJRDwvdGQ+PHRkPk1ldHJpYyBOYW1lPC90ZD48dGQ+QWdncmVnYXRvcjwvdGQ+PHRk
PkRhc2hib2FyZDwvdGQ+Cis8L3RoZWFkPgorPHRib2R5PgorPD9waHAKKworICAgICAgICBmb3Jl
YWNoICgkdGVzdF9uYW1lX3Jlc29sdmVyLT50ZXN0cygpIGFzICR0ZXN0KSB7CisgICAgICAgICAg
ICBpZiAoJHRlc3RbJ3Rlc3RfcGFyZW50J10gIT0gJHNlbGVjdGVkX3BhcmVudFsndGVzdF9pZCdd
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAkdGVzdF9pZCA9ICR0
ZXN0Wyd0ZXN0X2lkJ107CisgICAgICAgICAgICAkdGVzdF9tZXRyaWNzID0gJHRlc3RfbmFtZV9y
ZXNvbHZlci0+bWV0cmljc19mb3JfdGVzdF9pZCgkdGVzdF9pZCk7CisgICAgICAgICAgICAkcm93
X2NvdW50ID0gY291bnQoJHRlc3RfbWV0cmljcyk7CisgICAgICAgICAgICAkY2hpbGRfbWV0cmlj
cyA9ICR0ZXN0X25hbWVfcmVzb2x2ZXItPmNoaWxkX21ldHJpY3NfZm9yX3Rlc3RfaWQoJHRlc3Rf
aWQpOworICAgICAgICAgICAgJGxpbmtlZF90ZXN0X25hbWUgPSBodG1sc3BlY2lhbGNoYXJzKCR0
ZXN0WydmdWxsX25hbWUnXSk7CisgICAgICAgICAgICBpZiAoJGNoaWxkX21ldHJpY3MpIHsKKyAg
ICAgICAgICAgICAgICAkcm93X2NvdW50Kys7CisgICAgICAgICAgICAgICAgJGxpbmtlZF90ZXN0
X25hbWUgPSAnPGEgaHJlZj0iL2FkbWluL3Rlc3RzLycgLiBodG1sc3BlY2lhbGNoYXJzKCR0ZXN0
WydmdWxsX25hbWUnXSkgLiAnIj4nIC4gJGxpbmtlZF90ZXN0X25hbWUgLiAnPC9hPic7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICR0Ym9keV9jbGFzcyA9ICRvZGQgPyAnb2RkJyA6ICdl
dmVuJzsKKyAgICAgICAgICAgICRvZGQgPSAhJG9kZDsKKworICAgICAgICAgICAgJHRlc3RfdXJs
ID0gaHRtbHNwZWNpYWxjaGFycygkdGVzdFsndGVzdF91cmwnXSk7CisKKyAgICAgICAgICAgIGVj
aG8gPDw8RU9GCisgICAgPHRib2R5IGNsYXNzPSIkdGJvZHlfY2xhc3MiPgorICAgIDx0cj4KKyAg
ICAgICAgPHRkIHJvd3NwYW49IiRyb3dfY291bnQiPiR0ZXN0X2lkPC90ZD4KKyAgICAgICAgPHRk
IHJvd3NwYW49IiRyb3dfY291bnQiPiRsaW5rZWRfdGVzdF9uYW1lPC90ZD4KKyAgICAgICAgPHRk
IHJvd3NwYW49IiRyb3dfY291bnQiPnskdGVzdFsndGVzdF9wYXJlbnQnXX08L3RkPgorICAgICAg
ICA8dGQgcm93c3Bhbj0iJHJvd19jb3VudCI+CisgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+
PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaWQiIHZhbHVlPSIkdGVzdF9pZCI+CisgICAgICAg
IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InVwZGF0ZSI+CisgICAg
ICAgIDxpbnB1dCB0eXBlPSJ1cmwiIG5hbWU9InVybCIgdmFsdWU9IiR0ZXN0X3VybCIgc2l6ZT0i
ODAiPjwvZm9ybT48L3RkPgorRU9GOworCisgICAgICAgICAgICBpZiAoJHRlc3RfbWV0cmljcykg
eworICAgICAgICAgICAgICAgICRoYXNfdHIgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvcmVh
Y2ggKCR0ZXN0X21ldHJpY3MgYXMgJG1ldHJpYykgeworICAgICAgICAgICAgICAgICAgICAkYWdn
cmVnYXRvcl9uYW1lID0gYXJyYXlfZ2V0KCRhZ2dyZWdhdG9ycywgJG1ldHJpY1snbWV0cmljX2Fn
Z3JlZ2F0b3InXSwgJycpOworICAgICAgICAgICAgICAgICAgICBpZiAoJGFnZ3JlZ2F0b3JfbmFt
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJGFnZ3JlZ2F0b3JfYWN0aW9uID0gJzxmb3Jt
IG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWV0cmljX2lkIiB2YWx1
ZT0iJy4gJG1ldHJpY1snbWV0cmljX2lkJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
ICciPjxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJhZGQiPlJlZ2Vu
ZXJhdGU8L2J1dHRvbj48L2Zvcm0+JzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAkYWdncmVnYXRvcl9hY3Rpb24gPSAnJzsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAoISRoYXNfdHIpCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIDw8
PEVPRgorCisgICAgPHRyPgorRU9GOworICAgICAgICAgICAgICAgICAgICAkaGFzX3RyID0gZmFs
c2U7CisKKyAgICAgICAgICAgICAgICAgICAgJG1ldHJpY19pZCA9ICRtZXRyaWNbJ21ldHJpY19p
ZCddOworICAgICAgICAgICAgICAgICAgICBlY2hvIDw8PEVPRgorICAgICAgICA8dGQ+PGEgaHJl
Zj0iL2FkbWluL3Rlc3QtY29uZmlndXJhdGlvbnM/bWV0cmljPSRtZXRyaWNfaWQiPiRtZXRyaWNf
aWQ8L2E+PC90ZD4KKyAgICAgICAgPHRkPnskbWV0cmljWydtZXRyaWNfbmFtZSddfTwvdGQ+Cisg
ICAgICAgIDx0ZD4kYWdncmVnYXRvcl9uYW1lICRhZ2dyZWdhdG9yX2FjdGlvbjwvdGQ+CisgICAg
ICAgIDx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1l
dHJpY19pZCIgdmFsdWU9IiRtZXRyaWNfaWQiPgorRU9GOworCisgICAgICAgICAgICAgICAgICAg
IGZvcmVhY2ggKCRwbGF0Zm9ybV9uYW1lcyBhcyAkcGxhdGZvcm1fbmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgJHBsYXRmb3JtX25hbWUgPSBodG1sc3BlY2lhbGNoYXJzKCRwbGF0Zm9y
bV9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRwbGF0Zm9ybSA9ICRuYW1lX3RvX3Bs
YXRmb3JtWyRwbGF0Zm9ybV9uYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWd1
cmF0aW9ucyA9ICR0ZXN0X25hbWVfcmVzb2x2ZXItPmNvbmZpZ3VyYXRpb25zX2Zvcl9tZXRyaWNf
YW5kX3BsYXRmb3JtKCRtZXRyaWNfaWQsICRwbGF0Zm9ybVsncGxhdGZvcm1faWQnXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoISRjb25maWd1cmF0aW9ucykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxs
YWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm1ldHJpY19wbGF0Zm9ybXNbXVwi
IHZhbHVlPVwieyRwbGF0Zm9ybVsncGxhdGZvcm1faWQnXX1cIiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJGRiLT5pc190cnVlKCRjb25maWd1cmF0aW9uc1swXVsnY29uZmlnX2lzX2lu
X2Rhc2hib2FyZCddKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICcgY2hlY2tl
ZCc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkZGItPmlzX3RydWUoJHBsYXRm
b3JtWydwbGF0Zm9ybV9oaWRkZW4nXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNo
byAnZGlzYWJsZWQnOworICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPiRwbGF0Zm9ybV9u
YW1lPC9sYWJlbD4iOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgZWNobyA8PDxFT0YKKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9ImFjdGlv
biIgdmFsdWU9ImRhc2hib2FyZCI+U2F2ZTwvYnV0dG9uPjwvZm9ybT4KKyAgICAgICAgPC90ZD4K
KyAgICA8L3RyPgorRU9GOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCRjaGlsZF9tZXRyaWNzKSB7CisgICAgICAgICAgICAgICAgZWNobyA8PDxF
T0YKKyAgICAgICAgPHRkIGNvbHNwYW49IjUiPjxmb3JtIG1ldGhvZD0iUE9TVCI+CisgICAgICAg
IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRlc3RfaWQiIHZhbHVlPSIkdGVzdF9pZCI+Cisg
ICAgICAgIDxsYWJlbD5OYW1lPHNlbGVjdCBuYW1lPSJtZXRyaWNfbmFtZSI+CitFT0Y7CisKKyAg
ICAgICAgICAgICAgICBmb3JlYWNoICgkY2hpbGRfbWV0cmljcyBhcyAkbWV0cmljX25hbWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgJG1ldHJpY19uYW1lID0gaHRtbHNwZWNpYWxjaGFycygkbWV0
cmljX25hbWUpOworICAgICAgICAgICAgICAgICAgICBlY2hvICIKKyAgICAgICAgICAgIDxvcHRp
b24+JG1ldHJpY19uYW1lPC9vcHRpb24+IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBlY2hvIDw8PEVPRgorICAgICAgICA8L3NlbGVjdD48L2xhYmVsPgorICAgICAgICA8
bGFiZWw+QWdncmVnYXRvcgorICAgICAgICA8c2VsZWN0IG5hbWU9Im1ldHJpY19hZ2dyZWdhdG9y
Ij4KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+LTwvb3B0aW9uPgorRU9GOworICAgICAg
ICAgICAgZm9yZWFjaCAoJGFnZ3JlZ2F0b3JzIGFzICRpZCA9PiAkbmFtZSkgeworICAgICAgICAg
ICAgICAgICRuYW1lID0gaHRtbHNwZWNpYWxjaGFycygkbmFtZSk7CisgICAgICAgICAgICAgICAg
ZWNobyAiCisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiJGlkXCI+JG5hbWU8L29wdGlvbj4i
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWNobyA8PDxFT0YKKyAgICAgICAgPC9zZWxl
Y3Q+PC9sYWJlbD4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9ImFjdGlvbiIg
dmFsdWU9ImFkZCI+QWRkPC9idXR0b24+PC9mb3JtPjwvdGQ+CisgICAgPC90cj4KK0VPRjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVjaG8gPDw8RU9GCisgICAgPC90Ym9keT4KK0VPRjsK
KyAgICAgICAgfQorCisgICAgICAgID8+PC90Ym9keT4KKzwvdGFibGU+CisKKzw/cGhwCisKKyAg
ICB9CisKK30KKworaW5jbHVkZSgnLi4vaW5jbHVkZS9hZG1pbi1mb290ZXIucGhwJyk7CisKKz8+
CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9yZXBvcnQucGhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC5w
aHAJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9y
ZXBvcnQucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKzw/cGhwCisKK3JlcXVp
cmVfb25jZSgnLi4vaW5jbHVkZS9qc29uLWhlYWRlci5waHAnKTsKK3JlcXVpcmVfb25jZSgnLi4v
aW5jbHVkZS9tYW5pZmVzdC5waHAnKTsKK3JlcXVpcmVfb25jZSgnLi4vaW5jbHVkZS9yZXBvcnQt
cHJvY2Vzc29yLnBocCcpOworCitmdW5jdGlvbiBtYWluKCRwb3N0X2RhdGEpIHsKKyAgICBzZXRf
ZXhpdF9kZXRhaWwoJ2ZhaWx1cmVTdG9yZWQnLCBmYWxzZSk7CisKKyAgICAkZGIgPSBuZXcgRGF0
YWJhc2U7CisgICAgaWYgKCEkZGItPmNvbm5lY3QoKSkKKyAgICAgICAgZXhpdF93aXRoX2Vycm9y
KCdEYXRhYmFzZUNvbm5lY3Rpb25GYWlsdXJlJyk7CisKKyAgICAvLyBDb252ZXJ0IGFsbCBmbG9h
dGluZyBwb2ludHMgdG8gc3RyaW5ncyB0byBhdm9pZCBwYXJzaW5nIHRoZW0gaW4gUEhQLgorICAg
IC8vIEZJWE1FOiBEbyB0aGlzIGNvbnZlcnNpb24gaW4gdGhlIHN1Ym1pc3Npb24gc2NyaXB0cyB0
aGVtc2VsdmVzLgorICAgICRwYXJzZWRfanNvbiA9IGpzb25fZGVjb2RlKHByZWdfcmVwbGFjZSgn
Lyg/PD1bXHMsXFtdKShcZCsoXC5cZCspPykoXHMqWyxcXV0pLycsICciJDEiJDMnLCAkcG9zdF9k
YXRhKSwgdHJ1ZSk7CisgICAgaWYgKCEkcGFyc2VkX2pzb24pCisgICAgICAgIGV4aXRfd2l0aF9l
cnJvcignRmFpbGVkVG9QYXJzZUpTT04nKTsKKworICAgIHNldF9leGl0X2RldGFpbCgncHJvY2Vz
c2VkUnVucycsIDApOworICAgIGZvcmVhY2ggKCRwYXJzZWRfanNvbiBhcyAkaSA9PiAkcmVwb3J0
KSB7CisgICAgICAgICRwcm9jZXNzb3IgPSBuZXcgUmVwb3J0UHJvY2Vzc29yKCRkYik7CisgICAg
ICAgICRwcm9jZXNzb3ItPnByb2Nlc3MoJHJlcG9ydCk7CisgICAgICAgIHNldF9leGl0X2RldGFp
bCgncHJvY2Vzc2VkUnVucycsICRpICsgMSk7CisgICAgfQorCisgICAgJGdlbmVyYXRvciA9IG5l
dyBNYW5pZmVzdEdlbmVyYXRvcigkZGIpOworICAgIGlmICghJGdlbmVyYXRvci0+Z2VuZXJhdGUo
KSkKKyAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0dlbmVyYXRlTWFuaWZlc3QnKTsK
KyAgICBlbHNlIGlmICghJGdlbmVyYXRvci0+c3RvcmUoKSkKKyAgICAgICAgZXhpdF93aXRoX2Vy
cm9yKCdGYWlsZWRUb1N0b3JlTWFuaWZlc3QnKTsKKworICAgIGV4aXRfd2l0aF9zdWNjZXNzKCk7
Cit9CisKK21haW4oJEhUVFBfUkFXX1BPU1RfREFUQSk7CisKKz8+CkluZGV4OiBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9ydW5zLnBocAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9ydW5zLnBocAkocmV2aXNpb24gMCkKKysrIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3J1bnMucGhwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODggQEAKKzw/cGhwCisKK3JlcXVpcmUoJy4uL2luY2x1ZGUvanNvbi1oZWFk
ZXIucGhwJyk7CisKKyRwYXRocyA9IGFycmF5X2tleV9leGlzdHMoJ1BBVEhfSU5GTycsICRfU0VS
VkVSKSA/IGV4cGxvZGUoJy8nLCB0cmltKCRfU0VSVkVSWydQQVRIX0lORk8nXSwgJy8nKSkgOiBh
cnJheSgpOworCitpZiAoY291bnQoJHBhdGhzKSAhPSAxKQorICAgIGV4aXRfd2l0aF9lcnJvcign
SW52YWxpZFJlcXVlc3QnKTsKKworJHBhcnRzID0gZXhwbG9kZSgnLScsICRwYXRoc1swXSk7Citp
ZiAoY291bnQoJHBhcnRzKSAhPSAyKQorICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZFJlcXVl
c3QnKTsKKworJGRiID0gbmV3IERhdGFiYXNlOworaWYgKCEkZGItPmNvbm5lY3QoKSkKKyAgICBl
eGl0X3dpdGhfZXJyb3IoJ0RhdGFiYXNlQ29ubmVjdGlvbkZhaWx1cmUnKTsKKworJHBsYXRmb3Jt
X2lkID0gaW50dmFsKCRwYXJ0c1swXSk7CiskbWV0cmljX2lkID0gaW50dmFsKCRwYXJ0c1sxXSk7
CiskY29uZmlnX3Jvd3MgPSAkZGItPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJ1NFTEVDVCBjb25maWdf
aWQsIGNvbmZpZ190eXBlLCBjb25maWdfcGxhdGZvcm0sIGNvbmZpZ19tZXRyaWMKKyAgICBGUk9N
IHRlc3RfY29uZmlndXJhdGlvbnMgV0hFUkUgY29uZmlnX21ldHJpYyA9ICQxIEFORCBjb25maWdf
cGxhdGZvcm0gPSAkMicsIGFycmF5KCRtZXRyaWNfaWQsICRwbGF0Zm9ybV9pZCkpOworaWYgKCEk
Y29uZmlnX3Jvd3MpCisgICAgZXhpdF93aXRoX2Vycm9yKCdDb25maWd1cmF0aW9uTm90Rm91bmQn
KTsKKworJHJlcG9zaXRvcnlfaWRfdG9fbmFtZSA9IGFycmF5KCk7CitpZiAoJHJlcG9zaXRvcnlf
dGFibGUgPSAkZGItPmZldGNoX3RhYmxlKCdyZXBvc2l0b3JpZXMnKSkgeworICAgIGZvcmVhY2gg
KCRyZXBvc2l0b3J5X3RhYmxlIGFzICRyZXBvc2l0b3J5KQorICAgICAgICAkcmVwb3NpdG9yeV9p
ZF90b19uYW1lWyRyZXBvc2l0b3J5WydyZXBvc2l0b3J5X2lkJ11dID0gJHJlcG9zaXRvcnlbJ3Jl
cG9zaXRvcnlfbmFtZSddOworfQorCitmdW5jdGlvbiBmZXRjaF9ydW5zX2Zvcl9jb25maWcoJGRi
LCAkY29uZmlnKSB7CisgICAgJHJhd19ydW5zID0gJGRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCcK
KyAgICBTRUxFQ1QgdGVzdF9ydW5zLiosIGJ1aWxkcy4qLCBhcnJheV9hZ2coKHJldmlzaW9uX3Jl
cG9zaXRvcnksIHJldmlzaW9uX3ZhbHVlLCByZXZpc2lvbl90aW1lKSkgQVMgcmV2aXNpb25zCisg
ICAgICAgIEZST00gYnVpbGRzIExFRlQgT1VURVIgSk9JTiBidWlsZF9yZXZpc2lvbnMgT04gcmV2
aXNpb25fYnVpbGQgPSBidWlsZF9pZCwgdGVzdF9ydW5zCisgICAgICAgIFdIRVJFIHJ1bl9idWls
ZCA9IGJ1aWxkX2lkIEFORCBydW5fY29uZmlnID0gJDEKKyAgICAgICAgR1JPVVAgQlkgYnVpbGRf
aWQsIGJ1aWxkX2J1aWxkZXIsIGJ1aWxkX251bWJlciwgYnVpbGRfdGltZSwgYnVpbGRfbGF0ZXN0
X3JldmlzaW9uLAorICAgICAgICAgICAgcnVuX2lkLCBydW5fY29uZmlnLCBydW5fYnVpbGQsIHJ1
bl9pdGVyYXRpb25fY291bnRfY2FjaGUsCisgICAgICAgICAgICBydW5fbWVhbl9jYWNoZSwgcnVu
X3N1bV9jYWNoZSwgcnVuX3NxdWFyZV9zdW1fY2FjaGUKKyAgICAgICAgT1JERVIgQlkgYnVpbGRf
bGF0ZXN0X3JldmlzaW9uLCBidWlsZF90aW1lJywgYXJyYXkoJGNvbmZpZ1snY29uZmlnX2lkJ10p
KTsKKworICAgICRmb3JtYXR0ZWRfcnVucyA9IGFycmF5KCk7CisgICAgaWYgKCEkcmF3X3J1bnMp
CisgICAgICAgIHJldHVybiAkZm9ybWF0dGVkX3J1bnM7CisKKyAgICBmb3JlYWNoICgkcmF3X3J1
bnMgYXMgJHJ1bikKKyAgICAgICAgYXJyYXlfcHVzaCgkZm9ybWF0dGVkX3J1bnMsIGZvcm1hdF9y
dW4oJHJ1bikpOworCisgICAgcmV0dXJuICRmb3JtYXR0ZWRfcnVuczsKK30KKworZGF0ZV9kZWZh
dWx0X3RpbWV6b25lX3NldCgnVVRDJyk7CitmdW5jdGlvbiBwYXJzZV9yZXZpc2lvbnNfYXJyYXko
JHBvc3RncmVzX2FycmF5KSB7CisgICAgZ2xvYmFsICRyZXBvc2l0b3J5X2lkX3RvX25hbWU7CisK
KyAgICAvLyBlLmcuIHsiKFdlYktpdCwxMzE0NTYsXCIyMDEyLTEwLTE2IDE0OjUzOjAwXCIpIiwi
KENocm9taXVtLDE2MjAwNCwpIn0KKyAgICAkb3V0ZXJfYXJyYXkgPSBqc29uX2RlY29kZSgnWycg
LiB0cmltKCRwb3N0Z3Jlc19hcnJheSwgJ3t9JykgLiAnXScpOworICAgICRyZXZpc2lvbnMgPSBh
cnJheSgpOworICAgIGZvcmVhY2ggKCRvdXRlcl9hcnJheSBhcyAkaXRlbSkgeworICAgICAgICAk
bmFtZV9hbmRfcmV2aXNpb24gPSBleHBsb2RlKCcsJywgdHJpbSgkaXRlbSwgJygpJykpOworICAg
ICAgICBpZiAoISRuYW1lX2FuZF9yZXZpc2lvblswXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAkdGltZSA9IHN0cnRvdGltZSh0cmltKCRuYW1lX2FuZF9yZXZpc2lvblsyXSwgJyIn
KSkgKiAxMDAwOworICAgICAgICAkcmV2aXNpb25zWyRyZXBvc2l0b3J5X2lkX3RvX25hbWVbdHJp
bSgkbmFtZV9hbmRfcmV2aXNpb25bMF0sICciJyldXSA9IGFycmF5KHRyaW0oJG5hbWVfYW5kX3Jl
dmlzaW9uWzFdLCAnIicpLCAkdGltZSk7CisgICAgfQorICAgIHJldHVybiAkcmV2aXNpb25zOwor
fQorCitmdW5jdGlvbiBmb3JtYXRfcnVuKCRydW4pIHsKKyAgICByZXR1cm4gYXJyYXkoCisgICAg
ICAgICdtZWFuJyA9PiBmbG9hdHZhbCgkcnVuWydydW5fbWVhbl9jYWNoZSddKSwKKyAgICAgICAg
J2l0ZXJhdGlvbkNvdW50JyA9PiBpbnR2YWwoJHJ1blsncnVuX2l0ZXJhdGlvbl9jb3VudF9jYWNo
ZSddKSwKKyAgICAgICAgJ3N1bScgPT4gZmxvYXR2YWwoJHJ1blsncnVuX3N1bV9jYWNoZSddKSwK
KyAgICAgICAgJ3NxdWFyZVN1bScgPT4gZmxvYXR2YWwoJHJ1blsncnVuX3NxdWFyZV9zdW1fY2Fj
aGUnXSksCisgICAgICAgICdyZXZpc2lvbnMnID0+IHBhcnNlX3JldmlzaW9uc19hcnJheSgkcnVu
WydyZXZpc2lvbnMnXSksCisgICAgICAgICdidWlsZFRpbWUnID0+IHN0cnRvdGltZSgkcnVuWydi
dWlsZF90aW1lJ10pICogMTAwMCwKKyAgICAgICAgJ2J1aWxkTnVtYmVyJyA9PiBpbnR2YWwoJHJ1
blsnYnVpbGRfbnVtYmVyJ10pLAorICAgICAgICAnYnVpbGRlcicgPT4gJHJ1blsnYnVpbGRfYnVp
bGRlciddKTsKK30KKworJHJlc3VsdHMgPSBhcnJheSgpOworZm9yZWFjaCAoJGNvbmZpZ19yb3dz
IGFzICRjb25maWcpIHsKKyAgICBpZiAoJHJ1bnMgPSBmZXRjaF9ydW5zX2Zvcl9jb25maWcoJGRi
LCAkY29uZmlnKSkKKyAgICAgICAgJHJlc3VsdHNbJGNvbmZpZ1snY29uZmlnX3R5cGUnXV0gPSAk
cnVuczsKK30KKworZXhpdF93aXRoX3N1Y2Nlc3MoJHJlc3VsdHMpOworCis/PgpJbmRleDogV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2FkbWluLWZvb3Rlci5waHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2FkbWlu
LWZvb3Rlci5waHAJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL2luY2x1ZGUvYWRtaW4tZm9vdGVyLnBocAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQg
QEAKKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2luY2x1ZGUvYWRtaW4taGVhZGVyLnBocAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvYWRtaW4taGVhZGVyLnBocAkocmV2
aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9hZG1p
bi1oZWFkZXIucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI2IEBACis8P3BocAorCity
ZXF1aXJlX29uY2UoJ2RiLnBocCcpOworcmVxdWlyZV9vbmNlKCdtYW5pZmVzdC5waHAnKTsKKwor
Pz48IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViS2l0IFBlcmYgTW9u
aXRvcjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9jb21tb24uY3NzIj4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL2FkbWluL2FkbWluLmNzcyI+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxoZWFkZXIgaWQ9InRpdGxlIj4KKzxoMT48YSBocmVmPSIvIj5XZWJLaXQgUGVy
ZiBNb25pdG9yPC9hPjwvaDE+Cis8dWw+CisgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wbGF0Zm9y
bXMiPlBsYXRmb3JtczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIvYWRtaW4vdGVzdHMiPlRl
c3RzPC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9qb2JzIj5Kb2JzPC9hPjwvbGk+
CisgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hZ2dyZWdhdG9ycyI+QWdncmVnYXRvcnM8L2E+PC9s
aT4KKyAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2J1aWxkZXJzIj5CdWlsZGVyczwvYT48L2xpPgor
ICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcmVwb3NpdG9yaWVzIj5SZXBvc2l0b3JpZXM8L2E+PC9s
aT4KKyAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2J1Zy10cmFja2VycyI+QnVnIFRyYWNrZXJzPC9h
PjwvbGk+Cis8L3VsPgorPC9oZWFkZXI+CisKKzxkaXYgaWQ9Im1haW5Db250ZW50cyI+Cis8P3Bo
cAorCitmdW5jdGlvbiBub3RpY2UoJG1lc3NhZ2UpIHsKKyAgICBlY2hvICI8cCBjbGFzcz0nbm90
aWNlJz4kbWVzc2FnZTwvcD4iOworfQorCiskZGIgPSBuZXcgRGF0YWJhc2U7CitpZiAoISRkYi0+
Y29ubmVjdCgpKSB7CisgICAgbm90aWNlKCdGYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJh
c2UnKTsKKyAgICAkZGIgPSBOVUxMOworfSBlbHNlCisgICAgJGFjdGlvbiA9IGFycmF5X2tleV9l
eGlzdHMoJ2FjdGlvbicsICRfUE9TVCkgPyAkX1BPU1RbJ2FjdGlvbiddIDogTlVMTDsKKworZnVu
Y3Rpb24gZXhlY3V0ZV9xdWVyeV9hbmRfZXhwZWN0X29uZV9yb3dfdG9fYmVfYWZmZWN0ZWQoJHF1
ZXJ5LCAkcGFyYW1zLCAkc3VjY2Vzc19tZXNzYWdlLCAkZmFpbHVyZV9tZXNzYWdlKSB7CisgICAg
Z2xvYmFsICRkYjsKKworICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJiRwYXJhbSkgeworICAgICAg
ICBpZiAoJHBhcmFtID09ICcnKQorICAgICAgICAgICAgJHBhcmFtID0gTlVMTDsKKyAgICB9CisK
KyAgICAkYWZmZWN0ZWRfcm93cyA9ICRkYi0+cXVlcnlfYW5kX2dldF9hZmZlY3RlZF9yb3dzKCRx
dWVyeSwgJHBhcmFtcyk7CisgICAgaWYgKCRhZmZlY3RlZF9yb3dzKSB7CisgICAgICAgIGFzc2Vy
dCgnJGFmZmVjdGVkX3Jvd3MgPT0gMScpOworICAgICAgICBub3RpY2UoJHN1Y2Nlc3NfbWVzc2Fn
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG5vdGljZSgkZmFpbHVyZV9t
ZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZV9maWVsZCgk
dGFibGUsICRwcmVmaXgsICRmaWVsZF9uYW1lKSB7CisgICAgZ2xvYmFsICRkYjsKKworICAgIGlm
ICghYXJyYXlfa2V5X2V4aXN0cygnaWQnLCAkX1BPU1QpIHx8IChhcnJheV9nZXQoJF9QT1NULCAn
dXBkYXRlZC1jb2x1bW4nKSAhPSAkZmllbGRfbmFtZSAmJiAhYXJyYXlfa2V5X2V4aXN0cygkZmll
bGRfbmFtZSwgJF9QT1NUKSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICRpZCA9IGlu
dHZhbCgkX1BPU1RbJ2lkJ10pOworICAgICRwcmVmaXhlZF9maWVsZF9uYW1lID0gJHByZWZpeCAu
ICdfJyAuICRmaWVsZF9uYW1lOworICAgICRpZF9maWVsZF9uYW1lID0gJHByZWZpeCAuICdfaWQn
OworCisgICAgZXhlY3V0ZV9xdWVyeV9hbmRfZXhwZWN0X29uZV9yb3dfdG9fYmVfYWZmZWN0ZWQo
IlVQREFURSAkdGFibGUgU0VUICRwcmVmaXhlZF9maWVsZF9uYW1lID0gXCQyIFdIRVJFICRpZF9m
aWVsZF9uYW1lID0gXCQxIiwKKyAgICAgICAgYXJyYXkoJGlkLCBhcnJheV9nZXQoJF9QT1NULCAk
ZmllbGRfbmFtZSkpLAorICAgICAgICAiVXBkYXRlZCB0aGUgJHByZWZpeCAkaWQiLAorICAgICAg
ICAiQ291bGQgbm90IHVwZGF0ZSAkcHJlZml4ICRpZCIpOworCisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK2Z1bmN0aW9uIHJlZ2VuZXJhdGVfbWFuaWZlc3QoKSB7CisgICAgZ2xvYmFsICRkYjsKKwor
ICAgICRnZW5lcmF0b3IgPSBuZXcgTWFuaWZlc3RHZW5lcmF0b3IoJGRiKTsKKyAgICBpZiAoISRn
ZW5lcmF0b3ItPmdlbmVyYXRlKCkpIHsKKyAgICAgICAgbm90aWNlKCJGYWlsZWQgdG8gZ2VuZXJh
dGUgdGhlIG1hbmlmZXN0IChiZWZvcmUgdHJ5aW5nIHRvIHdyaXRlIGludG8gdGhlIGZpbGVzeXN0
ZW0pLiIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKCEkZ2VuZXJh
dG9yLT5zdG9yZSgpKSB7CisgICAgICAgIG5vdGljZSgiRmFpbGVkIHRvIHNhdmUgdGhlIGdlbmVy
YXRlZCBtYW5pZmVzdCBpbnRvIHRoZSBmaWxlc3lzdGVtIik7CisgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworZnVuY3Rpb24gYWRkX2pvYigkdHlw
ZSwgJHBheWxvYWQgPSBudWxsKSB7CisgICAgZ2xvYmFsICRkYjsKKworICAgIGlmICgkZGItPmlu
c2VydF9yb3coJ2pvYnMnLCAnam9iJywgYXJyYXkoJ3R5cGUnID0+ICR0eXBlLCAncGF5bG9hZCcg
PT4gJHBheWxvYWQpKSkKKyAgICAgICAgbm90aWNlKCJBZGRlZCBhIGpvYiBvZiB0eXBlICR0eXBl
Iik7CisgICAgZWxzZQorICAgICAgICBub3RpY2UoIkZhaWxlZCB0byBhZGQgam9iIG9mIHR5cGUg
JHR5cGUiKTsKK30KKworY2xhc3MgQWRtaW5pc3RyYXRpdmVQYWdlIHsKKyAgICBwcml2YXRlICR0
YWJsZTsKKyAgICBwcml2YXRlICRwcmVmaXg7CisgICAgcHJpdmF0ZSAkY29sdW1uX3RvX2JlX29y
ZGVyZWRfYnk7CisgICAgcHJpdmF0ZSAkY29sdW1uX2luZm87CisKKyAgICBmdW5jdGlvbiBfX2Nv
bnN0cnVjdCgkZGIsICR0YWJsZSwgJHByZWZpeCwgJGNvbHVtbl9pbmZvKSB7CisgICAgICAgICR0
aGlzLT5kYiA9ICRkYjsKKyAgICAgICAgJHRoaXMtPnRhYmxlID0gJHRhYmxlOworICAgICAgICAk
dGhpcy0+cHJlZml4ID0gJHByZWZpeDsKKyAgICAgICAgJHRoaXMtPmNvbHVtbl9pbmZvID0gJGNv
bHVtbl9pbmZvOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gbmFtZV90b190aXRsZWNh
c2UoJG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIHVjd29yZHMoc3RyX3JlcGxhY2UoJ18nLCAnICcs
ICRuYW1lKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBjb2x1bW5fbGFiZWwoJG5h
bWUpIHsKKyAgICAgICAgcmV0dXJuIGFycmF5X2dldCgkdGhpcy0+Y29sdW1uX2luZm9bJG5hbWVd
LCAnbGFiZWwnLCAkdGhpcy0+bmFtZV90b190aXRsZWNhc2UoJG5hbWUpKTsKKyAgICB9CisKKyAg
ICBwcml2YXRlIGZ1bmN0aW9uIHJlbmRlcl9mb3JtX2NvbnRyb2xfZm9yX2NvbHVtbigkZWRpdGlu
Z19tb2RlLCAkbmFtZSwgJHZhbHVlID0gJycsICRzaG93X3VwZGF0ZV9idXR0b25faWZfbmVlZGVk
ID0gRkFMU0UpIHsKKyAgICAgICAgJHNob3dfdXBkYXRlX2J1dHRvbiA9IEZBTFNFOworICAgICAg
ICBzd2l0Y2ggKCRlZGl0aW5nX21vZGUpIHsKKyAgICAgICAgY2FzZSAndGV4dCc6CisgICAgICAg
ICAgICBlY2hvIDw8PCBFTkQKKzx0ZXh0YXJlYSBuYW1lPSIkbmFtZSIgcm93cz0iNyIgY29scz0i
NTAiPiR2YWx1ZTwvdGV4dGFyZWE+PGJyPgorRU5EOworICAgICAgICAgICAgJHNob3dfdXBkYXRl
X2J1dHRvbiA9ICRzaG93X3VwZGF0ZV9idXR0b25faWZfbmVlZGVkOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgJGNoZWNrZWRuZXNzID0g
JHRoaXMtPmRiLT5pc190cnVlKCR2YWx1ZSkgPyAnIGNoZWNrZWQnIDogJyc7CisgICAgICAgICAg
ICBlY2hvIDw8PCBFTkQKKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJG5hbWUiJGNoZWNr
ZWRuZXNzPgorRU5EOworICAgICAgICAgICAgJHNob3dfdXBkYXRlX2J1dHRvbiA9ICRzaG93X3Vw
ZGF0ZV9idXR0b25faWZfbmVlZGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J3VybCc6CisgICAgICAgICAgICBlY2hvIDw8PCBFTkQKKzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1l
PSIkbmFtZSIgdmFsdWU9IiR2YWx1ZSIgc2l6ZT0iNzAiPgorRU5EOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoJGVkaXRpbmdfbW9kZSA9
PSAnc3RyaW5nJyk7CisgICAgICAgICAgICBlY2hvIDw8PCBFTkQKKzxpbnB1dCB0eXBlPSJ0ZXh0
IiBuYW1lPSIkbmFtZSIgdmFsdWU9IiR2YWx1ZSI+CitFTkQ7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoJHNob3dfdXBkYXRlX2J1dHRvbikgeworICAgICAgICAgICAgZWNobyA8PDwgRU5ECisK
KzxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJ1cGRhdGUiPlVwZGF0
ZTwvYnV0dG9uPgorRU5EOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVuZGVy
X3RhYmxlKCRjb2x1bW5fdG9fYmVfb3JkZXJlZF9ieSkgeworICAgICAgICAkY29sdW1uX25hbWVz
ID0gYXJyYXlfa2V5cygkdGhpcy0+Y29sdW1uX2luZm8pOworICAgICAgICAkY29sdW1uX3RvX3N1
YmNvbHVtbl9uYW1lcyA9IGFycmF5KCk7CisgICAgICAgIGZvcmVhY2ggKCRjb2x1bW5fbmFtZXMg
YXMgJG5hbWUpIHsKKyAgICAgICAgICAgIGlmIChhcnJheV9nZXQoJHRoaXMtPmNvbHVtbl9pbmZv
WyRuYW1lXSwgJ3ByZV9pbnNlcnRpb24nKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICRzdWJjb2x1bW5zID0gYXJyYXlfZ2V0KCR0aGlzLT5jb2x1bW5faW5mb1skbmFt
ZV0sICdzdWJjb2x1bW5zJywgYXJyYXkoKSk7CisgICAgICAgICAgICBpZiAoISRzdWJjb2x1bW5z
IHx8ICFhcnJheV9nZXQoJHRoaXMtPmNvbHVtbl9pbmZvWyRuYW1lXSwgJ2N1c3RvbScpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgJGNvbHVtbl90b19zdWJjb2x1bW5f
bmFtZXNbJG5hbWVdID0gJHN1YmNvbHVtbnM7CisgICAgICAgIH0KKworICAgICAgICAkcm93c3Bh
bl9pZl9uZWVkZWQgPSAkY29sdW1uX3RvX3N1YmNvbHVtbl9uYW1lcyA/ICcgcm93c3Bhbj0iMiIn
IDogJyc7CisKKyAgICAgICAgJGhlYWRlcnMgPSAiPHRyPjx0ZCRyb3dzcGFuX2lmX25lZWRlZD5J
RDwvdGQ+IjsKKyAgICAgICAgZm9yZWFjaCAoJGNvbHVtbl9uYW1lcyBhcyAkbmFtZSkgeworICAg
ICAgICAgICAgaWYgKGFycmF5X2dldCgkdGhpcy0+Y29sdW1uX2luZm9bJG5hbWVdLCAncHJlX2lu
c2VydGlvbicpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgJGxhYmVs
ID0gaHRtbHNwZWNpYWxjaGFycygkdGhpcy0+Y29sdW1uX2xhYmVsKCRuYW1lKSk7CisgICAgICAg
ICAgICBpZiAoYXJyYXlfZ2V0KCRjb2x1bW5fdG9fc3ViY29sdW1uX25hbWVzLCAkbmFtZSkpIHsK
KyAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkY29sdW1uX3RvX3N1YmNvbHVtbl9uYW1l
c1skbmFtZV0pOworICAgICAgICAgICAgICAgICRoZWFkZXJzIC49ICI8dGQgY29sc3Bhbj1cIiRj
b3VudFwiPiRsYWJlbDwvdGQ+IjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICRoZWFkZXJzIC49ICI8dGQkcm93c3Bhbl9pZl9uZWVkZWQ+JGxhYmVsPC90ZD4iOworICAgICAg
ICB9CisgICAgICAgICRoZWFkZXJzIC49ICI8L3RyPlxuIjsKKworICAgICAgICBpZiAoJGNvbHVt
bl90b19zdWJjb2x1bW5fbmFtZXMpIHsKKyAgICAgICAgICAgICRoZWFkZXJzIC49ICc8dHI+JzsK
KyAgICAgICAgICAgIGZvcmVhY2ggKCRjb2x1bW5fbmFtZXMgYXMgJG5hbWUpIHsKKyAgICAgICAg
ICAgICAgICAkc3ViY29sdW1uX25hbWVzID0gYXJyYXlfZ2V0KCRjb2x1bW5fdG9fc3ViY29sdW1u
X25hbWVzLCAkbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKCEkc3ViY29sdW1uX25hbWVzKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICgk
c3ViY29sdW1uX25hbWVzIGFzICRsYWJlbCkKKyAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnMg
Lj0gJzx0ZD4nIC4gaHRtbHNwZWNpYWxjaGFycygkbGFiZWwpIC4gJzwvdGQ+JzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICRoZWFkZXJzIC49ICI8L3RyPlxuIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGVjaG8gPDw8IEVORAorPHRhYmxlPgorPHRoZWFkPgorJGhlYWRlcnMKKzwvdGhlYWQ+
Cis8dGJvZHk+CisKK0VORDsKKworICAgICAgICBhc3NlcnQoY3R5cGVfYWxudW1fdW5kZXJzY29y
ZSgkY29sdW1uX3RvX2JlX29yZGVyZWRfYnkpKTsKKyAgICAgICAgJHJvd3MgPSAkdGhpcy0+ZGIt
PmZldGNoX3RhYmxlKCR0aGlzLT50YWJsZSwgJHRoaXMtPnByZWZpeCAuICdfJyAuICRjb2x1bW5f
dG9fYmVfb3JkZXJlZF9ieSk7CisgICAgICAgIGlmICgkcm93cykgeworICAgICAgICAgICAgZm9y
ZWFjaCAoJHJvd3MgYXMgJHJvdykgeworICAgICAgICAgICAgICAgICRpZCA9IGludHZhbCgkcm93
WyR0aGlzLT5wcmVmaXggLiAnX2lkJ10pOworCisgICAgICAgICAgICAgICAgJGN1c3RvbV9jZWxs
c19saXN0ID0gYXJyYXkoKTsKKyAgICAgICAgICAgICAgICAkbWF4aW11bV9yb3dzID0gMTsKKyAg
ICAgICAgICAgICAgICBmb3JlYWNoICgkY29sdW1uX25hbWVzIGFzICRuYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhcnJheV9nZXQoJHRoaXMtPmNvbHVtbl9pbmZvWyRuYW1lXSwgJ3By
ZV9pbnNlcnRpb24nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICgkY3VzdG9tID0gYXJyYXlfZ2V0KCR0aGlzLT5jb2x1bW5faW5m
b1skbmFtZV0sICdjdXN0b20nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJGN1c3RvbV9j
ZWxsc19saXN0WyRuYW1lXSA9ICRjdXN0b20oJHJvdyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAkbWF4aW11bV9yb3dzID0gbWF4KCRtYXhpbXVtX3Jvd3MsIGNvdW50KCRjdXN0b21fY2VsbHNf
bGlzdFskbmFtZV0pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICRyb3dzcGFuX2lmX25lZWRlZCA9ICRtYXhpbXVtX3Jvd3MgPiAx
ID8gJyByb3dzcGFuPSInIC4gJG1heGltdW1fcm93cyAuICciJyA6ICcnOworCisgICAgICAgICAg
ICAgICAgZWNobyAiPHRyPlxuPHRkJHJvd3NwYW5faWZfbmVlZGVkPiRpZDwvdGQ+XG4iOworICAg
ICAgICAgICAgICAgIGZvcmVhY2ggKCRjb2x1bW5fbmFtZXMgYXMgJG5hbWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFycmF5X2dldCgkdGhpcy0+Y29sdW1uX2luZm9bJG5hbWVdLCAncHJl
X2luc2VydGlvbicpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJG5hbWUsICRjdXN0b21fY2VsbHNf
bGlzdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZW5kZXJfY3VzdG9tX2Nl
bGxzKGFycmF5X2dldCgkY29sdW1uX3RvX3N1YmNvbHVtbl9uYW1lcywgJG5hbWUpLCAkY3VzdG9t
X2NlbGxzX2xpc3RbJG5hbWVdLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0g
aHRtbHNwZWNpYWxjaGFycygkcm93WyR0aGlzLT5wcmVmaXggLiAnXycgLiAkbmFtZV0sIEVOVF9R
VU9URVMpOworICAgICAgICAgICAgICAgICAgICAkZWRpdGluZ19tb2RlID0gYXJyYXlfZ2V0KCR0
aGlzLT5jb2x1bW5faW5mb1skbmFtZV0sICdlZGl0aW5nX21vZGUnKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCEkZWRpdGluZ19tb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlY2hv
ICI8dGQkcm93c3Bhbl9pZl9uZWVkZWQ+JHZhbHVlPC90ZD5cbiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGVjaG8gPDw8IEVORAorPHRkJHJvd3NwYW5faWZfbmVlZGVkPgorPGZvcm0gbWV0aG9k
PSJQT1NUIj4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImlkIiB2YWx1ZT0iJGlkIj4KKzxp
bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InVwZGF0ZSI+Cis8aW5wdXQg
dHlwZT0iaGlkZGVuIiBuYW1lPSJ1cGRhdGVkLWNvbHVtbiIgdmFsdWU9IiRuYW1lIj4KKworRU5E
OworICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVuZGVyX2Zvcm1fY29udHJvbF9mb3JfY29s
dW1uKCRlZGl0aW5nX21vZGUsICRuYW1lLCAkdmFsdWUsIFRSVUUpOworICAgICAgICAgICAgICAg
ICAgICBlY2hvICI8L2Zvcm0+PC90ZD5cbiI7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWNobyAiPC90cj5cbiI7CisKKyAgICAgICAgICAgICAgICBmb3IgKCRyb3cgPSAx
OyAkcm93IDwgJG1heGltdW1fcm93czsgJHJvdysrKSB7CisgICAgICAgICAgICAgICAgICAgIGVj
aG8gIjx0cj5cbiI7CisgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb2x1bW5fbmFtZXMg
YXMgJG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3Rz
KCRuYW1lLCAkY3VzdG9tX2NlbGxzX2xpc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICR0aGlzLT5yZW5kZXJfY3VzdG9tX2NlbGxzKGFycmF5X2dldCgkY29sdW1uX3RvX3N1YmNvbHVt
bl9uYW1lcywgJG5hbWUpLCAkY3VzdG9tX2NlbGxzX2xpc3RbJG5hbWVdLCAkcm93KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3RyPlxuIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWNobyA8
PDwgRU5ECis8L3Rib2R5PgorPC90YWJsZT4KK0VORDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBy
ZW5kZXJfY3VzdG9tX2NlbGxzKCRzdWJjb2x1bV9uYW1lcywgJHJvd3MsICRyb3dfaW5kZXgpIHsK
KyAgICAgICAgJGNlbGxzID0gYXJyYXlfZ2V0KCRyb3dzLCAkcm93X2luZGV4LCBhcnJheSgpKTsK
KyAgICAgICAgaWYgKCFpc19hcnJheSgkY2VsbHMpKQorICAgICAgICAgICAgJGNlbGxzID0gYXJy
YXkoJGNlbGxzKTsKKworICAgICAgICBpZiAoJHN1YmNvbHVtX25hbWVzICYmIGNvdW50KCRjZWxs
cykgPD0gMSkgeworICAgICAgICAgICAgJGNvbHNwYW4gPSBjb3VudCgkc3ViY29sdW1fbmFtZXMp
OworICAgICAgICAgICAgJGNvbnRlbnQgPSAkY2VsbHMgPyAkY2VsbHNbMF0gOiAnJzsKKyAgICAg
ICAgICAgIGVjaG8gIjx0ZCBjb2xzcGFuPVwiJGNvbHNwYW5cIj4kY29udGVudDwvdGQ+XG4iOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yICgkaSA9IDA7ICRp
IDwgKCRzdWJjb2x1bV9uYW1lcyA/IGNvdW50KCRzdWJjb2x1bV9uYW1lcykgOiAxKTsgJGkrKykK
KyAgICAgICAgICAgIGVjaG8gJzx0ZD4nIC4gYXJyYXlfZ2V0KCRjZWxscywgJGksICcnKSAuICc8
L3RkPic7CisgICAgICAgIGVjaG8gIlxuIjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZW5kZXJf
Zm9ybV90b19hZGQoJHRpdGxlID0gTlVMTCkgeworCisgICAgICAgIGlmICghJHRpdGxlKSAjIENh
bid0IHVzZSB0aGUgdGFibGUgbmFtZSBzaW5jZSBpdCBuZWVkcyB0byBiZSBzaW5ndWxhci4KKyAg
ICAgICAgICAgICR0aXRsZSA9ICdOZXcgJyAuICR0aGlzLT5uYW1lX3RvX3RpdGxlY2FzZSgkdGhp
cy0+cHJlZml4KTsKKworZWNobyA8PDwgRU5ECis8c2VjdGlvbiBjbGFzcz0iYWN0aW9uLWZpZWxk
Ij4KKzxoMj4kdGl0bGU8L2gyPgorPGZvcm0gbWV0aG9kPSJQT1NUIj4KKworRU5EOworICAgICAg
ICBmb3JlYWNoIChhcnJheV9rZXlzKCR0aGlzLT5jb2x1bW5faW5mbykgYXMgJG5hbWUpIHsKKyAg
ICAgICAgICAgICRlZGl0aW5nX21vZGUgPSBhcnJheV9nZXQoJHRoaXMtPmNvbHVtbl9pbmZvWyRu
YW1lXSwgJ2VkaXRpbmdfbW9kZScpOworICAgICAgICAgICAgaWYgKGFycmF5X2dldCgkdGhpcy0+
Y29sdW1uX2luZm9bJG5hbWVdLCAnY3VzdG9tJykgfHwgISRlZGl0aW5nX21vZGUpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICRsYWJlbCA9IGh0bWxzcGVjaWFsY2hh
cnMoJHRoaXMtPmNvbHVtbl9sYWJlbCgkbmFtZSkpOworICAgICAgICAgICAgZWNobyAiPGxhYmVs
PiRsYWJlbDxicj5cbiI7CisgICAgICAgICAgICAkdGhpcy0+cmVuZGVyX2Zvcm1fY29udHJvbF9m
b3JfY29sdW1uKCRlZGl0aW5nX21vZGUsICRuYW1lKTsKKyAgICAgICAgICAgIGVjaG8gIjwvbGFi
ZWw+PGJyPlxuIjsKKyAgICAgICAgfQorCitlY2hvIDw8PCBFTkQKKworPGJ1dHRvbiB0eXBlPSJz
dWJtaXQiIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImFkZCI+QWRkPC9idXR0b24+Cis8L2Zvcm0+Cis8
L3NlY3Rpb24+CitFTkQ7CisKKyAgICB9CisKK30KKworPz4KSW5kZXg6IFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9kYi5waHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2RiLnBocAkocmV2aXNpb24gMCkKKysrIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9kYi5waHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMDEgQEAKKzw/cGhwCisKK2Z1bmN0aW9uIGVuZHNfd2l0aCgkc3RyLCAk
a2V5KSB7CisgICAgcmV0dXJuIHN0cnJwb3MoJHN0ciwgJGtleSkgPT0gc3RybGVuKCRzdHIpIC0g
c3RybGVuKCRrZXkpOworfQorCitmdW5jdGlvbiBjdHlwZV9hbG51bV91bmRlcnNjb3JlKCRzdHIp
IHsKKyAgICByZXR1cm4gY3R5cGVfYWxudW0oc3RyX3JlcGxhY2UoJ18nLCAnJywgJHN0cikpOwor
fQorCitmdW5jdGlvbiAmYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5KCYkYXJyYXksICRrZXkp
IHsKKyAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGFycmF5KSkKKyAgICAgICAgJGFy
cmF5WyRrZXldID0gYXJyYXkoKTsKKyAgICByZXR1cm4gJGFycmF5WyRrZXldOworfQorCitmdW5j
dGlvbiBhcnJheV9nZXQoJGFycmF5LCAka2V5LCAkZGVmYXVsdCA9IE5VTEwpIHsKKyAgICBpZiAo
IWFycmF5X2tleV9leGlzdHMoJGtleSwgJGFycmF5KSkKKyAgICAgICAgcmV0dXJuICRkZWZhdWx0
OworICAgIHJldHVybiAkYXJyYXlbJGtleV07Cit9CisKK2Z1bmN0aW9uIGFycmF5X3NldF9kZWZh
dWx0KCYkYXJyYXksICRrZXksICRkZWZhdWx0KSB7CisgICAgaWYgKCFhcnJheV9rZXlfZXhpc3Rz
KCRrZXksICRhcnJheSkpCisgICAgICAgICRhcnJheVska2V5XSA9ICRkZWZhdWx0OworfQorCisk
X2NvbmZpZyA9IE5VTEw7CisKK2Z1bmN0aW9uIGNvbmZpZygka2V5KSB7CisgICAgZ2xvYmFsICRf
Y29uZmlnOworICAgIGlmICghJF9jb25maWcpCisgICAgICAgICRfY29uZmlnID0ganNvbl9kZWNv
ZGUoZmlsZV9nZXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykgLiAnLy4uLy4uL2NvbmZpZy5q
c29uJyksIHRydWUpOworICAgIHJldHVybiAkX2NvbmZpZ1ska2V5XTsKK30KKworaWYgKGNvbmZp
ZygnZGVidWcnKSkgeworICAgIGVycm9yX3JlcG9ydGluZyhFX0FMTCB8IEVfU1RSSUNUKTsKKyAg
ICBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICdPbicpOworfSBlbHNlCisgICAgZXJyb3JfcmVw
b3J0aW5nKEVfRVJST1IpOworCitjbGFzcyBEYXRhYmFzZQoreworICAgIHByaXZhdGUgJGNvbm5l
Y3Rpb24gPSBmYWxzZTsKKworICAgIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKSB7CisgICAgICAgIGlm
ICgkdGhpcy0+Y29ubmVjdGlvbikKKyAgICAgICAgICAgIHBnX2Nsb3NlKCR0aGlzLT5jb25uZWN0
aW9uKTsKKyAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBmYWxzZTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBpc190cnVlKCR2YWx1ZSkgeworICAgICAgICByZXR1cm4gJHZhbHVlID09ICd0JzsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjb25uZWN0KCkgeworICAgICAgICAkZGF0YWJhc2VDb25m
aWcgPSBjb25maWcoJ2RhdGFiYXNlJyk7CisgICAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gcGdf
Y29ubmVjdCgnaG9zdD0nIC4gJGRhdGFiYXNlQ29uZmlnWydob3N0J10gLiAnIHBvcnQ9JyAuICRk
YXRhYmFzZUNvbmZpZ1sncG9ydCddCisgICAgICAgICAgICAuICcgZGJuYW1lPScgLiAkZGF0YWJh
c2VDb25maWdbJ25hbWUnXSAuICcgdXNlcj0nIC4gJGRhdGFiYXNlQ29uZmlnWyd1c2VybmFtZSdd
IC4gJyBwYXNzd29yZD0nIC4gJGRhdGFiYXNlQ29uZmlnWydwYXNzd29yZCddKTsKKyAgICAgICAg
cmV0dXJuICR0aGlzLT5jb25uZWN0aW9uID8gdHJ1ZSA6IGZhbHNlOworICAgIH0KKworICAgIHBy
aXZhdGUgZnVuY3Rpb24gcHJlZml4ZWRfY29sdW1uX25hbWVzKCRjb2x1bW5zLCAkcHJlZml4ID0g
TlVMTCkgeworICAgICAgICBpZiAoISRwcmVmaXgpCisgICAgICAgICAgICByZXR1cm4gam9pbign
LCAnLCAkY29sdW1ucyk7CisgICAgICAgIHJldHVybiAkcHJlZml4IC4gJ18nIC4gam9pbignLCAn
IC4gJHByZWZpeCAuICdfJywgJGNvbHVtbnMpOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rp
b24gcHJlZml4ZWRfbmFtZSgkY29sdW1uLCAkcHJlZml4ID0gTlVMTCkgeworICAgICAgICByZXR1
cm4gJHByZWZpeCA/ICRwcmVmaXggLiAnXycgLiAkY29sdW1uIDogJGNvbHVtbjsKKyAgICB9CisK
KyAgICBwcml2YXRlIGZ1bmN0aW9uIHByZXBhcmVfcGFyYW1zKCRwYXJhbXMsICYkcGxhY2Vob2xk
ZXJzLCAmJHZhbHVlcykgeworICAgICAgICAkY29sdW1uX25hbWVzID0gYXJyYXlfa2V5cygkcGFy
YW1zKTsKKworICAgICAgICAkaSA9IGNvdW50KCR2YWx1ZXMpICsgMTsKKyAgICAgICAgZm9yZWFj
aCAoJGNvbHVtbl9uYW1lcyBhcyAkbmFtZSkgeworICAgICAgICAgICAgYXNzZXJ0KGN0eXBlX2Fs
bnVtX3VuZGVyc2NvcmUoJG5hbWUpKTsKKyAgICAgICAgICAgIGFycmF5X3B1c2goJHBsYWNlaG9s
ZGVycywgJyQnIC4gJGkpOworICAgICAgICAgICAgYXJyYXlfcHVzaCgkdmFsdWVzLCAkcGFyYW1z
WyRuYW1lXSk7CisgICAgICAgICAgICAkaSsrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
ICRjb2x1bW5fbmFtZXM7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5zZXJ0X3JvdygkdGFibGUs
ICRwcmVmaXgsICRwYXJhbXMsICRyZXR1cm5pbmcgPSAnaWQnKSB7CisgICAgICAgICRwbGFjZWhv
bGRlcnMgPSBhcnJheSgpOworICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKKyAgICAgICAgJGNv
bHVtbl9uYW1lcyA9ICR0aGlzLT5wcmVwYXJlX3BhcmFtcygkcGFyYW1zLCAkcGxhY2Vob2xkZXJz
LCAkdmFsdWVzKTsKKworICAgICAgICBhc3NlcnQoISRwcmVmaXggfHwgY3R5cGVfYWxudW1fdW5k
ZXJzY29yZSgkcHJlZml4KSk7CisgICAgICAgICRjb2x1bW5fbmFtZXMgPSAkdGhpcy0+cHJlZml4
ZWRfY29sdW1uX25hbWVzKCRjb2x1bW5fbmFtZXMsICRwcmVmaXgpOworICAgICAgICAkcGxhY2Vo
b2xkZXJzID0gam9pbignLCAnLCAkcGxhY2Vob2xkZXJzKTsKKworICAgICAgICBpZiAoJHJldHVy
bmluZykgeworICAgICAgICAgICAgJHJldHVybmluZ19jb2x1bW5fbmFtZSA9ICR0aGlzLT5wcmVm
aXhlZF9uYW1lKCRyZXR1cm5pbmcsICRwcmVmaXgpOworICAgICAgICAgICAgJHJvd3MgPSAkdGhp
cy0+cXVlcnlfYW5kX2ZldGNoX2FsbCgiSU5TRVJUIElOVE8gJHRhYmxlICgkY29sdW1uX25hbWVz
KSBWQUxVRVMgKCRwbGFjZWhvbGRlcnMpIFJFVFVSTklORyAkcmV0dXJuaW5nX2NvbHVtbl9uYW1l
IiwgJHZhbHVlcyk7CisgICAgICAgICAgICByZXR1cm4gJHJvd3MgPyAkcm93c1swXVskcmV0dXJu
aW5nX2NvbHVtbl9uYW1lXSA6IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJHRo
aXMtPnF1ZXJ5X2FuZF9nZXRfYWZmZWN0ZWRfcm93cygiSU5TRVJUIElOVE8gJHRhYmxlICgkY29s
dW1uX25hbWVzKSBWQUxVRVMgKCRwbGFjZWhvbGRlcnMpIiwgJHZhbHVlcykgPT0gMTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzZWxlY3Rfb3JfaW5zZXJ0X3JvdygkdGFibGUsICRwcmVmaXgsICRz
ZWxlY3RfcGFyYW1zLCAkaW5zZXJ0X3BhcmFtcyA9IE5VTEwsICRyZXR1cm5pbmcgPSAnaWQnKSB7
CisgICAgICAgICR2YWx1ZXMgPSBhcnJheSgpOworCisgICAgICAgICRzZWxlY3RfcGxhY2Vob2xk
ZXJzID0gYXJyYXkoKTsKKyAgICAgICAgJHNlbGVjdF9jb2x1bW5fbmFtZXMgPSAkdGhpcy0+cHJl
cGFyZV9wYXJhbXMoJHNlbGVjdF9wYXJhbXMsICRzZWxlY3RfcGxhY2Vob2xkZXJzLCAkdmFsdWVz
KTsKKyAgICAgICAgJHNlbGVjdF92YWx1ZXMgPSBhcnJheV9zbGljZSgkdmFsdWVzLCAwKTsKKwor
ICAgICAgICBpZiAoJGluc2VydF9wYXJhbXMgPT09IE5VTEwpCisgICAgICAgICAgICAkaW5zZXJ0
X3BhcmFtcyA9ICRzZWxlY3RfcGFyYW1zOworICAgICAgICAkaW5zZXJ0X3BsYWNlaG9sZGVycyA9
IGFycmF5KCk7CisgICAgICAgICRpbnNlcnRfY29sdW1uX25hbWVzID0gJHRoaXMtPnByZXBhcmVf
cGFyYW1zKCRpbnNlcnRfcGFyYW1zLCAkaW5zZXJ0X3BsYWNlaG9sZGVycywgJHZhbHVlcyk7CisK
KyAgICAgICAgYXNzZXJ0KCEhJHJldHVybmluZyk7CisgICAgICAgIGFzc2VydCghJHByZWZpeCB8
fCBjdHlwZV9hbG51bV91bmRlcnNjb3JlKCRwcmVmaXgpKTsKKyAgICAgICAgJHJldHVybmluZ19j
b2x1bW5fbmFtZSA9ICRyZXR1cm5pbmcgPT0gJyonID8gJyonIDogJHRoaXMtPnByZWZpeGVkX25h
bWUoJHJldHVybmluZywgJHByZWZpeCk7CisgICAgICAgICRzZWxlY3RfY29sdW1uX25hbWVzID0g
JHRoaXMtPnByZWZpeGVkX2NvbHVtbl9uYW1lcygkc2VsZWN0X2NvbHVtbl9uYW1lcywgJHByZWZp
eCk7CisgICAgICAgICRzZWxlY3RfcGxhY2Vob2xkZXJzID0gam9pbignLCAnLCAkc2VsZWN0X3Bs
YWNlaG9sZGVycyk7CisgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgJHJldHVybmluZ19jb2x1bW5f
bmFtZSBGUk9NICR0YWJsZSBXSEVSRSAoJHNlbGVjdF9jb2x1bW5fbmFtZXMpID0gKCRzZWxlY3Rf
cGxhY2Vob2xkZXJzKSI7CisKKyAgICAgICAgJGluc2VydF9jb2x1bW5fbmFtZXMgPSAkdGhpcy0+
cHJlZml4ZWRfY29sdW1uX25hbWVzKCRpbnNlcnRfY29sdW1uX25hbWVzLCAkcHJlZml4KTsKKyAg
ICAgICAgJGluc2VydF9wbGFjZWhvbGRlcnMgPSBqb2luKCcsICcsICRpbnNlcnRfcGxhY2Vob2xk
ZXJzKTsKKyAgICAgICAgJHJvd3MgPSAkdGhpcy0+cXVlcnlfYW5kX2ZldGNoX2FsbCgiSU5TRVJU
IElOVE8gJHRhYmxlICgkaW5zZXJ0X2NvbHVtbl9uYW1lcykgU0VMRUNUICRpbnNlcnRfcGxhY2Vo
b2xkZXJzIFdIRVJFIE5PVCBFWElTVFMKKyAgICAgICAgICAgICgkcXVlcnkpIFJFVFVSTklORyAk
cmV0dXJuaW5nX2NvbHVtbl9uYW1lIiwgJHZhbHVlcyk7CisgICAgICAgIGlmICghJHJvd3MpCisg
ICAgICAgICAgICAkcm93cyA9ICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCRxdWVyeSwgJHNl
bGVjdF92YWx1ZXMpOworCisgICAgICAgIHJldHVybiAkcm93cyA/ICgkcmV0dXJuaW5nID09ICcq
JyA/ICRyb3dzWzBdIDogJHJvd3NbMF1bJHJldHVybmluZ19jb2x1bW5fbmFtZV0pIDogTlVMTDsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBzZWxlY3RfZmlyc3Rfcm93KCR0YWJsZSwgJHByZWZpeCwg
JHBhcmFtcywgJG9yZGVyX2J5ID0gTlVMTCkgeworICAgICAgICAkcGxhY2Vob2xkZXJzID0gYXJy
YXkoKTsKKyAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CisgICAgICAgICRjb2x1bW5fbmFtZXMg
PSAkdGhpcy0+cHJlZml4ZWRfY29sdW1uX25hbWVzKCR0aGlzLT5wcmVwYXJlX3BhcmFtcygkcGFy
YW1zLCAkcGxhY2Vob2xkZXJzLCAkdmFsdWVzKSwgJHByZWZpeCk7CisgICAgICAgICRwbGFjZWhv
bGRlcnMgPSBqb2luKCcsICcsICRwbGFjZWhvbGRlcnMpOworICAgICAgICAkcXVlcnkgPSAiU0VM
RUNUICogRlJPTSAkdGFibGUgV0hFUkUgKCRjb2x1bW5fbmFtZXMpID0gKCRwbGFjZWhvbGRlcnMp
IjsKKyAgICAgICAgaWYgKCRvcmRlcl9ieSkgeworICAgICAgICAgICAgYXNzZXJ0KCFjdHlwZV9h
bG51bV91bmRlcnNjb3JlKCRvcmRlcl9ieSkpOworICAgICAgICAgICAgJHF1ZXJ5IC49ICcgT1JE
RVIgQlkgJyAuICR0aGlzLT5wcmVmaXhlZF9uYW1lKCRvcmRlcl9ieSwgJHByZWZpeCk7CisgICAg
ICAgIH0KKyAgICAgICAgJHJvd3MgPSAkdGhpcy0+cXVlcnlfYW5kX2ZldGNoX2FsbCgkcXVlcnkg
LiAnIExJTUlUIDEnLCAkdmFsdWVzKTsKKworICAgICAgICByZXR1cm4gJHJvd3MgPyAkcm93c1sw
XSA6IE5VTEw7CisgICAgfQorCisgICAgZnVuY3Rpb24gcXVlcnlfYW5kX2dldF9hZmZlY3RlZF9y
b3dzKCRxdWVyeSwgJHBhcmFtcyA9IGFycmF5KCkpIHsKKyAgICAgICAgaWYgKCEkdGhpcy0+Y29u
bmVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgJHJlc3VsdCA9IHBn
X3F1ZXJ5X3BhcmFtcygkdGhpcy0+Y29ubmVjdGlvbiwgJHF1ZXJ5LCAkcGFyYW1zKTsKKyAgICAg
ICAgaWYgKCEkcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1
cm4gcGdfYWZmZWN0ZWRfcm93cygkcmVzdWx0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBxdWVy
eV9hbmRfZmV0Y2hfYWxsKCRxdWVyeSwgJHBhcmFtcyA9IGFycmF5KCkpIHsKKyAgICAgICAgaWYg
KCEkdGhpcy0+Y29ubmVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
JHJlc3VsdCA9IHBnX3F1ZXJ5X3BhcmFtcygkdGhpcy0+Y29ubmVjdGlvbiwgJHF1ZXJ5LCAkcGFy
YW1zKTsKKyAgICAgICAgaWYgKCEkcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gcGdfZmV0Y2hfYWxsKCRyZXN1bHQpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHF1ZXJ5KCRxdWVyeSwgJHBhcmFtcyA9IGFycmF5KCkpIHsKKyAgICAgICAgaWYgKCEkdGhp
cy0+Y29ubmVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJu
IHBnX3F1ZXJ5X3BhcmFtcygkdGhpcy0+Y29ubmVjdGlvbiwgJHF1ZXJ5LCAkcGFyYW1zKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmZXRjaF9uZXh0X3JvdygkcmVzdWx0KSB7CisgICAgICAgIHJl
dHVybiBwZ19mZXRjaF9hc3NvYygkcmVzdWx0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmZXRj
aF90YWJsZSgkdGFibGVfbmFtZSwgJGNvbHVtbl90b19iZV9vcmRlcmVkX2J5ID0gbnVsbCkgewor
ICAgICAgICBpZiAoISR0aGlzLT5jb25uZWN0aW9uIHx8ICFjdHlwZV9hbG51bV91bmRlcnNjb3Jl
KCR0YWJsZV9uYW1lKSB8fCAoJGNvbHVtbl90b19iZV9vcmRlcmVkX2J5ICYmICFjdHlwZV9hbG51
bV91bmRlcnNjb3JlKCRjb2x1bW5fdG9fYmVfb3JkZXJlZF9ieSkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAkY2xhdXNlcyA9ICcnOworICAgICAgICBpZiAoJGNvbHVtbl90
b19iZV9vcmRlcmVkX2J5KQorICAgICAgICAgICAgJGNsYXVzZXMgLj0gJ09SREVSIEJZICcgLiAk
Y29sdW1uX3RvX2JlX29yZGVyZWRfYnk7CisgICAgICAgIHJldHVybiAkdGhpcy0+cXVlcnlfYW5k
X2ZldGNoX2FsbCgiU0VMRUNUICogRlJPTSAkdGFibGVfbmFtZSAkY2xhdXNlcyIpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGJlZ2luX3RyYW5zYWN0aW9uKCkgeworICAgICAgICByZXR1cm4gJHRo
aXMtPmNvbm5lY3Rpb24gYW5kIHBnX3F1ZXJ5KCR0aGlzLT5jb25uZWN0aW9uLCAiQkVHSU4iKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjb21taXRfdHJhbnNhY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiAkdGhpcy0+Y29ubmVjdGlvbiBhbmQgcGdfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sICdD
T01NSVQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByb2xsYmFja190cmFuc2FjdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuICR0aGlzLT5jb25uZWN0aW9uIGFuZCBwZ19xdWVyeSgkdGhpcy0+Y29u
bmVjdGlvbiwgJ1JPTExCQUNLJyk7CisgICAgfQorCit9CisKKz8+CkluZGV4OiBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRlci5w
aHAJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1
ZGUvanNvbi1oZWFkZXIucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKzw/cGhw
CisKK3JlcXVpcmVfb25jZSgnZGIucGhwJyk7CisKK2hlYWRlcignQ29udGVudC10eXBlOiBhcHBs
aWNhdGlvbi9qc29uJyk7CiskbWF4YWdlID0gY29uZmlnKCdqc29uQ2FjaGVNYXhBZ2UnKTsKK2hl
YWRlcignRXhwaXJlczogJyAuIGdtZGF0ZSgnRCwgZCBNIFkgSDppOnMnLCB0aW1lKCkgKyAkbWF4
YWdlKSAuICcgR01UJyk7CitoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG1heGFnZT0kbWF4YWdlIik7
CisKK2Z1bmN0aW9uIGV4aXRfd2l0aF9lcnJvcigkc3RhdHVzLCAkZGV0YWlscyA9IGFycmF5KCkp
IHsKKyAgICAkZGV0YWlsc1snc3RhdHVzJ10gPSAkc3RhdHVzOworICAgIG1lcmdlX2FkZGl0aW9u
YWxfZGV0YWlscygkZGV0YWlscyk7CisKKyAgICBlY2hvIGpzb25fZW5jb2RlKCRkZXRhaWxzKTsK
KyAgICBleGl0KDEpOworfQorCitmdW5jdGlvbiBlY2hvX3N1Y2Nlc3MoJGRldGFpbHMgPSBhcnJh
eSgpKSB7CisgICAgJGRldGFpbHNbJ3N0YXR1cyddID0gJ09LJzsKKyAgICBtZXJnZV9hZGRpdGlv
bmFsX2RldGFpbHMoJGRldGFpbHMpOworCisgICAgZWNobyBqc29uX2VuY29kZSgkZGV0YWlscyk7
Cit9CisKK2Z1bmN0aW9uIGV4aXRfd2l0aF9zdWNjZXNzKCRkZXRhaWxzID0gYXJyYXkoKSkgewor
ICAgIGVjaG9fc3VjY2VzcygkZGV0YWlscyk7CisgICAgZXhpdCgwKTsKK30KKworJGFkZGl0aW9u
YWxfZXhpdF9kZXRhaWxzID0gYXJyYXkoKTsKKworZnVuY3Rpb24gc2V0X2V4aXRfZGV0YWlsKCRu
YW1lLCAkdmFsdWUpIHsKKyAgICBnbG9iYWwgJGFkZGl0aW9uYWxfZXhpdF9kZXRhaWxzOworICAg
ICRhZGRpdGlvbmFsX2V4aXRfZGV0YWlsc1skbmFtZV0gPSAkdmFsdWU7Cit9CisKK2Z1bmN0aW9u
IG1lcmdlX2FkZGl0aW9uYWxfZGV0YWlscygmJGRldGFpbHMpIHsKKyAgICBnbG9iYWwgJGFkZGl0
aW9uYWxfZXhpdF9kZXRhaWxzOworICAgIGZvcmVhY2ggKCRhZGRpdGlvbmFsX2V4aXRfZGV0YWls
cyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKKyAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRu
YW1lLCAkZGV0YWlscykpCisgICAgICAgICAgICAkZGV0YWlsc1skbmFtZV0gPSAkdmFsdWU7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBjb25uZWN0KCkgeworICAgICRkYiA9IG5ldyBEYXRhYmFzZTsK
KyAgICBpZiAoISRkYi0+Y29ubmVjdCgpKQorICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0RhdGFi
YXNlQ29ubmVjdGlvbkVycm9yJyk7CisgICAgcmV0dXJuICRkYjsKK30KKworZnVuY3Rpb24gY2Ft
ZWxfY2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgkbmFtZSkgeworICAgIHJldHVy
biBpbXBsb2RlKCcnLCBhcnJheV9tYXAoJ3VjZmlyc3QnLCBleHBsb2RlKCdfJywgJG5hbWUpKSk7
Cit9CisKK2Z1bmN0aW9uIHJlcXVpcmVfZm9ybWF0KCRrZXksICR2YWx1ZSwgJHBhdHRlcm4pIHsK
KyAgICBpZiAoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZSkpCisgICAgICAgIGV4aXRfd2l0
aF9lcnJvcignSW52YWxpZCcgLiBjYW1lbF9jYXNlX3dvcmRzX3NlcGFyYXRlZF9ieV91bmRlcnNj
b3JlKCRrZXkpLCBhcnJheSgndmFsdWUnID0+ICR2YWx1ZSkpOworfQorCitmdW5jdGlvbiByZXF1
aXJlX2V4aXN0ZW5jZV9vZigkYXJyYXksICRsaXN0X29mX2FyZ3VtZW50cywgJHByZWZpeCA9ICcn
KSB7CisgICAgaWYgKCRwcmVmaXgpCisgICAgICAgICRwcmVmaXggLj0gJ18nOworICAgIGZvcmVh
Y2ggKCRsaXN0X29mX2FyZ3VtZW50cyBhcyAka2V5ID0+ICRwYXR0ZXJuKSB7CisgICAgICAgICRu
YW1lID0gY2FtZWxfY2FzZV93b3Jkc19zZXBhcmF0ZWRfYnlfdW5kZXJzY29yZSgkcHJlZml4IC4g
JGtleSk7CisgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkYXJyYXkpKQorICAg
ICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCRuYW1lIC4gJ05vdFNwZWNpZmllZCcpOworICAgICAg
ICByZXF1aXJlX2Zvcm1hdCgkbmFtZSwgJGFycmF5WyRrZXldLCAkcGF0dGVybik7CisgICAgfQor
fQorCis/PgpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL21h
bmlmZXN0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L2luY2x1ZGUvbWFuaWZlc3QucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9pbmNsdWRlL21hbmlmZXN0LnBocAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzOCBAQAorPD9waHAKKworY2xhc3MgTWFuaWZlc3RHZW5lcmF0b3IgeworICAgIHByaXZh
dGUgJGRiOworICAgIHByaXZhdGUgJG1hbmlmZXN0OworCisgICAgLy8gRklYTUU6IENvbXB1dGUg
dGhpcyB2YWx1ZSBmcm9tIGNvbmZpZy5qc29uCisgICAgY29uc3QgTUFOSUZFU1RfUEFUSCA9ICcu
Li9kYXRhL21hbmlmZXN0Lmpzb24nOworCisgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRiKSB7
CisgICAgICAgICR0aGlzLT5kYiA9ICRkYjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZW5lcmF0
ZSgpIHsKKyAgICAgICAgJGNvbmZpZ190YWJsZSA9ICR0aGlzLT5kYi0+ZmV0Y2hfdGFibGUoJ3Rl
c3RfY29uZmlndXJhdGlvbnMnKTsKKyAgICAgICAgJHBsYXRmb3JtX3RhYmxlID0gJHRoaXMtPmRi
LT5mZXRjaF90YWJsZSgncGxhdGZvcm1zJyk7CisgICAgICAgICRyZXBvc2l0b3JpZXNfdGFibGUg
PSAkdGhpcy0+ZGItPmZldGNoX3RhYmxlKCdyZXBvc2l0b3JpZXMnKTsKKyAgICAgICAgJHRoaXMt
Pm1hbmlmZXN0ID0gYXJyYXkoCisgICAgICAgICAgICAndGVzdHMnID0+ICR0aGlzLT50ZXN0cygp
LAorICAgICAgICAgICAgJ21ldHJpY3MnID0+ICR0aGlzLT5tZXRyaWNzKCksCisgICAgICAgICAg
ICAnYWxsJyA9PiAkdGhpcy0+cGxhdGZvcm1zKCRjb25maWdfdGFibGUsICRwbGF0Zm9ybV90YWJs
ZSwgZmFsc2UpLAorICAgICAgICAgICAgJ2Rhc2hib2FyZCcgPT4gJHRoaXMtPnBsYXRmb3Jtcygk
Y29uZmlnX3RhYmxlLCAkcGxhdGZvcm1fdGFibGUsIHRydWUpLAorICAgICAgICAgICAgJ3JlcG9z
aXRvcmllcycgPT4gJHRoaXMtPnJlcG9zaXRvcmllcygkcmVwb3NpdG9yaWVzX3RhYmxlKSwKKyAg
ICAgICAgICAgICdidWlsZGVycycgPT4gJHRoaXMtPmJ1aWxkZXJzKCksCisgICAgICAgICAgICAn
YnVnVHJhY2tlcnMnID0+ICR0aGlzLT5idWdfdHJhY2tlcnMoJHJlcG9zaXRvcmllc190YWJsZSks
CisgICAgICAgICk7CisgICAgICAgIHJldHVybiAkdGhpcy0+bWFuaWZlc3Q7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc3RvcmUoKSB7CisgICAgICAgIHJldHVybiBmaWxlX3B1dF9jb250ZW50cyhz
ZWxmOjpNQU5JRkVTVF9QQVRILCBqc29uX2VuY29kZSgkdGhpcy0+bWFuaWZlc3QpKTsKKyAgICB9
CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHRlc3RzKCkgeworICAgICAgICAkdGVzdHMgPSBhcnJh
eSgpOworICAgICAgICAkdGVzdHNfdGFibGUgPSAkdGhpcy0+ZGItPmZldGNoX3RhYmxlKCd0ZXN0
cycpOworICAgICAgICBpZiAoISR0ZXN0c190YWJsZSkKKyAgICAgICAgICAgIHJldHVybiAkdGVz
dHM7CisgICAgICAgIGZvcmVhY2ggKCR0ZXN0c190YWJsZSBhcyAkdGVzdF9yb3cpIHsKKyAgICAg
ICAgICAgICR0ZXN0c1skdGVzdF9yb3dbJ3Rlc3RfaWQnXV0gPSBhcnJheSgKKyAgICAgICAgICAg
ICAgICAnbmFtZScgPT4gJHRlc3Rfcm93Wyd0ZXN0X25hbWUnXSwKKyAgICAgICAgICAgICAgICAn
dXJsJyA9PiAkdGVzdF9yb3dbJ3Rlc3RfdXJsJ10sCisgICAgICAgICAgICAgICAgJ3BhcmVudElk
JyA9PiAkdGVzdF9yb3dbJ3Rlc3RfcGFyZW50J10sCisgICAgICAgICAgICApOworICAgICAgICB9
CisgICAgICAgIHJldHVybiAkdGVzdHM7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBt
ZXRyaWNzKCkgeworICAgICAgICAkbWV0cmljcyA9IGFycmF5KCk7CisgICAgICAgICRtZXRyaWNz
X3RhYmxlID0gJHRoaXMtPmRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCdTRUxFQ1QgKiBGUk9NIHRl
c3RfbWV0cmljcyBMRUZUIEpPSU4gYWdncmVnYXRvcnMgT04gbWV0cmljX2FnZ3JlZ2F0b3IgPSBh
Z2dyZWdhdG9yX2lkJyk7CisgICAgICAgIGlmICghJG1ldHJpY3NfdGFibGUpCisgICAgICAgICAg
ICByZXR1cm4gJG1ldHJpY3M7CisgICAgICAgIGZvcmVhY2ggKCRtZXRyaWNzX3RhYmxlIGFzICRy
b3cpIHsKKyAgICAgICAgICAgICRtZXRyaWNzWyRyb3dbJ21ldHJpY19pZCddXSA9IGFycmF5KAor
ICAgICAgICAgICAgICAgICduYW1lJyA9PiAkcm93WydtZXRyaWNfbmFtZSddLAorICAgICAgICAg
ICAgICAgICd0ZXN0JyA9PiAkcm93WydtZXRyaWNfdGVzdCddLAorICAgICAgICAgICAgICAgICdh
Z2dyZWdhdG9yJyA9PiAkcm93WydhZ2dyZWdhdG9yX25hbWUnXSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuICRtZXRyaWNzOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gcGxhdGZv
cm1zKCRjb25maWdfdGFibGUsICRwbGF0Zm9ybV90YWJsZSwgJGlzX2Rhc2hib2FyZCkgeworICAg
ICAgICAkcGxhdGZvcm1fbWV0cmljcyA9IGFycmF5KCk7CisgICAgICAgIGlmICgkY29uZmlnX3Rh
YmxlKSB7CisgICAgICAgICAgICBmb3JlYWNoICgkY29uZmlnX3RhYmxlIGFzICRjb25maWdfcm93
KSB7CisgICAgICAgICAgICAgICAgaWYgKCRpc19kYXNoYm9hcmQgJiYgISR0aGlzLT5kYi0+aXNf
dHJ1ZSgkY29uZmlnX3Jvd1snY29uZmlnX2lzX2luX2Rhc2hib2FyZCddKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAkcGxhdGZvcm0gPSAmYXJyYXlf
ZW5zdXJlX2l0ZW1faGFzX2FycmF5KCRwbGF0Zm9ybV9tZXRyaWNzLCAkY29uZmlnX3Jvd1snY29u
ZmlnX3BsYXRmb3JtJ10pOworICAgICAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJGNvbmZpZ19y
b3dbJ2NvbmZpZ19tZXRyaWMnXSwgJHBsYXRmb3JtKSkKKyAgICAgICAgICAgICAgICAgICAgYXJy
YXlfcHVzaCgkcGxhdGZvcm0sICRjb25maWdfcm93Wydjb25maWdfbWV0cmljJ10pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgICRwbGF0Zm9ybXMgPSBhcnJheSgpOworICAgICAg
ICBpZiAoJHBsYXRmb3JtX3RhYmxlKSB7CisgICAgICAgICAgICBmb3JlYWNoICgkcGxhdGZvcm1f
dGFibGUgYXMgJHBsYXRmb3JtX3JvdykgeworICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+ZGIt
PmlzX3RydWUoJHBsYXRmb3JtX3Jvd1sncGxhdGZvcm1faGlkZGVuJ10pKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAkaWQgPSAkcGxhdGZvcm1fcm93Wydw
bGF0Zm9ybV9pZCddOworICAgICAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRpZCwg
JHBsYXRmb3JtX21ldHJpY3MpKQorICAgICAgICAgICAgICAgICAgICAkcGxhdGZvcm1zWyRpZF0g
PSBhcnJheSgnbmFtZScgPT4gJHBsYXRmb3JtX3Jvd1sncGxhdGZvcm1fbmFtZSddLCAnbWV0cmlj
cycgPT4gJHBsYXRmb3JtX21ldHJpY3NbJGlkXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuICRwbGF0Zm9ybXM7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlv
biByZXBvc2l0b3JpZXMoJHJlcG9zaXRvcmllc190YWJsZSkgeworICAgICAgICAkcmVwb3NpdG9y
aWVzID0gYXJyYXkoKTsKKyAgICAgICAgaWYgKCEkcmVwb3NpdG9yaWVzX3RhYmxlKQorICAgICAg
ICAgICAgcmV0dXJuICRyZXBvc2l0b3JpZXM7CisgICAgICAgIGZvcmVhY2ggKCRyZXBvc2l0b3Jp
ZXNfdGFibGUgYXMgJHJvdykKKyAgICAgICAgICAgICRyZXBvc2l0b3JpZXNbJHJvd1sncmVwb3Np
dG9yeV9uYW1lJ11dID0gYXJyYXkoJ3VybCcgPT4gJHJvd1sncmVwb3NpdG9yeV91cmwnXSwgJ2Js
YW1lVXJsJyA9PiAkcm93WydyZXBvc2l0b3J5X2JsYW1lX3VybCddKTsKKworICAgICAgICByZXR1
cm4gJHJlcG9zaXRvcmllczsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkZXJz
KCkgeworICAgICAgICAkYnVpbGRlcnNfdGFibGUgPSAkdGhpcy0+ZGItPmZldGNoX3RhYmxlKCdi
dWlsZGVycycpOworICAgICAgICBpZiAoISRidWlsZGVyc190YWJsZSkKKyAgICAgICAgICAgIHJl
dHVybiBhcnJheSgpOworICAgICAgICAkYnVpbGRlcnMgPSBhcnJheSgpOworICAgICAgICBmb3Jl
YWNoICgkYnVpbGRlcnNfdGFibGUgYXMgJHJvdykKKyAgICAgICAgICAgICRidWlsZGVyc1skcm93
WydidWlsZGVyX2lkJ11dID0gYXJyYXkoJ25hbWUnID0+ICRyb3dbJ2J1aWxkZXJfbmFtZSddLCAn
YnVpbGRVcmwnID0+ICRyb3dbJ2J1aWxkZXJfYnVpbGRfdXJsJ10pOworCisgICAgICAgIHJldHVy
biAkYnVpbGRlcnM7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBidWdfdHJhY2tlcnMo
JHJlcG9zaXRvcmllc190YWJsZSkgeworICAgICAgICAkcmVwb3NpdG9yeV9pZF90b19uYW1lID0g
YXJyYXkoKTsKKyAgICAgICAgaWYgKCRyZXBvc2l0b3JpZXNfdGFibGUpIHsKKyAgICAgICAgICAg
IGZvcmVhY2ggKCRyZXBvc2l0b3JpZXNfdGFibGUgYXMgJHJvdykKKyAgICAgICAgICAgICAgICAk
cmVwb3NpdG9yeV9pZF90b19uYW1lWyRyb3dbJ3JlcG9zaXRvcnlfaWQnXV0gPSAkcm93WydyZXBv
c2l0b3J5X25hbWUnXTsKKyAgICAgICAgfQorCisgICAgICAgICR0cmFja2VyX2lkX3RvX3JlcG9z
aXRvcmllcyA9IGFycmF5KCk7CisgICAgICAgICR0cmFja2VyX3JlcG9zaXRvcmllc190YWJsZSA9
ICR0aGlzLT5kYi0+ZmV0Y2hfdGFibGUoJ3RyYWNrZXJfcmVwb3NpdG9yaWVzJyk7CisgICAgICAg
IGlmICgkdHJhY2tlcl9yZXBvc2l0b3JpZXNfdGFibGUpIHsKKyAgICAgICAgICAgIGZvcmVhY2gg
KCR0cmFja2VyX3JlcG9zaXRvcmllc190YWJsZSBhcyAkcm93KSB7CisgICAgICAgICAgICAgICAg
YXJyYXlfcHVzaChhcnJheV9lbnN1cmVfaXRlbV9oYXNfYXJyYXkoJHRyYWNrZXJfaWRfdG9fcmVw
b3NpdG9yaWVzLCAkcm93Wyd0cmFjcmVwb190cmFja2VyJ10pLAorICAgICAgICAgICAgICAgICAg
ICAkcmVwb3NpdG9yeV9pZF90b19uYW1lWyRyb3dbJ3RyYWNyZXBvX3JlcG9zaXRvcnknXV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgJGJ1Z190cmFja2VycyA9IGFycmF5
KCk7CisgICAgICAgICRidWdfdHJhY2tlcnNfdGFibGUgPSAkdGhpcy0+ZGItPmZldGNoX3RhYmxl
KCdidWdfdHJhY2tlcnMnKTsKKyAgICAgICAgaWYgKCRidWdfdHJhY2tlcnNfdGFibGUpIHsKKyAg
ICAgICAgICAgIGZvcmVhY2ggKCRidWdfdHJhY2tlcnNfdGFibGUgYXMgJHJvdykgeworICAgICAg
ICAgICAgICAgICRidWdfdHJhY2tlcnNbJHJvd1sndHJhY2tlcl9uYW1lJ11dID0gYXJyYXkoJ25l
d0J1Z1VybCcgPT4gJHJvd1sndHJhY2tlcl9uZXdfYnVnX3VybCddLAorICAgICAgICAgICAgICAg
ICAgICAncmVwb3NpdG9yaWVzJyA9PiAkdHJhY2tlcl9pZF90b19yZXBvc2l0b3JpZXNbJHJvd1sn
dHJhY2tlcl9pZCddXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gJGJ1Z190cmFja2VyczsKKyAgICB9Cit9CisKKz8+CkluZGV4OiBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2luY2x1ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL3JlcG9ydC1wcm9jZXNz
b3IucGhwCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9p
bmNsdWRlL3JlcG9ydC1wcm9jZXNzb3IucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAx
IEBACis8P3BocAorCityZXF1aXJlX29uY2UoJy4uL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwJyk7
CisKK2NsYXNzIFJlcG9ydFByb2Nlc3NvciB7CisgICAgcHJpdmF0ZSAkZGI7CisgICAgcHJpdmF0
ZSAkbmFtZV90b19hZ2dyZWdhdG9yOworICAgIHByaXZhdGUgJHJlcG9ydF9pZDsKKyAgICBwcml2
YXRlICRydW5zOworCisgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRiKSB7CisgICAgICAgICR0
aGlzLT5kYiA9ICRkYjsKKyAgICAgICAgJHRoaXMtPm5hbWVfdG9fYWdncmVnYXRvciA9IGFycmF5
KCk7CisgICAgICAgICRhZ2dyZWdhdG9yX3RhYmxlID0gJGRiLT5mZXRjaF90YWJsZSgnYWdncmVn
YXRvcnMnKTsKKyAgICAgICAgaWYgKCRhZ2dyZWdhdG9yX3RhYmxlKSB7CisgICAgICAgICAgICBm
b3JlYWNoICgkYWdncmVnYXRvcl90YWJsZSBhcyAkYWdncmVnYXRvcl9yb3cpIHsKKyAgICAgICAg
ICAgICAgICAkdGhpcy0+bmFtZV90b19hZ2dyZWdhdG9yWyRhZ2dyZWdhdG9yX3Jvd1snYWdncmVn
YXRvcl9uYW1lJ11dID0gJGFnZ3JlZ2F0b3Jfcm93OworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBleGl0X3dpdGhfZXJyb3IoJG1lc3NhZ2Us
ICRkZXRhaWxzID0gTlVMTCkgeworICAgICAgICBpZiAoISR0aGlzLT5yZXBvcnRfaWQpIHsKKyAg
ICAgICAgICAgICRkZXRhaWxzWydmYWlsdXJlU3RvcmVkJ10gPSBGQUxTRTsKKyAgICAgICAgICAg
IGV4aXRfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpOworICAgICAgICB9CisKKyAgICAg
ICAgJGRldGFpbHNbJ2ZhaWx1cmVTdG9yZWQnXSA9ICR0aGlzLT5kYi0+cXVlcnlfYW5kX2dldF9h
ZmZlY3RlZF9yb3dzKAorICAgICAgICAgICAgJ1VQREFURSByZXBvcnRzIFNFVCByZXBvcnRfZmFp
bHVyZSA9ICQxLCByZXBvcnRfZmFpbHVyZV9kZXRhaWxzID0gJDIgV0hFUkUgcmVwb3J0X2lkID0g
JDMnLAorICAgICAgICAgICAgYXJyYXkoJG1lc3NhZ2UsICRkZXRhaWxzID8ganNvbl9lbmNvZGUo
JGRldGFpbHMpIDogTlVMTCwgJHRoaXMtPnJlcG9ydF9pZCkpID09IDE7CisgICAgICAgIGV4aXRf
d2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBy
b2Nlc3MoJHJlcG9ydCwgJGV4aXN0aW5nX3JlcG9ydF9pZCA9IE5VTEwpIHsKKyAgICAgICAgJHRo
aXMtPnJlcG9ydF9pZCA9ICRleGlzdGluZ19yZXBvcnRfaWQ7CisgICAgICAgICR0aGlzLT5ydW5z
ID0gTlVMTDsKKworICAgICAgICBhcnJheV9rZXlfZXhpc3RzKCdidWlsZGVyTmFtZScsICRyZXBv
cnQpIG9yICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdCdWlsZGVyTmFtZScpOworICAg
ICAgICBhcnJheV9rZXlfZXhpc3RzKCdidWlsZFRpbWUnLCAkcmVwb3J0KSBvciAkdGhpcy0+ZXhp
dF93aXRoX2Vycm9yKCdNaXNzaW5nQnVpbGRUaW1lJyk7CisKKyAgICAgICAgJGJ1aWxkZXJfaW5m
byA9IGFycmF5KCduYW1lJyA9PiAkcmVwb3J0WydidWlsZGVyTmFtZSddKTsKKyAgICAgICAgaWYg
KCEkZXhpc3RpbmdfcmVwb3J0X2lkKQorICAgICAgICAgICAgJGJ1aWxkZXJfaW5mb1sncGFzc3dv
cmRfaGFzaCddID0gaGFzaCgnc2hhMjU2JywgJHJlcG9ydFsnYnVpbGRlclBhc3N3b3JkJ10pOwor
ICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnYnVpbGRlclBhc3N3b3JkJywgJHJlcG9ydCkp
CisgICAgICAgICAgICB1bnNldCgkcmVwb3J0WydidWlsZGVyUGFzc3dvcmQnXSk7CisKKyAgICAg
ICAgJG1hdGNoZWRfYnVpbGRlciA9ICR0aGlzLT5kYi0+c2VsZWN0X2ZpcnN0X3JvdygnYnVpbGRl
cnMnLCAnYnVpbGRlcicsICRidWlsZGVyX2luZm8pOworICAgICAgICBpZiAoISRtYXRjaGVkX2J1
aWxkZXIpCisgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdCdWlsZGVyTm90Rm91
bmQnLCBhcnJheSgnbmFtZScgPT4gJGJ1aWxkZXJfaW5mb1snbmFtZSddKSk7CisKKyAgICAgICAg
JGJ1aWxkX2RhdGEgPSAkdGhpcy0+Y29uc3RydWN0X2J1aWxkX2RhdGEoJHJlcG9ydCwgJG1hdGNo
ZWRfYnVpbGRlcik7CisgICAgICAgIGlmICghJGV4aXN0aW5nX3JlcG9ydF9pZCkKKyAgICAgICAg
ICAgICR0aGlzLT5zdG9yZV9yZXBvcnQoJHJlcG9ydCwgJGJ1aWxkX2RhdGEpOworCisgICAgICAg
ICR0aGlzLT5ydW5zID0gbmV3IFRlc3RSdW5zR2VuZXJhdG9yKCR0aGlzLT5kYiwgJHRoaXMtPm5h
bWVfdG9fYWdncmVnYXRvciwgJHRoaXMtPnJlcG9ydF9pZCk7CisgICAgICAgICR0aGlzLT5yZWN1
cnNpdmVseV9lbnN1cmVfdGVzdHMoJHJlcG9ydFsndGVzdHMnXSk7CisKKyAgICAgICAgJHRoaXMt
PnJ1bnMtPmFnZ3JlZ2F0ZSgpOworICAgICAgICAkdGhpcy0+cnVucy0+Y29tcHV0ZV9jYWNoZXMo
KTsKKworICAgICAgICAkcGxhdGZvcm1faWQgPSAkdGhpcy0+ZGItPnNlbGVjdF9vcl9pbnNlcnRf
cm93KCdwbGF0Zm9ybXMnLCAncGxhdGZvcm0nLCBhcnJheSgnbmFtZScgPT4gJHJlcG9ydFsncGxh
dGZvcm0nXSkpOworICAgICAgICBpZiAoISRwbGF0Zm9ybV9pZCkKKyAgICAgICAgICAgICR0aGlz
LT5leGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvSW5zZXJ0UGxhdGZvcm0nLCBhcnJheSgnbmFtZScg
PT4gJHJlcG9ydFsncGxhdGZvcm0nXSkpOworCisgICAgICAgICRidWlsZF9pZCA9ICR0aGlzLT5y
ZXNvbHZlX2J1aWxkX2lkKCRidWlsZF9kYXRhLCBhcnJheV9nZXQoJHJlcG9ydCwgJ3JldmlzaW9u
cycsIGFycmF5KCkpKTsKKworICAgICAgICAkdGhpcy0+cnVucy0+Y29tbWl0KCRwbGF0Zm9ybV9p
ZCwgJGJ1aWxkX2lkKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIGNvbnN0cnVjdF9i
dWlsZF9kYXRhKCRyZXBvcnQsICRidWlsZGVyKSB7CisgICAgICAgIGFycmF5X2tleV9leGlzdHMo
J2J1aWxkTnVtYmVyJywgJHJlcG9ydCkgb3IgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignTWlzc2lu
Z0J1aWxkTnVtYmVyJyk7CisgICAgICAgIGFycmF5X2tleV9leGlzdHMoJ2J1aWxkVGltZScsICRy
ZXBvcnQpIG9yICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdCdWlsZFRpbWUnKTsKKwor
ICAgICAgICByZXR1cm4gYXJyYXkoJ2J1aWxkZXInID0+ICRidWlsZGVyWydidWlsZGVyX2lkJ10s
ICdudW1iZXInID0+ICRyZXBvcnRbJ2J1aWxkTnVtYmVyJ10sICd0aW1lJyA9PiAkcmVwb3J0Wydi
dWlsZFRpbWUnXSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBzdG9yZV9yZXBvcnQo
JHJlcG9ydCwgJGJ1aWxkX2RhdGEpIHsKKyAgICAgICAgYXNzZXJ0KCEkdGhpcy0+cmVwb3J0X2lk
KTsKKyAgICAgICAgJHRoaXMtPnJlcG9ydF9pZCA9ICR0aGlzLT5kYi0+aW5zZXJ0X3JvdygncmVw
b3J0cycsICdyZXBvcnQnLCBhcnJheSgnYnVpbGRlcicgPT4gJGJ1aWxkX2RhdGFbJ2J1aWxkZXIn
XSwgJ2J1aWxkX251bWJlcicgPT4gJGJ1aWxkX2RhdGFbJ251bWJlciddLAorICAgICAgICAgICAg
J2NvbnRlbnQnID0+IGpzb25fZW5jb2RlKCRyZXBvcnQpKSk7CisgICAgICAgIGlmICghJHRoaXMt
PnJlcG9ydF9pZCkKKyAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRv
U3RvcmVSdW5SZXBvcnQnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVf
YnVpbGRfaWQoJGJ1aWxkX2RhdGEsICRyZXZpc2lvbnMpIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgY29kZSBoYXMgYSByYWNlIGNvbmRpdGlvbi4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTg3NjMw
Mz4uCisgICAgICAgICRyZXN1bHRzID0gJHRoaXMtPmRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCJT
RUxFQ1QgYnVpbGRfaWQgRlJPTSBidWlsZHMgV0hFUkUgYnVpbGRfYnVpbGRlciA9ICQxIEFORCBi
dWlsZF9udW1iZXIgPSAkMiBBTkQgYnVpbGRfdGltZSA8PSAkMyBBTkQgYnVpbGRfdGltZSArIGlu
dGVydmFsICcxIGRheScgPiAkMyIsCisgICAgICAgICAgICBhcnJheSgkYnVpbGRfZGF0YVsnYnVp
bGRlciddLCAkYnVpbGRfZGF0YVsnbnVtYmVyJ10sICRidWlsZF9kYXRhWyd0aW1lJ10pKTsKKyAg
ICAgICAgaWYgKCRyZXN1bHRzKQorICAgICAgICAgICAgJGJ1aWxkX2lkID0gJHJlc3VsdHNbMF1b
J2J1aWxkX2lkJ107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICRidWlsZF9pZCA9ICR0aGlz
LT5kYi0+aW5zZXJ0X3JvdygnYnVpbGRzJywgJ2J1aWxkJywgJGJ1aWxkX2RhdGEpOworICAgICAg
ICBpZiAoISRidWlsZF9pZCkKKyAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0Zh
aWxlZFRvSW5zZXJ0QnVpbGQnLCAkYnVpbGRfZGF0YSk7CisKKyAgICAgICAgZm9yZWFjaCAoJHJl
dmlzaW9ucyBhcyAkcmVwb3NpdG9yeV9uYW1lID0+ICRyZXZpc2lvbl9kYXRhKSB7CisgICAgICAg
ICAgICAkcmVwb3NpdG9yeV9pZCA9ICR0aGlzLT5kYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3Jl
cG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRyZXBvc2l0b3J5X25h
bWUpKTsKKyAgICAgICAgICAgIGlmICghJHJlcG9zaXRvcnlfaWQpCisgICAgICAgICAgICAgICAg
JHRoaXMtPmV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJyYXko
J25hbWUnID0+ICRyZXBvc2l0b3J5X25hbWUpKTsKKworICAgICAgICAgICAgJHJldmlzaW9uX2Rh
dGEgPSBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQsICdidWlsZCcgPT4gJGJ1
aWxkX2lkLCAndmFsdWUnID0+ICRyZXZpc2lvbl9kYXRhWydyZXZpc2lvbiddLAorICAgICAgICAg
ICAgICAgICd0aW1lJyA9PiBhcnJheV9nZXQoJHJldmlzaW9uX2RhdGEsICd0aW1lc3RhbXAnKSk7
CisgICAgICAgICAgICAkcmV2aXNpb25fcm93ID0gJHRoaXMtPmRiLT5zZWxlY3Rfb3JfaW5zZXJ0
X3JvdygnYnVpbGRfcmV2aXNpb25zJywgJ3JldmlzaW9uJywgYXJyYXkoJ3JlcG9zaXRvcnknID0+
ICRyZXBvc2l0b3J5X2lkLCAnYnVpbGQnID0+ICRidWlsZF9pZCksICRyZXZpc2lvbl9kYXRhLCAn
KicpOworICAgICAgICAgICAgaWYgKCEkcmV2aXNpb25fcm93KQorICAgICAgICAgICAgICAgICR0
aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvSW5zZXJ0UmV2aXNpb24nLCAkcmV2aXNpb25f
ZGF0YSk7CisgICAgICAgICAgICBpZiAoJHJldmlzaW9uX3Jvd1sncmV2aXNpb25fdmFsdWUnXSAh
PSAkcmV2aXNpb25fZGF0YVsndmFsdWUnXSkKKyAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93
aXRoX2Vycm9yKCdNaXNtYXRjaGluZ1JldmlzaW9uRGF0YScsIGFycmF5KCdleGlzdGluZycgPT4g
JHJldmlzaW9uX3JvdywgJ25ldycgPT4gJHJldmlzaW9uX2RhdGEpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiAkYnVpbGRfaWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBy
ZWN1cnNpdmVseV9lbnN1cmVfdGVzdHMoJHRlc3RzLCAkcGFyZW50X2lkID0gTlVMTCwgJGxldmVs
ID0gMCkgeworICAgICAgICBmb3JlYWNoICgkdGVzdHMgYXMgJHRlc3RfbmFtZSA9PiAkdGVzdCkg
eworICAgICAgICAgICAgJHRlc3RfaWQgPSAkdGhpcy0+ZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93
KCd0ZXN0cycsICd0ZXN0JywgJHBhcmVudF9pZCA/IGFycmF5KCduYW1lJyA9PiAkdGVzdF9uYW1l
LCAncGFyZW50JyA9PiAkcGFyZW50X2lkKSA6IGFycmF5KCduYW1lJyA9PiAkdGVzdF9uYW1lKSwK
KyAgICAgICAgICAgICAgICBhcnJheSgnbmFtZScgPT4gJHRlc3RfbmFtZSwgJ3BhcmVudCcgPT4g
JHBhcmVudF9pZCwgJ3VybCcgPT4gYXJyYXlfZ2V0KCR0ZXN0LCAndXJsJykpKTsKKyAgICAgICAg
ICAgIGlmICghJHRlc3RfaWQpCisgICAgICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJv
cignRmFpbGVkVG9BZGRUZXN0JywgYXJyYXkoJ25hbWUnID0+ICR0ZXN0X25hbWUsICdwYXJlbnQn
ID0+ICRwYXJlbnRfaWQpKTsKKworICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3Rl
c3RzJywgJHRlc3QpKQorICAgICAgICAgICAgICAgICR0aGlzLT5yZWN1cnNpdmVseV9lbnN1cmVf
dGVzdHMoJHRlc3RbJ3Rlc3RzJ10sICR0ZXN0X2lkLCAkbGV2ZWwgKyAxKTsKKworICAgICAgICAg
ICAgZm9yZWFjaCAoYXJyYXlfZ2V0KCR0ZXN0LCAnbWV0cmljcycsIGFycmF5KCkpIGFzICRtZXRy
aWNfbmFtZSA9PiAkYWdncmVnYXRvcnNfb3JfY29uZmlnX3R5cGVzKSB7CisgICAgICAgICAgICAg
ICAgJGFnZ3JlZ2F0b3JzID0gJHRoaXMtPmFnZ3JlZ2F0b3JfbGlzdF9pZl9leGlzdHMoJGFnZ3Jl
Z2F0b3JzX29yX2NvbmZpZ190eXBlcyk7CisgICAgICAgICAgICAgICAgaWYgKCRhZ2dyZWdhdG9y
cykgeworICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYWdncmVnYXRvcnMgYXMgJGFnZ3Jl
Z2F0b3JfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5ydW5zLT5hZGRfYWdn
cmVnYXRlZF9tZXRyaWMoJHBhcmVudF9pZCwgJHRlc3RfaWQsICR0ZXN0X25hbWUsICRtZXRyaWNf
bmFtZSwgJGFnZ3JlZ2F0b3JfbmFtZSwgJGxldmVsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAkbWV0cmljX2lkID0gJHRoaXMtPmRiLT5zZWxlY3Rfb3Jf
aW5zZXJ0X3JvdygndGVzdF9tZXRyaWNzJywgJ21ldHJpYycsIGFycmF5KCduYW1lJyA9PiAkbWV0
cmljX25hbWUsICd0ZXN0JyA9PiAkdGVzdF9pZCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
ISRtZXRyaWNfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vy
cm9yKCdGYWlsZWRUb0FkZE1ldHJpYycsIGFycmF5KCduYW1lJyA9PiAkbWV0cmljX25hbWUsICd0
ZXN0JyA9PiAkdGVzdF9pZCkpOworCisgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRhZ2dy
ZWdhdG9yc19vcl9jb25maWdfdHlwZXMgYXMgJGNvbmZpZ190eXBlID0+ICR2YWx1ZXMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNvbWUgdGVzdHMgc3VibWl0IGdyb3VwcyBvZiBpdGVy
YXRpb25zOyBlLmcuIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENvbnZlcnQgb3RoZXIgdGVzdHMgdG8gdGhpcyBmb3JtYXQgdG8gc2ltcGxp
ZnkgdGhlIGNvbXB1dGF0aW9uIGxhdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdl
dHR5cGUoJHZhbHVlcykgIT09ICdhcnJheScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JHZhbHVlcyA9IGFycmF5KCR2YWx1ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdl
dHR5cGUoJHZhbHVlc1swXSkgIT09ICdhcnJheScpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJHZhbHVlcyA9IGFycmF5KCR2YWx1ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgJHRo
aXMtPnJ1bnMtPmFkZF92YWx1ZXNfdG9fY29tbWl0KCRtZXRyaWNfaWQsICRjb25maWdfdHlwZSwg
JHZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cnVucy0+YWRkX3ZhbHVl
c19mb3JfYWdncmVnYXRpb24oJHBhcmVudF9pZCwgJHRlc3RfbmFtZSwgJG1ldHJpY19uYW1lLCAk
Y29uZmlnX3R5cGUsICR2YWx1ZXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBm
dW5jdGlvbiBhZ2dyZWdhdG9yX2xpc3RfaWZfZXhpc3RzKCRhZ2dyZWdhdG9yc19vcl9jb25maWdf
dHlwZXMpIHsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoMCwgJGFnZ3JlZ2F0b3JzX29y
X2NvbmZpZ190eXBlcykpCisgICAgICAgICAgICByZXR1cm4gJGFnZ3JlZ2F0b3JzX29yX2NvbmZp
Z190eXBlczsKKyAgICAgICAgZWxzZSBpZiAoYXJyYXlfZ2V0KCRhZ2dyZWdhdG9yc19vcl9jb25m
aWdfdHlwZXMsICdhZ2dyZWdhdG9ycycpKQorICAgICAgICAgICAgcmV0dXJuICRhZ2dyZWdhdG9y
c19vcl9jb25maWdfdHlwZXNbJ2FnZ3JlZ2F0b3JzJ107CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KK307CisKK2NsYXNzIFRlc3RSdW5zR2VuZXJhdG9yIHsKKyAgICBwcml2YXRlICRkYjsK
KyAgICBwcml2YXRlICRuYW1lX3RvX2FnZ3JlZ2F0b3I7CisgICAgcHJpdmF0ZSAkcmVwb3J0X2lk
OworICAgIHByaXZhdGUgJG1ldHJpY3NfdG9fYWdncmVnYXRlOworICAgIHByaXZhdGUgJHBhcmVu
dF90b192YWx1ZXM7CisgICAgcHJpdmF0ZSAkdmFsdWVzX3RvX2NvbW1pdDsKKworICAgIGZ1bmN0
aW9uIF9fY29uc3RydWN0KCRkYiwgJG5hbWVfdG9fYWdncmVnYXRvciwgJHJlcG9ydF9pZCkgewor
ICAgICAgICAkdGhpcy0+ZGIgPSAkZGI7CisgICAgICAgICR0aGlzLT5uYW1lX3RvX2FnZ3JlZ2F0
b3IgPSAkbmFtZV90b19hZ2dyZWdhdG9yIG9yIGFycmF5KCk7CisgICAgICAgICR0aGlzLT5yZXBv
cnRfaWQgPSAkcmVwb3J0X2lkOworICAgICAgICAkdGhpcy0+bWV0cmljc190b19hZ2dyZWdhdGUg
PSBhcnJheSgpOworICAgICAgICAkdGhpcy0+cGFyZW50X3RvX3ZhbHVlcyA9IGFycmF5KCk7Cisg
ICAgICAgICR0aGlzLT52YWx1ZXNfdG9fY29tbWl0ID0gYXJyYXkoKTsKKyAgICB9CisKKyAgICBw
cml2YXRlIGZ1bmN0aW9uIGV4aXRfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMgPSBOVUxM
KSB7CisgICAgICAgICRkZXRhaWxzWydmYWlsdXJlU3RvcmVkJ10gPSAkdGhpcy0+ZGItPnF1ZXJ5
X2FuZF9nZXRfYWZmZWN0ZWRfcm93cygKKyAgICAgICAgICAgICdVUERBVEUgcmVwb3J0cyBTRVQg
cmVwb3J0X2ZhaWx1cmUgPSAkMSwgcmVwb3J0X2ZhaWx1cmVfZGV0YWlscyA9ICQyIFdIRVJFIHJl
cG9ydF9pZCA9ICQzJywKKyAgICAgICAgICAgIGFycmF5KCRtZXNzYWdlLCAkZGV0YWlscyA/IGpz
b25fZW5jb2RlKCRkZXRhaWxzKSA6IE5VTEwsICR0aGlzLT5yZXBvcnRfaWQpKSA9PSAxOworICAg
ICAgICBleGl0X3dpdGhfZXJyb3IoJG1lc3NhZ2UsICRkZXRhaWxzKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBhZGRfYWdncmVnYXRlZF9tZXRyaWMoJHBhcmVudF9pZCwgJHRlc3RfaWQsICR0ZXN0
X25hbWUsICRtZXRyaWNfbmFtZSwgJGFnZ3JlZ2F0b3JfbmFtZSwgJGxldmVsKSB7CisgICAgICAg
IGFycmF5X2tleV9leGlzdHMoJGFnZ3JlZ2F0b3JfbmFtZSwgJHRoaXMtPm5hbWVfdG9fYWdncmVn
YXRvcikgb3IgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignQWdncmVnYXRvck5vdEZvdW5kJywgYXJy
YXkoJ25hbWUnID0+ICRhZ2dyZWdhdG9yX25hbWUpKTsKKworICAgICAgICAkbWV0cmljX2lkID0g
JHRoaXMtPmRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JvdygndGVzdF9tZXRyaWNzJywgJ21ldHJpYycs
IGFycmF5KCduYW1lJyA9PiAkbWV0cmljX25hbWUsCisgICAgICAgICAgICAndGVzdCcgPT4gJHRl
c3RfaWQsICdhZ2dyZWdhdG9yJyA9PiAkdGhpcy0+bmFtZV90b19hZ2dyZWdhdG9yWyRhZ2dyZWdh
dG9yX25hbWVdWydhZ2dyZWdhdG9yX2lkJ10pKTsKKyAgICAgICAgaWYgKCEkbWV0cmljX2lkKQor
ICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9BZGRBZ2dyZWdhdGVk
TWV0cmljJywgYXJyYXkoJ25hbWUnID0+ICRtZXRyaWNfbmFtZSwgJ3Rlc3QnID0+ICR0ZXN0X2lk
LCAnYWdncmVnYXRvcicgPT4gJGFnZ3JlZ2F0b3JfbmFtZSkpOworCisgICAgICAgIGFycmF5X3B1
c2goJHRoaXMtPm1ldHJpY3NfdG9fYWdncmVnYXRlLCBhcnJheSgKKyAgICAgICAgICAgICd0ZXN0
X2lkJyA9PiAkdGVzdF9pZCwKKyAgICAgICAgICAgICdwYXJlbnRfaWQnID0+ICRwYXJlbnRfaWQs
CisgICAgICAgICAgICAnbWV0cmljX2lkJyA9PiAkbWV0cmljX2lkLAorICAgICAgICAgICAgJ3Rl
c3RfbmFtZScgPT4gJHRlc3RfbmFtZSwKKyAgICAgICAgICAgICdtZXRyaWNfbmFtZScgPT4gJG1l
dHJpY19uYW1lLAorICAgICAgICAgICAgJ2FnZ3JlZ2F0b3InID0+ICRhZ2dyZWdhdG9yX25hbWUs
CisgICAgICAgICAgICAnYWdncmVnYXRvcl9kZWZpbml0aW9uJyA9PiAkdGhpcy0+bmFtZV90b19h
Z2dyZWdhdG9yWyRhZ2dyZWdhdG9yX25hbWVdWydhZ2dyZWdhdG9yX2RlZmluaXRpb24nXSwKKyAg
ICAgICAgICAgICdsZXZlbCcgPT4gJGxldmVsKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRk
X3ZhbHVlc19mb3JfYWdncmVnYXRpb24oJHBhcmVudF9pZCwgJHRlc3RfbmFtZSwgJG1ldHJpY19u
YW1lLCAkY29uZmlnX3R5cGUsICR2YWx1ZXMsICRhZ2dyZWdhdG9yID0gTlVMTCkgeworICAgICAg
ICAkdmFsdWVfbGlzdCA9ICZhcnJheV9lbnN1cmVfaXRlbV9oYXNfYXJyYXkoYXJyYXlfZW5zdXJl
X2l0ZW1faGFzX2FycmF5KGFycmF5X2Vuc3VyZV9pdGVtX2hhc19hcnJheShhcnJheV9lbnN1cmVf
aXRlbV9oYXNfYXJyYXkoCisgICAgICAgICAgICAkdGhpcy0+cGFyZW50X3RvX3ZhbHVlcywgc3Ry
dmFsKCRwYXJlbnRfaWQpKSwgJG1ldHJpY19uYW1lKSwgJGNvbmZpZ190eXBlKSwgJHRlc3RfbmFt
ZSk7CisgICAgICAgIGFycmF5X3B1c2goJHZhbHVlX2xpc3QsIGFycmF5KCdhZ2dyZWdhdG9yJyA9
PiAkYWdncmVnYXRvciwgJ3ZhbHVlcycgPT4gJHZhbHVlcykpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGFnZ3JlZ2F0ZSgpIHsKKyAgICAgICAgJGV4cHJlc3Npb25zID0gYXJyYXkoKTsKKyAgICAg
ICAgZm9yZWFjaCAoJHRoaXMtPm1ldHJpY3NfdG9fYWdncmVnYXRlIGFzICR0ZXN0X21ldHJpYykg
eworICAgICAgICAgICAgJGNvbmZpZ3VyYXRpb25zID0gYXJyYXlfZ2V0KGFycmF5X2dldCgkdGhp
cy0+cGFyZW50X3RvX3ZhbHVlcywgc3RydmFsKCR0ZXN0X21ldHJpY1sndGVzdF9pZCddKSwgYXJy
YXkoKSksICR0ZXN0X21ldHJpY1snbWV0cmljX25hbWUnXSk7CisgICAgICAgICAgICBmb3JlYWNo
ICgkY29uZmlndXJhdGlvbnMgYXMgJGNvbmZpZ190eXBlID0+ICR0ZXN0X3ZhbHVlX2xpc3QpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByZXNlcnZlIHRoZSB0ZXN0IG9y
ZGVyLiBGb3IgdGhhdCwgd2UgbmVlZCBhIG5ldyBjb2x1bW4gaW4gb3VyIGRhdGFiYXNlLgorICAg
ICAgICAgICAgICAgICR2YWx1ZXNfYnlfaXRlcmF0aW9uID0gJHRoaXMtPnRlc3RfdmFsdWVfbGlz
dF90b192YWx1ZXNfYnlfaXRlcmF0aW9ucygkdGVzdF92YWx1ZV9saXN0LCAkdGVzdF9tZXRyaWMs
ICR0ZXN0X21ldHJpY1snYWdncmVnYXRvciddKTsKKyAgICAgICAgICAgICAgICAkZmxhdHRlbmVk
X2FnZ3JlZ2F0ZWRfdmFsdWVzID0gYXJyYXkoKTsKKyAgICAgICAgICAgICAgICBmb3IgKCRpID0g
MDsgJGkgPCBjb3VudCgkdmFsdWVzX2J5X2l0ZXJhdGlvblsndmFsdWVzJ10pOyArKyRpKQorICAg
ICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRmbGF0dGVuZWRfYWdncmVnYXRlZF92YWx1ZXMs
ICR0aGlzLT5hZ2dyZWdhdGVfdmFsdWVzKCR0ZXN0X21ldHJpY1snYWdncmVnYXRvciddLCAkdmFs
dWVzX2J5X2l0ZXJhdGlvblsndmFsdWVzJ11bJGldKSk7CisKKyAgICAgICAgICAgICAgICAkZ3Jv
dXBlZF92YWx1ZXMgPSBhcnJheSgpOworICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZXNf
YnlfaXRlcmF0aW9uWydncm91cF9zaXplcyddIGFzICRzaXplKSB7CisgICAgICAgICAgICAgICAg
ICAgICRuZXdfZ3JvdXAgPSBhcnJheSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0g
MDsgJGkgPCAkc2l6ZTsgKyskaSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2go
JG5ld19ncm91cCwgYXJyYXlfc2hpZnQoJGZsYXR0ZW5lZF9hZ2dyZWdhdGVkX3ZhbHVlcykpOwor
ICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRncm91cGVkX3ZhbHVlcywgJG5ld19ncm91
cCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJHRoaXMtPmFkZF92YWx1
ZXNfdG9fY29tbWl0KCR0ZXN0X21ldHJpY1snbWV0cmljX2lkJ10sICRjb25maWdfdHlwZSwgJGdy
b3VwZWRfdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAkdGhpcy0+YWRkX3ZhbHVlc19mb3JfYWdn
cmVnYXRpb24oJHRlc3RfbWV0cmljWydwYXJlbnRfaWQnXSwgJHRlc3RfbWV0cmljWyd0ZXN0X25h
bWUnXSwgJHRlc3RfbWV0cmljWydtZXRyaWNfbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAk
Y29uZmlnX3R5cGUsICRncm91cGVkX3ZhbHVlcywgJHRlc3RfbWV0cmljWydhZ2dyZWdhdG9yJ10p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlv
biB0ZXN0X3ZhbHVlX2xpc3RfdG9fdmFsdWVzX2J5X2l0ZXJhdGlvbnMoJHRlc3RfdmFsdWVfbGlz
dCwgJHRlc3RfbWV0cmljLCAkYWdncmVnYXRvcikgeworICAgICAgICAkdmFsdWVzX2J5X2l0ZXJh
dGlvbnMgPSBhcnJheSgpOworICAgICAgICAkZ3JvdXBfc2l6ZXMgPSBhcnJheSgpOworICAgICAg
ICAkZmlyc3RfdGVzdCA9IFRSVUU7CisgICAgICAgIGZvcmVhY2ggKCR0ZXN0X3ZhbHVlX2xpc3Qg
YXMgJHRlc3RfbmFtZSA9PiAkYWdncmVnYXRvcnNfYW5kX3ZhbHVlcykgeworICAgICAgICAgICAg
aWYgKGNvdW50KCRhZ2dyZWdhdG9yc19hbmRfdmFsdWVzKSA9PSAxKSAvLyBFaXRoZXIgdGhlIHN1
YnRlc3QgaGFzIGV4YWN0bHkgb25lIGFnZ3JlZ2F0b3Igb3IgaXMgcmF3IHZhbHVlIChub3QgYWdn
cmVnYXRlZCkKKyAgICAgICAgICAgICAgICAkdmFsdWVzID0gJGFnZ3JlZ2F0b3JzX2FuZF92YWx1
ZXNbMF1bJ3ZhbHVlcyddOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJHZh
bHVlcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgdmFsdWVzIG9mIHRoZSBz
dWJ0ZXN0IGFnZ3JlZ2F0ZWQgYnkgdGhlIHNhbWUgYWdncmVnYXRvci4KKyAgICAgICAgICAgICAg
ICBmb3JlYWNoICgkYWdncmVnYXRvcnNfYW5kX3ZhbHVlcyBhcyAkYWdncmVnYXRvcl9hbmRfdmFs
dWVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgkYWdncmVnYXRvcl9hbmRfdmFsdWVzWydh
Z2dyZWdhdG9yJ10gPT0gJGFnZ3JlZ2F0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICR2
YWx1ZXMgPSAkYWdncmVnYXRvcl9hbmRfdmFsdWVzWyd2YWx1ZXMnXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghJHZhbHVlcykg
eworICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdOb01hdGNoaW5n
QWdncmVnYXRlZFZhbHVlSW5TdWJ0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5
KCdwYXJlbnQnID0+ICR0ZXN0X21ldHJpY1sndGVzdF9pZCddLAorICAgICAgICAgICAgICAgICAg
ICAgICAgJ21ldHJpYycgPT4gJHRlc3RfbWV0cmljWydtZXRyaWNfbmFtZSddLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ2NoaWxkVGVzdCcgPT4gJHRlc3RfbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdhZ2dyZWdhdG9yJyA9PiAkYWdncmVnYXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICdhZ2dyZWdhdG9yQW5kVmFsdWVzJyA9PiAkYWdncmVnYXRvcnNfYW5kX3ZhbHVlcykp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICgk
Z3JvdXAgPSAwOyAkZ3JvdXAgPCBjb3VudCgkdmFsdWVzKTsgKyskZ3JvdXApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoJGZpcnN0X3Rlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVz
aCgkZ3JvdXBfc2l6ZXMsIGNvdW50KCR2YWx1ZXNbJGdyb3VwXSkpOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkdmFsdWVzWyRncm91cF0pOyArKyRpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkdmFsdWVzX2J5X2l0ZXJhdGlvbnMsIGFy
cmF5KCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBf
c2l6ZXNbJGdyb3VwXSAhPSBjb3VudCgkdmFsdWVzWyRncm91cF0pKSB7CisgICAgICAgICAgICAg
ICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0l0ZXJhdGlvbkdyb3VwU2l6ZUlzSW5jb25z
aXN0ZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdwYXJlbnQnID0+ICR0ZXN0
X21ldHJpY1sndGVzdF9pZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgJ21ldHJpYycgPT4g
JHRlc3RfbWV0cmljWydtZXRyaWNfbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2No
aWxkVGVzdCcgPT4gJHRlc3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdncm91cFNp
emVzJyA9PiAkZ3JvdXBfc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAnID0+
ICRncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXMnID0+ICR2YWx1ZXMpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkZmlyc3RfdGVz
dCA9IEZBTFNFOworCisgICAgICAgICAgICBpZiAoY291bnQoJHZhbHVlcykgIT0gY291bnQoJGdy
b3VwX3NpemVzKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9y
dCBib290c3RyYXBwaW5nIG9yIGp1c3QgY29tcHV0aW5nIHRoZSBtZWFuIGluIHRoaXMgY2FzZS4K
KyAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdJdGVyYXRpb25Hcm91cENv
dW50SXNJbmNvbnNpc3RlbnQnLCBhcnJheSgncGFyZW50JyA9PiAkdGVzdF9tZXRyaWNbJ3Rlc3Rf
aWQnXSwKKyAgICAgICAgICAgICAgICAgICAgJ21ldHJpYycgPT4gJHRlc3RfbWV0cmljWydtZXRy
aWNfbmFtZSddLCAnY2hpbGRUZXN0JyA9PiAkbmFtZV9hbmRfdmFsdWVzWyduYW1lJ10sCisgICAg
ICAgICAgICAgICAgICAgICd2YWx1ZXNCeUl0ZXJhdGlvbnMnID0+ICR2YWx1ZXNfYnlfaXRlcmF0
aW9ucywgJ3ZhbHVlcycgPT4gJHZhbHVlcykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAkZmxhdHRlbmVkX2l0ZXJhdGlvbl9pbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKCRncm91
cCA9IDA7ICRncm91cCA8IGNvdW50KCR2YWx1ZXMpOyArKyRncm91cCkgeworICAgICAgICAgICAg
ICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCR2YWx1ZXNbJGdyb3VwXSk7ICsrJGkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgJHJ1bl9pdGVyYXRpb25fdmFsdWUgPSAkdmFsdWVzWyRncm91cF1b
JGldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX251bWVyaWMoJHJ1bl9pdGVyYXRpb25f
dmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9y
KCdOb25OdW1lcmFsSXRlcmF0aW9uVmFsdWVGb3JBZ2dyZWdhdGlvbicsIGFycmF5KCdwYXJlbnQn
ID0+ICR0ZXN0X21ldHJpY1sndGVzdF9pZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdtZXRyaWMnID0+ICR0ZXN0X21ldHJpY1snbWV0cmljX25hbWUnXSwgJ2NoaWxkVGVzdCcgPT4g
JG5hbWVfYW5kX3ZhbHVlc1snbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2
YWx1ZXNCeUl0ZXJhdGlvbnMnID0+ICR2YWx1ZXNfYnlfaXRlcmF0aW9ucywgJ3ZhbHVlcycgPT4g
JHZhbHVlcywgJ2luZGV4JyA9PiAkaSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGFycmF5X3B1c2goJHZhbHVlc19ieV9pdGVyYXRpb25zWyRmbGF0dGVuZWRf
aXRlcmF0aW9uX2luZGV4XSwgJHJ1bl9pdGVyYXRpb25fdmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAkZmxhdHRlbmVkX2l0ZXJhdGlvbl9pbmRleCsrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghJHZhbHVlc19ieV9pdGVyYXRp
b25zKQorICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignTm9JdGVyYXRpb25Ub0Fn
Z3JlZ2F0aW9uJywgYXJyYXkoJ3BhcmVudCcgPT4gJHRlc3RfbWV0cmljWyd0ZXN0X2lkJ10sICdt
ZXRyaWMnID0+ICR0ZXN0X21ldHJpY1snbWV0cmljX25hbWUnXSkpOworCisgICAgICAgIHJldHVy
biBhcnJheSgndmFsdWVzJyA9PiAkdmFsdWVzX2J5X2l0ZXJhdGlvbnMsICdncm91cF9zaXplcycg
PT4gJGdyb3VwX3NpemVzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIGFnZ3JlZ2F0
ZV92YWx1ZXMoJGFnZ3JlZ2F0b3IsICR2YWx1ZXMpIHsKKyAgICAgICAgc3dpdGNoICgkYWdncmVn
YXRvcikgeworICAgICAgICBjYXNlICdBcml0aG1ldGljJzoKKyAgICAgICAgICAgIHJldHVybiBh
cnJheV9zdW0oJHZhbHVlcykgLyBjb3VudCgkdmFsdWVzKTsKKyAgICAgICAgY2FzZSAnR2VvbWV0
cmljJzoKKyAgICAgICAgICAgIHJldHVybiBwb3coYXJyYXlfcHJvZHVjdCgkdmFsdWVzKSwgMSAv
IGNvdW50KCR2YWx1ZXMpKTsKKyAgICAgICAgY2FzZSAnSGFybW9uaWMnOgorICAgICAgICAgICAg
cmV0dXJuIGNvdW50KCR2YWx1ZXMpIC8gYXJyYXlfc3VtKGFycmF5X21hcChmdW5jdGlvbiAoJHgp
IHsgcmV0dXJuIDEgLyAkeDsgfSwgJHZhbHVlcykpOworICAgICAgICBjYXNlICdUb3RhbCc6Cisg
ICAgICAgICAgICByZXR1cm4gYXJyYXlfc3VtKCR2YWx1ZXMpOworICAgICAgICBjYXNlICdTcXVh
cmVTdW0nOgorICAgICAgICAgICAgcmV0dXJuIGFycmF5X3N1bShhcnJheV9tYXAoZnVuY3Rpb24g
KCR4KSB7IHJldHVybiAkeCAqICR4OyB9LCAkdmFsdWVzKSk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdVbmtub3duQWdncmVnYXRvcicsIGFy
cmF5KCdhZ2dyZWdhdG9yJyA9PiAkYWdncmVnYXRvcikpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbXB1dGVfY2FjaGVzKCkgeworICAg
ICAgICAkZXhwcmVzc2lvbnMgPSBhcnJheSgpOworICAgICAgICAkc2l6ZSA9IGNvdW50KCR0aGlz
LT52YWx1ZXNfdG9fY29tbWl0KTsKKyAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHNpemU7ICsr
JGkpIHsKKyAgICAgICAgICAgICRmbGF0dGVuZWRfdmFsdWUgPSBhcnJheSgpOworICAgICAgICAg
ICAgZm9yZWFjaCAoJHRoaXMtPnZhbHVlc190b19jb21taXRbJGldWyd2YWx1ZXMnXSBhcyAkZ3Jv
dXApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCRqID0gMDsgJGogPCBjb3VudCgkZ3JvdXApOyAr
KyRqKSB7CisgICAgICAgICAgICAgICAgICAgICRpdGVyYXRpb25fdmFsdWUgPSAkZ3JvdXBbJGpd
OworICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0dHlwZSgkaXRlcmF0aW9uX3ZhbHVlKSA9PT0g
J2FycmF5JykgeyAvLyBbcmVsYXRpdmUgdGltZSwgdmFsdWVdCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY291bnQoJGl0ZXJhdGlvbl92YWx1ZSkgIT0gMikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBBbHNvIHJlcG9ydCB0ZXN0IGFuZCBtZXRyaWMuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignSW52YWxpZEl0
ZXJhdGlvblZhbHVlRm9ybWF0JywgYXJyYXkoJ3ZhbHVlcycgPT4gJHRoaXMtPnZhbHVlc190b19j
b21taXRbJGldWyd2YWx1ZXMnXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgJGl0ZXJhdGlvbl92YWx1ZSA9ICRpdGVyYXRpb25fdmFsdWVbMV07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgk
ZmxhdHRlbmVkX3ZhbHVlLCAkaXRlcmF0aW9uX3ZhbHVlKTsgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICR0aGlzLT52YWx1
ZXNfdG9fY29tbWl0WyRpXVsnbWVhbiddID0gJHRoaXMtPmFnZ3JlZ2F0ZV92YWx1ZXMoJ0FyaXRo
bWV0aWMnLCAkZmxhdHRlbmVkX3ZhbHVlKTsKKyAgICAgICAgICAgICR0aGlzLT52YWx1ZXNfdG9f
Y29tbWl0WyRpXVsnc3VtJ10gPSAkdGhpcy0+YWdncmVnYXRlX3ZhbHVlcygnVG90YWwnLCAkZmxh
dHRlbmVkX3ZhbHVlKTsKKyAgICAgICAgICAgICR0aGlzLT52YWx1ZXNfdG9fY29tbWl0WyRpXVsn
c3F1YXJlX3N1bSddID0gJHRoaXMtPmFnZ3JlZ2F0ZV92YWx1ZXMoJ1NxdWFyZVN1bScsICRmbGF0
dGVuZWRfdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkX3ZhbHVl
c190b19jb21taXQoJG1ldHJpY19pZCwgJGNvbmZpZ190eXBlLCAkdmFsdWVzKSB7CisgICAgICAg
IGFycmF5X3B1c2goJHRoaXMtPnZhbHVlc190b19jb21taXQsIGFycmF5KCdtZXRyaWNfaWQnID0+
ICRtZXRyaWNfaWQsICdjb25maWdfdHlwZScgPT4gJGNvbmZpZ190eXBlLCAndmFsdWVzJyA9PiAk
dmFsdWVzKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tbWl0KCRwbGF0Zm9ybV9pZCwgJGJ1
aWxkX2lkKSB7CisgICAgICAgICR0aGlzLT5kYi0+YmVnaW5fdHJhbnNhY3Rpb24oKSBvciAkdGhp
cy0+ZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0JlZ2luVHJhbnNhY3Rpb24nKTsKKworICAgICAg
ICBmb3JlYWNoICgkdGhpcy0+dmFsdWVzX3RvX2NvbW1pdCBhcyAkaXRlbSkgeworICAgICAgICAg
ICAgJGNvbmZpZ19kYXRhID0gYXJyYXkoJ21ldHJpYycgPT4gJGl0ZW1bJ21ldHJpY19pZCddLCAn
dHlwZScgPT4gJGl0ZW1bJ2NvbmZpZ190eXBlJ10sICdwbGF0Zm9ybScgPT4gJHBsYXRmb3JtX2lk
KTsKKyAgICAgICAgICAgICRjb25maWdfaWQgPSAkdGhpcy0+ZGItPnNlbGVjdF9vcl9pbnNlcnRf
cm93KCd0ZXN0X2NvbmZpZ3VyYXRpb25zJywgJ2NvbmZpZycsICRjb25maWdfZGF0YSk7CisgICAg
ICAgICAgICBpZiAoISRjb25maWdfaWQpCisgICAgICAgICAgICAgICAgJHRoaXMtPnJvbGxiYWNr
X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvT2J0YWluQ29uZmlndXJhdGlvbicsICRjb25maWdfZGF0YSk7
CisKKyAgICAgICAgICAgICR2YWx1ZXMgPSAkaXRlbVsndmFsdWVzJ107CisgICAgICAgICAgICAk
dG90YWxfY291bnQgPSAwOworICAgICAgICAgICAgZm9yICgkZ3JvdXAgPSAwOyAkZ3JvdXAgPCBj
b3VudCgkdmFsdWVzKTsgKyskZ3JvdXApCisgICAgICAgICAgICAgICAgJHRvdGFsX2NvdW50ICs9
IGNvdW50KCR2YWx1ZXNbJGdyb3VwXSk7CisgICAgICAgICAgICAkcnVuX2RhdGEgPSBhcnJheSgn
Y29uZmlnJyA9PiAkY29uZmlnX2lkLCAnYnVpbGQnID0+ICRidWlsZF9pZCwgJ2l0ZXJhdGlvbl9j
b3VudF9jYWNoZScgPT4gJHRvdGFsX2NvdW50LAorICAgICAgICAgICAgICAgICdtZWFuX2NhY2hl
JyA9PiAkaXRlbVsnbWVhbiddLCAnc3VtX2NhY2hlJyA9PiAkaXRlbVsnc3VtJ10sICdzcXVhcmVf
c3VtX2NhY2hlJyA9PiAkaXRlbVsnc3F1YXJlX3N1bSddKTsKKyAgICAgICAgICAgICRydW5faWQg
PSAkdGhpcy0+ZGItPmluc2VydF9yb3coJ3Rlc3RfcnVucycsICdydW4nLCAkcnVuX2RhdGEpOwor
ICAgICAgICAgICAgaWYgKCEkcnVuX2lkKQorICAgICAgICAgICAgICAgICR0aGlzLT5yb2xsYmFj
a193aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydFJ1bicsIGFycmF5KCdtZXRyaWMnID0+ICRpdGVt
WydtZXRyaWNfaWQnXSwgJ3BhcmFtJyA9PiAkcnVuX2RhdGEpKTsKKworICAgICAgICAgICAgJGZs
YXR0ZW5lZF9vcmRlciA9IDA7CisgICAgICAgICAgICBmb3IgKCRncm91cCA9IDA7ICRncm91cCA8
IGNvdW50KCR2YWx1ZXMpOyArKyRncm91cCkgeworICAgICAgICAgICAgICAgIGZvciAoJGkgPSAw
OyAkaSA8IGNvdW50KCR2YWx1ZXNbJGdyb3VwXSk7ICsrJGkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgJGl0ZXJhdGlvbl92YWx1ZSA9ICR2YWx1ZXNbJGdyb3VwXVskaV07CisgICAgICAgICAgICAg
ICAgICAgICRyZWxhdGl2ZV90aW1lID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdl
dHR5cGUoJGl0ZXJhdGlvbl92YWx1ZSkgPT09ICdhcnJheScpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2VydChjb3VudCgkaXRlcmF0aW9uX3ZhbHVlKSA9PSAyKTsgLy8gY29tcHV0ZV9j
YWNoZXMgY2hlY2tzIHRoaXMgY29uZGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgJHJl
bGF0aXZlX3RpbWUgPSAkaXRlcmF0aW9uX3ZhbHVlWzBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgJGl0ZXJhdGlvbl92YWx1ZSA9ICRpdGVyYXRpb25fdmFsdWVbMV07CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgJHBhcmFtID0gYXJyYXkoJ3J1bicgPT4gJHJ1
bl9pZCwgJ29yZGVyJyA9PiAkZmxhdHRlbmVkX29yZGVyLCAndmFsdWUnID0+ICRpdGVyYXRpb25f
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAnID0+IGNvdW50KCR2YWx1ZXMp
ID09IDEgPyBOVUxMIDogJGdyb3VwLCAncmVsYXRpdmVfdGltZScgPT4gJHJlbGF0aXZlX3RpbWUp
OworICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZGItPmluc2VydF9yb3coJ3J1bl9pdGVyYXRp
b25zJywgJ2l0ZXJhdGlvbicsICRwYXJhbSwgTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9yICR0aGlzLT5yb2xsYmFja193aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydEl0ZXJhdGlvbics
IGFycmF5KCdjb25maWcnID0+ICRjb25maWdfaWQsICdidWlsZCcgPT4gJGJ1aWxkX2lkLCAncGFy
YW0nID0+ICRwYXJhbSkpOworICAgICAgICAgICAgICAgICAgICAkZmxhdHRlbmVkX29yZGVyKys7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
JHRoaXMtPmRiLT5xdWVyeV9hbmRfZ2V0X2FmZmVjdGVkX3Jvd3MoIlVQREFURSByZXBvcnRzIFNF
VCByZXBvcnRfY29tbWl0dGVkX2F0ID0gQ1VSUkVOVF9USU1FU1RBTVAgQVQgVElNRSBaT05FICdV
VEMnCisgICAgICAgICAgICBXSEVSRSByZXBvcnRfaWQgPSAkMSIsIGFycmF5KCR0aGlzLT5yZXBv
cnRfaWQpKTsKKworICAgICAgICAkdGhpcy0+ZGItPmNvbW1pdF90cmFuc2FjdGlvbigpIG9yICR0
aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvQ29tbWl0VHJhbnNhY3Rpb24nKTsKKyAgICB9
CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJvbGxiYWNrX3dpdGhfZXJyb3IoJG1lc3NhZ2UsICRk
ZXRhaWxzKSB7CisgICAgICAgICR0aGlzLT5kYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAg
ICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpOworICAgIH0K
K307CisKKz8+CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUv
dGVzdC1uYW1lLXJlc29sdmVyLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2luY2x1ZGUvdGVzdC1uYW1lLXJlc29sdmVyLnBocAkocmV2aXNpb24gMCkK
KysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS90ZXN0LW5hbWUtcmVz
b2x2ZXIucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACis8P3BocAorCitjbGFz
cyBUZXN0TmFtZVJlc29sdmVyIHsKKworICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYikgewor
ICAgICAgICAkdGhpcy0+ZGIgPSAkZGI7CisgICAgICAgICR0aGlzLT5mdWxsX25hbWVfdG9fdGVz
dCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT50ZXN0X2lkX3RvX2NoaWxkX21ldHJpY3MgPSBh
cnJheSgpOworICAgICAgICAkdGhpcy0+dGVzdF90b19tZXRyaWNzID0gYXJyYXkoKTsKKyAgICAg
ICAgJHRoaXMtPnRlc3RzX3NvcnRlZF9ieV9mdWxsX25hbWUgPSBhcnJheSgpOworICAgICAgICAk
dGhpcy0+bWV0cmljX3RvX2NvbmZpZ3VyYXRpb25zID0gYXJyYXkoKTsKKyAgICAgICAgJHRoaXMt
PmlkX3RvX21ldHJpYyA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5pZF90b19hZ2dyZWdhdG9y
ID0gYXJyYXkoKTsKKworICAgICAgICAkdGVzdF90YWJsZSA9ICRkYi0+ZmV0Y2hfdGFibGUoJ3Rl
c3RzJyk7CisgICAgICAgIGlmICghJHRlc3RfdGFibGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgJHRlc3RfaWRfdG9fbmFtZSA9IGFycmF5KCk7CisgICAgICAgICR0ZXN0X2lkX3Rv
X3BhcmVudCA9IGFycmF5KCk7CisgICAgICAgIGZvcmVhY2ggKCR0ZXN0X3RhYmxlIGFzICR0ZXN0
X3JvdykgeworICAgICAgICAgICAgJHRlc3RfaWQgPSAkdGVzdF9yb3dbJ3Rlc3RfaWQnXTsKKyAg
ICAgICAgICAgICR0ZXN0X2lkX3RvX25hbWVbJHRlc3RfaWRdID0gJHRlc3Rfcm93Wyd0ZXN0X25h
bWUnXTsKKyAgICAgICAgICAgICR0ZXN0X2lkX3RvX3BhcmVudFskdGVzdF9pZF0gPSAkdGVzdF9y
b3dbJ3Rlc3RfcGFyZW50J107CisgICAgICAgIH0KKworICAgICAgICAkdGhpcy0+ZnVsbF9uYW1l
X3RvX3Rlc3QgPSAkdGhpcy0+Y29tcHV0ZV9mdWxsX25hbWUoJHRlc3RfdGFibGUsICR0ZXN0X2lk
X3RvX25hbWUsICR0ZXN0X2lkX3RvX3BhcmVudCk7CisgICAgICAgICR0aGlzLT50ZXN0X3RvX21l
dHJpY3MgPSAkdGhpcy0+bWFwX21ldHJpY3NfdG9fdGVzdHMoJGRiLT5mZXRjaF90YWJsZSgndGVz
dF9tZXRyaWNzJyksICR0ZXN0X2lkX3RvX3BhcmVudCk7CisgICAgICAgICR0aGlzLT50ZXN0c19z
b3J0ZWRfYnlfZnVsbF9uYW1lID0gJHRoaXMtPnNvcnRfdGVzdHNfYnlfZnVsbF9uYW1lKCR0aGlz
LT5mdWxsX25hbWVfdG9fdGVzdCk7CisKKyAgICAgICAgaWYgKCRjb25maWd1cmF0aW9ucyA9ICRk
Yi0+ZmV0Y2hfdGFibGUoJ3Rlc3RfY29uZmlndXJhdGlvbnMnKSkgeworICAgICAgICAgICAgZm9y
ZWFjaCAoJGNvbmZpZ3VyYXRpb25zIGFzICRjb25maWcpIHsKKyAgICAgICAgICAgICAgICAkbWV0
cmljX2lkID0gJGNvbmZpZ1snY29uZmlnX21ldHJpYyddOworICAgICAgICAgICAgICAgICRwbGF0
Zm9ybV9pZCA9ICRjb25maWdbJ2NvbmZpZ19wbGF0Zm9ybSddOworICAgICAgICAgICAgICAgIGFy
cmF5X3NldF9kZWZhdWx0KCR0aGlzLT5tZXRyaWNfdG9fY29uZmlndXJhdGlvbnMsICRtZXRyaWNf
aWQsIGFycmF5KCkpOworICAgICAgICAgICAgICAgIGFycmF5X3NldF9kZWZhdWx0KCR0aGlzLT5t
ZXRyaWNfdG9fY29uZmlndXJhdGlvbnNbJG1ldHJpY19pZF0sICRwbGF0Zm9ybV9pZCwgYXJyYXko
KSk7CisgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkdGhpcy0+bWV0cmljX3RvX2NvbmZpZ3Vy
YXRpb25zWyRtZXRyaWNfaWRdWyRwbGF0Zm9ybV9pZF0sICRjb25maWcpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCRhZ2dyZWdhdG9yX3RhYmxlID0gJGRiLT5mZXRj
aF90YWJsZSgnYWdncmVnYXRvcnMnKSkgeworICAgICAgICAgICAgZm9yZWFjaCAoJGFnZ3JlZ2F0
b3JfdGFibGUgYXMgJGFnZ3JlZ2F0b3IpCisgICAgICAgICAgICAgICAgJHRoaXMtPmlkX3RvX2Fn
Z3JlZ2F0b3JbJGFnZ3JlZ2F0b3JbJ2FnZ3JlZ2F0b3JfaWQnXV0gPSAkYWdncmVnYXRvcjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gY29tcHV0ZV9mdWxsX25hbWUo
JHRlc3RfdGFibGUsICR0ZXN0X2lkX3RvX25hbWUsICR0ZXN0X2lkX3RvX3BhcmVudCkgeworICAg
ICAgICAkZnVsbF9uYW1lX3RvX3Rlc3QgPSBhcnJheSgpOworICAgICAgICBmb3JlYWNoICgkdGVz
dF90YWJsZSBhcyAkdGVzdF9yb3cpIHsKKyAgICAgICAgICAgICR0ZXN0X3BhdGggPSBhcnJheSgp
OworICAgICAgICAgICAgJHRlc3RfaWQgPSAkdGVzdF9yb3dbJ3Rlc3RfaWQnXTsKKyAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR0ZXN0X3BhdGgsICR0ZXN0X2lk
X3RvX25hbWVbJHRlc3RfaWRdKTsKKyAgICAgICAgICAgICAgICAkdGVzdF9pZCA9ICR0ZXN0X2lk
X3RvX3BhcmVudFskdGVzdF9pZF07CisgICAgICAgICAgICB9IHdoaWxlICgkdGVzdF9pZCk7Cisg
ICAgICAgICAgICAkdGVzdF9yb3dbJ2Z1bGxfbmFtZSddID0gam9pbignLycsIGFycmF5X3JldmVy
c2UoJHRlc3RfcGF0aCkpOworICAgICAgICAgICAgJGZ1bGxfbmFtZV90b190ZXN0WyR0ZXN0X3Jv
d1snZnVsbF9uYW1lJ11dID0gJHRlc3Rfcm93OworICAgICAgICB9CisgICAgICAgIHJldHVybiAk
ZnVsbF9uYW1lX3RvX3Rlc3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBtYXBfbWV0
cmljc190b190ZXN0cygkbWV0cmljc190YWJsZSwgJHRlc3RfaWRfdG9fcGFyZW50KSB7CisgICAg
ICAgICR0ZXN0X3RvX21ldHJpY3MgPSBhcnJheSgpOworICAgICAgICBpZiAoISRtZXRyaWNzX3Rh
YmxlKQorICAgICAgICAgICAgcmV0dXJuICR0ZXN0X3RvX21ldHJpY3M7CisKKyAgICAgICAgZm9y
ZWFjaCAoJG1ldHJpY3NfdGFibGUgYXMgJG1ldHJpY19yb3cpIHsKKyAgICAgICAgICAgICR0aGlz
LT5pZF90b19tZXRyaWNbJG1ldHJpY19yb3dbJ21ldHJpY19pZCddXSA9ICRtZXRyaWNfcm93Owor
CisgICAgICAgICAgICAkdGVzdF9pZCA9ICRtZXRyaWNfcm93WydtZXRyaWNfdGVzdCddOworICAg
ICAgICAgICAgYXJyYXlfc2V0X2RlZmF1bHQoJHRlc3RfdG9fbWV0cmljcywgJHRlc3RfaWQsIGFy
cmF5KCkpOworICAgICAgICAgICAgYXJyYXlfcHVzaCgkdGVzdF90b19tZXRyaWNzWyR0ZXN0X2lk
XSwgJG1ldHJpY19yb3cpOworCisgICAgICAgICAgICAkcGFyZW50X2lkID0gJHRlc3RfaWRfdG9f
cGFyZW50WyR0ZXN0X2lkXTsKKyAgICAgICAgICAgIGlmICgkcGFyZW50X2lkKSB7CisgICAgICAg
ICAgICAgICAgYXJyYXlfc2V0X2RlZmF1bHQoJHRoaXMtPnRlc3RfaWRfdG9fY2hpbGRfbWV0cmlj
cywgJHBhcmVudF9pZCwgYXJyYXkoKSk7CisgICAgICAgICAgICAgICAgJHBhcmVudF9tZXRyaWNz
ID0gJiR0aGlzLT50ZXN0X2lkX3RvX2NoaWxkX21ldHJpY3NbJHBhcmVudF9pZF07CisgICAgICAg
ICAgICAgICAgaWYgKCFpbl9hcnJheSgkbWV0cmljX3Jvd1snbWV0cmljX25hbWUnXSwgJHBhcmVu
dF9tZXRyaWNzKSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkcGFyZW50X21ldHJp
Y3MsICRtZXRyaWNfcm93WydtZXRyaWNfbmFtZSddKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gJHRlc3RfdG9fbWV0cmljczsKKyAgICB9CisKKyAgICBwcml2YXRl
IGZ1bmN0aW9uIHNvcnRfdGVzdHNfYnlfZnVsbF9uYW1lKCRmdWxsX25hbWVfdG9fdGVzdCkgewor
ICAgICAgICAkdGVzdHNfc29ydGVkX2J5X2Z1bGxfbmFtZSA9IGFycmF5KCk7CisgICAgICAgICRm
dWxsX25hbWVzID0gYXJyYXlfa2V5cygkZnVsbF9uYW1lX3RvX3Rlc3QpOworICAgICAgICBhc29y
dCgkZnVsbF9uYW1lcyk7CisgICAgICAgIGZvcmVhY2ggKCRmdWxsX25hbWVzIGFzICRuYW1lKQor
ICAgICAgICAgICAgYXJyYXlfcHVzaCgkdGVzdHNfc29ydGVkX2J5X2Z1bGxfbmFtZSwgJGZ1bGxf
bmFtZV90b190ZXN0WyRuYW1lXSk7CisgICAgICAgIHJldHVybiAkdGVzdHNfc29ydGVkX2J5X2Z1
bGxfbmFtZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0cygpIHsKKyAgICAgICAgcmV0dXJu
ICR0aGlzLT50ZXN0c19zb3J0ZWRfYnlfZnVsbF9uYW1lOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3RfaWRfZm9yX2Z1bGxfbmFtZSgkZnVsbF9uYW1lKSB7CisgICAgICAgIHJldHVybiBhcnJh
eV9nZXQoJHRoaXMtPmZ1bGxfbmFtZV90b190ZXN0LCAkZnVsbF9uYW1lKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBmdWxsX25hbWVfZm9yX3Rlc3QoJHRlc3RfaWQpIHsKKyAgICAgICAgZm9yZWFj
aCAoJHRoaXMtPmZ1bGxfbmFtZV90b190ZXN0IGFzICRmdWxsX25hbWUgPT4gJHRlc3QpIHsKKyAg
ICAgICAgICAgIGlmICgkdGVzdFsndGVzdF9pZCddID09ICR0ZXN0X2lkKQorICAgICAgICAgICAg
ICAgIHJldHVybiAkZnVsbF9uYW1lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGZ1bGxfbmFtZV9mb3JfbWV0cmljKCRtZXRyaWNfaWQpIHsK
KyAgICAgICAgJG1ldHJpY19yb3cgPSBhcnJheV9nZXQoJHRoaXMtPmlkX3RvX21ldHJpYywgJG1l
dHJpY19pZCk7CisgICAgICAgIGlmICghJG1ldHJpY19yb3cpCisgICAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICAgICAgJGZ1bGxfbmFtZSA9ICR0aGlzLT5mdWxsX25hbWVfZm9yX3Rlc3QoJG1l
dHJpY19yb3dbJ21ldHJpY190ZXN0J10pIC4gJzonIC4gJG1ldHJpY19yb3dbJ21ldHJpY19uYW1l
J107CisgICAgICAgIGlmICgkYWdncmVnYXRvcl9pZCA9ICRtZXRyaWNfcm93WydtZXRyaWNfYWdn
cmVnYXRvciddKQorICAgICAgICAgICAgJGZ1bGxfbmFtZSAuPSAnOicgLiAkdGhpcy0+aWRfdG9f
YWdncmVnYXRvclskYWdncmVnYXRvcl9pZF1bJ2FnZ3JlZ2F0b3JfbmFtZSddOworICAgICAgICBy
ZXR1cm4gJGZ1bGxfbmFtZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtZXRyaWNzX2Zvcl90ZXN0
X2lkKCR0ZXN0X2lkKSB7CisgICAgICAgIHJldHVybiBhcnJheV9nZXQoJHRoaXMtPnRlc3RfdG9f
bWV0cmljcywgJHRlc3RfaWQsIGFycmF5KCkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoaWxk
X21ldHJpY3NfZm9yX3Rlc3RfaWQoJHRlc3RfaWQpIHsKKyAgICAgICAgcmV0dXJuIGFycmF5X2dl
dCgkdGhpcy0+dGVzdF9pZF90b19jaGlsZF9tZXRyaWNzLCAkdGVzdF9pZCwgYXJyYXkoKSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gY29uZmlndXJhdGlvbnNfZm9yX21ldHJpY19hbmRfcGxhdGZv
cm0oJG1ldHJpY19pZCwgJHBsYXRmb3JtX2lkKSB7CisgICAgICAgICRtZXRyaWNfY29uZmlndXJh
dGlvbnMgPSBhcnJheV9nZXQoJHRoaXMtPm1ldHJpY190b19jb25maWd1cmF0aW9ucywgJG1ldHJp
Y19pZCwgYXJyYXkoKSk7CisgICAgICAgIHJldHVybiBhcnJheV9nZXQoJG1ldHJpY19jb25maWd1
cmF0aW9ucywgJHBsYXRmb3JtX2lkKTsKKyAgICB9Cit9CisKKz8+CkluZGV4OiBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanMJKHJl
dmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2hlbHBlci1j
bGFzc2VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzk1IEBACisKKy8vIEEgcG9pbnQg
aW4gYSBwbG90LgorZnVuY3Rpb24gUGVyZlRlc3RSZXN1bHQocnVucywgcmVzdWx0LCBhc3NvY2lh
dGVkQnVpbGQpIHsKKyAgICB0aGlzLm1ldHJpYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJ1bnMu
bWV0cmljKCk7IH0KKyAgICB0aGlzLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3Vs
dC52YWx1ZXMgPyByZXN1bHQudmFsdWVzLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHJ1
bnMuc2NhbGluZ0ZhY3RvcigpICogdmFsdWU7IH0pIDogdW5kZWZpbmVkOyB9CisgICAgdGhpcy5t
ZWFuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcnVucy5zY2FsaW5nRmFjdG9yKCkgKiByZXN1bHQu
bWVhbjsgfQorICAgIHRoaXMudW5zY2FsZWRNZWFuID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVz
dWx0Lm1lYW47IH0KKyAgICB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhID0gZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gcnVucy5zY2FsaW5nRmFjdG9yKCkgKiB0aGlzLnVuc2NhbGVk
Q29uZmlkZW5jZUludGVydmFsRGVsdGEoKTsKKyAgICB9CisgICAgdGhpcy51bnNjYWxlZENvbmZp
ZGVuY2VJbnRlcnZhbERlbHRhID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gU3RhdGlz
dGljcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwLjk1LCByZXN1bHQuaXRlcmF0aW9uQ291bnQs
IHJlc3VsdC5zdW0sIHJlc3VsdC5zcXVhcmVTdW0pOworICAgIH0KKyAgICB0aGlzLmlzQmV0dGVy
VGhhbiA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiBydW5zLnNtYWxsZXJJc0JldHRlcigpID09
ICh0aGlzLm1lYW4oKSA8IG90aGVyLm1lYW4oKSk7IH0KKyAgICB0aGlzLnJlbGF0aXZlRGlmZmVy
ZW5jZSA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiAob3RoZXIubWVhbigpIC0gdGhpcy5tZWFu
KCkpIC8gdGhpcy5tZWFuKCk7IH0KKyAgICB0aGlzLmZvcm1hdHRlZFJlbGF0aXZlRGlmZmVyZW5j
ZSA9IGZ1bmN0aW9uIChvdGhlcikgeyByZXR1cm4gTWF0aC5hYnModGhpcy5yZWxhdGl2ZURpZmZl
cmVuY2Uob3RoZXIpICogMTAwKS50b0ZpeGVkKDIpICsgJyUnOyB9CisgICAgdGhpcy5mb3JtYXR0
ZWRQcm9ncmVzc2lvbk9yUmVncmVzc2lvbiA9IGZ1bmN0aW9uIChwcmV2aW91c1Jlc3VsdCkgewor
ICAgICAgICByZXR1cm4gcHJldmlvdXNSZXN1bHQuZm9ybWF0dGVkUmVsYXRpdmVEaWZmZXJlbmNl
KHRoaXMpICsgJyAnICsgKHRoaXMuaXNCZXR0ZXJUaGFuKHByZXZpb3VzUmVzdWx0KSA/ICdiZXR0
ZXInIDogJ3dvcnNlJyk7CisgICAgfQorICAgIHRoaXMuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNh
bnQgPSBmdW5jdGlvbiAob3RoZXIpIHsKKyAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhvdGhl
ci5tZWFuKCkgLSB0aGlzLm1lYW4oKSk7CisgICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5jb25m
aWRlbmNlSW50ZXJ2YWxEZWx0YSgpICYmIGRpZmYgPiBvdGhlci5jb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSgpOworICAgIH0KKyAgICB0aGlzLmJ1aWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNz
b2NpYXRlZEJ1aWxkOyB9CisgICAgdGhpcy5sYWJlbCA9IGZ1bmN0aW9uIChwcmV2aW91c1Jlc3Vs
dCkgeworICAgICAgICB2YXIgbWVhbiA9IHRoaXMubWVhbigpOworICAgICAgICB2YXIgbGFiZWwg
PSBtZWFuLnRvUHJlY2lzaW9uKDQpICsgJyAnICsgcnVucy51bml0KCk7CisKKyAgICAgICAgdmFy
IGRlbHRhID0gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpOworICAgICAgICBpZiAoZGVs
dGEpIHsKKyAgICAgICAgICAgIHZhciBwZXJjZW50YWdlU3RkZXYgPSBkZWx0YSAqIDEwMCAvIG1l
YW47CisgICAgICAgICAgICBsYWJlbCArPSAnICZwbHVzbW47ICcgKyBwZXJjZW50YWdlU3RkZXYu
dG9GaXhlZCgyKSArICclJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcmV2aW91c1Jlc3Vs
dCkKKyAgICAgICAgICAgIGxhYmVsICs9ICcgKCcgKyB0aGlzLmZvcm1hdHRlZFByb2dyZXNzaW9u
T3JSZWdyZXNzaW9uKHByZXZpb3VzUmVzdWx0KSArICcpJzsKKworICAgICAgICByZXR1cm4gbGFi
ZWw7CisgICAgfQorfQorCitmdW5jdGlvbiBUZXN0QnVpbGQocmVwb3NpdG9yaWVzLCBidWlsZGVy
cywgcGxhdGZvcm0sIHJhd1J1bikgeworICAgIGNvbnN0IHJldmlzaW9ucyA9IHJhd1J1bi5yZXZp
c2lvbnM7CisgICAgdmFyIG1heFRpbWUgPSAwOworICAgIHZhciByZXZpc2lvbkNvdW50ID0gMDsK
KyAgICBmb3IgKHZhciByZXBvc2l0b3J5TmFtZSBpbiByZXZpc2lvbnMpIHsKKyAgICAgICAgbWF4
VGltZSA9IE1hdGgubWF4KG1heFRpbWUsIHJldmlzaW9uc1tyZXBvc2l0b3J5TmFtZV1bMV0pOyAv
LyBSZXZpc2lvbiBpcyBhbiBwYWlyIChyZXZpc2lvbiwgdGltZSkKKyAgICAgICAgcmV2aXNpb25D
b3VudCsrOworICAgIH0KKyAgICBpZiAoIW1heFRpbWUpCisgICAgICAgIG1heFRpbWUgPSByYXdS
dW4uYnVpbGRUaW1lOworICAgIG1heFRpbWUgPSBUZXN0QnVpbGQuVVRDdG9QU1QobWF4VGltZSk7
CisgICAgdmFyIG1heFRpbWVTdHJpbmcgPSBuZXcgRGF0ZShtYXhUaW1lKS50b0lTT1N0cmluZygp
LnJlcGxhY2UoJ1QnLCAnICcpLnJlcGxhY2UoL1wuXGQrWiQvLCAnJyk7CisgICAgdmFyIGJ1aWxk
VGltZSA9IFRlc3RCdWlsZC5VVEN0b1BTVChyYXdSdW4uYnVpbGRUaW1lKTsKKyAgICB2YXIgYnVp
bGRUaW1lU3RyaW5nID0gbmV3IERhdGUoYnVpbGRUaW1lKS50b0lTT1N0cmluZygpLnJlcGxhY2Uo
J1QnLCAnICcpLnJlcGxhY2UoL1wuXGQrWiQvLCAnJyk7CisKKyAgICB0aGlzLnRpbWUgPSBmdW5j
dGlvbiAoKSB7IHJldHVybiBtYXhUaW1lOyB9CisgICAgdGhpcy5mb3JtYXR0ZWRUaW1lID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gbWF4VGltZVN0cmluZzsgfQorICAgIHRoaXMuYnVpbGRUaW1lID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVpbGRUaW1lOyB9CisgICAgdGhpcy5mb3JtYXR0ZWRCdWls
ZFRpbWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBidWlsZFRpbWVTdHJpbmc7IH0KKyAgICB0aGlz
LmJ1aWxkZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBidWlsZGVyc1tyYXdSdW4uYnVpbGRlcl0u
bmFtZTsgfQorICAgIHRoaXMuYnVpbGROdW1iZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByYXdS
dW4uYnVpbGROdW1iZXI7IH0KKyAgICB0aGlzLmJ1aWxkVXJsID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICB2YXIgdGVtcGxhdGUgPSBidWlsZGVyc1tyYXdSdW4uYnVpbGRlcl0uYnVpbGRVcmw7Cisg
ICAgICAgIHJldHVybiB0ZW1wbGF0ZSA/IHRlbXBsYXRlLnJlcGxhY2UoL1wkYnVpbGROdW1iZXIv
ZywgdGhpcy5idWlsZE51bWJlcigpKSA6IG51bGw7CisgICAgfQorICAgIHRoaXMucGxhdGZvcm0g
PSBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybTsgfQorICAgIHRoaXMucmV2aXNpb24gPSBm
dW5jdGlvbihyZXBvc2l0b3J5TmFtZSkgeyByZXR1cm4gcmV2aXNpb25zW3JlcG9zaXRvcnlOYW1l
XVswXTsgfQorICAgIHRoaXMuZm9ybWF0dGVkUmV2aXNpb25zID0gZnVuY3Rpb24gKHByZXZpb3Vz
QnVpbGQpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHt9OworICAgICAgICBmb3IgKHZhciByZXBv
c2l0b3J5TmFtZSBpbiByZXZpc2lvbnMpIHsKKyAgICAgICAgICAgIHZhciBwcmV2aW91c1Jldmlz
aW9uID0gcHJldmlvdXNCdWlsZCA/IHByZXZpb3VzQnVpbGQucmV2aXNpb24ocmVwb3NpdG9yeU5h
bWUpIDogdW5kZWZpbmVkOworICAgICAgICAgICAgdmFyIGN1cnJlbnRSZXZpc2lvbiA9IHRoaXMu
cmV2aXNpb24ocmVwb3NpdG9yeU5hbWUpOworICAgICAgICAgICAgaWYgKHByZXZpb3VzUmV2aXNp
b24gPT09IGN1cnJlbnRSZXZpc2lvbikKKyAgICAgICAgICAgICAgICBwcmV2aW91c1JldmlzaW9u
ID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICB2YXIgcmV2aXNpb25QcmVmaXggPSAnJzsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50UmV2aXNpb24ubGVuZ3RoIDwgMTApIHsgLy8gU1ZOLWxpa2Ug
cmV2aXNpb24uCisgICAgICAgICAgICAgICAgcmV2aXNpb25QcmVmaXggPSAncic7CisgICAgICAg
ICAgICAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24pCisgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzUmV2aXNpb24gPSAocGFyc2VJbnQocHJldmlvdXNSZXZpc2lvbikgKyAxKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkgPSByZXZpc2lv
bkNvdW50ID8gcmVwb3NpdG9yeU5hbWUgOiAnJzsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1Jl
dmlzaW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkpCisg
ICAgICAgICAgICAgICAgICAgIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkgKz0gJyAnOworICAgICAg
ICAgICAgICAgIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkgKz0gcmV2aXNpb25QcmVmaXggKyBwcmV2
aW91c1JldmlzaW9uICsgJy0nICsgcmV2aXNpb25QcmVmaXggKyBjdXJyZW50UmV2aXNpb247Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBsYWJlbEZvclRoaXNSZXBvc2l0b3J5
ICs9ICcgQCAnICsgcmV2aXNpb25QcmVmaXggKyBjdXJyZW50UmV2aXNpb247CisKKyAgICAgICAg
ICAgIHZhciB1cmw7CisgICAgICAgICAgICB2YXIgcmVwb3NpdG9yeSA9IHJlcG9zaXRvcmllc1ty
ZXBvc2l0b3J5TmFtZV07CisgICAgICAgICAgICBpZiAocmVwb3NpdG9yeSkgeworICAgICAgICAg
ICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKQorICAgICAgICAgICAgICAgICAgICB1cmwgPSAo
cmVwb3NpdG9yeVsnYmxhbWVVcmwnXSB8fCAnJykucmVwbGFjZSgvXCQxL2csIHByZXZpb3VzUmV2
aXNpb24pLnJlcGxhY2UoL1wkMi9nLCBjdXJyZW50UmV2aXNpb24pOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gKHJlcG9zaXRvcnlbJ3VybCddIHx8ICcn
KS5yZXBsYWNlKC9cJDEvZywgY3VycmVudFJldmlzaW9uKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmVzdWx0W3JlcG9zaXRvcnlOYW1lXSA9IHsKKyAgICAgICAgICAgICAgICAnbGFi
ZWwnOiBsYWJlbEZvclRoaXNSZXBvc2l0b3J5LAorICAgICAgICAgICAgICAgICdjdXJyZW50UmV2
aXNpb24nOiBjdXJyZW50UmV2aXNpb24sCisgICAgICAgICAgICAgICAgJ3ByZXZpb3VzUmV2aXNp
b24nOiBwcmV2aW91c1JldmlzaW9uLAorICAgICAgICAgICAgICAgICd1cmwnOiB1cmwsCisgICAg
ICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQor
CitUZXN0QnVpbGQuVVRDdG9QU1QgPSBmdW5jdGlvbiAoZGF0ZSkgeworICAgIC8vIFByZXRlbmQg
dGhhdCBQU1QgaXMgVVRDIHNpbmNlIHZhbmlsbGEgZmxvdCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlw
bGUgdGltZXpvbmVzLgorICAgIGNvbnN0IFBTVE9mZnNldEluTWlsbGlzZWNvbmRzID0gOCAqIDM2
MDAgKiAxMDAwOworICAgIHJldHVybiBkYXRlIC0gUFNUT2Zmc2V0SW5NaWxsaXNlY29uZHM7Cit9
CitUZXN0QnVpbGQubm93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5VVEN0b1BTVChEYXRl
Lm5vdygpKTsgfQorCisvLyBBIHNlcXVlbmNlIG9mIHRlc3QgcmVzdWx0cyBmb3IgYSBzcGVjaWZp
YyB0ZXN0IG9uIGEgc3BlY2lmaWMgcGxhdGZvcm0KK2Z1bmN0aW9uIFBlcmZUZXN0UnVucyhtZXRy
aWMsIHBsYXRmb3JtKSB7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICB2YXIgY2FjaGVkVW5p
dCA9IG51bGw7CisgICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOworICAgIHZhciBi
YXNlbGluZXMgPSB7fTsKKyAgICB2YXIgdW5pdCA9IHsnQ29tYmluZWQnOiAnJywgLy8gQXNzdW1l
IHNtYWxsZXIgaXMgYmV0dGVyIGZvciBub3cuCisgICAgICAgICdGcmFtZVJhdGUnOiAnZnBzJywK
KyAgICAgICAgJ1J1bnMnOiAncnVucy9zJywKKyAgICAgICAgJ1RpbWUnOiAnbXMnLAorICAgICAg
ICAnTWFsbG9jJzogJ2J5dGVzJywKKyAgICAgICAgJ0pTSGVhcCc6ICdieXRlcycsCisgICAgICAg
ICdBbGxvY2F0aW9ucyc6ICdieXRlcycsCisgICAgICAgICdFbmRBbGxvY2F0aW9ucyc6ICdieXRl
cycsCisgICAgICAgICdNYXhBbGxvY2F0aW9ucyc6ICdieXRlcycsCisgICAgICAgICdNZWFuQWxs
b2NhdGlvbnMnOiAnYnl0ZXMnfVttZXRyaWMubmFtZV07CisKKyAgICAvLyBXZSBjYW4ndCBkbyB0
aGlzIGluIFBlcmZUZXN0UmVzdWx0IGJlY2F1c2UgYWxsIHJlc3VsdHMgZm9yIGVhY2ggbWV0cmlj
IG5lZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3Iu
CisgICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBhZGp1c3RpbmcgdW5pdHMgb24gZXZlcnkgdGVzdCBy
ZXN1bHQuCisgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb24gdGhlIGZpcnN0IHRlc3Qu
CisgICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgY2FjaGVkVW5pdCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgbWVhbiA9IHJlc3VsdHNbMF0udW5zY2FsZWRNZWFuKCk7
IC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayBhdCBhbGwgdmFsdWVzLgorICAgICAgICB2YXIga2ls
byA9IHVuaXQgPT0gJ2J5dGVzJyA/IDEwMjQgOiAxMDAwOworICAgICAgICBpZiAobWVhbiA+IDIg
KiBraWxvICoga2lsbyAmJiB1bml0ICE9ICdtcycpIHsKKyAgICAgICAgICAgIGNhY2hlZFNjYWxp
bmdGYWN0b3IgPSAxIC8ga2lsbyAvIGtpbG87CisgICAgICAgICAgICBjYWNoZWRVbml0ID0gJ00g
JyArIHVuaXQ7CisgICAgICAgIH0gZWxzZSBpZiAobWVhbiA+IDIgKiBraWxvKSB7CisgICAgICAg
ICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gMSAvIGtpbG87CisgICAgICAgICAgICBjYWNoZWRV
bml0ID0gdW5pdCA9PSAnbXMnID8gJ3MnIDogKCdLICcgKyB1bml0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSAxOworICAgICAgICAgICAgY2Fj
aGVkVW5pdCA9IHVuaXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLm1ldHJpYyA9IGZ1
bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYzsgfQorICAgIHRoaXMucGxhdGZvcm0gPSBmdW5jdGlv
biAoKSB7IHJldHVybiBwbGF0Zm9ybTsgfQorICAgIHRoaXMuYWRkUmVzdWx0ID0gZnVuY3Rpb24g
KG5ld1Jlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0cy5pbmRleE9mKG5ld1Jlc3VsdCkgPj0g
MCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVzdWx0cy5wdXNoKG5ld1Jlc3VsdCk7
CisgICAgICAgIGNhY2hlZFVuaXQgPSBudWxsOworICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9y
ID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5sYXN0UmVzdWx0ID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdOyB9CisgICAgdGhpcy5yZXN1bHRBdCA9IGZ1
bmN0aW9uIChpKSB7IHJldHVybiByZXN1bHRzW2ldOyB9CisKKyAgICB2YXIgdW5zY2FsZWRNZWFu
c0NhY2hlOworICAgIHZhciB1bnNjYWxlZE1lYW5zQ2FjaGVNaW5UaW1lOworICAgIGZ1bmN0aW9u
IHVuc2NhbGVkTWVhbnNGb3JBbGxSZXN1bHRzKG1pblRpbWUpIHsKKyAgICAgICAgaWYgKHVuc2Nh
bGVkTWVhbnNDYWNoZU1pblRpbWUgPT0gbWluVGltZSAmJiB1bnNjYWxlZE1lYW5zQ2FjaGUpCisg
ICAgICAgICAgICByZXR1cm4gdW5zY2FsZWRNZWFuc0NhY2hlOworICAgICAgICB1bnNjYWxlZE1l
YW5zQ2FjaGUgPSByZXN1bHRzLmZpbHRlcihmdW5jdGlvbiAocmVzdWx0KSB7IHJldHVybiAhbWlu
VGltZSB8fCByZXN1bHQuYnVpbGQoKS50aW1lKCkgPj0gbWluVGltZTsgfSkKKyAgICAgICAgICAg
IC5tYXAoZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnVuc2NhbGVkTWVhbigpOyB9
KTsKKyAgICAgICAgdW5zY2FsZWRNZWFuc0NhY2hlTWluVGltZSA9IG1pblRpbWU7CisgICAgICAg
IHJldHVybiB1bnNjYWxlZE1lYW5zQ2FjaGU7CisgICAgfQorCisgICAgdGhpcy5taW4gPSBmdW5j
dGlvbiAobWluVGltZSkgeworICAgICAgICByZXR1cm4gdGhpcy5zY2FsaW5nRmFjdG9yKCkgKiB1
bnNjYWxlZE1lYW5zRm9yQWxsUmVzdWx0cyhtaW5UaW1lKQorICAgICAgICAgICAgLnJlZHVjZShm
dW5jdGlvbiAobWluU29GYXIsIGN1cnJlbnRNZWFuKSB7IHJldHVybiBNYXRoLm1pbihtaW5Tb0Zh
ciwgY3VycmVudE1lYW4pOyB9LCBOdW1iZXIuTUFYX1ZBTFVFKTsKKyAgICB9CisgICAgdGhpcy5t
YXggPSBmdW5jdGlvbiAobWluVGltZSwgYmFzZWxpbmVOYW1lKSB7CisgICAgICAgIHJldHVybiB0
aGlzLnNjYWxpbmdGYWN0b3IoKSAqIHVuc2NhbGVkTWVhbnNGb3JBbGxSZXN1bHRzKG1pblRpbWUp
CisgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChtYXhTb0ZhciwgY3VycmVudE1lYW4pIHsg
cmV0dXJuIE1hdGgubWF4KG1heFNvRmFyLCBjdXJyZW50TWVhbik7IH0sIE51bWJlci5NSU5fVkFM
VUUpOworICAgIH0KKyAgICB0aGlzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uID0gZnVuY3Rpb24g
KG1pblRpbWUpIHsKKyAgICAgICAgdmFyIHVuc2NhbGVkTWVhbnMgPSB1bnNjYWxlZE1lYW5zRm9y
QWxsUmVzdWx0cyhtaW5UaW1lKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGluZ0ZhY3Rvcigp
ICogU3RhdGlzdGljcy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbih1bnNjYWxlZE1lYW5zLmxlbmd0
aCwgU3RhdGlzdGljcy5zdW0odW5zY2FsZWRNZWFucyksIFN0YXRpc3RpY3Muc3F1YXJlU3VtKHVu
c2NhbGVkTWVhbnMpKTsKKyAgICB9CisgICAgdGhpcy5leHBvbmVudGlhbE1vdmluZ0FyaXRobWV0
aWNNZWFuID0gZnVuY3Rpb24gKG1pblRpbWUsIGFscGhhKSB7CisgICAgICAgIHZhciB1bnNjYWxl
ZE1lYW5zID0gdW5zY2FsZWRNZWFuc0ZvckFsbFJlc3VsdHMobWluVGltZSk7CisgICAgICAgIGlm
ICghdW5zY2FsZWRNZWFucy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAg
ICByZXR1cm4gdGhpcy5zY2FsaW5nRmFjdG9yKCkgKiB1bnNjYWxlZE1lYW5zLnJlZHVjZShmdW5j
dGlvbiAobW92aW5nQXZlcmFnZSwgY3VycmVudE1lYW4pIHsgcmV0dXJuIGFscGhhICogbW92aW5n
QXZlcmFnZSArICgxIC0gYWxwaGEpICogbW92aW5nQXZlcmFnZTsgfSk7CisgICAgfQorICAgIHRo
aXMuaGFzQ29uZmlkZW5jZUludGVydmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gIWlzTmFOKHRo
aXMubGFzdFJlc3VsdCgpLnVuc2NhbGVkQ29uZmlkZW5jZUludGVydmFsRGVsdGEoKSk7IH0KKyAg
ICB2YXIgbWVhblBsb3RDYWNoZTsKKyAgICB0aGlzLm1lYW5QbG90RGF0YSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKCFtZWFuUGxvdENhY2hlKQorICAgICAgICAgICAgbWVhblBsb3RDYWNo
ZSA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbcmVzdWx0
LmJ1aWxkKCkudGltZSgpLCByZXN1bHQubWVhbigpXTsgfSk7CisgICAgICAgIHJldHVybiBtZWFu
UGxvdENhY2hlOworICAgIH0KKyAgICB2YXIgdXBwZXJDb25maWRlbmNlQ2FjaGU7CisgICAgdGhp
cy51cHBlckNvbmZpZGVuY2VQbG90RGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKCF1
cHBlckNvbmZpZGVuY2VDYWNoZSkgLy8gRklYTUU6IFVzZSB0aGUgYWN0dWFsIGNvbmZpZGVuY2Ug
aW50ZXJ2YWwKKyAgICAgICAgICAgIHVwcGVyQ29uZmlkZW5jZUNhY2hlID0gcmVzdWx0cy5tYXAo
ZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtyZXN1bHQuYnVpbGQoKS50aW1lKCks
IHJlc3VsdC5tZWFuKCkgKyByZXN1bHQuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKV07IH0pOwor
ICAgICAgICByZXR1cm4gdXBwZXJDb25maWRlbmNlQ2FjaGU7CisgICAgfQorICAgIHZhciBsb3dl
ckNvbmZpZGVuY2VDYWNoZTsKKyAgICB0aGlzLmxvd2VyQ29uZmlkZW5jZVBsb3REYXRhID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICBpZiAoIWxvd2VyQ29uZmlkZW5jZUNhY2hlKSAvLyBGSVhNRTog
VXNlIHRoZSBhY3R1YWwgY29uZmlkZW5jZSBpbnRlcnZhbAorICAgICAgICAgICAgbG93ZXJDb25m
aWRlbmNlQ2FjaGUgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1
cm4gW3Jlc3VsdC5idWlsZCgpLnRpbWUoKSwgcmVzdWx0Lm1lYW4oKSAtIHJlc3VsdC5jb25maWRl
bmNlSW50ZXJ2YWxEZWx0YSgpXTsgfSk7CisgICAgICAgIHJldHVybiBsb3dlckNvbmZpZGVuY2VD
YWNoZTsKKyAgICB9CisgICAgdGhpcy5zY2FsaW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIGNhY2hl
ZFNjYWxpbmdGYWN0b3I7CisgICAgfQorICAgIHRoaXMudW5pdCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpOworICAgICAgICByZXR1cm4gY2Fj
aGVkVW5pdDsKKyAgICB9CisgICAgdGhpcy5zbWFsbGVySXNCZXR0ZXIgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIHVuaXQgPT0gJ21zJyB8fCB1bml0ID09ICdieXRlcycgfHwgdW5pdCA9PSAnJzsgfQor
fQorCit2YXIgVVJMU3RhdGUgPSBuZXcgKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgaGFzaDsKKyAg
ICB2YXIgcGFyYW1ldGVyczsKKyAgICB2YXIgdXBkYXRlVGltZXI7CisKKyAgICBmdW5jdGlvbiBw
YXJzZUlmTmVlZGVkKCkgeworICAgICAgICBpZiAodXBkYXRlVGltZXIgfHwgJyMnICsgaGFzaCA9
PSBsb2NhdGlvbi5oYXNoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBoYXNoID0gbG9j
YXRpb24uaGFzaC5zdWJzdHIoMSkucmVwbGFjZSgvXC8rJC8sICcnKTsKKyAgICAgICAgcGFyYW1l
dGVycyA9IHt9OworICAgICAgICBoYXNoLnNwbGl0KC9bJjtdLykuZm9yRWFjaChmdW5jdGlvbiAo
dG9rZW4pIHsKKyAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IHRva2VuLnNwbGl0KCc9Jyk7Cisg
ICAgICAgICAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlWzBdKTsKKyAg
ICAgICAgICAgIGlmIChrZXkubGVuZ3RoKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNba2V5
XSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZS5zbGljZSgxKS5qb2luKCc9JykpOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB1cGRhdGVIYXNoKCkgeworICAgICAgICBp
ZiAobG9jYXRpb24uaGFzaCAhPSBoYXNoKQorICAgICAgICAgICAgbG9jYXRpb24uaGFzaCA9IGhh
c2g7CisgICAgfQorCisgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoa2V5LCBkZWZhdWx0VmFsdWUp
IHsKKyAgICAgICAgcGFyc2VJZk5lZWRlZCgpOworICAgICAgICBpZiAoa2V5IGluIHBhcmFtZXRl
cnMpCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1trZXldOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNj
aGVkdWxlSGFzaFVwZGF0ZSgpIHsKKyAgICAgICAgdmFyIG5ld0hhc2ggPSAnJzsKKyAgICAgICAg
Zm9yIChrZXkgaW4gcGFyYW1ldGVycykgeworICAgICAgICAgICAgaWYgKG5ld0hhc2gubGVuZ3Ro
KQorICAgICAgICAgICAgICAgIG5ld0hhc2ggKz0gJyYnOworICAgICAgICAgICAgbmV3SGFzaCAr
PSBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXJh
bWV0ZXJzW2tleV0pOworICAgICAgICB9CisgICAgICAgIGhhc2ggPSBuZXdIYXNoOworICAgICAg
ICBpZiAodXBkYXRlVGltZXIpCisgICAgICAgICAgICBjbGVhclRpbWVvdXQodXBkYXRlVGltZXIp
OworCisgICAgICAgIHVwZGF0ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICB1cGRhdGVUaW1lciA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHVwZGF0ZUhhc2go
KTsKKyAgICAgICAgfSwgNTAwKTsKKyAgICB9CisKKyAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChr
ZXksIHZhbHVlKSB7CisgICAgICAgIHBhcnNlSWZOZWVkZWQoKTsKKyAgICAgICAgcGFyYW1ldGVy
c1trZXldID0gdmFsdWU7CisgICAgICAgIHNjaGVkdWxlSGFzaFVwZGF0ZSgpOworICAgIH0KKwor
ICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICBwYXJzZUlmTmVlZGVk
KCk7CisgICAgICAgIGRlbGV0ZSBwYXJhbWV0ZXJzW2tleV07CisgICAgICAgIHNjaGVkdWxlSGFz
aFVwZGF0ZSgpOworICAgIH0KKworICAgIHZhciB3YXRjaENhbGxiYWNrcyA9IHt9OworICAgIGZ1
bmN0aW9uIG9uaGFzaGNoYW5nZSgpIHsKKyAgICAgICAgaWYgKCcjJyArIGhhc2ggPT0gbG9jYXRp
b24uaGFzaCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBSYWNlLiBJZiB0aGUg
aGFzaCBoYWQgY2hhbmdlZCB3aGlsZSB3ZSdyZSB3YWl0aW5nIHRvIHVwZGF0ZSwgaWdub3JlIHRo
ZSBjaGFuZ2UuCisgICAgICAgIGlmICh1cGRhdGVUaW1lcikgeworICAgICAgICAgICAgY2xlYXJU
aW1lb3V0KHVwZGF0ZVRpbWVyKTsKKyAgICAgICAgICAgIHVwZGF0ZVRpbWVyID0gdW5kZWZpbmVk
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGlnbm9yaW5nIFVSTFN0
YXRlLnNldC9yZW1vdmUgd2hpbGUgbm90aWZ5aW5nIGNhbGxiYWNrcy4KKyAgICAgICAgdmFyIG9s
ZFBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOworICAgICAgICBwYXJzZUlmTmVlZGVkKCk7CisgICAg
ICAgIHZhciBjYWxsYmFja3MgPSBbXTsKKyAgICAgICAgdmFyIGNoYW5nZWRTdGF0ZXMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIga2V5IGluIHdhdGNoQ2FsbGJhY2tzKSB7CisgICAgICAgICAgICBp
ZiAocGFyYW1ldGVyc1trZXldID09IG9sZFBhcmFtZXRlcnNba2V5XSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGNoYW5nZWRTdGF0ZXMucHVzaChrZXkpOworICAgICAg
ICAgICAgY2FsbGJhY2tzLnB1c2god2F0Y2hDYWxsYmFja3Nba2V5XSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykKKyAgICAg
ICAgICAgIGNhbGxiYWNrc1tpXShjaGFuZ2VkU3RhdGVzKTsKKyAgICB9CisgICAgJCh3aW5kb3cp
LmJpbmQoJ2hhc2hjaGFuZ2UnLCBvbmhhc2hjaGFuZ2UpOworCisgICAgLy8gRklYTUU6IFN1cHBv
cnQgbXVsdGlwbGUgY2FsbGJhY2tzIG9uIGEgc2luZ2xlIGtleS4KKyAgICB0aGlzLndhdGNoID0g
ZnVuY3Rpb24gKGtleSwgY2FsbGJhY2spIHsKKyAgICAgICAgcGFyc2VJZk5lZWRlZCgpOworICAg
ICAgICB3YXRjaENhbGxiYWNrc1trZXldID0gY2FsbGJhY2s7CisgICAgfQorfSk7CisKK2Z1bmN0
aW9uIFRvb2x0aXAoY29udGFpbmVyUGFyZW50LCBjbGFzc05hbWUpIHsKKyAgICB2YXIgY29udGFp
bmVyOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB2YXIgaGlkZVRpbWVyOyAvLyBVc2Ugc2V0
VGltZW91dCh+LCAwKSB0byB3b3JrYXJvdW5kIHRoZSByYWNlIGNvbmRpdGlvbiB0aGF0IGFyaXNl
cyB3aGVuIG1vdmluZyBtb3VzZSBmYXN0LgorICAgIHZhciBwcmV2aW91c0NvbnRlbnQ7CisKKyAg
ICBmdW5jdGlvbiBlbnN1cmVDb250YWluZXIoKSB7CisgICAgICAgIGlmIChjb250YWluZXIpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworICAgICAgICAkKGNvbnRhaW5lclBhcmVudCkuYXBwZW5kKGNvbnRhaW5l
cik7CisgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgICAgIGNv
bnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisgICAgICAgICQoY29udGFpbmVy
KS5oaWRlKCk7CisgICAgfQorCisgICAgdGhpcy5zaG93ID0gZnVuY3Rpb24gKHgsIHksIGNvbnRl
bnQpIHsKKyAgICAgICAgaWYgKGhpZGVUaW1lcikgeworICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KGhpZGVUaW1lcik7CisgICAgICAgICAgICBoaWRlVGltZXIgPSB1bmRlZmluZWQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocHJldmlvdXNDb250ZW50ID09PSBjb250ZW50KSB7CisgICAgICAg
ICAgICAkKGNvbnRhaW5lcikuc2hvdygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7CisKKyAgICAgICAgZW5zdXJlQ29u
dGFpbmVyKCk7CisgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBjb250ZW50OworICAgICAg
ICAkKGNvbnRhaW5lcikuc2hvdygpOworICAgICAgICAvLyBGSVhNRTogU3R5bGUgc3BlY2lmaWMg
Y29tcHV0YXRpb24gbGlrZSB0aGlzIG9uZSBzaG91bGRuJ3QgYmUgaW4gVG9vbHRpcCBjbGFzcy4K
KyAgICAgICAgJChjb250YWluZXIpLm9mZnNldCh7bGVmdDogeCAtICQoY29udGFpbmVyKS5vdXRl
cldpZHRoKCkgLyAyLCB0b3A6IHkgLSAkKGNvbnRhaW5lcikub3V0ZXJIZWlnaHQoKSAtIDE1fSk7
CisgICAgfQorCisgICAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoIWNv
bnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoaGlkZVRpbWVyKQor
ICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZGVUaW1lcik7CisgICAgICAgIGhpZGVUaW1lciA9
IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJChjb250YWluZXIpLmZhZGVP
dXQoMTAwKTsKKyAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0ID0gdW5kZWZpbmVkOworICAgICAg
ICB9LCAwKTsKKyAgICB9CisKKyAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uIChpbW1lZGlhdGVs
eSkgeworICAgICAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoaGlkZVRpbWVyKQorICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZGVUaW1lcik7
CisKKyAgICAgICAgJChjb250YWluZXIpLnJlbW92ZSgpOworICAgICAgICBjb250YWluZXIgPSB1
bmRlZmluZWQ7CisgICAgICAgIHByZXZpb3VzUmVzdWx0ID0gdW5kZWZpbmVkOworICAgIH0KKwor
ICAgIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAkKGNvbnRhaW5lcikudG9n
Z2xlKCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsgLy8g
VG9nZ2xlZCB0b29sdGlwIHNob3VsZCBzaG93IHVwIGF0IHRoZSB0b3AuCisgICAgfQorCisgICAg
dGhpcy5iaW5kQ2xpY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAgICAgICAgZW5zdXJlQ29u
dGFpbmVyKCk7CisgICAgICAgICQoY29udGFpbmVyKS5iaW5kKCdjbGljaycsIGNhbGxiYWNrKTsK
KyAgICB9CisgICAgdGhpcy5iaW5kTW91c2VFbnRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewor
ICAgICAgICBlbnN1cmVDb250YWluZXIoKTsKKyAgICAgICAgJChjb250YWluZXIpLmJpbmQoJ21v
dXNlZW50ZXInLCBjYWxsYmFjayk7CisgICAgfQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9oZWxwZXItY2xhc3Nlcy5qcwpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
anMvanF1ZXJ5LmNvbG9yaGVscGVycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5jb2xvcmhlbHBlcnMuanMJKHJldmlzaW9uIDApCisr
KyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5jb2xvcmhlbHBlcnMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzkgQEAKKy8qIFBsdWdpbiBmb3IgalF1ZXJ5
IGZvciB3b3JraW5nIHdpdGggY29sb3JzLgorICogCisgKiBWZXJzaW9uIDEuMS4KKyAqIAorICog
SW5zcGlyYXRpb24gZnJvbSBqUXVlcnkgY29sb3IgYW5pbWF0aW9uIHBsdWdpbiBieSBKb2huIFJl
c2lnLgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBieSBPbGUgTGF1cnNl
biwgT2N0b2JlciAyMDA5LgorICoKKyAqIEV4YW1wbGVzOgorICoKKyAqICAgJC5jb2xvci5wYXJz
ZSgiI2ZmZiIpLnNjYWxlKCdyZ2InLCAwLjI1KS5hZGQoJ2EnLCAtMC41KS50b1N0cmluZygpCisg
KiAgIHZhciBjID0gJC5jb2xvci5leHRyYWN0KCQoIiNteWRpdiIpLCAnYmFja2dyb3VuZC1jb2xv
cicpOworICogICBjb25zb2xlLmxvZyhjLnIsIGMuZywgYy5iLCBjLmEpOworICogICAkLmNvbG9y
Lm1ha2UoMTAwLCA1MCwgMjUsIDAuNCkudG9TdHJpbmcoKSAvLyByZXR1cm5zICJyZ2JhKDEwMCw1
MCwyNSwwLjQpIgorICoKKyAqIE5vdGUgdGhhdCAuc2NhbGUoKSBhbmQgLmFkZCgpIHJldHVybiB0
aGUgc2FtZSBtb2RpZmllZCBvYmplY3QKKyAqIGluc3RlYWQgb2YgbWFraW5nIGEgbmV3IG9uZS4K
KyAqCisgKiBWLiAxLjE6IEZpeCBlcnJvciBoYW5kbGluZyBzbyBlLmcuIHBhcnNpbmcgYW4gZW1w
dHkgc3RyaW5nIGRvZXMKKyAqIHByb2R1Y2UgYSBjb2xvciByYXRoZXIgdGhhbiBqdXN0IGNyYXNo
aW5nLgorICovIAorCisoZnVuY3Rpb24oJCkgeworICAgICQuY29sb3IgPSB7fTsKKworICAgIC8v
IGNvbnN0cnVjdCBjb2xvciBvYmplY3Qgd2l0aCBzb21lIGNvbnZlbmllbnQgY2hhaW5hYmxlIGhl
bHBlcnMKKyAgICAkLmNvbG9yLm1ha2UgPSBmdW5jdGlvbiAociwgZywgYiwgYSkgeworICAgICAg
ICB2YXIgbyA9IHt9OworICAgICAgICBvLnIgPSByIHx8IDA7CisgICAgICAgIG8uZyA9IGcgfHwg
MDsKKyAgICAgICAgby5iID0gYiB8fCAwOworICAgICAgICBvLmEgPSBhICE9IG51bGwgPyBhIDog
MTsKKworICAgICAgICBvLmFkZCA9IGZ1bmN0aW9uIChjLCBkKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgb1tjLmNoYXJB
dChpKV0gKz0gZDsKKyAgICAgICAgICAgIHJldHVybiBvLm5vcm1hbGl6ZSgpOworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgby5zY2FsZSA9IGZ1bmN0aW9uIChjLCBmKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAg
b1tjLmNoYXJBdChpKV0gKj0gZjsKKyAgICAgICAgICAgIHJldHVybiBvLm5vcm1hbGl6ZSgpOwor
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgby50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmIChvLmEgPj0gMS4wKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJy
Z2IoIitbby5yLCBvLmcsIG8uYl0uam9pbigiLCIpKyIpIjsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICJyZ2JhKCIrW28uciwgby5nLCBvLmIsIG8uYV0uam9p
bigiLCIpKyIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBvLm5vcm1h
bGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNsYW1wKG1pbiwgdmFs
dWUsIG1heCkgeworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pbiA/IG1pbjogKHZh
bHVlID4gbWF4ID8gbWF4OiB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG8uciA9IGNsYW1wKDAsIHBhcnNlSW50KG8uciksIDI1NSk7CisgICAgICAgICAg
ICBvLmcgPSBjbGFtcCgwLCBwYXJzZUludChvLmcpLCAyNTUpOworICAgICAgICAgICAgby5iID0g
Y2xhbXAoMCwgcGFyc2VJbnQoby5iKSwgMjU1KTsKKyAgICAgICAgICAgIG8uYSA9IGNsYW1wKDAs
IG8uYSwgMSk7CisgICAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgfTsKKworICAgICAgICBv
LmNsb25lID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICQuY29sb3IubWFrZShv
LnIsIG8uYiwgby5nLCBvLmEpOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBvLm5vcm1h
bGl6ZSgpOworICAgIH0KKworICAgIC8vIGV4dHJhY3QgQ1NTIGNvbG9yIHByb3BlcnR5IGZyb20g
ZWxlbWVudCwgZ29pbmcgdXAgaW4gdGhlIERPTQorICAgIC8vIGlmIGl0J3MgInRyYW5zcGFyZW50
IgorICAgICQuY29sb3IuZXh0cmFjdCA9IGZ1bmN0aW9uIChlbGVtLCBjc3MpIHsKKyAgICAgICAg
dmFyIGM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGMgPSBlbGVtLmNzcyhjc3MpLnRvTG93
ZXJDYXNlKCk7CisgICAgICAgICAgICAvLyBrZWVwIGdvaW5nIHVudGlsIHdlIGZpbmQgYW4gZWxl
bWVudCB0aGF0IGhhcyBjb2xvciwgb3IKKyAgICAgICAgICAgIC8vIHdlIGhpdCB0aGUgYm9keQor
ICAgICAgICAgICAgaWYgKGMgIT0gJycgJiYgYyAhPSAndHJhbnNwYXJlbnQnKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50KCk7CisgICAgICAg
IH0gd2hpbGUgKCEkLm5vZGVOYW1lKGVsZW0uZ2V0KDApLCAiYm9keSIpKTsKKworICAgICAgICAv
LyBjYXRjaCBTYWZhcmkncyB3YXkgb2Ygc2lnbmFsbGluZyB0cmFuc3BhcmVudAorICAgICAgICBp
ZiAoYyA9PSAicmdiYSgwLCAwLCAwLCAwKSIpCisgICAgICAgICAgICBjID0gInRyYW5zcGFyZW50
IjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAkLmNvbG9yLnBhcnNlKGMpOworICAgIH0KKyAg
ICAKKyAgICAvLyBwYXJzZSBDU1MgY29sb3Igc3RyaW5nIChsaWtlICJyZ2IoMTAsIDMyLCA0Myki
IG9yICIjZmZmIiksCisgICAgLy8gcmV0dXJucyBjb2xvciBvYmplY3QsIGlmIHBhcnNpbmcgZmFp
bGVkLCB5b3UgZ2V0IGJsYWNrICgwLCAwLAorICAgIC8vIDApIG91dAorICAgICQuY29sb3IucGFy
c2UgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgIHZhciByZXMsIG0gPSAkLmNvbG9yLm1ha2U7
CisKKyAgICAgICAgLy8gTG9vayBmb3IgcmdiKG51bSxudW0sbnVtKQorICAgICAgICBpZiAocmVz
ID0gL3JnYlwoXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17
MSwzfSlccypcKS8uZXhlYyhzdHIpKQorICAgICAgICAgICAgcmV0dXJuIG0ocGFyc2VJbnQocmVz
WzFdLCAxMCksIHBhcnNlSW50KHJlc1syXSwgMTApLCBwYXJzZUludChyZXNbM10sIDEwKSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBMb29rIGZvciByZ2JhKG51bSxudW0sbnVtLG51bSkKKyAgICAg
ICAgaWYgKHJlcyA9IC9yZ2JhXChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMq
LFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylccypcKS8uZXhlYyhz
dHIpKQorICAgICAgICAgICAgcmV0dXJuIG0ocGFyc2VJbnQocmVzWzFdLCAxMCksIHBhcnNlSW50
KHJlc1syXSwgMTApLCBwYXJzZUludChyZXNbM10sIDEwKSwgcGFyc2VGbG9hdChyZXNbNF0pKTsK
KyAgICAgICAgICAgIAorICAgICAgICAvLyBMb29rIGZvciByZ2IobnVtJSxudW0lLG51bSUpCisg
ICAgICAgIGlmIChyZXMgPSAvcmdiXChccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyoo
WzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKlwp
Ly5leGVjKHN0cikpCisgICAgICAgICAgICByZXR1cm4gbShwYXJzZUZsb2F0KHJlc1sxXSkqMi41
NSwgcGFyc2VGbG9hdChyZXNbMl0pKjIuNTUsIHBhcnNlRmxvYXQocmVzWzNdKSoyLjU1KTsKKwor
ICAgICAgICAvLyBMb29rIGZvciByZ2JhKG51bSUsbnVtJSxudW0lLG51bSkKKyAgICAgICAgaWYg
KHJlcyA9IC9yZ2JhXChccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86
XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0r
KD86XC5bMC05XSspPylccypcKS8uZXhlYyhzdHIpKQorICAgICAgICAgICAgcmV0dXJuIG0ocGFy
c2VGbG9hdChyZXNbMV0pKjIuNTUsIHBhcnNlRmxvYXQocmVzWzJdKSoyLjU1LCBwYXJzZUZsb2F0
KHJlc1szXSkqMi41NSwgcGFyc2VGbG9hdChyZXNbNF0pKTsKKyAgICAgICAgCisgICAgICAgIC8v
IExvb2sgZm9yICNhMGIxYzIKKyAgICAgICAgaWYgKHJlcyA9IC8jKFthLWZBLUYwLTldezJ9KShb
YS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pLy5leGVjKHN0cikpCisgICAgICAgICAgICBy
ZXR1cm4gbShwYXJzZUludChyZXNbMV0sIDE2KSwgcGFyc2VJbnQocmVzWzJdLCAxNiksIHBhcnNl
SW50KHJlc1szXSwgMTYpKTsKKworICAgICAgICAvLyBMb29rIGZvciAjZmZmCisgICAgICAgIGlm
IChyZXMgPSAvIyhbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKS8uZXhlYyhz
dHIpKQorICAgICAgICAgICAgcmV0dXJuIG0ocGFyc2VJbnQocmVzWzFdK3Jlc1sxXSwgMTYpLCBw
YXJzZUludChyZXNbMl0rcmVzWzJdLCAxNiksIHBhcnNlSW50KHJlc1szXStyZXNbM10sIDE2KSk7
CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdyZSBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGgg
YSBuYW1lZCBjb2xvcgorICAgICAgICB2YXIgbmFtZSA9ICQudHJpbShzdHIpLnRvTG93ZXJDYXNl
KCk7CisgICAgICAgIGlmIChuYW1lID09ICJ0cmFuc3BhcmVudCIpCisgICAgICAgICAgICByZXR1
cm4gbSgyNTUsIDI1NSwgMjU1LCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBk
ZWZhdWx0IHRvIGJsYWNrCisgICAgICAgICAgICByZXMgPSBsb29rdXBDb2xvcnNbbmFtZV0gfHwg
WzAsIDAsIDBdOworICAgICAgICAgICAgcmV0dXJuIG0ocmVzWzBdLCByZXNbMV0sIHJlc1syXSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmFyIGxvb2t1cENvbG9ycyA9IHsKKyAgICAg
ICAgYXF1YTpbMCwyNTUsMjU1XSwKKyAgICAgICAgYXp1cmU6WzI0MCwyNTUsMjU1XSwKKyAgICAg
ICAgYmVpZ2U6WzI0NSwyNDUsMjIwXSwKKyAgICAgICAgYmxhY2s6WzAsMCwwXSwKKyAgICAgICAg
Ymx1ZTpbMCwwLDI1NV0sCisgICAgICAgIGJyb3duOlsxNjUsNDIsNDJdLAorICAgICAgICBjeWFu
OlswLDI1NSwyNTVdLAorICAgICAgICBkYXJrYmx1ZTpbMCwwLDEzOV0sCisgICAgICAgIGRhcmtj
eWFuOlswLDEzOSwxMzldLAorICAgICAgICBkYXJrZ3JleTpbMTY5LDE2OSwxNjldLAorICAgICAg
ICBkYXJrZ3JlZW46WzAsMTAwLDBdLAorICAgICAgICBkYXJra2hha2k6WzE4OSwxODMsMTA3XSwK
KyAgICAgICAgZGFya21hZ2VudGE6WzEzOSwwLDEzOV0sCisgICAgICAgIGRhcmtvbGl2ZWdyZWVu
Ols4NSwxMDcsNDddLAorICAgICAgICBkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLAorICAgICAgICBk
YXJrb3JjaGlkOlsxNTMsNTAsMjA0XSwKKyAgICAgICAgZGFya3JlZDpbMTM5LDAsMF0sCisgICAg
ICAgIGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSwKKyAgICAgICAgZGFya3Zpb2xldDpbMTQ4LDAs
MjExXSwKKyAgICAgICAgZnVjaHNpYTpbMjU1LDAsMjU1XSwKKyAgICAgICAgZ29sZDpbMjU1LDIx
NSwwXSwKKyAgICAgICAgZ3JlZW46WzAsMTI4LDBdLAorICAgICAgICBpbmRpZ286Wzc1LDAsMTMw
XSwKKyAgICAgICAga2hha2k6WzI0MCwyMzAsMTQwXSwKKyAgICAgICAgbGlnaHRibHVlOlsxNzMs
MjE2LDIzMF0sCisgICAgICAgIGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLAorICAgICAgICBsaWdo
dGdyZWVuOlsxNDQsMjM4LDE0NF0sCisgICAgICAgIGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLAor
ICAgICAgICBsaWdodHBpbms6WzI1NSwxODIsMTkzXSwKKyAgICAgICAgbGlnaHR5ZWxsb3c6WzI1
NSwyNTUsMjI0XSwKKyAgICAgICAgbGltZTpbMCwyNTUsMF0sCisgICAgICAgIG1hZ2VudGE6WzI1
NSwwLDI1NV0sCisgICAgICAgIG1hcm9vbjpbMTI4LDAsMF0sCisgICAgICAgIG5hdnk6WzAsMCwx
MjhdLAorICAgICAgICBvbGl2ZTpbMTI4LDEyOCwwXSwKKyAgICAgICAgb3JhbmdlOlsyNTUsMTY1
LDBdLAorICAgICAgICBwaW5rOlsyNTUsMTkyLDIwM10sCisgICAgICAgIHB1cnBsZTpbMTI4LDAs
MTI4XSwKKyAgICAgICAgdmlvbGV0OlsxMjgsMCwxMjhdLAorICAgICAgICByZWQ6WzI1NSwwLDBd
LAorICAgICAgICBzaWx2ZXI6WzE5MiwxOTIsMTkyXSwKKyAgICAgICAgd2hpdGU6WzI1NSwyNTUs
MjU1XSwKKyAgICAgICAgeWVsbG93OlsyNTUsMjU1LDBdCisgICAgfTsKK30pKGpRdWVyeSk7Cklu
ZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmNhdGVn
b3JpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9q
cy9qcXVlcnkuZmxvdC5jYXRlZ29yaWVzLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5jYXRlZ29yaWVzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKiBGbG90IHBsdWdpbiBmb3IgcGxvdHRpbmcgdGV4
dHVhbCBkYXRhIG9yIGNhdGVnb3JpZXMuCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEg
YW5kIE9sZSBMYXVyc2VuLgorTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgorCitDb25z
aWRlciBhIGRhdGFzZXQgbGlrZSBbWyJGZWJydWFyeSIsIDM0XSwgWyJNYXJjaCIsIDIwXSwgLi4u
XS4gVGhpcyBwbHVnaW4KK2FsbG93cyB5b3UgdG8gcGxvdCBzdWNoIGEgZGF0YXNldCBkaXJlY3Rs
eS4KKworVG8gZW5hYmxlIGl0LCB5b3UgbXVzdCBzcGVjaWZ5IG1vZGU6ICJjYXRlZ29yaWVzIiBv
biB0aGUgYXhpcyB3aXRoIHRoZSB0ZXh0dWFsCitsYWJlbHMsIGUuZy4KKworICAgICQucGxvdCgi
I3BsYWNlaG9sZGVyIiwgZGF0YSwgeyB4YXhpczogeyBtb2RlOiAiY2F0ZWdvcmllcyIgfSB9KTsK
KworQnkgZGVmYXVsdCwgdGhlIGxhYmVscyBhcmUgb3JkZXJlZCBhcyB0aGV5IGFyZSBtZXQgaW4g
dGhlIGRhdGEgc2VyaWVzLiBJZiB5b3UKK25lZWQgYSBkaWZmZXJlbnQgb3JkZXJpbmcsIHlvdSBj
YW4gc3BlY2lmeSAiY2F0ZWdvcmllcyIgb24gdGhlIGF4aXMgb3B0aW9ucworYW5kIGxpc3QgdGhl
IGNhdGVnb3JpZXMgdGhlcmU6CisKKyAgICB4YXhpczogeworICAgICAgICBtb2RlOiAiY2F0ZWdv
cmllcyIsCisgICAgICAgIGNhdGVnb3JpZXM6IFsiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwi
XQorICAgIH0KKworSWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBkaXN0YW5jZXMgYmV0d2Vl
biB0aGUgY2F0ZWdvcmllcywgeW91IGNhbiBzcGVjaWZ5CisiY2F0ZWdvcmllcyIgYXMgYW4gb2Jq
ZWN0IG1hcHBpbmcgbGFiZWxzIHRvIHZhbHVlcworCisgICAgeGF4aXM6IHsKKyAgICAgICAgbW9k
ZTogImNhdGVnb3JpZXMiLAorICAgICAgICBjYXRlZ29yaWVzOiB7ICJGZWJydWFyeSI6IDEsICJN
YXJjaCI6IDMsICJBcHJpbCI6IDQgfQorICAgIH0KKworSWYgeW91IGRvbid0IHNwZWNpZnkgYWxs
IGNhdGVnb3JpZXMsIHRoZSByZW1haW5pbmcgY2F0ZWdvcmllcyB3aWxsIGJlIG51bWJlcmVkCitm
cm9tIHRoZSBtYXggdmFsdWUgcGx1cyAxICh3aXRoIGEgc3BhY2luZyBvZiAxIGJldHdlZW4gZWFj
aCkuCisKK0ludGVybmFsbHksIHRoZSBwbHVnaW4gd29ya3MgYnkgdHJhbnNmb3JtaW5nIHRoZSBp
bnB1dCBkYXRhIHRocm91Z2ggYW4gYXV0by0KK2dlbmVyYXRlZCBtYXBwaW5nIHdoZXJlIHRoZSBm
aXJzdCBjYXRlZ29yeSBiZWNvbWVzIDAsIHRoZSBzZWNvbmQgMSwgZXRjLgorSGVuY2UsIGEgcG9p
bnQgbGlrZSBbIkZlYnJ1YXJ5IiwgMzRdIGJlY29tZXMgWzAsIDM0XSBpbnRlcm5hbGx5IGluIEZs
b3QgKHRoaXMKK2lzIHZpc2libGUgaW4gaG92ZXIgYW5kIGNsaWNrIGV2ZW50cyB0aGF0IHJldHVy
biBudW1iZXJzIHJhdGhlciB0aGFuIHRoZQorY2F0ZWdvcnkgbGFiZWxzKS4gVGhlIHBsdWdpbiBh
bHNvIG92ZXJyaWRlcyB0aGUgdGljayBnZW5lcmF0b3IgdG8gc3BpdCBvdXQgdGhlCitjYXRlZ29y
aWVzIGFzIHRpY2tzIGluc3RlYWQgb2YgdGhlIHZhbHVlcy4KKworSWYgeW91IG5lZWQgdG8gbWFw
IGEgdmFsdWUgYmFjayB0byBpdHMgbGFiZWwsIHRoZSBtYXBwaW5nIGlzIGFsd2F5cyBhY2Nlc3Np
YmxlCithcyAiY2F0ZWdvcmllcyIgb24gdGhlIGF4aXMgb2JqZWN0LCBlLmcuIHBsb3QuZ2V0QXhl
cygpLnhheGlzLmNhdGVnb3JpZXMuCisKKyovCisKKyhmdW5jdGlvbiAoJCkgeworICAgIHZhciBv
cHRpb25zID0geworICAgICAgICB4YXhpczogeworICAgICAgICAgICAgY2F0ZWdvcmllczogbnVs
bAorICAgICAgICB9LAorICAgICAgICB5YXhpczogeworICAgICAgICAgICAgY2F0ZWdvcmllczog
bnVsbAorICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICBmdW5jdGlvbiBwcm9jZXNzUmF3RGF0
YShwbG90LCBzZXJpZXMsIGRhdGEsIGRhdGFwb2ludHMpIHsKKyAgICAgICAgLy8gaWYgY2F0ZWdv
cmllcyBhcmUgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlCisgICAgICAgIC8vIGF1dG8tdHJh
bnNmb3JtYXRpb24gdG8gbnVtYmVycyBzbyB0aGUgc3RyaW5ncyBhcmUgaW50YWN0CisgICAgICAg
IC8vIGZvciBsYXRlciBwcm9jZXNzaW5nCisKKyAgICAgICAgdmFyIHhDYXRlZ29yaWVzID0gc2Vy
aWVzLnhheGlzLm9wdGlvbnMubW9kZSA9PSAiY2F0ZWdvcmllcyIsCisgICAgICAgICAgICB5Q2F0
ZWdvcmllcyA9IHNlcmllcy55YXhpcy5vcHRpb25zLm1vZGUgPT0gImNhdGVnb3JpZXMiOworICAg
ICAgICAKKyAgICAgICAgaWYgKCEoeENhdGVnb3JpZXMgfHwgeUNhdGVnb3JpZXMpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBmb3JtYXQgPSBkYXRhcG9pbnRzLmZvcm1hdDsK
KworICAgICAgICBpZiAoIWZvcm1hdCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGF1dG8tZGV0
ZWN0aW9uIHNob3VsZCByZWFsbHkgbm90IGJlIGRlZmluZWQgaGVyZQorICAgICAgICAgICAgdmFy
IHMgPSBzZXJpZXM7CisgICAgICAgICAgICBmb3JtYXQgPSBbXTsKKyAgICAgICAgICAgIGZvcm1h
dC5wdXNoKHsgeDogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KTsKKyAgICAg
ICAgICAgIGZvcm1hdC5wdXNoKHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1
ZSB9KTsKKworICAgICAgICAgICAgaWYgKHMuYmFycy5zaG93IHx8IChzLmxpbmVzLnNob3cgJiYg
cy5saW5lcy5maWxsKSkgeworICAgICAgICAgICAgICAgIHZhciBhdXRvc2NhbGUgPSAhISgocy5i
YXJzLnNob3cgJiYgcy5iYXJzLnplcm8pIHx8IChzLmxpbmVzLnNob3cgJiYgcy5saW5lcy56ZXJv
KSk7CisgICAgICAgICAgICAgICAgZm9ybWF0LnB1c2goeyB5OiB0cnVlLCBudW1iZXI6IHRydWUs
IHJlcXVpcmVkOiBmYWxzZSwgZGVmYXVsdFZhbHVlOiAwLCBhdXRvc2NhbGU6IGF1dG9zY2FsZSB9
KTsKKyAgICAgICAgICAgICAgICBpZiAocy5iYXJzLmhvcml6b250YWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIGZvcm1hdFtmb3JtYXQubGVuZ3RoIC0gMV0ueTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9ybWF0W2Zvcm1hdC5sZW5ndGggLSAxXS54ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGFwb2lu
dHMuZm9ybWF0ID0gZm9ybWF0OworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgbSA9IDA7
IG0gPCBmb3JtYXQubGVuZ3RoOyArK20pIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXRbbV0ueCAm
JiB4Q2F0ZWdvcmllcykKKyAgICAgICAgICAgICAgICBmb3JtYXRbbV0ubnVtYmVyID0gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmb3JtYXRbbV0ueSAmJiB5Q2F0ZWdvcmll
cykKKyAgICAgICAgICAgICAgICBmb3JtYXRbbV0ubnVtYmVyID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXROZXh0SW5kZXgoY2F0ZWdvcmllcykgeworICAgICAg
ICB2YXIgaW5kZXggPSAtMTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHYgaW4gY2F0ZWdv
cmllcykKKyAgICAgICAgICAgIGlmIChjYXRlZ29yaWVzW3ZdID4gaW5kZXgpCisgICAgICAgICAg
ICAgICAgaW5kZXggPSBjYXRlZ29yaWVzW3ZdOworCisgICAgICAgIHJldHVybiBpbmRleCArIDE7
CisgICAgfQorCisgICAgZnVuY3Rpb24gY2F0ZWdvcmllc1RpY2tHZW5lcmF0b3IoYXhpcykgewor
ICAgICAgICB2YXIgcmVzID0gW107CisgICAgICAgIGZvciAodmFyIGxhYmVsIGluIGF4aXMuY2F0
ZWdvcmllcykgeworICAgICAgICAgICAgdmFyIHYgPSBheGlzLmNhdGVnb3JpZXNbbGFiZWxdOwor
ICAgICAgICAgICAgaWYgKHYgPj0gYXhpcy5taW4gJiYgdiA8PSBheGlzLm1heCkKKyAgICAgICAg
ICAgICAgICByZXMucHVzaChbdiwgbGFiZWxdKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcy5z
b3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhWzBdIC0gYlswXTsgfSk7CisKKyAgICAgICAg
cmV0dXJuIHJlczsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gc2V0dXBDYXRlZ29yaWVzRm9y
QXhpcyhzZXJpZXMsIGF4aXMsIGRhdGFwb2ludHMpIHsKKyAgICAgICAgaWYgKHNlcmllc1theGlz
XS5vcHRpb25zLm1vZGUgIT0gImNhdGVnb3JpZXMiKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFzZXJpZXNbYXhpc10uY2F0ZWdvcmllcykgeworICAgICAgICAg
ICAgLy8gcGFyc2Ugb3B0aW9ucworICAgICAgICAgICAgdmFyIGMgPSB7fSwgbyA9IHNlcmllc1th
eGlzXS5vcHRpb25zLmNhdGVnb3JpZXMgfHwge307CisgICAgICAgICAgICBpZiAoJC5pc0FycmF5
KG8pKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvLmxlbmd0aDsgKytp
KQorICAgICAgICAgICAgICAgICAgICBjW29baV1dID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHYgaW4gbykKKyAgICAgICAg
ICAgICAgICAgICAgY1t2XSA9IG9bdl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNlcmllc1theGlzXS5jYXRlZ29yaWVzID0gYzsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIGZpeCB0aWNrcworICAgICAgICBpZiAoIXNlcmllc1theGlzXS5vcHRpb25zLnRpY2tz
KQorICAgICAgICAgICAgc2VyaWVzW2F4aXNdLm9wdGlvbnMudGlja3MgPSBjYXRlZ29yaWVzVGlj
a0dlbmVyYXRvcjsKKworICAgICAgICB0cmFuc2Zvcm1Qb2ludHNPbkF4aXMoZGF0YXBvaW50cywg
YXhpcywgc2VyaWVzW2F4aXNdLmNhdGVnb3JpZXMpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlv
biB0cmFuc2Zvcm1Qb2ludHNPbkF4aXMoZGF0YXBvaW50cywgYXhpcywgY2F0ZWdvcmllcykgewor
ICAgICAgICAvLyBnbyB0aHJvdWdoIHRoZSBwb2ludHMsIHRyYW5zZm9ybWluZyB0aGVtCisgICAg
ICAgIHZhciBwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50cywKKyAgICAgICAgICAgIHBzID0gZGF0
YXBvaW50cy5wb2ludHNpemUsCisgICAgICAgICAgICBmb3JtYXQgPSBkYXRhcG9pbnRzLmZvcm1h
dCwKKyAgICAgICAgICAgIGZvcm1hdENvbHVtbiA9IGF4aXMuY2hhckF0KDApLAorICAgICAgICAg
ICAgaW5kZXggPSBnZXROZXh0SW5kZXgoY2F0ZWdvcmllcyk7CisKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IHBzKSB7CisgICAgICAgICAgICBpZiAocG9p
bnRzW2ldID09IG51bGwpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgcHM7ICsrbSkgeworICAgICAgICAgICAg
ICAgIHZhciB2YWwgPSBwb2ludHNbaSArIG1dOworCisgICAgICAgICAgICAgICAgaWYgKHZhbCA9
PSBudWxsIHx8ICFmb3JtYXRbbV1bZm9ybWF0Q29sdW1uXSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoISh2YWwgaW4gY2F0ZWdvcmllcykpIHsK
KyAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllc1t2YWxdID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHBvaW50c1tpICsgbV0gPSBjYXRlZ29yaWVzW3ZhbF07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcm9jZXNzRGF0YXBvaW50
cyhwbG90LCBzZXJpZXMsIGRhdGFwb2ludHMpIHsKKyAgICAgICAgc2V0dXBDYXRlZ29yaWVzRm9y
QXhpcyhzZXJpZXMsICJ4YXhpcyIsIGRhdGFwb2ludHMpOworICAgICAgICBzZXR1cENhdGVnb3Jp
ZXNGb3JBeGlzKHNlcmllcywgInlheGlzIiwgZGF0YXBvaW50cyk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gaW5pdChwbG90KSB7CisgICAgICAgIHBsb3QuaG9va3MucHJvY2Vzc1Jhd0RhdGEucHVz
aChwcm9jZXNzUmF3RGF0YSk7CisgICAgICAgIHBsb3QuaG9va3MucHJvY2Vzc0RhdGFwb2ludHMu
cHVzaChwcm9jZXNzRGF0YXBvaW50cyk7CisgICAgfQorICAgIAorICAgICQucGxvdC5wbHVnaW5z
LnB1c2goeworICAgICAgICBpbml0OiBpbml0LAorICAgICAgICBvcHRpb25zOiBvcHRpb25zLAor
ICAgICAgICBuYW1lOiAnY2F0ZWdvcmllcycsCisgICAgICAgIHZlcnNpb246ICcxLjAnCisgICAg
fSk7Cit9KShqUXVlcnkpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9q
cy9qcXVlcnkuZmxvdC5jcm9zc2hhaXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5jcm9zc2hhaXIuanMJKHJldmlzaW9uIDAp
CisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmNyb3Nz
aGFpci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NiBAQAorLyogRmxvdCBwbHVnaW4g
Zm9yIHNob3dpbmcgY3Jvc3NoYWlycyB3aGVuIHRoZSBtb3VzZSBob3ZlcnMgb3ZlciB0aGUgcGxv
dC4KKworQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCitMaWNl
bnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCisKK1RoZSBwbHVnaW4gc3VwcG9ydHMgdGhlc2Ug
b3B0aW9uczoKKworICAgIGNyb3NzaGFpcjogeworICAgICAgICBtb2RlOiBudWxsIG9yICJ4IiBv
ciAieSIgb3IgInh5IgorICAgICAgICBjb2xvcjogY29sb3IKKyAgICAgICAgbGluZVdpZHRoOiBu
dW1iZXIKKyAgICB9CisKK1NldCB0aGUgbW9kZSB0byBvbmUgb2YgIngiLCAieSIgb3IgInh5Ii4g
VGhlICJ4IiBtb2RlIGVuYWJsZXMgYSB2ZXJ0aWNhbAorY3Jvc3NoYWlyIHRoYXQgbGV0cyB5b3Ug
dHJhY2UgdGhlIHZhbHVlcyBvbiB0aGUgeCBheGlzLCAieSIgZW5hYmxlcyBhCitob3Jpem9udGFs
IGNyb3NzaGFpciBhbmQgInh5IiBlbmFibGVzIHRoZW0gYm90aC4gImNvbG9yIiBpcyB0aGUgY29s
b3Igb2YgdGhlCitjcm9zc2hhaXIgKGRlZmF1bHQgaXMgInJnYmEoMTcwLCAwLCAwLCAwLjgwKSIp
LCAibGluZVdpZHRoIiBpcyB0aGUgd2lkdGggb2YKK3RoZSBkcmF3biBsaW5lcyAoZGVmYXVsdCBp
cyAxKS4KKworVGhlIHBsdWdpbiBhbHNvIGFkZHMgZm91ciBwdWJsaWMgbWV0aG9kczoKKworICAt
IHNldENyb3NzaGFpciggcG9zICkKKworICAgIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNyb3Nz
aGFpci4gTm90ZSB0aGF0IHRoaXMgaXMgY2xlYXJlZCBpZiB0aGUgdXNlcgorICAgIG1vdmVzIHRo
ZSBtb3VzZS4gInBvcyIgaXMgaW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBsb3QgYW5kIHNob3VsZCBi
ZSBvbiB0aGUKKyAgICBmb3JtIHsgeDogeHBvcywgeTogeXBvcyB9ICh5b3UgY2FuIHVzZSB4Mi94
My8uLi4gaWYgeW91J3JlIHVzaW5nIG11bHRpcGxlCisgICAgYXhlcyksIHdoaWNoIGlzIGNvaW5j
aWRlbnRhbGx5IHRoZSBzYW1lIGZvcm1hdCBhcyB3aGF0IHlvdSBnZXQgZnJvbSBhCisgICAgInBs
b3Rob3ZlciIgZXZlbnQuIElmICJwb3MiIGlzIG51bGwsIHRoZSBjcm9zc2hhaXIgaXMgY2xlYXJl
ZC4KKworICAtIGNsZWFyQ3Jvc3NoYWlyKCkKKworICAgIENsZWFyIHRoZSBjcm9zc2hhaXIuCisK
KyAgLSBsb2NrQ3Jvc3NoYWlyKHBvcykKKworICAgIENhdXNlIHRoZSBjcm9zc2hhaXIgdG8gbG9j
ayB0byB0aGUgY3VycmVudCBsb2NhdGlvbiwgbm8gbG9uZ2VyIHVwZGF0aW5nIGlmCisgICAgdGhl
IHVzZXIgbW92ZXMgdGhlIG1vdXNlLiBPcHRpb25hbGx5IHN1cHBseSBhIHBvc2l0aW9uIChwYXNz
ZWQgb24gdG8KKyAgICBzZXRDcm9zc2hhaXIoKSkgdG8gbW92ZSBpdCB0by4KKworICAgIEV4YW1w
bGUgdXNhZ2U6CisKKyAgICB2YXIgbXlGbG90ID0gJC5wbG90KCAkKCIjZ3JhcGgiKSwgLi4uLCB7
IGNyb3NzaGFpcjogeyBtb2RlOiAieCIgfSB9IH07CisgICAgJCgiI2dyYXBoIikuYmluZCggInBs
b3Rob3ZlciIsIGZ1bmN0aW9uICggZXZ0LCBwb3NpdGlvbiwgaXRlbSApIHsKKyAgICAgICAgaWYg
KCBpdGVtICkgeworICAgICAgICAgICAgLy8gTG9jayB0aGUgY3Jvc3NoYWlyIHRvIHRoZSBkYXRh
IHBvaW50IGJlaW5nIGhvdmVyZWQKKyAgICAgICAgICAgIG15RmxvdC5sb2NrQ3Jvc3NoYWlyKHsK
KyAgICAgICAgICAgICAgICB4OiBpdGVtLmRhdGFwb2ludFsgMCBdLAorICAgICAgICAgICAgICAg
IHk6IGl0ZW0uZGF0YXBvaW50WyAxIF0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gUmV0dXJuIG5vcm1hbCBjcm9zc2hhaXIgb3BlcmF0aW9uCisgICAg
ICAgICAgICBteUZsb3QudW5sb2NrQ3Jvc3NoYWlyKCk7CisgICAgICAgIH0KKyAgICB9KTsKKwor
ICAtIHVubG9ja0Nyb3NzaGFpcigpCisKKyAgICBGcmVlIHRoZSBjcm9zc2hhaXIgdG8gbW92ZSBh
Z2FpbiBhZnRlciBsb2NraW5nIGl0LgorKi8KKworKGZ1bmN0aW9uICgkKSB7CisgICAgdmFyIG9w
dGlvbnMgPSB7CisgICAgICAgIGNyb3NzaGFpcjogeworICAgICAgICAgICAgbW9kZTogbnVsbCwg
Ly8gb25lIG9mIG51bGwsICJ4IiwgInkiIG9yICJ4eSIsCisgICAgICAgICAgICBjb2xvcjogInJn
YmEoMTcwLCAwLCAwLCAwLjgwKSIsCisgICAgICAgICAgICBsaW5lV2lkdGg6IDEKKyAgICAgICAg
fQorICAgIH07CisgICAgCisgICAgZnVuY3Rpb24gaW5pdChwbG90KSB7CisgICAgICAgIC8vIHBv
c2l0aW9uIG9mIGNyb3NzaGFpciBpbiBwaXhlbHMKKyAgICAgICAgdmFyIGNyb3NzaGFpciA9IHsg
eDogLTEsIHk6IC0xLCBsb2NrZWQ6IGZhbHNlIH07CisKKyAgICAgICAgcGxvdC5zZXRDcm9zc2hh
aXIgPSBmdW5jdGlvbiBzZXRDcm9zc2hhaXIocG9zKSB7CisgICAgICAgICAgICBpZiAoIXBvcykK
KyAgICAgICAgICAgICAgICBjcm9zc2hhaXIueCA9IC0xOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyIG8gPSBwbG90LnAyYyhwb3MpOworICAgICAgICAgICAgICAgIGNy
b3NzaGFpci54ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oby5sZWZ0LCBwbG90LndpZHRoKCkpKTsK
KyAgICAgICAgICAgICAgICBjcm9zc2hhaXIueSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG8udG9w
LCBwbG90LmhlaWdodCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHBsb3QudHJpZ2dlclJlZHJhd092ZXJsYXkoKTsKKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIHBsb3QuY2xlYXJDcm9zc2hhaXIgPSBwbG90LnNldENyb3NzaGFpcjsgLy8gcGFzc2Vz
IG51bGwgZm9yIHBvcworICAgICAgICAKKyAgICAgICAgcGxvdC5sb2NrQ3Jvc3NoYWlyID0gZnVu
Y3Rpb24gbG9ja0Nyb3NzaGFpcihwb3MpIHsKKyAgICAgICAgICAgIGlmIChwb3MpCisgICAgICAg
ICAgICAgICAgcGxvdC5zZXRDcm9zc2hhaXIocG9zKTsKKyAgICAgICAgICAgIGNyb3NzaGFpci5s
b2NrZWQgPSB0cnVlOworICAgICAgICB9OworCisgICAgICAgIHBsb3QudW5sb2NrQ3Jvc3NoYWly
ID0gZnVuY3Rpb24gdW5sb2NrQ3Jvc3NoYWlyKCkgeworICAgICAgICAgICAgY3Jvc3NoYWlyLmxv
Y2tlZCA9IGZhbHNlOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIG9uTW91c2VPdXQo
ZSkgeworICAgICAgICAgICAgaWYgKGNyb3NzaGFpci5sb2NrZWQpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBpZiAoY3Jvc3NoYWlyLnggIT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICBjcm9zc2hhaXIueCA9IC0xOworICAgICAgICAgICAgICAgIHBsb3QudHJpZ2dlclJl
ZHJhd092ZXJsYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIG9uTW91c2VNb3ZlKGUpIHsKKyAgICAgICAgICAgIGlmIChjcm9zc2hhaXIubG9ja2VkKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChwbG90LmdldFNlbGVjdGlvbiAmJiBwbG90LmdldFNlbGVjdGlvbigpKSB7CisgICAgICAgICAg
ICAgICAgY3Jvc3NoYWlyLnggPSAtMTsgLy8gaGlkZSB0aGUgY3Jvc3NoYWlyIHdoaWxlIHNlbGVj
dGluZworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwbG90Lm9mZnNldCgpOworICAgICAgICAg
ICAgY3Jvc3NoYWlyLnggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlLnBhZ2VYIC0gb2Zmc2V0Lmxl
ZnQsIHBsb3Qud2lkdGgoKSkpOworICAgICAgICAgICAgY3Jvc3NoYWlyLnkgPSBNYXRoLm1heCgw
LCBNYXRoLm1pbihlLnBhZ2VZIC0gb2Zmc2V0LnRvcCwgcGxvdC5oZWlnaHQoKSkpOworICAgICAg
ICAgICAgcGxvdC50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBwbG90Lmhvb2tzLmJpbmRFdmVudHMucHVzaChmdW5jdGlvbiAocGxvdCwgZXZlbnRI
b2xkZXIpIHsKKyAgICAgICAgICAgIGlmICghcGxvdC5nZXRPcHRpb25zKCkuY3Jvc3NoYWlyLm1v
ZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBldmVudEhvbGRlci5t
b3VzZW91dChvbk1vdXNlT3V0KTsKKyAgICAgICAgICAgIGV2ZW50SG9sZGVyLm1vdXNlbW92ZShv
bk1vdXNlTW92ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIHBsb3QuaG9va3MuZHJhd092ZXJs
YXkucHVzaChmdW5jdGlvbiAocGxvdCwgY3R4KSB7CisgICAgICAgICAgICB2YXIgYyA9IHBsb3Qu
Z2V0T3B0aW9ucygpLmNyb3NzaGFpcjsKKyAgICAgICAgICAgIGlmICghYy5tb2RlKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIHBsb3RPZmZzZXQgPSBwbG90Lmdl
dFBsb3RPZmZzZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY3R4LnNhdmUoKTsKKyAg
ICAgICAgICAgIGN0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7
CisKKyAgICAgICAgICAgIGlmIChjcm9zc2hhaXIueCAhPSAtMSkgeworICAgICAgICAgICAgICAg
IHZhciBhZGogPSBwbG90LmdldE9wdGlvbnMoKS5jcm9zc2hhaXIubGluZVdpZHRoICUgMiA9PT0g
MCA/IDAgOiAwLjU7CisKKyAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjLmNvbG9y
OworICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBjLmxpbmVXaWR0aDsKKyAgICAgICAg
ICAgICAgICBjdHgubGluZUpvaW4gPSAicm91bmQiOworCisgICAgICAgICAgICAgICAgY3R4LmJl
Z2luUGF0aCgpOworICAgICAgICAgICAgICAgIGlmIChjLm1vZGUuaW5kZXhPZigieCIpICE9IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3WCA9IE1hdGgucm91bmQoY3Jvc3NoYWly
LngpICsgYWRqOworICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGRyYXdYLCAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhkcmF3WCwgcGxvdC5oZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjLm1vZGUuaW5kZXhPZigieSIpICE9
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3WSA9IE1hdGgucm91bmQoY3Jvc3No
YWlyLnkpICsgYWRqOworICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKDAsIGRyYXdZKTsK
KyAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhwbG90LndpZHRoKCksIGRyYXdZKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
cGxvdC5ob29rcy5zaHV0ZG93bi5wdXNoKGZ1bmN0aW9uIChwbG90LCBldmVudEhvbGRlcikgewor
ICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZW91dCIsIG9uTW91c2VPdXQpOwor
ICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZW1vdmUiLCBvbk1vdXNlTW92ZSk7
CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAkLnBsb3QucGx1Z2lucy5wdXNoKHsKKyAg
ICAgICAgaW5pdDogaW5pdCwKKyAgICAgICAgb3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgbmFt
ZTogJ2Nyb3NzaGFpcicsCisgICAgICAgIHZlcnNpb246ICcxLjAnCisgICAgfSk7Cit9KShqUXVl
cnkpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxv
dC5lcnJvcmJhcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9qcy9qcXVlcnkuZmxvdC5lcnJvcmJhcnMuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmVycm9yYmFycy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1MyBAQAorLyogRmxvdCBwbHVnaW4gZm9yIHBsb3R0aW5n
IGVycm9yIGJhcnMuCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9sZSBMYXVy
c2VuLgorTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgorCitFcnJvciBiYXJzIGFyZSB1
c2VkIHRvIHNob3cgc3RhbmRhcmQgZGV2aWF0aW9uIGFuZCBvdGhlciBzdGF0aXN0aWNhbAorcHJv
cGVydGllcyBpbiBhIHBsb3QuCisKKyogQ3JlYXRlZCBieSBSdWkgUGVyZWlyYSAgLSAgcnVpIChk
b3QpIHBlcmVpcmEgKGF0KSBnbWFpbCAoZG90KSBjb20KKworVGhpcyBwbHVnaW4gYWxsb3dzIHlv
dSB0byBwbG90IGVycm9yLWJhcnMgb3ZlciBwb2ludHMuIFNldCAiZXJyb3JiYXJzIiBpbnNpZGUK
K3RoZSBwb2ludHMgc2VyaWVzIHRvIHRoZSBheGlzIG5hbWUgb3ZlciB3aGljaCB0aGVyZSB3aWxs
IGJlIGVycm9yIHZhbHVlcyBpbgoreW91ciBkYXRhIGFycmF5ICgqZXZlbiogaWYgeW91IGRvIG5v
dCBpbnRlbmQgdG8gcGxvdCB0aGVtIGxhdGVyLCBieSBzZXR0aW5nCisic2hvdzogbnVsbCIgb24g
eGVyci95ZXJyKS4KKworVGhlIHBsdWdpbiBzdXBwb3J0cyB0aGVzZSBvcHRpb25zOgorCisgICAg
c2VyaWVzOiB7CisgICAgICAgIHBvaW50czogeworICAgICAgICAgICAgZXJyb3JiYXJzOiAieCIg
b3IgInkiIG9yICJ4eSIsCisgICAgICAgICAgICB4ZXJyOiB7CisgICAgICAgICAgICAgICAgc2hv
dzogbnVsbC9mYWxzZSBvciB0cnVlLAorICAgICAgICAgICAgICAgIGFzeW1tZXRyaWM6IG51bGwv
ZmFsc2Ugb3IgdHJ1ZSwKKyAgICAgICAgICAgICAgICB1cHBlckNhcDogbnVsbCBvciAiLSIgb3Ig
ZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgbG93ZXJDYXA6IG51bGwgb3IgIi0iIG9yIGZ1bmN0
aW9uLAorICAgICAgICAgICAgICAgIGNvbG9yOiBudWxsIG9yIGNvbG9yLAorICAgICAgICAgICAg
ICAgIHJhZGl1czogbnVsbCBvciBudW1iZXIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB5
ZXJyOiB7IHNhbWUgb3B0aW9ucyBhcyB4ZXJyIH0KKyAgICAgICAgfQorICAgIH0KKworRWFjaCBk
YXRhIHBvaW50IGFycmF5IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHRoZSB0eXBlOgorCisgICAgIngi
ICBbIHgsIHksIHhlcnIgXQorICAgICJ5IiAgWyB4LCB5LCB5ZXJyIF0KKyAgICAieHkiIFsgeCwg
eSwgeGVyciwgeWVyciBdCisKK1doZXJlIHhlcnIgYmVjb21lcyB4ZXJyX2xvd2VyLHhlcnJfdXBw
ZXIgZm9yIHRoZSBhc3ltbWV0cmljIGVycm9yIGNhc2UsIGFuZAorZXF1aXZhbGVudGx5IGZvciB5
ZXJyLiBFZy4sIGEgZGF0YXBvaW50IGZvciB0aGUgInh5IiBjYXNlIHdpdGggc3ltbWV0cmljCitl
cnJvci1iYXJzIG9uIFggYW5kIGFzeW1tZXRyaWMgb24gWSB3b3VsZCBiZToKKworICAgIFsgeCwg
eSwgeGVyciwgeWVycl9sb3dlciwgeWVycl91cHBlciBdCisKK0J5IGRlZmF1bHQgbm8gZW5kIGNh
cHMgYXJlIGRyYXduLiBTZXR0aW5nIHVwcGVyQ2FwIGFuZC9vciBsb3dlckNhcCB0byAiLSIgd2ls
bAorZHJhdyBhIHNtYWxsIGNhcCBwZXJwZW5kaWN1bGFyIHRvIHRoZSBlcnJvciBiYXIuIFRoZXkg
Y2FuIGFsc28gYmUgc2V0IHRvIGEKK3VzZXItZGVmaW5lZCBkcmF3aW5nIGZ1bmN0aW9uLCB3aXRo
IChjdHgsIHgsIHksIHJhZGl1cykgYXMgcGFyYW1ldGVycywgYXMgZWcuCisKKyAgICBmdW5jdGlv
biBkcmF3U2VtaUNpcmNsZSggY3R4LCB4LCB5LCByYWRpdXMgKSB7CisgICAgICAgIGN0eC5iZWdp
blBhdGgoKTsKKyAgICAgICAgY3R4LmFyYyggeCwgeSwgcmFkaXVzLCAwLCBNYXRoLlBJLCBmYWxz
ZSApOworICAgICAgICBjdHgubW92ZVRvKCB4IC0gcmFkaXVzLCB5ICk7CisgICAgICAgIGN0eC5s
aW5lVG8oIHggKyByYWRpdXMsIHkgKTsKKyAgICAgICAgY3R4LnN0cm9rZSgpOworICAgIH0KKwor
Q29sb3IgYW5kIHJhZGl1cyBib3RoIGRlZmF1bHQgdG8gdGhlIHNhbWUgb25lcyBvZiB0aGUgcG9p
bnRzIHNlcmllcyBpZiBub3QKK3NldC4gVGhlIGluZGVwZW5kZW50IHJhZGl1cyBwYXJhbWV0ZXIg
b24geGVyci95ZXJyIGlzIHVzZWZ1bCBmb3IgdGhlIGNhc2Ugd2hlbgord2UgbWF5IHdhbnQgdG8g
YWRkIGVycm9yLWJhcnMgdG8gYSBsaW5lLCB3aXRob3V0IHNob3dpbmcgdGhlIGludGVyY29ubmVj
dGluZworcG9pbnRzICh3aXRoIHJhZGl1czogMCksIGFuZCBzdGlsbCBzaG93aW5nIGVuZCBjYXBz
IG9uIHRoZSBlcnJvci1iYXJzLgorc2hhZG93U2l6ZSBhbmQgbGluZVdpZHRoIGFyZSBkZXJpdmVk
IGFzIHdlbGwgZnJvbSB0aGUgcG9pbnRzIHNlcmllcy4KKworKi8KKworKGZ1bmN0aW9uICgkKSB7
CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNlcmllczogeworICAgICAgICAgICAgcG9p
bnRzOiB7CisgICAgICAgICAgICAgICAgZXJyb3JiYXJzOiBudWxsLCAvL3Nob3VsZCBiZSAneCcs
ICd5JyBvciAneHknCisgICAgICAgICAgICAgICAgeGVycjogeyBlcnI6ICd4Jywgc2hvdzogbnVs
bCwgYXN5bW1ldHJpYzogbnVsbCwgdXBwZXJDYXA6IG51bGwsIGxvd2VyQ2FwOiBudWxsLCBjb2xv
cjogbnVsbCwgcmFkaXVzOiBudWxsfSwKKyAgICAgICAgICAgICAgICB5ZXJyOiB7IGVycjogJ3kn
LCBzaG93OiBudWxsLCBhc3ltbWV0cmljOiBudWxsLCB1cHBlckNhcDogbnVsbCwgbG93ZXJDYXA6
IG51bGwsIGNvbG9yOiBudWxsLCByYWRpdXM6IG51bGx9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gcHJvY2Vzc1Jhd0RhdGEocGxvdCwgc2VyaWVzLCBk
YXRhLCBkYXRhcG9pbnRzKXsKKyAgICAgICAgaWYgKCFzZXJpZXMucG9pbnRzLmVycm9yYmFycykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyB4LHkgdmFsdWVzCisgICAgICAgIHZh
ciBmb3JtYXQgPSBbCisgICAgICAgICAgICB7IHg6IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWly
ZWQ6IHRydWUgfSwKKyAgICAgICAgICAgIHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJl
ZDogdHJ1ZSB9CisgICAgICAgIF07CisKKyAgICAgICAgdmFyIGVycm9ycyA9IHNlcmllcy5wb2lu
dHMuZXJyb3JiYXJzOworICAgICAgICAvLyBlcnJvciBiYXJzIC0gZmlyc3QgWCB0aGVuIFkKKyAg
ICAgICAgaWYgKGVycm9ycyA9PSAneCcgfHwgZXJyb3JzID09ICd4eScpIHsKKyAgICAgICAgICAg
IC8vIGxvd2VyIC8gdXBwZXIgZXJyb3IKKyAgICAgICAgICAgIGlmIChzZXJpZXMucG9pbnRzLnhl
cnIuYXN5bW1ldHJpYykgeworICAgICAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeDogdHJ1ZSwg
bnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KTsKKyAgICAgICAgICAgICAgICBmb3JtYXQu
cHVzaCh7IHg6IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7IHg6IHRydWUsIG51bWJl
cjogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVycm9y
cyA9PSAneScgfHwgZXJyb3JzID09ICd4eScpIHsKKyAgICAgICAgICAgIC8vIGxvd2VyIC8gdXBw
ZXIgZXJyb3IKKyAgICAgICAgICAgIGlmIChzZXJpZXMucG9pbnRzLnllcnIuYXN5bW1ldHJpYykg
eworICAgICAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCBy
ZXF1aXJlZDogdHJ1ZSB9KTsKKyAgICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7IHk6IHRydWUs
IG51bWJlcjogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7IHk6IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWly
ZWQ6IHRydWUgfSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YXBvaW50cy5mb3JtYXQgPSBmb3Jt
YXQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VFcnJvcnMoc2VyaWVzLCBpKXsKKworICAg
ICAgICB2YXIgcG9pbnRzID0gc2VyaWVzLmRhdGFwb2ludHMucG9pbnRzOworCisgICAgICAgIC8v
IHJlYWQgZXJyb3JzIGZyb20gcG9pbnRzIGFycmF5CisgICAgICAgIHZhciBleGwgPSBudWxsLAor
ICAgICAgICAgICAgICAgIGV4dSA9IG51bGwsCisgICAgICAgICAgICAgICAgZXlsID0gbnVsbCwK
KyAgICAgICAgICAgICAgICBleXUgPSBudWxsOworICAgICAgICB2YXIgeGVyciA9IHNlcmllcy5w
b2ludHMueGVyciwKKyAgICAgICAgICAgICAgICB5ZXJyID0gc2VyaWVzLnBvaW50cy55ZXJyOwor
CisgICAgICAgIHZhciBlYiA9IHNlcmllcy5wb2ludHMuZXJyb3JiYXJzOworICAgICAgICAvLyBl
cnJvciBiYXJzIC0gZmlyc3QgWAorICAgICAgICBpZiAoZWIgPT0gJ3gnIHx8IGViID09ICd4eScp
IHsKKyAgICAgICAgICAgIGlmICh4ZXJyLmFzeW1tZXRyaWMpIHsKKyAgICAgICAgICAgICAgICBl
eGwgPSBwb2ludHNbaSArIDJdOworICAgICAgICAgICAgICAgIGV4dSA9IHBvaW50c1tpICsgM107
CisgICAgICAgICAgICAgICAgaWYgKGViID09ICd4eScpCisgICAgICAgICAgICAgICAgICAgIGlm
ICh5ZXJyLmFzeW1tZXRyaWMpeworICAgICAgICAgICAgICAgICAgICAgICAgZXlsID0gcG9pbnRz
W2kgKyA0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV5dSA9IHBvaW50c1tpICsgNV07Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBleWwgPSBwb2ludHNbaSArIDRdOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleGwgPSBwb2ludHNbaSArIDJdOworICAgICAg
ICAgICAgICAgIGlmIChlYiA9PSAneHknKQorICAgICAgICAgICAgICAgICAgICBpZiAoeWVyci5h
c3ltbWV0cmljKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleWwgPSBwb2ludHNbaSArIDNd
OworICAgICAgICAgICAgICAgICAgICAgICAgZXl1ID0gcG9pbnRzW2kgKyA0XTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGV5bCA9IHBvaW50c1tpICsgM107CisgICAgICAgICAgICB9Cisg
ICAgICAgIC8vIG9ubHkgWQorICAgICAgICB9IGVsc2UgaWYgKGViID09ICd5JykKKyAgICAgICAg
ICAgIGlmICh5ZXJyLmFzeW1tZXRyaWMpIHsKKyAgICAgICAgICAgICAgICBleWwgPSBwb2ludHNb
aSArIDJdOworICAgICAgICAgICAgICAgIGV5dSA9IHBvaW50c1tpICsgM107CisgICAgICAgICAg
ICB9IGVsc2UgZXlsID0gcG9pbnRzW2kgKyAyXTsKKworICAgICAgICAvLyBzeW1tZXRyaWMgZXJy
b3JzPworICAgICAgICBpZiAoZXh1ID09IG51bGwpIGV4dSA9IGV4bDsKKyAgICAgICAgaWYgKGV5
dSA9PSBudWxsKSBleXUgPSBleWw7CisKKyAgICAgICAgdmFyIGVyclJhbmdlcyA9IFtleGwsIGV4
dSwgZXlsLCBleXVdOworICAgICAgICAvLyBudWxsaWZ5IGlmIG5vdCBzaG93aW5nCisgICAgICAg
IGlmICgheGVyci5zaG93KXsKKyAgICAgICAgICAgIGVyclJhbmdlc1swXSA9IG51bGw7CisgICAg
ICAgICAgICBlcnJSYW5nZXNbMV0gPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmICgheWVy
ci5zaG93KXsKKyAgICAgICAgICAgIGVyclJhbmdlc1syXSA9IG51bGw7CisgICAgICAgICAgICBl
cnJSYW5nZXNbM10gPSBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlcnJSYW5nZXM7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJhd1Nlcmllc0Vycm9ycyhwbG90LCBjdHgsIHMpewor
CisgICAgICAgIHZhciBwb2ludHMgPSBzLmRhdGFwb2ludHMucG9pbnRzLAorICAgICAgICAgICAg
ICAgIHBzID0gcy5kYXRhcG9pbnRzLnBvaW50c2l6ZSwKKyAgICAgICAgICAgICAgICBheCA9IFtz
LnhheGlzLCBzLnlheGlzXSwKKyAgICAgICAgICAgICAgICByYWRpdXMgPSBzLnBvaW50cy5yYWRp
dXMsCisgICAgICAgICAgICAgICAgZXJyID0gW3MucG9pbnRzLnhlcnIsIHMucG9pbnRzLnllcnJd
OworCisgICAgICAgIC8vc2FuaXR5IGNoZWNrLCBpbiBjYXNlIHNvbWUgaW52ZXJ0ZWQgYXhpcyBo
YWNrIGlzIGFwcGxpZWQgdG8gZmxvdAorICAgICAgICB2YXIgaW52ZXJ0WCA9IGZhbHNlOworICAg
ICAgICBpZiAoYXhbMF0ucDJjKGF4WzBdLm1heCkgPCBheFswXS5wMmMoYXhbMF0ubWluKSkgewor
ICAgICAgICAgICAgaW52ZXJ0WCA9IHRydWU7CisgICAgICAgICAgICB2YXIgdG1wID0gZXJyWzBd
Lmxvd2VyQ2FwOworICAgICAgICAgICAgZXJyWzBdLmxvd2VyQ2FwID0gZXJyWzBdLnVwcGVyQ2Fw
OworICAgICAgICAgICAgZXJyWzBdLnVwcGVyQ2FwID0gdG1wOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGludmVydFkgPSBmYWxzZTsKKyAgICAgICAgaWYgKGF4WzFdLnAyYyhheFsxXS5taW4p
IDwgYXhbMV0ucDJjKGF4WzFdLm1heCkpIHsKKyAgICAgICAgICAgIGludmVydFkgPSB0cnVlOwor
ICAgICAgICAgICAgdmFyIHRtcCA9IGVyclsxXS5sb3dlckNhcDsKKyAgICAgICAgICAgIGVyclsx
XS5sb3dlckNhcCA9IGVyclsxXS51cHBlckNhcDsKKyAgICAgICAgICAgIGVyclsxXS51cHBlckNh
cCA9IHRtcDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5kYXRh
cG9pbnRzLnBvaW50cy5sZW5ndGg7IGkgKz0gcHMpIHsKKworICAgICAgICAgICAgLy9wYXJzZQor
ICAgICAgICAgICAgdmFyIGVyclJhbmdlcyA9IHBhcnNlRXJyb3JzKHMsIGkpOworCisgICAgICAg
ICAgICAvL2N5Y2xlIHhlcnIgJiB5ZXJyCisgICAgICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8
IGVyci5sZW5ndGg7IGUrKyl7CisKKyAgICAgICAgICAgICAgICB2YXIgbWlubWF4ID0gW2F4W2Vd
Lm1pbiwgYXhbZV0ubWF4XTsKKworICAgICAgICAgICAgICAgIC8vZHJhdyB0aGlzIGVycm9yPwor
ICAgICAgICAgICAgICAgIGlmIChlcnJSYW5nZXNbZSAqIGVyci5sZW5ndGhdKXsKKworICAgICAg
ICAgICAgICAgICAgICAvL2RhdGEgY29vcmRpbmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHggPSBwb2ludHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcG9pbnRzW2kgKyAx
XTsKKworICAgICAgICAgICAgICAgICAgICAvL2Vycm9yYmFyIHJhbmdlcworICAgICAgICAgICAg
ICAgICAgICB2YXIgdXBwZXIgPSBbeCwgeV1bZV0gKyBlcnJSYW5nZXNbZSAqIGVyci5sZW5ndGgg
KyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyID0gW3gsIHldW2VdIC0gZXJyUmFu
Z2VzW2UgKiBlcnIubGVuZ3RoXTsKKworICAgICAgICAgICAgICAgICAgICAvL3BvaW50cyBvdXRz
aWRlIG9mIHRoZSBjYW52YXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycltlXS5lcnIgPT0g
J3gnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPiBheFsxXS5tYXggfHwgeSA8IGF4
WzFdLm1pbiB8fCB1cHBlciA8IGF4WzBdLm1pbiB8fCBsb3dlciA+IGF4WzBdLm1heCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVycltlXS5lcnIgPT0gJ3knKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBheFsw
XS5tYXggfHwgeCA8IGF4WzBdLm1pbiB8fCB1cHBlciA8IGF4WzFdLm1pbiB8fCBsb3dlciA+IGF4
WzFdLm1heCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBwcmV2ZW50IGVycm9yYmFycyBnZXR0aW5nIG91dCBvZiB0aGUgY2Fu
dmFzCisgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3VXBwZXIgPSB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd0xvd2VyID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAodXBwZXIgPiBtaW5tYXhbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdVcHBl
ciA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXIgPSBtaW5tYXhbMV07Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvd2VyIDwgbWlu
bWF4WzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TG93ZXIgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvd2VyID0gbWlubWF4WzBdOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9zYW5pdHkgY2hlY2ssIGluIGNhc2Ugc29t
ZSBpbnZlcnRlZCBheGlzIGhhY2sgaXMgYXBwbGllZCB0byBmbG90CisgICAgICAgICAgICAgICAg
ICAgIGlmICgoZXJyW2VdLmVyciA9PSAneCcgJiYgaW52ZXJ0WCkgfHwgKGVycltlXS5lcnIgPT0g
J3knICYmIGludmVydFkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3N3YXAgY29vcmRp
bmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBsb3dlcjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvd2VyID0gdXBwZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB1
cHBlciA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGRyYXdMb3dlcjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRyYXdMb3dlciA9IGRyYXdVcHBlcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRyYXdVcHBlciA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRt
cCA9IG1pbm1heFswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbm1heFswXSA9IG1pbm1h
eFsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbm1heFsxXSA9IHRtcDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcGl4ZWxz
CisgICAgICAgICAgICAgICAgICAgIHggPSBheFswXS5wMmMoeCksCisgICAgICAgICAgICAgICAg
ICAgICAgICB5ID0gYXhbMV0ucDJjKHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXIg
PSBheFtlXS5wMmModXBwZXIpOworICAgICAgICAgICAgICAgICAgICBsb3dlciA9IGF4W2VdLnAy
Yyhsb3dlcik7CisgICAgICAgICAgICAgICAgICAgIG1pbm1heFswXSA9IGF4W2VdLnAyYyhtaW5t
YXhbMF0pOworICAgICAgICAgICAgICAgICAgICBtaW5tYXhbMV0gPSBheFtlXS5wMmMobWlubWF4
WzFdKTsKKworICAgICAgICAgICAgICAgICAgICAvL3NhbWUgc3R5bGUgYXMgcG9pbnRzIGJ5IGRl
ZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdmFyIGx3ID0gZXJyW2VdLmxpbmVXaWR0aCA/IGVy
cltlXS5saW5lV2lkdGggOiBzLnBvaW50cy5saW5lV2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdyA9IHMucG9pbnRzLnNoYWRvd1NpemUgIT0gbnVsbCA/IHMucG9pbnRzLnNoYWRvd1Np
emUgOiBzLnNoYWRvd1NpemU7CisKKyAgICAgICAgICAgICAgICAgICAgLy9zaGFkb3cgYXMgZm9y
IHBvaW50cworICAgICAgICAgICAgICAgICAgICBpZiAobHcgPiAwICYmIHN3ID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHcgPSBzdyAvIDI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdHgubGluZVdpZHRoID0gdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJv
a2VTdHlsZSA9ICJyZ2JhKDAsMCwwLDAuMSkiOworICAgICAgICAgICAgICAgICAgICAgICAgZHJh
d0Vycm9yKGN0eCwgZXJyW2VdLCB4LCB5LCB1cHBlciwgbG93ZXIsIGRyYXdVcHBlciwgZHJhd0xv
d2VyLCByYWRpdXMsIHcgKyB3LzIsIG1pbm1heCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDAsMCwwLDAuMikiOworICAgICAgICAgICAgICAgICAg
ICAgICAgZHJhd0Vycm9yKGN0eCwgZXJyW2VdLCB4LCB5LCB1cHBlciwgbG93ZXIsIGRyYXdVcHBl
ciwgZHJhd0xvd2VyLCByYWRpdXMsIHcvMiwgbWlubWF4KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGVycltlXS5jb2xvcj8g
ZXJyW2VdLmNvbG9yOiBzLmNvbG9yOworICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRo
ID0gbHc7CisgICAgICAgICAgICAgICAgICAgIC8vZHJhdyBpdAorICAgICAgICAgICAgICAgICAg
ICBkcmF3RXJyb3IoY3R4LCBlcnJbZV0sIHgsIHksIHVwcGVyLCBsb3dlciwgZHJhd1VwcGVyLCBk
cmF3TG93ZXIsIHJhZGl1cywgMCwgbWlubWF4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBkcmF3RXJyb3IoY3R4LGVy
cix4LHksdXBwZXIsbG93ZXIsZHJhd1VwcGVyLGRyYXdMb3dlcixyYWRpdXMsb2Zmc2V0LG1pbm1h
eCl7CisKKyAgICAgICAgLy9zaGFkb3cgb2Zmc2V0CisgICAgICAgIHkgKz0gb2Zmc2V0OworICAg
ICAgICB1cHBlciArPSBvZmZzZXQ7CisgICAgICAgIGxvd2VyICs9IG9mZnNldDsKKworICAgICAg
ICAvLyBlcnJvciBiYXIgLSBhdm9pZCBwbG90dGluZyBvdmVyIGNpcmNsZXMKKyAgICAgICAgaWYg
KGVyci5lcnIgPT0gJ3gnKXsKKyAgICAgICAgICAgIGlmICh1cHBlciA+IHggKyByYWRpdXMpIGRy
YXdQYXRoKGN0eCwgW1t1cHBlcix5XSxbTWF0aC5tYXgoeCArIHJhZGl1cyxtaW5tYXhbMF0pLHld
XSk7CisgICAgICAgICAgICBlbHNlIGRyYXdVcHBlciA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KGxvd2VyIDwgeCAtIHJhZGl1cykgZHJhd1BhdGgoY3R4LCBbW01hdGgubWluKHggLSByYWRpdXMs
bWlubWF4WzFdKSx5XSxbbG93ZXIseV1dICk7CisgICAgICAgICAgICBlbHNlIGRyYXdMb3dlciA9
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHVwcGVy
IDwgeSAtIHJhZGl1cykgZHJhd1BhdGgoY3R4LCBbW3gsdXBwZXJdLFt4LE1hdGgubWluKHkgLSBy
YWRpdXMsbWlubWF4WzBdKV1dICk7CisgICAgICAgICAgICBlbHNlIGRyYXdVcHBlciA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKGxvd2VyID4geSArIHJhZGl1cykgZHJhd1BhdGgoY3R4LCBbW3gs
TWF0aC5tYXgoeSArIHJhZGl1cyxtaW5tYXhbMV0pXSxbeCxsb3dlcl1dICk7CisgICAgICAgICAg
ICBlbHNlIGRyYXdMb3dlciA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy9pbnRlcm5h
bCByYWRpdXMgdmFsdWUgaW4gZXJyb3JiYXIsIGFsbG93cyB0byBwbG90IHJhZGl1cyAwIHBvaW50
cyBhbmQgc3RpbGwga2VlcCBwcm9wZXIgc2l6ZWQgY2FwcworICAgICAgICAvL3RoaXMgaXMgYSB3
YXkgdG8gZ2V0IGVycm9yYmFycyBvbiBsaW5lcyB3aXRob3V0IHZpc2libGUgY29ubmVjdGluZyBk
b3RzCisgICAgICAgIHJhZGl1cyA9IGVyci5yYWRpdXMgIT0gbnVsbD8gZXJyLnJhZGl1czogcmFk
aXVzOworCisgICAgICAgIC8vIHVwcGVyIGNhcAorICAgICAgICBpZiAoZHJhd1VwcGVyKSB7Cisg
ICAgICAgICAgICBpZiAoZXJyLnVwcGVyQ2FwID09ICctJyl7CisgICAgICAgICAgICAgICAgaWYg
KGVyci5lcnI9PSd4JykgZHJhd1BhdGgoY3R4LCBbW3VwcGVyLHkgLSByYWRpdXNdLFt1cHBlcix5
ICsgcmFkaXVzXV0gKTsKKyAgICAgICAgICAgICAgICBlbHNlIGRyYXdQYXRoKGN0eCwgW1t4IC0g
cmFkaXVzLHVwcGVyXSxbeCArIHJhZGl1cyx1cHBlcl1dICk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCQuaXNGdW5jdGlvbihlcnIudXBwZXJDYXApKXsKKyAgICAgICAgICAgICAgICBpZiAoZXJy
LmVycj09J3gnKSBlcnIudXBwZXJDYXAoY3R4LCB1cHBlciwgeSwgcmFkaXVzKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGVyci51cHBlckNhcChjdHgsIHgsIHVwcGVyLCByYWRpdXMpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGxvd2VyIGNhcAorICAgICAgICBpZiAoZHJh
d0xvd2VyKSB7CisgICAgICAgICAgICBpZiAoZXJyLmxvd2VyQ2FwID09ICctJyl7CisgICAgICAg
ICAgICAgICAgaWYgKGVyci5lcnI9PSd4JykgZHJhd1BhdGgoY3R4LCBbW2xvd2VyLHkgLSByYWRp
dXNdLFtsb3dlcix5ICsgcmFkaXVzXV0gKTsKKyAgICAgICAgICAgICAgICBlbHNlIGRyYXdQYXRo
KGN0eCwgW1t4IC0gcmFkaXVzLGxvd2VyXSxbeCArIHJhZGl1cyxsb3dlcl1dICk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCQuaXNGdW5jdGlvbihlcnIubG93ZXJDYXApKXsKKyAgICAgICAgICAg
ICAgICBpZiAoZXJyLmVycj09J3gnKSBlcnIubG93ZXJDYXAoY3R4LCBsb3dlciwgeSwgcmFkaXVz
KTsKKyAgICAgICAgICAgICAgICBlbHNlIGVyci5sb3dlckNhcChjdHgsIHgsIGxvd2VyLCByYWRp
dXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJh
d1BhdGgoY3R4LCBwdHMpeworICAgICAgICBjdHguYmVnaW5QYXRoKCk7CisgICAgICAgIGN0eC5t
b3ZlVG8ocHRzWzBdWzBdLCBwdHNbMF1bMV0pOworICAgICAgICBmb3IgKHZhciBwPTE7IHAgPCBw
dHMubGVuZ3RoOyBwKyspCisgICAgICAgICAgICBjdHgubGluZVRvKHB0c1twXVswXSwgcHRzW3Bd
WzFdKTsKKyAgICAgICAgY3R4LnN0cm9rZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRyYXco
cGxvdCwgY3R4KXsKKyAgICAgICAgdmFyIHBsb3RPZmZzZXQgPSBwbG90LmdldFBsb3RPZmZzZXQo
KTsKKworICAgICAgICBjdHguc2F2ZSgpOworICAgICAgICBjdHgudHJhbnNsYXRlKHBsb3RPZmZz
ZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOworICAgICAgICAkLmVhY2gocGxvdC5nZXREYXRhKCks
IGZ1bmN0aW9uIChpLCBzKSB7CisgICAgICAgICAgICBpZiAocy5wb2ludHMuZXJyb3JiYXJzICYm
IChzLnBvaW50cy54ZXJyLnNob3cgfHwgcy5wb2ludHMueWVyci5zaG93KSkKKyAgICAgICAgICAg
ICAgICBkcmF3U2VyaWVzRXJyb3JzKHBsb3QsIGN0eCwgcyk7CisgICAgICAgIH0pOworICAgICAg
ICBjdHgucmVzdG9yZSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluaXQocGxvdCkgeworICAg
ICAgICBwbG90Lmhvb2tzLnByb2Nlc3NSYXdEYXRhLnB1c2gocHJvY2Vzc1Jhd0RhdGEpOworICAg
ICAgICBwbG90Lmhvb2tzLmRyYXcucHVzaChkcmF3KTsKKyAgICB9CisKKyAgICAkLnBsb3QucGx1
Z2lucy5wdXNoKHsKKyAgICAgICAgICAgICAgICBpbml0OiBpbml0LAorICAgICAgICAgICAgICAg
IG9wdGlvbnM6IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgbmFtZTogJ2Vycm9yYmFycycsCisg
ICAgICAgICAgICAgICAgdmVyc2lvbjogJzEuMCcKKyAgICAgICAgICAgIH0pOworfSkoalF1ZXJ5
KTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Qu
ZmlsbGJldHdlZW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9qcy9qcXVlcnkuZmxvdC5maWxsYmV0d2Vlbi5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuZmlsbGJldHdlZW4uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjYgQEAKKy8qIEZsb3QgcGx1Z2luIGZvciBjb21w
dXRpbmcgYm90dG9tcyBmb3IgZmlsbGVkIGxpbmUgYW5kIGJhciBjaGFydHMuCisKK0NvcHlyaWdo
dCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9sZSBMYXVyc2VuLgorTGljZW5zZWQgdW5kZXIgdGhl
IE1JVCBsaWNlbnNlLgorCitUaGUgY2FzZTogeW91J3ZlIGdvdCB0d28gc2VyaWVzIHRoYXQgeW91
IHdhbnQgdG8gZmlsbCB0aGUgYXJlYSBiZXR3ZWVuLiBJbiBGbG90Cit0ZXJtcywgeW91IG5lZWQg
dG8gdXNlIG9uZSBhcyB0aGUgZmlsbCBib3R0b20gb2YgdGhlIG90aGVyLiBZb3UgY2FuIHNwZWNp
ZnkgdGhlCitib3R0b20gb2YgZWFjaCBkYXRhIHBvaW50IGFzIHRoZSB0aGlyZCBjb29yZGluYXRl
IG1hbnVhbGx5LCBvciB5b3UgY2FuIHVzZSB0aGlzCitwbHVnaW4gdG8gY29tcHV0ZSBpdCBmb3Ig
eW91LgorCitJbiBvcmRlciB0byBuYW1lIHRoZSBvdGhlciBzZXJpZXMsIHlvdSBuZWVkIHRvIGdp
dmUgaXQgYW4gaWQsIGxpa2UgdGhpczoKKworICAgIHZhciBkYXRhc2V0ID0gWworICAgICAgICB7
IGRhdGE6IFsgLi4uIF0sIGlkOiAiZm9vIiB9ICwgICAgICAgICAvLyB1c2UgZGVmYXVsdCBib3R0
b20KKyAgICAgICAgeyBkYXRhOiBbIC4uLiBdLCBmaWxsQmV0d2VlbjogImZvbyIgfSwgLy8gdXNl
IGZpcnN0IGRhdGFzZXQgYXMgYm90dG9tCisgICAgXTsKKworICAgICQucGxvdCgkKCIjcGxhY2Vo
b2xkZXIiKSwgZGF0YXNldCwgeyBsaW5lczogeyBzaG93OiB0cnVlLCBmaWxsOiB0cnVlIH19KTsK
KworQXMgYSBjb252ZW5pZW5jZSwgaWYgdGhlIGlkIGdpdmVuIGlzIGEgbnVtYmVyIHRoYXQgZG9l
c24ndCBhcHBlYXIgYXMgYW4gaWQgaW4KK3RoZSBzZXJpZXMsIGl0IGlzIGludGVycHJldGVkIGFz
IHRoZSBpbmRleCBpbiB0aGUgYXJyYXkgaW5zdGVhZCAoc28gZmlsbEJldHdlZW46CiswIGNhbiBh
bHNvIG1lYW4gdGhlIGZpcnN0IHNlcmllcykuCisKK0ludGVybmFsbHksIHRoZSBwbHVnaW4gbW9k
aWZpZXMgdGhlIGRhdGFwb2ludHMgaW4gZWFjaCBzZXJpZXMuIEZvciBsaW5lIHNlcmllcywKK2V4
dHJhIGRhdGEgcG9pbnRzIG1pZ2h0IGJlIGluc2VydGVkIHRocm91Z2ggaW50ZXJwb2xhdGlvbi4g
Tm90ZSB0aGF0IGF0IHBvaW50cword2hlcmUgdGhlIGJvdHRvbSBsaW5lIGlzIG5vdCBkZWZpbmVk
IChkdWUgdG8gYSBudWxsIHBvaW50IG9yIHN0YXJ0L2VuZCBvZiBsaW5lKSwKK3RoZSBjdXJyZW50
IGxpbmUgd2lsbCBzaG93IGEgZ2FwIHRvby4gVGhlIGFsZ29yaXRobSBjb21lcyBmcm9tIHRoZQor
anF1ZXJ5LmZsb3Quc3RhY2suanMgcGx1Z2luLCBwb3NzaWJseSBzb21lIGNvZGUgY291bGQgYmUg
c2hhcmVkLgorCisqLworCisoZnVuY3Rpb24gKCAkICkgeworCisgICAgdmFyIG9wdGlvbnMgPSB7
CisgICAgICAgIHNlcmllczogeworICAgICAgICAgICAgZmlsbEJldHdlZW46IG51bGwgICAgLy8g
b3IgbnVtYmVyCisgICAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gaW5pdCggcGxvdCAp
IHsKKworICAgICAgICBmdW5jdGlvbiBmaW5kQm90dG9tU2VyaWVzKCBzLCBhbGxzZXJpZXMgKSB7
CisKKyAgICAgICAgICAgIHZhciBpOworCisgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGFs
bHNlcmllcy5sZW5ndGg7ICsraSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGFsbHNlcmllc1sg
aSBdLmlkID09PSBzLmZpbGxCZXR3ZWVuICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YWxsc2VyaWVzWyBpIF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIHR5cGVvZiBzLmZpbGxCZXR3ZWVuID09PSAibnVtYmVyIiApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIHMuZmlsbEJldHdlZW4gPCAwIHx8IHMuZmlsbEJldHdlZW4gPj0gYWxs
c2VyaWVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxzZXJpZXNbIHMuZmlsbEJl
dHdlZW4gXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjb21wdXRlRmlsbEJvdHRvbXMoIHBsb3QsIHMsIGRh
dGFwb2ludHMgKSB7CisKKyAgICAgICAgICAgIGlmICggcy5maWxsQmV0d2VlbiA9PSBudWxsICkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dmFyIG90aGVyID0gZmluZEJvdHRvbVNlcmllcyggcywgcGxvdC5nZXREYXRhKCkgKTsKKworICAg
ICAgICAgICAgaWYgKCAhb3RoZXIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgcHMgPSBkYXRhcG9pbnRzLnBvaW50c2l6ZSwKKyAg
ICAgICAgICAgICAgICBwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50cywKKyAgICAgICAgICAgICAg
ICBvdGhlcnBzID0gb3RoZXIuZGF0YXBvaW50cy5wb2ludHNpemUsCisgICAgICAgICAgICAgICAg
b3RoZXJwb2ludHMgPSBvdGhlci5kYXRhcG9pbnRzLnBvaW50cywKKyAgICAgICAgICAgICAgICBu
ZXdwb2ludHMgPSBbXSwKKyAgICAgICAgICAgICAgICBweCwgcHksIGludGVyeSwgcXgsIHF5LCBi
b3R0b20sCisgICAgICAgICAgICAgICAgd2l0aGxpbmVzID0gcy5saW5lcy5zaG93LAorICAgICAg
ICAgICAgICAgIHdpdGhib3R0b20gPSBwcyA+IDIgJiYgZGF0YXBvaW50cy5mb3JtYXRbMl0ueSwK
KyAgICAgICAgICAgICAgICB3aXRoc3RlcHMgPSB3aXRobGluZXMgJiYgcy5saW5lcy5zdGVwcywK
KyAgICAgICAgICAgICAgICBmcm9tZ2FwID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBpID0gMCwK
KyAgICAgICAgICAgICAgICBqID0gMCwKKyAgICAgICAgICAgICAgICBsLCBtOworCisgICAgICAg
ICAgICB3aGlsZSAoIHRydWUgKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIGkgPj0gcG9pbnRz
Lmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgbCA9IG5ld3BvaW50cy5sZW5ndGg7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIHBvaW50c1sgaSBdID09IG51bGwgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gY29weSBnYXBzCisKKyAgICAgICAgICAgICAgICAgICAgZm9yICggbSA9IDA7IG0gPCBwczsg
KyttICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goIHBvaW50c1sg
aSArIG0gXSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aSArPSBwczsKKworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGogPj0gb3RoZXJwb2ludHMu
bGVuZ3RoICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBsaW5lcywgd2UgY2FuJ3Qg
dXNlIHRoZSByZXN0IG9mIHRoZSBwb2ludHMKKworICAgICAgICAgICAgICAgICAgICBpZiAoICF3
aXRobGluZXMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMDsgbSA8IHBz
OyArK20gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goIHBv
aW50c1sgaSArIG0gXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKKworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIG90aGVycG9pbnRzWyBqIF0gPT0gbnVsbCApIHsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBvb3BzLCBnb3QgYSBnYXAKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBtID0gMDsgbSA8IHBzOyArK20gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2lu
dHMucHVzaCggbnVsbCApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgZnJvbWdhcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsK
KworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2Fz
ZXMgd2hlcmUgd2UgYWN0dWFsbHkgZ290IHR3byBwb2ludHMKKworICAgICAgICAgICAgICAgICAg
ICBweCA9IHBvaW50c1sgaSBdOworICAgICAgICAgICAgICAgICAgICBweSA9IHBvaW50c1sgaSAr
IDEgXTsKKyAgICAgICAgICAgICAgICAgICAgcXggPSBvdGhlcnBvaW50c1sgaiBdOworICAgICAg
ICAgICAgICAgICAgICBxeSA9IG90aGVycG9pbnRzWyBqICsgMSBdOworICAgICAgICAgICAgICAg
ICAgICBib3R0b20gPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmICggcHggPT09IHF4ICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMDsgbSA8IHBzOyArK20gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goIHBvaW50c1sgaSAr
IG0gXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvL25ld3BvaW50c1sgbCArIDEgXSArPSBxeTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJvdHRvbSA9IHF5OworCisgICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBzOworICAgICAg
ICAgICAgICAgICAgICAgICAgaiArPSBvdGhlcnBzOworCisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHB4ID4gcXggKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGdv
dCBwYXN0IHBvaW50IGJlbG93LCBtaWdodCBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpbnNlcnQgaW50ZXJwb2xhdGVkIGV4dHJhIHBvaW50CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggd2l0aGxpbmVzICYmIGkgPiAwICYmIHBvaW50c1sgaSAtIHBzIF0gIT0gbnVs
bCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnkgPSBweSArICggcG9pbnRz
WyBpIC0gcHMgKyAxIF0gLSBweSApICogKCBxeCAtIHB4ICkgLyAoIHBvaW50c1sgaSAtIHBzIF0g
LSBweCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBxeCAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBpbnRlcnkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMjsgbSA8IHBzOyArK20gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBwb2ludHNb
IGkgKyBtIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm90dG9tID0gcXk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKKworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeyAvLyBweCA8IHF4CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlm
IHdlIGNvbWUgZnJvbSBhIGdhcCwgd2UganVzdCBza2lwIHRoaXMgcG9pbnQKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBmcm9tZ2FwICYmIHdpdGhsaW5lcyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpICs9IHBzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBtID0gMDsgbSA8IHBzOyArK20gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3cG9pbnRzLnB1c2goIHBvaW50c1sgaSArIG0gXSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtaWdodCBiZSBhYmxl
IHRvIGludGVycG9sYXRlIGEgcG9pbnQgYmVsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIGNhbiBnaXZlIHVzIGEgYmV0dGVyIHkKKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB3aXRobGluZXMgJiYgaiA+IDAgJiYgb3RoZXJwb2ludHNbIGogLSBvdGhlcnBzIF0gIT0g
bnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gPSBxeSArICggb3Ro
ZXJwb2ludHNbIGogLSBvdGhlcnBzICsgMSBdIC0gcXkgKSAqICggcHggLSBxeCApIC8gKCBvdGhl
cnBvaW50c1sgaiAtIG90aGVycHMgXSAtIHF4ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbmV3cG9pbnRzW2wgKyAxXSArPSBib3R0b207
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gcHM7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBmcm9tZ2FwID0gZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBsICE9PSBuZXdwb2ludHMubGVuZ3RoICYmIHdpdGhib3R0b20gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHNbIGwgKyAyIF0gPSBib3R0b207CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBtYWludGFpbiB0aGUgbGluZSBzdGVwcyBpbnZhcmlhbnQKKworICAgICAgICAgICAgICAgIGlm
ICggd2l0aHN0ZXBzICYmIGwgIT09IG5ld3BvaW50cy5sZW5ndGggJiYgbCA+IDAgJiYKKyAgICAg
ICAgICAgICAgICAgICAgbmV3cG9pbnRzWyBsIF0gIT09IG51bGwgJiYKKyAgICAgICAgICAgICAg
ICAgICAgbmV3cG9pbnRzWyBsIF0gIT09IG5ld3BvaW50c1sgbCAtIHBzIF0gJiYKKyAgICAgICAg
ICAgICAgICAgICAgbmV3cG9pbnRzWyBsICsgMSBdICE9PSBuZXdwb2ludHNbIGwgLSBwcyArIDEg
XSApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1sgbCArIHBzICsgbSBdID0gbmV3cG9pbnRz
WyBsICsgbSBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5l
d3BvaW50c1sgbCArIDEgXSA9IG5ld3BvaW50c1sgbCAtIHBzICsgMSBdOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGF0YXBvaW50cy5wb2ludHMgPSBu
ZXdwb2ludHM7CisgICAgICAgIH0KKworICAgICAgICBwbG90Lmhvb2tzLnByb2Nlc3NEYXRhcG9p
bnRzLnB1c2goIGNvbXB1dGVGaWxsQm90dG9tcyApOworICAgIH0KKworICAgICQucGxvdC5wbHVn
aW5zLnB1c2goeworICAgICAgICBpbml0OiBpbml0LAorICAgICAgICBvcHRpb25zOiBvcHRpb25z
LAorICAgICAgICBuYW1lOiAiZmlsbGJldHdlZW4iLAorICAgICAgICB2ZXJzaW9uOiAiMS4wIgor
ICAgIH0pOworCit9KShqUXVlcnkpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9qcy9qcXVlcnkuZmxvdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI2OTEgQEAKKy8qIEphdmFzY3JpcHQgcGxvdHRpbmcgbGlicmFyeSBmb3IgalF1
ZXJ5LCB2ZXJzaW9uIDAuOCBhbHBoYS4KKworQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBh
bmQgT2xlIExhdXJzZW4uCitMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCisKKyovCisK
Ky8vIGZpcnN0IGFuIGlubGluZSBkZXBlbmRlbmN5LCBqcXVlcnkuY29sb3JoZWxwZXJzLmpzLCB3
ZSBpbmxpbmUgaXQgaGVyZQorLy8gZm9yIGNvbnZlbmllbmNlCisKKy8qIFBsdWdpbiBmb3IgalF1
ZXJ5IGZvciB3b3JraW5nIHdpdGggY29sb3JzLgorICoKKyAqIFZlcnNpb24gMS4xLgorICoKKyAq
IEluc3BpcmF0aW9uIGZyb20galF1ZXJ5IGNvbG9yIGFuaW1hdGlvbiBwbHVnaW4gYnkgSm9obiBS
ZXNpZy4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgYnkgT2xlIExhdXJz
ZW4sIE9jdG9iZXIgMjAwOS4KKyAqCisgKiBFeGFtcGxlczoKKyAqCisgKiAgICQuY29sb3IucGFy
c2UoIiNmZmYiKS5zY2FsZSgncmdiJywgMC4yNSkuYWRkKCdhJywgLTAuNSkudG9TdHJpbmcoKQor
ICogICB2YXIgYyA9ICQuY29sb3IuZXh0cmFjdCgkKCIjbXlkaXYiKSwgJ2JhY2tncm91bmQtY29s
b3InKTsKKyAqICAgY29uc29sZS5sb2coYy5yLCBjLmcsIGMuYiwgYy5hKTsKKyAqICAgJC5jb2xv
ci5tYWtlKDEwMCwgNTAsIDI1LCAwLjQpLnRvU3RyaW5nKCkgLy8gcmV0dXJucyAicmdiYSgxMDAs
NTAsMjUsMC40KSIKKyAqCisgKiBOb3RlIHRoYXQgLnNjYWxlKCkgYW5kIC5hZGQoKSByZXR1cm4g
dGhlIHNhbWUgbW9kaWZpZWQgb2JqZWN0CisgKiBpbnN0ZWFkIG9mIG1ha2luZyBhIG5ldyBvbmUu
CisgKgorICogVi4gMS4xOiBGaXggZXJyb3IgaGFuZGxpbmcgc28gZS5nLiBwYXJzaW5nIGFuIGVt
cHR5IHN0cmluZyBkb2VzCisgKiBwcm9kdWNlIGEgY29sb3IgcmF0aGVyIHRoYW4ganVzdCBjcmFz
aGluZy4KKyAqLworKGZ1bmN0aW9uKEIpe0IuY29sb3I9e307Qi5jb2xvci5tYWtlPWZ1bmN0aW9u
KEYsRSxDLEQpe3ZhciBHPXt9O0cucj1GfHwwO0cuZz1FfHwwO0cuYj1DfHwwO0cuYT1EIT1udWxs
P0Q6MTtHLmFkZD1mdW5jdGlvbihKLEkpe2Zvcih2YXIgSD0wO0g8Si5sZW5ndGg7KytIKXtHW0ou
Y2hhckF0KEgpXSs9SX1yZXR1cm4gRy5ub3JtYWxpemUoKX07Ry5zY2FsZT1mdW5jdGlvbihKLEkp
e2Zvcih2YXIgSD0wO0g8Si5sZW5ndGg7KytIKXtHW0ouY2hhckF0KEgpXSo9SX1yZXR1cm4gRy5u
b3JtYWxpemUoKX07Ry50b1N0cmluZz1mdW5jdGlvbigpe2lmKEcuYT49MSl7cmV0dXJuInJnYigi
K1tHLnIsRy5nLEcuYl0uam9pbigiLCIpKyIpIn1lbHNle3JldHVybiJyZ2JhKCIrW0cucixHLmcs
Ry5iLEcuYV0uam9pbigiLCIpKyIpIn19O0cubm9ybWFsaXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
SChKLEssSSl7cmV0dXJuIEs8Sj9KOihLPkk/STpLKX1HLnI9SCgwLHBhcnNlSW50KEcuciksMjU1
KTtHLmc9SCgwLHBhcnNlSW50KEcuZyksMjU1KTtHLmI9SCgwLHBhcnNlSW50KEcuYiksMjU1KTtH
LmE9SCgwLEcuYSwxKTtyZXR1cm4gR307Ry5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBCLmNvbG9y
Lm1ha2UoRy5yLEcuYixHLmcsRy5hKX07cmV0dXJuIEcubm9ybWFsaXplKCl9O0IuY29sb3IuZXh0
cmFjdD1mdW5jdGlvbihELEMpe3ZhciBFO2Rve0U9RC5jc3MoQykudG9Mb3dlckNhc2UoKTtpZihF
IT0iIiYmRSE9InRyYW5zcGFyZW50Iil7YnJlYWt9RD1ELnBhcmVudCgpfXdoaWxlKCFCLm5vZGVO
YW1lKEQuZ2V0KDApLCJib2R5IikpO2lmKEU9PSJyZ2JhKDAsIDAsIDAsIDApIil7RT0idHJhbnNw
YXJlbnQifXJldHVybiBCLmNvbG9yLnBhcnNlKEUpfTtCLmNvbG9yLnBhcnNlPWZ1bmN0aW9uKEYp
e3ZhciBFLEM9Qi5jb2xvci5tYWtlO2lmKEU9L3JnYlwoXHMqKFswLTldezEsM30pXHMqLFxzKihb
MC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccypcKS8uZXhlYyhGKSl7cmV0dXJuIEMocGFy
c2VJbnQoRVsxXSwxMCkscGFyc2VJbnQoRVsyXSwxMCkscGFyc2VJbnQoRVszXSwxMCkpfWlmKEU9
L3JnYmFcKFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEs
M30pXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKEYpKXtyZXR1cm4gQyhw
YXJzZUludChFWzFdLDEwKSxwYXJzZUludChFWzJdLDEwKSxwYXJzZUludChFWzNdLDEwKSxwYXJz
ZUZsb2F0KEVbNF0pKX1pZihFPS9yZ2JcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxz
KihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMq
XCkvLmV4ZWMoRikpe3JldHVybiBDKHBhcnNlRmxvYXQoRVsxXSkqMi41NSxwYXJzZUZsb2F0KEVb
Ml0pKjIuNTUscGFyc2VGbG9hdChFWzNdKSoyLjU1KX1pZihFPS9yZ2JhXChccyooWzAtOV0rKD86
XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0r
KD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylccypcKS8uZXhlYyhG
KSl7cmV0dXJuIEMocGFyc2VGbG9hdChFWzFdKSoyLjU1LHBhcnNlRmxvYXQoRVsyXSkqMi41NSxw
YXJzZUZsb2F0KEVbM10pKjIuNTUscGFyc2VGbG9hdChFWzRdKSl9aWYoRT0vIyhbYS1mQS1GMC05
XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KS8uZXhlYyhGKSl7cmV0dXJuIEMo
cGFyc2VJbnQoRVsxXSwxNikscGFyc2VJbnQoRVsyXSwxNikscGFyc2VJbnQoRVszXSwxNikpfWlm
KEU9LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkvLmV4ZWMoRikpe3Jl
dHVybiBDKHBhcnNlSW50KEVbMV0rRVsxXSwxNikscGFyc2VJbnQoRVsyXStFWzJdLDE2KSxwYXJz
ZUludChFWzNdK0VbM10sMTYpKX12YXIgRD1CLnRyaW0oRikudG9Mb3dlckNhc2UoKTtpZihEPT0i
dHJhbnNwYXJlbnQiKXtyZXR1cm4gQygyNTUsMjU1LDI1NSwwKX1lbHNle0U9QVtEXXx8WzAsMCww
XTtyZXR1cm4gQyhFWzBdLEVbMV0sRVsyXSl9fTt2YXIgQT17YXF1YTpbMCwyNTUsMjU1XSxhenVy
ZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmxhY2s6WzAsMCwwXSxibHVlOlsw
LDAsMjU1XSxicm93bjpbMTY1LDQyLDQyXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAs
MTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtncmVl
bjpbMCwxMDAsMF0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6WzEzOSwwLDEz
OV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0MCwwXSxkYXJr
b3JjaGlkOlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9uOlsyMzMsMTUw
LDEyMl0sZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdvbGQ6WzI1
NSwyMTUsMF0sZ3JlZW46WzAsMTI4LDBdLGluZGlnbzpbNzUsMCwxMzBdLGtoYWtpOlsyNDAsMjMw
LDE0MF0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGln
aHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpb
MjU1LDE4MiwxOTNdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwyNTUsMF0sbWFn
ZW50YTpbMjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG5hdnk6WzAsMCwxMjhdLG9saXZlOlsx
MjgsMTI4LDBdLG9yYW5nZTpbMjU1LDE2NSwwXSxwaW5rOlsyNTUsMTkyLDIwM10scHVycGxlOlsx
MjgsMCwxMjhdLHZpb2xldDpbMTI4LDAsMTI4XSxyZWQ6WzI1NSwwLDBdLHNpbHZlcjpbMTkyLDE5
MiwxOTJdLHdoaXRlOlsyNTUsMjU1LDI1NV0seWVsbG93OlsyNTUsMjU1LDBdfX0pKGpRdWVyeSk7
CisKKy8vIHRoZSBhY3R1YWwgRmxvdCBjb2RlCisoZnVuY3Rpb24oJCkgeworICAgIGZ1bmN0aW9u
IFBsb3QocGxhY2Vob2xkZXIsIGRhdGFfLCBvcHRpb25zXywgcGx1Z2lucykgeworICAgICAgICAv
LyBkYXRhIGlzIG9uIHRoZSBmb3JtOgorICAgICAgICAvLyAgIFsgc2VyaWVzMSwgc2VyaWVzMiAu
Li4gXQorICAgICAgICAvLyB3aGVyZSBzZXJpZXMgaXMgZWl0aGVyIGp1c3QgdGhlIGRhdGEgYXMg
WyBbeDEsIHkxXSwgW3gyLCB5Ml0sIC4uLiBdCisgICAgICAgIC8vIG9yIHsgZGF0YTogWyBbeDEs
IHkxXSwgW3gyLCB5Ml0sIC4uLiBdLCBsYWJlbDogInNvbWUgbGFiZWwiLCAuLi4gfQorCisgICAg
ICAgIHZhciBzZXJpZXMgPSBbXSwKKyAgICAgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAg
ICAgICAgLy8gdGhlIGNvbG9yIHRoZW1lIHVzZWQgZm9yIGdyYXBocworICAgICAgICAgICAgICAg
IGNvbG9yczogWyIjZWRjMjQwIiwgIiNhZmQ4ZjgiLCAiI2NiNGI0YiIsICIjNGRhNzRkIiwgIiM5
NDQwZWQiXSwKKyAgICAgICAgICAgICAgICBsZWdlbmQ6IHsKKyAgICAgICAgICAgICAgICAgICAg
c2hvdzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbm9Db2x1bW5zOiAxLCAvLyBudW1iZXIg
b2YgY29sdW1zIGluIGxlZ2VuZCB0YWJsZQorICAgICAgICAgICAgICAgICAgICBsYWJlbEZvcm1h
dHRlcjogbnVsbCwgLy8gZm46IHN0cmluZyAtPiBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAg
bGFiZWxCb3hCb3JkZXJDb2xvcjogIiNjY2MiLCAvLyBib3JkZXIgY29sb3IgZm9yIHRoZSBsaXR0
bGUgbGFiZWwgYm94ZXMKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBudWxsLCAvLyBj
b250YWluZXIgKGFzIGpRdWVyeSBvYmplY3QpIHRvIHB1dCBsZWdlbmQgaW4sIG51bGwgbWVhbnMg
ZGVmYXVsdCBvbiB0b3Agb2YgZ3JhcGgKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICJu
ZSIsIC8vIHBvc2l0aW9uIG9mIGRlZmF1bHQgbGVnZW5kIGNvbnRhaW5lciB3aXRoaW4gcGxvdAor
ICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDUsIC8vIGRpc3RhbmNlIGZyb20gZ3JpZCBlZGdl
IHRvIGRlZmF1bHQgbGVnZW5kIGNvbnRhaW5lciB3aXRoaW4gcGxvdAorICAgICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsIC8vIG51bGwgbWVhbnMgYXV0by1kZXRlY3QKKyAg
ICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZE9wYWNpdHk6IDAuODUsIC8vIHNldCB0byAwIHRv
IGF2b2lkIGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkOiBudWxsICAgIC8v
IGRlZmF1bHQgdG8gbm8gbGVnZW5kIHNvcnRpbmcKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIHhheGlzOiB7CisgICAgICAgICAgICAgICAgICAgIHNob3c6IG51bGwsIC8vIG51
bGwgPSBhdXRvLWRldGVjdCwgdHJ1ZSA9IGFsd2F5cywgZmFsc2UgPSBuZXZlcgorICAgICAgICAg
ICAgICAgICAgICBwb3NpdGlvbjogImJvdHRvbSIsIC8vIG9yICJ0b3AiCisgICAgICAgICAgICAg
ICAgICAgIG1vZGU6IG51bGwsIC8vIG51bGwgb3IgInRpbWUiCisgICAgICAgICAgICAgICAgICAg
IHRpbWV6b25lOiBudWxsLCAvLyAiYnJvd3NlciIgZm9yIGxvY2FsIHRvIHRoZSBjbGllbnQgb3Ig
dGltZXpvbmUgZm9yIHRpbWV6b25lLWpzCisgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG51bGws
IC8vIG51bGwgKGRlcml2ZWQgZnJvbSBDU1MgaW4gcGxhY2Vob2xkZXIpIG9yIG9iamVjdCBsaWtl
IHsgc2l6ZTogMTEsIHN0eWxlOiAiaXRhbGljIiwgd2VpZ2h0OiAiYm9sZCIsIGZhbWlseTogInNh
bnMtc2VyaWYiLCB2YXJpYW50OiAic21hbGwtY2FwcyIgfQorICAgICAgICAgICAgICAgICAgICBj
b2xvcjogbnVsbCwgLy8gYmFzZSBjb2xvciwgbGFiZWxzLCB0aWNrcworICAgICAgICAgICAgICAg
ICAgICB0aWNrQ29sb3I6IG51bGwsIC8vIHBvc3NpYmx5IGRpZmZlcmVudCBjb2xvciBvZiB0aWNr
cywgZS5nLiAicmdiYSgwLDAsMCwwLjE1KSIKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3Jt
OiBudWxsLCAvLyBudWxsIG9yIGY6IG51bWJlciAtPiBudW1iZXIgdG8gdHJhbnNmb3JtIGF4aXMK
KyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZVRyYW5zZm9ybTogbnVsbCwgLy8gaWYgdHJhbnNm
b3JtIGlzIHNldCwgdGhpcyBzaG91bGQgYmUgdGhlIGludmVyc2UgZnVuY3Rpb24KKyAgICAgICAg
ICAgICAgICAgICAgbWluOiBudWxsLCAvLyBtaW4uIHZhbHVlIHRvIHNob3csIG51bGwgbWVhbnMg
c2V0IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgbWF4OiBudWxsLCAvLyBtYXgu
IHZhbHVlIHRvIHNob3csIG51bGwgbWVhbnMgc2V0IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAg
ICAgICAgICAgYXV0b3NjYWxlTWFyZ2luOiBudWxsLCAvLyBtYXJnaW4gaW4gJSB0byBhZGQgaWYg
YXV0by1zZXR0aW5nIG1pbi9tYXgKKyAgICAgICAgICAgICAgICAgICAgdGlja3M6IG51bGwsIC8v
IGVpdGhlciBbMSwgM10gb3IgW1sxLCAiYSJdLCAzXSBvciAoZm46IGF4aXMgaW5mbyAtPiB0aWNr
cykgb3IgYXBwLiBudW1iZXIgb2YgdGlja3MgZm9yIGF1dG8tdGlja3MKKyAgICAgICAgICAgICAg
ICAgICAgdGlja0Zvcm1hdHRlcjogbnVsbCwgLy8gZm46IG51bWJlciAtPiBzdHJpbmcKKyAgICAg
ICAgICAgICAgICAgICAgbGFiZWxXaWR0aDogbnVsbCwgLy8gc2l6ZSBvZiB0aWNrIGxhYmVscyBp
biBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgbGFiZWxIZWlnaHQ6IG51bGwsCisgICAgICAg
ICAgICAgICAgICAgIHJlc2VydmVTcGFjZTogbnVsbCwgLy8gd2hldGhlciB0byByZXNlcnZlIHNw
YWNlIGV2ZW4gaWYgYXhpcyBpc24ndCBzaG93bgorICAgICAgICAgICAgICAgICAgICB0aWNrTGVu
Z3RoOiBudWxsLCAvLyBzaXplIGluIHBpeGVscyBvZiB0aWNrcywgb3IgImZ1bGwiIGZvciB3aG9s
ZSBsaW5lCisgICAgICAgICAgICAgICAgICAgIGFsaWduVGlja3NXaXRoQXhpczogbnVsbCwgLy8g
YXhpcyBudW1iZXIgb3IgbnVsbCBmb3Igbm8gc3luYworCisgICAgICAgICAgICAgICAgICAgIC8v
IG1vZGUgc3BlY2lmaWMgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICB0aWNrRGVjaW1hbHM6
IG51bGwsIC8vIG5vLiBvZiBkZWNpbWFscywgbnVsbCBtZWFucyBhdXRvCisgICAgICAgICAgICAg
ICAgICAgIHRpY2tTaXplOiBudWxsLCAvLyBudW1iZXIgb3IgW251bWJlciwgInVuaXQiXQorICAg
ICAgICAgICAgICAgICAgICBtaW5UaWNrU2l6ZTogbnVsbCwgLy8gbnVtYmVyIG9yIFtudW1iZXIs
ICJ1bml0Il0KKyAgICAgICAgICAgICAgICAgICAgbW9udGhOYW1lczogbnVsbCwgLy8gbGlzdCBv
ZiBuYW1lcyBvZiBtb250aHMKKyAgICAgICAgICAgICAgICAgICAgdGltZWZvcm1hdDogbnVsbCwg
Ly8gZm9ybWF0IHN0cmluZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdHdlbHZlSG91ckNs
b2NrOiBmYWxzZSAvLyAxMiBvciAyNCB0aW1lIGluIHRpbWUgbW9kZQorICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgeWF4aXM6IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0b3Nj
YWxlTWFyZ2luOiAwLjAyLAorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogImxlZnQiIC8v
IG9yICJyaWdodCIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHhheGVzOiBb
XSwKKyAgICAgICAgICAgICAgICB5YXhlczogW10sCisgICAgICAgICAgICAgICAgc2VyaWVzOiB7
CisgICAgICAgICAgICAgICAgICAgIHBvaW50czogeworICAgICAgICAgICAgICAgICAgICAgICAg
c2hvdzogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDMsCisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IDIsIC8vIGluIHBpeGVscworICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsbDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xv
cjogIiNmZmZmZmYiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiAiY2lyY2xlIiAv
LyBvciBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg
ICBsaW5lczogeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgcHV0IGluIHNo
b3c6IGZhbHNlIHNvIHdlIGNhbiBzZWUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXRo
ZXIgbGluZXMgd2VyZSBhY3RpdmVseSBkaXNhYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAg
bGluZVdpZHRoOiAyLCAvLyBpbiBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yOiBudWxsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RlcHM6IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBPbWl0ICd6ZXJvJywgc28gd2UgY2FuIGxhdGVyIGRlZmF1bHQgaXRzIHZhbHVlIHRvCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB0aGF0IG9mIHRoZSAnZmlsbCcgb3B0aW9uLgor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBiYXJzOiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzaG93OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVXaWR0aDogMiwgLy8gaW4gcGl4ZWxzCisgICAgICAgICAgICAgICAgICAgICAgICBiYXJX
aWR0aDogMSwgLy8gaW4gdW5pdHMgb2YgdGhlIHggYXhpcworICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsbDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogbnVsbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAibGVmdCIsIC8vICJsZWZ0IiwgInJpZ2h0
Iiwgb3IgImNlbnRlciIKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgemVybzogdHJ1ZQorICAgICAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICAgICBzaGFkb3dTaXplOiAzLAorICAgICAgICAgICAgICAg
ICAgICBoaWdobGlnaHRDb2xvcjogbnVsbAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgZ3JpZDogeworICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICBhYm92ZURhdGE6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBjb2xvcjog
IiM1NDU0NTQiLCAvLyBwcmltYXJ5IGNvbG9yIHVzZWQgZm9yIG91dGxpbmUgYW5kIGxhYmVscwor
ICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsIC8vIG51bGwgZm9yIHRy
YW5zcGFyZW50LCBlbHNlIGNvbG9yCisgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBu
dWxsLCAvLyBzZXQgaWYgZGlmZmVyZW50IGZyb20gdGhlIGdyaWQgY29sb3IKKyAgICAgICAgICAg
ICAgICAgICAgdGlja0NvbG9yOiBudWxsLCAvLyBjb2xvciBmb3IgdGhlIHRpY2tzLCBlLmcuICJy
Z2JhKDAsMCwwLDAuMTUpIgorICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsIC8vIGRpc3Rh
bmNlIGZyb20gdGhlIGNhbnZhcyBlZGdlIHRvIHRoZSBncmlkCisgICAgICAgICAgICAgICAgICAg
IGxhYmVsTWFyZ2luOiA1LCAvLyBpbiBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgYXhpc01h
cmdpbjogOCwgLy8gaW4gcGl4ZWxzCisgICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAy
LCAvLyBpbiBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgbWluQm9yZGVyTWFyZ2luOiBudWxs
LCAvLyBpbiBwaXhlbHMsIG51bGwgbWVhbnMgdGFrZW4gZnJvbSBwb2ludHMgcmFkaXVzCisgICAg
ICAgICAgICAgICAgICAgIG1hcmtpbmdzOiBudWxsLCAvLyBhcnJheSBvZiByYW5nZXMgb3IgZm46
IGF4ZXMgLT4gYXJyYXkgb2YgcmFuZ2VzCisgICAgICAgICAgICAgICAgICAgIG1hcmtpbmdzQ29s
b3I6ICIjZjRmNGY0IiwKKyAgICAgICAgICAgICAgICAgICAgbWFya2luZ3NMaW5lV2lkdGg6IDIs
CisgICAgICAgICAgICAgICAgICAgIC8vIGludGVyYWN0aXZlIHN0dWZmCisgICAgICAgICAgICAg
ICAgICAgIGNsaWNrYWJsZTogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGhvdmVyYWJsZTog
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGF1dG9IaWdobGlnaHQ6IHRydWUsIC8vIGhpZ2hs
aWdodCBpbiBjYXNlIG1vdXNlIGlzIG5lYXIKKyAgICAgICAgICAgICAgICAgICAgbW91c2VBY3Rp
dmVSYWRpdXM6IDEwIC8vIGhvdyBmYXIgdGhlIG1vdXNlIGNhbiBiZSBhd2F5IHRvIGFjdGl2YXRl
IGFuIGl0ZW0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGludGVyYWN0aW9u
OiB7CisgICAgICAgICAgICAgICAgICAgIHJlZHJhd092ZXJsYXlJbnRlcnZhbDogMTAwMC82MCAv
LyB0aW1lIGJldHdlZW4gdXBkYXRlcywgLTEgbWVhbnMgaW4gc2FtZSBmbG93CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICBob29rczoge30KKyAgICAgICAgICAgIH0sCisgICAg
ICAgIGNhbnZhcyA9IG51bGwsICAgICAgLy8gdGhlIGNhbnZhcyBmb3IgdGhlIHBsb3QgaXRzZWxm
CisgICAgICAgIG92ZXJsYXkgPSBudWxsLCAgICAgLy8gY2FudmFzIGZvciBpbnRlcmFjdGl2ZSBz
dHVmZiBvbiB0b3Agb2YgcGxvdAorICAgICAgICBldmVudEhvbGRlciA9IG51bGwsIC8vIGpRdWVy
eSBvYmplY3QgdGhhdCBldmVudHMgc2hvdWxkIGJlIGJvdW5kIHRvCisgICAgICAgIGN0eCA9IG51
bGwsIG9jdHggPSBudWxsLAorICAgICAgICB4YXhlcyA9IFtdLCB5YXhlcyA9IFtdLAorICAgICAg
ICBwbG90T2Zmc2V0ID0geyBsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9LAor
ICAgICAgICBjYW52YXNXaWR0aCA9IDAsIGNhbnZhc0hlaWdodCA9IDAsCisgICAgICAgIHBsb3RX
aWR0aCA9IDAsIHBsb3RIZWlnaHQgPSAwLAorICAgICAgICBob29rcyA9IHsKKyAgICAgICAgICAg
IHByb2Nlc3NPcHRpb25zOiBbXSwKKyAgICAgICAgICAgIHByb2Nlc3NSYXdEYXRhOiBbXSwKKyAg
ICAgICAgICAgIHByb2Nlc3NEYXRhcG9pbnRzOiBbXSwKKyAgICAgICAgICAgIHByb2Nlc3NPZmZz
ZXQ6IFtdLAorICAgICAgICAgICAgZHJhd0JhY2tncm91bmQ6IFtdLAorICAgICAgICAgICAgZHJh
d1NlcmllczogW10sCisgICAgICAgICAgICBkcmF3OiBbXSwKKyAgICAgICAgICAgIGJpbmRFdmVu
dHM6IFtdLAorICAgICAgICAgICAgZHJhd092ZXJsYXk6IFtdLAorICAgICAgICAgICAgc2h1dGRv
d246IFtdCisgICAgICAgIH0sCisgICAgICAgIHBsb3QgPSB0aGlzOworCisgICAgICAgIC8vIHB1
YmxpYyBmdW5jdGlvbnMKKyAgICAgICAgcGxvdC5zZXREYXRhID0gc2V0RGF0YTsKKyAgICAgICAg
cGxvdC5zZXR1cEdyaWQgPSBzZXR1cEdyaWQ7CisgICAgICAgIHBsb3QuZHJhdyA9IGRyYXc7Cisg
ICAgICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBsYWNlaG9s
ZGVyOyB9OworICAgICAgICBwbG90LmdldENhbnZhcyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2Fu
dmFzOyB9OworICAgICAgICBwbG90LmdldFBsb3RPZmZzZXQgPSBmdW5jdGlvbigpIHsgcmV0dXJu
IHBsb3RPZmZzZXQ7IH07CisgICAgICAgIHBsb3Qud2lkdGggPSBmdW5jdGlvbiAoKSB7IHJldHVy
biBwbG90V2lkdGg7IH07CisgICAgICAgIHBsb3QuaGVpZ2h0ID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gcGxvdEhlaWdodDsgfTsKKyAgICAgICAgcGxvdC5vZmZzZXQgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgbyA9IGV2ZW50SG9sZGVyLm9mZnNldCgpOworICAgICAgICAgICAgby5s
ZWZ0ICs9IHBsb3RPZmZzZXQubGVmdDsKKyAgICAgICAgICAgIG8udG9wICs9IHBsb3RPZmZzZXQu
dG9wOworICAgICAgICAgICAgcmV0dXJuIG87CisgICAgICAgIH07CisgICAgICAgIHBsb3QuZ2V0
RGF0YSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcmllczsgfTsKKyAgICAgICAgcGxvdC5nZXRB
eGVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHJlcyA9IHt9LCBpOworICAgICAg
ICAgICAgJC5lYWNoKHhheGVzLmNvbmNhdCh5YXhlcyksIGZ1bmN0aW9uIChfLCBheGlzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGF4aXMpCisgICAgICAgICAgICAgICAgICAgIHJlc1theGlzLmRp
cmVjdGlvbiArIChheGlzLm4gIT0gMSA/IGF4aXMubiA6ICIiKSArICJheGlzIl0gPSBheGlzOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9OworICAg
ICAgICBwbG90LmdldFhBeGVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geGF4ZXM7IH07CisgICAg
ICAgIHBsb3QuZ2V0WUF4ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB5YXhlczsgfTsKKyAgICAg
ICAgcGxvdC5jMnAgPSBjYW52YXNUb0F4aXNDb29yZHM7CisgICAgICAgIHBsb3QucDJjID0gYXhp
c1RvQ2FudmFzQ29vcmRzOworICAgICAgICBwbG90LmdldE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBvcHRpb25zOyB9OworICAgICAgICBwbG90LmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsK
KyAgICAgICAgcGxvdC51bmhpZ2hsaWdodCA9IHVuaGlnaGxpZ2h0OworICAgICAgICBwbG90LnRy
aWdnZXJSZWRyYXdPdmVybGF5ID0gdHJpZ2dlclJlZHJhd092ZXJsYXk7CisgICAgICAgIHBsb3Qu
cG9pbnRPZmZzZXQgPSBmdW5jdGlvbihwb2ludCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICBsZWZ0OiBwYXJzZUludCh4YXhlc1theGlzTnVtYmVyKHBvaW50LCAieCIp
IC0gMV0ucDJjKCtwb2ludC54KSArIHBsb3RPZmZzZXQubGVmdCwgMTApLAorICAgICAgICAgICAg
ICAgIHRvcDogcGFyc2VJbnQoeWF4ZXNbYXhpc051bWJlcihwb2ludCwgInkiKSAtIDFdLnAyYygr
cG9pbnQueSkgKyBwbG90T2Zmc2V0LnRvcCwgMTApCisgICAgICAgICAgICB9OworICAgICAgICB9
OworICAgICAgICBwbG90LnNodXRkb3duID0gc2h1dGRvd247CisgICAgICAgIHBsb3QucmVzaXpl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZ2V0Q2FudmFzRGltZW5zaW9ucygpOworICAg
ICAgICAgICAgcmVzaXplQ2FudmFzKGNhbnZhcyk7CisgICAgICAgICAgICByZXNpemVDYW52YXMo
b3ZlcmxheSk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gcHVibGljIGF0dHJpYnV0ZXMKKyAg
ICAgICAgcGxvdC5ob29rcyA9IGhvb2tzOworCisgICAgICAgIC8vIGluaXRpYWxpemUKKyAgICAg
ICAgaW5pdFBsdWdpbnMocGxvdCk7CisgICAgICAgIHBhcnNlT3B0aW9ucyhvcHRpb25zXyk7Cisg
ICAgICAgIHNldHVwQ2FudmFzZXMoKTsKKyAgICAgICAgc2V0RGF0YShkYXRhXyk7CisgICAgICAg
IHNldHVwR3JpZCgpOworICAgICAgICBkcmF3KCk7CisgICAgICAgIGJpbmRFdmVudHMoKTsKKwor
CisgICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGVIb29rcyhob29rLCBhcmdzKSB7CisgICAgICAgICAg
ICBhcmdzID0gW3Bsb3RdLmNvbmNhdChhcmdzKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgaG9vay5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBob29rW2ldLmFwcGx5KHRo
aXMsIGFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5pdFBsdWdpbnMoKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICB2YXIgcCA9IHBsdWdpbnNbaV07CisgICAgICAgICAgICAgICAgcC5p
bml0KHBsb3QpOworICAgICAgICAgICAgICAgIGlmIChwLm9wdGlvbnMpCisgICAgICAgICAgICAg
ICAgICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMsIHAub3B0aW9ucyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0cykgeworICAg
ICAgICAgICAgdmFyIGk7CisKKyAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMsIG9w
dHMpOworCisgICAgICAgICAgICBpZiAob3B0aW9ucy54YXhpcy5jb2xvciA9PSBudWxsKQorICAg
ICAgICAgICAgICAgIG9wdGlvbnMueGF4aXMuY29sb3IgPSBvcHRpb25zLmdyaWQuY29sb3I7Cisg
ICAgICAgICAgICBpZiAob3B0aW9ucy55YXhpcy5jb2xvciA9PSBudWxsKQorICAgICAgICAgICAg
ICAgIG9wdGlvbnMueWF4aXMuY29sb3IgPSBvcHRpb25zLmdyaWQuY29sb3I7CisKKyAgICAgICAg
ICAgIGlmIChvcHRpb25zLnhheGlzLnRpY2tDb2xvciA9PSBudWxsKSAvLyBiYWNrd2FyZHMtY29t
cGF0aWJpbGl0eQorICAgICAgICAgICAgICAgIG9wdGlvbnMueGF4aXMudGlja0NvbG9yID0gb3B0
aW9ucy5ncmlkLnRpY2tDb2xvcjsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnlheGlzLnRpY2tD
b2xvciA9PSBudWxsKSAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAg
IG9wdGlvbnMueWF4aXMudGlja0NvbG9yID0gb3B0aW9ucy5ncmlkLnRpY2tDb2xvcjsKKworICAg
ICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5ib3JkZXJDb2xvciA9PSBudWxsKQorICAgICAgICAg
ICAgICAgIG9wdGlvbnMuZ3JpZC5ib3JkZXJDb2xvciA9IG9wdGlvbnMuZ3JpZC5jb2xvcjsKKyAg
ICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQudGlja0NvbG9yID09IG51bGwpCisgICAgICAgICAg
ICAgICAgb3B0aW9ucy5ncmlkLnRpY2tDb2xvciA9ICQuY29sb3IucGFyc2Uob3B0aW9ucy5ncmlk
LmNvbG9yKS5zY2FsZSgnYScsIDAuMjIpLnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgIC8vIGZp
bGwgaW4gZGVmYXVsdHMgaW4gYXhlcywgY29weSBhdCBsZWFzdCBhbHdheXMgdGhlCisgICAgICAg
ICAgICAvLyBmaXJzdCBhcyB0aGUgcmVzdCBvZiB0aGUgY29kZSBhc3N1bWVzIGl0J2xsIGJlIHRo
ZXJlCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5tYXgoMSwgb3B0aW9ucy54YXhl
cy5sZW5ndGgpOyArK2kpCisgICAgICAgICAgICAgICAgb3B0aW9ucy54YXhlc1tpXSA9ICQuZXh0
ZW5kKHRydWUsIHt9LCBvcHRpb25zLnhheGlzLCBvcHRpb25zLnhheGVzW2ldKTsKKyAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBNYXRoLm1heCgxLCBvcHRpb25zLnlheGVzLmxlbmd0aCk7ICsr
aSkKKyAgICAgICAgICAgICAgICBvcHRpb25zLnlheGVzW2ldID0gJC5leHRlbmQodHJ1ZSwge30s
IG9wdGlvbnMueWF4aXMsIG9wdGlvbnMueWF4ZXNbaV0pOworCisgICAgICAgICAgICAvLyBiYWNr
d2FyZHMgY29tcGF0aWJpbGl0eSwgdG8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUKKyAgICAgICAgICAg
IGlmIChvcHRpb25zLnhheGlzLm5vVGlja3MgJiYgb3B0aW9ucy54YXhpcy50aWNrcyA9PSBudWxs
KQorICAgICAgICAgICAgICAgIG9wdGlvbnMueGF4aXMudGlja3MgPSBvcHRpb25zLnhheGlzLm5v
VGlja3M7CisgICAgICAgICAgICBpZiAob3B0aW9ucy55YXhpcy5ub1RpY2tzICYmIG9wdGlvbnMu
eWF4aXMudGlja3MgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBvcHRpb25zLnlheGlzLnRpY2tz
ID0gb3B0aW9ucy55YXhpcy5ub1RpY2tzOworICAgICAgICAgICAgaWYgKG9wdGlvbnMueDJheGlz
KSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy54YXhlc1sxXSA9ICQuZXh0ZW5kKHRydWUsIHt9
LCBvcHRpb25zLnhheGlzLCBvcHRpb25zLngyYXhpcyk7CisgICAgICAgICAgICAgICAgb3B0aW9u
cy54YXhlc1sxXS5wb3NpdGlvbiA9ICJ0b3AiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG9wdGlvbnMueTJheGlzKSB7CisgICAgICAgICAgICAgICAgb3B0aW9ucy55YXhlc1sxXSA9
ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zLnlheGlzLCBvcHRpb25zLnkyYXhpcyk7CisgICAg
ICAgICAgICAgICAgb3B0aW9ucy55YXhlc1sxXS5wb3NpdGlvbiA9ICJyaWdodCI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAob3B0aW9ucy5ncmlkLmNvbG9yZWRBcmVhcykKKyAgICAg
ICAgICAgICAgICBvcHRpb25zLmdyaWQubWFya2luZ3MgPSBvcHRpb25zLmdyaWQuY29sb3JlZEFy
ZWFzOworICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5jb2xvcmVkQXJlYXNDb2xvcikKKyAg
ICAgICAgICAgICAgICBvcHRpb25zLmdyaWQubWFya2luZ3NDb2xvciA9IG9wdGlvbnMuZ3JpZC5j
b2xvcmVkQXJlYXNDb2xvcjsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbmVzKQorICAgICAg
ICAgICAgICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMuc2VyaWVzLmxpbmVzLCBvcHRpb25zLmxp
bmVzKTsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnBvaW50cykKKyAgICAgICAgICAgICAgICAk
LmV4dGVuZCh0cnVlLCBvcHRpb25zLnNlcmllcy5wb2ludHMsIG9wdGlvbnMucG9pbnRzKTsKKyAg
ICAgICAgICAgIGlmIChvcHRpb25zLmJhcnMpCisgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1
ZSwgb3B0aW9ucy5zZXJpZXMuYmFycywgb3B0aW9ucy5iYXJzKTsKKyAgICAgICAgICAgIGlmIChv
cHRpb25zLnNoYWRvd1NpemUgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBvcHRpb25zLnNlcmll
cy5zaGFkb3dTaXplID0gb3B0aW9ucy5zaGFkb3dTaXplOworICAgICAgICAgICAgaWYgKG9wdGlv
bnMuaGlnaGxpZ2h0Q29sb3IgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBvcHRpb25zLnNlcmll
cy5oaWdobGlnaHRDb2xvciA9IG9wdGlvbnMuaGlnaGxpZ2h0Q29sb3I7CisKKyAgICAgICAgICAg
IC8vIHNhdmUgb3B0aW9ucyBvbiBheGVzIGZvciBmdXR1cmUgcmVmZXJlbmNlCisgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy54YXhlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAg
ICAgICBnZXRPckNyZWF0ZUF4aXMoeGF4ZXMsIGkgKyAxKS5vcHRpb25zID0gb3B0aW9ucy54YXhl
c1tpXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnlheGVzLmxlbmd0aDsg
KytpKQorICAgICAgICAgICAgICAgIGdldE9yQ3JlYXRlQXhpcyh5YXhlcywgaSArIDEpLm9wdGlv
bnMgPSBvcHRpb25zLnlheGVzW2ldOworCisgICAgICAgICAgICAvLyBhZGQgaG9va3MgZnJvbSBv
cHRpb25zCisgICAgICAgICAgICBmb3IgKHZhciBuIGluIGhvb2tzKQorICAgICAgICAgICAgICAg
IGlmIChvcHRpb25zLmhvb2tzW25dICYmIG9wdGlvbnMuaG9va3Nbbl0ubGVuZ3RoKQorICAgICAg
ICAgICAgICAgICAgICBob29rc1tuXSA9IGhvb2tzW25dLmNvbmNhdChvcHRpb25zLmhvb2tzW25d
KTsKKworICAgICAgICAgICAgZXhlY3V0ZUhvb2tzKGhvb2tzLnByb2Nlc3NPcHRpb25zLCBbb3B0
aW9uc10pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2V0RGF0YShkKSB7CisgICAg
ICAgICAgICBzZXJpZXMgPSBwYXJzZURhdGEoZCk7CisgICAgICAgICAgICBmaWxsSW5TZXJpZXNP
cHRpb25zKCk7CisgICAgICAgICAgICBwcm9jZXNzRGF0YSgpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gcGFyc2VEYXRhKGQpIHsKKyAgICAgICAgICAgIHZhciByZXMgPSBbXTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZC5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgIHZhciBzID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMuc2VyaWVzKTsKKworICAg
ICAgICAgICAgICAgIGlmIChkW2ldLmRhdGEgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICBzLmRhdGEgPSBkW2ldLmRhdGE7IC8vIG1vdmUgdGhlIGRhdGEgaW5zdGVhZCBvZiBkZWVwLWNv
cHkKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRbaV0uZGF0YTsKKworICAgICAgICAgICAg
ICAgICAgICAkLmV4dGVuZCh0cnVlLCBzLCBkW2ldKTsKKworICAgICAgICAgICAgICAgICAgICBk
W2ldLmRhdGEgPSBzLmRhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcy5kYXRhID0gZFtpXTsKKyAgICAgICAgICAgICAgICBy
ZXMucHVzaChzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGF4aXNOdW1iZXIob2JqLCBjb29yZCkgeworICAg
ICAgICAgICAgdmFyIGEgPSBvYmpbY29vcmQgKyAiYXhpcyJdOworICAgICAgICAgICAgaWYgKHR5
cGVvZiBhID09ICJvYmplY3QiKSAvLyBpZiB3ZSBnb3QgYSByZWFsIGF4aXMsIGV4dHJhY3QgbnVt
YmVyCisgICAgICAgICAgICAgICAgYSA9IGEubjsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYSAh
PSAibnVtYmVyIikKKyAgICAgICAgICAgICAgICBhID0gMTsgLy8gZGVmYXVsdCB0byBmaXJzdCBh
eGlzCisgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IGFsbEF4ZXMoKSB7CisgICAgICAgICAgICAvLyByZXR1cm4gZmxhdCBhcnJheSB3aXRob3V0IGFu
bm95aW5nIG51bGwgZW50cmllcworICAgICAgICAgICAgcmV0dXJuICQuZ3JlcCh4YXhlcy5jb25j
YXQoeWF4ZXMpLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYTsgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBjYW52YXNUb0F4aXNDb29yZHMocG9zKSB7CisgICAgICAgICAgICAvLyBy
ZXR1cm4gYW4gb2JqZWN0IHdpdGggeC95IGNvcnJlc3BvbmRpbmcgdG8gYWxsIHVzZWQgYXhlcwor
ICAgICAgICAgICAgdmFyIHJlcyA9IHt9LCBpLCBheGlzOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IHhheGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYXhpcyA9IHhheGVz
W2ldOworICAgICAgICAgICAgICAgIGlmIChheGlzICYmIGF4aXMudXNlZCkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzWyJ4IiArIGF4aXMubl0gPSBheGlzLmMycChwb3MubGVmdCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB5YXhlcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgIGF4aXMgPSB5YXhlc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAo
YXhpcyAmJiBheGlzLnVzZWQpCisgICAgICAgICAgICAgICAgICAgIHJlc1sieSIgKyBheGlzLm5d
ID0gYXhpcy5jMnAocG9zLnRvcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChy
ZXMueDEgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICByZXMueCA9IHJlcy54MTsKKyAg
ICAgICAgICAgIGlmIChyZXMueTEgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICByZXMu
eSA9IHJlcy55MTsKKworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGF4aXNUb0NhbnZhc0Nvb3Jkcyhwb3MpIHsKKyAgICAgICAgICAgIC8vIGdl
dCBjYW52YXMgY29vcmRzIGZyb20gdGhlIGZpcnN0IHBhaXIgb2YgeC95IGZvdW5kIGluIHBvcwor
ICAgICAgICAgICAgdmFyIHJlcyA9IHt9LCBpLCBheGlzLCBrZXk7CisKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCB4YXhlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGF4aXMg
PSB4YXhlc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoYXhpcyAmJiBheGlzLnVzZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAga2V5ID0gIngiICsgYXhpcy5uOworICAgICAgICAgICAgICAgICAg
ICBpZiAocG9zW2tleV0gPT0gbnVsbCAmJiBheGlzLm4gPT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGtleSA9ICJ4IjsKKworICAgICAgICAgICAgICAgICAgICBpZiAocG9zW2tleV0gIT0g
bnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmxlZnQgPSBheGlzLnAyYyhwb3Nb
a2V5XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IHlheGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYXhpcyA9
IHlheGVzW2ldOworICAgICAgICAgICAgICAgIGlmIChheGlzICYmIGF4aXMudXNlZCkgeworICAg
ICAgICAgICAgICAgICAgICBrZXkgPSAieSIgKyBheGlzLm47CisgICAgICAgICAgICAgICAgICAg
IGlmIChwb3Nba2V5XSA9PSBudWxsICYmIGF4aXMubiA9PSAxKQorICAgICAgICAgICAgICAgICAg
ICAgICAga2V5ID0gInkiOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwb3Nba2V5XSAhPSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMudG9wID0gYXhpcy5wMmMocG9zW2tl
eV0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biByZXM7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRPckNyZWF0ZUF4aXMoYXhl
cywgbnVtYmVyKSB7CisgICAgICAgICAgICBpZiAoIWF4ZXNbbnVtYmVyIC0gMV0pCisgICAgICAg
ICAgICAgICAgYXhlc1tudW1iZXIgLSAxXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgbjogbnVt
YmVyLCAvLyBzYXZlIHRoZSBudW1iZXIgZm9yIGZ1dHVyZSByZWZlcmVuY2UKKyAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aW9uOiBheGVzID09IHhheGVzID8gIngiIDogInkiLAorICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zOiAkLmV4dGVuZCh0cnVlLCB7fSwgYXhlcyA9PSB4YXhlcyA/IG9w
dGlvbnMueGF4aXMgOiBvcHRpb25zLnlheGlzKQorICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIHJldHVybiBheGVzW251bWJlciAtIDFdOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gZmlsbEluU2VyaWVzT3B0aW9ucygpIHsKKworICAgICAgICAgICAgdmFyIG5lZWRlZENv
bG9ycyA9IHNlcmllcy5sZW5ndGgsIG1heEluZGV4ID0gLTEsIGk7CisKKyAgICAgICAgICAgIC8v
IFN1YnRyYWN0IHRoZSBudW1iZXIgb2Ygc2VyaWVzIHRoYXQgYWxyZWFkeSBoYXZlIGZpeGVkIGNv
bG9ycyBvcgorICAgICAgICAgICAgLy8gY29sb3IgaW5kZXhlcyBmcm9tIHRoZSBudW1iZXIgdGhh
dCB3ZSBzdGlsbCBuZWVkIHRvIGdlbmVyYXRlLgorCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHNjID0gc2VyaWVz
W2ldLmNvbG9yOworICAgICAgICAgICAgICAgIGlmIChzYyAhPSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5lZWRlZENvbG9ycy0tOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9m
IHNjID09ICJudW1iZXIiICYmIHNjID4gbWF4SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1heEluZGV4ID0gc2M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGFueSBvZiB0aGUgc2VyaWVz
IGhhdmUgZml4ZWQgY29sb3IgaW5kZXhlcywgdGhlbiB3ZSBuZWVkIHRvCisgICAgICAgICAgICAv
LyBnZW5lcmF0ZSBhdCBsZWFzdCBhcyBtYW55IGNvbG9ycyBhcyB0aGUgaGlnaGVzdCBpbmRleC4K
KworICAgICAgICAgICAgaWYgKG5lZWRlZENvbG9ycyA8PSBtYXhJbmRleCkgeworICAgICAgICAg
ICAgICAgIG5lZWRlZENvbG9ycyA9IG1heEluZGV4ICsgMTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gR2VuZXJhdGUgYWxsIHRoZSBjb2xvcnMsIHVzaW5nIGZpcnN0IHRoZSBvcHRp
b24gY29sb3JzIGFuZCB0aGVuCisgICAgICAgICAgICAvLyB2YXJpYXRpb25zIG9uIHRob3NlIGNv
bG9ycyBvbmNlIHRoZXkncmUgZXhoYXVzdGVkLgorCisgICAgICAgICAgICB2YXIgYywgY29sb3Jz
ID0gW10sIGNvbG9yUG9vbCA9IG9wdGlvbnMuY29sb3JzLAorICAgICAgICAgICAgICAgIGNvbG9y
UG9vbFNpemUgPSBjb2xvclBvb2wubGVuZ3RoLCB2YXJpYXRpb24gPSAwOworCisgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbmVlZGVkQ29sb3JzOyBpKyspIHsKKworICAgICAgICAgICAgICAg
IGMgPSAkLmNvbG9yLnBhcnNlKGNvbG9yUG9vbFtpICUgY29sb3JQb29sU2l6ZV0gfHwgIiM2NjYi
KTsKKworICAgICAgICAgICAgICAgIC8vIEVhY2ggdGltZSB3ZSBleGhhdXN0IHRoZSBjb2xvcnMg
aW4gdGhlIHBvb2wgd2UgYWRqdXN0CisgICAgICAgICAgICAgICAgLy8gYSBzY2FsaW5nIGZhY3Rv
ciB1c2VkIHRvIHByb2R1Y2UgbW9yZSB2YXJpYXRpb25zIG9uCisgICAgICAgICAgICAgICAgLy8g
dGhvc2UgY29sb3JzLiBUaGUgZmFjdG9yIGFsdGVybmF0ZXMgbmVnYXRpdmUvcG9zaXRpdmUKKyAg
ICAgICAgICAgICAgICAvLyB0byBwcm9kdWNlIGxpZ2h0ZXIvZGFya2VyIGNvbG9ycy4KKworICAg
ICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB2YXJpYXRpb24gYWZ0ZXIgZXZlcnkgZmV3IGN5Y2xl
cywgb3IgZWxzZQorICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgZW5kIHVwIHByb2R1Y2luZyBv
bmx5IHdoaXRlIG9yIGJsYWNrIGNvbG9ycy4KKworICAgICAgICAgICAgICAgIGlmIChpICUgY29s
b3JQb29sU2l6ZSA9PSAwICYmIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlv
biA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uIDwgMC41KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uID0gLXZhcmlhdGlvbiAtIDAu
MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB2YXJpYXRpb24gPSAwOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgdmFyaWF0aW9uID0gLXZhcmlhdGlvbjsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBjb2xvcnNbaV0gPSBjLnNjYWxlKCdyZ2InLCAxICsg
dmFyaWF0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRmluYWxpemUgdGhl
IHNlcmllcyBvcHRpb25zLCBmaWxsaW5nIGluIHRoZWlyIGNvbG9ycworCisgICAgICAgICAgICB2
YXIgY29sb3JpID0gMCwgczsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOworCisgICAgICAgICAg
ICAgICAgLy8gYXNzaWduIGNvbG9ycworICAgICAgICAgICAgICAgIGlmIChzLmNvbG9yID09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcy5jb2xvciA9IGNvbG9yc1tjb2xvcmldLnRvU3Ry
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgICsrY29sb3JpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygcy5jb2xvciA9PSAibnVtYmVyIikKKyAg
ICAgICAgICAgICAgICAgICAgcy5jb2xvciA9IGNvbG9yc1tzLmNvbG9yXS50b1N0cmluZygpOwor
CisgICAgICAgICAgICAgICAgLy8gdHVybiBvbiBsaW5lcyBhdXRvbWF0aWNhbGx5IGluIGNhc2Ug
bm90aGluZyBpcyBzZXQKKyAgICAgICAgICAgICAgICBpZiAocy5saW5lcy5zaG93ID09IG51bGwp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHYsIHNob3cgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHYgaW4gcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW3ZdICYm
IHNbdl0uc2hvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3cpCisgICAgICAgICAgICAgICAgICAg
ICAgICBzLmxpbmVzLnNob3cgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIElmIG5vdGhpbmcgd2FzIHByb3ZpZGVkIGZvciBsaW5lcy56ZXJvLCBkZWZhdWx0
IGl0IHRvIG1hdGNoCisgICAgICAgICAgICAgICAgLy8gbGluZXMuZmlsbCwgc2luY2UgYXJlYXMg
YnkgZGVmYXVsdCBzaG91bGQgZXh0ZW5kIHRvIHplcm8uCisKKyAgICAgICAgICAgICAgICBpZiAo
cy5saW5lcy56ZXJvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcy5saW5lcy56ZXJv
ID0gISFzLmxpbmVzLmZpbGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gc2V0dXAgYXhlcworICAgICAgICAgICAgICAgIHMueGF4aXMgPSBnZXRPckNyZWF0ZUF4aXMo
eGF4ZXMsIGF4aXNOdW1iZXIocywgIngiKSk7CisgICAgICAgICAgICAgICAgcy55YXhpcyA9IGdl
dE9yQ3JlYXRlQXhpcyh5YXhlcywgYXhpc051bWJlcihzLCAieSIpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEYXRhKCkgeworICAgICAgICAg
ICAgdmFyIHRvcFNlbnRyeSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwKKyAgICAgICAgICAg
ICAgICBib3R0b21TZW50cnkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksCisgICAgICAgICAg
ICAgICAgZmFrZUluZmluaXR5ID0gTnVtYmVyLk1BWF9WQUxVRSwKKyAgICAgICAgICAgICAgICBp
LCBqLCBrLCBtLCBsZW5ndGgsCisgICAgICAgICAgICAgICAgcywgcG9pbnRzLCBwcywgeCwgeSwg
YXhpcywgdmFsLCBmLCBwLAorICAgICAgICAgICAgICAgIGRhdGEsIGZvcm1hdDsKKworICAgICAg
ICAgICAgZnVuY3Rpb24gdXBkYXRlQXhpcyhheGlzLCBtaW4sIG1heCkgeworICAgICAgICAgICAg
ICAgIGlmIChtaW4gPCBheGlzLmRhdGFtaW4gJiYgbWluICE9IC1mYWtlSW5maW5pdHkpCisgICAg
ICAgICAgICAgICAgICAgIGF4aXMuZGF0YW1pbiA9IG1pbjsKKyAgICAgICAgICAgICAgICBpZiAo
bWF4ID4gYXhpcy5kYXRhbWF4ICYmIG1heCAhPSBmYWtlSW5maW5pdHkpCisgICAgICAgICAgICAg
ICAgICAgIGF4aXMuZGF0YW1heCA9IG1heDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
JC5lYWNoKGFsbEF4ZXMoKSwgZnVuY3Rpb24gKF8sIGF4aXMpIHsKKyAgICAgICAgICAgICAgICAv
LyBpbml0IGF4aXMKKyAgICAgICAgICAgICAgICBheGlzLmRhdGFtaW4gPSB0b3BTZW50cnk7Cisg
ICAgICAgICAgICAgICAgYXhpcy5kYXRhbWF4ID0gYm90dG9tU2VudHJ5OworICAgICAgICAgICAg
ICAgIGF4aXMudXNlZCA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzID0g
c2VyaWVzW2ldOworICAgICAgICAgICAgICAgIHMuZGF0YXBvaW50cyA9IHsgcG9pbnRzOiBbXSB9
OworCisgICAgICAgICAgICAgICAgZXhlY3V0ZUhvb2tzKGhvb2tzLnByb2Nlc3NSYXdEYXRhLCBb
IHMsIHMuZGF0YSwgcy5kYXRhcG9pbnRzIF0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBmaXJzdCBwYXNzOiBjbGVhbiBhbmQgY29weSBkYXRhCisgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgcyA9IHNlcmll
c1tpXTsKKworICAgICAgICAgICAgICAgIGRhdGEgPSBzLmRhdGE7CisgICAgICAgICAgICAgICAg
Zm9ybWF0ID0gcy5kYXRhcG9pbnRzLmZvcm1hdDsKKworICAgICAgICAgICAgICAgIGlmICghZm9y
bWF0KSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IFtdOworICAgICAgICAgICAgICAg
ICAgICAvLyBmaW5kIG91dCBob3cgdG8gY29weQorICAgICAgICAgICAgICAgICAgICBmb3JtYXQu
cHVzaCh7IHg6IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJl
ZDogdHJ1ZSB9KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocy5iYXJzLnNob3cgfHwgKHMu
bGluZXMuc2hvdyAmJiBzLmxpbmVzLmZpbGwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgYXV0b3NjYWxlID0gISEoKHMuYmFycy5zaG93ICYmIHMuYmFycy56ZXJvKSB8fCAocy5saW5l
cy5zaG93ICYmIHMubGluZXMuemVybykpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LnB1c2goeyB5OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiBmYWxzZSwgZGVmYXVsdFZh
bHVlOiAwLCBhdXRvc2NhbGU6IGF1dG9zY2FsZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzLmJhcnMuaG9yaXpvbnRhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBmb3JtYXRbZm9ybWF0Lmxlbmd0aCAtIDFdLnk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0W2Zvcm1hdC5sZW5ndGggLSAxXS54ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHMuZGF0YXBvaW50cy5mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKHMuZGF0YXBvaW50cy5wb2ludHNpemUgIT0gbnVsbCkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7IC8vIGFscmVhZHkgZmlsbGVkIGluCisKKyAgICAgICAgICAg
ICAgICBzLmRhdGFwb2ludHMucG9pbnRzaXplID0gZm9ybWF0Lmxlbmd0aDsKKworICAgICAgICAg
ICAgICAgIHBzID0gcy5kYXRhcG9pbnRzLnBvaW50c2l6ZTsKKyAgICAgICAgICAgICAgICBwb2lu
dHMgPSBzLmRhdGFwb2ludHMucG9pbnRzOworCisgICAgICAgICAgICAgICAgdmFyIGluc2VydFN0
ZXBzID0gcy5saW5lcy5zaG93ICYmIHMubGluZXMuc3RlcHM7CisgICAgICAgICAgICAgICAgcy54
YXhpcy51c2VkID0gcy55YXhpcy51c2VkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAo
aiA9IGsgPSAwOyBqIDwgZGF0YS5sZW5ndGg7ICsraiwgayArPSBwcykgeworICAgICAgICAgICAg
ICAgICAgICBwID0gZGF0YVtqXTsKKworICAgICAgICAgICAgICAgICAgICB2YXIgbnVsbGlmeSA9
IHAgPT0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFudWxsaWZ5KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKG0gPSAwOyBtIDwgcHM7ICsrbSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbCA9IHBbbV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZiA9IGZvcm1hdFttXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLm51bWJlciAmJiB2YWwgIT0gbnVs
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gK3ZhbDsgLy8g
Y29udmVydCB0byBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpc05hTih2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2
YWwgPT0gSW5maW5pdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsID0gZmFrZUluZmluaXR5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodmFsID09IC1JbmZpbml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgPSAtZmFrZUluZmluaXR5OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5yZXF1aXJl
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsaWZ5ID0gdHJ1
ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuZGVmYXVsdFZh
bHVlICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ID0gZi5kZWZhdWx0VmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb2ludHNbayArIG1dID0gdmFsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG51bGxpZnkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKyttKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gcG9pbnRzW2sgKyBtXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZiA9IGZvcm1hdFttXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZXh0cmFjdCBtaW4vbWF4IGluZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGYueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF4aXMo
cy54YXhpcywgdmFsLCB2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Zi55KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXhpcyhzLnlh
eGlzLCB2YWwsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvaW50c1trICsgbV0gPSBudWxsOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBsaXR0bGUgYml0IG9mIGxpbmUgc3Bl
Y2lmaWMgc3R1ZmYgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVyaGFwcyBzaG91
bGRuJ3QgYmUgaGVyZSwgYnV0IGxhY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJl
dHRlciBtZWFucy4uLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydFN0ZXBzICYm
IGsgPiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcG9pbnRzW2sgLSBwc10gIT0g
bnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBvaW50c1trIC0gcHNdICE9IHBv
aW50c1trXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBvaW50c1trIC0gcHMgKyAx
XSAhPSBwb2ludHNbayArIDFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29w
eSB0aGUgcG9pbnQgdG8gbWFrZSByb29tIGZvciBhIG1pZGRsZSBwb2ludAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKyttKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludHNbayArIHBzICsgbV0gPSBwb2ludHNbayArIG1dOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWlkZGxlIHBvaW50IGhhcyBzYW1lIHkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbayArIDFdID0gcG9pbnRzW2sgLSBwcyAr
IDFdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UndmUgYWRkZWQgYSBwb2lu
dCwgYmV0dGVyIHJlZmxlY3QgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0g
cHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdpdmUgdGhl
IGhvb2tzIGEgY2hhbmNlIHRvIHJ1bgorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlcmll
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHMgPSBzZXJpZXNbaV07CisKKyAgICAg
ICAgICAgICAgICBleGVjdXRlSG9va3MoaG9va3MucHJvY2Vzc0RhdGFwb2ludHMsIFsgcywgcy5k
YXRhcG9pbnRzXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNlY29uZCBwYXNz
OiBmaW5kIGRhdGFtYXgvZGF0YW1pbiBmb3IgYXV0by1zY2FsaW5nCisgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgcyA9IHNl
cmllc1tpXTsKKyAgICAgICAgICAgICAgICBwb2ludHMgPSBzLmRhdGFwb2ludHMucG9pbnRzLAor
ICAgICAgICAgICAgICAgIHBzID0gcy5kYXRhcG9pbnRzLnBvaW50c2l6ZTsKKyAgICAgICAgICAg
ICAgICBmb3JtYXQgPSBzLmRhdGFwb2ludHMuZm9ybWF0OworCisgICAgICAgICAgICAgICAgdmFy
IHhtaW4gPSB0b3BTZW50cnksIHltaW4gPSB0b3BTZW50cnksCisgICAgICAgICAgICAgICAgICAg
IHhtYXggPSBib3R0b21TZW50cnksIHltYXggPSBib3R0b21TZW50cnk7CisKKyAgICAgICAgICAg
ICAgICBmb3IgKGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSBwcykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAocG9pbnRzW2pdID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSAwOyBtIDwgcHM7ICsr
bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcG9pbnRzW2ogKyBtXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGYgPSBmb3JtYXRbbV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWYgfHwgZi5hdXRvc2NhbGUgPT09IGZhbHNlIHx8IHZhbCA9PSBmYWtlSW5maW5pdHkg
fHwgdmFsID09IC1mYWtlSW5maW5pdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLngpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsIDwgeG1pbikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeG1pbiA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFs
ID4geG1heCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heCA9IHZhbDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLnkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsIDwgeW1pbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeW1pbiA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsID4geW1heCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eW1heCA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzLmJhcnMuc2hv
dykgeworICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZ290IHJvb20gZm9yIHRo
ZSBiYXIgb24gdGhlIGRhbmNpbmcgZmxvb3IKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRh
OworCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocy5iYXJzLmFsaWduKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJsZWZ0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWx0YSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJyaWdodCI6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsdGEgPSAtcy5iYXJzLmJhcldpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2VudGVyIjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IC1zLmJhcnMuYmFyV2lkdGggLyAyOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFs
aWQgYmFyIGFsaWdubWVudDogIiArIHMuYmFycy5hbGlnbik7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocy5iYXJzLmhvcml6b250YWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHltaW4gKz0gZGVsdGE7CisgICAgICAgICAgICAgICAgICAgICAg
ICB5bWF4ICs9IGRlbHRhICsgcy5iYXJzLmJhcldpZHRoOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgeG1p
biArPSBkZWx0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtYXggKz0gZGVsdGEgKyBzLmJh
cnMuYmFyV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICB1cGRhdGVBeGlzKHMueGF4aXMsIHhtaW4sIHhtYXgpOworICAgICAg
ICAgICAgICAgIHVwZGF0ZUF4aXMocy55YXhpcywgeW1pbiwgeW1heCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICQuZWFjaChhbGxBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGF4aXMuZGF0YW1pbiA9PSB0b3BTZW50cnkpCisgICAgICAgICAg
ICAgICAgICAgIGF4aXMuZGF0YW1pbiA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKGF4aXMu
ZGF0YW1heCA9PSBib3R0b21TZW50cnkpCisgICAgICAgICAgICAgICAgICAgIGF4aXMuZGF0YW1h
eCA9IG51bGw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZGlzcGxheSdzIHJhdGlv
IGJldHdlZW4gcGh5c2ljYWwgYW5kIGRldmljZS1pbmRlcGVuZGVudCBwaXhlbHMuCisgICAgICAg
IC8vCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHdpZHRoIHRoYXQg
dGhlIGJyb3dzZXIgYWR2ZXJ0aXNlcyBhbmQgdGhlIG51bWJlcgorICAgICAgICAvLyBvZiBwaXhl
bHMgYWN0dWFsbHkgYXZhaWxhYmxlIGluIHRoYXQgc3BhY2UuICBUaGUgaVBob25lIDQsIGZvciBl
eGFtcGxlLCBoYXMgYQorICAgICAgICAvLyBkZXZpY2UtaW5kZXBlbmRlbnQgd2lkdGggb2YgMzIw
cHgsIGJ1dCBpdHMgc2NyZWVuIGlzIGFjdHVhbGx5IDY0MHB4IHdpZGUuICBJdAorICAgICAgICAv
LyB0aGVyZWZvcmUgaGFzIGEgcGl4ZWwgcmF0aW8gb2YgMiwgd2hpbGUgbW9zdCBub3JtYWwgZGV2
aWNlcyBoYXZlIGEgcmF0aW8gb2YgMS4KKworICAgICAgICBmdW5jdGlvbiBnZXRQaXhlbFJhdGlv
KGNjdHgpIHsKKyAgICAgICAgICAgIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gd2luZG93LmRldmlj
ZVBpeGVsUmF0aW8gfHwgMTsKKyAgICAgICAgICAgIHZhciBiYWNraW5nU3RvcmVSYXRpbyA9Cisg
ICAgICAgICAgICAgICAgY2N0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8CisgICAg
ICAgICAgICAgICAgY2N0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8CisgICAgICAgICAg
ICAgICAgY2N0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwKKyAgICAgICAgICAgICAgICBj
Y3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8CisgICAgICAgICAgICAgICAgY2N0eC5iYWNr
aW5nU3RvcmVQaXhlbFJhdGlvIHx8IDE7CisKKyAgICAgICAgICAgIHJldHVybiBkZXZpY2VQaXhl
bFJhdGlvIC8gYmFja2luZ1N0b3JlUmF0aW87CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBtYWtlQ2FudmFzKGNscykgeworCisgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2NhbnZhcycpOworICAgICAgICAgICAgYy5jbGFzc05hbWUgPSBjbHM7CisKKyAg
ICAgICAgICAgICQoYykuY3NzKHsgZGlyZWN0aW9uOiAibHRyIiwgcG9zaXRpb246ICJhYnNvbHV0
ZSIsIGxlZnQ6IDAsIHRvcDogMCB9KQorICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhwbGFjZWhv
bGRlcik7CisKKyAgICAgICAgICAgIC8vIElmIEhUTUw1IENhbnZhcyBpc24ndCBhdmFpbGFibGUs
IGZhbGwgYmFjayB0byBFeGNhbnZhcworCisgICAgICAgICAgICBpZiAoIWMuZ2V0Q29udGV4dCkg
eworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGMgPSB3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50
KGMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQ2FudmFzIGlzIG5vdCBhdmFpbGFibGUuIElmIHlvdSdyZSB1c2luZyBJRSB3
aXRoIGEgZmFsbC1iYWNrIHN1Y2ggYXMgRXhjYW52YXMsIHRoZW4gdGhlcmUncyBlaXRoZXIgYSBt
aXN0YWtlIGluIHlvdXIgY29uZGl0aW9uYWwgaW5jbHVkZSwgb3IgdGhlIHBhZ2UgaGFzIG5vIERP
Q1RZUEUgYW5kIGlzIHJlbmRlcmluZyBpbiBRdWlya3MgTW9kZS4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjY3R4ID0gYy5nZXRDb250ZXh0
KCIyZCIpOworCisgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgY2FudmFzIGRlbnNpdHkgYmFz
ZWQgb24gdGhlIGRpc3BsYXkncyBwaXhlbCByYXRpbzsgYmFzaWNhbGx5CisgICAgICAgICAgICAv
LyBnaXZpbmcgdGhlIGNhbnZhcyBtb3JlIHBpeGVscyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIHNp
emUgb2YgaXRzIGVsZW1lbnQsCisgICAgICAgICAgICAvLyB0byB0YWtlIGFkdmFudGFnZSBvZiB0
aGUgZmFjdCB0aGF0IHJldGluYSBkaXNwbGF5cyBoYXZlIHRoYXQgbWFueSBtb3JlCisgICAgICAg
ICAgICAvLyBwaXhlbHMgdGhhbiB0aGV5IGFjdHVhbGx5IHVzZSBmb3IgcGFnZSAmIGVsZW1lbnQg
d2lkdGhzLgorCisgICAgICAgICAgICB2YXIgcGl4ZWxSYXRpbyA9IGdldFBpeGVsUmF0aW8oY2N0
eCk7CisKKyAgICAgICAgICAgIGMud2lkdGggPSBjYW52YXNXaWR0aCAqIHBpeGVsUmF0aW87Cisg
ICAgICAgICAgICBjLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHBpeGVsUmF0aW87CisgICAgICAg
ICAgICBjLnN0eWxlLndpZHRoID0gY2FudmFzV2lkdGggKyAicHgiOworICAgICAgICAgICAgYy5z
dHlsZS5oZWlnaHQgPSBjYW52YXNIZWlnaHQgKyAicHgiOworCisgICAgICAgICAgICAvLyBTYXZl
IHRoZSBjb250ZXh0IHNvIHdlIGNhbiByZXNldCBpbiBjYXNlIHdlIGdldCByZXBsb3R0ZWQKKwor
ICAgICAgICAgICAgY2N0eC5zYXZlKCk7CisKKyAgICAgICAgICAgIC8vIFNjYWxlIHRoZSBjb29y
ZGluYXRlIHNwYWNlIHRvIG1hdGNoIHRoZSBkaXNwbGF5IGRlbnNpdHk7IHNvIGV2ZW4gdGhvdWdo
IHdlCisgICAgICAgICAgICAvLyBtYXkgaGF2ZSB0d2ljZSBhcyBtYW55IHBpeGVscywgd2Ugc3Rp
bGwgd2FudCBsaW5lcyBhbmQgb3RoZXIgZHJhd2luZyB0bworICAgICAgICAgICAgLy8gYXBwZWFy
IGF0IHRoZSBzYW1lIHNpemU7IHRoZSBleHRyYSBwaXhlbHMgd2lsbCBqdXN0IG1ha2UgdGhlbSBj
cmlzcGVyLgorCisgICAgICAgICAgICBjY3R4LnNjYWxlKHBpeGVsUmF0aW8sIHBpeGVsUmF0aW8p
OworCisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IGdldENhbnZhc0RpbWVuc2lvbnMoKSB7CisgICAgICAgICAgICBjYW52YXNXaWR0aCA9IHBsYWNl
aG9sZGVyLndpZHRoKCk7CisgICAgICAgICAgICBjYW52YXNIZWlnaHQgPSBwbGFjZWhvbGRlci5o
ZWlnaHQoKTsKKworICAgICAgICAgICAgaWYgKGNhbnZhc1dpZHRoIDw9IDAgfHwgY2FudmFzSGVp
Z2h0IDw9IDApCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpbWVu
c2lvbnMgZm9yIHBsb3QsIHdpZHRoID0gIiArIGNhbnZhc1dpZHRoICsgIiwgaGVpZ2h0ID0gIiAr
IGNhbnZhc0hlaWdodCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZXNpemVDYW52
YXMoYykgeworCisgICAgICAgICAgICB2YXIgY2N0eCA9IGMuZ2V0Q29udGV4dCgiMmQiKTsKKwor
ICAgICAgICAgICAgLy8gSGFuZGxlIHBpeGVsIHJhdGlvcyA+IDEgZm9yIHJldGluYSBkaXNwbGF5
cywgYXMgZXhwbGFpbmVkIGluIG1ha2VDYW52YXMKKworICAgICAgICAgICAgdmFyIHBpeGVsUmF0
aW8gPSBnZXRQaXhlbFJhdGlvKGNjdHgpOworCisgICAgICAgICAgICAvLyBSZXNpemluZyBzaG91
bGQgcmVzZXQgdGhlIHN0YXRlIChleGNhbnZhcyBzZWVtcyB0byBiZSBidWdneSB0aG91Z2gpCisK
KyAgICAgICAgICAgIGlmIChjLnN0eWxlLndpZHRoICE9IGNhbnZhc1dpZHRoKSB7CisgICAgICAg
ICAgICAgICAgYy53aWR0aCA9IGNhbnZhc1dpZHRoICogcGl4ZWxSYXRpbzsKKyAgICAgICAgICAg
ICAgICBjLnN0eWxlLndpZHRoID0gY2FudmFzV2lkdGggKyAicHgiOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoYy5zdHlsZS5oZWlnaHQgIT0gY2FudmFzSGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgYy5oZWlnaHQgPSBjYW52YXNIZWlnaHQgKiBwaXhlbFJhdGlvOworICAgICAg
ICAgICAgICAgIGMuc3R5bGUuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0ICsgInB4IjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gc28gdHJ5IHRvIGdldCBiYWNrIHRvIHRoZSBpbml0aWFs
IHN0YXRlIChldmVuIGlmIGl0J3MKKyAgICAgICAgICAgIC8vIGdvbmUgbm93LCB0aGlzIHNob3Vs
ZCBiZSBzYWZlIGFjY29yZGluZyB0byB0aGUgc3BlYykKKyAgICAgICAgICAgIGNjdHgucmVzdG9y
ZSgpOworCisgICAgICAgICAgICAvLyBhbmQgc2F2ZSBhZ2FpbgorICAgICAgICAgICAgY2N0eC5z
YXZlKCk7CisKKyAgICAgICAgICAgIC8vIEFwcGx5IHNjYWxpbmcgZm9yIHJldGluYSBkaXNwbGF5
cywgYXMgZXhwbGFpbmVkIGluIG1ha2VDYW52YXMKKworICAgICAgICAgICAgY2N0eC5zY2FsZShw
aXhlbFJhdGlvLCBwaXhlbFJhdGlvKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNl
dHVwQ2FudmFzZXMoKSB7CisgICAgICAgICAgICB2YXIgcmV1c2VkLAorICAgICAgICAgICAgICAg
IGV4aXN0aW5nQ2FudmFzID0gcGxhY2Vob2xkZXIuY2hpbGRyZW4oImNhbnZhcy5mbG90LWJhc2Ui
KSwKKyAgICAgICAgICAgICAgICBleGlzdGluZ092ZXJsYXkgPSBwbGFjZWhvbGRlci5jaGlsZHJl
bigiY2FudmFzLmZsb3Qtb3ZlcmxheSIpOworCisgICAgICAgICAgICBpZiAoZXhpc3RpbmdDYW52
YXMubGVuZ3RoID09IDAgfHwgZXhpc3RpbmdPdmVybGF5ID09IDApIHsKKyAgICAgICAgICAgICAg
ICAvLyBpbml0IGV2ZXJ5dGhpbmcKKworICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLmh0bWwo
IiIpOyAvLyBtYWtlIHN1cmUgcGxhY2Vob2xkZXIgaXMgY2xlYXIKKworICAgICAgICAgICAgICAg
IHBsYWNlaG9sZGVyLmNzcyh7IHBhZGRpbmc6IDAgfSk7IC8vIHBhZGRpbmcgbWVzc2VzIHVwIHRo
ZSBwb3NpdGlvbmluZworCisgICAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmNzcygicG9z
aXRpb24iKSA9PSAnc3RhdGljJykKKyAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuY3Nz
KCJwb3NpdGlvbiIsICJyZWxhdGl2ZSIpOyAvLyBmb3IgcG9zaXRpb25pbmcgbGFiZWxzIGFuZCBv
dmVybGF5CisKKyAgICAgICAgICAgICAgICBnZXRDYW52YXNEaW1lbnNpb25zKCk7CisKKyAgICAg
ICAgICAgICAgICBjYW52YXMgPSBtYWtlQ2FudmFzKCJmbG90LWJhc2UiKTsKKyAgICAgICAgICAg
ICAgICBvdmVybGF5ID0gbWFrZUNhbnZhcygiZmxvdC1vdmVybGF5Iik7IC8vIG92ZXJsYXkgY2Fu
dmFzIGZvciBpbnRlcmFjdGl2ZSBmZWF0dXJlcworCisgICAgICAgICAgICAgICAgcmV1c2VkID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyByZXVzZSBleGlzdGluZyBlbGVtZW50cworCisgICAgICAgICAgICAgICAgY2FudmFzID0g
ZXhpc3RpbmdDYW52YXMuZ2V0KDApOworICAgICAgICAgICAgICAgIG92ZXJsYXkgPSBleGlzdGlu
Z092ZXJsYXkuZ2V0KDApOworCisgICAgICAgICAgICAgICAgcmV1c2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7Cisg
ICAgICAgICAgICBvY3R4ID0gb3ZlcmxheS5nZXRDb250ZXh0KCIyZCIpOworCisgICAgICAgICAg
ICAvLyBkZWZpbmUgd2hpY2ggZWxlbWVudCB3ZSdyZSBsaXN0ZW5pbmcgZm9yIGV2ZW50cyBvbgor
ICAgICAgICAgICAgZXZlbnRIb2xkZXIgPSAkKG92ZXJsYXkpOworCisgICAgICAgICAgICBpZiAo
cmV1c2VkKSB7CisgICAgICAgICAgICAgICAgLy8gcnVuIHNodXRkb3duIGluIHRoZSBvbGQgcGxv
dCBvYmplY3QKKyAgICAgICAgICAgICAgICBwbGFjZWhvbGRlci5kYXRhKCJwbG90Iikuc2h1dGRv
d24oKTsKKworICAgICAgICAgICAgICAgIC8vIHJlc2V0IHJldXNlZCBjYW52YXNlcworICAgICAg
ICAgICAgICAgIHBsb3QucmVzaXplKCk7CisKKyAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUg
b3ZlcmxheSBwaXhlbHMgYXJlIGNsZWFyZWQgKGNhbnZhcyBpcyBjbGVhcmVkIHdoZW4gd2UgcmVk
cmF3KQorICAgICAgICAgICAgICAgIG9jdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhc1dpZHRoLCBj
YW52YXNIZWlnaHQpOworCisgICAgICAgICAgICAgICAgLy8gdGhlbiB3aGFjayBhbnkgcmVtYWlu
aW5nIG9idmlvdXMgZ2FyYmFnZSBsZWZ0CisgICAgICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5i
aW5kKCk7CisgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuY2hpbGRyZW4oKS5ub3QoW2NhbnZh
cywgb3ZlcmxheV0pLnJlbW92ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBz
YXZlIGluIGNhc2Ugd2UgZ2V0IHJlcGxvdHRlZAorICAgICAgICAgICAgcGxhY2Vob2xkZXIuZGF0
YSgicGxvdCIsIHBsb3QpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gYmluZEV2ZW50
cygpIHsKKyAgICAgICAgICAgIC8vIGJpbmQgZXZlbnRzCisgICAgICAgICAgICBpZiAob3B0aW9u
cy5ncmlkLmhvdmVyYWJsZSkgeworICAgICAgICAgICAgICAgIGV2ZW50SG9sZGVyLm1vdXNlbW92
ZShvbk1vdXNlTW92ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBVc2UgYmluZCwgcmF0aGVyIHRo
YW4gLm1vdXNlbGVhdmUsIGJlY2F1c2Ugd2Ugb2ZmaWNpYWxseQorICAgICAgICAgICAgICAgIC8v
IHN0aWxsIHN1cHBvcnQgalF1ZXJ5IDEuMi42LCB3aGljaCBkb2Vzbid0IGRlZmluZSBhIHNob3J0
Y3V0CisgICAgICAgICAgICAgICAgLy8gZm9yIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZS4gIFRo
aXMgd2FzIGEgYnVnL292ZXJzaWdodCB0aGF0CisgICAgICAgICAgICAgICAgLy8gd2FzIGZpeGVk
IHNvbWV3aGVyZSBhcm91bmQgMS4zLnguICBXZSBjYW4gcmV0dXJuIHRvIHVzaW5nCisgICAgICAg
ICAgICAgICAgLy8gLm1vdXNlbGVhdmUgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIDEuMi42Lgor
CisgICAgICAgICAgICAgICAgZXZlbnRIb2xkZXIuYmluZCgibW91c2VsZWF2ZSIsIG9uTW91c2VM
ZWF2ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQuY2xp
Y2thYmxlKQorICAgICAgICAgICAgICAgIGV2ZW50SG9sZGVyLmNsaWNrKG9uQ2xpY2spOworCisg
ICAgICAgICAgICBleGVjdXRlSG9va3MoaG9va3MuYmluZEV2ZW50cywgW2V2ZW50SG9sZGVyXSk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzaHV0ZG93bigpIHsKKyAgICAgICAgICAg
IGlmIChyZWRyYXdUaW1lb3V0KQorICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZWRyYXdU
aW1lb3V0KTsKKworICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZW1vdmUiLCBv
bk1vdXNlTW92ZSk7CisgICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoIm1vdXNlbGVhdmUi
LCBvbk1vdXNlTGVhdmUpOworICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJjbGljayIs
IG9uQ2xpY2spOworCisgICAgICAgICAgICBleGVjdXRlSG9va3MoaG9va3Muc2h1dGRvd24sIFtl
dmVudEhvbGRlcl0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2V0VHJhbnNmb3Jt
YXRpb25IZWxwZXJzKGF4aXMpIHsKKyAgICAgICAgICAgIC8vIHNldCBoZWxwZXIgZnVuY3Rpb25z
IG9uIHRoZSBheGlzLCBhc3N1bWVzIHBsb3QgYXJlYQorICAgICAgICAgICAgLy8gaGFzIGJlZW4g
Y29tcHV0ZWQgYWxyZWFkeQorCisgICAgICAgICAgICBmdW5jdGlvbiBpZGVudGl0eSh4KSB7IHJl
dHVybiB4OyB9CisKKyAgICAgICAgICAgIHZhciBzLCBtLCB0ID0gYXhpcy5vcHRpb25zLnRyYW5z
Zm9ybSB8fCBpZGVudGl0eSwKKyAgICAgICAgICAgICAgICBpdCA9IGF4aXMub3B0aW9ucy5pbnZl
cnNlVHJhbnNmb3JtOworCisgICAgICAgICAgICAvLyBwcmVjb21wdXRlIGhvdyBtdWNoIHRoZSBh
eGlzIGlzIHNjYWxpbmcgYSBwb2ludAorICAgICAgICAgICAgLy8gaW4gY2FudmFzIHNwYWNlCisg
ICAgICAgICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7CisgICAgICAgICAgICAgICAg
cyA9IGF4aXMuc2NhbGUgPSBwbG90V2lkdGggLyBNYXRoLmFicyh0KGF4aXMubWF4KSAtIHQoYXhp
cy5taW4pKTsKKyAgICAgICAgICAgICAgICBtID0gTWF0aC5taW4odChheGlzLm1heCksIHQoYXhp
cy5taW4pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHMgPSBheGlzLnNjYWxlID0gcGxvdEhlaWdodCAvIE1hdGguYWJzKHQoYXhpcy5tYXgpIC0g
dChheGlzLm1pbikpOworICAgICAgICAgICAgICAgIHMgPSAtczsKKyAgICAgICAgICAgICAgICBt
ID0gTWF0aC5tYXgodChheGlzLm1heCksIHQoYXhpcy5taW4pKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gZGF0YSBwb2ludCB0byBjYW52YXMgY29vcmRpbmF0ZQorICAgICAgICAg
ICAgaWYgKHQgPT0gaWRlbnRpdHkpIC8vIHNsaWdodCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAg
ICAgICBheGlzLnAyYyA9IGZ1bmN0aW9uIChwKSB7IHJldHVybiAocCAtIG0pICogczsgfTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBheGlzLnAyYyA9IGZ1bmN0aW9uIChwKSB7
IHJldHVybiAodChwKSAtIG0pICogczsgfTsKKyAgICAgICAgICAgIC8vIGNhbnZhcyBjb29yZGlu
YXRlIHRvIGRhdGEgcG9pbnQKKyAgICAgICAgICAgIGlmICghaXQpCisgICAgICAgICAgICAgICAg
YXhpcy5jMnAgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gbSArIGMgLyBzOyB9OworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGF4aXMuYzJwID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJu
IGl0KG0gKyBjIC8gcyk7IH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBtZWFzdXJl
VGlja0xhYmVscyhheGlzKSB7CisgICAgICAgICAgICB2YXIgb3B0cyA9IGF4aXMub3B0aW9ucywg
dGlja3MgPSBheGlzLnRpY2tzIHx8IFtdLAorICAgICAgICAgICAgICAgIGF4aXN3ID0gb3B0cy5s
YWJlbFdpZHRoIHx8IDAsIGF4aXNoID0gb3B0cy5sYWJlbEhlaWdodCB8fCAwLAorICAgICAgICAg
ICAgICAgIGYgPSBheGlzLmZvbnQ7CisKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7CisgICAgICAg
ICAgICBjdHguZm9udCA9IGYuc3R5bGUgKyAiICIgKyBmLnZhcmlhbnQgKyAiICIgKyBmLndlaWdo
dCArICIgIiArIGYuc2l6ZSArICJweCAnIiArIGYuZmFtaWx5ICsgIiciOworCisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRpY2tzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHQgPSB0aWNrc1tpXTsKKworICAgICAgICAgICAgICAgIHQubGluZXMgPSBbXTsKKyAg
ICAgICAgICAgICAgICB0LndpZHRoID0gdC5oZWlnaHQgPSAwOworCisgICAgICAgICAgICAgICAg
aWYgKCF0LmxhYmVsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIC8vIGFjY2VwdCB2YXJpb3VzIGtpbmRzIG9mIG5ld2xpbmVzLCBpbmNsdWRpbmcgSFRN
TCBvbmVzCisgICAgICAgICAgICAgICAgLy8gKHlvdSBjYW4gYWN0dWFsbHkgc3BsaXQgZGlyZWN0
bHkgb24gcmVnZXhwcyBpbiBKYXZhc2NyaXB0LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBJRSA8
IDkgaXMgdW5mb3J0dW5hdGVseSBicm9rZW4pCisgICAgICAgICAgICAgICAgdmFyIGxpbmVzID0g
KHQubGFiZWwgKyAiIikucmVwbGFjZSgvPGJyID9cLz8+fFxyXG58XHIvZywgIlxuIikuc3BsaXQo
IlxuIik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lcy5sZW5ndGg7
ICsraikgeworICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHsgdGV4dDogbGluZXNbal0g
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBjdHgubWVhc3VyZVRleHQobGluZS50ZXh0
KTsKKworICAgICAgICAgICAgICAgICAgICBsaW5lLndpZHRoID0gbS53aWR0aDsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbS5oZWlnaHQgbWlnaHQgbm90IGJlIGRlZmluZWQsIG5vdCBpbiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gc3RhbmRhcmQgeWV0CisgICAgICAgICAgICAgICAgICAg
IGxpbmUuaGVpZ2h0ID0gbS5oZWlnaHQgIT0gbnVsbCA/IG0uaGVpZ2h0IDogZi5zaXplOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhIGJpdCBvZiBtYXJnaW4gc2luY2UgZm9udCByZW5k
ZXJpbmcgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90IHBpeGVsIHBlcmZlY3QgYW5kIGN1
dCBvZmYgbGV0dGVycyBsb29rCisgICAgICAgICAgICAgICAgICAgIC8vIGJhZCwgdGhpcyBhbHNv
IGRvdWJsZXMgYXMgc3BhY2luZyBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgIC8vIGxpbmVz
CisgICAgICAgICAgICAgICAgICAgIGxpbmUuaGVpZ2h0ICs9IE1hdGgucm91bmQoZi5zaXplICog
MC4xNSk7CisKKyAgICAgICAgICAgICAgICAgICAgdC53aWR0aCA9IE1hdGgubWF4KGxpbmUud2lk
dGgsIHQud2lkdGgpOworICAgICAgICAgICAgICAgICAgICB0LmhlaWdodCArPSBsaW5lLmhlaWdo
dDsKKworICAgICAgICAgICAgICAgICAgICB0LmxpbmVzLnB1c2gobGluZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG9wdHMubGFiZWxXaWR0aCA9PSBudWxsKQor
ICAgICAgICAgICAgICAgICAgICBheGlzdyA9IE1hdGgubWF4KGF4aXN3LCB0LndpZHRoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3B0cy5sYWJlbEhlaWdodCA9PSBudWxsKQorICAgICAgICAgICAg
ICAgICAgICBheGlzaCA9IE1hdGgubWF4KGF4aXNoLCB0LmhlaWdodCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjdHgucmVzdG9yZSgpOworCisgICAgICAgICAgICBheGlzLmxhYmVsV2lk
dGggPSBNYXRoLmNlaWwoYXhpc3cpOworICAgICAgICAgICAgYXhpcy5sYWJlbEhlaWdodCA9IE1h
dGguY2VpbChheGlzaCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhbGxvY2F0ZUF4
aXNCb3hGaXJzdFBoYXNlKGF4aXMpIHsKKyAgICAgICAgICAgIC8vIGZpbmQgdGhlIGJvdW5kaW5n
IGJveCBvZiB0aGUgYXhpcyBieSBsb29raW5nIGF0IGxhYmVsCisgICAgICAgICAgICAvLyB3aWR0
aHMvaGVpZ2h0cyBhbmQgdGlja3MsIG1ha2Ugcm9vbSBieSBkaW1pbmlzaGluZyB0aGUKKyAgICAg
ICAgICAgIC8vIHBsb3RPZmZzZXQ7IHRoaXMgZmlyc3QgcGhhc2Ugb25seSBsb29rcyBhdCBvbmUK
KyAgICAgICAgICAgIC8vIGRpbWVuc2lvbiBwZXIgYXhpcywgdGhlIG90aGVyIGRpbWVuc2lvbiBk
ZXBlbmRzIG9uIHRoZQorICAgICAgICAgICAgLy8gb3RoZXIgYXhlcyBzbyB3aWxsIGhhdmUgdG8g
d2FpdAorCisgICAgICAgICAgICB2YXIgbHcgPSBheGlzLmxhYmVsV2lkdGgsCisgICAgICAgICAg
ICAgICAgbGggPSBheGlzLmxhYmVsSGVpZ2h0LAorICAgICAgICAgICAgICAgIHBvcyA9IGF4aXMu
b3B0aW9ucy5wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICB0aWNrTGVuZ3RoID0gYXhpcy5vcHRp
b25zLnRpY2tMZW5ndGgsCisgICAgICAgICAgICAgICAgYXhpc01hcmdpbiA9IG9wdGlvbnMuZ3Jp
ZC5heGlzTWFyZ2luLAorICAgICAgICAgICAgICAgIHBhZGRpbmcgPSBvcHRpb25zLmdyaWQubGFi
ZWxNYXJnaW4sCisgICAgICAgICAgICAgICAgYWxsID0gYXhpcy5kaXJlY3Rpb24gPT0gIngiID8g
eGF4ZXMgOiB5YXhlcywKKyAgICAgICAgICAgICAgICBpbmRleCwgaW5uZXJtb3N0OworCisgICAg
ICAgICAgICAvLyBkZXRlcm1pbmUgYXhpcyBtYXJnaW4KKyAgICAgICAgICAgIHZhciBzYW1lUG9z
aXRpb24gPSAkLmdyZXAoYWxsLCBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBhICYmIGEub3B0aW9ucy5wb3NpdGlvbiA9PSBwb3MgJiYgYS5yZXNlcnZlU3BhY2U7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICgkLmluQXJyYXkoYXhpcywgc2FtZVBvc2l0aW9u
KSA9PSBzYW1lUG9zaXRpb24ubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICBheGlzTWFyZ2lu
ID0gMDsgLy8gb3V0ZXJtb3N0CisKKyAgICAgICAgICAgIC8vIGRldGVybWluZSB0aWNrIGxlbmd0
aCAtIGlmIHdlJ3JlIGlubmVybW9zdCwgd2UgY2FuIHVzZSAiZnVsbCIKKyAgICAgICAgICAgIGlm
ICh0aWNrTGVuZ3RoID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2FtZURpcmVjdGlv
biA9ICQuZ3JlcChhbGwsIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBhICYmIGEucmVzZXJ2ZVNwYWNlOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgaW5uZXJtb3N0ID0gJC5pbkFycmF5KGF4aXMsIHNhbWVEaXJlY3Rpb24pID09IDA7Cisg
ICAgICAgICAgICAgICAgaWYgKGlubmVybW9zdCkKKyAgICAgICAgICAgICAgICAgICAgdGlja0xl
bmd0aCA9ICJmdWxsIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHRpY2tMZW5ndGggPSA1OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWlzTmFO
KCt0aWNrTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICBwYWRkaW5nICs9ICt0aWNrTGVuZ3RoOwor
CisgICAgICAgICAgICAvLyBjb21wdXRlIGJveAorICAgICAgICAgICAgaWYgKGF4aXMuZGlyZWN0
aW9uID09ICJ4IikgeworICAgICAgICAgICAgICAgIGxoICs9IHBhZGRpbmc7CisKKyAgICAgICAg
ICAgICAgICBpZiAocG9zID09ICJib3R0b20iKSB7CisgICAgICAgICAgICAgICAgICAgIHBsb3RP
ZmZzZXQuYm90dG9tICs9IGxoICsgYXhpc01hcmdpbjsKKyAgICAgICAgICAgICAgICAgICAgYXhp
cy5ib3ggPSB7IHRvcDogY2FudmFzSGVpZ2h0IC0gcGxvdE9mZnNldC5ib3R0b20sIGhlaWdodDog
bGggfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGF4aXMuYm94ID0geyB0b3A6IHBsb3RPZmZzZXQudG9wICsgYXhpc01hcmdp
biwgaGVpZ2h0OiBsaCB9OworICAgICAgICAgICAgICAgICAgICBwbG90T2Zmc2V0LnRvcCArPSBs
aCArIGF4aXNNYXJnaW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbHcgKz0gcGFkZGluZzsKKworICAgICAgICAg
ICAgICAgIGlmIChwb3MgPT0gImxlZnQiKSB7CisgICAgICAgICAgICAgICAgICAgIGF4aXMuYm94
ID0geyBsZWZ0OiBwbG90T2Zmc2V0LmxlZnQgKyBheGlzTWFyZ2luLCB3aWR0aDogbHcgfTsKKyAg
ICAgICAgICAgICAgICAgICAgcGxvdE9mZnNldC5sZWZ0ICs9IGx3ICsgYXhpc01hcmdpbjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHBsb3RPZmZzZXQucmlnaHQgKz0gbHcgKyBheGlzTWFyZ2luOworICAgICAgICAgICAgICAg
ICAgICBheGlzLmJveCA9IHsgbGVmdDogY2FudmFzV2lkdGggLSBwbG90T2Zmc2V0LnJpZ2h0LCB3
aWR0aDogbHcgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAvLyBzYXZlIGZvciBmdXR1cmUgcmVmZXJlbmNlCisgICAgICAgICAgICBheGlzLnBvc2l0
aW9uID0gcG9zOworICAgICAgICAgICAgYXhpcy50aWNrTGVuZ3RoID0gdGlja0xlbmd0aDsKKyAg
ICAgICAgICAgIGF4aXMuYm94LnBhZGRpbmcgPSBwYWRkaW5nOworICAgICAgICAgICAgYXhpcy5p
bm5lcm1vc3QgPSBpbm5lcm1vc3Q7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhbGxv
Y2F0ZUF4aXNCb3hTZWNvbmRQaGFzZShheGlzKSB7CisgICAgICAgICAgICAvLyBub3cgdGhhdCBh
bGwgYXhpcyBib3hlcyBoYXZlIGJlZW4gcGxhY2VkIGluIG9uZQorICAgICAgICAgICAgLy8gZGlt
ZW5zaW9uLCB3ZSBjYW4gc2V0IHRoZSByZW1haW5pbmcgZGltZW5zaW9uIGNvb3JkaW5hdGVzCisg
ICAgICAgICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7CisgICAgICAgICAgICAgICAg
YXhpcy5ib3gubGVmdCA9IHBsb3RPZmZzZXQubGVmdCAtIGF4aXMubGFiZWxXaWR0aCAvIDI7Cisg
ICAgICAgICAgICAgICAgYXhpcy5ib3gud2lkdGggPSBjYW52YXNXaWR0aCAtIHBsb3RPZmZzZXQu
bGVmdCAtIHBsb3RPZmZzZXQucmlnaHQgKyBheGlzLmxhYmVsV2lkdGg7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBheGlzLmJveC50b3AgPSBwbG90
T2Zmc2V0LnRvcCAtIGF4aXMubGFiZWxIZWlnaHQgLyAyOworICAgICAgICAgICAgICAgIGF4aXMu
Ym94LmhlaWdodCA9IGNhbnZhc0hlaWdodCAtIHBsb3RPZmZzZXQuYm90dG9tIC0gcGxvdE9mZnNl
dC50b3AgKyBheGlzLmxhYmVsSGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gYWRqdXN0TGF5b3V0Rm9yVGhpbmdzU3RpY2tpbmdPdXQoKSB7CisgICAg
ICAgICAgICAvLyBwb3NzaWJseSBhZGp1c3QgcGxvdCBvZmZzZXQgdG8gZW5zdXJlIGV2ZXJ5dGhp
bmcgc3RheXMKKyAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgY2FudmFzIGFuZCBpc24ndCBjbGlw
cGVkIG9mZgorCisgICAgICAgICAgICB2YXIgbWluTWFyZ2luID0gb3B0aW9ucy5ncmlkLm1pbkJv
cmRlck1hcmdpbiwKKyAgICAgICAgICAgICAgICBtYXJnaW5zID0geyB4OiAwLCB5OiAwIH0sIGks
IGF4aXM7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHN0dWZmIGZyb20gdGhlIHBsb3QgKEZJWE1F
OiB0aGlzIHNob3VsZCBqdXN0IHJlYWQKKyAgICAgICAgICAgIC8vIGEgdmFsdWUgZnJvbSB0aGUg
c2VyaWVzLCBvdGhlcndpc2UgaXQncyBpbXBvc3NpYmxlIHRvCisgICAgICAgICAgICAvLyBjdXN0
b21pemUpCisgICAgICAgICAgICBpZiAobWluTWFyZ2luID09IG51bGwpIHsKKyAgICAgICAgICAg
ICAgICBtaW5NYXJnaW4gPSAwOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJp
ZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWF4
KG1pbk1hcmdpbiwgMiAqIChzZXJpZXNbaV0ucG9pbnRzLnJhZGl1cyArIHNlcmllc1tpXS5wb2lu
dHMubGluZVdpZHRoLzIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWFyZ2lucy54
ID0gbWFyZ2lucy55ID0gTWF0aC5jZWlsKG1pbk1hcmdpbik7CisKKyAgICAgICAgICAgIC8vIGNo
ZWNrIGF4aXMgbGFiZWxzLCBub3RlIHdlIGRvbid0IGNoZWNrIHRoZSBhY3R1YWwKKyAgICAgICAg
ICAgIC8vIGxhYmVscyBidXQgaW5zdGVhZCB1c2UgdGhlIG92ZXJhbGwgd2lkdGgvaGVpZ2h0IHRv
IG5vdAorICAgICAgICAgICAgLy8ganVtcCBhcyBtdWNoIGFyb3VuZCB3aXRoIHJlcGxvdHMKKyAg
ICAgICAgICAgICQuZWFjaChhbGxBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlzKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGRpciA9IGF4aXMuZGlyZWN0aW9uOworICAgICAgICAgICAgICAgIGlmIChh
eGlzLnJlc2VydmVTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luc1tkaXJdID0gTWF0
aC5jZWlsKE1hdGgubWF4KG1hcmdpbnNbZGlyXSwgKGRpciA9PSAieCIgPyBheGlzLmxhYmVsV2lk
dGggOiBheGlzLmxhYmVsSGVpZ2h0KSAvIDIpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBwbG90T2Zmc2V0LmxlZnQgPSBNYXRoLm1heChtYXJnaW5zLngsIHBsb3RPZmZzZXQubGVm
dCk7CisgICAgICAgICAgICBwbG90T2Zmc2V0LnJpZ2h0ID0gTWF0aC5tYXgobWFyZ2lucy54LCBw
bG90T2Zmc2V0LnJpZ2h0KTsKKyAgICAgICAgICAgIHBsb3RPZmZzZXQudG9wID0gTWF0aC5tYXgo
bWFyZ2lucy55LCBwbG90T2Zmc2V0LnRvcCk7CisgICAgICAgICAgICBwbG90T2Zmc2V0LmJvdHRv
bSA9IE1hdGgubWF4KG1hcmdpbnMueSwgcGxvdE9mZnNldC5ib3R0b20pOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gc2V0dXBHcmlkKCkgeworICAgICAgICAgICAgdmFyIGksIGF4ZXMg
PSBhbGxBeGVzKCksIHNob3dHcmlkID0gb3B0aW9ucy5ncmlkLnNob3c7CisKKyAgICAgICAgICAg
IC8vIEluaXRpYWxpemUgdGhlIHBsb3QncyBvZmZzZXQgZnJvbSB0aGUgZWRnZSBvZiB0aGUgY2Fu
dmFzCisKKyAgICAgICAgICAgIGZvciAodmFyIGEgaW4gcGxvdE9mZnNldCkgeworICAgICAgICAg
ICAgICAgIHZhciBtYXJnaW4gPSBvcHRpb25zLmdyaWQubWFyZ2luIHx8IDA7CisgICAgICAgICAg
ICAgICAgcGxvdE9mZnNldFthXSA9IHR5cGVvZiBtYXJnaW4gPT0gIm51bWJlciIgPyBtYXJnaW4g
OiBtYXJnaW5bYV0gfHwgMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXhlY3V0ZUhv
b2tzKGhvb2tzLnByb2Nlc3NPZmZzZXQsIFtwbG90T2Zmc2V0XSk7CisKKyAgICAgICAgICAgIC8v
IElmIHRoZSBncmlkIGlzIHZpc2libGUsIGFkZCBpdHMgYm9yZGVyIHdpZHRoIHRvIHRoZSBvZmZz
ZXQKKworICAgICAgICAgICAgZm9yICh2YXIgYSBpbiBwbG90T2Zmc2V0KSB7CisgICAgICAgICAg
ICAgICAgaWYodHlwZW9mKG9wdGlvbnMuZ3JpZC5ib3JkZXJXaWR0aCkgPT0gIm9iamVjdCIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcGxvdE9mZnNldFthXSArPSBzaG93R3JpZCA/IG9wdGlvbnMu
Z3JpZC5ib3JkZXJXaWR0aFthXSA6IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwbG90T2Zmc2V0W2FdICs9IHNob3dHcmlk
ID8gb3B0aW9ucy5ncmlkLmJvcmRlcldpZHRoIDogMDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGluaXQgYXhlcworICAgICAgICAgICAgJC5lYWNo
KGF4ZXMsIGZ1bmN0aW9uIChfLCBheGlzKSB7CisgICAgICAgICAgICAgICAgYXhpcy5zaG93ID0g
YXhpcy5vcHRpb25zLnNob3c7CisgICAgICAgICAgICAgICAgaWYgKGF4aXMuc2hvdyA9PSBudWxs
KQorICAgICAgICAgICAgICAgICAgICBheGlzLnNob3cgPSBheGlzLnVzZWQ7IC8vIGJ5IGRlZmF1
bHQgYW4gYXhpcyBpcyB2aXNpYmxlIGlmIGl0J3MgZ290IGRhdGEKKworICAgICAgICAgICAgICAg
IGF4aXMucmVzZXJ2ZVNwYWNlID0gYXhpcy5zaG93IHx8IGF4aXMub3B0aW9ucy5yZXNlcnZlU3Bh
Y2U7CisKKyAgICAgICAgICAgICAgICBzZXRSYW5nZShheGlzKTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBpZiAoc2hvd0dyaWQpIHsKKyAgICAgICAgICAgICAgICAvLyBkZXRlcm1p
bmUgZnJvbSB0aGUgcGxhY2Vob2xkZXIgdGhlIGZvbnQgc2l6ZSB+IGhlaWdodCBvZiBmb250IH4g
MSBlbQorICAgICAgICAgICAgICAgIHZhciBmb250RGVmYXVsdHMgPSB7CisgICAgICAgICAgICAg
ICAgICAgIHN0eWxlOiBwbGFjZWhvbGRlci5jc3MoImZvbnQtc3R5bGUiKSwKKyAgICAgICAgICAg
ICAgICAgICAgc2l6ZTogTWF0aC5yb3VuZCgwLjggKiAoK3BsYWNlaG9sZGVyLmNzcygiZm9udC1z
aXplIikucmVwbGFjZSgicHgiLCAiIikgfHwgMTMpKSwKKyAgICAgICAgICAgICAgICAgICAgdmFy
aWFudDogcGxhY2Vob2xkZXIuY3NzKCJmb250LXZhcmlhbnQiKSwKKyAgICAgICAgICAgICAgICAg
ICAgd2VpZ2h0OiBwbGFjZWhvbGRlci5jc3MoImZvbnQtd2VpZ2h0IiksCisgICAgICAgICAgICAg
ICAgICAgIGZhbWlseTogcGxhY2Vob2xkZXIuY3NzKCJmb250LWZhbWlseSIpCisgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgIHZhciBhbGxvY2F0ZWRBeGVzID0gJC5ncmVwKGF4
ZXMsIGZ1bmN0aW9uIChheGlzKSB7IHJldHVybiBheGlzLnJlc2VydmVTcGFjZTsgfSk7CisKKyAg
ICAgICAgICAgICAgICAkLmVhY2goYWxsb2NhdGVkQXhlcywgZnVuY3Rpb24gKF8sIGF4aXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSB0aGUgdGlja3MKKyAgICAgICAgICAgICAgICAg
ICAgc2V0dXBUaWNrR2VuZXJhdGlvbihheGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VGlj
a3MoYXhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNuYXBSYW5nZVRvVGlja3MoYXhpcywgYXhp
cy50aWNrcyk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBsYWJlbFdpZHRoL0hlaWdo
dCBmb3IgYXhpcworICAgICAgICAgICAgICAgICAgICBheGlzLmZvbnQgPSAkLmV4dGVuZCh7fSwg
Zm9udERlZmF1bHRzLCBheGlzLm9wdGlvbnMuZm9udCk7CisgICAgICAgICAgICAgICAgICAgIG1l
YXN1cmVUaWNrTGFiZWxzKGF4aXMpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgLy8gd2l0aCBhbGwgZGltZW5zaW9ucyBjYWxjdWxhdGVkLCB3ZSBjYW4gY29tcHV0ZSB0
aGUKKyAgICAgICAgICAgICAgICAvLyBheGlzIGJvdW5kaW5nIGJveGVzLCBzdGFydCBmcm9tIHRo
ZSBvdXRzaWRlCisgICAgICAgICAgICAgICAgLy8gKHJldmVyc2Ugb3JkZXIpCisgICAgICAgICAg
ICAgICAgZm9yIChpID0gYWxsb2NhdGVkQXhlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKKyAg
ICAgICAgICAgICAgICAgICAgYWxsb2NhdGVBeGlzQm94Rmlyc3RQaGFzZShhbGxvY2F0ZWRBeGVz
W2ldKTsKKworICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgZW5vdWdoIHNw
YWNlIGZvciB0aGluZ3MgdGhhdAorICAgICAgICAgICAgICAgIC8vIG1pZ2h0IHN0aWNrIG91dAor
ICAgICAgICAgICAgICAgIGFkanVzdExheW91dEZvclRoaW5nc1N0aWNraW5nT3V0KCk7CisKKyAg
ICAgICAgICAgICAgICAkLmVhY2goYWxsb2NhdGVkQXhlcywgZnVuY3Rpb24gKF8sIGF4aXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVBeGlzQm94U2Vjb25kUGhhc2UoYXhpcyk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBsb3RXaWR0
aCA9IGNhbnZhc1dpZHRoIC0gcGxvdE9mZnNldC5sZWZ0IC0gcGxvdE9mZnNldC5yaWdodDsKKyAg
ICAgICAgICAgIHBsb3RIZWlnaHQgPSBjYW52YXNIZWlnaHQgLSBwbG90T2Zmc2V0LmJvdHRvbSAt
IHBsb3RPZmZzZXQudG9wOworCisgICAgICAgICAgICAvLyBub3cgd2UgZ290IHRoZSBwcm9wZXIg
cGxvdCBkaW1lbnNpb25zLCB3ZSBjYW4gY29tcHV0ZSB0aGUgc2NhbGluZworICAgICAgICAgICAg
JC5lYWNoKGF4ZXMsIGZ1bmN0aW9uIChfLCBheGlzKSB7CisgICAgICAgICAgICAgICAgc2V0VHJh
bnNmb3JtYXRpb25IZWxwZXJzKGF4aXMpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IGluc2VydExlZ2VuZCgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2V0UmFuZ2Uo
YXhpcykgeworICAgICAgICAgICAgdmFyIG9wdHMgPSBheGlzLm9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgbWluID0gKyhvcHRzLm1pbiAhPSBudWxsID8gb3B0cy5taW4gOiBheGlzLmRhdGFtaW4p
LAorICAgICAgICAgICAgICAgIG1heCA9ICsob3B0cy5tYXggIT0gbnVsbCA/IG9wdHMubWF4IDog
YXhpcy5kYXRhbWF4KSwKKyAgICAgICAgICAgICAgICBkZWx0YSA9IG1heCAtIG1pbjsKKworICAg
ICAgICAgICAgaWYgKGRlbHRhID09IDAuMCkgeworICAgICAgICAgICAgICAgIC8vIGRlZ2VuZXJh
dGUgY2FzZQorICAgICAgICAgICAgICAgIHZhciB3aWRlbiA9IG1heCA9PSAwID8gMSA6IDAuMDE7
CisKKyAgICAgICAgICAgICAgICBpZiAob3B0cy5taW4gPT0gbnVsbCkKKyAgICAgICAgICAgICAg
ICAgICAgbWluIC09IHdpZGVuOworICAgICAgICAgICAgICAgIC8vIGFsd2F5cyB3aWRlbiBtYXgg
aWYgd2UgY291bGRuJ3Qgd2lkZW4gbWluIHRvIGVuc3VyZSB3ZQorICAgICAgICAgICAgICAgIC8v
IGRvbid0IGZhbGwgaW50byBtaW4gPT0gbWF4IHdoaWNoIGRvZXNuJ3Qgd29yaworICAgICAgICAg
ICAgICAgIGlmIChvcHRzLm1heCA9PSBudWxsIHx8IG9wdHMubWluICE9IG51bGwpCisgICAgICAg
ICAgICAgICAgICAgIG1heCArPSB3aWRlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIGNvbnNpZGVyIGF1dG9zY2FsaW5nCisgICAgICAgICAg
ICAgICAgdmFyIG1hcmdpbiA9IG9wdHMuYXV0b3NjYWxlTWFyZ2luOworICAgICAgICAgICAgICAg
IGlmIChtYXJnaW4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5taW4g
PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWluIC09IGRlbHRhICogbWFyZ2lu
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGdvIGJlbG93
IHplcm8gaWYgYWxsIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHBvc2l0
aXZlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluIDwgMCAmJiBheGlzLmRhdGFtaW4g
IT0gbnVsbCAmJiBheGlzLmRhdGFtaW4gPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtaW4gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChvcHRzLm1heCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXggKz0gZGVs
dGEgKiBtYXJnaW47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4ID4gMCAmJiBheGlz
LmRhdGFtYXggIT0gbnVsbCAmJiBheGlzLmRhdGFtYXggPD0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXggPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYXhpcy5taW4gPSBtaW47CisgICAgICAg
ICAgICBheGlzLm1heCA9IG1heDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNldHVw
VGlja0dlbmVyYXRpb24oYXhpcykgeworICAgICAgICAgICAgdmFyIG9wdHMgPSBheGlzLm9wdGlv
bnM7CisKKyAgICAgICAgICAgIC8vIGVzdGltYXRlIG51bWJlciBvZiB0aWNrcworICAgICAgICAg
ICAgdmFyIG5vVGlja3M7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMudGlja3MgPT0gIm51
bWJlciIgJiYgb3B0cy50aWNrcyA+IDApCisgICAgICAgICAgICAgICAgbm9UaWNrcyA9IG9wdHMu
dGlja3M7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgLy8gaGV1cmlzdGljIGJh
c2VkIG9uIHRoZSBtb2RlbCBhKnNxcnQoeCkgZml0dGVkIHRvCisgICAgICAgICAgICAgICAgLy8g
c29tZSBkYXRhIHBvaW50cyB0aGF0IHNlZW1lZCByZWFzb25hYmxlCisgICAgICAgICAgICAgICAg
bm9UaWNrcyA9IDAuMyAqIE1hdGguc3FydChheGlzLmRpcmVjdGlvbiA9PSAieCIgPyBjYW52YXNX
aWR0aCA6IGNhbnZhc0hlaWdodCk7CisKKyAgICAgICAgICAgIGF4aXMuZGVsdGEgPSAoYXhpcy5t
YXggLSBheGlzLm1pbikgLyBub1RpY2tzOworCisgICAgICAgICAgICAvLyBUaW1lIG1vZGUgd2Fz
IG1vdmVkIHRvIGEgcGx1Zy1pbiBpbiAwLjgsIGJ1dCBzaW5jZSBzbyBtYW55IHBlb3BsZSB1c2Ug
dGhpcworICAgICAgICAgICAgLy8gd2UnbGwgYWRkIGFuIGVzcGVjaWFsbHkgZnJpZW5kbHkgbWFr
ZSBzdXJlIHRoZXkgcmVtZW1iZXJlZCB0byBpbmNsdWRlIGl0LgorCisgICAgICAgICAgICBpZiAo
b3B0cy5tb2RlID09ICJ0aW1lIiAmJiAhYXhpcy50aWNrR2VuZXJhdG9yKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaW1lIG1vZGUgcmVxdWlyZXMgdGhlIGZsb3QudGltZSBw
bHVnaW4uIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZsb3Qgc3VwcG9ydHMg
YmFzZS0xMCBheGVzOyBhbnkgb3RoZXIgbW9kZSBlbHNlIGlzIGhhbmRsZWQgYnkgYSBwbHVnLWlu
LAorICAgICAgICAgICAgLy8gbGlrZSBmbG90LnRpbWUuanMuCisKKyAgICAgICAgICAgIGlmICgh
YXhpcy50aWNrR2VuZXJhdG9yKSB7CisKKyAgICAgICAgICAgICAgICBheGlzLnRpY2tHZW5lcmF0
b3IgPSBmdW5jdGlvbiAoYXhpcykgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RGVjID0g
b3B0cy50aWNrRGVjaW1hbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWMgPSAtTWF0aC5m
bG9vcihNYXRoLmxvZyhheGlzLmRlbHRhKSAvIE1hdGguTE4xMCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1heERlYyAhPSBudWxsICYmIGRlYyA+IG1heERlYykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlYyA9IG1heERlYzsKKworICAgICAgICAgICAgICAgICAgICB2YXIgbWFnbiA9
IE1hdGgucG93KDEwLCAtZGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSBheGlz
LmRlbHRhIC8gbWFnbiwgLy8gbm9ybSBpcyBiZXR3ZWVuIDEuMCBhbmQgMTAuMAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZSwKKworICAgICAgICAgICAgICAgICAgICAgICAgdGlja3MgPSBb
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgaSA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gTnVtYmVyLk5hTiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByZXY7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm0g
PCAxLjUpCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobm9ybSA8IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUg
PSAyOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciAyLjUsIHJl
cXVpcmVzIGFuIGV4dHJhIGRlY2ltYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3Jt
ID4gMi4yNSAmJiAobWF4RGVjID09IG51bGwgfHwgZGVjICsgMSA8PSBtYXhEZWMpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDIuNTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArK2RlYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub3JtIDwgNy41KQorICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZSA9IDU7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2l6
ZSA9IDEwOworCisgICAgICAgICAgICAgICAgICAgIHNpemUgKj0gbWFnbjsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAob3B0cy5taW5UaWNrU2l6ZSAhPSBudWxsICYmIHNpemUgPCBvcHRzLm1p
blRpY2tTaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG9wdHMubWluVGlja1Np
emU7CisKKyAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrRGVjaW1hbHMgPSBNYXRoLm1heCgw
LCBtYXhEZWMgIT0gbnVsbCA/IG1heERlYyA6IGRlYyk7CisgICAgICAgICAgICAgICAgICAgIGF4
aXMudGlja1NpemUgPSBvcHRzLnRpY2tTaXplIHx8IHNpemU7CisKKyAgICAgICAgICAgICAgICAg
ICAgc3RhcnQgPSBmbG9vckluQmFzZShheGlzLm1pbiwgYXhpcy50aWNrU2l6ZSkKKworICAgICAg
ICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gdjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdGFydCArIGkgKiBheGlzLnRpY2tTaXplOworICAg
ICAgICAgICAgICAgICAgICAgICAgdGlja3MucHVzaCh2KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICsraTsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAodiA8IGF4aXMubWF4ICYmIHYg
IT0gcHJldik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrczsKKyAgICAgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICAgICAgYXhpcy50aWNrRm9ybWF0dGVyID0gZnVuY3Rpb24g
KHZhbHVlLCBheGlzKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZhY3RvciA9IGF4aXMu
dGlja0RlY2ltYWxzID8gTWF0aC5wb3coMTAsIGF4aXMudGlja0RlY2ltYWxzKSA6IDE7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSAiIiArIE1hdGgucm91bmQodmFsdWUgKiBm
YWN0b3IpIC8gZmFjdG9yOworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRpY2tEZWNpbWFs
cyB3YXMgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB3ZSBoYXZlIGV4YWN0bHkgdGhhdAorICAgICAg
ICAgICAgICAgICAgICAvLyBtdWNoIHByZWNpc2lvbjsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhl
IHZhbHVlJ3Mgb3duIHByZWNpc2lvbi4KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy50
aWNrRGVjaW1hbHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2lt
YWwgPSBmb3JtYXR0ZWQuaW5kZXhPZigiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHByZWNpc2lvbiA9IGRlY2ltYWwgPT0gLTEgPyAwIDogZm9ybWF0dGVkLmxlbmd0aCAtIGRlY2lt
YWwgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA8IGF4aXMudGlj
a0RlY2ltYWxzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwcmVjaXNp
b24gPyBmb3JtYXR0ZWQgOiBmb3JtYXR0ZWQgKyAiLiIpICsgKCIiICsgZmFjdG9yKS5zdWJzdHIo
MSwgYXhpcy50aWNrRGVjaW1hbHMgLSBwcmVjaXNpb24pOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZvcm1hdHRlZDsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMudGlja0Zvcm1hdHRlcikpCisgICAgICAgICAgICAg
ICAgYXhpcy50aWNrRm9ybWF0dGVyID0gZnVuY3Rpb24gKHYsIGF4aXMpIHsgcmV0dXJuICIiICsg
b3B0cy50aWNrRm9ybWF0dGVyKHYsIGF4aXMpOyB9OworCisgICAgICAgICAgICBpZiAob3B0cy5h
bGlnblRpY2tzV2l0aEF4aXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHZhciBvdGhlckF4
aXMgPSAoYXhpcy5kaXJlY3Rpb24gPT0gIngiID8geGF4ZXMgOiB5YXhlcylbb3B0cy5hbGlnblRp
Y2tzV2l0aEF4aXMgLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJBeGlzICYmIG90aGVy
QXhpcy51c2VkICYmIG90aGVyQXhpcyAhPSBheGlzKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IGNvbnNpZGVyIHNuYXBwaW5nIG1pbi9tYXggdG8gb3V0ZXJtb3N0IG5pY2UgdGlja3MKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5pY2VUaWNrcyA9IGF4aXMudGlja0dlbmVyYXRvcihheGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5pY2VUaWNrcy5sZW5ndGggPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3B0cy5taW4gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBheGlzLm1pbiA9IE1hdGgubWluKGF4aXMubWluLCBuaWNlVGlja3NbMF0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubWF4ID09IG51bGwgJiYgbmljZVRpY2tz
Lmxlbmd0aCA+IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy5tYXggPSBNYXRo
Lm1heChheGlzLm1heCwgbmljZVRpY2tzW25pY2VUaWNrcy5sZW5ndGggLSAxXSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBheGlzLnRpY2tHZW5lcmF0b3Ig
PSBmdW5jdGlvbiAoYXhpcykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aWNr
cywgc2NhbGVkIHRvIHRoaXMgYXhpcworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpY2tz
ID0gW10sIHYsIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3Ro
ZXJBeGlzLnRpY2tzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
diA9IChvdGhlckF4aXMudGlja3NbaV0udiAtIG90aGVyQXhpcy5taW4pIC8gKG90aGVyQXhpcy5t
YXggLSBvdGhlckF4aXMubWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gYXhp
cy5taW4gKyB2ICogKGF4aXMubWF4IC0gYXhpcy5taW4pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpY2tzLnB1c2godik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGlja3M7CisgICAgICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2UgbWlnaHQgbmVlZCBhbiBleHRyYSBkZWNpbWFsIHNp
bmNlIGZvcmNlZAorICAgICAgICAgICAgICAgICAgICAvLyB0aWNrcyBkb24ndCBuZWNlc3Nhcmls
eSBmaXQgbmF0dXJhbGx5CisgICAgICAgICAgICAgICAgICAgIGlmICghYXhpcy5tb2RlICYmIG9w
dHMudGlja0RlY2ltYWxzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBl
eHRyYURlYyA9IE1hdGgubWF4KDAsIC1NYXRoLmZsb29yKE1hdGgubG9nKGF4aXMuZGVsdGEpIC8g
TWF0aC5MTjEwKSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzID0gYXhpcy50
aWNrR2VuZXJhdG9yKGF4aXMpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHBy
b2NlZWQgaWYgdGhlIHRpY2sgaW50ZXJ2YWwgcm91bmRlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2l0aCBhbiBleHRyYSBkZWNpbWFsIGRvZXNuJ3QgZ2l2ZSB1cyBhCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB6ZXJvIGF0IGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCEodHMubGVuZ3RoID4gMSAmJiAvXC4uKjAkLy50ZXN0KCh0c1sxXSAtIHRzWzBdKS50b0ZpeGVk
KGV4dHJhRGVjKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGlja0RlY2lt
YWxzID0gZXh0cmFEZWM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZXRUaWNrcyhh
eGlzKSB7CisgICAgICAgICAgICB2YXIgb3RpY2tzID0gYXhpcy5vcHRpb25zLnRpY2tzLCB0aWNr
cyA9IFtdOworICAgICAgICAgICAgaWYgKG90aWNrcyA9PSBudWxsIHx8ICh0eXBlb2Ygb3RpY2tz
ID09ICJudW1iZXIiICYmIG90aWNrcyA+IDApKQorICAgICAgICAgICAgICAgIHRpY2tzID0gYXhp
cy50aWNrR2VuZXJhdG9yKGF4aXMpOworICAgICAgICAgICAgZWxzZSBpZiAob3RpY2tzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvdGlja3MpKQorICAgICAgICAgICAgICAg
ICAgICAvLyBnZW5lcmF0ZSB0aGUgdGlja3MKKyAgICAgICAgICAgICAgICAgICAgdGlja3MgPSBv
dGlja3MoYXhpcyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0
aWNrcyA9IG90aWNrczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2xlYW4gdXAv
bGFiZWxpZnkgdGhlIHN1cHBsaWVkIHRpY2tzLCBjb3B5IHRoZW0gb3ZlcgorICAgICAgICAgICAg
dmFyIGksIHY7CisgICAgICAgICAgICBheGlzLnRpY2tzID0gW107CisgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgdGlja3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGFi
ZWwgPSBudWxsOworICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07CisgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiB0ID09ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgICAgIHYg
PSArdFswXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQubGVuZ3RoID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxhYmVsID0gdFsxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2ID0gK3Q7CisgICAgICAgICAgICAg
ICAgaWYgKGxhYmVsID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gYXhpcy50
aWNrRm9ybWF0dGVyKHYsIGF4aXMpOworICAgICAgICAgICAgICAgIGlmICghaXNOYU4odikpCisg
ICAgICAgICAgICAgICAgICAgIGF4aXMudGlja3MucHVzaCh7IHY6IHYsIGxhYmVsOiBsYWJlbCB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNuYXBSYW5n
ZVRvVGlja3MoYXhpcywgdGlja3MpIHsKKyAgICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuYXV0
b3NjYWxlTWFyZ2luICYmIHRpY2tzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBz
bmFwIHRvIHRpY2tzCisgICAgICAgICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5taW4gPT0gbnVs
bCkKKyAgICAgICAgICAgICAgICAgICAgYXhpcy5taW4gPSBNYXRoLm1pbihheGlzLm1pbiwgdGlj
a3NbMF0udik7CisgICAgICAgICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5tYXggPT0gbnVsbCAm
JiB0aWNrcy5sZW5ndGggPiAxKQorICAgICAgICAgICAgICAgICAgICBheGlzLm1heCA9IE1hdGgu
bWF4KGF4aXMubWF4LCB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRyYXcoKSB7CisgICAgICAgICAgICBjdHgu
Y2xlYXJSZWN0KDAsIDAsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpOworCisgICAgICAgICAg
ICBleGVjdXRlSG9va3MoaG9va3MuZHJhd0JhY2tncm91bmQsIFtjdHhdKTsKKworICAgICAgICAg
ICAgdmFyIGdyaWQgPSBvcHRpb25zLmdyaWQ7CisKKyAgICAgICAgICAgIC8vIGRyYXcgYmFja2dy
b3VuZCwgaWYgYW55CisgICAgICAgICAgICBpZiAoZ3JpZC5zaG93ICYmIGdyaWQuYmFja2dyb3Vu
ZENvbG9yKQorICAgICAgICAgICAgICAgIGRyYXdCYWNrZ3JvdW5kKCk7CisKKyAgICAgICAgICAg
IGlmIChncmlkLnNob3cgJiYgIWdyaWQuYWJvdmVEYXRhKSB7CisgICAgICAgICAgICAgICAgZHJh
d0dyaWQoKTsKKyAgICAgICAgICAgICAgICBkcmF3QXhpc0xhYmVscygpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5kcmF3U2VyaWVzLCBbY3R4LCBz
ZXJpZXNbaV1dKTsKKyAgICAgICAgICAgICAgICBkcmF3U2VyaWVzKHNlcmllc1tpXSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5kcmF3LCBbY3R4XSk7
CisKKyAgICAgICAgICAgIGlmIChncmlkLnNob3cgJiYgZ3JpZC5hYm92ZURhdGEpIHsKKyAgICAg
ICAgICAgICAgICBkcmF3R3JpZCgpOworICAgICAgICAgICAgICAgIGRyYXdBeGlzTGFiZWxzKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBleHRyYWN0UmFu
Z2UocmFuZ2VzLCBjb29yZCkgeworICAgICAgICAgICAgdmFyIGF4aXMsIGZyb20sIHRvLCBrZXks
IGF4ZXMgPSBhbGxBeGVzKCk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhl
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGF4aXMgPSBheGVzW2ldOworICAgICAg
ICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSBjb29yZCkgeworICAgICAgICAgICAgICAg
ICAgICBrZXkgPSBjb29yZCArIGF4aXMubiArICJheGlzIjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFyYW5nZXNba2V5XSAmJiBheGlzLm4gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGtleSA9IGNvb3JkICsgImF4aXMiOyAvLyBzdXBwb3J0IHgxYXhpcyBhcyB4YXhpcworICAgICAg
ICAgICAgICAgICAgICBpZiAocmFuZ2VzW2tleV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZyb20gPSByYW5nZXNba2V5XS5mcm9tOworICAgICAgICAgICAgICAgICAgICAgICAgdG8gPSBy
YW5nZXNba2V5XS50bzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBiYWNrd2FyZHMtY29tcGF0IHN0dWZmIC0gdG8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUK
KyAgICAgICAgICAgIGlmICghcmFuZ2VzW2tleV0pIHsKKyAgICAgICAgICAgICAgICBheGlzID0g
Y29vcmQgPT0gIngiID8geGF4ZXNbMF0gOiB5YXhlc1swXTsKKyAgICAgICAgICAgICAgICBmcm9t
ID0gcmFuZ2VzW2Nvb3JkICsgIjEiXTsKKyAgICAgICAgICAgICAgICB0byA9IHJhbmdlc1tjb29y
ZCArICIyIl07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGF1dG8tcmV2ZXJzZSBh
cyBhbiBhZGRlZCBib251cworICAgICAgICAgICAgaWYgKGZyb20gIT0gbnVsbCAmJiB0byAhPSBu
dWxsICYmIGZyb20gPiB0bykgeworICAgICAgICAgICAgICAgIHZhciB0bXAgPSBmcm9tOworICAg
ICAgICAgICAgICAgIGZyb20gPSB0bzsKKyAgICAgICAgICAgICAgICB0byA9IHRtcDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsgZnJvbTogZnJvbSwgdG86IHRvLCBheGlz
OiBheGlzIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkcmF3QmFja2dyb3VuZCgp
IHsKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7CisgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHBs
b3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOworCisgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gZ2V0Q29sb3JPckdyYWRpZW50KG9wdGlvbnMuZ3JpZC5iYWNrZ3JvdW5kQ29sb3IsIHBs
b3RIZWlnaHQsIDAsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7CisgICAgICAgICAgICBjdHgu
ZmlsbFJlY3QoMCwgMCwgcGxvdFdpZHRoLCBwbG90SGVpZ2h0KTsKKyAgICAgICAgICAgIGN0eC5y
ZXN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkcmF3R3JpZCgpIHsKKyAg
ICAgICAgICAgIHZhciBpLCBheGVzLCBidywgYmM7CisKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7
CisgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50
b3ApOworCisgICAgICAgICAgICAvLyBkcmF3IG1hcmtpbmdzCisgICAgICAgICAgICB2YXIgbWFy
a2luZ3MgPSBvcHRpb25zLmdyaWQubWFya2luZ3M7CisgICAgICAgICAgICBpZiAobWFya2luZ3Mp
IHsKKyAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG1hcmtpbmdzKSkgeworICAgICAg
ICAgICAgICAgICAgICBheGVzID0gcGxvdC5nZXRBeGVzKCk7CisgICAgICAgICAgICAgICAgICAg
IC8vIHhtaW4gZXRjLiBpcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdG8gYmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gcmVtb3ZlZCBpbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAgICAgICAg
IGF4ZXMueG1pbiA9IGF4ZXMueGF4aXMubWluOworICAgICAgICAgICAgICAgICAgICBheGVzLnht
YXggPSBheGVzLnhheGlzLm1heDsKKyAgICAgICAgICAgICAgICAgICAgYXhlcy55bWluID0gYXhl
cy55YXhpcy5taW47CisgICAgICAgICAgICAgICAgICAgIGF4ZXMueW1heCA9IGF4ZXMueWF4aXMu
bWF4OworCisgICAgICAgICAgICAgICAgICAgIG1hcmtpbmdzID0gbWFya2luZ3MoYXhlcyk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1hcmtp
bmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtID0gbWFya2luZ3Nb
aV0sCisgICAgICAgICAgICAgICAgICAgICAgICB4cmFuZ2UgPSBleHRyYWN0UmFuZ2UobSwgIngi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlyYW5nZSA9IGV4dHJhY3RSYW5nZShtLCAieSIp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbGwgaW4gbWlzc2luZworICAgICAgICAgICAg
ICAgICAgICBpZiAoeHJhbmdlLmZyb20gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHhyYW5nZS5mcm9tID0geHJhbmdlLmF4aXMubWluOworICAgICAgICAgICAgICAgICAgICBpZiAo
eHJhbmdlLnRvID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB4cmFuZ2UudG8gPSB4
cmFuZ2UuYXhpcy5tYXg7CisgICAgICAgICAgICAgICAgICAgIGlmICh5cmFuZ2UuZnJvbSA9PSBu
dWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgeXJhbmdlLmZyb20gPSB5cmFuZ2UuYXhpcy5t
aW47CisgICAgICAgICAgICAgICAgICAgIGlmICh5cmFuZ2UudG8gPT0gbnVsbCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHlyYW5nZS50byA9IHlyYW5nZS5heGlzLm1heDsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBjbGlwCisgICAgICAgICAgICAgICAgICAgIGlmICh4cmFuZ2UudG8gPCB4
cmFuZ2UuYXhpcy5taW4gfHwgeHJhbmdlLmZyb20gPiB4cmFuZ2UuYXhpcy5tYXggfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHlyYW5nZS50byA8IHlyYW5nZS5heGlzLm1pbiB8fCB5cmFuZ2Uu
ZnJvbSA+IHlyYW5nZS5heGlzLm1heCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgICAgIHhyYW5nZS5mcm9tID0gTWF0aC5tYXgoeHJhbmdlLmZy
b20sIHhyYW5nZS5heGlzLm1pbik7CisgICAgICAgICAgICAgICAgICAgIHhyYW5nZS50byA9IE1h
dGgubWluKHhyYW5nZS50bywgeHJhbmdlLmF4aXMubWF4KTsKKyAgICAgICAgICAgICAgICAgICAg
eXJhbmdlLmZyb20gPSBNYXRoLm1heCh5cmFuZ2UuZnJvbSwgeXJhbmdlLmF4aXMubWluKTsKKyAg
ICAgICAgICAgICAgICAgICAgeXJhbmdlLnRvID0gTWF0aC5taW4oeXJhbmdlLnRvLCB5cmFuZ2Uu
YXhpcy5tYXgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh4cmFuZ2UuZnJvbSA9PSB4cmFu
Z2UudG8gJiYgeXJhbmdlLmZyb20gPT0geXJhbmdlLnRvKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBkcmF3CisgICAgICAg
ICAgICAgICAgICAgIHhyYW5nZS5mcm9tID0geHJhbmdlLmF4aXMucDJjKHhyYW5nZS5mcm9tKTsK
KyAgICAgICAgICAgICAgICAgICAgeHJhbmdlLnRvID0geHJhbmdlLmF4aXMucDJjKHhyYW5nZS50
byk7CisgICAgICAgICAgICAgICAgICAgIHlyYW5nZS5mcm9tID0geXJhbmdlLmF4aXMucDJjKHly
YW5nZS5mcm9tKTsKKyAgICAgICAgICAgICAgICAgICAgeXJhbmdlLnRvID0geXJhbmdlLmF4aXMu
cDJjKHlyYW5nZS50byk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhyYW5nZS5mcm9tID09
IHhyYW5nZS50byB8fCB5cmFuZ2UuZnJvbSA9PSB5cmFuZ2UudG8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGRyYXcgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2lu
UGF0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gbS5jb2xv
ciB8fCBvcHRpb25zLmdyaWQubWFya2luZ3NDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN0eC5saW5lV2lkdGggPSBtLmxpbmVXaWR0aCB8fCBvcHRpb25zLmdyaWQubWFya2luZ3NMaW5l
V2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHhyYW5nZS5mcm9tLCB5
cmFuZ2UuZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHhyYW5nZS50
bywgeXJhbmdlLnRvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGZpbGwgYXJlYQorICAgICAgICAgICAgICAgICAgICAgICAgY3R4
LmZpbGxTdHlsZSA9IG0uY29sb3IgfHwgb3B0aW9ucy5ncmlkLm1hcmtpbmdzQ29sb3I7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoeHJhbmdlLmZyb20sIHlyYW5nZS50bywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmFuZ2UudG8gLSB4cmFuZ2Uu
ZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cmFuZ2UuZnJvbSAt
IHlyYW5nZS50byk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRpY2tzCisgICAgICAgICAg
ICBheGVzID0gYWxsQXhlcygpOworICAgICAgICAgICAgYncgPSBvcHRpb25zLmdyaWQuYm9yZGVy
V2lkdGg7CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXhlcy5sZW5ndGg7ICsr
aikgeworICAgICAgICAgICAgICAgIHZhciBheGlzID0gYXhlc1tqXSwgYm94ID0gYXhpcy5ib3gs
CisgICAgICAgICAgICAgICAgICAgIHQgPSBheGlzLnRpY2tMZW5ndGgsIHgsIHksIHhvZmYsIHlv
ZmY7CisgICAgICAgICAgICAgICAgaWYgKCFheGlzLnNob3cgfHwgYXhpcy50aWNrcy5sZW5ndGgg
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBj
dHguc3Ryb2tlU3R5bGUgPSBheGlzLm9wdGlvbnMudGlja0NvbG9yIHx8ICQuY29sb3IucGFyc2Uo
YXhpcy5vcHRpb25zLmNvbG9yKS5zY2FsZSgnYScsIDAuMjIpLnRvU3RyaW5nKCk7CisgICAgICAg
ICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7CisKKyAgICAgICAgICAgICAgICAvLyBmaW5kIHRo
ZSBlZGdlcworICAgICAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSAieCIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID09ICJm
dWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAoYXhpcy5wb3NpdGlvbiA9PSAidG9w
IiA/IDAgOiBwbG90SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgeSA9IGJveC50b3AgLSBwbG90T2Zmc2V0LnRvcCArIChheGlzLnBvc2l0
aW9uID09ICJ0b3AiID8gYm94LmhlaWdodCA6IDApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgeSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0ID09ICJmdWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAo
YXhpcy5wb3NpdGlvbiA9PSAibGVmdCIgPyAwIDogcGxvdFdpZHRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGJveC5sZWZ0IC0gcGxvdE9m
ZnNldC5sZWZ0ICsgKGF4aXMucG9zaXRpb24gPT0gImxlZnQiID8gYm94LndpZHRoIDogMCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZHJhdyB0aWNrIGJhcgorICAg
ICAgICAgICAgICAgIGlmICghYXhpcy5pbm5lcm1vc3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y3R4LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAgICB4b2ZmID0geW9mZiA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSAieCIpCisgICAgICAgICAg
ICAgICAgICAgICAgICB4b2ZmID0gcGxvdFdpZHRoOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICB5b2ZmID0gcGxvdEhlaWdodDsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAoY3R4LmxpbmVXaWR0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB4ID0gTWF0aC5mbG9vcih4KSArIDAuNTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkg
PSBNYXRoLmZsb29yKHkpICsgMC41OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTsKKyAgICAgICAgICAgICAgICAgICAgY3R4Lmxp
bmVUbyh4ICsgeG9mZiwgeSArIHlvZmYpOworICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tl
KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZHJhdyB0aWNrcwor
ICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgYXhpcy50aWNrcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgdiA9IGF4aXMudGlja3NbaV0udjsKKworICAgICAgICAgICAgICAgICAgICB4b2ZmID0geW9m
ZiA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgPCBheGlzLm1pbiB8fCB2ID4gYXhp
cy5tYXgKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhvc2UgbHlpbmcgb24gdGhl
IGF4ZXMgaWYgd2UgZ290IGEgYm9yZGVyCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAodCA9
PSAiZnVsbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHR5cGVvZiBidyA9PSAi
b2JqZWN0IiAmJiBid1theGlzLnBvc2l0aW9uXSA+IDApIHx8IGJ3ID4gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAodiA9PSBheGlzLm1pbiB8fCB2ID09IGF4aXMubWF4KSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0g
YXhpcy5wMmModik7CisgICAgICAgICAgICAgICAgICAgICAgICB5b2ZmID0gdCA9PSAiZnVsbCIg
PyAtcGxvdEhlaWdodCA6IHQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGlzLnBv
c2l0aW9uID09ICJ0b3AiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvZmYgPSAteW9m
ZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHkgPSBheGlzLnAyYyh2KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHhvZmYgPSB0ID09ICJmdWxsIiA/IC1wbG90V2lkdGggOiB0OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXhpcy5wb3NpdGlvbiA9PSAibGVmdCIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeG9mZiA9IC14b2ZmOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGN0eC5saW5lV2lkdGggPT0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF4aXMuZGlyZWN0aW9uID09ICJ4IikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4ID0gTWF0aC5mbG9vcih4KSArIDAuNTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTWF0aC5mbG9vcih5KSAr
IDAuNTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGN0eC5t
b3ZlVG8oeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhvZmYsIHkg
KyB5b2ZmKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjdHguc3Ryb2tl
KCk7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgLy8gZHJhdyBib3JkZXIKKyAgICAg
ICAgICAgIGlmIChidykgeworICAgICAgICAgICAgICAgIC8vIElmIGVpdGhlciBib3JkZXJXaWR0
aCBvciBib3JkZXJDb2xvciBpcyBhbiBvYmplY3QsIHRoZW4gZHJhdyB0aGUgYm9yZGVyCisgICAg
ICAgICAgICAgICAgLy8gbGluZSBieSBsaW5lIGluc3RlYWQgb2YgYXMgb25lIHJlY3RhbmdsZQor
ICAgICAgICAgICAgICAgIGJjID0gb3B0aW9ucy5ncmlkLmJvcmRlckNvbG9yOworICAgICAgICAg
ICAgICAgIGlmKHR5cGVvZiBidyA9PSAib2JqZWN0IiB8fCB0eXBlb2YgYmMgPT0gIm9iamVjdCIp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidyAhPT0gIm9iamVjdCIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJ3ID0ge3RvcDogYncsIHJpZ2h0OiBidywgYm90dG9tOiBi
dywgbGVmdDogYnd9OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgYmMgIT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBi
YyA9IHt0b3A6IGJjLCByaWdodDogYmMsIGJvdHRvbTogYmMsIGxlZnQ6IGJjfTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChidy50b3AgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBiYy50b3A7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gYncudG9wOworICAgICAgICAgICAgICAg
ICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm1v
dmVUbygwIC0gYncubGVmdCwgMCAtIGJ3LnRvcC8yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN0eC5saW5lVG8ocGxvdFdpZHRoLCAwIC0gYncudG9wLzIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY3R4LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJ3LnJpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4
LnN0cm9rZVN0eWxlID0gYmMucmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGlu
ZVdpZHRoID0gYncucmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRo
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHBsb3RXaWR0aCArIGJ3LnJp
Z2h0IC8gMiwgMCAtIGJ3LnRvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRv
KHBsb3RXaWR0aCArIGJ3LnJpZ2h0IC8gMiwgcGxvdEhlaWdodCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjdHguc3Ryb2tlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoYncuYm90dG9tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y3R4LnN0cm9rZVN0eWxlID0gYmMuYm90dG9tOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4
LmxpbmVXaWR0aCA9IGJ3LmJvdHRvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdp
blBhdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8ocGxvdFdpZHRoICsg
YncucmlnaHQsIHBsb3RIZWlnaHQgKyBidy5ib3R0b20gLyAyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5saW5lVG8oMCwgcGxvdEhlaWdodCArIGJ3LmJvdHRvbSAvIDIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGJ3LmxlZnQgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBiYy5sZWZ0OworICAgICAgICAgICAgICAgICAgICAg
ICAgY3R4LmxpbmVXaWR0aCA9IGJ3LmxlZnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgu
YmVnaW5QYXRoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKDAgLSBidy5s
ZWZ0LzIsIHBsb3RIZWlnaHQgKyBidy5ib3R0b20pOworICAgICAgICAgICAgICAgICAgICAgICAg
Y3R4LmxpbmVUbygwLSBidy5sZWZ0LzIsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4
LnN0cm9rZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0g
Ync7CisgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdGlvbnMuZ3JpZC5i
b3JkZXJDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVJlY3QoLWJ3LzIsIC1i
dy8yLCBwbG90V2lkdGggKyBidywgcGxvdEhlaWdodCArIGJ3KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBkcmF3QXhpc0xhYmVscygpIHsKKyAgICAgICAgICAgIGN0eC5z
YXZlKCk7CisKKyAgICAgICAgICAgICQuZWFjaChhbGxBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlz
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFheGlzLnNob3cgfHwgYXhpcy50aWNrcy5sZW5ndGgg
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgdmFy
IGJveCA9IGF4aXMuYm94LCBmID0gYXhpcy5mb250OworICAgICAgICAgICAgICAgIC8vIHBsYWNl
aG9sZGVyLmFwcGVuZCgnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowLjEw
O2JhY2tncm91bmQtY29sb3I6cmVkO2xlZnQ6JyArIGJveC5sZWZ0ICsgJ3B4O3RvcDonICsgYm94
LnRvcCArICdweDt3aWR0aDonICsgYm94LndpZHRoICsgICdweDtoZWlnaHQ6JyArIGJveC5oZWln
aHQgKyAncHgiPjwvZGl2PicpIC8vIGRlYnVnCisKKyAgICAgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gYXhpcy5vcHRpb25zLmNvbG9yOworICAgICAgICAgICAgICAgIC8vIEltcG9ydGFudDog
RG9uJ3QgdXNlIHF1b3RlcyBhcm91bmQgYXhpcy5mb250LmZhbWlseSEgSnVzdCBhcm91bmQgc2lu
Z2xlCisgICAgICAgICAgICAgICAgLy8gZm9udCBuYW1lcyBsaWtlICdUaW1lcyBOZXcgUm9tYW4n
IHRoYXQgaGF2ZSBhIHNwYWNlIG9yIHNwZWNpYWwgY2hhcmFjdGVyIGluIGl0LgorICAgICAgICAg
ICAgICAgIGN0eC5mb250ID0gZi5zdHlsZSArICIgIiArIGYudmFyaWFudCArICIgIiArIGYud2Vp
Z2h0ICsgIiAiICsgZi5zaXplICsgInB4ICIgKyBmLmZhbWlseTsKKyAgICAgICAgICAgICAgICBj
dHgudGV4dEFsaWduID0gInN0YXJ0IjsKKyAgICAgICAgICAgICAgICAvLyBtaWRkbGUgYWxpZ24g
dGhlIGxhYmVscyAtIHRvcCB3b3VsZCBiZSBtb3JlCisgICAgICAgICAgICAgICAgLy8gbmF0dXJh
bCwgYnV0IGJyb3dzZXJzIGNhbiBkaWZmZXIgYSBwaXhlbCBvciB0d28gaW4KKyAgICAgICAgICAg
ICAgICAvLyB3aGVyZSB0aGV5IGNvbnNpZGVyIHRoZSB0b3AgdG8gYmUsIHNvIGluc3RlYWQgd2UK
KyAgICAgICAgICAgICAgICAvLyBtaWRkbGUgYWxpZ24gdG8gbWluaW1pemUgdmFyaWF0aW9uIGJl
dHdlZW4gYnJvd3NlcnMKKyAgICAgICAgICAgICAgICAvLyBhbmQgY29tcGVuc2F0ZSB3aGVuIGNh
bGN1bGF0aW5nIHRoZSBjb29yZGluYXRlcworICAgICAgICAgICAgICAgIGN0eC50ZXh0QmFzZWxp
bmUgPSAibWlkZGxlIjsKKworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhp
cy50aWNrcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdGljayA9IGF4
aXMudGlja3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICghdGljay5sYWJlbCB8fCB0aWNr
LnYgPCBheGlzLm1pbiB8fCB0aWNrLnYgPiBheGlzLm1heCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgIHZhciB4LCB5LCBvZmZzZXQgPSAw
LCBsaW5lOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRpY2subGlu
ZXMubGVuZ3RoOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0aWNrLmxp
bmVzW2tdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0g
IngiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHBsb3RPZmZzZXQubGVmdCAr
IGF4aXMucDJjKHRpY2sudikgLSBsaW5lLndpZHRoLzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGF4aXMucG9zaXRpb24gPT0gImJvdHRvbSIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHkgPSBib3gudG9wICsgYm94LnBhZGRpbmc7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYm94
LnRvcCArIGJveC5oZWlnaHQgLSBib3gucGFkZGluZyAtIHRpY2suaGVpZ2h0OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeSA9IHBsb3RPZmZzZXQudG9wICsgYXhpcy5wMmModGljay52
KSAtIHRpY2suaGVpZ2h0LzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMu
cG9zaXRpb24gPT0gImxlZnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0g
Ym94LmxlZnQgKyBib3gud2lkdGggLSBib3gucGFkZGluZyAtIGxpbmUud2lkdGg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4ID0gYm94LmxlZnQgKyBib3gucGFkZGluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjb3VudCBmb3IgbWlkZGxlIGFsaWduaW5n
IGFuZCBsaW5lIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBsaW5lLmhlaWdo
dC8yICsgb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxpbmUuaGVp
Z2h0OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEod2luZG93Lm9wZXJhICYmIHdp
bmRvdy5vcGVyYS52ZXJzaW9uKCkuc3BsaXQoJy4nKVswXSA8IDEyKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMRUdBQ1kgQlJPV1NFUiBGSVgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBRkZFQ1RTOiBPcGVyYSA8IDEyLjAwCisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByb3VuZCB0aGUgY29vcmRpbmF0ZXMgc2luY2UgT3BlcmEKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc3dpdGNoZXMgdG8gbW9yZSB1
Z2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIChwcm9iYWJseSBu
b24taGludGVkKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgdGhl
IHkgY29vcmRpbmF0ZXMgc2luY2UgaXQgc2VlbXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0byBiZSBvZmYgcHJldHR5IGNvbnNpc3RlbnRseSBjb21wYXJlZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBvdGhlciBicm93c2VycworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHggPSBNYXRoLmZsb29yKHgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHkgPSBNYXRoLmNlaWwoeSAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGxpbmUudGV4dCwgeCwgeSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IGRyYXdTZXJpZXMoc2VyaWVzKSB7CisgICAgICAgICAgICBpZiAoc2VyaWVzLmxpbmVzLnNob3cp
CisgICAgICAgICAgICAgICAgZHJhd1Nlcmllc0xpbmVzKHNlcmllcyk7CisgICAgICAgICAgICBp
ZiAoc2VyaWVzLmJhcnMuc2hvdykKKyAgICAgICAgICAgICAgICBkcmF3U2VyaWVzQmFycyhzZXJp
ZXMpOworICAgICAgICAgICAgaWYgKHNlcmllcy5wb2ludHMuc2hvdykKKyAgICAgICAgICAgICAg
ICBkcmF3U2VyaWVzUG9pbnRzKHNlcmllcyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBkcmF3U2VyaWVzTGluZXMoc2VyaWVzKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBwbG90TGlu
ZShkYXRhcG9pbnRzLCB4b2Zmc2V0LCB5b2Zmc2V0LCBheGlzeCwgYXhpc3kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcG9pbnRzID0gZGF0YXBvaW50cy5wb2ludHMsCisgICAgICAgICAgICAgICAg
ICAgIHBzID0gZGF0YXBvaW50cy5wb2ludHNpemUsCisgICAgICAgICAgICAgICAgICAgIHByZXZ4
ID0gbnVsbCwgcHJldnkgPSBudWxsOworCisgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgp
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBwczsgaSA8IHBvaW50cy5sZW5ndGg7IGkg
Kz0gcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0gcG9pbnRzW2kgLSBwc10sIHkx
ID0gcG9pbnRzW2kgLSBwcyArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBwb2lu
dHNbaV0sIHkyID0gcG9pbnRzW2kgKyAxXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoeDEg
PT0gbnVsbCB8fCB4MiA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHltaW4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHkxIDw9IHkyICYmIHkxIDwgYXhpc3kubWluKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeTIgPCBheGlzeS5taW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7ICAgLy8gbGluZSBzZWdtZW50IGlzIG91dHNpZGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbXB1dGUgbmV3IGludGVyc2VjdGlvbiBwb2ludAorICAgICAgICAgICAgICAg
ICAgICAgICAgeDEgPSAoYXhpc3kubWluIC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsg
eDE7CisgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IGF4aXN5Lm1pbjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5MiA8PSB5MSAmJiB5MiA8
IGF4aXN5Lm1pbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkxIDwgYXhpc3kubWlu
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgeDIgPSAoYXhpc3kubWluIC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsg
eDE7CisgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGF4aXN5Lm1pbjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGNsaXAgd2l0aCB5bWF4CisgICAg
ICAgICAgICAgICAgICAgIGlmICh5MSA+PSB5MiAmJiB5MSA+IGF4aXN5Lm1heCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHkyID4gYXhpc3kubWF4KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgeDEgPSAoYXhpc3ku
bWF4IC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7CisgICAgICAgICAgICAgICAg
ICAgICAgICB5MSA9IGF4aXN5Lm1heDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmICh5MiA+PSB5MSAmJiB5MiA+IGF4aXN5Lm1heCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHkxID4gYXhpc3kubWF4KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSAoYXhpc3ku
bWF4IC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7CisgICAgICAgICAgICAgICAg
ICAgICAgICB5MiA9IGF4aXN5Lm1heDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIC8vIGNsaXAgd2l0aCB4bWluCisgICAgICAgICAgICAgICAgICAgIGlmICh4
MSA8PSB4MiAmJiB4MSA8IGF4aXN4Lm1pbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHgyIDwgYXhpc3gubWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSAoYXhpc3gubWluIC0geDEpIC8gKHgyIC0geDEp
ICogKHkyIC0geTEpICsgeTE7CisgICAgICAgICAgICAgICAgICAgICAgICB4MSA9IGF4aXN4Lm1p
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4
MiA8PSB4MSAmJiB4MiA8IGF4aXN4Lm1pbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHgxIDwgYXhpc3gubWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSAoYXhpc3gubWluIC0geDEpIC8gKHgyIC0geDEp
ICogKHkyIC0geTEpICsgeTE7CisgICAgICAgICAgICAgICAgICAgICAgICB4MiA9IGF4aXN4Lm1p
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGNsaXAg
d2l0aCB4bWF4CisgICAgICAgICAgICAgICAgICAgIGlmICh4MSA+PSB4MiAmJiB4MSA+IGF4aXN4
Lm1heCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyID4gYXhpc3gubWF4KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgeTEgPSAoYXhpc3gubWF4IC0geDEpIC8gKHgyIC0geDEpICogKHkyIC0geTEpICsgeTE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB4MSA9IGF4aXN4Lm1heDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4MiA+PSB4MSAmJiB4MiA+IGF4aXN4
Lm1heCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgxID4gYXhpc3gubWF4KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgeTIgPSAoYXhpc3gubWF4IC0geDEpIC8gKHgyIC0geDEpICogKHkyIC0geTEpICsgeTE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB4MiA9IGF4aXN4Lm1heDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh4MSAhPSBwcmV2eCB8fCB5MSAhPSBwcmV2
eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oYXhpc3gucDJjKHgxKSArIHhv
ZmZzZXQsIGF4aXN5LnAyYyh5MSkgKyB5b2Zmc2V0KTsKKworICAgICAgICAgICAgICAgICAgICBw
cmV2eCA9IHgyOworICAgICAgICAgICAgICAgICAgICBwcmV2eSA9IHkyOworICAgICAgICAgICAg
ICAgICAgICBjdHgubGluZVRvKGF4aXN4LnAyYyh4MikgKyB4b2Zmc2V0LCBheGlzeS5wMmMoeTIp
ICsgeW9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN0eC5zdHJv
a2UoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gcGxvdExpbmVBcmVh
KGRhdGFwb2ludHMsIGF4aXN4LCBheGlzeSkgeworICAgICAgICAgICAgICAgIHZhciBwb2ludHMg
PSBkYXRhcG9pbnRzLnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgcHMgPSBkYXRhcG9pbnRz
LnBvaW50c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgYm90dG9tID0gTWF0aC5taW4oTWF0aC5t
YXgoMCwgYXhpc3kubWluKSwgYXhpc3kubWF4KSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAs
IHRvcCwgYXJlYU9wZW4gPSBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgeXBvcyA9IDEsIHNl
Z21lbnRTdGFydCA9IDAsIHNlZ21lbnRFbmQgPSAwOworCisgICAgICAgICAgICAgICAgLy8gd2Ug
cHJvY2VzcyBlYWNoIHNlZ21lbnQgaW4gdHdvIHR1cm5zLCBmaXJzdCBmb3J3YXJkCisgICAgICAg
ICAgICAgICAgLy8gZGlyZWN0aW9uIHRvIHNrZXRjaCBvdXQgdG9wLCB0aGVuIG9uY2Ugd2UgaGl0
IHRoZQorICAgICAgICAgICAgICAgIC8vIGVuZCB3ZSBnbyBiYWNrd2FyZHMgdG8gc2tldGNoIHRo
ZSBib3R0b20KKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAocHMgPiAwICYmIGkgPiBwb2ludHMubGVuZ3RoICsgcHMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBpICs9IHBzOyAvLyBwcyBp
cyBuZWdhdGl2ZSBpZiBnb2luZyBiYWNrd2FyZHMKKworICAgICAgICAgICAgICAgICAgICB2YXIg
eDEgPSBwb2ludHNbaSAtIHBzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gcG9pbnRz
W2kgLSBwcyArIHlwb3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBwb2ludHNbaV0s
IHkyID0gcG9pbnRzW2kgKyB5cG9zXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYXJlYU9w
ZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcyA+IDAgJiYgeDEgIT0gbnVsbCAm
JiB4MiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdHVybmlu
ZyBwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRFbmQgPSBpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBzID0gLXBzOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHlwb3MgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHMgPCAwICYmIGkgPT0gc2VnbWVudFN0YXJ0ICsgcHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBkb25lIHdpdGggdGhlIHJldmVyc2Ugc3dlZXAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdHguZmlsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFP
cGVuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMgPSAtcHM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeXBvcyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaSA9IHNlZ21lbnRTdGFydCA9IHNlZ21lbnRFbmQgKyBwczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh4MSA9PSBudWxsIHx8
IHgyID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBjbGlwIHggdmFsdWVzCisKKyAgICAgICAgICAgICAgICAgICAgLy8g
Y2xpcCB3aXRoIHhtaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHgxIDw9IHgyICYmIHgxIDwg
YXhpc3gubWluKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIgPCBheGlzeC5taW4p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB5MSA9IChheGlzeC5taW4gLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gYXhpc3gubWluOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHgyIDw9IHgxICYmIHgyIDwg
YXhpc3gubWluKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDEgPCBheGlzeC5taW4p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB5MiA9IChheGlzeC5taW4gLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gYXhpc3gubWluOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHhtYXgKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHgxID49IHgyICYmIHgxID4gYXhpc3gubWF4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeDIgPiBheGlzeC5tYXgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChheGlzeC5t
YXggLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHgxID0gYXhpc3gubWF4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHgyID49IHgxICYmIHgyID4gYXhpc3gubWF4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeDEgPiBheGlzeC5tYXgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IChheGlzeC5t
YXggLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHgyID0gYXhpc3gubWF4OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcmVhT3BlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b3BlbiBhcmVhCisgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGF4aXN4LnAyYyh4MSksIGF4aXN5LnAyYyhi
b3R0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFPcGVuID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBmaXJzdCBjaGVj
ayB0aGUgY2FzZSB3aGVyZSBib3RoIGlzIG91dHNpZGUKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHkxID49IGF4aXN5Lm1heCAmJiB5MiA+PSBheGlzeS5tYXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgxKSwgYXhpc3kucDJjKGF4aXN5Lm1heCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDIpLCBheGlzeS5w
MmMoYXhpc3kubWF4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5MSA8PSBheGlz
eS5taW4gJiYgeTIgPD0gYXhpc3kubWluKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgu
bGluZVRvKGF4aXN4LnAyYyh4MSksIGF4aXN5LnAyYyhheGlzeS5taW4pKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgyKSwgYXhpc3kucDJjKGF4aXN5Lm1p
bikpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGl0J3MgYSBiaXQgbW9yZSBjb21w
bGljYXRlZCwgdGhlcmUgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgLy8gYmUgYSBmbGF0IG1h
eGVkIG91dCByZWN0YW5nbGUgZmlyc3QsIHRoZW4gYQorICAgICAgICAgICAgICAgICAgICAvLyB0
cmlhbmd1bGFyIGN1dG91dCBvciByZXZlcnNlOyB0byBmaW5kIHRoZXNlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgeCB2YWx1ZXMKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHgxb2xkID0geDEsIHgyb2xkID0geDI7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY2xpcCB0aGUgeSB2YWx1ZXMsIHdpdGhvdXQgc2hvcnRjdXR0aW5nLCB3ZQorICAgICAg
ICAgICAgICAgICAgICAvLyBnbyB0aHJvdWdoIGFsbCBjYXNlcyBpbiB0dXJuCisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHltaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHkx
IDw9IHkyICYmIHkxIDwgYXhpc3kubWluICYmIHkyID49IGF4aXN5Lm1pbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgeDEgPSAoYXhpc3kubWluIC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0g
eDEpICsgeDE7CisgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IGF4aXN5Lm1pbjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5MiA8PSB5MSAm
JiB5MiA8IGF4aXN5Lm1pbiAmJiB5MSA+PSBheGlzeS5taW4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHgyID0gKGF4aXN5Lm1pbiAtIHkxKSAvICh5MiAtIHkxKSAqICh4MiAtIHgxKSArIHgx
OworICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSBheGlzeS5taW47CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIHdpdGggeW1heAorICAgICAg
ICAgICAgICAgICAgICBpZiAoeTEgPj0geTIgJiYgeTEgPiBheGlzeS5tYXggJiYgeTIgPD0gYXhp
c3kubWF4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4MSA9IChheGlzeS5tYXggLSB5MSkg
LyAoeTIgLSB5MSkgKiAoeDIgLSB4MSkgKyB4MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkx
ID0gYXhpc3kubWF4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHkyID49IHkxICYmIHkyID4gYXhpc3kubWF4ICYmIHkxIDw9IGF4aXN5Lm1heCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSAoYXhpc3kubWF4IC0geTEpIC8gKHkyIC0g
eTEpICogKHgyIC0geDEpICsgeDE7CisgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGF4aXN5
Lm1heDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGlm
IHRoZSB4IHZhbHVlIHdhcyBjaGFuZ2VkIHdlIGdvdCBhIHJlY3RhbmdsZQorICAgICAgICAgICAg
ICAgICAgICAvLyB0byBmaWxsCisgICAgICAgICAgICAgICAgICAgIGlmICh4MSAhPSB4MW9sZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDFvbGQpLCBh
eGlzeS5wMmMoeTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGdvZXMgdG8gKHgx
LCB5MSksIGJ1dCB3ZSBmaWxsIHRoYXQgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIC8vIGZpbGwgdHJpYW5ndWxhciBzZWN0aW9uLCB0aGlzIHNvbWV0
aW1lcyByZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gcmVkdW5kYW50IHBvaW50cyBp
ZiAoeDEsIHkxKSBoYXNuJ3QgY2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHBy
ZXZpb3VzIGxpbmUgdG8sIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0CisgICAgICAgICAgICAgICAg
ICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgxKSwgYXhpc3kucDJjKHkxKSk7CisgICAgICAgICAg
ICAgICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgyKSwgYXhpc3kucDJjKHkyKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZmlsbCB0aGUgb3RoZXIgcmVjdGFuZ2xlIGlmIGl0J3MgdGhl
cmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHgyICE9IHgyb2xkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdHgubGluZVRvKGF4aXN4LnAyYyh4MiksIGF4aXN5LnAyYyh5MikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDJvbGQpLCBheGlzeS5w
MmMoeTIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY3R4LnNhdmUoKTsKKyAgICAgICAgICAgIGN0eC50cmFu
c2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7CisgICAgICAgICAgICBjdHgu
bGluZUpvaW4gPSAicm91bmQiOworCisgICAgICAgICAgICB2YXIgbHcgPSBzZXJpZXMubGluZXMu
bGluZVdpZHRoLAorICAgICAgICAgICAgICAgIHN3ID0gc2VyaWVzLnNoYWRvd1NpemU7CisgICAg
ICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgYW5vdGhlciBmb3JtIG9mIHNoYWRvdyB3aGVuIGZp
bGxpbmcgaXMgdHVybmVkIG9uCisgICAgICAgICAgICBpZiAobHcgPiAwICYmIHN3ID4gMCkgewor
ICAgICAgICAgICAgICAgIC8vIGRyYXcgc2hhZG93IGFzIGEgdGhpY2sgYW5kIHRoaW4gbGluZSB3
aXRoIHRyYW5zcGFyZW5jeQorICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBzdzsKKyAg
ICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAicmdiYSgwLDAsMCwwLjEpIjsKKyAgICAg
ICAgICAgICAgICAvLyBwb3NpdGlvbiBzaGFkb3cgYXQgYW5nbGUgZnJvbSB0aGUgbWlkIG9mIGxp
bmUKKyAgICAgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLlBJLzE4OworICAgICAgICAgICAg
ICAgIHBsb3RMaW5lKHNlcmllcy5kYXRhcG9pbnRzLCBNYXRoLnNpbihhbmdsZSkgKiAobHcvMiAr
IHN3LzIpLCBNYXRoLmNvcyhhbmdsZSkgKiAobHcvMiArIHN3LzIpLCBzZXJpZXMueGF4aXMsIHNl
cmllcy55YXhpcyk7CisgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHN3LzI7CisgICAg
ICAgICAgICAgICAgcGxvdExpbmUoc2VyaWVzLmRhdGFwb2ludHMsIE1hdGguc2luKGFuZ2xlKSAq
IChsdy8yICsgc3cvNCksIE1hdGguY29zKGFuZ2xlKSAqIChsdy8yICsgc3cvNCksIHNlcmllcy54
YXhpcywgc2VyaWVzLnlheGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3R4Lmxp
bmVXaWR0aCA9IGx3OworICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc2VyaWVzLmNvbG9y
OworICAgICAgICAgICAgdmFyIGZpbGxTdHlsZSA9IGdldEZpbGxTdHlsZShzZXJpZXMubGluZXMs
IHNlcmllcy5jb2xvciwgMCwgcGxvdEhlaWdodCk7CisgICAgICAgICAgICBpZiAoZmlsbFN0eWxl
KSB7CisgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTsKKyAgICAgICAg
ICAgICAgICBwbG90TGluZUFyZWEoc2VyaWVzLmRhdGFwb2ludHMsIHNlcmllcy54YXhpcywgc2Vy
aWVzLnlheGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGx3ID4gMCkKKyAg
ICAgICAgICAgICAgICBwbG90TGluZShzZXJpZXMuZGF0YXBvaW50cywgMCwgMCwgc2VyaWVzLnhh
eGlzLCBzZXJpZXMueWF4aXMpOworICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGRyYXdTZXJpZXNQb2ludHMoc2VyaWVzKSB7CisgICAgICAg
ICAgICBmdW5jdGlvbiBwbG90UG9pbnRzKGRhdGFwb2ludHMsIHJhZGl1cywgZmlsbFN0eWxlLCBv
ZmZzZXQsIHNoYWRvdywgYXhpc3gsIGF4aXN5LCBzeW1ib2wpIHsKKyAgICAgICAgICAgICAgICB2
YXIgcG9pbnRzID0gZGF0YXBvaW50cy5wb2ludHMsIHBzID0gZGF0YXBvaW50cy5wb2ludHNpemU7
CisKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkg
Kz0gcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBwb2ludHNbaV0sIHkgPSBwb2lu
dHNbaSArIDFdOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBudWxsIHx8IHggPCBheGlz
eC5taW4gfHwgeCA+IGF4aXN4Lm1heCB8fCB5IDwgYXhpc3kubWluIHx8IHkgPiBheGlzeS5tYXgp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAg
ICBjdHguYmVnaW5QYXRoKCk7CisgICAgICAgICAgICAgICAgICAgIHggPSBheGlzeC5wMmMoeCk7
CisgICAgICAgICAgICAgICAgICAgIHkgPSBheGlzeS5wMmMoeSkgKyBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzeW1ib2wgPT0gImNpcmNsZSIpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgMCwgc2hhZG93ID8gTWF0aC5QSSA6IE1hdGguUEkg
KiAyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN5bWJvbChjdHgsIHgsIHksIHJhZGl1cywgc2hhZG93KTsKKyAgICAgICAgICAgICAg
ICAgICAgY3R4LmNsb3NlUGF0aCgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChmaWxsU3R5
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbCgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7CisgICAgICAgICAgICBj
dHgudHJhbnNsYXRlKHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOworCisgICAgICAg
ICAgICB2YXIgbHcgPSBzZXJpZXMucG9pbnRzLmxpbmVXaWR0aCwKKyAgICAgICAgICAgICAgICBz
dyA9IHNlcmllcy5zaGFkb3dTaXplLAorICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNlcmllcy5w
b2ludHMucmFkaXVzLAorICAgICAgICAgICAgICAgIHN5bWJvbCA9IHNlcmllcy5wb2ludHMuc3lt
Ym9sOworICAgICAgICAgICAgaWYgKGx3ID4gMCAmJiBzdyA+IDApIHsKKyAgICAgICAgICAgICAg
ICAvLyBkcmF3IHNoYWRvdyBpbiB0d28gc3RlcHMKKyAgICAgICAgICAgICAgICB2YXIgdyA9IHN3
IC8gMjsKKyAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gdzsKKyAgICAgICAgICAgICAg
ICBjdHguc3Ryb2tlU3R5bGUgPSAicmdiYSgwLDAsMCwwLjEpIjsKKyAgICAgICAgICAgICAgICBw
bG90UG9pbnRzKHNlcmllcy5kYXRhcG9pbnRzLCByYWRpdXMsIG51bGwsIHcgKyB3LzIsIHRydWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXMueGF4aXMsIHNlcmllcy55YXhpcywg
c3ltYm9sKTsKKworICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDAsMCww
LDAuMikiOworICAgICAgICAgICAgICAgIHBsb3RQb2ludHMoc2VyaWVzLmRhdGFwb2ludHMsIHJh
ZGl1cywgbnVsbCwgdy8yLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVz
LnhheGlzLCBzZXJpZXMueWF4aXMsIHN5bWJvbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGN0eC5saW5lV2lkdGggPSBsdzsKKyAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHNl
cmllcy5jb2xvcjsKKyAgICAgICAgICAgIHBsb3RQb2ludHMoc2VyaWVzLmRhdGFwb2ludHMsIHJh
ZGl1cywKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsbFN0eWxlKHNlcmllcy5wb2ludHMs
IHNlcmllcy5jb2xvciksIDAsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXMu
eGF4aXMsIHNlcmllcy55YXhpcywgc3ltYm9sKTsKKyAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkcmF3QmFyKHgsIHksIGIsIGJhckxlZnQs
IGJhclJpZ2h0LCBvZmZzZXQsIGZpbGxTdHlsZUNhbGxiYWNrLCBheGlzeCwgYXhpc3ksIGMsIGhv
cml6b250YWwsIGxpbmVXaWR0aCkgeworICAgICAgICAgICAgdmFyIGxlZnQsIHJpZ2h0LCBib3R0
b20sIHRvcCwKKyAgICAgICAgICAgICAgICBkcmF3TGVmdCwgZHJhd1JpZ2h0LCBkcmF3VG9wLCBk
cmF3Qm90dG9tLAorICAgICAgICAgICAgICAgIHRtcDsKKworICAgICAgICAgICAgLy8gaW4gaG9y
aXpvbnRhbCBtb2RlLCB3ZSBzdGFydCB0aGUgYmFyIGZyb20gdGhlIGxlZnQKKyAgICAgICAgICAg
IC8vIGluc3RlYWQgb2YgZnJvbSB0aGUgYm90dG9tIHNvIGl0IGFwcGVhcnMgdG8gYmUKKyAgICAg
ICAgICAgIC8vIGhvcml6b250YWwgcmF0aGVyIHRoYW4gdmVydGljYWwKKyAgICAgICAgICAgIGlm
IChob3Jpem9udGFsKSB7CisgICAgICAgICAgICAgICAgZHJhd0JvdHRvbSA9IGRyYXdSaWdodCA9
IGRyYXdUb3AgPSB0cnVlOworICAgICAgICAgICAgICAgIGRyYXdMZWZ0ID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbGVmdCA9IGI7CisgICAgICAgICAgICAgICAgcmlnaHQgPSB4OworICAgICAg
ICAgICAgICAgIHRvcCA9IHkgKyBiYXJMZWZ0OworICAgICAgICAgICAgICAgIGJvdHRvbSA9IHkg
KyBiYXJSaWdodDsKKworICAgICAgICAgICAgICAgIC8vIGFjY291bnQgZm9yIG5lZ2F0aXZlIGJh
cnMKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQgPCBsZWZ0KSB7CisgICAgICAgICAgICAgICAg
ICAgIHRtcCA9IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IGxlZnQ7CisgICAg
ICAgICAgICAgICAgICAgIGxlZnQgPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIGRyYXdMZWZ0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZHJhd1JpZ2h0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgZHJhd0xlZnQgPSBkcmF3UmlnaHQgPSBkcmF3VG9wID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBkcmF3Qm90dG9tID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbGVmdCA9IHggKyBiYXJM
ZWZ0OworICAgICAgICAgICAgICAgIHJpZ2h0ID0geCArIGJhclJpZ2h0OworICAgICAgICAgICAg
ICAgIGJvdHRvbSA9IGI7CisgICAgICAgICAgICAgICAgdG9wID0geTsKKworICAgICAgICAgICAg
ICAgIC8vIGFjY291bnQgZm9yIG5lZ2F0aXZlIGJhcnMKKyAgICAgICAgICAgICAgICBpZiAodG9w
IDwgYm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRvcDsKKyAgICAgICAgICAg
ICAgICAgICAgdG9wID0gYm90dG9tOworICAgICAgICAgICAgICAgICAgICBib3R0b20gPSB0bXA7
CisgICAgICAgICAgICAgICAgICAgIGRyYXdCb3R0b20gPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBkcmF3VG9wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBjbGlwCisgICAgICAgICAgICBpZiAocmlnaHQgPCBheGlzeC5taW4g
fHwgbGVmdCA+IGF4aXN4Lm1heCB8fAorICAgICAgICAgICAgICAgIHRvcCA8IGF4aXN5Lm1pbiB8
fCBib3R0b20gPiBheGlzeS5tYXgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBpZiAobGVmdCA8IGF4aXN4Lm1pbikgeworICAgICAgICAgICAgICAgIGxlZnQgPSBheGlz
eC5taW47CisgICAgICAgICAgICAgICAgZHJhd0xlZnQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHJpZ2h0ID4gYXhpc3gubWF4KSB7CisgICAgICAgICAgICAgICAg
cmlnaHQgPSBheGlzeC5tYXg7CisgICAgICAgICAgICAgICAgZHJhd1JpZ2h0ID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChib3R0b20gPCBheGlzeS5taW4pIHsKKyAg
ICAgICAgICAgICAgICBib3R0b20gPSBheGlzeS5taW47CisgICAgICAgICAgICAgICAgZHJhd0Jv
dHRvbSA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9wID4gYXhp
c3kubWF4KSB7CisgICAgICAgICAgICAgICAgdG9wID0gYXhpc3kubWF4OworICAgICAgICAgICAg
ICAgIGRyYXdUb3AgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVmdCA9
IGF4aXN4LnAyYyhsZWZ0KTsKKyAgICAgICAgICAgIGJvdHRvbSA9IGF4aXN5LnAyYyhib3R0b20p
OworICAgICAgICAgICAgcmlnaHQgPSBheGlzeC5wMmMocmlnaHQpOworICAgICAgICAgICAgdG9w
ID0gYXhpc3kucDJjKHRvcCk7CisKKyAgICAgICAgICAgIC8vIGZpbGwgdGhlIGJhcgorICAgICAg
ICAgICAgaWYgKGZpbGxTdHlsZUNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgYy5iZWdpblBh
dGgoKTsKKyAgICAgICAgICAgICAgICBjLm1vdmVUbyhsZWZ0LCBib3R0b20pOworICAgICAgICAg
ICAgICAgIGMubGluZVRvKGxlZnQsIHRvcCk7CisgICAgICAgICAgICAgICAgYy5saW5lVG8ocmln
aHQsIHRvcCk7CisgICAgICAgICAgICAgICAgYy5saW5lVG8ocmlnaHQsIGJvdHRvbSk7CisgICAg
ICAgICAgICAgICAgYy5maWxsU3R5bGUgPSBmaWxsU3R5bGVDYWxsYmFjayhib3R0b20sIHRvcCk7
CisgICAgICAgICAgICAgICAgYy5maWxsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIGRyYXcgb3V0bGluZQorICAgICAgICAgICAgaWYgKGxpbmVXaWR0aCA+IDAgJiYgKGRyYXdM
ZWZ0IHx8IGRyYXdSaWdodCB8fCBkcmF3VG9wIHx8IGRyYXdCb3R0b20pKSB7CisgICAgICAgICAg
ICAgICAgYy5iZWdpblBhdGgoKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbmxpbmUg
bW92ZVRvIGlzIGJ1Z2d5IHdpdGggZXhjYW52YXMKKyAgICAgICAgICAgICAgICBjLm1vdmVUbyhs
ZWZ0LCBib3R0b20gKyBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChkcmF3TGVmdCkKKyAg
ICAgICAgICAgICAgICAgICAgYy5saW5lVG8obGVmdCwgdG9wICsgb2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGMubW92ZVRvKGxlZnQsIHRvcCArIG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKGRyYXdUb3ApCisgICAgICAgICAgICAgICAgICAg
IGMubGluZVRvKHJpZ2h0LCB0b3AgKyBvZmZzZXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgYy5tb3ZlVG8ocmlnaHQsIHRvcCArIG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgaWYgKGRyYXdSaWdodCkKKyAgICAgICAgICAgICAgICAgICAgYy5saW5lVG8ocmln
aHQsIGJvdHRvbSArIG9mZnNldCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBjLm1vdmVUbyhyaWdodCwgYm90dG9tICsgb2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICBpZiAoZHJhd0JvdHRvbSkKKyAgICAgICAgICAgICAgICAgICAgYy5saW5lVG8obGVmdCwgYm90
dG9tICsgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGMubW92ZVRvKGxlZnQsIGJvdHRvbSArIG9mZnNldCk7CisgICAgICAgICAgICAgICAgYy5zdHJv
a2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRyYXdT
ZXJpZXNCYXJzKHNlcmllcykgeworICAgICAgICAgICAgZnVuY3Rpb24gcGxvdEJhcnMoZGF0YXBv
aW50cywgYmFyTGVmdCwgYmFyUmlnaHQsIG9mZnNldCwgZmlsbFN0eWxlQ2FsbGJhY2ssIGF4aXN4
LCBheGlzeSkgeworICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50
cywgcHMgPSBkYXRhcG9pbnRzLnBvaW50c2l6ZTsKKworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSBwcykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAocG9pbnRzW2ldID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgZHJhd0Jhcihwb2ludHNbaV0sIHBvaW50c1tpICsgMV0s
IHBvaW50c1tpICsgMl0sIGJhckxlZnQsIGJhclJpZ2h0LCBvZmZzZXQsIGZpbGxTdHlsZUNhbGxi
YWNrLCBheGlzeCwgYXhpc3ksIGN0eCwgc2VyaWVzLmJhcnMuaG9yaXpvbnRhbCwgc2VyaWVzLmJh
cnMubGluZVdpZHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGN0eC5zYXZlKCk7CisgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHBsb3RPZmZzZXQu
bGVmdCwgcGxvdE9mZnNldC50b3ApOworCisgICAgICAgICAgICAvLyBGSVhNRTogZmlndXJlIG91
dCBhIHdheSB0byBhZGQgc2hhZG93cyAoZm9yIGluc3RhbmNlIGFsb25nIHRoZSByaWdodCBlZGdl
KQorICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHNlcmllcy5iYXJzLmxpbmVXaWR0aDsKKyAg
ICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHNlcmllcy5jb2xvcjsKKworICAgICAgICAgICAg
dmFyIGJhckxlZnQ7CisKKyAgICAgICAgICAgIHN3aXRjaCAoc2VyaWVzLmJhcnMuYWxpZ24pIHsK
KyAgICAgICAgICAgICAgICBjYXNlICJsZWZ0IjoKKyAgICAgICAgICAgICAgICAgICAgYmFyTGVm
dCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
InJpZ2h0IjoKKyAgICAgICAgICAgICAgICAgICAgYmFyTGVmdCA9IC1zZXJpZXMuYmFycy5iYXJX
aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAi
Y2VudGVyIjoKKyAgICAgICAgICAgICAgICAgICAgYmFyTGVmdCA9IC1zZXJpZXMuYmFycy5iYXJX
aWR0aCAvIDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXIg
YWxpZ25tZW50OiAiICsgc2VyaWVzLmJhcnMuYWxpZ24pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgZmlsbFN0eWxlQ2FsbGJhY2sgPSBzZXJpZXMuYmFycy5maWxsID8gZnVuY3Rp
b24gKGJvdHRvbSwgdG9wKSB7IHJldHVybiBnZXRGaWxsU3R5bGUoc2VyaWVzLmJhcnMsIHNlcmll
cy5jb2xvciwgYm90dG9tLCB0b3ApOyB9IDogbnVsbDsKKyAgICAgICAgICAgIHBsb3RCYXJzKHNl
cmllcy5kYXRhcG9pbnRzLCBiYXJMZWZ0LCBiYXJMZWZ0ICsgc2VyaWVzLmJhcnMuYmFyV2lkdGgs
IDAsIGZpbGxTdHlsZUNhbGxiYWNrLCBzZXJpZXMueGF4aXMsIHNlcmllcy55YXhpcyk7CisgICAg
ICAgICAgICBjdHgucmVzdG9yZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0
RmlsbFN0eWxlKGZpbGxvcHRpb25zLCBzZXJpZXNDb2xvciwgYm90dG9tLCB0b3ApIHsKKyAgICAg
ICAgICAgIHZhciBmaWxsID0gZmlsbG9wdGlvbnMuZmlsbDsKKyAgICAgICAgICAgIGlmICghZmls
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgaWYgKGZpbGxv
cHRpb25zLmZpbGxDb2xvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29sb3JPckdyYWRp
ZW50KGZpbGxvcHRpb25zLmZpbGxDb2xvciwgYm90dG9tLCB0b3AsIHNlcmllc0NvbG9yKTsKKwor
ICAgICAgICAgICAgdmFyIGMgPSAkLmNvbG9yLnBhcnNlKHNlcmllc0NvbG9yKTsKKyAgICAgICAg
ICAgIGMuYSA9IHR5cGVvZiBmaWxsID09ICJudW1iZXIiID8gZmlsbCA6IDAuNDsKKyAgICAgICAg
ICAgIGMubm9ybWFsaXplKCk7CisgICAgICAgICAgICByZXR1cm4gYy50b1N0cmluZygpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5zZXJ0TGVnZW5kKCkgeworCisgICAgICAgICAg
ICBwbGFjZWhvbGRlci5maW5kKCIubGVnZW5kIikucmVtb3ZlKCk7CisKKyAgICAgICAgICAgIGlm
ICghb3B0aW9ucy5sZWdlbmQuc2hvdykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHZhciBmcmFnbWVudHMgPSBbXSwgZW50cmllcyA9IFtdLCByb3dTdGFydGVkID0gZmFs
c2UsCisgICAgICAgICAgICAgICAgbGYgPSBvcHRpb25zLmxlZ2VuZC5sYWJlbEZvcm1hdHRlciwg
cywgbGFiZWw7CisKKyAgICAgICAgICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBsZWdlbmQgZW50cmll
cywgd2l0aCBlYWNoIGhhdmluZyBhIGxhYmVsIGFuZCBhIGNvbG9yCisKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAg
cyA9IHNlcmllc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAocy5sYWJlbCkgeworICAgICAgICAg
ICAgICAgICAgICBsYWJlbCA9IGxmID8gbGYocy5sYWJlbCwgcykgOiBzLmxhYmVsOworICAgICAg
ICAgICAgICAgICAgICBpZiAobGFiZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJp
ZXMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBzLmNvbG9yCisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU29ydCB0aGUgbGVnZW5kIHVzaW5nIGVpdGhl
ciB0aGUgZGVmYXVsdCBvciBhIGN1c3RvbSBjb21wYXJhdG9yCisKKyAgICAgICAgICAgIGlmIChv
cHRpb25zLmxlZ2VuZC5zb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9u
KG9wdGlvbnMubGVnZW5kLnNvcnRlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cmllcy5z
b3J0KG9wdGlvbnMubGVnZW5kLnNvcnRlZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGFzY2VuZGluZyA9IG9wdGlvbnMubGVnZW5kLnNvcnRlZCAh
PSAiZGVzY2VuZGluZyI7CisgICAgICAgICAgICAgICAgICAgIGVudHJpZXMuc29ydChmdW5jdGlv
bihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbCA9PSBiLmxh
YmVsID8gMCA6ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYS5sYWJlbCA8IGIubGFi
ZWwpICE9IGFzY2VuZGluZyA/IDEgOiAtMSAgIC8vIExvZ2ljYWwgWE9SCisgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIG1hcmt1cCBmb3IgdGhl
IGxpc3Qgb2YgZW50cmllcywgaW4gdGhlaXIgZmluYWwgb3JkZXIKKworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CisKKyAgICAgICAgICAgICAg
ICB2YXIgZW50cnkgPSBlbnRyaWVzW2ldOworCisgICAgICAgICAgICAgICAgaWYgKGkgJSBvcHRp
b25zLmxlZ2VuZC5ub0NvbHVtbnMgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocm93
U3RhcnRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cy5wdXNoKCc8L3RyPicp
OworICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMucHVzaCgnPHRyPicpOworICAgICAgICAg
ICAgICAgICAgICByb3dTdGFydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBmcmFnbWVudHMucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFz
cz0ibGVnZW5kQ29sb3JCb3giPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgJyArIG9wdGlv
bnMubGVnZW5kLmxhYmVsQm94Qm9yZGVyQ29sb3IgKyAnO3BhZGRpbmc6MXB4Ij48ZGl2IHN0eWxl
PSJ3aWR0aDo0cHg7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCAnICsgZW50cnkuY29sb3IgKyAn
O292ZXJmbG93OmhpZGRlbiI+PC9kaXY+PC9kaXY+PC90ZD4nICsKKyAgICAgICAgICAgICAgICAg
ICAgJzx0ZCBjbGFzcz0ibGVnZW5kTGFiZWwiPicgKyBlbnRyeS5sYWJlbCArICc8L3RkPicKKyAg
ICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm93U3Rh
cnRlZCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudHMucHVzaCgnPC90cj4nKTsKKworICAgICAg
ICAgICAgaWYgKGZyYWdtZW50cy5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIHZhciB0YWJsZSA9ICc8dGFibGUgc3R5bGU9ImZvbnQtc2l6ZTpzbWFs
bGVyO2NvbG9yOicgKyBvcHRpb25zLmdyaWQuY29sb3IgKyAnIj4nICsgZnJhZ21lbnRzLmpvaW4o
IiIpICsgJzwvdGFibGU+JzsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZC5jb250YWlu
ZXIgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAkKG9wdGlvbnMubGVnZW5kLmNvbnRhaW5lciku
aHRtbCh0YWJsZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9z
ID0gIiIsCisgICAgICAgICAgICAgICAgICAgIHAgPSBvcHRpb25zLmxlZ2VuZC5wb3NpdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgbSA9IG9wdGlvbnMubGVnZW5kLm1hcmdpbjsKKyAgICAgICAg
ICAgICAgICBpZiAobVswXSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICBtID0gW20sIG1d
OworICAgICAgICAgICAgICAgIGlmIChwLmNoYXJBdCgwKSA9PSAibiIpCisgICAgICAgICAgICAg
ICAgICAgIHBvcyArPSAndG9wOicgKyAobVsxXSArIHBsb3RPZmZzZXQudG9wKSArICdweDsnOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAuY2hhckF0KDApID09ICJzIikKKyAgICAgICAgICAg
ICAgICAgICAgcG9zICs9ICdib3R0b206JyArIChtWzFdICsgcGxvdE9mZnNldC5ib3R0b20pICsg
J3B4Oyc7CisgICAgICAgICAgICAgICAgaWYgKHAuY2hhckF0KDEpID09ICJlIikKKyAgICAgICAg
ICAgICAgICAgICAgcG9zICs9ICdyaWdodDonICsgKG1bMF0gKyBwbG90T2Zmc2V0LnJpZ2h0KSAr
ICdweDsnOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAuY2hhckF0KDEpID09ICJ3IikKKyAg
ICAgICAgICAgICAgICAgICAgcG9zICs9ICdsZWZ0OicgKyAobVswXSArIHBsb3RPZmZzZXQubGVm
dCkgKyAncHg7JzsKKyAgICAgICAgICAgICAgICB2YXIgbGVnZW5kID0gJCgnPGRpdiBjbGFzcz0i
bGVnZW5kIj4nICsgdGFibGUucmVwbGFjZSgnc3R5bGU9IicsICdzdHlsZT0icG9zaXRpb246YWJz
b2x1dGU7JyArIHBvcyArJzsnKSArICc8L2Rpdj4nKS5hcHBlbmRUbyhwbGFjZWhvbGRlcik7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVnZW5kLmJhY2tncm91bmRPcGFjaXR5ICE9IDAu
MCkgeworICAgICAgICAgICAgICAgICAgICAvLyBwdXQgaW4gdGhlIHRyYW5zcGFyZW50IGJhY2tn
cm91bmQKKyAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVseSB0byBhdm9pZCBibGVuZGVk
IGxhYmVscyBhbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWwgYm94ZXMKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGMgPSBvcHRpb25zLmxlZ2VuZC5iYWNrZ3JvdW5kQ29sb3I7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGMgPSBvcHRpb25zLmdyaWQuYmFja2dyb3VuZENvbG9yOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGMgJiYgdHlwZW9mIGMgPT0gInN0cmluZyIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYyA9ICQuY29sb3IucGFyc2UoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICQuY29sb3IuZXh0cmFjdChsZWdlbmQs
ICdiYWNrZ3JvdW5kLWNvbG9yJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjLmEgPSAxOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gbGVnZW5kLmNoaWxkcmVuKCk7
CisgICAgICAgICAgICAgICAgICAgICQoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dp
ZHRoOicgKyBkaXYud2lkdGgoKSArICdweDtoZWlnaHQ6JyArIGRpdi5oZWlnaHQoKSArICdweDsn
ICsgcG9zICsnYmFja2dyb3VuZC1jb2xvcjonICsgYyArICc7Ij4gPC9kaXY+JykucHJlcGVuZFRv
KGxlZ2VuZCkuY3NzKCdvcGFjaXR5Jywgb3B0aW9ucy5sZWdlbmQuYmFja2dyb3VuZE9wYWNpdHkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisKKyAgICAg
ICAgLy8gaW50ZXJhY3RpdmUgZmVhdHVyZXMKKworICAgICAgICB2YXIgaGlnaGxpZ2h0cyA9IFtd
LAorICAgICAgICAgICAgcmVkcmF3VGltZW91dCA9IG51bGw7CisKKyAgICAgICAgLy8gcmV0dXJu
cyB0aGUgZGF0YSBpdGVtIHRoZSBtb3VzZSBpcyBvdmVyLCBvciBudWxsIGlmIG5vbmUgaXMgZm91
bmQKKyAgICAgICAgZnVuY3Rpb24gZmluZE5lYXJieUl0ZW0obW91c2VYLCBtb3VzZVksIHNlcmll
c0ZpbHRlcikgeworICAgICAgICAgICAgdmFyIG1heERpc3RhbmNlID0gb3B0aW9ucy5ncmlkLm1v
dXNlQWN0aXZlUmFkaXVzLAorICAgICAgICAgICAgICAgIHNtYWxsZXN0RGlzdGFuY2UgPSBtYXhE
aXN0YW5jZSAqIG1heERpc3RhbmNlICsgMSwKKyAgICAgICAgICAgICAgICBpdGVtID0gbnVsbCwg
Zm91bmRQb2ludCA9IGZhbHNlLCBpLCBqLCBwczsKKworICAgICAgICAgICAgZm9yIChpID0gc2Vy
aWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXJp
ZXNGaWx0ZXIoc2VyaWVzW2ldKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICB2YXIgcyA9IHNlcmllc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgYXhp
c3ggPSBzLnhheGlzLAorICAgICAgICAgICAgICAgICAgICBheGlzeSA9IHMueWF4aXMsCisgICAg
ICAgICAgICAgICAgICAgIHBvaW50cyA9IHMuZGF0YXBvaW50cy5wb2ludHMsCisgICAgICAgICAg
ICAgICAgICAgIG14ID0gYXhpc3guYzJwKG1vdXNlWCksIC8vIHByZWNvbXB1dGUgc29tZSBzdHVm
ZiB0byBtYWtlIHRoZSBsb29wIGZhc3RlcgorICAgICAgICAgICAgICAgICAgICBteSA9IGF4aXN5
LmMycChtb3VzZVkpLAorICAgICAgICAgICAgICAgICAgICBtYXh4ID0gbWF4RGlzdGFuY2UgLyBh
eGlzeC5zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgbWF4eSA9IG1heERpc3RhbmNlIC8gYXhp
c3kuc2NhbGU7CisKKyAgICAgICAgICAgICAgICBwcyA9IHMuZGF0YXBvaW50cy5wb2ludHNpemU7
CisgICAgICAgICAgICAgICAgLy8gd2l0aCBpbnZlcnNlIHRyYW5zZm9ybXMsIHdlIGNhbid0IHVz
ZSB0aGUgbWF4eC9tYXh5CisgICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uLCBzYWRseQor
ICAgICAgICAgICAgICAgIGlmIChheGlzeC5vcHRpb25zLmludmVyc2VUcmFuc2Zvcm0pCisgICAg
ICAgICAgICAgICAgICAgIG1heHggPSBOdW1iZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgICAg
IGlmIChheGlzeS5vcHRpb25zLmludmVyc2VUcmFuc2Zvcm0pCisgICAgICAgICAgICAgICAgICAg
IG1heHkgPSBOdW1iZXIuTUFYX1ZBTFVFOworCisgICAgICAgICAgICAgICAgaWYgKHMubGluZXMu
c2hvdyB8fCBzLnBvaW50cy5zaG93KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7
IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IHBzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgeCA9IHBvaW50c1tqXSwgeSA9IHBvaW50c1tqICsgMV07CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcG9pbnRzIGFuZCBsaW5lcywgdGhl
IGN1cnNvciBtdXN0IGJlIHdpdGhpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjZXJ0
YWluIGRpc3RhbmNlIHRvIHRoZSBkYXRhIHBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeCAtIG14ID4gbWF4eCB8fCB4IC0gbXggPCAtbWF4eCB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHkgLSBteSA+IG1heHkgfHwgeSAtIG15IDwgLW1heHkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGhhdmUgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcyBpbiBwaXhlbHMsIG5vdCBpbgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZGF0YSB1bml0cywgYmVjYXVzZSB0aGUgc2NhbGVzIG9mIHRoZSBh
eGVzIG1heSBiZSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkeCA9IE1h
dGguYWJzKGF4aXN4LnAyYyh4KSAtIG1vdXNlWCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZHkgPSBNYXRoLmFicyhheGlzeS5wMmMoeSkgLSBtb3VzZVkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSBkeCAqIGR4ICsgZHkgKiBkeTsgLy8gd2Ugc2F2ZSB0aGUgc3Fy
dAorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgPD0gdG8gZW5zdXJlIGxhc3QgcG9p
bnQgdGFrZXMgcHJlY2VkZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGxhc3QgZ2Vu
ZXJhbGx5IG1lYW5zIG9uIHRvcCBvZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0
IDwgc21hbGxlc3REaXN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxs
ZXN0RGlzdGFuY2UgPSBkaXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBb
aSwgaiAvIHBzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzLmJhcnMuc2hv
dyAmJiAhaXRlbSkgeyAvLyBubyBvdGhlciBwb2ludCBjYW4gYmUgbmVhcmJ5CisgICAgICAgICAg
ICAgICAgICAgIHZhciBiYXJMZWZ0ID0gcy5iYXJzLmFsaWduID09ICJsZWZ0IiA/IDAgOiAtcy5i
YXJzLmJhcldpZHRoLzIsCisgICAgICAgICAgICAgICAgICAgICAgICBiYXJSaWdodCA9IGJhckxl
ZnQgKyBzLmJhcnMuYmFyV2lkdGg7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsg
aiA8IHBvaW50cy5sZW5ndGg7IGogKz0gcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB4ID0gcG9pbnRzW2pdLCB5ID0gcG9pbnRzW2ogKyAxXSwgYiA9IHBvaW50c1tqICsgMl07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYSBi
YXIgZ3JhcGgsIHRoZSBjdXJzb3IgbXVzdCBiZSBpbnNpZGUgdGhlIGJhcgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNlcmllc1tpXS5iYXJzLmhvcml6b250YWwgPworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChteCA8PSBNYXRoLm1heChiLCB4KSAmJiBteCA+PSBNYXRoLm1pbihi
LCB4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSA+PSB5ICsgYmFyTGVmdCAm
JiBteSA8PSB5ICsgYmFyUmlnaHQpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobXgg
Pj0geCArIGJhckxlZnQgJiYgbXggPD0geCArIGJhclJpZ2h0ICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG15ID49IE1hdGgubWluKGIsIHkpICYmIG15IDw9IE1hdGgubWF4KGIsIHkp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IFtpLCBqIC8gcHNdOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXRlbSkgeworICAgICAgICAgICAgICAgIGkgPSBpdGVtWzBdOwor
ICAgICAgICAgICAgICAgIGogPSBpdGVtWzFdOworICAgICAgICAgICAgICAgIHBzID0gc2VyaWVz
W2ldLmRhdGFwb2ludHMucG9pbnRzaXplOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0
YXBvaW50OiBzZXJpZXNbaV0uZGF0YXBvaW50cy5wb2ludHMuc2xpY2UoaiAqIHBzLCAoaiArIDEp
ICogcHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFJbmRleDogaiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXJpZXM6IHNlcmllc1tpXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXJpZXNJbmRleDogaSB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHsK
KyAgICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQuaG92ZXJhYmxlKQorICAgICAgICAgICAgICAg
IHRyaWdnZXJDbGlja0hvdmVyRXZlbnQoInBsb3Rob3ZlciIsIGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocykgeyByZXR1cm4gc1siaG92ZXJhYmxl
Il0gIT0gZmFsc2U7IH0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25Nb3VzZUxl
YXZlKGUpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQuaG92ZXJhYmxlKQorICAgICAg
ICAgICAgICAgIHRyaWdnZXJDbGlja0hvdmVyRXZlbnQoInBsb3Rob3ZlciIsIGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocykgeyByZXR1cm4gZmFs
c2U7IH0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25DbGljayhlKSB7CisgICAg
ICAgICAgICB0cmlnZ2VyQ2xpY2tIb3ZlckV2ZW50KCJwbG90Y2xpY2siLCBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocykgeyByZXR1cm4gc1siY2xpY2th
YmxlIl0gIT0gZmFsc2U7IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gdHJpZ2dlciBjbGlj
ayBvciBob3ZlciBldmVudCAodGhleSBzZW5kIHRoZSBzYW1lIHBhcmFtZXRlcnMKKyAgICAgICAg
Ly8gc28gd2Ugc2hhcmUgdGhlaXIgY29kZSkKKyAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckNsaWNr
SG92ZXJFdmVudChldmVudG5hbWUsIGV2ZW50LCBzZXJpZXNGaWx0ZXIpIHsKKyAgICAgICAgICAg
IHZhciBvZmZzZXQgPSBldmVudEhvbGRlci5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICBjYW52
YXNYID0gZXZlbnQucGFnZVggLSBvZmZzZXQubGVmdCAtIHBsb3RPZmZzZXQubGVmdCwKKyAgICAg
ICAgICAgICAgICBjYW52YXNZID0gZXZlbnQucGFnZVkgLSBvZmZzZXQudG9wIC0gcGxvdE9mZnNl
dC50b3AsCisgICAgICAgICAgICBwb3MgPSBjYW52YXNUb0F4aXNDb29yZHMoeyBsZWZ0OiBjYW52
YXNYLCB0b3A6IGNhbnZhc1kgfSk7CisKKyAgICAgICAgICAgIHBvcy5wYWdlWCA9IGV2ZW50LnBh
Z2VYOworICAgICAgICAgICAgcG9zLnBhZ2VZID0gZXZlbnQucGFnZVk7CisKKyAgICAgICAgICAg
IHZhciBpdGVtID0gZmluZE5lYXJieUl0ZW0oY2FudmFzWCwgY2FudmFzWSwgc2VyaWVzRmlsdGVy
KTsKKworICAgICAgICAgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgICAgICAgICAvLyBmaWxsIGlu
IG1vdXNlIHBvcyBmb3IgYW55IGxpc3RlbmVycyBvdXQgdGhlcmUKKyAgICAgICAgICAgICAgICBp
dGVtLnBhZ2VYID0gcGFyc2VJbnQoaXRlbS5zZXJpZXMueGF4aXMucDJjKGl0ZW0uZGF0YXBvaW50
WzBdKSArIG9mZnNldC5sZWZ0ICsgcGxvdE9mZnNldC5sZWZ0LCAxMCk7CisgICAgICAgICAgICAg
ICAgaXRlbS5wYWdlWSA9IHBhcnNlSW50KGl0ZW0uc2VyaWVzLnlheGlzLnAyYyhpdGVtLmRhdGFw
b2ludFsxXSkgKyBvZmZzZXQudG9wICsgcGxvdE9mZnNldC50b3AsIDEwKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5hdXRvSGlnaGxpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgLy8gY2xlYXIgYXV0by1oaWdobGlnaHRzCisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBoaWdobGlnaHRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBoID0gaGlnaGxpZ2h0c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGgu
YXV0byA9PSBldmVudG5hbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICEoaXRlbSAmJiBo
LnNlcmllcyA9PSBpdGVtLnNlcmllcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICBoLnBv
aW50WzBdID09IGl0ZW0uZGF0YXBvaW50WzBdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGgucG9pbnRbMV0gPT0gaXRlbS5kYXRhcG9pbnRbMV0pKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdW5oaWdobGlnaHQoaC5zZXJpZXMsIGgucG9pbnQpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChpdGVtKQorICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQo
aXRlbS5zZXJpZXMsIGl0ZW0uZGF0YXBvaW50LCBldmVudG5hbWUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwbGFjZWhvbGRlci50cmlnZ2VyKGV2ZW50bmFtZSwgWyBwb3MsIGl0ZW0g
XSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyUmVkcmF3T3ZlcmxheSgp
IHsKKyAgICAgICAgICAgIHZhciB0ID0gb3B0aW9ucy5pbnRlcmFjdGlvbi5yZWRyYXdPdmVybGF5
SW50ZXJ2YWw7CisgICAgICAgICAgICBpZiAodCA9PSAtMSkgeyAgICAgIC8vIHNraXAgZXZlbnQg
cXVldWUKKyAgICAgICAgICAgICAgICBkcmF3T3ZlcmxheSgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFyZWRyYXdUaW1lb3V0KQor
ICAgICAgICAgICAgICAgIHJlZHJhd1RpbWVvdXQgPSBzZXRUaW1lb3V0KGRyYXdPdmVybGF5LCB0
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRyYXdPdmVybGF5KCkgeworICAgICAg
ICAgICAgcmVkcmF3VGltZW91dCA9IG51bGw7CisKKyAgICAgICAgICAgIC8vIGRyYXcgaGlnaGxp
Z2h0cworICAgICAgICAgICAgb2N0eC5zYXZlKCk7CisgICAgICAgICAgICBvY3R4LmNsZWFyUmVj
dCgwLCAwLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKKyAgICAgICAgICAgIG9jdHgudHJh
bnNsYXRlKHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOworCisgICAgICAgICAgICB2
YXIgaSwgaGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGlnaGxpZ2h0cy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgIGhpID0gaGlnaGxpZ2h0c1tpXTsKKworICAgICAgICAg
ICAgICAgIGlmIChoaS5zZXJpZXMuYmFycy5zaG93KQorICAgICAgICAgICAgICAgICAgICBkcmF3
QmFySGlnaGxpZ2h0KGhpLnNlcmllcywgaGkucG9pbnQpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZHJhd1BvaW50SGlnaGxpZ2h0KGhpLnNlcmllcywgaGkucG9p
bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2N0eC5yZXN0b3JlKCk7CisKKyAgICAg
ICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5kcmF3T3ZlcmxheSwgW29jdHhdKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGhpZ2hsaWdodChzLCBwb2ludCwgYXV0bykgeworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBzID09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIHMgPSBzZXJp
ZXNbc107CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgcG9pbnQgPT0gIm51bWJlciIpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcHMgPSBzLmRhdGFwb2ludHMucG9pbnRzaXplOworICAgICAgICAg
ICAgICAgIHBvaW50ID0gcy5kYXRhcG9pbnRzLnBvaW50cy5zbGljZShwcyAqIHBvaW50LCBwcyAq
IChwb2ludCArIDEpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGkgPSBpbmRl
eE9mSGlnaGxpZ2h0KHMsIHBvaW50KTsKKyAgICAgICAgICAgIGlmIChpID09IC0xKSB7CisgICAg
ICAgICAgICAgICAgaGlnaGxpZ2h0cy5wdXNoKHsgc2VyaWVzOiBzLCBwb2ludDogcG9pbnQsIGF1
dG86IGF1dG8gfSk7CisKKyAgICAgICAgICAgICAgICB0cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWF1dG8pCisgICAgICAgICAgICAg
ICAgaGlnaGxpZ2h0c1tpXS5hdXRvID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB1bmhpZ2hsaWdodChzLCBwb2ludCkgeworICAgICAgICAgICAgaWYgKHMgPT0gbnVsbCAm
JiBwb2ludCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0cyA9IFtdOworICAg
ICAgICAgICAgICAgIHRyaWdnZXJSZWRyYXdPdmVybGF5KCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICh0eXBlb2YgcyA9PSAibnVtYmVyIikKKyAgICAgICAgICAgICAgICBzID0g
c2VyaWVzW3NdOworCisgICAgICAgICAgICBpZiAodHlwZW9mIHBvaW50ID09ICJudW1iZXIiKQor
ICAgICAgICAgICAgICAgIHBvaW50ID0gcy5kYXRhW3BvaW50XTsKKworICAgICAgICAgICAgdmFy
IGkgPSBpbmRleE9mSGlnaGxpZ2h0KHMsIHBvaW50KTsKKyAgICAgICAgICAgIGlmIChpICE9IC0x
KSB7CisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7CisKKyAgICAgICAg
ICAgICAgICB0cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gaW5kZXhPZkhpZ2hsaWdodChzLCBwKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZ2hsaWdodHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgaCA9IGhpZ2hsaWdodHNbaV07CisgICAgICAgICAgICAgICAgaWYgKGguc2Vy
aWVzID09IHMgJiYgaC5wb2ludFswXSA9PSBwWzBdCisgICAgICAgICAgICAgICAgICAgICYmIGgu
cG9pbnRbMV0gPT0gcFsxXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBkcmF3UG9pbnRIaWdobGlnaHQoc2VyaWVzLCBwb2ludCkgeworICAgICAgICAgICAgdmFy
IHggPSBwb2ludFswXSwgeSA9IHBvaW50WzFdLAorICAgICAgICAgICAgICAgIGF4aXN4ID0gc2Vy
aWVzLnhheGlzLCBheGlzeSA9IHNlcmllcy55YXhpcywKKyAgICAgICAgICAgICAgICBoaWdobGln
aHRDb2xvciA9ICh0eXBlb2Ygc2VyaWVzLmhpZ2hsaWdodENvbG9yID09PSAic3RyaW5nIikgPyBz
ZXJpZXMuaGlnaGxpZ2h0Q29sb3IgOiAkLmNvbG9yLnBhcnNlKHNlcmllcy5jb2xvcikuc2NhbGUo
J2EnLCAwLjUpLnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgIGlmICh4IDwgYXhpc3gubWluIHx8
IHggPiBheGlzeC5tYXggfHwgeSA8IGF4aXN5Lm1pbiB8fCB5ID4gYXhpc3kubWF4KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIHBvaW50UmFkaXVzID0gc2VyaWVz
LnBvaW50cy5yYWRpdXMgKyBzZXJpZXMucG9pbnRzLmxpbmVXaWR0aCAvIDI7CisgICAgICAgICAg
ICBvY3R4LmxpbmVXaWR0aCA9IHBvaW50UmFkaXVzOworICAgICAgICAgICAgb2N0eC5zdHJva2VT
dHlsZSA9IGhpZ2hsaWdodENvbG9yOworICAgICAgICAgICAgdmFyIHJhZGl1cyA9IDEuNSAqIHBv
aW50UmFkaXVzOworICAgICAgICAgICAgeCA9IGF4aXN4LnAyYyh4KTsKKyAgICAgICAgICAgIHkg
PSBheGlzeS5wMmMoeSk7CisKKyAgICAgICAgICAgIG9jdHguYmVnaW5QYXRoKCk7CisgICAgICAg
ICAgICBpZiAoc2VyaWVzLnBvaW50cy5zeW1ib2wgPT0gImNpcmNsZSIpCisgICAgICAgICAgICAg
ICAgb2N0eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNlcmllcy5wb2ludHMuc3ltYm9sKG9jdHgsIHgs
IHksIHJhZGl1cywgZmFsc2UpOworICAgICAgICAgICAgb2N0eC5jbG9zZVBhdGgoKTsKKyAgICAg
ICAgICAgIG9jdHguc3Ryb2tlKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkcmF3
QmFySGlnaGxpZ2h0KHNlcmllcywgcG9pbnQpIHsKKyAgICAgICAgICAgIHZhciBoaWdobGlnaHRD
b2xvciA9ICh0eXBlb2Ygc2VyaWVzLmhpZ2hsaWdodENvbG9yID09PSAic3RyaW5nIikgPyBzZXJp
ZXMuaGlnaGxpZ2h0Q29sb3IgOiAkLmNvbG9yLnBhcnNlKHNlcmllcy5jb2xvcikuc2NhbGUoJ2En
LCAwLjUpLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgZmlsbFN0eWxlID0gaGlnaGxpZ2h0
Q29sb3IsCisgICAgICAgICAgICAgICAgYmFyTGVmdCA9IHNlcmllcy5iYXJzLmFsaWduID09ICJs
ZWZ0IiA/IDAgOiAtc2VyaWVzLmJhcnMuYmFyV2lkdGgvMjsKKworICAgICAgICAgICAgb2N0eC5s
aW5lV2lkdGggPSBzZXJpZXMuYmFycy5saW5lV2lkdGg7CisgICAgICAgICAgICBvY3R4LnN0cm9r
ZVN0eWxlID0gaGlnaGxpZ2h0Q29sb3I7CisKKyAgICAgICAgICAgIGRyYXdCYXIocG9pbnRbMF0s
IHBvaW50WzFdLCBwb2ludFsyXSB8fCAwLCBiYXJMZWZ0LCBiYXJMZWZ0ICsgc2VyaWVzLmJhcnMu
YmFyV2lkdGgsCisgICAgICAgICAgICAgICAgICAgIDAsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZp
bGxTdHlsZTsgfSwgc2VyaWVzLnhheGlzLCBzZXJpZXMueWF4aXMsIG9jdHgsIHNlcmllcy5iYXJz
Lmhvcml6b250YWwsIHNlcmllcy5iYXJzLmxpbmVXaWR0aCk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBnZXRDb2xvck9yR3JhZGllbnQoc3BlYywgYm90dG9tLCB0b3AsIGRlZmF1bHRD
b2xvcikgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciKQorICAgICAg
ICAgICAgICAgIHJldHVybiBzcGVjOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gYXNzdW1lIHRoaXMgaXMgYSBncmFkaWVudCBzcGVjOyBJRSBjdXJyZW50bHkgb25seQor
ICAgICAgICAgICAgICAgIC8vIHN1cHBvcnRzIGEgc2ltcGxlIHZlcnRpY2FsIGdyYWRpZW50IHBy
b3Blcmx5LCBzbyB0aGF0J3MKKyAgICAgICAgICAgICAgICAvLyB3aGF0IHdlIHN1cHBvcnQgdG9v
CisgICAgICAgICAgICAgICAgdmFyIGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50
KDAsIHRvcCwgMCwgYm90dG9tKTsKKworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBs
ID0gc3BlYy5jb2xvcnMubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBjID0gc3BlYy5jb2xvcnNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
YyAhPSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gJC5jb2xv
ci5wYXJzZShkZWZhdWx0Q29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuYnJp
Z2h0bmVzcyAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvID0gY28uc2Nh
bGUoJ3JnYicsIGMuYnJpZ2h0bmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5v
cGFjaXR5ICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uYSAqPSBjLm9w
YWNpdHk7CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gY28udG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0
b3AoaSAvIChsIC0gMSksIGMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHJldHVybiBncmFkaWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
ICQucGxvdCA9IGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCBkYXRhLCBvcHRpb25zKSB7CisgICAgICAg
IC8vdmFyIHQwID0gbmV3IERhdGUoKTsKKyAgICAgICAgdmFyIHBsb3QgPSBuZXcgUGxvdCgkKHBs
YWNlaG9sZGVyKSwgZGF0YSwgb3B0aW9ucywgJC5wbG90LnBsdWdpbnMpOworICAgICAgICAvLyh3
aW5kb3cuY29uc29sZSA/IGNvbnNvbGUubG9nIDogYWxlcnQpKCJ0aW1lIHVzZWQgKG1zZWNzKTog
IiArICgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gdDAuZ2V0VGltZSgpKSk7CisgICAgICAgIHJl
dHVybiBwbG90OworICAgIH07CisKKyAgICAkLnBsb3QudmVyc2lvbiA9ICIwLjgtYWxwaGEiOwor
CisgICAgJC5wbG90LnBsdWdpbnMgPSBbXTsKKworICAgIC8vIHJvdW5kIHRvIG5lYXJieSBsb3dl
ciBtdWx0aXBsZSBvZiBiYXNlCisgICAgZnVuY3Rpb24gZmxvb3JJbkJhc2UobiwgYmFzZSkgewor
ICAgICAgICByZXR1cm4gYmFzZSAqIE1hdGguZmxvb3IobiAvIGJhc2UpOworICAgIH0KKworfSko
alF1ZXJ5KTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5
LmZsb3QubmF2aWdhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5uYXZpZ2F0ZS5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QubmF2aWdhdGUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDUgQEAKKy8qIEZsb3QgcGx1Z2luIGZvciBhZGRpbmcg
dGhlIGFiaWxpdHkgdG8gcGFuIGFuZCB6b29tIHRoZSBwbG90LgorCitDb3B5cmlnaHQgKGMpIDIw
MDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KK0xpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGlj
ZW5zZS4KKworVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIGRvdWJsZSBjbGljayBhbmQgc2Nyb2xs
d2hlZWwgdXAvZG93biB0byB6b29tIGluLCBkcmFnCit0byBwYW4uIFRoZSBwbHVnaW4gZGVmaW5l
cyBwbG90Lnpvb20oeyBjZW50ZXIgfSksIHBsb3Quem9vbU91dCgpIGFuZAorcGxvdC5wYW4oIG9m
ZnNldCApIHNvIHlvdSBlYXNpbHkgY2FuIGFkZCBjdXN0b20gY29udHJvbHMuIEl0IGFsc28gZmly
ZXMKKyJwbG90cGFuIiBhbmQgInBsb3R6b29tIiBldmVudHMsIHVzZWZ1bCBmb3Igc3luY2hyb25p
emluZyBwbG90cy4KKworVGhlIHBsdWdpbiBzdXBwb3J0cyB0aGVzZSBvcHRpb25zOgorCisgICAg
em9vbTogeworICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UKKyAgICAgICAgdHJpZ2dlcjogImRi
bGNsaWNrIiAvLyBvciAiY2xpY2siIGZvciBzaW5nbGUgY2xpY2sKKyAgICAgICAgYW1vdW50OiAx
LjUgICAgICAgICAvLyAyID0gMjAwJSAoem9vbSBpbiksIDAuNSA9IDUwJSAoem9vbSBvdXQpCisg
ICAgfQorCisgICAgcGFuOiB7CisgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZQorICAgICAgICBj
dXJzb3I6ICJtb3ZlIiAgICAgIC8vIENTUyBtb3VzZSBjdXJzb3IgdmFsdWUgdXNlZCB3aGVuIGRy
YWdnaW5nLCBlLmcuICJwb2ludGVyIgorICAgICAgICBmcmFtZVJhdGU6IDIwCisgICAgfQorCisg
ICAgeGF4aXMsIHlheGlzLCB4MmF4aXMsIHkyYXhpczogeworICAgICAgICB6b29tUmFuZ2U6IG51
bGwgIC8vIG9yIFsgbnVtYmVyLCBudW1iZXIgXSAobWluIHJhbmdlLCBtYXggcmFuZ2UpIG9yIGZh
bHNlCisgICAgICAgIHBhblJhbmdlOiBudWxsICAgLy8gb3IgWyBudW1iZXIsIG51bWJlciBdICht
aW4sIG1heCkgb3IgZmFsc2UKKyAgICB9CisKKyJpbnRlcmFjdGl2ZSIgZW5hYmxlcyB0aGUgYnVp
bHQtaW4gZHJhZy9jbGljayBiZWhhdmlvdXIuIElmIHlvdSBlbmFibGUKK2ludGVyYWN0aXZlIGZv
ciBwYW4sIHRoZW4geW91J2xsIGhhdmUgYSBiYXNpYyBwbG90IHRoYXQgc3VwcG9ydHMgbW92aW5n
Cithcm91bmQ7IHRoZSBzYW1lIGZvciB6b29tLgorCisiYW1vdW50IiBzcGVjaWZpZXMgdGhlIGRl
ZmF1bHQgYW1vdW50IHRvIHpvb20gaW4gKHNvIDEuNSA9IDE1MCUpIHJlbGF0aXZlIHRvCit0aGUg
Y3VycmVudCB2aWV3cG9ydC4KKworImN1cnNvciIgaXMgYSBzdGFuZGFyZCBDU1MgbW91c2UgY3Vy
c29yIHN0cmluZyB1c2VkIGZvciB2aXN1YWwgZmVlZGJhY2sgdG8gdGhlCit1c2VyIHdoZW4gZHJh
Z2dpbmcuCisKKyJmcmFtZVJhdGUiIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGlt
ZXMgcGVyIHNlY29uZCB0aGUgcGxvdCB3aWxsCit1cGRhdGUgaXRzZWxmIHdoaWxlIHRoZSB1c2Vy
IGlzIHBhbm5pbmcgYXJvdW5kIG9uIGl0IChzZXQgdG8gbnVsbCB0byBkaXNhYmxlCitpbnRlcm1l
ZGlhdGUgcGFucywgdGhlIHBsb3Qgd2lsbCB0aGVuIG5vdCB1cGRhdGUgdW50aWwgdGhlIG1vdXNl
IGJ1dHRvbiBpcworcmVsZWFzZWQpLgorCisiem9vbVJhbmdlIiBpcyB0aGUgaW50ZXJ2YWwgaW4g
d2hpY2ggem9vbWluZyBjYW4gaGFwcGVuLCBlLmcuIHdpdGggem9vbVJhbmdlOgorWzEsIDEwMF0g
dGhlIHpvb20gd2lsbCBuZXZlciBzY2FsZSB0aGUgYXhpcyBzbyB0aGF0IHRoZSBkaWZmZXJlbmNl
IGJldHdlZW4gbWluCithbmQgbWF4IGlzIHNtYWxsZXIgdGhhbiAxIG9yIGxhcmdlciB0aGFuIDEw
MC4gWW91IGNhbiBzZXQgZWl0aGVyIGVuZCB0byBudWxsCit0byBpZ25vcmUsIGUuZy4gWzEsIG51
bGxdLiBJZiB5b3Ugc2V0IHpvb21SYW5nZSB0byBmYWxzZSwgem9vbWluZyBvbiB0aGF0IGF4aXMK
K3dpbGwgYmUgZGlzYWJsZWQuCisKKyJwYW5SYW5nZSIgY29uZmluZXMgdGhlIHBhbm5pbmcgdG8g
c3RheSB3aXRoaW4gYSByYW5nZSwgZS5nLiB3aXRoIHBhblJhbmdlOgorWy0xMCwgMjBdIHBhbm5p
bmcgc3RvcHMgYXQgLTEwIGluIG9uZSBlbmQgYW5kIGF0IDIwIGluIHRoZSBvdGhlci4gRWl0aGVy
IGNhbgorYmUgbnVsbCwgZS5nLiBbLTEwLCBudWxsXS4gSWYgeW91IHNldCBwYW5SYW5nZSB0byBm
YWxzZSwgcGFubmluZyBvbiB0aGF0IGF4aXMKK3dpbGwgYmUgZGlzYWJsZWQuCisKK0V4YW1wbGUg
QVBJIHVzYWdlOgorCisgICAgcGxvdCA9ICQucGxvdCguLi4pOworCisgICAgLy8gem9vbSBkZWZh
dWx0IGFtb3VudCBpbiBvbiB0aGUgcGl4ZWwgKCAxMCwgMjAgKQorICAgIHBsb3Quem9vbSh7IGNl
bnRlcjogeyBsZWZ0OiAxMCwgdG9wOiAyMCB9IH0pOworCisgICAgLy8gem9vbSBvdXQgYWdhaW4K
KyAgICBwbG90Lnpvb21PdXQoeyBjZW50ZXI6IHsgbGVmdDogMTAsIHRvcDogMjAgfSB9KTsKKwor
ICAgIC8vIHpvb20gMjAwJSBpbiBvbiB0aGUgcGl4ZWwgKDEwLCAyMCkKKyAgICBwbG90Lnpvb20o
eyBhbW91bnQ6IDIsIGNlbnRlcjogeyBsZWZ0OiAxMCwgdG9wOiAyMCB9IH0pOworCisgICAgLy8g
cGFuIDEwMCBwaXhlbHMgdG8gdGhlIGxlZnQgYW5kIDIwIGRvd24KKyAgICBwbG90LnBhbih7IGxl
ZnQ6IC0xMDAsIHRvcDogMjAgfSkKKworSGVyZSwgImNlbnRlciIgc3BlY2lmaWVzIHdoZXJlIHRo
ZSBjZW50ZXIgb2YgdGhlIHpvb21pbmcgc2hvdWxkIGhhcHBlbi4gTm90ZQordGhhdCB0aGlzIGlz
IGRlZmluZWQgaW4gcGl4ZWwgc3BhY2UsIG5vdCB0aGUgc3BhY2Ugb2YgdGhlIGRhdGEgcG9pbnRz
ICh5b3UgY2FuCit1c2UgdGhlIHAyYyBoZWxwZXJzIG9uIHRoZSBheGVzIGluIEZsb3QgdG8gaGVs
cCB5b3UgY29udmVydCBiZXR3ZWVuIHRoZXNlKS4KKworImFtb3VudCIgaXMgdGhlIGFtb3VudCB0
byB6b29tIHRoZSB2aWV3cG9ydCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByYW5nZSwgc28KKzEg
aXMgMTAwJSAoaS5lLiBubyBjaGFuZ2UpLCAxLjUgaXMgMTUwJSAoem9vbSBpbiksIDAuNyBpcyA3
MCUgKHpvb20gb3V0KS4gWW91CitjYW4gc2V0IHRoZSBkZWZhdWx0IGluIHRoZSBvcHRpb25zLgor
CisqLworCisvLyBGaXJzdCB0d28gZGVwZW5kZW5jaWVzLCBqcXVlcnkuZXZlbnQuZHJhZy5qcyBh
bmQKKy8vIGpxdWVyeS5tb3VzZXdoZWVsLmpzLCB3ZSBwdXQgdGhlbSBpbmxpbmUgaGVyZSB0byBz
YXZlIHBlb3BsZSB0aGUKKy8vIGVmZm9ydCBvZiBkb3dubG9hZGluZyB0aGVtLgorCisvKgoranF1
ZXJ5LmV2ZW50LmRyYWcuanMgfiB2MS41IH4gQ29weXJpZ2h0IChjKSAyMDA4LCBUaHJlZSBEdWIg
TWVkaWEgKGh0dHA6Ly90aHJlZWR1Ym1lZGlhLmNvbSkKK0xpY2Vuc2VkIHVuZGVyIHRoZSBNSVQg
TGljZW5zZSB+IGh0dHA6Ly90aHJlZWR1Ym1lZGlhLmdvb2dsZWNvZGUuY29tL2ZpbGVzL01JVC1M
SUNFTlNFLnR4dAorKi8KKyhmdW5jdGlvbihFKXtFLmZuLmRyYWc9ZnVuY3Rpb24oTCxLLEope2lm
KEspe3RoaXMuYmluZCgiZHJhZ3N0YXJ0IixMKX1pZihKKXt0aGlzLmJpbmQoImRyYWdlbmQiLEop
fXJldHVybiAhTD90aGlzLnRyaWdnZXIoImRyYWciKTp0aGlzLmJpbmQoImRyYWciLEs/SzpMKX07
dmFyIEE9RS5ldmVudCxCPUEuc3BlY2lhbCxGPUIuZHJhZz17bm90OiI6aW5wdXQiLGRpc3RhbmNl
OjAsd2hpY2g6MSxkcmFnZ2luZzpmYWxzZSxzZXR1cDpmdW5jdGlvbihKKXtKPUUuZXh0ZW5kKHtk
aXN0YW5jZTpGLmRpc3RhbmNlLHdoaWNoOkYud2hpY2gsbm90OkYubm90fSxKfHx7fSk7Si5kaXN0
YW5jZT1JKEouZGlzdGFuY2UpO0EuYWRkKHRoaXMsIm1vdXNlZG93biIsSCxKKTtpZih0aGlzLmF0
dGFjaEV2ZW50KXt0aGlzLmF0dGFjaEV2ZW50KCJvbmRyYWdzdGFydCIsRCl9fSx0ZWFyZG93bjpm
dW5jdGlvbigpe0EucmVtb3ZlKHRoaXMsIm1vdXNlZG93biIsSCk7aWYodGhpcz09PUYuZHJhZ2dp
bmcpe0YuZHJhZ2dpbmc9Ri5wcm94eT1mYWxzZX1HKHRoaXMsdHJ1ZSk7aWYodGhpcy5kZXRhY2hF
dmVudCl7dGhpcy5kZXRhY2hFdmVudCgib25kcmFnc3RhcnQiLEQpfX19O0IuZHJhZ3N0YXJ0PUIu
ZHJhZ2VuZD17c2V0dXA6ZnVuY3Rpb24oKXt9LHRlYXJkb3duOmZ1bmN0aW9uKCl7fX07ZnVuY3Rp
b24gSChMKXt2YXIgSz10aGlzLEosTT1MLmRhdGF8fHt9O2lmKE0uZWxlbSl7Sz1MLmRyYWdUYXJn
ZXQ9TS5lbGVtO0wuZHJhZ1Byb3h5PUYucHJveHl8fEs7TC5jdXJzb3JPZmZzZXRYPU0ucGFnZVgt
TS5sZWZ0O0wuY3Vyc29yT2Zmc2V0WT1NLnBhZ2VZLU0udG9wO0wub2Zmc2V0WD1MLnBhZ2VYLUwu
Y3Vyc29yT2Zmc2V0WDtMLm9mZnNldFk9TC5wYWdlWS1MLmN1cnNvck9mZnNldFl9ZWxzZXtpZihG
LmRyYWdnaW5nfHwoTS53aGljaD4wJiZMLndoaWNoIT1NLndoaWNoKXx8RShMLnRhcmdldCkuaXMo
TS5ub3QpKXtyZXR1cm4gfX1zd2l0Y2goTC50eXBlKXtjYXNlIm1vdXNlZG93biI6RS5leHRlbmQo
TSxFKEspLm9mZnNldCgpLHtlbGVtOkssdGFyZ2V0OkwudGFyZ2V0LHBhZ2VYOkwucGFnZVgscGFn
ZVk6TC5wYWdlWX0pO0EuYWRkKGRvY3VtZW50LCJtb3VzZW1vdmUgbW91c2V1cCIsSCxNKTtHKEss
ZmFsc2UpO0YuZHJhZ2dpbmc9bnVsbDtyZXR1cm4gZmFsc2U7Y2FzZSAhRi5kcmFnZ2luZyYmIm1v
dXNlbW92ZSI6aWYoSShMLnBhZ2VYLU0ucGFnZVgpK0koTC5wYWdlWS1NLnBhZ2VZKTxNLmRpc3Rh
bmNlKXticmVha31MLnRhcmdldD1NLnRhcmdldDtKPUMoTCwiZHJhZ3N0YXJ0IixLKTtpZihKIT09
ZmFsc2Upe0YuZHJhZ2dpbmc9SztGLnByb3h5PUwuZHJhZ1Byb3h5PUUoSnx8SylbMF19Y2FzZSJt
b3VzZW1vdmUiOmlmKEYuZHJhZ2dpbmcpe0o9QyhMLCJkcmFnIixLKTtpZihCLmRyb3Ape0IuZHJv
cC5hbGxvd2VkPShKIT09ZmFsc2UpO0IuZHJvcC5oYW5kbGVyKEwpfWlmKEohPT1mYWxzZSl7YnJl
YWt9TC50eXBlPSJtb3VzZXVwIn1jYXNlIm1vdXNldXAiOkEucmVtb3ZlKGRvY3VtZW50LCJtb3Vz
ZW1vdmUgbW91c2V1cCIsSCk7aWYoRi5kcmFnZ2luZyl7aWYoQi5kcm9wKXtCLmRyb3AuaGFuZGxl
cihMKX1DKEwsImRyYWdlbmQiLEspfUcoSyx0cnVlKTtGLmRyYWdnaW5nPUYucHJveHk9TS5lbGVt
PWZhbHNlO2JyZWFrfXJldHVybiB0cnVlfWZ1bmN0aW9uIEMoTSxLLEwpe00udHlwZT1LO3ZhciBK
PUUuZXZlbnQuaGFuZGxlLmNhbGwoTCxNKTtyZXR1cm4gSj09PWZhbHNlP2ZhbHNlOkp8fE0ucmVz
dWx0fWZ1bmN0aW9uIEkoSil7cmV0dXJuIE1hdGgucG93KEosMil9ZnVuY3Rpb24gRCgpe3JldHVy
bihGLmRyYWdnaW5nPT09ZmFsc2UpfWZ1bmN0aW9uIEcoSyxKKXtpZighSyl7cmV0dXJuIH1LLnVu
c2VsZWN0YWJsZT1KPyJvZmYiOiJvbiI7Sy5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJu
IEp9O2lmKEsuc3R5bGUpe0suc3R5bGUuTW96VXNlclNlbGVjdD1KPyIiOiJub25lIn19fSkoalF1
ZXJ5KTsKKworLyoganF1ZXJ5Lm1vdXNld2hlZWwubWluLmpzCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTEgQnJhbmRvbiBBYXJvbiAoaHR0cDovL2JyYW5kb25hYXJvbi5uZXQpCisgKiBMaWNlbnNlZCB1
bmRlciB0aGUgTUlUIExpY2Vuc2UgKExJQ0VOU0UudHh0KS4KKyAqIFRoYW5rcyB0bzogaHR0cDov
L2Fkb21hcy5vcmcvamF2YXNjcmlwdC1tb3VzZS13aGVlbC8gZm9yIHNvbWUgcG9pbnRlcnMuCisg
KiBUaGFua3MgdG86IE1hdGhpYXMgQmFuayhodHRwOi8vd3d3Lm1hdGhpYXMtYmFuay5kZSkgZm9y
IGEgc2NvcGUgYnVnIGZpeC4KKyAqIFRoYW5rcyB0bzogU2VhbXVzIExlYWh5IGZvciBhZGRpbmcg
ZGVsdGFYIGFuZCBkZWx0YVkKKyAqCisgKiBWZXJzaW9uOiAzLjAuNgorICoKKyAqIFJlcXVpcmVz
OiAxLjIuMisKKyAqLworKGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGUoYSl7dmFyIGI9YXx8d2luZG93
LmV2ZW50LGM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSksZj0wLGU9MCxnPTAsYT1kLmV2ZW50
LmZpeChiKTthLnR5cGU9Im1vdXNld2hlZWwiO2Iud2hlZWxEZWx0YSYmKGY9Yi53aGVlbERlbHRh
LzEyMCk7Yi5kZXRhaWwmJihmPS1iLmRldGFpbC8zKTtnPWY7dm9pZCAwIT09Yi5heGlzJiZiLmF4
aXM9PT1iLkhPUklaT05UQUxfQVhJUyYmKGc9MCxlPS0xKmYpO3ZvaWQgMCE9PWIud2hlZWxEZWx0
YVkmJihnPWIud2hlZWxEZWx0YVkvMTIwKTt2b2lkIDAhPT1iLndoZWVsRGVsdGFYJiYoZT0tMSpi
LndoZWVsRGVsdGFYLzEyMCk7Yy51bnNoaWZ0KGEsZixlLGcpO3JldHVybihkLmV2ZW50LmRpc3Bh
dGNofHxkLmV2ZW50LmhhbmRsZSkuYXBwbHkodGhpcyxjKX12YXIgYz1bIkRPTU1vdXNlU2Nyb2xs
IiwibW91c2V3aGVlbCJdO2lmKGQuZXZlbnQuZml4SG9va3MpZm9yKHZhciBoPWMubGVuZ3RoO2g7
KWQuZXZlbnQuZml4SG9va3NbY1stLWhdXT1kLmV2ZW50Lm1vdXNlSG9va3M7ZC5ldmVudC5zcGVj
aWFsLm1vdXNld2hlZWw9e3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5hZGRFdmVudExpc3RlbmVy
KWZvcih2YXIgYT1jLmxlbmd0aDthOyl0aGlzLmFkZEV2ZW50TGlzdGVuZXIoY1stLWFdLGUsITEp
O2Vsc2UgdGhpcy5vbm1vdXNld2hlZWw9ZX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZih0aGlzLnJl
bW92ZUV2ZW50TGlzdGVuZXIpZm9yKHZhciBhPWMubGVuZ3RoO2E7KXRoaXMucmVtb3ZlRXZlbnRM
aXN0ZW5lcihjWy0tYV0sZSwhMSk7ZWxzZSB0aGlzLm9ubW91c2V3aGVlbD1udWxsfX07ZC5mbi5l
eHRlbmQoe21vdXNld2hlZWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5iaW5kKCJtb3VzZXdo
ZWVsIixhKTp0aGlzLnRyaWdnZXIoIm1vdXNld2hlZWwiKX0sdW5tb3VzZXdoZWVsOmZ1bmN0aW9u
KGEpe3JldHVybiB0aGlzLnVuYmluZCgibW91c2V3aGVlbCIsYSl9fSl9KShqUXVlcnkpOworCisK
KworCisoZnVuY3Rpb24gKCQpIHsKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgeGF4aXM6
IHsKKyAgICAgICAgICAgIHpvb21SYW5nZTogbnVsbCwgLy8gb3IgW251bWJlciwgbnVtYmVyXSAo
bWluIHJhbmdlLCBtYXggcmFuZ2UpCisgICAgICAgICAgICBwYW5SYW5nZTogbnVsbCAvLyBvciBb
bnVtYmVyLCBudW1iZXJdIChtaW4sIG1heCkKKyAgICAgICAgfSwKKyAgICAgICAgem9vbTogewor
ICAgICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLAorICAgICAgICAgICAgdHJpZ2dlcjogImRi
bGNsaWNrIiwgLy8gb3IgImNsaWNrIiBmb3Igc2luZ2xlIGNsaWNrCisgICAgICAgICAgICBhbW91
bnQ6IDEuNSAvLyBob3cgbXVjaCB0byB6b29tIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24s
IDIgPSAyMDAlICh6b29tIGluKSwgMC41ID0gNTAlICh6b29tIG91dCkKKyAgICAgICAgfSwKKyAg
ICAgICAgcGFuOiB7CisgICAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsCisgICAgICAgICAg
ICBjdXJzb3I6ICJtb3ZlIiwKKyAgICAgICAgICAgIGZyYW1lUmF0ZTogMjAKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBmdW5jdGlvbiBpbml0KHBsb3QpIHsKKyAgICAgICAgZnVuY3Rpb24gb25a
b29tQ2xpY2soZSwgem9vbU91dCkgeworICAgICAgICAgICAgdmFyIGMgPSBwbG90Lm9mZnNldCgp
OworICAgICAgICAgICAgYy5sZWZ0ID0gZS5wYWdlWCAtIGMubGVmdDsKKyAgICAgICAgICAgIGMu
dG9wID0gZS5wYWdlWSAtIGMudG9wOworICAgICAgICAgICAgaWYgKHpvb21PdXQpCisgICAgICAg
ICAgICAgICAgcGxvdC56b29tT3V0KHsgY2VudGVyOiBjIH0pOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHBsb3Quem9vbSh7IGNlbnRlcjogYyB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIG9uTW91c2VXaGVlbChlLCBkZWx0YSkgeworICAgICAgICAgICAgb25a
b29tQ2xpY2soZSwgZGVsdGEgPCAwKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIHByZXZDdXJzb3IgPSAnZGVmYXVsdCcsIHByZXZQ
YWdlWCA9IDAsIHByZXZQYWdlWSA9IDAsCisgICAgICAgICAgICBwYW5UaW1lb3V0ID0gbnVsbDsK
KworICAgICAgICBmdW5jdGlvbiBvbkRyYWdTdGFydChlKSB7CisgICAgICAgICAgICBpZiAoZS53
aGljaCAhPSAxKSAgLy8gb25seSBhY2NlcHQgbGVmdC1jbGljaworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHZhciBjID0gcGxvdC5nZXRQbGFjZWhvbGRlcigpLmNz
cygnY3Vyc29yJyk7CisgICAgICAgICAgICBpZiAoYykKKyAgICAgICAgICAgICAgICBwcmV2Q3Vy
c29yID0gYzsKKyAgICAgICAgICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS5jc3MoJ2N1cnNvcics
IHBsb3QuZ2V0T3B0aW9ucygpLnBhbi5jdXJzb3IpOworICAgICAgICAgICAgcHJldlBhZ2VYID0g
ZS5wYWdlWDsKKyAgICAgICAgICAgIHByZXZQYWdlWSA9IGUucGFnZVk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZ1bmN0aW9uIG9uRHJhZyhlKSB7CisgICAgICAgICAgICB2YXIgZnJh
bWVSYXRlID0gcGxvdC5nZXRPcHRpb25zKCkucGFuLmZyYW1lUmF0ZTsKKyAgICAgICAgICAgIGlm
IChwYW5UaW1lb3V0IHx8ICFmcmFtZVJhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBwYW5UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgcGxvdC5wYW4oeyBsZWZ0OiBwcmV2UGFnZVggLSBlLnBhZ2VYLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wOiBwcmV2UGFnZVkgLSBlLnBhZ2VZIH0pOworICAgICAgICAg
ICAgICAgIHByZXZQYWdlWCA9IGUucGFnZVg7CisgICAgICAgICAgICAgICAgcHJldlBhZ2VZID0g
ZS5wYWdlWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBwYW5UaW1lb3V0ID0gbnVsbDsKKyAgICAgICAgICAgIH0s
IDEgLyBmcmFtZVJhdGUgKiAxMDAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9u
RHJhZ0VuZChlKSB7CisgICAgICAgICAgICBpZiAocGFuVGltZW91dCkgeworICAgICAgICAgICAg
ICAgIGNsZWFyVGltZW91dChwYW5UaW1lb3V0KTsKKyAgICAgICAgICAgICAgICBwYW5UaW1lb3V0
ID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBwbG90LmdldFBsYWNlaG9sZGVyKCkuY3NzKCdjdXJzb3InLCBwcmV2Q3Vyc29yKTsKKyAgICAg
ICAgICAgIHBsb3QucGFuKHsgbGVmdDogcHJldlBhZ2VYIC0gZS5wYWdlWCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgdG9wOiBwcmV2UGFnZVkgLSBlLnBhZ2VZIH0pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKHBsb3QsIGV2ZW50SG9sZGVyKSB7Cisg
ICAgICAgICAgICB2YXIgbyA9IHBsb3QuZ2V0T3B0aW9ucygpOworICAgICAgICAgICAgaWYgKG8u
em9vbS5pbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgICAgIGV2ZW50SG9sZGVyW28uem9vbS50
cmlnZ2VyXShvblpvb21DbGljayk7CisgICAgICAgICAgICAgICAgZXZlbnRIb2xkZXIubW91c2V3
aGVlbChvbk1vdXNlV2hlZWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoby5w
YW4uaW50ZXJhY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBldmVudEhvbGRlci5iaW5kKCJkcmFn
c3RhcnQiLCB7IGRpc3RhbmNlOiAxMCB9LCBvbkRyYWdTdGFydCk7CisgICAgICAgICAgICAgICAg
ZXZlbnRIb2xkZXIuYmluZCgiZHJhZyIsIG9uRHJhZyk7CisgICAgICAgICAgICAgICAgZXZlbnRI
b2xkZXIuYmluZCgiZHJhZ2VuZCIsIG9uRHJhZ0VuZCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBwbG90Lnpvb21PdXQgPSBmdW5jdGlvbiAoYXJncykgeworICAgICAgICAg
ICAgaWYgKCFhcmdzKQorICAgICAgICAgICAgICAgIGFyZ3MgPSB7fTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFhcmdzLmFtb3VudCkKKyAgICAgICAgICAgICAgICBhcmdzLmFtb3Vu
dCA9IHBsb3QuZ2V0T3B0aW9ucygpLnpvb20uYW1vdW50OworCisgICAgICAgICAgICBhcmdzLmFt
b3VudCA9IDEgLyBhcmdzLmFtb3VudDsKKyAgICAgICAgICAgIHBsb3Quem9vbShhcmdzKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIHBsb3Quem9vbSA9IGZ1bmN0aW9uIChhcmdzKSB7
CisgICAgICAgICAgICBpZiAoIWFyZ3MpCisgICAgICAgICAgICAgICAgYXJncyA9IHt9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB2YXIgYyA9IGFyZ3MuY2VudGVyLAorICAgICAgICAgICAg
ICAgIGFtb3VudCA9IGFyZ3MuYW1vdW50IHx8IHBsb3QuZ2V0T3B0aW9ucygpLnpvb20uYW1vdW50
LAorICAgICAgICAgICAgICAgIHcgPSBwbG90LndpZHRoKCksIGggPSBwbG90LmhlaWdodCgpOwor
CisgICAgICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICAgICAgYyA9IHsgbGVmdDogdyAvIDIs
IHRvcDogaCAvIDIgfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciB4ZiA9IGMu
bGVmdCAvIHcsCisgICAgICAgICAgICAgICAgeWYgPSBjLnRvcCAvIGgsCisgICAgICAgICAgICAg
ICAgbWlubWF4ID0geworICAgICAgICAgICAgICAgICAgICB4OiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtaW46IGMubGVmdCAtIHhmICogdyAvIGFtb3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1heDogYy5sZWZ0ICsgKDEgLSB4ZikgKiB3IC8gYW1vdW50CisgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHk6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1pbjogYy50b3AgLSB5ZiAqIGggLyBhbW91bnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXg6IGMudG9wICsgKDEgLSB5ZikgKiBoIC8gYW1vdW50CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAkLmVhY2gocGxvdC5nZXRBeGVz
KCksIGZ1bmN0aW9uKF8sIGF4aXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IGF4aXMu
b3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgbWluID0gbWlubWF4W2F4aXMuZGlyZWN0aW9u
XS5taW4sCisgICAgICAgICAgICAgICAgICAgIG1heCA9IG1pbm1heFtheGlzLmRpcmVjdGlvbl0u
bWF4LAorICAgICAgICAgICAgICAgICAgICB6ciA9IG9wdHMuem9vbVJhbmdlLAorICAgICAgICAg
ICAgICAgICAgICBwciA9IG9wdHMucGFuUmFuZ2U7CisKKyAgICAgICAgICAgICAgICBpZiAoenIg
PT09IGZhbHNlKSAvLyBubyB6b29taW5nIG9uIHRoaXMgYXhpcworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1pbiA9IGF4
aXMuYzJwKG1pbik7CisgICAgICAgICAgICAgICAgbWF4ID0gYXhpcy5jMnAobWF4KTsKKyAgICAg
ICAgICAgICAgICBpZiAobWluID4gbWF4KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ug
c3VyZSBtaW4gPCBtYXgKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IG1pbjsKKyAgICAg
ICAgICAgICAgICAgICAgbWluID0gbWF4OworICAgICAgICAgICAgICAgICAgICBtYXggPSB0bXA7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9DaGVjayB0aGF0IHdlIGFy
ZSBpbiBwYW5SYW5nZQorICAgICAgICAgICAgICAgIGlmIChwcikgeworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJbMF0gIT0gbnVsbCAmJiBtaW4gPCBwclswXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbWluID0gcHJbMF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHByWzFdICE9IG51bGwgJiYgbWF4ID4gcHJbMV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1heCA9IHByWzFdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbWF4IC0gbWluOworICAg
ICAgICAgICAgICAgIGlmICh6ciAmJgorICAgICAgICAgICAgICAgICAgICAoKHpyWzBdICE9IG51
bGwgJiYgcmFuZ2UgPCB6clswXSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICh6clsxXSAhPSBu
dWxsICYmIHJhbmdlID4genJbMV0pKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgb3B0cy5taW4gPSBtaW47CisgICAgICAgICAgICAg
ICAgb3B0cy5tYXggPSBtYXg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcGxvdC5zZXR1cEdyaWQoKTsKKyAgICAgICAgICAgIHBsb3QuZHJhdygpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIWFyZ3MucHJldmVudEV2ZW50KQorICAgICAgICAgICAg
ICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90em9vbSIsIFsgcGxvdCwgYXJn
cyBdKTsKKyAgICAgICAgfTsKKworICAgICAgICBwbG90LnBhbiA9IGZ1bmN0aW9uIChhcmdzKSB7
CisgICAgICAgICAgICB2YXIgZGVsdGEgPSB7CisgICAgICAgICAgICAgICAgeDogK2FyZ3MubGVm
dCwKKyAgICAgICAgICAgICAgICB5OiArYXJncy50b3AKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIGlmIChpc05hTihkZWx0YS54KSkKKyAgICAgICAgICAgICAgICBkZWx0YS54ID0gMDsK
KyAgICAgICAgICAgIGlmIChpc05hTihkZWx0YS55KSkKKyAgICAgICAgICAgICAgICBkZWx0YS55
ID0gMDsKKworICAgICAgICAgICAgJC5lYWNoKHBsb3QuZ2V0QXhlcygpLCBmdW5jdGlvbiAoXywg
YXhpcykgeworICAgICAgICAgICAgICAgIHZhciBvcHRzID0gYXhpcy5vcHRpb25zLAorICAgICAg
ICAgICAgICAgICAgICBtaW4sIG1heCwgZCA9IGRlbHRhW2F4aXMuZGlyZWN0aW9uXTsKKworICAg
ICAgICAgICAgICAgIG1pbiA9IGF4aXMuYzJwKGF4aXMucDJjKGF4aXMubWluKSArIGQpLAorICAg
ICAgICAgICAgICAgIG1heCA9IGF4aXMuYzJwKGF4aXMucDJjKGF4aXMubWF4KSArIGQpOworCisg
ICAgICAgICAgICAgICAgdmFyIHByID0gb3B0cy5wYW5SYW5nZTsKKyAgICAgICAgICAgICAgICBp
ZiAocHIgPT09IGZhbHNlKSAvLyBubyBwYW5uaW5nIG9uIHRoaXMgYXhpcworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHBy
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgd2UgaGl0IHRoZSB3YWxs
CisgICAgICAgICAgICAgICAgICAgIGlmIChwclswXSAhPSBudWxsICYmIHByWzBdID4gbWluKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBkID0gcHJbMF0gLSBtaW47CisgICAgICAgICAgICAg
ICAgICAgICAgICBtaW4gKz0gZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heCArPSBkOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAocHJbMV0gIT0gbnVsbCAmJiBwclsxXSA8IG1heCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZCA9IHByWzFdIC0gbWF4OworICAgICAgICAgICAgICAgICAgICAgICAgbWlu
ICs9IGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXggKz0gZDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBvcHRzLm1pbiA9IG1pbjsKKyAgICAgICAgICAgICAgICBvcHRzLm1heCA9IG1heDsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBwbG90LnNldHVwR3JpZCgp
OworICAgICAgICAgICAgcGxvdC5kcmF3KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghYXJncy5wcmV2ZW50RXZlbnQpCisgICAgICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRl
cigpLnRyaWdnZXIoInBsb3RwYW4iLCBbIHBsb3QsIGFyZ3MgXSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgZnVuY3Rpb24gc2h1dGRvd24ocGxvdCwgZXZlbnRIb2xkZXIpIHsKKyAgICAgICAgICAg
IGV2ZW50SG9sZGVyLnVuYmluZChwbG90LmdldE9wdGlvbnMoKS56b29tLnRyaWdnZXIsIG9uWm9v
bUNsaWNrKTsKKyAgICAgICAgICAgIGV2ZW50SG9sZGVyLnVuYmluZCgibW91c2V3aGVlbCIsIG9u
TW91c2VXaGVlbCk7CisgICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoImRyYWdzdGFydCIs
IG9uRHJhZ1N0YXJ0KTsKKyAgICAgICAgICAgIGV2ZW50SG9sZGVyLnVuYmluZCgiZHJhZyIsIG9u
RHJhZyk7CisgICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoImRyYWdlbmQiLCBvbkRyYWdF
bmQpOworICAgICAgICAgICAgaWYgKHBhblRpbWVvdXQpCisgICAgICAgICAgICAgICAgY2xlYXJU
aW1lb3V0KHBhblRpbWVvdXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwbG90Lmhv
b2tzLmJpbmRFdmVudHMucHVzaChiaW5kRXZlbnRzKTsKKyAgICAgICAgcGxvdC5ob29rcy5zaHV0
ZG93bi5wdXNoKHNodXRkb3duKTsKKyAgICB9CisgICAgCisgICAgJC5wbG90LnBsdWdpbnMucHVz
aCh7CisgICAgICAgIGluaXQ6IGluaXQsCisgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCisgICAg
ICAgIG5hbWU6ICduYXZpZ2F0ZScsCisgICAgICAgIHZlcnNpb246ICcxLjMnCisgICAgfSk7Cit9
KShqUXVlcnkpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVl
cnkuZmxvdC5wbHVnaW5zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucGx1Z2lucy5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucGx1Z2lucy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisvLyBDcm9zc2hhaXIKKyhmdW5jdGlvbihoKXto
LnBsb3QucGx1Z2lucy5wdXNoKHtpbml0OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGUoKXshYy5sb2Nr
ZWQmJi0xIT1jLngmJihjLng9LTEsYS50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpKX1mdW5jdGlvbiBn
KGQpe2lmKCFjLmxvY2tlZClpZihhLmdldFNlbGVjdGlvbiYmYS5nZXRTZWxlY3Rpb24oKSljLng9
LTE7ZWxzZXt2YXIgYj1hLm9mZnNldCgpO2MueD1NYXRoLm1heCgwLE1hdGgubWluKGQucGFnZVgt
Yi5sZWZ0LGEud2lkdGgoKSkpO2MueT1NYXRoLm1heCgwLE1hdGgubWluKGQucGFnZVktYi50b3As
YS5oZWlnaHQoKSkpO2EudHJpZ2dlclJlZHJhd092ZXJsYXkoKX19dmFyIGM9e3g6LTEseTotMSxs
b2NrZWQ6ITF9O2Euc2V0Q3Jvc3NoYWlyPWZ1bmN0aW9uKGQpe2Q/KGQ9YS5wMmMoZCksYy54PU1h
dGgubWF4KDAsTWF0aC5taW4oZC5sZWZ0LGEud2lkdGgoKSkpLGMueT1NYXRoLm1heCgwLE1hdGgu
bWluKGQudG9wLGEuaGVpZ2h0KCkpKSk6Yy54PS0xOworYS50cmlnZ2VyUmVkcmF3T3ZlcmxheSgp
fTthLmNsZWFyQ3Jvc3NoYWlyPWEuc2V0Q3Jvc3NoYWlyO2EubG9ja0Nyb3NzaGFpcj1mdW5jdGlv
bihkKXtkJiZhLnNldENyb3NzaGFpcihkKTtjLmxvY2tlZD0hMH07YS51bmxvY2tDcm9zc2hhaXI9
ZnVuY3Rpb24oKXtjLmxvY2tlZD0hMX07YS5ob29rcy5iaW5kRXZlbnRzLnB1c2goZnVuY3Rpb24o
YSxiKXthLmdldE9wdGlvbnMoKS5jcm9zc2hhaXIubW9kZSYmKGIubW91c2VvdXQoZSksYi5tb3Vz
ZW1vdmUoZykpfSk7YS5ob29rcy5kcmF3T3ZlcmxheS5wdXNoKGZ1bmN0aW9uKGEsYil7dmFyIGY9
YS5nZXRPcHRpb25zKCkuY3Jvc3NoYWlyO2lmKGYubW9kZSl7dmFyIGU9YS5nZXRQbG90T2Zmc2V0
KCk7Yi5zYXZlKCk7Yi50cmFuc2xhdGUoZS5sZWZ0LGUudG9wKTstMSE9Yy54JiYoYi5zdHJva2VT
dHlsZT1mLmNvbG9yLGIubGluZVdpZHRoPWYubGluZVdpZHRoLGIubGluZUpvaW49InJvdW5kIixi
LmJlZ2luUGF0aCgpLC0xIT1mLm1vZGUuaW5kZXhPZigieCIpJiYKKyhiLm1vdmVUbyhjLngsMCks
Yi5saW5lVG8oYy54LGEuaGVpZ2h0KCkpKSwtMSE9Zi5tb2RlLmluZGV4T2YoInkiKSYmKGIubW92
ZVRvKDAsYy55KSxiLmxpbmVUbyhhLndpZHRoKCksYy55KSksYi5zdHJva2UoKSk7Yi5yZXN0b3Jl
KCl9fSk7YS5ob29rcy5zaHV0ZG93bi5wdXNoKGZ1bmN0aW9uKGEsYil7Yi51bmJpbmQoIm1vdXNl
b3V0IixlKTtiLnVuYmluZCgibW91c2Vtb3ZlIixnKX0pfSxvcHRpb25zOntjcm9zc2hhaXI6e21v
ZGU6bnVsbCxjb2xvcjoicmdiYSgxNzAsIDAsIDAsIDAuODApIixsaW5lV2lkdGg6MX19LG5hbWU6
ImNyb3NzaGFpciIsdmVyc2lvbjoiMS4wIn0pfSkoalF1ZXJ5KTsKKworLy8gUmVzaXplCisoZnVu
Y3Rpb24oYSxmLGkpe2Z1bmN0aW9uIGQoKXtrPWZbZ10oZnVuY3Rpb24oKXtiLmVhY2goZnVuY3Rp
b24oKXt2YXIgYz1hKHRoaXMpLGQ9Yy53aWR0aCgpLGY9Yy5oZWlnaHQoKSxiPWEuZGF0YSh0aGlz
LGopO2lmKGQhPT1iLnd8fGYhPT1iLmgpYy50cmlnZ2VyKGgsW2Iudz1kLGIuaD1mXSl9KTtkKCl9
LGVbbF0pfXZhciBiPWEoW10pLGU9YS5yZXNpemU9YS5leHRlbmQoYS5yZXNpemUse30pLGssZz0i
c2V0VGltZW91dCIsaD0icmVzaXplIixqPWgrIi1zcGVjaWFsLWV2ZW50IixsPSJkZWxheSI7ZVts
XT0yNTA7ZS50aHJvdHRsZVdpbmRvdz0hMDthLmV2ZW50LnNwZWNpYWxbaF09e3NldHVwOmZ1bmN0
aW9uKCl7aWYoIWUudGhyb3R0bGVXaW5kb3cmJnRoaXNbZ10pcmV0dXJuITE7dmFyIGM9YSh0aGlz
KTtiPWIuYWRkKGMpO2EuZGF0YSh0aGlzLGose3c6Yy53aWR0aCgpLGg6Yy5oZWlnaHQoKX0pOzE9
PT1iLmxlbmd0aCYmZCgpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKCFlLnRocm90dGxlV2luZG93
JiYKK3RoaXNbZ10pcmV0dXJuITE7dmFyIGM9YSh0aGlzKTtiPWIubm90KGMpO2MucmVtb3ZlRGF0
YShqKTtiLmxlbmd0aHx8Y2xlYXJUaW1lb3V0KGspfSxhZGQ6ZnVuY3Rpb24oYyl7ZnVuY3Rpb24g
ZChjLGYsZSl7dmFyIGc9YSh0aGlzKSxoPWEuZGF0YSh0aGlzLGopO2gudz1mIT09aT9mOmcud2lk
dGgoKTtoLmg9ZSE9PWk/ZTpnLmhlaWdodCgpO2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKCFl
LnRocm90dGxlV2luZG93JiZ0aGlzW2ddKXJldHVybiExO3ZhciBiO2lmKGEuaXNGdW5jdGlvbihj
KSlyZXR1cm4gYj1jLGQ7Yj1jLmhhbmRsZXI7Yy5oYW5kbGVyPWR9fX0pKGpRdWVyeSx0aGlzKTsK
KyhmdW5jdGlvbihhKXthLnBsb3QucGx1Z2lucy5wdXNoKHtpbml0OmZ1bmN0aW9uKGEpe2Z1bmN0
aW9uIGkoKXt2YXIgZD1hLmdldFBsYWNlaG9sZGVyKCk7MD09ZC53aWR0aCgpfHwwPT1kLmhlaWdo
dCgpfHwoYS5yZXNpemUoKSxhLnNldHVwR3JpZCgpLGEuZHJhdygpKX1hLmhvb2tzLmJpbmRFdmVu
dHMucHVzaChmdW5jdGlvbihhKXthLmdldFBsYWNlaG9sZGVyKCkucmVzaXplKGkpfSk7YS5ob29r
cy5zaHV0ZG93bi5wdXNoKGZ1bmN0aW9uKGEpe2EuZ2V0UGxhY2Vob2xkZXIoKS51bmJpbmQoInJl
c2l6ZSIsaSl9KX0sb3B0aW9uczp7fSxuYW1lOiJyZXNpemUiLHZlcnNpb246IjEuMCJ9KX0pKGpR
dWVyeSk7CisKKy8vIFNlbGVjdGlvbgorKGZ1bmN0aW9uKGspe2sucGxvdC5wbHVnaW5zLnB1c2go
e2luaXQ6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gcChjKXtiLmFjdGl2ZSYmKHEoYyksYS5nZXRQbGFj
ZWhvbGRlcigpLnRyaWdnZXIoInBsb3RzZWxlY3RpbmciLFtuKCldKSl9ZnVuY3Rpb24gcihjKXsx
PT1jLndoaWNoJiYoZG9jdW1lbnQuYm9keS5mb2N1cygpLHZvaWQgMCE9PWRvY3VtZW50Lm9uc2Vs
ZWN0c3RhcnQmJm51bGw9PWgub25zZWxlY3RzdGFydCYmKGgub25zZWxlY3RzdGFydD1kb2N1bWVu
dC5vbnNlbGVjdHN0YXJ0LGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4h
MX0pLHZvaWQgMCE9PWRvY3VtZW50Lm9uZHJhZyYmbnVsbD09aC5vbmRyYWcmJihoLm9uZHJhZz1k
b2N1bWVudC5vbmRyYWcsZG9jdW1lbnQub25kcmFnPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxzKGIu
Zmlyc3QsYyksYi5hY3RpdmU9ITAsbD1mdW5jdGlvbihjKXtsPW51bGw7dm9pZCAwIT09ZG9jdW1l
bnQub25zZWxlY3RzdGFydCYmCisoZG9jdW1lbnQub25zZWxlY3RzdGFydD1oLm9uc2VsZWN0c3Rh
cnQpO3ZvaWQgMCE9PWRvY3VtZW50Lm9uZHJhZyYmKGRvY3VtZW50Lm9uZHJhZz1oLm9uZHJhZyk7
Yi5hY3RpdmU9ITE7cShjKTttKCk/dCgpOihhLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxv
dHVuc2VsZWN0ZWQiLFtdKSxhLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHNlbGVjdGlu
ZyIsW251bGxdKSl9LGsoZG9jdW1lbnQpLm9uZSgibW91c2V1cCIsbCkpfWZ1bmN0aW9uIG4oKXtp
ZighbSgpKXJldHVybiBudWxsO3ZhciBjPXt9LGo9Yi5maXJzdCxkPWIuc2Vjb25kO2suZWFjaChh
LmdldEF4ZXMoKSxmdW5jdGlvbihiLGEpe2lmKGEudXNlZCl7dmFyIGY9YS5jMnAoalthLmRpcmVj
dGlvbl0pLGk9YS5jMnAoZFthLmRpcmVjdGlvbl0pO2NbYl09e2Zyb206TWF0aC5taW4oZixpKSx0
bzpNYXRoLm1heChmLGkpfX19KTtyZXR1cm4gY31mdW5jdGlvbiB0KCl7dmFyIGM9bigpO2EuZ2V0
UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90c2VsZWN0ZWQiLAorW2NdKTtjLnhheGlzJiZjLnlh
eGlzJiZhLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigic2VsZWN0ZWQiLFt7eDE6Yy54YXhpcy5m
cm9tLHkxOmMueWF4aXMuZnJvbSx4MjpjLnhheGlzLnRvLHkyOmMueWF4aXMudG99XSl9ZnVuY3Rp
b24gcyhjLGope3ZhciBkPWEuZ2V0T3B0aW9ucygpLGU9YS5nZXRQbGFjZWhvbGRlcigpLm9mZnNl
dCgpLGc9YS5nZXRQbG90T2Zmc2V0KCksZj1qLnBhZ2VYLWUubGVmdC1nLmxlZnQsaT1hLndpZHRo
KCk7Yy54PTA+Zj8wOmY+aT9pOmY7ZT1qLnBhZ2VZLWUudG9wLWcudG9wO2c9YS5oZWlnaHQoKTtj
Lnk9MD5lPzA6ZT5nP2c6ZTsieSI9PWQuc2VsZWN0aW9uLm1vZGUmJihjLng9Yz09Yi5maXJzdD8w
OmEud2lkdGgoKSk7IngiPT1kLnNlbGVjdGlvbi5tb2RlJiYoYy55PWM9PWIuZmlyc3Q/MDphLmhl
aWdodCgpKX1mdW5jdGlvbiBxKGMpe251bGwhPWMucGFnZVgmJihzKGIuc2Vjb25kLGMpLG0oKT8o
Yi5zaG93PSEwLGEudHJpZ2dlclJlZHJhd092ZXJsYXkoKSk6Cit1KCEwKSl9ZnVuY3Rpb24gdShj
KXtiLnNob3cmJihiLnNob3c9ITEsYS50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpLGN8fGEuZ2V0UGxh
Y2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90dW5zZWxlY3RlZCIsW10pKX1mdW5jdGlvbiB2KGMsYil7
dmFyIGQsZSxnLGYsaT1hLmdldEF4ZXMoKSxoO2ZvcihoIGluIGkpaWYoZD1pW2hdLGQuZGlyZWN0
aW9uPT1iJiYoZj1iK2QubisiYXhpcyIsIWNbZl0mJjE9PWQubiYmKGY9YisiYXhpcyIpLGNbZl0p
KXtlPWNbZl0uZnJvbTtnPWNbZl0udG87YnJlYWt9Y1tmXXx8KGQ9IngiPT1iP2EuZ2V0WEF4ZXMo
KVswXTphLmdldFlBeGVzKClbMF0sZT1jW2IrIjEiXSxnPWNbYisiMiJdKTtudWxsIT1lJiYobnVs
bCE9ZyYmZT5nKSYmKGY9ZSxlPWcsZz1mKTtyZXR1cm57ZnJvbTplLHRvOmcsYXhpczpkfX1mdW5j
dGlvbiBtKCl7cmV0dXJuIDAuMTw9TWF0aC5hYnMoYi5zZWNvbmQueC1iLmZpcnN0LngpJiYwLjE8
PU1hdGguYWJzKGIuc2Vjb25kLnktYi5maXJzdC55KX0KK3ZhciBiPXtmaXJzdDp7eDotMSx5Oi0x
fSxzZWNvbmQ6e3g6LTEseTotMX0sc2hvdzohMSxhY3RpdmU6ITF9LGg9e30sbD1udWxsO2EuY2xl
YXJTZWxlY3Rpb249dTthLnNldFNlbGVjdGlvbj1mdW5jdGlvbihjLGope3ZhciBkLGU9YS5nZXRP
cHRpb25zKCk7InkiPT1lLnNlbGVjdGlvbi5tb2RlPyhiLmZpcnN0Lng9MCxiLnNlY29uZC54PWEu
d2lkdGgoKSk6KGQ9dihjLCJ4IiksYi5maXJzdC54PWQuYXhpcy5wMmMoZC5mcm9tKSxiLnNlY29u
ZC54PWQuYXhpcy5wMmMoZC50bykpOyJ4Ij09ZS5zZWxlY3Rpb24ubW9kZT8oYi5maXJzdC55PTAs
Yi5zZWNvbmQueT1hLmhlaWdodCgpKTooZD12KGMsInkiKSxiLmZpcnN0Lnk9ZC5heGlzLnAyYyhk
LmZyb20pLGIuc2Vjb25kLnk9ZC5heGlzLnAyYyhkLnRvKSk7Yi5zaG93PSEwO2EudHJpZ2dlclJl
ZHJhd092ZXJsYXkoKTshaiYmbSgpJiZ0KCl9O2EuZ2V0U2VsZWN0aW9uPW47YS5ob29rcy5iaW5k
RXZlbnRzLnB1c2goZnVuY3Rpb24oYywKK2Ipe251bGwhPWMuZ2V0T3B0aW9ucygpLnNlbGVjdGlv
bi5tb2RlJiYoYi5tb3VzZW1vdmUocCksYi5tb3VzZWRvd24ocikpfSk7YS5ob29rcy5kcmF3T3Zl
cmxheS5wdXNoKGZ1bmN0aW9uKGMsYSl7aWYoYi5zaG93JiZtKCkpe3ZhciBkPWMuZ2V0UGxvdE9m
ZnNldCgpLGU9Yy5nZXRPcHRpb25zKCk7YS5zYXZlKCk7YS50cmFuc2xhdGUoZC5sZWZ0LGQudG9w
KTtkPWsuY29sb3IucGFyc2UoZS5zZWxlY3Rpb24uY29sb3IpO2Euc3Ryb2tlU3R5bGU9ZC5zY2Fs
ZSgiYSIsMC44KS50b1N0cmluZygpO2EubGluZVdpZHRoPTE7YS5saW5lSm9pbj0icm91bmQiO2Eu
ZmlsbFN0eWxlPWQuc2NhbGUoImEiLDAuNCkudG9TdHJpbmcoKTt2YXIgZD1NYXRoLm1pbihiLmZp
cnN0LngsYi5zZWNvbmQueCksZT1NYXRoLm1pbihiLmZpcnN0LnksYi5zZWNvbmQueSksZz1NYXRo
LmFicyhiLnNlY29uZC54LWIuZmlyc3QueCksZj1NYXRoLmFicyhiLnNlY29uZC55LWIuZmlyc3Qu
eSk7YS5maWxsUmVjdChkLAorZSxnLGYpO2Euc3Ryb2tlUmVjdChkLGUsZyxmKTthLnJlc3RvcmUo
KX19KTthLmhvb2tzLnNodXRkb3duLnB1c2goZnVuY3Rpb24oYixhKXthLnVuYmluZCgibW91c2Vt
b3ZlIixwKTthLnVuYmluZCgibW91c2Vkb3duIixyKTtsJiZrKGRvY3VtZW50KS51bmJpbmQoIm1v
dXNldXAiLGwpfSl9LG9wdGlvbnM6e3NlbGVjdGlvbjp7bW9kZTpudWxsLGNvbG9yOiIjZThjZmFj
In19LG5hbWU6InNlbGVjdGlvbiIsdmVyc2lvbjoiMS4xIn0pfSkoalF1ZXJ5KTsKKworLy8gRmls
bGJldHdlZW4KKyhmdW5jdGlvbihqKXtqLnBsb3QucGx1Z2lucy5wdXNoKHtpbml0OmZ1bmN0aW9u
KGope2ouaG9va3MucHJvY2Vzc0RhdGFwb2ludHMucHVzaChmdW5jdGlvbihhLGgscSl7aWYobnVs
bCE9aC5maWxsQmV0d2Vlbil7dmFyIGU7YTp7dmFyIGE9YS5nZXREYXRhKCksYztmb3IoYz0wO2M8
YS5sZW5ndGg7KytjKWlmKGFbY10uaWQ9PWguZmlsbEJldHdlZW4pe2U9YVtjXTticmVhayBhfSJu
dW1iZXIiPT10eXBlb2YgaC5maWxsQmV0d2Vlbj8oYz1oLmZpbGxCZXR3ZWVuLGU9MD5jfHxjPj1h
Lmxlbmd0aD9udWxsOmFbY10pOmU9bnVsbH1pZihlKXthPXEucG9pbnRzaXplO2M9cS5wb2ludHM7
dmFyIGs9ZS5kYXRhcG9pbnRzLnBvaW50c2l6ZTtlPWUuZGF0YXBvaW50cy5wb2ludHM7Zm9yKHZh
ciBkPVtdLGksaixsLG4scD1oLmxpbmVzLnNob3cscz0yPGEmJnEuZm9ybWF0WzJdLnksdD1wJiZo
LmxpbmVzLnN0ZXBzLHI9ITAsYj0wLGY9MCxnOyEoYj49Yy5sZW5ndGgpOyl7Zz1kLmxlbmd0aDsK
K2lmKG51bGw9PWNbYl0pe2ZvcihtPTA7bTxhOysrbSlkLnB1c2goY1tiK21dKTtiKz1hfWVsc2Ug
aWYoZj49ZS5sZW5ndGgpe2lmKCFwKWZvcihtPTA7bTxhOysrbSlkLnB1c2goY1tiK21dKTtiKz1h
fWVsc2UgaWYobnVsbD09ZVtmXSl7Zm9yKG09MDttPGE7KyttKWQucHVzaChudWxsKTtyPSEwO2Yr
PWt9ZWxzZXtpPWNbYl07aj1jW2IrMV07aD1lW2ZdO2w9ZVtmKzFdO249MDtpZihpPT1oKXtmb3Io
bT0wO208YTsrK20pZC5wdXNoKGNbYittXSk7bj1sO2IrPWE7Zis9a31lbHNlIGlmKGk+aCl7aWYo
cCYmMDxiJiZudWxsIT1jW2ItYV0pe2k9aisoY1tiLWErMV0taikqKGgtaSkvKGNbYi1hXS1pKTtk
LnB1c2goaCk7ZC5wdXNoKGkpO2ZvcihtPTI7bTxhOysrbSlkLnB1c2goY1tiK21dKTtuPWx9Zis9
a31lbHNle2lmKHImJnApe2IrPWE7Y29udGludWV9Zm9yKG09MDttPGE7KyttKWQucHVzaChjW2Ir
bV0pO3AmJigwPGYmJm51bGwhPWVbZi1rXSkmJihuPWwrKGVbZi1rKzFdLWwpKgorKGktaCkvKGVb
Zi1rXS1oKSk7Yis9YX1yPSExO2chPWQubGVuZ3RoJiZzJiYoZFtnKzJdPW4pfWlmKHQmJmchPWQu
bGVuZ3RoJiYwPGcmJm51bGwhPWRbZ10mJmRbZ10hPWRbZy1hXSYmZFtnKzFdIT1kW2ctYSsxXSl7
Zm9yKG09MDttPGE7KyttKWRbZythK21dPWRbZyttXTtkW2crMV09ZFtnLWErMV19fXEucG9pbnRz
PWR9fX0pfSxvcHRpb25zOntzZXJpZXM6e2ZpbGxCZXR3ZWVuOm51bGx9fSxuYW1lOiJmaWxsYmV0
d2VlbiIsdmVyc2lvbjoiMS4wIn0pfSkoalF1ZXJ5KTsKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucGx1Z2lucy5qcwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvanMvanF1ZXJ5LmZsb3QucmVzaXplLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucmVzaXplLmpzCShyZXZpc2lvbiAw
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5yZXNp
emUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyogRmxvdCBwbHVnaW4gZm9y
IGF1dG9tYXRpY2FsbHkgcmVkcmF3aW5nIHBsb3RzIGFzIHRoZSBwbGFjZWhvbGRlciByZXNpemVz
LgorCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KK0xpY2Vu
c2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KKworSXQgd29ya3MgYnkgbGlzdGVuaW5nIGZvciBj
aGFuZ2VzIG9uIHRoZSBwbGFjZWhvbGRlciBkaXYgKHRocm91Z2ggdGhlIGpRdWVyeQorcmVzaXpl
IGV2ZW50IHBsdWdpbikgLSBpZiB0aGUgc2l6ZSBjaGFuZ2VzLCBpdCB3aWxsIHJlZHJhdyB0aGUg
cGxvdC4KKworVGhlcmUgYXJlIG5vIG9wdGlvbnMuIElmIHlvdSBuZWVkIHRvIGRpc2FibGUgdGhl
IHBsdWdpbiBmb3Igc29tZSBwbG90cywgeW91CitjYW4ganVzdCBmaXggdGhlIHNpemUgb2YgdGhl
aXIgcGxhY2Vob2xkZXJzLgorCisqLworCisvKiBJbmxpbmUgZGVwZW5kZW5jeToKKyAqIGpRdWVy
eSByZXNpemUgZXZlbnQgLSB2MS4xIC0gMy8xNC8yMDEwCisgKiBodHRwOi8vYmVuYWxtYW4uY29t
L3Byb2plY3RzL2pxdWVyeS1yZXNpemUtcGx1Z2luLworICoKKyAqIENvcHlyaWdodCAoYykgMjAx
MCAiQ293Ym95IiBCZW4gQWxtYW4KKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQg
R1BMIGxpY2Vuc2VzLgorICogaHR0cDovL2JlbmFsbWFuLmNvbS9hYm91dC9saWNlbnNlLworICov
CisKKyhmdW5jdGlvbigkLGgsYyl7dmFyIGE9JChbXSksZT0kLnJlc2l6ZT0kLmV4dGVuZCgkLnJl
c2l6ZSx7fSksaSxrPSJzZXRUaW1lb3V0IixqPSJyZXNpemUiLGQ9aisiLXNwZWNpYWwtZXZlbnQi
LGI9ImRlbGF5IixmPSJ0aHJvdHRsZVdpbmRvdyI7ZVtiXT0yNTA7ZVtmXT10cnVlOyQuZXZlbnQu
c3BlY2lhbFtqXT17c2V0dXA6ZnVuY3Rpb24oKXtpZighZVtmXSYmdGhpc1trXSl7cmV0dXJuIGZh
bHNlfXZhciBsPSQodGhpcyk7YT1hLmFkZChsKTskLmRhdGEodGhpcyxkLHt3Omwud2lkdGgoKSxo
OmwuaGVpZ2h0KCl9KTtpZihhLmxlbmd0aD09PTEpe2coKX19LHRlYXJkb3duOmZ1bmN0aW9uKCl7
aWYoIWVbZl0mJnRoaXNba10pe3JldHVybiBmYWxzZX12YXIgbD0kKHRoaXMpO2E9YS5ub3QobCk7
bC5yZW1vdmVEYXRhKGQpO2lmKCFhLmxlbmd0aCl7Y2xlYXJUaW1lb3V0KGkpfX0sYWRkOmZ1bmN0
aW9uKGwpe2lmKCFlW2ZdJiZ0aGlzW2tdKXtyZXR1cm4gZmFsc2V9dmFyIG47ZnVuY3Rpb24gbShz
LG8scCl7dmFyIHE9JCh0aGlzKSxyPSQuZGF0YSh0aGlzLGQpO3Iudz1vIT09Yz9vOnEud2lkdGgo
KTtyLmg9cCE9PWM/cDpxLmhlaWdodCgpO24uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKCQuaXNG
dW5jdGlvbihsKSl7bj1sO3JldHVybiBtfWVsc2V7bj1sLmhhbmRsZXI7bC5oYW5kbGVyPW19fX07
ZnVuY3Rpb24gZygpe2k9aFtrXShmdW5jdGlvbigpe2EuZWFjaChmdW5jdGlvbigpe3ZhciBuPSQo
dGhpcyksbT1uLndpZHRoKCksbD1uLmhlaWdodCgpLG89JC5kYXRhKHRoaXMsZCk7aWYobSE9PW8u
d3x8bCE9PW8uaCl7bi50cmlnZ2VyKGosW28udz1tLG8uaD1sXSl9fSk7ZygpfSxlW2JdKX19KShq
UXVlcnksdGhpcyk7CisKKyhmdW5jdGlvbiAoJCkgeworICAgIHZhciBvcHRpb25zID0geyB9OyAv
LyBubyBvcHRpb25zCisKKyAgICBmdW5jdGlvbiBpbml0KHBsb3QpIHsKKyAgICAgICAgZnVuY3Rp
b24gb25SZXNpemUoKSB7CisgICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBwbG90LmdldFBs
YWNlaG9sZGVyKCk7CisKKyAgICAgICAgICAgIC8vIHNvbWVib2R5IG1pZ2h0IGhhdmUgaGlkZGVu
IHVzIGFuZCB3ZSBjYW4ndCBwbG90CisgICAgICAgICAgICAvLyB3aGVuIHdlIGRvbid0IGhhdmUg
dGhlIGRpbWVuc2lvbnMKKyAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlci53aWR0aCgpID09IDAg
fHwgcGxhY2Vob2xkZXIuaGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIHBsb3QucmVzaXplKCk7CisgICAgICAgICAgICBwbG90LnNldHVwR3JpZCgp
OworICAgICAgICAgICAgcGxvdC5kcmF3KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9uIGJpbmRFdmVudHMocGxvdCwgZXZlbnRIb2xkZXIpIHsKKyAgICAgICAgICAgIHBs
b3QuZ2V0UGxhY2Vob2xkZXIoKS5yZXNpemUob25SZXNpemUpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gc2h1dGRvd24ocGxvdCwgZXZlbnRIb2xkZXIpIHsKKyAgICAgICAgICAgIHBs
b3QuZ2V0UGxhY2Vob2xkZXIoKS51bmJpbmQoInJlc2l6ZSIsIG9uUmVzaXplKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcGxvdC5ob29rcy5iaW5kRXZlbnRzLnB1c2goYmluZEV2ZW50
cyk7CisgICAgICAgIHBsb3QuaG9va3Muc2h1dGRvd24ucHVzaChzaHV0ZG93bik7CisgICAgfQor
ICAgIAorICAgICQucGxvdC5wbHVnaW5zLnB1c2goeworICAgICAgICBpbml0OiBpbml0LAorICAg
ICAgICBvcHRpb25zOiBvcHRpb25zLAorICAgICAgICBuYW1lOiAncmVzaXplJywKKyAgICAgICAg
dmVyc2lvbjogJzEuMCcKKyAgICB9KTsKK30pKGpRdWVyeSk7CkluZGV4OiBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnNlbGVjdGlvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnNlbGVj
dGlvbi5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
anMvanF1ZXJ5LmZsb3Quc2VsZWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ0
IEBACisvKiBGbG90IHBsdWdpbiBmb3Igc2VsZWN0aW5nIHJlZ2lvbnMgb2YgYSBwbG90LgorCitD
b3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KK0xpY2Vuc2VkIHVu
ZGVyIHRoZSBNSVQgbGljZW5zZS4KKworVGhlIHBsdWdpbiBzdXBwb3J0cyB0aGVzZSBvcHRpb25z
OgorCitzZWxlY3Rpb246IHsKKyAgICBtb2RlOiBudWxsIG9yICJ4IiBvciAieSIgb3IgInh5IiwK
KyAgICBjb2xvcjogY29sb3IKK30KKworU2VsZWN0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBz
ZXR0aW5nIHRoZSBtb2RlIHRvIG9uZSBvZiAieCIsICJ5IiBvciAieHkiLgorSW4gIngiIG1vZGUs
IHRoZSB1c2VyIHdpbGwgb25seSBiZSBhYmxlIHRvIHNwZWNpZnkgdGhlIHggcmFuZ2UsIHNpbWls
YXJseSBmb3IKKyJ5IiBtb2RlLiBGb3IgInh5IiwgdGhlIHNlbGVjdGlvbiBiZWNvbWVzIGEgcmVj
dGFuZ2xlIHdoZXJlIGJvdGggcmFuZ2VzIGNhbiBiZQorc3BlY2lmaWVkLiAiY29sb3IiIGlzIGNv
bG9yIG9mIHRoZSBzZWxlY3Rpb24gKGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgY29sb3IKK2xh
dGVyIG9uLCB5b3UgY2FuIGdldCB0byBpdCB3aXRoIHBsb3QuZ2V0T3B0aW9ucygpLnNlbGVjdGlv
bi5jb2xvcikuCisKK1doZW4gc2VsZWN0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZCwgYSAicGxvdHNl
bGVjdGVkIiBldmVudCB3aWxsIGJlIGVtaXR0ZWQgb24KK3RoZSBET00gZWxlbWVudCB5b3UgcGFz
c2VkIGludG8gdGhlIHBsb3QgZnVuY3Rpb24uIFRoZSBldmVudCBoYW5kbGVyIGdldHMgYQorcGFy
YW1ldGVyIHdpdGggdGhlIHJhbmdlcyBzZWxlY3RlZCBvbiB0aGUgYXhlcywgbGlrZSB0aGlzOgor
CisgICAgcGxhY2Vob2xkZXIuYmluZCggInBsb3RzZWxlY3RlZCIsIGZ1bmN0aW9uKCBldmVudCwg
cmFuZ2VzICkgeworICAgICAgICBhbGVydCgiWW91IHNlbGVjdGVkICIgKyByYW5nZXMueGF4aXMu
ZnJvbSArICIgdG8gIiArIHJhbmdlcy54YXhpcy50bykKKyAgICAgICAgLy8gc2ltaWxhciBmb3Ig
eWF4aXMgLSB3aXRoIG11bHRpcGxlIGF4ZXMsIHRoZSBleHRyYSBvbmVzIGFyZSBpbgorICAgICAg
ICAvLyB4MmF4aXMsIHgzYXhpcywgLi4uCisgICAgfSk7CisKK1RoZSAicGxvdHNlbGVjdGVkIiBl
dmVudCBpcyBvbmx5IGZpcmVkIHdoZW4gdGhlIHVzZXIgaGFzIGZpbmlzaGVkIG1ha2luZyB0aGUK
K3NlbGVjdGlvbi4gQSAicGxvdHNlbGVjdGluZyIgZXZlbnQgaXMgZmlyZWQgZHVyaW5nIHRoZSBw
cm9jZXNzIHdpdGggdGhlIHNhbWUKK3BhcmFtZXRlcnMgYXMgdGhlICJwbG90c2VsZWN0ZWQiIGV2
ZW50LCBpbiBjYXNlIHlvdSB3YW50IHRvIGtub3cgd2hhdCdzCitoYXBwZW5pbmcgd2hpbGUgaXQn
cyBoYXBwZW5pbmcsCisKK0EgInBsb3R1bnNlbGVjdGVkIiBldmVudCB3aXRoIG5vIGFyZ3VtZW50
cyBpcyBlbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZQorbW91c2UgdG8gcmVtb3ZlIHRo
ZSBzZWxlY3Rpb24uCisKK1RoZSBwbHVnaW4gYWxsc28gYWRkcyB0aGUgZm9sbG93aW5nIG1ldGhv
ZHMgdG8gdGhlIHBsb3Qgb2JqZWN0OgorCistIHNldFNlbGVjdGlvbiggcmFuZ2VzLCBwcmV2ZW50
RXZlbnQgKQorCisgIFNldCB0aGUgc2VsZWN0aW9uIHJlY3RhbmdsZS4gVGhlIHBhc3NlZCBpbiBy
YW5nZXMgaXMgb24gdGhlIHNhbWUgZm9ybSBhcworICByZXR1cm5lZCBpbiB0aGUgInBsb3RzZWxl
Y3RlZCIgZXZlbnQuIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyAieCIsIHlvdQorICBzaG91bGQg
cHV0IGluIGVpdGhlciBhbiB4YXhpcyByYW5nZSwgaWYgdGhlIG1vZGUgaXMgInkiIHlvdSBuZWVk
IHRvIHB1dCBpbgorICBhbiB5YXhpcyByYW5nZSBhbmQgYm90aCB4YXhpcyBhbmQgeWF4aXMgaWYg
dGhlIHNlbGVjdGlvbiBtb2RlIGlzICJ4eSIsIGxpa2UKKyAgdGhpczoKKworICAgIHNldFNlbGVj
dGlvbih7IHhheGlzOiB7IGZyb206IDAsIHRvOiAxMCB9LCB5YXhpczogeyBmcm9tOiA0MCwgdG86
IDYwIH0gfSk7CisKKyAgc2V0U2VsZWN0aW9uIHdpbGwgdHJpZ2dlciB0aGUgInBsb3RzZWxlY3Rl
ZCIgZXZlbnQgd2hlbiBjYWxsZWQuIElmIHlvdSBkb24ndAorICB3YW50IHRoYXQgdG8gaGFwcGVu
LCBlLmcuIGlmIHlvdSdyZSBpbnNpZGUgYSAicGxvdHNlbGVjdGVkIiBoYW5kbGVyLCBwYXNzCisg
IHRydWUgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIElmIHlvdSBhcmUgdXNpbmcgbXVsdGlwbGUg
YXhlcywgeW91IGNhbgorICBzcGVjaWZ5IHRoZSByYW5nZXMgb24gYW55IG9mIHRob3NlLCBlLmcu
IGFzIHgyYXhpcy94M2F4aXMvLi4uIGluc3RlYWQgb2YKKyAgeGF4aXMsIHRoZSBwbHVnaW4gcGlj
a3MgdGhlIGZpcnN0IG9uZSBpdCBzZWVzLgorCistIGNsZWFyU2VsZWN0aW9uKCBwcmV2ZW50RXZl
bnQgKQorCisgIENsZWFyIHRoZSBzZWxlY3Rpb24gcmVjdGFuZ2xlLiBQYXNzIGluIHRydWUgdG8g
YXZvaWQgZ2V0dGluZyBhCisgICJwbG90dW5zZWxlY3RlZCIgZXZlbnQuCisKKy0gZ2V0U2VsZWN0
aW9uKCkKKworICBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpbiB0aGUgc2FtZSBmb3Jt
YXQgYXMgdGhlICJwbG90c2VsZWN0ZWQiCisgIGV2ZW50LiBJZiB0aGVyZSdzIGN1cnJlbnRseSBu
byBzZWxlY3Rpb24sIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwuCisKKyovCisKKyhmdW5jdGlv
biAoJCkgeworICAgIGZ1bmN0aW9uIGluaXQocGxvdCkgeworICAgICAgICB2YXIgc2VsZWN0aW9u
ID0geworICAgICAgICAgICAgICAgIGZpcnN0OiB7IHg6IC0xLCB5OiAtMX0sIHNlY29uZDogeyB4
OiAtMSwgeTogLTF9LAorICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlLAorICAgICAgICAgICAg
ICAgIGFjdGl2ZTogZmFsc2UKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gRklYTUU6IFRo
ZSBkcmFnIGhhbmRsaW5nIGltcGxlbWVudGVkIGhlcmUgc2hvdWxkIGJlCisgICAgICAgIC8vIGFi
c3RyYWN0ZWQgb3V0LCB0aGVyZSdzIHNvbWUgc2ltaWxhciBjb2RlIGZyb20gYSBsaWJyYXJ5IGlu
CisgICAgICAgIC8vIHRoZSBuYXZpZ2F0aW9uIHBsdWdpbiwgdGhpcyBzaG91bGQgYmUgbWFzc2Fn
ZWQgYSBiaXQgdG8gZml0CisgICAgICAgIC8vIHRoZSBGbG90IGNhc2VzIGhlcmUgYmV0dGVyIGFu
ZCByZXVzZWQuIERvaW5nIHRoaXMgd291bGQKKyAgICAgICAgLy8gbWFrZSB0aGlzIHBsdWdpbiBt
dWNoIHNsaW1tZXIuCisgICAgICAgIHZhciBzYXZlZGhhbmRsZXJzID0ge307CisKKyAgICAgICAg
dmFyIG1vdXNlVXBIYW5kbGVyID0gbnVsbDsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIG9u
TW91c2VNb3ZlKGUpIHsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uYWN0aXZlKSB7CisgICAg
ICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90c2VsZWN0aW5nIiwg
WyBnZXRTZWxlY3Rpb24oKSBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKKyAgICAgICAgICAgIGlmIChlLndoaWNoICE9IDEp
ICAvLyBvbmx5IGFjY2VwdCBsZWZ0LWNsaWNrCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBjYW5jZWwgb3V0IGFueSB0ZXh0IHNlbGVjdGlvbnMK
KyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTsKKworICAgICAgICAgICAgLy8gcHJl
dmVudCB0ZXh0IHNlbGVjdGlvbiBhbmQgZHJhZyBpbiBvbGQtc2Nob29sIGJyb3dzZXJzCisgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQub25zZWxlY3RzdGFydCAhPT0gdW5kZWZpbmVkICYmIHNhdmVk
aGFuZGxlcnMub25zZWxlY3RzdGFydCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2F2ZWRo
YW5kbGVycy5vbnNlbGVjdHN0YXJ0ID0gZG9jdW1lbnQub25zZWxlY3RzdGFydDsKKyAgICAgICAg
ICAgICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFs
c2U7IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQub25kcmFnICE9
PSB1bmRlZmluZWQgJiYgc2F2ZWRoYW5kbGVycy5vbmRyYWcgPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIHNhdmVkaGFuZGxlcnMub25kcmFnID0gZG9jdW1lbnQub25kcmFnOworICAgICAgICAg
ICAgICAgIGRvY3VtZW50Lm9uZHJhZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRTZWxlY3Rpb25Qb3Moc2VsZWN0aW9uLmZp
cnN0LCBlKTsKKworICAgICAgICAgICAgc2VsZWN0aW9uLmFjdGl2ZSA9IHRydWU7CisKKyAgICAg
ICAgICAgIC8vIHRoaXMgaXMgYSBiaXQgc2lsbHksIGJ1dCB3ZSBoYXZlIHRvIHVzZSBhIGNsb3N1
cmUgdG8gYmUKKyAgICAgICAgICAgIC8vIGFibGUgdG8gd2hhY2sgdGhlIHNhbWUgaGFuZGxlciBh
Z2FpbgorICAgICAgICAgICAgbW91c2VVcEhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgeyBvbk1vdXNl
VXAoZSk7IH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uZSgibW91
c2V1cCIsIG1vdXNlVXBIYW5kbGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9u
TW91c2VVcChlKSB7CisgICAgICAgICAgICBtb3VzZVVwSGFuZGxlciA9IG51bGw7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIHJldmVydCBkcmFnIHN0dWZmIGZvciBvbGQtc2Nob29sIGJy
b3dzZXJzCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQub25zZWxlY3RzdGFydCAhPT0gdW5kZWZp
bmVkKQorICAgICAgICAgICAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBzYXZlZGhhbmRs
ZXJzLm9uc2VsZWN0c3RhcnQ7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQub25kcmFnICE9PSB1
bmRlZmluZWQpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQub25kcmFnID0gc2F2ZWRoYW5kbGVy
cy5vbmRyYWc7CisKKyAgICAgICAgICAgIC8vIG5vIG1vcmUgZHJhZ2dpbmcKKyAgICAgICAgICAg
IHNlbGVjdGlvbi5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihl
KTsKKworICAgICAgICAgICAgaWYgKHNlbGVjdGlvbklzU2FuZSgpKQorICAgICAgICAgICAgICAg
IHRyaWdnZXJTZWxlY3RlZEV2ZW50KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyB0aGlzIGNvdW50cyBhcyBhIGNsZWFyCisgICAgICAgICAgICAgICAgcGxvdC5nZXRQ
bGFjZWhvbGRlcigpLnRyaWdnZXIoInBsb3R1bnNlbGVjdGVkIiwgWyBdKTsKKyAgICAgICAgICAg
ICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHNlbGVjdGluZyIsIFsgbnVs
bCBdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworICAgICAgICAgICAgaWYg
KCFzZWxlY3Rpb25Jc1NhbmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb24uc2hvdykgcmV0dXJuIG51bGw7CisK
KyAgICAgICAgICAgIHZhciByID0ge30sIGMxID0gc2VsZWN0aW9uLmZpcnN0LCBjMiA9IHNlbGVj
dGlvbi5zZWNvbmQ7CisgICAgICAgICAgICAkLmVhY2gocGxvdC5nZXRBeGVzKCksIGZ1bmN0aW9u
IChuYW1lLCBheGlzKSB7CisgICAgICAgICAgICAgICAgaWYgKGF4aXMudXNlZCkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgcDEgPSBheGlzLmMycChjMVtheGlzLmRpcmVjdGlvbl0pLCBwMiA9
IGF4aXMuYzJwKGMyW2F4aXMuZGlyZWN0aW9uXSk7IAorICAgICAgICAgICAgICAgICAgICByW25h
bWVdID0geyBmcm9tOiBNYXRoLm1pbihwMSwgcDIpLCB0bzogTWF0aC5tYXgocDEsIHAyKSB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHI7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyU2VsZWN0ZWRFdmVudCgpIHsK
KyAgICAgICAgICAgIHZhciByID0gZ2V0U2VsZWN0aW9uKCk7CisKKyAgICAgICAgICAgIHBsb3Qu
Z2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90c2VsZWN0ZWQiLCBbIHIgXSk7CisKKyAgICAg
ICAgICAgIC8vIGJhY2t3YXJkcy1jb21wYXQgc3R1ZmYsIHRvIGJlIHJlbW92ZWQgaW4gZnV0dXJl
CisgICAgICAgICAgICBpZiAoci54YXhpcyAmJiByLnlheGlzKQorICAgICAgICAgICAgICAgIHBs
b3QuZ2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJzZWxlY3RlZCIsIFsgeyB4MTogci54YXhpcy5m
cm9tLCB5MTogci55YXhpcy5mcm9tLCB4Mjogci54YXhpcy50bywgeTI6IHIueWF4aXMudG8gfSBd
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNsYW1wKG1pbiwgdmFsdWUsIG1heCkg
eworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDwgbWluID8gbWluOiAodmFsdWUgPiBtYXggPyBt
YXg6IHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvblBv
cyhwb3MsIGUpIHsKKyAgICAgICAgICAgIHZhciBvID0gcGxvdC5nZXRPcHRpb25zKCk7CisgICAg
ICAgICAgICB2YXIgb2Zmc2V0ID0gcGxvdC5nZXRQbGFjZWhvbGRlcigpLm9mZnNldCgpOworICAg
ICAgICAgICAgdmFyIHBsb3RPZmZzZXQgPSBwbG90LmdldFBsb3RPZmZzZXQoKTsKKyAgICAgICAg
ICAgIHBvcy54ID0gY2xhbXAoMCwgZS5wYWdlWCAtIG9mZnNldC5sZWZ0IC0gcGxvdE9mZnNldC5s
ZWZ0LCBwbG90LndpZHRoKCkpOworICAgICAgICAgICAgcG9zLnkgPSBjbGFtcCgwLCBlLnBhZ2VZ
IC0gb2Zmc2V0LnRvcCAtIHBsb3RPZmZzZXQudG9wLCBwbG90LmhlaWdodCgpKTsKKworICAgICAg
ICAgICAgaWYgKG8uc2VsZWN0aW9uLm1vZGUgPT0gInkiKQorICAgICAgICAgICAgICAgIHBvcy54
ID0gcG9zID09IHNlbGVjdGlvbi5maXJzdCA/IDAgOiBwbG90LndpZHRoKCk7CisKKyAgICAgICAg
ICAgIGlmIChvLnNlbGVjdGlvbi5tb2RlID09ICJ4IikKKyAgICAgICAgICAgICAgICBwb3MueSA9
IHBvcyA9PSBzZWxlY3Rpb24uZmlyc3QgPyAwIDogcGxvdC5oZWlnaHQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihwb3MpIHsKKyAgICAgICAgICAgIGlm
IChwb3MucGFnZVggPT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIHNldFNlbGVjdGlvblBvcyhzZWxlY3Rpb24uc2Vjb25kLCBwb3MpOworICAgICAgICAgICAg
aWYgKHNlbGVjdGlvbklzU2FuZSgpKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNob3cg
PSB0cnVlOworICAgICAgICAgICAgICAgIHBsb3QudHJpZ2dlclJlZHJhd092ZXJsYXkoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjbGVhclNlbGVj
dGlvbih0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9u
KHByZXZlbnRFdmVudCkgeworICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5zaG93KSB7CisgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uLnNob3cgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBwbG90
LnRyaWdnZXJSZWRyYXdPdmVybGF5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFwcmV2ZW50RXZl
bnQpCisgICAgICAgICAgICAgICAgICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJw
bG90dW5zZWxlY3RlZCIsIFsgXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBmdW5jdGlvbiB0YWtlbiBmcm9tIG1hcmtpbmdzIHN1cHBvcnQgaW4gRmxvdAorICAgICAg
ICBmdW5jdGlvbiBleHRyYWN0UmFuZ2UocmFuZ2VzLCBjb29yZCkgeworICAgICAgICAgICAgdmFy
IGF4aXMsIGZyb20sIHRvLCBrZXksIGF4ZXMgPSBwbG90LmdldEF4ZXMoKTsKKworICAgICAgICAg
ICAgZm9yICh2YXIgayBpbiBheGVzKSB7CisgICAgICAgICAgICAgICAgYXhpcyA9IGF4ZXNba107
CisgICAgICAgICAgICAgICAgaWYgKGF4aXMuZGlyZWN0aW9uID09IGNvb3JkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGtleSA9IGNvb3JkICsgYXhpcy5uICsgImF4aXMiOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXJhbmdlc1trZXldICYmIGF4aXMubiA9PSAxKQorICAgICAgICAgICAgICAg
ICAgICAgICAga2V5ID0gY29vcmQgKyAiYXhpcyI7IC8vIHN1cHBvcnQgeDFheGlzIGFzIHhheGlz
CisgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXNba2V5XSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZnJvbSA9IHJhbmdlc1trZXldLmZyb207CisgICAgICAgICAgICAgICAgICAgICAg
ICB0byA9IHJhbmdlc1trZXldLnRvOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGJhY2t3YXJkcy1jb21wYXQgc3R1ZmYgLSB0byBiZSByZW1vdmVkIGlu
IGZ1dHVyZQorICAgICAgICAgICAgaWYgKCFyYW5nZXNba2V5XSkgeworICAgICAgICAgICAgICAg
IGF4aXMgPSBjb29yZCA9PSAieCIgPyBwbG90LmdldFhBeGVzKClbMF0gOiBwbG90LmdldFlBeGVz
KClbMF07CisgICAgICAgICAgICAgICAgZnJvbSA9IHJhbmdlc1tjb29yZCArICIxIl07CisgICAg
ICAgICAgICAgICAgdG8gPSByYW5nZXNbY29vcmQgKyAiMiJdOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBhdXRvLXJldmVyc2UgYXMgYW4gYWRkZWQgYm9udXMKKyAgICAgICAgICAg
IGlmIChmcm9tICE9IG51bGwgJiYgdG8gIT0gbnVsbCAmJiBmcm9tID4gdG8pIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdG1wID0gZnJvbTsKKyAgICAgICAgICAgICAgICBmcm9tID0gdG87CisgICAg
ICAgICAgICAgICAgdG8gPSB0bXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiB7IGZyb206IGZyb20sIHRvOiB0bywgYXhpczogYXhpcyB9OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24ocmFuZ2VzLCBwcmV2
ZW50RXZlbnQpIHsKKyAgICAgICAgICAgIHZhciBheGlzLCByYW5nZSwgbyA9IHBsb3QuZ2V0T3B0
aW9ucygpOworCisgICAgICAgICAgICBpZiAoby5zZWxlY3Rpb24ubW9kZSA9PSAieSIpIHsKKyAg
ICAgICAgICAgICAgICBzZWxlY3Rpb24uZmlyc3QueCA9IDA7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uLnNlY29uZC54ID0gcGxvdC53aWR0aCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmFuZ2UgPSBleHRyYWN0UmFuZ2UocmFuZ2VzLCAi
eCIpOworCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZpcnN0LnggPSByYW5nZS5heGlzLnAy
YyhyYW5nZS5mcm9tKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2Vjb25kLnggPSByYW5n
ZS5heGlzLnAyYyhyYW5nZS50byk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChv
LnNlbGVjdGlvbi5tb2RlID09ICJ4IikgeworICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5maXJz
dC55ID0gMDsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2Vjb25kLnkgPSBwbG90LmhlaWdo
dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
cmFuZ2UgPSBleHRyYWN0UmFuZ2UocmFuZ2VzLCAieSIpOworCisgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uLmZpcnN0LnkgPSByYW5nZS5heGlzLnAyYyhyYW5nZS5mcm9tKTsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24uc2Vjb25kLnkgPSByYW5nZS5heGlzLnAyYyhyYW5nZS50byk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zaG93ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHBsb3QudHJpZ2dlclJlZHJhd092ZXJsYXkoKTsKKyAgICAgICAgICAgIGlmICghcHJldmVu
dEV2ZW50ICYmIHNlbGVjdGlvbklzU2FuZSgpKQorICAgICAgICAgICAgICAgIHRyaWdnZXJTZWxl
Y3RlZEV2ZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZWxlY3Rpb25Jc1Nh
bmUoKSB7CisgICAgICAgICAgICB2YXIgbWluU2l6ZSA9IDU7CisgICAgICAgICAgICByZXR1cm4g
TWF0aC5hYnMoc2VsZWN0aW9uLnNlY29uZC54IC0gc2VsZWN0aW9uLmZpcnN0LngpID49IG1pblNp
emUgJiYKKyAgICAgICAgICAgICAgICBNYXRoLmFicyhzZWxlY3Rpb24uc2Vjb25kLnkgLSBzZWxl
Y3Rpb24uZmlyc3QueSkgPj0gbWluU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHBsb3QuY2xl
YXJTZWxlY3Rpb24gPSBjbGVhclNlbGVjdGlvbjsKKyAgICAgICAgcGxvdC5zZXRTZWxlY3Rpb24g
PSBzZXRTZWxlY3Rpb247CisgICAgICAgIHBsb3QuZ2V0U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9u
OworCisgICAgICAgIHBsb3QuaG9va3MuYmluZEV2ZW50cy5wdXNoKGZ1bmN0aW9uKHBsb3QsIGV2
ZW50SG9sZGVyKSB7CisgICAgICAgICAgICB2YXIgbyA9IHBsb3QuZ2V0T3B0aW9ucygpOworICAg
ICAgICAgICAgaWYgKG8uc2VsZWN0aW9uLm1vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IGV2ZW50SG9sZGVyLm1vdXNlbW92ZShvbk1vdXNlTW92ZSk7CisgICAgICAgICAgICAgICAgZXZl
bnRIb2xkZXIubW91c2Vkb3duKG9uTW91c2VEb3duKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSk7CisKKworICAgICAgICBwbG90Lmhvb2tzLmRyYXdPdmVybGF5LnB1c2goZnVuY3Rpb24gKHBs
b3QsIGN0eCkgeworICAgICAgICAgICAgLy8gZHJhdyBzZWxlY3Rpb24KKyAgICAgICAgICAgIGlm
IChzZWxlY3Rpb24uc2hvdyAmJiBzZWxlY3Rpb25Jc1NhbmUoKSkgeworICAgICAgICAgICAgICAg
IHZhciBwbG90T2Zmc2V0ID0gcGxvdC5nZXRQbG90T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAg
dmFyIG8gPSBwbG90LmdldE9wdGlvbnMoKTsKKworICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7
CisgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShwbG90T2Zmc2V0LmxlZnQsIHBsb3RPZmZz
ZXQudG9wKTsKKworICAgICAgICAgICAgICAgIHZhciBjID0gJC5jb2xvci5wYXJzZShvLnNlbGVj
dGlvbi5jb2xvcik7CisKKyAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjLnNjYWxl
KCdhJywgMC44KS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAx
OworICAgICAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9ICJyb3VuZCI7CisgICAgICAgICAgICAg
ICAgY3R4LmZpbGxTdHlsZSA9IGMuc2NhbGUoJ2EnLCAwLjQpLnRvU3RyaW5nKCk7CisKKyAgICAg
ICAgICAgICAgICB2YXIgeCA9IE1hdGgubWluKHNlbGVjdGlvbi5maXJzdC54LCBzZWxlY3Rpb24u
c2Vjb25kLngpICsgMC41LAorICAgICAgICAgICAgICAgICAgICB5ID0gTWF0aC5taW4oc2VsZWN0
aW9uLmZpcnN0LnksIHNlbGVjdGlvbi5zZWNvbmQueSkgKyAwLjUsCisgICAgICAgICAgICAgICAg
ICAgIHcgPSBNYXRoLmFicyhzZWxlY3Rpb24uc2Vjb25kLnggLSBzZWxlY3Rpb24uZmlyc3QueCkg
LSAxLAorICAgICAgICAgICAgICAgICAgICBoID0gTWF0aC5hYnMoc2VsZWN0aW9uLnNlY29uZC55
IC0gc2VsZWN0aW9uLmZpcnN0LnkpIC0gMTsKKworICAgICAgICAgICAgICAgIGN0eC5maWxsUmVj
dCh4LCB5LCB3LCBoKTsKKyAgICAgICAgICAgICAgICBjdHguc3Ryb2tlUmVjdCh4LCB5LCB3LCBo
KTsKKworICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICAKKyAgICAgICAgcGxvdC5ob29rcy5zaHV0ZG93bi5wdXNoKGZ1bmN0
aW9uIChwbG90LCBldmVudEhvbGRlcikgeworICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5k
KCJtb3VzZW1vdmUiLCBvbk1vdXNlTW92ZSk7CisgICAgICAgICAgICBldmVudEhvbGRlci51bmJp
bmQoIm1vdXNlZG93biIsIG9uTW91c2VEb3duKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG1vdXNlVXBIYW5kbGVyKQorICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnVuYmluZCgi
bW91c2V1cCIsIG1vdXNlVXBIYW5kbGVyKTsKKyAgICAgICAgfSk7CisKKyAgICB9CisKKyAgICAk
LnBsb3QucGx1Z2lucy5wdXNoKHsKKyAgICAgICAgaW5pdDogaW5pdCwKKyAgICAgICAgb3B0aW9u
czogeworICAgICAgICAgICAgc2VsZWN0aW9uOiB7CisgICAgICAgICAgICAgICAgbW9kZTogbnVs
bCwgLy8gb25lIG9mIG51bGwsICJ4IiwgInkiIG9yICJ4eSIKKyAgICAgICAgICAgICAgICBjb2xv
cjogIiNlOGNmYWMiCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIG5hbWU6ICdz
ZWxlY3Rpb24nLAorICAgICAgICB2ZXJzaW9uOiAnMS4xJworICAgIH0pOworfSkoalF1ZXJ5KTsK
SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Quc3Rh
Y2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9q
cXVlcnkuZmxvdC5zdGFjay5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Quc3RhY2suanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODggQEAKKy8qIEZsb3QgcGx1Z2luIGZvciBzdGFja2luZyBkYXRhIHNldHMgcmF0aGVy
IHRoYW4gb3Zlcmx5YWluZyB0aGVtLgorCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFu
ZCBPbGUgTGF1cnNlbi4KK0xpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KKworVGhlIHBs
dWdpbiBhc3N1bWVzIHRoZSBkYXRhIGlzIHNvcnRlZCBvbiB4IChvciB5IGlmIHN0YWNraW5nIGhv
cml6b250YWxseSkuCitGb3IgbGluZSBjaGFydHMsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiBhIGxp
bmUgaGFzIGFuIHVuZGVmaW5lZCBnYXAgKGZyb20gYQorbnVsbCBwb2ludCksIHRoZW4gdGhlIGxp
bmUgYWJvdmUgaXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZ2FwIC0gaW5zZXJ0IHplcm9zCitpbnN0
ZWFkIG9mICJudWxsIiBpZiB5b3Ugd2FudCBhbm90aGVyIGJlaGF2aW91ci4gVGhpcyBhbHNvIGhv
bGRzIGZvciB0aGUgc3RhcnQKK2FuZCBlbmQgb2YgdGhlIGNoYXJ0LiBOb3RlIHRoYXQgc3RhY2tp
bmcgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcworaW4gbW9zdCBpbnN0YW5j
ZXMgZG9lc24ndCBtYWtlIHNlbnNlIChzbyBpdCBsb29rcyB3ZWlyZCkuCisKK1R3byBvciBtb3Jl
IHNlcmllcyBhcmUgc3RhY2tlZCB3aGVuIHRoZWlyICJzdGFjayIgYXR0cmlidXRlIGlzIHNldCB0
byB0aGUgc2FtZQora2V5ICh3aGljaCBjYW4gYmUgYW55IG51bWJlciBvciBzdHJpbmcgb3IganVz
dCAidHJ1ZSIpLiBUbyBzcGVjaWZ5IHRoZSBkZWZhdWx0CitzdGFjaywgeW91IGNhbiBzZXQgdGhl
IHN0YWNrIG9wdGlvbiBsaWtlIHRoaXM6CisKKyAgICBzZXJpZXM6IHsKKyAgICAgICAgc3RhY2s6
IG51bGwgb3IgdHJ1ZSBvciBrZXkgKG51bWJlci9zdHJpbmcpCisgICAgfQorCitZb3UgY2FuIGFs
c28gc3BlY2lmeSBpdCBmb3IgYSBzaW5nbGUgc2VyaWVzLCBsaWtlIHRoaXM6CisKKyAgICAkLnBs
b3QoICQoIiNwbGFjZWhvbGRlciIpLCBbeworICAgICAgICBkYXRhOiBbIC4uLiBdLAorICAgICAg
ICBzdGFjazogdHJ1ZQorICAgIH1dKQorCitUaGUgc3RhY2tpbmcgb3JkZXIgaXMgZGV0ZXJtaW5l
ZCBieSB0aGUgb3JkZXIgb2YgdGhlIGRhdGEgc2VyaWVzIGluIHRoZSBhcnJheQorKGxhdGVyIHNl
cmllcyBlbmQgdXAgb24gdG9wIG9mIHRoZSBwcmV2aW91cykuCisKK0ludGVybmFsbHksIHRoZSBw
bHVnaW4gbW9kaWZpZXMgdGhlIGRhdGFwb2ludHMgaW4gZWFjaCBzZXJpZXMsIGFkZGluZyBhbgor
b2Zmc2V0IHRvIHRoZSB5IHZhbHVlLiBGb3IgbGluZSBzZXJpZXMsIGV4dHJhIGRhdGEgcG9pbnRz
IGFyZSBpbnNlcnRlZCB0aHJvdWdoCitpbnRlcnBvbGF0aW9uLiBJZiB0aGVyZSdzIGEgc2Vjb25k
IHkgdmFsdWUsIGl0J3MgYWxzbyBhZGp1c3RlZCAoZS5nIGZvciBiYXIKK2NoYXJ0cyBvciBmaWxs
ZWQgYXJlYXMpLgorCisqLworCisoZnVuY3Rpb24gKCQpIHsKKyAgICB2YXIgb3B0aW9ucyA9IHsK
KyAgICAgICAgc2VyaWVzOiB7IHN0YWNrOiBudWxsIH0gLy8gb3IgbnVtYmVyL3N0cmluZworICAg
IH07CisgICAgCisgICAgZnVuY3Rpb24gaW5pdChwbG90KSB7CisgICAgICAgIGZ1bmN0aW9uIGZp
bmRNYXRjaGluZ1NlcmllcyhzLCBhbGxzZXJpZXMpIHsKKyAgICAgICAgICAgIHZhciByZXMgPSBu
dWxsOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxzZXJpZXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocyA9PSBhbGxzZXJpZXNbaV0pCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChh
bGxzZXJpZXNbaV0uc3RhY2sgPT0gcy5zdGFjaykKKyAgICAgICAgICAgICAgICAgICAgcmVzID0g
YWxsc2VyaWVzW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gcmVzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBzdGFja0Rh
dGEocGxvdCwgcywgZGF0YXBvaW50cykgeworICAgICAgICAgICAgaWYgKHMuc3RhY2sgPT0gbnVs
bCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHZhciBvdGhlciA9IGZp
bmRNYXRjaGluZ1NlcmllcyhzLCBwbG90LmdldERhdGEoKSk7CisgICAgICAgICAgICBpZiAoIW90
aGVyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIHBzID0gZGF0
YXBvaW50cy5wb2ludHNpemUsCisgICAgICAgICAgICAgICAgcG9pbnRzID0gZGF0YXBvaW50cy5w
b2ludHMsCisgICAgICAgICAgICAgICAgb3RoZXJwcyA9IG90aGVyLmRhdGFwb2ludHMucG9pbnRz
aXplLAorICAgICAgICAgICAgICAgIG90aGVycG9pbnRzID0gb3RoZXIuZGF0YXBvaW50cy5wb2lu
dHMsCisgICAgICAgICAgICAgICAgbmV3cG9pbnRzID0gW10sCisgICAgICAgICAgICAgICAgcHgs
IHB5LCBpbnRlcnksIHF4LCBxeSwgYm90dG9tLAorICAgICAgICAgICAgICAgIHdpdGhsaW5lcyA9
IHMubGluZXMuc2hvdywKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsID0gcy5iYXJzLmhvcml6
b250YWwsCisgICAgICAgICAgICAgICAgd2l0aGJvdHRvbSA9IHBzID4gMiAmJiAoaG9yaXpvbnRh
bCA/IGRhdGFwb2ludHMuZm9ybWF0WzJdLnggOiBkYXRhcG9pbnRzLmZvcm1hdFsyXS55KSwKKyAg
ICAgICAgICAgICAgICB3aXRoc3RlcHMgPSB3aXRobGluZXMgJiYgcy5saW5lcy5zdGVwcywKKyAg
ICAgICAgICAgICAgICBmcm9tZ2FwID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBrZXlPZmZzZXQg
PSBob3Jpem9udGFsID8gMSA6IDAsCisgICAgICAgICAgICAgICAgYWNjdW11bGF0ZU9mZnNldCA9
IGhvcml6b250YWwgPyAwIDogMSwKKyAgICAgICAgICAgICAgICBpID0gMCwgaiA9IDAsIGwsIG07
CisKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0g
cG9pbnRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBsID0gbmV3cG9pbnRzLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIGlmIChwb2ludHNb
aV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IGdhcHMKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pCisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdwb2ludHMucHVzaChwb2ludHNbaSArIG1dKTsKKyAgICAgICAgICAgICAgICAgICAg
aSArPSBwczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+
PSBvdGhlcnBvaW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGxpbmVz
LCB3ZSBjYW4ndCB1c2UgdGhlIHJlc3Qgb2YgdGhlIHBvaW50cworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdpdGhsaW5lcykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsg
bSA8IHBzOyArK20pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2go
cG9pbnRzW2kgKyBtXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaSArPSBwczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
b3RoZXJwb2ludHNbal0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBvb3BzLCBn
b3QgYSBnYXAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pCisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMucHVzaChudWxsKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnJvbWdhcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJw
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IGdvdCB0d28gcG9pbnRzCisgICAg
ICAgICAgICAgICAgICAgIHB4ID0gcG9pbnRzW2kgKyBrZXlPZmZzZXRdOworICAgICAgICAgICAg
ICAgICAgICBweSA9IHBvaW50c1tpICsgYWNjdW11bGF0ZU9mZnNldF07CisgICAgICAgICAgICAg
ICAgICAgIHF4ID0gb3RoZXJwb2ludHNbaiArIGtleU9mZnNldF07CisgICAgICAgICAgICAgICAg
ICAgIHF5ID0gb3RoZXJwb2ludHNbaiArIGFjY3VtdWxhdGVPZmZzZXRdOworICAgICAgICAgICAg
ICAgICAgICBib3R0b20gPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmIChweCA9PSBxeCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2gocG9pbnRzW2kgKyBtXSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1tsICsgYWNjdW11bGF0ZU9mZnNldF0g
Kz0gcXk7CisgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gPSBxeTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChweCA+IHF4KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBnb3QgcGFzdCBwb2ludCBiZWxvdywgbWlnaHQgbmVlZCB0bworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW5zZXJ0IGludGVycG9sYXRlZCBleHRyYSBwb2ludAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHdpdGhsaW5lcyAmJiBpID4gMCAmJiBwb2ludHNbaSAtIHBz
XSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ5ID0gcHkgKyAo
cG9pbnRzW2kgLSBwcyArIGFjY3VtdWxhdGVPZmZzZXRdIC0gcHkpICogKHF4IC0gcHgpIC8gKHBv
aW50c1tpIC0gcHMgKyBrZXlPZmZzZXRdIC0gcHgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld3BvaW50cy5wdXNoKHF4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdw
b2ludHMucHVzaChpbnRlcnkgKyBxeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChtID0gMjsgbSA8IHBzOyArK20pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d3BvaW50cy5wdXNoKHBvaW50c1tpICsgbV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvdHRvbSA9IHF5OyAKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgaiArPSBvdGhlcnBzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeyAvLyBweCA8IHF4CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZnJvbWdhcCAmJiB3aXRobGluZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZiB3ZSBjb21lIGZyb20gYSBnYXAsIHdlIGp1c3Qgc2tpcCB0aGlzIHBvaW50CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsg
KyttKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKHBvaW50c1tp
ICsgbV0pOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBtaWdodCBiZSBhYmxlIHRvIGludGVycG9sYXRlIGEgcG9pbnQgYmVsb3csCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhbiBnaXZlIHVzIGEgYmV0dGVyIHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh3aXRobGluZXMgJiYgaiA+IDAgJiYgb3RoZXJwb2ludHNb
aiAtIG90aGVycHNdICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9t
ID0gcXkgKyAob3RoZXJwb2ludHNbaiAtIG90aGVycHMgKyBhY2N1bXVsYXRlT2Zmc2V0XSAtIHF5
KSAqIChweCAtIHF4KSAvIChvdGhlcnBvaW50c1tqIC0gb3RoZXJwcyArIGtleU9mZnNldF0gLSBx
eCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1tsICsgYWNjdW11bGF0ZU9m
ZnNldF0gKz0gYm90dG9tOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBpICs9IHBzOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgZnJvbWdhcCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGwgIT0gbmV3cG9pbnRzLmxlbmd0aCAmJiB3aXRoYm90dG9tKQorICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzW2wgKyAyXSArPSBib3R0b207CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbWFpbnRhaW4gdGhlIGxpbmUgc3RlcHMg
aW52YXJpYW50CisgICAgICAgICAgICAgICAgaWYgKHdpdGhzdGVwcyAmJiBsICE9IG5ld3BvaW50
cy5sZW5ndGggJiYgbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgbmV3cG9pbnRzW2xdICE9
IG51bGwKKyAgICAgICAgICAgICAgICAgICAgJiYgbmV3cG9pbnRzW2xdICE9IG5ld3BvaW50c1ts
IC0gcHNdCisgICAgICAgICAgICAgICAgICAgICYmIG5ld3BvaW50c1tsICsgMV0gIT0gbmV3cG9p
bnRzW2wgLSBwcyArIDFdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBw
czsgKyttKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzW2wgKyBwcyArIG1dID0g
bmV3cG9pbnRzW2wgKyBtXTsKKyAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzW2wgKyAxXSA9
IG5ld3BvaW50c1tsIC0gcHMgKyAxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGRhdGFwb2ludHMucG9pbnRzID0gbmV3cG9pbnRzOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBwbG90Lmhvb2tzLnByb2Nlc3NEYXRhcG9pbnRzLnB1c2goc3Rh
Y2tEYXRhKTsKKyAgICB9CisgICAgCisgICAgJC5wbG90LnBsdWdpbnMucHVzaCh7CisgICAgICAg
IGluaXQ6IGluaXQsCisgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCisgICAgICAgIG5hbWU6ICdz
dGFjaycsCisgICAgICAgIHZlcnNpb246ICcxLjInCisgICAgfSk7Cit9KShqUXVlcnkpOwpJbmRl
eDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zeW1ib2wu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVl
cnkuZmxvdC5zeW1ib2wuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnN5bWJvbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcxIEBACisvKiBGbG90IHBsdWdpbiB0aGF0IGFkZHMgc29tZSBleHRyYSBzeW1ib2xzIGZv
ciBwbG90dGluZyBwb2ludHMuCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9s
ZSBMYXVyc2VuLgorTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgorCitUaGUgc3ltYm9s
cyBhcmUgYWNjZXNzZWQgYXMgc3RyaW5ncyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBzeW1ib2wgb3B0
aW9uczoKKworICAgIHNlcmllczogeworICAgICAgICBwb2ludHM6IHsKKyAgICAgICAgICAgIHN5
bWJvbDogInNxdWFyZSIgLy8gb3IgImRpYW1vbmQiLCAidHJpYW5nbGUiLCAiY3Jvc3MiCisgICAg
ICAgIH0KKyAgICB9CisKKyovCisKKyhmdW5jdGlvbiAoJCkgeworICAgIGZ1bmN0aW9uIHByb2Nl
c3NSYXdEYXRhKHBsb3QsIHNlcmllcywgZGF0YXBvaW50cykgeworICAgICAgICAvLyB3ZSBub3Jt
YWxpemUgdGhlIGFyZWEgb2YgZWFjaCBzeW1ib2wgc28gaXQgaXMgYXBwcm94aW1hdGVseSB0aGUK
KyAgICAgICAgLy8gc2FtZSBhcyBhIGNpcmNsZSBvZiB0aGUgZ2l2ZW4gcmFkaXVzCisKKyAgICAg
ICAgdmFyIGhhbmRsZXJzID0geworICAgICAgICAgICAgc3F1YXJlOiBmdW5jdGlvbiAoY3R4LCB4
LCB5LCByYWRpdXMsIHNoYWRvdykgeworICAgICAgICAgICAgICAgIC8vIHBpICogcl4yID0gKDJz
KV4yICA9PiAgcyA9IHIgKiBzcXJ0KHBpKS8yCisgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBy
YWRpdXMgKiBNYXRoLnNxcnQoTWF0aC5QSSkgLyAyOworICAgICAgICAgICAgICAgIGN0eC5yZWN0
KHggLSBzaXplLCB5IC0gc2l6ZSwgc2l6ZSArIHNpemUsIHNpemUgKyBzaXplKTsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICBkaWFtb25kOiBmdW5jdGlvbiAoY3R4LCB4LCB5LCByYWRpdXMs
IHNoYWRvdykgeworICAgICAgICAgICAgICAgIC8vIHBpICogcl4yID0gMnNeMiAgPT4gIHMgPSBy
ICogc3FydChwaS8yKQorICAgICAgICAgICAgICAgIHZhciBzaXplID0gcmFkaXVzICogTWF0aC5z
cXJ0KE1hdGguUEkgLyAyKTsKKyAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHggLSBzaXplLCB5
KTsKKyAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkgLSBzaXplKTsKKyAgICAgICAgICAg
ICAgICBjdHgubGluZVRvKHggKyBzaXplLCB5KTsKKyAgICAgICAgICAgICAgICBjdHgubGluZVRv
KHgsIHkgKyBzaXplKTsKKyAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggLSBzaXplLCB5KTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0cmlhbmdsZTogZnVuY3Rpb24gKGN0eCwgeCwg
eSwgcmFkaXVzLCBzaGFkb3cpIHsKKyAgICAgICAgICAgICAgICAvLyBwaSAqIHJeMiA9IDEvMiAq
IHNeMiAqIHNpbiAocGkgLyAzKSAgPT4gIHMgPSByICogc3FydCgyICogcGkgLyBzaW4ocGkgLyAz
KSkKKyAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHJhZGl1cyAqIE1hdGguc3FydCgyICogTWF0
aC5QSSAvIE1hdGguc2luKE1hdGguUEkgLyAzKSk7CisgICAgICAgICAgICAgICAgdmFyIGhlaWdo
dCA9IHNpemUgKiBNYXRoLnNpbihNYXRoLlBJIC8gMyk7CisgICAgICAgICAgICAgICAgY3R4Lm1v
dmVUbyh4IC0gc2l6ZS8yLCB5ICsgaGVpZ2h0LzIpOworICAgICAgICAgICAgICAgIGN0eC5saW5l
VG8oeCArIHNpemUvMiwgeSArIGhlaWdodC8yKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNoYWRv
dykgeworICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkgLSBoZWlnaHQvMik7Cisg
ICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIHNpemUvMiwgeSArIGhlaWdodC8yKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY3Jvc3M6IGZ1
bmN0aW9uIChjdHgsIHgsIHksIHJhZGl1cywgc2hhZG93KSB7CisgICAgICAgICAgICAgICAgLy8g
cGkgKiByXjIgPSAoMnMpXjIgID0+ICBzID0gciAqIHNxcnQocGkpLzIKKyAgICAgICAgICAgICAg
ICB2YXIgc2l6ZSA9IHJhZGl1cyAqIE1hdGguc3FydChNYXRoLlBJKSAvIDI7CisgICAgICAgICAg
ICAgICAgY3R4Lm1vdmVUbyh4IC0gc2l6ZSwgeSAtIHNpemUpOworICAgICAgICAgICAgICAgIGN0
eC5saW5lVG8oeCArIHNpemUsIHkgKyBzaXplKTsKKyAgICAgICAgICAgICAgICBjdHgubW92ZVRv
KHggLSBzaXplLCB5ICsgc2l6ZSk7CisgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgc2l6
ZSwgeSAtIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHZhciBz
ID0gc2VyaWVzLnBvaW50cy5zeW1ib2w7CisgICAgICAgIGlmIChoYW5kbGVyc1tzXSkKKyAgICAg
ICAgICAgIHNlcmllcy5wb2ludHMuc3ltYm9sID0gaGFuZGxlcnNbc107CisgICAgfQorICAgIAor
ICAgIGZ1bmN0aW9uIGluaXQocGxvdCkgeworICAgICAgICBwbG90Lmhvb2tzLnByb2Nlc3NEYXRh
cG9pbnRzLnB1c2gocHJvY2Vzc1Jhd0RhdGEpOworICAgIH0KKyAgICAKKyAgICAkLnBsb3QucGx1
Z2lucy5wdXNoKHsKKyAgICAgICAgaW5pdDogaW5pdCwKKyAgICAgICAgbmFtZTogJ3N5bWJvbHMn
LAorICAgICAgICB2ZXJzaW9uOiAnMS4wJworICAgIH0pOworfSkoalF1ZXJ5KTsKSW5kZXg6IFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QudGhyZXNob2xkLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5
LmZsb3QudGhyZXNob2xkLmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC50aHJlc2hvbGQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDIgQEAKKy8qIEZsb3QgcGx1Z2luIGZvciB0aHJlc2hvbGRpbmcgZGF0YS4KKwor
Q29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCitMaWNlbnNlZCB1
bmRlciB0aGUgTUlUIGxpY2Vuc2UuCisKK1RoZSBwbHVnaW4gc3VwcG9ydHMgdGhlc2Ugb3B0aW9u
czoKKworICAgIHNlcmllczogeworICAgICAgICB0aHJlc2hvbGQ6IHsKKyAgICAgICAgICAgIGJl
bG93OiBudW1iZXIKKyAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNwZWMKKyAgICAgICAgfQorICAg
IH0KKworSXQgY2FuIGFsc28gYmUgYXBwbGllZCB0byBhIHNpbmdsZSBzZXJpZXMsIGxpa2UgdGhp
czoKKworICAgICQucGxvdCggJCgiI3BsYWNlaG9sZGVyIiksIFt7CisgICAgICAgIGRhdGE6IFsg
Li4uIF0sCisgICAgICAgIHRocmVzaG9sZDogeyAuLi4gfQorICAgIH1dKQorCitBbiBhcnJheSBj
YW4gYmUgcGFzc2VkIGZvciBtdWx0aXBsZSB0aHJlc2hvbGRpbmcsIGxpa2UgdGhpczoKKworICAg
IHRocmVzaG9sZDogW3sKKyAgICAgICAgYmVsb3c6IG51bWJlcjEKKyAgICAgICAgY29sb3I6IGNv
bG9yMQorICAgIH0seworICAgICAgICBiZWxvdzogbnVtYmVyMgorICAgICAgICBjb2xvcjogY29s
b3IyCisgICAgfV0KKworVGhlc2UgbXVsdGlwbGUgdGhyZXNob2xkIG9iamVjdHMgY2FuIGJlIHBh
c3NlZCBpbiBhbnkgb3JkZXIgc2luY2UgdGhleSBhcmUKK3NvcnRlZCBieSB0aGUgcHJvY2Vzc2lu
ZyBmdW5jdGlvbi4KKworVGhlIGRhdGEgcG9pbnRzIGJlbG93ICJiZWxvdyIgYXJlIGRyYXduIHdp
dGggdGhlIHNwZWNpZmllZCBjb2xvci4gVGhpcyBtYWtlcworaXQgZWFzeSB0byBtYXJrIHBvaW50
cyBiZWxvdyAwLCBlLmcuIGZvciBidWRnZXQgZGF0YS4KKworSW50ZXJuYWxseSwgdGhlIHBsdWdp
biB3b3JrcyBieSBzcGxpdHRpbmcgdGhlIGRhdGEgaW50byB0d28gc2VyaWVzLCBhYm92ZSBhbmQK
K2JlbG93IHRoZSB0aHJlc2hvbGQuIFRoZSBleHRyYSBzZXJpZXMgYmVsb3cgdGhlIHRocmVzaG9s
ZCB3aWxsIGhhdmUgaXRzIGxhYmVsCitjbGVhcmVkIGFuZCB0aGUgc3BlY2lhbCAib3JpZ2luU2Vy
aWVzIiBhdHRyaWJ1dGUgc2V0IHRvIHRoZSBvcmlnaW5hbCBzZXJpZXMuCitZb3UgbWF5IG5lZWQg
dG8gY2hlY2sgZm9yIHRoaXMgaW4gaG92ZXIgZXZlbnRzLgorCisqLworCisoZnVuY3Rpb24gKCQp
IHsKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgc2VyaWVzOiB7IHRocmVzaG9sZDogbnVs
bCB9IC8vIG9yIHsgYmVsb3c6IG51bWJlciwgY29sb3I6IGNvbG9yIHNwZWN9CisgICAgfTsKKyAg
ICAKKyAgICBmdW5jdGlvbiBpbml0KHBsb3QpIHsKKyAgICAgICAgZnVuY3Rpb24gdGhyZXNob2xk
RGF0YShwbG90LCBzLCBkYXRhcG9pbnRzLCBiZWxvdywgY29sb3IpIHsKKyAgICAgICAgICAgIHZh
ciBwcyA9IGRhdGFwb2ludHMucG9pbnRzaXplLCBpLCB4LCB5LCBwLCBwcmV2cCwKKyAgICAgICAg
ICAgICAgICB0aHJlc2hvbGRlZCA9ICQuZXh0ZW5kKHt9LCBzKTsgLy8gbm90ZTogc2hhbGxvdyBj
b3B5CisKKyAgICAgICAgICAgIHRocmVzaG9sZGVkLmRhdGFwb2ludHMgPSB7IHBvaW50czogW10s
IHBvaW50c2l6ZTogcHMsIGZvcm1hdDogZGF0YXBvaW50cy5mb3JtYXQgfTsKKyAgICAgICAgICAg
IHRocmVzaG9sZGVkLmxhYmVsID0gbnVsbDsKKyAgICAgICAgICAgIHRocmVzaG9sZGVkLmNvbG9y
ID0gY29sb3I7CisgICAgICAgICAgICB0aHJlc2hvbGRlZC50aHJlc2hvbGQgPSBudWxsOworICAg
ICAgICAgICAgdGhyZXNob2xkZWQub3JpZ2luU2VyaWVzID0gczsKKyAgICAgICAgICAgIHRocmVz
aG9sZGVkLmRhdGEgPSBbXTsKKyAKKyAgICAgICAgICAgIHZhciBvcmlncG9pbnRzID0gZGF0YXBv
aW50cy5wb2ludHMsCisgICAgICAgICAgICAgICAgYWRkQ3Jvc3NpbmdQb2ludHMgPSBzLmxpbmVz
LnNob3c7CisKKyAgICAgICAgICAgIHZhciB0aHJlc3BvaW50cyA9IFtdOworICAgICAgICAgICAg
dmFyIG5ld3BvaW50cyA9IFtdOworICAgICAgICAgICAgdmFyIG07CisKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBvcmlncG9pbnRzLmxlbmd0aDsgaSArPSBwcykgeworICAgICAgICAgICAg
ICAgIHggPSBvcmlncG9pbnRzW2ldOworICAgICAgICAgICAgICAgIHkgPSBvcmlncG9pbnRzW2kg
KyAxXTsKKworICAgICAgICAgICAgICAgIHByZXZwID0gcDsKKyAgICAgICAgICAgICAgICBpZiAo
eSA8IGJlbG93KQorICAgICAgICAgICAgICAgICAgICBwID0gdGhyZXNwb2ludHM7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwID0gbmV3cG9pbnRzOworCisgICAg
ICAgICAgICAgICAgaWYgKGFkZENyb3NzaW5nUG9pbnRzICYmIHByZXZwICE9IHAgJiYgeCAhPSBu
dWxsCisgICAgICAgICAgICAgICAgICAgICYmIGkgPiAwICYmIG9yaWdwb2ludHNbaSAtIHBzXSAh
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcnggPSAoeCAtIG9yaWdwb2lu
dHNbaSAtIHBzXSkgLyAoeSAtIG9yaWdwb2ludHNbaSAtIHBzICsgMV0pICogKGJlbG93IC0geSkg
KyB4OworICAgICAgICAgICAgICAgICAgICBwcmV2cC5wdXNoKGludGVyeCk7CisgICAgICAgICAg
ICAgICAgICAgIHByZXZwLnB1c2goYmVsb3cpOworICAgICAgICAgICAgICAgICAgICBmb3IgKG0g
PSAyOyBtIDwgcHM7ICsrbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZwLnB1c2gob3Jp
Z3BvaW50c1tpICsgbV0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgcC5wdXNoKG51bGwpOyAvLyBzdGFydCBuZXcgc2VnbWVudAorICAgICAgICAgICAgICAgICAg
ICBwLnB1c2gobnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDI7IG0gPCBwczsg
KyttKQorICAgICAgICAgICAgICAgICAgICAgICAgcC5wdXNoKG9yaWdwb2ludHNbaSArIG1dKTsK
KyAgICAgICAgICAgICAgICAgICAgcC5wdXNoKGludGVyeCk7CisgICAgICAgICAgICAgICAgICAg
IHAucHVzaChiZWxvdyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDI7IG0gPCBwczsg
KyttKQorICAgICAgICAgICAgICAgICAgICAgICAgcC5wdXNoKG9yaWdwb2ludHNbaSArIG1dKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwLnB1c2goeCk7CisgICAgICAg
ICAgICAgICAgcC5wdXNoKHkpOworICAgICAgICAgICAgICAgIGZvciAobSA9IDI7IG0gPCBwczsg
KyttKQorICAgICAgICAgICAgICAgICAgICBwLnB1c2gob3JpZ3BvaW50c1tpICsgbV0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBkYXRhcG9pbnRzLnBvaW50cyA9IG5ld3BvaW50czsK
KyAgICAgICAgICAgIHRocmVzaG9sZGVkLmRhdGFwb2ludHMucG9pbnRzID0gdGhyZXNwb2ludHM7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0aHJlc2hvbGRlZC5kYXRhcG9pbnRzLnBv
aW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdmFyIG9yaWdJbmRleCA9ICQuaW5B
cnJheShzLCBwbG90LmdldERhdGEoKSk7CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IG5ld2x5
LWdlbmVyYXRlZCBzZXJpZXMgcmlnaHQgYWZ0ZXIgb3JpZ2luYWwgb25lICh0byBwcmV2ZW50IGl0
IGZyb20gYmVjb21pbmcgdG9wLW1vc3QpCisgICAgICAgICAgICAgICAgcGxvdC5nZXREYXRhKCku
c3BsaWNlKG9yaWdJbmRleCArIDEsIDAsIHRocmVzaG9sZGVkKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGVyZSBhcmUgcHJvYmFibHkg
c29tZSBlZGdlIGNhc2VzIGxlZnQgaW4gYmFycworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmdW5jdGlvbiBwcm9jZXNzVGhyZXNob2xkcyhwbG90LCBzLCBkYXRhcG9pbnRzKSB7CisgICAg
ICAgICAgICBpZiAoIXMudGhyZXNob2xkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHMudGhyZXNob2xkIGluc3RhbmNlb2YgQXJyYXkpIHsK
KyAgICAgICAgICAgICAgICBzLnRocmVzaG9sZC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGEuYmVsb3cgLSBiLmJlbG93OworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICQocy50aHJlc2hvbGQpLmVh
Y2goZnVuY3Rpb24oaSwgdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkRGF0YShw
bG90LCBzLCBkYXRhcG9pbnRzLCB0aC5iZWxvdywgdGguY29sb3IpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dGhyZXNob2xkRGF0YShwbG90LCBzLCBkYXRhcG9pbnRzLCBzLnRocmVzaG9sZC5iZWxvdywgcy50
aHJlc2hvbGQuY29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBwbG90Lmhvb2tzLnByb2Nlc3NEYXRhcG9pbnRzLnB1c2gocHJvY2Vzc1RocmVzaG9sZHMp
OworICAgIH0KKyAgICAKKyAgICAkLnBsb3QucGx1Z2lucy5wdXNoKHsKKyAgICAgICAgaW5pdDog
aW5pdCwKKyAgICAgICAgb3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgbmFtZTogJ3RocmVzaG9s
ZCcsCisgICAgICAgIHZlcnNpb246ICcxLjInCisgICAgfSk7Cit9KShqUXVlcnkpOwpJbmRleDog
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC50aW1lLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZs
b3QudGltZS5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvanMvanF1ZXJ5LmZsb3QudGltZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxNyBA
QAorLyogUHJldHR5IGhhbmRsaW5nIG9mIHRpbWUgYXhlcy4KKworQ29weXJpZ2h0IChjKSAyMDA3
LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCitMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vu
c2UuCisKK1NldCBheGlzLm1vZGUgdG8gInRpbWUiIHRvIGVuYWJsZS4gU2VlIHRoZSBzZWN0aW9u
ICJUaW1lIHNlcmllcyBkYXRhIiBpbgorQVBJLnR4dCBmb3IgZGV0YWlscy4KKworKi8KKworKGZ1
bmN0aW9uKCQpIHsKKworICAgIHZhciBvcHRpb25zID0ge307CisKKyAgICAvLyByb3VuZCB0byBu
ZWFyYnkgbG93ZXIgbXVsdGlwbGUgb2YgYmFzZQorCisgICAgZnVuY3Rpb24gZmxvb3JJbkJhc2Uo
biwgYmFzZSkgeworICAgICAgICByZXR1cm4gYmFzZSAqIE1hdGguZmxvb3IobiAvIGJhc2UpOwor
ICAgIH0KKworICAgIC8vIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgZGF0ZSBkIGZvcm1hdHRl
ZCBhY2NvcmRpbmcgdG8gZm10LgorICAgIC8vIEEgc3Vic2V0IG9mIHRoZSBPcGVuIEdyb3VwJ3Mg
c3RyZnRpbWUgZm9ybWF0IGlzIHN1cHBvcnRlZC4KKworICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUo
ZCwgZm10LCBtb250aE5hbWVzLCBkYXlOYW1lcykgeworCisgICAgICAgIGlmICh0eXBlb2YgZC5z
dHJmdGltZSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICByZXR1cm4gZC5zdHJmdGltZShm
bXQpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGxlZnRQYWQgPSBmdW5jdGlvbihuLCBwYWQp
IHsKKyAgICAgICAgICAgIG4gPSAiIiArIG47CisgICAgICAgICAgICBwYWQgPSAiIiArIChwYWQg
PT0gbnVsbCA/ICIwIiA6IHBhZCk7CisgICAgICAgICAgICByZXR1cm4gbi5sZW5ndGggPT0gMSA/
IHBhZCArIG4gOiBuOworICAgICAgICB9OworCisgICAgICAgIHZhciByID0gW107CisgICAgICAg
IHZhciBlc2NhcGUgPSBmYWxzZTsKKyAgICAgICAgdmFyIGhvdXJzID0gZC5nZXRIb3VycygpOwor
ICAgICAgICB2YXIgaXNBTSA9IGhvdXJzIDwgMTI7CisKKyAgICAgICAgaWYgKG1vbnRoTmFtZXMg
PT0gbnVsbCkgeworICAgICAgICAgICAgbW9udGhOYW1lcyA9IFsiSmFuIiwgIkZlYiIsICJNYXIi
LCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIs
ICJEZWMiXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkYXlOYW1lcyA9PSBudWxsKSB7Cisg
ICAgICAgICAgICBkYXlOYW1lcyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIs
ICJGcmkiLCAiU2F0Il07CisgICAgICAgIH0KKworICAgICAgICB2YXIgaG91cnMxMjsKKworICAg
ICAgICBpZiAoaG91cnMgPiAxMikgeworICAgICAgICAgICAgaG91cnMxMiA9IGhvdXJzIC0gMTI7
CisgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPT0gMCkgeworICAgICAgICAgICAgaG91cnMxMiA9
IDEyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaG91cnMxMiA9IGhvdXJzOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyArK2kpIHsK
KworICAgICAgICAgICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpOworCisgICAgICAgICAgICBpZiAo
ZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ2EnOiBjID0gIiIgKyBkYXlOYW1lc1tkLmdldERheSgpXTsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2InOiBjID0gIiIgKyBtb250aE5hbWVzW2QuZ2V0TW9udGgo
KV07IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzogYyA9IGxlZnRQYWQoZC5n
ZXREYXRlKCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6IGMgPSBsZWZ0
UGFkKGQuZ2V0RGF0ZSgpLCAiICIpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
SCc6IGMgPSBsZWZ0UGFkKGhvdXJzKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J0knOiBjID0gbGVmdFBhZChob3VyczEyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ2wnOiBjID0gbGVmdFBhZChob3VyczEyLCAiICIpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnbSc6IGMgPSBsZWZ0UGFkKGQuZ2V0TW9udGgoKSArIDEpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6IGMgPSBsZWZ0UGFkKGQuZ2V0TWludXRlcygpKTsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIC8vIHF1YXJ0ZXJzIG5vdCBpbiBPcGVuIEdyb3Vw
J3Mgc3RyZnRpbWUgc3BlY2lmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICBjYXNlICdxJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAiIiArIChNYXRoLmZsb29yKGQuZ2V0TW9udGgo
KSAvIDMpICsgMSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzogYyA9IGxl
ZnRQYWQoZC5nZXRTZWNvbmRzKCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
eSc6IGMgPSBsZWZ0UGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCk7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlICdZJzogYyA9ICIiICsgZC5nZXRGdWxsWWVhcigpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAncCc6IGMgPSAoaXNBTSkgPyAoIiIgKyAiYW0iKSA6ICgi
IiArICJwbSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnUCc6IGMgPSAoaXNB
TSkgPyAoIiIgKyAiQU0iKSA6ICgiIiArICJQTSIpOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAndyc6IGMgPSAiIiArIGQuZ2V0RGF5KCk7IGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByLnB1c2goYyk7CisgICAgICAgICAgICAgICAgZXNjYXBlID0g
ZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjID09ICIl
IikgeworICAgICAgICAgICAgICAgICAgICBlc2NhcGUgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHIucHVzaChjKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gci5qb2luKCIi
KTsKKyAgICB9CisKKyAgICAvLyBUbyBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRpbWUtYmFz
ZWQgZGF0YSBpbmRlcGVuZGVudCBvZiB3aGljaCB0aW1lCisgICAgLy8gem9uZSB0aGUgY2xpZW50
IGhhcHBlbnMgdG8gYmUgaW4gd2UgbmVlZCBhIGRhdGUtbGlrZSBvYmplY3QgaW5kZXBlbmRlbnQK
KyAgICAvLyBvZiB0aW1lIHpvbmVzLiAgVGhpcyBpcyBkb25lIHRocm91Z2ggYSB3cmFwcGVyIHRo
YXQgb25seSBjYWxscyB0aGUgVVRDCisgICAgLy8gdmVyc2lvbnMgb2YgdGhlIGFjY2Vzc29yIG1l
dGhvZHMuCisKKyAgICBmdW5jdGlvbiBtYWtlVXRjV3JhcHBlcihkKSB7CisKKyAgICAgICAgZnVu
Y3Rpb24gYWRkUHJveHlNZXRob2Qoc291cmNlT2JqLCBzb3VyY2VNZXRob2QsIHRhcmdldE9iaiwg
dGFyZ2V0TWV0aG9kKSB7CisgICAgICAgICAgICBzb3VyY2VPYmpbc291cmNlTWV0aG9kXSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRPYmpbdGFyZ2V0TWV0aG9k
XS5hcHBseSh0YXJnZXRPYmosIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9OworICAgICAgICB9
OworCisgICAgICAgIHZhciB1dGMgPSB7CisgICAgICAgICAgICBkYXRlOiBkCisgICAgICAgIH07
CisKKyAgICAgICAgLy8gc3VwcG9ydCBzdHJmdGltZSwgaWYgZm91bmQKKworICAgICAgICBpZiAo
ZC5zdHJmdGltZSAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGFkZFByb3h5TWV0aG9kKHV0
YywgInN0cmZ0aW1lIiwgZCwgInN0cmZ0aW1lIik7CisgICAgICAgIH0KKworICAgICAgICBhZGRQ
cm94eU1ldGhvZCh1dGMsICJnZXRUaW1lIiwgZCwgImdldFRpbWUiKTsKKyAgICAgICAgYWRkUHJv
eHlNZXRob2QodXRjLCAic2V0VGltZSIsIGQsICJzZXRUaW1lIik7CisKKyAgICAgICAgdmFyIHBy
b3BzID0gWyJEYXRlIiwgIkRheSIsICJGdWxsWWVhciIsICJIb3VycyIsICJNaWxsaXNlY29uZHMi
LCAiTWludXRlcyIsICJNb250aCIsICJTZWNvbmRzIl07CisKKyAgICAgICAgZm9yICh2YXIgcCA9
IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykgeworICAgICAgICAgICAgYWRkUHJveHlNZXRob2Qo
dXRjLCAiZ2V0IiArIHByb3BzW3BdLCBkLCAiZ2V0VVRDIiArIHByb3BzW3BdKTsKKyAgICAgICAg
ICAgIGFkZFByb3h5TWV0aG9kKHV0YywgInNldCIgKyBwcm9wc1twXSwgZCwgInNldFVUQyIgKyBw
cm9wc1twXSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdXRjOworICAgIH07CisKKyAg
ICAvLyBzZWxlY3QgdGltZSB6b25lIHN0cmF0ZWd5LiAgVGhpcyByZXR1cm5zIGEgZGF0ZS1saWtl
IG9iamVjdCB0aWVkIHRvIHRoZQorICAgIC8vIGRlc2lyZWQgdGltZXpvbmUKKworICAgIGZ1bmN0
aW9uIGRhdGVHZW5lcmF0b3IodHMsIG9wdHMpIHsKKyAgICAgICAgaWYgKG9wdHMudGltZXpvbmUg
PT0gImJyb3dzZXIiKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodHMpOworICAgICAg
ICB9IGVsc2UgaWYgKCFvcHRzLnRpbWV6b25lIHx8IG9wdHMudGltZXpvbmUgPT0gInV0YyIpIHsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVXRjV3JhcHBlcihuZXcgRGF0ZSh0cykpOworICAgICAg
ICB9IGVsc2UgaWYgKHR5cGVvZiB0aW1lem9uZUpTICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiB0
aW1lem9uZUpTLkRhdGUgIT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgIHZhciBkID0gbmV3
IHRpbWV6b25lSlMuRGF0ZSgpOworICAgICAgICAgICAgLy8gdGltZXpvbmUtanMgaXMgZmlja2xl
LCBzbyBiZSBzdXJlIHRvIHNldCB0aGUgdGltZSB6b25lIGJlZm9yZQorICAgICAgICAgICAgLy8g
c2V0dGluZyB0aGUgdGltZS4KKyAgICAgICAgICAgIGQuc2V0VGltZXpvbmUob3B0cy50aW1lem9u
ZSk7CisgICAgICAgICAgICBkLnNldFRpbWUodHMpOworICAgICAgICAgICAgcmV0dXJuIGQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVV0Y1dyYXBwZXIobmV3IERh
dGUodHMpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBtYXAgb2YgYXBwLiBzaXpl
IG9mIHRpbWUgdW5pdHMgaW4gbWlsbGlzZWNvbmRzCisKKyAgICB2YXIgdGltZVVuaXRTaXplID0g
eworICAgICAgICAic2Vjb25kIjogMTAwMCwKKyAgICAgICAgIm1pbnV0ZSI6IDYwICogMTAwMCwK
KyAgICAgICAgImhvdXIiOiA2MCAqIDYwICogMTAwMCwKKyAgICAgICAgImRheSI6IDI0ICogNjAg
KiA2MCAqIDEwMDAsCisgICAgICAgICJtb250aCI6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCwK
KyAgICAgICAgInF1YXJ0ZXIiOiAzICogMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwLAorICAgICAg
ICAieWVhciI6IDM2NS4yNDI1ICogMjQgKiA2MCAqIDYwICogMTAwMAorICAgIH07CisKKyAgICAv
LyB0aGUgYWxsb3dlZCB0aWNrIHNpemVzLCBhZnRlciAxIHllYXIgd2UgdXNlCisgICAgLy8gYW4g
aW50ZWdlciBhbGdvcml0aG0KKworICAgIHZhciBiYXNlU3BlYyA9IFsKKyAgICAgICAgWzEsICJz
ZWNvbmQiXSwgWzIsICJzZWNvbmQiXSwgWzUsICJzZWNvbmQiXSwgWzEwLCAic2Vjb25kIl0sCisg
ICAgICAgIFszMCwgInNlY29uZCJdLCAKKyAgICAgICAgWzEsICJtaW51dGUiXSwgWzIsICJtaW51
dGUiXSwgWzUsICJtaW51dGUiXSwgWzEwLCAibWludXRlIl0sCisgICAgICAgIFszMCwgIm1pbnV0
ZSJdLCAKKyAgICAgICAgWzEsICJob3VyIl0sIFsyLCAiaG91ciJdLCBbNCwgImhvdXIiXSwKKyAg
ICAgICAgWzgsICJob3VyIl0sIFsxMiwgImhvdXIiXSwKKyAgICAgICAgWzEsICJkYXkiXSwgWzIs
ICJkYXkiXSwgWzMsICJkYXkiXSwKKyAgICAgICAgWzAuMjUsICJtb250aCJdLCBbMC41LCAibW9u
dGgiXSwgWzEsICJtb250aCJdLAorICAgICAgICBbMiwgIm1vbnRoIl0KKyAgICBdOworCisgICAg
Ly8gd2UgZG9uJ3Qga25vdyB3aGljaCB2YXJpYW50KHMpIHdlJ2xsIG5lZWQgeWV0LCBidXQgZ2Vu
ZXJhdGluZyBib3RoIGlzCisgICAgLy8gY2hlYXAKKworICAgIHZhciBzcGVjTW9udGhzID0gYmFz
ZVNwZWMuY29uY2F0KFtbMywgIm1vbnRoIl0sIFs2LCAibW9udGgiXSwKKyAgICAgICAgWzEsICJ5
ZWFyIl1dKTsKKyAgICB2YXIgc3BlY1F1YXJ0ZXJzID0gYmFzZVNwZWMuY29uY2F0KFtbMSwgInF1
YXJ0ZXIiXSwgWzIsICJxdWFydGVyIl0sCisgICAgICAgIFsxLCAieWVhciJdXSk7CisKKyAgICBm
dW5jdGlvbiBpbml0KHBsb3QpIHsKKyAgICAgICAgcGxvdC5ob29rcy5wcm9jZXNzRGF0YXBvaW50
cy5wdXNoKGZ1bmN0aW9uIChwbG90LCBzZXJpZXMsIGRhdGFwb2ludHMpIHsKKyAgICAgICAgICAg
ICQuZWFjaChwbG90LmdldEF4ZXMoKSwgZnVuY3Rpb24oYXhpc05hbWUsIGF4aXMpIHsKKworICAg
ICAgICAgICAgICAgIHZhciBvcHRzID0gYXhpcy5vcHRpb25zOworCisgICAgICAgICAgICAgICAg
aWYgKG9wdHMubW9kZSA9PSAidGltZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNr
R2VuZXJhdG9yID0gZnVuY3Rpb24oYXhpcykgeworCisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdGlja3MgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGF0ZUdlbmVy
YXRvcihheGlzLm1pbiwgb3B0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluU2l6
ZSA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgcXVhcnRlciB1c2UgYSBw
b3NzaWJpbGl0eSBpZiBxdWFydGVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1l
bnRpb25lZCBpbiBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucworCisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3BlYyA9IChvcHRzLnRpY2tTaXplICYmIG9wdHMudGlja1NpemVbMV0gPT09Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInF1YXJ0ZXIiKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChvcHRzLm1pblRpY2tTaXplICYmIG9wdHMubWluVGlja1NpemVbMV0gPT09
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInF1YXJ0ZXIiKSA/IHNwZWNRdWFydGVycyA6
IHNwZWNNb250aHM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLm1pblRpY2tT
aXplICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9w
dHMudGlja1NpemUgPT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWluU2l6ZSA9IG9wdHMudGlja1NpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluU2l6ZSA9IG9wdHMu
bWluVGlja1NpemVbMF0gKiB0aW1lVW5pdFNpemVbb3B0cy5taW5UaWNrU2l6ZVsxXV07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWMubGVuZ3RoIC0g
MTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMuZGVsdGEgPCAo
c3BlY1tpXVswXSAqIHRpbWVVbml0U2l6ZVtzcGVjW2ldWzFdXQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3BlY1tpICsgMV1bMF0gKiB0aW1lVW5pdFNp
emVbc3BlY1tpICsgMV1bMV1dKSAvIDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgc3BlY1tpXVswXSAqIHRpbWVVbml0U2l6ZVtzcGVjW2ldWzFdXSA+PSBtaW5TaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHNpemUgPSBzcGVjW2ldWzBdOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHVuaXQgPSBzcGVjW2ldWzFdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVj
aWFsLWNhc2UgdGhlIHBvc3NpYmlsaXR5IG9mIHNldmVyYWwgeWVhcnMKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHVuaXQgPT0gInllYXIiKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiBnaXZlbiBhIG1pblRpY2tTaXplIGluIHllYXJzLCBqdXN0IHVzZSBpdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IGl0J3MgYW4gaW50
ZWdlcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubWluVGlja1NpemUg
IT0gbnVsbCAmJiBvcHRzLm1pblRpY2tTaXplWzFdID09ICJ5ZWFyIikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplID0gTWF0aC5mbG9vcihvcHRzLm1pblRpY2tTaXplWzBd
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBtYWduID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0
aC5sb2coYXhpcy5kZWx0YSAvIHRpbWVVbml0U2l6ZS55ZWFyKSAvIE1hdGguTE4xMCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybSA9IChheGlzLmRlbHRhIC8gdGlt
ZVVuaXRTaXplLnllYXIpIC8gbWFnbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9ybSA8IDEuNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9y
bSA8IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vcm0gPCA3LjUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA1OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZSA9IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAqPSBtYWduOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG1pbmltdW0gc2l6ZSBmb3IgeWVhcnMgaXMgMQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpemUgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUg
PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrU2l6ZSA9IG9wdHMudGlj
a1NpemUgfHwgW3NpemUsIHVuaXRdOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpY2tT
aXplID0gYXhpcy50aWNrU2l6ZVswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBh
eGlzLnRpY2tTaXplWzFdOworCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IHRp
Y2tTaXplICogdGltZVVuaXRTaXplW3VuaXRdOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pdCA9PSAic2Vjb25kIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0
U2Vjb25kcyhmbG9vckluQmFzZShkLmdldFNlY29uZHMoKSwgdGlja1NpemUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAibWludXRlIikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGQuc2V0TWludXRlcyhmbG9vckluQmFzZShkLmdldE1pbnV0ZXMo
KSwgdGlja1NpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9
PSAiaG91ciIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldEhvdXJzKGZsb29y
SW5CYXNlKGQuZ2V0SG91cnMoKSwgdGlja1NpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodW5pdCA9PSAibW9udGgiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZC5zZXRNb250aChmbG9vckluQmFzZShkLmdldE1vbnRoKCksIHRpY2tTaXplKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT0gInF1YXJ0ZXIiKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRNb250aCgzICogZmxvb3JJbkJhc2UoZC5nZXRN
b250aCgpIC8gMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja1NpemUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAieWVhciIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldEZ1bGxZZWFyKGZsb29ySW5CYXNlKGQuZ2V0
RnVsbFllYXIoKSwgdGlja1NpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgc21hbGxlciBjb21wb25lbnRzCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGQuc2V0TWlsbGlzZWNvbmRzKDApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RlcCA+PSB0aW1lVW5pdFNpemUubWludXRlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZC5zZXRTZWNvbmRzKDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5ob3VyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZC5zZXRNaW51dGVzKDApOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5kYXkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkLnNldEhvdXJzKDApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5kYXkgKiA0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZC5zZXREYXRlKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChzdGVwID49IHRpbWVVbml0U2l6ZS5tb250aCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkLnNldE1vbnRoKGZsb29ySW5CYXNlKGQuZ2V0TW9udGgoKSwgMykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5xdWFydGVy
ICogMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoZmxvb3JJbkJh
c2UoZC5nZXRNb250aCgpLCA2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHN0ZXAgPj0gdGltZVVuaXRTaXplLnllYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkLnNldE1vbnRoKDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgY2FycnkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHYgPSBOdW1iZXIuTmFOOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXY7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXYgPSB2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBkLmdldFRpbWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrcy5wdXNoKHYpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHVuaXQgPT0gIm1vbnRoIiB8fCB1bml0ID09ICJxdWFydGVy
IikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlja1NpemUgPCAxKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgYml0IGNvbXBsaWNh
dGVkIC0gd2UnbGwgZGl2aWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbW9udGgvcXVhcnRlciB1cCBidXQgd2UgbmVlZCB0byB0YWtlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXJlIG9mIGZyYWN0aW9ucyBzbyB3ZSBkb24ndCBl
bmQgdXAgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtaWRk
bGUgb2YgYSBkYXkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRE
YXRlKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0g
ZC5nZXRUaW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1v
bnRoKGQuZ2V0TW9udGgoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHVuaXQgPT0gInF1YXJ0ZXIiID8gMyA6IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBlbmQgPSBkLmdldFRpbWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQuc2V0VGltZSh2ICsgY2FycnkgKiB0aW1lVW5pdFNpemUuaG91ciAr
IChlbmQgLSBzdGFydCkgKiB0aWNrU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXJyeSA9IGQuZ2V0SG91cnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGQuc2V0SG91cnMoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1vbnRo
KGQuZ2V0TW9udGgoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGlja1NpemUgKiAodW5pdCA9PSAicXVhcnRlciIgPyAzIDogMSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh1bml0ID09ICJ5ZWFyIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNl
dEZ1bGxZZWFyKGQuZ2V0RnVsbFllYXIoKSArIHRpY2tTaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNl
dFRpbWUodiArIHN0ZXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKHYgPCBheGlzLm1heCAmJiB2ICE9IHByZXYpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlja3M7CisgICAgICAgICAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrRm9ybWF0dGVyID0gZnVuY3Rpb24g
KHYsIGF4aXMpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkYXRlR2VuZXJh
dG9yKHYsIGF4aXMub3B0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0
IGNoZWNrIGdsb2JhbCBmb3JtYXQKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMu
dGltZWZvcm1hdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZvcm1hdERhdGUoZCwgb3B0cy50aW1lZm9ybWF0LCBvcHRzLm1vbnRoTmFtZXMsIG9wdHMuZGF5
TmFtZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBwb3NzaWJseSB1c2UgcXVhcnRlcnMgaWYgcXVhcnRlcnMgYXJlIG1lbnRpb25lZCBp
bgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IG9mIHRoZXNlIHBsYWNlcworCisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgdXNlUXVhcnRlcnMgPSAoYXhpcy5vcHRpb25zLnRpY2tT
aXplICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMub3B0aW9ucy50aWNr
U2l6ZVsxXSA9PSAicXVhcnRlciIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF4
aXMub3B0aW9ucy5taW5UaWNrU2l6ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBheGlzLm9wdGlvbnMubWluVGlja1NpemVbMV0gPT0gInF1YXJ0ZXIiKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHQgPSBheGlzLnRpY2tTaXplWzBdICogdGltZVVuaXRTaXplW2F4
aXMudGlja1NpemVbMV1dOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBheGlz
Lm1heCAtIGF4aXMubWluOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IChv
cHRzLnR3ZWx2ZUhvdXJDbG9jaykgPyAiICVwIiA6ICIiOworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGhvdXJDb2RlID0gKG9wdHMudHdlbHZlSG91ckNsb2NrKSA/ICIlSSIgOiAiJUgiOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZtdDsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHQgPCB0aW1lVW5pdFNpemUubWludXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm10ID0gaG91ckNvZGUgKyAiOiVNOiVTIiArIHN1ZmZpeDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodCA8IHRpbWVVbml0U2l6ZS5kYXkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3BhbiA8IDIgKiB0aW1lVW5pdFNpemUuZGF5KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IGhvdXJDb2RlICsgIjolTSIgKyBzdWZm
aXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm10ID0gIiViICVkICIgKyBob3VyQ29kZSArICI6JU0iICsgc3Vm
Zml4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAodCA8IHRpbWVVbml0U2l6ZS5tb250aCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZtdCA9ICIlYiAlZCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCh1c2VRdWFydGVycyAmJiB0IDwgdGltZVVuaXRTaXplLnF1YXJ0ZXIpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCF1c2VRdWFydGVycyAmJiB0IDwgdGltZVVuaXRTaXpl
LnllYXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW4gPCB0aW1lVW5p
dFNpemUueWVhcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSAiJWIi
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZtdCA9ICIlYiAlWSI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2VRdWFydGVycyAmJiB0
IDwgdGltZVVuaXRTaXplLnllYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3BhbiA8IHRpbWVVbml0U2l6ZS55ZWFyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZtdCA9ICJRJXEiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICJRJXEgJVkiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gIiVZIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ0ID0gZm9ybWF0RGF0ZShk
LCBmbXQsIG9wdHMubW9udGhOYW1lcywgb3B0cy5kYXlOYW1lcyk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBydDsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgJC5wbG90
LnBsdWdpbnMucHVzaCh7CisgICAgICAgIGluaXQ6IGluaXQsCisgICAgICAgIG9wdGlvbnM6IG9w
dGlvbnMsCisgICAgICAgIG5hbWU6ICd0aW1lJywKKyAgICAgICAgdmVyc2lvbjogJzEuMCcKKyAg
ICB9KTsKKworICAgIC8vIFRpbWUtYXhpcyBzdXBwb3J0IHVzZWQgdG8gYmUgaW4gRmxvdCBjb3Jl
LCB3aGljaCBleHBvc2VkIHRoZQorICAgIC8vIGZvcm1hdERhdGUgZnVuY3Rpb24gb24gdGhlIHBs
b3Qgb2JqZWN0LiAgVmFyaW91cyBwbHVnaW5zIGRlcGVuZAorICAgIC8vIG9uIHRoZSBmdW5jdGlv
biwgc28gd2UgbmVlZCB0byByZS1leHBvc2UgaXQgaGVyZS4KKworICAgICQucGxvdC5mb3JtYXRE
YXRlID0gZm9ybWF0RGF0ZTsKKworfSkoalF1ZXJ5KTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmpzCShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NDcyIEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuOC4zCisg
KiBodHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHA6
Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24g
YW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNl
CisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogVHVlIE5vdiAxMyAy
MDEyIDA4OjIwOjMzIEdNVC0wNTAwIChFYXN0ZXJuIFN0YW5kYXJkIFRpbWUpCisgKi8KKyhmdW5j
dGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7Cit2YXIKKyAgICAvLyBBIGNlbnRyYWwgcmVmZXJl
bmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKKyAgICByb290alF1ZXJ5LAorCisgICAg
Ly8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5CisgICAgcmVhZHlMaXN0LAorCisgICAg
Ly8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFyZ3Vt
ZW50IChzYW5kYm94KQorICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAorICAgIGxvY2F0
aW9uID0gd2luZG93LmxvY2F0aW9uLAorICAgIG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0b3Is
CisKKyAgICAvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKyAgICBfalF1
ZXJ5ID0gd2luZG93LmpRdWVyeSwKKworICAgIC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Yg
b3ZlcndyaXRlCisgICAgXyQgPSB3aW5kb3cuJCwKKworICAgIC8vIFNhdmUgYSByZWZlcmVuY2Ug
dG8gc29tZSBjb3JlIG1ldGhvZHMKKyAgICBjb3JlX3B1c2ggPSBBcnJheS5wcm90b3R5cGUucHVz
aCwKKyAgICBjb3JlX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAorICAgIGNvcmVfaW5k
ZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAorICAgIGNvcmVfdG9TdHJpbmcgPSBPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLAorICAgIGNvcmVfaGFzT3duID0gT2JqZWN0LnByb3RvdHlw
ZS5oYXNPd25Qcm9wZXJ0eSwKKyAgICBjb3JlX3RyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW0s
CisKKyAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorICAgIGpRdWVyeSA9IGZ1
bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmpl
Y3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisgICAg
ICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1
ZXJ5ICk7CisgICAgfSwKKworICAgIC8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKKyAgICBj
b3JlX3BudW0gPSAvW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNl
LAorCisgICAgLy8gVXNlZCBmb3IgZGV0ZWN0aW5nIGFuZCB0cmltbWluZyB3aGl0ZXNwYWNlCisg
ICAgY29yZV9ybm90d2hpdGUgPSAvXFMvLAorICAgIGNvcmVfcnNwYWNlID0gL1xzKy8sCisKKyAg
ICAvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AgKGhlcmUncyBsb29raW5nIGF0IHlv
dSwgU2FmYXJpIDUuMCBhbmQgSUUpCisgICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNc
dUZFRkZceEEwXSskL2csCisKKyAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwg
c3RyaW5ncworICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZp
YSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKKyAgICBycXVpY2tFeHByID0gL14oPzpbXiM8XSooPFtc
d1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAorCisgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25l
IHRhZworICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLAorCisg
ICAgLy8gSlNPTiBSZWdFeHAKKyAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywKKyAg
ICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLAorICAgIHJ2YWxpZGVzY2Fw
ZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZywKKyAgICBydmFsaWR0b2tl
bnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpb
ZUVdW1wtK10/XGQrfCkvZywKKworICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2Ft
ZWxpemluZworICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCisgICAgcmRhc2hBbHBoYSA9IC8tKFtc
ZGEtel0pL2dpLAorCisgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNr
IHRvIHJlcGxhY2UoKQorICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7
CisgICAgICAgIHJldHVybiAoIGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKKyAgICB9LAor
CisgICAgLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QK
KyAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsK
KyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVu
dC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgeworICAgICAgICAgICAgLy8gd2UncmUgaGVy
ZSBiZWNhdXNlIHJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaW4gb2xkSUUKKyAgICAgICAgICAg
IC8vIHdoaWNoIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkhCisg
ICAgICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERP
TUNvbnRlbnRMb2FkZWQgKTsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAgICB9
CisgICAgfSwKKworICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCisgICAgY2xhc3MydHlw
ZSA9IHt9OworCitqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0geworICAgIGNvbnN0cnVj
dG9yOiBqUXVlcnksCisgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290
alF1ZXJ5ICkgeworICAgICAgICB2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOworCisgICAgICAg
IC8vIEhhbmRsZSAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQorICAgICAg
ICBpZiAoICFzZWxlY3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CisKKyAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKKyAgICAgICAgaWYgKCBzZWxlY3Rv
ci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBzZWxl
Y3RvcjsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncworICAgICAg
ICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBpZiAo
IHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3Iu
bGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CisgICAgICAg
ICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8
PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAgICAgICAgICAgICAgICBtYXRj
aCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29u
dGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAobWF0
Y2hbMV0gfHwgIWNvbnRleHQpICkgeworCisgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0
bWwpIC0+ICQoYXJyYXkpCisgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250
ZXh0WzBdIDogY29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgZG9jID0gKCBjb250ZXh0ICYm
IGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRv
Y3VtZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyaXB0cyBpcyB0cnVlIGZvciBi
YWNrLWNvbXBhdAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGpRdWVyeS5wYXJzZUhU
TUwoIG1hdGNoWzFdLCBkb2MsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByc2lu
Z2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0ci5jYWxsKCBzZWxlY3Rvciwg
Y29udGV4dCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKKworICAgICAgICAg
ICAgICAgIC8vIEhBTkRMRTogJCgjaWQpCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSAp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hl
biBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRo
YXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1zCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9i
amVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc1swXSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhBTkRMRTog
JChleHByLCAkKC4uLikpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250
ZXh0LmpxdWVyeSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJvb3Rq
UXVlcnkgKS5maW5kKCBzZWxlY3RvciApOworCisgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhw
ciwgY29udGV4dCkKKyAgICAgICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86
ICQoY29udGV4dCkuZmluZChleHByKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQorICAgICAg
ICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgfSBlbHNlIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcm9vdGpR
dWVyeS5yZWFkeSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VsZWN0
b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0b3Ig
PSBzZWxlY3Rvci5zZWxlY3RvcjsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHNlbGVjdG9y
LmNvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSgg
c2VsZWN0b3IsIHRoaXMgKTsKKyAgICB9LAorCisgICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBz
ZWxlY3RvcgorICAgIHNlbGVjdG9yOiAiIiwKKworICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24g
b2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBqcXVlcnk6ICIxLjguMyIsCisKKyAgICAvLyBUaGUg
ZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKKyAgICBsZW5ndGg6IDAsCisK
KyAgICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBl
bGVtZW50IHNldAorICAgIHNpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5s
ZW5ndGg7CisgICAgfSwKKworICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gY29yZV9zbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgTnRo
IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKyAgICAvLyBHZXQgdGhlIHdo
b2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorICAgIGdldDogZnVuY3Rp
b24oIG51bSApIHsKKyAgICAgICAgcmV0dXJuIG51bSA9PSBudWxsID8KKworICAgICAgICAgICAg
Ly8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQorICAgICAgICAgICAgdGhpcy50b0FycmF5KCkgOgor
CisgICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0CisgICAgICAgICAgICAoIG51
bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKKyAgICB9
LAorCisgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRo
ZSBzdGFjaworICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQor
ICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKKworICAg
ICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorICAgICAgICB2
YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisKKyAg
ICAgICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5j
ZSkKKyAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOworCisgICAgICAgIHJldC5jb250ZXh0
ID0gdGhpcy5jb250ZXh0OworCisgICAgICAgIGlmICggbmFtZSA9PT0gImZpbmQiICkgeworICAg
ICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICggdGhpcy5zZWxlY3RvciA/
ICIgIiA6ICIiICkgKyBzZWxlY3RvcjsKKyAgICAgICAgfSBlbHNlIGlmICggbmFtZSApIHsKKyAg
ICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsgIigi
ICsgc2VsZWN0b3IgKyAiKSI7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gdGhlIG5l
d2x5LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAg
ICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQg
c2V0LgorICAgIC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9m
IGFyZ3MsIGJ1dCB0aGlzIGlzCisgICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQorICAgIGVh
Y2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5l
YWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApOworICAgIH0sCisKKyAgICByZWFkeTogZnVuY3Rp
b24oIGZuICkgeworICAgICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCisgICAgICAgIGpRdWVyeS5y
ZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
LAorCisgICAgZXE6IGZ1bmN0aW9uKCBpICkgeworICAgICAgICBpID0gK2k7CisgICAgICAgIHJl
dHVybiBpID09PSAtMSA/CisgICAgICAgICAgICB0aGlzLnNsaWNlKCBpICkgOgorICAgICAgICAg
ICAgdGhpcy5zbGljZSggaSwgaSArIDEgKTsKKyAgICB9LAorCisgICAgZmlyc3Q6IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcSggMCApOworICAgIH0sCisKKyAgICBsYXN0OiBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7CisgICAgfSwKKworICAg
IHNsaWNlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBjb3Jl
X3NsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSwKKyAgICAgICAgICAgICJzbGljZSIsIGNv
cmVfc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSApOworICAgIH0sCisKKyAgICBtYXA6
IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBq
UXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgcmV0dXJu
IGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKKyAgICAgICAgfSkpOworICAgIH0sCisK
KyAgICBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8
IHRoaXMuY29uc3RydWN0b3IobnVsbCk7CisgICAgfSwKKworICAgIC8vIEZvciBpbnRlcm5hbCB1
c2Ugb25seS4KKyAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtl
IGEgalF1ZXJ5IG1ldGhvZC4KKyAgICBwdXNoOiBjb3JlX3B1c2gsCisgICAgc29ydDogW10uc29y
dCwKKyAgICBzcGxpY2U6IFtdLnNwbGljZQorfTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlv
biB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgoralF1ZXJ5LmZu
LmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCitqUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZu
LmV4dGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHks
IGNvcHlJc0FycmF5LCBjbG9uZSwKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9
LAorICAgICAgICBpID0gMSwKKyAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKKyAg
ICAgICAgZGVlcCA9IGZhbHNlOworCisgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlv
bgorICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICBkZWVw
ID0gdGFyZ2V0OworICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CisgICAgICAg
IC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKyAgICAgICAgaSA9IDI7CisgICAg
fQorCisgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRo
aW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAi
b2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKKyAgICAgICAgdGFyZ2V0
ID0ge307CisgICAgfQorCisgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUg
YXJndW1lbnQgaXMgcGFzc2VkCisgICAgaWYgKCBsZW5ndGggPT09IGkgKSB7CisgICAgICAgIHRh
cmdldCA9IHRoaXM7CisgICAgICAgIC0taTsKKyAgICB9CisKKyAgICBmb3IgKCA7IGkgPCBsZW5n
dGg7IGkrKyApIHsKKyAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVk
IHZhbHVlcworICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwg
KSB7CisgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0CisgICAgICAgICAgICBm
b3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0WyBu
YW1lIF07CisgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKKworICAgICAg
ICAgICAgICAgIC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKKyAgICAgICAgICAgICAgICBp
ZiAoIHRhcmdldCA9PT0gY29weSApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdyZSBt
ZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCisgICAgICAgICAgICAgICAgaWYgKCBkZWVw
ICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkg
PSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBj
b3B5SXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJh
eShzcmMpID8gc3JjIDogW107CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNy
YykgPyBzcmMgOiB7fTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQorICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBj
b3B5ICk7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFs
dWVzCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRo
ZSBtb2RpZmllZCBvYmplY3QKKyAgICByZXR1cm4gdGFyZ2V0OworfTsKKworalF1ZXJ5LmV4dGVu
ZCh7CisgICAgbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7CisgICAgICAgIGlmICggd2lu
ZG93LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgICAgIHdpbmRvdy4kID0gXyQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewor
ICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4galF1ZXJ5OworICAgIH0sCisKKyAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJl
IHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorICAgIGlzUmVhZHk6IGZhbHNlLAor
CisgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJl
Zm9yZQorICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisgICAgcmVhZHlX
YWl0OiAxLAorCisgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50CisgICAg
aG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKKyAgICAgICAgaWYgKCBob2xkICkgeworICAg
ICAgICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gSGFu
ZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQorICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsK
KworICAgICAgICAvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBh
bHJlYWR5IHJlYWR5CisgICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5
V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJ
RSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgorICAgICAgICBpZiAo
ICFkb2N1bWVudC5ib2R5ICkgeworICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpRdWVy
eS5yZWFkeSwgMSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUg
RE9NIGlzIHJlYWR5CisgICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKKworICAgICAgICAv
LyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQg
aWYgbmVlZCBiZQorICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlX
YWl0ID4gMCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKKyAgICAgICAgcmVhZHlM
aXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCisgICAgICAgIC8vIFRy
aWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cworICAgICAgICBpZiAoIGpRdWVyeS5mbi50cmln
Z2VyICkgeworICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5Iiku
b2ZmKCJyZWFkeSIpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIFNlZSB0ZXN0L3VuaXQv
Y29yZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCisgICAgLy8gU2luY2Ug
dmVyc2lvbiAxLjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAorICAgIC8v
IGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCisgICAg
aXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBl
KG9iaikgPT09ICJmdW5jdGlvbiI7CisgICAgfSwKKworICAgIGlzQXJyYXk6IEFycmF5LmlzQXJy
YXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikg
PT09ICJhcnJheSI7CisgICAgfSwKKworICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgewor
ICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7CisgICAgfSwK
KworICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuICFpc05h
TiggcGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApOworICAgIH0sCisKKyAgICB0
eXBlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPworICAg
ICAgICAgICAgU3RyaW5nKCBvYmogKSA6CisgICAgICAgICAgICBjbGFzczJ0eXBlWyBjb3JlX3Rv
U3RyaW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOworICAgIH0sCisKKyAgICBpc1BsYWluT2Jq
ZWN0OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4KKyAg
ICAgICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5j
ZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IERPTSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3ZWxs
CisgICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8fCBv
Ymoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBO
b3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0CisgICAgICAgICAgICBp
ZiAoIG9iai5jb25zdHJ1Y3RvciAmJgorICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5jYWxs
KG9iaiwgImNvbnN0cnVjdG9yIikgJiYKKyAgICAgICAgICAgICAgICAhY29yZV9oYXNPd24uY2Fs
bChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAo
IGUgKSB7CisgICAgICAgICAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24gY2Vy
dGFpbiBob3N0IG9iamVjdHMgIzk4OTcKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHks
IHNvIHRvIHNwZWVkIHVwLAorICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxs
IHByb3BlcnRpZXMgYXJlIG93bi4KKworICAgICAgICB2YXIga2V5OworICAgICAgICBmb3IgKCBr
ZXkgaW4gb2JqICkge30KKworICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgY29y
ZV9oYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKKyAgICB9LAorCisgICAgaXNFbXB0eU9iamVjdDog
ZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgdmFyIG5hbWU7CisgICAgICAgIGZvciAoIG5hbWUg
aW4gb2JqICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKKyAgICB9LAorCisgICAgLy8gZGF0YTogc3Ry
aW5nIG9mIGh0bWwKKyAgICAvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhl
IGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRvIGRv
Y3VtZW50CisgICAgLy8gc2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUg
c2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCisgICAgcGFyc2VIVE1MOiBmdW5jdGlv
biggZGF0YSwgY29udGV4dCwgc2NyaXB0cyApIHsKKyAgICAgICAgdmFyIHBhcnNlZDsKKyAgICAg
ICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09
PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAgICBzY3JpcHRzID0gY29udGV4dDsKKyAgICAgICAg
ICAgIGNvbnRleHQgPSAwOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8
IGRvY3VtZW50OworCisgICAgICAgIC8vIFNpbmdsZSB0YWcKKyAgICAgICAgaWYgKCAocGFyc2Vk
ID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICkpICkgeworICAgICAgICAgICAgcmV0dXJuIFsgY29u
dGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdOworICAgICAgICB9CisKKyAgICAgICAg
cGFyc2VkID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRz
ID8gbnVsbCA6IFtdICk7CisgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLAorICAgICAg
ICAgICAgKHBhcnNlZC5jYWNoZWFibGUgPyBqUXVlcnkuY2xvbmUoIHBhcnNlZC5mcmFnbWVudCAp
IDogcGFyc2VkLmZyYWdtZW50KS5jaGlsZE5vZGVzICk7CisgICAgfSwKKworICAgIHBhcnNlSlNP
TjogZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEg
IT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3Zl
ZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQorICAgICAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRhdGEg
KTsKKworICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBw
YXJzZXIgZmlyc3QKKyAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJz
ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFjdHVh
bCBKU09OCisgICAgICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3JnL2pz
b24yLmpzCisgICAgICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBydmFs
aWRlc2NhcGUsICJAIiApCisgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkdG9rZW5zLCAiXSIg
KQorICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKKworICAgICAg
ICAgICAgcmV0dXJuICggbmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkgKSgpOworCisg
ICAgICAgIH0KKyAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSAp
OworICAgIH0sCisKKyAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCisgICAgcGFyc2VY
TUw6IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAgICB2YXIgeG1sLCB0bXA7CisgICAgICAgIGlm
ICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICggd2lu
ZG93LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKKyAgICAgICAgICAgICAgICB0bXAgPSBuZXcg
RE9NUGFyc2VyKCk7CisgICAgICAgICAgICAgICAgeG1sID0gdG1wLnBhcnNlRnJvbVN0cmluZygg
ZGF0YSAsICJ0ZXh0L3htbCIgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCisgICAgICAg
ICAgICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiApOwor
ICAgICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7CisgICAgICAgICAgICAgICAgeG1s
LmxvYWRYTUwoIGRhdGEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCggZSApIHsK
KyAgICAgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoICF4
bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAi
cGFyc2VyZXJyb3IiICkubGVuZ3RoICkgeworICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52
YWxpZCBYTUw6ICIgKyBkYXRhICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHhtbDsKKyAg
ICB9LAorCisgICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKKworICAgIC8vIEV2YWx1YXRlcyBhIHNj
cmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CisgICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24gZmlu
ZGluZ3MgYnkgSmltIERyaXNjb2xsCisgICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQvYmxv
Zy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250
ZXh0CisgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgIGlmICggZGF0
YSAmJiBjb3JlX3Jub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7CisgICAgICAgICAgICAvLyBXZSB1
c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgorICAgICAgICAgICAgLy8gV2UgdXNl
IGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93CisgICAgICAg
ICAgICAvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAorICAgICAgICAgICAgKCB3aW5k
b3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKKyAgICAgICAgICAgICAgICB3aW5k
b3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOworICAgICAgICAgICAgfSApKCBkYXRh
ICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxD
YXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcworICAgIC8vIE1pY3Jvc29mdCBm
b3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKKyAgICBjYW1lbENhc2U6
IGZ1bmN0aW9uKCBzdHJpbmcgKSB7CisgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1z
UHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKKyAgICB9
LAorCisgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICByZXR1
cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUu
dG9Mb3dlckNhc2UoKTsKKyAgICB9LAorCisgICAgLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNh
Z2Ugb25seQorICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkgeworICAg
ICAgICB2YXIgbmFtZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0g
b2JqLmxlbmd0aCwKKyAgICAgICAgICAgIGlzT2JqID0gbGVuZ3RoID09PSB1bmRlZmluZWQgfHwg
alF1ZXJ5LmlzRnVuY3Rpb24oIG9iaiApOworCisgICAgICAgIGlmICggYXJncyApIHsKKyAgICAg
ICAgICAgIGlmICggaXNPYmogKSB7CisgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmog
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgbmFtZSBd
LCBhcmdzICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFs
c2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBBIHNw
ZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKKyAgICAgICAgICAgICAgICBm
b3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5j
YWxsKCBvYmpbIG5hbWUgXSwgbmFtZSwgb2JqWyBuYW1lIF0gKSA9PT0gZmFsc2UgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICgg
OyBpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxs
KCBvYmpbIGkgXSwgaSwgb2JqWyBpKysgXSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9
LAorCisgICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3Nz
aWJsZQorICAgIHRyaW06IGNvcmVfdHJpbSAmJiAhY29yZV90cmltLmNhbGwoIlx1RkVGRlx4QTAi
KSA/CisgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQg
PT0gbnVsbCA/CisgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgICAgIGNvcmVfdHJp
bS5jYWxsKCB0ZXh0ICk7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIE90aGVyd2lzZSB1c2Ug
b3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkg
eworICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CisgICAgICAgICAgICAgICAgIiIg
OgorICAgICAgICAgICAgICAgICggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7Cisg
ICAgICAgIH0sCisKKyAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5Cisg
ICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgeworICAgICAgICB2YXIgdHlw
ZSwKKyAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgaWYgKCBhcnIg
IT0gbnVsbCApIHsKKyAgICAgICAgICAgIC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5j
dGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3RoJworICAgICAgICAgICAgLy8gVHdlYWtlZCBsb2dpYyBz
bGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkzMAorICAg
ICAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnIgKTsKKworICAgICAgICAgICAgaWYgKCBh
cnIubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1bmN0
aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFyciApICkgewor
ICAgICAgICAgICAgICAgIGNvcmVfcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAg
ICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkgeworICAgICAgICB2YXIgbGVuOwor
CisgICAgICAgIGlmICggYXJyICkgeworICAgICAgICAgICAgaWYgKCBjb3JlX2luZGV4T2YgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVfaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkg
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVuID0gYXJyLmxlbmd0aDsKKyAgICAg
ICAgICAgIGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7CisK
KyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgIC8v
IFNraXAgYWNjZXNzaW5nIGluIHNwYXJzZSBhcnJheXMKKyAgICAgICAgICAgICAgICBpZiAoIGkg
aW4gYXJyICYmIGFyclsgaSBdID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gLTE7CisgICAgfSwKKworICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNl
Y29uZCApIHsKKyAgICAgICAgdmFyIGwgPSBzZWNvbmQubGVuZ3RoLAorICAgICAgICAgICAgaSA9
IGZpcnN0Lmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAwOworCisgICAgICAgIGlmICggdHlwZW9m
IGwgPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgZm9yICggOyBqIDwgbDsgaisrICkgewor
ICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOworICAgICAgICAgICAg
fQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaisr
IF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaXJzdC5sZW5ndGggPSBp
OworCisgICAgICAgIHJldHVybiBmaXJzdDsKKyAgICB9LAorCisgICAgZ3JlcDogZnVuY3Rpb24o
IGVsZW1zLCBjYWxsYmFjaywgaW52ICkgeworICAgICAgICB2YXIgcmV0VmFsLAorICAgICAgICAg
ICAgcmV0ID0gW10sCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9IGVs
ZW1zLmxlbmd0aDsKKyAgICAgICAgaW52ID0gISFpbnY7CisKKyAgICAgICAgLy8gR28gdGhyb3Vn
aCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworICAgICAgICAvLyB0aGF0IHBhc3Mg
dGhlIHZhbGlkYXRvciBmdW5jdGlvbgorICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyAp
IHsKKyAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKKyAg
ICAgICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7CisgICAgICAgICAgICAgICAgcmV0LnB1
c2goIGVsZW1zWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXQ7CisgICAgfSwKKworICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25s
eQorICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworICAgICAgICB2
YXIgdmFsdWUsIGtleSwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaSA9IDAs
CisgICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCisgICAgICAgICAgICAvLyBqcXVl
cnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKKyAgICAgICAgICAgIGlzQXJyYXkgPSBl
bGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Yg
bGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYmIGVs
ZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSggZWxl
bXMgKSApIDsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcg
ZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKKyAgICAgICAgaWYgKCBpc0FycmF5ICkgeworICAg
ICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFs
dWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0
aCBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
IC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBmb3IgKCBrZXkgaW4gZWxlbXMgKSB7CisgICAgICAgICAgICAgICAgdmFs
dWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOworCisgICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXRbIHJldC5s
ZW5ndGggXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKyAgICAgICAgcmV0
dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKKyAgICB9LAorCisgICAgLy8gQSBnbG9i
YWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCisgICAgZ3VpZDogMSwKKworICAgIC8vIEJpbmQg
YSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFu
eQorICAgIC8vIGFyZ3VtZW50cy4KKyAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkg
eworICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKKworICAgICAgICBpZiAoIHR5cGVvZiBj
b250ZXh0ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRtcCA9IGZuWyBjb250ZXh0IF07
CisgICAgICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICBmbiA9IHRtcDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMg
Y2FsbGFibGUsIGluIHRoZSBzcGVjCisgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9y
LCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisgICAgICAgIGlmICggIWpRdWVy
eS5pc0Z1bmN0aW9uKCBmbiApICkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCisgICAgICAgIGFyZ3MgPSBjb3Jl
X3NsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOworICAgICAgICBwcm94eSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCggY29y
ZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8g
U2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhh
bmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCisgICAgICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlk
ID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOworCisgICAgICAgIHJldHVybiBwcm94eTsKKyAg
ICB9LAorCisgICAgLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1
ZXMgb2YgYSBjb2xsZWN0aW9uCisgICAgLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUg
ZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCisgICAgYWNjZXNzOiBmdW5jdGlvbiggZWxlbXMs
IGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCBwYXNzICkgeworICAgICAgICB2
YXIgZXhlYywKKyAgICAgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbCwKKyAgICAgICAgICAgIGkg
PSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOworCisgICAgICAgIC8vIFNl
dHMgbWFueSB2YWx1ZXMKKyAgICAgICAgaWYgKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gIm9iamVj
dCIgKSB7CisgICAgICAgICAgICBmb3IgKCBpIGluIGtleSApIHsKKyAgICAgICAgICAgICAgICBq
UXVlcnkuYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVtpXSwgMSwgZW1wdHlHZXQsIHZhbHVlICk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFpbmFibGUgPSAxOworCisgICAgICAgIC8v
IFNldHMgb25lIHZhbHVlCisgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2YWx1ZXMgZ2V0IGV4ZWN1
dGVkIGlmIGV4ZWMgaXMgdHJ1ZQorICAgICAgICAgICAgZXhlYyA9IHBhc3MgPT09IHVuZGVmaW5l
ZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgICAgICAgICAgaWYgKCBidWxr
ICkgeworICAgICAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBvbmx5IGl0ZXJhdGUgd2hl
biBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisgICAgICAgICAgICAgICAgaWYgKCBleGVjICkg
eworICAgICAgICAgICAgICAgICAgICBleGVjID0gZm47CisgICAgICAgICAgICAgICAgICAgIGZu
ID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXhlYy5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHJ1biBhZ2Fp
bnN0IHRoZSBlbnRpcmUgc2V0CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIGZu
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICggZm4gKSB7CisgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5jYWxs
KCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoYWluYWJsZSA9
IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2hhaW5hYmxlID8KKyAgICAgICAgICAg
IGVsZW1zIDoKKworICAgICAgICAgICAgLy8gR2V0cworICAgICAgICAgICAgYnVsayA/CisgICAg
ICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMgKSA6CisgICAgICAgICAgICAgICAgbGVuZ3RoID8g
Zm4oIGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0OworICAgIH0sCisKKyAgICBub3c6IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpOworICAgIH0K
K30pOworCitqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgaWYg
KCAhcmVhZHlMaXN0ICkgeworCisgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgp
OworCisgICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMg
Y2FsbGVkIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorICAg
ICAgICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlICJpbnRlcmFjdGl2ZSIgaGVy
ZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCisgICAgICAgIC8vIGRpc2NvdmVy
ZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMjgyI2Nv
bW1lbnQ6MTUKKyAgICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUi
ICkgeworICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNj
cmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CisgICAgICAgICAgICBzZXRUaW1l
b3V0KCBqUXVlcnkucmVhZHksIDEgKTsKKworICAgICAgICAvLyBTdGFuZGFyZHMtYmFzZWQgYnJv
d3NlcnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCisgICAgICAgIH0gZWxzZSBpZiAoIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAvLyBVc2UgdGhlIGhhbmR5IGV2
ZW50IGNhbGxiYWNrCisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9N
Q29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CisKKyAgICAgICAgICAg
IC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCisg
ICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVhZHks
IGZhbHNlICk7CisKKyAgICAgICAgLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLCBt
YXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKKyAgICAgICAgICAgIGRvY3VtZW50
LmF0dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwor
CisgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBh
bHdheXMgd29yaworICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwgalF1
ZXJ5LnJlYWR5ICk7CisKKyAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQorICAg
ICAgICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyBy
ZWFkeQorICAgICAgICAgICAgdmFyIHRvcCA9IGZhbHNlOworCisgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgIHRvcCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbCAmJiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisKKyAgICAg
ICAgICAgIGlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKKyAgICAgICAgICAgICAgICAoZnVu
Y3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5
LmlzUmVhZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVD
b250ZW50TG9hZGVkLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5kb1Njcm9sbCgi
bGVmdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDUwICk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnJlYWR5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9KSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZWFk
eUxpc3QucHJvbWlzZSggb2JqICk7Cit9OworCisvLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBt
YXAKK2pRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0
ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7CisgICAgY2xh
c3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsK
K30pOworCisvLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UK
K3Jvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOworLy8gU3RyaW5nIHRvIE9iamVjdCBvcHRp
b25zIGZvcm1hdCBjYWNoZQordmFyIG9wdGlvbnNDYWNoZSA9IHt9OworCisvLyBDb252ZXJ0IFN0
cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3Rv
cmUgaW4gY2FjaGUKK2Z1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7CisgICAgdmFy
IG9iamVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdID0ge307CisgICAgalF1ZXJ5LmVhY2go
IG9wdGlvbnMuc3BsaXQoIGNvcmVfcnNwYWNlICksIGZ1bmN0aW9uKCBfLCBmbGFnICkgeworICAg
ICAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworLyoKKyAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBw
YXJhbWV0ZXJzOgorICoKKyAqICAgIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Ut
c2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKKyAqICAgICAgICAgICAgdGhl
IGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVj
dAorICoKKyAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZl
bnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCisgKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgor
ICoKKyAqIFBvc3NpYmxlIG9wdGlvbnM6CisgKgorICogICAgb25jZTogICAgICAgICAgICB3aWxs
IGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEg
RGVmZXJyZWQpCisgKgorICogICAgbWVtb3J5OiAgICAgICAgICAgIHdpbGwga2VlcCB0cmFjayBv
ZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWQKKyAqICAg
ICAgICAgICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5
IHdpdGggdGhlIGxhdGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAgICAgICAgICAgIHZhbHVl
cyAobGlrZSBhIERlZmVycmVkKQorICoKKyAqICAgIHVuaXF1ZTogICAgICAgICAgICB3aWxsIGVu
c3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0
aGUgbGlzdCkKKyAqCisgKiAgICBzdG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdzIHdo
ZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCisgKgorICovCitqUXVlcnkuQ2FsbGJhY2tzID0g
ZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisKKyAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJp
bmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCisgICAgLy8gKHdlIGNo
ZWNrIGluIGNhY2hlIGZpcnN0KQorICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0
cmluZyIgPworICAgICAgICAoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9wdGlv
bnMoIG9wdGlvbnMgKSApIDoKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsK
KworICAgIHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMp
CisgICAgICAgIG1lbW9yeSwKKyAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFs
cmVhZHkgZmlyZWQKKyAgICAgICAgZmlyZWQsCisgICAgICAgIC8vIEZsYWcgdG8ga25vdyBpZiBs
aXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKKyAgICAgICAgZmlyaW5nLAorICAgICAgICAvLyBGaXJz
dCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aCkK
KyAgICAgICAgZmlyaW5nU3RhcnQsCisgICAgICAgIC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVuIGZp
cmluZworICAgICAgICBmaXJpbmdMZW5ndGgsCisgICAgICAgIC8vIEluZGV4IG9mIGN1cnJlbnRs
eSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCisgICAgICAg
IGZpcmluZ0luZGV4LAorICAgICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAorICAgICAgICBs
aXN0ID0gW10sCisgICAgICAgIC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFibGUg
bGlzdHMKKyAgICAgICAgc3RhY2sgPSAhb3B0aW9ucy5vbmNlICYmIFtdLAorICAgICAgICAvLyBG
aXJlIGNhbGxiYWNrcworICAgICAgICBmaXJlID0gZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAg
ICAgICBtZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRhOworICAgICAgICAgICAgZmlyZWQg
PSB0cnVlOworICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOworICAg
ICAgICAgICAgZmlyaW5nU3RhcnQgPSAwOworICAgICAgICAgICAgZmlyaW5nTGVuZ3RoID0gbGlz
dC5sZW5ndGg7CisgICAgICAgICAgICBmaXJpbmcgPSB0cnVlOworICAgICAgICAgICAgZm9yICgg
OyBsaXN0ICYmIGZpcmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkgewor
ICAgICAgICAgICAgICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsgMCBd
LCBkYXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBjYWxs
cyB1c2luZyBhZGQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlyaW5nID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzdGFjayApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzdGFjay5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJlKCBzdGFjay5zaGlmdCgpICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3Qg
PSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZWxm
LmRpc2FibGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0CisgICAgICAgIHNlbGYgPSB7Cisg
ICAgICAgICAgICAvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tz
IHRvIHRoZSBsaXN0CisgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGlmICggbGlzdCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHNhdmUg
dGhlIGN1cnJlbnQgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGxpc3Qu
bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlwZSgg
YXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZnVuY3Rp
b24iICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25zLnVu
aXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcu
bGVuZ3RoICYmIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZCggYXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKCBhcmd1bWVudHMg
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNhbGxiYWNr
cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIC8vIFdp
dGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gd2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCA9IHN0
YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggbWVtb3J5ICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJv
bSB0aGUgbGlzdAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhcmd1
bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
aW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBpbmRleCA9IGpRdWVyeS5p
bkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcmluZ0xlbmd0aC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nSW5k
ZXggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleC0t
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gQ29udHJvbCBpZiBhIGdpdmVuIGNhbGxiYWNr
IGlzIGluIHRoZSBsaXN0CisgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMTsKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBs
aXN0CisgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbGlz
dCA9IFtdOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCisgICAgICAgICAg
ICBkaXNhYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBsaXN0ID0gc3RhY2sgPSBt
ZW1vcnkgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgLy8gSXMgaXQgZGlzYWJsZWQ/CisgICAgICAgICAgICBkaXNh
YmxlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0OworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIC8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQgc3Rh
dGUKKyAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHN0YWNr
ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5kaXNhYmxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIElzIGl0
IGxvY2tlZD8KKyAgICAgICAgICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICFzdGFjazsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBDYWxsIGFs
bCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCisgICAgICAg
ICAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisgICAgICAgICAgICAg
ICAgYXJncyA9IGFyZ3MgfHwgW107CisgICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4dCwg
YXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKKyAgICAgICAgICAgICAgICBpZiAo
IGxpc3QgJiYgKCAhZmlyZWQgfHwgc3RhY2sgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBmaXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKCBhcmdzICk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
aXJlKCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICAg
ICAgICAgIGZpcmU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdpdGgo
IHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFs
cmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorICAgICAgICAgICAgZmlyZWQ6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVkOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgcmV0dXJuIHNlbGY7Cit9OworalF1ZXJ5LmV4dGVuZCh7CisKKyAg
ICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAgIHZhciB0dXBsZXMgPSBbCisg
ICAgICAgICAgICAgICAgLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZp
bmFsIHN0YXRlCisgICAgICAgICAgICAgICAgWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5LkNh
bGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVkIiBdLAorICAgICAgICAgICAgICAgIFsg
InJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlamVj
dGVkIiBdLAorICAgICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVyeS5D
YWxsYmFja3MoIm1lbW9yeSIpIF0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGF0ZSA9
ICJwZW5kaW5nIiwKKyAgICAgICAgICAgIHByb21pc2UgPSB7CisgICAgICAgICAgICAgICAgc3Rh
dGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZu
UHJvZ3Jlc3MgKi8gKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24oIG5l
d0RlZmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywg
ZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBh
Y3Rpb24gPSB0dXBsZVsgMCBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9
IGZuc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkWyBkb25l
IHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVlcnku
aXNGdW5jdGlvbiggZm4gKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybmVk
ID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQu
cHJvbWlzZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybmVkLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlm
eSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uICsgIldp
dGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVkIF0g
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0RlZmVyWyBhY3Rpb24gXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZucyA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKyAgICAg
ICAgICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBh
ZGRlZCB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIG9i
aiApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4
dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBkZWZlcnJlZCA9IHt9OworCisgICAgICAgIC8vIEtlZXAg
cGlwZSBmb3IgYmFjay1jb21wYXQKKyAgICAgICAgcHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVu
OworCisgICAgICAgIC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKKyAgICAgICAgalF1ZXJ5
LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgdmFyIGxp
c3QgPSB0dXBsZVsgMiBdLAorICAgICAgICAgICAgICAgIHN0YXRlU3RyaW5nID0gdHVwbGVbIDMg
XTsKKworICAgICAgICAgICAgLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0g
bGlzdC5hZGQKKyAgICAgICAgICAgIHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0LmFkZDsKKwor
ICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCisgICAgICAgICAgICBpZiAoIHN0YXRlU3RyaW5n
ICkgeworICAgICAgICAgICAgICAgIGxpc3QuYWRkKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7CisKKyAgICAgICAgICAgICAgICAvLyBbIHJlamVj
dF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCisgICAg
ICAgICAgICAgICAgfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1b
IDIgXS5sb2NrICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVkWyBy
ZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0gPSBsaXN0LmZpcmUKKyAgICAgICAgICAgIGRlZmVy
cmVkWyB0dXBsZVswXSBdID0gbGlzdC5maXJlOworICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxl
WzBdICsgIldpdGgiIF0gPSBsaXN0LmZpcmVXaXRoOworICAgICAgICB9KTsKKworICAgICAgICAv
LyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKKyAgICAgICAgcHJvbWlzZS5wcm9taXNlKCBk
ZWZlcnJlZCApOworCisgICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKKyAgICAgICAg
aWYgKCBmdW5jICkgeworICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBkb25lIQorICAgICAgICByZXR1cm4gZGVm
ZXJyZWQ7CisgICAgfSwKKworICAgIC8vIERlZmVycmVkIGhlbHBlcgorICAgIHdoZW46IGZ1bmN0
aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgeworICAgICAgICB2
YXIgaSA9IDAsCisgICAgICAgICAgICByZXNvbHZlVmFsdWVzID0gY29yZV9zbGljZS5jYWxsKCBh
cmd1bWVudHMgKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLAor
CisgICAgICAgICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisg
ICAgICAgICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAmJiBq
UXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLAor
CisgICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVzIGNv
bnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KKyAgICAgICAg
ICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVm
ZXJyZWQoKSwKKworICAgICAgICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29s
dmUgYW5kIHByb2dyZXNzIHZhbHVlcworICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0aW9u
KCBpLCBjb250ZXh0cywgdmFsdWVzICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
biggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzWyBpIF0gPSB0aGlzOwor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8g
Y29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOworICAgICAgICAgICAgICAgICAg
ICBpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250
ZXh0czsKKworICAgICAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRl
czsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCisgICAgICAgIGlmICggbGVuZ3RoID4gMSApIHsK
KyAgICAgICAgICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAg
ICAgICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAgICAgICAg
ICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAgICAgIGZv
ciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggcmVzb2x2ZVZh
bHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlz
ZSApICkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgp
CisgICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNv
bnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwo
IGRlZmVycmVkLnJlamVjdCApCisgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIHVw
ZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBp
ZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCisgICAg
ICAgIGlmICggIXJlbWFpbmluZyApIHsKKyAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRo
KCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CisgICAgfQorfSk7CitqUXVlcnkuc3VwcG9ydCA9
IChmdW5jdGlvbigpIHsKKworICAgIHZhciBzdXBwb3J0LAorICAgICAgICBhbGwsCisgICAgICAg
IGEsCisgICAgICAgIHNlbGVjdCwKKyAgICAgICAgb3B0LAorICAgICAgICBpbnB1dCwKKyAgICAg
ICAgZnJhZ21lbnQsCisgICAgICAgIGV2ZW50TmFtZSwKKyAgICAgICAgaSwKKyAgICAgICAgaXNT
dXBwb3J0ZWQsCisgICAgICAgIGNsaWNrRm4sCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworCisgICAgLy8gU2V0dXAKKyAgICBkaXYuc2V0QXR0cmlidXRlKCAi
Y2xhc3NOYW1lIiwgInQiICk7CisgICAgZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+
PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iOworCisg
ICAgLy8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1icm93
c2VyIGVudmlyb25tZW50cworICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIp
OworICAgIGEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsgMCBdOworICAgIGlmICgg
IWFsbCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH0K
KworICAgIC8vIEZpcnN0IGJhdGNoIG9mIHRlc3RzCisgICAgc2VsZWN0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic2VsZWN0Iik7CisgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOworICAgIGlucHV0ID0gZGl2LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJpbnB1dCIpWyAwIF07CisKKyAgICBhLnN0eWxlLmNzc1RleHQgPSAidG9w
OjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiOworICAgIHN1cHBvcnQgPSB7CisgICAgICAgIC8v
IElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKKyAg
ICAgICAgbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMg
KSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0
b21hdGljYWxseSBpbnNlcnRlZAorICAgICAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGludG8g
ZW1wdHkgdGFibGVzCisgICAgICAgIHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0
Ym9keSIpLmxlbmd0aCwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRz
IGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKKyAgICAgICAgLy8gVGhpcyBy
ZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQorICAgICAgICBodG1sU2VyaWFsaXplOiAh
IWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKKworICAgICAgICAvLyBH
ZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCisgICAgICAgIC8vIChJ
RSB1c2VzIC5jc3NUZXh0IGluc3RlYWQpCisgICAgICAgIHN0eWxlOiAvdG9wLy50ZXN0KCBhLmdl
dEF0dHJpYnV0ZSgic3R5bGUiKSApLAorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMg
YXJlbid0IG1hbmlwdWxhdGVkCisgICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1
bHQpCisgICAgICAgIGhyZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09
ICIvYSIgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhp
c3RzCisgICAgICAgIC8vIChJRSB1c2VzIGZpbHRlciBpbnN0ZWFkKQorICAgICAgICAvLyBVc2Ug
YSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1CisgICAgICAg
IG9wYWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKKworICAgICAgICAvLyBW
ZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCisgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxv
YXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKKyAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5jc3NG
bG9hdCwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1ZSBpcyBzcGVjaWZp
ZWQgZm9yIGEgY2hlY2tib3gKKyAgICAgICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0byAib24iLgor
ICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCisgICAgICAgIGNoZWNr
T246ICggaW5wdXQudmFsdWUgPT09ICJvbiIgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQgb3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQgcHJv
cGVydHkuCisgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0
cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCisgICAgICAgIG9wdFNlbGVjdGVk
OiBvcHQuc2VsZWN0ZWQsCisKKyAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxD
YXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQv
c2V0QXR0cmlidXRlIChpZTYvNykKKyAgICAgICAgZ2V0U2V0QXR0cmlidXRlOiBkaXYuY2xhc3NO
YW1lICE9PSAidCIsCisKKyAgICAgICAgLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBvbiBh
IGZvcm0gKCM2NzQzKQorICAgICAgICBlbmN0eXBlOiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImZvcm0iKS5lbmN0eXBlLAorCisgICAgICAgIC8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBodG1s
NSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCisgICAgICAgIC8vIFdoZXJlIG91dGVy
SFRNTCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKKyAgICAgICAgaHRtbDVDbG9uZTog
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJIVE1M
ICE9PSAiPDpuYXY+PC86bmF2PiIsCisKKyAgICAgICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94TW9k
ZWwgREVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9kZQor
ICAgICAgICBib3hNb2RlbDogKCBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIg
KSwKKworICAgICAgICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKKyAgICAgICAgc3VibWl0QnVi
YmxlczogdHJ1ZSwKKyAgICAgICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKKyAgICAgICAgZm9jdXNp
bkJ1YmJsZXM6IGZhbHNlLAorICAgICAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAorICAgICAgICBu
b0Nsb25lRXZlbnQ6IHRydWUsCisgICAgICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6IGZhbHNl
LAorICAgICAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKKyAgICAgICAgcmVsaWFibGVNYXJn
aW5SaWdodDogdHJ1ZSwKKyAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6IHRydWUsCisgICAgICAg
IHBpeGVsUG9zaXRpb246IGZhbHNlCisgICAgfTsKKworICAgIC8vIE1ha2Ugc3VyZSBjaGVja2Vk
IHN0YXR1cyBpcyBwcm9wZXJseSBjbG9uZWQKKyAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsKKyAg
ICBzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hlY2tl
ZDsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBz
ZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKKyAgICAvLyAoV2ViS2l0IG1hcmtzIHRo
ZW0gYXMgZGlzYWJsZWQpCisgICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBzdXBwb3J0
Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKKworICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0
J3MgcG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50CisgICAgLy8g
RmFpbHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKKyAgICB0cnkgeworICAgICAgICBkZWxldGUgZGl2
LnRlc3Q7CisgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgc3VwcG9ydC5kZWxldGVFeHBhbmRv
ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYgZGl2
LmF0dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQgKSB7CisgICAgICAgIGRpdi5hdHRhY2hFdmVu
dCggIm9uY2xpY2siLCBjbGlja0ZuID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBDbG9u
aW5nIGEgbm9kZSBzaG91bGRuJ3QgY29weSBvdmVyIGFueQorICAgICAgICAgICAgLy8gYm91bmQg
ZXZlbnQgaGFuZGxlcnMgKElFIGRvZXMgdGhpcykKKyAgICAgICAgICAgIHN1cHBvcnQubm9DbG9u
ZUV2ZW50ID0gZmFsc2U7CisgICAgICAgIH0pOworICAgICAgICBkaXYuY2xvbmVOb2RlKCB0cnVl
ICkuZmlyZUV2ZW50KCJvbmNsaWNrIik7CisgICAgICAgIGRpdi5kZXRhY2hFdmVudCggIm9uY2xp
Y2siLCBjbGlja0ZuICk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWludGFp
bnMgaXRzIHZhbHVlCisgICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQorICAg
IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICBpbnB1dC52YWx1
ZSA9ICJ0IjsKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOworICAg
IHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7CisKKyAgICBpbnB1dC5z
ZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CisKKyAgICAvLyAjMTEyMTcgLSBX
ZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBhZnRlciB0aGUgY2hlY2tlZCBhdHRy
aWJ1dGUKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CisKKyAgICBkaXYu
YXBwZW5kQ2hpbGQoIGlucHV0ICk7CisgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7CisgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hpbGQg
KTsKKworICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5
IGluIGZyYWdtZW50cworICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25lTm9k
ZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOworCisgICAgLy8g
Q2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQK
KyAgICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83KQor
ICAgIHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CisKKyAgICBmcmFnbWVu
dC5yZW1vdmVDaGlsZCggaW5wdXQgKTsKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7
CisKKyAgICAvLyBUZWNobmlxdWUgZnJvbSBKdXJpeSBaYXl0c2V2CisgICAgLy8gaHR0cDovL3Bl
cmZlY3Rpb25raWxscy5jb20vZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0aG91dC1icm93c2Vy
LXNuaWZmaW5nLworICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBub24t
c3RhbmRhcmQgZXZlbnQgc3lzdGVtcworICAgIC8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUuIFNo
b3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bworICAgIC8vIGF2b2lkIGFuIGV2YWwgY2Fs
bCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1c2UgQ1NQCisgICAgLy8gdG8gZ28gaGF5
d2lyZS4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AK
KyAgICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsKKyAgICAgICAgZm9yICggaSBpbiB7CisgICAg
ICAgICAgICBzdWJtaXQ6IHRydWUsCisgICAgICAgICAgICBjaGFuZ2U6IHRydWUsCisgICAgICAg
ICAgICBmb2N1c2luOiB0cnVlCisgICAgICAgIH0pIHsKKyAgICAgICAgICAgIGV2ZW50TmFtZSA9
ICJvbiIgKyBpOworICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYg
KTsKKyAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgeworICAgICAgICAgICAgICAgIGRp
di5zZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSwgInJldHVybjsiICk7CisgICAgICAgICAgICAgICAg
aXNTdXBwb3J0ZWQgPSAoIHR5cGVvZiBkaXZbIGV2ZW50TmFtZSBdID09PSAiZnVuY3Rpb24iICk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0gPSBp
c1N1cHBvcnRlZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJ1biB0ZXN0cyB0aGF0IG5l
ZWQgYSBib2R5IGF0IGRvYyByZWFkeQorICAgIGpRdWVyeShmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGNvbnRhaW5lciwgZGl2LCB0ZHMsIG1hcmdpbkRpdiwKKyAgICAgICAgICAgIGRpdlJlc2V0
ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93Omhp
ZGRlbjsiLAorICAgICAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJib2R5IilbMF07CisKKyAgICAgICAgaWYgKCAhYm9keSApIHsKKyAgICAgICAgICAgIC8vIFJl
dHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAidmlz
aWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7
dG9wOjA7bWFyZ2luLXRvcDoxcHgiOworICAgICAgICBib2R5Lmluc2VydEJlZm9yZSggY29udGFp
bmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHRlc3Qg
ZWxlbWVudAorICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTsKKworICAgICAgICAvLyBDaGVjayBp
ZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkgYXJl
IHNldAorICAgICAgICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhl
ciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKKyAgICAgICAgLy8gdGFibGUgcm93OyBpZiBzbywg
b2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVuCisgICAgICAg
IC8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVz
aW5nCisgICAgICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ugb2Zm
c2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCisgICAgICAgIC8vIGhpZGRlbjsgZG9uIHNhZmV0
eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAgICAg
ICAgLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCisgICAgICAgIGRpdi5pbm5lckhUTUwg
PSAiPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7CisgICAgICAg
IHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKKyAgICAgICAgdGRzWyAwIF0u
c3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25l
IjsKKyAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCAp
OworCisgICAgICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgdGRzWyAx
IF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKworICAgICAgICAvLyBDaGVjayBpZiBlbXB0eSB0
YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodAorICAgICAgICAvLyAoSUUg
PD0gOCBmYWlsIHRoaXMgdGVzdCkKKyAgICAgICAgc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNl
dHMgPSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOworCisg
ICAgICAgIC8vIENoZWNrIGJveC1zaXppbmcgYW5kIG1hcmdpbiBiZWhhdmlvcgorICAgICAgICBk
aXYuaW5uZXJIVE1MID0gIiI7CisgICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gImJveC1zaXpp
bmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXpp
bmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6
NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7CisgICAgICAgIHN1
cHBvcnQuYm94U2l6aW5nID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDQgKTsKKyAgICAgICAgc3Vw
cG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9keS5vZmZzZXRUb3Ag
IT09IDEgKTsKKworICAgICAgICAvLyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIsIHdl
J3ZlIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCisgICAgICAgIC8vIGJlY2F1c2UganNkb20gb24g
bm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCisgICAgICAgIGlmICggd2luZG93LmdldENv
bXB1dGVkU3R5bGUgKSB7CisgICAgICAgICAgICBzdXBwb3J0LnBpeGVsUG9zaXRpb24gPSAoIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7fSApLnRvcCAhPT0gIjElIjsK
KyAgICAgICAgICAgIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgPSAoIHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7IHdpZHRoOiAiNHB4IiB9ICkud2lkdGggPT09ICI0
cHgiOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBh
bmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CisgICAgICAgICAgICAvLyBnZXRzIGNvbXB1
dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3JlCisg
ICAgICAgICAgICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKKyAgICAgICAgICAgIC8vIEZhaWxzIGlu
IFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCisgICAgICAgICAgICAvLyBXZWJLaXQg
QnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJn
aW4tcmlnaHQKKyAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5bGUu
Y3NzVGV4dCA9IGRpdlJlc2V0OworICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdpblJp
Z2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOworICAgICAgICAgICAgZGl2LnN0eWxl
LndpZHRoID0gIjFweCI7CisgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRpdiAp
OworICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KKyAgICAgICAgICAg
ICAgICAhcGFyc2VGbG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBu
dWxsICkgfHwge30gKS5tYXJnaW5SaWdodCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0
eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5lLWJs
b2NrCisgICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxheSB0
byAnaW5saW5lJyBhbmQgZ2l2aW5nCisgICAgICAgICAgICAvLyB0aGVtIGxheW91dAorICAgICAg
ICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCisgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0g
IiI7CisgICAgICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRoOjFw
eDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiOworICAgICAgICAgICAgc3VwcG9y
dC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDMgKTsKKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAg
dGhlaXIgY2hpbGRyZW4KKyAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKKyAgICAgICAg
ICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgICAgIGRpdi5zdHlsZS5v
dmVyZmxvdyA9ICJ2aXNpYmxlIjsKKyAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdj48
L2Rpdj4iOworICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4IjsK
KyAgICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRo
ICE9PSAzICk7CisKKyAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56b29tID0gMTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKKyAg
ICAgICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CisgICAgICAgIGNvbnRhaW5lciA9
IGRpdiA9IHRkcyA9IG1hcmdpbkRpdiA9IG51bGw7CisgICAgfSk7CisKKyAgICAvLyBOdWxsIGVs
ZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCisgICAgZnJhZ21lbnQucmVtb3ZlQ2hpbGQoIGRp
diApOworICAgIGFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZyYWdtZW50ID0gZGl2
ID0gbnVsbDsKKworICAgIHJldHVybiBzdXBwb3J0OworfSkoKTsKK3ZhciByYnJhY2UgPSAvKD86
XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sCisgICAgcm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7
CisKK2pRdWVyeS5leHRlbmQoeworICAgIGNhY2hlOiB7fSwKKworICAgIGRlbGV0ZWRJZHM6IFtd
LAorCisgICAgLy8gUmVtb3ZlIGF0IG5leHQgbWFqb3IgcmVsZWFzZSAoMS45LzIuMCkKKyAgICB1
dWlkOiAwLAorCisgICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBw
YWdlCisgICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkKKyAg
ICBleHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkg
KS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMg
dGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKKyAgICAvLyBhdHRlbXB0IHRvIGFk
ZCBleHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KKyAgICBub0RhdGE6IHsKKyAgICAgICAgImVt
YmVkIjogdHJ1ZSwKKyAgICAgICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxhc2gg
KHdoaWNoIGhhbmRsZSBleHBhbmRvcykKKyAgICAgICAgIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2
RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLAorICAgICAgICAiYXBwbGV0IjogdHJ1ZQor
ICAgIH0sCisKKyAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgZWxlbSA9
IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBl
bGVtWyBqUXVlcnkuZXhwYW5kbyBdOworICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5
RGF0YU9iamVjdCggZWxlbSApOworICAgIH0sCisKKyAgICBkYXRhOiBmdW5jdGlvbiggZWxlbSwg
bmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworICAgICAgICBpZiAo
ICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHRoaXNDYWNoZSwgcmV0LAorICAgICAgICAgICAgaW50ZXJu
YWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKKyAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVvZiBu
YW1lID09PSAic3RyaW5nIiwKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9N
IG5vZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKKyAgICAgICAg
ICAgIC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9N
LUpTIGJvdW5kYXJ5CisgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAorCisgICAg
ICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBnbG9iYWwgalF1ZXJ5IGNhY2hlOyBK
UyBvYmplY3QgZGF0YSBpcworICAgICAgICAgICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhl
IG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQorICAgICAgICAgICAgY2FjaGUg
PSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAorCisgICAgICAgICAgICAvLyBPbmx5IGRl
ZmluaW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0cyBh
bGxvd3MKKyAgICAgICAgICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1lIHBh
dGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCisgICAgICAgICAgICBpZCA9IGlzTm9kZSA/
IGVsZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFsS2V5
OworCisgICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRv
IHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCisgICAgICAgIC8vIG9iamVjdCB0aGF0IGhh
cyBubyBkYXRhIGF0IGFsbAorICAgICAgICBpZiAoICghaWQgfHwgIWNhY2hlW2lkXSB8fCAoIXB2
dCAmJiAhY2FjaGVbaWRdLmRhdGEpKSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhaWQg
KSB7CisgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJRCBm
b3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKKyAgICAgICAgICAgIC8vIGVuZHMgdXAg
aW4gdGhlIGdsb2JhbCBjYWNoZQorICAgICAgICAgICAgaWYgKCBpc05vZGUgKSB7CisgICAgICAg
ICAgICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IGlkID0galF1ZXJ5LmRlbGV0ZWRJZHMucG9w
KCkgfHwgalF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWQgPSBpbnRlcm5hbEtleTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICggIWNhY2hlWyBpZCBdICkgeworICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsKKwor
ICAgICAgICAgICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFpbiBK
UyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdAorICAgICAgICAgICAgLy8gaXMgc2VyaWFsaXplZCB1
c2luZyBKU09OLnN0cmluZ2lmeQorICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgeworICAgICAg
ICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8galF1
ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKKyAgICAgICAg
Ly8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQorICAgICAgICBp
ZiAoIHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0aW9u
IiApIHsKKyAgICAgICAgICAgIGlmICggcHZ0ICkgeworICAgICAgICAgICAgICAgIGNhY2hlWyBp
ZCBdID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0uZGF0YSA9IGpRdWVyeS5leHRlbmQo
IGNhY2hlWyBpZCBdLmRhdGEsIG5hbWUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOworCisgICAgICAgIC8vIGpRdWVyeSBkYXRh
KCkgaXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgaW50
ZXJuYWwgZGF0YQorICAgICAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlz
aW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAorICAgICAgICAvLyBk
YXRhLgorICAgICAgICBpZiAoICFwdnQgKSB7CisgICAgICAgICAgICBpZiAoICF0aGlzQ2FjaGUu
ZGF0YSApIHsKKyAgICAgICAgICAgICAgICB0aGlzQ2FjaGUuZGF0YSA9IHt9OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdGhp
c0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwgYW5kIG5vbi1jb252
ZXJ0ZWQgZGF0YSBwcm9wZXJ0eSBuYW1lcworICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVydHkg
d2FzIHNwZWNpZmllZAorICAgICAgICBpZiAoIGdldEJ5TmFtZSApIHsKKworICAgICAgICAgICAg
Ly8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0YQorICAgICAgICAgICAgcmV0
ID0gdGhpc0NhY2hlWyBuYW1lIF07CisKKyAgICAgICAgICAgIC8vIFRlc3QgZm9yIG51bGx8dW5k
ZWZpbmVkIHByb3BlcnR5IGRhdGEKKyAgICAgICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQor
ICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSAp
IF07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQgPSB0
aGlzQ2FjaGU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAg
ICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVzZSBP
bmx5ICovICkgeworICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRoaXNDYWNoZSwg
aSwgbCwKKworICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKKworICAgICAgICAg
ICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBj
YWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCisgICAgICAgICAgICBpZCA9IGlz
Tm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKKworICAgICAg
ICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVjdCwg
dGhlcmUgaXMgbm8KKyAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5nCisgICAgICAgIGlm
ICggIWNhY2hlWyBpZCBdICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCBuYW1lICkgeworCisgICAgICAgICAgICB0aGlzQ2FjaGUgPSBwdnQgPyBjYWNo
ZVsgaWQgXSA6IGNhY2hlWyBpZCBdLmRhdGE7CisKKyAgICAgICAgICAgIGlmICggdGhpc0NhY2hl
ICkgeworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0
ZWQgc3RyaW5nIG5hbWVzIGZvciBkYXRhIGtleXMKKyAgICAgICAgICAgICAgICBpZiAoICFqUXVl
cnkuaXNBcnJheSggbmFtZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUg
c3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCisgICAgICAgICAgICAgICAg
ICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gWyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBjYW1lbCBjYXNlZCB2ZXJzaW9uIGJ5IHNwYWNl
cyB1bmxlc3MgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cworICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IFsgbmFtZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgiICIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNDYWNoZVsgbmFt
ZVtpXSBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJl
IGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKKyAgICAg
ICAgICAgICAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBkZXN0cm95
ZWQKKyAgICAgICAgICAgICAgICBpZiAoICEoIHB2dCA/IGlzRW1wdHlEYXRhT2JqZWN0IDogalF1
ZXJ5LmlzRW1wdHlPYmplY3QgKSggdGhpc0NhY2hlICkgKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAg
aWYgKCAhcHZ0ICkgeworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7CisKKyAg
ICAgICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGlu
dGVybmFsIGRhdGEgb2JqZWN0CisgICAgICAgICAgICAvLyBoYWQgYmVlbiB0aGUgb25seSB0aGlu
ZyBsZWZ0IGluIGl0CisgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCggY2FjaGVb
IGlkIF0gKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBEZXN0cm95IHRoZSBjYWNoZQorICAgICAgICBpZiAoIGlzTm9k
ZSApIHsKKyAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7CisK
KyAgICAgICAgLy8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNh
Y2hlYCBpcyBub3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCisgICAgICAgIH0gZWxz
ZSBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUud2lu
ZG93ICkgeworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAgIC8vIFdo
ZW4gYWxsIGVsc2UgZmFpbHMsIG51bGwKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNh
Y2hlWyBpZCBdID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBGb3IgaW50ZXJu
YWwgdXNlIG9ubHkuCisgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewor
ICAgICAgICByZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKKyAg
ICB9LAorCisgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2Fu
IGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCisgICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFb
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgIC8vIG5vZGVzIGFjY2Vw
dCBkYXRhIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNvbmRp
dGlvbmFsCisgICAgICAgIHJldHVybiAhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1ZSAmJiBlbGVt
LmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpID09PSBub0RhdGE7CisgICAgfQorfSk7CisKK2pRdWVy
eS5mbi5leHRlbmQoeworICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAgICAg
ICB2YXIgcGFydHMsIHBhcnQsIGF0dHIsIG5hbWUsIGwsCisgICAgICAgICAgICBlbGVtID0gdGhp
c1swXSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgZGF0YSA9IG51bGw7CisKKyAg
ICAgICAgLy8gR2V0cyBhbGwgdmFsdWVzCisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGRh
dGEgPSBqUXVlcnkuZGF0YSggZWxlbSApOworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAxICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGVsZW0uYXR0cmlidXRlczsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICggbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3RyaW5nKDUpICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0
YVsgbmFtZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0
cnMiLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldHMgbXVsdGlwbGUg
dmFsdWVzCisgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpRdWVy
eS5kYXRhKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg
ICAgcGFydHMgPSBrZXkuc3BsaXQoICIuIiwgMiApOworICAgICAgICBwYXJ0c1sxXSA9IHBhcnRz
WzFdID8gIi4iICsgcGFydHNbMV0gOiAiIjsKKyAgICAgICAgcGFydCA9IHBhcnRzWzFdICsgIiEi
OworCisgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUg
KSB7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgICAgICBkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxlciggImdldERhdGEiICsgcGFydCwgWyBw
YXJ0c1swXSBdICk7CisKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVy
bmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09IHVu
ZGVmaW5lZCAmJiBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmRh
dGEoIGVsZW0sIGtleSApOworICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIoIGVs
ZW0sIGtleSwgZGF0YSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmRhdGEoIHBhcnRzWzBdICkgOgorICAgICAgICAgICAgICAgICAgICBkYXRhOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJ0c1sxXSA9IHZhbHVlOworICAgICAgICAgICAg
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5
KCB0aGlzICk7CisKKyAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0RGF0
YSIgKyBwYXJ0LCBwYXJ0cyApOworICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBr
ZXksIHZhbHVlICk7CisgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VySGFuZGxlciggImNoYW5n
ZURhdGEiICsgcGFydCwgcGFydHMgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCBudWxs
LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIGZhbHNlICk7CisgICAgfSwKKwor
ICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5
ICk7CisgICAgICAgIH0pOworICAgIH0KK30pOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwg
a2V5LCBkYXRhICkgeworICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRy
eSB0byBmZXRjaCBhbnkKKyAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1
dGUKKyAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkg
eworCisgICAgICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNo
LCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmli
dXRlKCBuYW1lICk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1
ZSIgPyB0cnVlIDoKKyAgICAgICAgICAgICAgICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2UgOgor
ICAgICAgICAgICAgICAgIGRhdGEgPT09ICJudWxsIiA/IG51bGwgOgorICAgICAgICAgICAgICAg
IC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3Ry
aW5nCisgICAgICAgICAgICAgICAgK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKKyAgICAg
ICAgICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSAp
IDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YTsKKyAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7
fQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0
IGNoYW5nZWQgbGF0ZXIKKyAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEg
KTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCisvLyBjaGVja3MgYSBjYWNo
ZSBvYmplY3QgZm9yIGVtcHRpbmVzcworZnVuY3Rpb24gaXNFbXB0eURhdGFPYmplY3QoIG9iaiAp
IHsKKyAgICB2YXIgbmFtZTsKKyAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKworICAgICAgICAv
LyBpZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0ZSBpcyBzdGls
bCBlbXB0eQorICAgICAgICBpZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0eU9i
amVjdCggb2JqW25hbWVdICkgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CitqUXVlcnkuZXh0
ZW5kKHsKKyAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7CisgICAgICAg
IHZhciBxdWV1ZTsKKworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICB0eXBlID0g
KCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CisgICAgICAgICAgICBxdWV1ZSA9IGpRdWVyeS5f
ZGF0YSggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5
IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCisgICAgICAgICAg
ICBpZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5Lmlz
QXJyYXkoZGF0YSkgKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9kYXRh
KCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8fCBb
XTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlw
ZSApIHsKKyAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB2YXIgcXVldWUg
PSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoID0g
cXVldWUubGVuZ3RoLAorICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAorICAgICAgICAg
ICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAg
IG5leHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggZWxl
bSwgdHlwZSApOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBJZiB0aGUgZnggcXVldWUg
aXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCisgICAgICAg
IGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgIGZuID0gcXVldWUuc2hp
ZnQoKTsKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIGZuICkgeworCisgICAgICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBw
cmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAvLyBhdXRvbWF0aWNh
bGx5IGRlcXVldWVkCisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisgICAgICAg
ICAgICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGNsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KKyAg
ICAgICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAgZm4uY2FsbCggZWxlbSwg
bmV4dCwgaG9va3MgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXN0YXJ0TGVuZ3RoICYm
IGhvb2tzICkgeworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIC8vIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0gZ2Vu
ZXJhdGVzIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25lCisg
ICAgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICB2YXIga2V5
ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5fZGF0YSggZWxl
bSwga2V5ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXksIHsKKyAgICAgICAgICAgIGVtcHR5
OiBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgdHlwZSArICJxdWV1ZSIsIHRydWUg
KTsKKyAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7
CisgICAgICAgICAgICB9KQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmZuLmV4
dGVuZCh7CisgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2YXIg
c2V0dGVyID0gMjsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9ICJmeCI7CisgICAg
ICAgICAgICBzZXR0ZXItLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxl
bmd0aCA8IHNldHRlciApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNb
MF0sIHR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmlu
ZWQgPworICAgICAgICAgICAgdGhpcyA6CisgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBl
LCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhpcyBx
dWV1ZQorICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApOwor
CisgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAiaW5w
cm9ncmVzcyIgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0
eXBlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICBk
ZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAg
ICAgIH0pOworICAgIH0sCisgICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQg
SGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgorICAgIC8vIGh0dHA6Ly9ibGluZHNpZ25hbHMuY29t
L2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KKyAgICBkZWxheTogZnVuY3Rpb24oIHRp
bWUsIHR5cGUgKSB7CisgICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRz
WyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisK
KyAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyAp
IHsKKyAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGltZSApOwor
ICAgICAgICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGNs
ZWFyVGltZW91dCggdGltZW91dCApOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAg
fSwKKyAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICB9LAorICAgIC8vIEdldCBhIHByb21p
c2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKyAgICAvLyBhcmUgZW1w
dGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKyAgICBwcm9taXNlOiBmdW5jdGlvbigg
dHlwZSwgb2JqICkgeworICAgICAgICB2YXIgdG1wLAorICAgICAgICAgICAgY291bnQgPSAxLAor
ICAgICAgICAgICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAgICAgIGVsZW1l
bnRzID0gdGhpcywKKyAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJl
c29sdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVs
ZW1lbnRzIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAg
IGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgb2JqID0gdHlw
ZTsKKyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgdHlw
ZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB3aGlsZSggaS0tICkgeworICAgICAgICAgICAg
dG1wID0galF1ZXJ5Ll9kYXRhKCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3MiICk7
CisgICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICByZXR1cm4g
ZGVmZXIucHJvbWlzZSggb2JqICk7CisgICAgfQorfSk7Cit2YXIgbm9kZUhvb2ssIGJvb2xIb29r
LCBmaXhTcGVjaWZpZWQsCisgICAgcmNsYXNzID0gL1tcdFxyXG5dL2csCisgICAgcnJldHVybiA9
IC9cci9nLAorICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAorICAgIHJmb2N1c2Fi
bGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKKyAgICBy
Y2xpY2thYmxlID0gL15hKD86cmVhfCkkL2ksCisgICAgcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1
c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxs
b29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSwK
KyAgICBnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7CisK
K2pRdWVyeS5mbi5leHRlbmQoeworICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsK
KyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2
YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQXR0cjog
ZnVuY3Rpb24oIG5hbWUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworICAgICAgICB9
KTsKKyAgICB9LAorCisgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAg
ICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBh
cmd1bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1vdmVQcm9wOiBmdW5jdGlv
biggbmFtZSApIHsKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFt
ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8v
IHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92aW5n
IGEgcHJvcGVydHkgb24gd2luZG93KQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICB0aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNb
IG5hbWUgXTsKKyAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQorICAgICAgICB9KTsKKyAgICB9
LAorCisgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGNsYXNz
TmFtZXMsIGksIGwsIGVsZW0sCisgICAgICAgICAgICBzZXRDbGFzcywgYywgY2w7CisKKyAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlz
ICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUgJiYgdHlwZW9mIHZh
bHVlID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxp
dCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxl
bmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdOwor
CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoICFlbGVtLmNsYXNzTmFtZSAmJiBjbGFzc05hbWVzLmxlbmd0aCA9PT0g
MSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWU7CisK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
dENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNldENsYXNzLmluZGV4T2YoICIg
IiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiApIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNzICk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVtb3Zl
Q2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHJlbW92ZXMsIGNsYXNzTmFt
ZSwgZWxlbSwgYywgY2wsIGksIGw7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
dmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwo
dGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmVtb3ZlcyA9ICggdmFsdWUgfHwgIiIg
KS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0
aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sg
aSBdOworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmNs
YXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsgZWxl
bS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gbG9vcCBvdmVyIGVhY2ggaXRlbSBpbiB0aGUgcmVtb3ZhbCBsaXN0CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IHJlbW92ZXMubGVuZ3RoOyBjIDwgY2w7
IGMrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB1bnRpbCB0aGVyZSBp
cyBub3RoaW5nIHRvIHJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY2xh
c3NOYW1lLmluZGV4T2YoIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiKSA+PSAwICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCAiICIg
KyByZW1vdmVzWyBjIF0gKyAiICIgLCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFt
ZSA9IHZhbHVlID8galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApIDogIiI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSwKKworICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgewor
ICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKKyAgICAgICAgICAgIGlzQm9vbCA9IHR5
cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCBpICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1
ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgeworICAgICAg
ICAgICAgICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCisgICAgICAgICAgICAg
ICAgdmFyIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSBzdGF0ZVZhbCwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNw
bGl0KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCAoY2xhc3NOYW1l
ID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBl
YWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUg
KTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92
ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFuIiAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSApOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSB3aG9sZSBjbGFzc05h
bWUKKyAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8IHZh
bHVlID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIg
KSB8fCAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIGhhc0Ns
YXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBjbGFzc05hbWUgPSAiICIg
KyBzZWxlY3RvciArICIgIiwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbCA9IHRo
aXMubGVuZ3RoOworICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICBp
ZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1lICsg
IiAiKS5yZXBsYWNlKHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICB2YWw6IGZ1bmN0aW9uKCB2YWx1
ZSApIHsKKyAgICAgICAgdmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCisgICAgICAgICAgICBl
bGVtID0gdGhpc1swXTsKKworICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgeworICAg
ICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZh
bEhvb2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBo
b29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKKworICAgICAgICAgICAgICAgIHJl
dHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgICAgIC8vIGhh
bmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0LnJl
cGxhY2UocnJldHVybiwgIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNhc2Vz
IHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCisgICAgICAgICAgICAgICAgICAg
IHJldCA9PSBudWxsID8gIiIgOiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewor
ICAgICAgICAgICAgdmFyIHZhbCwKKyAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KHRoaXMp
OworCisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlzRnVuY3Rp
b24gKSB7CisgICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2VsZi52
YWwoKSApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWx1
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmluZWQg
YXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKKyAgICAgICAgICAgIGlmICggdmFsID09
IG51bGwgKSB7CisgICAgICAgICAgICAgICAgdmFsID0gIiI7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWwgKz0g
IiI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7Cisg
ICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0aW9uICggdmFsdWUgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSAr
ICIiOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBo
b29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0
aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgLy8gSWYgc2V0IHJl
dHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKKyAgICAgICAgICAg
IGlmICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFs
LCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVl
ID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5
LmV4dGVuZCh7CisgICAgdmFsSG9va3M6IHsKKyAgICAgICAgb3B0aW9uOiB7CisgICAgICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMu
dmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAorICAgICAgICAgICAgICAg
IC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gZWxl
bS5hdHRyaWJ1dGVzLnZhbHVlOworICAgICAgICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZhbC5z
cGVjaWZpZWQgPyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICBzZWxlY3Q6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBvcHRpb24sCisgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
ZWxlbS5zZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5cGUg
PT09ICJzZWxlY3Qtb25lIiB8fCBpbmRleCA8IDAsCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
cyA9IG9uZSA/IG51bGwgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5k
ZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGkgPSBpbmRleCA8
IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgbWF4IDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9uZSA/IGluZGV4IDogMDsKKworICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBh
bGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBtYXg7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIG9sZElFIGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVy
IGZvcm0gcmVzZXQgKCMyNTUxKQorICAgICAgICAgICAgICAgICAgICBpZiAoICggb3B0aW9uLnNl
bGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVk
IG9wdGdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9ydC5v
cHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJkaXNh
YmxlZCIpID09PSBudWxsICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFvcHRp
b24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50
Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggb25lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkg
eworICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSAp
OworCisgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5B
cnJheSggalF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9LAorCisgICAgLy8gVW51c2VkIGluIDEuOCwgbGVmdCBpbiBzbyBhdHRyRm4tc3RhYmJl
cnMgd29uJ3QgZGllOyByZW1vdmUgaW4gMS45CisgICAgYXR0ckZuOiB7fSwKKworICAgIGF0dHI6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFzcyApIHsKKyAgICAgICAgdmFyIHJldCwg
aG9va3MsIG5vdHhtbCwKKyAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKworICAg
ICAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0
cmlidXRlIG5vZGVzCisgICAgICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUg
PT09IDggfHwgblR5cGUgPT09IDIgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIHBhc3MgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS5mblsgbmFt
ZSBdICkgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSggdmFs
dWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRy
aWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0
cmlidXRlID09PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJv
cCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdHhtbCA9IG5U
eXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKKworICAgICAgICAvLyBBbGwg
YXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCisgICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sg
aWYgb25lIGlzIGRlZmluZWQKKyAgICAgICAgaWYgKCBub3R4bWwgKSB7CisgICAgICAgICAgICBu
YW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0
ckhvb2tzWyBuYW1lIF0gfHwgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IG5v
ZGVIb29rICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQg
KSB7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYm
IG5vdHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsg
IiIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChy
ZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcmV0OworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIHJldCA9IGVsZW0u
Z2V0QXR0cmlidXRlKCBuYW1lICk7CisKKyAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRy
aWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAgICAg
ICByZXR1cm4gcmV0ID09PSBudWxsID8KKyAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgorICAg
ICAgICAgICAgICAgIHJldDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICByZW1vdmVBdHRyOiBm
dW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBwcm9wTmFtZSwgYXR0ck5hbWVz
LCBuYW1lLCBpc0Jvb2wsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBpZiAoIHZhbHVl
ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgIGF0dHJOYW1lcyA9IHZh
bHVlLnNwbGl0KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICBmb3IgKCA7IGkgPCBhdHRy
TmFtZXMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJOYW1lc1sg
aSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBuYW1lICkgeworICAgICAgICAgICAgICAgICAg
ICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKyAgICAgICAgICAg
ICAgICAgICAgaXNCb29sID0gcmJvb2xlYW4udGVzdCggbmFtZSApOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAoc2V0
dGluZyBmaXJzdCwgdGhlbiByZW1vdmFsKQorICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3Qg
ZG8gdGhpcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIChzZWUgIzEwODcwKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoICFpc0Jvb2wgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
YXR0ciggZWxlbSwgbmFtZSwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmlidXRlID8gbmFtZSA6
IHByb3BOYW1lICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRpbmcg
cHJvcGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcworICAgICAgICAgICAgICAg
ICAgICBpZiAoIGlzQm9vbCAmJiBwcm9wTmFtZSBpbiBlbGVtICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKwor
ICAgIGF0dHJIb29rczogeworICAgICAgICB0eXBlOiB7CisgICAgICAgICAgICBzZXQ6IGZ1bmN0
aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBhbGxvdyB0
aGUgdHlwZSBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkIChzaW5jZSBpdCBjYXVzZXMgcHJvYmxlbXMg
aW4gSUUpCisgICAgICAgICAgICAgICAgaWYgKCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkg
JiYgZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3Io
ICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRpbyIg
JiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSBy
ZXNldHMgdGhlIHZhbHVlIGluIElFNi05CisgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHZh
bHVlIHRvIGl0J3MgZGVmYXVsdCBpbiBjYXNlIHR5cGUgaXMgc2V0IGFmdGVyIHZhbHVlCisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRpb24KKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGVs
ZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAvLyBV
c2UgdGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAorICAgICAgICAvLyBVc2UgdGhl
IG5vZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQorICAgICAgICB2
YWx1ZTogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRv
biIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLmdldCggZWxlbSwg
bmFtZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBp
biBlbGVtID8KKyAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA6CisgICAgICAgICAgICAg
ICAgICAgIG51bGw7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAmJiBq
UXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0dHJp
YnV0ZSBpcyBhbHNvIHVzZWQKKyAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsdWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJvcEZpeDogeworICAgICAg
ICB0YWJpbmRleDogInRhYkluZGV4IiwKKyAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCisg
ICAgICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUiLAor
ICAgICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAorICAgICAgICBjZWxsc3BhY2luZzogImNl
bGxTcGFjaW5nIiwKKyAgICAgICAgY2VsbHBhZGRpbmc6ICJjZWxsUGFkZGluZyIsCisgICAgICAg
IHJvd3NwYW46ICJyb3dTcGFuIiwKKyAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAorICAgICAg
ICB1c2VtYXA6ICJ1c2VNYXAiLAorICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwK
KyAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgorICAgIH0sCisKKyAg
ICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciByZXQs
IGhvb2tzLCBub3R4bWwsCisgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAg
ICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0
dHJpYnV0ZSBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBl
ID09PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxl
bSApOworCisgICAgICAgIGlmICggbm90eG1sICkgeworICAgICAgICAgICAgLy8gRml4IG5hbWUg
YW5kIGF0dGFjaCBob29rcworICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1l
IF0gfHwgbmFtZTsKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBd
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0
KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0
ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgeworICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW1bIG5hbWUgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICBwcm9wSG9va3M6IHsKKyAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAgICAgIGdldDogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0
IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBs
aWNpdGx5IHNldAorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Js
b2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVl
cy13aXRoLWphdmFzY3JpcHQvCisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUgPSBl
bGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7CisKKyAgICAgICAgICAgICAgICByZXR1
cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/CisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoKKyAgICAgICAg
ICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNrYWJs
ZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfSk7CisKKy8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmli
dXRlcworYm9vbEhvb2sgPSB7CisgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAg
ICAgICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBwcm9w
ZXJ0aWVzCisgICAgICAgIC8vIEZhbGwgYmFjayB0byBhdHRyaWJ1dGUgcHJlc2VuY2Ugd2hlcmUg
c29tZSBib29sZWFucyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICB2YXIgYXR0ck5vZGUsCisg
ICAgICAgICAgICBwcm9wZXJ0eSA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICk7CisgICAgICAg
IHJldHVybiBwcm9wZXJ0eSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcHJvcGVydHkgIT09ICJib29sZWFu
IiAmJiAoIGF0dHJOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpICkgJiYgYXR0ck5v
ZGUubm9kZVZhbHVlICE9PSBmYWxzZSA/CisgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkg
OgorICAgICAgICAgICAgdW5kZWZpbmVkOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAgIHZhciBwcm9wTmFtZTsKKyAgICAgICAgaWYgKCB2
YWx1ZSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1
dGVzIHdoZW4gc2V0IHRvIGZhbHNlCisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxl
bSwgbmFtZSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gdmFsdWUgaXMgdHJ1
ZSBzaW5jZSB3ZSBrbm93IGF0IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5vdCBm
YWxzZQorICAgICAgICAgICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2FtZSBu
YW1lIGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQorICAgICAgICAgICAgcHJvcE5hbWUgPSBqUXVl
cnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICBpZiAoIHByb3BOYW1lIGlu
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIElETCBzcGVjaWZpY2Fs
bHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICBl
bGVtWyBwcm9wTmFtZSBdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWxl
bS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIH0KK307CisKKy8vIElFNi83IGRvIG5vdCBzdXBwb3J0
IGdldHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMgd2l0aCBnZXQvc2V0QXR0cmlidXRlCitp
ZiAoICFnZXRTZXRBdHRyaWJ1dGUgKSB7CisKKyAgICBmaXhTcGVjaWZpZWQgPSB7CisgICAgICAg
IG5hbWU6IHRydWUsCisgICAgICAgIGlkOiB0cnVlLAorICAgICAgICBjb29yZHM6IHRydWUKKyAg
ICB9OworCisgICAgLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKKyAgICAv
LyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQorICAgIG5vZGVIb29rID0galF1
ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSApIHsKKyAgICAgICAgICAgIHZhciByZXQ7CisgICAgICAgICAgICByZXQgPSBlbGVtLmdldEF0
dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKyAgICAgICAgICAgIHJldHVybiByZXQgJiYgKCBmaXhTcGVj
aWZpZWRbIG5hbWUgXSA/IHJldC52YWx1ZSAhPT0gIiIgOiByZXQuc3BlY2lmaWVkICkgPworICAg
ICAgICAgICAgICAgIHJldC52YWx1ZSA6CisgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAg
ICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKyAg
ICAgICAgICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IGF0dHJpYnV0ZSBu
b2RlCisgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7
CisgICAgICAgICAgICBpZiAoICFyZXQgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1l
bnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICk7CisgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRy
aWJ1dGVOb2RlKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoIHJl
dC52YWx1ZSA9IHZhbHVlICsgIiIgKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTZXQg
d2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1
ZyAjODE1MCApCisgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKKyAgICBqUXVlcnkuZWFjaChb
ICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgICAgICBqUXVl
cnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBu
YW1lIF0sIHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAg
ICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICIiICkgeworICAgICAgICAgICAgICAgICAgICBl
bGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0pOworCisgICAgLy8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiByZW1v
dmFscygjMTA0MjkpCisgICAgLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFuIGVy
cm9yIGFzIGFuIGludmFsaWQgdmFsdWUKKyAgICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRlZGl0
YWJsZSA9IHsKKyAgICAgICAgZ2V0OiBub2RlSG9vay5nZXQsCisgICAgICAgIHNldDogZnVuY3Rp
b24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gIiIg
KSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiZmFsc2UiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOworICAgICAgICB9Cisg
ICAgfTsKK30KKworCisvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2FsbCBv
biBJRQoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CisgICAgalF1ZXJ5
LmVhY2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKyAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVu
ZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSgg
bmFtZSwgMiApOworICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmlu
ZWQgOiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCitpZiAo
ICFqUXVlcnkuc3VwcG9ydC5zdHlsZSApIHsKKyAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxlID0g
eworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gUmV0dXJu
IHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgIC8vIE5v
cm1hbGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkgbmFt
ZXMKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKSB8
fCB1bmRlZmluZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZh
bHVlICkgeworICAgICAgICAgICAgcmV0dXJuICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUg
KyAiIiApOworICAgICAgICB9CisgICAgfTsKK30KKworLy8gU2FmYXJpIG1pcy1yZXBvcnRzIHRo
ZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlvbgorLy8gQWNjZXNzaW5nIHRo
ZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CitpZiAoICFqUXVlcnku
c3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKKyAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0g
alF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgeworICAgICAgICBnZXQ6
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50
Tm9kZTsKKworICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CisgICAgICAgICAgICAgICAgcGFy
ZW50LnNlbGVjdGVkSW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBp
dCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKKyAgICAgICAgICAgICAgICBp
ZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQucGFy
ZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIElF
Ni83IGNhbGwgZW5jdHlwZSBlbmNvZGluZworaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZW5jdHlwZSAp
IHsKKyAgICBqUXVlcnkucHJvcEZpeC5lbmN0eXBlID0gImVuY29kaW5nIjsKK30KKworLy8gUmFk
aW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKK2lmICggIWpRdWVyeS5zdXBwb3J0LmNo
ZWNrT24gKSB7CisgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0
aW9uKCkgeworICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKKyAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBj
YXNlIHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2
YWx1ZSBpc24ndCBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRy
aWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKyAgICB9KTsKK30KK2pRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNr
Ym94IiBdLCBmdW5jdGlvbigpIHsKKyAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpRdWVy
eS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7CisgICAgICAgIHNldDogZnVuY3Rp
b24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFs
dWUgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnku
aW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0pOworfSk7Cit2YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFy
ZWF8aW5wdXR8c2VsZWN0KSQvaSwKKyAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKnwpKD86
XC4oLispfCkkLywKKyAgICByaG92ZXJIYWNrID0gLyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLywK
KyAgICBya2V5RXZlbnQgPSAvXmtleS8sCisgICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfGNv
bnRleHRtZW51KXxjbGljay8sCisgICAgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xm
b2N1c291dGJsdXIpJC8sCisgICAgaG92ZXJIYWNrID0gZnVuY3Rpb24oIGV2ZW50cyApIHsKKyAg
ICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZlbnRz
LnJlcGxhY2UoIHJob3ZlckhhY2ssICJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIiApOworICAg
IH07CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90
IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCisgKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMn
IGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgorICovCitqUXVlcnkuZXZl
bnQgPSB7CisKKyAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwg
c2VsZWN0b3IgKSB7CisKKyAgICAgICAgdmFyIGVsZW1EYXRhLCBldmVudEhhbmRsZSwgZXZlbnRz
LAorICAgICAgICAgICAgdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBoYW5kbGVPYmosCisgICAg
ICAgICAgICBoYW5kbGVPYmpJbiwgaGFuZGxlcnMsIHNwZWNpYWw7CisKKyAgICAgICAgLy8gRG9u
J3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChhbGxvdyBw
bGFpbiBvYmplY3RzIHRobykKKyAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDggfHwgIXR5cGVzIHx8ICFoYW5kbGVyIHx8ICEoZWxlbURhdGEgPSBq
UXVlcnkuX2RhdGEoIGVsZW0gKSkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRh
IGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7
CisgICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisgICAgICAgICAgICBoYW5kbGVy
ID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2Jq
SW4uc2VsZWN0b3I7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
aGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKKyAg
ICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgaGFuZGxlci5ndWlkID0g
alF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQn
cyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QK
KyAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzOworICAgICAgICBpZiAoICFldmVudHMg
KSB7CisgICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKKyAgICAgICAg
fQorICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKKyAgICAgICAgaWYgKCAh
ZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhhbmRs
ZSA9IGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNlY29u
ZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCisgICAgICAgICAgICAgICAg
Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorICAg
ICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUg
fHwgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/CisgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1l
bnRzICkgOgorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlIGZuIHRv
IHByZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIElFIG5vbi1uYXRpdmUgZXZlbnRzCisgICAgICAg
ICAgICBldmVudEhhbmRsZS5lbGVtID0gZWxlbTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhh
bmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKKyAgICAgICAgLy8galF1
ZXJ5KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOworICAgICAgICB0eXBlcyA9
IGpRdWVyeS50cmltKCBob3ZlckhhY2sodHlwZXMpICkuc3BsaXQoICIgIiApOworICAgICAgICBm
b3IgKCB0ID0gMDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgeworCisgICAgICAgICAgICB0bnMg
PSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOworICAgICAgICAgICAgdHlw
ZSA9IHRuc1sxXTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRuc1syXSB8fCAiIiApLnNw
bGl0KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAgIC8vIElmIGV2ZW50IGNoYW5nZXMgaXRz
IHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlw
ZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwg
e307CisKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVj
aWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorICAgICAgICAgICAgdHlw
ZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUg
KSB8fCB0eXBlOworCisgICAgICAgICAgICAvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXds
eSByZXNldCB0eXBlCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBh
bGwgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQo
eworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgb3JpZ1R5cGU6
IHRuc1sxXSwKKyAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgICAgIGhh
bmRsZXI6IGhhbmRsZXIsCisgICAgICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5ndWlkLAorICAg
ICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKKyAgICAgICAgICAgICAgICBuZWVkc0Nv
bnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBz
ZWxlY3RvciApLAorICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCIu
IikKKyAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7CisKKyAgICAgICAgICAgIC8vIEluaXQg
dGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0CisgICAgICAgICAgICBo
YW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdOworICAgICAgICAgICAgaWYgKCAhaGFuZGxlcnMgKSB7
CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOworICAgICAg
ICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAg
Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lhbCBl
dmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCisgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lh
bC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2
ZW50SGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAvLyBCaW5kIHRo
ZSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAgICAg
ICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhh
bmRsZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgeworICAgICAgICAgICAg
ICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisgICAgICAgICAgICAg
ICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhh
bmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9y
ICkgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVD
b3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQs
IGZvciBldmVudCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxb
IHR5cGUgXSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBOdWxsaWZ5IGVsZW0gdG8g
cHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKKyAgICAgICAgZWxlbSA9IG51bGw7CisgICAgfSwK
KworICAgIGdsb2JhbDoge30sCisKKyAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2
ZW50cyBmcm9tIGFuIGVsZW1lbnQKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywg
aGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgeworCisgICAgICAgIHZhciB0LCB0bnMs
IHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsCisgICAgICAgICAgICBqLCBl
dmVudHMsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLAorICAgICAgICAgICAgZWxlbURh
dGEgPSBqUXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpRdWVyeS5fZGF0YSggZWxlbSApOworCisg
ICAgICAgIGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9uY2UgZm9yIGVh
Y2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKKyAgICAgICAg
dHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKCB0eXBlcyB8fCAiIiApICkuc3BsaXQoIiAi
KTsKKyAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKKyAgICAg
ICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107CisgICAg
ICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bnNbMV07CisgICAgICAgICAgICBuYW1lc3BhY2Vz
ID0gdG5zWzJdOworCisgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBu
YW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKKyAgICAgICAgICAgIGlmICgg
IXR5cGUgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sg
dCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3BlY2lh
bCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisgICAgICAgICAgICB0eXBl
ID0gKCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkg
fHwgdHlwZTsKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOwor
ICAgICAgICAgICAgb3JpZ0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDsKKyAgICAgICAgICAgIG5h
bWVzcGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2Vz
LnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBu
dWxsOworCisgICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisgICAgICAgICAg
ICBmb3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKKworICAgICAgICAgICAgICAgIGlmICgg
KCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVP
YmouZ3VpZCApICYmCisgICAgICAgICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5hbWVz
cGFjZXMudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHwgc2Vs
ZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOworCisgICAgICAgICAgICAgICAgICAg
IGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnRUeXBlLmRlbGVnYXRlQ291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcg
YW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKKyAgICAgICAgICAgIC8vIChhdm9pZHMgcG90ZW50
aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50
IGhhbmRsZXJzKQorICAgICAgICAgICAgaWYgKCBldmVudFR5cGUubGVuZ3RoID09PSAwICYmIG9y
aWdDb3VudCAhPT0gZXZlbnRUeXBlLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFz
cGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNl
cywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBq
UXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBp
ZiBpdCdzIG5vIGxvbmdlciB1c2VkCisgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3Qo
IGV2ZW50cyApICkgeworICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKKworICAg
ICAgICAgICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBjbGVh
cnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKKyAgICAgICAgICAgIC8vIHNvIHVzZSBpdCBpbnN0ZWFk
IG9mIGRlbGV0ZQorICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJldmVudHMi
LCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gRXZlbnRzIHRoYXQgYXJlIHNh
ZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCisgICAgLy8g
TmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBpbmxp
bmUgaGFuZGxlcnMuCisgICAgY3VzdG9tRXZlbnQ6IHsKKyAgICAgICAgImdldERhdGEiOiB0cnVl
LAorICAgICAgICAic2V0RGF0YSI6IHRydWUsCisgICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1ZQor
ICAgIH0sCisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlI
YW5kbGVycyApIHsKKyAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1l
bnQgbm9kZXMKKyAgICAgICAgaWYgKCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDgpICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKKyAgICAgICAgdmFyIGNhY2hl
LCBleGNsdXNpdmUsIGksIGN1ciwgb2xkLCBvbnR5cGUsIHNwZWNpYWwsIGhhbmRsZSwgZXZlbnRQ
YXRoLCBidWJibGVUeXBlLAorICAgICAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQs
CisgICAgICAgICAgICBuYW1lc3BhY2VzID0gW107CisKKyAgICAgICAgLy8gZm9jdXMvYmx1ciBt
b3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQg
bm93CisgICAgICAgIGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50
cmlnZ2VyZWQgKSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICggdHlwZS5pbmRleE9mKCAiISIgKSA+PSAwICkgeworICAgICAgICAgICAgLy8gRXhjbHVz
aXZlIGV2ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVudCAobm8gbmFtZXNwYWNl
cykKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgICAgIGV4
Y2x1c2l2ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZigg
Ii4iICkgPj0gMCApIHsKKyAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRl
IGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKyAgICAgICAgICAgIG5h
bWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CisgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNl
cy5zaGlmdCgpOworICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUgXSkg
JiYgIWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKKyAgICAgICAgICAgIC8vIE5vIGpR
dWVyeSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBpbmxp
bmUgaGFuZGxlcnMKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5
cGUgc3RyaW5nCisgICAgICAgIGV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/Cisg
ICAgICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0CisgICAgICAgICAgICBldmVudFsgalF1
ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKKyAgICAgICAgICAgIC8vIE9iamVjdCBsaXRlcmFsCisg
ICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKKyAgICAgICAgICAg
IC8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKKyAgICAgICAgICAgIG5ldyBqUXVlcnku
RXZlbnQoIHR5cGUgKTsKKworICAgICAgICBldmVudC50eXBlID0gdHlwZTsKKyAgICAgICAgZXZl
bnQuaXNUcmlnZ2VyID0gdHJ1ZTsKKyAgICAgICAgZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVzaXZl
OworICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOworICAg
ICAgICBldmVudC5uYW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAoIihe
fFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIpIDog
bnVsbDsKKyAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgPyAib24iICsg
dHlwZSA6ICIiOworCisgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCisgICAgICAg
IGlmICggIWVsZW0gKSB7CisKKyAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1bnRpbmcgdGhl
IGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRvIGRv
Y3VtZW50CisgICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5jYWNoZTsKKyAgICAgICAgICAgIGZv
ciAoIGkgaW4gY2FjaGUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2ZW50
cyAmJiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0uaGFuZGxlLmVsZW0s
IHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2Fz
ZSBpdCBpcyBiZWluZyByZXVzZWQKKyAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwor
ICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQg
PSBlbGVtOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEg
YW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorICAg
ICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDogW107
CisgICAgICAgIGRhdGEudW5zaGlmdCggZXZlbnQgKTsKKworICAgICAgICAvLyBBbGxvdyBzcGVj
aWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCisgICAgICAgIHNwZWNpYWwgPSBq
UXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICBpZiAoIHNwZWNpYWwu
dHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2Ug
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1p
bmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVj
ICgjOTk1MSkKKyAgICAgICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRv
dzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKKyAgICAgICAg
ZXZlbnRQYXRoID0gW1sgZWxlbSwgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlIF1dOworICAgICAg
ICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dp
bmRvdyggZWxlbSApICkgeworCisgICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5kZWxl
Z2F0ZVR5cGUgfHwgdHlwZTsKKyAgICAgICAgICAgIGN1ciA9IHJmb2N1c01vcnBoLnRlc3QoIGJ1
YmJsZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAg
Zm9yICggb2xkID0gZWxlbTsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICBldmVudFBhdGgucHVzaChbIGN1ciwgYnViYmxlVHlwZSBdKTsKKyAgICAgICAgICAg
ICAgICBvbGQgPSBjdXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgYWRk
IHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0
YWNoZWQgRE9NKQorICAgICAgICAgICAgaWYgKCBvbGQgPT09IChlbGVtLm93bmVyRG9jdW1lbnQg
fHwgZG9jdW1lbnQpICkgeworICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgb2xkLmRl
ZmF1bHRWaWV3IHx8IG9sZC5wYXJlbnRXaW5kb3cgfHwgd2luZG93LCBidWJibGVUeXBlIF0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBvbiB0
aGUgZXZlbnQgcGF0aAorICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGV2ZW50UGF0aC5sZW5ndGgg
JiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKKworICAgICAgICAgICAg
Y3VyID0gZXZlbnRQYXRoW2ldWzBdOworICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50UGF0
aFtpXVsxXTsKKworICAgICAgICAgICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwgImV2
ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5k
bGUiICk7CisgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICBoYW5k
bGUuYXBwbHkoIGN1ciwgZGF0YSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYSBiYXJlIEpTIGZ1bmN0aW9uIGFuZCBub3QgYSBqUXVlcnkgaGFuZGxl
cgorICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisgICAgICAg
ICAgICBpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxlLmFw
cGx5ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAgICAg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CisKKyAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZl
bnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdworICAgICAgICBpZiAoICFvbmx5SGFu
ZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCisgICAgICAgICAgICBp
ZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBlbGVtLm93
bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCisgICAgICAgICAgICAgICAgISh0eXBl
ID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpRdWVyeS5h
Y2NlcHREYXRhKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0aXZl
IERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUg
ZXZlbnQuCisgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkgY2hl
Y2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KKyAgICAgICAgICAgICAgICAv
LyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFs
IHZhcmlhYmxlcyBiZSAoIzYxNzApCisgICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVzIG9uIGZv
Y3VzL2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KQorICAgICAgICAgICAgICAgIGlmICgg
b250eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAoKHR5cGUgIT09ICJmb2N1cyIgJiYgdHlwZSAhPT0g
ImJsdXIiKSB8fCBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggIT09IDApICYmICFqUXVlcnkuaXNX
aW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmln
Z2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCisgICAgICAg
ICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOworCisgICAgICAgICAgICAgICAgICAg
IGlmICggb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBu
dWxsOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJl
dmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1
YmJsZWQgaXQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJl
ZCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOworICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICggb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsg
b250eXBlIF0gPSBvbGQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0
OworICAgIH0sCisKKyAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAgICAg
IC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9i
amVjdAorICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRvdy5l
dmVudCApOworCisgICAgICAgIHZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNoZWQs
IG1hdGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkLAorICAgICAgICAgICAgaGFuZGxlcnMg
PSAoIChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBd
IHx8IFtdKSwKKyAgICAgICAgICAgIGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNv
dW50LAorICAgICAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisg
ICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNwYWNl
LAorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBl
IF0gfHwge30sCisgICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBbXTsKKworICAgICAgICAvLyBV
c2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5h
dGl2ZSBldmVudAorICAgICAgICBhcmdzWzBdID0gZXZlbnQ7CisgICAgICAgIGV2ZW50LmRlbGVn
YXRlVGFyZ2V0ID0gdGhpczsKKworICAgICAgICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29r
IGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCisgICAgICAg
IGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRo
aXMsIGV2ZW50ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGhhbmRsZXJzIHRoYXQgc2hvdWxkIHJ1biBpZiB0aGVy
ZSBhcmUgZGVsZWdhdGVkIGV2ZW50cworICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGljayBi
dWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYm
ICEoZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIpICkgeworCisgICAgICAg
ICAgICBmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFy
ZW50Tm9kZSB8fCB0aGlzICkgeworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBj
bGlja3MgKE9OTFkpIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4Miwg
IzExNzY0KQorICAgICAgICAgICAgICAgIGlmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8IGV2
ZW50LnR5cGUgIT09ICJjbGljayIgKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbE1hdGNoID0g
e307CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHNlbE1hdGNoWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbE1hdGNoWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4
KCBjdXIgKSA+PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZp
bmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBdICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBtYXRjaGVzOiBtYXRjaGVzIH0p
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJv
dW5kKSBoYW5kbGVycworICAgICAgICBpZiAoIGhhbmRsZXJzLmxlbmd0aCA+IGRlbGVnYXRlQ291
bnQgKSB7CisgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIG1hdGNo
ZXM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFn
YXRpb24gYmVuZWF0aCB1cworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhbmRsZXJRdWV1ZS5s
ZW5ndGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKKyAgICAgICAg
ICAgIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTsKKyAgICAgICAgICAgIGV2ZW50LmN1cnJl
bnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwg
bWF0Y2hlZC5tYXRjaGVzLmxlbmd0aCAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0
b3BwZWQoKTsgaisrICkgeworICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IG1hdGNoZWQubWF0
Y2hlc1sgaiBdOworCisgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0
aGVyIDEpIGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgorICAgICAg
ICAgICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRo
b3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgorICAg
ICAgICAgICAgICAgIGlmICggcnVuX2FsbCB8fCAoIWV2ZW50Lm5hbWVzcGFjZSAmJiAhaGFuZGxl
T2JqLm5hbWVzcGFjZSkgfHwgZXZlbnQubmFtZXNwYWNlX3JlICYmIGV2ZW50Lm5hbWVzcGFjZV9y
ZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworICAgICAgICAgICAgICAgICAgICBldmVudC5o
YW5kbGVPYmogPSBoYW5kbGVPYmo7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gKCAoalF1
ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUgfHwg
aGFuZGxlT2JqLmhhbmRsZXIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBseSgg
bWF0Y2hlZC5lbGVtLCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IHJl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgcG9zdERpc3Bh
dGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQorICAgICAgICBpZiAoIHNwZWNpYWwucG9zdERp
c3BhdGNoICkgeworICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywg
ZXZlbnQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7CisgICAg
fSwKKworICAgIC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2ZW50
IGFuZCBNb3VzZUV2ZW50CisgICAgLy8gKioqIGF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5v
ZGUgc3JjRWxlbWVudCAgYXJlIG5vdCBub3JtYWxpemVkLCBub24tVzNDLCBkZXByZWNhdGVkLCB3
aWxsIGJlIHJlbW92ZWQgaW4gMS44ICoqKgorICAgIHByb3BzOiAiYXR0ckNoYW5nZSBhdHRyTmFt
ZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtl
eSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5
IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKKworICAgIGZpeEhvb2tz
OiB7fSwKKworICAgIGtleUhvb2tzOiB7CisgICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29kZSBr
ZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKKyAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQs
IG9yaWdpbmFsICkgeworCisgICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMK
KyAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICBldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5hbC5jaGFy
Q29kZSA6IG9yaWdpbmFsLmtleUNvZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBldmVudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBtb3VzZUhvb2tzOiB7CisgICAg
ICAgIHByb3BzOiAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9m
ZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxp
dCgiICIpLAorICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7Cisg
ICAgICAgICAgICB2YXIgZXZlbnREb2MsIGRvYywgYm9keSwKKyAgICAgICAgICAgICAgICBidXR0
b24gPSBvcmlnaW5hbC5idXR0b24sCisgICAgICAgICAgICAgICAgZnJvbUVsZW1lbnQgPSBvcmln
aW5hbC5mcm9tRWxlbWVudDsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYg
bWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQorICAgICAgICAgICAgaWYgKCBldmVudC5w
YWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKKyAgICAgICAgICAg
ICAgICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50Owor
ICAgICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAg
ICAgICAgICBib2R5ID0gZXZlbnREb2MuYm9keTsKKworICAgICAgICAgICAgICAgIGV2ZW50LnBh
Z2VYID0gb3JpZ2luYWwuY2xpZW50WCArICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkg
JiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJv
ZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKKyAgICAgICAgICAgICAgICBldmVudC5wYWdl
WSA9IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYm
IGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5
ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIGlmICggIWV2
ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7CisgICAgICAgICAgICAgICAgZXZl
bnQucmVsYXRlZFRhcmdldCA9IGZyb21FbGVtZW50ID09PSBldmVudC50YXJnZXQgPyBvcmlnaW5h
bC50b0VsZW1lbnQgOiBmcm9tRWxlbWVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSBy
aWdodAorICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBk
b24ndCB1c2UgaXQKKyAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAx
ID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9CisgICAg
fSwKKworICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICBpZiAoIGV2ZW50WyBq
UXVlcnkuZXhwYW5kbyBdICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9
CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0
IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCisgICAgICAgIHZhciBpLCBwcm9wLAorICAg
ICAgICAgICAgb3JpZ2luYWxFdmVudCA9IGV2ZW50LAorICAgICAgICAgICAgZml4SG9vayA9IGpR
dWVyeS5ldmVudC5maXhIb29rc1sgZXZlbnQudHlwZSBdIHx8IHt9LAorICAgICAgICAgICAgY29w
eSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDog
dGhpcy5wcm9wczsKKworICAgICAgICBldmVudCA9IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVu
dCApOworCisgICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7CisgICAgICAgICAg
ICBwcm9wID0gY29weVsgLS1pIF07CisgICAgICAgICAgICBldmVudFsgcHJvcCBdID0gb3JpZ2lu
YWxFdmVudFsgcHJvcCBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gRml4IHRhcmdldCBwcm9w
ZXJ0eSwgaWYgbmVjZXNzYXJ5ICgjMTkyNSwgSUUgNi83LzggJiBTYWZhcmkyKQorICAgICAgICBp
ZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBvcmlnaW5h
bEV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
YXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgU2FmYXJpKQorICAgICAgICBp
ZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHsKKyAgICAgICAgICAgIGV2ZW50LnRh
cmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Rm9yIG1vdXNlL2tleSBldmVudHMsIG1ldGFLZXk9PWZhbHNlIGlmIGl0J3MgdW5kZWZpbmVkICgj
MzM2OCwgIzExMzI4OyBJRTYvNy84KQorICAgICAgICBldmVudC5tZXRhS2V5ID0gISFldmVudC5t
ZXRhS2V5OworCisgICAgICAgIHJldHVybiBmaXhIb29rLmZpbHRlcj8gZml4SG9vay5maWx0ZXIo
IGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKKyAgICB9LAorCisgICAgc3BlY2lhbDog
eworICAgICAgICBsb2FkOiB7CisgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFn
ZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCisgICAgICAgICAgICBu
b0J1YmJsZTogdHJ1ZQorICAgICAgICB9LAorCisgICAgICAgIGZvY3VzOiB7CisgICAgICAgICAg
ICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIgorICAgICAgICB9LAorICAgICAgICBibHVyOiB7Cisg
ICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKKyAgICAgICAgfSwKKworICAgICAg
ICBiZWZvcmV1bmxvYWQ6IHsKKyAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFt
ZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50
IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKKyAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5pc1dpbmRvdyggdGhpcyApICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9u
YmVmb3JldW5sb2FkID0gZXZlbnRIYW5kbGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBldmVu
dEhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQgPT09
IGV2ZW50SGFuZGxlICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2Fk
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCwgYnViYmxl
ICkgeworICAgICAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBh
IGRpZmZlcmVudCBvbmUuCisgICAgICAgIC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9pZCBk
b25vcidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQorICAgICAgICAvLyBzaW11bGF0ZWQg
ZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBkb25vci4K
KyAgICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAorICAgICAgICAgICAgbmV3IGpRdWVyeS5F
dmVudCgpLAorICAgICAgICAgICAgZXZlbnQsCisgICAgICAgICAgICB7IHR5cGU6IHR5cGUsCisg
ICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgb3JpZ2lu
YWxFdmVudDoge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgaWYgKCBidWJi
bGUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSAp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmNh
bGwoIGVsZW0sIGUgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVu
dGVkKCkgKSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9
CisgICAgfQorfTsKKworLy8gU29tZSBwbHVnaW5zIGFyZSB1c2luZywgYnV0IGl0J3MgdW5kb2N1
bWVudGVkL2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KKy8vIFRoZSAxLjcgc3BlY2lh
bCBldmVudCBpbnRlcmZhY2Ugc2hvdWxkIHByb3ZpZGUgYWxsIHRoZSBob29rcyBuZWVkZWQgbm93
LgoralF1ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNwYXRjaDsKKworalF1ZXJ5
LnJlbW92ZUV2ZW50ID0gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/CisgICAgZnVuY3Rp
b24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKKyAgICAgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50
TGlzdGVuZXIgKSB7CisgICAgICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUs
IGhhbmRsZSwgZmFsc2UgKTsKKyAgICAgICAgfQorICAgIH0gOgorICAgIGZ1bmN0aW9uKCBlbGVt
LCB0eXBlLCBoYW5kbGUgKSB7CisgICAgICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7CisKKyAg
ICAgICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgeworCisgICAgICAgICAgICAvLyAjODU0NSwg
IzcwNTQsIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGZvciBjdXN0b20gZXZlbnRzIGluIElFNi04
CisgICAgICAgICAgICAvLyBkZXRhY2hFdmVudCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVudCwg
YnkgbmFtZSBvZiB0aGF0IGV2ZW50LCB0byBwcm9wZXJseSBleHBvc2UgaXQgdG8gR0MKKyAgICAg
ICAgICAgIGlmICggdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gInVuZGVmaW5lZCIgKSB7CisgICAg
ICAgICAgICAgICAgZWxlbVsgbmFtZSBdID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFuZGxlICk7CisgICAgICAgIH0KKyAgICB9
OworCitqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKKyAgICAvLyBBbGxv
dyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKyAgICBpZiAoICEodGhp
cyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7CisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5
LkV2ZW50KCBzcmMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8gRXZlbnQgb2JqZWN0CisgICAg
aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CisgICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHNy
YzsKKyAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKyAgICAgICAgLy8gRXZlbnRzIGJ1
YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQK
KyAgICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhl
IGNvcnJlY3QgdmFsdWUuCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBzcmMu
ZGVmYXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8CisgICAgICAg
ICAgICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkgKSA/
IHJldHVyblRydWUgOiByZXR1cm5GYWxzZTsKKworICAgIC8vIEV2ZW50IHR5cGUKKyAgICB9IGVs
c2UgeworICAgICAgICB0aGlzLnR5cGUgPSBzcmM7CisgICAgfQorCisgICAgLy8gUHV0IGV4cGxp
Y2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKKyAgICBpZiAo
IHByb3BzICkgeworICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAgIH0K
KworICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhh
dmUgb25lCisgICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVl
cnkubm93KCk7CisKKyAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCisgICAgdGhpc1sgalF1ZXJ5LmV4
cGFuZG8gXSA9IHRydWU7Cit9OworCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVk
IGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRp
bmcuaHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKyAgICBwcmV2ZW50RGVmYXVsdDog
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1
ZTsKKworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKyAgICAgICAgaWYgKCAh
ZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlmIHBy
ZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50CisgICAgICAg
IGlmICggZS5wcmV2ZW50RGVmYXVsdCApIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQo
KTsKKworICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBv
ZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICB9CisgICAgfSwKKyAgICBz
dG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzUHJvcGFnYXRpb25T
dG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVu
dDsKKyAgICAgICAgaWYgKCAhZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2lu
YWwgZXZlbnQKKyAgICAgICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKKyAgICAgICAgICAg
IGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gb3RoZXJ3aXNlIHNl
dCB0aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVl
IChJRSkKKyAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOworICAgIH0sCisgICAgc3RvcElt
bWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5pc0ltbWVkaWF0
ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisgICAgICAgIHRoaXMuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgfSwKKyAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLAor
ICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc0ltbWVkaWF0ZVBy
b3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKK307CisKKy8vIENyZWF0ZSBtb3VzZWVudGVy
L2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcwor
alF1ZXJ5LmVhY2goeworICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorICAgIG1vdXNlbGVh
dmU6ICJtb3VzZW91dCIKK30sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisgICAgalF1ZXJ5LmV2
ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKKyAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCisgICAg
ICAgIGJpbmRUeXBlOiBmaXgsCisKKyAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7
CisgICAgICAgICAgICB2YXIgcmV0LAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMsCisg
ICAgICAgICAgICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCisgICAgICAgICAg
ICAgICAgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqLAorICAgICAgICAgICAgICAgIHNlbGVj
dG9yID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAgICAgICAgICAvLyBGb3IgbW91c2VudGVy
L2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQu
CisgICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9l
bnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8fCAo
cmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCAp
KSApIHsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOwor
ICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1
bWVudHMgKTsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH07Cit9KTsKKworLy8g
SUUgc3VibWl0IGRlbGVnYXRpb24KK2lmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMg
KSB7CisKKyAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7CisgICAgICAgIHNldHVw
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0
ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSgg
dGhpcywgImZvcm0iICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdoZW4g
YSBkZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAorICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1p
dCIsIGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgIC8vIE5vZGUgbmFtZSBjaGVjayBh
dm9pZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCisgICAgICAgICAgICAgICAg
dmFyIGVsZW0gPSBlLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgZm9ybSA9IGpRdWVyeS5u
b2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRv
biIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoIGZvcm0g
JiYgIWpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJtaXQuX3N1Ym1pdCIsIGZ1
bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zdWJtaXRf
YnViYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiLCB0cnVlICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyByZXR1cm4gdW5k
ZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgfSwK
KworICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAg
IC8vIElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBldmVudCB1
cCB0aGUgdHJlZQorICAgICAgICAgICAgaWYgKCBldmVudC5fc3VibWl0X2J1YmJsZSApIHsKKyAg
ICAgICAgICAgICAgICBkZWxldGUgZXZlbnQuX3N1Ym1pdF9idWJibGU7CisgICAgICAgICAgICAg
ICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAic3VibWl0IiwgdGhpcy5wYXJlbnRO
b2RlLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKworICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAv
LyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cworICAgICAg
ICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVt
b3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3VibWl0
IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3Zl
KCB0aGlzLCAiLl9zdWJtaXQiICk7CisgICAgICAgIH0KKyAgICB9OworfQorCisvLyBJRSBjaGFu
Z2UgZGVsZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4CitpZiAoICFqUXVlcnkuc3VwcG9y
dC5jaGFuZ2VCdWJibGVzICkgeworCisgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0g
eworCisgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgaWYgKCByZm9y
bUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHsKKyAgICAgICAgICAgICAgICAvLyBJRSBk
b2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dlciBp
dCBvbiBjbGljaworICAgICAgICAgICAgICAgIC8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2UuIEVh
dCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgorICAgICAgICAgICAg
ICAgIC8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hlY2sv
cmFkaW8gYWZ0ZXIgYmx1ci4KKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNo
ZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CisgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rp
b24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5vcmlnaW5h
bEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5fanVzdF9jaGFuZ2VkICYmICFldmVu
dC5pc1RyaWdnZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVzdF9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBjaGFuZ2UgZXZlbnRzICgj
MTE1MDApCisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJj
aGFuZ2UiLCB0aGlzLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5nZSBo
YW5kbGVyIG9uIGRlc2NlbmRhbnQgaW5wdXRzCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRk
KCB0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgeworICAgICAg
ICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIHJm
b3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJf
Y2hhbmdlX2F0dGFjaGVkIiApICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
YWRkKCBlbGVtLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0
ZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50LCB0
cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2F0dGFj
aGVkIiwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9LAorCisgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAg
dmFyIGVsZW0gPSBldmVudC50YXJnZXQ7CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgbmF0aXZl
IGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2VyZWQg
dGhlbSBhYm92ZQorICAgICAgICAgICAgaWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50LmlzU2lt
dWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fCAoZWxlbS50eXBlICE9PSAicmFkaW8iICYmIGVs
ZW0udHlwZSAhPT0gImNoZWNrYm94IikgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50
LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKworICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7CisKKyAgICAgICAg
ICAgIHJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CisgICAgICAgIH0K
KyAgICB9OworfQorCisvLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVudHMK
K2lmICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5CdWJibGVzICkgeworICAgIGpRdWVyeS5lYWNo
KHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywg
Zml4ICkgeworCisgICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3
aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKKyAgICAgICAgdmFyIGF0dGFjaGVz
ID0gMCwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5
LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOworICAgICAgICAgICAgfTsKKworICAgICAgICBq
UXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7CisgICAgICAgICAgICBzZXR1cDogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgeworICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0
cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRl
YXJkb3duOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNoZXMgPT09
IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo
IG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfSk7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAgb246
IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25lICkg
eworICAgICAgICB2YXIgb3JpZ0ZuLCB0eXBlOworCisgICAgICAgIC8vIFR5cGVzIGNhbiBiZSBh
IG1hcCBvZiB0eXBlcy9oYW5kbGVycworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9i
amVjdCIgKSB7CisgICAgICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEg
KQorICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeyAvLyAm
JiBzZWxlY3RvciAhPSBudWxsCisgICAgICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3QsIGRh
dGEgKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAgICAg
ICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uKCB0eXBlLCBz
ZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZGF0YSA9PSBu
dWxsICYmIGZuID09IG51bGwgKSB7CisgICAgICAgICAgICAvLyAoIHR5cGVzLCBmbiApCisgICAg
ICAgICAgICBmbiA9IHNlbGVjdG9yOworICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0gdW5k
ZWZpbmVkOworICAgICAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICAgICAg
aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgIC8v
ICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisgICAgICAgICAgICAgICAgZm4gPSBkYXRhOworICAg
ICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vICggdHlwZXMsIGRhdGEsIGZuICkKKyAgICAgICAgICAgICAgICBmbiA9
IGRhdGE7CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAg
IHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAg
ICAgICAgfSBlbHNlIGlmICggIWZuICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIG9uZSA9PT0gMSApIHsKKyAgICAgICAgICAgIG9yaWdGbiA9
IGZuOworICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAg
ICAgLy8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZv
CisgICAgICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOworICAgICAgICAgICAgICAg
IHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcg
b3JpZ0ZuCisgICAgICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3Vp
ZCA9IGpRdWVyeS5ndWlkKysgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVz
LCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICBvbmU6IGZ1
bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gdGhp
cy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOworICAgIH0sCisgICAgb2ZmOiBm
dW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKKyAgICAgICAgdmFyIGhhbmRsZU9iaiwg
dHlwZTsKKyAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBl
cy5oYW5kbGVPYmogKSB7CisgICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1
ZXJ5LkV2ZW50CisgICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CisgICAg
ICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAgICAg
ICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5k
bGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLAorICAgICAgICAgICAgICAgIGhh
bmRsZU9iai5zZWxlY3RvciwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgorICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAg
IGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIC8vICggdHlw
ZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCisgICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5cGVz
ICkgeworICAgICAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5
cGUgXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09
PSAiZnVuY3Rpb24iICkgeworICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0gKQorICAgICAg
ICAgICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwor
ICAgICAgICB9CisgICAgICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4g
PSByZXR1cm5GYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZu
LCBzZWxlY3RvciApOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgYmluZDogZnVuY3Rpb24o
IHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxs
LCBkYXRhLCBmbiApOworICAgIH0sCisgICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkg
eworICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworICAgIH0sCisK
KyAgICBsaXZlOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICBqUXVlcnko
IHRoaXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICBkaWU6IGZ1bmN0aW9uKCB0eXBlcywgZm4g
KSB7CisgICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub2ZmKCB0eXBlcywgdGhpcy5zZWxl
Y3RvciB8fCAiKioiLCBmbiApOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAg
ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAg
ICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworICAgIH0sCisg
ICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7CisgICAgICAg
IC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKKyAgICAgICAg
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsICIqKiIg
KSA6IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKyAgICB9LAorCisg
ICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlw
ZSwgZGF0YSwgdGhpcyApOworICAgICAgICB9KTsKKyAgICB9LAorICAgIHRyaWdnZXJIYW5kbGVy
OiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgaWYgKCB0aGlzWzBdICkgeworICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzWzBd
LCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4g
KSB7CisgICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNzIGlu
IGNsb3N1cmUKKyAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAgICBndWlk
ID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAg
ICAgICB0b2dnbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIC8vIEZp
Z3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQorICAgICAgICAgICAgICAgIHZhciBs
YXN0VG9nZ2xlID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQg
KSB8fCAwICkgJSBpOworICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhpcywgImxhc3RU
b2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKKworICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGNsaWNrcyBzdG9wCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKworICAgICAgICAgICAgICAgIC8vIGFuZCBleGVjdXRlIHRoZSBmdW5jdGlv
bgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRoaXMs
IGFyZ3VtZW50cyApIHx8IGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBsaW5r
IGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xpY2sg
aGFuZGxlcgorICAgICAgICB0b2dnbGVyLmd1aWQgPSBndWlkOworICAgICAgICB3aGlsZSAoIGkg
PCBhcmdzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGFyZ3NbIGkrKyBdLmd1aWQgPSBndWlkOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuY2xpY2soIHRvZ2dsZXIgKTsKKyAgICB9
LAorCisgICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworICAgICAgICByZXR1
cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIg
KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vz
b3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCisgICAgIm1v
dXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBt
b3VzZWxlYXZlICIgKworICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNz
IGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUg
KSB7CisKKyAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZworICAgIGpRdWVyeS5mblsgbmFtZSBd
ID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgeworICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7Cisg
ICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gbnVsbDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CisgICAgICAgICAgICB0
aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKKyAgICAgICAgICAgIHRoaXMudHJpZ2dl
ciggbmFtZSApOworICAgIH07CisKKyAgICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkgKSB7
CisgICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50Lmtl
eUhvb2tzOworICAgIH0KKworICAgIGlmICggcm1vdXNlRXZlbnQudGVzdCggbmFtZSApICkgewor
ICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5hbWUgXSA9IGpRdWVyeS5ldmVudC5tb3Vz
ZUhvb2tzOworICAgIH0KK30pOworLyohCisgKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZQor
ICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9y
cworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vc2l6emxlanMu
Y29tLworICovCisoZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgeworCit2YXIgY2FjaGVk
cnVucywKKyAgICBhc3NlcnRHZXRJZE5vdE5hbWUsCisgICAgRXhwciwKKyAgICBnZXRUZXh0LAor
ICAgIGlzWE1MLAorICAgIGNvbnRhaW5zLAorICAgIGNvbXBpbGUsCisgICAgc29ydE9yZGVyLAor
ICAgIGhhc0R1cGxpY2F0ZSwKKyAgICBvdXRlcm1vc3RDb250ZXh0LAorCisgICAgYmFzZUhhc0R1
cGxpY2F0ZSA9IHRydWUsCisgICAgc3RydW5kZWZpbmVkID0gInVuZGVmaW5lZCIsCisKKyAgICBl
eHBhbmRvID0gKCAic2l6Y2FjaGUiICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoICIuIiwgIiIg
KSwKKworICAgIFRva2VuID0gU3RyaW5nLAorICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50
LAorICAgIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCisgICAgZGlycnVucyA9
IDAsCisgICAgZG9uZSA9IDAsCisgICAgcG9wID0gW10ucG9wLAorICAgIHB1c2ggPSBbXS5wdXNo
LAorICAgIHNsaWNlID0gW10uc2xpY2UsCisgICAgLy8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRl
eE9mIGlmIGEgbmF0aXZlIG9uZSBpcyB1bmF2YWlsYWJsZQorICAgIGluZGV4T2YgPSBbXS5pbmRl
eE9mIHx8IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgaSA9IDAsCisgICAgICAgICAg
ICBsZW4gPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Cisg
ICAgICAgICAgICBpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0sCisKKyAgICAvLyBBdWdtZW50IGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenps
ZQorICAgIG1hcmtGdW5jdGlvbiA9IGZ1bmN0aW9uKCBmbiwgdmFsdWUgKSB7CisgICAgICAgIGZu
WyBleHBhbmRvIF0gPSB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlOworICAgICAgICByZXR1cm4gZm47
CisgICAgfSwKKworICAgIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBj
YWNoZSA9IHt9LAorICAgICAgICAgICAga2V5cyA9IFtdOworCisgICAgICAgIHJldHVybiBtYXJr
RnVuY3Rpb24oZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAvLyBPbmx5IGtl
ZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKKyAgICAgICAgICAgIGlmICgga2V5cy5wdXNoKCBr
ZXkgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hl
WyBrZXlzLnNoaWZ0KCkgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV0cmll
dmUgd2l0aCAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgT2JqZWN0
LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKKyAgICAgICAgICAgIHJldHVy
biAoY2FjaGVbIGtleSArICIgIiBdID0gdmFsdWUpOworICAgICAgICB9LCBjYWNoZSApOworICAg
IH0sCisKKyAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICB0b2tlbkNhY2hlID0g
Y3JlYXRlQ2FjaGUoKSwKKyAgICBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKworICAg
IC8vIFJlZ2V4CisKKyAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgaHR0cDovL3d3dy53My5v
cmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKKyAgICB3aGl0ZXNwYWNlID0gIltcXHgy
MFxcdFxcclxcblxcZl0iLAorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4
LyNjaGFyYWN0ZXJzCisgICAgY2hhcmFjdGVyRW5jb2RpbmcgPSAiKD86XFxcXC58Wy1cXHddfFte
XFx4MDAtXFx4YTBdKSsiLAorCisgICAgLy8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVudGlm
aWVyIGNoYXJhY3RlcnMKKyAgICAvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBDU1Mg
aWRlbnRpZmllciAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJpYnV0
ZS1zZWxlY3RvcnMpCisgICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53My5vcmcvVFIv
Q1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisgICAgaWRlbnRpZmllciA9
IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAorCisgICAgLy8gQWNjZXB0
YWJsZSBvcGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUt
c2VsZWN0b3JzCisgICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCisgICAgYXR0cmlidXRl
cyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiAr
IHdoaXRlc3BhY2UgKworICAgICAgICAiKig/OiIgKyBvcGVyYXRvcnMgKyB3aGl0ZXNwYWNlICsg
IiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiICsgaWRlbnRpZmllciArICIp
fCl8KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLAorCisgICAgLy8gUHJlZmVyIGFyZ3VtZW50cyBu
b3QgaW4gcGFyZW5zL2JyYWNrZXRzLAorICAgIC8vICAgdGhlbiBhdHRyaWJ1dGUgc2VsZWN0b3Jz
IGFuZCBub24tcHNldWRvcyAoZGVub3RlZCBieSA6KSwKKyAgICAvLyAgIHRoZW4gYW55dGhpbmcg
ZWxzZQorICAgIC8vIFRoZXNlIHByZWZlcmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUgbnVt
YmVyIG9mIHNlbGVjdG9ycworICAgIC8vICAgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNFVURP
IHByZUZpbHRlcgorICAgIHBzZXVkb3MgPSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSg/
OlxcKCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86KD86
IiArIGF0dHJpYnV0ZXMgKyAiKXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIiwKKworICAgIC8vIEZv
ciBtYXRjaEV4cHIuUE9TIGFuZCBtYXRjaEV4cHIubmVlZHNDb250ZXh0CisgICAgcG9zID0gIjoo
ZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArIHdoaXRlc3BhY2UgKwor
ICAgICAgICAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18
JCkiLAorCisgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFj
ZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhl
IGxhdHRlcgorICAgIHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIrfCgo
PzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAorCisg
ICAgcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNw
YWNlICsgIioiICksCisgICAgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVz
cGFjZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwK
KyAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAorCisgICAgLy8gRWFzaWx5LXBh
cnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCisgICAgcnF1
aWNrRXhwciA9IC9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihbXHdcLV0rKSkkLywKKworICAgIHJu
b3QgPSAvXjpub3QvLAorICAgIHJzaWJsaW5nID0gL1tceDIwXHRcclxuXGZdKlsrfl0vLAorICAg
IHJlbmRzV2l0aE5vdCA9IC86bm90XCgkLywKKworICAgIHJoZWFkZXIgPSAvaFxkL2ksCisgICAg
cmlucHV0cyA9IC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksCisKKyAgICByYmFja3Ns
YXNoID0gL1xcKD8hXFwpL2csCisKKyAgICBtYXRjaEV4cHIgPSB7CisgICAgICAgICJJRCI6IG5l
dyBSZWdFeHAoICJeIygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKKyAgICAgICAgIkNM
QVNTIjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICksCisg
ICAgICAgICJOQU1FIjogbmV3IFJlZ0V4cCggIl5cXFtuYW1lPVsnXCJdPygiICsgY2hhcmFjdGVy
RW5jb2RpbmcgKyAiKVsnXCJdP1xcXSIgKSwKKyAgICAgICAgIlRBRyI6IG5ldyBSZWdFeHAoICJe
KCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3KiIgKSArICIpIiApLAorICAg
ICAgICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKKyAgICAgICAgIlBT
RVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKKyAgICAgICAgIlBPUyI6IG5ldyBS
ZWdFeHAoIHBvcywgImkiICksCisgICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihvbmx5
fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgICAg
ICIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1d
fCkiICsgd2hpdGVzcGFjZSArCisgICAgICAgICAgICAiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNl
ICsgIipcXCl8KSIsICJpIiApLAorICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBs
ZW1lbnRpbmcgLmlzKCkKKyAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiAr
IHdoaXRlc3BhY2UgKyAiKls+K35dfCIgKyBwb3MsICJpIiApCisgICAgfSwKKworICAgIC8vIFN1
cHBvcnQKKworICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgc29tZXRoaW5nIG9uIGFuIGVsZW1lbnQK
KyAgICBhc3NlcnQgPSBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0
dXJuIGZuKCBkaXYgKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gcmVsZWFzZSBtZW1v
cnkgaW4gSUUKKyAgICAgICAgICAgIGRpdiA9IG51bGw7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkgZWxl
bWVudHMKKyAgICBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5jdGlvbiggZGl2
ICkgeworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIp
ICk7CisgICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3Ro
OworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0QXR0cmlidXRlIHJldHVybnMgbm9ybWFs
aXplZCBocmVmIGF0dHJpYnV0ZXMKKyAgICBhc3NlcnRIcmVmTm90Tm9ybWFsaXplZCA9IGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMn
PjwvYT4iOworICAgICAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJz
dENoaWxkLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmCisgICAgICAgICAgICBkaXYu
Zmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOworICAgIH0pLAorCisgICAg
Ly8gQ2hlY2sgaWYgYXR0cmlidXRlcyBzaG91bGQgYmUgcmV0cmlldmVkIGJ5IGF0dHJpYnV0ZSBu
b2RlcworICAgIGFzc2VydEF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7CisgICAgICAgIHZhciB0
eXBlID0gdHlwZW9mIGRpdi5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpOworICAg
ICAgICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBmb3Igc29tZSBhdHRyaWJ1dGVzIGV2ZW4gd2hl
biBub3QgcHJlc2VudAorICAgICAgICByZXR1cm4gdHlwZSAhPT0gImJvb2xlYW4iICYmIHR5cGUg
IT09ICJzdHJpbmciOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSBjYW4gYmUgdHJ1c3RlZAorICAgIGFzc2VydFVzYWJsZUNsYXNzTmFtZSA9IGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vjb25k
IGNsYXNzbmFtZSAoaW4gOS42KQorICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9
J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7CisgICAgICAgIGlm
ICggIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8ICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSgiZSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFNhZmFyaSAzLjIgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5kIGRv
ZXNuJ3QgY2F0Y2ggY2hhbmdlcworICAgICAgICBkaXYubGFzdENoaWxkLmNsYXNzTmFtZSA9ICJl
IjsKKyAgICAgICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3Ro
ID09PSAyOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJu
cyBlbGVtZW50cyBieSBuYW1lCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeU5hbWUgcHJp
dmlsZWdlcyBmb3JtIGNvbnRyb2xzIG9yIHJldHVybnMgZWxlbWVudHMgYnkgSUQKKyAgICBhc3Nl
cnRVc2FibGVOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIC8vIEluamVj
dCBjb250ZW50CisgICAgICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOworICAgICAgICBkaXYuaW5u
ZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBleHBhbmRvICsgIic+PC9hPjxkaXYgbmFtZT0nIiArIGV4
cGFuZG8gKyAiJz48L2Rpdj4iOworICAgICAgICBkb2NFbGVtLmluc2VydEJlZm9yZSggZGl2LCBk
b2NFbGVtLmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBUZXN0CisgICAgICAgIHZhciBwYXNz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgJiYKKyAgICAgICAgICAgIC8vIGJ1Z2d5IGJy
b3dzZXJzIHdpbGwgcmV0dXJuIGZld2VyIHRoYW4gdGhlIGNvcnJlY3QgMgorICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGggPT09IDIgKworICAg
ICAgICAgICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gbW9yZSB0aGFuIHRoZSBjb3Jy
ZWN0IDAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICsg
MCApLmxlbmd0aDsKKyAgICAgICAgYXNzZXJ0R2V0SWROb3ROYW1lID0gIWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCBleHBhbmRvICk7CisKKyAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICBkb2NF
bGVtLnJlbW92ZUNoaWxkKCBkaXYgKTsKKworICAgICAgICByZXR1cm4gcGFzczsKKyAgICB9KTsK
KworLy8gSWYgc2xpY2UgaXMgbm90IGF2YWlsYWJsZSwgcHJvdmlkZSBhIGJhY2t1cAordHJ5IHsK
KyAgICBzbGljZS5jYWxsKCBkb2NFbGVtLmNoaWxkTm9kZXMsIDAgKVswXS5ub2RlVHlwZTsKK30g
Y2F0Y2ggKCBlICkgeworICAgIHNsaWNlID0gZnVuY3Rpb24oIGkgKSB7CisgICAgICAgIHZhciBl
bGVtLAorICAgICAgICAgICAgcmVzdWx0cyA9IFtdOworICAgICAgICBmb3IgKCA7IChlbGVtID0g
dGhpc1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH07Cit9CisKK2Z1bmN0aW9uIFNp
enpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgcmVzdWx0cyA9
IHJlc3VsdHMgfHwgW107CisgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisgICAg
dmFyIG1hdGNoLCBlbGVtLCB4bWwsIG0sCisgICAgICAgIG5vZGVUeXBlID0gY29udGV4dC5ub2Rl
VHlwZTsKKworICAgIGlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmlu
ZyIgKSB7CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH0KKworICAgIGlmICggbm9kZVR5
cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgKSB7CisgICAgICAgIHJldHVybiBbXTsKKyAgICB9
CisKKyAgICB4bWwgPSBpc1hNTCggY29udGV4dCApOworCisgICAgaWYgKCAheG1sICYmICFzZWVk
ICkgeworICAgICAgICBpZiAoIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkg
KSB7CisgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQorICAgICAgICAgICAg
aWYgKCAobSA9IG1hdGNoWzFdKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBlID09
PSA5ICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJ
ZCggbSApOworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNo
IHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucworICAgICAgICAgICAgICAgICAgICAvLyBub2Rl
cyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCisgICAgICAgICAgICAg
ICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUsIE9wZXJhLCBhbmQgV2Via2l0IHJl
dHVybiBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9m
IElECisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgaXMgbm90IGEgZG9jdW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYgKGVs
ZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5pZCA9
PT0gbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6
bGUoIlRBRyIpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAg
ICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisKKyAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBhc3NlcnRVc2FibGVDbGFzc05h
bWUgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgeworICAgICAgICAgICAgICAg
IHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKCBtICksIDApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGwgb3RoZXJzCisgICAgcmV0
dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwgcmVz
dWx0cywgc2VlZCwgeG1sICk7Cit9CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIs
IGVsZW1lbnRzICkgeworICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1l
bnRzICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4
cHIgKSB7CisgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0gKS5s
ZW5ndGggPiAwOworfTsKKworLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9z
IGZvciBpbnB1dCB0eXBlcworZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYg
ZWxlbS50eXBlID09PSB0eXBlOworICAgIH07Cit9CisKKy8vIFJldHVybnMgYSBmdW5jdGlvbiB0
byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucworZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRv
KCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIG5h
bWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHJldHVybiAobmFtZSA9
PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBlOwor
ICAgIH07Cit9CisKKy8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3Ig
cG9zaXRpb25hbHMKK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgeworICAg
IHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworICAgICAgICBhcmd1
bWVudCA9ICthcmd1bWVudDsKKyAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbigg
c2VlZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgIHZhciBqLAorICAgICAgICAgICAgICAgIG1h
dGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisgICAgICAgICAg
ICAgICAgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGVs
ZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworICAgICAgICAgICAgd2hpbGUg
KCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tp
XSkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNl
ZWRbal0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUg
dGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8RWxl
bWVudH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICB2YXIgbm9kZSwKKyAgICAgICAgcmV0ID0gIiIsCisgICAgICAgIGkgPSAwLAor
ICAgICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICBpZiAoIG5vZGVUeXBlICkg
eworICAgICAgICBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVU
eXBlID09PSAxMSApIHsKKyAgICAgICAgICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVu
dHMKKyAgICAgICAgICAgIC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5j
eSBvZiBuZXcgbGluZXMgKHNlZSAjMTExNTMpCisgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVt
LnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS50ZXh0Q29udGVudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
VHJhdmVyc2UgaXRzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0u
Zmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlw
ZSA9PT0gNCApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKyAgICAgICAg
fQorICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1
Y3Rpb24gbm9kZXMKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0
aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5CisgICAgICAgIGZvciAoIDsgKG5vZGUgPSBl
bGVtW2ldKTsgaSsrICkgeworICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQg
bm9kZXMKKyAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHJldDsKK307CisKK2lzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNl
cyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAorICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZy
YW1lcyBpbiBJRSAtICM0ODMzKQorICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChl
bGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OworICAgIHJldHVybiBk
b2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6IGZh
bHNlOworfTsKKworLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCitjb250YWlucyA9IFNpenps
ZS5jb250YWlucyA9IGRvY0VsZW0uY29udGFpbnMgPworICAgIGZ1bmN0aW9uKCBhLCBiICkgewor
ICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQg
OiBhLAorICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVy
biBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgYWRvd24uY29u
dGFpbnMgJiYgYWRvd24uY29udGFpbnMoYnVwKSApOworICAgIH0gOgorICAgIGRvY0VsZW0uY29t
cGFyZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICBy
ZXR1cm4gYiAmJiAhISggYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApICYgMTYgKTsKKyAg
ICB9IDoKKyAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgd2hpbGUgKCAoYiA9IGIucGFy
ZW50Tm9kZSkgKSB7CisgICAgICAgICAgICBpZiAoIGIgPT09IGEgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH07CisKK1NpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7
CisgICAgdmFyIHZhbCwKKyAgICAgICAgeG1sID0gaXNYTUwoIGVsZW0gKTsKKworICAgIGlmICgg
IXhtbCApIHsKKyAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICB9CisgICAg
aWYgKCAodmFsID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgeworICAgICAgICByZXR1cm4g
dmFsKCBlbGVtICk7CisgICAgfQorICAgIGlmICggeG1sIHx8IGFzc2VydEF0dHJpYnV0ZXMgKSB7
CisgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworICAgIH0KKyAgICB2
YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKyAgICByZXR1cm4gdmFsID8KKyAg
ICAgICAgdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gImJvb2xlYW4iID8KKyAgICAgICAgICAgIGVs
ZW1bIG5hbWUgXSA/IG5hbWUgOiBudWxsIDoKKyAgICAgICAgICAgIHZhbC5zcGVjaWZpZWQgPyB2
YWwudmFsdWUgOiBudWxsIDoKKyAgICAgICAgbnVsbDsKK307CisKK0V4cHIgPSBTaXp6bGUuc2Vs
ZWN0b3JzID0geworCisgICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCisgICAgY2Fj
aGVMZW5ndGg6IDUwLAorCisgICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCisKKyAgICBt
YXRjaDogbWF0Y2hFeHByLAorCisgICAgLy8gSUU2LzcgcmV0dXJuIGEgbW9kaWZpZWQgaHJlZgor
ICAgIGF0dHJIYW5kbGU6IGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID8KKyAgICAgICAge30gOgor
ICAgICAgICB7CisgICAgICAgICAgICAiaHJlZiI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgIGZpbmQ6IHsKKyAgICAgICAgIklEIjogYXNzZXJ0R2V0SWROb3RO
YW1lID8KKyAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgeworICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVm
aW5lZCAmJiAheG1sICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0
RWxlbWVudEJ5SWQoIGlkICk7CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5v
ZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAg
ICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlvbigg
aWQsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0
LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtID8KKyAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09
IGlkIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBtLmdl
dEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGlkID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbbV0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBbXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9LAorCisgICAgICAgICJUQUciOiBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA/CisgICAgICAg
ICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRh
ZyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gOgorICAgICAgICAgICAgZnVu
Y3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IGNv
bnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAgICAgICAgLy8g
RmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cworICAgICAgICAgICAgICAgIGlmICggdGFnID09
PSAiKiIgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdG1wID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRtcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICJOQU1FIjogYXNzZXJ0VXNhYmxlTmFt
ZSAmJiBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1lICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkNMQVNTIjogYXNzZXJ0VXNhYmxlQ2xhc3NO
YW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAg
IGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5kZWZp
bmVkICYmICF4bWwgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgcmVsYXRpdmU6IHsKKyAgICAgICAgIj4iOiB7IGRpcjogInBhcmVudE5vZGUi
LCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwKKyAg
ICAgICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0sCisgICAg
ICAgICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KKyAgICB9LAorCisgICAgcHJlRmls
dGVyOiB7CisgICAgICAgICJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAg
bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOworCisgICAgICAg
ICAgICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBv
ciB1bnF1b3RlZAorICAgICAgICAgICAgbWF0Y2hbM10gPSAoIG1hdGNoWzRdIHx8IG1hdGNoWzVd
IHx8ICIiICkucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKKworICAgICAgICAgICAgaWYgKCBt
YXRjaFsyXSA9PT0gIn49IiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiArIG1h
dGNoWzNdICsgIiAiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2gu
c2xpY2UoIDAsIDQgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbigg
bWF0Y2ggKSB7CisgICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJd
CisgICAgICAgICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCisgICAgICAgICAgICAgICAg
MiBhcmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKKyAgICAgICAgICAg
ICAgICAzIHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQorICAgICAg
ICAgICAgICAgIDQgc2lnbiBvZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAgICAgICA1IHggb2Yg
eG4tY29tcG9uZW50CisgICAgICAgICAgICAgICAgNiBzaWduIG9mIHktY29tcG9uZW50CisgICAg
ICAgICAgICAgICAgNyB5IG9mIHktY29tcG9uZW50CisgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICBpZiAo
IG1hdGNoWzFdID09PSAibnRoIiApIHsKKyAgICAgICAgICAgICAgICAvLyBudGgtY2hpbGQgcmVx
dWlyZXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFsyXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBF
eHByLmZpbHRlci5DSElMRAorICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFsc2Uv
dHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9
ICsoIG1hdGNoWzNdID8gbWF0Y2hbNF0gKyAobWF0Y2hbNV0gfHwgMSkgOiAyICogKCBtYXRjaFsy
XSA9PT0gImV2ZW4iIHx8IG1hdGNoWzJdID09PSAib2RkIiApICk7CisgICAgICAgICAgICAgICAg
bWF0Y2hbNF0gPSArKCAoIG1hdGNoWzZdICsgbWF0Y2hbN10gKSB8fCBtYXRjaFsyXSA9PT0gIm9k
ZCIgKTsKKworICAgICAgICAgICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICBTaXp6
bGUuZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBtYXRjaDsKKyAgICAgICAgfSwKKworICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24oIG1hdGNo
ICkgeworICAgICAgICAgICAgdmFyIHVucXVvdGVkLCBleGNlc3M7CisgICAgICAgICAgICBpZiAo
IG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIG1hdGNoWzNd
ICkgeworICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hbM107CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCAodW5xdW90ZWQgPSBtYXRjaFs0XSkgKSB7CisgICAgICAgICAgICAgICAgLy8g
T25seSBjaGVjayBhcmd1bWVudHMgdGhhdCBjb250YWluIGEgcHNldWRvCisgICAgICAgICAgICAg
ICAgaWYgKCBycHNldWRvLnRlc3QodW5xdW90ZWQpICYmCisgICAgICAgICAgICAgICAgICAgIC8v
IEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCisgICAgICAgICAgICAgICAg
ICAgIChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisgICAg
ICAgICAgICAgICAgICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVk
Lmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAorICAgICAgICAgICAgICAgICAg
ICB1bnF1b3RlZCA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gdW5xdW90ZWQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUg
cHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQorICAgICAgICAgICAgcmV0
dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZmlsdGVy
OiB7CisgICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/CisgICAgICAgICAgICBmdW5j
dGlvbiggaWQgKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNo
LCAiIiApOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBpZDsKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlvbigg
aWQgKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiAp
OworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1
bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZDsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfSwKKworICAgICAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lICkg
eworICAgICAgICAgICAgaWYgKCBub2RlTmFtZSA9PT0gIioiICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICkudG9M
b3dlckNhc2UoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gbm9kZU5hbWU7CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgICJDTEFTUyI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7CisgICAgICAgICAgICB2YXIgcGF0
dGVybiA9IGNsYXNzQ2FjaGVbIGV4cGFuZG8gXVsgY2xhc3NOYW1lICsgIiAiIF07CisKKyAgICAg
ICAgICAgIHJldHVybiBwYXR0ZXJuIHx8CisgICAgICAgICAgICAgICAgKHBhdHRlcm4gPSBuZXcg
UmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0
ZXNwYWNlICsgInwkKSIgKSkgJiYKKyAgICAgICAgICAgICAgICBjbGFzc0NhY2hlKCBjbGFzc05h
bWUsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0dGVy
bi50ZXN0KCBlbGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBz
dHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8ICIiICk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkFUVFIiOiBmdW5jdGlvbigg
bmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBl
bGVtLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBTaXp6bGUuYXR0
ciggZWxlbSwgbmFtZSApOworCisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gbnVsbCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoICFvcGVyYXRvciApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICIiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09
PSAiPSIgPyByZXN1bHQgPT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3Ig
PT09ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6Cisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0Lmlu
ZGV4T2YoIGNoZWNrICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAi
JD0iID8gY2hlY2sgJiYgcmVzdWx0LnN1YnN0ciggcmVzdWx0Lmxlbmd0aCAtIGNoZWNrLmxlbmd0
aCApID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifj0iID8g
KCAiICIgKyByZXN1bHQgKyAiICIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOgorICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRvciA9PT0gInw9IiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0
LnN1YnN0ciggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisgICAgICAg
ICAgICAgICAgICAgIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICAiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgeworCisg
ICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJudGgiICkgeworICAgICAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGRpZmYs
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZmYgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbm9kZSA9IHBh
cmVudC5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYrKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtID09PSBub2RlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBJbmNvcnBv
cmF0ZSB0aGUgb2Zmc2V0IChvciBjYXN0IHRvIE5hTiksIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNs
ZSBzaXplCisgICAgICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdDsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRp
ZmYgLyBmaXJzdCA+PSAwICk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZh
ciBub2RlID0gZWxlbTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJm
aXJzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5wcmV2
aW91c1NpYmxpbmcpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5u
b2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZmlyc3Qi
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAg
ICAgICAgICAgICBjYXNlICJsYXN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
KG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgeworICAgICAgICAg
ICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisgICAgICAgICAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCisgICAg
ICAgICAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20g
cHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworICAgICAgICAgICAgLy8g
UmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcworICAgICAgICAg
ICAgdmFyIGFyZ3MsCisgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBd
IHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorICAgICAgICAg
ICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8g
KTsKKworICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5k
aWNhdGUgdGhhdAorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRl
IHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGp1c3QgYXMgU2l6emxlIGRvZXMK
KyAgICAgICAgICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZm4oIGFyZ3VtZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEJ1dCBt
YWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAgICAgICAgaWYgKCBmbi5s
ZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAi
IiwgYXJndW1lbnQgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhh
c093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKyAgICAgICAgICAgICAgICAg
ICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVk
ID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9
IG1hdGNoZWQubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVkLCBt
YXRjaGVkW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFsgaWR4IF0gPSAh
KCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfSkgOgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbiggZWxlbSwgMCwg
YXJncyApOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gZm47CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHNldWRvczogeworICAg
ICAgICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAg
ICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCisgICAgICAgICAgICAv
LyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgICAgICAgICAgLy8g
c3BhY2VzIGFzIGNvbWJpbmF0b3JzCisgICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKKyAgICAg
ICAgICAgICAgICByZXN1bHRzID0gW10sCisgICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNvbXBp
bGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKKworICAgICAgICAgICAgcmV0
dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/CisgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1
bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0Y2hl
ciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNl
ZWQubGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0
Y2hlZCBieSBgbWF0Y2hlcmAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQs
IHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOworICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICB9KSwKKworICAgICAgICAiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7CisgICAg
ICAgICAgICB9OworICAgICAgICB9KSwKKworICAgICAgICAiY29udGFpbnMiOiBtYXJrRnVuY3Rp
b24oZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlu
bmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgICJlbmFibGVkIjogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7CisgICAg
ICAgIH0sCisKKyAgICAgICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAg
ICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gSW4gQ1NTMywg
OmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRz
CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVj
dG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIChub2RlTmFtZSA9PT0g
ImlucHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAh
IWVsZW0uc2VsZWN0ZWQpOworICAgICAgICB9LAorCisgICAgICAgICJzZWxlY3RlZCI6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFr
ZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkg
d29yayBwcm9wZXJseQorICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAg
ICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworICAgICAgICB9
LAorCisgICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJl
dHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbworICAgICAgICAgICAgLy8gOmVtcHR5
IGlzIG9ubHkgYWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2RlcyhpbmNs
dWRpbmcgdGV4dCgzKSwgY2RhdGEoNCkpLAorICAgICAgICAgICAgLy8gICBub3QgY29tbWVudCwg
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIG9yIG90aGVycworICAgICAgICAgICAgLy8gVGhhbmtz
IHRvIERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0Y3V0CisgICAgICAgICAgICAv
LyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxwaGEgY2hhcmFjdGVycyAoc3BlY2lmaWNhbGx5
IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIpCisgICAgICAgICAgICB2YXIgbm9kZVR5cGU7
CisgICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOworICAgICAgICAgICAgd2hpbGUg
KCBlbGVtICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSA+ICJAIiB8fCAo
bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlKSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbGVtID0gZWxlbS5uZXh0U2libGluZzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisgICAgICAgICJoZWFkZXIiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9k
ZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAidGV4dCI6IGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgdmFyIHR5cGUsIGF0dHI7CisgICAgICAgICAgICAvLyBJRTYgYW5kIDcg
d2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFyY2gs
IGV0YykKKyAgICAgICAgICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0IHRo
aXMgY2FzZQorICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9
PT0gImlucHV0IiAmJgorICAgICAgICAgICAgICAgICh0eXBlID0gZWxlbS50eXBlKSA9PT0gInRl
eHQiICYmCisgICAgICAgICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBl
IikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSB0eXBlICk7CisgICAgICAgIH0s
CisKKyAgICAgICAgLy8gSW5wdXQgdHlwZXMKKyAgICAgICAgInJhZGlvIjogY3JlYXRlSW5wdXRQ
c2V1ZG8oInJhZGlvIiksCisgICAgICAgICJjaGVja2JveCI6IGNyZWF0ZUlucHV0UHNldWRvKCJj
aGVja2JveCIpLAorICAgICAgICAiZmlsZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJmaWxlIiksCisg
ICAgICAgICJwYXNzd29yZCI6IGNyZWF0ZUlucHV0UHNldWRvKCJwYXNzd29yZCIpLAorICAgICAg
ICAiaW1hZ2UiOiBjcmVhdGVJbnB1dFBzZXVkbygiaW1hZ2UiKSwKKworICAgICAgICAic3VibWl0
IjogY3JlYXRlQnV0dG9uUHNldWRvKCJzdWJtaXQiKSwKKyAgICAgICAgInJlc2V0IjogY3JlYXRl
QnV0dG9uUHNldWRvKCJyZXNldCIpLAorCisgICAgICAgICJidXR0b24iOiBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
OworICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSAi
YnV0dG9uIiB8fCBuYW1lID09PSAiYnV0dG9uIjsKKyAgICAgICAgfSwKKworICAgICAgICAiaW5w
dXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRlc3Qo
IGVsZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiZm9jdXMiOiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jLmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2MuaGFz
Rm9jdXMgfHwgZG9jLmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwg
fmVsZW0udGFiSW5kZXgpOworICAgICAgICB9LAorCisgICAgICAgICJhY3RpdmUiOiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1l
bnQuYWN0aXZlRWxlbWVudDsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBQb3NpdGlvbmFsIHR5
cGVzCisgICAgICAgICJmaXJzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICByZXR1cm4gWyAwIF07CisgICAgICAgIH0pLAorCisgICAgICAgICJsYXN0
IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgg
KSB7CisgICAgICAgICAgICByZXR1cm4gWyBsZW5ndGggLSAxIF07CisgICAgICAgIH0pLAorCisg
ICAgICAgICJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhl
cywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHJldHVybiBbIGFyZ3VtZW50IDwg
MCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTsKKyAgICAgICAgfSksCisKKyAgICAg
ICAgImV2ZW4iOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMs
IGxlbmd0aCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSAr
PSAyICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKwor
ICAgICAgICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRl
eGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCBsZW5ndGg7
IGkgKz0gMiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSks
CisKKyAgICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJ
bmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkgPSBh
cmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyAtLWkgPj0gMDsgKSB7
CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAgICAg
ICJndCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVu
Z3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQgPCAw
ID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsgKytpIDwgbGVuZ3RoOyApIHsKKyAgICAg
ICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSkKKyAgICB9Cit9OworCitmdW5j
dGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIsIHJldCApIHsKKyAgICBpZiAoIGEgPT09IGIgKSB7Cisg
ICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgdmFyIGN1ciA9IGEubmV4dFNpYmxpbmc7
CisKKyAgICB3aGlsZSAoIGN1ciApIHsKKyAgICAgICAgaWYgKCBjdXIgPT09IGIgKSB7CisgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXIubmV4dFNp
Ymxpbmc7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK3NvcnRPcmRlciA9IGRvY0VsZW0u
Y29tcGFyZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAg
ICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKCAhYS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/CisgICAg
ICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIDoKKyAgICAgICAgICAgIGEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oYikgJiA0CisgICAgICAgICkgPyAtMSA6IDE7CisgICAgfSA6Cisg
ICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRpY2Fs
LCB3ZSBjYW4gZXhpdCBlYXJseQorICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAg
ICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWlsYWJs
ZSBvbiBib3RoIG5vZGVzCisgICAgICAgIH0gZWxzZSBpZiAoIGEuc291cmNlSW5kZXggJiYgYi5z
b3VyY2VJbmRleCApIHsKKyAgICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3Vy
Y2VJbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBhbCwgYmwsCisgICAgICAgICAgICBh
cCA9IFtdLAorICAgICAgICAgICAgYnAgPSBbXSwKKyAgICAgICAgICAgIGF1cCA9IGEucGFyZW50
Tm9kZSwKKyAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKKyAgICAgICAgICAgIGN1ciA9
IGF1cDsKKworICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVudGlj
YWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAgIGlmICggYXVwID09PSBidXAgKSB7
CisgICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7CisKKyAgICAgICAgLy8g
SWYgbm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRoZW4gdGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0ZWQK
KyAgICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwor
ICAgICAgICB9IGVsc2UgaWYgKCAhYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPdGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBpbiB0
aGUgdHJlZSBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0IG9m
IHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgorICAgICAgICB3aGlsZSAoIGN1ciApIHsK
KyAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOworICAgICAgICAgICAgY3VyID0gY3VyLnBh
cmVudE5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBidXA7CisKKyAgICAgICAgd2hp
bGUgKCBjdXIgKSB7CisgICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKKyAgICAgICAgICAg
IGN1ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAgYWwgPSBhcC5sZW5n
dGg7CisgICAgICAgIGJsID0gYnAubGVuZ3RoOworCisgICAgICAgIC8vIFN0YXJ0IHdhbGtpbmcg
ZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5CisgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IGFsICYmIGkgPCBibDsgaSsrICkgeworICAgICAgICAgICAgaWYgKCBhcFtp
XSAhPT0gYnBbaV0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYXBb
aV0sIGJwW2ldICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBl
bmRlZCBzb21lcGxhY2UgdXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCisgICAgICAg
IHJldHVybiBpID09PSBhbCA/CisgICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ldLCAt
MSApIDoKKyAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKKyAgICB9Owor
CisvLyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlmIHNvcnQgZG9l
c24ndAorLy8gcGFzcyB0aGVtIHRvIG91ciBjb21wYXJpc29uIGZ1bmN0aW9uIChhcyBpbiBHb29n
bGUgQ2hyb21lKS4KK1swLCAwXS5zb3J0KCBzb3J0T3JkZXIgKTsKK2Jhc2VIYXNEdXBsaWNhdGUg
PSAhaGFzRHVwbGljYXRlOworCisvLyBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBs
aWNhdGVzCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworICAgIHZh
ciBlbGVtLAorICAgICAgICBkdXBsaWNhdGVzID0gW10sCisgICAgICAgIGkgPSAxLAorICAgICAg
ICBqID0gMDsKKworICAgIGhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7CisgICAgcmVz
dWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKKworICAgIGlmICggaGFzRHVwbGljYXRlICkgeworICAg
ICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAgIGlm
ICggZWxlbSA9PT0gcmVzdWx0c1sgaSAtIDEgXSApIHsKKyAgICAgICAgICAgICAgICBqID0gZHVw
bGljYXRlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hp
bGUgKCBqLS0gKSB7CisgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBd
LCAxICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0czsKK307CisKK1Np
enpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCAiU3lu
dGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsKKworZnVu
Y3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisgICAgdmFyIG1hdGNoZWQs
IG1hdGNoLCB0b2tlbnMsIHR5cGUsCisgICAgICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMs
CisgICAgICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAiICIg
XTsKKworICAgIGlmICggY2FjaGVkICkgeworICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8gMCA6
IGNhY2hlZC5zbGljZSggMCApOworICAgIH0KKworICAgIHNvRmFyID0gc2VsZWN0b3I7CisgICAg
Z3JvdXBzID0gW107CisgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisgICAgd2hp
bGUgKCBzb0ZhciApIHsKKworICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVuCisgICAgICAg
IGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgeworICAg
ICAgICAgICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25zdW1l
IHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZAorICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIu
c2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZ3JvdXBzLnB1c2goIHRva2VucyA9IFtdICk7CisgICAgICAgIH0KKworICAgICAgICBt
YXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgLy8gQ29tYmluYXRvcnMKKyAgICAgICAgaWYgKCAo
bWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7CisgICAgICAgICAgICB0b2tl
bnMucHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQoKSApICk7CisgICAgICAg
ICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworCisgICAgICAgICAg
ICAvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKyAgICAgICAgICAgIG1h
dGNoZWQudHlwZSA9IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZpbHRlcnMKKyAgICAgICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciAp
IHsKKyAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29G
YXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKKyAgICAgICAgICAgICAgICAobWF0Y2gg
PSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKKworICAgICAgICAgICAgICAgIHRv
a2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKKyAgICAg
ICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAgICAg
ICAgICAgICAgIG1hdGNoZWQudHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgbWF0Y2hlZC5t
YXRjaGVzID0gbWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ICFtYXRjaGVkICkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKKyAgICAvLyBpZiB3
ZSdyZSBqdXN0IHBhcnNpbmcKKyAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJl
dHVybiB0b2tlbnMKKyAgICByZXR1cm4gcGFyc2VPbmx5ID8KKyAgICAgICAgc29GYXIubGVuZ3Ro
IDoKKyAgICAgICAgc29GYXIgPworICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3RvciAp
IDoKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKKyAgICAgICAgICAgIHRva2VuQ2Fj
aGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfQorCitmdW5jdGlvbiBhZGRDb21i
aW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkgeworICAgIHZhciBkaXIgPSBjb21i
aW5hdG9yLmRpciwKKyAgICAgICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgY29tYmluYXRv
ci5kaXIgPT09ICJwYXJlbnROb2RlIiwKKyAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7CisKKyAg
ICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/CisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgY2xv
c2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAorICAgICAgICBmdW5jdGlvbiggZWxlbSwg
Y29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBd
KSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2Rl
VHlwZSA9PT0gMSAgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKCBlbGVt
LCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gOgorCisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGlu
ZyBlbGVtZW50cworICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAg
ICAgICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28g
dGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmcKKyAgICAgICAgICAgIGlmICggIXht
bCApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgIGRp
cmtleSA9IGRpcnJ1bnMgKyAiICIgKyBkb25lTmFtZSArICIgIiwKKyAgICAgICAgICAgICAgICAg
ICAgY2FjaGVka2V5ID0gZGlya2V5ICsgY2FjaGVkcnVuczsKKyAgICAgICAgICAgICAgICB3aGls
ZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNo
ZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKGNhY2hlID0gZWxlbVsgZXhwYW5kbyBdKSA9PT0gY2FjaGVka2V5ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNpenNldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBjYWNoZSA9PT0gInN0cmluZyIg
JiYgY2FjaGUuaW5kZXhPZihkaXJrZXkpID09PSAwICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZWxlbS5zaXpzZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgZXhwYW5kbyBdID0gY2FjaGVka2V5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBl
bGVtWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50
cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKK30KKworZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworICAgIHJldHVy
biBtYXRjaGVycy5sZW5ndGggPiAxID8KKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQs
IHhtbCApIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0oIGVs
ZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0gOgorICAgICAgICBtYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24gY29u
ZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKyAgICB2YXIg
ZWxlbSwKKyAgICAgICAgbmV3VW5tYXRjaGVkID0gW10sCisgICAgICAgIGkgPSAwLAorICAgICAg
ICBsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAorICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVsbDsK
KworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBpZiAoIChlbGVtID0gdW5t
YXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0s
IGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBl
bGVtICk7CisgICAgICAgICAgICAgICAgaWYgKCBtYXBwZWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1hcC5wdXNoKCBpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rpb24g
c2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9z
dEZpbmRlciwgcG9zdFNlbGVjdG9yICkgeworICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZp
bHRlclsgZXhwYW5kbyBdICkgeworICAgICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9z
dEZpbHRlciApOworICAgIH0KKyAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4
cGFuZG8gXSApIHsKKyAgICAgICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIs
IHBvc3RTZWxlY3RvciApOworICAgIH0KKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9u
KCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgIHZhciB0ZW1wLCBpLCBl
bGVtLAorICAgICAgICAgICAgcHJlTWFwID0gW10sCisgICAgICAgICAgICBwb3N0TWFwID0gW10s
CisgICAgICAgICAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisgICAgICAgICAg
ICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorICAgICAgICAg
ICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29u
dGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworICAgICAgICAg
ICAgLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZv
ciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCisgICAgICAgICAgICBtYXRjaGVySW4gPSBw
cmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBjb25k
ZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAgICAg
ICAgICAgICAgZWxlbXMsCisKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KKyAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2Vl
ZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorICAgICAg
ICAgICAgICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3Rpbmcg
fHwgcG9zdEZpbHRlciApID8KKworICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1lZGlh
dGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgW10gOgorCisg
ICAgICAgICAgICAgICAgICAgIC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHRzIDoKKyAgICAgICAgICAgICAgICBtYXRjaGVySW47
CisKKyAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKKyAgICAgICAgaWYgKCBtYXRjaGVy
ICkgeworICAgICAgICAgICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0
LCB4bWwgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKKyAgICAg
ICAgaWYgKCBwb3N0RmlsdGVyICkgeworICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRj
aGVyT3V0LCBwb3N0TWFwICk7CisgICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29u
dGV4dCwgeG1sICk7CisKKyAgICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMg
YnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KKyAgICAgICAgICAgIGkgPSB0ZW1wLmxl
bmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICgg
KGVsZW0gPSB0ZW1wW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsgcG9z
dE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VlZCAp
IHsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgeworICAgICAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRv
IHBvc3RGaW5kZXIgY29udGV4dHMKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOworICAg
ICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9
IG1hdGNoZXJPdXRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3Rv
cmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwg
eG1sICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTW92ZSBtYXRj
aGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6
ZWQKKyAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRj
aGVyT3V0W2ldKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0RmluZGVy
ID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVt
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0Rmlu
ZGVyIGlmIGRlZmluZWQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoZXJPdXQg
PSBjb25kZW5zZSgKKyAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8KKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVy
T3V0Lmxlbmd0aCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAorICAgICAgICAg
ICAgKTsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAgICBw
b3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91
dCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIG1h
dGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7CisgICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hl
ciwgaiwKKyAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgbGVhZGluZ1JlbGF0
aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKyAgICAgICAgaW1wbGljaXRS
ZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisgICAgICAg
IGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwKKworICAgICAgICAvLyBUaGUgZm91bmRhdGlv
bmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3At
bGV2ZWwgY29udGV4dChzKQorICAgICAgICBtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBjaGVja0NvbnRl
eHQ7CisgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAgICAgICAgbWF0Y2hB
bnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOworICAgICAg
ICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoZXJzID0gWyBmdW5j
dGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgcmV0dXJuICggIWxlYWRp
bmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8
fCAoCisgICAgICAgICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID8K
KyAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6
CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1s
ICkgKTsKKyAgICAgICAgfSBdOworCisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAg
ICAgIGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsK
KyAgICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlcigg
bWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
YXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vu
c1tpXS5tYXRjaGVzICk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2Vl
aW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCisgICAgICAgICAgICBpZiAoIG1hdGNoZXJbIGV4cGFu
ZG8gXSApIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJh
dG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBqID0gKytp
OworICAgICAgICAgICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigKKyAgICAgICAgICAg
ICAgICAgICAgaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCisgICAgICAgICAg
ICAgICAgICAgIGkgPiAxICYmIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5qb2luKCIiKS5yZXBs
YWNlKCBydHJpbSwgIiQxIiApLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyLAorICAgICAg
ICAgICAgICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBp
LCBqICkgKSwKKyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2Vu
cyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAorICAgICAgICAgICAgICAgICAgICBq
IDwgbGVuICYmIHRva2Vucy5qb2luKCIiKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0
aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVy
cyApIHsKKyAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAorICAgICAgICBi
eUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKKyAgICAgICAgc3VwZXJNYXRj
aGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgZXhwYW5kQ29udGV4
dCApIHsKKyAgICAgICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAorICAgICAgICAgICAgICAg
IHNldE1hdGNoZWQgPSBbXSwKKyAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAorICAg
ICAgICAgICAgICAgIGkgPSAiMCIsCisgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2VlZCAm
JiBbXSwKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3QgPSBleHBhbmRDb250ZXh0ICE9IG51bGws
CisgICAgICAgICAgICAgICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisgICAg
ICAgICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBv
ciBjb250ZXh0CisgICAgICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBF
eHByLmZpbmRbIlRBRyJdKCAiKiIsIGV4cGFuZENvbnRleHQgJiYgY29udGV4dC5wYXJlbnROb2Rl
IHx8IGNvbnRleHQgKSwKKyAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgbWF0Y2hlcnMgc2hvdWxk
IHVzZSBub24taW50ZWdlciBkaXJydW5zCisgICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1ZSA9
IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLkUpOworCisgICAg
ICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250
ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYgY29udGV4dDsKKyAgICAgICAgICAgICAgICBj
YWNoZWRydW5zID0gc3VwZXJNYXRjaGVyLmVsOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVz
dWx0cworICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2pdKTsg
aisrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250
ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2go
IGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBk
aXJydW5zVW5pcXVlOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkcnVucyA9ICsrc3Vw
ZXJNYXRjaGVyLmVsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmls
dGVycworICAgICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50LS07CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5
IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90CisgICAgICAgICAgICAgICAgICAgIGlmICggc2VlZCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cworICAg
ICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7CisgICAgICAgICAgICBpZiAoIGJ5U2V0ICYmIGkg
IT09IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1hdGNo
ZXIgPSBzZXRNYXRjaGVyc1tqXSk7IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9y
IHNvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCBy
ZXN1bHRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1h
dGNoZXMKKyAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRj
aGVkICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIG1hdGNo
ZXMgdG8gcmVzdWx0cworICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1h
dGNoZWQgKTsKKworICAgICAgICAgICAgICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2Nl
ZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZworICAg
ICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3Ro
ID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJz
Lmxlbmd0aCApID4gMSApIHsKKworICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVlU29y
dCggcmVzdWx0cyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNo
ZXJzCisgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBkaXJy
dW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0g
Y29udGV4dEJhY2t1cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVubWF0
Y2hlZDsKKyAgICAgICAgfTsKKworICAgIHN1cGVyTWF0Y2hlci5lbCA9IDA7CisgICAgcmV0dXJu
IGJ5U2V0ID8KKyAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6CisgICAgICAg
IHN1cGVyTWF0Y2hlcjsKK30KKworY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24o
IHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKKyAgICB2YXIgaSwK
KyAgICAgICAgc2V0TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAgZWxlbWVudE1hdGNoZXJzID0gW10s
CisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAi
ICIgXTsKKworICAgIGlmICggIWNhY2hlZCApIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgYSBmdW5j
dGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFj
aCBlbGVtZW50CisgICAgICAgIGlmICggIWdyb3VwICkgeworICAgICAgICAgICAgZ3JvdXAgPSB0
b2tlbml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpID0gZ3JvdXAubGVuZ3Ro
OworICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNoZXJG
cm9tVG9rZW5zKCBncm91cFtpXSApOworICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFuZG8g
XSApIHsKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNh
Y2hlZCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FjaGUgdGhl
IGNvbXBpbGVkIGZ1bmN0aW9uCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVj
dG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hl
cnMgKSApOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVkOworfTsKKworZnVuY3Rpb24gbXVsdGlw
bGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworICAgIHZhciBpID0g
MCwKKyAgICAgICAgbGVuID0gY29udGV4dHMubGVuZ3RoOworICAgIGZvciAoIDsgaSA8IGxlbjsg
aSsrICkgeworICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyAp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gc2VsZWN0KCBzZWxl
Y3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkgeworICAgIHZhciBpLCB0b2tlbnMs
IHRva2VuLCB0eXBlLCBmaW5kLAorICAgICAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciAp
LAorICAgICAgICBqID0gbWF0Y2gubGVuZ3RoOworCisgICAgaWYgKCAhc2VlZCApIHsKKyAgICAg
ICAgLy8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgZ3Jv
dXAKKyAgICAgICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7CisKKyAgICAgICAgICAgIC8v
IFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVjdG9y
IGlzIGFuIElECisgICAgICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNl
KCAwICk7CisgICAgICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRv
a2Vuc1swXSkudHlwZSA9PT0gIklEIiAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5v
ZGVUeXBlID09PSA5ICYmICF4bWwgJiYKKyAgICAgICAgICAgICAgICAgICAgRXhwci5yZWxhdGl2
ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHsKKworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBFeHBy
LmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKSwg
Y29udGV4dCwgeG1sIClbMF07CisgICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCku
bGVuZ3RoICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZldGNoIGEgc2VlZCBz
ZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKKyAgICAgICAgICAgIGZvciAoIGkgPSBtYXRj
aEV4cHJbIlBPUyJdLnRlc3QoIHNlbGVjdG9yICkgPyAtMSA6IHRva2Vucy5sZW5ndGggLSAxOyBp
ID49IDA7IGktLSApIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKworICAg
ICAgICAgICAgICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKKyAgICAgICAgICAg
ICAgICBpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5h
dG9ycworICAgICAgICAgICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkg
JiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB4bWwKKyAgICAgICAgICAgICAgICAgICAgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVy
biBlYXJseQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNwbGljZSggaSwgMSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b2tlbnMu
am9pbigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxs
KCBzZWVkLCAwICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21waWxlIGFuZCBleGVjdXRlIGEg
ZmlsdGVyaW5nIGZ1bmN0aW9uCisgICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9r
ZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorICAgIGNvbXBpbGUo
IHNlbGVjdG9yLCBtYXRjaCApKAorICAgICAgICBzZWVkLAorICAgICAgICBjb250ZXh0LAorICAg
ICAgICB4bWwsCisgICAgICAgIHJlc3VsdHMsCisgICAgICAgIHJzaWJsaW5nLnRlc3QoIHNlbGVj
dG9yICkKKyAgICApOworICAgIHJldHVybiByZXN1bHRzOworfQorCitpZiAoIGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwgKSB7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZGlzY29u
bmVjdGVkTWF0Y2gsCisgICAgICAgICAgICBvbGRTZWxlY3QgPSBzZWxlY3QsCisgICAgICAgICAg
ICByZXNjYXBlID0gLyd8XFwvZywKKyAgICAgICAgICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSAvXD1b
XHgyMFx0XHJcblxmXSooW14nIlxdXSopW1x4MjBcdFxyXG5cZl0qXF0vZywKKworICAgICAgICAg
ICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSksIG5v
IG5lZWQgdG8gYWxzbyBhZGQgdG8gYnVnZ3lNYXRjaGVzIHNpbmNlIG1hdGNoZXMgY2hlY2tzIGJ1
Z2d5UVNBCisgICAgICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBt
dWNoIGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCisgICAgICAgICAgICByYnVn
Z3lRU0EgPSBbICI6Zm9jdXMiIF0sCisKKyAgICAgICAgICAgIC8vIG1hdGNoZXNTZWxlY3Rvcig6
YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCisgICAgICAg
ICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBtdWNoIGNvZGUgKHdvdWxk
IGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCisgICAgICAgICAgICAvLyBqdXN0IHNraXAgbWF0Y2hl
c1NlbGVjdG9yIGZvciA6YWN0aXZlCisgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gWyAiOmFj
dGl2ZSIgXSwKKyAgICAgICAgICAgIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXNTZWxlY3RvciB8
fAorICAgICAgICAgICAgICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8CisgICAgICAg
ICAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAg
ICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAgICBkb2NFbGVtLm1z
TWF0Y2hlc1NlbGVjdG9yOworCisgICAgICAgIC8vIEJ1aWxkIFFTQSByZWdleAorICAgICAgICAv
LyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCisgICAgICAgIGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgLy8gU2VsZWN0IGlzIHNldCB0byBlbXB0
eSBzdHJpbmcgb24gcHVycG9zZQorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3Mg
dHJlYXRtZW50IG9mIG5vdCBleHBsaWN0bHkKKyAgICAgICAgICAgIC8vIHNldHRpbmcgYSBib29s
ZWFuIGNvbnRlbnQgYXR0cmlidXRlLAorICAgICAgICAgICAgLy8gc2luY2UgaXRzIHByZXNlbmNl
IHNob3VsZCBiZSBlbm91Z2gKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20v
dGlja2V0LzEyMzU5CisgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PG9wdGlv
biBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisgICAgICAgICAgICAvLyBJRTgg
LSBTb21lIGJvb2xlYW4gYXR0cmlidXRlcyBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5CisgICAg
ICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCAp
IHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNlICsg
IiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZh
bHVlKSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJhIC0g
OmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAgICAg
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEw
OTI5LyNjaGVja2VkCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgKGRvIG5v
dCBwdXQgdGVzdHMgYWZ0ZXIgdGhpcyBvbmUpCisgICAgICAgICAgICBpZiAoICFkaXYucXVlcnlT
ZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5
UVNBLnB1c2goIjpjaGVja2VkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
ICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCisgICAgICAgICAgICAvLyBPcGVyYSAxMC0x
Mi9JRTkgLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCisgICAgICAgICAgICAvLyBTaG91bGQg
bm90IHNlbGVjdCBhbnl0aGluZworICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCB0ZXN0
PScnPjwvcD4iOworICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW3Rlc3Re
PScnXSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRd
PSIgKyB3aGl0ZXNwYWNlICsgIiooPzpcIlwifCcnKSIgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVu
dHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZCkKKyAgICAgICAgICAgIC8vIElF
OCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkKKyAg
ICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRlbicvPiI7CisgICAg
ICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggKSB7
CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyByYnVnZ3lRU0EgYWx3
YXlzIGNvbnRhaW5zIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKKyAgICAg
ICAgcmJ1Z2d5UVNBID0gLyogcmJ1Z2d5UVNBLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCByYnVn
Z3lRU0Euam9pbigifCIpICk7CisKKyAgICAgICAgc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9y
LCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7CisgICAgICAgICAgICAvLyBPbmx5IHVz
ZSBxdWVyeVNlbGVjdG9yQWxsIHdoZW4gbm90IGZpbHRlcmluZywKKyAgICAgICAgICAgIC8vIHdo
ZW4gdGhpcyBpcyBub3QgeG1sLAorICAgICAgICAgICAgLy8gYW5kIHdoZW4gbm8gUVNBIGJ1Z3Mg
YXBwbHkKKyAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIXhtbCAmJiAhcmJ1Z2d5UVNBLnRlc3Qo
IHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICAgICAgdmFyIGdyb3VwcywgaSwKKyAgICAgICAg
ICAgICAgICAgICAgb2xkID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbmlkID0gZXhwYW5k
bywKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgIG5ld1NlbGVjdG9yID0gY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3Rv
cjsKKworICAgICAgICAgICAgICAgIC8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1y
b290ZWQgcXVlcmllcworICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0aGlz
IGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAv
LyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3Ig
dGhlIHRlY2huaXF1ZSkKKyAgICAgICAgICAgICAgICAvLyBJRSA4IGRvZXNuJ3Qgd29yayBvbiBv
YmplY3QgZWxlbWVudHMKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUgPT09
IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikpICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUsICJc
XCQmIiApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQgKyAiJ10gIjsK
KworICAgICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaV0g
PSBuaWQgKyBncm91cHNbaV0uam9pbigiIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYg
Y29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIG5ld1Nl
bGVjdG9yID0gZ3JvdXBzLmpvaW4oIiwiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoIG5ld1NlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbCgg
bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1NlbGVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICApLCAwICkgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoKHFzYUVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBvbGRTZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCBy
ZXN1bHRzLCBzZWVkLCB4bWwgKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIG1hdGNoZXMg
KSB7CisgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IK
KyAgICAgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQorICAgICAg
ICAgICAgICAgIGRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7
CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9u
CisgICAgICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2Ug
aW5zdGVhZAorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZXMuY2FsbCggZGl2LCAiW3Rlc3QhPScnXTpzaXp6bGUiICk7CisgICAgICAgICAgICAgICAgICAg
IHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworICAgICAgICAgICAgICAgIH0g
Y2F0Y2ggKCBlICkge30KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyByYnVnZ3lN
YXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlIGFuZCA6Zm9jdXMsIHNvIG5vIG5lZWQgZm9y
IGEgbGVuZ3RoIGNoZWNrCisgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gLyogcmJ1Z2d5TWF0
Y2hlcy5sZW5ndGggJiYgKi8gbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsK
KworICAgICAgICAgICAgU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBl
eHByICkgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxl
Y3RvcnMgYXJlIHF1b3RlZAorICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIHJh
dHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKyAgICAgICAgICAgICAgICAvLyByYnVnZ3lN
YXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlLCBzbyBubyBuZWVkIGZvciBhbiBleGlzdGVu
Y2UgY2hlY2sKKyAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCggZWxlbSApICYmICFyYnVnZ3lN
YXRjaGVzLnRlc3QoIGV4cHIgKSAmJiAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBt
YXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rl
cworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwgZGlzY29ubmVjdGVkTWF0Y2gg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29ubmVj
dGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDEx
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxs
LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9OworICAgICAgICB9
CisgICAgfSkoKTsKK30KKworLy8gRGVwcmVjYXRlZAorRXhwci5wc2V1ZG9zWyJudGgiXSA9IEV4
cHIucHNldWRvc1siZXEiXTsKKworLy8gQmFjay1jb21wYXQKK2Z1bmN0aW9uIHNldEZpbHRlcnMo
KSB7fQorRXhwci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVkb3M7
CitFeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOworCisvLyBPdmVycmlkZSBzaXp6
bGUgYXR0cmlidXRlIHJldHJpZXZhbAorU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjsKK2pRdWVy
eS5maW5kID0gU2l6emxlOworalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOworalF1ZXJ5
LmV4cHJbIjoiXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CitqUXVlcnkudW5pcXVlID0gU2l6emxl
LnVuaXF1ZVNvcnQ7CitqUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5LmlzWE1M
RG9jID0gU2l6emxlLmlzWE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwor
CisKK30pKCB3aW5kb3cgKTsKK3ZhciBydW50aWwgPSAvVW50aWwkLywKKyAgICBycGFyZW50c3By
ZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKyAgICBpc1NpbXBsZSA9IC9e
LlteOiNcW1wuLF0qJC8sCisgICAgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5l
ZWRzQ29udGV4dCwKKyAgICAvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1
ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAorICAgIGd1YXJhbnRlZWRVbmlx
dWUgPSB7CisgICAgICAgIGNoaWxkcmVuOiB0cnVlLAorICAgICAgICBjb250ZW50czogdHJ1ZSwK
KyAgICAgICAgbmV4dDogdHJ1ZSwKKyAgICAgICAgcHJldjogdHJ1ZQorICAgIH07CisKK2pRdWVy
eS5mbi5leHRlbmQoeworICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAg
dmFyIGksIGwsIGxlbmd0aCwgbiwgciwgcmV0LAorICAgICAgICAgICAgc2VsZiA9IHRoaXM7CisK
KyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCAiIiwgImZpbmQiLCBzZWxlY3RvciApOwor
CisgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Cisg
ICAgICAgICAgICBsZW5ndGggPSByZXQubGVuZ3RoOworICAgICAgICAgICAgalF1ZXJ5LmZpbmQo
IHNlbGVjdG9yLCB0aGlzW2ldLCByZXQgKTsKKworICAgICAgICAgICAgaWYgKCBpID4gMCApIHsK
KyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5pcXVl
CisgICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4rKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShuLS0sIDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgaGFzOiBmdW5jdGlvbigg
dGFyZ2V0ICkgeworICAgICAgICB2YXIgaSwKKyAgICAgICAgICAgIHRhcmdldHMgPSBqUXVlcnko
IHRhcmdldCwgdGhpcyApLAorICAgICAgICAgICAgbGVuID0gdGFyZ2V0cy5sZW5ndGg7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm9yICgg
aSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250
YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH0sCisKKyAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNlbGVj
dG9yKTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwg
ImZpbHRlciIsIHNlbGVjdG9yICk7CisgICAgfSwKKworICAgIGlzOiBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7CisgICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICgKKyAgICAgICAgICAgIHR5cGVv
ZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSBy
ZXR1cm5lZCBzZXQKKyAgICAgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6bGFz
dCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisgICAgICAgICAg
ICAgICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkuaW5kZXgoIHRoaXNbMF0gKSA+PSAw
IDoKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5s
ZW5ndGggPiAwIDoKKyAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciggc2VsZWN0b3IgKS5sZW5n
dGggPiAwICk7CisgICAgfSwKKworICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNv
bnRleHQgKSB7CisgICAgICAgIHZhciBjdXIsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAg
ICAgIGwgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAg
cG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3Jz
ICE9PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRl
eHQgfHwgdGhpcy5jb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIDA7CisKKyAgICAgICAgZm9y
ICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgY3VyID0gdGhpc1tpXTsKKworICAgICAg
ICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250ZXh0
ICYmIGN1ci5ub2RlVHlwZSAhPT0gMTEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBwb3MgPyBw
b3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2Vs
ZWN0b3JzKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXQgPSByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OworCisg
ICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9ycyAp
OworICAgIH0sCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQg
d2l0aGluCisgICAgLy8gdGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCisgICAgaW5kZXg6IGZ1
bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXgg
aW4gcGFyZW50CisgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gKCB0
aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxsKCkubGVuZ3RoIDog
LTE7CisgICAgICAgIH0KKworICAgICAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgorICAgICAgICBp
ZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuaW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAorICAgICAg
ICByZXR1cm4galF1ZXJ5LmluQXJyYXkoCisgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBh
IGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKKyAgICAgICAgICAgIGVs
ZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKKyAgICB9LAorCisgICAgYWRkOiBm
dW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAgICAgIHZhciBzZXQgPSB0eXBlb2Yg
c2VsZWN0b3IgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9y
LCBjb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9y
ICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSwKKyAgICAg
ICAgICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7CisKKyAgICAgICAg
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNEaXNj
b25uZWN0ZWQoIGFsbFswXSApID8KKyAgICAgICAgICAgIGFsbCA6CisgICAgICAgICAgICBqUXVl
cnkudW5pcXVlKCBhbGwgKSApOworICAgIH0sCisKKyAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/Cisg
ICAgICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNlbGVj
dG9yKQorICAgICAgICApOworICAgIH0KK30pOworCitqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVy
eS5mbi5hZGRCYWNrOworCisvLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFu
IGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCisvLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBp
bXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgorZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5vZGUg
KSB7CisgICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJlbnRO
b2RlLm5vZGVUeXBlID09PSAxMTsKK30KKworZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7
CisgICAgZG8geworICAgICAgICBjdXIgPSBjdXJbIGRpciBdOworICAgIH0gd2hpbGUgKCBjdXIg
JiYgY3VyLm5vZGVUeXBlICE9PSAxICk7CisKKyAgICByZXR1cm4gY3VyOworfQorCitqUXVlcnku
ZWFjaCh7CisgICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIHBhcmVu
dCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9k
ZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKyAgICB9LAorICAgIHBhcmVudHM6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5v
ZGUiICk7CisgICAgfSwKKyAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRp
bCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50
aWwgKTsKKyAgICB9LAorICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1
cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldjogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNT
aWJsaW5nIiApOworICAgIH0sCisgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisgICAgfSwKKyAg
ICBwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIo
IGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0VW50aWw6IGZ1bmN0
aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0s
ICJuZXh0U2libGluZyIsIHVudGlsICk7CisgICAgfSwKKyAgICBwcmV2VW50aWw6IGZ1bmN0aW9u
KCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJw
cmV2aW91c1NpYmxpbmciLCB1bnRpbCApOworICAgIH0sCisgICAgc2libGluZ3M6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJlbnRO
b2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOworICAgIH0sCisgICAgY2hpbGRyZW46IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmly
c3RDaGlsZCApOworICAgIH0sCisgICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KKyAgICAgICAg
ICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVudCA6
CisgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKyAgICB9
Cit9LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggdW50aWwsIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCgg
dGhpcywgZm4sIHVudGlsICk7CisKKyAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSAp
IHsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUg
XSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OworCisgICAgICAgIGlmICggdGhpcy5sZW5n
dGggPiAxICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICByZXQg
PSByZXQucmV2ZXJzZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0
YWNrKCByZXQsIG5hbWUsIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkuam9pbigiLCIpICk7
CisgICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBl
eHByLCBlbGVtcywgbm90ICkgeworICAgICAgICBpZiAoIG5vdCApIHsKKyAgICAgICAgICAgIGV4
cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBl
bGVtcy5sZW5ndGggPT09IDEgPworICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVj
dG9yKGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDoKKyAgICAgICAgICAgIGpR
dWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOworICAgIH0sCisKKyAgICBkaXI6IGZ1bmN0
aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgeworICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdLAorICAg
ICAgICAgICAgY3VyID0gZWxlbVsgZGlyIF07CisKKyAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3Vy
Lm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlwZSAh
PT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7CisgICAgICAgICAgICBpZiAo
IGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGN1
ciApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyID0gY3VyW2Rpcl07CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1hdGNoZWQ7CisgICAgfSwKKworICAgIHNpYmxpbmc6IGZ1bmN0
aW9uKCBuLCBlbGVtICkgeworICAgICAgICB2YXIgciA9IFtdOworCisgICAgICAgIGZvciAoIDsg
bjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09
IDEgJiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICByLnB1c2goIG4gKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByOworICAgIH0KK30pOworCisv
LyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5v
dAorZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgeworCisgICAg
Ly8gQ2FuJ3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3ggNAor
ICAgIC8vIFNldCB0byAwIHRvIHNraXAgc3RyaW5nIGNoZWNrCisgICAgcXVhbGlmaWVyID0gcXVh
bGlmaWVyIHx8IDA7CisKKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSAp
IHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwg
aSApIHsKKyAgICAgICAgICAgIHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBp
LCBlbGVtICk7CisgICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOworICAgICAgICB9
KTsKKworICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAgICAgcmV0
dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAg
ICAgIHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApID09PSBrZWVwOworICAgICAgICB9KTsK
KworICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgeworICAg
ICAgICB2YXIgZmlsdGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKyAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwgZmlsdGVyZWQsICFrZWVwKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1
YWxpZmllciwgZmlsdGVyZWQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBqUXVl
cnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgIHJldHVybiAo
IGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09IGtlZXA7CisgICAg
fSk7Cit9CitmdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgeworICAgIHZh
ciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKKyAgICBzYWZlRnJhZyA9IGRvY3VtZW50
LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIGlmICggc2FmZUZyYWcuY3JlYXRlRWxl
bWVudCApIHsKKyAgICAgICAgd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKKyAgICAgICAgICAgIHNh
ZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCisgICAgICAgICAgICAgICAgbGlzdC5wb3AoKQorICAgICAg
ICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2FmZUZyYWc7Cit9CisKK3Zh
ciBub2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxk
YXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnwiICsKKyAgICAgICAgImhl
YWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFy
eXx0aW1lfHZpZGVvIiwKKyAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8
XGQrKSIvZywKKyAgICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCisgICAgcnhodG1sVGFn
ID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgo
W1x3Ol0rKVtePl0qKVwvPi9naSwKKyAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAorICAgIHJ0
Ym9keSA9IC88dGJvZHkvaSwKKyAgICByaHRtbCA9IC88fCYjP1x3KzsvLAorICAgIHJub0lubmVy
aHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksCisgICAgcm5vY2FjaGUgPSAvPCg/OnNj
cmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLAorICAgIHJub3NoaW1jYWNoZSA9IG5l
dyBSZWdFeHAoIjwoPzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKKyAgICByY2hl
Y2thYmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC8sCisgICAgLy8gY2hlY2tlZD0iY2hl
Y2tlZCIgb3IgY2hlY2tlZAorICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyou
Y2hlY2tlZC4pL2ksCisgICAgcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9pLAor
ICAgIHJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9Plxz
KiQvZywKKyAgICB3cmFwTWFwID0geworICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVs
dGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAorICAgICAgICBsZWdlbmQ6IFsgMSwg
IjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCisgICAgICAgIHRoZWFkOiBbIDEsICI8dGFi
bGU+IiwgIjwvdGFibGU+IiBdLAorICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAi
PC90Ym9keT48L3RhYmxlPiIgXSwKKyAgICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRy
PiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCisgICAgICAgIGNvbDogWyAyLCAiPHRhYmxl
Pjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwKKyAg
ICAgICAgYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAorICAgICAgICBfZGVmYXVsdDog
WyAwLCAiIiwgIiIgXQorICAgIH0sCisgICAgc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZyYWdt
ZW50KCBkb2N1bWVudCApLAorICAgIGZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFwcGVuZENo
aWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSApOworCit3cmFwTWFwLm9wdGdyb3Vw
ID0gd3JhcE1hcC5vcHRpb247Cit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBN
YXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50
aCA9IHdyYXBNYXAudGQ7CisKKy8vIElFNi04IGNhbid0IHNlcmlhbGl6ZSBsaW5rLCBzY3JpcHQs
IHN0eWxlLCBvciBhbnkgaHRtbDUgKE5vU2NvcGUpIHRhZ3MsCisvLyB1bmxlc3Mgd3JhcHBlZCBp
biBhIGRpdiB3aXRoIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzIGluIGZyb250IG9mIGl0LgoraWYg
KCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKKyAgICB3cmFwTWFwLl9kZWZhdWx0
ID0gWyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgXTsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCh7Cisg
ICAgdGV4dDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2Vz
cyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09
PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpRdWVyeS50ZXh0KCB0aGlzICkgOgorICAg
ICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoICggdGhpc1swXSAmJiB0aGlzWzBdLm93
bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5jcmVhdGVUZXh0Tm9kZSggdmFsdWUgKSApOworICAg
ICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICB3
cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggaHRtbCApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7
CisgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBp
KSApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRoaXNbMF0g
KSB7CisgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3Vu
ZAorICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbMF0ub3duZXJEb2N1
bWVudCApLmVxKDApLmNsb25lKHRydWUpOworCisgICAgICAgICAgICBpZiAoIHRoaXNbMF0ucGFy
ZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1swXSAp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3cmFwLm1hcChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAo
IGVsZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICB9KS5hcHBl
bmQoIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisK
KyAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKGkpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNh
bGwodGhpcywgaSkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5
KCB0aGlzICksCisgICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CisK
KyAgICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGNv
bnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9LAorCisgICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciBpc0Z1
bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKKworICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwo
IGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7CisgICAgICAgIH0pOwor
ICAgIH0sCisKKyAgICB1bndyYXA6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5w
YXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVO
YW1lKCB0aGlzLCAiYm9keSIgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5y
ZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
LmVuZCgpOworICAgIH0sCisKKyAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDEx
ICkgeworICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9k
ZVR5cGUgPT09IDExICkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVt
LCB0aGlzLmZpcnN0Q2hpbGQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwK
KworICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggIWlzRGlzY29ubmVjdGVk
KCB0aGlzWzBdICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVu
dHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHZh
ciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOworICAgICAgICAgICAgcmV0dXJuIHRo
aXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHNldCwgdGhpcyApLCAiYmVmb3JlIiwgdGhpcy5z
ZWxlY3RvciApOworICAgICAgICB9CisgICAgfSwKKworICAgIGFmdGVyOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRo
aXMubmV4dFNpYmxpbmcgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCBhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVyeS5j
bGVhbiggYXJndW1lbnRzICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpR
dWVyeS5tZXJnZSggdGhpcywgc2V0ICksICJhZnRlciIsIHRoaXMuc2VsZWN0b3IgKTsKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkt
LWRvIG5vdCBkb2N1bWVudAorICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0
YSApIHsKKyAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBm
b3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgaWYg
KCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVuZ3Ro
ICkgeworICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09
IDEgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIioiKSApOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5E
YXRhKCBbIGVsZW0gXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgZW1wdHk6
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgIGkgPSAwOworCisg
ICAgICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAg
ICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAg
ICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBq
UXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKKyAg
ICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICkgeworICAgICAgICAgICAgICAgIGVs
ZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5jdGlv
biggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAgIGRhdGFBbmRF
dmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7Cisg
ICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRh
dGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKKworICAgICAgICByZXR1cm4gdGhpcy5t
YXAoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMs
IGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CisgICAgICAgIH0pOworICAgIH0s
CisKKyAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnku
YWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSA9
IHRoaXNbMF0gfHwge30sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAg
bCA9IHRoaXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPworICAgICAg
ICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiAp
IDoKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5u
ZXJIVE1MCisgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgIXJu
b0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCisgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3Vw
cG9ydC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAmJgor
ICAgICAgICAgICAgICAgICggalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwgIXJs
ZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApICkgJiYKKyAgICAgICAgICAgICAgICAhd3Jh
cE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNh
c2UoKSBdICkgeworCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCByeGh0
bWxUYWcsICI8JDE+PC8kMj4iICk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV0gfHwge307CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioi
ICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1c2lu
ZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QK
KyAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2
YWx1ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRz
Lmxlbmd0aCApOworICAgIH0sCisKKyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVlICkg
eworICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgeworICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERP
TSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKKyAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhlbHAg
Zml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCisgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9
IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7CisgICAgICAgICAgICAgICAgICAgIHNl
bGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGksIG9sZCApICk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVl
ICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFsdWUg
KS5kZXRhY2goKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNpYmxp
bmcsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKworICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZSgpOworCisgICAgICAgICAgICAgICAg
aWYgKCBuZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkobmV4dCkuYmVmb3JlKCB2
YWx1ZSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/CisgICAg
ICAgICAgICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/
IHZhbHVlKCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgorICAgICAgICAgICAg
dGhpczsKKyAgICB9LAorCisgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsKKyAgICB9LAorCisgICAg
ZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CisKKyAgICAgICAg
Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgICAgICBhcmdzID0gW10uY29uY2F0LmFw
cGx5KCBbXSwgYXJncyApOworCisgICAgICAgIHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21lbnQs
IGlOb0Nsb25lLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICB2YWx1ZSA9IGFyZ3Nb
MF0sCisgICAgICAgICAgICBzY3JpcHRzID0gW10sCisgICAgICAgICAgICBsID0gdGhpcy5sZW5n
dGg7CisKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRh
aW4gY2hlY2tlZCwgaW4gV2ViS2l0CisgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNr
Q2xvbmUgJiYgbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tlZC50
ZXN0KCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBj
YWxsYmFjayApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpOwor
ICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJsZSA/IHNl
bGYuaHRtbCgpIDogdW5kZWZpbmVkICk7CisgICAgICAgICAgICAgICAgc2VsZi5kb21NYW5pcCgg
YXJncywgdGFibGUsIGNhbGxiYWNrICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggdGhpc1swXSApIHsKKyAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnkuYnVp
bGRGcmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOworICAgICAgICAgICAgZnJhZ21lbnQg
PSByZXN1bHRzLmZyYWdtZW50OworICAgICAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJzdENo
aWxkOworCisgICAgICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAx
ICkgeworICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICggZmlyc3QgKSB7CisgICAgICAgICAgICAgICAgdGFibGUgPSB0YWJs
ZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7CisKKyAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2Yg
dGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorICAgICAgICAgICAgICAgIC8vIGJlaW5n
IGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCisgICAg
ICAgICAgICAgICAgLy8gRnJhZ21lbnRzIGZyb20gdGhlIGZyYWdtZW50IGNhY2hlIG11c3QgYWx3
YXlzIGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZCBpbiBwbGFjZS4KKyAgICAgICAgICAgICAgICBm
b3IgKCBpTm9DbG9uZSA9IHJlc3VsdHMuY2FjaGVhYmxlIHx8IGwgLSAxOyBpIDwgbDsgaSsrICkg
eworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzW2ldLCAidGFibGUiICkgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRPckFwcGVuZCggdGhpc1tpXSwgInRib2R5IiAp
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaSA9PT0gaU5vQ2xvbmUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YWdtZW50IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUoIGZyYWdt
ZW50LCB0cnVlLCB0cnVlICkKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lkIGxl
YWtpbmcgbWVtb3J5CisgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0ID0gbnVsbDsKKworICAg
ICAgICAgICAgaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnku
ZWFjaCggc2NyaXB0cywgZnVuY3Rpb24oIGksIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICggZWxlbS5zcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5h
amF4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWw6
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyb3dzIjogdHJ1ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIm5vIGFq
YXgiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCAoIGVsZW0u
dGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1MIHx8ICIiICkucmVwbGFj
ZSggcmNsZWFuU2NyaXB0LCAiIiApICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gZmluZE9yQXBw
ZW5kKCBlbGVtLCB0YWcgKSB7CisgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUo
IHRhZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVF
bGVtZW50KCB0YWcgKSApOworfQorCitmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0
ICkgeworCisgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSgg
c3JjICkgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdHlwZSwgaSwgbCwK
KyAgICAgICAgb2xkRGF0YSA9IGpRdWVyeS5fZGF0YSggc3JjICksCisgICAgICAgIGN1ckRhdGEg
PSBqUXVlcnkuX2RhdGEoIGRlc3QsIG9sZERhdGEgKSwKKyAgICAgICAgZXZlbnRzID0gb2xkRGF0
YS5ldmVudHM7CisKKyAgICBpZiAoIGV2ZW50cyApIHsKKyAgICAgICAgZGVsZXRlIGN1ckRhdGEu
aGFuZGxlOworICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OworCisgICAgICAgIGZvciAoIHR5
cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5
cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRhIG9i
amVjdCBhIGNvcHkgZnJvbSB0aGUgb3JpZ2luYWwKKyAgICBpZiAoIGN1ckRhdGEuZGF0YSApIHsK
KyAgICAgICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEuZGF0YSAp
OworICAgIH0KK30KKworZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7
CisgICAgdmFyIG5vZGVOYW1lOworCisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhp
bmcgZm9yIG5vbi1FbGVtZW50cworICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVzIHRo
ZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAorICAgIC8vIGJ1dCBhbHNvIHJlbW92
ZXMgdGhlIGF0dGFjaEV2ZW50IGV2ZW50cywgd2hpY2ggd2UgKmRvKiB3YW50CisgICAgaWYgKCBk
ZXN0LmNsZWFyQXR0cmlidXRlcyApIHsKKyAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0ZXMoKTsK
KyAgICB9CisKKyAgICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdl
cyBiYWNrIG9uIHRoZQorICAgIC8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZlbnRz
CisgICAgaWYgKCBkZXN0Lm1lcmdlQXR0cmlidXRlcyApIHsKKyAgICAgICAgZGVzdC5tZXJnZUF0
dHJpYnV0ZXMoIHNyYyApOworICAgIH0KKworICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpOworCisgICAgaWYgKCBub2RlTmFtZSA9PT0gIm9iamVjdCIgKSB7CisgICAg
ICAgIC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxlbWVu
dHMgdXNpbmcgY2xhc3NpZC4KKyAgICAgICAgLy8gSUUxMCB0aHJvd3MgTm9Nb2RpZmljYXRpb25B
bGxvd2VkRXJyb3IgaWYgcGFyZW50IGlzIG51bGwsICMxMjEzMi4KKyAgICAgICAgaWYgKCBkZXN0
LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICBkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRlckhU
TUw7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lkYWJs
ZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0CisgICAgICAgIC8vIGVsZW1lbnQgaW4g
SUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZmaWNpZW50LgorICAg
ICAgICAvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBkb2Vz
IG5vdCwKKyAgICAgICAgLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBkZXN0Lmlu
bmVySFRNTC4gIzEwMzI0CisgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSAm
JiAoc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpKSApIHsKKyAg
ICAgICAgICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKKyAgICAgICAgfQorCisg
ICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUudGVz
dCggc3JjLnR5cGUgKSApIHsKKyAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUg
Y2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAorICAgICAgICAvLyBvciByYWRpbyBi
dXR0b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50CisgICAg
ICAgIC8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBp
c24ndCBhbHNvIHNldAorCisgICAgICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNoZWNr
ZWQgPSBzcmMuY2hlY2tlZDsKKworICAgICAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVu
ZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAorICAgICAgICAvLyBjaGVja2JveC9y
YWRpbyBidXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgorICAgICAgICBp
ZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKKyAgICAgICAgICAgIGRlc3QudmFsdWUg
PSBzcmMudmFsdWU7CisgICAgICAgIH0KKworICAgIC8vIElFNi04IGZhaWxzIHRvIHJldHVybiB0
aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCisgICAgLy8gc3RhdGUg
d2hlbiBjbG9uaW5nIG9wdGlvbnMKKyAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9wdGlv
biIgKSB7CisgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOworCisg
ICAgLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3Qg
dmFsdWUgd2hlbgorICAgIC8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCisg
ICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0
YXJlYSIgKSB7CisgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTsK
KworICAgIC8vIElFIGJsYW5rcyBjb250ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cworICAgIH0g
ZWxzZSBpZiAoIG5vZGVOYW1lID09PSAic2NyaXB0IiAmJiBkZXN0LnRleHQgIT09IHNyYy50ZXh0
ICkgeworICAgICAgICBkZXN0LnRleHQgPSBzcmMudGV4dDsKKyAgICB9CisKKyAgICAvLyBFdmVu
dCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbwor
ICAgIC8vIGdldHMgY29waWVkIHRvbworICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnku
ZXhwYW5kbyApOworfQorCitqUXVlcnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdzLCBj
b250ZXh0LCBzY3JpcHRzICkgeworICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZWhp
dCwKKyAgICAgICAgZmlyc3QgPSBhcmdzWyAwIF07CisKKyAgICAvLyBTZXQgY29udGV4dCBmcm9t
IHdoYXQgbWF5IGNvbWUgaW4gYXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb3Ig
YSBub2RlCisgICAgLy8gVXBkYXRlZCB0byBmaXggIzEyMjY2IHdoZXJlIGFjY2Vzc2luZyBjb250
ZXh0WzBdIGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBJRTkvMTAgJgorICAgIC8vIGFsc28g
ZG91YmxlcyBhcyBmaXggZm9yICM4OTUwIHdoZXJlIHBsYWluIG9iamVjdHMgY2F1c2VkIGNyZWF0
ZURvY3VtZW50RnJhZ21lbnQgZXhjZXB0aW9uCisgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9j
dW1lbnQ7CisgICAgY29udGV4dCA9ICFjb250ZXh0Lm5vZGVUeXBlICYmIGNvbnRleHRbMF0gfHwg
Y29udGV4dDsKKyAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQ7
CisKKyAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIgKDEvMiBLQikgSFRNTCBzdHJpbmdzIHRoYXQg
YXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBkb2N1bWVudAorICAgIC8vIENsb25pbmcgb3B0
aW9ucyBsb3NlcyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNvIGRvbid0IGNhY2hlIHRoZW0KKyAgICAv
LyBJRSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBl
bGVtZW50cyBpbiBhIGZyYWdtZW50CisgICAgLy8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNsb25l
ICdjaGVja2VkJyBhdHRyaWJ1dGVzIG9uIGNsb25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKKyAgICAv
LyBMYXN0bHksIElFNiw3LDggd2lsbCBub3QgY29ycmVjdGx5IHJldXNlIGNhY2hlZCBmcmFnbWVu
dHMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSB1bmtub3duIGVsZW1zICMxMDUwMQorICAgIGlmICgg
YXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGZpcnN0ID09PSAic3RyaW5nIiAmJiBmaXJzdC5s
ZW5ndGggPCA1MTIgJiYgY29udGV4dCA9PT0gZG9jdW1lbnQgJiYKKyAgICAgICAgZmlyc3QuY2hh
ckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkgJiYKKyAgICAgICAgKGpR
dWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYmCisg
ICAgICAgIChqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVzdCgg
Zmlyc3QgKSkgKSB7CisKKyAgICAgICAgLy8gTWFyayBjYWNoZWFibGUgYW5kIGxvb2sgZm9yIGEg
aGl0CisgICAgICAgIGNhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIGZyYWdtZW50ID0galF1ZXJ5
LmZyYWdtZW50c1sgZmlyc3QgXTsKKyAgICAgICAgY2FjaGVoaXQgPSBmcmFnbWVudCAhPT0gdW5k
ZWZpbmVkOworICAgIH0KKworICAgIGlmICggIWZyYWdtZW50ICkgeworICAgICAgICBmcmFnbWVu
dCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICBqUXVlcnkuY2xl
YW4oIGFyZ3MsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICk7CisKKyAgICAgICAgLy8gVXBk
YXRlIHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UKKyAgICAgICAgLy8gdW5sZXNzIHRo
aXMgaXMgYSBzZWNvbmQgcGFyc2luZyBvZiB0aGUgc2FtZSBjb250ZW50CisgICAgICAgIGlmICgg
Y2FjaGVhYmxlICkgeworICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXSA9IGNh
Y2hlaGl0ICYmIGZyYWdtZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgZnJh
Z21lbnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9OworfTsKKworalF1ZXJ5LmZy
YWdtZW50cyA9IHt9OworCitqUXVlcnkuZWFjaCh7CisgICAgYXBwZW5kVG86ICJhcHBlbmQiLAor
ICAgIHByZXBlbmRUbzogInByZXBlbmQiLAorICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCisg
ICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgor
fSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBdID0g
ZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgZWxlbXMsCisgICAgICAgICAgICBp
ID0gMCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaW5zZXJ0ID0galF1ZXJ5
KCBzZWxlY3RvciApLAorICAgICAgICAgICAgbCA9IGluc2VydC5sZW5ndGgsCisgICAgICAgICAg
ICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7CisKKyAg
ICAgICAgaWYgKCAocGFyZW50ID09IG51bGwgfHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9
PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkgewor
ICAgICAgICAgICAgaW5zZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25lKHRy
dWUpIDogdGhpcyApLmdldCgpOworICAgICAgICAgICAgICAgIGpRdWVyeSggaW5zZXJ0W2ldIClb
IG9yaWdpbmFsIF0oIGVsZW1zICk7CisgICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdCgg
ZWxlbXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0
YWNrKCByZXQsIG5hbWUsIGluc2VydC5zZWxlY3RvciApOworICAgICAgICB9CisgICAgfTsKK30p
OworCitmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CisgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRF
bGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgIHJldHVybiBlbGVt
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKKworICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBl
bGVtLnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICByZXR1cm4g
ZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBbXTsKKyAgICB9Cit9CisKKy8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0
Q2hlY2tlZCBwcm9wZXJ0eQorZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7Cisg
ICAgaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKKyAgICAgICAgZWxl
bS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKKyAgICB9Cit9CisKK2pRdWVyeS5leHRl
bmQoeworICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFB
bmRFdmVudHMgKSB7CisgICAgICAgIHZhciBzcmNFbGVtZW50cywKKyAgICAgICAgICAgIGRlc3RF
bGVtZW50cywKKyAgICAgICAgICAgIGksCisgICAgICAgICAgICBjbG9uZTsKKworICAgICAgICBp
ZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9jKGVsZW0pIHx8
ICFybm9zaGltY2FjaGUudGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiApICkgeworICAg
ICAgICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOworCisgICAgICAgIC8vIElF
PD04IGRvZXMgbm90IHByb3Blcmx5IGNsb25lIGRldGFjaGVkLCB1bmtub3duIGVsZW1lbnQgbm9k
ZXMKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyYWdtZW50RGl2LmlubmVySFRNTCA9
IGVsZW0ub3V0ZXJIVE1MOworICAgICAgICAgICAgZnJhZ21lbnREaXYucmVtb3ZlQ2hpbGQoIGNs
b25lID0gZnJhZ21lbnREaXYuZmlyc3RDaGlsZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCAoIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9DbG9u
ZUNoZWNrZWQpICYmCisgICAgICAgICAgICAgICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxl
bS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CisgICAgICAg
ICAgICAvLyBJRSBjb3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5n
IGNsb25lTm9kZS4KKyAgICAgICAgICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhlIGNs
b25lIHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cworICAgICAgICAgICAgLy8gZnJvbSB0aGUg
b3JpZ2luYWwuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKKyAgICAg
ICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xlYXIgdGhlIGV2ZW50cy4gVGhhbmtz
IHRvIE1vb1Rvb2xzCisgICAgICAgICAgICAvLyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCisKKyAg
ICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKKworICAgICAgICAg
ICAgLy8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVsZW1l
bnRzQnlUYWdOYW1lIGluc3RlYWQKKyAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBl
bGVtICk7CisgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CisKKyAg
ICAgICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUg
bGVuZ3RoIHByb3BlcnR5CisgICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFy
ZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBvbmUgb2YgdGhlCisgICAgICAgICAgICAvLyBlbGVtZW50
cyBvbiB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCisgICAgICAgICAgICBm
b3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKKyAgICAgICAgICAgICAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1ODcK
KyAgICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ld
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQorICAg
ICAgICBpZiAoIGRhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCgg
ZWxlbSwgY2xvbmUgKTsKKworICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsK
KyAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworICAgICAgICAg
ICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKKworICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgeworICAgICAgICAgICAgICAgICAg
ICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNyY0Vs
ZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKKworICAgICAgICAvLyBSZXR1cm4gdGhlIGNs
b25lZCBzZXQKKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH0sCisKKyAgICBjbGVhbjogZnVu
Y3Rpb24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKKyAgICAgICAgdmFy
IGksIGosIGVsZW0sIHRhZywgd3JhcCwgZGVwdGgsIGRpdiwgaGFzQm9keSwgdGJvZHksIGxlbiwg
aGFuZGxlU2NyaXB0LCBqc1RhZ3MsCisgICAgICAgICAgICBzYWZlID0gY29udGV4dCA9PT0gZG9j
dW1lbnQgJiYgc2FmZUZyYWdtZW50LAorICAgICAgICAgICAgcmV0ID0gW107CisKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgY29udGV4dCBpcyBhIGRvY3VtZW50CisgICAgICAgIGlmICggIWNvbnRl
eHQgfHwgdHlwZW9mIGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9PT0gInVuZGVmaW5l
ZCIgKSB7CisgICAgICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBzYWZlIGZyYWdtZW50IGlmIGNvbnRleHQg
cGVybWl0cworICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsg
aSsrICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIgKSB7Cisg
ICAgICAgICAgICAgICAgZWxlbSArPSAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBub2RlcworICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICBlbGVt
ID0gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhIHNhZmUgY29udGFpbmVyIGluIHdo
aWNoIHRvIHJlbmRlciB0aGUgaHRtbAorICAgICAgICAgICAgICAgICAgICBzYWZlID0gc2FmZSB8
fCBjcmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgZGl2
ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICAgICAgc2Fm
ZS5hcHBlbmRDaGlsZCggZGl2ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRml4ICJYSFRN
TCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJz
CisgICAgICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsi
IiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgd3JhcCA9IHdy
YXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisgICAgICAgICAgICAgICAgICAgIGRl
cHRoID0gd3JhcFswXTsKKyAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHdyYXBb
MV0gKyBlbGVtICsgd3JhcFsyXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRo
ZSByaWdodCBkZXB0aAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlcHRoLS0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2Vy
dGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc0JvZHkgPSBydGJvZHkudGVzdChlbGVtKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9keSA/
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRpdi5m
aXJzdENoaWxkLmNoaWxkTm9kZXMgOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxkTm9kZXMgOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0
Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0
Ym9keVsgaiBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5lckhU
TUwgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5sZWFk
aW5nV2hpdGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVUZXh0
Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hpbGQg
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBk
aXYuY2hpbGROb2RlczsKKworICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIG91dCBvZiBmcmFn
bWVudCBjb250YWluZXIgKHdlIG5lZWQgYSBmcmVzaCBkaXYgZWFjaCB0aW1lKQorICAgICAgICAg
ICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUg
KSB7CisgICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpeCAjMTEzNTY6IENsZWFyIGVsZW1lbnRz
IGZyb20gc2FmZUZyYWdtZW50CisgICAgICAgIGlmICggZGl2ICkgeworICAgICAgICAgICAgZWxl
bSA9IGRpdiA9IHNhZmUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzZXQgZGVm
YXVsdENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKKyAgICAgICAgLy8gYWJv
dXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQorICAgICAgICBp
ZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgeworICAgICAgICAgICAgZm9yICgg
aSA9IDA7IChlbGVtID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7
CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGVuZCBlbGVtZW50cyB0byBh
IHByb3ZpZGVkIGRvY3VtZW50IGZyYWdtZW50CisgICAgICAgIGlmICggZnJhZ21lbnQgKSB7Cisg
ICAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGVhY2ggc2NyaXB0IGVsZW1lbnQKKyAg
ICAgICAgICAgIGhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIGlmIHdlIGNvbnNpZGVyIGl0IGV4ZWN1dGFibGUKKyAgICAgICAgICAgICAg
ICBpZiAoICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIERldGFjaCB0aGUgc2NyaXB0IGFuZCBzdG9yZSBpdCBpbiB0
aGUgc2NyaXB0cyBhcnJheSAoaWYgcHJvdmlkZWQpIG9yIHRoZSBmcmFnbWVudAorICAgICAgICAg
ICAgICAgICAgICAvLyBSZXR1cm4gdHJ1dGh5IHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJlZW4g
aGFuZGxlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0cyA/CisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0ucGFyZW50Tm9kZSA/IGVsZW0ucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApIDogZWxlbSApIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVtID0gcmV0W2ldKSAh
PSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZG9uZSBh
ZnRlciBoYW5kbGluZyBhbiBleGVjdXRhYmxlIHNjcmlwdAorICAgICAgICAgICAgICAgIGlmICgg
ISggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2NyaXB0IiApICYmIGhhbmRsZVNjcmlwdCggZWxl
bSApICkgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudCBhbmQg
aGFuZGxlIGVtYmVkZGVkIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBw
ZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBoYW5kbGVTY3JpcHQgYWx0ZXJzIHRoZSBET00sIHNvIHVzZSBqUXVlcnkubWVy
Z2UgdG8gZW5zdXJlIHNuYXBzaG90IGl0ZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
anNUYWdzID0galF1ZXJ5LmdyZXAoIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uZ2V0RWxlbWVudHNC
eVRhZ05hbWUoInNjcmlwdCIpICksIGhhbmRsZVNjcmlwdCApOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTcGxpY2UgdGhlIHNjcmlwdHMgaW50byByZXQgYWZ0ZXIgdGhlaXIgZm9ybWVy
IGFuY2VzdG9yIGFuZCBhZHZhbmNlIG91ciBpbmRleCBiZXlvbmQgdGhlbQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgganNU
YWdzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0ganNUYWdzLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIGNsZWFuRGF0YTog
ZnVuY3Rpb24oIGVsZW1zLCAvKiBpbnRlcm5hbCAqLyBhY2NlcHREYXRhICkgeworICAgICAgICB2
YXIgZGF0YSwgaWQsIGVsZW0sIHR5cGUsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAg
IGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCisgICAgICAgICAgICBjYWNoZSA9IGpRdWVy
eS5jYWNoZSwKKyAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxl
dGVFeHBhbmRvLAorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsOwor
CisgICAgICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgeworCisg
ICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEgfHwgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSAp
IHsKKworICAgICAgICAgICAgICAgIGlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsKKyAgICAgICAg
ICAgICAgICBkYXRhID0gaWQgJiYgY2FjaGVbIGlkIF07CisKKyAgICAgICAgICAgICAgICBpZiAo
IGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8g
YXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjYWNoZSBvbmx5IGlmIGl0
IHdhcyBub3QgYWxyZWFkeSByZW1vdmVkIGJ5IGpRdWVyeS5ldmVudC5yZW1vdmUKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjYWNoZVsgaWQgXSApIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBk
b2VzIG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0
cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGVsZW1bIGludGVybmFsS2V5IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOworCisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1bIGludGVybmFsS2V5IF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVsZXRlZElkcy5wdXNoKCBpZCApOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfSk7CisvLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkgZGVw
cmVjYXRlZCBBUEkKKyhmdW5jdGlvbigpIHsKKwordmFyIG1hdGNoZWQsIGJyb3dzZXI7CisKKy8v
IFVzZSBvZiBqUXVlcnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24uCisvLyBNb3JlIGRldGFpbHM6
IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYnJvd3NlcgorLy8galF1ZXJ5LnVhTWF0Y2gg
bWFpbnRhaW5lZCBmb3IgYmFjay1jb21wYXQKK2pRdWVyeS51YU1hdGNoID0gZnVuY3Rpb24oIHVh
ICkgeworICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTsKKworICAgIHZhciBtYXRjaCA9IC8oY2hy
b21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKKyAgICAgICAgLyh3ZWJraXQpWyBcL10o
W1x3Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICAvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBc
L10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICAvKG1zaWUpIChbXHcuXSspLy5leGVj
KCB1YSApIHx8CisgICAgICAgIHVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgLyhtb3pp
bGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKCB1YSApIHx8CisgICAgICAgIFtdOworCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgYnJvd3NlcjogbWF0Y2hbIDEgXSB8fCAiIiwKKyAgICAgICAg
dmVyc2lvbjogbWF0Y2hbIDIgXSB8fCAiMCIKKyAgICB9OworfTsKKworbWF0Y2hlZCA9IGpRdWVy
eS51YU1hdGNoKCBuYXZpZ2F0b3IudXNlckFnZW50ICk7Citicm93c2VyID0ge307CisKK2lmICgg
bWF0Y2hlZC5icm93c2VyICkgeworICAgIGJyb3dzZXJbIG1hdGNoZWQuYnJvd3NlciBdID0gdHJ1
ZTsKKyAgICBicm93c2VyLnZlcnNpb24gPSBtYXRjaGVkLnZlcnNpb247Cit9CisKKy8vIENocm9t
ZSBpcyBXZWJraXQsIGJ1dCBXZWJraXQgaXMgYWxzbyBTYWZhcmkuCitpZiAoIGJyb3dzZXIuY2hy
b21lICkgeworICAgIGJyb3dzZXIud2Via2l0ID0gdHJ1ZTsKK30gZWxzZSBpZiAoIGJyb3dzZXIu
d2Via2l0ICkgeworICAgIGJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKK30KKworalF1ZXJ5LmJyb3dz
ZXIgPSBicm93c2VyOworCitqUXVlcnkuc3ViID0gZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24g
alF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVl
cnlTdWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKyAgICB9CisgICAgalF1ZXJ5LmV4
dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7CisgICAgalF1ZXJ5U3ViLnN1cGVyY2xhc3Mg
PSB0aGlzOworICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlzKCk7
CisgICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOworICAgIGpRdWVyeVN1
Yi5zdWIgPSB0aGlzLnN1YjsKKyAgICBqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQo
IHNlbGVjdG9yLCBjb250ZXh0ICkgeworICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBp
bnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgewor
ICAgICAgICAgICAgY29udGV4dCA9IGpRdWVyeVN1YiggY29udGV4dCApOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBjb250
ZXh0LCByb290alF1ZXJ5U3ViICk7CisgICAgfTsKKyAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90
b3R5cGUgPSBqUXVlcnlTdWIuZm47CisgICAgdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVlcnlTdWIo
ZG9jdW1lbnQpOworICAgIHJldHVybiBqUXVlcnlTdWI7Cit9OworCit9KSgpOwordmFyIGN1ckNT
UywgaWZyYW1lLCBpZnJhbWVEb2MsCisgICAgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ksCisg
ICAgcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKKyAgICBycG9zaXRpb24gPSAvXih0b3B8
cmlnaHR8Ym90dG9tfGxlZnQpJC8sCisgICAgLy8gc3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9u
ZSBvciBzdGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAi
dGFibGUtY2FwdGlvbiIKKyAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKyAgICByZGlz
cGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisgICAgcm1hcmdpbiA9IC9e
bWFyZ2luLywKKyAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVtICsg
IikoLiopJCIsICJpIiApLAorICAgIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBjb3Jl
X3BudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICksCisgICAgcnJlbE51bSA9IG5ldyBSZWdF
eHAoICJeKFstK10pPSgiICsgY29yZV9wbnVtICsgIikiLCAiaSIgKSwKKyAgICBlbGVtZGlzcGxh
eSA9IHsgQk9EWTogImJsb2NrIiB9LAorCisgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNv
bHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisgICAgY3Nz
Tm9ybWFsVHJhbnNmb3JtID0geworICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwLAorICAgICAgICBm
b250V2VpZ2h0OiA0MDAKKyAgICB9LAorCisgICAgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0
IiwgIkJvdHRvbSIsICJMZWZ0IiBdLAorICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk8i
LCAiTW96IiwgIm1zIiBdLAorCisgICAgZXZlbnRzVG9nZ2xlID0galF1ZXJ5LmZuLnRvZ2dsZTsK
KworLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRv
ciBwcmVmaXhlZCBwcm9wZXJ0eQorZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBuYW1l
ICkgeworCisgICAgLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJl
Zml4ZWQKKyAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CisgICAgICAgIHJldHVybiBuYW1lOwor
ICAgIH0KKworICAgIC8vIGNoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKyAgICB2YXIg
Y2FwTmFtZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLAor
ICAgICAgICBvcmlnTmFtZSA9IG5hbWUsCisgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7
CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0g
KyBjYXBOYW1lOworICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvcmlnTmFtZTsKK30K
KworZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVsICkgeworICAgIGVsZW0gPSBlbCB8fCBlbGVt
OworICAgIHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiIHx8
ICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworfQorCitmdW5j
dGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7CisgICAgdmFyIGVsZW0sIGRpc3BsYXks
CisgICAgICAgIHZhbHVlcyA9IFtdLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0
aCA9IGVsZW1lbnRzLmxlbmd0aDsKKworICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4
KysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCAh
ZWxlbS5zdHlsZSApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IHZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7Cisg
ICAgICAgIGlmICggc2hvdyApIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlz
cGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKKyAgICAgICAgICAgIC8vIGJl
aW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKKyAgICAgICAgICAgIGlmICggIXZh
bHVlc1sgaW5kZXggXSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAg
ICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGgg
ZGlzcGxheTogbm9uZQorICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVy
IHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKKyAgICAgICAgICAgIC8vIGZvciBzdWNoIGFu
IGVsZW1lbnQKKyAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBp
c0hpZGRlbiggZWxlbSApICkgeworICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGpR
dWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBjc3NfZGVmYXVsdERpc3BsYXkoZWxlbS5u
b2RlTmFtZSkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOworCisgICAgICAgICAgICBpZiAo
ICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSAhPT0gIm5vbmUiICkgeworICAgICAgICAgICAg
ICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9z
dCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgIC8vIHRvIGF2b2lkIHRoZSBj
b25zdGFudCByZWZsb3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrICkgeworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisgICAgICAgIGlmICgg
IWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5
bGUuZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBz
aG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICBjc3M6
IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3Mo
IHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVs
ZW0sIG5hbWUsIHZhbHVlICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIG5h
bWUgKTsKKyAgICAgICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Cisg
ICAgfSwKKyAgICBzaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0
aGlzLCB0cnVlICk7CisgICAgfSwKKyAgICBoaWRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHNob3dIaWRlKCB0aGlzICk7CisgICAgfSwKKyAgICB0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0
ZSwgZm4yICkgeworICAgICAgICB2YXIgYm9vbCA9IHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xlYW4i
OworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHN0YXRlICkgJiYgalF1ZXJ5Lmlz
RnVuY3Rpb24oIGZuMiApICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50c1RvZ2dsZS5hcHBs
eSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCBib29sID8gc3RhdGUgOiBpc0hpZGRl
biggdGhpcyApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnNob3coKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuaGlkZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmV4dGVu
ZCh7CisgICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRo
ZSBkZWZhdWx0CisgICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxl
IHByb3BlcnR5CisgICAgY3NzSG9va3M6IHsKKyAgICAgICAgb3BhY2l0eTogeworICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBn
ZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXQgPT09ICIiID8gIjEiIDogcmV0OworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBj
c3MgcHJvcGVydGllcyB0byBhZGQgcHgKKyAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAgImZpbGxP
cGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgImZvbnRXZWlnaHQiOiB0cnVlLAorICAgICAgICAibGlu
ZUhlaWdodCI6IHRydWUsCisgICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgIm9ycGhh
bnMiOiB0cnVlLAorICAgICAgICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgInpJbmRleCI6IHRy
dWUsCisgICAgICAgICJ6b29tIjogdHJ1ZQorICAgIH0sCisKKyAgICAvLyBBZGQgaW4gcHJvcGVy
dGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgLy8gc2V0dGluZyBv
ciBnZXR0aW5nIHRoZSB2YWx1ZQorICAgIGNzc1Byb3BzOiB7CisgICAgICAgIC8vIG5vcm1hbGl6
ZSBmbG9hdCBjc3MgcHJvcGVydHkKKyAgICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3Nz
RmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCisgICAgfSwKKworICAgIC8vIEdldCBh
bmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCisgICAgc3R5bGU6IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisgICAgICAgIC8vIERvbid0IHNldCBz
dHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICB2YXIgcmV0
LCB0eXBlLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSgg
bmFtZSApLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIG5hbWUg
PSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdO
YW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKKworICAgICAgICAv
LyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCisgICAgICAgIC8vIGZvbGxvd2Vk
IGJ5IHRoZSB1bnByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9v
a3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CisKKyAgICAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCisgICAgICAgIGlmICggdmFsdWUgIT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAg
ICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byByZWxh
dGl2ZSBudW1iZXJzLiAjNzM0NQorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiAm
JiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxl
bSwgbmFtZSApICk7CisgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3CisgICAgICAg
ICAgICAgICAgdHlwZSA9ICJudW1iZXIiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBzZXQuIFNlZTogIzcx
MTYKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVyIiAm
JiBpc05hTiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgn
IHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorICAgICAgICAgICAg
aWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSAp
IHsKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAicHgiOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3
aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgICAgIGlmICggIWhvb2tz
IHx8ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUs
IGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgLy8gV3JhcHBlZCB0
byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVlcyBh
cmUgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKKyAgICAgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7
CisgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorICAgICAgICAgICAgfQorCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUg
bm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYg
ImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkp
ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9t
IHRoZSBzdHlsZSBvYmplY3QKKyAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOworICAg
ICAgICB9CisgICAgfSwKKworICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIG51bWVyaWMs
IGV4dHJhICkgeworICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAorICAgICAgICAgICAgb3Jp
Z05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisgICAgICAgIG5hbWUgPSBq
UXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1l
IF0gPSB2ZW5kb3JQcm9wTmFtZSggZWxlbS5zdHlsZSwgb3JpZ05hbWUgKSApOworCisgICAgICAg
IC8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgLy8gZm9sbG93
ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgorICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NI
b29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAv
LyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVy
ZQorICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgeworICAgICAgICAgICAg
dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0
cywgdXNlIHRoYXQKKyAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOworICAgICAgICB9CisKKyAgICAgICAgLy9j
b252ZXJ0ICJub3JtYWwiIHRvIGNvbXB1dGVkIHZhbHVlCisgICAgICAgIGlmICggdmFsID09PSAi
bm9ybWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKKyAgICAgICAgICAgIHZh
bCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8g
UmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2Fz
IHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYworICAgICAgICBpZiAoIG51bWVyaWMgfHwg
ZXh0cmEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQoIHZh
bCApOworICAgICAgICAgICAgcmV0dXJuIG51bWVyaWMgfHwgalF1ZXJ5LmlzTnVtZXJpYyggbnVt
ICkgPyBudW0gfHwgMCA6IHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsOworICAg
IH0sCisKKyAgICAvLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHBy
b3BlcnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zCisgICAgc3dhcDogZnVuY3Rpb24o
IGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkgeworICAgICAgICB2YXIgcmV0LCBuYW1lLAorICAg
ICAgICAgICAgb2xkID0ge307CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMs
IGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyAp
IHsKKyAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAg
ICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOworICAgICAgICB9CisK
KyAgICAgICAgcmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApOworCisgICAgICAgIC8vIFJldmVy
dCB0aGUgb2xkIHZhbHVlcworICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAg
ICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZXQ7CisgICAgfQorfSk7CisKKy8vIE5PVEU6IFRvIGFueSBmdXR1cmUg
bWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKKy8vIGJlY2F1c2UganNk
b20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCitpZiAoIHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlICkgeworICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAg
ICAgICB2YXIgcmV0LCB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAorICAgICAgICAgICAgY29t
cHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApLAorICAgICAgICAg
ICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAg
ICAgICAgICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2Zp
bHRlcicpIGluIElFOSwgc2VlICMxMjUzNworICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQuZ2V0
UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07CisKKyAgICAgICAgICAg
IGlmICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQs
IGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5h
bWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQSB0cmlidXRlIHRvIHRoZSAi
YXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKyAgICAgICAgICAgIC8vIENocm9tZSA8IDE3
IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIiBpbnN0ZWFkIG9mICJ1c2VkIHZh
bHVlIiBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAvLyBTYWZhcmkgNS4xLjcgKGF0IGxl
YXN0KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3
aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMKKyAgICAgICAgICAgIC8vIHRoaXMgaXMg
YWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nz
b20vI3Jlc29sdmVkLXZhbHVlcworICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCggcmV0
ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBz
dHlsZS53aWR0aDsKKyAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOwor
ICAgICAgICAgICAgICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7CisKKyAgICAgICAgICAg
ICAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7
CisgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7CisKKyAgICAgICAgICAgICAg
ICBzdHlsZS53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0g
bWluV2lkdGg7CisgICAgICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsKK30g
ZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7CisgICAg
Y3VyQ1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIHZhciBsZWZ0LCByc0xl
ZnQsCisgICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRT
dHlsZVsgbmFtZSBdLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAg
IC8vIEF2b2lkIHNldHRpbmcgcmV0IHRvIGVtcHR5IHN0cmluZyBoZXJlCisgICAgICAgIC8vIHNv
IHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bworICAgICAgICBpZiAoIHJldCA9PSBudWxsICYmIHN0
eWxlICYmIHN0eWxlWyBuYW1lIF0gKSB7CisgICAgICAgICAgICByZXQgPSBzdHlsZVsgbmFtZSBd
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRnJvbSB0aGUgYXdlc29tZSBoYWNrIGJ5IERlYW4g
RWR3YXJkcworICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcv
MjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCisKKyAgICAgICAgLy8gSWYgd2UncmUgbm90IGRl
YWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVtYmVyCisgICAgICAgIC8vIGJ1dCBhIG51bWJl
ciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBpeGVs
cworICAgICAgICAvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBh
cmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCisgICAgICAgIC8v
IGFuZCB3ZSBjYW4ndCBtZWFzdXJlIHRoZSBwYXJlbnQgaW5zdGVhZCBiZWNhdXNlIGl0IG1pZ2h0
IHRyaWdnZXIgYSAic3RhY2tpbmcgZG9sbHMiIHByb2JsZW0KKyAgICAgICAgaWYgKCBybnVtbm9u
cHgudGVzdCggcmV0ICkgJiYgIXJwb3NpdGlvbi50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAgICAg
ICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAgIGxlZnQgPSBz
dHlsZS5sZWZ0OworICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYgZWxl
bS5ydW50aW1lU3R5bGUubGVmdDsKKworICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFs
dWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorICAgICAgICAgICAgaWYgKCByc0xlZnQg
KSB7CisgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVu
dFN0eWxlLmxlZnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbmFt
ZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OworICAgICAgICAgICAgcmV0ID0gc3R5bGUu
cGl4ZWxMZWZ0ICsgInB4IjsKKworICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZh
bHVlcworICAgICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7CisgICAgICAgICAgICBpZiAoIHJz
TGVmdCApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNMZWZ0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIg
PyAiYXV0byIgOiByZXQ7CisgICAgfTsKK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIo
IGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKyAgICB2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5l
eGVjKCB2YWx1ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKyAgICAgICAgICAgIE1hdGgubWF4
KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAyIF0g
fHwgInB4IiApIDoKKyAgICAgICAgICAgIHZhbHVlOworfQorCitmdW5jdGlvbiBhdWdtZW50V2lk
dGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94ICkgeworICAgIHZhciBp
ID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8KKyAg
ICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQg
YXVnbWVudGF0aW9uCisgICAgICAgIDQgOgorICAgICAgICAvLyBPdGhlcndpc2UgaW5pdGlhbGl6
ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzCisgICAgICAgIG5hbWUgPT09
ICJ3aWR0aCIgPyAxIDogMCwKKworICAgICAgICB2YWwgPSAwOworCisgICAgZm9yICggOyBpIDwg
NDsgaSArPSAyICkgeworICAgICAgICAvLyBib3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4s
IHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0CisgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJnaW4i
ICkgeworICAgICAgICAgICAgLy8gd2UgdXNlIGpRdWVyeS5jc3MgaW5zdGVhZCBvZiBjdXJDU1Mg
aGVyZQorICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgcmVsaWFibGVNYXJnaW5SaWdodCBD
U1MgaG9vayEKKyAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNz
c0V4cGFuZFsgaSBdLCB0cnVlICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGcm9tIHRoaXMg
cG9pbnQgb24gd2UgdXNlIGN1ckNTUyBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSAocmVsZXZhbnQg
aW4gYW5pbWF0aW9ucykKKyAgICAgICAgaWYgKCBpc0JvcmRlckJveCApIHsKKyAgICAgICAgICAg
IC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQg
Y29udGVudAorICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgeworICAgICAg
ICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiArIGNz
c0V4cGFuZFsgaSBdICkgKSB8fCAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBh
dCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJv
cmRlcgorICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7CisgICAgICAgICAg
ICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBh
bmRbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBz
byBhZGQgcGFkZGluZworICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxl
bSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7CisKKyAgICAgICAgICAgIC8v
IGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBi
b3JkZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKKyAgICAgICAg
ICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4
cGFuZFsgaSBdICsgIldpZHRoIiApICkgfHwgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQo
IGVsZW0sIG5hbWUsIGV4dHJhICkgeworCisgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVy
dHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKKyAgICB2YXIg
dmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhl
aWdodCwKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCisgICAgICAgIGlzQm9yZGVy
Qm94ID0galF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hT
aXppbmciICkgPT09ICJib3JkZXItYm94IjsKKworICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxlbWVu
dHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3Vu
ZGVmaW5lZAorICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2dpP2lkPTY0OTI4NQorICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAorICAgIGlmICggdmFsIDw9IDAgfHwgdmFsID09
IG51bGwgKSB7CisgICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0
ZWQgY3NzIGlmIG5lY2Vzc2FyeQorICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUgKTsK
KyAgICAgICAgaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgdmFs
ID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcHV0ZWQg
dW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi4KKyAgICAgICAgaWYgKCBy
bnVtbm9ucHgudGVzdCh2YWwpICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIHdlIG5lZWQgdGhlIGNoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJv
d3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCisgICAgICAgIC8vIGZvciBnZXRD
b21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5
bGUKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmICggalF1ZXJ5LnN1
cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsK
KworICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQor
ICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworICAgIH0KKworICAgIC8vIHVz
ZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQg
c3R5bGVzCisgICAgcmV0dXJuICggdmFsICsKKyAgICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQo
CisgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIGV4dHJh
IHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAgICAg
dmFsdWVJc0JvcmRlckJveAorICAgICAgICApCisgICAgKSArICJweCI7Cit9CisKKworLy8gVHJ5
IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKK2Z1
bmN0aW9uIGNzc19kZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisgICAgaWYgKCBlbGVtZGlz
cGxheVsgbm9kZU5hbWUgXSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFt
ZSBdOworICAgIH0KKworICAgIHZhciBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSArICI+
IiApLmFwcGVuZFRvKCBkb2N1bWVudC5ib2R5ICksCisgICAgICAgIGRpc3BsYXkgPSBlbGVtLmNz
cygiZGlzcGxheSIpOworICAgIGVsZW0ucmVtb3ZlKCk7CisKKyAgICAvLyBJZiB0aGUgc2ltcGxl
IHdheSBmYWlscywKKyAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5
IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCisgICAgaWYgKCBkaXNwbGF5ID09PSAibm9u
ZSIgfHwgZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVh
dGVkIGlmcmFtZSBpZiBwb3NzaWJsZQorICAgICAgICBpZnJhbWUgPSBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKAorICAgICAgICAgICAgaWZyYW1lIHx8IGpRdWVyeS5leHRlbmQoIGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLCB7CisgICAgICAgICAgICAgICAgZnJhbWVCb3JkZXI6
IDAsCisgICAgICAgICAgICAgICAgd2lkdGg6IDAsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAw
CisgICAgICAgICAgICB9KQorICAgICAgICApOworCisgICAgICAgIC8vIENyZWF0ZSBhIGNhY2hl
YWJsZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQgb24gZmlyc3QgY2FsbC4KKyAgICAgICAg
Ly8gSUUgYW5kIE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1c2UgdGhlIGlmcmFtZURvYyB3aXRo
b3V0IHJlLXdyaXRpbmcgdGhlIGZha2UgSFRNTAorICAgICAgICAvLyBkb2N1bWVudCB0byBpdDsg
V2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1lbnQu
CisgICAgICAgIGlmICggIWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0ZUVsZW1lbnQgKSB7Cisg
ICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFtZS5j
b250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKKyAgICAgICAgICAgIGlmcmFtZURvYy53cml0ZSgi
PCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7CisgICAgICAgICAgICBpZnJhbWVEb2MuY2xv
c2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGVsZW0gPSBpZnJhbWVEb2MuYm9keS5hcHBlbmRD
aGlsZCggaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpICk7CisKKyAgICAgICAgZGlz
cGxheSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7CisgICAgICAgIGRvY3VtZW50LmJvZHku
cmVtb3ZlQ2hpbGQoIGlmcmFtZSApOworICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBjb3JyZWN0
IGRlZmF1bHQgZGlzcGxheQorICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsK
KworICAgIHJldHVybiBkaXNwbGF5OworfQorCitqUXVlcnkuZWFjaChbICJoZWlnaHQiLCAid2lk
dGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBd
ID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7Cisg
ICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4g
ZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhl
bQorICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlz
cGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzCisgICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBjdXJDU1Mo
IGVsZW0sICJkaXNwbGF5IiApICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHNl
dDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKKyAgICAgICAgICAgIHJldHVybiBz
ZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KKyAgICAgICAgICAgICAgICBh
dWdtZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAgICAg
ICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEsCisgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVtLCAi
Ym94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCIKKyAgICAgICAgICAgICAgICApIDogMAorICAg
ICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH07Cit9KTsKKworaWYgKCAhalF1ZXJ5LnN1cHBv
cnQub3BhY2l0eSApIHsKKyAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAvLyBJRSB1c2Vz
IGZpbHRlcnMgZm9yIG9wYWNpdHkKKyAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0KCAo
Y29tcHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXIg
OiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CisgICAgICAgICAgICAgICAgKCAwLjAxICog
cGFyc2VGbG9hdCggUmVnRXhwLiQxICkgKSArICIiIDoKKyAgICAgICAgICAgICAgICBjb21wdXRl
ZCA/ICIxIiA6ICIiOworICAgICAgICB9LAorCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0s
IHZhbHVlICkgeworICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKKyAgICAgICAg
ICAgICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKKyAgICAgICAgICAgICAg
ICBvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIg
KyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAorICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1cnJl
bnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKKwor
ICAgICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMgbm90
IGhhdmUgbGF5b3V0CisgICAgICAgICAgICAvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6b29t
IGxldmVsCisgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKKworICAgICAgICAgICAgLy8gaWYg
c2V0dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1w
dCB0byByZW1vdmUgZmlsdGVyIGF0dHJpYnV0ZSAjNjY1MgorICAgICAgICAgICAgaWYgKCB2YWx1
ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09
ICIiICYmCisgICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgeworCisgICAg
ICAgICAgICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3Rp
bGwgbGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0CisgICAgICAgICAgICAgICAgLy8gaWYg
ImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdh
bnQgdG8gYXZvaWQgdGhpcworICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJlbW92ZUF0dHJpYnV0
ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgorICAg
ICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKKworICAgICAg
ICAgICAgICAgIC8vIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGlu
IGEgY3NzIHJ1bGUsIHdlIGFyZSBkb25lCisgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50U3R5
bGUgJiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG90
aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCisgICAgICAgICAgICBzdHlsZS5maWx0ZXIg
PSByYWxwaGEudGVzdCggZmlsdGVyICkgPworICAgICAgICAgICAgICAgIGZpbHRlci5yZXBsYWNl
KCByYWxwaGEsIG9wYWNpdHkgKSA6CisgICAgICAgICAgICAgICAgZmlsdGVyICsgIiAiICsgb3Bh
Y2l0eTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKy8vIFRoZXNlIGhvb2tzIGNhbm5vdCBiZSBh
ZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0CisvLyBmb3IgaXQg
aXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKK2pRdWVyeShmdW5jdGlvbigpIHsKKyAg
ICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgeworICAgICAgICBq
UXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9u
KCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQz
IC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQK
KyAgICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVs
ZW1lbnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKKyAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJDU1MoIGVsZW0sICJtYXJnaW5SaWdodCIgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgIH0KKworICAgIC8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yOTA4NAorICAgIC8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBw
ZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKKyAgICAvLyBy
YXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVs
ZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQorICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnBp
eGVsUG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkgeworICAgICAgICBqUXVlcnkuZWFj
aCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgeworICAgICAgICAgICAg
alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7CisgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlv
biggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBwcm9w
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50
YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
bnVtbm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0g
KyAicHgiIDogcmV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgfQorCit9KTsKKworaWYgKCBqUXVlcnku
ZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgeworICAgIGpRdWVyeS5leHByLmZpbHRlcnMu
aGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiAoIGVsZW0ub2Zmc2V0
V2lkdGggPT09IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPT09IDAgKSB8fCAoIWpRdWVyeS5zdXBw
b3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHlsZS5k
aXNwbGF5KSB8fCBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKKyAgICB9
OworCisgICAgalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKKyAg
ICB9OworfQorCisvLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBw
cm9wZXJ0aWVzCitqUXVlcnkuZWFjaCh7CisgICAgbWFyZ2luOiAiIiwKKyAgICBwYWRkaW5nOiAi
IiwKKyAgICBib3JkZXI6ICJXaWR0aCIKK30sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHsK
KyAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0geworICAgICAgICBleHBh
bmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBpLAorCisgICAgICAgICAg
ICAgICAgLy8gYXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCisgICAgICAg
ICAgICAgICAgcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3BsaXQo
IiAiKSA6IFsgdmFsdWUgXSwKKyAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHt9OworCisgICAg
ICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBleHBh
bmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisgICAgICAgICAgICAg
ICAgICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOworICAgICAgICB9CisgICAg
fTsKKworICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7CisgICAgICAgIGpRdWVy
eS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7Cisg
ICAgfQorfSk7Cit2YXIgcjIwID0gLyUyMC9nLAorICAgIHJicmFja2V0ID0gL1xbXF0kLywKKyAg
ICByQ1JMRiA9IC9ccj9cbi9nLAorICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGlt
ZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdl
fHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKKyAgICByc2VsZWN0VGV4dGFyZWEg
PSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgc2Vy
aWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5z
ZXJpYWxpemVBcnJheSgpICk7CisgICAgfSwKKyAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkgOiB0
aGlzOworICAgICAgICB9KQorICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCisgICAgICAgICAgICAgICAg
KCB0aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8
fAorICAgICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTsKKyAgICAg
ICAgfSkKKyAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApeworICAgICAgICAgICAgdmFy
IHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisgICAgICAgICAgICByZXR1cm4gdmFsID09
IG51bGwgPworICAgICAgICAgICAgICAgIG51bGwgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5p
c0FycmF5KCB2YWwgKSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVu
Y3Rpb24oIHZhbCwgaSApeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTog
ZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAg
ICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5uYW1l
LCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICB9KS5nZXQo
KTsKKyAgICB9Cit9KTsKKworLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBv
ciBhIHNldCBvZgorLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKK2pRdWVyeS5wYXJh
bSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKKyAgICB2YXIgcHJlZml4LAorICAgICAg
ICBzID0gW10sCisgICAgICAgIGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAgICAg
ICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRz
IHZhbHVlCisgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8g
dmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKKyAgICAgICAgICAgIHNb
IHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJ
Q29tcG9uZW50KCB2YWx1ZSApOworICAgICAgICB9OworCisgICAgLy8gU2V0IHRyYWRpdGlvbmFs
IHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KKyAgICBpZiAoIHRyYWRpdGlv
bmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhT
ZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOworICAgIH0KKworICAg
IC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5
IG9mIGZvcm0gZWxlbWVudHMuCisgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5q
cXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKKyAgICAgICAgLy8gU2Vy
aWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCisgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CisgICAgICAg
IH0pOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0
aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisgICAgICAgIC8vIGRpZCBpdCks
IG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAgICAgICBmb3IgKCBwcmVm
aXggaW4gYSApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBd
LCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4g
dGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisgICAgcmV0dXJuIHMuam9pbiggIiYiICkucmVw
bGFjZSggcjIwLCAiKyIgKTsKK307CisKK2Z1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9i
aiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKKyAgICB2YXIgbmFtZTsKKworICAgIGlmICggalF1ZXJ5
LmlzQXJyYXkoIG9iaiApICkgeworICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KKyAg
ICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAgICAgICAgICBp
ZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworICAgICAgICAg
ICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKyAgICAgICAgICAg
ICAgICBhZGQoIHByZWZpeCwgdiApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwg
ZW5jb2RlIGl0cworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBk
ZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQorICAg
ICAgICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5nIHRv
IGRvIHNvIG1heSBjYXVzZQorICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyIGVycm9yLiBQb3Nz
aWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncworICAgICAgICAgICAgICAgIC8vIGRlc2Vy
aWFsaXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZworICAg
ICAgICAgICAgICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxv
dy4KKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2Yg
diA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIH0gZWxzZSBpZiAoICF0cmFkaXRpb25h
bCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgeworICAgICAgICAvLyBTZXJp
YWxpemUgb2JqZWN0IGl0ZW0uCisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAgICAg
ICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBd
LCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KKyAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiApOwor
ICAgIH0KK30KK3ZhcgorICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCisgICAgYWpheExvY1BhcnRz
LAorICAgIGFqYXhMb2NhdGlvbiwKKworICAgIHJoYXNoID0gLyMuKiQvLAorICAgIHJoZWFkZXJz
ID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxyIGNo
YXJhY3RlciBhdCBFT0wKKyAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2Nv
bCBkZXRlY3Rpb24KKyAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwtc3Rv
cmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCisgICAgcm5vQ29udGVudCA9
IC9eKD86R0VUfEhFQUQpJC8sCisgICAgcnByb3RvY29sID0gL15cL1wvLywKKyAgICBycXVlcnkg
PSAvXD8vLAorICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxb
XjxdKikqPFwvc2NyaXB0Pi9naSwKKyAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCisgICAgcnVy
bCA9IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywKKwor
ICAgIC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKKyAgICBfbG9hZCA9IGpR
dWVyeS5mbi5sb2FkLAorCisgICAgLyogUHJlZmlsdGVycworICAgICAqIDEpIFRoZXkgYXJlIHVz
ZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9y
IGFuIGV4YW1wbGUpCisgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKyAgICAgKiAgICAtIEJF
Rk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisgICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJp
YWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQor
ICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3lt
Ym9sICIqIiBjYW4gYmUgdXNlZAorICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGgg
dHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRl
ZAorICAgICAqLworICAgIHByZWZpbHRlcnMgPSB7fSwKKworICAgIC8qIFRyYW5zcG9ydHMgYmlu
ZGluZ3MKKyAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICogMikgdGhlIGNhdGNo
YWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFy
dCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisg
ICAgICovCisgICAgdHJhbnNwb3J0cyA9IHt9LAorCisgICAgLy8gQXZvaWQgY29tbWVudC1wcm9s
b2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNv
bXByZXNzaW9uCisgICAgYWxsVHlwZXMgPSBbIiovIl0gKyBbIioiXTsKKworLy8gIzgxMzgsIElF
IG1heSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKKy8vIGEgZmllbGQgZnJvbSB3
aW5kb3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAordHJ5IHsKKyAg
ICBhamF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOworfSBjYXRjaCggZSApIHsKKyAgICAvLyBV
c2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAorICAgIC8vIHNpbmNlIElFIHdp
bGwgbW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCisgICAgYWpheExvY2F0aW9uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CisgICAgYWpheExvY2F0aW9uLmhyZWYgPSAi
IjsKKyAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKK30KKworLy8gU2VnbWVu
dCBsb2NhdGlvbiBpbnRvIHBhcnRzCithamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2Nh
dGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3Ig
alF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlvbiBh
ZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworICAgIC8vIGRhdGFU
eXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisgICAgcmV0dXJu
IGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAgaWYgKCB0
eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGZ1
bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CisgICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb24g
PSAiKiI7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGF0YVR5cGUsIGxpc3QsIHBsYWNlQmVm
b3JlLAorICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJD
YXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICksCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAg
ICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGg7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggZnVuYyApICkgeworICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4g
dGhlIGRhdGFUeXBlRXhwcmVzc2lvbgorICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBp
KysgKSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUKKyAg
ICAgICAgICAgICAgICAvLyBhbnkgZXhpc3RpbmcgZWxlbWVudAorICAgICAgICAgICAgICAgIHBs
YWNlQmVmb3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKKyAgICAgICAgICAgICAgICBpZiAo
IHBsYWNlQmVmb3JlICkgeworICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBl
LnN1YnN0ciggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBb
XTsKKyAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFjY29y
ZGluZ2x5CisgICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5zaGlmdCIgOiAi
cHVzaCIgXSggZnVuYyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KKwor
Ly8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRz
CitmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAorICAgICAgICBkYXRhVHlwZSAvKiBpbnRlcm5h
bCAqLywgaW5zcGVjdGVkIC8qIGludGVybmFsICovICkgeworCisgICAgZGF0YVR5cGUgPSBkYXRh
VHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOworICAgIGluc3BlY3RlZCA9IGluc3BlY3Rl
ZCB8fCB7fTsKKworICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisKKyAgICB2YXIg
c2VsZWN0aW9uLAorICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdLAorICAgICAg
ICBpID0gMCwKKyAgICAgICAgbGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKKyAgICAg
ICAgZXhlY3V0ZU9ubHkgPSAoIHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyApOworCisgICAgZm9y
ICggOyBpIDwgbGVuZ3RoICYmICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysgKSB7
CisgICAgICAgIHNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25z
LCBqcVhIUiApOworICAgICAgICAvLyBJZiB3ZSBnb3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRh
dGFUeXBlCisgICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVjdXRpbmcgb25seSBhbmQgbm90
IGRvbmUgYWxyZWFkeQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rpb24gPT09ICJzdHJpbmci
ICkgeworICAgICAgICAgICAgaWYgKCAhZXhlY3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBzZWxlY3Rp
b24gXSApIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQo
IHNlbGVjdGlvbiApOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0
ZXJzT3JUcmFuc3BvcnRzKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHdlJ3JlIG9ubHkgZXhlY3V0
aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCisgICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFsbCBk
YXRhVHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5CisgICAgaWYgKCAoIGV4ZWN1dGVPbmx5IHx8ICFz
ZWxlY3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAiKiIgXSApIHsKKyAgICAgICAgc2VsZWN0aW9uID0g
aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCisgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3BlY3RlZCApOworICAg
IH0KKyAgICAvLyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJzKQor
ICAgIC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsZXIgaW4gdGhhdCBjYXNlCisg
ICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBv
cHRpb25zCisvLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRl
bmRlZCkKKy8vIEZpeGVzICM5ODg3CitmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyAp
IHsKKyAgICB2YXIga2V5LCBkZWVwLAorICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4
U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CisgICAgZm9yICgga2V5IGluIHNyYyApIHsKKyAg
ICAgICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAoIGZs
YXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsg
a2V5IF0gPSBzcmNbIGtleSBdOworICAgICAgICB9CisgICAgfQorICAgIGlmICggZGVlcCApIHsK
KyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7CisgICAgfQorfQor
CitqUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7Cisg
ICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKKyAgICAgICAgcmV0
dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICB9CisKKyAgICAvLyBEb24n
dCBkbyBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAorICAgIGlm
ICggIXRoaXMubGVuZ3RoICkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICB2
YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorICAgICAgICBzZWxmID0gdGhpcywKKyAgICAg
ICAgb2ZmID0gdXJsLmluZGV4T2YoIiAiKTsKKworICAgIGlmICggb2ZmID49IDAgKSB7CisgICAg
ICAgIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKKyAgICAgICAgdXJs
ID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKKyAgICB9CisKKyAgICAvLyBJZiBpdCdzIGEgZnVuY3Rp
b24KKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAgICAgICAv
LyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICBjYWxsYmFjayA9IHBh
cmFtczsKKyAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgLy8gT3RoZXJ3aXNlLCBi
dWlsZCBhIHBhcmFtIHN0cmluZworICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFy
YW1zID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgdHlwZSA9ICJQT1NUIjsKKyAgICB9CisKKyAg
ICAvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKKyAgICBqUXVlcnkuYWpheCh7CisgICAg
ICAgIHVybDogdXJsLAorCisgICAgICAgIC8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmlu
ZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAorICAgICAgICB0eXBlOiB0eXBlLAor
ICAgICAgICBkYXRhVHlwZTogImh0bWwiLAorICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAgICAg
IGNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKKyAgICAgICAgICAgIGlmICgg
Y2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9u
c2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkgewor
CisgICAgICAgIC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjawor
ICAgICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKKworICAgICAgICAvLyBTZWUgaWYgYSBzZWxl
Y3RvciB3YXMgc3BlY2lmaWVkCisgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPworCisgICAg
ICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cworICAgICAg
ICAgICAgalF1ZXJ5KCI8ZGl2PiIpCisKKyAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhlIGNv
bnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKKyAgICAgICAg
ICAgICAgICAvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4gSUUK
KyAgICAgICAgICAgICAgICAuYXBwZW5kKCByZXNwb25zZVRleHQucmVwbGFjZSggcnNjcmlwdCwg
IiIgKSApCisKKyAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBlbGVtZW50
cworICAgICAgICAgICAgICAgIC5maW5kKCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAgLy8g
SWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3BvbnNl
VGV4dCApOworCisgICAgfSk7CisKKyAgICByZXR1cm4gdGhpczsKK307CisKKy8vIEF0dGFjaCBh
IGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCitqUXVl
cnkuZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhT
dWNjZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7CisgICAgalF1
ZXJ5LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApeworICAgICAgICByZXR1cm4gdGhpcy5vbiggbywg
ZiApOworICAgIH07Cit9KTsKKworalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5j
dGlvbiggaSwgbWV0aG9kICkgeworICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJs
LCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKKyAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIGlm
IGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggZGF0YSApICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7CisgICAg
ICAgICAgICBjYWxsYmFjayA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHsKKyAgICAgICAgICAgIHR5
cGU6IG1ldGhvZCwKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgZGF0YTogZGF0
YSwKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAorICAgICAgICAgICAgZGF0YVR5cGU6
IHR5cGUKKyAgICAgICAgfSk7CisgICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKworICAg
IGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBq
UXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisgICAgfSwK
KworICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworICAgICAg
ICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CisgICAg
fSwKKworICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8g
dGFyZ2V0CisgICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRz
LgorICAgIC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3Mu
CisgICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHsKKyAgICAgICAg
aWYgKCBzZXR0aW5ncyApIHsKKyAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2Jq
ZWN0CisgICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3Mg
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0dGlu
Z3MKKyAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OworICAgICAgICAgICAgdGFyZ2V0ID0g
alF1ZXJ5LmFqYXhTZXR0aW5nczsKKyAgICAgICAgfQorICAgICAgICBhamF4RXh0ZW5kKCB0YXJn
ZXQsIHNldHRpbmdzICk7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfSwKKworICAgIGFq
YXhTZXR0aW5nczogeworICAgICAgICB1cmw6IGFqYXhMb2NhdGlvbiwKKyAgICAgICAgaXNMb2Nh
bDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKKyAgICAgICAgZ2xv
YmFsOiB0cnVlLAorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgY29udGVudFR5cGU6ICJh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAorICAgICAg
ICBwcm9jZXNzRGF0YTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6IHRydWUsCisgICAgICAgIC8qCisg
ICAgICAgIHRpbWVvdXQ6IDAsCisgICAgICAgIGRhdGE6IG51bGwsCisgICAgICAgIGRhdGFUeXBl
OiBudWxsLAorICAgICAgICB1c2VybmFtZTogbnVsbCwKKyAgICAgICAgcGFzc3dvcmQ6IG51bGws
CisgICAgICAgIGNhY2hlOiBudWxsLAorICAgICAgICB0aHJvd3M6IGZhbHNlLAorICAgICAgICB0
cmFkaXRpb25hbDogZmFsc2UsCisgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAqLworCisg
ICAgICAgIGFjY2VwdHM6IHsKKyAgICAgICAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4
dC94bWwiLAorICAgICAgICAgICAgaHRtbDogInRleHQvaHRtbCIsCisgICAgICAgICAgICB0ZXh0
OiAidGV4dC9wbGFpbiIsCisgICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4
dC9qYXZhc2NyaXB0IiwKKyAgICAgICAgICAgICIqIjogYWxsVHlwZXMKKyAgICAgICAgfSwKKwor
ICAgICAgICBjb250ZW50czogeworICAgICAgICAgICAgeG1sOiAveG1sLywKKyAgICAgICAgICAg
IGh0bWw6IC9odG1sLywKKyAgICAgICAgICAgIGpzb246IC9qc29uLworICAgICAgICB9LAorCisg
ICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIs
CisgICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IgorICAgICAgICB9LAorCisgICAgICAg
IC8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCisgICAgICAgIC8vIDEpIGtleSBmb3JtYXQgaXMg
InNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3ZWVu
KQorICAgICAgICAvLyAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBmb3Ig
c291cmNlX3R5cGUKKyAgICAgICAgY29udmVydGVyczogeworCisgICAgICAgICAgICAvLyBDb252
ZXJ0IGFueXRoaW5nIHRvIHRleHQKKyAgICAgICAgICAgICIqIHRleHQiOiB3aW5kb3cuU3RyaW5n
LAorCisgICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlv
bikKKyAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAorCisgICAgICAgICAgICAvLyBFdmFs
dWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCisgICAgICAgICAgICAidGV4dCBqc29uIjog
alF1ZXJ5LnBhcnNlSlNPTiwKKworICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKKyAg
ICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAorICAgICAgICB9LAorCisgICAg
ICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CisgICAg
ICAgIC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKKyAgICAg
ICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKKyAgICAgICAg
Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCisgICAgICAgIGZsYXRPcHRpb25zOiB7
CisgICAgICAgICAgICBjb250ZXh0OiB0cnVlLAorICAgICAgICAgICAgdXJsOiB0cnVlCisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFu
c3BvcnRzKCBwcmVmaWx0ZXJzICksCisgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJz
T3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCisKKyAgICAvLyBNYWluIG1ldGhvZAorICAgIGFq
YXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7CisKKyAgICAgICAgLy8gSWYgdXJsIGlzIGFu
IG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKKyAgICAgICAgaWYgKCB0eXBlb2Yg
dXJsID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7CisgICAgICAg
ICAgICB1cmwgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBvcHRp
b25zIHRvIGJlIGFuIG9iamVjdAorICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKwor
ICAgICAgICB2YXIgLy8gaWZNb2RpZmllZCBrZXkKKyAgICAgICAgICAgIGlmTW9kaWZpZWRLZXks
CisgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25zZUhl
YWRlcnNTdHJpbmcsCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisgICAgICAgICAgICAv
LyB0cmFuc3BvcnQKKyAgICAgICAgICAgIHRyYW5zcG9ydCwKKyAgICAgICAgICAgIC8vIHRpbWVv
dXQgaGFuZGxlCisgICAgICAgICAgICB0aW1lb3V0VGltZXIsCisgICAgICAgICAgICAvLyBDcm9z
cy1kb21haW4gZGV0ZWN0aW9uIHZhcnMKKyAgICAgICAgICAgIHBhcnRzLAorICAgICAgICAgICAg
Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCisgICAgICAg
ICAgICBmaXJlR2xvYmFscywKKyAgICAgICAgICAgIC8vIExvb3AgdmFyaWFibGUKKyAgICAgICAg
ICAgIGksCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0Cisg
ICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKKyAgICAgICAg
ICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBz
LmNvbnRleHQgfHwgcywKKyAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMK
KyAgICAgICAgICAgIC8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHByb3Zp
ZGVkIGluIHRoZSBvcHRpb25zCisgICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBhIERPTSBub2Rl
IG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9
IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgorICAgICAgICAgICAgICAgICggY2FsbGJhY2tDb250
ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVlcnku
ZXZlbnQsCisgICAgICAgICAgICAvLyBEZWZlcnJlZHMKKyAgICAgICAgICAgIGRlZmVycmVkID0g
alF1ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5
LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVu
ZGVudCBjYWxsYmFja3MKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwg
e30sCisgICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQor
ICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKKyAgICAgICAgICAgIHJlcXVlc3RIZWFk
ZXJzTmFtZXMgPSB7fSwKKyAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQorICAgICAgICAg
ICAgc3RhdGUgPSAwLAorICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisgICAg
ICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisgICAgICAgICAgICAvLyBGYWtlIHhocgor
ICAgICAgICAgICAganFYSFIgPSB7CisKKyAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAor
CisgICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBz
ZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxuYW1l
ID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJl
cXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBd
IHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBd
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFJhdyBz
dHJpbmcKKyAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRl
cnNTdHJpbmcgOiBudWxsOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAv
LyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgZ2V0
UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVy
c1N0cmluZyApICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
SGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNl
KCkgXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFk
ZXIKKyAgICAgICAgICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzLm1pbWVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0
aW9uKCBzdGF0dXNUZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gc3Rh
dHVzVGV4dCB8fCBzdHJBYm9ydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFuc3BvcnQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1RleHQg
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lKCAwLCBz
dGF0dXNUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4g
ZXZlcnl0aGluZyBpcyBkb25lCisgICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNl
IGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKKyAgICAgICAgLy8gYXQgdGhlIGVu
ZCBvZiB0aGUgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG1vcmUgbG9naWNhbCBhbmQgcmVhZGFi
bGUpCisgICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVz
cG9uc2VzLCBoZWFkZXJzICkgeworICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2Vzcywg
ZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
bmF0aXZlU3RhdHVzVGV4dDsKKworICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKKyAgICAgICAg
ICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisgICAgICAgICAg
ICBzdGF0ZSA9IDI7CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3Rz
CisgICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKKyAgICAgICAgICAgICAgICBjbGVh
clRpbWVvdXQoIHRpbWVvdXRUaW1lciApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgorICAg
ICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUg
dXNlZCkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAg
Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycworICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3Ry
aW5nID0gaGVhZGVycyB8fCAiIjsKKworICAgICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUKKyAg
ICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7CisKKyAgICAg
ICAgICAgIC8vIEdldCByZXNwb25zZSBkYXRhCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyAp
IHsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpx
WEhSLCByZXNwb25zZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgc3Vj
Y2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKKyAgICAgICAgICAgIGlmICggc3RhdHVzID49
IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7CisKKyAgICAgICAgICAg
ICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhl
YWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICAgICAgICAgIGlmICggcy5pZk1v
ZGlmaWVkICkgeworCisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVz
cG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBt
b2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRb
IGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWci
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmllZDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IElmIG5vdCBtb2RpZmllZAorICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7CisgICAg
ICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGRhdGEKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAg
ICAgICAgIGlzU3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOworICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRlOworICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gaXNTdWNjZXNzLmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGVycm9y
ID0gaXNTdWNjZXNzLmVycm9yOworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAhZXJy
b3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAorICAgICAgICAgICAgICAg
IC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0cwor
ICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICBpZiAo
ICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4
dCA9ICJlcnJvciI7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNldCBk
YXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CisgICAgICAgICAgICBqcVhIUi5zdGF0dXMgPSBz
dGF0dXM7CisgICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0
IHx8IHN0YXR1c1RleHQgKSArICIiOworCisgICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9yCisg
ICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5y
ZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhS
IF0gKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVq
ZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJh
Y2tzCisgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CisgICAgICAg
ICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9i
YWxzICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWph
eCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXBsZXRlCisgICAgICAgICAgICBjb21w
bGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1Rl
eHQgXSApOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAg
ICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwg
cyBdICk7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVy
CisgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBdHRhY2gg
ZGVmZXJyZWRzCisgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CisgICAgICAgIGpx
WEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOworICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZh
aWw7CisgICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CisKKyAg
ICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAganFYSFIuc3RhdHVz
Q29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7CisgICAgICAgICAgICBpZiAoIG1hcCApIHsKKyAgICAg
ICAgICAgICAgICB2YXIgdG1wOworICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCB0bXAgaW4gbWFwICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwgbWFwW3RtcF0g
XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07CisgICAgICAgICAgICAg
ICAgICAgIGpxWEhSLmFsd2F5cyggdG1wICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH07CisKKyAgICAgICAgLy8g
UmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCisgICAg
ICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0
aCBwcm90b2NvbC1sZXNzIHVybHMpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFy
YW1ldGVyIGlmIGF2YWlsYWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgKSAr
ICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFy
dHNbIDEgXSArICIvLyIgKTsKKworICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0Cisg
ICAgICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICkudG9M
b3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAvLyBBIGNyb3NzLWRv
bWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6cG9y
dCBtaXNtYXRjaAorICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKKyAgICAg
ICAgICAgIHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7CisgICAgICAg
ICAgICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCisgICAgICAgICAgICAgICAgKCBwYXJ0
c1sgMSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9PSBhamF4TG9jUGFy
dHNbIDIgXSB8fAorICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sg
MSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9CisgICAgICAgICAgICAgICAgICAgICAg
ICAoIGFqYXhMb2NQYXJ0c1sgMyBdIHx8ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRwOiIg
PyA4MCA6IDQ0MyApICkgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworICAgICAgICBpZiAoIHMuZGF0
YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgeworICAg
ICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgaW5zcGVj
dFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7
CisKKyAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIs
IHN0b3AgdGhlcmUKKyAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJl
dHVybiBqcVhIUjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBl
dmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCisgICAgICAgIGZpcmVHbG9iYWxzID0gcy5nbG9i
YWw7CisKKyAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCisgICAgICAgIHMudHlwZSA9IHMu
dHlwZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhh
cyBjb250ZW50CisgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlw
ZSApOworCisgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKyAgICAg
ICAgaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisgICAgICAg
ICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250
ZW50CisgICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKKworICAgICAgICAgICAgLy8gSWYg
ZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAorICAgICAgICAgICAgaWYgKCBz
LmRhdGEgKSB7CisgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwg
KSA/ICImIiA6ICI/IiApICsgcy5kYXRhOworICAgICAgICAgICAgICAgIC8vICM5NjgyOiByZW1v
dmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKKyAgICAg
ICAgICAgICAgICBkZWxldGUgcy5kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFtZXRl
cgorICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IHMudXJsOworCisgICAgICAgICAgICAvLyBB
ZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIHMuY2FjaGUg
PT09IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygpLAor
ICAgICAgICAgICAgICAgICAgICAvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJlCisg
ICAgICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgdHMg
KTsKKworICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQgdGlt
ZXN0YW1wIHRvIHRoZSBlbmQKKyAgICAgICAgICAgICAgICBzLnVybCA9IHJldCArICggKCByZXQg
PT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAiXz0i
ICsgdHMgOiAiIiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0
IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CisgICAgICAgIGlmICgg
cy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRp
b25zLmNvbnRlbnRUeXBlICkgeworICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigg
IkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBp
ZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgeworICAg
ICAgICAgICAgaWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7CisgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAgICAg
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBq
UXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAgICAgICAg
ICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5l
dGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBv
biB0aGUgZGF0YVR5cGUKKyAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKKyAgICAgICAg
ICAgICJBY2NlcHQiLAorICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNb
IHMuZGF0YVR5cGVzWzBdIF0gPworICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlw
ZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsg
IjsgcT0wLjAxIiA6ICIiICkgOgorICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0KKyAg
ICAgICAgKTsKKworICAgICAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KKyAgICAgICAg
Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVh
ZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb3cg
Y3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAorICAgICAgICBpZiAoIHMu
YmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhS
LCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CisgICAgICAgICAgICAgICAgLy8g
QWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCisgICAgICAgICAgICAgICAgcmV0
dXJuIGpxWEhSLmFib3J0KCk7CisKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFib3J0aW5nIGlz
IG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvbgorICAgICAgICBzdHJBYm9ydCA9ICJhYm9ydCI7CisK
KyAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCisgICAgICAgIGZvciAo
IGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKKyAgICAgICAg
ICAgIGpxWEhSWyBpIF0oIHNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0IHRy
YW5zcG9ydAorICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0
cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKKworICAgICAgICAvLyBJZiBubyB0
cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKKyAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgeworICAg
ICAgICAgICAgZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gMTsKKyAgICAgICAgICAgIC8vIFNlbmQgZ2xv
YmFsIGV2ZW50CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAg
ICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0g
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgIGlm
ICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworICAgICAgICAgICAgICAgIHRpbWVvdXRU
aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIGpxWEhS
LmFib3J0KCAidGltZW91dCIgKTsKKyAgICAgICAgICAgICAgICB9LCBzLnRpbWVvdXQgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
IDE7CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25l
ICk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgLy8gUHJvcGFn
YXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQorICAgICAgICAgICAgICAgIGlmICgg
c3RhdGUgPCAyICkgeworICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOworICAgICAg
ICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZQorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpxWEhSOworICAgIH0s
CisKKyAgICAvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJp
ZXMKKyAgICBhY3RpdmU6IDAsCisKKyAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBm
b3IgbmV4dCByZXF1ZXN0CisgICAgbGFzdE1vZGlmaWVkOiB7fSwKKyAgICBldGFnOiB7fQorCit9
KTsKKworLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgorICogLSBzZXRz
IGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKKyAqIC0gZmluZHMgdGhlIHJpZ2h0
IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0
YVR5cGUpCisgKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLworZnVu
Y3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKworICAg
IHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKyAgICAgICAgY29u
dGVudHMgPSBzLmNvbnRlbnRzLAorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKKyAg
ICAgICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOworCisgICAgLy8gRmlsbCBy
ZXNwb25zZVhYWCBmaWVsZHMKKyAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkgewor
ICAgICAgICBpZiAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAgICAgICAganFYSFJbIHJl
c3BvbnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGlu
IHRoZSBwcm9jZXNzCisgICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CisgICAg
ICAgIGRhdGFUeXBlcy5zaGlmdCgpOworICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIo
ICJjb250ZW50LXR5cGUiICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiB3
ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKKyAgICBpZiAoIGN0ICkgewor
ICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworICAgICAgICAgICAgaWYgKCBjb250
ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKKyAgICAgICAg
ICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCisgICAgaWYg
KCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgIGZpbmFsRGF0YVR5cGUg
PSBkYXRhVHlwZXNbIDAgXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUcnkgY29udmVydGli
bGUgZGF0YVR5cGVzCisgICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAg
ICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsg
ZGF0YVR5cGVzWzBdIF0gKSB7CisgICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5cGU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ICFmaXJzdERhdGFUeXBlICkgeworICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0
IG9uZQorICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFU
eXBlOworICAgIH0KKworICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKKyAgICAvLyBXZSBh
ZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAorICAgIC8vIGFuZCByZXR1cm4g
dGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7Cisg
ICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7CisgICAgICAg
ICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKKyAgICB9Cit9CisKKy8vIENo
YWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9u
c2UKK2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKKworICAgIHZhciBjb252
LCBjb252MiwgY3VycmVudCwgdG1wLAorICAgICAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRh
dGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCisgICAg
ICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCksCisgICAgICAgIHByZXYgPSBkYXRh
VHlwZXNbIDAgXSwKKyAgICAgICAgY29udmVydGVycyA9IHt9LAorICAgICAgICBpID0gMDsKKwor
ICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgaWYgKCBzLmRhdGFG
aWx0ZXIgKSB7CisgICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5k
YXRhVHlwZSApOworICAgIH0KKworICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxv
d2VyY2FzZWQga2V5cworICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7CisgICAgICAgIGZvciAo
IGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgeworICAgICAgICAgICAgY29udmVydGVyc1sgY29udi50
b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlLCB0b2xlcmF0aW5n
IGxpc3QgbW9kaWZpY2F0aW9uCisgICAgZm9yICggOyAoY3VycmVudCA9IGRhdGFUeXBlc1srK2ld
KTsgKSB7CisKKyAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBk
YXRhVHlwZSBpcyBub24tYXV0bworICAgICAgICBpZiAoIGN1cnJlbnQgIT09ICIqIiApIHsKKwor
ICAgICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1h
dXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAorICAgICAgICAgICAgaWYgKCBwcmV2ICE9PSAi
KiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIFNlZWsgYSBk
aXJlY3QgY29udmVydGVyCisgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHByZXYg
KyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKKworICAg
ICAgICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCisgICAgICAgICAgICAg
ICAgaWYgKCAhY29udiApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIgaW4gY29u
dmVydGVycyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29udjIgb3V0cHV0
cyBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxpdCgiICIp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRl
ZCB0byBhY2NlcHRlZCBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBj
b252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVy
bWVkaWF0ZSBkYXRhVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnNwbGljZSggaS0tLCAwLCBjdXJyZW50ICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVp
dmFsZW5jZSkKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNh
dGNoIGFuZCByZXR1cm4gdGhlbQorICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgJiYgc1si
dGhyb3dzIl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJl
c3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29u
diggcmVzcG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlOiAicGFyc2VyZXJyb3Ii
LCBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2ICsgIiB0byAi
ICsgY3VycmVudCB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBVcGRhdGUgcHJldiBmb3IgbmV4dCBpdGVyYXRpb24KKyAgICAgICAgICAgIHByZXYgPSBjdXJy
ZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwg
ZGF0YTogcmVzcG9uc2UgfTsKK30KK3ZhciBvbGRDYWxsYmFja3MgPSBbXSwKKyAgICBycXVlc3Rp
b24gPSAvXD8vLAorICAgIHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy8sCisgICAgbm9uY2Ug
PSBqUXVlcnkubm93KCk7CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4
U2V0dXAoeworICAgIGpzb25wOiAiY2FsbGJhY2siLAorICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBq
UXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7CisgICAgICAgIHRoaXNbIGNhbGxi
YWNrIF0gPSB0cnVlOworICAgICAgICByZXR1cm4gY2FsbGJhY2s7CisgICAgfQorfSk7CisKKy8v
IERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29u
cCByZXF1ZXN0cworalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24o
IHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgeworCisgICAgdmFyIGNhbGxiYWNrTmFtZSwg
b3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAorICAgICAgICBkYXRhID0gcy5kYXRhLAor
ICAgICAgICB1cmwgPSBzLnVybCwKKyAgICAgICAgaGFzQ2FsbGJhY2sgPSBzLmpzb25wICE9PSBm
YWxzZSwKKyAgICAgICAgcmVwbGFjZUluVXJsID0gaGFzQ2FsbGJhY2sgJiYgcmpzb25wLnRlc3Qo
IHVybCApLAorICAgICAgICByZXBsYWNlSW5EYXRhID0gaGFzQ2FsbGJhY2sgJiYgIXJlcGxhY2VJ
blVybCAmJiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICEoIHMuY29u
dGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29k
ZWQiKSAmJgorICAgICAgICAgICAgcmpzb25wLnRlc3QoIGRhdGEgKTsKKworICAgIC8vIEhhbmRs
ZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBwYXJh
bWV0ZXIgdG8gc2V0CisgICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiIHx8IHJl
cGxhY2VJblVybCB8fCByZXBsYWNlSW5EYXRhICkgeworCisgICAgICAgIC8vIEdldCBjYWxsYmFj
ayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQK
KyAgICAgICAgY2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rp
b24oIHMuanNvbnBDYWxsYmFjayApID8KKyAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjaygpIDoK
KyAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjazsKKyAgICAgICAgb3ZlcndyaXR0ZW4gPSB3aW5k
b3dbIGNhbGxiYWNrTmFtZSBdOworCisgICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVy
bCBvciBmb3JtIGRhdGEKKyAgICAgICAgaWYgKCByZXBsYWNlSW5VcmwgKSB7CisgICAgICAgICAg
ICBzLnVybCA9IHVybC5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsKKyAg
ICAgICAgfSBlbHNlIGlmICggcmVwbGFjZUluRGF0YSApIHsKKyAgICAgICAgICAgIHMuZGF0YSA9
IGRhdGEucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIGhhc0NhbGxiYWNrICkgeworICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlc3Rp
b24udGVzdCggdXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05h
bWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmll
dmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIHMuY29udmVydGVyc1sic2Ny
aXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VDb250
YWluZXIgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyAi
IHdhcyBub3QgY2FsbGVkIiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJl
c3BvbnNlQ29udGFpbmVyWyAwIF07CisgICAgICAgIH07CisKKyAgICAgICAgLy8gZm9yY2UganNv
biBkYXRhVHlwZQorICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOworCisgICAgICAg
IC8vIEluc3RhbGwgY2FsbGJhY2sKKyAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7Cisg
ICAgICAgIH07CisKKyAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNv
bnZlcnRlcnMpCisgICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IC8vIFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUKKyAgICAgICAgICAgIHdpbmRvd1sgY2FsbGJh
Y2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsKKworICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFzIGZy
ZWUKKyAgICAgICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7CisgICAgICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0
aGluZ3MgYXJvdW5kCisgICAgICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxT
ZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisgICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUgY2Fs
bGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgICAgIG9sZENhbGxiYWNrcy5w
dXNoKCBjYWxsYmFja05hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2Fs
bCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAgICAgICAg
ICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRl
biApICkgeworICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsg
MCBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0g
b3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIERlbGVn
YXRlIHRvIHNjcmlwdAorICAgICAgICByZXR1cm4gInNjcmlwdCI7CisgICAgfQorfSk7CisvLyBJ
bnN0YWxsIHNjcmlwdCBkYXRhVHlwZQoralF1ZXJ5LmFqYXhTZXR1cCh7CisgICAgYWNjZXB0czog
eworICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKyAg
ICB9LAorICAgIGNvbnRlbnRzOiB7CisgICAgICAgIHNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNj
cmlwdC8KKyAgICB9LAorICAgIGNvbnZlcnRlcnM6IHsKKyAgICAgICAgInRleHQgc2NyaXB0Ijog
ZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCAp
OworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKyAgICB9Cit9KTsKKworLy8g
SGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKK2pRdWVyeS5hamF4UHJlZmls
dGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisgICAgaWYgKCBzLmNhY2hlID09PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCBzLmNy
b3NzRG9tYWluICkgeworICAgICAgICBzLnR5cGUgPSAiR0VUIjsKKyAgICAgICAgcy5nbG9iYWwg
PSBmYWxzZTsKKyAgICB9Cit9KTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0
CitqUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKKworICAgIC8v
IFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKKyAg
ICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisKKyAgICAgICAgdmFyIHNjcmlwdCwKKyAgICAgICAg
ICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAiaGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAgcmV0
dXJuIHsKKworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgeworCisg
ICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIg
KTsKKworICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKKyAgICAgICAgICAgICAgICAgICAgc2Ny
aXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHMudXJsOworCisgICAgICAgICAgICAgICAgLy8gQXR0
YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKKyAgICAgICAgICAgICAgICBzY3JpcHQub25s
b2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkg
eworCisgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3Rh
dGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCisgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IG51bGw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2Ny
aXB0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5v
ZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCggc2Ny
aXB0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmlwdCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sg
aWYgbm90IGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQg
b2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KKyAgICAgICAgICAgICAg
ICAvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAjNDM3
OCkuCisgICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5maXJz
dENoaWxkICk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHQgKSB7CisgICAgICAgICAgICAgICAgICAg
IHNjcmlwdC5vbmxvYWQoIDAsIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfQorfSk7Cit2YXIgeGhyQ2FsbGJhY2tzLAorICAgIC8vICM1Mjgw
OiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2UgZG9u
J3QgYWJvcnQgb24gdW5sb2FkCisgICAgeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3RpdmVY
T2JqZWN0ID8gZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIEFib3J0IGFsbCBwZW5kaW5nIHJlcXVl
c3RzCisgICAgICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgeworICAgICAgICAg
ICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOworICAgICAgICB9CisgICAgfSA6IGZhbHNl
LAorICAgIHhocklkID0gMDsKKworLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCitmdW5jdGlv
biBjcmVhdGVTdGFuZGFyZFhIUigpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gbmV3IHdp
bmRvdy5YTUxIdHRwUmVxdWVzdCgpOworICAgIH0gY2F0Y2goIGUgKSB7fQorfQorCitmdW5jdGlv
biBjcmVhdGVBY3RpdmVYSFIoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIG5ldyB3aW5k
b3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOworICAgIH0gY2F0Y2goIGUg
KSB7fQorfQorCisvLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0CisvLyAoVGhpcyBpcyBzdGls
bCBhdHRhY2hlZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCitq
UXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KKyAgICAvKiBN
aWNyb3NvZnQgZmFpbGVkIHRvIHByb3Blcmx5CisgICAgICogaW1wbGVtZW50IHRoZSBYTUxIdHRw
UmVxdWVzdCBpbiBJRTcgKGNhbid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAorICAgICAqIHNvIHdl
IHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQorICAgICAqIEFkZGl0
aW9uYWxseSBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbworICAg
ICAqIHdlIG5lZWQgYSBmYWxsYmFjay4KKyAgICAgKi8KKyAgICBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVB
Y3RpdmVYSFIoKTsKKyAgICB9IDoKKyAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2Ug
dGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICAgIGNyZWF0ZVN0YW5kYXJkWEhS
OworCisvLyBEZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCisoZnVuY3Rpb24oIHhociApIHsK
KyAgICBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuc3VwcG9ydCwgeworICAgICAgICBhamF4OiAhIXho
ciwKKyAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIgKQor
ICAgIH0pOworfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKKworLy8gQ3JlYXRlIHRy
YW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKK2lmICggalF1ZXJ5LnN1
cHBvcnQuYWpheCApIHsKKworICAgIGpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBzICkg
eworICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJv
dWdoIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5
LnN1cHBvcnQuY29ycyApIHsKKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrOworCisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBj
b21wbGV0ZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCisgICAg
ICAgICAgICAgICAgICAgIHZhciBoYW5kbGUsIGksCisgICAgICAgICAgICAgICAgICAgICAgICB4
aHIgPSBzLnhocigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tldAor
ICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRlcyBh
IGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBz
LnVzZXJuYW1lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwg
cy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUs
IHMudXJsLCBzLmFzeW5jICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCisgICAgICAgICAgICAg
ICAgICAgIGlmICggcy54aHJGaWVsZHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBpIGluIHMueGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclsg
aSBdID0gcy54aHJGaWVsZHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1pbWUg
dHlwZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzLm1pbWVUeXBlICYmIHho
ci5vdmVycmlkZU1pbWVUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm92ZXJy
aWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25z
IGZvciBhIHByZWZsaWdodCBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBhIGpp
Z3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFz
aXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBz
YW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3Zp
ZGVkLgorICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJz
WyJYLVJlcXVlc3RlZC1XaXRoIl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJz
WyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRj
aCBmb3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMworICAgICAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJzICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBo
ZWFkZXJzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCggXyApIHt9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2VuZCB0
aGUgcmVxdWVzdAorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSByYWlzZSBhbiBleGNl
cHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlZCBp
biBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCisgICAgICAgICAgICAgICAgICAg
IHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gTGlzdGVuZXIKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sg
PSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25zIHdo
ZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFu
IHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cnJlZAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9Db21wb25lbnRf
cmV0dXJuZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1RfQVZBSUxBQkxF
KQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4
aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE9ubHkgY2FsbGVkIG9uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBoYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHhockNhbGxiYWNrc1sgaGFu
ZGxlIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBpdCdzIGFuIGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggaXNBYm9ydCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFi
b3J0IGl0IG1hbnVhbGx5IGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB4
aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZXMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhtbCA9IHhoci5yZXNwb25zZVhNTDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5NTgg
Ki8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Vz
LnhtbCA9IHhtbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXF1ZXN0aW5nIGJpbmFy
eSBkYXRhLCBJRTYtOSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3BvbnNlVGV4
dCAoIzExNDI2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9IHho
ci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoKCBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNl
cHRpb24gd2hlbiBhY2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2
aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNUZXh0ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBz
dGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0
YTogYXNzdW1lIGEgc3VjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRoZSBi
ZXN0IHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZG8gZ2l2
ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3BvbnNl
cy50ZXh0ID8gMjAwIDogNDA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAy
MDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1
cyA9PT0gMTIyMyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0dXMgPSAyMDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0
aW9uICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vz
c0V4Y2VwdGlvbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21wbGV0
ZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1RleHQs
IHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5h
c3luYyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMgbW9k
ZSB3ZSBmaXJlIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUU2ICYgSUU3KSBpZiBpdCdzIGluIGNh
Y2hlIGFuZCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmVkIGRp
cmVjdGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNldFRpbWVvdXQoIGNhbGxiYWNrLCAwICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSArK3hocklkOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3QgaWYg
bmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5s
b2FkIGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4aHJDYWxsYmFj
a3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrcyA9IHt9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVubG9h
ZCggeGhyT25VbmxvYWRBYm9ydCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhycyBj
YWxsYmFja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGhhbmRs
ZSBdID0gY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbGJhY2s7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgYWJvcnQ6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9KTsK
K30KK3ZhciBmeE5vdywgdGltZXJJZCwKKyAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8
aGlkZSkkLywKKyAgICByZnhudW0gPSBuZXcgUmVnRXhwKCAiXig/OihbLStdKT18KSgiICsgY29y
ZV9wbnVtICsgIikoW2EteiVdKikkIiwgImkiICksCisgICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC8s
CisgICAgYW5pbWF0aW9uUHJlZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAorICAgIHR3
ZWVuZXJzID0geworICAgICAgICAiKiI6IFtmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7CisgICAg
ICAgICAgICB2YXIgZW5kLCB1bml0LAorICAgICAgICAgICAgICAgIHR3ZWVuID0gdGhpcy5jcmVh
dGVUd2VlbiggcHJvcCwgdmFsdWUgKSwKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IHJmeG51bS5l
eGVjKCB2YWx1ZSApLAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAorICAg
ICAgICAgICAgICAgIHN0YXJ0ID0gK3RhcmdldCB8fCAwLAorICAgICAgICAgICAgICAgIHNjYWxl
ID0gMSwKKyAgICAgICAgICAgICAgICBtYXhJdGVyYXRpb25zID0gMjA7CisKKyAgICAgICAgICAg
IGlmICggcGFydHMgKSB7CisgICAgICAgICAgICAgICAgZW5kID0gK3BhcnRzWzJdOworICAgICAg
ICAgICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/
ICIiIDogInB4IiApOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0
YXJ0aW5nIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICYmIHN0YXJ0
ICkgeworICAgICAgICAgICAgICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9t
IGEgbm9uemVybyBzdGFydGluZyBwb2ludAorICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIg
dGhlIGN1cnJlbnQgcHJvcGVydHksIGJlY2F1c2UgdGhpcyBwcm9jZXNzIHdpbGwgYmUgdHJpdmlh
bCBpZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRzCisgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxi
YWNrIHRvIGVuZCBvciBhIHNpbXBsZSBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICBzdGFy
dCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsKKwor
ICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBw
cmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRo
aW5nKgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgc3RyaW5nIGZvciBkb3VibGlu
ZyBmYWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQg
YmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnQgPSBzdGFydCAvIHNjYWxlOworICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4g
ZnJvbSB0d2Vlbi5jdXIoKQorICAgICAgICAgICAgICAgICAgICAvLyBBbmQgYnJlYWtpbmcgdGhl
IGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3Qg
aGFkIGVub3VnaAorICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggc2NhbGUgIT09IChzY2Fs
ZSA9IHR3ZWVuLmN1cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlv
bnMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0d2Vlbi51bml0ID0g
dW5pdDsKKyAgICAgICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAg
ICAgIC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0
aXZlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHR3ZWVuLmVuZCA9IHBhcnRzWzFdID8gc3Rh
cnQgKyAoIHBhcnRzWzFdICsgMSApICogZW5kIDogZW5kOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9XQorICAgIH07CisKKy8vIEFuaW1hdGlvbnMg
Y3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNy
ZWF0ZUZ4Tm93KCkgeworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ4Tm93
ID0gdW5kZWZpbmVkOworICAgIH0sIDAgKTsKKyAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5u
b3coKSApOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKSB7
CisgICAgalF1ZXJ5LmVhY2goIHByb3BzLCBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7CisgICAg
ICAgIHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCB0
d2VlbmVyc1sgIioiIF0gKSwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAgIGxl
bmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOworICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCsrICkgeworICAgICAgICAgICAgaWYgKCBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwo
IGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIHdlJ3Jl
IGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIEFuaW1hdGlvbiggZWxl
bSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAgICB2YXIgcmVzdWx0LAorICAgICAgICBpbmRl
eCA9IDAsCisgICAgICAgIHR3ZWVuZXJJbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IGFuaW1h
dGlvblByZWZpbHRlcnMubGVuZ3RoLAorICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJl
ZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBkb24ndCBtYXRjaCBlbGVt
IGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAgICAgIGRlbGV0ZSB0aWNrLmVsZW07
CisgICAgICAgIH0pLAorICAgICAgICB0aWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgICAg
IHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9u
LmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKyAgICAgICAgICAgICAgICAvLyBhcmNoYWljIGNy
YXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgMSAtICggMC41IHx8IDAgKSAoIzEyNDk3KQor
ICAgICAgICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwg
MCwKKyAgICAgICAgICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCisgICAgICAgICAgICAgICAg
aW5kZXggPSAwLAorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVu
Z3RoOworCisgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsK
KyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCAp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVt
LCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0pOworCisgICAgICAgICAgICBpZiAo
IHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWlu
aW5nOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNv
bHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgYW5pbWF0aW9uID0gZGVm
ZXJyZWQucHJvbWlzZSh7CisgICAgICAgICAgICBlbGVtOiBlbGVtLAorICAgICAgICAgICAgcHJv
cHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCisgICAgICAgICAgICBvcHRzOiBq
UXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSwKKyAg
ICAgICAgICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAgICAgICAgICAgIG9y
aWdpbmFsT3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cgfHwg
Y3JlYXRlRnhOb3coKSwKKyAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAor
ICAgICAgICAgICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlv
biggcHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0galF1
ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1h
dGlvbi5vcHRzLmVhc2luZyApOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMucHVz
aCggdHdlZW4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGdvaW5n
IHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisgICAgICAgICAgICAg
ICAgICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAorICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworCisgICAg
ICAgICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0
aGUgbGFzdCBmcmFtZQorICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcmVqZWN0CisgICAg
ICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgo
IGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAg
ICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworICAgIHByb3BGaWx0ZXIoIHByb3BzLCBh
bmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVu
Z3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uUHJlZmlsdGVyc1sg
aW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApOwor
ICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKTsKKwor
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7Cisg
ICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOworICAg
IH0KKworICAgIGpRdWVyeS5meC50aW1lcigKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGljaywg
eworICAgICAgICAgICAgYW5pbTogYW5pbWF0aW9uLAorICAgICAgICAgICAgcXVldWU6IGFuaW1h
dGlvbi5vcHRzLnF1ZXVlLAorICAgICAgICAgICAgZWxlbTogZWxlbQorICAgICAgICB9KQorICAg
ICk7CisKKyAgICAvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9ucworICAgIHJldHVybiBh
bmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzICkKKyAgICAgICAgLmRv
bmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKKyAgICAg
ICAgLmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKQorICAgICAgICAuYWx3YXlzKCBhbmltYXRp
b24ub3B0cy5hbHdheXMgKTsKK30KKworZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNp
YWxFYXNpbmcgKSB7CisgICAgdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rczsK
KworICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFz
cworICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgeworICAgICAgICBuYW1lID0galF1ZXJ5LmNh
bWVsQ2FzZSggaW5kZXggKTsKKyAgICAgICAgZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBd
OworICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOworICAgICAgICBpZiAoIGpRdWVyeS5p
c0FycmF5KCB2YWx1ZSApICkgeworICAgICAgICAgICAgZWFzaW5nID0gdmFsdWVbIDEgXTsKKyAg
ICAgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCBpbmRleCAhPT0gbmFtZSApIHsKKyAgICAgICAgICAgIHByb3BzWyBu
YW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKKyAgICAg
ICAgfQorCisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CisgICAgICAg
IGlmICggaG9va3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7CisgICAgICAgICAgICB2YWx1ZSA9
IGhvb2tzLmV4cGFuZCggdmFsdWUgKTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgbmFtZSBd
OworCisgICAgICAgICAgICAvLyBub3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29udCBvdmVyd3Jp
dGUga2V5cyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgICAvLyBhbHNvIC0gcmV1c2luZyAn
aW5kZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgorICAg
ICAgICAgICAgZm9yICggaW5kZXggaW4gdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAh
KCBpbmRleCBpbiBwcm9wcyApICkgeworICAgICAgICAgICAgICAgICAgICBwcm9wc1sgaW5kZXgg
XSA9IHZhbHVlWyBpbmRleCBdOworICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5nWyBp
bmRleCBdID0gZWFzaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZzsK
KyAgICAgICAgfQorICAgIH0KK30KKworalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQo
IEFuaW1hdGlvbiwgeworCisgICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayAp
IHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKKyAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvcHM7CisgICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnNwbGl0KCIgIik7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAg
ICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKworICAgICAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXggXTsK
KyAgICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdOwor
ICAgICAgICAgICAgdHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAg
ICB9CisgICAgfSwKKworICAgIHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5k
ICkgeworICAgICAgICBpZiAoIHByZXBlbmQgKSB7CisgICAgICAgICAgICBhbmltYXRpb25QcmVm
aWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhbmltYXRpb25QcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7CisgICAgICAgIH0KKyAgICB9
Cit9KTsKKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7
CisgICAgdmFyIGluZGV4LCBwcm9wLCB2YWx1ZSwgbGVuZ3RoLCBkYXRhU2hvdywgdG9nZ2xlLCB0
d2VlbiwgaG9va3MsIG9sZGZpcmUsCisgICAgICAgIGFuaW0gPSB0aGlzLAorICAgICAgICBzdHls
ZSA9IGVsZW0uc3R5bGUsCisgICAgICAgIG9yaWcgPSB7fSwKKyAgICAgICAgaGFuZGxlZCA9IFtd
LAorICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICk7CisK
KyAgICAvLyBoYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCisgICAgaWYgKCAhb3B0cy5xdWV1
ZSApIHsKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIgKTsK
KyAgICAgICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgeworICAgICAgICAgICAgaG9v
a3MudW5xdWV1ZWQgPSAwOworICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7
CisgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZGZp
cmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAg
ICAgIGhvb2tzLnVucXVldWVkKys7CisKKyAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxldGUg
aGFuZGxlciB3aWxsIGJlIGNhbGxlZAorICAgICAgICAgICAgLy8gYmVmb3JlIHRoaXMgY29tcGxl
dGVzCisgICAgICAgICAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBob29rcy51bnF1ZXVlZC0tOworICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1ZSgg
ZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHku
ZmlyZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICAvLyBoZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzcworICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMSAmJiAoICJoZWlnaHQiIGluIHByb3BzIHx8ICJ3aWR0aCIgaW4gcHJv
cHMgKSApIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0Cisg
ICAgICAgIC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9l
cyBub3QKKyAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVy
Zmxvd1ggYW5kCisgICAgICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVl
CisgICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxv
d1gsIHN0eWxlLm92ZXJmbG93WSBdOworCisgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5
IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCisgICAgICAgIC8vIGFuaW1hdGlvbnMg
b24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQK
KyAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIg
JiYKKyAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJub25l
IiApIHsKKworICAgICAgICAgICAgLy8gaW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxp
bmUtYmxvY2s7CisgICAgICAgICAgICAvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRvIGJl
IGlubGluZSB3aXRoIGxheW91dAorICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaW5s
aW5lQmxvY2tOZWVkc0xheW91dCB8fCBjc3NfZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUg
KSA9PT0gImlubGluZSIgKSB7CisgICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJpbmxp
bmUtYmxvY2siOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0eWxl
Lnpvb20gPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBv
cHRzLm92ZXJmbG93ICkgeworICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOworICAg
ICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgeworICAgICAgICAg
ICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93
ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93WCA9
IG9wdHMub3ZlcmZsb3dbIDEgXTsKKyAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kgPSBv
cHRzLm92ZXJmbG93WyAyIF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwor
CisgICAgLy8gc2hvdy9oaWRlIHBhc3MKKyAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKyAg
ICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCByZnh0eXBlcy5leGVj
KCB2YWx1ZSApICkgeworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOworICAgICAg
ICAgICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKyAgICAgICAgICAg
IGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVkLnB1
c2goIGluZGV4ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW5ndGggPSBoYW5kbGVkLmxl
bmd0aDsKKyAgICBpZiAoIGxlbmd0aCApIHsKKyAgICAgICAgZGF0YVNob3cgPSBqUXVlcnkuX2Rh
dGEoIGVsZW0sICJmeHNob3ciICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93Iiwge30g
KTsKKyAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAgIGhp
ZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0b3JlIHN0
YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2Ui
CisgICAgICAgIGlmICggdG9nZ2xlICkgeworICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVuID0g
IWhpZGRlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAg
IGpRdWVyeSggZWxlbSApLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFu
aW0uZG9uZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5oaWRl
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBhbmltLmRvbmUoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB2YXIgcHJvcDsKKyAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVE
YXRhKCBlbGVtLCAiZnhzaG93IiwgdHJ1ZSApOworICAgICAgICAgICAgZm9yICggcHJvcCBpbiBv
cmlnICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sg
cHJvcCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBmb3IgKCBpbmRl
eCA9IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICBwcm9wID0g
aGFuZGxlZFsgaW5kZXggXTsKKyAgICAgICAgICAgIHR3ZWVuID0gYW5pbS5jcmVhdGVUd2Vlbigg
cHJvcCwgaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKKyAgICAgICAgICAgIG9yaWdb
IHByb3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7
CisKKyAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgeworICAgICAgICAg
ICAgICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAgICBp
ZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4uc3Rh
cnQ7CisgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8
fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlv
bnMsIHByb3AsIGVuZCwgZWFzaW5nICkgeworICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBl
LmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnkuVHdl
ZW4gPSBUd2VlbjsKKworVHdlZW4ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBUd2Vl
biwKKyAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcs
IHVuaXQgKSB7CisgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07CisgICAgICAgIHRoaXMucHJvcCA9
IHByb3A7CisgICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8ICJzd2luZyI7CisgICAgICAg
IHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9
IHRoaXMuY3VyKCk7CisgICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICB0aGlzLnVuaXQg
PSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7CisgICAg
fSwKKyAgICBjdXI6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaG9va3MgPSBUd2Vlbi5wcm9w
SG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQg
PworICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgorICAgICAgICAgICAgVHdlZW4ucHJv
cEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOworICAgIH0sCisgICAgcnVuOiBmdW5jdGlvbigg
cGVyY2VudCApIHsKKyAgICAgICAgdmFyIGVhc2VkLAorICAgICAgICAgICAgaG9va3MgPSBUd2Vl
bi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLmR1
cmF0aW9uICkgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdb
IHRoaXMuZWFzaW5nIF0oCisgICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1
cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisgICAgICAgICAg
ICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBl
cmNlbnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5z
dGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25z
LnN0ZXAgKSB7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0s
IHRoaXMubm93LCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYmIGhv
b2tzLnNldCApIHsKKyAgICAgICAgICAgIGhvb2tzLnNldCggdGhpcyApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK307CisKK1R3ZWVuLnByb3Rv
dHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhvb2tz
ID0geworICAgIF9kZWZhdWx0OiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkgewor
ICAgICAgICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVtWyB0
d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICghdHdlZW4uZWxlbS5zdHls
ZSB8fCB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gcGFzc2luZyBhbnkgdmFsdWUgYXMgYSA0dGggcGFyYW1ldGVyIHRv
IC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAvLyBhdHRlbXB0IGEgcGFyc2VG
bG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzCisgICAgICAg
ICAgICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZs
b2F0LgorICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQp
IiBhcmUgcmV0dXJuZWQgYXMgaXMuCisgICAgICAgICAgICByZXN1bHQgPSBqUXVlcnkuY3NzKCB0
d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBmYWxzZSwgIiIgKTsKKyAgICAgICAgICAgIC8vIEVtcHR5
IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4K
KyAgICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJl
c3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAg
ICAgICAgICAvLyB1c2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdCAtIHVzZSBjc3NIb29rIGlm
IGl0cyB0aGVyZSAtIHVzZSAuc3R5bGUgaWYgaXRzCisgICAgICAgICAgICAvLyBhdmFpbGFibGUg
YW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgaWYg
KCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3Bz
WyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBd
ICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5w
cm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKKy8vIFJlbW92ZSBpbiAyLjAgLSB0aGlz
IHN1cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCisvLyB0byBzZXR0aW5nIHRoaW5n
cyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKworVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3
ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0geworICAgIHNldDogZnVuY3Rpb24oIHR3ZWVuICkg
eworICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnRO
b2RlICkgeworICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93
OworICAgICAgICB9CisgICAgfQorfTsKKworalF1ZXJ5LmVhY2goWyAidG9nZ2xlIiwgInNob3ci
LCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgdmFyIGNzc0ZuID0galF1ZXJ5
LmZuWyBuYW1lIF07CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVh
c2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVv
ZiBzcGVlZCA9PT0gImJvb2xlYW4iIHx8CisgICAgICAgICAgICAvLyBzcGVjaWFsIGNoZWNrIGZv
ciAudG9nZ2xlKCBoYW5kbGVyLCBoYW5kbGVyLCAuLi4gKQorICAgICAgICAgICAgKCAhaSAmJiBq
UXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkg
KSA/CisgICAgICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgorICAgICAg
ICAgICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBj
YWxsYmFjayApOworICAgIH07Cit9KTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgZmFkZVRv
OiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCisgICAgICAgIC8v
IHNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAorICAg
ICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5z
aG93KCkKKworICAgICAgICAgICAgLy8gYW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCisg
ICAgICAgICAgICAuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICk7CisgICAgfSwKKyAgICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQs
IGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5
T2JqZWN0KCBwcm9wICksCisgICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVk
LCBlYXNpbmcsIGNhbGxiYWNrICksCisgICAgICAgICAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVy
LXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CisgICAgICAgICAgICAgICAgdmFyIGFuaW0g
PSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOwor
CisgICAgICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucyByZXNvbHZlIGltbWVkaWF0ZWx5
CisgICAgICAgICAgICAgICAgaWYgKCBlbXB0eSApIHsKKyAgICAgICAgICAgICAgICAgICAgYW5p
bS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAg
ICAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/CisgICAgICAgICAg
ICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgorICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0
YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOworICAgIH0sCisgICAgc3RvcDogZnVuY3Rpb24oIHR5
cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CisgICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5j
dGlvbiggaG9va3MgKSB7CisgICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7CisgICAg
ICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQgKTsK
KyAgICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOworICAgICAgICAgICAgY2xlYXJRdWV1
ZSA9IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAg
ICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHRo
aXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVxdWV1ZSA9IHRydWUs
CisgICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhv
b2tzIiwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAg
ICAgICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKKworICAgICAgICAgICAgaWYgKCBp
bmRleCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5k
ZXggXS5zdG9wICkgeworICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4
IF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
ZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiAo
dHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVxdWV1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0
aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBs
YXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAorICAgICAgICAgICAgLy8gdGltZXJzIGN1cnJlbnRseSB3
aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUKKyAg
ICAgICAgICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCisgICAgICAgICAgICBp
ZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVl
dWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfSk7
CisKKy8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9u
CitmdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAgIHZhciB3aGljaCwK
KyAgICAgICAgYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9LAorICAgICAgICBpID0gMDsKKworICAg
IC8vIGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhw
YW5kIHZhbHVlcywKKyAgICAvLyBpZiB3ZSBkb24ndCBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVl
IGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0CisgICAgaW5jbHVkZVdpZHRoID0gaW5j
bHVkZVdpZHRoPyAxIDogMDsKKyAgICBmb3IoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lk
dGggKSB7CisgICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07CisgICAgICAgIGF0dHJzWyAi
bWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7Cisg
ICAgfQorCisgICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIGF0dHJzLm9wYWNpdHkg
PSBhdHRycy53aWR0aCA9IHR5cGU7CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJzOworfQorCisv
LyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCitqUXVlcnkuZWFjaCh7
CisgICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAorICAgIHNsaWRlVXA6IGdlbkZ4KCJoaWRl
IiksCisgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKKyAgICBmYWRlSW46IHsgb3Bh
Y2l0eTogInNob3ciIH0sCisgICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKyAgICBm
YWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9w
cyApIHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBj
YWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBl
YXNpbmcsIGNhbGxiYWNrICk7CisgICAgfTsKK30pOworCitqUXVlcnkuc3BlZWQgPSBmdW5jdGlv
biggc3BlZWQsIGVhc2luZywgZm4gKSB7CisgICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBz
cGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKKyAgICAg
ICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKyAgICAgICAgICAgIGpRdWVyeS5p
c0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorICAgICAgICBkdXJhdGlvbjogc3BlZWQsCisg
ICAgICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rp
b24oIGVhc2luZyApICYmIGVhc2luZworICAgIH07CisKKyAgICBvcHQuZHVyYXRpb24gPSBqUXVl
cnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1
cmF0aW9uIDoKKyAgICAgICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVl
cnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7
CisKKyAgICAvLyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAi
ZngiCisgICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7
CisgICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7CisgICAgfQorCisgICAgLy8gUXVldWVpbmcKKyAg
ICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOworCisgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKKyAgICAg
ICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBv
cHQucXVldWUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVl
ICk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIG9wdDsKK307CisKK2pRdWVyeS5l
YXNpbmcgPSB7CisgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKKyAgICAgICAgcmV0dXJuIHA7
CisgICAgfSwKKyAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiAwLjUg
LSBNYXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOworICAgIH0KK307CisKK2pRdWVyeS50aW1lcnMg
PSBbXTsKK2pRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OworalF1ZXJ5LmZ4LnRpY2sg
PSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGltZXIsCisgICAgICAgIHRpbWVycyA9IGpRdWVyeS50
aW1lcnMsCisgICAgICAgIGkgPSAwOworCisgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7CisKKyAg
ICBmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgIHRpbWVyID0gdGlt
ZXJzWyBpIF07CisgICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJl
ZW4gcmVtb3ZlZAorICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1l
ciApIHsKKyAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGktLSwgMSApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5LmZ4LnN0
b3AoKTsKKyAgICB9CisgICAgZnhOb3cgPSB1bmRlZmluZWQ7Cit9OworCitqUXVlcnkuZngudGlt
ZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7CisgICAgaWYgKCB0aW1lcigpICYmIGpRdWVyeS50aW1l
cnMucHVzaCggdGltZXIgKSAmJiAhdGltZXJJZCApIHsKKyAgICAgICAgdGltZXJJZCA9IHNldElu
dGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7CisgICAgfQorfTsK
KworalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24o
KSB7CisgICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOworICAgIHRpbWVySWQgPSBudWxsOwor
fTsKKworalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKKyAgICBzbG93OiA2MDAsCisgICAgZmFzdDogMjAw
LAorICAgIC8vIERlZmF1bHQgc3BlZWQKKyAgICBfZGVmYXVsdDogNDAwCit9OworCisvLyBCYWNr
IENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworaWYg
KCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgeworICAgIGpRdWVyeS5leHBy
LmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpR
dWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtID09PSBmbi5lbGVtOworICAgICAgICB9KS5sZW5ndGg7CisgICAgfTsKK30KK3Zh
ciBycm9vdCA9IC9eKD86Ym9keXxodG1sKSQvaTsKKworalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0
aW9uKCBvcHRpb25zICkgeworICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAg
cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICB0aGlzIDoKKyAgICAg
ICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnku
b2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgdmFyIGRvY0VsZW0sIGJvZHksIHdpbiwgY2xpZW50VG9wLCBjbGllbnRMZWZ0
LCBzY3JvbGxUb3AsIHNjcm9sbExlZnQsCisgICAgICAgIGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAw
IH0sCisgICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCisgICAgICAgIGRvYyA9IGVsZW0gJiYgZWxl
bS5vd25lckRvY3VtZW50OworCisgICAgaWYgKCAhZG9jICkgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCAoYm9keSA9IGRvYy5ib2R5KSA9PT0gZWxlbSApIHsKKyAgICAgICAg
cmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOworICAgIH0KKworICAgIGRv
Y0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgLy8gTWFrZSBzdXJlIGl0J3Mgbm90
IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCisgICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NF
bGVtLCBlbGVtICkgKSB7CisgICAgICAgIHJldHVybiBib3g7CisgICAgfQorCisgICAgLy8gSWYg
d2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKKyAgICAv
LyBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCisgICAgaWYgKCB0eXBlb2Yg
ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICBi
b3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIH0KKyAgICB3aW4gPSBnZXRX
aW5kb3coIGRvYyApOworICAgIGNsaWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwgYm9k
eS5jbGllbnRUb3AgIHx8IDA7CisgICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8
fCBib2R5LmNsaWVudExlZnQgfHwgMDsKKyAgICBzY3JvbGxUb3AgID0gd2luLnBhZ2VZT2Zmc2V0
IHx8IGRvY0VsZW0uc2Nyb2xsVG9wOworICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQg
fHwgZG9jRWxlbS5zY3JvbGxMZWZ0OworICAgIHJldHVybiB7CisgICAgICAgIHRvcDogYm94LnRv
cCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAorICAgICAgICBsZWZ0OiBib3gubGVmdCArIHNj
cm9sbExlZnQgLSBjbGllbnRMZWZ0CisgICAgfTsKK307CisKK2pRdWVyeS5vZmZzZXQgPSB7CisK
KyAgICBib2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKKyAgICAgICAgdmFyIHRvcCA9IGJv
ZHkub2Zmc2V0VG9wLAorICAgICAgICAgICAgbGVmdCA9IGJvZHkub2Zmc2V0TGVmdDsKKworICAg
ICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0
ICkgeworICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJt
YXJnaW5Ub3AiKSApIHx8IDA7CisgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVy
eS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OworICAgIH0sCisKKyAgICBzZXRPZmZzZXQ6
IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworICAgICAgICB2YXIgcG9zaXRpb24gPSBq
UXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7CisKKyAgICAgICAgLy8gc2V0IHBvc2l0aW9u
IGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQorICAg
ICAgICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgIGVsZW0uc3R5
bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1ckVs
ZW0gPSBqUXVlcnkoIGVsZW0gKSwKKyAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zm
c2V0KCksCisgICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiAp
LAorICAgICAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAor
ICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUi
IHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3Vy
Q1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKKyAgICAgICAgICAgIHByb3BzID0ge30sIGN1clBv
c2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKKworICAgICAgICAvLyBuZWVkIHRvIGJlIGFi
bGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFu
ZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAgaWYgKCBjYWxj
dWxhdGVQb3NpdGlvbiApIHsKKyAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3Np
dGlvbigpOworICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOworICAgICAgICAg
ICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOworICAgICAgICAgICAg
Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgeworICAgICAgICAgICAg
b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9w
cy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworICAgICAg
ICB9CisgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisgICAgICAgICAgICBw
cm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworICAgICAg
ICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7CisgICAgICAgIH0KKyAgICB9Cit9
OworCisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAoICF0aGlzWzBdICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLAorCisgICAgICAgIC8vIEdldCAqcmVhbCog
b2Zmc2V0UGFyZW50CisgICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCks
CisKKyAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cworICAgICAgICBvZmZzZXQgICAgICAg
PSB0aGlzLm9mZnNldCgpLAorICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9vdC50ZXN0KG9mZnNl
dFBhcmVudFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogb2Zmc2V0UGFyZW50
Lm9mZnNldCgpOworCisgICAgICAgIC8vIFN1YnRyYWN0IGVsZW1lbnQgbWFyZ2lucworICAgICAg
ICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0TGVm
dCBhbmQgbWFyZ2luTGVmdAorICAgICAgICAvLyBhcmUgdGhlIHNhbWUgaW4gU2FmYXJpIGNhdXNp
bmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAorICAgICAgICBvZmZzZXQudG9wICAt
PSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7CisgICAg
ICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpbkxl
ZnQiKSApIHx8IDA7CisKKyAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisgICAg
ICAgIHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFy
ZW50WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSApIHx8IDA7CisgICAgICAgIHBhcmVudE9mZnNldC5s
ZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyTGVm
dFdpZHRoIikgKSB8fCAwOworCisgICAgICAgIC8vIFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0cwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRP
ZmZzZXQudG9wLAorICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQu
bGVmdAorICAgICAgICB9OworICAgIH0sCisKKyAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIg
b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKKyAgICAg
ICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQu
bm9kZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0
YXRpYyIpICkgeworICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5v
ZmZzZXRQYXJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0UGFy
ZW50IHx8IGRvY3VtZW50LmJvZHk7CisgICAgICAgIH0pOworICAgIH0KK30pOworCisKKy8vIENy
ZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcworalF1ZXJ5LmVhY2goIHtzY3Jv
bGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5jdGlv
biggbWV0aG9kLCBwcm9wICkgeworICAgIHZhciB0b3AgPSAvWS8udGVzdCggcHJvcCApOworCisg
ICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CisgICAgICAgIHJldHVy
biBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7Cisg
ICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CisKKyAgICAgICAgICAgIGlm
ICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/IChw
cm9wIGluIHdpbikgPyB3aW5bIHByb3AgXSA6CisgICAgICAgICAgICAgICAgICAgIHdpbi5kb2N1
bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKKyAgICAgICAgICAgICAgICAgICAgZWxl
bVsgbWV0aG9kIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggd2luICkgewor
ICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKKyAgICAgICAgICAgICAgICAgICAgIXRvcCA/
IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAg
dG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQorICAgICAgICAgICAgICAgICk7
CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9kIF0g
PSB2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMu
bGVuZ3RoLCBudWxsICk7CisgICAgfTsKK30pOworCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0g
KSB7CisgICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KKyAgICAgICAgZWxlbSA6
CisgICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPworICAgICAgICAgICAgZWxlbS5kZWZhdWx0
VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CisgICAgICAgICAgICBmYWxzZTsKK30KKy8vIENy
ZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQg
YW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0Iiwg
V2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7CisgICAgalF1ZXJ5LmVh
Y2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0ZXIi
ICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKKyAgICAgICAg
Ly8gbWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAgIGpR
dWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworICAgICAg
ICAgICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEg
fHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisgICAgICAgICAgICAgICAgZXh0cmEg
PSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAi
bWFyZ2luIiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNz
KCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRvYzsKKworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkg
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVs
ZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVx
dWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5h
bWUgXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgZG9jdW1l
bnQgd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09
PSA5ICkgeworICAgICAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDsK
KworICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Ig
b2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBp
cyBncmVhdGVzdAorICAgICAgICAgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5LCB0aGlzIGNh
dXNlcyBidWcgIzM4MzggaW4gSUU2Lzggb25seSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBubyBn
b29kLCBzbWFsbCB3YXkgdG8gZml4IGl0LgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0
aC5tYXgoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsgbmFt
ZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KKyAgICAgICAgICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBvciBo
ZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxv
YXQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgdmFsdWUsIGV4
dHJhICkgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24g
dGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBl
LCB2YWx1ZSwgZXh0cmEgKTsKKyAgICAgICAgICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdp
biA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlLCBudWxsICk7CisgICAgICAgIH07CisgICAgfSk7Cit9
KTsKKy8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKK3dpbmRvdy5qUXVlcnkg
PSB3aW5kb3cuJCA9IGpRdWVyeTsKKworLy8gRXhwb3NlIGpRdWVyeSBhcyBhbiBBTUQgbW9kdWxl
LCBidXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAorLy8gdW5kZXJzdGFuZCB0aGUgaXNzdWVz
IHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKKy8vIGluIGEgcGFnZSB0
aGF0IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUgbG9hZGVyIHdpbGwgaW5kaWNhdGUKKy8v
IHRoZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9yIG11bHRpcGxlIGpRdWVyeSB2ZXJzaW9u
cyBieQorLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVyIGFz
IGEgbmFtZWQgbW9kdWxlLAorLy8gc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0
aCBvdGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLAorLy8gYnV0IG5vdCB1c2UgYSBwcm9w
ZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0YW5kcyBhbm9ueW1vdXMKKy8vIEFN
RCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0byBy
ZWdpc3Rlci4KKy8vIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUg
bmFtZXMgYXJlIGRlcml2ZWQgZnJvbQorLy8gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3Jt
YWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBuYW1lLgorLy8gRG8gdGhpcyBhZnRl
ciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0byBj
YWxsCisvLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2ls
bCB3b3JrLgoraWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQg
JiYgZGVmaW5lLmFtZC5qUXVlcnkgKSB7CisgICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0
aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOworfQorCit9KSggd2luZG93ICk7CkluZGV4OiBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL3NoYXJlZC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL3NoYXJlZC5qcwkocmV2aXNpb24g
MCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvc2hhcmVkLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorCitmdW5jdGlvbiBmaWxlTmFtZUZyb21QbGF0Zm9y
bUFuZFRlc3QocGxhdGZvcm1JZCwgdGVzdElkKSB7CisgICAgcmV0dXJuIHBsYXRmb3JtSWQgKyAn
LScgKyB0ZXN0SWQgKyAnLmpzb24nOworfQorCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZp
bmVkJykgeworICAgIG1vZHVsZS5leHBvcnRzLmZpbGVOYW1lRnJvbVBsYXRmb3JtQW5kVGVzdCA9
IGZpbGVOYW1lRnJvbVBsYXRmb3JtQW5kVGVzdDsKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvanMvc3RhdGlzdGljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL3N0YXRpc3RpY3MuanMJKHJldmlzaW9uIDApCisrKyBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL3N0YXRpc3RpY3MuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDcgQEAKK3ZhciBTdGF0aXN0aWNzID0gbmV3IChmdW5jdGlvbiAo
KSB7CisKKyAgICB0aGlzLnN1bSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBh
ICsgYjsgfSkgOiAwOworICAgIH0KKworICAgIHRoaXMuc3F1YXJlU3VtID0gZnVuY3Rpb24gKHZh
bHVlcykgeworICAgICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHZhbHVlcy5yZWR1Y2UoZnVu
Y3Rpb24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFsdWU7fSwgMCkgOiAw
OworICAgIH0KKworICAgIC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJlcywgd2UgY2FuIGNv
bXB1dGUgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9ybml3YS5jb20vMjAxMi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQtZGV2aWF0aW9uLWlu
LXRlcm1zLW9mLXN1bS1hbmQtc3F1YXJlLXN1bS1vZi1zYW1wbGVzLworICAgIHRoaXMuc2FtcGxl
U3RhbmRhcmREZXZpYXRpb24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFy
ZVN1bSkgeworICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZVN1bSAvIChudW1iZXJPZlNh
bXBsZXMgLSAxKSAtIHN1bSAqIHN1bSAvIChudW1iZXJPZlNhbXBsZXMgLSAxKSAvIG51bWJlck9m
U2FtcGxlcyk7CisgICAgfQorCisgICAgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNlSW50ZXJ2YWxQ
cm9iYWJpbGl0aWVzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc3VwcG9ydGVkUHJvYmFi
aWxpdGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9u
UXVhbnRpbGVzKQorICAgICAgICAgICAgc3VwcG9ydGVkUHJvYmFiaWxpdGllcy5wdXNoKCgxIC0g
KDEgLSBxdWFudGlsZSkgKiAyKS50b0ZpeGVkKDIpKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRl
ZFByb2JhYmlsaXRpZXMKKyAgICB9CisKKyAgICAvLyBDb21wdXRlcyB0aGUgZGVsdGEgZCBzLnQu
IChtZWFuIC0gZCwgbWVhbiArIGQpIGlzIHRoZSBjb25maWRlbmNlIGludGVydmFsIHdpdGggdGhl
IHNwZWNpZmllZCBwcm9iYWJpbGl0eSBpbiBPKDEpLgorICAgIHRoaXMuY29uZmlkZW5jZUludGVy
dmFsRGVsdGEgPSBmdW5jdGlvbiAocHJvYmFiaWxpdHksIG51bWJlck9mU2FtcGxlcywgc3VtLCBz
cXVhcmVTdW0pIHsKKyAgICAgICAgdmFyIHF1YW50aWxlID0gKDEgLSAoMSAtIHByb2JhYmlsaXR5
KSAvIDIpOworICAgICAgICBpZiAoIShxdWFudGlsZSBpbiB0RGlzdHJpYnV0aW9uUXVhbnRpbGVz
KSkgeworICAgICAgICAgICAgdGhyb3cgJ1dlIG9ubHkgc3VwcG9ydCAnICsgdGhpcy5zdXBwb3J0
ZWRDb25maWRlbmNlSW50ZXJ2YWxQcm9iYWJpbGl0aWVzKCkubWFwKGZ1bmN0aW9uIChwcm9iYWJp
bGl0eSkKKyAgICAgICAgICAgIHsgcmV0dXJuIHByb2JhYmlsaXR5ICogMTAwICsgJyUnOyB9ICku
am9pbignLCAnKSArICcgY29uZmlkZW5jZSBpbnRlcnZhbHMuJzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobnVtYmVyT2ZTYW1wbGVzIC0gMiA8IDApCisgICAgICAgICAgICByZXR1cm4gTmFOOwor
ICAgICAgICB2YXIgZGVsdGFzID0gdERpc3RyaWJ1dGlvblF1YW50aWxlc1txdWFudGlsZV07Cisg
ICAgICAgIHZhciBkZWdyZWVzT2ZGcmVlZG9tID0gbnVtYmVyT2ZTYW1wbGVzIC0gMTsKKyAgICAg
ICAgaWYgKGRlZ3JlZXNPZkZyZWVkb20gPiBkZWx0YXMubGVuZ3RoKQorICAgICAgICAgICAgdGhy
b3cgJ1dlIG9ubHkgc3VwcG9ydCB1cCB0byAnICsgZGVsdGFzLmxlbmd0aCArICcgZGVncmVlcyBv
ZiBmcmVlZG9tJzsKKworICAgICAgICAvLyBkID0gYyAqIFMvc3FydChudW1iZXJPZlNhbXBsZXMp
IHdoZXJlIGMgfiB0LWRpc3RyaWJ1dGlvbihkZWdyZWVzT2ZGcmVlZG9tKSBhbmQgUyBpcyB0aGUg
c2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICAgICAgcmV0dXJuIGRlbHRhc1tkZWdyZWVz
T2ZGcmVlZG9tIC0gMV0gKiB0aGlzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKG51bWJlck9mU2Ft
cGxlcywgc3VtLCBzcXVhcmVTdW0pIC8gTWF0aC5zcXJ0KG51bWJlck9mU2FtcGxlcyk7CisgICAg
fQorCisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWwgPSBmdW5jdGlvbiAodmFsdWVzLCBwcm9i
YWJpbGl0eSkgeworICAgICAgICB2YXIgc3VtID0gdGhpcy5zdW0odmFsdWVzKTsKKyAgICAgICAg
dmFyIG1lYW4gPSBzdW0gLyB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgZGVsdGEgPSB0aGlz
LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKHByb2JhYmlsaXR5IHx8IDAuOTUsIHZhbHVlcy5sZW5n
dGgsIHN1bSwgdGhpcy5zcXVhcmVTdW0odmFsdWVzKSk7CisgICAgICAgIHJldHVybiBbbWVhbiAt
IGRlbHRhLCBtZWFuICsgZGVsdGFdOworICAgIH0KKworICAgIHZhciB0RGlzdHJpYnV0aW9uUXVh
bnRpbGVzID0geworICAgICAgICAwLjk6IFsKKyAgICAgICAgICAgIDMuMDc3Njg0LCAxLjg4NTYx
OCwgMS42Mzc3NDQsIDEuNTMzMjA2LCAxLjQ3NTg4NCwgMS40Mzk3NTYsIDEuNDE0OTI0LCAxLjM5
NjgxNSwgMS4zODMwMjksIDEuMzcyMTg0LAorICAgICAgICAgICAgMS4zNjM0MzAsIDEuMzU2MjE3
LCAxLjM1MDE3MSwgMS4zNDUwMzAsIDEuMzQwNjA2LCAxLjMzNjc1NywgMS4zMzMzNzksIDEuMzMw
MzkxLCAxLjMyNzcyOCwgMS4zMjUzNDEsCisgICAgICAgICAgICAxLjMyMzE4OCwgMS4zMjEyMzcs
IDEuMzE5NDYwLCAxLjMxNzgzNiwgMS4zMTYzNDUsIDEuMzE0OTcyLCAxLjMxMzcwMywgMS4zMTI1
MjcsIDEuMzExNDM0LCAxLjMxMDQxNSwKKyAgICAgICAgICAgIDEuMzA5NDY0LCAxLjMwODU3Mywg
MS4zMDc3MzcsIDEuMzA2OTUyLCAxLjMwNjIxMiwgMS4zMDU1MTQsIDEuMzA0ODU0LCAxLjMwNDIz
MCwgMS4zMDM2MzksIDEuMzAzMDc3LAorICAgICAgICAgICAgMS4zMDI1NDMsIDEuMzAyMDM1LCAx
LjMwMTU1MiwgMS4zMDEwOTAsIDEuMzAwNjQ5LCAxLjMwMDIyOCwgMS4yOTk4MjUsIDEuMjk5NDM5
LCAxLjI5OTA2OSwgMS4yOTg3MTQsCisKKyAgICAgICAgICAgIDEuMjk4MzczLCAxLjI5ODA0NSwg
MS4yOTc3MzAsIDEuMjk3NDI2LCAxLjI5NzEzNCwgMS4yOTY4NTMsIDEuMjk2NTgxLCAxLjI5NjMx
OSwgMS4yOTYwNjYsIDEuMjk1ODIxLAorICAgICAgICAgICAgMS4yOTU1ODUsIDEuMjk1MzU2LCAx
LjI5NTEzNCwgMS4yOTQ5MjAsIDEuMjk0NzEyLCAxLjI5NDUxMSwgMS4yOTQzMTUsIDEuMjk0MTI2
LCAxLjI5Mzk0MiwgMS4yOTM3NjMsCisgICAgICAgICAgICAxLjI5MzU4OSwgMS4yOTM0MjEsIDEu
MjkzMjU2LCAxLjI5MzA5NywgMS4yOTI5NDEsIDEuMjkyNzkwLCAxLjI5MjY0MywgMS4yOTI1MDAs
IDEuMjkyMzYwLCAxLjI5MjIyNCwKKyAgICAgICAgICAgIDEuMjkyMDkxLCAxLjI5MTk2MSwgMS4y
OTE4MzUsIDEuMjkxNzExLCAxLjI5MTU5MSwgMS4yOTE0NzMsIDEuMjkxMzU4LCAxLjI5MTI0Niwg
MS4yOTExMzYsIDEuMjkxMDI5LAorICAgICAgICAgICAgMS4yOTA5MjQsIDEuMjkwODIxLCAxLjI5
MDcyMSwgMS4yOTA2MjMsIDEuMjkwNTI3LCAxLjI5MDQzMiwgMS4yOTAzNDAsIDEuMjkwMjUwLCAx
LjI5MDE2MSwgMS4yOTAwNzVdLAorICAgICAgICAwLjk1OiBbCisgICAgICAgICAgICA2LjMxMzc1
MiwgMi45MTk5ODYsIDIuMzUzMzYzLCAyLjEzMTg0NywgMi4wMTUwNDgsIDEuOTQzMTgwLCAxLjg5
NDU3OSwgMS44NTk1NDgsIDEuODMzMTEzLCAxLjgxMjQ2MSwKKyAgICAgICAgICAgIDEuNzk1ODg1
LCAxLjc4MjI4OCwgMS43NzA5MzMsIDEuNzYxMzEwLCAxLjc1MzA1MCwgMS43NDU4ODQsIDEuNzM5
NjA3LCAxLjczNDA2NCwgMS43MjkxMzMsIDEuNzI0NzE4LAorICAgICAgICAgICAgMS43MjA3NDMs
IDEuNzE3MTQ0LCAxLjcxMzg3MiwgMS43MTA4ODIsIDEuNzA4MTQxLCAxLjcwNTYxOCwgMS43MDMy
ODgsIDEuNzAxMTMxLCAxLjY5OTEyNywgMS42OTcyNjEsCisgICAgICAgICAgICAxLjY5NTUxOSwg
MS42OTM4ODksIDEuNjkyMzYwLCAxLjY5MDkyNCwgMS42ODk1NzIsIDEuNjg4Mjk4LCAxLjY4NzA5
NCwgMS42ODU5NTQsIDEuNjg0ODc1LCAxLjY4Mzg1MSwKKyAgICAgICAgICAgIDEuNjgyODc4LCAx
LjY4MTk1MiwgMS42ODEwNzEsIDEuNjgwMjMwLCAxLjY3OTQyNywgMS42Nzg2NjAsIDEuNjc3OTI3
LCAxLjY3NzIyNCwgMS42NzY1NTEsIDEuNjc1OTA1LAorCisgICAgICAgICAgICAxLjY3NTI4NSwg
MS42NzQ2ODksIDEuNjc0MTE2LCAxLjY3MzU2NSwgMS42NzMwMzQsIDEuNjcyNTIyLCAxLjY3MjAy
OSwgMS42NzE1NTMsIDEuNjcxMDkzLCAxLjY3MDY0OSwKKyAgICAgICAgICAgIDEuNjcwMjE5LCAx
LjY2OTgwNCwgMS42Njk0MDIsIDEuNjY5MDEzLCAxLjY2ODYzNiwgMS42NjgyNzEsIDEuNjY3OTE2
LCAxLjY2NzU3MiwgMS42NjcyMzksIDEuNjY2OTE0LAorICAgICAgICAgICAgMS42NjY2MDAsIDEu
NjY2Mjk0LCAxLjY2NTk5NiwgMS42NjU3MDcsIDEuNjY1NDI1LCAxLjY2NTE1MSwgMS42NjQ4ODUs
IDEuNjY0NjI1LCAxLjY2NDM3MSwgMS42NjQxMjUsCisgICAgICAgICAgICAxLjY2Mzg4NCwgMS42
NjM2NDksIDEuNjYzNDIwLCAxLjY2MzE5NywgMS42NjI5NzgsIDEuNjYyNzY1LCAxLjY2MjU1Nywg
MS42NjIzNTQsIDEuNjYyMTU1LCAxLjY2MTk2MSwKKyAgICAgICAgICAgIDEuNjYxNzcxLCAxLjY2
MTU4NSwgMS42NjE0MDQsIDEuNjYxMjI2LCAxLjY2MTA1MiwgMS42NjA4ODEsIDEuNjYwNzE1LCAx
LjY2MDU1MSwgMS42NjAzOTEsIDEuNjYwMjM0XSwKKyAgICAgICAgMC45NzU6IFsKKyAgICAgICAg
ICAgIDEyLjcwNjIwNSwgNC4zMDI2NTMsIDMuMTgyNDQ2LCAyLjc3NjQ0NSwgMi41NzA1ODIsIDIu
NDQ2OTEyLCAyLjM2NDYyNCwgMi4zMDYwMDQsIDIuMjYyMTU3LCAyLjIyODEzOSwKKyAgICAgICAg
ICAgIDIuMjAwOTg1LCAyLjE3ODgxMywgMi4xNjAzNjksIDIuMTQ0Nzg3LCAyLjEzMTQ1MCwgMi4x
MTk5MDUsIDIuMTA5ODE2LCAyLjEwMDkyMiwgMi4wOTMwMjQsIDIuMDg1OTYzLAorICAgICAgICAg
ICAgMi4wNzk2MTQsIDIuMDczODczLCAyLjA2ODY1OCwgMi4wNjM4OTksIDIuMDU5NTM5LCAyLjA1
NTUyOSwgMi4wNTE4MzEsIDIuMDQ4NDA3LCAyLjA0NTIzMCwgMi4wNDIyNzIsCisgICAgICAgICAg
ICAyLjAzOTUxMywgMi4wMzY5MzMsIDIuMDM0NTE1LCAyLjAzMjI0NSwgMi4wMzAxMDgsIDIuMDI4
MDk0LCAyLjAyNjE5MiwgMi4wMjQzOTQsIDIuMDIyNjkxLCAyLjAyMTA3NSwKKyAgICAgICAgICAg
IDIuMDE5NTQxLCAyLjAxODA4MiwgMi4wMTY2OTIsIDIuMDE1MzY4LCAyLjAxNDEwMywgMi4wMTI4
OTYsIDIuMDExNzQxLCAyLjAxMDYzNSwgMi4wMDk1NzUsIDIuMDA4NTU5LAorCisgICAgICAgICAg
ICAyLjAwNzU4NCwgMi4wMDY2NDcsIDIuMDA1NzQ2LCAyLjAwNDg3OSwgMi4wMDQwNDUsIDIuMDAz
MjQxLCAyLjAwMjQ2NSwgMi4wMDE3MTcsIDIuMDAwOTk1LCAyLjAwMDI5OCwKKyAgICAgICAgICAg
IDEuOTk5NjI0LCAxLjk5ODk3MiwgMS45OTgzNDEsIDEuOTk3NzMwLCAxLjk5NzEzOCwgMS45OTY1
NjQsIDEuOTk2MDA4LCAxLjk5NTQ2OSwgMS45OTQ5NDUsIDEuOTk0NDM3LAorICAgICAgICAgICAg
MS45OTM5NDMsIDEuOTkzNDY0LCAxLjk5Mjk5NywgMS45OTI1NDMsIDEuOTkyMTAyLCAxLjk5MTY3
MywgMS45OTEyNTQsIDEuOTkwODQ3LCAxLjk5MDQ1MCwgMS45OTAwNjMsCisgICAgICAgICAgICAx
Ljk4OTY4NiwgMS45ODkzMTksIDEuOTg4OTYwLCAxLjk4ODYxMCwgMS45ODgyNjgsIDEuOTg3OTM0
LCAxLjk4NzYwOCwgMS45ODcyOTAsIDEuOTg2OTc5LCAxLjk4NjY3NSwKKyAgICAgICAgICAgIDEu
OTg2Mzc3LCAxLjk4NjA4NiwgMS45ODU4MDIsIDEuOTg1NTIzLCAxLjk4NTI1MSwgMS45ODQ5ODQs
IDEuOTg0NzIzLCAxLjk4NDQ2NywgMS45ODQyMTcsIDEuOTgzOTcyXSwKKyAgICAgICAgMC45OTog
WworICAgICAgICAgICAgMzEuODIwNTE2LCA2Ljk2NDU1NywgNC41NDA3MDMsIDMuNzQ2OTQ3LCAz
LjM2NDkzMCwgMy4xNDI2NjgsIDIuOTk3OTUyLCAyLjg5NjQ1OSwgMi44MjE0MzgsIDIuNzYzNzY5
LAorICAgICAgICAgICAgMi43MTgwNzksIDIuNjgwOTk4LCAyLjY1MDMwOSwgMi42MjQ0OTQsIDIu
NjAyNDgwLCAyLjU4MzQ4NywgMi41NjY5MzQsIDIuNTUyMzgwLCAyLjUzOTQ4MywgMi41Mjc5Nzcs
CisgICAgICAgICAgICAyLjUxNzY0OCwgMi41MDgzMjUsIDIuNDk5ODY3LCAyLjQ5MjE1OSwgMi40
ODUxMDcsIDIuNDc4NjMwLCAyLjQ3MjY2MCwgMi40NjcxNDAsIDIuNDYyMDIxLCAyLjQ1NzI2MiwK
KyAgICAgICAgICAgIDIuNDUyODI0LCAyLjQ0ODY3OCwgMi40NDQ3OTQsIDIuNDQxMTUwLCAyLjQz
NzcyMywgMi40MzQ0OTQsIDIuNDMxNDQ3LCAyLjQyODU2OCwgMi40MjU4NDEsIDIuNDIzMjU3LAor
ICAgICAgICAgICAgMi40MjA4MDMsIDIuNDE4NDcwLCAyLjQxNjI1MCwgMi40MTQxMzQsIDIuNDEy
MTE2LCAyLjQxMDE4OCwgMi40MDgzNDUsIDIuNDA2NTgxLCAyLjQwNDg5MiwgMi40MDMyNzIsCisK
KyAgICAgICAgICAgIDIuNDAxNzE4LCAyLjQwMDIyNSwgMi4zOTg3OTAsIDIuMzk3NDEwLCAyLjM5
NjA4MSwgMi4zOTQ4MDEsIDIuMzkzNTY4LCAyLjM5MjM3NywgMi4zOTEyMjksIDIuMzkwMTE5LAor
ICAgICAgICAgICAgMi4zODkwNDcsIDIuMzg4MDExLCAyLjM4NzAwOCwgMi4zODYwMzcsIDIuMzg1
MDk3LCAyLjM4NDE4NiwgMi4zODMzMDIsIDIuMzgyNDQ2LCAyLjM4MTYxNSwgMi4zODA4MDcsCisg
ICAgICAgICAgICAyLjM4MDAyNCwgMi4zNzkyNjIsIDIuMzc4NTIyLCAyLjM3NzgwMiwgMi4zNzcx
MDIsIDIuMzc2NDIwLCAyLjM3NTc1NywgMi4zNzUxMTEsIDIuMzc0NDgyLCAyLjM3Mzg2OCwKKyAg
ICAgICAgICAgIDIuMzczMjcwLCAyLjM3MjY4NywgMi4zNzIxMTksIDIuMzcxNTY0LCAyLjM3MTAy
MiwgMi4zNzA0OTMsIDIuMzY5OTc3LCAyLjM2OTQ3MiwgMi4zNjg5NzksIDIuMzY4NDk3LAorICAg
ICAgICAgICAgMi4zNjgwMjYsIDIuMzY3NTY2LCAyLjM2NzExNSwgMi4zNjY2NzQsIDIuMzY2MjQz
LCAyLjM2NTgyMSwgMi4zNjU0MDcsIDIuMzY1MDAyLCAyLjM2NDYwNiwgMi4zNjQyMTddCisgICAg
fTsKKworfSkoKTsKKworaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICBm
b3IgKHZhciBrZXkgaW4gU3RhdGlzdGljcykKKyAgICAgICAgbW9kdWxlLmV4cG9ydHNba2V5XSA9
IFN0YXRpc3RpY3Nba2V5XTsKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90ZXN0
cy9hZG1pbi1wbGF0Zm9ybXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3Rlc3RzL2FkbWluLXBsYXRmb3Jtcy5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90ZXN0cy9hZG1pbi1wbGF0Zm9ybXMuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MiBAQAorZGVzY3JpYmUoIi9hZG1pbi9wbGF0Zm9ybXMiLCBmdW5jdGlvbiAoKSB7
CisgICAgdmFyIHJlcG9ydHNGb3JEaWZmZXJlbnRQbGF0Zm9ybXMgPSBbCisgICAgeworICAgICAg
ICAiYnVpbGROdW1iZXIiOiAiMzAwMSIsCisgICAgICAgICJidWlsZFRpbWUiOiAiMjAxMy0wMi0y
OFQwOTowMTo0NyIsCisgICAgICAgICJidWlsZGVyTmFtZSI6ICJzb21lQnVpbGRlciIsCisgICAg
ICAgICJidWlsZGVyUGFzc3dvcmQiOiAic29tZVBhc3N3b3JkIiwKKyAgICAgICAgInBsYXRmb3Jt
IjogIk1hdmVyaWNrcyIsCisgICAgICAgICJ0ZXN0cyI6IHsidGVzdCI6IHsgIm1ldHJpY3MiOiB7
IkZyYW1lUmF0ZSI6IHsgImN1cnJlbnQiOiBbWzEsIDEsIDFdLCBbMSwgMSwgMV1dIH0gfSB9IH0s
CisgICAgfSwKKyAgICB7CisgICAgICAgICJidWlsZE51bWJlciI6ICIzMDAxIiwKKyAgICAgICAg
ImJ1aWxkVGltZSI6ICIyMDEzLTAyLTI4VDEwOjEyOjAzIiwKKyAgICAgICAgImJ1aWxkZXJOYW1l
IjogInNvbWVCdWlsZGVyIiwKKyAgICAgICAgImJ1aWxkZXJQYXNzd29yZCI6ICJzb21lUGFzc3dv
cmQiLAorICAgICAgICAicGxhdGZvcm0iOiAiTW91bnRhaW4gTGlvbiIsCisgICAgICAgICJ0ZXN0
cyI6IHsidGVzdCI6IHsgIm1ldHJpY3MiOiB7IkZyYW1lUmF0ZSI6IHsgImN1cnJlbnQiOiBbWzIs
IDIsIDJdLCBbMiwgMiwgMl1dIH0sICJDb21iaW5lZCI6IHsgImN1cnJlbnQiOiBbWzMsIDMsIDNd
LCBbMywgMywgM11dIH19IH0gfSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgImJ1aWxkTnVtYmVy
IjogIjMwMDMiLAorICAgICAgICAiYnVpbGRUaW1lIjogIjIwMTMtMDItMjhUMTI6NTY6MjYiLAor
ICAgICAgICAiYnVpbGRlck5hbWUiOiAic29tZUJ1aWxkZXIiLAorICAgICAgICAiYnVpbGRlclBh
c3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJwbGF0Zm9ybSI6ICJUcnVuayBNb3Vu
dGFpbiBMaW9uIiwKKyAgICAgICAgInRlc3RzIjogeyJ0ZXN0IjogeyAibWV0cmljcyI6IHsiRnJh
bWVSYXRlIjogeyAiY3VycmVudCI6IFtbNCwgNCwgNF0sIFs0LCA0LCA0XV0gfSB9IH0gfQorICAg
IH1dOworCisgICAgZnVuY3Rpb24gc3VibWl0UmVwb3J0KHJlcG9ydCwgY2FsbGJhY2spIHsKKyAg
ICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnSU5TRVJUIElOVE8gYnVpbGRlcnMgKGJ1aWxkZXJfbmFt
ZSwgYnVpbGRlcl9wYXNzd29yZF9oYXNoKSB2YWx1ZXMgKCQxLCAkMiknLAorICAgICAgICAgICAg
W3JlcG9ydFswXS5idWlsZGVyTmFtZSwgc2hhMjU2KHJlcG9ydFswXS5idWlsZGVyUGFzc3dvcmQp
XSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHBvc3RKU09OKCcvYXBpL3JlcG9ydC8n
LCByZXBvcnRzRm9yRGlmZmVyZW50UGxhdGZvcm1zLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgIH0KKworICAgIGl0KCJzaG91bGQgZGVsZXRlIHRoZSBwbGF0Zm9ybSB0
aGF0IGdvdCBtZXJnZWQgaW50byBhbm90aGVyIG9uZSIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
c3VibWl0UmVwb3J0KHJlcG9ydHNGb3JEaWZmZXJlbnRQbGF0Zm9ybXMsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCAqIEZST00gcGxhdGZvcm1zIE9S
REVSIGJ5IHBsYXRmb3JtX25hbWUnLCBbXSwgZnVuY3Rpb24gKG9sZFBsYXRmb3JtcykgeworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvbGRQbGF0Zm9ybXMubGVuZ3RoLCAzKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwob2xkUGxhdGZvcm1zWzBdWydwbGF0Zm9ybV9uYW1lJ10s
ICdNYXZlcmlja3MnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob2xkUGxhdGZvcm1z
WzFdWydwbGF0Zm9ybV9uYW1lJ10sICdNb3VudGFpbiBMaW9uJyk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9sZFBsYXRmb3Jtc1syXVsncGxhdGZvcm1fbmFtZSddLCAnVHJ1bmsgTW91
bnRhaW4gTGlvbicpOworICAgICAgICAgICAgICAgIGh0dHBQb3N0KCcvYWRtaW4vcGxhdGZvcm1z
LnBocCcsIHsnYWN0aW9uJzogJ21lcmdlJywgJ2lkJzogb2xkUGxhdGZvcm1zWzFdWydwbGF0Zm9y
bV9pZCddLCAnZGVzdGluYXRpb24nOiBvbGRQbGF0Zm9ybXNbMl1bJ3BsYXRmb3JtX2lkJ119LCBm
dW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0
Y2hBbGwoJ1NFTEVDVCAqIEZST00gcGxhdGZvcm1zIE9SREVSIGJ5IHBsYXRmb3JtX25hbWUnLCBb
XSwgZnVuY3Rpb24gKG5ld1BsYXRmb3JtcykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChuZXdQbGF0Zm9ybXMsIFtvbGRQbGF0Zm9ybXNbMF0sIG9sZFBsYXRmb3Jt
c1syXV0pOworICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgbW92ZSB0ZXN0IHJ1bnMgZnJvbSB0
aGUgbWVyZ2VkIHBsYXRmb3JtIHRvIHRoZSBkZXN0aW5hdGlvbiBwbGF0Zm9ybSIsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgc3VibWl0UmVwb3J0KHJlcG9ydHNGb3JEaWZmZXJlbnRQbGF0Zm9ybXMs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBxdWVyeUZvclJ1bnMgPSAnU0VMRUNUICog
RlJPTSB0ZXN0X3J1bnMsIHRlc3RfY29uZmlndXJhdGlvbnMsIHBsYXRmb3JtcyBXSEVSRSBydW5f
Y29uZmlnID0gY29uZmlnX2lkIEFORCBjb25maWdfcGxhdGZvcm0gPSBwbGF0Zm9ybV9pZCBPUkRF
UiBieSBydW5fbWVhbl9jYWNoZSc7CisgICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxsKHF1ZXJ5
Rm9yUnVucywgW10sIGZ1bmN0aW9uIChvbGRUZXN0UnVucykgeworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChvbGRUZXN0UnVucy5sZW5ndGgsIDQpOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChvbGRUZXN0UnVuc1swXVsncGxhdGZvcm1fbmFtZSddLCAnTWF2ZXJpY2tzJyk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9sZFRlc3RSdW5zWzBdWydydW5fc3VtX2NhY2hl
J10sIDYpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvbGRUZXN0UnVuc1sxXVsncGxh
dGZvcm1fbmFtZSddLCAnTW91bnRhaW4gTGlvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChvbGRUZXN0UnVuc1sxXVsncnVuX3N1bV9jYWNoZSddLCAxMik7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKG9sZFRlc3RSdW5zWzJdWydwbGF0Zm9ybV9uYW1lJ10sICdNb3VudGFp
biBMaW9uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9sZFRlc3RSdW5zWzJdWydy
dW5fc3VtX2NhY2hlJ10sIDE4KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob2xkVGVz
dFJ1bnNbM11bJ3BsYXRmb3JtX25hbWUnXSwgJ1RydW5rIE1vdW50YWluIExpb24nKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwob2xkVGVzdFJ1bnNbM11bJ3J1bl9zdW1fY2FjaGUnXSwg
MjQpOworICAgICAgICAgICAgICAgIGh0dHBQb3N0KCcvYWRtaW4vcGxhdGZvcm1zLnBocCcsIHsn
YWN0aW9uJzogJ21lcmdlJywgJ2lkJzogb2xkVGVzdFJ1bnNbMV1bJ3BsYXRmb3JtX2lkJ10sICdk
ZXN0aW5hdGlvbic6IG9sZFRlc3RSdW5zWzNdWydwbGF0Zm9ybV9pZCddfSwgZnVuY3Rpb24gKHJl
c3BvbnNlKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNwb25zZS5zdGF0
dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxsKHF1ZXJ5
Rm9yUnVucywgW10sIGZ1bmN0aW9uIChuZXdUZXN0UnVucykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKG5ld1Rlc3RSdW5zLmxlbmd0aCwgNCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwobmV3VGVzdFJ1bnNbMF1bJ3J1bl9pZCddLCBvbGRUZXN0
UnVuc1swXVsncnVuX2lkJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG5ld1Rlc3RSdW5zWzBdWydwbGF0Zm9ybV9uYW1lJ10sICdNYXZlcmlja3MnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChuZXdUZXN0UnVuc1swXVsncnVuX3N1bV9jYWNo
ZSddLCA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChuZXdUZXN0UnVu
c1sxXVsncnVuX2lkJ10sIG9sZFRlc3RSdW5zWzFdWydydW5faWQnXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwobmV3VGVzdFJ1bnNbMV1bJ3BsYXRmb3JtX25hbWUnXSwg
J1RydW5rIE1vdW50YWluIExpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChuZXdUZXN0UnVuc1sxXVsncnVuX3N1bV9jYWNoZSddLCAxMik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwobmV3VGVzdFJ1bnNbMl1bJ3J1bl9pZCddLCBvbGRUZXN0
UnVuc1syXVsncnVuX2lkJ10pOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG5ld1Rlc3RSdW5zWzJdWydwbGF0Zm9ybV9uYW1lJ10sICdUcnVuayBNb3VudGFpbiBMaW9uJyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwobmV3VGVzdFJ1bnNbMl1bJ3J1
bl9zdW1fY2FjaGUnXSwgMTgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG5ld1Rlc3RSdW5zWzNdWydydW5faWQnXSwgb2xkVGVzdFJ1bnNbM11bJ3J1bl9pZCddKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChuZXdUZXN0UnVuc1szXVsncGxhdGZv
cm1fbmFtZSddLCAnVHJ1bmsgTW91bnRhaW4gTGlvbicpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKG5ld1Rlc3RSdW5zWzNdWydydW5fc3VtX2NhY2hlJ10sIDI0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChuZXdUZXN0UnVuc1sxXVsncnVuX2Nv
bmZpZyddLCBuZXdUZXN0UnVuc1szXVsncnVuX2NvbmZpZyddKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKK30pOwpJ
bmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rlc3RzL2FkbWluLXJlZ2VuZXJhdGUtbWFu
aWZlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rlc3RzL2Fk
bWluLXJlZ2VuZXJhdGUtbWFuaWZlc3QuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdGVzdHMvYWRtaW4tcmVnZW5lcmF0ZS1tYW5pZmVzdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyNCBAQAorZGVzY3JpYmUoIi9hZG1pbi9yZWdlbmVyYXRlLW1hbmlm
ZXN0IiwgZnVuY3Rpb24gKCkgeworCisgICAgaXQoInNob3VsZCBnZW5lcmF0ZSBhbiBlbXB0eSBt
YW5pZmVzdCB3aGVuIGRhdGFiYXNlIGlzIGVtcHR5IiwgZnVuY3Rpb24gKCkgeworICAgICAgICBo
dHRwR2V0KCcvYWRtaW4vcmVnZW5lcmF0ZS1tYW5pZmVzdCcsIGZ1bmN0aW9uIChyZXNwb25zZSkg
eworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7Cisg
ICAgICAgICAgICBodHRwR2V0KCcvZGF0YS9tYW5pZmVzdCcsIGZ1bmN0aW9uIChyZXNwb25zZSkg
eworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNwb25zZS5zdGF0dXNDb2RlLCAyMDAp
OworICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdCA9IEpTT04ucGFyc2UocmVzcG9uc2UucmVz
cG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKG1hbmlmZXN0LCB7
CisgICAgICAgICAgICAgICAgICAgIGFsbDogW10sCisgICAgICAgICAgICAgICAgICAgIGJ1Z1Ry
YWNrZXJzOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlcnM6IFtdLAorICAgICAgICAg
ICAgICAgICAgICBkYXNoYm9hcmQ6IFtdLAorICAgICAgICAgICAgICAgICAgICBtZXRyaWNzOiBb
XSwKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzOiBbXSwKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdHM6IFtdfSk7CisgICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoInNob3VsZCBnZW5lcmF0
ZSBtYW5pZmVzdCB3aXRoIGJ1ZyB0cmFja2VycyB3aXRob3V0IHJlcG9zaXRvcmllcyIsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgiSU5TRVJUIElOVE8gYnVnX3RyYWNr
ZXJzICh0cmFja2VyX2lkLCB0cmFja2VyX25hbWUsIHRyYWNrZXJfbmV3X2J1Z191cmwpIFZBTFVF
UyIKKyAgICAgICAgICAgICsgIiAoMSwgJ0J1Z3ppbGxhJywgJ2J1Z3Mud2Via2l0Lm9yZycpIiwg
W10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGh0dHBHZXQoJy9hZG1pbi9yZWdlbmVyYXRl
LW1hbmlmZXN0JywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgaHR0cEdl
dCgnL2RhdGEvbWFuaWZlc3QnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBtYW5pZmVzdCA9IEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0
KTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChtYW5pZmVzdFsnYnVnVHJh
Y2tlcnMnXSwgeyAnQnVnemlsbGEnOiB7IG5ld0J1Z1VybDogJ2J1Z3Mud2Via2l0Lm9yZycsIHJl
cG9zaXRvcmllczogbnVsbCB9IH0pOworICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBpdCgic2hvdWxkIGdlbmVyYXRlIG1hbmlmZXN0IHdpdGggYnVnIHRyYWNrZXJz
IGFuZCByZXBvc2l0b3JpZXMiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHF1ZXJ5QW5kRmV0Y2hB
bGwoIklOU0VSVCBJTlRPIHJlcG9zaXRvcmllcyAocmVwb3NpdG9yeV9pZCwgcmVwb3NpdG9yeV9u
YW1lLCByZXBvc2l0b3J5X3VybCwgcmVwb3NpdG9yeV9ibGFtZV91cmwpIFZBTFVFUyIKKyAgICAg
ICAgICAgICsgIiAoMSwgJ1dlYktpdCcsICd0cmFjLndlYmtpdC5vcmcnLCBudWxsKSwgKDIsICdD
aHJvbWl1bScsIG51bGwsICdTb21lQmxhbWVVUkwnKSIsIFtdLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBxdWVyeUFuZEZldGNoQWxsKCJJTlNFUlQgSU5UTyBidWdfdHJhY2tlcnMgKHRyYWNr
ZXJfaWQsIHRyYWNrZXJfbmFtZSkgVkFMVUVTICgzLCAnQnVnemlsbGEnKSwgKDQsICdJc3N1ZSBU
cmFja2VyJykiLCBbXSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0
Y2hBbGwoIklOU0VSVCBJTlRPIHRyYWNrZXJfcmVwb3NpdG9yaWVzICh0cmFjcmVwb190cmFja2Vy
LCB0cmFjcmVwb19yZXBvc2l0b3J5KSBWQUxVRVMgKDMsIDEpLCAoNCwgMSksICg0LCAyKSIsIFtd
LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGh0dHBHZXQoJy9hZG1pbi9yZWdl
bmVyYXRlLW1hbmlmZXN0JywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGh0dHBHZXQoJy9kYXRhL21hbmlmZXN0JywgZnVuY3Rpb24gKHJlc3Bv
bnNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNl
LnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlm
ZXN0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwobWFuaWZlc3RbJ3JlcG9zaXRvcmllcyddLCB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJLaXQnOiB7IHVybDogJ3RyYWMu
d2Via2l0Lm9yZycsIGJsYW1lVXJsOiBudWxsIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdDaHJvbWl1bSc6IHsgdXJsOiBudWxsLCBibGFtZVVybDogJ1NvbWVCbGFtZVVSTCcg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwobWFuaWZlc3RbJ2J1Z1RyYWNrZXJzJ11bJ0J1Z3ppbGxh
J10sIHsgbmV3QnVnVXJsOiBudWxsLCByZXBvc2l0b3JpZXM6IFsnV2ViS2l0J10gfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChtYW5pZmVzdFsnYnVnVHJh
Y2tlcnMnXVsnSXNzdWUgVHJhY2tlciddLCB7IG5ld0J1Z1VybDogbnVsbCwgcmVwb3NpdG9yaWVz
OiBbJ1dlYktpdCcsICdDaHJvbWl1bSddIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgZ2VuZXJhdGUgbWFuaWZlc3Qgd2l0aCBi
dWlsZGVycyIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgiSU5TRVJU
IElOVE8gYnVpbGRlcnMgKGJ1aWxkZXJfaWQsIGJ1aWxkZXJfbmFtZSwgYnVpbGRlcl9wYXNzd29y
ZF9oYXNoLCBidWlsZGVyX2J1aWxkX3VybCkgVkFMVUVTIgorICAgICAgICAgICAgKyAiICgxLCAn
U29tZUJ1aWxkZXInLCAnYScsIG51bGwpLCAoMiwgJ1NvbWVPdGhlckJ1aWxkZXInLCAnYicsICdT
b21lVVJMJykiLCBbXSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaHR0cEdldCgnL2FkbWlu
L3JlZ2VuZXJhdGUtbWFuaWZlc3QnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAgICAgICAg
ICAgICBodHRwR2V0KCcvZGF0YS9tYW5pZmVzdCcsIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5y
ZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKG1hbmlm
ZXN0WydidWlsZGVycyddLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAnMSc6IHsgbmFtZTog
J1NvbWVCdWlsZGVyJywgYnVpbGRVcmw6IG51bGwgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICcyJzogeyBuYW1lOiAnU29tZU90aGVyQnVpbGRlcicsIGJ1aWxkVXJsOiAnU29tZVVSTCcgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0pOworCisgICAgaXQoInNob3VsZCBnZW5lcmF0ZSBtYW5pZmVzdCB3aXRoIHRlc3RzIiwgZnVu
Y3Rpb24gKCkgeworICAgICAgICBxdWVyeUFuZEZldGNoQWxsKCJJTlNFUlQgSU5UTyB0ZXN0cyAo
dGVzdF9pZCwgdGVzdF9uYW1lLCB0ZXN0X3BhcmVudCkgVkFMVUVTIgorICAgICAgICAgICAgKyAi
ICgxLCAnU29tZVRlc3QnLCBudWxsKSwgKDIsICdTb21lT3RoZXJUZXN0JywgbnVsbCksICAoMywg
J0NoaWxkVGVzdCcsIDEpIiwgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGh0dHBHZXQo
Jy9hZG1pbi9yZWdlbmVyYXRlLW1hbmlmZXN0JywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAg
ICAgICAgICAgICAgaHR0cEdldCgnL2RhdGEvbWFuaWZlc3QnLCBmdW5jdGlvbiAocmVzcG9uc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUs
IDIwMCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdCA9IEpTT04ucGFyc2UocmVz
cG9uc2UucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVh
bChtYW5pZmVzdFsndGVzdHMnXSwgeworICAgICAgICAgICAgICAgICAgICAgICAgJzEnOiB7IG5h
bWU6ICdTb21lVGVzdCcsIHVybDogbnVsbCwgcGFyZW50SWQ6IG51bGwgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICcyJzogeyBuYW1lOiAnU29tZU90aGVyVGVzdCcsIHVybDogbnVsbCwgcGFy
ZW50SWQ6IG51bGwgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICczJzogeyBuYW1lOiAnQ2hp
bGRUZXN0JywgdXJsOiBudWxsLCBwYXJlbnRJZDogJzEnIH0KKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91
bGQgZ2VuZXJhdGUgbWFuaWZlc3Qgd2l0aCBtZXRyaWNzIiwgZnVuY3Rpb24gKCkgeworICAgICAg
ICBxdWVyeUFuZEZldGNoQWxsKCJJTlNFUlQgSU5UTyB0ZXN0cyAodGVzdF9pZCwgdGVzdF9uYW1l
LCB0ZXN0X3BhcmVudCkgVkFMVUVTIgorICAgICAgICAgICAgKyAiICgxLCAnU29tZVRlc3QnLCBu
dWxsKSwgKDIsICdTb21lT3RoZXJUZXN0JywgbnVsbCksICAoMywgJ0NoaWxkVGVzdCcsIDEpIiwg
W10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ0lOU0VSVCBJ
TlRPIGFnZ3JlZ2F0b3JzIChhZ2dyZWdhdG9yX2lkLCBhZ2dyZWdhdG9yX25hbWUsIGFnZ3JlZ2F0
b3JfZGVmaW5pdGlvbikgdmFsdWVzICg0LCAkMSwgJDIpJywKKyAgICAgICAgICAgICAgICBbJ1Rv
dGFsJywgJ3ZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9KSdd
LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgiSU5TRVJU
IElOVE8gdGVzdF9tZXRyaWNzIChtZXRyaWNfaWQsIG1ldHJpY190ZXN0LCBtZXRyaWNfbmFtZSwg
bWV0cmljX2FnZ3JlZ2F0b3IpIFZBTFVFUyIKKyAgICAgICAgICAgICAgICAgICAgKyAiICg1LCAx
LCAnVGltZScsIG51bGwpLCAoNiwgMiwgJ1RpbWUnLCA0KSwgKDcsIDIsICdNYWxsb2MnLCA0KSIs
IFtdLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIGh0dHBHZXQoJy9hZG1pbi9y
ZWdlbmVyYXRlLW1hbmlmZXN0JywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGh0dHBHZXQoJy9kYXRhL21hbmlmZXN0JywgZnVuY3Rpb24gKHJl
c3BvbnNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Bv
bnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1h
bmlmZXN0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwobWFuaWZlc3RbJ21ldHJpY3MnXSwgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNSc6IHsgbmFtZTogJ1RpbWUnLCB0ZXN0
OiAnMScsIGFnZ3JlZ2F0b3I6IG51bGwgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzYnOiB7IG5hbWU6ICdUaW1lJywgdGVzdDogJzInLCBhZ2dyZWdhdG9yOiAnVG90YWwnIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc3JzogeyBuYW1lOiAnTWFsbG9jJywg
dGVzdDogJzInLCBhZ2dyZWdhdG9yOiAnVG90YWwnIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAg
ICAvLyBGSVhNRTogVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBhbGwgYW5kIGRhc2hib2FyZC4KK30p
OwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rlc3RzL2FkbWluLXJlcHJvY2Vzcy1y
ZXBvcnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rlc3RzL2Fk
bWluLXJlcHJvY2Vzcy1yZXBvcnQuanMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdGVzdHMvYWRtaW4tcmVwcm9jZXNzLXJlcG9ydC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDczIEBACitkZXNjcmliZSgiL2FkbWluL3JlcHJvY2Vzcy1yZXBvcnQiLCBmdW5j
dGlvbiAoKSB7CisgICAgdmFyIHNpbXBsZVJlcG9ydCA9IFt7CisgICAgICAgICJidWlsZE51bWJl
ciI6ICIxOTg2IiwKKyAgICAgICAgImJ1aWxkVGltZSI6ICIyMDEzLTAyLTI4VDEwOjEyOjAzIiwK
KyAgICAgICAgImJ1aWxkZXJOYW1lIjogInNvbWVCdWlsZGVyIiwKKyAgICAgICAgImJ1aWxkZXJQ
YXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAicGxhdGZvcm0iOiAiTW91bnRhaW4g
TGlvbiIsCisgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAidGVzdCI6IHsKKyAg
ICAgICAgICAgICAgICAgICAgIm1ldHJpY3MiOiB7IkZyYW1lUmF0ZSI6IHsgImN1cnJlbnQiOiBb
WzEsIDIsIDNdLCBbNCwgNSwgNl1dIH19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IH0sCisgICAgICAgIH1dOworCisgICAgZnVuY3Rpb24gYWRkQnVpbGRlcihyZXBvcnQsIGNhbGxi
YWNrKSB7CisgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ0lOU0VSVCBJTlRPIGJ1aWxkZXJzIChi
dWlsZGVyX25hbWUsIGJ1aWxkZXJfcGFzc3dvcmRfaGFzaCkgdmFsdWVzICgkMSwgJDIpJywKKyAg
ICAgICAgICAgIFtyZXBvcnRbMF0uYnVpbGRlck5hbWUsIHNoYTI1NihyZXBvcnRbMF0uYnVpbGRl
clBhc3N3b3JkKV0sIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBpdCgic2hvdWxkIGFkZCBidWls
ZCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYWRkQnVpbGRlcihzaW1wbGVSZXBvcnQsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHBvc3RKU09OKCcvYXBpL3JlcG9ydC8nLCBzaW1wbGVSZXBv
cnQsIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXNwb25zZS5zdGF0dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChK
U09OLnBhcnNlKHJlc3BvbnNlLnJlc3BvbnNlVGV4dClbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAg
ICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxsKCdTRUxFQ1QgKiBGUk9NIGJ1aWxkcycsIFtdLCBm
dW5jdGlvbiAoYnVpbGRSb3dzKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChi
dWlsZFJvd3MubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1
aWxkUm93c1swXVsnYnVpbGRfbnVtYmVyJ10sIDE5ODYpOworICAgICAgICAgICAgICAgICAgICBx
dWVyeUFuZEZldGNoQWxsKCdTRUxFQ1QgKiBGUk9NIHJlcG9ydHMnLCBbXSwgZnVuY3Rpb24gKHJl
cG9ydFJvd3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXBvcnRS
b3dzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVw
b3J0Um93c1swXVsncmVwb3J0X2J1aWxkX251bWJlciddLCAxOTg2KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ0RFTEVURSBGUk9NIGJ1aWxkczsgU0VMRUNUICog
RlJPTSBidWlsZHMnLCBbXSwgZnVuY3Rpb24gKGJ1aWxkUm93cykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChidWlsZFJvd3MubGVuZ3RoLCAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcmVwb3J0SWQgPSByZXBvcnRSb3dzWzBdWydyZXBvcnRf
aWQnXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwR2V0KCcvYWRtaW4vcmVwcm9j
ZXNzLXJlcG9ydD9yZXBvcnQ9JyArIHJlcG9ydElkLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1
c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChKU09OLnBhcnNlKHJlc3BvbnNlLnJlc3BvbnNlVGV4dClbJ3N0YXR1cyddLCAnT0snKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnU0VMRUNUICog
RlJPTSBidWlsZHMnLCBbXSwgZnVuY3Rpb24gKGJ1aWxkUm93cykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1aWxkUm93cy5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1aWxkUm93
c1swXVsnYnVpbGRfbnVtYmVyJ10sIDE5ODYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgbm90
IGR1cGxpY2F0ZSB0aGUgcmVwcm9jZXNzZWQgcmVwb3J0IiwgZnVuY3Rpb24gKCkgeworICAgICAg
ICBhZGRCdWlsZGVyKHNpbXBsZVJlcG9ydCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcG9z
dEpTT04oJy9hcGkvcmVwb3J0LycsIHNpbXBsZVJlcG9ydCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9u
c2VUZXh0KVsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hB
bGwoJ1NFTEVDVCAqIEZST00gcmVwb3J0cycsIFtdLCBmdW5jdGlvbiAob3JpZ2luYWxSZXByb3RS
b3dzKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvcmlnaW5hbFJlcHJvdFJv
d3MubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnREVM
RVRFIEZST00gYnVpbGRzJywgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGh0dHBHZXQoJy9hZG1pbi9yZXByb2Nlc3MtcmVwb3J0P3JlcG9ydD0nICsgb3JpZ2luYWxS
ZXByb3RSb3dzWzBdWydyZXBvcnRfaWQnXSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIw
MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKEpTT04ucGFyc2Uo
cmVzcG9uc2UucmVzcG9uc2VUZXh0KVsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCAqIEZST00gcmVwb3J0cycsIFtd
LCBmdW5jdGlvbiAocmVwb3J0Um93cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbFJlcHJvdFJvd3NbMF1bJ3JlcG9ydF9jb21taXR0ZWRfYXQnXSA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJvd3NbMF1bJ3JlcG9ydF9jb21t
aXR0ZWRfYXQnXSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dC5kZWVwRXF1YWwocmVwb3J0Um93cywgb3JpZ2luYWxSZXByb3RSb3dzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfSk7CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdGVzdHMvYXBp
LXJlcG9ydC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdGVzdHMv
YXBpLXJlcG9ydC5qcwkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90
ZXN0cy9hcGktcmVwb3J0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTg2IEBACitkZXNj
cmliZSgiL2FwaS9yZXBvcnQiLCBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGVtcHR5UmVwb3J0ID0g
W3sKKyAgICAgICAgImJ1aWxkTnVtYmVyIjogIjEyMyIsCisgICAgICAgICJidWlsZFRpbWUiOiAi
MjAxMy0wMi0yOFQxMDoxMjowMy4zODgzMDQiLAorICAgICAgICAiYnVpbGRlck5hbWUiOiAic29t
ZUJ1aWxkZXIiLAorICAgICAgICAiYnVpbGRlclBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisg
ICAgICAgICJwbGF0Zm9ybSI6ICJNb3VudGFpbiBMaW9uIiwKKyAgICAgICAgInRlc3RzIjoge30s
CisgICAgICAgICJyZXZpc2lvbnMiOiB7CisgICAgICAgICAgICAiT1MgWCI6IHsKKyAgICAgICAg
ICAgICAgICAicmV2aXNpb24iOiAiMTAuOC4yIDEyQzYwIgorICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjE0MTk3NyIs
CisgICAgICAgICAgICAgICAgInRpbWVzdGFtcCI6ICIyMDEzLTAyLTA2VDA4OjU1OjIwLjlaIgor
ICAgICAgICAgICAgfQorICAgICAgICB9fV07CisKKyAgICBmdW5jdGlvbiBhZGRCdWlsZGVyKHJl
cG9ydCwgY2FsbGJhY2spIHsKKyAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnSU5TRVJUIElOVE8g
YnVpbGRlcnMgKGJ1aWxkZXJfbmFtZSwgYnVpbGRlcl9wYXNzd29yZF9oYXNoKSB2YWx1ZXMgKCQx
LCAkMiknLAorICAgICAgICAgICAgW3JlcG9ydFswXS5idWlsZGVyTmFtZSwgc2hhMjU2KHJlcG9y
dFswXS5idWlsZGVyUGFzc3dvcmQpXSwgY2FsbGJhY2spOworICAgIH0KKworICAgIGl0KCJzaG91
bGQgcmVqZWN0IGVycm9yIHdoZW4gYnVpbGRlciBuYW1lIGlzIG1pc3NpbmciLCBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHBvc3RKU09OKCcvYXBpL3JlcG9ydC8nLCBbeyJidWlsZFRpbWUiOiAiMjAx
My0wMi0yOFQxMDoxMjowMy4zODgzMDQifV0sIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydzdGF0dXMn
XSwgJ01pc3NpbmdCdWlsZGVyTmFtZScpOworICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgcmVqZWN0IGVycm9yIHdoZW4gYnVp
bGQgdGltZSBpcyBtaXNzaW5nIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBhZGRCdWlsZGVyKGVt
cHR5UmVwb3J0LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBwb3N0SlNPTignL2FwaS9yZXBv
cnQvJywgW3siYnVpbGRlck5hbWUiOiAic29tZUJ1aWxkZXIiLCAiYnVpbGRlclBhc3N3b3JkIjog
InNvbWVQYXNzd29yZCJ9XSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KVsnc3RhdHVzJ10s
ICdNaXNzaW5nQnVpbGRUaW1lJyk7CisgICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoInNob3VsZCByZWpl
Y3Qgd2hlbiB0aGVyZSBhcmUgbm8gYnVpbGRlcnMiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHBv
c3RKU09OKCcvYXBpL3JlcG9ydC8nLCBlbXB0eVJlcG9ydCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAg
ICAgICAgICAgIGFzc2VydC5ub3RFcXVhbChKU09OLnBhcnNlKHJlc3BvbnNlLnJlc3BvbnNlVGV4
dClbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChKU09OLnBhcnNl
KHJlc3BvbnNlLnJlc3BvbnNlVGV4dClbJ2ZhaWx1cmVTdG9yZWQnXSwgZmFsc2UpOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KVsncHJv
Y2Vzc2VkUnVucyddLCAwKTsKKworICAgICAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnU0VMRUNU
IENPVU5UKCopIGZyb20gcmVwb3J0cycsIFtdLCBmdW5jdGlvbiAocm93cykgeworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyb3dzWzBdLmNvdW50LCAwKTsKKyAgICAgICAgICAgICAgICBu
b3RpZnlEb25lKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAg
ICBpdCgic2hvdWxkIHN0b3JlIGEgcmVwb3J0IGZyb20gYSB2YWxpZCBidWlsZGVyIiwgZnVuY3Rp
b24gKCkgeworICAgICAgICBhZGRCdWlsZGVyKGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBwb3N0SlNPTignL2FwaS9yZXBvcnQvJywgZW1wdHlSZXBvcnQsIGZ1bmN0aW9u
IChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNwb25zZS5zdGF0
dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChKU09OLnBhcnNlKHJl
c3BvbnNlLnJlc3BvbnNlVGV4dClbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydmYWlsdXJlU3Rv
cmVkJ10sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShy
ZXNwb25zZS5yZXNwb25zZVRleHQpWydwcm9jZXNzZWRSdW5zJ10sIDEpOworICAgICAgICAgICAg
ICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCBDT1VOVCgqKSBmcm9tIHJlcG9ydHMnLCBbXSwg
ZnVuY3Rpb24gKHJvd3MpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJvd3Nb
MF0uY291bnQsIDEpOworICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAg
ICBpdCgic2hvdWxkIHN0b3JlIHRoZSBidWlsZGVyIG5hbWUgYnV0IG5vdCB0aGUgYnVpbGRlciBw
YXNzd29yZCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYWRkQnVpbGRlcihlbXB0eVJlcG9ydCwg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIGVtcHR5
UmVwb3J0LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICBxdWVyeUFuZEZl
dGNoQWxsKCdTRUxFQ1QgcmVwb3J0X2NvbnRlbnQgZnJvbSByZXBvcnRzJywgW10sIGZ1bmN0aW9u
IChyb3dzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZWRDb250ZW50ID0gSlNPTi5w
YXJzZShyb3dzWzBdLnJlcG9ydF9jb250ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHN0b3JlZENvbnRlbnRbJ2J1aWxkZXJOYW1lJ10sIGVtcHR5UmVwb3J0WzBdWydidWls
ZGVyTmFtZSddKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCEoJ2J1aWxkZXJQYXNzd29y
ZCcgaW4gc3RvcmVkQ29udGVudCkpOworICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBpdCgic2hvdWxkIGFkZCBhIGJ1aWxkIiwgZnVuY3Rpb24gKCkgeworICAgICAg
ICBhZGRCdWlsZGVyKGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBwb3N0
SlNPTignL2FwaS9yZXBvcnQvJywgZW1wdHlSZXBvcnQsIGZ1bmN0aW9uIChyZXNwb25zZSkgewor
ICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCAqIGZyb20gYnVpbGRzJywg
W10sIGZ1bmN0aW9uIChyb3dzKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RF
cXVhbChyb3dzWzBdLmJ1aWxkX251bWJlciwgMTIzKTsKKyAgICAgICAgICAgICAgICAgICAgbm90
aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgaXQoInNob3VsZCBhZGQgdGhlIHBsYXRmb3JtIiwgZnVuY3Rp
b24gKCkgeworICAgICAgICBhZGRCdWlsZGVyKGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBwb3N0SlNPTignL2FwaS9yZXBvcnQvJywgZW1wdHlSZXBvcnQsIGZ1bmN0aW9u
IChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCAq
IGZyb20gcGxhdGZvcm1zJywgW10sIGZ1bmN0aW9uIChyb3dzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3dzWzBdLnBsYXRmb3JtX25hbWUsICdNb3VudGFpbiBM
aW9uJyk7CisgICAgICAgICAgICAgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJz
aG91bGQgYWRkIHJlcG9zaXRvcmllcyBhbmQgYnVpbGQgcmV2aXNpb25zIiwgZnVuY3Rpb24gKCkg
eworICAgICAgICBhZGRCdWlsZGVyKGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBwb3N0SlNPTignL2FwaS9yZXBvcnQvJywgZW1wdHlSZXBvcnQsIGZ1bmN0aW9uIChyZXNw
b25zZSkgeworICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCAqIEZST00g
cmVwb3NpdG9yaWVzJywgW10sIGZ1bmN0aW9uIChyb3dzKSB7CisgICAgICAgICAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwocm93cy5tYXAoZnVuY3Rpb24gKHJvdykgeyByZXR1cm4gcm93Wydy
ZXBvc2l0b3J5X25hbWUnXTsgfSksIFsnT1MgWCcsICdXZWJLaXQnXSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHJlcG9zaXRvcnlJZFRvTmFtZSA9IHt9OworICAgICAgICAgICAgICAgICAg
ICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeyByZXBvc2l0b3J5SWRUb05hbWVbcm93Wydy
ZXBvc2l0b3J5X2lkJ11dID0gcm93WydyZXBvc2l0b3J5X25hbWUnXTsgfSk7CisgICAgICAgICAg
ICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hBbGwoJ1NFTEVDVCAqIEZST00gYnVpbGRfcmV2aXNpb25z
JywgW10sIGZ1bmN0aW9uIChyb3dzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVw
b3NpdG9yeU5hbWVUb1JldmlzaW9uUm93ID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICBy
b3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnlOYW1lVG9SZXZpc2lvblJvd1tyZXBvc2l0b3J5SWRUb05hbWVbcm93WydyZXZp
c2lvbl9yZXBvc2l0b3J5J11dXSA9IHJvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcG9zaXRvcnlOYW1lVG9SZXZp
c2lvblJvd1snT1MgWCddWydyZXZpc2lvbl92YWx1ZSddLCAnMTAuOC4yIDEyQzYwJyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVwb3NpdG9yeU5hbWVUb1JldmlzaW9u
Um93WydXZWJLaXQnXVsncmV2aXNpb25fdmFsdWUnXSwgJzE0MTk3NycpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcG9zaXRvcnlOYW1lVG9SZXZpc2lvblJvd1snV2Vi
S2l0J11bJ3JldmlzaW9uX3RpbWUnXS50b1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ldyBEYXRlKCcyMDEzLTAyLTA2IDA4OjU1OjIwLjknKS50b1N0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7CisKKyAgICBpdCgic2hvdWxkIG5vdCBjcmVhdGUgYSBkdXBsaWNhdGUgYnVpbGQgZm9y
IHRoZSBzYW1lIGJ1aWxkIG51bWJlciBpZiBidWlsZCB0aW1lcyBhcmUgY2xvc2UiLCBmdW5jdGlv
biAoKSB7CisgICAgICAgIGFkZEJ1aWxkZXIoZW1wdHlSZXBvcnQsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGVtcHR5UmVwb3J0WzBdWydidWlsZFRpbWUnXSA9ICcyMDEzLTAyLTI4VDEwOjEy
OjA0JzsKKyAgICAgICAgICAgIHBvc3RKU09OKCcvYXBpL3JlcG9ydC8nLCBlbXB0eVJlcG9ydCwg
ZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Bv
bnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKEpTT04u
cGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KVsnc3RhdHVzJ10sICdPSycpOworCisgICAgICAg
ICAgICAgICAgZW1wdHlSZXBvcnRbMF1bJ2J1aWxkVGltZSddID0gJzIwMTMtMDItMjhUMTA6MjI6
MDMnOworICAgICAgICAgICAgICAgIHBvc3RKU09OKCcvYXBpL3JlcG9ydC8nLCBlbXB0eVJlcG9y
dCwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXNwb25zZS5zdGF0dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydzdGF0dXMnXSwgJ09LJyk7
CisKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnU0VMRUNUICogRlJPTSBi
dWlsZHMnLCBbXSwgZnVuY3Rpb24gKHJvd3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyb3dzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3Rp
ZnlEb25lKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoInNob3VsZCBj
cmVhdGUgZGlzdGluY3QgYnVpbGRzIGZvciB0aGUgc2FtZSBidWlsZCBudW1iZXIgaWYgYnVpbGQg
dGltZXMgYXJlIGZhciBhcGFydCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYWRkQnVpbGRlcihl
bXB0eVJlcG9ydCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZW1wdHlSZXBvcnRbMF1bJ2J1
aWxkVGltZSddID0gJzIwMTMtMDItMjhUMTA6MTI6MDMnOworICAgICAgICAgICAgcG9zdEpTT04o
Jy9hcGkvcmVwb3J0LycsIGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQp
WydzdGF0dXMnXSwgJ09LJyk7CisKKyAgICAgICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxsKCdT
RUxFQ1QgKiBGUk9NIGJ1aWxkcycsIFtdLCBmdW5jdGlvbiAocm93cykgeworICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocm93cy5sZW5ndGgsIDEpOworCisgICAgICAgICAgICAgICAg
ICAgIGVtcHR5UmVwb3J0WzBdWydidWlsZFRpbWUnXSA9ICcyMDE0LTAxLTIwVDIyOjIzOjM0JzsK
KyAgICAgICAgICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIGVtcHR5UmVwb3J0
LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXNwb25zZS5zdGF0dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KVsnc3RhdHVzJ10s
ICdPSycpOworCisgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxsKCdTRUxF
Q1QgKiBGUk9NIGJ1aWxkcycsIFtdLCBmdW5jdGlvbiAocm93cykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyb3dzLmxlbmd0aCwgMik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoInNob3VsZCByZWplY3QgYSBy
ZXBvcnQgd2l0aCBtaXNtYXRjaGluZyByZXZpc2lvbiBpbmZvIiwgZnVuY3Rpb24gKCkgeworICAg
ICAgICBhZGRCdWlsZGVyKGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBl
bXB0eVJlcG9ydFswXVsncmV2aXNpb25zJ10gPSB7CisgICAgICAgICAgICAgICAgIldlYktpdCI6
IHsKKyAgICAgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjE0MTk3NyIsCisgICAgICAgICAg
ICAgICAgICAgICJ0aW1lc3RhbXAiOiAiMjAxMy0wMi0wNlQwODo1NToyMC45NloiCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVw
b3J0LycsIGVtcHR5UmVwb3J0LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydzdGF0dXMn
XSwgJ09LJyk7CisKKyAgICAgICAgICAgICAgICBlbXB0eVJlcG9ydFswXVsncmV2aXNpb25zJ10g
PSB7CisgICAgICAgICAgICAgICAgICAgICJXZWJLaXQiOiB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAicmV2aXNpb24iOiAiMTUwMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1l
c3RhbXAiOiAiMjAxMy0wNS0xM1QxMDo1MDoyOS42WiIKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb3N0SlNPTignL2FwaS9yZXBvcnQv
JywgZW1wdHlSZXBvcnQsIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXNzZXJ0Lm5vdEVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KVsn
c3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVzcG9uc2UucmVz
cG9uc2VUZXh0LmluZGV4T2YoJzE0MTk3NycpID49IDApOworICAgICAgICAgICAgICAgICAgICBh
c3NlcnQocmVzcG9uc2UucmVzcG9uc2VUZXh0LmluZGV4T2YoJzE1MDAwMCcpID49IDApOworICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25z
ZVRleHQpWydmYWlsdXJlU3RvcmVkJ10sIHRydWUpOworICAgICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydwcm9jZXNzZWRSdW5z
J10sIDApOworICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICB2YXIg
cmVwb3J0V2l0aFR3b0xldmVsc09mQWdncmVnYXRpb25zID0gW3sKKyAgICAgICAgImJ1aWxkTnVt
YmVyIjogIjEyMyIsCisgICAgICAgICJidWlsZFRpbWUiOiAiMjAxMy0wMi0yOFQxMDoxMjowMy4z
ODgzMDQiLAorICAgICAgICAiYnVpbGRlck5hbWUiOiAic29tZUJ1aWxkZXIiLAorICAgICAgICAi
YnVpbGRlclBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJwbGF0Zm9ybSI6ICJN
b3VudGFpbiBMaW9uIiwKKyAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgIkR1bW15UGFn
ZUxvYWRpbmciOiB7CisgICAgICAgICAgICAgICAgIm1ldHJpY3MiOiB7IlRpbWUiOiB7ICJhZ2dy
ZWdhdG9ycyIgOiBbIkFyaXRobWV0aWMiXSwgImN1cnJlbnQiOiBbMzAwLCAzMTAsIDMyMCwgMzMw
XSB9fSwKKyAgICAgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgICAgICJh
cHBsZS5jb20iOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAibWV0cmljcyI6IHsiVGltZSI6
IHsgImN1cnJlbnQiOiBbNTAwLCA1MTAsIDUyMCwgNTMwXSB9fSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICJ1cmwiOiAiaHR0cDovL3d3dy5hcHBsZS5jb20iCisgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQub3JnIjogeworICAgICAgICAgICAgICAg
ICAgICAgICAgIm1ldHJpY3MiOiB7IlRpbWUiOiB7ICJjdXJyZW50IjogWzEwMCwgMTEwLCAxMjAs
IDEzMF0gfX0sCisgICAgICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHA6Ly93d3cud2Vi
a2l0Lm9yZyIKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAiRHVtbXlCZW5jaG1hcmsiOiB7CisgICAgICAgICAgICAg
ICAgIm1ldHJpY3MiOiB7IlRpbWUiOiBbIkFyaXRobWV0aWMiXX0sCisgICAgICAgICAgICAgICAg
InRlc3RzIjogeworICAgICAgICAgICAgICAgICAgICAiRE9NIjogeworICAgICAgICAgICAgICAg
ICAgICAgICAgIm1ldHJpY3MiOiB7IlRpbWUiOiBbIkdlb21ldHJpYyIsICJBcml0aG1ldGljIl19
LAorICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJNb2RpZnlOb2RlcyI6IHsibWV0cmljcyI6IHsiVGltZSI6IHsgImN1cnJlbnQi
OiBbWzExLCAxMiwgMTMsIDE0LCAxNV0sIFsxNiwgMTcsIDE4LCAxOSwgMjBdLCBbMjEsIDIyLCAy
MywgMjQsIDI1XV0gfX19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmF2ZXJzZU5v
ZGVzIjogeyJtZXRyaWNzIjogeyJUaW1lIjogeyAiY3VycmVudCI6IFtbMzEsIDMyLCAzMywgMzQs
IDM1XSwgWzM2LCAzNywgMzgsIDM5LCA0MF0sIFs0MSwgNDIsIDQzLCA0NCwgNDVdXSB9fX0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgIkNTUyI6IHsibWV0cmljcyI6IHsiVGltZSI6IHsgImN1cnJlbnQiOiBbWzEw
MSwgMTAyLCAxMDMsIDEwNCwgMTA1XSwgWzEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwXSwgWzExMSwg
MTEyLCAxMTMsIDExNCwgMTE1XV0gfX19CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICAicmV2aXNpb25zIjogeworICAgICAgICAgICAgIk9TIFgi
OiB7CisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjEwLjguMiAxMkM2MCIKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAiV2ViS2l0IjogeworICAgICAgICAgICAgICAgICJyZXZpc2lv
biI6ICIxNDE5NzciLAorICAgICAgICAgICAgICAgICJ0aW1lc3RhbXAiOiAiMjAxMy0wMi0wNlQw
ODo1NToyMC45WiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfX1dOworCisgICAgZnVuY3Rpb24g
YWRkQnVpbGRlckFuZE1lYW5BZ2dyZWdhdG9ycyhyZXBvcnQsIGNhbGxiYWNrKSB7CisgICAgICAg
IGFkZEJ1aWxkZXIocmVwb3J0LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBxdWVyeUFuZEZl
dGNoQWxsKCdJTlNFUlQgSU5UTyBhZ2dyZWdhdG9ycyAoYWdncmVnYXRvcl9uYW1lLCBhZ2dyZWdh
dG9yX2RlZmluaXRpb24pIHZhbHVlcyAoJDEsICQyKScsCisgICAgICAgICAgICAgICAgWydBcml0
aG1ldGljJywgJ3ZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9
KSAvIHZhbHVlcy5sZW5ndGgnXSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHF1ZXJ5
QW5kRmV0Y2hBbGwoJ0lOU0VSVCBJTlRPIGFnZ3JlZ2F0b3JzIChhZ2dyZWdhdG9yX25hbWUsIGFn
Z3JlZ2F0b3JfZGVmaW5pdGlvbikgdmFsdWVzICgkMSwgJDIpJywKKyAgICAgICAgICAgICAgICAg
ICAgWydHZW9tZXRyaWMnLCAnTWF0aC5wb3codmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikg
eyByZXR1cm4gYSAqIGI7IH0pLCAxIC8gdmFsdWVzLmxlbmd0aCknXSwgY2FsbGJhY2spOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZldGNoUnVu
Rm9yTWV0cmljKHRlc3ROYW1lLCBtZXRyaWNOYW1lLGNhbGxiYWNrKSB7CisgICAgICAgIHF1ZXJ5
QW5kRmV0Y2hBbGwoJ1NFTEVDVCAqIEZST00gdGVzdF9ydW5zIFdIRVJFIHJ1bl9jb25maWcgSU4n
CisgICAgICAgICAgICArICcoU0VMRUNUIGNvbmZpZ19pZCBGUk9NIHRlc3RfY29uZmlndXJhdGlv
bnMsIHRlc3RfbWV0cmljcywgdGVzdHMgV0hFUkUgY29uZmlnX21ldHJpYyA9IG1ldHJpY19pZCBB
TkQgbWV0cmljX3Rlc3QgPSB0ZXN0X2lkIEFORCcKKyAgICAgICAgICAgICsgJ3Rlc3RfbmFtZSA9
ICQxIEFORCBtZXRyaWNfbmFtZSA9ICQyKScsCisgICAgICAgICAgICBbJ0FyaXRobWV0aWMnLCAn
dmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSArIGI7IH0pIC8gdmFsdWVz
Lmxlbmd0aCddLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxsKCdJ
TlNFUlQgSU5UTyBhZ2dyZWdhdG9ycyAoYWdncmVnYXRvcl9uYW1lLCBhZ2dyZWdhdG9yX2RlZmlu
aXRpb24pIHZhbHVlcyAoJDEsICQyKScsCisgICAgICAgICAgICAgICAgWydHZW9tZXRyaWMnLCAn
TWF0aC5wb3codmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAqIGI7IH0p
LCAxIC8gdmFsdWVzLmxlbmd0aCknXSwgY2FsbGJhY2spOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBpdCgic2hvdWxkIHJlamVjdCB3aGVuIGFnZ3JlZ2F0b3JzIGFyZSBtaXNzaW5nIiwgZnVu
Y3Rpb24gKCkgeworICAgICAgICBhZGRCdWlsZGVyKHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3Jl
Z2F0aW9ucywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0
LycsIHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKHJlc3BvbnNl
KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIw
MCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVz
cG9uc2VUZXh0KVsnc3RhdHVzJ10sICdBZ2dyZWdhdG9yTm90Rm91bmQnKTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydmYWls
dXJlU3RvcmVkJ10sIHRydWUpOworICAgICAgICAgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgYWRkIHRl
c3RzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBhZGRCdWlsZGVyQW5kTWVhbkFnZ3JlZ2F0b3Jz
KHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3Jl
Z2F0aW9ucywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KVsnc3RhdHVzJ10sICdPSycpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChKU09OLnBhcnNlKHJlc3BvbnNlLnJlc3BvbnNl
VGV4dClbJ2ZhaWx1cmVTdG9yZWQnXSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHF1ZXJ5QW5k
RmV0Y2hBbGwoJ1NFTEVDVCAqIEZST00gdGVzdHMnLCBbXSwgZnVuY3Rpb24gKHJvd3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyb3dzLm1hcChmdW5jdGlvbiAocm93
KSB7IHJldHVybiByb3dbJ3Rlc3RfbmFtZSddOyB9KS5zb3J0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBbJ0NTUycsICdET00nLCAnRHVtbXlCZW5jaG1hcmsnLCAnRHVtbXlQYWdlTG9hZGlu
ZycsICdNb2RpZnlOb2RlcycsICdUcmF2ZXJzZU5vZGVzJywgJ2FwcGxlLmNvbScsICd3ZWJraXQu
b3JnJ10pOworICAgICAgICAgICAgICAgICAgICBlbXB0eVJlcG9ydFswXS50ZXN0cyA9IHt9Owor
ICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgic2hvdWxkIGFk
ZCBtZXRyaWNzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBhZGRCdWlsZGVyQW5kTWVhbkFnZ3Jl
Z2F0b3JzKHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIHJlcG9ydFdpdGhUd29MZXZlbHNP
ZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgcXVl
cnlBbmRGZXRjaEFsbCgnU0VMRUNUICogRlJPTSB0ZXN0cywgdGVzdF9tZXRyaWNzIExFRlQgSk9J
TiBhZ2dyZWdhdG9ycyBPTiBtZXRyaWNfYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3JfaWQgV0hFUkUg
bWV0cmljX3Rlc3QgPSB0ZXN0X2lkJywKKyAgICAgICAgICAgICAgICAgICAgW10sIGZ1bmN0aW9u
IChyb3dzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0TmFtZVRvTWV0cmljcyA9IHt9
OworICAgICAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEocm93Wyd0ZXN0X25hbWUnXSBpbiB0ZXN0TmFtZVRv
TWV0cmljcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE5hbWVUb01ldHJpY3Nb
cm93Wyd0ZXN0X25hbWUnXV0gPSBuZXcgQXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0TmFtZVRvTWV0cmljc1tyb3dbJ3Rlc3RfbmFtZSddXS5wdXNoKFtyb3dbJ21ldHJpY19uYW1l
J10sIHJvd1snYWdncmVnYXRvcl9uYW1lJ11dKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwodGVzdE5hbWVUb01ldHJpY3NbJ0NT
UyddLCBbWydUaW1lJywgbnVsbF1dKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbCh0ZXN0TmFtZVRvTWV0cmljc1snRE9NJ10uc29ydCgpLCBbWydUaW1lJywgJ0FyaXRobWV0
aWMnXSwgWydUaW1lJywgJ0dlb21ldHJpYyddXSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dC5kZWVwRXF1YWwodGVzdE5hbWVUb01ldHJpY3NbJ0R1bW15QmVuY2htYXJrJ10sIFtbJ1RpbWUn
LCAnQXJpdGhtZXRpYyddXSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
dGVzdE5hbWVUb01ldHJpY3NbJ0R1bW15UGFnZUxvYWRpbmcnXSwgW1snVGltZScsICdBcml0aG1l
dGljJ11dKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh0ZXN0TmFtZVRv
TWV0cmljc1snTW9kaWZ5Tm9kZXMnXSwgW1snVGltZScsIG51bGxdXSk7CisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwodGVzdE5hbWVUb01ldHJpY3NbJ1RyYXZlcnNlTm9kZXMn
XSwgW1snVGltZScsIG51bGxdXSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwodGVzdE5hbWVUb01ldHJpY3NbJ2FwcGxlLmNvbSddLCBbWydUaW1lJywgbnVsbF1dKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh0ZXN0TmFtZVRvTWV0cmljc1snd2Vi
a2l0Lm9yZyddLCBbWydUaW1lJywgbnVsbF1dKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworCisgICAgZnVuY3Rpb24gZmV0Y2hUZXN0UnVuSXRlcmF0aW9uc0Zvck1ldHJp
Yyh0ZXN0TmFtZSwgbWV0cmljTmFtZSwgY2FsbGJhY2spIHsKKyAgICAgICAgIHF1ZXJ5QW5kRmV0
Y2hBbGwoJ1NFTEVDVCAqIEZST00gdGVzdHMsIHRlc3RfbWV0cmljcywgdGVzdF9jb25maWd1cmF0
aW9ucywgdGVzdF9ydW5zIFdIRVJFIG1ldHJpY190ZXN0ID0gdGVzdF9pZCBBTkQgY29uZmlnX21l
dHJpYyA9IG1ldHJpY19pZCcKKyAgICAgICAgICAgICsgJyBBTkQgcnVuX2NvbmZpZyA9IGNvbmZp
Z19pZCBBTkQgdGVzdF9uYW1lID0gJDEgQU5EIG1ldHJpY19uYW1lID0gJDInLCBbdGVzdE5hbWUs
IG1ldHJpY05hbWVdLCBmdW5jdGlvbiAocnVuUm93cykgeworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChydW5Sb3dzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgdmFyIHJ1biA9IHJ1
blJvd3NbMF07CisgICAgICAgICAgICAgICAgcXVlcnlBbmRGZXRjaEFsbCgnU0VMRUNUICogRlJP
TSBydW5faXRlcmF0aW9ucyBXSEVSRSBpdGVyYXRpb25fcnVuID0gJDEgT1JERVIgQlkgaXRlcmF0
aW9uX29yZGVyJywgW3J1blsncnVuX2lkJ11dLCBmdW5jdGlvbiAoaXRlcmF0aW9uUm93cykgewor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhydW4sIGl0ZXJhdGlvblJvd3MpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgaXQoInNob3VsZCBz
dG9yZSBydW4gdmFsdWVzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBhZGRCdWlsZGVyQW5kTWVh
bkFnZ3JlZ2F0b3JzKHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIHJlcG9ydFdpdGhUd29M
ZXZlbHNPZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAg
ICAgZmV0Y2hUZXN0UnVuSXRlcmF0aW9uc0Zvck1ldHJpYygnYXBwbGUuY29tJywgJ1RpbWUnLCBm
dW5jdGlvbiAocnVuLCBpdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBydW5J
ZCA9IHJ1blsncnVuX2lkJ107CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
aXRlcmF0aW9ucywgWworICAgICAgICAgICAgICAgICAgICAgICAge2l0ZXJhdGlvbl9ydW46IHJ1
bklkLCBpdGVyYXRpb25fb3JkZXI6IDAsIGl0ZXJhdGlvbl9ncm91cDogbnVsbCwgaXRlcmF0aW9u
X3ZhbHVlOiA1MDAsIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lOiBudWxsfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiAxLCBp
dGVyYXRpb25fZ3JvdXA6IG51bGwsIGl0ZXJhdGlvbl92YWx1ZTogNTEwLCBpdGVyYXRpb25fcmVs
YXRpdmVfdGltZTogbnVsbH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7aXRlcmF0aW9uX3J1
bjogcnVuSWQsIGl0ZXJhdGlvbl9vcmRlcjogMiwgaXRlcmF0aW9uX2dyb3VwOiBudWxsLCBpdGVy
YXRpb25fdmFsdWU6IDUyMCwgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9LAorICAgICAg
ICAgICAgICAgICAgICAgICAge2l0ZXJhdGlvbl9ydW46IHJ1bklkLCBpdGVyYXRpb25fb3JkZXI6
IDMsIGl0ZXJhdGlvbl9ncm91cDogbnVsbCwgaXRlcmF0aW9uX3ZhbHVlOiA1MzAsIGl0ZXJhdGlv
bl9yZWxhdGl2ZV90aW1lOiBudWxsfV0pOworICAgICAgICAgICAgICAgICAgICB2YXIgc3VtID0g
NTAwICsgNTEwICsgNTIwICsgNTMwOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cnVuWydydW5fbWVhbl9jYWNoZSddLCBzdW0gLyBpdGVyYXRpb25zLmxlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChydW5bJ3J1bl9zdW1fY2FjaGUnXSwgc3VtKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJ1blsncnVuX3NxdWFyZV9zdW1fY2FjaGUn
XSwgNTAwICogNTAwICsgNTEwICogNTEwICsgNTIwICogNTIwICsgNTMwICogNTMwKTsKKworICAg
ICAgICAgICAgICAgICAgICBmZXRjaFRlc3RSdW5JdGVyYXRpb25zRm9yTWV0cmljKCdDU1MnLCAn
VGltZScsIGZ1bmN0aW9uIChydW4sIGl0ZXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBydW5JZCA9IHJ1blsncnVuX2lkJ107CisgICAgICAgICAgICAgICAgICAgICAgICBh
c3NlcnQuZGVlcEVxdWFsKGl0ZXJhdGlvbnMsIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7aXRlcmF0aW9uX3J1bjogcnVuSWQsIGl0ZXJhdGlvbl9vcmRlcjogMCwgaXRlcmF0aW9uX2dy
b3VwOiAwLCBpdGVyYXRpb25fdmFsdWU6IDEwMSwgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51
bGx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwg
aXRlcmF0aW9uX29yZGVyOiAxLCBpdGVyYXRpb25fZ3JvdXA6IDAsIGl0ZXJhdGlvbl92YWx1ZTog
MTAyLCBpdGVyYXRpb25fcmVsYXRpdmVfdGltZTogbnVsbH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAge2l0ZXJhdGlvbl9ydW46IHJ1bklkLCBpdGVyYXRpb25fb3JkZXI6IDIsIGl0ZXJh
dGlvbl9ncm91cDogMCwgaXRlcmF0aW9uX3ZhbHVlOiAxMDMsIGl0ZXJhdGlvbl9yZWxhdGl2ZV90
aW1lOiBudWxsfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXRlcmF0aW9uX3J1bjog
cnVuSWQsIGl0ZXJhdGlvbl9vcmRlcjogMywgaXRlcmF0aW9uX2dyb3VwOiAwLCBpdGVyYXRpb25f
dmFsdWU6IDEwNCwgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiA0
LCBpdGVyYXRpb25fZ3JvdXA6IDAsIGl0ZXJhdGlvbl92YWx1ZTogMTA1LCBpdGVyYXRpb25fcmVs
YXRpdmVfdGltZTogbnVsbH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZXJhdGlv
bl9ydW46IHJ1bklkLCBpdGVyYXRpb25fb3JkZXI6IDUsIGl0ZXJhdGlvbl9ncm91cDogMSwgaXRl
cmF0aW9uX3ZhbHVlOiAxMDYsIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lOiBudWxsfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7aXRlcmF0aW9uX3J1bjogcnVuSWQsIGl0ZXJhdGlvbl9v
cmRlcjogNiwgaXRlcmF0aW9uX2dyb3VwOiAxLCBpdGVyYXRpb25fdmFsdWU6IDEwNywgaXRlcmF0
aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtp
dGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiA3LCBpdGVyYXRpb25fZ3JvdXA6
IDEsIGl0ZXJhdGlvbl92YWx1ZTogMTA4LCBpdGVyYXRpb25fcmVsYXRpdmVfdGltZTogbnVsbH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZXJhdGlvbl9ydW46IHJ1bklkLCBpdGVy
YXRpb25fb3JkZXI6IDgsIGl0ZXJhdGlvbl9ncm91cDogMSwgaXRlcmF0aW9uX3ZhbHVlOiAxMDks
IGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lOiBudWxsfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7aXRlcmF0aW9uX3J1bjogcnVuSWQsIGl0ZXJhdGlvbl9vcmRlcjogOSwgaXRlcmF0aW9u
X2dyb3VwOiAxLCBpdGVyYXRpb25fdmFsdWU6IDExMCwgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6
IG51bGx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5J
ZCwgaXRlcmF0aW9uX29yZGVyOiAxMCwgaXRlcmF0aW9uX2dyb3VwOiAyLCBpdGVyYXRpb25fdmFs
dWU6IDExMSwgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiAxMSwg
aXRlcmF0aW9uX2dyb3VwOiAyLCBpdGVyYXRpb25fdmFsdWU6IDExMiwgaXRlcmF0aW9uX3JlbGF0
aXZlX3RpbWU6IG51bGx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVyYXRpb25f
cnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiAxMiwgaXRlcmF0aW9uX2dyb3VwOiAyLCBpdGVy
YXRpb25fdmFsdWU6IDExMywgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29y
ZGVyOiAxMywgaXRlcmF0aW9uX2dyb3VwOiAyLCBpdGVyYXRpb25fdmFsdWU6IDExNCwgaXRlcmF0
aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtp
dGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiAxNCwgaXRlcmF0aW9uX2dyb3Vw
OiAyLCBpdGVyYXRpb25fdmFsdWU6IDExNSwgaXRlcmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VtID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzcXVhcmVTdW0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgdmFsdWUgPSAxMDE7IHZhbHVlIDw9IDExNTsgKyt2YWx1ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcXVhcmVTdW0gKz0gdmFsdWUgKiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChydW5bJ3J1bl9tZWFuX2NhY2hl
J10sIHN1bSAvIGl0ZXJhdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChydW5bJ3J1bl9zdW1fY2FjaGUnXSwgc3VtKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChydW5bJ3J1bl9zcXVhcmVfc3VtX2NhY2hlJ10sIHNxdWFyZVN1
bSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgaXQoInNob3VsZCBzdG9yZSBhZ2dyZWdhdGVkIHJ1biB2YWx1
ZXMiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFkZEJ1aWxkZXJBbmRNZWFuQWdncmVnYXRvcnMo
cmVwb3J0V2l0aFR3b0xldmVsc09mQWdncmVnYXRpb25zLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICBwb3N0SlNPTignL2FwaS9yZXBvcnQvJywgcmVwb3J0V2l0aFR3b0xldmVsc09mQWdncmVn
YXRpb25zLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICBmZXRjaFRlc3RS
dW5JdGVyYXRpb25zRm9yTWV0cmljKCdEdW1teVBhZ2VMb2FkaW5nJywgJ1RpbWUnLCBmdW5jdGlv
biAocnVuLCBpdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBydW5JZCA9IHJ1
blsncnVuX2lkJ107CisgICAgICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZFZhbHVlcyA9IFso
NTAwICsgMTAwKSAvIDIsICg1MTAgKyAxMTApIC8gMiwgKDUyMCArIDEyMCkgLyAyLCAoNTMwICsg
MTMwKSAvIDJdOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGl0ZXJhdGlv
bnMsIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRl
cmF0aW9uX29yZGVyOiAwLCBpdGVyYXRpb25fZ3JvdXA6IG51bGwsIGl0ZXJhdGlvbl92YWx1ZTog
ZXhwZWN0ZWRWYWx1ZXNbMF0sIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lOiBudWxsfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVy
OiAxLCBpdGVyYXRpb25fZ3JvdXA6IG51bGwsIGl0ZXJhdGlvbl92YWx1ZTogZXhwZWN0ZWRWYWx1
ZXNbMV0sIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lOiBudWxsfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHtpdGVyYXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiAyLCBpdGVyYXRp
b25fZ3JvdXA6IG51bGwsIGl0ZXJhdGlvbl92YWx1ZTogZXhwZWN0ZWRWYWx1ZXNbMl0sIGl0ZXJh
dGlvbl9yZWxhdGl2ZV90aW1lOiBudWxsfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVy
YXRpb25fcnVuOiBydW5JZCwgaXRlcmF0aW9uX29yZGVyOiAzLCBpdGVyYXRpb25fZ3JvdXA6IG51
bGwsIGl0ZXJhdGlvbl92YWx1ZTogZXhwZWN0ZWRWYWx1ZXNbM10sIGl0ZXJhdGlvbl9yZWxhdGl2
ZV90aW1lOiBudWxsfV0pOworICAgICAgICAgICAgICAgICAgICB2YXIgc3VtID0gZXhwZWN0ZWRW
YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIHZhbHVlKSB7IHJldHVybiBzdW0gKyB2YWx1ZTsg
fSwgMCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChydW5bJ3J1bl9tZWFuX2Nh
Y2hlJ10sIHN1bSAvIGl0ZXJhdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJ1blsncnVuX3N1bV9jYWNoZSddLCBzdW0pOworICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocnVuWydydW5fc3F1YXJlX3N1bV9jYWNoZSddLCBleHBlY3RlZFZhbHVl
cy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFs
dWU7IH0sIDApKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAg
aXQoInNob3VsZCBiZSBhYmxlIHRvIGNvbXB1dGUgdGhlIGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0
ZWQgdmFsdWVzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBhZGRCdWlsZGVyQW5kTWVhbkFnZ3Jl
Z2F0b3JzKHJlcG9ydFdpdGhUd29MZXZlbHNPZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIHJlcG9ydFdpdGhUd29MZXZlbHNP
ZkFnZ3JlZ2F0aW9ucywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgZmV0
Y2hUZXN0UnVuSXRlcmF0aW9uc0Zvck1ldHJpYygnRHVtbXlCZW5jaG1hcmsnLCAnVGltZScsIGZ1
bmN0aW9uIChydW4sIGl0ZXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGVj
dGVkSXRlcmF0aW9ucyA9IFtdOworICAgICAgICAgICAgICAgICAgICB2YXIgc3VtID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHNxdWFyZVN1bSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTU7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHZhbHVlID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRE9NTWVhbiA9
ICgoMTAgKyB2YWx1ZSkgKyAoMzAgKyB2YWx1ZSkpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBleHBlY3RlZFZhbHVlID0gKERPTU1lYW4gKyAxMDAgKyB2YWx1ZSkgLyAyOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3VtICs9IGV4cGVjdGVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzcXVhcmVTdW0gKz0gZXhwZWN0ZWRWYWx1ZSAqIGV4cGVjdGVkVmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEl0ZXJhdGlvbnMucHVzaCh7aXRlcmF0aW9u
X3J1bjogcnVuWydydW5faWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRp
b25fb3JkZXI6IGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uX2dyb3Vw
OiBNYXRoLmZsb29yKGkgLyA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRp
b25fdmFsdWU6IGV4cGVjdGVkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
cmF0aW9uX3JlbGF0aXZlX3RpbWU6IG51bGx9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGl0ZXJhdGlvbnMsIGV4cGVjdGVkSXRl
cmF0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChydW5bJ3J1bl9tZWFu
X2NhY2hlJ10sIHN1bSAvIGl0ZXJhdGlvbnMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJ1blsncnVuX3N1bV9jYWNoZSddLCBzdW0pOworICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocnVuWydydW5fc3F1YXJlX3N1bV9jYWNoZSddLCBzcXVhcmVTdW0p
OworICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICB2YXIgcmVwb3J0
V2l0aFNhbWVTdWJ0ZXN0TmFtZSA9IFt7CisgICAgICAgICJidWlsZE51bWJlciI6ICIxMjMiLAor
ICAgICAgICAiYnVpbGRUaW1lIjogIjIwMTMtMDItMjhUMTA6MTI6MDMuMzg4MzA0IiwKKyAgICAg
ICAgImJ1aWxkZXJOYW1lIjogInNvbWVCdWlsZGVyIiwKKyAgICAgICAgImJ1aWxkZXJQYXNzd29y
ZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAicGxhdGZvcm0iOiAiTW91bnRhaW4gTGlvbiIs
CisgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICJTdWl0ZTEiOiB7CisgICAgICAgICAg
ICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICAgICAidGVzdDEiOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAibWV0cmljcyI6IHsiVGltZSI6IHsgImN1cnJlbnQiOiBbMSwgMiwg
MywgNCwgNV0gfX0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
InRlc3QyIjogeworICAgICAgICAgICAgICAgICAgICAgICAgIm1ldHJpY3MiOiB7IlRpbWUiOiB7
ICJjdXJyZW50IjogWzYsIDcsIDgsIDksIDEwXSB9fQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJTdWl0ZTIiOiB7
CisgICAgICAgICAgICAgICAgInRlc3RzIjogeworICAgICAgICAgICAgICAgICAgICAidGVzdDEi
OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAibWV0cmljcyI6IHsiVGltZSI6IHsgImN1cnJl
bnQiOiBbMTEsIDEyLCAxMywgMTQsIDE1XSB9fQorICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICAidGVzdDIiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAibWV0
cmljcyI6IHsiVGltZSI6IHsgImN1cnJlbnQiOiBbMTYsIDE3LCAxOCwgMTksIDIwXSB9fQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9fV07CisKKyAgICBpdCgic2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgcmVwb3J0IHdpdGgg
c2FtZSBzdWJ0ZXN0IG5hbWUiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFkZEJ1aWxkZXJBbmRN
ZWFuQWdncmVnYXRvcnMocmVwb3J0V2l0aFNhbWVTdWJ0ZXN0TmFtZSwgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIHJlcG9ydFdpdGhTYW1lU3VidGVz
dE5hbWUsIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXNwb25zZS5zdGF0dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9uc2VUZXh0KTsKKyAgICAg
ICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQu
ZmFpbChlcnJvciwgbnVsbCwgcmVzcG9uc2UucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVz
cG9uc2VUZXh0KVsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChKU09OLnBhcnNlKHJlc3BvbnNlLnJlc3BvbnNlVGV4dClbJ2ZhaWx1cmVTdG9yZWQnXSwgZmFs
c2UpOworICAgICAgICAgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgYmUgYWJsZSB0byByZXVzZSB0aGUg
c2FtZSB0ZXN0IHJvd3MiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFkZEJ1aWxkZXJBbmRNZWFu
QWdncmVnYXRvcnMocmVwb3J0V2l0aFNhbWVTdWJ0ZXN0TmFtZSwgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcG9zdEpTT04oJy9hcGkvcmVwb3J0LycsIHJlcG9ydFdpdGhTYW1lU3VidGVzdE5h
bWUsIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXNwb25zZS5zdGF0dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgIHF1ZXJ5QW5kRmV0Y2hB
bGwoJ1NFTEVDVCAqIEZST00gdGVzdHMnLCBbXSwgZnVuY3Rpb24gKHRlc3RSb3dzKSB7CisgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHRlc3RSb3dzLmxlbmd0aCwgNik7CisgICAgICAg
ICAgICAgICAgICAgcmVwb3J0V2l0aFNhbWVTdWJ0ZXN0TmFtZS5idWlsZE51bWJlciA9ICIxMjUi
OworICAgICAgICAgICAgICAgICAgIHJlcG9ydFdpdGhTYW1lU3VidGVzdE5hbWUuYnVpbGRUaW1l
ID0gIjIwMTMtMDItMjhUMTI6MTc6MjQuMSI7CisKKyAgICAgICAgICAgICAgICAgICBwb3N0SlNP
TignL2FwaS9yZXBvcnQvJywgcmVwb3J0V2l0aFNhbWVTdWJ0ZXN0TmFtZSwgZnVuY3Rpb24gKHJl
c3BvbnNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNwb25zZS5z
dGF0dXNDb2RlLCAyMDApOworICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUFuZEZldGNoQWxs
KCdTRUxFQ1QgKiBGUk9NIHRlc3RzJywgW10sIGZ1bmN0aW9uICh0ZXN0Um93cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHRlc3RSb3dzLmxlbmd0aCwgNik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAg
dmFyIHJlcG9ydFdpdGhTYW1lU2luZ2xlVmFsdWUgPSBbeworICAgICAgICAiYnVpbGROdW1iZXIi
OiAiMTIzIiwKKyAgICAgICAgImJ1aWxkVGltZSI6ICIyMDEzLTAyLTI4VDEwOjEyOjAzLjM4ODMw
NCIsCisgICAgICAgICJidWlsZGVyTmFtZSI6ICJzb21lQnVpbGRlciIsCisgICAgICAgICJidWls
ZGVyUGFzc3dvcmQiOiAic29tZVBhc3N3b3JkIiwKKyAgICAgICAgInBsYXRmb3JtIjogIk1vdW50
YWluIExpb24iLAorICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAic3VpdGUiOiB7Cisg
ICAgICAgICAgICAgICAgIm1ldHJpY3MiOiB7IkNvbWJpbmVkIjogWyJBcml0aG1ldGljIl19LAor
ICAgICAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAgICAgICAgInRlc3QxIjog
eworICAgICAgICAgICAgICAgICAgICAgICAgIm1ldHJpY3MiOiB7IkNvbWJpbmVkIjogeyAiY3Vy
cmVudCI6IDMgfX0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
InRlc3QyIjogeworICAgICAgICAgICAgICAgICAgICAgICAgIm1ldHJpY3MiOiB7IkNvbWJpbmVk
IjogeyAiY3VycmVudCI6IDcgfX0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH19XTsKKworICAgIGl0KCJzaG91bGQgYmUg
YWJsZSB0byBhZGQgYSByZXBvcnQgd2l0aCBzaW5nbGUgdmFsdWUgcmVzdWx0cyIsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgYWRkQnVpbGRlckFuZE1lYW5BZ2dyZWdhdG9ycyhyZXBvcnRXaXRoU2Ft
ZVNpbmdsZVZhbHVlLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBwb3N0SlNPTignL2FwaS9y
ZXBvcnQvJywgcmVwb3J0V2l0aFNhbWVTaW5nbGVWYWx1ZSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlLnN0YXR1c0NvZGUsIDIwMCk7
CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShy
ZXNwb25zZS5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7
CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKGVycm9yLCBudWxsLCByZXNwb25zZS5y
ZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydzdGF0dXMnXSwgJ09LJyk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKEpTT04ucGFyc2UocmVzcG9uc2UucmVzcG9u
c2VUZXh0KVsnZmFpbHVyZVN0b3JlZCddLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgZmV0Y2hU
ZXN0UnVuSXRlcmF0aW9uc0Zvck1ldHJpYygndGVzdDEnLCAnQ29tYmluZWQnLCBmdW5jdGlvbiAo
cnVuLCBpdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChydW5b
J3J1bl9pdGVyYXRpb25fY291bnRfY2FjaGUnXSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChydW5bJ3J1bl9tZWFuX2NhY2hlJ10sIDMpOworICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocnVuWydydW5fc3VtX2NhY2hlJ10sIDMpOworICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocnVuWydydW5fc3F1YXJlX3N1bV9jYWNoZSddLCA5KTsKKyAgICAg
ICAgICAgICAgICAgICAgZmV0Y2hUZXN0UnVuSXRlcmF0aW9uc0Zvck1ldHJpYygnc3VpdGUnLCAn
Q29tYmluZWQnLCBmdW5jdGlvbiAocnVuLCBpdGVyYXRpb25zKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocnVuWydydW5faXRlcmF0aW9uX2NvdW50X2NhY2hlJ10sIDEp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJ1blsncnVuX21lYW5fY2Fj
aGUnXSwgNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocnVuWydydW5f
c3VtX2NhY2hlJ10sIDUpOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJ1
blsncnVuX3NxdWFyZV9zdW1fY2FjaGUnXSwgMjUpOworICAgICAgICAgICAgICAgICAgICAgICAg
bm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIHZhciByZXBv
cnRXaXRoU2FtZVZhbHVlUGFpcnMgPSBbeworICAgICAgICAiYnVpbGROdW1iZXIiOiAiMTIzIiwK
KyAgICAgICAgImJ1aWxkVGltZSI6ICIyMDEzLTAyLTI4VDEwOjEyOjAzLjM4ODMwNCIsCisgICAg
ICAgICJidWlsZGVyTmFtZSI6ICJzb21lQnVpbGRlciIsCisgICAgICAgICJidWlsZGVyUGFzc3dv
cmQiOiAic29tZVBhc3N3b3JkIiwKKyAgICAgICAgInBsYXRmb3JtIjogIk1vdW50YWluIExpb24i
LAorICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgInRlc3QiOiB7CisgICAgICAg
ICAgICAgICAgICAgICJtZXRyaWNzIjogeyJGcmFtZVJhdGUiOiB7ICJjdXJyZW50IjogW1tbMCwg
NF0sIFsxMDAsIDVdLCBbMjA1LCAzXV1dIH19CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIH0sCisgICAgICAgIH1dOworCisgICAgaXQoInNob3VsZCBiZSBhYmxlIHRvIGFkZCBhIHJl
cG9ydCB3aXRoIChyZWxhdGl2ZSB0aW1lLCB2YWx1ZSkgcGFpcnMiLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIGFkZEJ1aWxkZXJBbmRNZWFuQWdncmVnYXRvcnMocmVwb3J0V2l0aFNhbWVWYWx1ZVBh
aXJzLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBwb3N0SlNPTignL2FwaS9yZXBvcnQvJywg
cmVwb3J0V2l0aFNhbWVWYWx1ZVBhaXJzLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2Uuc3RhdHVzQ29kZSwgMjAwKTsKKyAgICAgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHJlc3BvbnNlLnJl
c3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmZhaWwoZXJyb3IsIG51bGwsIHJlc3BvbnNlLnJlc3BvbnNlVGV4
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChKU09O
LnBhcnNlKHJlc3BvbnNlLnJlc3BvbnNlVGV4dClbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoSlNPTi5wYXJzZShyZXNwb25zZS5yZXNwb25zZVRleHQpWydm
YWlsdXJlU3RvcmVkJ10sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmZXRjaFRlc3RSdW5JdGVy
YXRpb25zRm9yTWV0cmljKCd0ZXN0JywgJ0ZyYW1lUmF0ZScsIGZ1bmN0aW9uIChydW4sIGl0ZXJh
dGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJ1blsncnVuX2l0ZXJh
dGlvbl9jb3VudF9jYWNoZSddLCAzKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJ1blsncnVuX21lYW5fY2FjaGUnXSwgNCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChydW5bJ3J1bl9zdW1fY2FjaGUnXSwgMTIpOworICAgICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocnVuWydydW5fc3F1YXJlX3N1bV9jYWNoZSddLCAxNiArIDI1ICsgOSk7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBydW5JZCA9IHJ1blsncnVuX2lkJ107CisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaXRlcmF0aW9ucywgWworICAgICAgICAgICAgICAgICAg
ICAgICAge2l0ZXJhdGlvbl9ydW46IHJ1bklkLCBpdGVyYXRpb25fb3JkZXI6IDAsIGl0ZXJhdGlv
bl9ncm91cDogbnVsbCwgaXRlcmF0aW9uX3ZhbHVlOiA0LCBpdGVyYXRpb25fcmVsYXRpdmVfdGlt
ZTogMH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7aXRlcmF0aW9uX3J1bjogcnVuSWQsIGl0
ZXJhdGlvbl9vcmRlcjogMSwgaXRlcmF0aW9uX2dyb3VwOiBudWxsLCBpdGVyYXRpb25fdmFsdWU6
IDUsIGl0ZXJhdGlvbl9yZWxhdGl2ZV90aW1lOiAxMDB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAge2l0ZXJhdGlvbl9ydW46IHJ1bklkLCBpdGVyYXRpb25fb3JkZXI6IDIsIGl0ZXJhdGlvbl9n
cm91cDogbnVsbCwgaXRlcmF0aW9uX3ZhbHVlOiAzLCBpdGVyYXRpb25fcmVsYXRpdmVfdGltZTog
MjA1fV0pOworICAgICAgICAgICAgICAgICAgICBub3RpZnlEb25lKCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9KTsK
</data>
<flag name="review"
          id="247445"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>