<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://www.jacorb.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://www.jacorb.org/bugzilla/"
          
          maintainer="jacorb@goots.org"
>

    <bug>
          <bug_id>436</bug_id>
          
          <creation_ts>2004-01-06 21:48:55 +0000</creation_ts>
          <short_desc>struct foo generates _foo.java instead of foo.java</short_desc>
          <delta_ts>2005-11-19 22:13:53 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>JacORB</product>
          <component>IDL compiler</component>
          <version>2.0 beta3</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>610</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>2.3</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>john.seltzer</reporter>
          <assigned_to name="Gerald Brose">gerald.brose</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>929</commentid>
    <comment_count>0</comment_count>
    <who name="">john.seltzer</who>
    <bug_when>2004-01-06 21:48:55 +0000</bug_when>
    <thetext>Under certain circumstances, if I have a struct defined in my idl(e.g., struct 
foo), running the idl compiler generates a source file with an underscore 
preceding the name(e.g., _foo.java).
In order to work around this, we need to change the name of the struct.  e.g, 
just play with the name until the problem goes away.
It&apos;s not easily reproducable, since if I just cut and paste the problematic 
struct into a very simple idl file with only this struct defined, the problem 
does NOT show up.  It seems to be context sensitive.  e.g., put the same struct 
into a different idl file and the problem does NOT happen.  In our experience, 
the struct with the problem noted above is also referenced as an argument as 
an &quot;in&quot; argument in an interface method.
The idl files that had this problem all had #include of one or more other idl 
files.
*** Since our company would probably be unhappy with us sending you copies of 
several of our idl files, I can&apos;t provide a sample.  However, if you let me 
know where to add debugging in JacORB 2.0 idl compiler files, I can run the 
problematic idl files through the compiler and send you the debugging output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937</commentid>
    <comment_count>1</comment_count>
    <who name="Gerald Brose">gerald.brose</who>
    <bug_when>2004-01-08 17:25:07 +0000</bug_when>
    <thetext>Underscores are gerenally prepended by the IDL compiler to prevent identifiers
from clashing with Java keywords. If you want to debug, I suggest you edit
the method needsJavaEscape in the class src/org/jacorb/idl/lexer.java to
emit additional output when escaping occurs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938</commentid>
    <comment_count>2</comment_count>
      <attachid>57</attachid>
    <who name="">john.seltzer</who>
    <bug_when>2004-01-08 17:44:41 +0000</bug_when>
    <thetext>Created attachment 57
More explanation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939</commentid>
    <comment_count>3</comment_count>
      <attachid>58</attachid>
    <who name="">john.seltzer</who>
    <bug_when>2004-01-10 00:32:38 +0000</bug_when>
    <thetext>Created attachment 58
stack trace showing error case from debug lexer.java</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940</commentid>
    <comment_count>4</comment_count>
      <attachid>59</attachid>
    <who name="">john.seltzer</who>
    <bug_when>2004-01-10 00:34:03 +0000</bug_when>
    <thetext>Created attachment 59
debug version of lexer.java</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972</commentid>
    <comment_count>5</comment_count>
    <who name="Gerald Brose">gerald.brose</who>
    <bug_when>2004-02-02 08:57:46 +0000</bug_when>
    <thetext>The root of the problem is a clash between libraries that were
loaded from the endorsed dir and the Java_CUP parser runtime 
classes used by JacORB. After moving these classes to a different
namespace in JacORB, this clash is no longer possible. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973</commentid>
    <comment_count>6</comment_count>
    <who name="Gerald Brose">gerald.brose</who>
    <bug_when>2004-02-02 09:07:34 +0000</bug_when>
    <thetext>I am sorry, I meant to add the last comment to another bug, NOT
this one! Don&apos;t know how this happened.... :-(

Gerald.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203</commentid>
    <comment_count>7</comment_count>
    <who name="Gerald Brose">gerald.brose</who>
    <bug_when>2004-10-30 22:11:09 +0000</bug_when>
    <thetext>The root of the problem is that the lexer is overly cautious 
and complains about the suffix &quot;Operations&quot; in *any* identifier 
because this could potentially clash with generated signature 
class &quot;fooOperations&quot; for an interface &quot;foo&quot;. Complaining about
&quot;fooOperations&quot; is okay WRT the Java language mapping if there
is an interface &quot;foo&quot;.

The workaround here is to avoid the suffixes &quot;Operations&quot;, &quot;Holder&quot;,
&quot;Helper&quot; and &quot;Package&quot; which are used to in the names of mapped 
classes. The solution is to modify the lexer such that it will check
if there is an interface named &quot;foo&quot; before complaining. 

I am downgrading the severity because I believe the workarounds should
be viable in most cases. Cannot promise the fix for this maintenance
release, I am afraid.

Regards and thanks for the bug report, Gerald.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639</commentid>
    <comment_count>8</comment_count>
    <who name="Gerald Brose">gerald.brose</who>
    <bug_when>2005-11-19 22:13:53 +0000</bug_when>
    <thetext>With the latest fix for #610 this problem is solved, too.

*** This bug has been marked as a duplicate of 610 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>57</attachid>
            <date>2004-01-08 17:44:41 +0000</date>
            <delta_ts>2004-01-08 17:44:41 +0000</delta_ts>
            <desc>More explanation</desc>
            <filename>436Attachment.txt</filename>
            <type>text/plain</type>
            <size>908</size>
            <attacher>john.seltzer</attacher>
            
              <data encoding="base64">SW4gMS40LjEgdGhpcyB3YXNuJ3QgYSBwcm9ibGVtOg0KDQpzdHJ1Y3QgVG5oc0FsYXJtT3BlcmF0
aW9ucyB7DQouLi4uDQp9Ow0KDQp2b2lkIGRpc3BhdGNoVG5oc0ltcGxpY2l0QWxhcm1PcGVyYXRp
b25zKGluIFRuaHNBbGFybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyk7DQoNCkluIDIuMCBpdCBiZWNh
bWUgYSBwcm9ibGVtLiAgSSBoYWQgdG8gY2hhbmdlIGl0IHRvIA0KDQpzdHJ1Y3QgVG5oc0FsYXJt
T3BlcmF0aW9uIHsNCi4uLg0KfTsNCg0Kdm9pZCBkaXNwYXRjaFRuaHNJbXBsaWNpdEFsYXJtT3Bl
cmF0aW9ucyhpbiBUbmhzQWxhcm1PcGVyYXRpb24gb3BlcmF0aW9ucykNCg0KKioqIFdoZW4gSSB0
b29rIHRoZSBzYW1lIG9yaWdpbmFsIGlkbCBjb2RlIGFuZCBwdXQgaW50byBhIG11Y2ggc21hbGxl
cg0KaWRsIHdpdGggT05MWSBUbmhzQWxhcm1PcGVyYXRpb25zIGRlZmluZWQsIHRoZSBwcm9ibGVt
IHdlbnQgYXdheS4NCg0KQXMgZmFyIGFzIEkga25vdywgVG5oc0FsYXJtT3BlcmF0aW9ucyBpcyBu
b3QgYSBqYXZhIGtleXdvcmQuICBJIHdpbGwgaG93ZXZlcg0KcGxhY2UgdGhlIGRlYnVnZ2luZyBp
bmZvcm1hdGlvbiBpbiBsZXhlci5qYXZhIHRvIGdldCBtb3JlIGluZm8uDQoNCk1vc3QgcmVjZW50
bHksIHdlIGhhZCB0aGUgcHJvYmxlbSBhcHBlYXIgYWdhaW4gYnkgdXNpbmcgYSBzdHJ1Y3QgUE9O
UGFja2FnZS4NCkFnYWluLCB3ZSB0cmllZCBpdCB1c2luZyBpdCBpbiBhIHNtYWxsZXIgaWRsLCBh
bmQgdGhlIHByb2JsZW0gd2VudCBhd2F5Lg0KU28sICJQYWNrYWdlIiBpcyB3aXRoaW4gIlBPTlBh
Y2thZ2UiLCBidXQgcHJvYmxlbSB3ZW50IGF3YXkgaW4gYSBzbWFsbGVyIGlkbC4NCg0KVGhhbmtz
IGZvciB5b3VyIGhlbHAuICBJJ2xsIGhlbHAgZGVidWcgaXQgd2l0aCBsZXhlci5qYXZhDQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>58</attachid>
            <date>2004-01-10 00:32:38 +0000</date>
            <delta_ts>2004-01-10 00:32:38 +0000</delta_ts>
            <desc>stack trace showing error case from debug lexer.java</desc>
            <filename>436Attachment2.txt</filename>
            <type>text/plain</type>
            <size>1897</size>
            <attacher>john.seltzer</attacher>
            
              <data encoding="base64">SW4gZmFjdCwgSSB3YXMgYWJsZSB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0gd2l0aCBhIHNpbXBs
ZSB0ZXN0IGlkbCBmaWxlLg0KSGVyZSBpcyB0aGUgaWRsIGZvby5pZGw6DQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCm1vZHVsZSBmb28gew0KICBzdHJ1Y3QgVG5oc0FsYXJtT3BlcmF0aW9ucyB7DQog
ICAgbG9uZyBqdW5rOw0KICB9Ow0KfTsNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpUaGlzIEF0
dGFjaG1lbnQgc2hvd3MgYSBzdGFja1RyYWNrIHRoYXQgSSBkdW1wZWQgaW4gYSBtb2RpZmllZCB2
ZXJzaW9uIG9mDQpsZXhlci5qYXZhIC0gd2l0aCBkZWJ1ZyBvdXRwdXQgaW4gc3RyaWN0SmF2YUVz
Y2FwZUNoZWNrLg0KDQogICAgIFtqYXZhXSBzdHJpY3RKYXZhRXNjYXBlQ2hlY2sgZm91bmQgU3Ry
aW5nIFRuaHNBbGFybU9wZXJhdGlvbnMgbmVlZHMgZXNjYXBlDQogICAgIFtqYXZhXSBEdW1waW5n
IHRoZSBzdGFjayB0byBzZWUgd2hvIGNhbGxzIHRoaXM6DQogICAgIFtqYXZhXSBqYXZhLmxhbmcu
TnVsbFBvaW50ZXJFeGNlcHRpb24NCiAgICAgW2phdmFdIAlhdCBvcmcuamFjb3JiLmlkbC5sZXhl
ci5zdHJpY3RKYXZhRXNjYXBlQ2hlY2soVW5rbm93biBTb3VyY2UpDQogICAgIFtqYXZhXSAJYXQg
b3JnLmphY29yYi5pZGwuSWRsU3ltYm9sLmVzY2FwZU5hbWUoVW5rbm93biBTb3VyY2UpDQogICAg
IFtqYXZhXSAJYXQgb3JnLmphY29yYi5pZGwuU3RydWN0VHlwZS5wYXJzZShVbmtub3duIFNvdXJj
ZSkNCiAgICAgW2phdmFdIAlhdCBvcmcuamFjb3JiLmlkbC5UeXBlRGVjbGFyYXRpb24ucGFyc2Uo
VW5rbm93biBTb3VyY2UpDQogICAgIFtqYXZhXSAJYXQgb3JnLmphY29yYi5pZGwuRGVmaW5pdGlv
bi5wYXJzZShVbmtub3duIFNvdXJjZSkNCiAgICAgW2phdmFdIAlhdCBvcmcuamFjb3JiLmlkbC5T
eW1ib2xMaXN0LnBhcnNlKFVua25vd24gU291cmNlKQ0KICAgICBbamF2YV0gCWF0IG9yZy5qYWNv
cmIuaWRsLk1vZHVsZS5wYXJzZShVbmtub3duIFNvdXJjZSkNCiAgICAgW2phdmFdIAlhdCBvcmcu
amFjb3JiLmlkbC5EZWZpbml0aW9uLnBhcnNlKFVua25vd24gU291cmNlKQ0KICAgICBbamF2YV0g
CWF0IG9yZy5qYWNvcmIuaWRsLlNwZWMucGFyc2UoVW5rbm93biBTb3VyY2UpDQogICAgIFtqYXZh
XSAJYXQgb3JnLmphY29yYi5pZGwuQ1VQJGFjdGlvbnMuQ1VQJGRvX2FjdGlvbihVbmtub3duIFNv
dXJjZSkNCiAgICAgW2phdmFdIAlhdCBvcmcuamFjb3JiLmlkbC5wYXJzZXIuZG9fYWN0aW9uKFVu
a25vd24gU291cmNlKQ0KICAgICBbamF2YV0gCWF0IGphdmFfY3VwLnJ1bnRpbWUubHJfcGFyc2Vy
LnBhcnNlKFVua25vd24gU291cmNlKQ0KICAgICBbamF2YV0gCWF0IG9yZy5qYWNvcmIuaWRsLnBh
cnNlci5jb21waWxlKFVua25vd24gU291cmNlKQ0KICAgICBbamF2YV0gCWF0IG9yZy5qYWNvcmIu
aWRsLnBhcnNlci5jb21waWxlQW5kSGFuZGxlKFVua25vd24gU291cmNlKQ0KICAgICBbamF2YV0g
CWF0IG9yZy5qYWNvcmIuaWRsLnBhcnNlci5tYWluKFVua25vd24gU291cmNlKQ0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tDQoqKiogU28sIHRoZSBxdWVzdGlvbiBpcywgd2h5IGlzIGl0IGRvaW5nIHRo
aXMgZm9yIGEgU1RSVUNUVVJFIHdob3NlIG5hbWUNCkNPTlRBSU5TIG9uZSBvZiB0aGUgNiByZXN0
cmljdGVkIGtleXdvcmRzLCBidXQgaXMgbm90IGVxdWFsIHRvDQpvbmUgb2YgdGhlIDYgcmVzdHJp
Y3RlZCBrZXl3b3Jkcz8NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>59</attachid>
            <date>2004-01-10 00:34:03 +0000</date>
            <delta_ts>2004-01-10 00:34:03 +0000</delta_ts>
            <desc>debug version of lexer.java</desc>
            <filename>lexer.java</filename>
            <type>text/plain</type>
            <size>74586</size>
            <attacher>john.seltzer</attacher>
            
              <data encoding="base64">LyoKICogICAgICAgIEphY09SQiAtIGEgZnJlZSBKYXZhIE9SQgogKgogKiAgIENvcHlyaWdodCAo
QykgMTk5Ny0yMDAzICBHZXJhbGQgQnJvc2UuCiAqCiAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAqICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CiAqICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgogKgogKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICog
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICog
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwogKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUKICogICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFz
cyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCgpwYWNrYWdlIG9yZy5qYWNvcmIu
aWRsOwoKaW1wb3J0IGphdmFfY3VwLnJ1bnRpbWUuKjsKCmltcG9ydCBqYXZhLnV0aWwuKjsKCi8q
KgogKiAgVGhpcyAgY2xhc3MgaW1wbGVtZW50cyAgYSAgc2Nhbm5lciAgKGFrYSBsZXhpY2FsICBh
bmFseXplciBvcgogKiAgbGV4ZXIpIGZvciAgSURMLiBUaGUgc2Nhbm5lciByZWFkcyBjaGFyYWN0
ZXJzICBmcm9tIGEgZ2xvYmFsIGlucHV0CiAqICBzdHJlYW0gIGFuZCByZXR1cm5zIGludGVnZXJz
IGNvcnJlc3BvbmRpbmcgdG8gIHRoZSB0ZXJtaW5hbCBudW1iZXIKICogIG9mIHRoZSBuZXh0IHRv
a2VuLiAgT25jZSB0aGUgZW5kIG9mIGlucHV0IGlzIHJlYWNoZWQgdGhlIEVPRiB0b2tlbgogKiAg
aXMgcmV0dXJuZWQgb24gZXZlcnkgIHN1YnNlcXVlbnQgY2FsbC48cD4KICoKICogIEFsbCBzeW1i
b2wgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHN5bS5qYXZhIHdoaWNoIGlzIGdlbmVyYXRlZCBi
eQogKiAgSmF2YUN1cCBmcm9tIHBhcnNlci5jdXAuPHA+CiAqCiAqICBJbiAgYWRkaXRpb24gdG8g
dGhlIHNjYW5uZXIgIHByb3BlciAoY2FsbGVkIGZpcnN0ICB2aWEgaW5pdCgpIHRoZW4KICogIHdp
dGggIG5leHRfdG9rZW4oKSB0byBnZXQgIGVhY2ggdG9rZW4pIHRoaXMgY2xhc3MgIHByb3ZpZGVz
IHNpbXBsZQogKiAgZXJyb3IgIGFuZCB3YXJuaW5nICByb3V0aW5lcyAgYW5kIGtlZXBzICBhICBj
b3VudCAgb2YgZXJyb3JzICBhbmQKICogIHdhcm5pbmdzIHRoYXQgIGlzICBwdWJsaWNseSBhY2Nl
c3NpYmxlLiAgSXQgIGFsc28gcHJvdmlkZXMgIGJhc2ljCiAqICBwcmVwcm9jZXNzaW5nICAgZmFj
aWx0aWVzLCAgaS5lLiAgaXQgICBkb2VzICBoYW5kbGUgIHByZXByb2Nlc3NvcgogKiAgZGlyZWN0
aXZlcyAgc3VjaCBhcyAjZGVmaW5lLCAgI3VuZGVmLCAjaW5jbHVkZSwgZXRjLiAgIGFsdGhvdWdo
IGl0CiAqICBkb2VzIG5vdCBwcm92aWRlIGZ1bGwgQysrIHByZXByb2Nlc3NpbmcKICoKICogIFRo
aXMgY2xhc3MgaXMgInN0YXRpYyIgKGkuZS4sIGl0IGhhcyBvbmx5IHN0YXRpYyBtZW1iZXJzIGFu
ZCBtZXRob2RzKS4KICoKICogQHZlcnNpb24gJElkOiBsZXhlci5qYXZhLHYgMS40MyAyMDAzLzEw
LzMwIDA4OjQ5OjQxIGJyb3NlIEV4cCAkCiAqIEBhdXRob3IgR2VyYWxkIEJyb3NlCiAqCiAqLwoK
cHVibGljIGNsYXNzIGxleGVyCnsKICAgIHByaXZhdGUgc3RhdGljIG9yZy5hcGFjaGUubG9nLkxv
Z2dlciBsb2dnZXIgPSBwYXJzZXIuZ2V0TG9nZ2VyKCk7CgogICAgLyoqIEZpcnN0IGFuZCBzZWNv
bmQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZC4gKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgaW50IG5l
eHRfY2hhcjsKICAgIHByb3RlY3RlZCBzdGF0aWMgaW50IG5leHRfY2hhcjI7CgogICAgLyoqIEVP
RiBjb25zdGFudC4gKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVPRl9DSEFSID0g
LTE7CgogICAgLyoqCiAgICAgKiBUYWJsZSAgIG9mICBrZXl3b3Jkcy4gICBLZXl3b3JkcyAgYXJl
ICAgaW5pdGlhbGx5ICB0cmVhdGVkICBhcwogICAgICogaWRlbnRpZmllcnMuICBKdXN0IGJlZm9y
ZSB0aGV5ICBhcmUgcmV0dXJuZWQgd2UgbG9vayB0aGVtIHVwIGluCiAgICAgKiB0aGlzIHRhYmxl
ICB0byBzZWUgIGlmIHRoZXkgIG1hdGNoIG9uZSAgb2YgdGhlICBrZXl3b3Jkcy4gIFRoZQogICAg
ICogc3RyaW5nIG9mICB0aGUgbmFtZSAgaXMgdGhlICBrZXkgaGVyZSwgIHdoaWNoICBpbmRleGVz
IEludGVnZXIKICAgICAqIG9iamVjdHMgaG9sZGluZyB0aGUgc3ltYm9sIG51bWJlci4KICAgICAq
LwoKICAgIHByb3RlY3RlZCBzdGF0aWMgSGFzaHRhYmxlIGtleXdvcmRzID0gbmV3IEhhc2h0YWJs
ZSgpOwoKICAgIC8qKiBUYWJsZSBvZiBrZXl3b3Jkcywgc3RvcmVkIGluIGxvd2VyIGNhc2UuICBL
ZXlzIGFyZSB0aGUKICAgICAqICBsb3dlciBjYXNlIHZlcnNpb24gb2YgdGhlIGtleXdvcmRzIHVz
ZWQgYXMga2V5cyBmb3IgdGhlIGtleXdvcmRzCiAgICAgKiAgaGFzaCBhYm92ZSwgYW5kIHRoZSB2
YWx1ZXMgYXJlIHRoZSBjYXNlIHNlbnNpdGl2ZSB2ZXJzaW9ucyBvZgogICAgICogIHRoZSBrZXl3
b3Jkcy4gIFRoaXMgdGFibGUgaXMgdXNlZCBmb3IgZGV0ZWN0aW5nIGNvbGxpc2lvbnMgb2YKICAg
ICAqICBpZGVudGlmaWVycyB3aXRoIGtleXdvcmRzLgogICAgICovCiAgICBwcm90ZWN0ZWQgc3Rh
dGljIEhhc2h0YWJsZSBrZXl3b3Jkc19sb3dlcl9jYXNlID0gbmV3IEhhc2h0YWJsZSgpOwoKCiAg
ICAvKiogVGFibGUgb2YgSmF2YSByZXNlcnZlZCBuYW1lcy4KICAgICAqLwoKICAgIHByb3RlY3Rl
ZCBzdGF0aWMgSGFzaHRhYmxlIGphdmFfa2V5d29yZHMgPSBuZXcgSGFzaHRhYmxlKCk7CgogICAg
LyoqIFRhYmxlIG9mIHNpbmdsZSBjaGFyYWN0ZXIgc3ltYm9scy4gIEZvciBlYXNlIG9mIGltcGxl
bWVudGF0aW9uLCB3ZQogICAgICogIHN0b3JlIGFsbCB1bmFtYmlndW91cyBzaW5nbGUgY2hhcmFj
dGVyIHRva2VucyBpbiB0aGlzIHRhYmxlIG9mIEludGVnZXIKICAgICAqICBvYmplY3RzIGtleWVk
IGJ5IEludGVnZXIgb2JqZWN0cyB3aXRoIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlCiAgICAg
KiAgYXBwcm9wcmlhdGUgY2hhciAoY3VycmVudGx5IENoYXJhY3RlciBvYmplY3RzIGhhdmUgYSBi
dWcgd2hpY2ggcHJlY2x1ZGVzCiAgICAgKiAgdGhlaXIgdXNlIGluIHRhYmxlcykuCiAgICAgKi8K
ICAgIHByb3RlY3RlZCBzdGF0aWMgSGFzaHRhYmxlIGNoYXJfc3ltYm9scyA9IG5ldyBIYXNodGFi
bGUoIDI1ICk7CgoKICAgIC8qKiBEZWZpbmVkIHN5bWJvbHMgIChwcmVwcm9jZXNzb3IpICovCgog
ICAgcHJvdGVjdGVkIHN0YXRpYyBIYXNodGFibGUgZGVmaW5lcyA9IG5ldyBIYXNodGFibGUoKTsK
ICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBjb25kaXRpb25hbENvbXBpbGF0aW9uID0gdHJ1
ZTsKCiAgICAvKiogbmVzdGVkICNpZmRlZnMgYXJlIHB1c2hlZCBvbiB0aGlzIHN0YWNrIGJ5IHRo
ZSAicHJlcHJvY2Vzc29yIiAqLwogICAgcHJpdmF0ZSBzdGF0aWMgamF2YS51dGlsLlN0YWNrIGlm
U3RhY2sgPSBuZXcgU3RhY2soKTsKCiAgICBwcml2YXRlIHN0YXRpYyBqYXZhLnV0aWwuU3RhY2sg
dG9rZW5TdGFjayA9IG5ldyBTdGFjaygpOwoKICAgIC8qKiBDdXJyZW50IGxpbmUgbnVtYmVyIGZv
ciB1c2UgaW4gZXJyb3IgbWVzc2FnZXMuICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGludCBjdXJy
ZW50X2xpbmUgPSAxOwoKICAgIC8qKiBDdXJyZW50IGxpbmUgIGZvciB1c2UgaW4gZXJyb3IgbWVz
c2FnZXMuICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZ0J1ZmZlciBsaW5lID0gbmV3IFN0
cmluZ0J1ZmZlcigpOwoKICAgIC8qKiBDaGFyYWN0ZXIgcG9zaXRpb24gaW4gY3VycmVudCBsaW5l
LiAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBpbnQgY3VycmVudF9wb3NpdGlvbiA9IDE7CgogICAg
LyoqIEhhdmUgd2UgYWxyZWFkeSByZWFkIGEgJyInID8gICovCiAgICBwcm90ZWN0ZWQgc3RhdGlj
IGJvb2xlYW4gaW5fc3RyaW5nID0gZmFsc2U7CgogICAgLyoqIEFyZSB3ZSBwcm9jZXNzaW5nIGEg
d2lkZSBjaGFyIG9yIHN0cmluZyA/ICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHdp
ZGUgPSBmYWxzZTsKCiAgICAvKiogQ291bnQgb2YgdG90YWwgZXJyb3JzIGRldGVjdGVkIHNvIGZh
ci4gKi8KICAgIHN0YXRpYyBpbnQgZXJyb3JfY291bnQgPSAwOwoKICAgIC8qKiBDb3VudCBvZiB3
YXJuaW5ncyBpc3N1ZWQgc28gZmFyICovCiAgICBwdWJsaWMgc3RhdGljIGludCB3YXJuaW5nX2Nv
dW50ID0gMDsKCiAgICAvKiogY3VycmVudGx5IGFjdGl2ZSBwcmFnbWEgcHJlZml4ICovCiAgICBw
dWJsaWMgc3RhdGljIFN0cmluZyBjdXJyZW50UHJhZ21hUHJlZml4ID0gIiI7CgogICAgLyoqIGN1
cnJlbnQgZmlsZSBuYW1lICovCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjdXJyZW50RmlsZSA9
ICIiOwoKICAgIC8qKiByZXNldCB0aGUgc2Nhbm5lciBzdGF0ZSAqLwoKICAgIHB1YmxpYyBzdGF0
aWMgdm9pZCByZXNldCgpCiAgICB7CiAgICAgICAgY3VycmVudF9wb3NpdGlvbiA9IDE7CiAgICAg
ICAgZXJyb3JfY291bnQgPSAwOwogICAgICAgIHdhcm5pbmdfY291bnQgPSAwOwogICAgICAgIGN1
cnJlbnRQcmFnbWFQcmVmaXggPSAiIjsKICAgICAgICBsaW5lID0gbmV3IFN0cmluZ0J1ZmZlcigp
OwogICAgICAgIGlmU3RhY2sucmVtb3ZlQWxsRWxlbWVudHMoKTsKICAgICAgICB0b2tlblN0YWNr
LnJlbW92ZUFsbEVsZW1lbnRzKCk7CiAgICAgICAgZGVmaW5lcy5jbGVhcigpOwogICAgfQoKICAg
IC8qKgogICAgICogSW5pdGlhbGl6ZSB0aGUgc2Nhbm5lci4gIFRoaXMgc2V0cyB1cCB0aGUga2V5
d29yZHMgYW5kIGNoYXJfc3ltYm9scwogICAgICogdGFibGVzIGFuZCByZWFkcyB0aGUgZmlyc3Qg
dHdvIGNoYXJhY3RlcnMgb2YgbG9va2FoZWFkLgogICAgICoKICAgICAqICJPYmplY3QiIGlzIGxp
c3RlZCBhcyByZXNlcnZlZCBpbiB0aGUgT01HIHNwZWMuCiAgICAgKiAiaW50IiBpcyBub3QsIGJ1
dCBJIHJlc2VydmVkIGl0IHRvIGJhciBpdHMgdXNhZ2UgYXMgYSBsZWdhbCBpbnRlZ2VyCiAgICAg
KiB0eXBlLgogICAgICovCgogICAgcHVibGljIHN0YXRpYyB2b2lkIGluaXQoKQogICAgICAgIHRo
cm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCiAgICB7CiAgICAgICAgLyogc2V0IHVwIHN0YW5kYXJk
IHN5bWJvbHMgKi8KICAgICAgICBkZWZpbmVzLnB1dCggIkpBQ09SQl9JRExfMV80IiwgIiIgKTsK
CiAgICAgICAgLyogc2V0IHVwIHRoZSBrZXl3b3JkIHRhYmxlICovCgogICAgICAgIGtleXdvcmRz
LnB1dCggImFic3RyYWN0IiwgbmV3IEludGVnZXIoIHN5bS5BQlNUUkFDVCApICk7CiAgICAgICAg
a2V5d29yZHMucHV0KCAiYW55IiwgbmV3IEludGVnZXIoIHN5bS5BTlkgKSApOwogICAgICAgIGtl
eXdvcmRzLnB1dCggImF0dHJpYnV0ZSIsIG5ldyBJbnRlZ2VyKCBzeW0uQVRUUklCVVRFICkgKTsK
ICAgICAgICBrZXl3b3Jkcy5wdXQoICJib29sZWFuIiwgbmV3IEludGVnZXIoIHN5bS5CT09MRUFO
ICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJjYXNlIiwgbmV3IEludGVnZXIoIHN5bS5DQVNF
ICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJjaGFyIiwgbmV3IEludGVnZXIoIHN5bS5DSEFS
ICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJjb25zdCIsIG5ldyBJbnRlZ2VyKCBzeW0uQ09O
U1QgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggImNvbnRleHQiLCBuZXcgSW50ZWdlciggc3lt
LkNPTlRFWFQgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggImN1c3RvbSIsIG5ldyBJbnRlZ2Vy
KCBzeW0uQ1VTVE9NICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJkZWZhdWx0IiwgbmV3IElu
dGVnZXIoIHN5bS5ERUZBVUxUICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJkb3VibGUiLCBu
ZXcgSW50ZWdlciggc3ltLkRPVUJMRSApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAiZW51bSIs
IG5ldyBJbnRlZ2VyKCBzeW0uRU5VTSApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAiZXhjZXB0
aW9uIiwgbmV3IEludGVnZXIoIHN5bS5FWENFUFRJT04gKSApOwogICAgICAgIGtleXdvcmRzLnB1
dCggImZhY3RvcnkiLCBuZXcgSW50ZWdlciggc3ltLkZBQ1RPUlkgKSApOwogICAgICAgIGtleXdv
cmRzLnB1dCggIkZBTFNFIiwgbmV3IEludGVnZXIoIHN5bS5GQUxTRSApICk7CiAgICAgICAga2V5
d29yZHMucHV0KCAiZml4ZWQiLCBuZXcgSW50ZWdlciggc3ltLkZJWEVEICkgKTsKICAgICAgICBr
ZXl3b3Jkcy5wdXQoICJmbG9hdCIsIG5ldyBJbnRlZ2VyKCBzeW0uRkxPQVQgKSApOwogICAgICAg
IGtleXdvcmRzLnB1dCggImluIiwgbmV3IEludGVnZXIoIHN5bS5JTiApICk7CiAgICAgICAga2V5
d29yZHMucHV0KCAiaW5vdXQiLCBuZXcgSW50ZWdlciggc3ltLklOT1VUICkgKTsKICAgICAgICBr
ZXl3b3Jkcy5wdXQoICJpbnRlcmZhY2UiLCBuZXcgSW50ZWdlciggc3ltLklOVEVSRkFDRSApICk7
CiAgICAgICAga2V5d29yZHMucHV0KCAibG9jYWwiLCBuZXcgSW50ZWdlciggc3ltLkxPQ0FMICkg
KTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJsb25nIiwgbmV3IEludGVnZXIoIHN5bS5MT05HICkg
KTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJtb2R1bGUiLCBuZXcgSW50ZWdlciggc3ltLk1PRFVM
RSApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAibmF0aXZlIiwgbmV3IEludGVnZXIoIHN5bS5O
QVRJVkUgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggIk9iamVjdCIsIG5ldyBJbnRlZ2VyKCBz
eW0uT0JKRUNUICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJvY3RldCIsIG5ldyBJbnRlZ2Vy
KCBzeW0uT0NURVQgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggIm9uZXdheSIsIG5ldyBJbnRl
Z2VyKCBzeW0uT05FV0FZICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJvdXQiLCBuZXcgSW50
ZWdlciggc3ltLk9VVCApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAicHJpdmF0ZSIsIG5ldyBJ
bnRlZ2VyKCBzeW0uUFJJVkFURSApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAicHVibGljIiwg
bmV3IEludGVnZXIoIHN5bS5QVUJMSUMgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggInBzZXVk
byIsIG5ldyBJbnRlZ2VyKCBzeW0uUFNFVURPICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJy
YWlzZXMiLCBuZXcgSW50ZWdlciggc3ltLlJBSVNFUyApICk7CiAgICAgICAga2V5d29yZHMucHV0
KCAicmVhZG9ubHkiLCBuZXcgSW50ZWdlciggc3ltLlJFQURPTkxZICkgKTsKICAgICAgICBrZXl3
b3Jkcy5wdXQoICJzZXF1ZW5jZSIsIG5ldyBJbnRlZ2VyKCBzeW0uU0VRVUVOQ0UgKSApOwogICAg
ICAgIGtleXdvcmRzLnB1dCggInNob3J0IiwgbmV3IEludGVnZXIoIHN5bS5TSE9SVCApICk7CiAg
ICAgICAga2V5d29yZHMucHV0KCAic3RyaW5nIiwgbmV3IEludGVnZXIoIHN5bS5TVFJJTkcgKSAp
OwogICAgICAgIGtleXdvcmRzLnB1dCggInN0cnVjdCIsIG5ldyBJbnRlZ2VyKCBzeW0uU1RSVUNU
ICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJzdXBwb3J0cyIsIG5ldyBJbnRlZ2VyKCBzeW0u
U1VQUE9SVFMgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggInN3aXRjaCIsIG5ldyBJbnRlZ2Vy
KCBzeW0uU1dJVENIICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJUUlVFIiwgbmV3IEludGVn
ZXIoIHN5bS5UUlVFICkgKTsKICAgICAgICBrZXl3b3Jkcy5wdXQoICJ0cnVuY2F0YWJsZSIsIG5l
dyBJbnRlZ2VyKCBzeW0uVFJVTkNBVEFCTEUgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggInR5
cGVkZWYiLCBuZXcgSW50ZWdlciggc3ltLlRZUEVERUYgKSApOwogICAgICAgIGtleXdvcmRzLnB1
dCggInVuc2lnbmVkIiwgbmV3IEludGVnZXIoIHN5bS5VTlNJR05FRCApICk7CiAgICAgICAga2V5
d29yZHMucHV0KCAidW5pb24iLCBuZXcgSW50ZWdlciggc3ltLlVOSU9OICkgKTsKICAgICAgICBr
ZXl3b3Jkcy5wdXQoICJWYWx1ZUJhc2UiLCBuZXcgSW50ZWdlciggc3ltLlZBTFVFQkFTRSApICk7
CiAgICAgICAga2V5d29yZHMucHV0KCAidmFsdWV0eXBlIiwgbmV3IEludGVnZXIoIHN5bS5WQUxV
RVRZUEUgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggInZvaWQiLCBuZXcgSW50ZWdlciggc3lt
LlZPSUQgKSApOwogICAgICAgIGtleXdvcmRzLnB1dCggIndjaGFyIiwgbmV3IEludGVnZXIoIHN5
bS5XQ0hBUiApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAid3N0cmluZyIsIG5ldyBJbnRlZ2Vy
KCBzeW0uV1NUUklORyApICk7CgogICAgICAgIGtleXdvcmRzLnB1dCggIjo6IiwgbmV3IEludGVn
ZXIoIHN5bS5EQkxDT0xPTiApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAiPDwiLCBuZXcgSW50
ZWdlciggc3ltLkxTSElGVCApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAiPj4iLCBuZXcgSW50
ZWdlciggc3ltLlJTSElGVCApICk7CiAgICAgICAga2V5d29yZHMucHV0KCAiTFwiIiwgbmV3IElu
dGVnZXIoIHN5bS5MREJMUVVPVEUgKSApOwoKICAgICAgICAvLyBzZXR1cCB0aGUgbWFwcGluZyBv
ZiBsb3dlciBjYXNlIGtleXdvcmRzIHRvIGNhc2Ugc2Vuc2l0aXZlCiAgICAgICAgLy8ga2V5d29y
ZHMKCiAgICAgICAgZm9yKCBqYXZhLnV0aWwuRW51bWVyYXRpb24gZSA9IGtleXdvcmRzLmtleXMo
KTsgZS5oYXNNb3JlRWxlbWVudHMoKTsgKQogICAgICAgIHsKICAgICAgICAgICAgU3RyaW5nIGtl
eXdvcmQgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgU3RyaW5nIGtleXdv
cmRfbG93ZXJfY2FzZSA9IGtleXdvcmQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAga2V5d29y
ZHNfbG93ZXJfY2FzZS5wdXQoIGtleXdvcmRfbG93ZXJfY2FzZSwga2V5d29yZCApOwogICAgICAg
IH0KCiAgICAgICAgLyogc2V0IHVwIHRoZSB0YWJsZSBvZiBzaW5nbGUgY2hhcmFjdGVyIHN5bWJv
bHMgKi8KICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBuZXcgSW50ZWdlciggJzsnICksIG5ldyBJ
bnRlZ2VyKCBzeW0uU0VNSSApICk7CiAgICAgICAgY2hhcl9zeW1ib2xzLnB1dCggbmV3IEludGVn
ZXIoICcsJyApLCBuZXcgSW50ZWdlciggc3ltLkNPTU1BICkgKTsKICAgICAgICBjaGFyX3N5bWJv
bHMucHV0KCBuZXcgSW50ZWdlciggJyonICksIG5ldyBJbnRlZ2VyKCBzeW0uU1RBUiApICk7CiAg
ICAgICAgY2hhcl9zeW1ib2xzLnB1dCggbmV3IEludGVnZXIoICcuJyApLCBuZXcgSW50ZWdlcigg
c3ltLkRPVCApICk7CiAgICAgICAgY2hhcl9zeW1ib2xzLnB1dCggbmV3IEludGVnZXIoICc6JyAp
LCBuZXcgSW50ZWdlciggc3ltLkNPTE9OICkgKTsKICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBu
ZXcgSW50ZWdlciggJz0nICksIG5ldyBJbnRlZ2VyKCBzeW0uRVFVQUxTICkgKTsKICAgICAgICBj
aGFyX3N5bWJvbHMucHV0KCBuZXcgSW50ZWdlciggJysnICksIG5ldyBJbnRlZ2VyKCBzeW0uUExV
UyApICk7CiAgICAgICAgY2hhcl9zeW1ib2xzLnB1dCggbmV3IEludGVnZXIoICctJyApLCBuZXcg
SW50ZWdlciggc3ltLk1JTlVTICkgKTsKICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBuZXcgSW50
ZWdlciggJ3snICksIG5ldyBJbnRlZ2VyKCBzeW0uTENCUkFDRSApICk7CiAgICAgICAgY2hhcl9z
eW1ib2xzLnB1dCggbmV3IEludGVnZXIoICd9JyApLCBuZXcgSW50ZWdlciggc3ltLlJDQlJBQ0Ug
KSApOwogICAgICAgIGNoYXJfc3ltYm9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnKCcgKSwgbmV3IElu
dGVnZXIoIHN5bS5MUEFSRU4gKSApOwogICAgICAgIGNoYXJfc3ltYm9scy5wdXQoIG5ldyBJbnRl
Z2VyKCAnKScgKSwgbmV3IEludGVnZXIoIHN5bS5SUEFSRU4gKSApOwogICAgICAgIGNoYXJfc3lt
Ym9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnWycgKSwgbmV3IEludGVnZXIoIHN5bS5MU0JSQUNFICkg
KTsKICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBuZXcgSW50ZWdlciggJ10nICksIG5ldyBJbnRl
Z2VyKCBzeW0uUlNCUkFDRSApICk7CiAgICAgICAgY2hhcl9zeW1ib2xzLnB1dCggbmV3IEludGVn
ZXIoICc8JyApLCBuZXcgSW50ZWdlciggc3ltLkxFU1NUSEFOICkgKTsKICAgICAgICBjaGFyX3N5
bWJvbHMucHV0KCBuZXcgSW50ZWdlciggJz4nICksIG5ldyBJbnRlZ2VyKCBzeW0uR1JFQVRFUlRI
QU4gKSApOwogICAgICAgIGNoYXJfc3ltYm9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnXCcnICksIG5l
dyBJbnRlZ2VyKCBzeW0uUVVPVEUgKSApOwogICAgICAgIGNoYXJfc3ltYm9scy5wdXQoIG5ldyBJ
bnRlZ2VyKCAnXCInICksIG5ldyBJbnRlZ2VyKCBzeW0uREJMUVVPVEUgKSApOwogICAgICAgIGNo
YXJfc3ltYm9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnXFwnICksIG5ldyBJbnRlZ2VyKCBzeW0uQlNM
QVNIICkgKTsKICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBuZXcgSW50ZWdlciggJ14nICksIG5l
dyBJbnRlZ2VyKCBzeW0uQ0lSQ1VNICkgKTsKICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBuZXcg
SW50ZWdlciggJyYnICksIG5ldyBJbnRlZ2VyKCBzeW0uQU1QRVJTQU5EICkgKTsKICAgICAgICBj
aGFyX3N5bWJvbHMucHV0KCBuZXcgSW50ZWdlciggJy8nICksIG5ldyBJbnRlZ2VyKCBzeW0uU0xB
U0ggKSApOwogICAgICAgIGNoYXJfc3ltYm9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnJScgKSwgbmV3
IEludGVnZXIoIHN5bS5QRVJDRU5UICkgKTsKICAgICAgICBjaGFyX3N5bWJvbHMucHV0KCBuZXcg
SW50ZWdlciggJ34nICksIG5ldyBJbnRlZ2VyKCBzeW0uVElMREUgKSApOwogICAgICAgIGNoYXJf
c3ltYm9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnfCcgKSwgbmV3IEludGVnZXIoIHN5bS5CQVIgKSAp
OwogICAgICAgIGNoYXJfc3ltYm9scy5wdXQoIG5ldyBJbnRlZ2VyKCAnICcgKSwgbmV3IEludGVn
ZXIoIHN5bS5TUEFDRSApICk7CgogICAgICAgIC8qIHNldCB1cCByZXNlcnZlZCBKYXZhIG5hbWVz
ICovCgogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAiYWJzdHJhY3QiLCAiIiApOwogICAgICAg
IGphdmFfa2V5d29yZHMucHV0KCAiYm9vbGVhbiIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jk
cy5wdXQoICJicmVhayIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJieXRlIiwg
IiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggImNhc2UiLCAiIiApOwogICAgICAgIGph
dmFfa2V5d29yZHMucHV0KCAiY2F0Y2giLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0
KCAiY2hhciIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJjbGFzcyIsICIiICk7
CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJjb25zdCIsICIiICk7CiAgICAgICAgamF2YV9r
ZXl3b3Jkcy5wdXQoICJjb250aW51ZSIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQo
ICJkZWZhdWx0IiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggImRvIiwgIiIgKTsK
ICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggImRvdWJsZSIsICIiICk7CiAgICAgICAgamF2YV9r
ZXl3b3Jkcy5wdXQoICJlbHNlIiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggImV4
dGVuZHMiLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAiZmFsc2UiLCAiIiApOwog
ICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAiZmluYWwiLCAiIiApOwogICAgICAgIGphdmFfa2V5
d29yZHMucHV0KCAiZmluYWxseSIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJm
bG9hdCIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJmb3IiLCAiIiApOwogICAg
ICAgIGphdmFfa2V5d29yZHMucHV0KCAiZ290byIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jk
cy5wdXQoICJpZiIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJpbXBsZW1lbnRz
IiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggImltcG9ydCIsICIiICk7CiAgICAg
ICAgamF2YV9rZXl3b3Jkcy5wdXQoICJpbnN0YW5jZW9mIiwgIiIgKTsKICAgICAgICBqYXZhX2tl
eXdvcmRzLnB1dCggImludCIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJpbnRl
cmZhY2UiLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAibG9uZyIsICIiICk7CiAg
ICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJuYXRpdmUiLCAiIiApOwogICAgICAgIGphdmFfa2V5
d29yZHMucHV0KCAibmV3IiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggIm51bGwi
LCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAicGFja2FnZSIsICIiICk7CiAgICAg
ICAgamF2YV9rZXl3b3Jkcy5wdXQoICJwcml2YXRlIiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdv
cmRzLnB1dCggInByb3RlY3RlZCIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJw
dWJsaWMiLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAicmV0dXJuIiwgIiIgKTsK
ICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggInNob3J0IiwgIiIgKTsKICAgICAgICBqYXZhX2tl
eXdvcmRzLnB1dCggInN0YXRpYyIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJz
dXBlciIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJzd2l0Y2giLCAiIiApOwog
ICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAic3luY2hyb25pemVkIiwgIiIgKTsKICAgICAgICBq
YXZhX2tleXdvcmRzLnB1dCggInRydWUiLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0
KCAidGhpcyIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJ0aHJvdyIsICIiICk7
CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJ0aHJvd3MiLCAiIiApOwogICAgICAgIGphdmFf
a2V5d29yZHMucHV0KCAidHJhbnNpZW50IiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1
dCggInRyeSIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJ2b2lkIiwgIiIgKTsK
ICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggInZvbGF0aWxlIiwgIiIgKTsKICAgICAgICBqYXZh
X2tleXdvcmRzLnB1dCggIndoaWxlIiwgIiIgKTsKCiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQo
ICJjbG9uZSIsICIiICk7CiAgICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJlcXVhbHMiLCAiIiAp
OwogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAiZmluYWxpemUiLCAiIiApOwogICAgICAgIGph
dmFfa2V5d29yZHMucHV0KCAiZ2V0Q2xhc3MiLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMu
cHV0KCAiaGFzaENvZGUiLCAiIiApOwogICAgICAgIGphdmFfa2V5d29yZHMucHV0KCAibm90aWZ5
IiwgIiIgKTsKICAgICAgICBqYXZhX2tleXdvcmRzLnB1dCggIm5vdGlmeUFsbCIsICIiICk7CiAg
ICAgICAgamF2YV9rZXl3b3Jkcy5wdXQoICJ0b1N0cmluZyIsICIiICk7CiAgICAgICAgamF2YV9r
ZXl3b3Jkcy5wdXQoICJ3YWl0IiwgIiIgKTsKCgoKICAgICAgICAvKiBzdGFjayBuZWVkcyBhIHRv
cG1vc3QgdmFsdWUgKi8KICAgICAgICBpZlN0YWNrLnB1c2goIG5ldyBCb29sZWFuKCB0cnVlICkg
KTsKCiAgICAgICAgLyogcmVhZCB0d28gY2hhcmFjdGVycyBvZiBsb29rYWhlYWQgKi8KCiAgICAg
ICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBuZXh0X2NoYXIgPSBHbG9iYWxJbnB1dFN0cmVh
bS5yZWFkKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCiAgICAgICAg
ewogICAgICAgICAgICBvcmcuamFjb3JiLmlkbC5wYXJzZXIuZmF0YWxfZXJyb3IoICJDYW5ub3Qg
cmVhZCBmcm9tIGZpbGUgIiArCiAgICAgICAgICAgICAgICAgICAgR2xvYmFsSW5wdXRTdHJlYW0u
Y3VycmVudEZpbGUoKS5nZXRBYnNvbHV0ZVBhdGgoKSArCiAgICAgICAgICAgICAgICAgICAgIiwg
cGxlYXNlIGNoZWNrIGZpbGUgbmFtZS4iLCBudWxsICk7CiAgICAgICAgfQoKICAgICAgICBpZigg
bmV4dF9jaGFyID09IEVPRl9DSEFSICkKICAgICAgICAgICAgbmV4dF9jaGFyMiA9IEVPRl9DSEFS
OwogICAgICAgIGVsc2UKICAgICAgICAgICAgbmV4dF9jaGFyMiA9IEdsb2JhbElucHV0U3RyZWFt
LnJlYWQoKTsKICAgIH0KCgogICAgcHVibGljIHN0YXRpYyB2b2lkIGRlZmluZSggU3RyaW5nIHN5
bWJvbCwgU3RyaW5nIHZhbHVlICkKICAgIHsKICAgICAgICBpZiggbG9nZ2VyLmlzRGVidWdFbmFi
bGVkKCkgKQogICAgICAgICAgICBsb2dnZXIuZGVidWcoICJEZWZpbmluZzogIiArIHN5bWJvbCAr
ICIgYXMgIiArIHZhbHVlICk7CiAgICAgICAgZGVmaW5lcy5wdXQoIHN5bWJvbCwgdmFsdWUgKTsK
ICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgdW5kZWZpbmUoIFN0cmluZyBzeW1ib2wgKQog
ICAgewogICAgICAgIGlmKCBsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSApCiAgICAgICAgICAgIGxv
Z2dlci5kZWJ1ZyggIlVuLWRlZmluaW5nOiAiICsgc3ltYm9sICk7CiAgICAgICAgZGVmaW5lcy5y
ZW1vdmUoIHN5bWJvbCApOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGRlZmluZWQo
IFN0cmluZyBzeW1ib2wgKQogICAgewogICAgICAgIHJldHVybiAoU3RyaW5nKWRlZmluZXMuZ2V0
KCBzeW1ib2wgKTsKICAgIH0KCiAgICAvKiogCiAgICAgKiAgIHJlY29yZCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgbGFzdCBsZXhpY2FsIHNjb3BlIHNvIHRoYXQgaXQgY2FuIGJlCiAgICAgKiAgcmVz
dG9yZWQgbGF0ZXIgCiAgICAgKi8KCiAgICBwdWJsaWMgc3RhdGljIGludCBjdXJyZW50TGluZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIGN1cnJlbnRfbGluZTsKICAgIH0KCiAgICAvKioKICAgICAq
IHJldHVybiB0aGUgY3VycmVudCByZWFkaW5nIHBvc2l0aW9uCiAgICAgKi8KCiAgICBwdWJsaWMg
c3RhdGljIFBvc2l0aW9uSW5mbyBnZXRQb3NpdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5l
dyBQb3NpdGlvbkluZm8oIGN1cnJlbnRfbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudF9wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFByYWdtYVByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZS50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxJbnB1
dFN0cmVhbS5jdXJyZW50RmlsZSgpICk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIHJl
c3RvcmVQb3NpdGlvbiggUG9zaXRpb25JbmZvIHAgKQogICAgewogICAgICAgIGN1cnJlbnRfbGlu
ZSA9IHAubGluZV9ubzsKICAgICAgICBjdXJyZW50UHJhZ21hUHJlZml4ID0gcC5wcmFnbWFfcHJl
Zml4OwogICAgICAgIGN1cnJlbnRfcG9zaXRpb24gPSAwOwogICAgfQoKICAgIC8qKgogICAgICog
QWR2YW5jZSB0aGUgc2Nhbm5lciBvbmUgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBzdHJlYW0uICBU
aGlzIG1vdmVzCiAgICAgKiBuZXh0X2NoYXIyIHRvIG5leHRfY2hhciBhbmQgdGhlbiByZWFkcyBh
IG5ldyBuZXh0X2NoYXIyLgogICAgICovCgogICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGFkdmFu
Y2UoKQogICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCiAgICB7CiAgICAgICAgaW50
IG9sZF9jaGFyOwoKICAgICAgICBvbGRfY2hhciA9IG5leHRfY2hhcjsKICAgICAgICBuZXh0X2No
YXIgPSBuZXh0X2NoYXIyOwogICAgICAgIG5leHRfY2hhcjIgPSBHbG9iYWxJbnB1dFN0cmVhbS5y
ZWFkKCk7CgogICAgICAgIGxpbmUuYXBwZW5kKCAoY2hhcilvbGRfY2hhciApOwoKICAgICAgICAv
KiBjb3VudCB0aGlzICovCgogICAgICAgIGN1cnJlbnRfcG9zaXRpb24rKzsKICAgICAgICBpZigg
b2xkX2NoYXIgPT0gJ1xuJyApCiAgICAgICAgewogICAgICAgICAgICBjdXJyZW50X2xpbmUrKzsK
ICAgICAgICAgICAgY3VycmVudF9wb3NpdGlvbiA9IDE7CiAgICAgICAgICAgIGxpbmUgPSBuZXcg
U3RyaW5nQnVmZmVyKCk7CiAgICAgICAgfQoKLy8gICAgICAgICAgaWYoIGxvZ2dlci5pc0RlYnVn
RW5hYmxlZCgpICkKLy8gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiTGV4ZXIuYWR2YW5jZSgp
IG5leHRfY2hhciBpcyAiICsgbmV4dF9jaGFyICsgIiAoIiArIChjaGFyKW5leHRfY2hhciArICIp
Iik7CiAgICB9CgoKICAgIC8qKgogICAgICogIEVtaXQgYW4gZXJyb3IgbWVzc2FnZS4gIFRoZSBt
ZXNzYWdlIHdpbGwgYmUgbWFya2VkIHdpdGggYm90aCB0aGUKICAgICAqICBjdXJyZW50IGxpbmUg
bnVtYmVyIGFuZCB0aGUgcG9zaXRpb24gaW4gdGhlIGxpbmUuICBFcnJvciBtZXNzYWdlcwogICAg
ICogIGFyZSBwcmludGVkIG9uIHN0YW5kYXJkIGVycm9yIChTeXN0ZW0uZXJyKS4KICAgICAqIEBw
YXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIHByaW50LgogICAgICogQHBhcmFtIHBfaW5mbyBh
biBvcHRpb25hbCBQb3NpdGlvbkluZm8gb2JqZWN0CiAgICAgKi8KCiAgICBwdWJsaWMgc3RhdGlj
IHZvaWQgZW1pdF9lcnJvciggU3RyaW5nIG1lc3NhZ2UgKQogICAgewogICAgICAgIFN5c3RlbS5l
cnIucHJpbnRsbiggR2xvYmFsSW5wdXRTdHJlYW0uY3VycmVudEZpbGUoKS5nZXRBYnNvbHV0ZVBh
dGgoKSArCiAgICAgICAgICAgICAgICAiLCBsaW5lOiAiICsgY3VycmVudF9saW5lICsKICAgICAg
ICAgICAgICAgICIoIiArIGN1cnJlbnRfcG9zaXRpb24gKyAiKTogIiArIG1lc3NhZ2UgKTsKCiAg
ICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiXHQiICsgbGluZS50b1N0cmluZygpICk7CiAgICAg
ICAgZXJyb3JfY291bnQrKzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgZW1pdF9lcnJv
ciggU3RyaW5nIG1lc3NhZ2UsIHN0cl90b2tlbiB0ICkKICAgIHsKICAgICAgICBpZiggdCA9PSBu
dWxsICkKICAgICAgICB7CiAgICAgICAgICAgIGVtaXRfZXJyb3IoIG1lc3NhZ2UgKTsKICAgICAg
ICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxu
KCAiRXJyb3IgaW4gIiArIHQuZmlsZU5hbWUgKyAiLCBsaW5lOiIgKyB0LmxpbmVfbm8gKwogICAg
ICAgICAgICAgICAgICAgICIoIiArIHQuY2hhcl9wb3MgKyAiKTogIiArIG1lc3NhZ2UgKTsKICAg
ICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiXHQiICsgdC5saW5lX3ZhbCApOwogICAgICAg
ICAgICBlcnJvcl9jb3VudCsrOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqIAogICAgICogIEVt
aXQgYSB3YXJuaW5nIG1lc3NhZ2UuICBUaGUgbWVzc2FnZSB3aWxsIGJlIG1hcmtlZCB3aXRoIGJv
dGggdGhlCiAgICAgKiAgY3VycmVudCBsaW5lIG51bWJlciBhbmQgdGhlIHBvc2l0aW9uIGluIHRo
ZSBsaW5lLiAgTWVzc2FnZXMgYXJlCiAgICAgKiAgcHJpbnRlZCBvbiBzdGFuZGFyZCBlcnJvciAo
U3lzdGVtLmVycikuCiAgICAgKiAgCiAgICAgKiAgQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2Ug
dG8gcHJpbnQuCiAgICAgKi8KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgZW1pdF93YXJuKCBTdHJp
bmcgbWVzc2FnZSApCiAgICB7CiAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiV2FybmluZzog
IiArIG1lc3NhZ2UgKyAiIGF0ICIgKwogICAgICAgICAgICAgICAgY3VycmVudF9saW5lICsgIigi
ICsgY3VycmVudF9wb3NpdGlvbiArCiAgICAgICAgICAgICAgICAiKTogXCIiICsgbGluZS50b1N0
cmluZygpICsgIlwiIiApOwogICAgICAgIHdhcm5pbmdfY291bnQrKzsKICAgIH0KCgogICAgcHVi
bGljIHN0YXRpYyB2b2lkIGVtaXRfd2FybiggU3RyaW5nIG1lc3NhZ2UsIHN0cl90b2tlbiB0ICkK
ICAgIHsKICAgICAgICBpZiggdCA9PSBudWxsICkKICAgICAgICB7CiAgICAgICAgICAgIGVtaXRf
d2FybiggbWVzc2FnZSApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJXYXJuaW5nIGF0ICIgKyB0LmZpbGVOYW1lICsgIiwg
bGluZToiICsgdC5saW5lX25vICsgIigiICsKICAgICAgICAgICAgICAgICAgICB0LmNoYXJfcG9z
ICsgIik6ICIgKyBtZXNzYWdlICk7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlx0
IiArIHQubGluZV92YWwgKTsKICAgICAgICAgICAgd2FybmluZ19jb3VudCsrOwogICAgICAgIH0K
ICAgIH0KCgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgYSBjaGFyYWN0ZXIgaXMgb2sgdG8g
c3RhcnQgYW4gaWQuCiAgICAgKiBAcGFyYW0gY2ggdGhlIGNoYXJhY3RlciBpbiBxdWVzdGlvbi4K
ICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlkX3N0YXJ0X2NoYXIoIGludCBj
aCApCiAgICB7CiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAoIGNoID49ICdhJyAmJiBj
aCA8PSAneicgKSB8fAogICAgICAgICAgICAgICAgKCBjaCA+PSAnQScgJiYgY2ggPD0gJ1onICkg
fHwKICAgICAgICAgICAgICAgICggY2ggPT0gJ18nICk7CiAgICB9CgoKICAgIC8qKgogICAgICog
IERldGVybWluZSBpZiBhIGNoYXJhY3RlciBpcyBvayBmb3IgdGhlIG1pZGRsZSBvZiBhbiBpZC4K
ICAgICAqIEBwYXJhbSBjaCB0aGUgY2hhcmFjdGVyIGluIHF1ZXN0aW9uLgogICAgICovCiAgICBw
cm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaWRfY2hhciggaW50IGNoICkKICAgIHsKICAgICAgICBy
ZXR1cm4gaWRfc3RhcnRfY2hhciggY2ggKSB8fCAoIGNoID09ICdfJyApIHx8ICggY2ggPj0gJzAn
ICYmIGNoIDw9ICc5JyApOwogICAgfQoKCiAgICAvKioKICAgICAqIFRyeSB0byBsb29rIHVwIGEg
c2luZ2xlIGNoYXJhY3RlciBzeW1ib2wsIHJldHVybnMgLTEgZm9yIG5vdCBmb3VuZC4KICAgICAq
IEBwYXJhbSBjaCB0aGUgY2hhcmFjdGVyIGluIHF1ZXN0aW9uLgogICAgICovCgogICAgcHJvdGVj
dGVkIHN0YXRpYyBpbnQgZmluZF9zaW5nbGVfY2hhciggaW50IGNoICkKICAgIHsKICAgICAgICBJ
bnRlZ2VyIHJlc3VsdDsKCiAgICAgICAgcmVzdWx0ID0gKEludGVnZXIpY2hhcl9zeW1ib2xzLmdl
dCggbmV3IEludGVnZXIoIChjaGFyKWNoICkgKTsKICAgICAgICBpZiggcmVzdWx0ID09IG51bGwg
KQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4g
cmVzdWx0LmludFZhbHVlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBIYW5kbGUgc3dhbGxvd2lu
ZyB1cCBhIGNvbW1lbnQuICBCb3RoIG9sZCBzdHlsZSBDIGFuZCBuZXcgc3R5bGUgQysrCiAgICAg
KiBjb21tZW50cyBhcmUgaGFuZGxlZC4KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lk
IHN3YWxsb3dfY29tbWVudCgpCiAgICAgICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9u
CiAgICB7CiAgICAgICAgLyogbmV4dF9jaGFyID09ICcvJyBhdCB0aGlzIHBvaW50ICovCgogICAg
ICAgIC8qIGlzIGl0IGEgdHJhZGl0aW9uYWwgY29tbWVudCAqLwogICAgICAgIGlmKCBuZXh0X2No
YXIyID09ICcqJyApCiAgICAgICAgewogICAgICAgICAgICAvKiBzd2FsbG93IHRoZSBvcGVuZXIg
Ki8KICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICBhZHZhbmNlKCk7CgogICAgICAg
ICAgICAvKiBzd2FsbG93IHRoZSBjb21tZW50IHVudGlsIGVuZCBvZiBjb21tZW50IG9yIEVPRiAq
LwogICAgICAgICAgICBmb3IoIDsgOyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8q
IGlmIGl0cyBFT0Ygd2UgaGF2ZSBhbiBlcnJvciAqLwogICAgICAgICAgICAgICAgaWYoIG5leHRf
Y2hhciA9PSBFT0ZfQ0hBUiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ZW1pdF9lcnJvciggIlNwZWNpZmljYXRpb24gZmlsZSBlbmRzIGluc2lkZSBhIGNvbW1lbnQiLCBu
dWxsICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIC8qIGlmIHdlIGNhbiBzZWUgdGhlIGNsb3NlciB3ZSBhcmUgZG9uZSAqLwog
ICAgICAgICAgICAgICAgaWYoIG5leHRfY2hhciA9PSAnKicgJiYgbmV4dF9jaGFyMiA9PSAnLycg
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSBzd2FsbG93IGNoYXIg
YW5kIG1vdmUgb24gKi8KICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KCiAgICAgICAgLyogaXMgaXRzIGEgbmV3IHN0eWxlIGNvbW1lbnQgKi8KICAgICAg
ICBpZiggbmV4dF9jaGFyMiA9PSAnLycgKQogICAgICAgIHsKICAgICAgICAgICAgLyogc3dhbGxv
dyB0aGUgb3BlbmVyICovCiAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgYWR2YW5j
ZSgpOwoKICAgICAgICAgICAgLyogc3dhbGxvdyB0byAnXG4nLCAnXGYnLCBvciBFT0YgKi8KICAg
ICAgICAgICAgd2hpbGUoIG5leHRfY2hhciAhPSAnXG4nICYmIG5leHRfY2hhciAhPSAnXGYnICYm
IG5leHRfY2hhciAhPSAnXHInICYmIG5leHRfY2hhciAhPSBFT0ZfQ0hBUiApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyogc2hvdWxkbid0IGdldCBoZXJlLCBidXQuLi4g
aWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhbiBlcnJvciAqLwogICAgICAgIGVtaXRfZXJyb3IoICJN
YWxmb3JtZWQgY29tbWVudCBpbiBzcGVjaWZpY2F0aW9uIC0tIGlnbm9yZWQiLCBudWxsICk7CiAg
ICAgICAgYWR2YW5jZSgpOwogICAgfQoKCiAgICAvKioKICAgICAqICBQcmVwcm9jZXNzb3IgZGly
ZWN0aXZlcyBhcmUgaGFuZGxlZCBoZXJlLgogICAgICovCgogICAgcHJvdGVjdGVkIHN0YXRpYyB2
b2lkIHByZXByb2Nlc3MoKQogICAgICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uCiAgICB7
CiAgICAgICAgZm9yKCA7IDsgKQogICAgICAgIHsKICAgICAgICAgICAgLyogaWYgaXRzIEVPRiB3
ZSBoYXZlIGFuIGVycm9yICovCiAgICAgICAgICAgIGlmKCBuZXh0X2NoYXIgPT0gRU9GX0NIQVIg
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBlbWl0X2Vycm9yKCAiU3BlY2lmaWNhdGlv
biBmaWxlIGVuZHMgaW5zaWRlIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSIsIG51bGwgKTsKICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKCBu
ZXh0X2NoYXIgIT0gJyMnICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZW1pdF9lcnJv
ciggImV4cGVjdGVkICMsIGdvdCAiICsgKGNoYXIpbmV4dF9jaGFyICsgIiBpbnN0ZWFkISIsIG51
bGwgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7ICAgICAgLy8gc2tpcCAnIycKCiAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMg
ZG9uZSB0byBhbGxvdyBmb3IgIyAgIGlmZGVmIHNsb3BwaW5lc3MKICAgICAgICAgICAgd2hpbGUo
ICggJyAnID09IG5leHRfY2hhciApIHx8ICggJ1x0JyA9PSBuZXh0X2NoYXIgKSApCiAgICAgICAg
ICAgICAgICBhZHZhbmNlKCk7CgogICAgICAgICAgICBTdHJpbmcgZGlyID0gZ2V0X3N0cmluZygp
OwoKICAgICAgICAgICAgaWYoIGRpci5lcXVhbHMoICJpbmNsdWRlIiApICkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgaWYoICFjb25kaXRpb25hbENvbXBpbGF0aW9uICkKICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAgICAgLy8gc2tp
cCAnICcKICAgICAgICAgICAgICAgIGJvb2xlYW4gdXNlSW5jbHVkZVBhdGggPSAoIG5leHRfY2hh
ciA9PSAnPCcgKTsKICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgLy8gc2tpcCBgXCInIG9yICc8
JwoKICAgICAgICAgICAgICAgIFN0cmluZyBmbmFtZSA9IGdldF9zdHJpbmcoKTsKCiAgICAgICAg
ICAgICAgICBpZiggdXNlSW5jbHVkZVBhdGggJiYgKCBuZXh0X2NoYXIgIT0gJz4nICkgKQogICAg
ICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJTeW50YXggZXJyb3IgaW4gI2luY2x1ZGUgZGly
ZWN0aXZlLCBleHBlY3RpbmcgJz4nIiApOwogICAgICAgICAgICAgICAgZWxzZSBpZiggIXVzZUlu
Y2x1ZGVQYXRoICYmICggbmV4dF9jaGFyICE9ICdcIicgKSApCiAgICAgICAgICAgICAgICAgICAg
ZW1pdF9lcnJvciggIlN5bnRheCBlcnJvciBpbiAjaW5jbHVkZSBkaXJlY3RpdmUsIGV4cGVjdGlu
ZyBcIiIgKTsKCiAgICAgICAgICAgICAgICAvKiBzd2FsbG93IHRvICdcbicsICdcZicsIG9yIEVP
RiAqLwogICAgICAgICAgICAgICAgd2hpbGUoIG5leHRfY2hhciAhPSAnXG4nICYmIG5leHRfY2hh
ciAhPSAnXGYnICYmIG5leHRfY2hhciAhPSAnXHInICYmCiAgICAgICAgICAgICAgICAgICAgICAg
IG5leHRfY2hhciAhPSBFT0ZfQ0hBUiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgR2xvYmFs
SW5wdXRTdHJlYW0uaW5jbHVkZSggZm5hbWUsIG5leHRfY2hhcjIsIHVzZUluY2x1ZGVQYXRoICk7
CiAgICAgICAgICAgICAgICBjdXJyZW50X2xpbmUgPSAwOwogICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOwogICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgLy8gICAgU3lz
dGVtLm91dC5wcmludGxuKCJyZXR1cm5pbmcgZnJvbSBpbmNsdWRlLCBuZXh0X2NoYXIgaXM6ICIg
KyAoY2hhciluZXh0X2NoYXIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgaWYoIGRpci5lcXVhbHMoICJkZWZpbmUiICkgKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBpZiggIWNvbmRpdGlvbmFsQ29tcGlsYXRpb24gKQogICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICBhZHZh
bmNlKCk7ICAgICAgLy8gc2tpcCAnICcKICAgICAgICAgICAgICAgIHN3YWxsb3dfd2hpdGVzcGFj
ZSgpOwogICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRfc3RyaW5nKCk7CiAgICAgICAg
ICAgICAgICBTdHJpbmdCdWZmZXIgdGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAg
ICAgICAgIGlmKCBuZXh0X2NoYXIgPT0gJyAnICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3
aGlsZSggbmV4dF9jaGFyICE9ICdcbicgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIGlmKCBuZXh0X2NoYXIgPT0gJ1xcJyApCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGV4dC5h
cHBlbmQoIChjaGFyKW5leHRfY2hhciApOwogICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigi
I0RlZmluZWQgc3ltYm9sICIgKyBuYW1lICsgIiBhczogIiArIHRleHQudG9TdHJpbmcoKSApOwog
ICAgICAgICAgICAgICAgZGVmaW5lKCBuYW1lLCB0ZXh0LnRvU3RyaW5nKCkgKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlIGlmKCBkaXIuZXF1YWxzKCAiZXJyb3IiICkgKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpZiggIWNvbmRpdGlvbmFsQ29tcGlsYXRpb24gKQogICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgICAgICAv
LyBza2lwICcgJwogICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRfc3RyaW5nKCk7CiAg
ICAgICAgICAgICAgICBlbWl0X2Vycm9yKCBuYW1lICk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSBpZiggZGlyLmVxdWFscyggInVuZGVmIiApICkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgaWYoICFjb25kaXRpb25hbENvbXBpbGF0aW9uICkKICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICBzd2FsbG93X3doaXRlc3BhY2UoKTsgLy8gYWR2YW5j
ZSgpOyAgICAgLy8gc2tpcCAnICcKICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZ2V0X3N0
cmluZygpOwogICAgICAgICAgICAgICAgdW5kZWZpbmUoIG5hbWUgKTsKICAgICAgICAgICAgICAg
IC8vIFN5c3RlbS5vdXQucHJpbnRsbigiI1VuZGVmaW5lZCBzeW1ib2wgIiArIG5hbWUgICk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiggZGlyLmVxdWFscyggImlmIiApIHx8IGRp
ci5lcXVhbHMoICJlbGlmIiApICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCEg
ZGlyLmVxdWFscyggImVsaWYiICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIGlmU3RhY2sucHVzaCggbmV3IEJvb2xlYW4oIGNvbmRpdGlvbmFsQ29tcGlsYXRpb24gKSAp
OwogICAgICAgICAgICAgICAgICAgIGlmKCAhY29uZGl0aW9uYWxDb21waWxhdGlvbiApCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzd2FsbG93X3doaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICAvLyB0aGUgZm9sbG93
aW5nIHNuaXBwZXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuICNpZiBkZWZpbmVkCiAgICAgICAgICAg
ICAgICAvLyBhbmQgI2lmICFkZWZpbmVkCgogICAgICAgICAgICAgICAgYm9vbGVhbiBzdHJhaWdo
dERlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYoICchJyA9PSBuZXh0X2NoYXIgKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAg
ICAgICAgICAgICBzdHJhaWdodERlZmluZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBTdHJpbmcgZGVmaW5lU3RyID0gZ2V0X3N0cmluZ19ub19wYXJlbigpOwoK
ICAgICAgICAgICAgICAgIGlmIChkZWZpbmVTdHIuZXF1YWxzICgiZGVmaW5lZCIpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN3YWxsb3dfd2hpdGVzcGFjZSgpOwoKICAg
ICAgICAgICAgICAgICAgICBib29sZWFuIGJyYWNrZXRzID0gKCAnKCcgPT0gbmV4dF9jaGFyICk7
CiAgICAgICAgICAgICAgICAgICAgaWYoIGJyYWNrZXRzICkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgLy8gc2tpcCAnKCcKICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhbGxvd193aGl0ZXNwYWNlKCk7IC8vIGFueSB3aGl0ZXNwYWNlIGFm
dGVyICggPyBza2lwIGl0CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgbmFtZSA9IGdldF9zdHJpbmdfbm9fcGFyZW4oKTsKCiAgICAgICAgICAgICAgICAg
ICAgaWYoIGJyYWNrZXRzICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHN3YWxsb3dfd2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZigg
bG9nZ2VyLmlzRGVidWdFbmFibGVkKCkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9n
Z2VyLmRlYnVnKCAibmV4dCBjaGFyOiAiICsgbmV4dF9jaGFyICk7CgogICAgICAgICAgICAgICAg
ICAgICAgICBpZiggJyknICE9IG5leHRfY2hhciApCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJFeHBlY3RlZCApIHRlcm1p
bmF0aW5nICNpZiBkZWZpbmVkIiwgbnVsbCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlm
KCBzdHJhaWdodERlZmluZWQgKQogICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbENv
bXBpbGF0aW9uID0gKCBudWxsICE9IGRlZmluZWQoIG5hbWUgKSApOwogICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxDb21waWxhdGlvbiA9
ICggbnVsbCA9PSBkZWZpbmVkKCBuYW1lICkgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGRlZmluZVN0ci5lcXVhbHMoIjAiKSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbENvbXBpbGF0aW9uID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWZpbmVTdHIuZXF1YWxzKCIx
IikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxDb21w
aWxhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZW1pdF9lcnJvciggIkV4cGVjdGVk
IFwiZGVmaW5lZFwiIGZvbGxvd2luZyAjaWY6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpciwgbnVsbCApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKCBkaXIuZXF1YWxzKCAi
aWZkZWYiICkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZlN0YWNrLnB1c2goIG5l
dyBCb29sZWFuKCBjb25kaXRpb25hbENvbXBpbGF0aW9uICkgKTsKICAgICAgICAgICAgICAgIGlm
KCAhY29uZGl0aW9uYWxDb21waWxhdGlvbiApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgc3dhbGxvd193aGl0ZXNwYWNlKCk7IC8vYWR2YW5jZSgpOyAgICAgIC8v
IHNraXAgJyAnCiAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGdldF9zdHJpbmcoKTsKICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbmFsQ29tcGlsYXRpb24gPSAoIGRlZmluZWQoIG5hbWUgKSAh
PSBudWxsICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiggZGlyLmVxdWFscygg
ImlmbmRlZiIgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmU3RhY2sucHVzaCgg
bmV3IEJvb2xlYW4oIGNvbmRpdGlvbmFsQ29tcGlsYXRpb24gKSApOwogICAgICAgICAgICAgICAg
aWYoICFjb25kaXRpb25hbENvbXBpbGF0aW9uICkKICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICBzd2FsbG93X3doaXRlc3BhY2UoKTsvL2FkdmFuY2UoKTsgICAgICAg
Ly8gc2tpcCAnICcKICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZ2V0X3N0cmluZygpOwog
ICAgICAgICAgICAgICAgY29uZGl0aW9uYWxDb21waWxhdGlvbiA9ICggZGVmaW5lZCggbmFtZSAp
ID09IG51bGwgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKCBkaXIuZXF1YWxz
KCAiZWxzZSIgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCAoIChCb29sZWFu
KWlmU3RhY2sucGVlaygpICkuYm9vbGVhblZhbHVlKCkgKQogICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvbmFsQ29tcGlsYXRpb24gPSAhY29uZGl0aW9uYWxDb21waWxhdGlvbjsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlIGlmKCBkaXIuZXF1YWxzKCAiZW5kaWYiICkgKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBib29sZWFuIGIgPSAoIChCb29sZWFuKWlmU3RhY2sucG9w
KCkgKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsQ29tcGlsYXRp
b24gPSBiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIGRpci5lcXVhbHMoICJw
cmFnbWEiICkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggIWNvbmRpdGlvbmFs
Q29tcGlsYXRpb24gKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
IHN3YWxsb3dfd2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZ2V0
X3N0cmluZygpOwogICAgICAgICAgICAgICAgaWYoIG5hbWUuZXF1YWxzKCAicHJlZml4IiApICkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFByYWdtYVByZWZpeCA9IGdldF9zdHJpbmcoKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAidmVyc2lvbiIg
KSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAvLyBz
a2lwICcgJwogICAgICAgICAgICAgICAgICAgIFN0cmluZyB2bmFtZSA9IGdldF9zdHJpbmcoKTsK
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7IC8vIHNraXAgJyAnCiAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIHZlcnNpb24gPSBnZXRfc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIGV4aXN0aW5nVmVyc2lvbiA9IChTdHJpbmcpIHBhcnNlci5jdXJyZW50U2NvcGVEYXRh
KCkudmVyc2lvbk1hcC5nZXQgKHZuYW1lKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3Rp
bmdWZXJzaW9uID09IG51bGwpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTZXQgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuY3Vy
cmVudFNjb3BlRGF0YSgpLnZlcnNpb25NYXAucHV0ICh2bmFtZSwgdmVyc2lvbik7CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciB2ZXJzaW9uIGNoYW5nZQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBleGlzdGluZ1ZlcnNpb24uZXF1YWxzICh2ZXJz
aW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW1pdF9lcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJWZXJzaW9uIHJlLWRlY2xhcmF0aW9uIHdpdGggZGlmZmVyZW50
IHZhbHVlOiAjcHJhZ21hIHZlcnNpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbmFtZSA9IChTdHJpbmcp
cGFyc2VyLmN1cnJlbnRTY29wZURhdGEoKS5pZE1hcC5nZXQgKHZuYW1lKTsKICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5hbWUgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uLmVxdWFscyAoaW5hbWUuc3Vic3RyaW5nICgxICsg
aW5hbWUubGFzdEluZGV4T2YgKCc6JykpKSA9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdF9lcnJvciAoIkRlY2xhcmluZyB2
ZXJzaW9uIHdpdGggZGlmZmVyZW50IHZlcnNpb24gdG8gYWxyZWFkeSBkZWNsYXJlZCBJRCBmb3Ig
IiArIG5hbWUsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiggbmFtZS5l
cXVhbHMoICJJRCIgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOyAvLyBza2lwICcgJwogICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbmFtZSA9IGdl
dF9zdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7IC8vIHNraXAgJyAnCiAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gZ2V0X3N0cmluZygpOwogICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBleGlzdGluZ0lEID0gKFN0cmluZykgcGFyc2VyLmN1cnJlbnRTY29wZURh
dGEoKS5pZE1hcC5nZXQgKGluYW1lKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJ
RCA9PSBudWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2V0IGlkCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5jdXJyZW50U2NvcGVEYXRh
KCkuaWRNYXAucHV0IChpbmFtZSwgaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDaGVjayBmb3IgaWQgY2hhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
IGV4aXN0aW5nSUQuZXF1YWxzIChpZCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSUQgcmUtZGVjbGFyYXRpb24g
d2l0aCBkaWZmZXJlbnQgdmFsdWU6ICNwcmFnbWEgaWQgIiArCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiggcGFyc2VyLmN1cnJlbnRT
Y29wZURhdGEoKS52ZXJzaW9uTWFwLmdldCggaW5hbWUgKSAhPSBudWxsICkKICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAoKFN0cmluZylwYXJzZXIuY3Vy
cmVudFNjb3BlRGF0YSgpLnZlcnNpb25NYXAuZ2V0KCBpbmFtZSApKS5lcXVhbHMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICggaWQuc3Vic3RyaW5nICgxICsgaWQubGFzdEluZGV4T2YgKCc6
JykpKSA9PSBmYWxzZSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVtaXRfZXJyb3IgKCJEZWNsYXJpbmcgSUQgd2l0aCBkaWZmZXJlbnQgdmVy
c2lvbiB0byBhbHJlYWR5IGRlY2xhcmVkIHZlcnNpb24gZm9yICIgKyBuYW1lLCBudWxsKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoIG5hbWUuZXF1YWxzKCAiaW5oaWJpdF9jb2Rl
X2dlbmVyYXRpb24iICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8q
IHByb3ByaWV0YXJ5IHByYWdtYSBvZiB0aGUgSmFjT1JCIElETCBjb21waWxlciAqLwogICAgICAg
ICAgICAgICAgICAgIHBhcnNlci5zZXRJbmhpYml0aW9uU3RhdGUoIHRydWUgKTsKICAgICAgICAg
ICAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCBpdAogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVt
aXRfd2FybiggIlVua25vd24gcHJhZ21hLCBpZ25vcmluZzogI3ByYWdtYSAiICsgbmFtZSwgbnVs
bCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgZW1pdF9lcnJvciggIlVucmVjb2duaXplZCBwcmVw
cm9jZXNzb3IgZGlyZWN0aXZlICIgKyBkaXIsIG51bGwgKTsKICAgICAgICAgICAgfQoKCiAgICAg
ICAgICAgIC8qIHN3YWxsb3cgdG8gJ1xuJywgJ1xmJywgb3IgRU9GICovCiAgICAgICAgICAgIHdo
aWxlKCBuZXh0X2NoYXIgIT0gJ1xuJyAmJiBuZXh0X2NoYXIgIT0gJ1xmJyAmJiBuZXh0X2NoYXIg
IT0gJ1xyJyAmJgogICAgICAgICAgICAgICAgICAgIG5leHRfY2hhciAhPSBFT0ZfQ0hBUiApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiQWR2YW5j
aW5nIGFmdGVyIGRpcmVjdGl2ZSwgbmV4dF9jaGFyIGlzOiAiICsgKGNoYXIpbmV4dF9jaGFyKTsK
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1
cm47CiAgICAgICAgfQogICAgfQoKCiAgICAvLyB0aGUgZm9sbG93aW5nIGlzIHVzZWQgZm9yIHBh
cnNpbmcgdGhlICNpZiBkZWZpbmVkKC4uLikgY29uc3RydWN0CgogICAgcHJpdmF0ZSBzdGF0aWMg
U3RyaW5nIGdldF9zdHJpbmdfbm9fcGFyZW4oKQogICAgICAgICAgICB0aHJvd3MgamF2YS5pby5J
T0V4Y2VwdGlvbgogICAgewogICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZm
ZXIoKTsKICAgICAgICBjaGFyIGMgPSAoY2hhciluZXh0X2NoYXI7CiAgICAgICAgd2hpbGUoIGMg
IT0gJyAnICYmIGMgIT0gJ1x0JyAmJiBjICE9ICdccicgJiYgYyAhPSAnXG4nICYmIGMgIT0gJ1xm
JyAmJiBjICE9IEVPRl9DSEFSCiAgICAgICAgICAgICAgICAmJiBjICE9ICdcIicgJiYgYyAhPSAn
PCcgJiYgYyAhPSAnPicgJiYgYyAhPSAnKCcgJiYgYyAhPSAnKScgKQogICAgICAgIHsKICAgICAg
ICAgICAgc2IuYXBwZW5kKCBjICk7CiAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAg
YyA9IChjaGFyKW5leHRfY2hhcjsKICAgICAgICB9CiAgICAgICAgLy8gICAgICBTeXN0ZW0ub3V0
LnByaW50bG4oImdldCBzdHJpbmcgcmV0dXJucyAiICsgc2IudG9TdHJpbmcoKSk7CiAgICAgICAg
cmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICB9CgoKICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBn
ZXRfc3RyaW5nKCkKICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KICAgIHsK
CiAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlciggIiIgKTsKCiAgICAg
ICAgaWYoIG5leHRfY2hhciA9PSAnXCInICkKICAgICAgICB7CiAgICAgICAgICAgIGFkdmFuY2Uo
KTsKICAgICAgICAgICAgd2hpbGUoIG5leHRfY2hhciAhPSAnXCInICkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgaWYoIG5leHRfY2hhciA9PSBFT0ZfQ0hBUiApCiAgICAgICAgICAgICAg
ICAgICAgZW1pdF9lcnJvciggIlVuZXhwZWN0ZWQgRU9GIGluIHN0cmluZyIgKTsKICAgICAgICAg
ICAgICAgIHNiLmFwcGVuZCggKGNoYXIpbmV4dF9jaGFyICk7CiAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgICAgd2hpbGUoIG5leHRfY2hhciAhPSAnICcgJiYgbmV4dF9jaGFyICE9ICdcdCcgJiYg
bmV4dF9jaGFyICE9ICdccicgJiYKICAgICAgICAgICAgICAgICAgICBuZXh0X2NoYXIgIT0gJ1xu
JyAmJiBuZXh0X2NoYXIgIT0gJ1xmJyAmJiBuZXh0X2NoYXIgIT0gRU9GX0NIQVIgJiYKICAgICAg
ICAgICAgICAgICAgICBuZXh0X2NoYXIgIT0gJ1wiJyAmJiBuZXh0X2NoYXIgIT0gJzwnICYmIG5l
eHRfY2hhciAhPSAnPicgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzYi5hcHBlbmQo
IChjaGFyKW5leHRfY2hhciApOwogICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgfQoKCiAgICAv
KioKICAgICAqICBQcm9jZXNzICBhbiBpZGVudGlmaWVyLgogICAgICogIDxQPgogICAgICogIElk
ZW50aWZpZXJzICBiZWdpbiB3aXRoIGEgbGV0dGVyLCB1bmRlcnNjb3JlLCAgb3IgZG9sbGFyIHNp
Z24sCiAgICAgKiAgd2hpY2ggICBpcyAgZm9sbG93ZWQgIGJ5ICB6ZXJvICBvciAgIG1vcmUgIGxl
dHRlcnMsICBudW1iZXJzLAogICAgICogIHVuZGVyc2NvcmVzIG9yIGRvbGxhciBzaWducy4gIFRo
aXMgcm91dGluZSByZXR1cm5zIGEgc3RyX3Rva2VuCiAgICAgKiAgc3VpdGFibGUgZm9yIHJldHVy
biBieSB0aGUgc2Nhbm5lciBvciBudWxsLCBpZiB0aGUgc3RyaW5nIHRoYXQKICAgICAqICB3YXMg
cmVhZCBleHBhbmRlZCB0byBhIHN5bWJvbCB0aGF0IHdhcyAjZGVmaW5lZC4gSW4gdGhpcyBjYXNl
LAogICAgICogIHRoZSBzeW1ib2wgaXMgZXhwYW5kZWQgaW4gcGxhY2UKICAgICAqLwoKICAgIHBy
b3RlY3RlZCBzdGF0aWMgdG9rZW4gZG9fc3ltYm9sKCkKICAgICAgICAgICAgdGhyb3dzIGphdmEu
aW8uSU9FeGNlcHRpb24KICAgIHsKICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0
cmluZ0J1ZmZlcigpOwogICAgICAgIFN0cmluZyByZXN1bHRfc3RyOwogICAgICAgIEludGVnZXIg
a2V5d29yZF9udW0gPSBudWxsOwogICAgICAgIGNoYXIgYnVmZmVyW10gPSBuZXcgY2hhclsgMSBd
OwoKICAgICAgICAvKiBuZXh0X2NoYXIgaG9sZHMgZmlyc3QgY2hhcmFjdGVyIG9mIGlkICovCiAg
ICAgICAgYnVmZmVyWyAwIF0gPSAoY2hhciluZXh0X2NoYXI7CiAgICAgICAgcmVzdWx0LmFwcGVu
ZCggYnVmZmVyLCAwLCAxICk7CiAgICAgICAgYWR2YW5jZSgpOwoKICAgICAgICAvKiBjb2xsZWN0
IHVwIGNoYXJhY3RlcnMgd2hpbGUgdGhleSBmaXQgaW4gaWQgKi8KICAgICAgICB3aGlsZSggaWRf
Y2hhciggbmV4dF9jaGFyICkgKQogICAgICAgIHsKICAgICAgICAgICAgYnVmZmVyWyAwIF0gPSAo
Y2hhciluZXh0X2NoYXI7CiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIGJ1ZmZlciwgMCwgMSAp
OwogICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgfQoKICAgICAgICAvKiBleHRyYWN0IGEg
c3RyaW5nICovCiAgICAgICAgcmVzdWx0X3N0ciA9IHJlc3VsdC50b1N0cmluZygpOwoKICAgICAg
ICAvKiB0cnkgdG8gbG9vayBpdCB1cCBhcyBhIGRlZmluZWQgc3ltYm9sLi4uICovCgogICAgICAg
IFN0cmluZyB0ZXh0ID0gZGVmaW5lZCggcmVzdWx0X3N0ciApOwogICAgICAgIGlmKCB0ZXh0ICE9
IG51bGwgKQogICAgICAgIHsKICAgICAgICAgICAgY2hhcltdIG5leHQgPSB7KGNoYXIpbmV4dF9j
aGFyLCAoY2hhciluZXh0X2NoYXIyfTsKICAgICAgICAgICAgR2xvYmFsSW5wdXRTdHJlYW0uaW5z
ZXJ0KCB0ZXh0ICsgKCBuZXcgU3RyaW5nKCBuZXh0ICkgKSApOwogICAgICAgICAgICBhZHZhbmNl
KCk7IC8vIHJlc3RvcmUgbG9va2FoZWFkCiAgICAgICAgICAgIGFkdmFuY2UoKTsgLy8gcmVzdG9y
ZSBsb29rYWhlYWQKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAv
LyBjaGVjayBpZiBpdCdzIGEga2V5d29yZAovLyAgICAgICAgICBpZiggbG9nZ2VyLmlzSW5mb0Vu
YWJsZWQoKSApCi8vICAgICAgICAgICAgICBsb2dnZXIuaW5mbyggIkFkdmFuY2luZyBhZnRlciBz
eW1ib2wgIiArIHJlc3VsdF9zdHIgKTsKCiAgICAgICAga2V5d29yZF9udW0gPSAoSW50ZWdlcilr
ZXl3b3Jkcy5nZXQoIHJlc3VsdF9zdHIgKTsKICAgICAgICBpZigga2V5d29yZF9udW0gIT0gbnVs
bCApCiAgICAgICAgewogICAgICAgICAgICBpZiggaXNTY29wZSggcmVzdWx0X3N0ciApICkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgcGFyc2VyLm9wZW5TY29wZSgpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHJldHVybiBuZXcgdG9rZW4oIGtleXdvcmRfbnVtLmludFZhbHVlKCkg
KTsKICAgICAgICB9CgogICAgICAgIC8vIG5vdCBhIGtleXdvcmQsIHNvIHRyZWF0IGFzIGlkZW50
aWZpZXIgYWZ0ZXIgdmVyaWZ5aW5nCiAgICAgICAgLy8gY2FzZSBzZW5zaXRpdml0eSBydWxlcyBh
bmQgcHJlZmFjaW5nIHdpdGggYW4gXwogICAgICAgIC8vIGlmIGl0IGNvbGxpZGVzIHdpdGggYSBK
YXZhIGtleXdvcmQuCgogICAgICAgIHJlc3VsdF9zdHIgPSBjaGVja0lkZW50aWZpZXIoIHJlc3Vs
dF9zdHIgKTsKICAgICAgICBpZiggbnVsbCAhPSByZXN1bHRfc3RyICkKICAgICAgICAgICAgcmV0
dXJuIG5ldyBzdHJfdG9rZW4oIHN5bS5JRCwgcmVzdWx0X3N0ciwgZ2V0UG9zaXRpb24oKSwKICAg
ICAgICAgICAgICAgICAgICBHbG9iYWxJbnB1dFN0cmVhbS5jdXJyZW50RmlsZSgpLmdldE5hbWUo
KSApOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJp
dmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Njb3BlKCBTdHJpbmcga2V5d29yZCApCiAgICB7CiAgICAg
ICAgcmV0dXJuICgga2V5d29yZC5lcXVhbHMoICJtb2R1bGUiICkgfHwKICAgICAgICAgICAgICAg
IGtleXdvcmQuZXF1YWxzKCAiaW50ZXJmYWNlIiApIHx8CiAgICAgICAgICAgICAgICBrZXl3b3Jk
LmVxdWFscyggInN0cnVjdCIgKSB8fAogICAgICAgICAgICAgICAga2V5d29yZC5lcXVhbHMoICJl
eGNlcHRpb24iICkgfHwKICAgICAgICAgICAgICAgIGtleXdvcmQuZXF1YWxzKCAidW5pb24iICkK
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBrZXl3b3JkLmVxdWFscygidmFsdWV0
eXBlIikKICAgICAgICAgICAgICAgICk7CiAgICB9CgoKICAgIC8qKgogICAgICogQ2hlY2tzIHdo
ZXRoZXIgSWRlbnRpZmllciBzdHIgaXMgbGVnYWwgYW5kIHJldHVybnMgaXQuIElmIHRoZQogICAg
ICogaWRlbnRpZmllciBpcyBlc2NhcGVkIHdpdGggYSBsZWFkaW5nIHVuZGVyc2NvcmUsIHRoYXQK
ICAgICAqIHVuZGVyc2NvcmUgaXMgcmVtb3ZlZC4gSWYgYSB0aGUgbGVnYWwgSURMIGlkZW50aWZp
ZXIgY2xhc2hlcwogICAgICogd2l0aCBhIEphdmEgcmVzZXJ2ZWQgd29yZCwgYW4gdW5kZXJzY29y
ZSBpcyBwcmVwZW5kZWQuCiAgICAgKiA8QlI+CiAgICAgKiBAcGFyYW0gc3RyIC0gdGhlIElETCBp
ZGVudGlmaWVyIDxCUj4KICAgICAqIDxCUj4KICAgICAqIFByaW50cyBhbiBlcnJvciBtc2cgaWYg
dGhlIGlkZW50aWZpZXIgY29sbGlkZXMgd2l0aCBhbiBJREwKICAgICAqIGtleXdvcmQuCiAgICAg
Ki8KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjaGVja0lkZW50aWZpZXIoIFN0cmluZyBzdHIg
KQogICAgewoKICAgICAgICBpZiggbG9nZ2VyLmlzSW5mb0VuYWJsZWQoKSApCiAgICAgICAgICAg
IGxvZ2dlci5pbmZvKCAiY2hlY2tpbmcgaWRlbnRpZmllciAiICsgc3RyICk7CgogICAgICAgIC8q
IGlmIGl0IGlzIGFuIGVzY2FwZWQgaWRlbnRpZmllciwgbG9vayBpdCB1cCBhcyBhIGtleXdvcmQs
CiAgICAgICAgICAgb3RoZXJ3aXNlIHJlbW92ZSB0aGUgdW5kZXJzY29yZS4gKi8KCiAgICAgICAg
aWYoIHN0ci5jaGFyQXQoIDAgKSA9PSAnXycgKQogICAgICAgIHsKICAgICAgICAgICAgc3RyID0g
c3RyLnN1YnN0cmluZyggMSApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgICBTdHJpbmcgY29sbGlkaW5nX2tleXdvcmQgPSBudWxsOwoKICAgICAgICAgICAgaWYg
KG9yZy5qYWNvcmIuaWRsLnBhcnNlci5zdHJpY3RfbmFtZXMpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIC8vIGNoZWNrIGZvciBuYW1lIGNsYXNoZXMgc3RyaWN0bHkgKGkuZS4gY2FzZSBp
bnNlbnNpdGl2ZSkKICAgICAgICAgICAgICAgIGNvbGxpZGluZ19rZXl3b3JkID0KICAgICAgICAg
ICAgICAgICAgICAoU3RyaW5nKWtleXdvcmRzX2xvd2VyX2Nhc2UuZ2V0KHN0ci50b0xvd2VyQ2Fz
ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIC8vIGNoZWNrIGZvciBuYW1lIGNsYXNoZXMgb25seSBsb29zZWx5IChpLmUuIGNh
c2Ugc2Vuc2l0aXZlKQogICAgICAgICAgICAgICAgY29sbGlkaW5nX2tleXdvcmQgPSAKICAgICAg
ICAgICAgICAgICAgICAoU3RyaW5nKWtleXdvcmRzLmdldChzdHIpOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICBpZiggY29sbGlkaW5nX2tleXdvcmQgIT0gbnVsbCApCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJJZGVudGlmaWVyICIgKyBzdHIgKyAiIGNvbGxp
ZGVzIHdpdGgga2V5d29yZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpZGlu
Z19rZXl3b3JkICsgIi4iICk7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAg
ICAgfQoKCiAgICAgICAgfQoKICAgICAgICAvKiBjbGFzaGVzIHdpdGggYSBKYXZhIHJlc2VydmVk
IHdvcmQ/ICovCiAgICAgICAgaWYoIG5lZWRzSmF2YUVzY2FwZSggc3RyICkgKQogICAgICAgIHsK
CiAgICAgICAgICAgIHN0ciA9ICJfIiArIHN0cjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBz
dHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBPbmx5IHRoZSBtb3N0IGdlbmVyYWwgbmFtZSBjbGFz
aGVzIHdpdGggSmF2YSBrZXl3b3JkcwogICAgICogYXJlIGNhdWdodCBoZXJlLiBJZGVudGlmaWVy
cyBuZWVkIHRvIGJlIGNoZWNrZWQgYWdhaW4KICAgICAqIGF0IGRpZmZlcmVudCBvdGhlciBwbGFj
ZXMgaW4gdGhlIGNvbXBpbGVyIQogICAgICovCgogICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBu
ZWVkc0phdmFFc2NhcGUoIFN0cmluZyBzICkKICAgIHsKICAgICAgICByZXR1cm4gKCBqYXZhX2tl
eXdvcmRzLmNvbnRhaW5zS2V5KCBzICkgKTsKICAgIH0KCiAgICAvKioKICAgICAqIGNhbGxlZCBk
dXJpbmcgdGhlIHBhcnNlIHBoYXNlIHRvIGNhdGNoIGNsYXNoZXMgd2l0aAogICAgICogSmF2YSBy
ZXNlcnZlZCB3b3Jkcy4KICAgICAqLwoKICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzdHJpY3RK
YXZhRXNjYXBlQ2hlY2soIFN0cmluZyBzICkKICAgIHsKICAgICAgLyoKICAgICAgICByZXR1cm4g
KCAoICFzLmVxdWFscyggIkhlbHBlciIgKSAmJiBzLmVuZHNXaXRoKCAiSGVscGVyIiApICkgfHwK
ICAgICAgICAgICAgICAgICggIXMuZXF1YWxzKCAiSG9sZGVyIiApICYmIHMuZW5kc1dpdGgoICJI
b2xkZXIiICkgKSB8fAogICAgICAgICAgICAgICAgKCAhcy5lcXVhbHMoICJPcGVyYXRpb25zIiAp
ICYmIHMuZW5kc1dpdGgoICJPcGVyYXRpb25zIiApICkgfHwKICAgICAgICAgICAgICAgICggIXMu
ZXF1YWxzKCAiUGFja2FnZSIgKSAmJiBzLmVuZHNXaXRoKCAiUGFja2FnZSIgKSApIHx8CiAgICAg
ICAgICAgICAgICAoICFzLmVxdWFscyggIlBPQSIgKSAmJiBzLmVuZHNXaXRoKCAiUE9BIiApICkg
fHwKICAgICAgICAgICAgICAgICggIXMuZXF1YWxzKCAiUE9BVGllIiApICYmIHMuZW5kc1dpdGgo
ICJQT0FUaWUiICkgKSApOwogICAgICAqLwogICAgICBib29sZWFuIHJlc3VsdCA9CiAgICAgICAg
KCAoICFzLmVxdWFscyggIkhlbHBlciIgKSAmJiBzLmVuZHNXaXRoKCAiSGVscGVyIiApICkgfHwK
ICAgICAgICAgICAgICAgICggIXMuZXF1YWxzKCAiSG9sZGVyIiApICYmIHMuZW5kc1dpdGgoICJI
b2xkZXIiICkgKSB8fAogICAgICAgICAgICAgICAgKCAhcy5lcXVhbHMoICJPcGVyYXRpb25zIiAp
ICYmIHMuZW5kc1dpdGgoICJPcGVyYXRpb25zIiApICkgfHwKICAgICAgICAgICAgICAgICggIXMu
ZXF1YWxzKCAiUGFja2FnZSIgKSAmJiBzLmVuZHNXaXRoKCAiUGFja2FnZSIgKSApIHx8CiAgICAg
ICAgICAgICAgICAoICFzLmVxdWFscyggIlBPQSIgKSAmJiBzLmVuZHNXaXRoKCAiUE9BIiApICkg
fHwKICAgICAgICAgICAgICAgICggIXMuZXF1YWxzKCAiUE9BVGllIiApICYmIHMuZW5kc1dpdGgo
ICJQT0FUaWUiICkgKSApOwogICAgICBpZiAocmVzdWx0ID09IHRydWUpIHsKICAgICAgICBTeXN0
ZW0ub3V0LnByaW50bG4oInN0cmljdEphdmFFc2NhcGVDaGVjayBmb3VuZCBTdHJpbmcgIitzKyIg
IisKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIGVzY2FwZSIpOwogICAgICAgIFN5
c3RlbS5vdXQucHJpbnRsbigiRHVtcGluZyB0aGUgc3RhY2sgdG8gc2VlIHdobyBjYWxscyB0aGlz
OiIpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBJbnRlZ2VyIGZvbyA9IG51bGw7CiAgICAgICAg
ICBmb28udG9TdHJpbmcoKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAg
ICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9CgogICAgICAgIC8vIFRocmVhZC5jdXJy
ZW50VGhyZWFkKCkuZHVtcFN0YWNrKCk7CgogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICB9CgogICAgcHVibGljIHN0YXRpYyBib29sZWFuIG5lZWRzSmF2YUVzY2FwZSggTW9kdWxlIG0g
KQogICAgewogICAgICAgIFN0cmluZyBzID0gbS5wYWNrX25hbWU7CiAgICAgICAgaWYoIGxvZ2dl
ci5pc0RlYnVnRW5hYmxlZCgpICkKICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCAiY2hlY2tpbmcg
bW9kdWxlIG5hbWUgIiArIHMgKTsKICAgICAgICByZXR1cm4gKCBzdHJpY3RKYXZhRXNjYXBlQ2hl
Y2soIHMgKSApOwogICAgfQoKCiAgICAvKioKICAgICAqICBSZXR1cm4gb25lIHRva2VuLiAgVGhp
cyBpcyB0aGUgbWFpbiBleHRlcm5hbCBpbnRlcmZhY2UgdG8gdGhlIHNjYW5uZXIuCiAgICAgKiAg
SXQgY29uc3VtZXMgc3VmZmljaWVudCBjaGFyYWN0ZXJzIHRvIGRldGVybWluZSB0aGUgbmV4dCBp
bnB1dCB0b2tlbgogICAgICogIGFuZCByZXR1cm5zIGl0LgogICAgICovCgogICAgcHVibGljIHN0
YXRpYyB0b2tlbiBuZXh0X3Rva2VuKCkKICAgICAgICAgICAgdGhyb3dzIGphdmEuaW8uSU9FeGNl
cHRpb24KICAgIHsKICAgICAgICBwYXJzZXIuc2V0X2luY2x1ZGVkKCBHbG9iYWxJbnB1dFN0cmVh
bS5pbmNsdWRlU3RhdGUoKSApOwogICAgICAgIHRva2VuIHJlc3VsdCA9IHJlYWxfbmV4dF90b2tl
bigpOwogICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiIyBuZXh0X3Rva2VuKCkgPT4gIiAr
IHJlc3VsdC5zeW0pOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgcHJpdmF0ZSBz
dGF0aWMgdm9pZCBzd2FsbG93X3doaXRlc3BhY2UoKQogICAgICAgICAgICB0aHJvd3MgamF2YS5p
by5JT0V4Y2VwdGlvbgogICAgewogICAgICAgIC8qIGxvb2sgZm9yIHdoaXRlIHNwYWNlICovCiAg
ICAgICAgd2hpbGUoIG5leHRfY2hhciA9PSAnICcgfHwgbmV4dF9jaGFyID09ICdcdCcgfHwgbmV4
dF9jaGFyID09ICdcbicgfHwKICAgICAgICAgICAgICAgIG5leHRfY2hhciA9PSAnXGYnIHx8IG5l
eHRfY2hhciA9PSAnXHInICkKICAgICAgICB7CiAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBp
dCBhbmQgdHJ5IHRoZSBuZXh0IGNoYXJhY3RlciAqLwogICAgICAgICAgICAvL1N5c3RlbS5vdXQu
cHJpbnRsbigiU3dhbGxvd2luZyB3aGl0ZXNwYWNlOiAiICsgbmV4dF9jaGFyICsgIChjaGFyKW5l
eHRfY2hhcik7CiAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoq
CiAgICAgKiBUaGUgYWN0dWFsIHJvdXRpbmUgdG8gcmV0dXJuIG9uZSB0b2tlbi4KICAgICAqCiAg
ICAgKiBAcmV0dXJuIHRva2VuCiAgICAgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KICAg
ICAqLwoKICAgIHByb3RlY3RlZCBzdGF0aWMgdG9rZW4gcmVhbF9uZXh0X3Rva2VuKCkKICAgICAg
ICB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgogICAgewogICAgICAgIGludCBzeW1fbnVtOwoK
ICAgICAgICAvKiBpZiB3ZSBmb3VuZCBtb3JlIHRoYW4gYSBzaW5nbGUgdG9rZW4gbGFzdCB0aW1l
LCB0aGVzZQogICAgICAgICAgIHRva2VucyB3ZXJlIHJlbWVtYmVyZWQgb24gdGhlIHRva2VuU3Rh
Y2sgLSByZXR1cm4gdGhlIGZpcnN0CiAgICAgICAgICAgb25lIGhlcmUgKi8KCiAgICAgICAgaWYo
ICF0b2tlblN0YWNrLmVtcHR5KCkgKQogICAgICAgICAgICByZXR1cm4gKHRva2VuKXRva2VuU3Rh
Y2sucG9wKCk7CgogICAgICAgIC8qIGVsc2UgKi8KCiAgICAgICAgZm9yKCA7IDsgKQogICAgICAg
IHsKICAgICAgICAgICAgLyogc2NhbiBpbnB1dCB1bnRpbCB3ZSByZXR1cm4gc29tZXRoaW5nICov
CiAgICAgICAgICAgIGlmKCAhaW5fc3RyaW5nICkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgc3dhbGxvd193aGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgLyogbG9vayBmb3IgcHJl
cHJvY2Vzc29yIGRpcmVjdGl2ZXMgKi8KICAgICAgICAgICAgICAgIGlmKCAoY2hhciluZXh0X2No
YXIgPT0gJyMnICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwcmVwcm9j
ZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgLyogbG9vayBmb3IgYSBjb21tZW50ICovCiAgICAgICAgICAgICAgICBp
ZiggbmV4dF9jaGFyID09ICcvJyAmJiAoIG5leHRfY2hhcjIgPT0gJyonIHx8IG5leHRfY2hhcjIg
PT0gJy8nICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8qIHN3YWxs
b3cgdGhlbiBjb250aW51ZSB0aGUgc2NhbiAqLwogICAgICAgICAgICAgICAgICAgIHN3YWxsb3df
Y29tbWVudCgpOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGlmKCAhY29uZGl0aW9uYWxDb21waWxhdGlvbiApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAg
ICAgIGlmKCBuZXh0X2NoYXIgPT0gRU9GX0NIQVIgKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZW1pdF9lcnJvciggIkVPRiBpbiBjb25kaXRpb25hbCBjb21w
aWxhdGlvbiEiLCBudWxsICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IC8qIGxvb2sgZm9yIENPTE9OIG9yIERCTENPTE9OICovCiAgICAgICAgICAgICAgICBpZiggbmV4
dF9jaGFyID09ICc6JyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYo
IG5leHRfY2hhcjIgPT0gJzonICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRva2VuKCBzeW0uREJMQ09MT04gKTsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IHRva2VuKCBzeW0uQ09MT04gKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLyogbGVhZGluZyBM
IGZvciB3aWRlIHN0cmluZ3MgKi8KICAgICAgICAgICAgICAgIGlmKCBuZXh0X2NoYXIgPT0gJ0wn
ICYmICggbmV4dF9jaGFyMiA9PSdcIicgfHwgbmV4dF9jaGFyMiA9PSdcJycpICkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB3aWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgaWYoIG5leHRfY2hhcjIgPT0gJ1wi
JyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGluX3N0cmluZyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgdG9rZW4oIHN5bS5MREJMUVVPVEUgKTsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gd2lkZSBjaGFyIGxpdGVyYWwgbWF5
IGZvbGxvdywgYnV0IGRldGVjdGluZyB0aGF0CiAgICAgICAgICAgICAgICAgICAgLy8gaXMgZG9u
ZSBiZWxvdy4KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvKiBsb29rIGZvciBT
aGlmdHMgICovCiAgICAgICAgICAgICAgICBpZiggbmV4dF9jaGFyID09ICc8JyApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoIG5leHRfY2hhcjIgPT0gJzwnICkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IHRva2VuKCBzeW0uTFNISUZUICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0
b2tlbiggc3ltLkxFU1NUSEFOICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgaWYoIG5leHRfY2hhciA9PSAnPicgKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIGlmKCBuZXh0X2NoYXIyID09ICc+JyApCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyB0b2tlbiggc3ltLlJTSElGVCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdG9rZW4o
IHN5bS5HUkVBVEVSVEhBTiApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KCgogICAgICAgICAgICAgICAgLyogbGVhZGluZyAwOiAqLwogICAgICAgICAgICAgICAgLyog
VHJ5IHRvIHNjYW4gb2N0YWwvaGV4YWRlY2ltYWwgbnVtYmVycywgbWlnaHQgZXZlbiBmaW5kIGEg
ZmxvYXQgKi8KICAgICAgICAgICAgICAgIGlmKCBuZXh0X2NoYXIgPT0gJzAnICkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBsb25nIGxfdmFsID0gMDsKICAgICAgICAgICAg
ICAgICAgICBsb25nIGxfdmFsX29sZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4
ID0gODsKICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSAwOwogICAgICAgICAgICAgICAg
ICAgIGFkdmFuY2UoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYoIG5leHRfY2hhciA9PSAnLicg
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVm
ZmVyIGZfc3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlciggIjAuIiApOwogICAgICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggbmV4dF9j
aGFyID49ICcwJyAmJiBuZXh0X2NoYXIgPD0gJzknICkKICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZl9zdHJpbmcuYXBwZW5kKCAoY2hhciluZXh0
X2NoYXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZl92YWwgPSAo
IG5ldyBGbG9hdCggZl9zdHJpbmcudG9TdHJpbmcoKSApICkuZmxvYXRWYWx1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGZsb2F0X3Rva2VuKCBzeW0uRkxPQVRfTlVNQkVS
LCBmX3ZhbCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYg
aGV4YWRlY2ltYWwgdmFsdWUKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBuZXh0X2NoYXIg
PT0gJ3gnIHx8IG5leHRfY2hhciA9PSAnWCcgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByYWRpeCA9IDE2OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgdmFsID0gbmV3IFN0cmluZ0J1ZmZlciggIjAiICk7
CiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ID0gQ2hhcmFjdGVyLmRpZ2l0KCAoY2hhcilu
ZXh0X2NoYXIsIHJhZGl4ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCBkaWdpdCAh
PSAtMSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbC5hcHBlbmQoIChjaGFyKW5leHRfY2hhciApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSBDaGFy
YWN0ZXIuZGlnaXQoIChjaGFyKW5leHRfY2hhciwgcmFkaXggKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHZhbC50b1N0cmlu
ZygpOwogICAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpbnRfdG9rZW4oIHN5bS5O
VU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50ZWdlci5wYXJzZUludCggc3RyLCByYWRpeCApICk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBl
eCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgbG9uZ190b2tlbiggc3ltLkxPTkdfTlVNQkVSLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9uZy5wYXJz
ZUxvbmcoIHN0ciwgcmFkaXggKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleDIg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Mi5wcmludFN0YWNrVHJhY2UgKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW1pdF9lcnJvciggIkludmFsaWQgb2N0YWwvaGV4IHZhbHVlOiAgIiArIHN0ciApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvKiBUcnkgdG8gc2NhbiBpbnRlZ2Vy
LCBmbG9hdGluZyBwb2ludCBvciBmaXhlZCBwb2ludCBsaXRlcmFscyAqLwoKICAgICAgICAgICAg
ICAgIGlmIChpc0RpZ2l0ICgoKGNoYXIpbmV4dF9jaGFyKSkgfHwKICAgICAgICAgICAgICAgICAg
ICBuZXh0X2NoYXIgPT0gJy4nICAgIHx8CiAgICAgICAgICAgICAgICAgICAgKG5leHRfY2hhciA9
PSAnLScgJiYgaXNEaWdpdCAoKChjaGFyKW5leHRfY2hhcjIpKSkpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHZhbHVlID0gbmV3IFN0cmluZ0J1ZmZl
cigpOwogICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBmcmFjdGlvbiA9IG51bGw7CiAg
ICAgICAgICAgICAgICAgICAgaW50IGV4cCA9IDA7CgogICAgICAgICAgICAgICAgICAgIGlmICgg
bmV4dF9jaGFyID09ICctJyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZS5hcHBlbmQoIChjaGFyKW5leHRfY2hhciApOwogICAgICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIC8qIHJlYWQgaW50ZWdlciBwYXJ0ICovCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoIG5l
eHRfY2hhciA+PSAnMCcgJiYgbmV4dF9jaGFyIDw9ICc5JyApCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoIChjaGFyKW5leHRfY2hhciAp
OwogICAgICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgaW50
ZWdlciBwYXJ0ICIgKyB2YWx1ZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLyog
cmVhZCBmcmFjdGlvbiAqLwogICAgICAgICAgICAgICAgICAgIGlmKCBuZXh0X2NoYXIgPT0gJy4n
ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9u
ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7
CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWRpbmcg
ZnJhY3Rpb24gcGFydCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIG5leHRfY2hh
ciA+PSAnMCcgJiYgbmV4dF9jaGFyIDw9ICc5JyApCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLmFwcGVuZCggKGNoYXIpbmV4dF9j
aGFyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
IGlmKCBuZXh0X2NoYXIgPT0gJ2UnIHx8IG5leHRfY2hhciA9PSAnRScgKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJS
ZWFkaW5nIGV4cG9uZW50Iik7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiggZnJhY3Rpb24g
PT0gbnVsbCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IG5ldyBTdHJp
bmdCdWZmZXIoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLmFwcGVuZCggJ2Un
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoIG5leHRfY2hhciA9PSAnLScgfHwgbmV4dF9jaGFyID09ICcrJyApCiAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLmFw
cGVuZCggKGNoYXIpbmV4dF9jaGFyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlKCBuZXh0X2NoYXIgPj0gJzAnICYmIG5leHRfY2hhciA8PSAnOScgKQogICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi5hcHBl
bmQoIChjaGFyKW5leHRfY2hhciApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBp
ZiggZnJhY3Rpb24ubGVuZ3RoKCkgPT0gMSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJFbXB0eSBleHBvbmVudCBpbiBm
bG9hdC9kb3VibGUuIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgZmxvYXRfdG9rZW4oIHN5bS5GTE9BVF9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRmxvYXQudmFsdWVPZiggdmFsdWUudG9TdHJpbmcoKSArCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIi4iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFjdGlvbi50b1N0cmluZygpICkuZmxvYXRWYWx1ZSgpICk7CiAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICBpZiggbmV4dF9jaGFyID09ICdkJyB8fCBuZXh0X2NoYXIg
PT0gJ0QnICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGZyYWN0aW9uID09IG51bGwgKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSBuZXcgU3RyaW5nQnVmZmVyKCk7
CgogICAgICAgICAgICAgICAgICAgICAgICBqYXZhLm1hdGguQmlnRGVjaW1hbCBiaSA9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKCB2YWx1
ZS50b1N0cmluZygpICsgIi4iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFj
dGlvbi50b1N0cmluZygpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZml4
ZWRfdG9rZW4oIHN5bS5GSVhFRF9OVU1CRVIsIGJpICk7CgogICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgaWYoIGZyYWN0aW9uID09IG51bGwgKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvciBsb25nICovCgog
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiB0b2sgPSBudWxsOwogICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2sgPSBuZXcgaW50X3Rva2VuKCBzeW0uTlVNQkVSLCBJbnRlZ2VyLnBhcnNlSW50
KCBzdHIgKSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNhdGNoKCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXggKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBuZXcgbG9u
Z190b2tlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN5bS5MT05HX05V
TUJFUiwgTG9uZy5wYXJzZUxvbmcoIHN0ciApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCggTnVtYmVyRm9ybWF0RXhjZXB0
aW9uIGV4MiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3QgcXVpdGUgY3JpdGljYWwgeWV0
IC0gbGV0cyB0cnkgc3R1ZmZpbmcgaXQgaW50bwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhIGJpZ2RlY2ltYWwgZm9yIGxhdGVyIGNoZWNraW5nLgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBuZXcgZml4ZWRfdG9rZW4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeW0uRklYRURfTlVNQkVSLCBuZXcgamF2YS5t
YXRoLkJpZ0RlY2ltYWwgKHN0cikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0
aW9uIGV4MykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4Mi5wcmludFN0YWNrVHJhY2UgKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJJbnZhbGlkIGxvbmcgdmFsdWU6
ICAiICsgc3RyICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdG9rOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICB0cnkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgZiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0
LnZhbHVlT2YoIHZhbHVlLnRvU3RyaW5nKCkgKyAiLiIgKwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFjdGlvbi50b1N0cmluZygpICkuZmxvYXRWYWx1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBmbG9hdF90b2tlbiggc3ltLkZMT0FUX05V
TUJFUiwgZiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNhdGNoKCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmYgKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0X2Vycm9yKCAiVW5leHBlY3Rl
ZCBzeW1ib2w6ICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUu
dG9TdHJpbmcoKSArICIuIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YWN0aW9uLnRvU3RyaW5nKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvKiBsb29rIGZv
ciBhIHNpbmdsZSBjaGFyYWN0ZXIgc3ltYm9sICovCiAgICAgICAgICAgICAgICBzeW1fbnVtID0g
ZmluZF9zaW5nbGVfY2hhciggbmV4dF9jaGFyICk7CgogICAgICAgICAgICAgICAgLyogdXBvbiBh
biBvcGVuaW5nIGRvdWJsZSBxdW90ZSwgcmV0dXJuIHRoZQogICAgICAgICAgICAgICAgICAgc3lt
LkRCTFFVT1RFIHRva2VuIGFuZCBjb250aW51ZSBzY2FubmluZyBpbiB0aGUKICAgICAgICAgICAg
ICAgICAgIGluX3N0cmluZyBicmFuY2ggKi8KCiAgICAgICAgICAgICAgICBpZiggKGNoYXIpbmV4
dF9jaGFyID09ICdcIicgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlu
X3N0cmluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgdG9rZW4oIHN5bS5EQkxRVU9URSApOwogICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIGlmKCAoY2hhciluZXh0X2NoYXIgPT0gJ1wnJyApCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwoKICAgICAgICAgICAg
ICAgICAgICB0b2tlbiB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgaWYoIG5leHRfY2hh
ciA9PSAnXFwnICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE5vdyBuZWVkIHRvIHByb2Nlc3MgZXNjYXBlZCBjaGFyYWN0ZXIuCgogICAgICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNEaWdp
dCggKGNoYXIpbmV4dF9jaGFyICkgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBPY3RhbCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgb2N0YWwxID0gJzAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciBvY3RhbDIgPSAnMCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIG9jdGFs
MyA9IChjaGFyKW5leHRfY2hhcjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNE
aWdpdCggKGNoYXIpbmV4dF9jaGFyMiApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2N0YWwyID0gb2N0YWwzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9jdGFsMyA9IChjaGFyKW5leHRfY2hhcjsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYoIGlzRGlnaXQoIChjaGFyKW5leHRfY2hhcjIgKSApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsMSA9
IG9jdGFsMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwyID0gb2N0
YWwzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbDMgPSAoY2hhcilu
ZXh0X2NoYXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hh
cl90b2tlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLkNILAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKUludGVnZXIucGFyc2VJbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBuZXcgU3RyaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBuZXcgY2hhcltde29jdGFsMSwgb2N0YWwy
LCBvY3RhbDN9ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiggKGNoYXIpbmV4dF9jaGFyID09ICd4JyApCiAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhleGFkZWNp
bWFsIGNoYXJhY3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgaGV4MSA9ICcwJzsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgaGV4MiA9IChjaGFyKW5leHRfY2hhcjsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiggaXNIZXhMZXR0ZXJPckRpZ2l0KCAoY2hhciluZXh0X2NoYXIyICkg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgxID0g
aGV4MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgyID0gKGNoYXIpbmV4dF9j
aGFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiggKGNoYXIpbmV4dF9jaGFyMiAhPSAnXCcnICkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0X2Vycm9y
KCAiSWxsZWdhbCBoZXggY2hhcmFjdGVyIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hhcl90b2tlbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3ltLkNILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjaGFyKUludGVnZXIucGFyc2VJbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCBuZXcgU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCBuZXcgY2hhcltde2hleDEsIGhleDJ9ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCAoY2hhciluZXh0X2No
YXIgPT0gJ3UnICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYoIHdpZGUgPT0gZmFsc2UgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJVbmljb2RlIGNo
YXJhY3RlcnMgYXJlIG9ubHkgbGVnYWwgd2l0aCB3aWRlIGNoYXJhY3RlciIgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIZXhhZGVj
aW1hbCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdW5pMSA9ICcwJzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVuaTIgPSAnMCc7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciB1bmkzID0gJzAnOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgdW5pNCA9IChjaGFyKW5leHRfY2hhcjsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIGlzSGV4TGV0dGVyT3JEaWdpdCggKGNoYXIpbmV4dF9jaGFyMiAp
ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5pMyA9IHVuaTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
aTQgPSAoY2hhciluZXh0X2NoYXI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiggaXNIZXhMZXR0ZXJPckRpZ2l0KCAoY2hhciluZXh0X2NoYXIyICkgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bmkyID0gdW5pMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuaTMgPSB1bmk0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p
NCA9IChjaGFyKW5leHRfY2hhcjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiggaXNIZXhMZXR0ZXJPckRpZ2l0KCAoY2hhciluZXh0X2NoYXIyICkgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmkxID0gdW5pMjsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmkyID0gdW5pMzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmkzID0gdW5pNDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmk0ID0gKGNoYXIpbmV4dF9jaGFyOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiggKGNoYXIpbmV4dF9jaGFyMiAhPSAnXCcnICkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbWl0X2Vycm9yKCAiSWxsZWdhbCB1bmljb2RlIGNoYXJhY3Rl
ciIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmKCAoY2hhciluZXh0X2NoYXIyICE9ICdcJycgKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbWl0X2Vycm9yKCAiSWxsZWdhbCB1bmljb2RlIGNoYXJhY3RlciIgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIChjaGFyKW5leHRf
Y2hhcjIgIT0gJ1wnJyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0X2Vycm9yKCAiSWxsZWdhbCB1bmljb2Rl
IGNoYXJhY3RlciIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ID0gbmV3IGNoYXJfdG9rZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ltLkNILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhcilJbnRlZ2VyLnBhcnNlSW50CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoIG5ldyBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCBuZXcgY2hhcltde3VuaTEsIHVuaTIsIHVuaTMsIHVuaTR9
ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KCBuZXh0X2NoYXIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbmV3
IGNoYXJfdG9rZW4oIHN5bS5DSCwgJ1xuJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdCA9IG5ldyBjaGFyX3Rva2VuKCBzeW0uQ0gsICdcdCcgKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hhcl90b2tlbiggc3ltLkNILCAnXDAxMycgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnYic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hhcl90b2tlbiggc3lt
LkNILCAnXGInICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3InOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IGNo
YXJfdG9rZW4oIHN5bS5DSCwgJ1xyJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdCA9IG5ldyBjaGFyX3Rva2VuKCBzeW0uQ0gsICdcZicgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hhcl90b2tlbiggc3ltLkNILCAnXDAwNycgKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnXFwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IGNoYXJfdG9rZW4oIHN5bS5D
SCwgJ1xcJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IG5ldyBjaGFy
X3Rva2VuKCBzeW0uQ0gsICc/JyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dCA9IG5ldyBjaGFyX3Rva2VuKCBzeW0uQ0gsICdcMCcgKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXCcnOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ID0gbmV3IGNoYXJfdG9rZW4oIHN5bS5DSCwgJ1wnJyApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdcIic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hhcl90b2tlbiggc3ltLkNILCAn
XCInICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJJbnZh
bGlkIGVzY2FwZSBzeW1ib2wgXCciICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBuZXcgY2hhcl90b2tlbigg
c3ltLkNILCAoY2hhciluZXh0X2NoYXIgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgYWR2YW5jZSgpOwoKICAgICAgICAgICAgICAgICAgICBpZiggKGNoYXIpbmV4
dF9jaGFyID09ICdcJycgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW5TdGFjay5wdXNoKCBuZXcgdG9rZW4oIHN5bS5RVU9URSApICk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuU3RhY2sucHVzaCggdCApOwogICAgICAgICAgICAgICAgICAg
ICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRf
ZXJyb3IoICJFeHBlY3RpbmcgY2xvc2luZyBcJyIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHdp
ZGUgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0b2tlbiggc3ltLlFV
T1RFICk7CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIGlmKCBzeW1fbnVtICE9
IC0xICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBvbmUg
LS0gYWR2YW5jZSBwYXN0IGl0IGFuZCByZXR1cm4gYSB0b2tlbiBmb3IgaXQgKi8KICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdG9r
ZW4oIHN5bV9udW0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvKiBsb29r
IGZvciBhbiBpZCBvciBrZXl3b3JkICovCiAgICAgICAgICAgICAgICBpZiggaWRfc3RhcnRfY2hh
ciggbmV4dF9jaGFyICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRv
a2VuIHQgPSBkb19zeW1ib2woKTsKICAgICAgICAgICAgICAgICAgICBpZiggdCAhPSBudWxsICkK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAvKiBsb29rIGZvciBFT0YgKi8KICAgICAgICAgICAgICAgIGlmKCBuZXh0
X2NoYXIgPT0gRU9GX0NIQVIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgdG9rZW4oIHN5bS5FT0YgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlIC8vIGluX3N0cmluZwogICAgICAgICAgICB7CgogICAgICAg
ICAgICAgICAgLyogZW1wdHkgc3RyaW5nID8gKi8KICAgICAgICAgICAgICAgIGlmKCAoY2hhcilu
ZXh0X2NoYXIgPT0gJ1wiJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
aW5fc3RyaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgdG9rZW4oIHN5bS5EQkxRVU9URSApOwogICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgICByZXR1cm4gbmV3IG9yZy5qYWNvcmIuaWRsLnN0cl90
b2tlbihzeW0uSUQsICIiLCBnZXRQb3NpdGlvbigpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAg
ICAgICAgICAgICAgY2hhciBwcmV2aW91cyA9ICcgJzsKCiAgICAgICAgICAgICAgICAvKiBjb2xs
ZWN0IHVwIGNoYXJhY3RlcnMgd2hpbGUgdGhleSBmaXQgaW4gaWQgKi8KICAgICAgICAgICAgICAg
IHdoaWxlKCB0cnVlICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZigg
bmV4dF9jaGFyID09ICdcXCcgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmVtYXAgdGhvc2UgY2hhcmFjdGVycyB0aGF0IGhhdmUgbm8gZXF1aXZpbGFu
dCBpbiBqYXZhCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCggbmV4dF9jaGFyMiApCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2EnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggIlxcMDA3IiApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9ICdhJzsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
ICJcXDAxMyIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMg
PSAndic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPyc6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCAiPyIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXMgPSAnPyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlcGxhY2UgXHhBMCBieSBvY3RhbCBlcXVpdmlsYW50CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IG5leHRfY2hhciB3aWxsIGJlIEEgYW5kIG5l
eHRfY2hhcjIgd2lsbCBiZSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyBvY3RhbCA9IEludGVnZXIudG9PY3RhbFN0cmluZwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgY2hhcltd
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciluZXh0X2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKW5l
eHRfY2hhcjJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggb2N0YWwubGVuZ3RoKCkgIT0gMyApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKCBvY3RhbC5sZW5ndGgoKSA9PSAxICkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvY3RhbCA9ICIwIiArIG9jdGFsOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2N0YWwgPSAiMCIgKyBvY3RhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCAiXFwiICsgb2N0YWwgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXMgPSAoY2hhciluZXh0X2NoYXIyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICd1JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB3aWRlID09IGZhbHNlICkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW1pdF9lcnJvciggIlVuaWNvZGUgY2hhcmFjdGVycyBhcmUgb25seSBs
ZWdhbCB3aXRoIHdpZGUgc3RyaW5ncyIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCggKGNoYXIpbmV4dF9jaGFyICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCAoY2hhciluZXh0X2NoYXIy
ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1bmkxID0gKGNoYXIpbmV4dF9j
aGFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1bmkyID0g
JzAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1bmkzID0g
JzAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1bmk0ID0g
JzAnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBpc0hleExl
dHRlck9yRGlnaXQoIChjaGFyKW5leHRfY2hhcjIgKSApCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaTIgPSAoY2hhciluZXh0X2NoYXI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmKCBpc0hleExldHRlck9yRGlnaXQoIChjaGFyKW5leHRfY2hhcjIg
KSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaTMgPSAoY2hhcilu
ZXh0X2NoYXI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiggaXNIZXhMZXR0ZXJPckRpZ2l0KCAoY2hhciluZXh0X2NoYXIyICkgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmk0ID0gKGNoYXIpbmV4
dF9jaGFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdF9lcnJvciggIkls
bGVnYWwgdW5pY29kZSBjaGFyYWN0ZXIiICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0X2Vycm9y
KCAiSWxsZWdhbCB1bmljb2RlIGNoYXJhY3RlciIgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRfZXJyb3IoICJJbGxlZ2FsIHVuaWNvZGUg
Y2hhcmFjdGVyIiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gdW5pNDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIHVu
aTEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIHVuaTIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIHVuaTMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoIHVuaTQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSAoY2hhciluZXh0X2NoYXI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIChjaGFyKW5leHRfY2hhciAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IChjaGFy
KW5leHRfY2hhcjsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggKGNoYXIp
bmV4dF9jaGFyICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGJhY2tzbGFzaCBxdW90ZSBi
dXQgZXhpdCBpZiBqdXN0IHF1b3RlCiAgICAgICAgICAgICAgICAgICAgaWYoICggKGNoYXIpbmV4
dF9jaGFyICkgPT0gJ1wiJyAmJiBwcmV2aW91cyAhPSAnXFwnICkKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdpZGUgPSBmYWxzZTsKCiAgICAgICAg
ICAgICAgICBTdHJpbmcgcyA9IHJlc3VsdC50b1N0cmluZygpOwoKICAgICAgICAgICAgICAgIC8q
ICBidWlsZCBhbmQgcmV0dXJuIGFuIGlkIHRva2VuIHdpdGggYW4gYXR0YWNoZWQgc3RyaW5nICov
CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IG9yZy5qYWNvcmIuaWRsLnN0cl90b2tlbiggc3lt
LklELCBzLAogICAgICAgICAgICAgICAgICAgICAgICBnZXRQb3NpdGlvbigpLAogICAgICAgICAg
ICAgICAgICAgICAgICBHbG9iYWxJbnB1dFN0cmVhbS5jdXJyZW50RmlsZSgpLmdldE5hbWUoKSAp
OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiBpZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBh
biB1bnJlY29nbml6ZWQgY2hhcmFjdGVyICovCiAgICAgICAgICAgIGVtaXRfd2FybiggIlVucmVj
b2duaXplZCBjaGFyYWN0ZXIgJyIgKwogICAgICAgICAgICAgICAgICAgIG5ldyBDaGFyYWN0ZXIo
IChjaGFyKW5leHRfY2hhciApICsgIicoIiArIG5leHRfY2hhciArICIpIC0tIGlnbm9yZWQiICk7
CgogICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgaXQgKi8KICAgICAgICAgICAgYWR2YW5jZSgp
OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiBjaGFyYWN0
ZXIgaXMgVVMgQVNDSUkgMC05CiAgICAgKgogICAgICogQHBhcmFtIGMgYSB2YWx1ZSBvZiB0eXBl
ICdjaGFyJwogICAgICogQHJldHVybiBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2xlYW4nCiAgICAgKi8K
ICAgIHN0YXRpYyBib29sZWFuIGlzRGlnaXQoIGNoYXIgYyApCiAgICB7CiAgICAgICAgYm9vbGVh
biByZXN1bHQgPSBmYWxzZTsKCiAgICAgICAgaWYoIGMgPj0gJ1x1MDAzMCcgKQogICAgICAgIHsK
ICAgICAgICAgICAgaWYoIGMgPD0gJ1x1MDAzOScgKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAvLyBSYW5nZSAwMDMwIFswXSAtPiAwMDM5IFs5XQogICAgICAgICAgICAgICAgcmVzdWx0
ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgfQoKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiBjaGFyYWN0ZXIgaXMgVVMgQVND
SUkgMC05LCBhLWYsIEEtRgogICAgICoKICAgICAqIEBwYXJhbSBjIGEgdmFsdWUgb2YgdHlwZSAn
Y2hhcicKICAgICAqIEByZXR1cm4gYSB2YWx1ZSBvZiB0eXBlICdib29sZWFuJwogICAgICovCiAg
ICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSGV4TGV0dGVyT3JEaWdpdCggY2hhciBjICkKICAg
IHsKICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwoKICAgICAgICBpZiggYyA+PSAnXHUw
MDMwJyApCiAgICAgICAgewogICAgICAgICAgICBpZiggYyA8PSAnXHUwMDM5JyApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIC8vIFJhbmdlIDAwMzAgWzBdIC0+IDAwMzkgWzldCiAgICAg
ICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIGMgPj0gJ1x1MDA0MScgKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmKCBjIDw9ICdcdTAwNDYnICkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhbmdlIDAwNDEgW0Fd
IC0+IDAwNDYgW0ZdCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKCBjID49ICdcdTAwNjEnICkK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBjIDw9ICdc
dTAwNjYnICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUmFuZ2UgMDA2MSBbYV0gLT4gMDA2NiBbZl0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KfQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>