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

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

    <bug>
          <bug_id>176333</bug_id>
          
          <creation_ts>2017-09-04 13:31:55 -0700</creation_ts>
          <short_desc>WSL overload resolution should not be cascading</short_desc>
          <delta_ts>2018-10-13 17:01:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1345246</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-04 13:31:55 -0700</bug_when>
    <thetext>Currently WSL resolves overloads by just proceeding through signatures in order, and returning the first one that matches.  That&apos;s pretty weird.  For example, it means that if someone uses #include as a mechanism of modularity, then the order in which things are included will determine what gets called.  This is in contrast to C++, which has fairly deterministic overload resolution rules that will often report overload ambiguity errors in cases where things would have gotten weird.  Also, regardless of what you think of cascading overload resolution versus C++ overload resolution, it is a goal of WSL to be similar to C++.  So, this implies having some deterministic rules like C++ does.

I propose the following.  When there are N matches where N is greater than 1, they are ranked according to how they used inferred type variables.  Those are type variables that were not defined by type arguments to the call.  The math for this will be done using rational numbers with bignum numerators and denominators for maximum determinism.  The ranking formula gives each parameter a point.  If the parameter does not mention any inferred type variables, it gets one point.  If it is nothing more than just a reference to a type variable and the type variable has no protocol, then it gets zero points.  In general, we give it points recursively, so that you get more than zero points if the type variable is mentioned in some context like T^ or Foo&lt;T&gt;.  For example:

    points(ptrType) = points(ptrType.elementType) * 3/4 + 1/4;

For type variables, we give 1/3 point if it mentions a protocol, and zero points otherwise.

This enables us to do overload resolution in obvious cases:

void foo(int); // Obviously more specific!
void foo&lt;T&gt;(T);

And give errors in cases that feel like they should get errors:

void foo&lt;T&gt;(int, T);
void foo&lt;T&gt;(T, int);

Cases that are more specific by having a more specific protocol will be resolved unambiguously:

void foo&lt;T:numeric&gt;(T); // More specific!
void foo&lt;T&gt;(T);

But we will give errors if things get any weirder:

void foo&lt;T:numeric&gt;(T);
void foo&lt;T:primitive&gt;(T);

This will be an error even though numeric is a more specific protocol than primitive. I think that&apos;s the right call just because if we make it any more complicated, then we make our lives a lot harder with probably not a whole lot of benefit for anybody.  I think that a lot of users would expect an error here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345247</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-04 13:33:12 -0700</bug_when>
    <thetext>Oh and another thing: if you pass IntLiteral, then it should create one more point for itself, which is either 0 or 1 depending on whether it matches an actual int32.

This means that if we pass the literal 0 to:

void foo(int);
void foo(uint);

Then it will match the int.

But if you pass 0 to:

void foo(uint);
void foo(double);

Then you&apos;ll get an error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346579</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-07 15:21:15 -0700</bug_when>
    <thetext>Actually, I really like the C++ approach, which as I understand it is checking if there is a signature whose types would be accepted by all other signatures but not the other way around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346632</commentid>
    <comment_count>3</comment_count>
      <attachid>320202</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-07 16:18:17 -0700</bug_when>
    <thetext>Created attachment 320202
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346685</commentid>
    <comment_count>4</comment_count>
      <attachid>320223</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-07 19:04:53 -0700</bug_when>
    <thetext>Created attachment 320223
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346692</commentid>
    <comment_count>5</comment_count>
      <attachid>320226</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-07 19:22:59 -0700</bug_when>
    <thetext>Created attachment 320226
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346993</commentid>
    <comment_count>6</comment_count>
      <attachid>320226</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-08 16:29:54 -0700</bug_when>
    <thetext>Comment on attachment 320226
the patch

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

Why no tests?

&gt; Tools/WebGPUShadingLanguageRI/CallExpression.js:56
&gt; +    becomeCast(returnType)

But isn&apos;t there still a CastExpression class? It doesn&apos;t look like you deleted it

&gt; Tools/WebGPUShadingLanguageRI/Lexer.js:107
&gt; +            if (/^(struct|protocol|typedef|if|else|enum|continue|break|switch|case|default|for|while|do|return|constant|device|threadgroup|thread|operator|null|true|false)$/.test(RegExp.lastMatch))

Doesn&apos;t this set RegExp.lastMatch? Why doesn&apos;t this break things?

&gt; Tools/WebGPUShadingLanguageRI/NameResolver.js:121
&gt; +            node.becomeCast(type);

But you don&apos;t know what |type| is! Won&apos;t this break if malformed content is provided?

&gt; Tools/WebGPUShadingLanguageRI/Node.js:-32
&gt; -        let memoTable = visitor._memoTable;
&gt; -        if (memoTable.has(this))
&gt; -            return memoTable.get(this);

👍

&gt; Tools/WebGPUShadingLanguageRI/Test.js:100
&gt;  

No new tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347033</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-08 18:42:47 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #6)
&gt; Comment on attachment 320226 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320226&amp;action=review
&gt; 
&gt; Why no tests?

The hard parts are handled by existing overload resolution scenarios.  Most of the code in this patch was for making TEST_doubleNot happy.

But, I added some new tests.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/CallExpression.js:56
&gt; &gt; +    becomeCast(returnType)
&gt; 
&gt; But isn&apos;t there still a CastExpression class? It doesn&apos;t look like you
&gt; deleted it

I meant to delete it.  I did remove it from All.js.  I fixed that locally.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Lexer.js:107
&gt; &gt; +            if (/^(struct|protocol|typedef|if|else|enum|continue|break|switch|case|default|for|while|do|return|constant|device|threadgroup|thread|operator|null|true|false)$/.test(RegExp.lastMatch))
&gt; 
&gt; Doesn&apos;t this set RegExp.lastMatch? Why doesn&apos;t this break things?

I think that lastMatch is set if there is a match.  If there isn&apos;t a match, it&apos;s not set, and we&apos;re OK.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/NameResolver.js:121
&gt; &gt; +            node.becomeCast(type);
&gt; 
&gt; But you don&apos;t know what |type| is! Won&apos;t this break if malformed content is
&gt; provided?

NameResolver just needs to know that there is a type by that name.  It knows this at this point.

Note that becomeCast turns this into a TypeRef that incorporates the CallExpression&apos;s type arguments.  Later, Checker will give you an error if that TypeRef is invalid for any reason.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Node.js:-32
&gt; &gt; -        let memoTable = visitor._memoTable;
&gt; &gt; -        if (memoTable.has(this))
&gt; &gt; -            return memoTable.get(this);
&gt; 
&gt; 👍
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:100
&gt; &gt;  
&gt; 
&gt; No new tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347034</commentid>
    <comment_count>8</comment_count>
      <attachid>320327</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-08 18:43:18 -0700</bug_when>
    <thetext>Created attachment 320327
the patch

Add more tests, address other feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347037</commentid>
    <comment_count>9</comment_count>
      <attachid>320330</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-08 19:06:49 -0700</bug_when>
    <thetext>Created attachment 320330
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347288</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-10 14:49:35 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/221837/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353709</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:53:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468952</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 17:01:18 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/153</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320202</attachid>
            <date>2017-09-07 16:18:17 -0700</date>
            <delta_ts>2017-09-07 19:04:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26605</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTc2OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDE3LTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIG92ZXJsb2FkIHJlc29sdXRpb24gc2hvdWxkIG5vdCBiZSBjYXNjYWRpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMzMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyByZW1vdmVzIHRoZSBjYXNjYWRpbmcgbmF0dXJlIG9mIG92ZXJsb2FkIHJlc29sdXRpb24g
dGhhdCBXU0wgdXNlZCB0byBoYXZlLCBhbmQgcmVwbGFjZXMgaXQgd2l0aAorICAgICAgICBzb21l
dGhpbmcgQysrLWxpa2UuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBvdmVybG9hZCBjYW5kaWRhdGVz
IHRoYXQgbWF0Y2ggdGhlIGNhbGxzaXRlLCB0aGVuIHdlIHJlc29sdmUKKyAgICAgICAgdGhlbSBh
Z2FpbnN0IGVhY2ggb3RoZXIuIEFueXRpbWUgYSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVzb2x2ZWQg
b250byBhbm90aGVyIGZ1bmN0aW9uLCBpdCBpcyByZW1vdmVkLAorICAgICAgICBzaW5jZSB0aGlz
IG1lYW5zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbiBzb21lIHdheSBtb3JlIGdlbmVyYWwgdGhh
biB0aGUgb3RoZXIgb25lLCBhbmQgd2UgYXJlIGp1c3QKKyAgICAgICAgbG9va2luZyBmb3IgdGhl
IG1vc3Qgc3BlY2lmaWMgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICBJZiB0aGlzIHByb2Nl
c3MgZW5kcyB3aXRoIG9ubHkgb25lIGZ1bmN0aW9uIGJlaW5nIHNlbGVjdGVkLCB0aGVuIHdlIHN1
Y2NlZWQsIGVsc2Ugd2UgZmFpbC4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUu
anM6CisgICAgICAgIChBcnJheVJlZlR5cGUucHJvdG90eXBlLnVuaWZ5SW1wbCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qczoKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzOgorICAgICAgICAoRnVuYy5wcm90b3R5cGUuZ2V0IHJl
dHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGluZmVyVHlw
ZXNGb3JDYWxsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoK
KyAgICAgICAgKHBhcnNlRnVuY0RlY2wpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChwcmVwYXJlKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzOgorICAgICAgICAoUHRyVHlwZS5wcm90b3R5cGUudW5p
ZnlJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3Zlcmxv
YWRJbXBsLmpzOgorICAgICAgICAocmVzb2x2ZU92ZXJsb2FkSW1wbCk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOiBBZGRlZC4KKyAgICAgICAg
KG9wZXJhdG9yLlQuVCk6CisgICAgICAgIChvcGVyYXRvci5ULkVxdWF0YWJsZS5ib29sKToKKyAg
ICAgICAgKG9wZXJhdG9yLmJvb2wpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzOiBSZW1vdmVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbDoKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzOgorICAgICAgICAoVHlwZVJlZi5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAoVHlwZVJlZik6CisKIDIwMTctMDktMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgQyBBUEkgdG8gcmV0
cmlldmUgdGhlIG9yaWdpbmF0aW5nIHBhZ2Ugb2YgYSBXS0Rvd25sb2FkCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcg
QEAgbG9hZCgiRnVuY0RlZi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9h
ZCgiRnVuY1BhcmFtZXRlci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xv
YWQoIkluZmVyVHlwZXNGb3JDYWxsLmpzIik7CiBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklu
bGluZXIuanMiKTsKIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwpAQCAtMTAwLDgg
KzEwMSw3IEBAIGxvYWQoIlJlc29sdmVUeXBlRGVmcy5qcyIpOwogbG9hZCgiUmV0dXJuLmpzIik7
CiBsb2FkKCJSZXR1cm5DaGVja2VyLmpzIik7CiBsb2FkKCJSZXR1cm5FeGNlcHRpb24uanMiKTsK
LWxvYWQoIlN0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzIik7Ci1sb2FkKCJTdGFuZGFyZExpYnJh
cnlQcm9sb2d1ZS5qcyIpOworbG9hZCgiU3RhbmRhcmRMaWJyYXJ5LmpzIik7CiBsb2FkKCJTdHJ1
Y3RMYXlvdXRCdWlsZGVyLmpzIik7CiBsb2FkKCJTdHJ1Y3RUeXBlLmpzIik7CiBsb2FkKCJTdWJz
dGl0dXRpb24uanMiKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5
UmVmVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
cnJheVJlZlR5cGUuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksMTAg
QEAKIGNsYXNzIEFycmF5UmVmVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgIHVuaWZ5
SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQogICAgIHsKLSAgICAgICAgaWYgKCEob3Ro
ZXIgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKSB7CisgICAgICAgIGlmIChvdGhlciBpbnN0YW5j
ZW9mIEFycmF5UmVmVHlwZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9
IG90aGVyLmFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5VHlw
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKHRoaXMu
YWRkcmVzc1NwYWNlICE9ICJ0aHJlYWQiKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DaGVja2VyLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNyArMjcwLDEwIEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgICAgICBub2RlLm5h
bWUsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CiAgICAg
ICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpIHsKICAgICAgICAgICAgICAgICBmYWlsdXJlcy5w
dXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKLSAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9
ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiOworICAgICAgICAgICAgICAgIGxldCBt
ZXNzYWdlID0gIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCB3aXRoICI7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgKz0gInR5cGUgYXJndW1lbnRzIDwiICsgbm9kZS50eXBlQXJndW1lbnRzICsg
Ij4gYW5kICI7CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiYXJndW1lbnQgdHlwZXMgKCIg
KyBhcmd1bWVudFR5cGVzICsgIikiOwogICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5n
dGgpCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiwgYnV0IGNvbnNpZGVyZWQ6XG4i
ICsgZmFpbHVyZXMuam9pbigiXG4iKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbWVzc2FnZSk7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAgY2xhc3MgRnVuYyBleHRlbmRzIE5vZGUgewogICAgIGdldCBwYXJhbWV0ZXJzKCkgeyByZXR1
cm4gdGhpcy5fcGFyYW1ldGVyczsgfQogICAgIGdldCBwYXJhbWV0ZXJUeXBlcygpIHsgcmV0dXJu
IHRoaXMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci50eXBlKTsgfQogICAg
IGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7IH0KKyAgICBnZXQgcmV0dXJuVHlw
ZUZvck92ZXJsb2FkUmVzb2x1dGlvbigpIHsgcmV0dXJuIHRoaXMuaXNDYXN0ID8gdGhpcy5yZXR1
cm5UeXBlIDogbnVsbDsgfQogICAgIAogICAgIGdldCBraW5kKCkgeyByZXR1cm4gRnVuYzsgfQog
ICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNh
bGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJU
eXBlc0ZvckNhbGwuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJp
Y3QiOworCitmdW5jdGlvbiBpbmZlclR5cGVzRm9yQ2FsbChmdW5jLCB0eXBlQXJndW1lbnRzLCBh
cmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQoreworICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0
aCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBmdW5jLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShm
dW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIChwYXNzZWQgIiArIHR5cGVBcmd1
bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGgg
KyAiKSIpfTsKKyAgICBpZiAoYXJndW1lbnRUeXBlcy5sZW5ndGggIT0gZnVuYy5wYXJhbWV0ZXJz
Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9u
RmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAocGFzc2VkICIgKyBhcmd1
bWVudFR5cGVzLmxlbmd0aCArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVycy5sZW5ndGgg
KyAiKSIpfTsKKyAgICBsZXQgdW5pZmljYXRpb25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29u
dGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVB
cmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IGFyZ3VtZW50ID0gdHlwZUFyZ3Vt
ZW50c1tpXTsKKyAgICAgICAgbGV0IHBhcmFtZXRlciA9IGZ1bmMudHlwZVBhcmFtZXRlcnNbaV07
CisgICAgICAgIGlmICghYXJndW1lbnQudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBwYXJhbWV0
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9u
RmFpbHVyZShmdW5jLCAiVHlwZSBhcmd1bWVudCAjIiArIChpICsgMSkgKyAiIGZvciBwYXJhbWV0
ZXIgIiArIHBhcmFtZXRlci5uYW1lICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1
bWVudCArICIsIHJlcXVpcmUgIiArIHBhcmFtZXRlciArICIpIil9OworICAgIH0KKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYg
KCFhcmd1bWVudFR5cGVzW2ldKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFy
Z3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ld
LnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShm
dW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5u
YW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsg
IiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWly
ZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsKKyAgICB9CisgICAgaWYgKHJl
dHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJl
dHVyblR5cGUpKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRp
b25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAiICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2Vz
IG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OworICAgIGlmICghdW5pZmljYXRpb25Db250ZXh0
LnZlcmlmeSgpKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRp
b25GYWlsdXJlKGZ1bmMsICJWaW9sYXRlcyB0eXBlIHZhcmlhYmxlIGNvbnN0cmFpbnRzIil9Owor
ICAgIGxldCBzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMgPSAhdHlwZUFyZ3VtZW50cy5sZW5ndGg7
CisgICAgaWYgKHNob3VsZEJ1aWxkVHlwZUFyZ3VtZW50cykKKyAgICAgICAgdHlwZUFyZ3VtZW50
cyA9IFtdOworICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2YgZnVuYy50eXBlUGFyYW1ldGVy
cykgeworICAgICAgICBsZXQgdHlwZUFyZ3VtZW50ID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQo
dHlwZVBhcmFtZXRlcik7CisgICAgICAgIGlmICh0eXBlQXJndW1lbnQgPT0gdHlwZVBhcmFtZXRl
cikKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZh
aWx1cmUoZnVuYywgIlR5cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyICsgIiBkaWQgbm90
IGdldCBhc3NpZ25lZCBhIHR5cGUiKX07CisgICAgICAgIGlmIChzaG91bGRCdWlsZFR5cGVBcmd1
bWVudHMpCisgICAgICAgICAgICB0eXBlQXJndW1lbnRzLnB1c2godHlwZUFyZ3VtZW50KTsKKyAg
ICB9CisgICAgcmV0dXJuIHtmdW5jLCB1bmlmaWNhdGlvbkNvbnRleHQsIHR5cGVBcmd1bWVudHN9
OworfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNp
b24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTYyNywxMCArNjI3LDEyIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0s
IG9yaWdpbiwgbGluZU51bWIKICAgICAgICAgbGV0IG9yaWdpbjsKICAgICAgICAgbGV0IHJldHVy
blR5cGU7CiAgICAgICAgIGxldCBuYW1lOworICAgICAgICBsZXQgdHlwZVBhcmFtZXRlcnM7CiAg
ICAgICAgIGxldCBpc0Nhc3Q7CiAgICAgICAgIGxldCBvcGVyYXRvclRva2VuID0gdHJ5Q29uc3Vt
ZSgib3BlcmF0b3IiKTsKICAgICAgICAgaWYgKG9wZXJhdG9yVG9rZW4pIHsKICAgICAgICAgICAg
IG9yaWdpbiA9IG9wZXJhdG9yVG9rZW47CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IHBh
cnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIHJldHVyblR5cGUgPSBwYXJzZVR5cGUo
KTsKICAgICAgICAgICAgIG5hbWUgPSBDYXN0RXhwcmVzc2lvbi5mdW5jdGlvbk5hbWU7CiAgICAg
ICAgICAgICBpc0Nhc3QgPSB0cnVlOwpAQCAtNjM4LDkgKzY0MCw5IEBAIGZ1bmN0aW9uIHBhcnNl
KHByb2dyYW0sIG9yaWdpbiwgbGluZU51bWIKICAgICAgICAgICAgIHJldHVyblR5cGUgPSBwYXJz
ZVR5cGUoKTsKICAgICAgICAgICAgIG9yaWdpbiA9IHJldHVyblR5cGUub3JpZ2luOwogICAgICAg
ICAgICAgbmFtZSA9IHBhcnNlRnVuY05hbWUoKTsKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJz
ID0gcGFyc2VUeXBlUGFyYW1ldGVycygpOwogICAgICAgICAgICAgaXNDYXN0ID0gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzID0gcGFyc2VUeXBlUGFyYW1ldGVy
cygpOwogICAgICAgICBsZXQgcGFyYW1ldGVycyA9IHBhcnNlUGFyYW1ldGVycygpOwogICAgICAg
ICByZXR1cm4gbmV3IEZ1bmMob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVy
cywgcGFyYW1ldGVycywgaXNDYXN0KTsKICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1ByZXBhcmUuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDgg
QEAKIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewog
ICAgIGxldCBwcm9ncmFtID0gbmV3IFByb2dyYW0oKTsKLSAgICBwYXJzZShwcm9ncmFtLCAiL2lu
dGVybmFsL3N0ZGxpYi9wcm9sb2d1ZSIsIDI4LCBzdGFuZGFyZExpYnJhcnlQcm9sb2d1ZSk7Cisg
ICAgcGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5hbC9zdGRsaWIiLCAyOCwgc3RhbmRhcmRMaWJyYXJ5
KTsKICAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwot
ICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3RkbGliL2VwaWxvZ3VlIiwgMjgsIHN0YW5k
YXJkTGlicmFyeUVwaWxvZ3VlKTsKICAgICByZXNvbHZlTmFtZXMocHJvZ3JhbSk7CiAgICAgcmVz
b2x2ZVR5cGVEZWZzKHByb2dyYW0pOwogICAgIGNoZWNrKHByb2dyYW0pOwpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw4IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlIHsKICAg
ICB7CiAgICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgUHRyVHlwZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLmFkZHJlc3NTcGFjZSAhPSBvdGhlci5h
ZGRyZXNzU3BhY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0
aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVudFR5
cGUpOwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jl
c29sdmVPdmVybG9hZEltcGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNjYgKzI3LDU0IEBACiBmdW5jdGlvbiByZXNvbHZlT3ZlcmxvYWRJbXBs
KGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSkKIHsK
ICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKKyAgICBsZXQgc3VjY2Vzc2VzID0gW107CiAgICAgZm9y
IChsZXQgZnVuYyBvZiBmdW5jdGlvbnMpIHsKLSAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVu
Z3RoICYmIHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IGZ1bmMudHlwZVBhcmFtZXRlcnMubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlKGZ1bmMsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgKHBhc3NlZCAiICsgdHlw
ZUFyZ3VtZW50cy5sZW5ndGggKyAiLCByZXF1aXJlICIgKyBmdW5jLnR5cGVQYXJhbWV0ZXJzLmxl
bmd0aCArICIpIikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGFyZ3VtZW50VHlwZXMubGVuZ3RoICE9IGZ1bmMucGFyYW1ldGVycy5sZW5ndGgpIHsKLSAg
ICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVu
YywgIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgKHBhc3NlZCAiICsgYXJndW1lbnRUeXBlcy5s
ZW5ndGggKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnMubGVuZ3RoICsgIikiKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBsZXQgdW5pZmljYXRpb25D
b250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsKKyAg
ICAgICAgbGV0IG92ZXJsb2FkID0gaW5mZXJUeXBlc0ZvckNhbGwoZnVuYywgdHlwZUFyZ3VtZW50
cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CisgICAgICAgIGlmIChvdmVybG9hZC5mYWls
dXJlKQorICAgICAgICAgICAgZmFpbHVyZXMucHVzaChvdmVybG9hZC5mYWlsdXJlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3VjY2Vzc2VzLnB1c2gob3ZlcmxvYWQpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXN1Y2Nlc3Nlcy5sZW5ndGgpCisgICAgICAgIHJldHVybiB7ZmFpbHVyZXM6
IGZhaWx1cmVzfTsKKyAgICAKKyAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGZ1bmN0
aW9ucyB0aGF0IGFyZSBhdCBsZWFzdCBhcyBzcGVjaWZpYyBhcyBhbGwgb2YgdGhlIG90aGVycy4g
VGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhleSBjYW4gYmUgInR1cm5lZCBhcm91bmQiIGFuZCBh
cHBsaWVkIG9udG8gYWxsIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGxpc3QuCisgICAg
bGV0IHBydW5lZFN1Y2Nlc3NlcyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VjY2Vz
c2VzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIGxldCBvayA9IHRydWU7Ci0gICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
bGV0IGFyZ3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgIGxldCBwYXJhbWV0
ZXIgPSBmdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudC51
bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIHBhcmFtZXRlcikpIHsKLSAgICAgICAgICAgICAgICBm
YWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJUeXBlIGFy
Z3VtZW50ICMiICsgKGkgKyAxKSArICIgZm9yIHBhcmFtZXRlciAiICsgcGFyYW1ldGVyLm5hbWUg
KyAiIGRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50ICsgIiwgcmVxdWlyZSAiICsg
cGFyYW1ldGVyICsgIikiKSk7Ci0gICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW9r
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJn
dW1lbnRUeXBlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVz
W2ldKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB0eXBl
IGF0IGkgPSAiICsgaSk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0udW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMs
ICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUg
PyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLm5hbWUgOiAiIikgKyAiIGRv
ZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNbaV0gKyAiLCByZXF1aXJlICIg
KyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIikpOwotICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmV0
dXJuVHlwZSkgewotICAgICAgICAgICAgaWYgKCFyZXR1cm5UeXBlLnVuaWZ5KHVuaWZpY2F0aW9u
Q29udGV4dCwgZnVuYy5yZXR1cm5UeXBlKSkgewotICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1
c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlJldHVybiB0eXBlICIgKyBm
dW5jLnJldHVyblR5cGUgKyAiIGRvZXMgbm90IG1hdGNoICIgKyByZXR1cm5UeXBlKSk7CisgICAg
ICAgIGxldCBhcmd1bWVudEZ1bmMgPSBzdWNjZXNzZXNbaV0uZnVuYzsKKyAgICAgICAgZm9yIChs
ZXQgaiA9IDA7IGogPCBzdWNjZXNzZXMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmIChp
ID09IGopCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCF1bmlmaWNhdGlvbkNvbnRleHQudmVyaWZ5KCkpIHsKLSAgICAgICAg
ICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlZp
b2xhdGVzIHR5cGUgdmFyaWFibGUgY29uc3RyYWludHMiKSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBsZXQgc2hvdWxkQnVpbGRUeXBlQXJndW1lbnRzID0gIXR5
cGVBcmd1bWVudHMubGVuZ3RoOwotICAgICAgICBpZiAoc2hvdWxkQnVpbGRUeXBlQXJndW1lbnRz
KQotICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA9IFtdOwotICAgICAgICBmb3IgKGxldCB0eXBl
UGFyYW1ldGVyIG9mIGZ1bmMudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGxldCB0eXBl
QXJndW1lbnQgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0eXBlUGFyYW1ldGVyKTsKLSAgICAg
ICAgICAgIGlmICh0eXBlQXJndW1lbnQgPT0gdHlwZVBhcmFtZXRlcikgewotICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlR5
cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyICsgIiBkaWQgbm90IGdldCBhc3NpZ25lZCBh
IHR5cGUiKSk7CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyRnVuYyA9IHN1Y2Nlc3Nlc1tqXS5m
dW5jOworICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gaW5mZXJUeXBlc0ZvckNhbGwoCisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyRnVuYywKKyAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnRz
Lmxlbmd0aCA/IGFyZ3VtZW50RnVuYy50eXBlUGFyYW1ldGVycyA6IFtdLAorICAgICAgICAgICAg
ICAgIGFyZ3VtZW50RnVuYy5wYXJhbWV0ZXJUeXBlcywKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dEZ1bmMucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CisgICAgICAgICAgICBpZiAo
IW92ZXJsb2FkLmZ1bmMpIHsKICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxk
VHlwZUFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnRzLnB1c2godHlwZUFy
Z3VtZW50KTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHJldHVybiB7ZnVuYywgdW5pZmljYXRpb25Db250ZXh0LCB0eXBlQXJndW1l
bnRzfTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcHJ1bmVkU3VjY2Vzc2VzLnB1c2go
c3VjY2Vzc2VzW2ldKTsKKyAgICB9CisgICAgCisgICAgaWYgKHBydW5lZFN1Y2Nlc3Nlcy5sZW5n
dGggPT0gMSkKKyAgICAgICAgcmV0dXJuIHBydW5lZFN1Y2Nlc3Nlc1swXTsKKyAgICAKKyAgICBs
ZXQgYW1iaWd1aXR5TGlzdDsKKyAgICBsZXQgbWVzc2FnZTsKKyAgICBpZiAocHJ1bmVkU3VjY2Vz
c2VzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIGFtYmlndWl0eUxpc3QgPSBzdWNjZXNzZXM7Cisg
ICAgICAgIG1lc3NhZ2UgPSAiQW1iaWd1b3VzIG92ZXJsb2FkIC0gbm8gZnVuY3Rpb24gY2FuIGJl
IGFwcGxpZWQgdG8gYWxsIG90aGVycyI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW1iaWd1aXR5
TGlzdCA9IHBydW5lZFN1Y2Nlc3NlczsKKyAgICAgICAgbWVzc2FnZSA9ICJBbWJpZ3VvdXMgb3Zl
cmxvYWQgLSBmdW5jdGlvbnMgbXV0dWFsbHkgYXBwbGljYWJsZSI7CiAgICAgfQogICAgIAotICAg
IHJldHVybiB7ZmFpbHVyZXM6IGZhaWx1cmVzfTsKKyAgICByZXR1cm4ge2ZhaWx1cmVzOiBhbWJp
Z3VpdHlMaXN0Lm1hcChvdmVybG9hZCA9PiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShv
dmVybG9hZC5mdW5jLCBtZXNzYWdlKSl9OwogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworInVzZSBzdHJpY3QiOworCisvLyBOT1RFOiBUaGUgbmV4dCBsaW5lIGlzIGxpbmUg
MjgsIGFuZCB3ZSByZWx5IG9uIHRoaXMgaW4gUHJlcGFyZS5qcy4KK2NvbnN0IHN0YW5kYXJkTGli
cmFyeSA9IGAKKy8vIFRoaXMgaXMgdGhlIFdTTCBzdGFuZGFyZCBsaWJyYXJ5LiBJbXBsZW1lbnRh
dGlvbnMgb2YgYWxsIG9mIHRoZXNlIHRoaW5ncyBhcmUgaW4KKy8vIEludHJpbnNpY3MuanMuIFRo
ZSBvbmx5IHRoaW5nIHRoYXQgZ2V0cyBkZWZpbmVkIGJlZm9yZSB3ZSBnZXQgaGVyZSBpcyB0aGUg
cHJpbWl0aXZlCisvLyBwcm90b2NvbC4KKworLy8gTmVlZCB0byBib290c3RyYXAgdm9pZCBmaXJz
dC4KK25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiB2b2lkOworCituYXRpdmUgcHJpbWl0aXZlIHR5
cGVkZWYgaW50MzI7CituYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgdWludDMyOworbmF0aXZlIHBy
aW1pdGl2ZSB0eXBlZGVmIGJvb2w7Cit0eXBlZGVmIGludCA9IGludDMyOwordHlwZWRlZiB1aW50
ID0gdWludDMyOworCituYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgZG91YmxlOworCituYXRpdmUg
aW50IG9wZXJhdG9yKyhpbnQsIGludCk7CituYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWlu
dCk7CituYXRpdmUgaW50IG9wZXJhdG9yLShpbnQsIGludCk7CituYXRpdmUgdWludCBvcGVyYXRv
ci0odWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJhdG9yKihpbnQsIGludCk7CituYXRpdmUg
dWludCBvcGVyYXRvcioodWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJhdG9yLyhpbnQsIGlu
dCk7CituYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWludCk7CituYXRpdmUgYm9vbCBvcGVy
YXRvcj09KGludCwgaW50KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yPT0odWludCwgdWludCk7Citu
YXRpdmUgYm9vbCBvcGVyYXRvcj09KGJvb2wsIGJvb2wpOworCitwcm90b2NvbCBFcXVhdGFibGUg
eworICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0YWJsZSk7Cit9CisKK29wZXJh
dG9yPFQ+IFQoVCB4KQoreworICAgIHJldHVybiB4OworfQorCitvcGVyYXRvcjxUOkVxdWF0YWJs
ZT4gYm9vbChUIHgpCit7CisgICAgVCBkZWZhdWx0VmFsdWU7CisgICAgcmV0dXJuIHggIT0gZGVm
YXVsdFZhbHVlOworfQorCisvLyBUaGlzIGlzIGEgdGllLWJyZWFrZXIgZm9yIGNhc3RpbmcgYm9v
bCB0byBib29sLgorb3BlcmF0b3IgYm9vbChib29sIHgpCit7CisgICAgcmV0dXJuIHg7Cit9CisK
K25hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3ImW108VD4odGhyZWFkIFRbXSwgdWludCk7CituYXRp
dmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KHRocmVhZGdyb3VwIFRb
XSwgdWludCk7CituYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihkZXZp
Y2UgVFtdLCB1aW50KTsKK25hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2
ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKK2A7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlFcGlsb2d1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlFcGlsb2d1ZS5qcwkocmV2aXNp
b24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJy
YXJ5RXBpbG9ndWUuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vIE5P
VEU6IFRoZSBuZXh0IGxpbmUgaXMgbGluZSAyOCwgYW5kIHdlIHJlbHkgb24gdGhpcyBpbiBQcmVw
YXJlLmpzLgotY29uc3Qgc3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUgPSBgCi1vcGVyYXRvciBib29s
PD48VDpFcXVhdGFibGU+KFQgeCkgewotICAgIFQgZGVmYXVsdFZhbHVlOwotICAgIHJldHVybiB4
ICE9IGRlZmF1bHRWYWx1ZTsKLX0KLWA7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5qcwkocmV2aXNpb24g
MjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5
UHJvbG9ndWUuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vIE5PVEU6
IFRoZSBuZXh0IGxpbmUgaXMgbGluZSAyOCwgYW5kIHdlIHJlbHkgb24gdGhpcyBpbiBQcmVwYXJl
LmpzLgotY29uc3Qgc3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUgPSBgCi0vLyBUaGlzIGlzIHRoZSBX
U0wgc3RhbmRhcmQgbGlicmFyeS4gSW1wbGVtZW50YXRpb25zIG9mIGFsbCBvZiB0aGVzZSB0aGlu
Z3MgYXJlIGluCi0vLyBJbnRyaW5zaWNzLmpzLiBUaGUgb25seSB0aGluZyB0aGF0IGdldHMgZGVm
aW5lZCBiZWZvcmUgd2UgZ2V0IGhlcmUgaXMgdGhlIHByaW1pdGl2ZQotLy8gcHJvdG9jb2wuCi0K
LS8vIE5lZWQgdG8gYm9vdHN0cmFwIHZvaWQgZmlyc3QuCi1uYXRpdmUgcHJpbWl0aXZlIHR5cGVk
ZWYgdm9pZDsKLQotbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGludDMyOwotbmF0aXZlIHByaW1p
dGl2ZSB0eXBlZGVmIHVpbnQzMjsKLW5hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiBib29sOwotdHlw
ZWRlZiBpbnQgPSBpbnQzMjsKLXR5cGVkZWYgdWludCA9IHVpbnQzMjsKLQotbmF0aXZlIHByaW1p
dGl2ZSB0eXBlZGVmIGRvdWJsZTsKLQotbmF0aXZlIGludCBvcGVyYXRvcisoaW50LCBpbnQpOwot
bmF0aXZlIHVpbnQgb3BlcmF0b3IrKHVpbnQsIHVpbnQpOwotbmF0aXZlIGludCBvcGVyYXRvci0o
aW50LCBpbnQpOwotbmF0aXZlIHVpbnQgb3BlcmF0b3ItKHVpbnQsIHVpbnQpOwotbmF0aXZlIGlu
dCBvcGVyYXRvciooaW50LCBpbnQpOwotbmF0aXZlIHVpbnQgb3BlcmF0b3IqKHVpbnQsIHVpbnQp
OwotbmF0aXZlIGludCBvcGVyYXRvci8oaW50LCBpbnQpOwotbmF0aXZlIHVpbnQgb3BlcmF0b3Iv
KHVpbnQsIHVpbnQpOwotbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCk7Ci1uYXRpdmUg
Ym9vbCBvcGVyYXRvcj09KHVpbnQsIHVpbnQpOwotbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShib29s
LCBib29sKTsKLQotcHJvdG9jb2wgRXF1YXRhYmxlIHsKLSAgICBib29sIG9wZXJhdG9yPT0oRXF1
YXRhYmxlLCBFcXVhdGFibGUpOwotfQotCi1vcGVyYXRvciBUPD48VD4oVCB4KSB7Ci0gICAgcmV0
dXJuIHg7Ci19Ci0KLW5hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3ImW108VD4odGhyZWFkIFRbXSwg
dWludCk7Ci1uYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KHRo
cmVhZGdyb3VwIFRbXSwgdWludCk7Ci1uYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJp
bWl0aXZlPihkZXZpY2UgVFtdLCB1aW50KTsKLW5hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZb
XTxUOnByaW1pdGl2ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKLWA7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDcgQEAKIDxzY3JpcHQgc3JjPSJGdW5jSW5zdGFudGlhdG9yLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJGdW5jUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5j
dGlvbkxpa2VCbG9jay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iSW5mZXJUeXBlc0ZvckNh
bGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IklubGluZS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5zdGFudGlhdGVJ
bW1lZGlhdGVzLmpzIj48L3NjcmlwdD4KQEAgLTc2LDggKzc3LDcgQEAKIDxzY3JpcHQgc3JjPSJS
ZXR1cm4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVybkNoZWNrZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlJldHVybkV4Y2VwdGlvbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iU3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9
IlN0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJTdGFu
ZGFyZExpYnJhcnkuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdExheW91dEJ1aWxk
ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5cGUuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVSZWYuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVSZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw2ICsxMTYsOCBAQCBjbGFzcyBUeXBlUmVmIGV4dGVuZHMgVHlwZSB7CiAgICAgCiAgICAgdG9T
dHJpbmcoKQogICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLm5hbWUpCisgICAgICAgICAgICByZXR1
cm4gdGhpcy50eXBlLnRvU3RyaW5nKCk7CiAgICAgICAgIGlmICghdGhpcy50eXBlQXJndW1lbnRz
Lmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CiAgICAgICAgIHJldHVybiB0
aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320223</attachid>
            <date>2017-09-07 19:04:53 -0700</date>
            <delta_ts>2017-09-07 19:22:59 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48054</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTc2OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDE3LTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIG92ZXJsb2FkIHJlc29sdXRpb24gc2hvdWxkIG5vdCBiZSBjYXNjYWRpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjMzMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyByZW1vdmVzIHRoZSBjYXNjYWRpbmcgbmF0dXJlIG9mIG92ZXJsb2FkIHJlc29sdXRpb24g
dGhhdCBXU0wgdXNlZCB0byBoYXZlLCBhbmQgcmVwbGFjZXMgaXQgd2l0aAorICAgICAgICBzb21l
dGhpbmcgQysrLWxpa2UuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBvdmVybG9hZCBjYW5kaWRhdGVz
IHRoYXQgbWF0Y2ggdGhlIGNhbGxzaXRlLCB0aGVuIHdlIHJlc29sdmUKKyAgICAgICAgdGhlbSBh
Z2FpbnN0IGVhY2ggb3RoZXIuIEFueXRpbWUgYSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVzb2x2ZWQg
b250byBhbm90aGVyIGZ1bmN0aW9uLCBpdCBpcyByZW1vdmVkLAorICAgICAgICBzaW5jZSB0aGlz
IG1lYW5zIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBpbiBzb21lIHdheSBtb3JlIGdlbmVyYWwgdGhh
biB0aGUgb3RoZXIgb25lLCBhbmQgd2UgYXJlIGp1c3QKKyAgICAgICAgbG9va2luZyBmb3IgdGhl
IG1vc3Qgc3BlY2lmaWMgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICBJZiB0aGlzIHByb2Nl
c3MgZW5kcyB3aXRoIG9ubHkgb25lIGZ1bmN0aW9uIGJlaW5nIHNlbGVjdGVkLCB0aGVuIHdlIHN1
Y2NlZWQsIGVsc2Ugd2UgZmFpbC4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUu
anM6CisgICAgICAgIChBcnJheVJlZlR5cGUucHJvdG90eXBlLnVuaWZ5SW1wbCk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qczoKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9GdW5jLmpzOgorICAgICAgICAoRnVuYy5wcm90b3R5cGUuZ2V0IHJl
dHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGluZmVyVHlw
ZXNGb3JDYWxsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoK
KyAgICAgICAgKHBhcnNlRnVuY0RlY2wpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChwcmVwYXJlKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzOgorICAgICAgICAoUHRyVHlwZS5wcm90b3R5cGUudW5p
ZnlJbXBsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3Zlcmxv
YWRJbXBsLmpzOgorICAgICAgICAocmVzb2x2ZU92ZXJsb2FkSW1wbCk6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOiBBZGRlZC4KKyAgICAgICAg
KG9wZXJhdG9yLlQuVCk6CisgICAgICAgIChvcGVyYXRvci5ULkVxdWF0YWJsZS5ib29sKToKKyAg
ICAgICAgKG9wZXJhdG9yLmJvb2wpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzOiBSZW1vdmVkLgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbDoKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzOgorICAgICAgICAoVHlwZVJlZi5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAoVHlwZVJlZik6CisKIDIwMTctMDktMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgQyBBUEkgdG8gcmV0
cmlldmUgdGhlIG9yaWdpbmF0aW5nIHBhZ2Ugb2YgYSBXS0Rvd25sb2FkCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYg
QEAgbG9hZCgiQm9vbExpdGVyYWwuanMiKTsKIGxvYWQoIkNhbGxBc3NpZ25tZW50LmpzIik7CiBs
b2FkKCJDYWxsRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiQ2FsbEZ1bmN0aW9uLmpzIik7Ci1sb2Fk
KCJDYXN0RXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiQ2hlY2suanMiKTsKIGxvYWQoIkNoZWNrTGl0
ZXJhbFR5cGVzLmpzIik7CiBsb2FkKCJDaGVja1JlY3Vyc2lvbi5qcyIpOwpAQCAtNjUsNiArNjQs
NyBAQCBsb2FkKCJGdW5jRGVmLmpzIik7CiBsb2FkKCJGdW5jSW5zdGFudGlhdG9yLmpzIik7CiBs
b2FkKCJGdW5jUGFyYW1ldGVyLmpzIik7CiBsb2FkKCJGdW5jdGlvbkxpa2VCbG9jay5qcyIpOwor
bG9hZCgiSW5mZXJUeXBlc0ZvckNhbGwuanMiKTsKIGxvYWQoIklubGluZS5qcyIpOwogbG9hZCgi
SW5saW5lci5qcyIpOwogbG9hZCgiSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIik7CkBAIC0xMDAs
OCArMTAwLDcgQEAgbG9hZCgiUmVzb2x2ZVR5cGVEZWZzLmpzIik7CiBsb2FkKCJSZXR1cm4uanMi
KTsKIGxvYWQoIlJldHVybkNoZWNrZXIuanMiKTsKIGxvYWQoIlJldHVybkV4Y2VwdGlvbi5qcyIp
OwotbG9hZCgiU3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanMiKTsKLWxvYWQoIlN0YW5kYXJkTGli
cmFyeVByb2xvZ3VlLmpzIik7Citsb2FkKCJTdGFuZGFyZExpYnJhcnkuanMiKTsKIGxvYWQoIlN0
cnVjdExheW91dEJ1aWxkZXIuanMiKTsKIGxvYWQoIlN0cnVjdFR5cGUuanMiKTsKIGxvYWQoIlN1
YnN0aXR1dGlvbi5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJy
YXlSZWZUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FycmF5UmVmVHlwZS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSwx
MCBAQAogY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVmZXJlbmNlVHlwZSB7CiAgICAgdW5p
ZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCiAgICAgewotICAgICAgICBpZiAoIShv
dGhlciBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpIHsKKyAgICAgICAgaWYgKG90aGVyIGluc3Rh
bmNlb2YgQXJyYXlSZWZUeXBlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5hZGRyZXNzU3BhY2Ug
IT0gb3RoZXIuYWRkcmVzc1NwYWNlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlU
eXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodGhp
cy5hZGRyZXNzU3BhY2UgIT0gInRocmVhZCIpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDE2ICszMiwyMCBAQCBjbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJl
c3Npb24gCiAgICAgICAgIHRoaXMuX3R5cGVBcmd1bWVudHMgPSB0eXBlQXJndW1lbnRzOwogICAg
ICAgICB0aGlzLl9hcmd1bWVudExpc3QgPSBhcmd1bWVudExpc3Q7CiAgICAgICAgIHRoaXMuZnVu
YyA9IG51bGw7CisgICAgICAgIHRoaXMuX2lzQ2FzdCA9IGZhbHNlOworICAgICAgICB0aGlzLl9y
ZXR1cm5UeXBlID0gbnVsbDsKICAgICB9CiAgICAgCiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0
aGlzLl9uYW1lOyB9CiAgICAgZ2V0IHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiB0aGlzLl90eXBl
QXJndW1lbnRzOyB9CiAgICAgZ2V0IGFyZ3VtZW50TGlzdCgpIHsgcmV0dXJuIHRoaXMuX2FyZ3Vt
ZW50TGlzdDsgfQorICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9pc0Nhc3Q7IH0KKyAg
ICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KICAgICAKICAg
ICByZXNvbHZlKG92ZXJsb2FkKQogICAgIHsKICAgICAgICAgdGhpcy5mdW5jID0gb3ZlcmxvYWQu
ZnVuYzsKLSAgICAgICAgdGhpcy5hY3R1YWxUeXBlQXJndW1lbnRzID0gb3ZlcmxvYWQudHlwZUFy
Z3VtZW50czsKKyAgICAgICAgdGhpcy5hY3R1YWxUeXBlQXJndW1lbnRzID0gb3ZlcmxvYWQudHlw
ZUFyZ3VtZW50cy5tYXAoVHlwZVJlZi53cmFwKTsKICAgICAgICAgbGV0IHJlc3VsdCA9IG92ZXJs
b2FkLmZ1bmMucmV0dXJuVHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKICAgICAgICAgICAg
IG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4
dCk7CiAgICAgICAgIGlmICghcmVzdWx0KQpAQCAtNDksOSArNTMsMjcgQEAgY2xhc3MgQ2FsbEV4
cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKKyAgICBiZWNvbWVDYXN0KHJldHVyblR5cGUpCisgICAgeworICAgICAgICB0aGlz
Ll9yZXR1cm5UeXBlID0gbmV3IFR5cGVSZWYodGhpcy5vcmlnaW4sIHRoaXMubmFtZSwgdGhpcy5f
dHlwZUFyZ3VtZW50cyk7CisgICAgICAgIHRoaXMuX3JldHVyblR5cGUudHlwZSA9IHJldHVyblR5
cGU7CisgICAgICAgIHRoaXMuX25hbWUgPSAib3BlcmF0b3IgY2FzdCI7CisgICAgICAgIHRoaXMu
X2lzQ2FzdCA9IHRydWU7CisgICAgICAgIHRoaXMuX3R5cGVBcmd1bWVudHMgPSBbXTsKKyAgICB9
CisgICAgCisgICAgc2V0Q2FzdERhdGEocmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIHRoaXMu
X3JldHVyblR5cGUgPSByZXR1cm5UeXBlOworICAgICAgICB0aGlzLl9pc0Nhc3QgPSB0cnVlOwor
ICAgIH0KKyAgICAKICAgICB0b1N0cmluZygpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5u
YW1lICsgIjwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4oIiArIHRoaXMuYXJndW1lbnRMaXN0
ICsgIikiOworICAgICAgICByZXR1cm4gKHRoaXMuaXNDYXN0ID8gIm9wZXJhdG9yICIgKyB0aGlz
LnJldHVyblR5cGUgOiB0aGlzLm5hbWUpICsKKyAgICAgICAgICAgICI8IiArIHRoaXMudHlwZUFy
Z3VtZW50cyArICI+IiArCisgICAgICAgICAgICAodGhpcy5hY3R1YWxUeXBlQXJndW1lbnRzID8g
Ijw8IiArIHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyArICI+PiIgOiAiIikgKworICAgICAgICAg
ICAgIigiICsgdGhpcy5hcmd1bWVudExpc3QgKyAiKSI7CiAgICAgfQogfQogCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMTc1NykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTIzNCw3ICsyMzQsNyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgY2hlY2tDYXN0T3JDYWxsRXhwcmVzc2lv
bihub2RlLCByZXR1cm5UeXBlKQorICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7
CiAgICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCiAg
ICAgICAgICAgICB0eXBlQXJndW1lbnQudmlzaXQodGhpcyk7CkBAIC0yNDUsOCArMjQ1LDggQEAg
Y2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgcmV0dXJuIFR5cGVS
ZWYud3JhcChuZXdBcmd1bWVudCk7CiAgICAgICAgIH0pOwogICAgICAgICBub2RlLmFyZ3VtZW50
VHlwZXMgPSBhcmd1bWVudFR5cGVzOwotICAgICAgICBpZiAocmV0dXJuVHlwZSkKLSAgICAgICAg
ICAgIHJldHVyblR5cGUudmlzaXQodGhpcyk7CisgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUp
CisgICAgICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7CiAgICAgICAgIAogICAg
ICAgICBsZXQgb3ZlcmxvYWQgPSBudWxsOwogICAgICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKQEAg
LTI1OSwxOCArMjU5LDIzIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVz
QnlOYW1lV2l0aFR5cGVWYXJpYWJsZShub2RlLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOwogICAgICAg
ICAgICAgaWYgKCFzaWduYXR1cmVzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIG5vZGUudHlw
ZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CisgICAgICAgICAgICBvdmVy
bG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1lbnRz
LCBhcmd1bWVudFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwogICAgICAgICAgICAgaWYgKG92ZXJs
b2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmYWlsdXJlcy5w
dXNoKC4uLm92ZXJsb2FkLmZhaWx1cmVzKTsKICAgICAgICAgICAgIG92ZXJsb2FkID0gbnVsbDsK
ICAgICAgICAgfQogICAgICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVybG9h
ZCA9IHRoaXMuX3Byb2dyYW0ucmVzb2x2ZUZ1bmNPdmVybG9hZCgKLSAgICAgICAgICAgICAgICBu
b2RlLm5hbWUsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7
CisgICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAg
ICAgICAgbm9kZS5wb3NzaWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVu
dFR5cGVzLCBub2RlLnJldHVyblR5cGUpOwogICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5j
KSB7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7
Ci0gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZv
ciBjYWxsIjsKKyAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICJEaWQgbm90IGZpbmQgZnVu
Y3Rpb24gZm9yIGNhbGwgd2l0aCAiOworICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGVBcmd1
bWVudHMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJ0eXBlIGFyZ3Vt
ZW50cyA8IiArIG5vZGUudHlwZUFyZ3VtZW50cyArICI+IGFuZCAiOworICAgICAgICAgICAgICAg
IG1lc3NhZ2UgKz0gImFyZ3VtZW50IHR5cGVzICgiICsgYXJndW1lbnRUeXBlcyArICIpIjsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlICs9IiBhbmQgcmV0dXJuIHR5cGUgIiArIG5vZGUucmV0dXJuVHlwZTsKICAgICAgICAg
ICAgICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
ICs9ICIsIGJ1dCBjb25zaWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1l
c3NhZ2UpOwpAQCAtMjg2LDE1ICsyOTEsNSBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5vZGUucmVzb2x2ZShvdmVybG9hZCk7CiAg
ICAgfQotCi0gICAgdmlzaXRDYXN0RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuY2hlY2tDYXN0T3JDYWxsRXhwcmVzc2lvbihub2RlLCBub2RlLnJldHVyblR5cGUp
OwotICAgIH0KLSAgICAKLSAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5jaGVja0Nhc3RPckNhbGxFeHByZXNzaW9uKG5vZGUsIHVuZGVmaW5l
ZCk7Ci0gICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFs
dWF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZh
bHVhdG9yLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FdmFsdWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsOCBAQCBjbGFz
cyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKIAogICAgIHZpc2l0TG9naWNhbE5vdChub2Rl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEVQdHIuYm94KCFub2RlLm9wZXJhbmQudmlzaXQodGhp
cykubG9hZFZhbHVlKCkpOworICAgICAgICBsZXQgcmVzdWx0ID0gIW5vZGUub3BlcmFuZC52aXNp
dCh0aGlzKS5sb2FkVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlc3VsdCk7CiAg
ICAgfQogICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
NyBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IHBhcmFtZXRlcnMoKSB7IHJl
dHVybiB0aGlzLl9wYXJhbWV0ZXJzOyB9CiAgICAgZ2V0IHBhcmFtZXRlclR5cGVzKCkgeyByZXR1
cm4gdGhpcy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnR5cGUpOyB9CiAg
ICAgZ2V0IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQorICAgIGdldCByZXR1cm5U
eXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKCkgeyByZXR1cm4gdGhpcy5pc0Nhc3QgPyB0aGlzLnJl
dHVyblR5cGUgOiBudWxsOyB9CiAgICAgCiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBGdW5jOyB9
CiAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlh
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJ
bnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDE0IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgIC8vIHJlc29sdXRpb25zIG9uIHRo
ZSBvcmlnaW5hbCBQcm9ncmFtLgogICAgIGdldFVuaXF1ZShmdW5jLCB0eXBlQXJndW1lbnRzKQog
ICAgIHsKKyAgICAgICAgY2xhc3MgRmluZFR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3Igewor
ICAgICAgICAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkgeworICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlOiAiICsgbm9kZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIHR5
cGVBcmd1bWVudHMpCisgICAgICAgICAgICB0eXBlQXJndW1lbnQudmlzaXQobmV3IEZpbmRUeXBl
VmFyaWFibGUoKSk7CisgICAgICAgIAogICAgICAgICBsZXQgaW5zdGFuY2VzID0gdGhpcy5faW5z
dGFuY2VzLmdldChmdW5jKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZXMpCiAgICAgICAgICAgICB0
aGlzLl9pbnN0YW5jZXMuc2V0KGZ1bmMsIGluc3RhbmNlcyA9IFtdKTsKQEAgLTY0LDcgKzcyLDcg
QEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhh
dmUgdG8gcmUtcmVzb2x2ZSB0aGUgZnVuY3Rpb24gY2FsbCwgaWYgaXQgd2FzIGEgY2FsbCB0byBh
IHByb3RvY29sCiAgICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlLgogICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuZnVuYyBpbnN0YW5jZW9mIFByb3RvY29sRnVuY0RlY2wpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gdGhpc0luc3RhbnRpYXRvci5fcHJvZ3JhbS5yZXNv
bHZlRnVuY092ZXJsb2FkKHJlc3VsdC5uYW1lLCByZXN1bHQudHlwZUFyZ3VtZW50cywgcmVzdWx0
LmFyZ3VtZW50VHlwZXMpOworICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNv
bHZlT3ZlcmxvYWRJbXBsKHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVzdWx0LnR5cGVBcmd1
bWVudHMsIHJlc3VsdC5hcmd1bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlwZUZvck92ZXJsb2Fk
UmVzb2x1dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUg
cHJvdG9jb2wgc2lnbmF0dXJlIGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3RhbnRpYXRpb246ICIg
KyByZXN1bHQuZnVuYyArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpcbiIg
KyBvdmVybG9hZC5mYWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnJlc29sdmUob3ZlcmxvYWQpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMJKHJldmlzaW9uIDIyMTc1NykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2IEBAIGNsYXNzIEZ1bmN0aW9uTGlrZUJsb2NrIGV4
dGVuZHMgVmFsdWUgewogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biAiKFsmXSAoIiArIHRoaXMucGFyYW1ldGVycyArICIpIC0+ICIgKyB0aGlzLnJldHVyblR5cGUg
KyAiIHsgIiArIHRoaXMuYmxvY2sgKyAiIH0oIiArIHRoaXMuYXJndW1lbnRMaXN0ICsgIikpIjsK
KyAgICAgICAgcmV0dXJuICIoWyZdICgiICsgdGhpcy5wYXJhbWV0ZXJzICsgIikgLT4gIiArIHRo
aXMucmV0dXJuVHlwZSArICIgeyAiICsgdGhpcy5ib2R5ICsgIiB9KCIgKyB0aGlzLmFyZ3VtZW50
TGlzdCArICIpKSI7CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBpbmZlclR5cGVzRm9yQ2FsbChmdW5j
LCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQoreworICAgIGlmICh0
eXBlQXJndW1lbnRzLmxlbmd0aCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBmdW5jLnR5cGVQ
YXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIChw
YXNzZWQgIiArIHR5cGVBcmd1bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy50eXBl
UGFyYW1ldGVycy5sZW5ndGggKyAiKSIpfTsKKyAgICBpZiAoYXJndW1lbnRUeXBlcy5sZW5ndGgg
IT0gZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcg
T3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50
cyAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzLmxlbmd0aCArICIsIHJlcXVpcmUgIiArIGZ1bmMu
cGFyYW1ldGVycy5sZW5ndGggKyAiKSIpfTsKKyAgICBsZXQgdW5pZmljYXRpb25Db250ZXh0ID0g
bmV3IFVuaWZpY2F0aW9uQ29udGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IGFy
Z3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKKyAgICAgICAgbGV0IHBhcmFtZXRlciA9IGZ1bmMu
dHlwZVBhcmFtZXRlcnNbaV07CisgICAgICAgIGlmICghYXJndW1lbnQudW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcg
T3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiVHlwZSBhcmd1bWVudCAjIiArIChpICsg
MSkgKyAiIGZvciBwYXJhbWV0ZXIgIiArIHBhcmFtZXRlci5uYW1lICsgIiBkb2VzIG5vdCBtYXRj
aCAocGFzc2VkICIgKyBhcmd1bWVudCArICIsIHJlcXVpcmUgIiArIHBhcmFtZXRlciArICIpIil9
OworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50VHlwZXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQorICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKKyAgICAgICAgaWYg
KCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJhbWV0
ZXJzW2ldLnR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1
bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVy
c1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5
cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpfTsK
KyAgICB9CisgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnkodW5pZmljYXRp
b25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5l
dyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAiICsgZnVuYy5y
ZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OworICAgIGlmICgh
dW5pZmljYXRpb25Db250ZXh0LnZlcmlmeSgpKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmU6IG5l
dyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJWaW9sYXRlcyB0eXBlIHZhcmlhYmxl
IGNvbnN0cmFpbnRzIil9OworICAgIGxldCBzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMgPSAhdHlw
ZUFyZ3VtZW50cy5sZW5ndGg7CisgICAgaWYgKHNob3VsZEJ1aWxkVHlwZUFyZ3VtZW50cykKKyAg
ICAgICAgdHlwZUFyZ3VtZW50cyA9IFtdOworICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Yg
ZnVuYy50eXBlUGFyYW1ldGVycykgeworICAgICAgICBsZXQgdHlwZUFyZ3VtZW50ID0gdW5pZmlj
YXRpb25Db250ZXh0LmZpbmQodHlwZVBhcmFtZXRlcik7CisgICAgICAgIGlmICh0eXBlQXJndW1l
bnQgPT0gdHlwZVBhcmFtZXRlcikKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3IE92
ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlR5cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFy
YW1ldGVyICsgIiBkaWQgbm90IGdldCBhc3NpZ25lZCBhIHR5cGUiKX07CisgICAgICAgIGlmIChz
aG91bGRCdWlsZFR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICB0eXBlQXJndW1lbnRzLnB1c2go
dHlwZUFyZ3VtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHtmdW5jLCB1bmlmaWNhdGlvbkNvbnRl
eHQsIHR5cGVBcmd1bWVudHN9OworfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9JbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW5saW5lLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgZnVuY3Rp
b24gX2lubGluZUZ1bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogCiBmdW5jdGlvbiByZXNvbHZlSW5s
aW5lZEZ1bmN0aW9uKHByb2dyYW0sIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMp
CiB7Ci0gICAgbGV0IG92ZXJsb2FkID0gcHJvZ3JhbS5yZXNvbHZlRnVuY092ZXJsb2FkKG5hbWUs
IHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMpOworICAgIGxldCBvdmVybG9hZCA9IHByb2dy
YW0uZ2xvYmFsTmFtZUNvbnRleHQucmVzb2x2ZUZ1bmNPdmVybG9hZChuYW1lLCB0eXBlQXJndW1l
bnRzLCBhcmd1bWVudFR5cGVzKTsKICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAgIHJl
dHVybiBvdmVybG9hZC5mYWlsdXJlczsKICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMudHlwZVBhcmFt
ZXRlcnMpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwkocmV2aXNp
b24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw4ICsxMDMsOSBAQCBjbGFzcyBMZXhlciB7CiAgICAgICAgIAog
ICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGRvIFVuaWNvZGUuCiAgICAgICAgIGlmICgvXlte
XGRcV11cdyovLnRlc3QocmVsZXZhbnRUZXh0KSkgewotICAgICAgICAgICAgaWYgKFsic3RydWN0
IiwgInByb3RvY29sIiwgInR5cGVkZWYiLCAiaWYiLCAiZWxzZSIsICJlbnVtIiwgImNvbnRpbnVl
IiwgImJyZWFrIiwgInN3aXRjaCIsICJjYXNlIiwgImRlZmF1bHQiLCAiZm9yIiwgIndoaWxlIiwg
ImRvIiwgInJldHVybiIsICJzaXplb2YiLCAiY29uc3RhbnQiLCAiZGV2aWNlIiwgInRocmVhZGdy
b3VwIiwgInRocmVhZCIsICJvcGVyYXRvciIsICJudWxsIiwgInRydWUiLCAiZmFsc2UiXS5pbmNs
dWRlcyhSZWdFeHAubGFzdE1hdGNoKSkKKyAgICAgICAgICAgIGlmICgvXihzdHJ1Y3R8cHJvdG9j
b2x8dHlwZWRlZnxpZnxlbHNlfGVudW18Y29udGludWV8YnJlYWt8c3dpdGNofGNhc2V8ZGVmYXVs
dHxmb3J8d2hpbGV8ZG98cmV0dXJufGNvbnN0YW50fGRldmljZXx0aHJlYWRncm91cHx0aHJlYWR8
b3BlcmF0b3J8bnVsbHx0cnVlfGZhbHNlKSQvLnRlc3QoUmVnRXhwLmxhc3RNYXRjaCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgia2V5d29yZCIpOworCiAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0KCJpZGVudGlmaWVyIik7CiAgICAgICAgIH0KIApJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHJldmlzaW9uIDIyMTc1NykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw2IEBAIGZ1bmN0aW9uIGlzV2lsZGNhcmRLaW5kKGtpbmQpCiBjbGFz
cyBOYW1lQ29udGV4dCB7CiAgICAgY29uc3RydWN0b3IoZGVsZWdhdGUpCiAgICAgewotICAgICAg
ICB0aGlzLl9mdW5jTWFwID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFw
KCk7CiAgICAgICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKICAgICAgICAgdGhpcy5fZGVmaW5l
ZCA9IG51bGw7CkBAIC01MSw5ICs1MCw4IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAgICAg
Y2FzZSBWYWx1ZToKICAgICAgICAgY2FzZSBUeXBlOgogICAgICAgICBjYXNlIFByb3RvY29sOgot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDsKICAgICAgICAgY2FzZSBGdW5jOgotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2Z1bmNNYXA7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFw
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQga2lu
ZDogIiArIGtpbmQpOwogICAgICAgICB9CkBAIC03Miw5ICs3MCwxNCBAQCBjbGFzcyBOYW1lQ29u
dGV4dCB7CiAgICAgICAgIAogICAgICAgICBpZiAodGhpbmcua2luZCA9PSBGdW5jKSB7CiAgICAg
ICAgICAgICB0aGlzLl9zZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIGxldCBhcnJheSA9IHRo
aXMuX2Z1bmNNYXAuZ2V0KHRoaW5nLm5hbWUpOwotICAgICAgICAgICAgaWYgKCFhcnJheSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9mdW5jTWFwLnNldCh0aGluZy5uYW1lLCBhcnJheSA9IFtdKTsK
KyAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuX21hcC5nZXQodGhpbmcubmFtZSk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICAgICAgYXJyYXkgPSBbXTsKKyAgICAg
ICAgICAgICAgICBhcnJheS5raW5kID0gRnVuYzsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXAu
c2V0KHRoaW5nLm5hbWUsIGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChh
cnJheS5raW5kICE9IEZ1bmMpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
dGhpbmcub3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCByZXVzZSB0eXBlIG5hbWUgZm9yIGZ1
bmN0aW9uOiAiICsgdGhpbmcubmFtZSk7CiAgICAgICAgICAgICBhcnJheS5wdXNoKHRoaW5nKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTQsNiArOTcsMTUgQEAgY2xhc3Mg
TmFtZUNvbnRleHQgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICBy
ZXNvbHZlRnVuY092ZXJsb2FkKG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJl
dHVyblR5cGUpCisgICAgeworICAgICAgICBsZXQgZnVuY3Rpb25zID0gdGhpcy5nZXQoRnVuYywg
bmFtZSk7CisgICAgICAgIGlmICghZnVuY3Rpb25zKQorICAgICAgICAgICAgcmV0dXJuIHtmYWls
dXJlczogW119OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc29sdmVPdmVybG9hZEltcGwo
ZnVuY3Rpb25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKTsKKyAg
ICB9CisgICAgCiAgICAgZ2V0IGN1cnJlbnRTdGF0ZW1lbnQoKQogICAgIHsKICAgICAgICAgaWYg
KHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQpCkBAIC0xNjUsMTEgKzE3NywxMyBAQCBjbGFzcyBOYW1l
Q29udGV4dCB7CiAgICAgCiAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkKICAgICB7Ci0gICAgICAg
IGZvciAobGV0IHZhbHVlIG9mIHRoaXMuX21hcC52YWx1ZXMoKSkKKyAgICAgICAgZm9yIChsZXQg
dmFsdWUgb2YgdGhpcy5fbWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAodmFsdWUgaW5z
dGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgdmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZ1bmM7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB5aWVsZCB2YWx1ZTsKLSAgICAgICAgZm9y
IChsZXQgZnVuY3Mgb2YgdGhpcy5fZnVuY01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgZm9y
IChsZXQgZnVuYyBvZiBmdW5jcykKLSAgICAgICAgICAgICAgICB5aWVsZCBmdW5jOwogICAgICAg
ICB9CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJl
c29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05h
bWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
IGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBsZXQgY2hlY2tl
ciA9IG5ldyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgICAgICBmb3IgKGxldCBzdGF0
ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCiAgICAgICAgICAgICBuYW1lQ29udGV4
dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNpdChjaGVja2VyKSk7
CisgICAgICAgIG5vZGUuZ2xvYmFsTmFtZUNvbnRleHQgPSBuYW1lQ29udGV4dDsKICAgICB9CiAg
ICAgCiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250ZXh0KG5vZGUpCkBA
IC0xMDgsNiArMTA5LDMxIEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3Igewog
ICAgICAgICBub2RlLnByb3RvY29sRGVjbCA9IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgZGV0
ZXJtaW5lUG9zc2libGVPdmVybG9hZHMobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBmdW5jcyA9
IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAgICAgICBpZiAoZnVu
Y3MpCisgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoVHlw
ZSwgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmlu
ZCBhbnkgZnVuY3Rpb24gb3IgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAg
IG5vZGUuYmVjb21lQ2FzdCh0eXBlKTsKKyAgICAgICAgICAgIG5vZGUucG9zc2libGVPdmVybG9h
ZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgIm9wZXJhdG9yIGNhc3QiKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZS5wb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBh
bnkgb3BlcmF0b3IgY2FzdCBpbXBsZW1lbnRhdGlvbnMgaW4gY2FzdCB0byAiICsgdHlwZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmlzaXRQcm90b2NvbEZ1bmNEZWNsKG5vZGUpCisg
ICAgeworICAgICAgICB0aGlzLnZpc2l0RnVuYyhub2RlKTsKKyAgICAgICAgbGV0IGZ1bmNzID0g
dGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUubmFtZSk7CisgICAgICAgIGlmICghZnVu
Y3MpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJDYW5ub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVkICIgKyBub2RlLm5hLGUpOwor
ICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAgfQorICAgIAogICAg
IHZpc2l0VHlwZURlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3
IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKQEAgLTIwOSw2ICsyMzUsMjAgQEAgY2xh
c3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lv
bihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9kZS50
eXBlQXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIGxldCBmdW5jcyA9IHRoaXMuX25hbWVD
b250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAgICAgICBpZiAoZnVuY3MpCisgICAgICAg
ICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoVHlwZSwgbm9kZS5uYW1l
KTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBhbnkgZnVuY3Rp
b24gb3IgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIG5vZGUuYmVjb21l
Q2FzdCh0eXBlKTsKKyAgICAgICAgICAgIG5vZGUucG9zc2libGVPdmVybG9hZHMgPSB0aGlzLl9u
YW1lQ29udGV4dC5nZXQoRnVuYywgIm9wZXJhdG9yIGNhc3QiKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZS5wb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVF
cnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBhbnkgb3BlcmF0b3Ig
Y2FzdCBpbXBsZW1lbnRhdGlvbnMgaW4gY2FzdCB0byAiICsgdHlwZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CiAgICAgfQog
fQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjE3
NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxNyArMjcsMTIgQEAKIGNsYXNzIE5vZGUgewogICAgIHZpc2l0KHZpc2l0b3Ip
CiAgICAgewotICAgICAgICBsZXQgbWVtb1RhYmxlID0gdmlzaXRvci5fbWVtb1RhYmxlOwotICAg
ICAgICBpZiAobWVtb1RhYmxlLmhhcyh0aGlzKSkKLSAgICAgICAgICAgIHJldHVybiBtZW1vVGFi
bGUuZ2V0KHRoaXMpOwotICAgICAgICAKICAgICAgICAgbGV0IHZpc2l0RnVuYyA9IHZpc2l0b3Jb
InZpc2l0IiArIHRoaXMuY29uc3RydWN0b3IubmFtZV07CiAgICAgICAgIGlmICghdmlzaXRGdW5j
KQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyB2aXNpdCBmdW5jdGlvbiBmb3IgIiAr
IHRoaXMuY29uc3RydWN0b3IubmFtZSArICIgaW4gIiArIHZpc2l0b3IuY29uc3RydWN0b3IubmFt
ZSk7CiAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHZpc2l0RnVuYy5jYWxsKHZpc2l0b3IsIHRo
aXMpOwogICAgICAgICBpZiAoInJldHVyblZhbHVlIiBpbiB2aXNpdG9yKQogICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSB2aXNpdG9yLnJldHVyblZhbHVlOwotICAgICAgICBtZW1vVGFibGUuc2V0
KHRoaXMsIHJldHVyblZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0K
ICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZpc2lv
biAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0
aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKK2Z1bmN0
aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2luZCwgbGluZU51bWJlck9mZnNldCwg
dGV4dCkKIHsKICAgICBsZXQgbGV4ZXIgPSBuZXcgTGV4ZXIob3JpZ2luLCBsaW5lTnVtYmVyT2Zm
c2V0LCB0ZXh0KTsKICAgICAKQEAgLTM4Miw3ICszODIsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9n
cmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgICAgICAgICByZXR1cm4gbmV3IE1ha2VBcnJheVJl
ZkV4cHJlc3Npb24odG9rZW4sIHBhcnNlUG9zc2libGVQcmVmaXgoKSk7CiAgICAgICAgIGlmICh0
b2tlbiA9IHRyeUNvbnN1bWUoIiEiKSkgewogICAgICAgICAgICAgbGV0IHJlbWFpbmRlciA9IHBh
cnNlUG9zc2libGVQcmVmaXgoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTG9naWNhbE5vdCh0
b2tlbiwgbmV3IENhc3RFeHByZXNzaW9uKHJlbWFpbmRlci5vcmlnaW4sIG5ldyBUeXBlUmVmKHJl
bWFpbmRlci5vcmlnaW4sICJib29sIiwgW10pLCBbXSwgW3JlbWFpbmRlcl0pKTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgTG9naWNhbE5vdCh0b2tlbiwgbmV3IENhbGxFeHByZXNzaW9uKHJlbWFp
bmRlci5vcmlnaW4sICJib29sIiwgW10sIFtyZW1haW5kZXJdKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHBhcnNlUG9zc2libGVTdWZmaXgoKTsKICAgICB9CkBAIC02MjcsMjAgKzYyNywy
MiBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgICAgIGxl
dCBvcmlnaW47CiAgICAgICAgIGxldCByZXR1cm5UeXBlOwogICAgICAgICBsZXQgbmFtZTsKKyAg
ICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzOwogICAgICAgICBsZXQgaXNDYXN0OwogICAgICAgICBs
ZXQgb3BlcmF0b3JUb2tlbiA9IHRyeUNvbnN1bWUoIm9wZXJhdG9yIik7CiAgICAgICAgIGlmIChv
cGVyYXRvclRva2VuKSB7CiAgICAgICAgICAgICBvcmlnaW4gPSBvcGVyYXRvclRva2VuOworICAg
ICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBwYXJzZVR5cGVQYXJhbWV0ZXJzKCk7CiAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gcGFyc2VUeXBlKCk7Ci0gICAgICAgICAgICBuYW1lID0gQ2FzdEV4
cHJlc3Npb24uZnVuY3Rpb25OYW1lOworICAgICAgICAgICAgbmFtZSA9ICJvcGVyYXRvciBjYXN0
IjsKICAgICAgICAgICAgIGlzQ2FzdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gcGFyc2VUeXBlKCk7CiAgICAgICAgICAgICBvcmlnaW4gPSByZXR1
cm5UeXBlLm9yaWdpbjsKICAgICAgICAgICAgIG5hbWUgPSBwYXJzZUZ1bmNOYW1lKCk7CisgICAg
ICAgICAgICB0eXBlUGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAg
ICAgIGlzQ2FzdCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGxldCB0eXBlUGFyYW1ldGVy
cyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBwYXJz
ZVBhcmFtZXRlcnMoKTsKICAgICAgICAgcmV0dXJuIG5ldyBGdW5jKG9yaWdpbiwgbmFtZSwgcmV0
dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMsIGlzQ2FzdCk7CiAgICAgfQpAQCAt
NzIyLDcgKzcyNCw3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgbGluZU51bWIK
ICAgICAgICAgICAgIGxleGVyLm5leHQoKTsKICAgICAgICAgZWxzZSBpZiAodG9rZW4udGV4dCA9
PSAidHlwZWRlZiIpCiAgICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVR5cGVEZWYoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQgPT0gIm5hdGl2ZSIpCisgICAgICAgIGVsc2UgaWYg
KC8qb3JpZ2luS2luZCA9PSAibmF0aXZlIiAmJiAqL3Rva2VuLnRleHQgPT0gIm5hdGl2ZSIpCiAg
ICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZU5hdGl2ZSgpKTsKICAgICAgICAgZWxzZSBpZiAo
dG9rZW4udGV4dCA9PSAic3RydWN0IikKICAgICAgICAgICAgIHByb2dyYW0uYWRkKHBhcnNlU3Ry
dWN0VHlwZSgpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5q
cwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJl
cGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOCBAQAogZnVuY3Rpb24gcHJlcGFy
ZShvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBu
ZXcgUHJvZ3JhbSgpOwotICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3RkbGliL3Byb2xv
Z3VlIiwgMjgsIHN0YW5kYXJkTGlicmFyeVByb2xvZ3VlKTsKLSAgICBwYXJzZShwcm9ncmFtLCBv
cmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwotICAgIHBhcnNlKHByb2dyYW0sICIvaW50
ZXJuYWwvc3RkbGliL2VwaWxvZ3VlIiwgMjgsIHN0YW5kYXJkTGlicmFyeUVwaWxvZ3VlKTsKKyAg
ICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0ZGxpYiIsICJuYXRpdmUiLCAyNywgc3RhbmRh
cmRMaWJyYXJ5KTsKKyAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sICJ1c2VyIiwgbGluZU51bWJl
ck9mZnNldCwgdGV4dCk7CiAgICAgcmVzb2x2ZU5hbWVzKHByb2dyYW0pOwogICAgIHJlc29sdmVU
eXBlRGVmcyhwcm9ncmFtKTsKICAgICBjaGVjayhwcm9ncmFtKTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgs
MjMgKzU4LDYgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB0aGlzLl90
b3BMZXZlbFN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKLSAgICByZXNv
bHZlRnVuY092ZXJsb2FkKG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVy
blR5cGUpCi0gICAgewotICAgICAgICBsZXQgZnVuY3Rpb25zID0gdGhpcy5mdW5jdGlvbnMuZ2V0
KG5hbWUpOwotICAgICAgICBpZiAoIWZ1bmN0aW9ucykKLSAgICAgICAgICAgIHJldHVybiB7ZmFp
bHVyZXM6IFtdfTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXNvbHZlT3ZlcmxvYWRJbXBs
KGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7Ci0g
ICAgfQotICAgIAotICAgIGdldCBuYW1lQ29udGV4dCgpCi0gICAgewotICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IE5hbWVDb250ZXh0KCk7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiB0
aGlzLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoc3RhdGVtZW50
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAgdG9TdHJpbmcoKQog
ICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl90b3BMZXZlbFN0YXRlbWVudHMubGVuZ3RoKQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwkocmV2
aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xE
ZWNsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGNsYXNzIFByb3RvY29sRGVj
bCBleHRlbmRzIFByb3RvY29sIHsKICAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0gdGhpcy5z
aWduYXR1cmVzQnlOYW1lKG90aGVyU2lnbmF0dXJlLm5hbWUpOwogICAgICAgICAgICAgaWYgKCFz
aWduYXR1cmVzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxl
dCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgW10sIG90aGVyU2ln
bmF0dXJlLnBhcmFtZXRlclR5cGVzKTsKKyAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29s
dmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgW10sIG90aGVyU2lnbmF0dXJlLnBhcmFtZXRlclR5
cGVzLCBvdGhlclNpZ25hdHVyZS5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAg
ICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBsZXQgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlID0KQEAgLTkwLDcgKzkw
LDcgQEAgY2xhc3MgUHJvdG9jb2xEZWNsIGV4dGVuZHMgUHJvdG9jb2wgewogICAgICAgICBsZXQg
c2lnbmF0dXJlcyA9IHRoaXMuc2lnbmF0dXJlczsKICAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJl
IG9mIHNpZ25hdHVyZXMpIHsKICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZS52aXNp
dChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gdGhpcy5wcm9ncmFt
LnJlc29sdmVGdW5jT3ZlcmxvYWQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZS50eXBlUGFyYW1l
dGVycywgc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKTsKKyAgICAgICAgICAgIGxldCBvdmVybG9h
ZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlLnBvc3NpYmxlT3ZlcmxvYWRzLCBzaWdu
YXR1cmUudHlwZVBhcmFtZXRlcnMsIHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywgc2lnbmF0dXJl
LnJldHVyblR5dXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAgIGlmICghb3Zl
cmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkocmV2aXNpb24g
MjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQCBjbGFzcyBQdHJUeXBlIGV4dGVuZHMgUmVmZXJl
bmNlVHlwZSB7CiAgICAgewogICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFB0clR5cGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpcy5hZGRyZXNzU3Bh
Y2UgIT0gb3RoZXIuYWRkcmVzc1NwYWNlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90
aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CiAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJldmlzaW9uIDIy
MTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZElt
cGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDY2ICsyNyw1NCBAQAogZnVuY3Rpb24gcmVzb2x2
ZU92ZXJsb2FkSW1wbChmdW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJl
dHVyblR5cGUpCiB7CiAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgbGV0IHN1Y2Nlc3NlcyA9
IFtdOwogICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Rpb25zKSB7Ci0gICAgICAgIGlmICh0eXBl
QXJndW1lbnRzLmxlbmd0aCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBmdW5jLnR5cGVQYXJh
bWV0ZXJzLmxlbmd0aCkgewotICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIChw
YXNzZWQgIiArIHR5cGVBcmd1bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy50eXBl
UGFyYW1ldGVycy5sZW5ndGggKyAiKSIpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhcmd1bWVudFR5cGVzLmxlbmd0aCAhPSBmdW5jLnBhcmFtZXRlcnMu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRp
b25GYWlsdXJlKGZ1bmMsICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIChwYXNzZWQgIiArIGFy
Z3VtZW50VHlwZXMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzLmxlbmd0
aCArICIpIikpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgbGV0
IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5ldyBVbmlmaWNhdGlvbkNvbnRleHQoZnVuYy50eXBlUGFy
YW1ldGVycyk7CisgICAgICAgIGxldCBvdmVybG9hZCA9IGluZmVyVHlwZXNGb3JDYWxsKGZ1bmMs
IHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOworICAgICAgICBpZiAo
b3ZlcmxvYWQuZmFpbHVyZSkKKyAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gob3ZlcmxvYWQuZmFp
bHVyZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1Y2Nlc3Nlcy5wdXNoKG92ZXJsb2Fk
KTsKKyAgICB9CisgICAgCisgICAgaWYgKCFzdWNjZXNzZXMubGVuZ3RoKQorICAgICAgICByZXR1
cm4ge2ZhaWx1cmVzOiBmYWlsdXJlc307CisgICAgCisgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJl
c3RlZCBpbiBmdW5jdGlvbnMgdGhhdCBhcmUgYXQgbGVhc3QgYXMgc3BlY2lmaWMgYXMgYWxsIG9m
IHRoZSBvdGhlcnMuIFRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZXkgY2FuIGJlICJ0dXJuZWQg
YXJvdW5kIiBhbmQgYXBwbGllZCBvbnRvIGFsbCBvZiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRo
ZSBsaXN0LgorICAgIGxldCBwcnVuZWRTdWNjZXNzZXMgPSBbXTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IHN1Y2Nlc3Nlcy5sZW5ndGg7ICsraSkgewogICAgICAgICBsZXQgb2sgPSB0cnVlOwot
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIGxldCBhcmd1bWVudCA9IHR5cGVBcmd1bWVudHNbaV07Ci0gICAgICAgICAg
ICBsZXQgcGFyYW1ldGVyID0gZnVuYy50eXBlUGFyYW1ldGVyc1tpXTsKLSAgICAgICAgICAgIGlm
ICghYXJndW1lbnQudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBwYXJhbWV0ZXIpKSB7Ci0gICAg
ICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShm
dW5jLCAiVHlwZSBhcmd1bWVudCAjIiArIChpICsgMSkgKyAiIGZvciBwYXJhbWV0ZXIgIiArIHBh
cmFtZXRlci5uYW1lICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudCArICIs
IHJlcXVpcmUgIiArIHBhcmFtZXRlciArICIpIikpOwotICAgICAgICAgICAgICAgIG9rID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IGFyZ3VtZW50VHlwZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
YXJndW1lbnRUeXBlc1tpXSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwg
YXJndW1lbnQgdHlwZSBhdCBpID0gIiArIGkpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudFR5
cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUp
KSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9u
RmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsgKGZ1bmMucGFyYW1l
dGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1l
IDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzW2ldICsg
IiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIpKTsKLSAgICAgICAg
ICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmICghb2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKHJldHVyblR5cGUpIHsKLSAgICAgICAgICAgIGlmICghcmV0dXJuVHlwZS51bmlm
eSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMucmV0dXJuVHlwZSkpIHsKLSAgICAgICAgICAgICAg
ICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1
cm4gdHlwZSAiICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJu
VHlwZSkpOworICAgICAgICBsZXQgYXJndW1lbnRGdW5jID0gc3VjY2Vzc2VzW2ldLmZ1bmM7Cisg
ICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3VjY2Vzc2VzLmxlbmd0aDsgKytqKSB7CisgICAg
ICAgICAgICBpZiAoaSA9PSBqKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghdW5pZmljYXRpb25Db250ZXh0LnZlcmlmeSgp
KSB7Ci0gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlKGZ1bmMsICJWaW9sYXRlcyB0eXBlIHZhcmlhYmxlIGNvbnN0cmFpbnRzIikpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgbGV0IHNob3VsZEJ1aWxkVHlwZUFy
Z3VtZW50cyA9ICF0eXBlQXJndW1lbnRzLmxlbmd0aDsKLSAgICAgICAgaWYgKHNob3VsZEJ1aWxk
VHlwZUFyZ3VtZW50cykKLSAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPSBbXTsKLSAgICAgICAg
Zm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiBmdW5jLnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAg
ICAgICBsZXQgdHlwZUFyZ3VtZW50ID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodHlwZVBhcmFt
ZXRlcik7Ci0gICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50ID09IHR5cGVQYXJhbWV0ZXIpIHsK
LSAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlKGZ1bmMsICJUeXBlIHBhcmFtZXRlciAiICsgdHlwZVBhcmFtZXRlciArICIgZGlkIG5vdCBn
ZXQgYXNzaWduZWQgYSB0eXBlIikpOworICAgICAgICAgICAgbGV0IHBhcmFtZXRlckZ1bmMgPSBz
dWNjZXNzZXNbal0uZnVuYzsKKyAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IGluZmVyVHlwZXNG
b3JDYWxsKAorICAgICAgICAgICAgICAgIHBhcmFtZXRlckZ1bmMsCisgICAgICAgICAgICAgICAg
dHlwZUFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudEZ1bmMudHlwZVBhcmFtZXRlcnMgOiBbXSwK
KyAgICAgICAgICAgICAgICBhcmd1bWVudEZ1bmMucGFyYW1ldGVyVHlwZXMsCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRGdW5jLnJldHVyblR5cGVGb3JPdmVybG9hZFJlc29sdXRpb24pOworICAg
ICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CiAgICAgICAgICAgICAgICAgb2sgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50
cy5wdXNoKHR5cGVBcmd1bWVudCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFvaykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXR1cm4ge2Z1bmMsIHVuaWZpY2F0aW9uQ29udGV4
dCwgdHlwZUFyZ3VtZW50c307CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIHBydW5lZFN1
Y2Nlc3Nlcy5wdXNoKHN1Y2Nlc3Nlc1tpXSk7CisgICAgfQorICAgIAorICAgIGlmIChwcnVuZWRT
dWNjZXNzZXMubGVuZ3RoID09IDEpCisgICAgICAgIHJldHVybiBwcnVuZWRTdWNjZXNzZXNbMF07
CisgICAgCisgICAgbGV0IGFtYmlndWl0eUxpc3Q7CisgICAgbGV0IG1lc3NhZ2U7CisgICAgaWYg
KHBydW5lZFN1Y2Nlc3Nlcy5sZW5ndGggPT0gMCkgeworICAgICAgICBhbWJpZ3VpdHlMaXN0ID0g
c3VjY2Vzc2VzOworICAgICAgICBtZXNzYWdlID0gIkFtYmlndW91cyBvdmVybG9hZCAtIG5vIGZ1
bmN0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIGFsbCBvdGhlcnMiOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGFtYmlndWl0eUxpc3QgPSBwcnVuZWRTdWNjZXNzZXM7CisgICAgICAgIG1lc3NhZ2UgPSAi
QW1iaWd1b3VzIG92ZXJsb2FkIC0gZnVuY3Rpb25zIG11dHVhbGx5IGFwcGxpY2FibGUiOwogICAg
IH0KICAgICAKLSAgICByZXR1cm4ge2ZhaWx1cmVzOiBmYWlsdXJlc307CisgICAgcmV0dXJuIHtm
YWlsdXJlczogYW1iaWd1aXR5TGlzdC5tYXAob3ZlcmxvYWQgPT4gbmV3IE92ZXJsb2FkUmVzb2x1
dGlvbkZhaWx1cmUob3ZlcmxvYWQuZnVuYywgbWVzc2FnZSkpfTsKIH0KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsNyBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAg
ICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIu
dmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIg
PT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSk7CiAgICAgICAgIHJlc3VsdC5wcm90b2NvbERlY2wg
PSBub2RlLnByb3RvY29sRGVjbDsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxlT3ZlcmxvYWRzID0g
bm9kZS5wb3NzaWJsZU92ZXJsb2FkczsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCkBAIC0yNDksMTggKzI1MCwxMiBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICAgICAgICAgIHJlc3VsdC5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBlcy5t
YXAoYXJndW1lbnRUeXBlID0+IGFyZ3VtZW50VHlwZS52aXNpdCh0aGlzKSk7CiAgICAgICAgIHJl
c3VsdC5mdW5jID0gbm9kZS5mdW5jOwogICAgICAgICByZXN1bHQubmF0aXZlRnVuY0luc3RhbmNl
ID0gbm9kZS5uYXRpdmVGdW5jSW5zdGFuY2U7CisgICAgICAgIHJlc3VsdC5wb3NzaWJsZU92ZXJs
b2FkcyA9IG5vZGUucG9zc2libGVPdmVybG9hZHM7CisgICAgICAgIGlmIChub2RlLmlzQ2FzdCkK
KyAgICAgICAgICAgIHJlc3VsdC5zZXRDYXN0RGF0YShub2RlLnJldHVyblR5cGUudmlzaXQodGhp
cykpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHZpc2l0Q2FzdEV4cHJl
c3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQ2FzdEV4cHJlc3Np
b24oCi0gICAgICAgICAgICBub2RlLm9yaWdpbiwgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMp
LAotICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQgPT4gdHlw
ZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKLSAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1h
cChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0aGlzKSkpOwotICAgICAgICByZXR1cm4gdGhp
cy5wcm9jZXNzRGVyaXZlZENhbGxEYXRhKG5vZGUsIHJlc3VsdCk7Ci0gICAgfQotICAgIAogICAg
IHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBu
ZXcgQ2FsbEV4cHJlc3Npb24oCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
dGFuZGFyZExpYnJhcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisi
dXNlIHN0cmljdCI7CisKKy8vIE5PVEU6IFRoZSBuZXh0IGxpbmUgaXMgbGluZSAyOCwgYW5kIHdl
IHJlbHkgb24gdGhpcyBpbiBQcmVwYXJlLmpzLgorY29uc3Qgc3RhbmRhcmRMaWJyYXJ5ID0gYAor
Ly8gVGhpcyBpcyB0aGUgV1NMIHN0YW5kYXJkIGxpYnJhcnkuIEltcGxlbWVudGF0aW9ucyBvZiBh
bGwgb2YgdGhlc2UgdGhpbmdzIGFyZSBpbgorLy8gSW50cmluc2ljcy5qcy4gVGhlIG9ubHkgdGhp
bmcgdGhhdCBnZXRzIGRlZmluZWQgYmVmb3JlIHdlIGdldCBoZXJlIGlzIHRoZSBwcmltaXRpdmUK
Ky8vIHByb3RvY29sLgorCisvLyBOZWVkIHRvIGJvb3RzdHJhcCB2b2lkIGZpcnN0LgorbmF0aXZl
IHByaW1pdGl2ZSB0eXBlZGVmIHZvaWQ7CisKK25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiBpbnQz
MjsKK25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiB1aW50MzI7CituYXRpdmUgcHJpbWl0aXZlIHR5
cGVkZWYgYm9vbDsKK3R5cGVkZWYgaW50ID0gaW50MzI7Cit0eXBlZGVmIHVpbnQgPSB1aW50MzI7
CisKK25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiBkb3VibGU7CisKK25hdGl2ZSBpbnQgb3BlcmF0
b3IrKGludCwgaW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yKyh1aW50LCB1aW50KTsKK25hdGl2
ZSBpbnQgb3BlcmF0b3ItKGludCwgaW50KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLSh1aW50LCB1
aW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IqKGludCwgaW50KTsKK25hdGl2ZSB1aW50IG9wZXJh
dG9yKih1aW50LCB1aW50KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IvKGludCwgaW50KTsKK25hdGl2
ZSB1aW50IG9wZXJhdG9yLyh1aW50LCB1aW50KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yPT0oaW50
LCBpbnQpOworbmF0aXZlIGJvb2wgb3BlcmF0b3I9PSh1aW50LCB1aW50KTsKK25hdGl2ZSBib29s
IG9wZXJhdG9yPT0oYm9vbCwgYm9vbCk7CisKK3Byb3RvY29sIEVxdWF0YWJsZSB7CisgICAgYm9v
bCBvcGVyYXRvcj09KEVxdWF0YWJsZSwgRXF1YXRhYmxlKTsKK30KKworb3BlcmF0b3I8VD4gVCgp
Cit7CisgICAgVCBkZWZhdWx0VmFsdWU7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKwor
Ly9vcGVyYXRvcjxUPiBUKFQgeCkKKy8veworLy8gICAgcmV0dXJuIHg7CisvL30KKworb3BlcmF0
b3I8VDpFcXVhdGFibGU+IGJvb2woVCB4KQoreworICAgIHJldHVybiB4ICE9IFQoKTsKK30KKwor
bmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVFtdLCB1aW50KTsKK25hdGl2
ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4odGhyZWFkZ3JvdXAgVFtd
LCB1aW50KTsKK25hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KGRldmlj
ZSBUW10sIHVpbnQpOworbmF0aXZlIGNvbnN0YW50IFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZl
Pihjb25zdGFudCBUW10sIHVpbnQpOworYDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1N0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzCShyZXZpc2lv
biAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJh
cnlFcGlsb2d1ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8gTk9U
RTogVGhlIG5leHQgbGluZSBpcyBsaW5lIDI4LCBhbmQgd2UgcmVseSBvbiB0aGlzIGluIFByZXBh
cmUuanMuCi1jb25zdCBzdGFuZGFyZExpYnJhcnlFcGlsb2d1ZSA9IGAKLW9wZXJhdG9yIGJvb2w8
PjxUOkVxdWF0YWJsZT4oVCB4KSB7Ci0gICAgVCBkZWZhdWx0VmFsdWU7Ci0gICAgcmV0dXJuIHgg
IT0gZGVmYXVsdFZhbHVlOwotfQotYDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzCShyZXZpc2lvbiAy
MjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlQ
cm9sb2d1ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8gTk9URTog
VGhlIG5leHQgbGluZSBpcyBsaW5lIDI4LCBhbmQgd2UgcmVseSBvbiB0aGlzIGluIFByZXBhcmUu
anMuCi1jb25zdCBzdGFuZGFyZExpYnJhcnlQcm9sb2d1ZSA9IGAKLS8vIFRoaXMgaXMgdGhlIFdT
TCBzdGFuZGFyZCBsaWJyYXJ5LiBJbXBsZW1lbnRhdGlvbnMgb2YgYWxsIG9mIHRoZXNlIHRoaW5n
cyBhcmUgaW4KLS8vIEludHJpbnNpY3MuanMuIFRoZSBvbmx5IHRoaW5nIHRoYXQgZ2V0cyBkZWZp
bmVkIGJlZm9yZSB3ZSBnZXQgaGVyZSBpcyB0aGUgcHJpbWl0aXZlCi0vLyBwcm90b2NvbC4KLQot
Ly8gTmVlZCB0byBib290c3RyYXAgdm9pZCBmaXJzdC4KLW5hdGl2ZSBwcmltaXRpdmUgdHlwZWRl
ZiB2b2lkOwotCi1uYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgaW50MzI7Ci1uYXRpdmUgcHJpbWl0
aXZlIHR5cGVkZWYgdWludDMyOwotbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGJvb2w7Ci10eXBl
ZGVmIGludCA9IGludDMyOwotdHlwZWRlZiB1aW50ID0gdWludDMyOwotCi1uYXRpdmUgcHJpbWl0
aXZlIHR5cGVkZWYgZG91YmxlOwotCi1uYXRpdmUgaW50IG9wZXJhdG9yKyhpbnQsIGludCk7Ci1u
YXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7Ci1uYXRpdmUgaW50IG9wZXJhdG9yLShp
bnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvci0odWludCwgdWludCk7Ci1uYXRpdmUgaW50
IG9wZXJhdG9yKihpbnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvcioodWludCwgdWludCk7
Ci1uYXRpdmUgaW50IG9wZXJhdG9yLyhpbnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvci8o
dWludCwgdWludCk7Ci1uYXRpdmUgYm9vbCBvcGVyYXRvcj09KGludCwgaW50KTsKLW5hdGl2ZSBi
b29sIG9wZXJhdG9yPT0odWludCwgdWludCk7Ci1uYXRpdmUgYm9vbCBvcGVyYXRvcj09KGJvb2ws
IGJvb2wpOwotCi1wcm90b2NvbCBFcXVhdGFibGUgewotICAgIGJvb2wgb3BlcmF0b3I9PShFcXVh
dGFibGUsIEVxdWF0YWJsZSk7Ci19Ci0KLW9wZXJhdG9yIFQ8PjxUPihUIHgpIHsKLSAgICByZXR1
cm4geDsKLX0KLQotbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVFtdLCB1
aW50KTsKLW5hdGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4odGhy
ZWFkZ3JvdXAgVFtdLCB1aW50KTsKLW5hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3ImW108VDpwcmlt
aXRpdmU+KGRldmljZSBUW10sIHVpbnQpOwotbmF0aXZlIGNvbnN0YW50IFReIG9wZXJhdG9yJltd
PFQ6cHJpbWl0aXZlPihjb25zdGFudCBUW10sIHVpbnQpOwotYDsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQAogPHNjcmlwdCBzcmM9IkZ1bmNJbnN0YW50aWF0b3IuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkZ1bmNQYXJhbWV0ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmN0
aW9uTGlrZUJsb2NrLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJJbmZlclR5cGVzRm9yQ2Fs
bC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJbnN0YW50aWF0ZUlt
bWVkaWF0ZXMuanMiPjwvc2NyaXB0PgpAQCAtNzYsOCArNzcsNyBAQAogPHNjcmlwdCBzcmM9IlJl
dHVybi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV0dXJuQ2hlY2tlci5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iUmV0dXJuRXhjZXB0aW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQg
c3JjPSJTdGFuZGFyZExpYnJhcnlFcGlsb2d1ZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
U3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN0YW5k
YXJkTGlicmFyeS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0TGF5b3V0QnVpbGRl
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtODUsMTcgKzg1LDE3
IEBAIGZ1bmN0aW9uIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgZXhwZWMKIGZ1bmN0aW9uIGNo
ZWNrVUludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQogewogICAgIGlmICghcmVzdWx0LnR5
cGUuZXF1YWxzKHByb2dyYW0uaW50cmluc2ljcy51aW50MzIpKQotICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOyByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOiAiICsgcmVzdWx0LnR5cGUpOwogICAg
IGlmIChyZXN1bHQudmFsdWUgIT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigi
V3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiki
KTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQudmFs
dWUgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOwogfQogCiBmdW5jdGlvbiBjaGVj
a0Jvb2wocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKIHsKICAgICBpZiAoIXJlc3VsdC50eXBl
LmVxdWFscyhwcm9ncmFtLmludHJpbnNpY3MuYm9vbCkpCi0gICAgICAgIHRocm93IG5ldyBFcnJv
cigiV3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU6ICIgKyByZXN1bHQudHlwZSk7CiAgICAgaWYg
KHJlc3VsdC52YWx1ZSAhPSBleHBlY3RlZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9u
ZyByZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOwor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1ZSAr
ICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CiB9CiAKIGZ1bmN0aW9uIGNoZWNrTGV4
ZXJUb2tlbihyZXN1bHQsIGV4cGVjdGVkSW5kZXgsIGV4cGVjdGVkS2luZCwgZXhwZWN0ZWRUZXh0
KQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVJlZi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzCShyZXZpc2lv
biAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAgY2xhc3MgVHlwZVJlZiBleHRlbmRzIFR5
cGUgewogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CisgICAgICAgIGlmICghdGhpcy5uYW1l
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZS50b1N0cmluZygpOwogICAgICAgICBpZiAo
IXRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1l
OwogICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgIjwiICsgdGhpcy50eXBlQXJndW1lbnRzICsg
Ij4iOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZp
c2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsMTQgKzI1NSwxMCBAQCBjbGFzcyBWaXNpdG9yIGV4dGVu
ZHMgVmlzaXRvckJhc2UgewogICAgICAgICAgICAgZm9yIChsZXQgYXJndW1lbnQgb2YgYWN0dWFs
VHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgICAgICBhcmd1bWVudC52aXNpdCh0aGlzKTsKICAg
ICAgICAgfQorICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQorICAgICAgICAgICAgbm9kZS5y
ZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdENhc3RFeHByZXNz
aW9uKG5vZGUpCi0gICAgewotICAgICAgICB0aGlzLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7
Ci0gICAgICAgIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKTsKLSAgICB9Ci0KICAgICB2aXNp
dExvZ2ljYWxOb3Qobm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUub3BlcmFuZC52aXNpdCh0aGlz
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320226</attachid>
            <date>2017-09-07 19:22:59 -0700</date>
            <delta_ts>2017-09-08 18:43:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55856</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTc3NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMSBAQAorMjAxNy0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBvdmVybG9hZCByZXNvbHV0aW9uIHNob3VsZCBub3QgYmUgY2FzY2FkaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgcmVtb3ZlcyB0aGUgY2FzY2FkaW5nIG5hdHVyZSBvZiBvdmVybG9hZCByZXNvbHV0aW9u
IHRoYXQgV1NMIHVzZWQgdG8gaGF2ZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGgKKyAgICAgICAgc29t
ZXRoaW5nIEMrKy1saWtlLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgb3ZlcmxvYWQgY2FuZGlkYXRl
cyB0aGF0IG1hdGNoIHRoZSBjYWxsc2l0ZSwgdGhlbiB3ZSByZXNvbHZlCisgICAgICAgIHRoZW0g
YWdhaW5zdCBlYWNoIG90aGVyLiBBbnl0aW1lIGEgZnVuY3Rpb24gY2Fubm90IGJlIHJlc29sdmVk
IG9udG8gYW5vdGhlciBmdW5jdGlvbiwgaXQgaXMgcmVtb3ZlZCwKKyAgICAgICAgc2luY2UgdGhp
cyBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW4gc29tZSB3YXkgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIG90aGVyIG9uZSwgYW5kIHdlIGFyZSBqdXN0CisgICAgICAgIGxvb2tpbmcgZm9yIHRo
ZSBtb3N0IHNwZWNpZmljIGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgSWYgdGhpcyBwcm9j
ZXNzIGVuZHMgd2l0aCBvbmx5IG9uZSBmdW5jdGlvbiBiZWluZyBzZWxlY3RlZCwgdGhlbiB3ZSBz
dWNjZWVkLCBlbHNlIHdlIGZhaWwuCisgICAgICAgIAorICAgICAgICBBbHNvIGNoYW5nZWQgdGhl
IHN5bnRheCBmb3IgZGVmaW5pbmcgZ2VuZXJpYyBjYXN0cyB0bzoKKyAgICAgICAgCisgICAgICAg
IG9wZXJhdG9yPFQ+IFRoaW5neTxUPih0aGluZ3MpCisgICAgICAgIAorICAgICAgICBBbHNvIGZp
eGVkIHBhcnNpbmcgb2YgY2FzdCBleHByZXNzaW9ucy4gSXQncyBub3cgcG9zc2libGUgdG8gc2F5
IGEgY2FzdCBleHByZXNzaW9uIGluIFdTTC4KKyAgICAgICAgCisgICAgICAgIFRoZSByZW1vdmFs
IG9mIGNhc2NhZGluZyBjYXVzZXMgc29tZSBwcm9ibGVtcy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xs
b3dpbmcgdHdvIG9wZXJhdG9ycyBpbiBvdXIgc3RhbmRhcmQKKyAgICAgICAgbGlicmFyeSBhcmUg
YW1iaWd1b3VzIGZvciBib29sKGJvb2wpOgorICAgICAgICAKKyAgICAgICAgb3BlcmF0b3I8VD4g
VChUKQorICAgICAgICBvcGVyYXRvcjxUOkVxdWF0YWJsZT4gYm9vbChUKQorICAgICAgICAKKyAg
ICAgICAgSSB0aGluayB0aGF0IHdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gc2F5IHRoYXQgdGhl
IGZvbGxvd2luZyBvcGVyYXRvcnMgYXJlIHJlc3RyaWN0ZWQgdG8gdGhlIHN0YW5kYXJkCisgICAg
ICAgIGxpYnJhcnk6CisgICAgICAgIAorICAgICAgICBvcGVyYXRvcjxUPiBUKCkKKyAgICAgICAg
b3BlcmF0b3I8VD4gVChUKQorICAgICAgICAKKyAgICAgICAgSXQgc2hvdWxkIG5vdCBiZSBwb3Nz
aWJsZSB0byBldmVyIG92ZXJsb2FkIHRoZXNlLgorICAgICAgICAKKyAgICAgICAgVGhlc2UgY2hh
bmdlcyBhcmUgbW9zdGx5IHRlc3RlZCBieSBleGlzdGluZyB0ZXN0cyBhbmQgdGhlIGNoYW5nZXMg
aW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHdoaWNoIGhhcyB0bworICAgICAgICBiZSBwYXJzZWQg
Zm9yIGV2ZXJ5IHRlc3QuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwu
anM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzOgor
ICAgICAgICAoQXJyYXlSZWZUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzOgorICAgICAgICAoQ2FsbEV4
cHJlc3Npb24pOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0Nhc3Qp
OgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCByZXR1cm5UeXBlKToKKyAg
ICAgICAgKENhbGxFeHByZXNzaW9uLnByb3RvdHlwZS5yZXNvbHZlKToKKyAgICAgICAgKENhbGxF
eHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDYXN0KToKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXRDYXN0RGF0YSk6CisgICAgICAgIChDYWxsRXhwcmVzc2lvbi5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIu
anM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAg
ICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdExvZ2ljYWxOb3QpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanM6CisgICAgICAgIChGdW5jLnByb3RvdHlwZS5n
ZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qczoKKyAgICAgICAgKEZ1bmNEZWYpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAgICAgIChG
dW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuRmluZFR5cGVWYXJpYWJsZS5wcm90
b3R5cGUudmlzaXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0VW5pcXVlLkZpbmRUeXBlVmFyaWFibGUpOgorICAgICAgICAoRnVuY0luc3RhbnRp
YXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24ucHJvdG90
eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24pOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzOgorICAgICAgICAoRnVu
Y3Rpb25MaWtlQmxvY2sucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKEZ1bmN0aW9uTGlr
ZUJsb2NrKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9y
Q2FsbC5qczogQWRkZWQuCisgICAgICAgIChpbmZlclR5cGVzRm9yQ2FsbCk6CisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzOgorICAgICAgICAocmVzb2x2ZUlubGlu
ZWRGdW5jdGlvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanM6
CisgICAgICAgIChMZXhlcik6CisgICAgICAgIChMZXhlci5wcm90b3R5cGUubmV4dCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanM6CisgICAgICAgIChO
YW1lQ29udGV4dCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUubWFwRm9yKToKKyAg
ICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5hZGQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmdldCBsZXQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLlN5bWJv
bC5pdGVyYXRvcik6CisgICAgICAgIChOYW1lQ29udGV4dC5nZXQgY3VycmVudFN0YXRlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVy
LmpzOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS52aXNpdFByb2dyYW0pOgorICAg
ICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS5kZXRlcm1pbmVQb3NzaWJsZU92ZXJsb2Fkcyk6
CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xGdW5jRGVjbCk6
CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgor
ICAgICAgICAoTmFtZVJlc29sdmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYXRpdmVGdW5jLmpzOgorICAgICAgICAoTmF0aXZlRnVuYyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qczoKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLnZpc2l0
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAgICAg
KHBhcnNlUG9zc2libGVQcmVmaXgpOgorICAgICAgICAocGFyc2VGdW5jRGVjbCk6CisgICAgICAg
IChwYXJzZU5hdGl2ZUZ1bmMpOgorICAgICAgICAocGFyc2VOYXRpdmUpOgorICAgICAgICAocGFy
c2VQcmVmZXJyZWRGdW5jRGVmKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAgICAocHJlcGFyZSk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qczoKKyAgICAgICAgKFByb2dyYW0u
cHJvdG90eXBlLnJlc29sdmVGdW5jT3ZlcmxvYWQpOiBEZWxldGVkLgorICAgICAgICAoUHJvZ3Jh
bS5wcm90b3R5cGUuZ2V0IG5hbWVDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanM6CisgICAgICAgIChQcm90b2NvbERlY2wu
cHJvdG90eXBlLmluaGVyaXRzKToKKyAgICAgICAgKFByb3RvY29sRGVjbC5wcm90b3R5cGUuaGFz
SGVpcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qczoKKyAg
ICAgICAgKFB0clR5cGUucHJvdG90eXBlLnVuaWZ5SW1wbCk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qczoKKyAgICAgICAgKHJlc29sdmVP
dmVybG9hZEltcGwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xGdW5jRGVjbCk6
CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YSk6Cisg
ICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHByZWZlcnJlZC5vcGVyYXRvci5ULlQpOgorICAgICAgICAob3BlcmF0
b3IuVC5FcXVhdGFibGUuYm9vbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanM6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChkb0xleCk6CisgICAgICAgIChj
aGVja1VJbnQpOgorICAgICAgICAoY2hlY2tCb29sKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UeXBlUmVmLmpzOgorICAgICAgICAoVHlwZVJlZi5wcm90b3R5cGUudG9TdHJp
bmcpOgorICAgICAgICAoVHlwZVJlZik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJl
c3Npb24pOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6
IERlbGV0ZWQuCisKIDIwMTctMDktMDcgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFRlc3QgY29tbWl0IGFmdGVyIHNlcnZlciB1cGdyYWRlIGZyb20g
c3VidmVyc2lvbiAxLjkuNSB0byAxLjkuNwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGxvYWQoIkJvb2xMaXRl
cmFsLmpzIik7CiBsb2FkKCJDYWxsQXNzaWdubWVudC5qcyIpOwogbG9hZCgiQ2FsbEV4cHJlc3Np
b24uanMiKTsKIGxvYWQoIkNhbGxGdW5jdGlvbi5qcyIpOwotbG9hZCgiQ2FzdEV4cHJlc3Npb24u
anMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CiBsb2FkKCJDaGVja0xpdGVyYWxUeXBlcy5qcyIpOwog
bG9hZCgiQ2hlY2tSZWN1cnNpb24uanMiKTsKQEAgLTY1LDYgKzY0LDcgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkluZmVyVHlwZXNG
b3JDYWxsLmpzIik7CiBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIuanMiKTsKIGxv
YWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwpAQCAtMTAwLDggKzEwMCw3IEBAIGxvYWQo
IlJlc29sdmVUeXBlRGVmcy5qcyIpOwogbG9hZCgiUmV0dXJuLmpzIik7CiBsb2FkKCJSZXR1cm5D
aGVja2VyLmpzIik7CiBsb2FkKCJSZXR1cm5FeGNlcHRpb24uanMiKTsKLWxvYWQoIlN0YW5kYXJk
TGlicmFyeUVwaWxvZ3VlLmpzIik7Ci1sb2FkKCJTdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5qcyIp
OworbG9hZCgiU3RhbmRhcmRMaWJyYXJ5LmpzIik7CiBsb2FkKCJTdHJ1Y3RMYXlvdXRCdWlsZGVy
LmpzIik7CiBsb2FkKCJTdHJ1Y3RUeXBlLmpzIik7CiBsb2FkKCJTdWJzdGl0dXRpb24uanMiKTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJ
KHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5
UmVmVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksMTAgQEAKIGNsYXNzIEFycmF5
UmVmVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgIHVuaWZ5SW1wbCh1bmlmaWNhdGlv
bkNvbnRleHQsIG90aGVyKQogICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBB
cnJheVJlZlR5cGUpKSB7CisgICAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFycmF5UmVmVHlw
ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9IG90aGVyLmFkZHJlc3NT
cGFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5VHlwZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJl
c3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2Fs
bEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIs
MjAgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgICAgICB0
aGlzLl90eXBlQXJndW1lbnRzID0gdHlwZUFyZ3VtZW50czsKICAgICAgICAgdGhpcy5fYXJndW1l
bnRMaXN0ID0gYXJndW1lbnRMaXN0OwogICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOworICAgICAg
ICB0aGlzLl9pc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IG51bGw7
CiAgICAgfQogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQogICAg
IGdldCB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gdGhpcy5fdHlwZUFyZ3VtZW50czsgfQogICAg
IGdldCBhcmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExpc3Q7IH0KKyAgICBn
ZXQgaXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CisgICAgZ2V0IHJldHVyblR5cGUo
KSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9CiAgICAgCiAgICAgcmVzb2x2ZShvdmVybG9h
ZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2FkLmZ1bmM7Ci0gICAgICAgIHRo
aXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVBcmd1bWVudHM7CisgICAgICAg
IHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVBcmd1bWVudHMubWFwKFR5
cGVSZWYud3JhcCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5
cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5
cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwogICAgICAgICBpZiAo
IXJlc3VsdCkKQEAgLTQ5LDkgKzUzLDI3IEBAIGNsYXNzIENhbGxFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgYmVj
b21lQ2FzdChyZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IG5l
dyBUeXBlUmVmKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIHRoaXMuX3R5cGVBcmd1bWVudHMpOwor
ICAgICAgICB0aGlzLl9yZXR1cm5UeXBlLnR5cGUgPSByZXR1cm5UeXBlOworICAgICAgICB0aGlz
Ll9uYW1lID0gIm9wZXJhdG9yIGNhc3QiOworICAgICAgICB0aGlzLl9pc0Nhc3QgPSB0cnVlOwor
ICAgICAgICB0aGlzLl90eXBlQXJndW1lbnRzID0gW107CisgICAgfQorICAgIAorICAgIHNldENh
c3REYXRhKHJldHVyblR5cGUpCisgICAgeworICAgICAgICB0aGlzLl9yZXR1cm5UeXBlID0gcmV0
dXJuVHlwZTsKKyAgICAgICAgdGhpcy5faXNDYXN0ID0gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAg
dG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArICI8IiArIHRoaXMu
dHlwZUFyZ3VtZW50cyArICI+KCIgKyB0aGlzLmFyZ3VtZW50TGlzdCArICIpIjsKKyAgICAgICAg
cmV0dXJuICh0aGlzLmlzQ2FzdCA/ICJvcGVyYXRvciAiICsgdGhpcy5yZXR1cm5UeXBlIDogdGhp
cy5uYW1lKSArCisgICAgICAgICAgICAiPCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiIgKwor
ICAgICAgICAgICAgKHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA/ICI8PCIgKyB0aGlzLmFjdHVh
bFR5cGVBcmd1bWVudHMgKyAiPj4iIDogIiIpICsKKyAgICAgICAgICAgICIoIiArIHRoaXMuYXJn
dW1lbnRMaXN0ICsgIikiOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDcg
QEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIGNoZWNrQ2FzdE9yQ2FsbEV4cHJlc3Npb24obm9kZSwgcmV0dXJuVHlw
ZSkKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxl
dCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFy
Z3VtZW50LnZpc2l0KHRoaXMpOwpAQCAtMjQ1LDggKzI0NSw4IEBAIGNsYXNzIENoZWNrZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLndyYXAobmV3QXJndW1l
bnQpOwogICAgICAgICB9KTsKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRU
eXBlczsKLSAgICAgICAgaWYgKHJldHVyblR5cGUpCi0gICAgICAgICAgICByZXR1cm5UeXBlLnZp
c2l0KHRoaXMpOworICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQorICAgICAgICAgICAgbm9k
ZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICAKICAgICAgICAgbGV0IG92ZXJsb2Fk
ID0gbnVsbDsKICAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CkBAIC0yNTksMTggKzI1OSwyMyBA
QCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICAgICAgdHlwZVBh
cmFtZXRlci5wcm90b2NvbC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFy
aWFibGUobm9kZS5uYW1lLCB0eXBlUGFyYW1ldGVyKTsKICAgICAgICAgICAgIGlmICghc2lnbmF0
dXJlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0g
cmVzb2x2ZU92ZXJsb2FkSW1wbChzaWduYXR1cmVzLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50VHlwZXMsIHJldHVyblR5cGUpOworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3Zl
cmxvYWRJbXBsKHNpZ25hdHVyZXMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywg
bm9kZS5yZXR1cm5UeXBlKTsKICAgICAgICAgICAgIGlmIChvdmVybG9hZC5mdW5jKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5m
YWlsdXJlcyk7CiAgICAgICAgICAgICBvdmVybG9hZCA9IG51bGw7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFvdmVybG9hZCkgewotICAgICAgICAgICAgb3ZlcmxvYWQgPSB0aGlzLl9wcm9ncmFt
LnJlc29sdmVGdW5jT3ZlcmxvYWQoCi0gICAgICAgICAgICAgICAgbm9kZS5uYW1lLCBub2RlLnR5
cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOworICAgICAgICAgICAgb3Zl
cmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKAorICAgICAgICAgICAgICAgIG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgbm9kZS5yZXR1
cm5UeXBlKTsKICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgewogICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOwotICAgICAgICAgICAgICAg
IGxldCBtZXNzYWdlID0gIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCI7CisgICAgICAg
ICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdp
dGggIjsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5
cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1
bWVudCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUucmV0dXJuVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJl
dHVybiB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7CiAgICAgICAgICAgICAgICAgaWYgKGZhaWx1
cmVzLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lk
ZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKQEAgLTI4Niwx
NSArMjkxLDUgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBub2RlLnJlc29sdmUob3ZlcmxvYWQpOwogICAgIH0KLQotICAgIHZpc2l0
Q2FzdEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2Fz
dE9yQ2FsbEV4cHJlc3Npb24obm9kZSwgbm9kZS5yZXR1cm5UeXBlKTsKLSAgICB9Ci0gICAgCi0g
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
Y2hlY2tDYXN0T3JDYWxsRXhwcmVzc2lvbihub2RlLCB1bmRlZmluZWQpOwotICAgIH0KIH0KIApJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNp
b24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDggQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVu
ZHMgVmlzaXRvciB7CiAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBFUHRyLmJveCghbm9kZS5vcGVyYW5kLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpKTsK
KyAgICAgICAgbGV0IHJlc3VsdCA9ICFub2RlLm9wZXJhbmQudmlzaXQodGhpcykubG9hZFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBFUHRyLmJveChyZXN1bHQpOwogICAgIH0KICAgICAKICAgICB2
aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0Z1bmMuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0Z1bmMuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgRnVuYyBl
eHRlbmRzIE5vZGUgewogICAgIGdldCBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gdGhpcy5fcGFyYW1l
dGVyczsgfQogICAgIGdldCBwYXJhbWV0ZXJUeXBlcygpIHsgcmV0dXJuIHRoaXMucGFyYW1ldGVy
cy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci50eXBlKTsgfQogICAgIGdldCBpc0Nhc3QoKSB7
IHJldHVybiB0aGlzLl9pc0Nhc3Q7IH0KKyAgICBnZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVz
b2x1dGlvbigpIHsgcmV0dXJuIHRoaXMuaXNDYXN0ID8gdGhpcy5yZXR1cm5UeXBlIDogbnVsbDsg
fQogICAgIAogICAgIGdldCBraW5kKCkgeyByZXR1cm4gRnVuYzsgfQogICAgIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCShyZXZpc2lvbiAyMjE3NTcpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIEZ1bmNEZWYgZXh0ZW5kcyBGdW5jIHsKICAgICB7CiAg
ICAgICAgIHN1cGVyKG9yaWdpbiwgbmFtZSwgcmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBh
cmFtZXRlcnMsIGlzQ2FzdCk7CiAgICAgICAgIHRoaXMuX2JvZHkgPSBib2R5OworICAgICAgICB0
aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOwogICAgIH0KIAogICAgIGdldCBib2R5KCkgeyByZXR1
cm4gdGhpcy5fYm9keTsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Y0luc3RhbnRpYXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCwxNCBAQCBjbGFzcyBGdW5jSW5zdGFudGlhdG9yIHsKICAgICAvLyByZXNvbHV0
aW9ucyBvbiB0aGUgb3JpZ2luYWwgUHJvZ3JhbS4KICAgICBnZXRVbmlxdWUoZnVuYywgdHlwZUFy
Z3VtZW50cykKICAgICB7CisgICAgICAgIGNsYXNzIEZpbmRUeXBlVmFyaWFibGUgZXh0ZW5kcyBW
aXNpdG9yIHsKKyAgICAgICAgICAgIHZpc2l0VHlwZVZhcmlhYmxlKG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZTogIiArIG5v
ZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IHR5cGVBcmd1
bWVudCBvZiB0eXBlQXJndW1lbnRzKQorICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KG5l
dyBGaW5kVHlwZVZhcmlhYmxlKCkpOworICAgICAgICAKICAgICAgICAgbGV0IGluc3RhbmNlcyA9
IHRoaXMuX2luc3RhbmNlcy5nZXQoZnVuYyk7CiAgICAgICAgIGlmICghaW5zdGFuY2VzKQogICAg
ICAgICAgICAgdGhpcy5faW5zdGFuY2VzLnNldChmdW5jLCBpbnN0YW5jZXMgPSBbXSk7CkBAIC02
NCw3ICs3Miw3IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgICAgICAgICAgICAgIC8v
IFdlIG1heSBoYXZlIHRvIHJlLXJlc29sdmUgdGhlIGZ1bmN0aW9uIGNhbGwsIGlmIGl0IHdhcyBh
IGNhbGwgdG8gYSBwcm90b2NvbAogICAgICAgICAgICAgICAgIC8vIHNpZ25hdHVyZS4KICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmZ1bmMgaW5zdGFuY2VvZiBQcm90b2NvbEZ1bmNEZWNsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHRoaXNJbnN0YW50aWF0b3IuX3By
b2dyYW0ucmVzb2x2ZUZ1bmNPdmVybG9hZChyZXN1bHQubmFtZSwgcmVzdWx0LnR5cGVBcmd1bWVu
dHMsIHJlc3VsdC5hcmd1bWVudFR5cGVzKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJs
b2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChyZXN1bHQucG9zc2libGVPdmVybG9hZHMsIHJlc3Vs
dC50eXBlQXJndW1lbnRzLCByZXN1bHQuYXJndW1lbnRUeXBlcywgcmVzdWx0LnJldHVyblR5cGVG
b3JPdmVybG9hZFJlc29sdXRpb24pOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW92ZXJsb2Fk
LmZ1bmMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5v
dCByZXNvbHZlIHByb3RvY29sIHNpZ25hdHVyZSBmdW5jdGlvbiBjYWxsIGR1cmluZyBpbnN0YW50
aWF0aW9uOiAiICsgcmVzdWx0LmZ1bmMgKyAob3ZlcmxvYWQuZmFpbHVyZXMubGVuZ3RoID8gIjsg
dHJpZWQ6XG4iICsgb3ZlcmxvYWQuZmFpbHVyZXMuam9pbigiXG4iKSA6ICIiKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKG92ZXJsb2FkKTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCShyZXZpc2lv
biAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jdGlvbkxpa2VC
bG9jay5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNiBAQCBjbGFzcyBGdW5jdGlvbkxp
a2VCbG9jayBleHRlbmRzIFZhbHVlIHsKICAgICAKICAgICB0b1N0cmluZygpCiAgICAgewotICAg
ICAgICByZXR1cm4gIihbJl0gKCIgKyB0aGlzLnBhcmFtZXRlcnMgKyAiKSAtPiAiICsgdGhpcy5y
ZXR1cm5UeXBlICsgIiB7ICIgKyB0aGlzLmJsb2NrICsgIiB9KCIgKyB0aGlzLmFyZ3VtZW50TGlz
dCArICIpKSI7CisgICAgICAgIHJldHVybiAiKFsmXSAoIiArIHRoaXMucGFyYW1ldGVycyArICIp
IC0+ICIgKyB0aGlzLnJldHVyblR5cGUgKyAiIHsgIiArIHRoaXMuYm9keSArICIgfSgiICsgdGhp
cy5hcmd1bWVudExpc3QgKyAiKSkiOwogICAgIH0KIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCShub25leGlzdGVudCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0luZmVyVHlwZXNGb3JDYWxsLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gaW5mZXJUeXBlc0Zv
ckNhbGwoZnVuYywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSkKK3sK
KyAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggJiYgdHlwZUFyZ3VtZW50cy5sZW5ndGggIT0g
ZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3
IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIldyb25nIG51bWJlciBvZiB0eXBlIGFy
Z3VtZW50cyAocGFzc2VkICIgKyB0eXBlQXJndW1lbnRzLmxlbmd0aCArICIsIHJlcXVpcmUgIiAr
IGZ1bmMudHlwZVBhcmFtZXRlcnMubGVuZ3RoICsgIikiKX07CisgICAgaWYgKGFyZ3VtZW50VHlw
ZXMubGVuZ3RoICE9IGZ1bmMucGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgIHJldHVybiB7ZmFp
bHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIldyb25nIG51bWJlciBv
ZiBhcmd1bWVudHMgKHBhc3NlZCAiICsgYXJndW1lbnRUeXBlcy5sZW5ndGggKyAiLCByZXF1aXJl
ICIgKyBmdW5jLnBhcmFtZXRlcnMubGVuZ3RoICsgIikiKX07CisgICAgbGV0IHVuaWZpY2F0aW9u
Q29udGV4dCA9IG5ldyBVbmlmaWNhdGlvbkNvbnRleHQoZnVuYy50eXBlUGFyYW1ldGVycyk7Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgIGxldCBhcmd1bWVudCA9IHR5cGVBcmd1bWVudHNbaV07CisgICAgICAgIGxldCBwYXJhbWV0
ZXIgPSBmdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOworICAgICAgICBpZiAoIWFyZ3VtZW50LnVuaWZ5
KHVuaWZpY2F0aW9uQ29udGV4dCwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIHJldHVybiB7ZmFp
bHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlR5cGUgYXJndW1lbnQg
IyIgKyAoaSArIDEpICsgIiBmb3IgcGFyYW1ldGVyICIgKyBwYXJhbWV0ZXIubmFtZSArICIgZG9l
cyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1lbnQgKyAiLCByZXF1aXJlICIgKyBwYXJhbWV0
ZXIgKyAiKSIpfTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXSkKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB0eXBlIGF0IGkgPSAiICsgaSk7Cisg
ICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1
bmMucGFyYW1ldGVyc1tpXS50eXBlKSkKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3
IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSAr
ICIgIiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5j
LnBhcmFtZXRlcnNbaV0ubmFtZSA6ICIiKSArICIgZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsg
YXJndW1lbnRUeXBlc1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBl
ICsgIikiKX07CisgICAgfQorICAgIGlmIChyZXR1cm5UeXBlICYmICFyZXR1cm5UeXBlLnVuaWZ5
KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5yZXR1cm5UeXBlKSkKKyAgICAgICAgcmV0dXJuIHtm
YWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiUmV0dXJuIHR5cGUg
IiArIGZ1bmMucmV0dXJuVHlwZSArICIgZG9lcyBub3QgbWF0Y2ggIiArIHJldHVyblR5cGUpfTsK
KyAgICBpZiAoIXVuaWZpY2F0aW9uQ29udGV4dC52ZXJpZnkoKSkKKyAgICAgICAgcmV0dXJuIHtm
YWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiVmlvbGF0ZXMgdHlw
ZSB2YXJpYWJsZSBjb25zdHJhaW50cyIpfTsKKyAgICBsZXQgc2hvdWxkQnVpbGRUeXBlQXJndW1l
bnRzID0gIXR5cGVBcmd1bWVudHMubGVuZ3RoOworICAgIGlmIChzaG91bGRCdWlsZFR5cGVBcmd1
bWVudHMpCisgICAgICAgIHR5cGVBcmd1bWVudHMgPSBbXTsKKyAgICBmb3IgKGxldCB0eXBlUGFy
YW1ldGVyIG9mIGZ1bmMudHlwZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgbGV0IHR5cGVBcmd1bWVu
dCA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHR5cGVQYXJhbWV0ZXIpOworICAgICAgICBpZiAo
dHlwZUFyZ3VtZW50ID09IHR5cGVQYXJhbWV0ZXIpCisgICAgICAgICAgICByZXR1cm4ge2ZhaWx1
cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJUeXBlIHBhcmFtZXRlciAi
ICsgdHlwZVBhcmFtZXRlciArICIgZGlkIG5vdCBnZXQgYXNzaWduZWQgYSB0eXBlIil9OworICAg
ICAgICBpZiAoc2hvdWxkQnVpbGRUeXBlQXJndW1lbnRzKQorICAgICAgICAgICAgdHlwZUFyZ3Vt
ZW50cy5wdXNoKHR5cGVBcmd1bWVudCk7CisgICAgfQorICAgIHJldHVybiB7ZnVuYywgdW5pZmlj
YXRpb25Db250ZXh0LCB0eXBlQXJndW1lbnRzfTsKK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIGZ1bmN0aW9uIF9pbmxpbmVGdW5jdGlvbihwcm9ncmFtLCBmdW5jLCAKIAogZnVuY3Rpb24g
cmVzb2x2ZUlubGluZWRGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1
bWVudFR5cGVzKQogewotICAgIGxldCBvdmVybG9hZCA9IHByb2dyYW0ucmVzb2x2ZUZ1bmNPdmVy
bG9hZChuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKTsKKyAgICBsZXQgb3Zlcmxv
YWQgPSBwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0LnJlc29sdmVGdW5jT3ZlcmxvYWQobmFtZSwg
dHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcyk7CiAgICAgaWYgKCFvdmVybG9hZC5mdW5jKQog
ICAgICAgICByZXR1cm4gb3ZlcmxvYWQuZmFpbHVyZXM7CiAgICAgaWYgKCFvdmVybG9hZC5mdW5j
LnR5cGVQYXJhbWV0ZXJzKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIu
anMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xl
eGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMCBAQAogInVzZSBzdHJpY3QiOwog
CiBjbGFzcyBMZXhlciB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0
LCB0ZXh0KQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgb3JpZ2luS2luZCwgbGluZU51bWJlck9m
ZnNldCwgdGV4dCkKICAgICB7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAg
ICAgdGhpcy5fb3JpZ2luS2luZCA9IG9yaWdpbktpbmQ7CiAgICAgICAgIHRoaXMuX2xpbmVOdW1i
ZXJPZmZzZXQgPSBsaW5lTnVtYmVyT2Zmc2V0OwogICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDsK
ICAgICAgICAgdGhpcy5faW5kZXggPSAwOwpAQCAtMTAzLDggKzEwNCwxMiBAQCBjbGFzcyBMZXhl
ciB7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGRvIFVuaWNvZGUuCiAg
ICAgICAgIGlmICgvXlteXGRcV11cdyovLnRlc3QocmVsZXZhbnRUZXh0KSkgewotICAgICAgICAg
ICAgaWYgKFsic3RydWN0IiwgInByb3RvY29sIiwgInR5cGVkZWYiLCAiaWYiLCAiZWxzZSIsICJl
bnVtIiwgImNvbnRpbnVlIiwgImJyZWFrIiwgInN3aXRjaCIsICJjYXNlIiwgImRlZmF1bHQiLCAi
Zm9yIiwgIndoaWxlIiwgImRvIiwgInJldHVybiIsICJzaXplb2YiLCAiY29uc3RhbnQiLCAiZGV2
aWNlIiwgInRocmVhZGdyb3VwIiwgInRocmVhZCIsICJvcGVyYXRvciIsICJudWxsIiwgInRydWUi
LCAiZmFsc2UiXS5pbmNsdWRlcyhSZWdFeHAubGFzdE1hdGNoKSkKKyAgICAgICAgICAgIGlmICgv
XihzdHJ1Y3R8cHJvdG9jb2x8dHlwZWRlZnxpZnxlbHNlfGVudW18Y29udGludWV8YnJlYWt8c3dp
dGNofGNhc2V8ZGVmYXVsdHxmb3J8d2hpbGV8ZG98cmV0dXJufGNvbnN0YW50fGRldmljZXx0aHJl
YWRncm91cHx0aHJlYWR8b3BlcmF0b3J8bnVsbHx0cnVlfGZhbHNlKSQvLnRlc3QoUmVnRXhwLmxh
c3RNYXRjaCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgia2V5d29yZCIpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodGhpcy5fb3JpZ2luS2luZCA9PSAibmF0aXZlIiAm
JiAvXihuYXRpdmV8cmVzdHJpY3RlZCkkLy50ZXN0KFJlZ0V4cC5sYXN0TWF0Y2gpKQorICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQoImtleXdvcmQiKTsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdCgiaWRlbnRpZmllciIpOwogICAgICAgICB9CiAKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCShyZXZpc2lvbiAy
MjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBmdW5jdGlvbiBpc1dpbGRjYXJkS2luZChr
aW5kKQogY2xhc3MgTmFtZUNvbnRleHQgewogICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKQogICAg
IHsKLSAgICAgICAgdGhpcy5fZnVuY01hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fbWFw
ID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9zZXQgPSBuZXcgU2V0KCk7CiAgICAgICAgIHRo
aXMuX2RlZmluZWQgPSBudWxsOwpAQCAtNTEsOSArNTAsOCBAQCBjbGFzcyBOYW1lQ29udGV4dCB7
CiAgICAgICAgIGNhc2UgVmFsdWU6CiAgICAgICAgIGNhc2UgVHlwZToKICAgICAgICAgY2FzZSBQ
cm90b2NvbDoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7CiAgICAgICAgIGNhc2UgRnVu
YzoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9mdW5jTWFwOworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX21hcDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiQmFkIGtpbmQ6ICIgKyBraW5kKTsKICAgICAgICAgfQpAQCAtNzIsOSArNzAsMTQgQEAgY2xh
c3MgTmFtZUNvbnRleHQgewogICAgICAgICAKICAgICAgICAgaWYgKHRoaW5nLmtpbmQgPT0gRnVu
YykgewogICAgICAgICAgICAgdGhpcy5fc2V0LmFkZCh0aGluZyk7Ci0gICAgICAgICAgICBsZXQg
YXJyYXkgPSB0aGlzLl9mdW5jTWFwLmdldCh0aGluZy5uYW1lKTsKLSAgICAgICAgICAgIGlmICgh
YXJyYXkpCi0gICAgICAgICAgICAgICAgdGhpcy5fZnVuY01hcC5zZXQodGhpbmcubmFtZSwgYXJy
YXkgPSBbXSk7CisgICAgICAgICAgICBsZXQgYXJyYXkgPSB0aGlzLl9tYXAuZ2V0KHRoaW5nLm5h
bWUpOworICAgICAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgICAgICAgIGFycmF5ID0g
W107CisgICAgICAgICAgICAgICAgYXJyYXkua2luZCA9IEZ1bmM7CisgICAgICAgICAgICAgICAg
dGhpcy5fbWFwLnNldCh0aGluZy5uYW1lLCBhcnJheSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoYXJyYXkua2luZCAhPSBGdW5jKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKHRoaW5nLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgcmV1c2UgdHlwZSBu
YW1lIGZvciBmdW5jdGlvbjogIiArIHRoaW5nLm5hbWUpOwogICAgICAgICAgICAgYXJyYXkucHVz
aCh0aGluZyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTk0LDYgKzk3LDE1
IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCisgICAgcmVzb2x2ZUZ1bmNPdmVybG9hZChuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVu
dFR5cGVzLCByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgbGV0IGZ1bmN0aW9ucyA9IHRoaXMu
Z2V0KEZ1bmMsIG5hbWUpOworICAgICAgICBpZiAoIWZ1bmN0aW9ucykKKyAgICAgICAgICAgIHJl
dHVybiB7ZmFpbHVyZXM6IFtdfTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXNvbHZlT3Zl
cmxvYWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJu
VHlwZSk7CisgICAgfQorICAgIAogICAgIGdldCBjdXJyZW50U3RhdGVtZW50KCkKICAgICB7CiAg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGVtZW50KQpAQCAtMTY1LDExICsxNzcsMTMgQEAg
Y2xhc3MgTmFtZUNvbnRleHQgewogICAgIAogICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpCiAgICAg
ewotICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiB0aGlzLl9tYXAudmFsdWVzKCkpCisgICAgICAg
IGZvciAobGV0IHZhbHVlIG9mIHRoaXMuX21hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBmdW5j
IG9mIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmdW5jOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgeWllbGQgdmFsdWU7Ci0g
ICAgICAgIGZvciAobGV0IGZ1bmNzIG9mIHRoaXMuX2Z1bmNNYXAudmFsdWVzKCkpIHsKLSAgICAg
ICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpCi0gICAgICAgICAgICAgICAgeWllbGQgZnVu
YzsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL05hbWVSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAg
bGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KTsKICAgICAgICAgZm9y
IChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRzKQogICAgICAgICAgICAg
bmFtZUNvbnRleHQuZG9TdGF0ZW1lbnQoc3RhdGVtZW50LCAoKSA9PiBzdGF0ZW1lbnQudmlzaXQo
Y2hlY2tlcikpOworICAgICAgICBub2RlLmdsb2JhbE5hbWVDb250ZXh0ID0gbmFtZUNvbnRleHQ7
CiAgICAgfQogICAgIAogICAgIF92aXNpdFR5cGVQYXJhbWV0ZXJzQW5kQnVpbGROYW1lQ29udGV4
dChub2RlKQpAQCAtMTA4LDYgKzEwOSwzMSBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICAgICAgbm9kZS5wcm90b2NvbERlY2wgPSByZXN1bHQ7CiAgICAgfQogICAg
IAorICAgIGRldGVybWluZVBvc3NpYmxlT3ZlcmxvYWRzKG5vZGUpCisgICAgeworICAgICAgICBs
ZXQgZnVuY3MgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5uYW1lKTsKKyAgICAg
ICAgaWYgKGZ1bmNzKQorICAgICAgICAgICAgbm9kZS5wb3NzaWJsZU92ZXJsb2FkcyA9IGZ1bmNz
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5fbmFtZUNvbnRl
eHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CisgICAgICAgICAgICBpZiAoIXR5cGUpCisgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
Q2Fubm90IGZpbmQgYW55IGZ1bmN0aW9uIG9yIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Cisg
ICAgICAgICAgICBub2RlLmJlY29tZUNhc3QodHlwZSk7CisgICAgICAgICAgICBub2RlLnBvc3Np
YmxlT3ZlcmxvYWRzID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsICJvcGVyYXRvciBjYXN0
Iik7CisgICAgICAgICAgICBpZiAoIW5vZGUucG9zc2libGVPdmVybG9hZHMpCisgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fu
bm90IGZpbmQgYW55IG9wZXJhdG9yIGNhc3QgaW1wbGVtZW50YXRpb25zIGluIGNhc3QgdG8gIiAr
IHR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZpc2l0UHJvdG9jb2xGdW5jRGVj
bChub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy52aXNpdEZ1bmMobm9kZSk7CisgICAgICAgIGxl
dCBmdW5jcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAgICAg
ICBpZiAoIWZ1bmNzKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgYW55IGZ1bmN0aW9ucyBuYW1lZCAiICsgbm9k
ZS5uYSxlKTsKKyAgICAgICAgbm9kZS5wb3NzaWJsZU92ZXJsb2FkcyA9IGZ1bmNzOworICAgIH0K
KyAgICAKICAgICB2aXNpdFR5cGVEZWYobm9kZSkKICAgICB7CiAgICAgICAgIGxldCBuYW1lQ29u
dGV4dCA9IG5ldyBOYW1lQ29udGV4dCh0aGlzLl9uYW1lQ29udGV4dCk7CkBAIC0yMDksNiArMjM1
LDIwIEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHZpc2l0Q2Fs
bEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3Jlc29sdmVUeXBlQXJndW1l
bnRzKG5vZGUudHlwZUFyZ3VtZW50cyk7CisgICAgICAgIAorICAgICAgICBsZXQgZnVuY3MgPSB0
aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgbm9kZS5uYW1lKTsKKyAgICAgICAgaWYgKGZ1bmNz
KQorICAgICAgICAgICAgbm9kZS5wb3NzaWJsZU92ZXJsb2FkcyA9IGZ1bmNzOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUs
IG5vZGUubmFtZSk7CisgICAgICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQg
YW55IGZ1bmN0aW9uIG9yIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CisgICAgICAgICAgICBu
b2RlLmJlY29tZUNhc3QodHlwZSk7CisgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRz
ID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsICJvcGVyYXRvciBjYXN0Iik7CisgICAgICAg
ICAgICBpZiAoIW5vZGUucG9zc2libGVPdmVybG9hZHMpCisgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgYW55
IG9wZXJhdG9yIGNhc3QgaW1wbGVtZW50YXRpb25zIGluIGNhc3QgdG8gIiArIHR5cGUpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUp
OwogICAgIH0KIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1
bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuYy5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBjbGFzcyBO
YXRpdmVGdW5jIGV4dGVuZHMgRnVuYyB7CiAgICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1lLCBy
ZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1ldGVycywgaXNDYXN0KQogICAgIHsKICAg
ICAgICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFy
YW1ldGVycywgaXNDYXN0KTsKKyAgICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKICAg
ICB9CiAgICAgCiAgICAgZ2V0IGlzTmF0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
NyArMjcsMTIgQEAKIGNsYXNzIE5vZGUgewogICAgIHZpc2l0KHZpc2l0b3IpCiAgICAgewotICAg
ICAgICBsZXQgbWVtb1RhYmxlID0gdmlzaXRvci5fbWVtb1RhYmxlOwotICAgICAgICBpZiAobWVt
b1RhYmxlLmhhcyh0aGlzKSkKLSAgICAgICAgICAgIHJldHVybiBtZW1vVGFibGUuZ2V0KHRoaXMp
OwotICAgICAgICAKICAgICAgICAgbGV0IHZpc2l0RnVuYyA9IHZpc2l0b3JbInZpc2l0IiArIHRo
aXMuY29uc3RydWN0b3IubmFtZV07CiAgICAgICAgIGlmICghdmlzaXRGdW5jKQogICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJObyB2aXNpdCBmdW5jdGlvbiBmb3IgIiArIHRoaXMuY29uc3Ry
dWN0b3IubmFtZSArICIgaW4gIiArIHZpc2l0b3IuY29uc3RydWN0b3IubmFtZSk7CiAgICAgICAg
IGxldCByZXR1cm5WYWx1ZSA9IHZpc2l0RnVuYy5jYWxsKHZpc2l0b3IsIHRoaXMpOwogICAgICAg
ICBpZiAoInJldHVyblZhbHVlIiBpbiB2aXNpdG9yKQogICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSB2aXNpdG9yLnJldHVyblZhbHVlOwotICAgICAgICBtZW1vVGFibGUuc2V0KHRoaXMsIHJldHVy
blZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KICAgICAKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjE3NTcpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjQsOSArMjQsOSBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKK2Z1bmN0aW9uIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgb3JpZ2luS2luZCwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKIHsKLSAg
ICBsZXQgbGV4ZXIgPSBuZXcgTGV4ZXIob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsK
KyAgICBsZXQgbGV4ZXIgPSBuZXcgTGV4ZXIob3JpZ2luLCBvcmlnaW5LaW5kLCBsaW5lTnVtYmVy
T2Zmc2V0LCB0ZXh0KTsKICAgICAKICAgICAvLyBUaGUgaGFyZGVzdCBwYXJ0IG9mIGRlYWxpbmcg
d2l0aCBDLWxpa2UgbGFuZ3VhZ2VzIGlzIHBhcnNpbmcgdmFyaWFibGUgZGVjbGFyYXRpb24gc3Rh
dGVtZW50cy4KICAgICAvLyBMZXQncyBjb25zaWRlciBpZiB0aGlzIGhhcHBlbnMgaW4gV1NMLiBI
ZXJlIGFyZSB0aGUgdmFsaWQgc3RhdGVtZW50cyBpbiBXU0wgdGhhdCBiZWluZyB3aXRoIGFuCkBA
IC0zODIsNyArMzgyLDcgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVt
YgogICAgICAgICAgICAgcmV0dXJuIG5ldyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uKHRva2VuLCBw
YXJzZVBvc3NpYmxlUHJlZml4KCkpOwogICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lKCIh
IikpIHsKICAgICAgICAgICAgIGxldCByZW1haW5kZXIgPSBwYXJzZVBvc3NpYmxlUHJlZml4KCk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IExvZ2ljYWxOb3QodG9rZW4sIG5ldyBDYXN0RXhwcmVz
c2lvbihyZW1haW5kZXIub3JpZ2luLCBuZXcgVHlwZVJlZihyZW1haW5kZXIub3JpZ2luLCAiYm9v
bCIsIFtdKSwgW10sIFtyZW1haW5kZXJdKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IExvZ2lj
YWxOb3QodG9rZW4sIG5ldyBDYWxsRXhwcmVzc2lvbihyZW1haW5kZXIub3JpZ2luLCAiYm9vbCIs
IFtdLCBbcmVtYWluZGVyXSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYXJzZVBvc3Np
YmxlU3VmZml4KCk7CiAgICAgfQpAQCAtNjI3LDIwICs2MjcsMjIgQEAgZnVuY3Rpb24gcGFyc2Uo
cHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAgICBsZXQgb3JpZ2luOwogICAgICAgICBs
ZXQgcmV0dXJuVHlwZTsKICAgICAgICAgbGV0IG5hbWU7CisgICAgICAgIGxldCB0eXBlUGFyYW1l
dGVyczsKICAgICAgICAgbGV0IGlzQ2FzdDsKICAgICAgICAgbGV0IG9wZXJhdG9yVG9rZW4gPSB0
cnlDb25zdW1lKCJvcGVyYXRvciIpOwogICAgICAgICBpZiAob3BlcmF0b3JUb2tlbikgewogICAg
ICAgICAgICAgb3JpZ2luID0gb3BlcmF0b3JUb2tlbjsKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0
ZXJzID0gcGFyc2VUeXBlUGFyYW1ldGVycygpOwogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHBh
cnNlVHlwZSgpOwotICAgICAgICAgICAgbmFtZSA9IENhc3RFeHByZXNzaW9uLmZ1bmN0aW9uTmFt
ZTsKKyAgICAgICAgICAgIG5hbWUgPSAib3BlcmF0b3IgY2FzdCI7CiAgICAgICAgICAgICBpc0Nh
c3QgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHBh
cnNlVHlwZSgpOwogICAgICAgICAgICAgb3JpZ2luID0gcmV0dXJuVHlwZS5vcmlnaW47CiAgICAg
ICAgICAgICBuYW1lID0gcGFyc2VGdW5jTmFtZSgpOworICAgICAgICAgICAgdHlwZVBhcmFtZXRl
cnMgPSBwYXJzZVR5cGVQYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICBpc0Nhc3QgPSBmYWxzZTsK
ICAgICAgICAgfQotICAgICAgICBsZXQgdHlwZVBhcmFtZXRlcnMgPSBwYXJzZVR5cGVQYXJhbWV0
ZXJzKCk7CiAgICAgICAgIGxldCBwYXJhbWV0ZXJzID0gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAg
ICAgIHJldHVybiBuZXcgRnVuYyhvcmlnaW4sIG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0
ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpOwogICAgIH0KQEAgLTY5Myw2ICs2OTUsMTMgQEAgZnVu
Y3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICAKKyAgICBmdW5jdGlvbiBwYXJzZU5hdGl2ZUZ1bmMoKQorICAgIHsK
KyAgICAgICAgbGV0IGZ1bmMgPSBwYXJzZUZ1bmNEZWNsKCk7CisgICAgICAgIGNvbnN1bWUoIjsi
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVGdW5jKGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUs
IGZ1bmMucmV0dXJuVHlwZSwgZnVuYy50eXBlUGFyYW1ldGVycywgZnVuYy5wYXJhbWV0ZXJzLCBm
dW5jLmlzQ2FzdCk7CisgICAgfQorICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlTmF0aXZlKCkKICAg
ICB7CiAgICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJuYXRpdmUiKTsKQEAgLTcwOSw5ICs3
MTgsMTkgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAg
ICAgICAgY29uc3VtZSgiOyIpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVUeXBlKG9y
aWdpbiwgbmFtZS50ZXh0LCBpc1R5cGUgPT0gInByaW1pdGl2ZSIsIHBhcmFtZXRlcnMpOwogICAg
ICAgICB9Ci0gICAgICAgIGxldCBmdW5jID0gcGFyc2VGdW5jRGVjbCgpOwotICAgICAgICBjb25z
dW1lKCI7Iik7Ci0gICAgICAgIHJldHVybiBuZXcgTmF0aXZlRnVuYyhmdW5jLm9yaWdpbiwgZnVu
Yy5uYW1lLCBmdW5jLnJldHVyblR5cGUsIGZ1bmMudHlwZVBhcmFtZXRlcnMsIGZ1bmMucGFyYW1l
dGVycywgZnVuYy5pc0Nhc3QpOworICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jKCk7Cisg
ICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHBhcnNlUmVzdHJpY3RlZEZ1bmNEZWYoKQorICAgIHsK
KyAgICAgICAgY29uc3VtZSgicmVzdHJpY3RlZCIpOworICAgICAgICBsZXQgcmVzdWx0OworICAg
ICAgICBpZiAodHJ5Q29uc3VtZSgibmF0aXZlIikpCisgICAgICAgICAgICByZXN1bHQgPSBwYXJz
ZU5hdGl2ZUZ1bmMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VG
dW5jRGVmKCk7CisgICAgICAgIHJlc3VsdC5pc1Jlc3RyaWN0ZWQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC03MjIsOCArNzQx
LDEwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgbGluZU51bWIKICAgICAgICAg
ICAgIGxleGVyLm5leHQoKTsKICAgICAgICAgZWxzZSBpZiAodG9rZW4udGV4dCA9PSAidHlwZWRl
ZiIpCiAgICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVR5cGVEZWYoKSk7Ci0gICAgICAgIGVs
c2UgaWYgKHRva2VuLnRleHQgPT0gIm5hdGl2ZSIpCisgICAgICAgIGVsc2UgaWYgKG9yaWdpbktp
bmQgPT0gIm5hdGl2ZSIgJiYgdG9rZW4udGV4dCA9PSAibmF0aXZlIikKICAgICAgICAgICAgIHBy
b2dyYW0uYWRkKHBhcnNlTmF0aXZlKCkpOworICAgICAgICBlbHNlIGlmIChvcmlnaW5LaW5kID09
ICJuYXRpdmUiICYmIHRva2VuLnRleHQgPT0gInJlc3RyaWN0ZWQiKQorICAgICAgICAgICAgcHJv
Z3JhbS5hZGQocGFyc2VSZXN0cmljdGVkRnVuY0RlZigpKTsKICAgICAgICAgZWxzZSBpZiAodG9r
ZW4udGV4dCA9PSAic3RydWN0IikKICAgICAgICAgICAgIHByb2dyYW0uYWRkKHBhcnNlU3RydWN0
VHlwZSgpKTsKICAgICAgICAgZWxzZSBpZiAodG9rZW4udGV4dCA9PSAiZW51bSIpCkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJKHJldmlzaW9uIDIyMTc1NykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDkgKzI3LDggQEAKIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVy
T2Zmc2V0LCB0ZXh0KQogewogICAgIGxldCBwcm9ncmFtID0gbmV3IFByb2dyYW0oKTsKLSAgICBw
YXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0ZGxpYi9wcm9sb2d1ZSIsIDI4LCBzdGFuZGFyZExp
YnJhcnlQcm9sb2d1ZSk7Ci0gICAgcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYmVyT2Zm
c2V0LCB0ZXh0KTsKLSAgICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0ZGxpYi9lcGlsb2d1
ZSIsIDI4LCBzdGFuZGFyZExpYnJhcnlFcGlsb2d1ZSk7CisgICAgcGFyc2UocHJvZ3JhbSwgIi9p
bnRlcm5hbC9zdGRsaWIiLCAibmF0aXZlIiwgMjcsIHN0YW5kYXJkTGlicmFyeSk7CisgICAgcGFy
c2UocHJvZ3JhbSwgb3JpZ2luLCAidXNlciIsIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwogICAg
IHJlc29sdmVOYW1lcyhwcm9ncmFtKTsKICAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7CiAg
ICAgY2hlY2socHJvZ3JhbSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Q
cm9ncmFtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1By
b2dyYW0uanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Byb2dyYW0uanMJKHdvcmtpbmcgY29weSkKQEAgLTU4LDIzICs1OCw2IEBAIGNsYXNzIFBy
b2dyYW0gZXh0ZW5kcyBOb2RlIHsKICAgICAgICAgdGhpcy5fdG9wTGV2ZWxTdGF0ZW1lbnRzLnB1
c2goc3RhdGVtZW50KTsKICAgICB9CiAgICAgCi0gICAgcmVzb2x2ZUZ1bmNPdmVybG9hZChuYW1l
LCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQotICAgIHsKLSAgICAg
ICAgbGV0IGZ1bmN0aW9ucyA9IHRoaXMuZnVuY3Rpb25zLmdldChuYW1lKTsKLSAgICAgICAgaWYg
KCFmdW5jdGlvbnMpCi0gICAgICAgICAgICByZXR1cm4ge2ZhaWx1cmVzOiBbXX07Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gcmVzb2x2ZU92ZXJsb2FkSW1wbChmdW5jdGlvbnMsIHR5cGVBcmd1
bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOwotICAgIH0KLSAgICAKLSAgICBnZXQg
bmFtZUNvbnRleHQoKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBOYW1lQ29udGV4
dCgpOwotICAgICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2YgdGhpcy50b3BMZXZlbFN0YXRlbWVu
dHMpCi0gICAgICAgICAgICByZXN1bHQuYWRkKHN0YXRlbWVudCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5fdG9wTGV2ZWxTdGF0ZW1lbnRzLmxlbmd0aCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwkod29ya2luZyBjb3B5
KQpAQCAtNzIsNyArNzIsNyBAQCBjbGFzcyBQcm90b2NvbERlY2wgZXh0ZW5kcyBQcm90b2NvbCB7
CiAgICAgICAgICAgICBsZXQgc2lnbmF0dXJlcyA9IHRoaXMuc2lnbmF0dXJlc0J5TmFtZShvdGhl
clNpZ25hdHVyZS5uYW1lKTsKICAgICAgICAgICAgIGlmICghc2lnbmF0dXJlcykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZl
T3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIFtdLCBvdGhlclNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBl
cyk7CisgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25h
dHVyZXMsIFtdLCBvdGhlclNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywgb3RoZXJTaWduYXR1cmUu
cmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAgICAgICAgICAgICBpZiAoIW92ZXJs
b2FkLmZ1bmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbGV0
IHN1YnN0aXR1dGVkUmV0dXJuVHlwZSA9CkBAIC05MCw3ICs5MCw3IEBAIGNsYXNzIFByb3RvY29s
RGVjbCBleHRlbmRzIFByb3RvY29sIHsKICAgICAgICAgbGV0IHNpZ25hdHVyZXMgPSB0aGlzLnNp
Z25hdHVyZXM7CiAgICAgICAgIGZvciAobGV0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSB7CiAg
ICAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmUudmlzaXQoc3Vic3RpdHV0aW9uKTsKLSAg
ICAgICAgICAgIGxldCBvdmVybG9hZCA9IHRoaXMucHJvZ3JhbS5yZXNvbHZlRnVuY092ZXJsb2Fk
KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMsIHNpZ25hdHVyZS5wYXJh
bWV0ZXJUeXBlcyk7CisgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJ
bXBsKHNpZ25hdHVyZS5wb3NzaWJsZU92ZXJsb2Fkcywgc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJz
LCBzaWduYXR1cmUucGFyYW1ldGVyVHlwZXMsIHNpZ25hdHVyZS5yZXR1cm5UeXVwZUZvck92ZXJs
b2FkUmVzb2x1dGlvbik7CiAgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDggQEAgY2xhc3MgUHRyVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgIHsKICAg
ICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQdHJUeXBlKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9IG90aGVyLmFkZHJlc3NT
cGFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxl
bWVudFR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5lbGVtZW50VHlwZSk7CiAg
ICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92
ZXJsb2FkSW1wbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2NiArMjcsNjkgQEAKIGZ1bmN0aW9uIHJlc29sdmVPdmVybG9hZEltcGwoZnVuY3Rp
b25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQogewogICAgIGxl
dCBmYWlsdXJlcyA9IFtdOworICAgIGxldCBzdWNjZXNzZXMgPSBbXTsKICAgICBmb3IgKGxldCBm
dW5jIG9mIGZ1bmN0aW9ucykgewotICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggJiYg
dHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKLSAg
ICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVu
YywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyAocGFzc2VkICIgKyB0eXBlQXJndW1l
bnRzLmxlbmd0aCArICIsIHJlcXVpcmUgIiArIGZ1bmMudHlwZVBhcmFtZXRlcnMubGVuZ3RoICsg
IikiKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXJn
dW1lbnRUeXBlcy5sZW5ndGggIT0gZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aCkgewotICAgICAgICAg
ICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3Jv
bmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzLmxlbmd0aCAr
ICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVycy5sZW5ndGggKyAiKSIpKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBsZXQgb3ZlcmxvYWQgPSBpbmZlclR5cGVzRm9yQ2FsbChm
dW5jLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKTsKKyAgICAgICAg
aWYgKG92ZXJsb2FkLmZhaWx1cmUpCisgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG92ZXJsb2Fk
LmZhaWx1cmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWNjZXNzZXMucHVzaChvdmVy
bG9hZCk7CisgICAgfQorICAgIAorICAgIGlmICghc3VjY2Vzc2VzLmxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIHtmYWlsdXJlczogZmFpbHVyZXN9OworICAgIAorICAgIC8vIElmIGFueSBvZiB0aGUg
c2lnbmF0dXJlcyBhcmUgcmVzdHJpY3RlZCB0aGVuIHdlIGNvbnNpZGVyIHRob3NlIGZpcnN0LiBU
aGlzIGlzIGFuIGVzY2FwZSBtZWNoYW5pc20gZm9yCisgICAgLy8gYnVpbHQtaW4gdGhpbmdzLgor
ICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgYW4gZXJyb3IgdG8gZGVjbGFyZSBhIGZ1bmN0aW9u
IHRoYXQgaXMgYXQgbGVhc3QgYXMgc3BlY2lmaWMgYXMgYSByZXN0cmljdGVkIGZ1bmN0aW9uLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY1ODAKKyAg
ICBsZXQgaGFzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGZvciAobGV0IG92ZXJsb2FkIG9mIHN1
Y2Nlc3NlcykgeworICAgICAgICBpZiAob3ZlcmxvYWQuZnVuYy5pc1Jlc3RyaWN0ZWQpIHsKKyAg
ICAgICAgICAgIGhhc1Jlc3RyaWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5ldyBVbmlmaWNhdGlvbkNv
bnRleHQoZnVuYy50eXBlUGFyYW1ldGVycyk7CisgICAgfQorICAgIAorICAgIGlmIChoYXNSZXN0
cmljdGVkKQorICAgICAgICBzdWNjZXNzZXMgPSBzdWNjZXNzZXMuZmlsdGVyKG92ZXJsb2FkID0+
IG92ZXJsb2FkLmZ1bmMuaXNSZXN0cmljdGVkKTsKKyAgICAKKyAgICAvLyBXZSBhcmUgb25seSBp
bnRlcmVzdGVkIGluIGZ1bmN0aW9ucyB0aGF0IGFyZSBhdCBsZWFzdCBhcyBzcGVjaWZpYyBhcyBh
bGwgb2YgdGhlIG90aGVycy4gVGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhleSBjYW4gYmUgInR1
cm5lZCBhcm91bmQiIGFuZCBhcHBsaWVkIG9udG8gYWxsIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMg
aW4gdGhlIGxpc3QuCisgICAgbGV0IHBydW5lZFN1Y2Nlc3NlcyA9IFtdOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgc3VjY2Vzc2VzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIGxldCBvayA9IHRy
dWU7Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgbGV0IGFyZ3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKLSAgICAg
ICAgICAgIGxldCBwYXJhbWV0ZXIgPSBmdW5jLnR5cGVQYXJhbWV0ZXJzW2ldOwotICAgICAgICAg
ICAgaWYgKCFhcmd1bWVudC51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIHBhcmFtZXRlcikpIHsK
LSAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWls
dXJlKGZ1bmMsICJUeXBlIGFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgZm9yIHBhcmFtZXRlciAi
ICsgcGFyYW1ldGVyLm5hbWUgKyAiIGRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50
ICsgIiwgcmVxdWlyZSAiICsgcGFyYW1ldGVyICsgIikiKSk7Ci0gICAgICAgICAgICAgICAgb2sg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJndW1lbnRUeXBlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFhcmd1bWVudFR5cGVzW2ldKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
TnVsbCBhcmd1bWVudCB0eXBlIGF0IGkgPSAiICsgaSk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50VHlwZXNbaV0udW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnBhcmFtZXRlcnNbaV0u
dHlwZSkpIHsKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29s
dXRpb25GYWlsdXJlKGZ1bmMsICJBcmd1bWVudCAjIiArIChpICsgMSkgKyAiICIgKyAoZnVuYy5w
YXJhbWV0ZXJzW2ldLm5hbWUgPyAiZm9yIHBhcmFtZXRlciAiICsgZnVuYy5wYXJhbWV0ZXJzW2ld
Lm5hbWUgOiAiIikgKyAiIGRvZXMgbm90IG1hdGNoIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXNb
aV0gKyAiLCByZXF1aXJlICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSArICIpIikpOwotICAg
ICAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAocmV0dXJuVHlwZSkgewotICAgICAgICAgICAgaWYgKCFyZXR1cm5UeXBl
LnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5yZXR1cm5UeXBlKSkgewotICAgICAgICAg
ICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywg
IlJldHVybiB0eXBlICIgKyBmdW5jLnJldHVyblR5cGUgKyAiIGRvZXMgbm90IG1hdGNoICIgKyBy
ZXR1cm5UeXBlKSk7CisgICAgICAgIGxldCBhcmd1bWVudEZ1bmMgPSBzdWNjZXNzZXNbaV0uZnVu
YzsKKyAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdWNjZXNzZXMubGVuZ3RoOyArK2opIHsK
KyAgICAgICAgICAgIGlmIChpID09IGopCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF1bmlmaWNhdGlvbkNvbnRleHQudmVy
aWZ5KCkpIHsKLSAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlv
bkZhaWx1cmUoZnVuYywgIlZpb2xhdGVzIHR5cGUgdmFyaWFibGUgY29uc3RyYWludHMiKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBsZXQgc2hvdWxkQnVpbGRU
eXBlQXJndW1lbnRzID0gIXR5cGVBcmd1bWVudHMubGVuZ3RoOwotICAgICAgICBpZiAoc2hvdWxk
QnVpbGRUeXBlQXJndW1lbnRzKQotICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA9IFtdOwotICAg
ICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIGZ1bmMudHlwZVBhcmFtZXRlcnMpIHsKLSAg
ICAgICAgICAgIGxldCB0eXBlQXJndW1lbnQgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0eXBl
UGFyYW1ldGVyKTsKLSAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnQgPT0gdHlwZVBhcmFtZXRl
cikgewotICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlv
bkZhaWx1cmUoZnVuYywgIlR5cGUgcGFyYW1ldGVyICIgKyB0eXBlUGFyYW1ldGVyICsgIiBkaWQg
bm90IGdldCBhc3NpZ25lZCBhIHR5cGUiKSk7CisgICAgICAgICAgICBsZXQgcGFyYW1ldGVyRnVu
YyA9IHN1Y2Nlc3Nlc1tqXS5mdW5jOworICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gaW5mZXJU
eXBlc0ZvckNhbGwoCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyRnVuYywKKyAgICAgICAgICAg
ICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50RnVuYy50eXBlUGFyYW1ldGVycyA6
IFtdLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50RnVuYy5wYXJhbWV0ZXJUeXBlcywKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudEZ1bmMucmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7
CisgICAgICAgICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpIHsKICAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHNob3VsZEJ1aWxkVHlwZUFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICB0eXBlQXJn
dW1lbnRzLnB1c2godHlwZUFyZ3VtZW50KTsKICAgICAgICAgfQotICAgICAgICBpZiAoIW9rKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiB7ZnVuYywgdW5pZmljYXRpb25D
b250ZXh0LCB0eXBlQXJndW1lbnRzfTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcHJ1
bmVkU3VjY2Vzc2VzLnB1c2goc3VjY2Vzc2VzW2ldKTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
dW5lZFN1Y2Nlc3Nlcy5sZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJuIHBydW5lZFN1Y2Nlc3Nl
c1swXTsKKyAgICAKKyAgICBsZXQgYW1iaWd1aXR5TGlzdDsKKyAgICBsZXQgbWVzc2FnZTsKKyAg
ICBpZiAocHJ1bmVkU3VjY2Vzc2VzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIGFtYmlndWl0eUxp
c3QgPSBzdWNjZXNzZXM7CisgICAgICAgIG1lc3NhZ2UgPSAiQW1iaWd1b3VzIG92ZXJsb2FkIC0g
bm8gZnVuY3Rpb24gY2FuIGJlIGFwcGxpZWQgdG8gYWxsIG90aGVycyI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYW1iaWd1aXR5TGlzdCA9IHBydW5lZFN1Y2Nlc3NlczsKKyAgICAgICAgbWVzc2Fn
ZSA9ICJBbWJpZ3VvdXMgb3ZlcmxvYWQgLSBmdW5jdGlvbnMgbXV0dWFsbHkgYXBwbGljYWJsZSI7
CiAgICAgfQogICAgIAotICAgIHJldHVybiB7ZmFpbHVyZXM6IGZhaWx1cmVzfTsKKyAgICByZXR1
cm4ge2ZhaWx1cmVzOiBhbWJpZ3VpdHlMaXN0Lm1hcChvdmVybG9hZCA9PiBuZXcgT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZShvdmVybG9hZC5mdW5jLCBtZXNzYWdlKSl9OwogfQpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMTc1NykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCw3IEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlzaXRvckJhc2Ug
ewogICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFt
ZXRlci52aXNpdCh0aGlzKSksCiAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFt
ZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQodGhpcykpKTsKICAgICAgICAgcmVzdWx0LnByb3RvY29s
RGVjbCA9IG5vZGUucHJvdG9jb2xEZWNsOworICAgICAgICByZXN1bHQucG9zc2libGVPdmVybG9h
ZHMgPSBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKQEAgLTI0OSwxOCArMjUwLDEyIEBAIGNsYXNzIFJld3JpdGVyIGV4dGVuZHMgVmlz
aXRvckJhc2UgewogICAgICAgICAgICAgcmVzdWx0LmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVudFR5
cGVzLm1hcChhcmd1bWVudFR5cGUgPT4gYXJndW1lbnRUeXBlLnZpc2l0KHRoaXMpKTsKICAgICAg
ICAgcmVzdWx0LmZ1bmMgPSBub2RlLmZ1bmM7CiAgICAgICAgIHJlc3VsdC5uYXRpdmVGdW5jSW5z
dGFuY2UgPSBub2RlLm5hdGl2ZUZ1bmNJbnN0YW5jZTsKKyAgICAgICAgcmVzdWx0LnBvc3NpYmxl
T3ZlcmxvYWRzID0gbm9kZS5wb3NzaWJsZU92ZXJsb2FkczsKKyAgICAgICAgaWYgKG5vZGUuaXND
YXN0KQorICAgICAgICAgICAgcmVzdWx0LnNldENhc3REYXRhKG5vZGUucmV0dXJuVHlwZS52aXNp
dCh0aGlzKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdmlzaXRDYXN0
RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBDYXN0RXhw
cmVzc2lvbigKLSAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLnJldHVyblR5cGUudmlzaXQo
dGhpcyksCi0gICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMubWFwKHR5cGVBcmd1bWVudCA9
PiB0eXBlQXJndW1lbnQudmlzaXQodGhpcykpLAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudExp
c3QubWFwKGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0gICAgICAgIHJldHVy
biB0aGlzLnByb2Nlc3NEZXJpdmVkQ2FsbERhdGEobm9kZSwgcmVzdWx0KTsKLSAgICB9Ci0gICAg
CiAgICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3Vs
dCA9IG5ldyBDYWxsRXhwcmVzc2lvbigKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gTk9URTogVGhlIG5leHQgbGluZSBpcyBsaW5lIDI4LCBh
bmQgd2UgcmVseSBvbiB0aGlzIGluIFByZXBhcmUuanMuCitjb25zdCBzdGFuZGFyZExpYnJhcnkg
PSBgCisvLyBUaGlzIGlzIHRoZSBXU0wgc3RhbmRhcmQgbGlicmFyeS4gSW1wbGVtZW50YXRpb25z
IG9mIGFsbCBvZiB0aGVzZSB0aGluZ3MgYXJlIGluCisvLyBJbnRyaW5zaWNzLmpzLiBUaGUgb25s
eSB0aGluZyB0aGF0IGdldHMgZGVmaW5lZCBiZWZvcmUgd2UgZ2V0IGhlcmUgaXMgdGhlIHByaW1p
dGl2ZQorLy8gcHJvdG9jb2wuCisKKy8vIE5lZWQgdG8gYm9vdHN0cmFwIHZvaWQgZmlyc3QuCitu
YXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgdm9pZDsKKworbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVm
IGludDMyOworbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIHVpbnQzMjsKK25hdGl2ZSBwcmltaXRp
dmUgdHlwZWRlZiBib29sOwordHlwZWRlZiBpbnQgPSBpbnQzMjsKK3R5cGVkZWYgdWludCA9IHVp
bnQzMjsKKworbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGRvdWJsZTsKKworbmF0aXZlIGludCBv
cGVyYXRvcisoaW50LCBpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3IrKHVpbnQsIHVpbnQpOwor
bmF0aXZlIGludCBvcGVyYXRvci0oaW50LCBpbnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3ItKHVp
bnQsIHVpbnQpOworbmF0aXZlIGludCBvcGVyYXRvciooaW50LCBpbnQpOworbmF0aXZlIHVpbnQg
b3BlcmF0b3IqKHVpbnQsIHVpbnQpOworbmF0aXZlIGludCBvcGVyYXRvci8oaW50LCBpbnQpOwor
bmF0aXZlIHVpbnQgb3BlcmF0b3IvKHVpbnQsIHVpbnQpOworbmF0aXZlIGJvb2wgb3BlcmF0b3I9
PShpbnQsIGludCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcj09KHVpbnQsIHVpbnQpOworbmF0aXZl
IGJvb2wgb3BlcmF0b3I9PShib29sLCBib29sKTsKKworcHJvdG9jb2wgRXF1YXRhYmxlIHsKKyAg
ICBib29sIG9wZXJhdG9yPT0oRXF1YXRhYmxlLCBFcXVhdGFibGUpOworfQorCityZXN0cmljdGVk
IG9wZXJhdG9yPFQ+IFQoKQoreworICAgIFQgZGVmYXVsdFZhbHVlOworICAgIHJldHVybiBkZWZh
dWx0VmFsdWU7Cit9CisKK3Jlc3RyaWN0ZWQgb3BlcmF0b3I8VD4gVChUIHgpCit7CisgICAgcmV0
dXJuIHg7Cit9CisKK29wZXJhdG9yPFQ6RXF1YXRhYmxlPiBib29sKFQgeCkKK3sKKyAgICByZXR1
cm4geCAhPSBUKCk7Cit9CisKK25hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3ImW108VD4odGhyZWFk
IFRbXSwgdWludCk7CituYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KHRocmVhZGdyb3VwIFRbXSwgdWludCk7CituYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltd
PFQ6cHJpbWl0aXZlPihkZXZpY2UgVFtdLCB1aW50KTsKK25hdGl2ZSBjb25zdGFudCBUXiBvcGVy
YXRvciZbXTxUOnByaW1pdGl2ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKK2A7CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlFcGlsb2d1ZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlF
cGlsb2d1ZS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNl
IHN0cmljdCI7Ci0KLS8vIE5PVEU6IFRoZSBuZXh0IGxpbmUgaXMgbGluZSAyOCwgYW5kIHdlIHJl
bHkgb24gdGhpcyBpbiBQcmVwYXJlLmpzLgotY29uc3Qgc3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUg
PSBgCi1vcGVyYXRvciBib29sPD48VDpFcXVhdGFibGU+KFQgeCkgewotICAgIFQgZGVmYXVsdFZh
bHVlOwotICAgIHJldHVybiB4ICE9IGRlZmF1bHRWYWx1ZTsKLX0KLWA7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlQcm9s
b2d1ZS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0
cmljdCI7Ci0KLS8vIE5PVEU6IFRoZSBuZXh0IGxpbmUgaXMgbGluZSAyOCwgYW5kIHdlIHJlbHkg
b24gdGhpcyBpbiBQcmVwYXJlLmpzLgotY29uc3Qgc3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUgPSBg
Ci0vLyBUaGlzIGlzIHRoZSBXU0wgc3RhbmRhcmQgbGlicmFyeS4gSW1wbGVtZW50YXRpb25zIG9m
IGFsbCBvZiB0aGVzZSB0aGluZ3MgYXJlIGluCi0vLyBJbnRyaW5zaWNzLmpzLiBUaGUgb25seSB0
aGluZyB0aGF0IGdldHMgZGVmaW5lZCBiZWZvcmUgd2UgZ2V0IGhlcmUgaXMgdGhlIHByaW1pdGl2
ZQotLy8gcHJvdG9jb2wuCi0KLS8vIE5lZWQgdG8gYm9vdHN0cmFwIHZvaWQgZmlyc3QuCi1uYXRp
dmUgcHJpbWl0aXZlIHR5cGVkZWYgdm9pZDsKLQotbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGlu
dDMyOwotbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIHVpbnQzMjsKLW5hdGl2ZSBwcmltaXRpdmUg
dHlwZWRlZiBib29sOwotdHlwZWRlZiBpbnQgPSBpbnQzMjsKLXR5cGVkZWYgdWludCA9IHVpbnQz
MjsKLQotbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGRvdWJsZTsKLQotbmF0aXZlIGludCBvcGVy
YXRvcisoaW50LCBpbnQpOwotbmF0aXZlIHVpbnQgb3BlcmF0b3IrKHVpbnQsIHVpbnQpOwotbmF0
aXZlIGludCBvcGVyYXRvci0oaW50LCBpbnQpOwotbmF0aXZlIHVpbnQgb3BlcmF0b3ItKHVpbnQs
IHVpbnQpOwotbmF0aXZlIGludCBvcGVyYXRvciooaW50LCBpbnQpOwotbmF0aXZlIHVpbnQgb3Bl
cmF0b3IqKHVpbnQsIHVpbnQpOwotbmF0aXZlIGludCBvcGVyYXRvci8oaW50LCBpbnQpOwotbmF0
aXZlIHVpbnQgb3BlcmF0b3IvKHVpbnQsIHVpbnQpOwotbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShp
bnQsIGludCk7Ci1uYXRpdmUgYm9vbCBvcGVyYXRvcj09KHVpbnQsIHVpbnQpOwotbmF0aXZlIGJv
b2wgb3BlcmF0b3I9PShib29sLCBib29sKTsKLQotcHJvdG9jb2wgRXF1YXRhYmxlIHsKLSAgICBi
b29sIG9wZXJhdG9yPT0oRXF1YXRhYmxlLCBFcXVhdGFibGUpOwotfQotCi1vcGVyYXRvciBUPD48
VD4oVCB4KSB7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLW5hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3Im
W108VD4odGhyZWFkIFRbXSwgdWludCk7Ci1uYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3Im
W108VDpwcmltaXRpdmU+KHRocmVhZGdyb3VwIFRbXSwgdWludCk7Ci1uYXRpdmUgZGV2aWNlIFRe
IG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihkZXZpY2UgVFtdLCB1aW50KTsKLW5hdGl2ZSBjb25z
dGFudCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oY29uc3RhbnQgVFtdLCB1aW50KTsKLWA7
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAy
MjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKIDxzY3JpcHQgc3JjPSJGdW5jSW5zdGFudGlhdG9y
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJGdW5jUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJGdW5jdGlvbkxpa2VCbG9jay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iSW5mZXJUeXBlc0ZvckNhbGwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IklubGluZS5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIj48L3NjcmlwdD4KQEAgLTc2LDggKzc3LDcg
QEAKIDxzY3JpcHQgc3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVy
bkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVybkV4Y2VwdGlvbi5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9IlN0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJTdGFuZGFyZExpYnJhcnkuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5
cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMTc1
NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgZnVuY3Rpb24gZG9QcmVwKGNvZGUpCiAKIGZ1bmN0aW9uIGRv
TGV4KGNvZGUpCiB7Ci0gICAgbGV0IGxleGVyID0gbmV3IExleGVyKCIvaW50ZXJuYWwvdGVzdCIs
IDAsIGNvZGUpOworICAgIGxldCBsZXhlciA9IG5ldyBMZXhlcigiL2ludGVybmFsL3Rlc3QiLCAi
bmF0aXZlIiwgMCwgY29kZSk7CiAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgIGZvciAoOzspIHsK
ICAgICAgICAgbGV0IG5leHQgPSBsZXhlci5uZXh0KCk7CkBAIC04NSwxNyArODUsMTcgQEAgZnVu
Y3Rpb24gY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCBleHBlYwogZnVuY3Rpb24gY2hlY2tVSW50
KHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpCiB7CiAgICAgaWYgKCFyZXN1bHQudHlwZS5lcXVh
bHMocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMikpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigi
V3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU6ICIgKyByZXN1bHQudHlwZSk7CiAgICAgaWYgKHJl
c3VsdC52YWx1ZSAhPSBleHBlY3RlZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBy
ZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOworICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1ZSArICIg
KGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CiB9CiAKIGZ1bmN0aW9uIGNoZWNrQm9vbChw
cm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQogewogICAgIGlmICghcmVzdWx0LnR5cGUuZXF1YWxz
KHByb2dyYW0uaW50cmluc2ljcy5ib29sKSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9u
ZyByZXN1bHQgdHlwZTsgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJXcm9uZyByZXN1bHQgdHlwZTogIiArIHJlc3VsdC50eXBlKTsKICAgICBpZiAocmVzdWx0
LnZhbHVlICE9IGV4cGVjdGVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3Vs
dDogIiArIHJlc3VsdCArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0LnZhbHVlICsgIiAoZXhw
ZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKIH0KIAogZnVuY3Rpb24gY2hlY2tMZXhlclRva2Vu
KHJlc3VsdCwgZXhwZWN0ZWRJbmRleCwgZXhwZWN0ZWRLaW5kLCBleHBlY3RlZFRleHQpCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVmLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVSZWYuanMJKHJldmlzaW9uIDIyMTc1
NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVSZWYuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiw2ICsxMTYsOCBAQCBjbGFzcyBUeXBlUmVmIGV4dGVuZHMgVHlwZSB7CiAg
ICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLm5hbWUpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy50eXBlLnRvU3RyaW5nKCk7CiAgICAgICAgIGlmICghdGhpcy50
eXBlQXJndW1lbnRzLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CiAgICAg
ICAgIHJldHVybiB0aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiI7Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIy
MTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHdvcmtp
bmcgY29weSkKQEAgLTI1NSwxNCArMjU1LDEwIEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNp
dG9yQmFzZSB7CiAgICAgICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBvZiBhY3R1YWxUeXBlQXJn
dW1lbnRzKQogICAgICAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICB9
CisgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUpCisgICAgICAgICAgICBub2RlLnJldHVyblR5
cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAotICAgIHZpc2l0Q2FzdEV4cHJlc3Npb24obm9k
ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKLSAgICAg
ICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgIH0KLQogICAgIHZpc2l0TG9naWNh
bE5vdChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5vcGVyYW5kLnZpc2l0KHRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320327</attachid>
            <date>2017-09-08 18:43:18 -0700</date>
            <delta_ts>2017-09-08 19:06:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTc3NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMSBAQAorMjAxNy0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBvdmVybG9hZCByZXNvbHV0aW9uIHNob3VsZCBub3QgYmUgY2FzY2FkaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgcmVtb3ZlcyB0aGUgY2FzY2FkaW5nIG5hdHVyZSBvZiBvdmVybG9hZCByZXNvbHV0aW9u
IHRoYXQgV1NMIHVzZWQgdG8gaGF2ZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGgKKyAgICAgICAgc29t
ZXRoaW5nIEMrKy1saWtlLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgb3ZlcmxvYWQgY2FuZGlkYXRl
cyB0aGF0IG1hdGNoIHRoZSBjYWxsc2l0ZSwgdGhlbiB3ZSByZXNvbHZlCisgICAgICAgIHRoZW0g
YWdhaW5zdCBlYWNoIG90aGVyLiBBbnl0aW1lIGEgZnVuY3Rpb24gY2Fubm90IGJlIHJlc29sdmVk
IG9udG8gYW5vdGhlciBmdW5jdGlvbiwgaXQgaXMgcmVtb3ZlZCwKKyAgICAgICAgc2luY2UgdGhp
cyBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW4gc29tZSB3YXkgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIG90aGVyIG9uZSwgYW5kIHdlIGFyZSBqdXN0CisgICAgICAgIGxvb2tpbmcgZm9yIHRo
ZSBtb3N0IHNwZWNpZmljIGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgSWYgdGhpcyBwcm9j
ZXNzIGVuZHMgd2l0aCBvbmx5IG9uZSBmdW5jdGlvbiBiZWluZyBzZWxlY3RlZCwgdGhlbiB3ZSBz
dWNjZWVkLCBlbHNlIHdlIGZhaWwuCisgICAgICAgIAorICAgICAgICBBbHNvIGNoYW5nZWQgdGhl
IHN5bnRheCBmb3IgZGVmaW5pbmcgZ2VuZXJpYyBjYXN0cyB0bzoKKyAgICAgICAgCisgICAgICAg
IG9wZXJhdG9yPFQ+IFRoaW5neTxUPih0aGluZ3MpCisgICAgICAgIAorICAgICAgICBBbHNvIGZp
eGVkIHBhcnNpbmcgb2YgY2FzdCBleHByZXNzaW9ucy4gSXQncyBub3cgcG9zc2libGUgdG8gc2F5
IGEgY2FzdCBleHByZXNzaW9uIGluIFdTTC4KKyAgICAgICAgCisgICAgICAgIFRoZSByZW1vdmFs
IG9mIGNhc2NhZGluZyBjYXVzZXMgc29tZSBwcm9ibGVtcy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xs
b3dpbmcgdHdvIG9wZXJhdG9ycyBpbiBvdXIgc3RhbmRhcmQKKyAgICAgICAgbGlicmFyeSBhcmUg
YW1iaWd1b3VzIGZvciBib29sKGJvb2wpOgorICAgICAgICAKKyAgICAgICAgb3BlcmF0b3I8VD4g
VChUKQorICAgICAgICBvcGVyYXRvcjxUOkVxdWF0YWJsZT4gYm9vbChUKQorICAgICAgICAKKyAg
ICAgICAgSSB0aGluayB0aGF0IHdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gc2F5IHRoYXQgdGhl
IGZvbGxvd2luZyBvcGVyYXRvcnMgYXJlIHJlc3RyaWN0ZWQgdG8gdGhlIHN0YW5kYXJkCisgICAg
ICAgIGxpYnJhcnk6CisgICAgICAgIAorICAgICAgICBvcGVyYXRvcjxUPiBUKCkKKyAgICAgICAg
b3BlcmF0b3I8VD4gVChUKQorICAgICAgICAKKyAgICAgICAgSXQgc2hvdWxkIG5vdCBiZSBwb3Nz
aWJsZSB0byBldmVyIG92ZXJsb2FkIHRoZXNlLgorICAgICAgICAKKyAgICAgICAgVGhlc2UgY2hh
bmdlcyBhcmUgbW9zdGx5IHRlc3RlZCBieSBleGlzdGluZyB0ZXN0cyBhbmQgdGhlIGNoYW5nZXMg
aW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHdoaWNoIGhhcyB0bworICAgICAgICBiZSBwYXJzZWQg
Zm9yIGV2ZXJ5IHRlc3QuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwu
anM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzOgor
ICAgICAgICAoQXJyYXlSZWZUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzOgorICAgICAgICAoQ2FsbEV4
cHJlc3Npb24pOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0Nhc3Qp
OgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCByZXR1cm5UeXBlKToKKyAg
ICAgICAgKENhbGxFeHByZXNzaW9uLnByb3RvdHlwZS5yZXNvbHZlKToKKyAgICAgICAgKENhbGxF
eHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDYXN0KToKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXRDYXN0RGF0YSk6CisgICAgICAgIChDYWxsRXhwcmVzc2lvbi5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIu
anM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAg
ICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdExvZ2ljYWxOb3QpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanM6CisgICAgICAgIChGdW5jLnByb3RvdHlwZS5n
ZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qczoKKyAgICAgICAgKEZ1bmNEZWYpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAgICAgIChG
dW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuRmluZFR5cGVWYXJpYWJsZS5wcm90
b3R5cGUudmlzaXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0VW5pcXVlLkZpbmRUeXBlVmFyaWFibGUpOgorICAgICAgICAoRnVuY0luc3RhbnRp
YXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24ucHJvdG90
eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24pOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzOgorICAgICAgICAoRnVu
Y3Rpb25MaWtlQmxvY2sucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKEZ1bmN0aW9uTGlr
ZUJsb2NrKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9y
Q2FsbC5qczogQWRkZWQuCisgICAgICAgIChpbmZlclR5cGVzRm9yQ2FsbCk6CisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzOgorICAgICAgICAocmVzb2x2ZUlubGlu
ZWRGdW5jdGlvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanM6
CisgICAgICAgIChMZXhlcik6CisgICAgICAgIChMZXhlci5wcm90b3R5cGUubmV4dCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanM6CisgICAgICAgIChO
YW1lQ29udGV4dCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUubWFwRm9yKToKKyAg
ICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5hZGQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmdldCBsZXQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLlN5bWJv
bC5pdGVyYXRvcik6CisgICAgICAgIChOYW1lQ29udGV4dC5nZXQgY3VycmVudFN0YXRlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVy
LmpzOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS52aXNpdFByb2dyYW0pOgorICAg
ICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS5kZXRlcm1pbmVQb3NzaWJsZU92ZXJsb2Fkcyk6
CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xGdW5jRGVjbCk6
CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgor
ICAgICAgICAoTmFtZVJlc29sdmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYXRpdmVGdW5jLmpzOgorICAgICAgICAoTmF0aXZlRnVuYyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qczoKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLnZpc2l0
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAgICAg
KHBhcnNlUG9zc2libGVQcmVmaXgpOgorICAgICAgICAocGFyc2VGdW5jRGVjbCk6CisgICAgICAg
IChwYXJzZU5hdGl2ZUZ1bmMpOgorICAgICAgICAocGFyc2VOYXRpdmUpOgorICAgICAgICAocGFy
c2VQcmVmZXJyZWRGdW5jRGVmKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAgICAocHJlcGFyZSk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qczoKKyAgICAgICAgKFByb2dyYW0u
cHJvdG90eXBlLnJlc29sdmVGdW5jT3ZlcmxvYWQpOiBEZWxldGVkLgorICAgICAgICAoUHJvZ3Jh
bS5wcm90b3R5cGUuZ2V0IG5hbWVDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanM6CisgICAgICAgIChQcm90b2NvbERlY2wu
cHJvdG90eXBlLmluaGVyaXRzKToKKyAgICAgICAgKFByb3RvY29sRGVjbC5wcm90b3R5cGUuaGFz
SGVpcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qczoKKyAg
ICAgICAgKFB0clR5cGUucHJvdG90eXBlLnVuaWZ5SW1wbCk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qczoKKyAgICAgICAgKHJlc29sdmVP
dmVybG9hZEltcGwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xGdW5jRGVjbCk6
CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YSk6Cisg
ICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHByZWZlcnJlZC5vcGVyYXRvci5ULlQpOgorICAgICAgICAob3BlcmF0
b3IuVC5FcXVhdGFibGUuYm9vbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanM6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChkb0xleCk6CisgICAgICAgIChj
aGVja1VJbnQpOgorICAgICAgICAoY2hlY2tCb29sKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UeXBlUmVmLmpzOgorICAgICAgICAoVHlwZVJlZi5wcm90b3R5cGUudG9TdHJp
bmcpOgorICAgICAgICAoVHlwZVJlZik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJl
c3Npb24pOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6
IERlbGV0ZWQuCisKIDIwMTctMDktMDcgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFRlc3QgY29tbWl0IGFmdGVyIHNlcnZlciB1cGdyYWRlIGZyb20g
c3VidmVyc2lvbiAxLjkuNSB0byAxLjkuNwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FsbC5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGxvYWQoIkJvb2xMaXRl
cmFsLmpzIik7CiBsb2FkKCJDYWxsQXNzaWdubWVudC5qcyIpOwogbG9hZCgiQ2FsbEV4cHJlc3Np
b24uanMiKTsKIGxvYWQoIkNhbGxGdW5jdGlvbi5qcyIpOwotbG9hZCgiQ2FzdEV4cHJlc3Npb24u
anMiKTsKIGxvYWQoIkNoZWNrLmpzIik7CiBsb2FkKCJDaGVja0xpdGVyYWxUeXBlcy5qcyIpOwog
bG9hZCgiQ2hlY2tSZWN1cnNpb24uanMiKTsKQEAgLTY1LDYgKzY0LDcgQEAgbG9hZCgiRnVuY0Rl
Zi5qcyIpOwogbG9hZCgiRnVuY0luc3RhbnRpYXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRl
ci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtlQmxvY2suanMiKTsKK2xvYWQoIkluZmVyVHlwZXNG
b3JDYWxsLmpzIik7CiBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIuanMiKTsKIGxv
YWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwpAQCAtMTAwLDggKzEwMCw3IEBAIGxvYWQo
IlJlc29sdmVUeXBlRGVmcy5qcyIpOwogbG9hZCgiUmV0dXJuLmpzIik7CiBsb2FkKCJSZXR1cm5D
aGVja2VyLmpzIik7CiBsb2FkKCJSZXR1cm5FeGNlcHRpb24uanMiKTsKLWxvYWQoIlN0YW5kYXJk
TGlicmFyeUVwaWxvZ3VlLmpzIik7Ci1sb2FkKCJTdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5qcyIp
OworbG9hZCgiU3RhbmRhcmRMaWJyYXJ5LmpzIik7CiBsb2FkKCJTdHJ1Y3RMYXlvdXRCdWlsZGVy
LmpzIik7CiBsb2FkKCJTdHJ1Y3RUeXBlLmpzIik7CiBsb2FkKCJTdWJzdGl0dXRpb24uanMiKTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJ
KHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5
UmVmVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksMTAgQEAKIGNsYXNzIEFycmF5
UmVmVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgIHVuaWZ5SW1wbCh1bmlmaWNhdGlv
bkNvbnRleHQsIG90aGVyKQogICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBB
cnJheVJlZlR5cGUpKSB7CisgICAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFycmF5UmVmVHlw
ZSkgeworICAgICAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9IG90aGVyLmFkZHJlc3NT
cGFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5VHlwZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9
ICJ0aHJlYWQiKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEV4cHJl
c3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2Fs
bEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIs
MjAgQEAgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIAogICAgICAgICB0
aGlzLl90eXBlQXJndW1lbnRzID0gdHlwZUFyZ3VtZW50czsKICAgICAgICAgdGhpcy5fYXJndW1l
bnRMaXN0ID0gYXJndW1lbnRMaXN0OwogICAgICAgICB0aGlzLmZ1bmMgPSBudWxsOworICAgICAg
ICB0aGlzLl9pc0Nhc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IG51bGw7
CiAgICAgfQogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQogICAg
IGdldCB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gdGhpcy5fdHlwZUFyZ3VtZW50czsgfQogICAg
IGdldCBhcmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExpc3Q7IH0KKyAgICBn
ZXQgaXNDYXN0KCkgeyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CisgICAgZ2V0IHJldHVyblR5cGUo
KSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9CiAgICAgCiAgICAgcmVzb2x2ZShvdmVybG9h
ZCkKICAgICB7CiAgICAgICAgIHRoaXMuZnVuYyA9IG92ZXJsb2FkLmZ1bmM7Ci0gICAgICAgIHRo
aXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVBcmd1bWVudHM7CisgICAgICAg
IHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA9IG92ZXJsb2FkLnR5cGVBcmd1bWVudHMubWFwKFR5
cGVSZWYud3JhcCk7CiAgICAgICAgIGxldCByZXN1bHQgPSBvdmVybG9hZC5mdW5jLnJldHVyblR5
cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCiAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5
cGVQYXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwogICAgICAgICBpZiAo
IXJlc3VsdCkKQEAgLTQ5LDkgKzUzLDI3IEBAIGNsYXNzIENhbGxFeHByZXNzaW9uIGV4dGVuZHMg
RXhwcmVzc2lvbiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgYmVj
b21lQ2FzdChyZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IG5l
dyBUeXBlUmVmKHRoaXMub3JpZ2luLCB0aGlzLm5hbWUsIHRoaXMuX3R5cGVBcmd1bWVudHMpOwor
ICAgICAgICB0aGlzLl9yZXR1cm5UeXBlLnR5cGUgPSByZXR1cm5UeXBlOworICAgICAgICB0aGlz
Ll9uYW1lID0gIm9wZXJhdG9yIGNhc3QiOworICAgICAgICB0aGlzLl9pc0Nhc3QgPSB0cnVlOwor
ICAgICAgICB0aGlzLl90eXBlQXJndW1lbnRzID0gW107CisgICAgfQorICAgIAorICAgIHNldENh
c3REYXRhKHJldHVyblR5cGUpCisgICAgeworICAgICAgICB0aGlzLl9yZXR1cm5UeXBlID0gcmV0
dXJuVHlwZTsKKyAgICAgICAgdGhpcy5faXNDYXN0ID0gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAg
dG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArICI8IiArIHRoaXMu
dHlwZUFyZ3VtZW50cyArICI+KCIgKyB0aGlzLmFyZ3VtZW50TGlzdCArICIpIjsKKyAgICAgICAg
cmV0dXJuICh0aGlzLmlzQ2FzdCA/ICJvcGVyYXRvciAiICsgdGhpcy5yZXR1cm5UeXBlIDogdGhp
cy5uYW1lKSArCisgICAgICAgICAgICAiPCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiIgKwor
ICAgICAgICAgICAgKHRoaXMuYWN0dWFsVHlwZUFyZ3VtZW50cyA/ICI8PCIgKyB0aGlzLmFjdHVh
bFR5cGVBcmd1bWVudHMgKyAiPj4iIDogIiIpICsKKyAgICAgICAgICAgICIoIiArIHRoaXMuYXJn
dW1lbnRMaXN0ICsgIikiOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2FzdEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ2FzdEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nhc3RFeHByZXNzaW9uLmpzCShub25leGlzdGVu
dCkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLyBUaGlzIGlzIGEgYml0IG9mIGEgbWlzbm9tZXIs
IGFzIHRoaXMgcmVwcmVzZW50cyBjYXN0cyBhcyB3ZWxsIGFzIGNvbnN0cnVjdG9ycy4KLS8vIFN5
bnRhY3RpY2FsbHkgdGhleSBhcmUgaWRlbnRpY2FsOyBhIGNhc3QganVzdCB0YWtlcyBvbmUgYXJn
dW1lbnQgd2hlcmVhcyBhCi0vLyBjb25zdHJ1Y3RvciB0YWtlcyAwLW4uCi1jbGFzcyBDYXN0RXhw
cmVzc2lvbiBleHRlbmRzIENhbGxFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4s
IHJldHVyblR5cGUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50TGlzdCkKLSAgICB7Ci0gICAgICAg
IHN1cGVyKG9yaWdpbiwgQ2FzdEV4cHJlc3Npb24uZnVuY3Rpb25OYW1lLCB0eXBlQXJndW1lbnRz
LCBhcmd1bWVudExpc3QpOwotICAgICAgICB0aGlzLl9yZXR1cm5UeXBlID0gcmV0dXJuVHlwZTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgZ2V0IGZ1bmN0aW9uTmFtZSgpIHsgcmV0dXJuICJvcGVyYXRv
ciBjYXN0IjsgfQotICAgIAotICAgIGdldCByZXR1cm5UeXBlKCkgeyByZXR1cm4gdGhpcy5fcmV0
dXJuVHlwZTsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLnJldHVyblR5cGUgKyAiPCIgKyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPigiICsgdGhpcy5h
cmd1bWVudExpc3QgKyAiKSI7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQs
NyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgY2hlY2tDYXN0T3JDYWxsRXhwcmVzc2lvbihub2RlLCByZXR1cm5U
eXBlKQorICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGZvciAo
bGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgICB0eXBl
QXJndW1lbnQudmlzaXQodGhpcyk7CkBAIC0yNDUsOCArMjQ1LDggQEAgY2xhc3MgQ2hlY2tlciBl
eHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgcmV0dXJuIFR5cGVSZWYud3JhcChuZXdBcmd1
bWVudCk7CiAgICAgICAgIH0pOwogICAgICAgICBub2RlLmFyZ3VtZW50VHlwZXMgPSBhcmd1bWVu
dFR5cGVzOwotICAgICAgICBpZiAocmV0dXJuVHlwZSkKLSAgICAgICAgICAgIHJldHVyblR5cGUu
dmlzaXQodGhpcyk7CisgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUpCisgICAgICAgICAgICBu
b2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7CiAgICAgICAgIAogICAgICAgICBsZXQgb3Zlcmxv
YWQgPSBudWxsOwogICAgICAgICBsZXQgZmFpbHVyZXMgPSBbXTsKQEAgLTI1OSwxOCArMjU5LDIz
IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgICAgICB0eXBl
UGFyYW1ldGVyLnByb3RvY29sLnByb3RvY29sRGVjbC5zaWduYXR1cmVzQnlOYW1lV2l0aFR5cGVW
YXJpYWJsZShub2RlLm5hbWUsIHR5cGVQYXJhbWV0ZXIpOwogICAgICAgICAgICAgaWYgKCFzaWdu
YXR1cmVzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3ZlcmxvYWQg
PSByZXNvbHZlT3ZlcmxvYWRJbXBsKHNpZ25hdHVyZXMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJn
dW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CisgICAgICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVP
dmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVz
LCBub2RlLnJldHVyblR5cGUpOwogICAgICAgICAgICAgaWYgKG92ZXJsb2FkLmZ1bmMpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKC4uLm92ZXJsb2Fk
LmZhaWx1cmVzKTsKICAgICAgICAgICAgIG92ZXJsb2FkID0gbnVsbDsKICAgICAgICAgfQogICAg
ICAgICBpZiAoIW92ZXJsb2FkKSB7Ci0gICAgICAgICAgICBvdmVybG9hZCA9IHRoaXMuX3Byb2dy
YW0ucmVzb2x2ZUZ1bmNPdmVybG9hZCgKLSAgICAgICAgICAgICAgICBub2RlLm5hbWUsIG5vZGUu
dHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CisgICAgICAgICAgICBv
dmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoCisgICAgICAgICAgICAgICAgbm9kZS5wb3Nz
aWJsZU92ZXJsb2Fkcywgbm9kZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCBub2RlLnJl
dHVyblR5cGUpOwogICAgICAgICAgICAgaWYgKCFvdmVybG9hZC5mdW5jKSB7CiAgICAgICAgICAg
ICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5mYWlsdXJlcyk7Ci0gICAgICAgICAgICAg
ICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIjsKKyAgICAg
ICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwg
d2l0aCAiOworICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoKQor
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJ0eXBlIGFyZ3VtZW50cyA8IiArIG5vZGUu
dHlwZUFyZ3VtZW50cyArICI+IGFuZCAiOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gImFy
Z3VtZW50IHR5cGVzICgiICsgYXJndW1lbnRUeXBlcyArICIpIjsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS5yZXR1cm5UeXBlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IiBhbmQg
cmV0dXJuIHR5cGUgIiArIG5vZGUucmV0dXJuVHlwZTsKICAgICAgICAgICAgICAgICBpZiAoZmFp
bHVyZXMubGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIsIGJ1dCBjb25z
aWRlcmVkOlxuIiArIGZhaWx1cmVzLmpvaW4oIlxuIikKICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG1lc3NhZ2UpOwpAQCAtMjg2
LDE1ICsyOTEsNSBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIG5vZGUucmVzb2x2ZShvdmVybG9hZCk7CiAgICAgfQotCi0gICAgdmlz
aXRDYXN0RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tD
YXN0T3JDYWxsRXhwcmVzc2lvbihub2RlLCBub2RlLnJldHVyblR5cGUpOwotICAgIH0KLSAgICAK
LSAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5jaGVja0Nhc3RPckNhbGxFeHByZXNzaW9uKG5vZGUsIHVuZGVmaW5lZCk7Ci0gICAgfQogfQog
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCShyZXZp
c2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsOCBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0
ZW5kcyBWaXNpdG9yIHsKIAogICAgIHZpc2l0TG9naWNhbE5vdChub2RlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEVQdHIuYm94KCFub2RlLm9wZXJhbmQudmlzaXQodGhpcykubG9hZFZhbHVlKCkp
OworICAgICAgICBsZXQgcmVzdWx0ID0gIW5vZGUub3BlcmFuZC52aXNpdCh0aGlzKS5sb2FkVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIEVQdHIuYm94KHJlc3VsdCk7CiAgICAgfQogICAgIAogICAg
IHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuYy5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBGdW5j
IGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IHBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlzLl9wYXJh
bWV0ZXJzOyB9CiAgICAgZ2V0IHBhcmFtZXRlclR5cGVzKCkgeyByZXR1cm4gdGhpcy5wYXJhbWV0
ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnR5cGUpOyB9CiAgICAgZ2V0IGlzQ2FzdCgp
IHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQorICAgIGdldCByZXR1cm5UeXBlRm9yT3ZlcmxvYWRS
ZXNvbHV0aW9uKCkgeyByZXR1cm4gdGhpcy5pc0Nhc3QgPyB0aGlzLnJldHVyblR5cGUgOiBudWxs
OyB9CiAgICAgCiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBGdW5jOyB9CiAgICAgCkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMJKHJldmlzaW9uIDIyMTc1NykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAgY2xhc3MgRnVuY0RlZiBleHRlbmRzIEZ1bmMgewogICAgIHsK
ICAgICAgICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywg
cGFyYW1ldGVycywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5fYm9keSA9IGJvZHk7CisgICAgICAg
IHRoaXMuaXNSZXN0cmljdGVkID0gZmFsc2U7CiAgICAgfQogCiAgICAgZ2V0IGJvZHkoKSB7IHJl
dHVybiB0aGlzLl9ib2R5OyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9G
dW5jSW5zdGFudGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDE0IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgIC8vIHJlc29s
dXRpb25zIG9uIHRoZSBvcmlnaW5hbCBQcm9ncmFtLgogICAgIGdldFVuaXF1ZShmdW5jLCB0eXBl
QXJndW1lbnRzKQogICAgIHsKKyAgICAgICAgY2xhc3MgRmluZFR5cGVWYXJpYWJsZSBleHRlbmRz
IFZpc2l0b3IgeworICAgICAgICAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkgeworICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlOiAiICsg
bm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgdHlwZUFy
Z3VtZW50IG9mIHR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICB0eXBlQXJndW1lbnQudmlzaXQo
bmV3IEZpbmRUeXBlVmFyaWFibGUoKSk7CisgICAgICAgIAogICAgICAgICBsZXQgaW5zdGFuY2Vz
ID0gdGhpcy5faW5zdGFuY2VzLmdldChmdW5jKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZXMpCiAg
ICAgICAgICAgICB0aGlzLl9pbnN0YW5jZXMuc2V0KGZ1bmMsIGluc3RhbmNlcyA9IFtdKTsKQEAg
LTY0LDcgKzcyLDcgQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbWF5IGhhdmUgdG8gcmUtcmVzb2x2ZSB0aGUgZnVuY3Rpb24gY2FsbCwgaWYgaXQgd2Fz
IGEgY2FsbCB0byBhIHByb3RvY29sCiAgICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlLgogICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQuZnVuYyBpbnN0YW5jZW9mIFByb3RvY29sRnVuY0RlY2wp
IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gdGhpc0luc3RhbnRpYXRvci5f
cHJvZ3JhbS5yZXNvbHZlRnVuY092ZXJsb2FkKHJlc3VsdC5uYW1lLCByZXN1bHQudHlwZUFyZ3Vt
ZW50cywgcmVzdWx0LmFyZ3VtZW50VHlwZXMpOworICAgICAgICAgICAgICAgICAgICBsZXQgb3Zl
cmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVz
dWx0LnR5cGVBcmd1bWVudHMsIHJlc3VsdC5hcmd1bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlw
ZUZvck92ZXJsb2FkUmVzb2x1dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3Zlcmxv
YWQuZnVuYykKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQg
bm90IHJlc29sdmUgcHJvdG9jb2wgc2lnbmF0dXJlIGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3Rh
bnRpYXRpb246ICIgKyByZXN1bHQuZnVuYyArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAi
OyB0cmllZDpcbiIgKyBvdmVybG9hZC5mYWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUob3ZlcmxvYWQpOwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMJKHJldmlz
aW9uIDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlr
ZUJsb2NrLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2IEBAIGNsYXNzIEZ1bmN0aW9u
TGlrZUJsb2NrIGV4dGVuZHMgVmFsdWUgewogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAiKFsmXSAoIiArIHRoaXMucGFyYW1ldGVycyArICIpIC0+ICIgKyB0aGlz
LnJldHVyblR5cGUgKyAiIHsgIiArIHRoaXMuYmxvY2sgKyAiIH0oIiArIHRoaXMuYXJndW1lbnRM
aXN0ICsgIikpIjsKKyAgICAgICAgcmV0dXJuICIoWyZdICgiICsgdGhpcy5wYXJhbWV0ZXJzICsg
IikgLT4gIiArIHRoaXMucmV0dXJuVHlwZSArICIgeyAiICsgdGhpcy5ib2R5ICsgIiB9KCIgKyB0
aGlzLmFyZ3VtZW50TGlzdCArICIpKSI7CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBpbmZlclR5cGVz
Rm9yQ2FsbChmdW5jLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQor
eworICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCAh
PSBmdW5jLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBu
ZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUg
YXJndW1lbnRzIChwYXNzZWQgIiArIHR5cGVBcmd1bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAi
ICsgZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGggKyAiKSIpfTsKKyAgICBpZiAoYXJndW1lbnRU
eXBlcy5sZW5ndGggIT0gZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtm
YWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVy
IG9mIGFyZ3VtZW50cyAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzLmxlbmd0aCArICIsIHJlcXVp
cmUgIiArIGZ1bmMucGFyYW1ldGVycy5sZW5ndGggKyAiKSIpfTsKKyAgICBsZXQgdW5pZmljYXRp
b25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgbGV0IGFyZ3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKKyAgICAgICAgbGV0IHBhcmFt
ZXRlciA9IGZ1bmMudHlwZVBhcmFtZXRlcnNbaV07CisgICAgICAgIGlmICghYXJndW1lbnQudW5p
ZnkodW5pZmljYXRpb25Db250ZXh0LCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHtm
YWlsdXJlOiBuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiVHlwZSBhcmd1bWVu
dCAjIiArIChpICsgMSkgKyAiIGZvciBwYXJhbWV0ZXIgIiArIHBhcmFtZXRlci5uYW1lICsgIiBk
b2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVudCArICIsIHJlcXVpcmUgIiArIHBhcmFt
ZXRlciArICIpIil9OworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50VHlw
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQorICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsK
KyAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwg
ZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBu
ZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEp
ICsgIiAiICsgKGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1
bmMucGFyYW1ldGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIg
KyBhcmd1bWVudFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5
cGUgKyAiKSIpfTsKKyAgICB9CisgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5p
ZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQorICAgICAgICByZXR1cm4g
e2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlw
ZSAiICsgZnVuYy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9
OworICAgIGlmICghdW5pZmljYXRpb25Db250ZXh0LnZlcmlmeSgpKQorICAgICAgICByZXR1cm4g
e2ZhaWx1cmU6IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJWaW9sYXRlcyB0
eXBlIHZhcmlhYmxlIGNvbnN0cmFpbnRzIil9OworICAgIGxldCBzaG91bGRCdWlsZFR5cGVBcmd1
bWVudHMgPSAhdHlwZUFyZ3VtZW50cy5sZW5ndGg7CisgICAgaWYgKHNob3VsZEJ1aWxkVHlwZUFy
Z3VtZW50cykKKyAgICAgICAgdHlwZUFyZ3VtZW50cyA9IFtdOworICAgIGZvciAobGV0IHR5cGVQ
YXJhbWV0ZXIgb2YgZnVuYy50eXBlUGFyYW1ldGVycykgeworICAgICAgICBsZXQgdHlwZUFyZ3Vt
ZW50ID0gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodHlwZVBhcmFtZXRlcik7CisgICAgICAgIGlm
ICh0eXBlQXJndW1lbnQgPT0gdHlwZVBhcmFtZXRlcikKKyAgICAgICAgICAgIHJldHVybiB7ZmFp
bHVyZTogbmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlR5cGUgcGFyYW1ldGVy
ICIgKyB0eXBlUGFyYW1ldGVyICsgIiBkaWQgbm90IGdldCBhc3NpZ25lZCBhIHR5cGUiKX07Cisg
ICAgICAgIGlmIChzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICB0eXBlQXJn
dW1lbnRzLnB1c2godHlwZUFyZ3VtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHtmdW5jLCB1bmlm
aWNhdGlvbkNvbnRleHQsIHR5cGVBcmd1bWVudHN9OworfQorCkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgZnVuY3Rpb24gX2lubGluZUZ1bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogCiBmdW5jdGlv
biByZXNvbHZlSW5saW5lZEZ1bmN0aW9uKHByb2dyYW0sIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFy
Z3VtZW50VHlwZXMpCiB7Ci0gICAgbGV0IG92ZXJsb2FkID0gcHJvZ3JhbS5yZXNvbHZlRnVuY092
ZXJsb2FkKG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMpOworICAgIGxldCBvdmVy
bG9hZCA9IHByb2dyYW0uZ2xvYmFsTmFtZUNvbnRleHQucmVzb2x2ZUZ1bmNPdmVybG9hZChuYW1l
LCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKTsKICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMp
CiAgICAgICAgIHJldHVybiBvdmVybG9hZC5mYWlsdXJlczsKICAgICBpZiAoIW92ZXJsb2FkLmZ1
bmMudHlwZVBhcmFtZXRlcnMpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9M
ZXhlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhl
ci5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TGV4ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEwIEBACiAidXNlIHN0cmljdCI7
CiAKIGNsYXNzIExleGVyIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxpbmVOdW1iZXJPZmZz
ZXQsIHRleHQpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBvcmlnaW5LaW5kLCBsaW5lTnVtYmVy
T2Zmc2V0LCB0ZXh0KQogICAgIHsKICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAg
ICAgICB0aGlzLl9vcmlnaW5LaW5kID0gb3JpZ2luS2luZDsKICAgICAgICAgdGhpcy5fbGluZU51
bWJlck9mZnNldCA9IGxpbmVOdW1iZXJPZmZzZXQ7CiAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0
OwogICAgICAgICB0aGlzLl9pbmRleCA9IDA7CkBAIC0xMDMsOCArMTA0LDEyIEBAIGNsYXNzIExl
eGVyIHsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gVW5pY29kZS4K
ICAgICAgICAgaWYgKC9eW15cZFxXXVx3Ki8udGVzdChyZWxldmFudFRleHQpKSB7Ci0gICAgICAg
ICAgICBpZiAoWyJzdHJ1Y3QiLCAicHJvdG9jb2wiLCAidHlwZWRlZiIsICJpZiIsICJlbHNlIiwg
ImVudW0iLCAiY29udGludWUiLCAiYnJlYWsiLCAic3dpdGNoIiwgImNhc2UiLCAiZGVmYXVsdCIs
ICJmb3IiLCAid2hpbGUiLCAiZG8iLCAicmV0dXJuIiwgInNpemVvZiIsICJjb25zdGFudCIsICJk
ZXZpY2UiLCAidGhyZWFkZ3JvdXAiLCAidGhyZWFkIiwgIm9wZXJhdG9yIiwgIm51bGwiLCAidHJ1
ZSIsICJmYWxzZSJdLmluY2x1ZGVzKFJlZ0V4cC5sYXN0TWF0Y2gpKQorICAgICAgICAgICAgaWYg
KC9eKHN0cnVjdHxwcm90b2NvbHx0eXBlZGVmfGlmfGVsc2V8ZW51bXxjb250aW51ZXxicmVha3xz
d2l0Y2h8Y2FzZXxkZWZhdWx0fGZvcnx3aGlsZXxkb3xyZXR1cm58Y29uc3RhbnR8ZGV2aWNlfHRo
cmVhZGdyb3VwfHRocmVhZHxvcGVyYXRvcnxudWxsfHRydWV8ZmFsc2UpJC8udGVzdChSZWdFeHAu
bGFzdE1hdGNoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJrZXl3b3JkIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0aGlzLl9vcmlnaW5LaW5kID09ICJuYXRpdmUi
ICYmIC9eKG5hdGl2ZXxyZXN0cmljdGVkKSQvLnRlc3QoUmVnRXhwLmxhc3RNYXRjaCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgia2V5d29yZCIpOworICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0KCJpZGVudGlmaWVyIik7CiAgICAgICAgIH0KIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHJldmlzaW9u
IDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIGZ1bmN0aW9uIGlzV2lsZGNhcmRLaW5k
KGtpbmQpCiBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgY29uc3RydWN0b3IoZGVsZWdhdGUpCiAg
ICAgewotICAgICAgICB0aGlzLl9mdW5jTWFwID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9t
YXAgPSBuZXcgTWFwKCk7CiAgICAgICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKICAgICAgICAg
dGhpcy5fZGVmaW5lZCA9IG51bGw7CkBAIC01MSw5ICs1MCw4IEBAIGNsYXNzIE5hbWVDb250ZXh0
IHsKICAgICAgICAgY2FzZSBWYWx1ZToKICAgICAgICAgY2FzZSBUeXBlOgogICAgICAgICBjYXNl
IFByb3RvY29sOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDsKICAgICAgICAgY2FzZSBG
dW5jOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmNNYXA7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fbWFwOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQga2luZDogIiArIGtpbmQpOwogICAgICAgICB9CkBAIC03Miw5ICs3MCwxNCBAQCBj
bGFzcyBOYW1lQ29udGV4dCB7CiAgICAgICAgIAogICAgICAgICBpZiAodGhpbmcua2luZCA9PSBG
dW5jKSB7CiAgICAgICAgICAgICB0aGlzLl9zZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIGxl
dCBhcnJheSA9IHRoaXMuX2Z1bmNNYXAuZ2V0KHRoaW5nLm5hbWUpOwotICAgICAgICAgICAgaWYg
KCFhcnJheSkKLSAgICAgICAgICAgICAgICB0aGlzLl9mdW5jTWFwLnNldCh0aGluZy5uYW1lLCBh
cnJheSA9IFtdKTsKKyAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuX21hcC5nZXQodGhpbmcu
bmFtZSk7CisgICAgICAgICAgICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICAgICAgYXJyYXkg
PSBbXTsKKyAgICAgICAgICAgICAgICBhcnJheS5raW5kID0gRnVuYzsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tYXAuc2V0KHRoaW5nLm5hbWUsIGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChhcnJheS5raW5kICE9IEZ1bmMpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3IodGhpbmcub3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCByZXVzZSB0eXBl
IG5hbWUgZm9yIGZ1bmN0aW9uOiAiICsgdGhpbmcubmFtZSk7CiAgICAgICAgICAgICBhcnJheS5w
dXNoKHRoaW5nKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTQsNiArOTcs
MTUgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKKyAgICByZXNvbHZlRnVuY092ZXJsb2FkKG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50VHlwZXMsIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBsZXQgZnVuY3Rpb25zID0gdGhp
cy5nZXQoRnVuYywgbmFtZSk7CisgICAgICAgIGlmICghZnVuY3Rpb25zKQorICAgICAgICAgICAg
cmV0dXJuIHtmYWlsdXJlczogW119OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc29sdmVP
dmVybG9hZEltcGwoZnVuY3Rpb25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1
cm5UeXBlKTsKKyAgICB9CisgICAgCiAgICAgZ2V0IGN1cnJlbnRTdGF0ZW1lbnQoKQogICAgIHsK
ICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQpCkBAIC0xNjUsMTEgKzE3NywxMyBA
QCBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgCiAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkKICAg
ICB7Ci0gICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHRoaXMuX21hcC52YWx1ZXMoKSkKKyAgICAg
ICAgZm9yIChsZXQgdmFsdWUgb2YgdGhpcy5fbWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBp
ZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGZ1
bmMgb2YgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZ1bmM7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB5aWVsZCB2YWx1ZTsK
LSAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2YgdGhpcy5fZnVuY01hcC52YWx1ZXMoKSkgewotICAg
ICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykKLSAgICAgICAgICAgICAgICB5aWVsZCBm
dW5jOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCw3IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAg
ICBsZXQgY2hlY2tlciA9IG5ldyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgICAgICBm
b3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCiAgICAgICAgICAg
ICBuYW1lQ29udGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNp
dChjaGVja2VyKSk7CisgICAgICAgIG5vZGUuZ2xvYmFsTmFtZUNvbnRleHQgPSBuYW1lQ29udGV4
dDsKICAgICB9CiAgICAgCiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250
ZXh0KG5vZGUpCkBAIC0xMDgsNiArMTA5LDMxIEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRz
IFZpc2l0b3IgewogICAgICAgICBub2RlLnByb3RvY29sRGVjbCA9IHJlc3VsdDsKICAgICB9CiAg
ICAgCisgICAgZGV0ZXJtaW5lUG9zc2libGVPdmVybG9hZHMobm9kZSkKKyAgICB7CisgICAgICAg
IGxldCBmdW5jcyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAg
ICAgICBpZiAoZnVuY3MpCisgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVu
Y3M7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLl9uYW1lQ29u
dGV4dC5nZXQoVHlwZSwgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJDYW5ub3QgZmluZCBhbnkgZnVuY3Rpb24gb3IgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsK
KyAgICAgICAgICAgIG5vZGUuYmVjb21lQ2FzdCh0eXBlKTsKKyAgICAgICAgICAgIG5vZGUucG9z
c2libGVPdmVybG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgIm9wZXJhdG9yIGNh
c3QiKTsKKyAgICAgICAgICAgIGlmICghbm9kZS5wb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJD
YW5ub3QgZmluZCBhbnkgb3BlcmF0b3IgY2FzdCBpbXBsZW1lbnRhdGlvbnMgaW4gY2FzdCB0byAi
ICsgdHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmlzaXRQcm90b2NvbEZ1bmNE
ZWNsKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLnZpc2l0RnVuYyhub2RlKTsKKyAgICAgICAg
bGV0IGZ1bmNzID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUubmFtZSk7CisgICAg
ICAgIGlmICghZnVuY3MpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVkICIgKyBu
b2RlLm5hLGUpOworICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAg
fQorICAgIAogICAgIHZpc2l0VHlwZURlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IG5hbWVD
b250ZXh0ID0gbmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKQEAgLTIwOSw2ICsy
MzUsMjAgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRD
YWxsRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1
bWVudHMobm9kZS50eXBlQXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIGxldCBmdW5jcyA9
IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAgICAgICBpZiAoZnVu
Y3MpCisgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoVHlw
ZSwgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmlu
ZCBhbnkgZnVuY3Rpb24gb3IgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAg
IG5vZGUuYmVjb21lQ2FzdCh0eXBlKTsKKyAgICAgICAgICAgIG5vZGUucG9zc2libGVPdmVybG9h
ZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgIm9wZXJhdG9yIGNhc3QiKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZS5wb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBh
bnkgb3BlcmF0b3IgY2FzdCBpbXBsZW1lbnRhdGlvbnMgaW4gY2FzdCB0byAiICsgdHlwZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9k
ZSk7CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRp
dmVGdW5jLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9OYXRpdmVGdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIGNsYXNz
IE5hdGl2ZUZ1bmMgZXh0ZW5kcyBGdW5jIHsKICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUs
IHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCiAgICAgewog
ICAgICAgICBzdXBlcihvcmlnaW4sIG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBw
YXJhbWV0ZXJzLCBpc0Nhc3QpOworICAgICAgICB0aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOwog
ICAgIH0KICAgICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE3ICsyNywxMiBAQAogY2xhc3MgTm9kZSB7CiAgICAgdmlzaXQodmlzaXRvcikKICAgICB7Ci0g
ICAgICAgIGxldCBtZW1vVGFibGUgPSB2aXNpdG9yLl9tZW1vVGFibGU7Ci0gICAgICAgIGlmICht
ZW1vVGFibGUuaGFzKHRoaXMpKQotICAgICAgICAgICAgcmV0dXJuIG1lbW9UYWJsZS5nZXQodGhp
cyk7Ci0gICAgICAgIAogICAgICAgICBsZXQgdmlzaXRGdW5jID0gdmlzaXRvclsidmlzaXQiICsg
dGhpcy5jb25zdHJ1Y3Rvci5uYW1lXTsKICAgICAgICAgaWYgKCF2aXNpdEZ1bmMpCiAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHZpc2l0IGZ1bmN0aW9uIGZvciAiICsgdGhpcy5jb25z
dHJ1Y3Rvci5uYW1lICsgIiBpbiAiICsgdmlzaXRvci5jb25zdHJ1Y3Rvci5uYW1lKTsKICAgICAg
ICAgbGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhpcyk7CiAgICAg
ICAgIGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCiAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IHZpc2l0b3IucmV0dXJuVmFsdWU7Ci0gICAgICAgIG1lbW9UYWJsZS5zZXQodGhpcywgcmV0
dXJuVmFsdWUpOwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMTc1NykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gcGFyc2Uo
cHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQorZnVuY3Rpb24gcGFyc2Uo
cHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaW5kLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewot
ICAgIGxldCBsZXhlciA9IG5ldyBMZXhlcihvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQp
OworICAgIGxldCBsZXhlciA9IG5ldyBMZXhlcihvcmlnaW4sIG9yaWdpbktpbmQsIGxpbmVOdW1i
ZXJPZmZzZXQsIHRleHQpOwogICAgIAogICAgIC8vIFRoZSBoYXJkZXN0IHBhcnQgb2YgZGVhbGlu
ZyB3aXRoIEMtbGlrZSBsYW5ndWFnZXMgaXMgcGFyc2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbiBz
dGF0ZW1lbnRzLgogICAgIC8vIExldCdzIGNvbnNpZGVyIGlmIHRoaXMgaGFwcGVucyBpbiBXU0wu
IEhlcmUgYXJlIHRoZSB2YWxpZCBzdGF0ZW1lbnRzIGluIFdTTCB0aGF0IGJlaW5nIHdpdGggYW4K
QEAgLTM4Miw3ICszODIsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVO
dW1iCiAgICAgICAgICAgICByZXR1cm4gbmV3IE1ha2VBcnJheVJlZkV4cHJlc3Npb24odG9rZW4s
IHBhcnNlUG9zc2libGVQcmVmaXgoKSk7CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUo
IiEiKSkgewogICAgICAgICAgICAgbGV0IHJlbWFpbmRlciA9IHBhcnNlUG9zc2libGVQcmVmaXgo
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTG9naWNhbE5vdCh0b2tlbiwgbmV3IENhc3RFeHBy
ZXNzaW9uKHJlbWFpbmRlci5vcmlnaW4sIG5ldyBUeXBlUmVmKHJlbWFpbmRlci5vcmlnaW4sICJi
b29sIiwgW10pLCBbXSwgW3JlbWFpbmRlcl0pKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTG9n
aWNhbE5vdCh0b2tlbiwgbmV3IENhbGxFeHByZXNzaW9uKHJlbWFpbmRlci5vcmlnaW4sICJib29s
IiwgW10sIFtyZW1haW5kZXJdKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBhcnNlUG9z
c2libGVTdWZmaXgoKTsKICAgICB9CkBAIC02MjcsMjAgKzYyNywyMiBAQCBmdW5jdGlvbiBwYXJz
ZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgICAgIGxldCBvcmlnaW47CiAgICAgICAg
IGxldCByZXR1cm5UeXBlOwogICAgICAgICBsZXQgbmFtZTsKKyAgICAgICAgbGV0IHR5cGVQYXJh
bWV0ZXJzOwogICAgICAgICBsZXQgaXNDYXN0OwogICAgICAgICBsZXQgb3BlcmF0b3JUb2tlbiA9
IHRyeUNvbnN1bWUoIm9wZXJhdG9yIik7CiAgICAgICAgIGlmIChvcGVyYXRvclRva2VuKSB7CiAg
ICAgICAgICAgICBvcmlnaW4gPSBvcGVyYXRvclRva2VuOworICAgICAgICAgICAgdHlwZVBhcmFt
ZXRlcnMgPSBwYXJzZVR5cGVQYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICByZXR1cm5UeXBlID0g
cGFyc2VUeXBlKCk7Ci0gICAgICAgICAgICBuYW1lID0gQ2FzdEV4cHJlc3Npb24uZnVuY3Rpb25O
YW1lOworICAgICAgICAgICAgbmFtZSA9ICJvcGVyYXRvciBjYXN0IjsKICAgICAgICAgICAgIGlz
Q2FzdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm5UeXBlID0g
cGFyc2VUeXBlKCk7CiAgICAgICAgICAgICBvcmlnaW4gPSByZXR1cm5UeXBlLm9yaWdpbjsKICAg
ICAgICAgICAgIG5hbWUgPSBwYXJzZUZ1bmNOYW1lKCk7CisgICAgICAgICAgICB0eXBlUGFyYW1l
dGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIGlzQ2FzdCA9IGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIGxldCB0eXBlUGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFt
ZXRlcnMoKTsKICAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKICAg
ICAgICAgcmV0dXJuIG5ldyBGdW5jKG9yaWdpbiwgbmFtZSwgcmV0dXJuVHlwZSwgdHlwZVBhcmFt
ZXRlcnMsIHBhcmFtZXRlcnMsIGlzQ2FzdCk7CiAgICAgfQpAQCAtNjkzLDYgKzY5NSwxMyBAQCBm
dW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAorICAgIGZ1bmN0aW9uIHBhcnNlTmF0aXZlRnVuYygpCisgICAg
eworICAgICAgICBsZXQgZnVuYyA9IHBhcnNlRnVuY0RlY2woKTsKKyAgICAgICAgY29uc3VtZSgi
OyIpOworICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZUZ1bmMoZnVuYy5vcmlnaW4sIGZ1bmMubmFt
ZSwgZnVuYy5yZXR1cm5UeXBlLCBmdW5jLnR5cGVQYXJhbWV0ZXJzLCBmdW5jLnBhcmFtZXRlcnMs
IGZ1bmMuaXNDYXN0KTsKKyAgICB9CisgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VOYXRpdmUoKQog
ICAgIHsKICAgICAgICAgbGV0IG9yaWdpbiA9IGNvbnN1bWUoIm5hdGl2ZSIpOwpAQCAtNzA5LDkg
KzcxOCwxOSBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAg
ICAgICAgICBjb25zdW1lKCI7Iik7CiAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZVR5cGUo
b3JpZ2luLCBuYW1lLnRleHQsIGlzVHlwZSA9PSAicHJpbWl0aXZlIiwgcGFyYW1ldGVycyk7CiAg
ICAgICAgIH0KLSAgICAgICAgbGV0IGZ1bmMgPSBwYXJzZUZ1bmNEZWNsKCk7Ci0gICAgICAgIGNv
bnN1bWUoIjsiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVGdW5jKGZ1bmMub3JpZ2luLCBm
dW5jLm5hbWUsIGZ1bmMucmV0dXJuVHlwZSwgZnVuYy50eXBlUGFyYW1ldGVycywgZnVuYy5wYXJh
bWV0ZXJzLCBmdW5jLmlzQ2FzdCk7CisgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZUZ1bmMoKTsK
KyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcGFyc2VSZXN0cmljdGVkRnVuY0RlZigpCisgICAg
eworICAgICAgICBjb25zdW1lKCJyZXN0cmljdGVkIik7CisgICAgICAgIGxldCByZXN1bHQ7Cisg
ICAgICAgIGlmICh0cnlDb25zdW1lKCJuYXRpdmUiKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHBh
cnNlTmF0aXZlRnVuYygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBwYXJz
ZUZ1bmNEZWYoKTsKKyAgICAgICAgcmVzdWx0LmlzUmVzdHJpY3RlZCA9IHRydWU7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGZvciAoOzspIHsKQEAgLTcyMiw4ICs3
NDEsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAg
ICAgICAgbGV4ZXIubmV4dCgpOwogICAgICAgICBlbHNlIGlmICh0b2tlbi50ZXh0ID09ICJ0eXBl
ZGVmIikKICAgICAgICAgICAgIHByb2dyYW0uYWRkKHBhcnNlVHlwZURlZigpKTsKLSAgICAgICAg
ZWxzZSBpZiAodG9rZW4udGV4dCA9PSAibmF0aXZlIikKKyAgICAgICAgZWxzZSBpZiAob3JpZ2lu
S2luZCA9PSAibmF0aXZlIiAmJiB0b2tlbi50ZXh0ID09ICJuYXRpdmUiKQogICAgICAgICAgICAg
cHJvZ3JhbS5hZGQocGFyc2VOYXRpdmUoKSk7CisgICAgICAgIGVsc2UgaWYgKG9yaWdpbktpbmQg
PT0gIm5hdGl2ZSIgJiYgdG9rZW4udGV4dCA9PSAicmVzdHJpY3RlZCIpCisgICAgICAgICAgICBw
cm9ncmFtLmFkZChwYXJzZVJlc3RyaWN0ZWRGdW5jRGVmKCkpOwogICAgICAgICBlbHNlIGlmICh0
b2tlbi50ZXh0ID09ICJzdHJ1Y3QiKQogICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VTdHJ1
Y3RUeXBlKCkpOwogICAgICAgICBlbHNlIGlmICh0b2tlbi50ZXh0ID09ICJlbnVtIikKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIxNzU3
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjcsOSArMjcsOCBAQAogZnVuY3Rpb24gcHJlcGFyZShvcmlnaW4sIGxpbmVOdW1i
ZXJPZmZzZXQsIHRleHQpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbSgpOwotICAg
IHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3RkbGliL3Byb2xvZ3VlIiwgMjgsIHN0YW5kYXJk
TGlicmFyeVByb2xvZ3VlKTsKLSAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iZXJP
ZmZzZXQsIHRleHQpOwotICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3RkbGliL2VwaWxv
Z3VlIiwgMjgsIHN0YW5kYXJkTGlicmFyeUVwaWxvZ3VlKTsKKyAgICBwYXJzZShwcm9ncmFtLCAi
L2ludGVybmFsL3N0ZGxpYiIsICJuYXRpdmUiLCAyNywgc3RhbmRhcmRMaWJyYXJ5KTsKKyAgICBw
YXJzZShwcm9ncmFtLCBvcmlnaW4sICJ1c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7CiAg
ICAgcmVzb2x2ZU5hbWVzKHByb2dyYW0pOwogICAgIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsK
ICAgICBjaGVjayhwcm9ncmFtKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Byb2dyYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJvZ3JhbS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJvZ3JhbS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgsMjMgKzU4LDYgQEAgY2xhc3Mg
UHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAgICB0aGlzLl90b3BMZXZlbFN0YXRlbWVudHMu
cHVzaChzdGF0ZW1lbnQpOwogICAgIH0KICAgICAKLSAgICByZXNvbHZlRnVuY092ZXJsb2FkKG5h
bWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCi0gICAgewotICAg
ICAgICBsZXQgZnVuY3Rpb25zID0gdGhpcy5mdW5jdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBp
ZiAoIWZ1bmN0aW9ucykKLSAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZXM6IFtdfTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiByZXNvbHZlT3ZlcmxvYWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFy
Z3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7Ci0gICAgfQotICAgIAotICAgIGdl
dCBuYW1lQ29udGV4dCgpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE5hbWVDb250
ZXh0KCk7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiB0aGlzLnRvcExldmVsU3RhdGVt
ZW50cykKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoc3RhdGVtZW50KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl90b3BMZXZlbFN0YXRlbWVudHMubGVuZ3RoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVjbC5qcwkocmV2aXNpb24gMjIxNzU3KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3Miw3IEBAIGNsYXNzIFByb3RvY29sRGVjbCBleHRlbmRzIFByb3RvY29s
IHsKICAgICAgICAgICAgIGxldCBzaWduYXR1cmVzID0gdGhpcy5zaWduYXR1cmVzQnlOYW1lKG90
aGVyU2lnbmF0dXJlLm5hbWUpOwogICAgICAgICAgICAgaWYgKCFzaWduYXR1cmVzKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29s
dmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgW10sIG90aGVyU2lnbmF0dXJlLnBhcmFtZXRlclR5
cGVzKTsKKyAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2ln
bmF0dXJlcywgW10sIG90aGVyU2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzLCBvdGhlclNpZ25hdHVy
ZS5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAgIGlmICghb3Zl
cmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBs
ZXQgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlID0KQEAgLTkwLDcgKzkwLDcgQEAgY2xhc3MgUHJvdG9j
b2xEZWNsIGV4dGVuZHMgUHJvdG9jb2wgewogICAgICAgICBsZXQgc2lnbmF0dXJlcyA9IHRoaXMu
c2lnbmF0dXJlczsKICAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIHsK
ICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZS52aXNpdChzdWJzdGl0dXRpb24pOwot
ICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gdGhpcy5wcm9ncmFtLnJlc29sdmVGdW5jT3Zlcmxv
YWQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycywgc2lnbmF0dXJlLnBh
cmFtZXRlclR5cGVzKTsKKyAgICAgICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9h
ZEltcGwoc2lnbmF0dXJlLnBvc3NpYmxlT3ZlcmxvYWRzLCBzaWduYXR1cmUudHlwZVBhcmFtZXRl
cnMsIHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywgc2lnbmF0dXJlLnJldHVyblR5dXBlRm9yT3Zl
cmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkocmV2aXNpb24gMjIxNzU3KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsOCBAQCBjbGFzcyBQdHJUeXBlIGV4dGVuZHMgUmVmZXJlbmNlVHlwZSB7CiAgICAgewog
ICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFB0clR5cGUpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpcy5hZGRyZXNzU3BhY2UgIT0gb3RoZXIuYWRkcmVz
c1NwYWNlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdGhpcy5l
bGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsK
ICAgICB9CiAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZl
T3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJldmlzaW9uIDIyMTc1NykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDY2ICsyNyw2OSBAQAogZnVuY3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChmdW5j
dGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpCiB7CiAgICAg
bGV0IGZhaWx1cmVzID0gW107CisgICAgbGV0IHN1Y2Nlc3NlcyA9IFtdOwogICAgIGZvciAobGV0
IGZ1bmMgb2YgZnVuY3Rpb25zKSB7Ci0gICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAm
JiB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBmdW5jLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewot
ICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShm
dW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIChwYXNzZWQgIiArIHR5cGVBcmd1
bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGgg
KyAiKSIpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChh
cmd1bWVudFR5cGVzLmxlbmd0aCAhPSBmdW5jLnBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJX
cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIChwYXNzZWQgIiArIGFyZ3VtZW50VHlwZXMubGVuZ3Ro
ICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aCArICIpIikpOwotICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGxldCBvdmVybG9hZCA9IGluZmVyVHlwZXNGb3JDYWxs
KGZ1bmMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOworICAgICAg
ICBpZiAob3ZlcmxvYWQuZmFpbHVyZSkKKyAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gob3Zlcmxv
YWQuZmFpbHVyZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1Y2Nlc3Nlcy5wdXNoKG92
ZXJsb2FkKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFzdWNjZXNzZXMubGVuZ3RoKQorICAgICAg
ICByZXR1cm4ge2ZhaWx1cmVzOiBmYWlsdXJlc307CisgICAgCisgICAgLy8gSWYgYW55IG9mIHRo
ZSBzaWduYXR1cmVzIGFyZSByZXN0cmljdGVkIHRoZW4gd2UgY29uc2lkZXIgdGhvc2UgZmlyc3Qu
IFRoaXMgaXMgYW4gZXNjYXBlIG1lY2hhbmlzbSBmb3IKKyAgICAvLyBidWlsdC1pbiB0aGluZ3Mu
CisgICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBhbiBlcnJvciB0byBkZWNsYXJlIGEgZnVuY3Rp
b24gdGhhdCBpcyBhdCBsZWFzdCBhcyBzcGVjaWZpYyBhcyBhIHJlc3RyaWN0ZWQgZnVuY3Rpb24u
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MAor
ICAgIGxldCBoYXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChsZXQgb3ZlcmxvYWQgb2Yg
c3VjY2Vzc2VzKSB7CisgICAgICAgIGlmIChvdmVybG9hZC5mdW5jLmlzUmVzdHJpY3RlZCkgewor
ICAgICAgICAgICAgaGFzUmVzdHJpY3RlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBsZXQgdW5pZmljYXRpb25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9u
Q29udGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsKKyAgICB9CisgICAgCisgICAgaWYgKGhhc1Jl
c3RyaWN0ZWQpCisgICAgICAgIHN1Y2Nlc3NlcyA9IHN1Y2Nlc3Nlcy5maWx0ZXIob3ZlcmxvYWQg
PT4gb3ZlcmxvYWQuZnVuYy5pc1Jlc3RyaWN0ZWQpOworICAgIAorICAgIC8vIFdlIGFyZSBvbmx5
IGludGVyZXN0ZWQgaW4gZnVuY3Rpb25zIHRoYXQgYXJlIGF0IGxlYXN0IGFzIHNwZWNpZmljIGFz
IGFsbCBvZiB0aGUgb3RoZXJzLiBUaGlzIG1lYW5zCisgICAgLy8gdGhhdCB0aGV5IGNhbiBiZSAi
dHVybmVkIGFyb3VuZCIgYW5kIGFwcGxpZWQgb250byBhbGwgb2YgdGhlIG90aGVyIGZ1bmN0aW9u
cyBpbiB0aGUgbGlzdC4KKyAgICBsZXQgcHJ1bmVkU3VjY2Vzc2VzID0gW107CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBzdWNjZXNzZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgbGV0IG9rID0g
dHJ1ZTsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1lbnQgPSB0eXBlQXJndW1lbnRzW2ldOwotICAg
ICAgICAgICAgbGV0IHBhcmFtZXRlciA9IGZ1bmMudHlwZVBhcmFtZXRlcnNbaV07Ci0gICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50LnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgcGFyYW1ldGVyKSkg
ewotICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZh
aWx1cmUoZnVuYywgIlR5cGUgYXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiBmb3IgcGFyYW1ldGVy
ICIgKyBwYXJhbWV0ZXIubmFtZSArICIgZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1l
bnQgKyAiLCByZXF1aXJlICIgKyBwYXJhbWV0ZXIgKyAiKSIpKTsKLSAgICAgICAgICAgICAgICBv
ayA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGlmICghb2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0pCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKLSAgICAgICAgICAgIGlmICghYXJn
dW1lbnRUeXBlc1tpXS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIGZ1bmMucGFyYW1ldGVyc1tp
XS50eXBlKSkgewotICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVz
b2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50ICMiICsgKGkgKyAxKSArICIgIiArIChmdW5j
LnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFyYW1ldGVyICIgKyBmdW5jLnBhcmFtZXRlcnNb
aV0ubmFtZSA6ICIiKSArICIgZG9lcyBub3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1lbnRUeXBl
c1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlICsgIikiKSk7Ci0g
ICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChyZXR1cm5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAoIXJldHVyblR5
cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5j
LCAiUmV0dXJuIHR5cGUgIiArIGZ1bmMucmV0dXJuVHlwZSArICIgZG9lcyBub3QgbWF0Y2ggIiAr
IHJldHVyblR5cGUpKTsKKyAgICAgICAgbGV0IGFyZ3VtZW50RnVuYyA9IHN1Y2Nlc3Nlc1tpXS5m
dW5jOworICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN1Y2Nlc3Nlcy5sZW5ndGg7ICsraikg
eworICAgICAgICAgICAgaWYgKGkgPT0gaikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIXVuaWZpY2F0aW9uQ29udGV4dC52
ZXJpZnkoKSkgewotICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0
aW9uRmFpbHVyZShmdW5jLCAiVmlvbGF0ZXMgdHlwZSB2YXJpYWJsZSBjb25zdHJhaW50cyIpKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGxldCBzaG91bGRCdWls
ZFR5cGVBcmd1bWVudHMgPSAhdHlwZUFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAgIGlmIChzaG91
bGRCdWlsZFR5cGVBcmd1bWVudHMpCi0gICAgICAgICAgICB0eXBlQXJndW1lbnRzID0gW107Ci0g
ICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2YgZnVuYy50eXBlUGFyYW1ldGVycykgewot
ICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudCA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHR5
cGVQYXJhbWV0ZXIpOwotICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudCA9PSB0eXBlUGFyYW1l
dGVyKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0
aW9uRmFpbHVyZShmdW5jLCAiVHlwZSBwYXJhbWV0ZXIgIiArIHR5cGVQYXJhbWV0ZXIgKyAiIGRp
ZCBub3QgZ2V0IGFzc2lnbmVkIGEgdHlwZSIpKTsKKyAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJG
dW5jID0gc3VjY2Vzc2VzW2pdLmZ1bmM7CisgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSBpbmZl
clR5cGVzRm9yQ2FsbCgKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJGdW5jLAorICAgICAgICAg
ICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRGdW5jLnR5cGVQYXJhbWV0ZXJz
IDogW10sCisgICAgICAgICAgICAgICAgYXJndW1lbnRGdW5jLnBhcmFtZXRlclR5cGVzLAorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50RnVuYy5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9u
KTsKKyAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgewogICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoc2hvdWxkQnVpbGRUeXBlQXJndW1lbnRzKQotICAgICAgICAgICAgICAgIHR5cGVB
cmd1bWVudHMucHVzaCh0eXBlQXJndW1lbnQpOwogICAgICAgICB9Ci0gICAgICAgIGlmICghb2sp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIHtmdW5jLCB1bmlmaWNhdGlv
bkNvbnRleHQsIHR5cGVBcmd1bWVudHN9OworICAgICAgICBpZiAob2spCisgICAgICAgICAgICBw
cnVuZWRTdWNjZXNzZXMucHVzaChzdWNjZXNzZXNbaV0pOworICAgIH0KKyAgICAKKyAgICBpZiAo
cHJ1bmVkU3VjY2Vzc2VzLmxlbmd0aCA9PSAxKQorICAgICAgICByZXR1cm4gcHJ1bmVkU3VjY2Vz
c2VzWzBdOworICAgIAorICAgIGxldCBhbWJpZ3VpdHlMaXN0OworICAgIGxldCBtZXNzYWdlOwor
ICAgIGlmIChwcnVuZWRTdWNjZXNzZXMubGVuZ3RoID09IDApIHsKKyAgICAgICAgYW1iaWd1aXR5
TGlzdCA9IHN1Y2Nlc3NlczsKKyAgICAgICAgbWVzc2FnZSA9ICJBbWJpZ3VvdXMgb3ZlcmxvYWQg
LSBubyBmdW5jdGlvbiBjYW4gYmUgYXBwbGllZCB0byBhbGwgb3RoZXJzIjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhbWJpZ3VpdHlMaXN0ID0gcHJ1bmVkU3VjY2Vzc2VzOworICAgICAgICBtZXNz
YWdlID0gIkFtYmlndW91cyBvdmVybG9hZCAtIGZ1bmN0aW9ucyBtdXR1YWxseSBhcHBsaWNhYmxl
IjsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHtmYWlsdXJlczogZmFpbHVyZXN9OworICAgIHJl
dHVybiB7ZmFpbHVyZXM6IGFtYmlndWl0eUxpc3QubWFwKG92ZXJsb2FkID0+IG5ldyBPdmVybG9h
ZFJlc29sdXRpb25GYWlsdXJlKG92ZXJsb2FkLmZ1bmMsIG1lc3NhZ2UpKX07CiB9CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNpb24gMjIxNzU3
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDYgKzc0LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFz
ZSB7CiAgICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFy
YW1ldGVyLnZpc2l0KHRoaXMpKSwKICAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFy
YW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlzKSkpOwogICAgICAgICByZXN1bHQucHJvdG9j
b2xEZWNsID0gbm9kZS5wcm90b2NvbERlY2w7CisgICAgICAgIHJlc3VsdC5wb3NzaWJsZU92ZXJs
b2FkcyA9IG5vZGUucG9zc2libGVPdmVybG9hZHM7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIApAQCAtMjQ5LDE4ICsyNTAsMTIgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBW
aXNpdG9yQmFzZSB7CiAgICAgICAgICAgICByZXN1bHQuYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50
VHlwZXMubWFwKGFyZ3VtZW50VHlwZSA9PiBhcmd1bWVudFR5cGUudmlzaXQodGhpcykpOwogICAg
ICAgICByZXN1bHQuZnVuYyA9IG5vZGUuZnVuYzsKICAgICAgICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJ
bnN0YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3RhbmNlOworICAgICAgICByZXN1bHQucG9zc2li
bGVPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzOworICAgICAgICBpZiAobm9kZS5p
c0Nhc3QpCisgICAgICAgICAgICByZXN1bHQuc2V0Q2FzdERhdGEobm9kZS5yZXR1cm5UeXBlLnZp
c2l0KHRoaXMpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2aXNpdENh
c3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IENhc3RF
eHByZXNzaW9uKAotICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUucmV0dXJuVHlwZS52aXNp
dCh0aGlzKSwKLSAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50
ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSksCi0gICAgICAgICAgICBub2RlLmFyZ3VtZW50
TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpKTsKLSAgICAgICAgcmV0
dXJuIHRoaXMucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YShub2RlLCByZXN1bHQpOwotICAgIH0KLSAg
ICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IENhbGxFeHByZXNzaW9uKApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworInVzZSBzdHJpY3QiOworCisvLyBOT1RFOiBUaGUgbmV4dCBsaW5lIGlzIGxpbmUgMjgs
IGFuZCB3ZSByZWx5IG9uIHRoaXMgaW4gUHJlcGFyZS5qcy4KK2NvbnN0IHN0YW5kYXJkTGlicmFy
eSA9IGAKKy8vIFRoaXMgaXMgdGhlIFdTTCBzdGFuZGFyZCBsaWJyYXJ5LiBJbXBsZW1lbnRhdGlv
bnMgb2YgYWxsIG9mIHRoZXNlIHRoaW5ncyBhcmUgaW4KKy8vIEludHJpbnNpY3MuanMuIFRoZSBv
bmx5IHRoaW5nIHRoYXQgZ2V0cyBkZWZpbmVkIGJlZm9yZSB3ZSBnZXQgaGVyZSBpcyB0aGUgcHJp
bWl0aXZlCisvLyBwcm90b2NvbC4KKworLy8gTmVlZCB0byBib290c3RyYXAgdm9pZCBmaXJzdC4K
K25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiB2b2lkOworCituYXRpdmUgcHJpbWl0aXZlIHR5cGVk
ZWYgaW50MzI7CituYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgdWludDMyOworbmF0aXZlIHByaW1p
dGl2ZSB0eXBlZGVmIGJvb2w7Cit0eXBlZGVmIGludCA9IGludDMyOwordHlwZWRlZiB1aW50ID0g
dWludDMyOworCituYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgZG91YmxlOworCituYXRpdmUgaW50
IG9wZXJhdG9yKyhpbnQsIGludCk7CituYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7
CituYXRpdmUgaW50IG9wZXJhdG9yLShpbnQsIGludCk7CituYXRpdmUgdWludCBvcGVyYXRvci0o
dWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJhdG9yKihpbnQsIGludCk7CituYXRpdmUgdWlu
dCBvcGVyYXRvcioodWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJhdG9yLyhpbnQsIGludCk7
CituYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWludCk7CituYXRpdmUgYm9vbCBvcGVyYXRv
cj09KGludCwgaW50KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yPT0odWludCwgdWludCk7CituYXRp
dmUgYm9vbCBvcGVyYXRvcj09KGJvb2wsIGJvb2wpOworCitwcm90b2NvbCBFcXVhdGFibGUgewor
ICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0YWJsZSk7Cit9CisKK3Jlc3RyaWN0
ZWQgb3BlcmF0b3I8VD4gVCgpCit7CisgICAgVCBkZWZhdWx0VmFsdWU7CisgICAgcmV0dXJuIGRl
ZmF1bHRWYWx1ZTsKK30KKworcmVzdHJpY3RlZCBvcGVyYXRvcjxUPiBUKFQgeCkKK3sKKyAgICBy
ZXR1cm4geDsKK30KKworb3BlcmF0b3I8VDpFcXVhdGFibGU+IGJvb2woVCB4KQoreworICAgIHJl
dHVybiB4ICE9IFQoKTsKK30KKworbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJl
YWQgVFtdLCB1aW50KTsKK25hdGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1p
dGl2ZT4odGhyZWFkZ3JvdXAgVFtdLCB1aW50KTsKK25hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3Im
W108VDpwcmltaXRpdmU+KGRldmljZSBUW10sIHVpbnQpOworbmF0aXZlIGNvbnN0YW50IFReIG9w
ZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihjb25zdGFudCBUW10sIHVpbnQpOworYDsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFy
eUVwaWxvZ3VlLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlFcGlsb2d1ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotLy8gTk9URTogVGhlIG5leHQgbGluZSBpcyBsaW5lIDI4LCBhbmQgd2Ug
cmVseSBvbiB0aGlzIGluIFByZXBhcmUuanMuCi1jb25zdCBzdGFuZGFyZExpYnJhcnlFcGlsb2d1
ZSA9IGAKLW9wZXJhdG9yIGJvb2w8PjxUOkVxdWF0YWJsZT4oVCB4KSB7Ci0gICAgVCBkZWZhdWx0
VmFsdWU7Ci0gICAgcmV0dXJuIHggIT0gZGVmYXVsdFZhbHVlOwotfQotYDsKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeVBy
b2xvZ3VlLmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ug
c3RyaWN0IjsKLQotLy8gTk9URTogVGhlIG5leHQgbGluZSBpcyBsaW5lIDI4LCBhbmQgd2UgcmVs
eSBvbiB0aGlzIGluIFByZXBhcmUuanMuCi1jb25zdCBzdGFuZGFyZExpYnJhcnlQcm9sb2d1ZSA9
IGAKLS8vIFRoaXMgaXMgdGhlIFdTTCBzdGFuZGFyZCBsaWJyYXJ5LiBJbXBsZW1lbnRhdGlvbnMg
b2YgYWxsIG9mIHRoZXNlIHRoaW5ncyBhcmUgaW4KLS8vIEludHJpbnNpY3MuanMuIFRoZSBvbmx5
IHRoaW5nIHRoYXQgZ2V0cyBkZWZpbmVkIGJlZm9yZSB3ZSBnZXQgaGVyZSBpcyB0aGUgcHJpbWl0
aXZlCi0vLyBwcm90b2NvbC4KLQotLy8gTmVlZCB0byBib290c3RyYXAgdm9pZCBmaXJzdC4KLW5h
dGl2ZSBwcmltaXRpdmUgdHlwZWRlZiB2b2lkOwotCi1uYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYg
aW50MzI7Ci1uYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgdWludDMyOwotbmF0aXZlIHByaW1pdGl2
ZSB0eXBlZGVmIGJvb2w7Ci10eXBlZGVmIGludCA9IGludDMyOwotdHlwZWRlZiB1aW50ID0gdWlu
dDMyOwotCi1uYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgZG91YmxlOwotCi1uYXRpdmUgaW50IG9w
ZXJhdG9yKyhpbnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7Ci1u
YXRpdmUgaW50IG9wZXJhdG9yLShpbnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvci0odWlu
dCwgdWludCk7Ci1uYXRpdmUgaW50IG9wZXJhdG9yKihpbnQsIGludCk7Ci1uYXRpdmUgdWludCBv
cGVyYXRvcioodWludCwgdWludCk7Ci1uYXRpdmUgaW50IG9wZXJhdG9yLyhpbnQsIGludCk7Ci1u
YXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWludCk7Ci1uYXRpdmUgYm9vbCBvcGVyYXRvcj09
KGludCwgaW50KTsKLW5hdGl2ZSBib29sIG9wZXJhdG9yPT0odWludCwgdWludCk7Ci1uYXRpdmUg
Ym9vbCBvcGVyYXRvcj09KGJvb2wsIGJvb2wpOwotCi1wcm90b2NvbCBFcXVhdGFibGUgewotICAg
IGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVxdWF0YWJsZSk7Ci19Ci0KLW9wZXJhdG9yIFQ8
PjxUPihUIHgpIHsKLSAgICByZXR1cm4geDsKLX0KLQotbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRv
ciZbXTxUPih0aHJlYWQgVFtdLCB1aW50KTsKLW5hdGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRv
ciZbXTxUOnByaW1pdGl2ZT4odGhyZWFkZ3JvdXAgVFtdLCB1aW50KTsKLW5hdGl2ZSBkZXZpY2Ug
VF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KGRldmljZSBUW10sIHVpbnQpOwotbmF0aXZlIGNv
bnN0YW50IFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihjb25zdGFudCBUW10sIHVpbnQpOwot
YDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9u
IDIyMTc1NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAogPHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJD
YXN0RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2hlY2suanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrTGl0ZXJhbFR5cGVzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJDaGVja1JlY3Vyc2lvbi5qcyI+PC9zY3JpcHQ+CkBAIC00MSw2ICs0MCw3IEBACiA8
c2NyaXB0IHNyYz0iRnVuY0luc3RhbnRpYXRvci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
RnVuY1BhcmFtZXRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRnVuY3Rpb25MaWtlQmxv
Y2suanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkluZmVyVHlwZXNGb3JDYWxsLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxpbmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Iklu
bGluZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ikluc3RhbnRpYXRlSW1tZWRpYXRlcy5q
cyI+PC9zY3JpcHQ+CkBAIC03Niw4ICs3Niw3IEBACiA8c2NyaXB0IHNyYz0iUmV0dXJuLmpzIj48
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2VyLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJSZXR1cm5FeGNlcHRpb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9IlN0YW5k
YXJkTGlicmFyeUVwaWxvZ3VlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJTdGFuZGFyZExp
YnJhcnlQcm9sb2d1ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJTdWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjE3NTcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGZ1bmN0aW9u
IGRvUHJlcChjb2RlKQogCiBmdW5jdGlvbiBkb0xleChjb2RlKQogewotICAgIGxldCBsZXhlciA9
IG5ldyBMZXhlcigiL2ludGVybmFsL3Rlc3QiLCAwLCBjb2RlKTsKKyAgICBsZXQgbGV4ZXIgPSBu
ZXcgTGV4ZXIoIi9pbnRlcm5hbC90ZXN0IiwgIm5hdGl2ZSIsIDAsIGNvZGUpOwogICAgIHZhciBy
ZXN1bHQgPSBbXTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGxldCBuZXh0ID0gbGV4ZXIubmV4
dCgpOwpAQCAtODUsMTcgKzg1LDE3IEBAIGZ1bmN0aW9uIGNoZWNrSW50KHByb2dyYW0sIHJlc3Vs
dCwgZXhwZWMKIGZ1bmN0aW9uIGNoZWNrVUludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQog
ewogICAgIGlmICghcmVzdWx0LnR5cGUuZXF1YWxzKHByb2dyYW0uaW50cmluc2ljcy51aW50MzIp
KQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOyByZXN1bHQ6ICIg
KyByZXN1bHQpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOiAi
ICsgcmVzdWx0LnR5cGUpOwogICAgIGlmIChyZXN1bHQudmFsdWUgIT0gZXhwZWN0ZWQpCi0gICAg
ICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhwZWN0
ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBy
ZXN1bHQ6ICIgKyByZXN1bHQudmFsdWUgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIp
OwogfQogCiBmdW5jdGlvbiBjaGVja0Jvb2wocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKIHsK
ICAgICBpZiAoIXJlc3VsdC50eXBlLmVxdWFscyhwcm9ncmFtLmludHJpbnNpY3MuYm9vbCkpCi0g
ICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJl
c3VsdCk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU6ICIgKyBy
ZXN1bHQudHlwZSk7CiAgICAgaWYgKHJlc3VsdC52YWx1ZSAhPSBleHBlY3RlZCkKLSAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQgKyAiIChleHBlY3RlZCAi
ICsgZXhwZWN0ZWQgKyAiKSIpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3Vs
dDogIiArIHJlc3VsdC52YWx1ZSArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CiB9
CiAKIGZ1bmN0aW9uIGNoZWNrTGV4ZXJUb2tlbihyZXN1bHQsIGV4cGVjdGVkSW5kZXgsIGV4cGVj
dGVkS2luZCwgZXhwZWN0ZWRUZXh0KQpAQCAtMTE0MSw2ICsxMTQxLDM4IEBAIGZ1bmN0aW9uIFRF
U1RfcHJvdG9jb2xNb25vUG9seVNpZ0RvdWJsZVAKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2Vv
ZiBXVHlwZUVycm9yKTsKIH0KIAorZnVuY3Rpb24gVEVTVF9hbWJpZ3VvdXNPdmVybG9hZFNpbXBs
ZSgpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAg
ICAgdm9pZCBmb288VD4oaW50LCBUKSB7IH0KKyAgICAgICAgICAgIHZvaWQgZm9vPFQ+KFQsIGlu
dCkgeyB9CisgICAgICAgICAgICB2b2lkIGJhcihpbnQgYSwgaW50IGIpIHsgZm9vKGEsIGIpOyB9
CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwor
fQorCitmdW5jdGlvbiBURVNUX2FtYmlndW91c092ZXJsb2FkT3ZlcmxhcHBpbmcoKQoreworICAg
IGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9v
PFQ+KGludCwgVCkgeyB9CisgICAgICAgICAgICB2b2lkIGZvbzxUPihULCBUKSB7IH0KKyAgICAg
ICAgICAgIHZvaWQgYmFyKGludCBhLCBpbnQgYikgeyBmb28oYSwgYik7IH0KKyAgICAgICAgYCks
CisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7Cit9CisKK2Z1bmN0aW9u
IFRFU1RfYW1iaWd1b3VzT3ZlcmxvYWRUaWVCcmVhaygpCit7CisgICAgZG9QcmVwKGAKKyAgICAg
ICAgdm9pZCBmb288VD4oaW50LCBUKSB7IH0KKyAgICAgICAgdm9pZCBmb288VD4oVCwgVCkgeyB9
CisgICAgICAgIHZvaWQgZm9vKGludCwgaW50KSB7IH0KKyAgICAgICAgdm9pZCBiYXIoaW50IGEs
IGludCBiKSB7IGZvbyhhLCBiKTsgfQorICAgIGApOworfQorCiBsZXQgZmlsdGVyID0gLy4qLzsg
Ly8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAogaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVSZWYuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVJlZi5qcwkocmV2aXNpb24gMjIxNzU3KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZVJlZi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDYgKzExNiw4IEBAIGNsYXNzIFR5cGVSZWYgZXh0ZW5kcyBUeXBlIHsKICAgICAK
ICAgICB0b1N0cmluZygpCiAgICAgeworICAgICAgICBpZiAoIXRoaXMubmFtZSkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLnR5cGUudG9TdHJpbmcoKTsKICAgICAgICAgaWYgKCF0aGlzLnR5cGVB
cmd1bWVudHMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKICAgICAgICAg
cmV0dXJuIHRoaXMubmFtZSArICI8IiArIHRoaXMudHlwZUFyZ3VtZW50cyArICI+IjsKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIxNzU3
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjU1LDE0ICsyNTUsMTAgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICAgICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIGFjdHVhbFR5cGVBcmd1bWVu
dHMpCiAgICAgICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIH0KKyAg
ICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKKyAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS52
aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRDYXN0RXhwcmVzc2lvbihub2RlKQot
ICAgIHsKLSAgICAgICAgdGhpcy52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOwotICAgICAgICBu
b2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7Ci0gICAgfQotCiAgICAgdmlzaXRMb2dpY2FsTm90
KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLm9wZXJhbmQudmlzaXQodGhpcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320330</attachid>
            <date>2017-09-08 19:06:49 -0700</date>
            <delta_ts>2017-09-10 14:20:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59978</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMSBAQAorMjAxNy0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBvdmVybG9hZCByZXNvbHV0aW9uIHNob3VsZCBub3QgYmUgY2FzY2FkaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgcmVtb3ZlcyB0aGUgY2FzY2FkaW5nIG5hdHVyZSBvZiBvdmVybG9hZCByZXNvbHV0aW9u
IHRoYXQgV1NMIHVzZWQgdG8gaGF2ZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGgKKyAgICAgICAgc29t
ZXRoaW5nIEMrKy1saWtlLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgb3ZlcmxvYWQgY2FuZGlkYXRl
cyB0aGF0IG1hdGNoIHRoZSBjYWxsc2l0ZSwgdGhlbiB3ZSByZXNvbHZlCisgICAgICAgIHRoZW0g
YWdhaW5zdCBlYWNoIG90aGVyLiBBbnl0aW1lIGEgZnVuY3Rpb24gY2Fubm90IGJlIHJlc29sdmVk
IG9udG8gYW5vdGhlciBmdW5jdGlvbiwgaXQgaXMgcmVtb3ZlZCwKKyAgICAgICAgc2luY2UgdGhp
cyBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW4gc29tZSB3YXkgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIG90aGVyIG9uZSwgYW5kIHdlIGFyZSBqdXN0CisgICAgICAgIGxvb2tpbmcgZm9yIHRo
ZSBtb3N0IHNwZWNpZmljIGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgSWYgdGhpcyBwcm9j
ZXNzIGVuZHMgd2l0aCBvbmx5IG9uZSBmdW5jdGlvbiBiZWluZyBzZWxlY3RlZCwgdGhlbiB3ZSBz
dWNjZWVkLCBlbHNlIHdlIGZhaWwuCisgICAgICAgIAorICAgICAgICBBbHNvIGNoYW5nZWQgdGhl
IHN5bnRheCBmb3IgZGVmaW5pbmcgZ2VuZXJpYyBjYXN0cyB0bzoKKyAgICAgICAgCisgICAgICAg
IG9wZXJhdG9yPFQ+IFRoaW5neTxUPih0aGluZ3MpCisgICAgICAgIAorICAgICAgICBBbHNvIGZp
eGVkIHBhcnNpbmcgb2YgY2FzdCBleHByZXNzaW9ucy4gSXQncyBub3cgcG9zc2libGUgdG8gc2F5
IGEgY2FzdCBleHByZXNzaW9uIGluIFdTTC4KKyAgICAgICAgCisgICAgICAgIFRoZSByZW1vdmFs
IG9mIGNhc2NhZGluZyBjYXVzZXMgc29tZSBwcm9ibGVtcy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xs
b3dpbmcgdHdvIG9wZXJhdG9ycyBpbiBvdXIgc3RhbmRhcmQKKyAgICAgICAgbGlicmFyeSBhcmUg
YW1iaWd1b3VzIGZvciBib29sKGJvb2wpOgorICAgICAgICAKKyAgICAgICAgb3BlcmF0b3I8VD4g
VChUKQorICAgICAgICBvcGVyYXRvcjxUOkVxdWF0YWJsZT4gYm9vbChUKQorICAgICAgICAKKyAg
ICAgICAgSSB0aGluayB0aGF0IHdoYXQgd2UgcmVhbGx5IHdhbnQgaXMgdG8gc2F5IHRoYXQgdGhl
IGZvbGxvd2luZyBvcGVyYXRvcnMgYXJlIHJlc3RyaWN0ZWQgdG8gdGhlIHN0YW5kYXJkCisgICAg
ICAgIGxpYnJhcnk6CisgICAgICAgIAorICAgICAgICBvcGVyYXRvcjxUPiBUKCkKKyAgICAgICAg
b3BlcmF0b3I8VD4gVChUKQorICAgICAgICAKKyAgICAgICAgSXQgc2hvdWxkIG5vdCBiZSBwb3Nz
aWJsZSB0byBldmVyIG92ZXJsb2FkIHRoZXNlLgorICAgICAgICAKKyAgICAgICAgVGhlc2UgY2hh
bmdlcyBhcmUgbW9zdGx5IHRlc3RlZCBieSBleGlzdGluZyB0ZXN0cyBhbmQgdGhlIGNoYW5nZXMg
aW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHdoaWNoIGhhcyB0bworICAgICAgICBiZSBwYXJzZWQg
Zm9yIGV2ZXJ5IHRlc3QuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwu
anM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzOgor
ICAgICAgICAoQXJyYXlSZWZUeXBlLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNzaW9uLmpzOgorICAgICAgICAoQ2FsbEV4
cHJlc3Npb24pOgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBpc0Nhc3Qp
OgorICAgICAgICAoQ2FsbEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCByZXR1cm5UeXBlKToKKyAg
ICAgICAgKENhbGxFeHByZXNzaW9uLnByb3RvdHlwZS5yZXNvbHZlKToKKyAgICAgICAgKENhbGxF
eHByZXNzaW9uLnByb3RvdHlwZS5iZWNvbWVDYXN0KToKKyAgICAgICAgKENhbGxFeHByZXNzaW9u
LnByb3RvdHlwZS5zZXRDYXN0RGF0YSk6CisgICAgICAgIChDYWxsRXhwcmVzc2lvbi5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIu
anM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAg
ICAgICAoRXZhbHVhdG9yLnByb3RvdHlwZS52aXNpdExvZ2ljYWxOb3QpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanM6CisgICAgICAgIChGdW5jLnByb3RvdHlwZS5n
ZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbik6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRnVuY0RlZi5qczoKKyAgICAgICAgKEZ1bmNEZWYpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanM6CisgICAgICAgIChG
dW5jSW5zdGFudGlhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWUuRmluZFR5cGVWYXJpYWJsZS5wcm90
b3R5cGUudmlzaXRUeXBlVmFyaWFibGUpOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0VW5pcXVlLkZpbmRUeXBlVmFyaWFibGUpOgorICAgICAgICAoRnVuY0luc3RhbnRp
YXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24ucHJvdG90
eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRpb25TdWJzdGl0dXRpb24pOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzOgorICAgICAgICAoRnVu
Y3Rpb25MaWtlQmxvY2sucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKEZ1bmN0aW9uTGlr
ZUJsb2NrKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmZlclR5cGVzRm9y
Q2FsbC5qczogQWRkZWQuCisgICAgICAgIChpbmZlclR5cGVzRm9yQ2FsbCk6CisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lLmpzOgorICAgICAgICAocmVzb2x2ZUlubGlu
ZWRGdW5jdGlvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanM6
CisgICAgICAgIChMZXhlcik6CisgICAgICAgIChMZXhlci5wcm90b3R5cGUubmV4dCk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanM6CisgICAgICAgIChO
YW1lQ29udGV4dCk6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5cGUubWFwRm9yKToKKyAg
ICAgICAgKE5hbWVDb250ZXh0LnByb3RvdHlwZS5hZGQpOgorICAgICAgICAoTmFtZUNvbnRleHQu
cHJvdG90eXBlLmdldCBsZXQpOgorICAgICAgICAoTmFtZUNvbnRleHQucHJvdG90eXBlLlN5bWJv
bC5pdGVyYXRvcik6CisgICAgICAgIChOYW1lQ29udGV4dC5nZXQgY3VycmVudFN0YXRlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVy
LmpzOgorICAgICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS52aXNpdFByb2dyYW0pOgorICAg
ICAgICAoTmFtZVJlc29sdmVyLnByb3RvdHlwZS5kZXRlcm1pbmVQb3NzaWJsZU92ZXJsb2Fkcyk6
CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xGdW5jRGVjbCk6
CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Npb24pOgor
ICAgICAgICAoTmFtZVJlc29sdmVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYXRpdmVGdW5jLmpzOgorICAgICAgICAoTmF0aXZlRnVuYyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qczoKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLnZpc2l0
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAgICAg
KHBhcnNlUG9zc2libGVQcmVmaXgpOgorICAgICAgICAocGFyc2VGdW5jRGVjbCk6CisgICAgICAg
IChwYXJzZU5hdGl2ZUZ1bmMpOgorICAgICAgICAocGFyc2VOYXRpdmUpOgorICAgICAgICAocGFy
c2VQcmVmZXJyZWRGdW5jRGVmKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAgICAocHJlcGFyZSk6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qczoKKyAgICAgICAgKFByb2dyYW0u
cHJvdG90eXBlLnJlc29sdmVGdW5jT3ZlcmxvYWQpOiBEZWxldGVkLgorICAgICAgICAoUHJvZ3Jh
bS5wcm90b3R5cGUuZ2V0IG5hbWVDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanM6CisgICAgICAgIChQcm90b2NvbERlY2wu
cHJvdG90eXBlLmluaGVyaXRzKToKKyAgICAgICAgKFByb3RvY29sRGVjbC5wcm90b3R5cGUuaGFz
SGVpcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qczoKKyAg
ICAgICAgKFB0clR5cGUucHJvdG90eXBlLnVuaWZ5SW1wbCk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUmVzb2x2ZU92ZXJsb2FkSW1wbC5qczoKKyAgICAgICAgKHJlc29sdmVP
dmVybG9hZEltcGwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xGdW5jRGVjbCk6
CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0YSk6Cisg
ICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOiBB
ZGRlZC4KKyAgICAgICAgKHByZWZlcnJlZC5vcGVyYXRvci5ULlQpOgorICAgICAgICAob3BlcmF0
b3IuVC5FcXVhdGFibGUuYm9vbCk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RhbmRhcmRMaWJyYXJ5RXBpbG9ndWUuanM6IFJlbW92ZWQuCisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanM6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChkb0xleCk6CisgICAgICAgIChj
aGVja1VJbnQpOgorICAgICAgICAoY2hlY2tCb29sKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UeXBlUmVmLmpzOgorICAgICAgICAoVHlwZVJlZi5wcm90b3R5cGUudG9TdHJp
bmcpOgorICAgICAgICAoVHlwZVJlZik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJl
c3Npb24pOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6
IERlbGV0ZWQuCisKIDIwMTctMDktMDggIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIGJpc2VjdC1idWlsZHMgZG9lc24ndCB3b3JrIGR1ZSB0byBtaXNz
aW5nIHJlcXVlc3RzIG1vZHVsZQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
QWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5q
cwkocmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxs
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIGxvYWQoIkJvb2xMaXRlcmFsLmpz
Iik7CiBsb2FkKCJDYWxsQXNzaWdubWVudC5qcyIpOwogbG9hZCgiQ2FsbEV4cHJlc3Npb24uanMi
KTsKIGxvYWQoIkNhbGxGdW5jdGlvbi5qcyIpOwotbG9hZCgiQ2FzdEV4cHJlc3Npb24uanMiKTsK
IGxvYWQoIkNoZWNrLmpzIik7CiBsb2FkKCJDaGVja0xpdGVyYWxUeXBlcy5qcyIpOwogbG9hZCgi
Q2hlY2tSZWN1cnNpb24uanMiKTsKQEAgLTY2LDYgKzY1LDcgQEAgbG9hZCgiRnVuY0luc3RhbnRp
YXRvci5qcyIpOwogbG9hZCgiRnVuY1BhcmFtZXRlci5qcyIpOwogbG9hZCgiRnVuY3Rpb25MaWtl
QmxvY2suanMiKTsKIGxvYWQoIklmU3RhdGVtZW50LmpzIik7Citsb2FkKCJJbmZlclR5cGVzRm9y
Q2FsbC5qcyIpOwogbG9hZCgiSW5saW5lLmpzIik7CiBsb2FkKCJJbmxpbmVyLmpzIik7CiBsb2Fk
KCJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiKTsKQEAgLTEwMSw4ICsxMDEsNyBAQCBsb2FkKCJS
ZXNvbHZlVHlwZURlZnMuanMiKTsKIGxvYWQoIlJldHVybi5qcyIpOwogbG9hZCgiUmV0dXJuQ2hl
Y2tlci5qcyIpOwogbG9hZCgiUmV0dXJuRXhjZXB0aW9uLmpzIik7Ci1sb2FkKCJTdGFuZGFyZExp
YnJhcnlFcGlsb2d1ZS5qcyIpOwotbG9hZCgiU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanMiKTsK
K2xvYWQoIlN0YW5kYXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVpbGRlci5q
cyIpOwogbG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCShy
ZXZpc2lvbiAyMjE4MDQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVJl
ZlR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDEwIEBACiBjbGFzcyBBcnJheVJl
ZlR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VUeXBlIHsKICAgICB1bmlmeUltcGwodW5pZmljYXRpb25D
b250ZXh0LCBvdGhlcikKICAgICB7Ci0gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJy
YXlSZWZUeXBlKSkgeworICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3NTcGFjZSAhPSBvdGhlci5hZGRyZXNzU3Bh
Y2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBBcnJheVR5cGUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3NTcGFjZSAhPSAi
dGhyZWFkIikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxFeHByZXNz
aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NhbGxF
eHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjE4MDQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DYWxsRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsMTYgKzMyLDIw
IEBAIGNsYXNzIENhbGxFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiAKICAgICAgICAgdGhp
cy5fdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7CiAgICAgICAgIHRoaXMuX2FyZ3VtZW50
TGlzdCA9IGFyZ3VtZW50TGlzdDsKICAgICAgICAgdGhpcy5mdW5jID0gbnVsbDsKKyAgICAgICAg
dGhpcy5faXNDYXN0ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3JldHVyblR5cGUgPSBudWxsOwog
ICAgIH0KICAgICAKICAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KICAgICBn
ZXQgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIHRoaXMuX3R5cGVBcmd1bWVudHM7IH0KICAgICBn
ZXQgYXJndW1lbnRMaXN0KCkgeyByZXR1cm4gdGhpcy5fYXJndW1lbnRMaXN0OyB9CisgICAgZ2V0
IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQorICAgIGdldCByZXR1cm5UeXBlKCkg
eyByZXR1cm4gdGhpcy5fcmV0dXJuVHlwZTsgfQogICAgIAogICAgIHJlc29sdmUob3ZlcmxvYWQp
CiAgICAgewogICAgICAgICB0aGlzLmZ1bmMgPSBvdmVybG9hZC5mdW5jOwotICAgICAgICB0aGlz
LmFjdHVhbFR5cGVBcmd1bWVudHMgPSBvdmVybG9hZC50eXBlQXJndW1lbnRzOworICAgICAgICB0
aGlzLmFjdHVhbFR5cGVBcmd1bWVudHMgPSBvdmVybG9hZC50eXBlQXJndW1lbnRzLm1hcChUeXBl
UmVmLndyYXApOwogICAgICAgICBsZXQgcmVzdWx0ID0gb3ZlcmxvYWQuZnVuYy5yZXR1cm5UeXBl
LnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKAogICAgICAgICAgICAgb3ZlcmxvYWQuZnVuYy50eXBl
UGFyYW1ldGVycywgb3ZlcmxvYWQudW5pZmljYXRpb25Db250ZXh0KTsKICAgICAgICAgaWYgKCFy
ZXN1bHQpCkBAIC00OSw5ICs1MywyNyBAQCBjbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4
cHJlc3Npb24gCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIGJlY29t
ZUNhc3QocmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3JldHVyblR5cGUgPSBuZXcg
VHlwZVJlZih0aGlzLm9yaWdpbiwgdGhpcy5uYW1lLCB0aGlzLl90eXBlQXJndW1lbnRzKTsKKyAg
ICAgICAgdGhpcy5fcmV0dXJuVHlwZS50eXBlID0gcmV0dXJuVHlwZTsKKyAgICAgICAgdGhpcy5f
bmFtZSA9ICJvcGVyYXRvciBjYXN0IjsKKyAgICAgICAgdGhpcy5faXNDYXN0ID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5fdHlwZUFyZ3VtZW50cyA9IFtdOworICAgIH0KKyAgICAKKyAgICBzZXRDYXN0
RGF0YShyZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IHJldHVy
blR5cGU7CisgICAgICAgIHRoaXMuX2lzQ2FzdCA9IHRydWU7CisgICAgfQorICAgIAogICAgIHRv
U3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5
cGVBcmd1bWVudHMgKyAiPigiICsgdGhpcy5hcmd1bWVudExpc3QgKyAiKSI7CisgICAgICAgIHJl
dHVybiAodGhpcy5pc0Nhc3QgPyAib3BlcmF0b3IgIiArIHRoaXMucmV0dXJuVHlwZSA6IHRoaXMu
bmFtZSkgKworICAgICAgICAgICAgIjwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4iICsKKyAg
ICAgICAgICAgICh0aGlzLmFjdHVhbFR5cGVBcmd1bWVudHMgPyAiPDwiICsgdGhpcy5hY3R1YWxU
eXBlQXJndW1lbnRzICsgIj4+IiA6ICIiKSArCisgICAgICAgICAgICAiKCIgKyB0aGlzLmFyZ3Vt
ZW50TGlzdCArICIpIjsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0Nhc3RFeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0Nhc3RFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjE4MDQpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DYXN0RXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQp
CkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8gVGhpcyBpcyBhIGJpdCBvZiBhIG1pc25vbWVyLCBh
cyB0aGlzIHJlcHJlc2VudHMgY2FzdHMgYXMgd2VsbCBhcyBjb25zdHJ1Y3RvcnMuCi0vLyBTeW50
YWN0aWNhbGx5IHRoZXkgYXJlIGlkZW50aWNhbDsgYSBjYXN0IGp1c3QgdGFrZXMgb25lIGFyZ3Vt
ZW50IHdoZXJlYXMgYQotLy8gY29uc3RydWN0b3IgdGFrZXMgMC1uLgotY2xhc3MgQ2FzdEV4cHJl
c3Npb24gZXh0ZW5kcyBDYWxsRXhwcmVzc2lvbiB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBy
ZXR1cm5UeXBlLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExpc3QpCi0gICAgewotICAgICAgICBz
dXBlcihvcmlnaW4sIENhc3RFeHByZXNzaW9uLmZ1bmN0aW9uTmFtZSwgdHlwZUFyZ3VtZW50cywg
YXJndW1lbnRMaXN0KTsKLSAgICAgICAgdGhpcy5fcmV0dXJuVHlwZSA9IHJldHVyblR5cGU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGdldCBmdW5jdGlvbk5hbWUoKSB7IHJldHVybiAib3BlcmF0b3Ig
Y2FzdCI7IH0KLSAgICAKLSAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVy
blR5cGU7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5yZXR1cm5UeXBlICsgIjwiICsgdGhpcy50eXBlQXJndW1lbnRzICsgIj4oIiArIHRoaXMuYXJn
dW1lbnRMaXN0ICsgIikiOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lvbiAyMjE4MDQpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcg
QEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIGNoZWNrQ2FzdE9yQ2FsbEV4cHJlc3Npb24obm9kZSwgcmV0dXJuVHlw
ZSkKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKGxl
dCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFy
Z3VtZW50LnZpc2l0KHRoaXMpOwpAQCAtMjU3LDggKzI1Nyw4IEBAIGNsYXNzIENoZWNrZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLndyYXAobmV3QXJndW1l
bnQpOwogICAgICAgICB9KTsKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRU
eXBlczsKLSAgICAgICAgaWYgKHJldHVyblR5cGUpCi0gICAgICAgICAgICByZXR1cm5UeXBlLnZp
c2l0KHRoaXMpOworICAgICAgICBpZiAobm9kZS5yZXR1cm5UeXBlKQorICAgICAgICAgICAgbm9k
ZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwogICAgICAgICAKICAgICAgICAgbGV0IG92ZXJsb2Fk
ID0gbnVsbDsKICAgICAgICAgbGV0IGZhaWx1cmVzID0gW107CkBAIC0yNzEsMTggKzI3MSwyMyBA
QCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICAgICAgdHlwZVBh
cmFtZXRlci5wcm90b2NvbC5wcm90b2NvbERlY2wuc2lnbmF0dXJlc0J5TmFtZVdpdGhUeXBlVmFy
aWFibGUobm9kZS5uYW1lLCB0eXBlUGFyYW1ldGVyKTsKICAgICAgICAgICAgIGlmICghc2lnbmF0
dXJlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG92ZXJsb2FkID0g
cmVzb2x2ZU92ZXJsb2FkSW1wbChzaWduYXR1cmVzLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50VHlwZXMsIHJldHVyblR5cGUpOworICAgICAgICAgICAgb3ZlcmxvYWQgPSByZXNvbHZlT3Zl
cmxvYWRJbXBsKHNpZ25hdHVyZXMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywg
bm9kZS5yZXR1cm5UeXBlKTsKICAgICAgICAgICAgIGlmIChvdmVybG9hZC5mdW5jKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZmFpbHVyZXMucHVzaCguLi5vdmVybG9hZC5m
YWlsdXJlcyk7CiAgICAgICAgICAgICBvdmVybG9hZCA9IG51bGw7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFvdmVybG9hZCkgewotICAgICAgICAgICAgb3ZlcmxvYWQgPSB0aGlzLl9wcm9ncmFt
LnJlc29sdmVGdW5jT3ZlcmxvYWQoCi0gICAgICAgICAgICAgICAgbm9kZS5uYW1lLCBub2RlLnR5
cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOworICAgICAgICAgICAgb3Zl
cmxvYWQgPSByZXNvbHZlT3ZlcmxvYWRJbXBsKAorICAgICAgICAgICAgICAgIG5vZGUucG9zc2li
bGVPdmVybG9hZHMsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgbm9kZS5yZXR1
cm5UeXBlKTsKICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykgewogICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLnB1c2goLi4ub3ZlcmxvYWQuZmFpbHVyZXMpOwotICAgICAgICAgICAgICAg
IGxldCBtZXNzYWdlID0gIkRpZCBub3QgZmluZCBmdW5jdGlvbiBmb3IgY2FsbCI7CisgICAgICAg
ICAgICAgICAgbGV0IG1lc3NhZ2UgPSAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBjYWxsIHdp
dGggIjsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKKyAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAidHlwZSBhcmd1bWVudHMgPCIgKyBub2RlLnR5
cGVBcmd1bWVudHMgKyAiPiBhbmQgIjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICJhcmd1
bWVudCB0eXBlcyAoIiArIGFyZ3VtZW50VHlwZXMgKyAiKSI7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUucmV0dXJuVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSIgYW5kIHJl
dHVybiB0eXBlICIgKyBub2RlLnJldHVyblR5cGU7CiAgICAgICAgICAgICAgICAgaWYgKGZhaWx1
cmVzLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiLCBidXQgY29uc2lk
ZXJlZDpcbiIgKyBmYWlsdXJlcy5qb2luKCJcbiIpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBtZXNzYWdlKTsKQEAgLTI5OCwx
NSArMzAzLDUgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBub2RlLnJlc29sdmUob3ZlcmxvYWQpOwogICAgIH0KLQotICAgIHZpc2l0
Q2FzdEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2Fz
dE9yQ2FsbEV4cHJlc3Npb24obm9kZSwgbm9kZS5yZXR1cm5UeXBlKTsKLSAgICB9Ci0gICAgCi0g
ICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
Y2hlY2tDYXN0T3JDYWxsRXhwcmVzc2lvbihub2RlLCB1bmRlZmluZWQpOwotICAgIH0KIH0KIApJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNp
b24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDggQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVu
ZHMgVmlzaXRvciB7CiAKICAgICB2aXNpdExvZ2ljYWxOb3Qobm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBFUHRyLmJveCghbm9kZS5vcGVyYW5kLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpKTsK
KyAgICAgICAgbGV0IHJlc3VsdCA9ICFub2RlLm9wZXJhbmQudmlzaXQodGhpcykubG9hZFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBFUHRyLmJveChyZXN1bHQpOwogICAgIH0KIAogICAgIHZpc2l0
SWZTdGF0ZW1lbnQobm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5q
cwkocmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Yy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBGdW5jIGV4dGVuZHMg
Tm9kZSB7CiAgICAgZ2V0IHBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlzLl9wYXJhbWV0ZXJzOyB9
CiAgICAgZ2V0IHBhcmFtZXRlclR5cGVzKCkgeyByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLm1hcChw
YXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnR5cGUpOyB9CiAgICAgZ2V0IGlzQ2FzdCgpIHsgcmV0dXJu
IHRoaXMuX2lzQ2FzdDsgfQorICAgIGdldCByZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9u
KCkgeyByZXR1cm4gdGhpcy5pc0Nhc3QgPyB0aGlzLnJldHVyblR5cGUgOiBudWxsOyB9CiAgICAg
CiAgICAgZ2V0IGtpbmQoKSB7IHJldHVybiBGdW5jOyB9CiAgICAgCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jRGVmLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNEZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAgY2xhc3MgRnVuY0RlZiBleHRlbmRzIEZ1bmMgewogICAgIHsKICAgICAgICAg
c3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1ldGVy
cywgaXNDYXN0KTsKICAgICAgICAgdGhpcy5fYm9keSA9IGJvZHk7CisgICAgICAgIHRoaXMuaXNS
ZXN0cmljdGVkID0gZmFsc2U7CiAgICAgfQogCiAgICAgZ2V0IGJvZHkoKSB7IHJldHVybiB0aGlz
Ll9ib2R5OyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFu
dGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDE0IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgIC8vIHJlc29sdXRpb25zIG9u
IHRoZSBvcmlnaW5hbCBQcm9ncmFtLgogICAgIGdldFVuaXF1ZShmdW5jLCB0eXBlQXJndW1lbnRz
KQogICAgIHsKKyAgICAgICAgY2xhc3MgRmluZFR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3Ig
eworICAgICAgICAgICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkgeworICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlOiAiICsgbm9kZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9m
IHR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICB0eXBlQXJndW1lbnQudmlzaXQobmV3IEZpbmRU
eXBlVmFyaWFibGUoKSk7CisgICAgICAgIAogICAgICAgICBsZXQgaW5zdGFuY2VzID0gdGhpcy5f
aW5zdGFuY2VzLmdldChmdW5jKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZXMpCiAgICAgICAgICAg
ICB0aGlzLl9pbnN0YW5jZXMuc2V0KGZ1bmMsIGluc3RhbmNlcyA9IFtdKTsKQEAgLTY0LDcgKzcy
LDcgQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbWF5
IGhhdmUgdG8gcmUtcmVzb2x2ZSB0aGUgZnVuY3Rpb24gY2FsbCwgaWYgaXQgd2FzIGEgY2FsbCB0
byBhIHByb3RvY29sCiAgICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlLgogICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZnVuYyBpbnN0YW5jZW9mIFByb3RvY29sRnVuY0RlY2wpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gdGhpc0luc3RhbnRpYXRvci5fcHJvZ3JhbS5y
ZXNvbHZlRnVuY092ZXJsb2FkKHJlc3VsdC5uYW1lLCByZXN1bHQudHlwZUFyZ3VtZW50cywgcmVz
dWx0LmFyZ3VtZW50VHlwZXMpOworICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcmxvYWQgPSBy
ZXNvbHZlT3ZlcmxvYWRJbXBsKHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcywgcmVzdWx0LnR5cGVB
cmd1bWVudHMsIHJlc3VsdC5hcmd1bWVudFR5cGVzLCByZXN1bHQucmV0dXJuVHlwZUZvck92ZXJs
b2FkUmVzb2x1dGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHJlc29s
dmUgcHJvdG9jb2wgc2lnbmF0dXJlIGZ1bmN0aW9uIGNhbGwgZHVyaW5nIGluc3RhbnRpYXRpb246
ICIgKyByZXN1bHQuZnVuYyArIChvdmVybG9hZC5mYWlsdXJlcy5sZW5ndGggPyAiOyB0cmllZDpc
biIgKyBvdmVybG9hZC5mYWlsdXJlcy5qb2luKCJcbiIpIDogIiIpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnJlc29sdmUob3ZlcmxvYWQpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMJKHJldmlzaW9uIDIyMTgw
NCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2IEBAIGNsYXNzIEZ1bmN0aW9uTGlrZUJsb2Nr
IGV4dGVuZHMgVmFsdWUgewogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiAiKFsmXSAoIiArIHRoaXMucGFyYW1ldGVycyArICIpIC0+ICIgKyB0aGlzLnJldHVyblR5
cGUgKyAiIHsgIiArIHRoaXMuYmxvY2sgKyAiIH0oIiArIHRoaXMuYXJndW1lbnRMaXN0ICsgIikp
IjsKKyAgICAgICAgcmV0dXJuICIoWyZdICgiICsgdGhpcy5wYXJhbWV0ZXJzICsgIikgLT4gIiAr
IHRoaXMucmV0dXJuVHlwZSArICIgeyAiICsgdGhpcy5ib2R5ICsgIiB9KCIgKyB0aGlzLmFyZ3Vt
ZW50TGlzdCArICIpKSI7CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5mZXJUeXBlc0ZvckNhbGwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBpbmZlclR5cGVzRm9yQ2FsbChm
dW5jLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKQoreworICAgIGlm
ICh0eXBlQXJndW1lbnRzLmxlbmd0aCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBmdW5jLnR5
cGVQYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3Zlcmxv
YWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRz
IChwYXNzZWQgIiArIHR5cGVBcmd1bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy50
eXBlUGFyYW1ldGVycy5sZW5ndGggKyAiKSIpfTsKKyAgICBpZiAoYXJndW1lbnRUeXBlcy5sZW5n
dGggIT0gZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBu
ZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIGFyZ3Vt
ZW50cyAocGFzc2VkICIgKyBhcmd1bWVudFR5cGVzLmxlbmd0aCArICIsIHJlcXVpcmUgIiArIGZ1
bmMucGFyYW1ldGVycy5sZW5ndGggKyAiKSIpfTsKKyAgICBsZXQgdW5pZmljYXRpb25Db250ZXh0
ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0
IGFyZ3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKKyAgICAgICAgbGV0IHBhcmFtZXRlciA9IGZ1
bmMudHlwZVBhcmFtZXRlcnNbaV07CisgICAgICAgIGlmICghYXJndW1lbnQudW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBu
ZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiVHlwZSBhcmd1bWVudCAjIiArIChp
ICsgMSkgKyAiIGZvciBwYXJhbWV0ZXIgIiArIHBhcmFtZXRlci5uYW1lICsgIiBkb2VzIG5vdCBt
YXRjaCAocGFzc2VkICIgKyBhcmd1bWVudCArICIsIHJlcXVpcmUgIiArIHBhcmFtZXRlciArICIp
Iil9OworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50VHlwZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIgKyBpKTsKKyAgICAgICAg
aWYgKCFhcmd1bWVudFR5cGVzW2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgZnVuYy5wYXJh
bWV0ZXJzW2ldLnR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHtmYWlsdXJlOiBuZXcgT3Zlcmxv
YWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiQXJndW1lbnQgIyIgKyAoaSArIDEpICsgIiAiICsg
KGZ1bmMucGFyYW1ldGVyc1tpXS5uYW1lID8gImZvciBwYXJhbWV0ZXIgIiArIGZ1bmMucGFyYW1l
dGVyc1tpXS5uYW1lIDogIiIpICsgIiBkb2VzIG5vdCBtYXRjaCAocGFzc2VkICIgKyBhcmd1bWVu
dFR5cGVzW2ldICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0ZXJzW2ldLnR5cGUgKyAiKSIp
fTsKKyAgICB9CisgICAgaWYgKHJldHVyblR5cGUgJiYgIXJldHVyblR5cGUudW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBmdW5jLnJldHVyblR5cGUpKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmU6
IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJSZXR1cm4gdHlwZSAiICsgZnVu
Yy5yZXR1cm5UeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsgcmV0dXJuVHlwZSl9OworICAgIGlm
ICghdW5pZmljYXRpb25Db250ZXh0LnZlcmlmeSgpKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmU6
IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJWaW9sYXRlcyB0eXBlIHZhcmlh
YmxlIGNvbnN0cmFpbnRzIil9OworICAgIGxldCBzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMgPSAh
dHlwZUFyZ3VtZW50cy5sZW5ndGg7CisgICAgaWYgKHNob3VsZEJ1aWxkVHlwZUFyZ3VtZW50cykK
KyAgICAgICAgdHlwZUFyZ3VtZW50cyA9IFtdOworICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIg
b2YgZnVuYy50eXBlUGFyYW1ldGVycykgeworICAgICAgICBsZXQgdHlwZUFyZ3VtZW50ID0gdW5p
ZmljYXRpb25Db250ZXh0LmZpbmQodHlwZVBhcmFtZXRlcik7CisgICAgICAgIGlmICh0eXBlQXJn
dW1lbnQgPT0gdHlwZVBhcmFtZXRlcikKKyAgICAgICAgICAgIHJldHVybiB7ZmFpbHVyZTogbmV3
IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlR5cGUgcGFyYW1ldGVyICIgKyB0eXBl
UGFyYW1ldGVyICsgIiBkaWQgbm90IGdldCBhc3NpZ25lZCBhIHR5cGUiKX07CisgICAgICAgIGlm
IChzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMpCisgICAgICAgICAgICB0eXBlQXJndW1lbnRzLnB1
c2godHlwZUFyZ3VtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHtmdW5jLCB1bmlmaWNhdGlvbkNv
bnRleHQsIHR5cGVBcmd1bWVudHN9OworfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW5saW5lLmpzCShyZXZpc2lvbiAyMjE4MDQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9JbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgZnVu
Y3Rpb24gX2lubGluZUZ1bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogCiBmdW5jdGlvbiByZXNvbHZl
SW5saW5lZEZ1bmN0aW9uKHByb2dyYW0sIG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlw
ZXMpCiB7Ci0gICAgbGV0IG92ZXJsb2FkID0gcHJvZ3JhbS5yZXNvbHZlRnVuY092ZXJsb2FkKG5h
bWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMpOworICAgIGxldCBvdmVybG9hZCA9IHBy
b2dyYW0uZ2xvYmFsTmFtZUNvbnRleHQucmVzb2x2ZUZ1bmNPdmVybG9hZChuYW1lLCB0eXBlQXJn
dW1lbnRzLCBhcmd1bWVudFR5cGVzKTsKICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMpCiAgICAgICAg
IHJldHVybiBvdmVybG9hZC5mYWlsdXJlczsKICAgICBpZiAoIW92ZXJsb2FkLmZ1bmMudHlwZVBh
cmFtZXRlcnMpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwkocmV2
aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEwIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNz
IExleGVyIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQp
CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBvcmlnaW5LaW5kLCBsaW5lTnVtYmVyT2Zmc2V0LCB0
ZXh0KQogICAgIHsKICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlz
Ll9vcmlnaW5LaW5kID0gb3JpZ2luS2luZDsKICAgICAgICAgdGhpcy5fbGluZU51bWJlck9mZnNl
dCA9IGxpbmVOdW1iZXJPZmZzZXQ7CiAgICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0OwogICAgICAg
ICB0aGlzLl9pbmRleCA9IDA7CkBAIC0xMDMsOCArMTA0LDEyIEBAIGNsYXNzIExleGVyIHsKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gVW5pY29kZS4KICAgICAgICAg
aWYgKC9eW15cZFxXXVx3Ki8udGVzdChyZWxldmFudFRleHQpKSB7Ci0gICAgICAgICAgICBpZiAo
WyJzdHJ1Y3QiLCAicHJvdG9jb2wiLCAidHlwZWRlZiIsICJpZiIsICJlbHNlIiwgImVudW0iLCAi
Y29udGludWUiLCAiYnJlYWsiLCAic3dpdGNoIiwgImNhc2UiLCAiZGVmYXVsdCIsICJmb3IiLCAi
d2hpbGUiLCAiZG8iLCAicmV0dXJuIiwgInNpemVvZiIsICJjb25zdGFudCIsICJkZXZpY2UiLCAi
dGhyZWFkZ3JvdXAiLCAidGhyZWFkIiwgIm9wZXJhdG9yIiwgIm51bGwiLCAidHJ1ZSIsICJmYWxz
ZSJdLmluY2x1ZGVzKFJlZ0V4cC5sYXN0TWF0Y2gpKQorICAgICAgICAgICAgaWYgKC9eKHN0cnVj
dHxwcm90b2NvbHx0eXBlZGVmfGlmfGVsc2V8ZW51bXxjb250aW51ZXxicmVha3xzd2l0Y2h8Y2Fz
ZXxkZWZhdWx0fGZvcnx3aGlsZXxkb3xyZXR1cm58Y29uc3RhbnR8ZGV2aWNlfHRocmVhZGdyb3Vw
fHRocmVhZHxvcGVyYXRvcnxudWxsfHRydWV8ZmFsc2UpJC8udGVzdChSZWdFeHAubGFzdE1hdGNo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJrZXl3b3JkIik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh0aGlzLl9vcmlnaW5LaW5kID09ICJuYXRpdmUiICYmIC9eKG5h
dGl2ZXxyZXN0cmljdGVkKSQvLnRlc3QoUmVnRXhwLmxhc3RNYXRjaCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdCgia2V5d29yZCIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0KCJpZGVudGlmaWVyIik7CiAgICAgICAgIH0KIApJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanMJKHJldmlzaW9uIDIyMTgwNCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIGZ1bmN0aW9uIGlzV2lsZGNhcmRLaW5kKGtpbmQpCiBj
bGFzcyBOYW1lQ29udGV4dCB7CiAgICAgY29uc3RydWN0b3IoZGVsZWdhdGUpCiAgICAgewotICAg
ICAgICB0aGlzLl9mdW5jTWFwID0gbmV3IE1hcCgpOwogICAgICAgICB0aGlzLl9tYXAgPSBuZXcg
TWFwKCk7CiAgICAgICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTsKICAgICAgICAgdGhpcy5fZGVm
aW5lZCA9IG51bGw7CkBAIC01MSw5ICs1MCw4IEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKICAgICAg
ICAgY2FzZSBWYWx1ZToKICAgICAgICAgY2FzZSBUeXBlOgogICAgICAgICBjYXNlIFByb3RvY29s
OgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDsKICAgICAgICAgY2FzZSBGdW5jOgotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmNNYXA7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
bWFwOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
a2luZDogIiArIGtpbmQpOwogICAgICAgICB9CkBAIC03Miw5ICs3MCwxNCBAQCBjbGFzcyBOYW1l
Q29udGV4dCB7CiAgICAgICAgIAogICAgICAgICBpZiAodGhpbmcua2luZCA9PSBGdW5jKSB7CiAg
ICAgICAgICAgICB0aGlzLl9zZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIGxldCBhcnJheSA9
IHRoaXMuX2Z1bmNNYXAuZ2V0KHRoaW5nLm5hbWUpOwotICAgICAgICAgICAgaWYgKCFhcnJheSkK
LSAgICAgICAgICAgICAgICB0aGlzLl9mdW5jTWFwLnNldCh0aGluZy5uYW1lLCBhcnJheSA9IFtd
KTsKKyAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuX21hcC5nZXQodGhpbmcubmFtZSk7Cisg
ICAgICAgICAgICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICAgICAgYXJyYXkgPSBbXTsKKyAg
ICAgICAgICAgICAgICBhcnJheS5raW5kID0gRnVuYzsKKyAgICAgICAgICAgICAgICB0aGlzLl9t
YXAuc2V0KHRoaW5nLm5hbWUsIGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChhcnJheS5raW5kICE9IEZ1bmMpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3IodGhpbmcub3JpZ2luLm9yaWdpblN0cmluZywgIkNhbm5vdCByZXVzZSB0eXBlIG5hbWUgZm9y
IGZ1bmN0aW9uOiAiICsgdGhpbmcubmFtZSk7CiAgICAgICAgICAgICBhcnJheS5wdXNoKHRoaW5n
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTQsNiArOTcsMTUgQEAgY2xh
c3MgTmFtZUNvbnRleHQgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAg
ICByZXNvbHZlRnVuY092ZXJsb2FkKG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMs
IHJldHVyblR5cGUpCisgICAgeworICAgICAgICBsZXQgZnVuY3Rpb25zID0gdGhpcy5nZXQoRnVu
YywgbmFtZSk7CisgICAgICAgIGlmICghZnVuY3Rpb25zKQorICAgICAgICAgICAgcmV0dXJuIHtm
YWlsdXJlczogW119OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc29sdmVPdmVybG9hZElt
cGwoZnVuY3Rpb25zLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKTsK
KyAgICB9CisgICAgCiAgICAgZ2V0IGN1cnJlbnRTdGF0ZW1lbnQoKQogICAgIHsKICAgICAgICAg
aWYgKHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQpCkBAIC0xNjUsMTEgKzE3NywxMyBAQCBjbGFzcyBO
YW1lQ29udGV4dCB7CiAgICAgCiAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkKICAgICB7Ci0gICAg
ICAgIGZvciAobGV0IHZhbHVlIG9mIHRoaXMuX21hcC52YWx1ZXMoKSkKKyAgICAgICAgZm9yIChs
ZXQgdmFsdWUgb2YgdGhpcy5fbWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAodmFsdWUg
aW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZ1bmM7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB5aWVsZCB2YWx1ZTsKLSAgICAgICAg
Zm9yIChsZXQgZnVuY3Mgb2YgdGhpcy5fZnVuY01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAg
Zm9yIChsZXQgZnVuYyBvZiBmdW5jcykKLSAgICAgICAgICAgICAgICB5aWVsZCBmdW5jOwogICAg
ICAgICB9CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFt
ZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3
IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBsZXQgY2hl
Y2tlciA9IG5ldyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwogICAgICAgICBmb3IgKGxldCBz
dGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCiAgICAgICAgICAgICBuYW1lQ29u
dGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNpdChjaGVja2Vy
KSk7CisgICAgICAgIG5vZGUuZ2xvYmFsTmFtZUNvbnRleHQgPSBuYW1lQ29udGV4dDsKICAgICB9
CiAgICAgCiAgICAgX3Zpc2l0VHlwZVBhcmFtZXRlcnNBbmRCdWlsZE5hbWVDb250ZXh0KG5vZGUp
CkBAIC0xMTcsNiArMTE4LDMxIEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgICAgICBub2RlLnByb3RvY29sRGVjbCA9IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAg
ZGV0ZXJtaW5lUG9zc2libGVPdmVybG9hZHMobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBmdW5j
cyA9IHRoaXMuX25hbWVDb250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAgICAgICBpZiAo
ZnVuY3MpCisgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQo
VHlwZSwgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3Qg
ZmluZCBhbnkgZnVuY3Rpb24gb3IgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAg
ICAgIG5vZGUuYmVjb21lQ2FzdCh0eXBlKTsKKyAgICAgICAgICAgIG5vZGUucG9zc2libGVPdmVy
bG9hZHMgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoRnVuYywgIm9wZXJhdG9yIGNhc3QiKTsKKyAg
ICAgICAgICAgIGlmICghbm9kZS5wb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmlu
ZCBhbnkgb3BlcmF0b3IgY2FzdCBpbXBsZW1lbnRhdGlvbnMgaW4gY2FzdCB0byAiICsgdHlwZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmlzaXRQcm90b2NvbEZ1bmNEZWNsKG5vZGUp
CisgICAgeworICAgICAgICB0aGlzLnZpc2l0RnVuYyhub2RlKTsKKyAgICAgICAgbGV0IGZ1bmNz
ID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsIG5vZGUubmFtZSk7CisgICAgICAgIGlmICgh
ZnVuY3MpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJDYW5ub3QgZmluZCBhbnkgZnVuY3Rpb25zIG5hbWVkICIgKyBub2RlLm5hLGUp
OworICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAgfQorICAgIAog
ICAgIHZpc2l0VHlwZURlZihub2RlKQogICAgIHsKICAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0g
bmV3IE5hbWVDb250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKQEAgLTIxOCw2ICsyNDQsMjAgQEAg
Y2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgdmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9k
ZS50eXBlQXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIGxldCBmdW5jcyA9IHRoaXMuX25h
bWVDb250ZXh0LmdldChGdW5jLCBub2RlLm5hbWUpOworICAgICAgICBpZiAoZnVuY3MpCisgICAg
ICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0gZnVuY3M7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoVHlwZSwgbm9kZS5u
YW1lKTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
V1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBhbnkgZnVu
Y3Rpb24gb3IgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIG5vZGUuYmVj
b21lQ2FzdCh0eXBlKTsKKyAgICAgICAgICAgIG5vZGUucG9zc2libGVPdmVybG9hZHMgPSB0aGlz
Ll9uYW1lQ29udGV4dC5nZXQoRnVuYywgIm9wZXJhdG9yIGNhc3QiKTsKKyAgICAgICAgICAgIGlm
ICghbm9kZS5wb3NzaWJsZU92ZXJsb2FkcykKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgZmluZCBhbnkgb3BlcmF0
b3IgY2FzdCBpbXBsZW1lbnRhdGlvbnMgaW4gY2FzdCB0byAiICsgdHlwZSk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIHN1cGVyLnZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSk7CiAgICAg
fQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpz
CShyZXZpc2lvbiAyMjE4MDQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRp
dmVGdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIGNsYXNzIE5hdGl2ZUZ1
bmMgZXh0ZW5kcyBGdW5jIHsKICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHJldHVyblR5
cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCiAgICAgewogICAgICAgICBz
dXBlcihvcmlnaW4sIG5hbWUsIHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJz
LCBpc0Nhc3QpOworICAgICAgICB0aGlzLmlzUmVzdHJpY3RlZCA9IGZhbHNlOwogICAgIH0KICAg
ICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE3ICsyNywx
MiBAQAogY2xhc3MgTm9kZSB7CiAgICAgdmlzaXQodmlzaXRvcikKICAgICB7Ci0gICAgICAgIGxl
dCBtZW1vVGFibGUgPSB2aXNpdG9yLl9tZW1vVGFibGU7Ci0gICAgICAgIGlmIChtZW1vVGFibGUu
aGFzKHRoaXMpKQotICAgICAgICAgICAgcmV0dXJuIG1lbW9UYWJsZS5nZXQodGhpcyk7Ci0gICAg
ICAgIAogICAgICAgICBsZXQgdmlzaXRGdW5jID0gdmlzaXRvclsidmlzaXQiICsgdGhpcy5jb25z
dHJ1Y3Rvci5uYW1lXTsKICAgICAgICAgaWYgKCF2aXNpdEZ1bmMpCiAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIk5vIHZpc2l0IGZ1bmN0aW9uIGZvciAiICsgdGhpcy5jb25zdHJ1Y3Rvci5u
YW1lICsgIiBpbiAiICsgdmlzaXRvci5jb25zdHJ1Y3Rvci5uYW1lKTsKICAgICAgICAgbGV0IHJl
dHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhpcyk7CiAgICAgICAgIGlmICgi
cmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCiAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZpc2l0
b3IucmV0dXJuVmFsdWU7Ci0gICAgICAgIG1lbW9UYWJsZS5zZXQodGhpcywgcmV0dXJuVmFsdWUp
OwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5
ICsyNCw5IEBACiAgKi8KICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwg
b3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQorZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwg
b3JpZ2luLCBvcmlnaW5LaW5kLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KQogewotICAgIGxldCBs
ZXhlciA9IG5ldyBMZXhlcihvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOworICAgIGxl
dCBsZXhlciA9IG5ldyBMZXhlcihvcmlnaW4sIG9yaWdpbktpbmQsIGxpbmVOdW1iZXJPZmZzZXQs
IHRleHQpOwogICAgIAogICAgIC8vIFRoZSBoYXJkZXN0IHBhcnQgb2YgZGVhbGluZyB3aXRoIEMt
bGlrZSBsYW5ndWFnZXMgaXMgcGFyc2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnRz
LgogICAgIC8vIExldCdzIGNvbnNpZGVyIGlmIHRoaXMgaGFwcGVucyBpbiBXU0wuIEhlcmUgYXJl
IHRoZSB2YWxpZCBzdGF0ZW1lbnRzIGluIFdTTCB0aGF0IGJlaW5nIHdpdGggYW4KQEAgLTM4Miw3
ICszODIsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAg
ICAgICAgICByZXR1cm4gbmV3IE1ha2VBcnJheVJlZkV4cHJlc3Npb24odG9rZW4sIHBhcnNlUG9z
c2libGVQcmVmaXgoKSk7CiAgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoIiEiKSkgewog
ICAgICAgICAgICAgbGV0IHJlbWFpbmRlciA9IHBhcnNlUG9zc2libGVQcmVmaXgoKTsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgTG9naWNhbE5vdCh0b2tlbiwgbmV3IENhc3RFeHByZXNzaW9uKHJl
bWFpbmRlci5vcmlnaW4sIG5ldyBUeXBlUmVmKHJlbWFpbmRlci5vcmlnaW4sICJib29sIiwgW10p
LCBbXSwgW3JlbWFpbmRlcl0pKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTG9naWNhbE5vdCh0
b2tlbiwgbmV3IENhbGxFeHByZXNzaW9uKHJlbWFpbmRlci5vcmlnaW4sICJib29sIiwgW10sIFty
ZW1haW5kZXJdKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBhcnNlUG9zc2libGVTdWZm
aXgoKTsKICAgICB9CkBAIC01NDYsNyArNTQ2LDcgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwg
b3JpZ2luLCBsaW5lTnVtYgogICAgICAgICBsZXQgZWxzZUJvZHk7CiAgICAgICAgIGlmICh0cnlD
b25zdW1lKCJlbHNlIikpCiAgICAgICAgICAgICBlbHNlQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7
Ci0gICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQob3JpZ2luLCBuZXcgQ2FzdEV4cHJlc3Np
b24oY29uZGl0aW9uYWwub3JpZ2luLCBuZXcgVHlwZVJlZihjb25kaXRpb25hbC5vcmlnaW4sICJi
b29sIiwgW10pLCBbXSwgW2NvbmRpdGlvbmFsXSksIGJvZHksIGVsc2VCb2R5KTsKKyAgICAgICAg
cmV0dXJuIG5ldyBJZlN0YXRlbWVudChvcmlnaW4sIG5ldyBDYWxsRXhwcmVzc2lvbihjb25kaXRp
b25hbC5vcmlnaW4sICJib29sIiwgW10sIFtjb25kaXRpb25hbF0pLCBib2R5LCBlbHNlQm9keSk7
CiAgICAgfQogICAgIAogICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNscygpCkBAIC02NDQs
MjAgKzY0NCwyMiBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAg
ICAgICAgIGxldCBvcmlnaW47CiAgICAgICAgIGxldCByZXR1cm5UeXBlOwogICAgICAgICBsZXQg
bmFtZTsKKyAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzOwogICAgICAgICBsZXQgaXNDYXN0Owog
ICAgICAgICBsZXQgb3BlcmF0b3JUb2tlbiA9IHRyeUNvbnN1bWUoIm9wZXJhdG9yIik7CiAgICAg
ICAgIGlmIChvcGVyYXRvclRva2VuKSB7CiAgICAgICAgICAgICBvcmlnaW4gPSBvcGVyYXRvclRv
a2VuOworICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSBwYXJzZVR5cGVQYXJhbWV0ZXJzKCk7
CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gcGFyc2VUeXBlKCk7Ci0gICAgICAgICAgICBuYW1l
ID0gQ2FzdEV4cHJlc3Npb24uZnVuY3Rpb25OYW1lOworICAgICAgICAgICAgbmFtZSA9ICJvcGVy
YXRvciBjYXN0IjsKICAgICAgICAgICAgIGlzQ2FzdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gcGFyc2VUeXBlKCk7CiAgICAgICAgICAgICBvcmln
aW4gPSByZXR1cm5UeXBlLm9yaWdpbjsKICAgICAgICAgICAgIG5hbWUgPSBwYXJzZUZ1bmNOYW1l
KCk7CisgICAgICAgICAgICB0eXBlUGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsK
ICAgICAgICAgICAgIGlzQ2FzdCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGxldCB0eXBl
UGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAgbGV0IHBhcmFtZXRl
cnMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKICAgICAgICAgcmV0dXJuIG5ldyBGdW5jKG9yaWdpbiwg
bmFtZSwgcmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMsIGlzQ2FzdCk7CiAg
ICAgfQpAQCAtNzEwLDYgKzcxMiwxMyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4s
IGxpbmVOdW1iCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIGZ1bmN0
aW9uIHBhcnNlTmF0aXZlRnVuYygpCisgICAgeworICAgICAgICBsZXQgZnVuYyA9IHBhcnNlRnVu
Y0RlY2woKTsKKyAgICAgICAgY29uc3VtZSgiOyIpOworICAgICAgICByZXR1cm4gbmV3IE5hdGl2
ZUZ1bmMoZnVuYy5vcmlnaW4sIGZ1bmMubmFtZSwgZnVuYy5yZXR1cm5UeXBlLCBmdW5jLnR5cGVQ
YXJhbWV0ZXJzLCBmdW5jLnBhcmFtZXRlcnMsIGZ1bmMuaXNDYXN0KTsKKyAgICB9CisgICAgCiAg
ICAgZnVuY3Rpb24gcGFyc2VOYXRpdmUoKQogICAgIHsKICAgICAgICAgbGV0IG9yaWdpbiA9IGNv
bnN1bWUoIm5hdGl2ZSIpOwpAQCAtNzI2LDkgKzczNSwxOSBAQCBmdW5jdGlvbiBwYXJzZShwcm9n
cmFtLCBvcmlnaW4sIGxpbmVOdW1iCiAgICAgICAgICAgICBjb25zdW1lKCI7Iik7CiAgICAgICAg
ICAgICByZXR1cm4gbmV3IE5hdGl2ZVR5cGUob3JpZ2luLCBuYW1lLnRleHQsIGlzVHlwZSA9PSAi
cHJpbWl0aXZlIiwgcGFyYW1ldGVycyk7CiAgICAgICAgIH0KLSAgICAgICAgbGV0IGZ1bmMgPSBw
YXJzZUZ1bmNEZWNsKCk7Ci0gICAgICAgIGNvbnN1bWUoIjsiKTsKLSAgICAgICAgcmV0dXJuIG5l
dyBOYXRpdmVGdW5jKGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUsIGZ1bmMucmV0dXJuVHlwZSwgZnVu
Yy50eXBlUGFyYW1ldGVycywgZnVuYy5wYXJhbWV0ZXJzLCBmdW5jLmlzQ2FzdCk7CisgICAgICAg
IHJldHVybiBwYXJzZU5hdGl2ZUZ1bmMoKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcGFy
c2VSZXN0cmljdGVkRnVuY0RlZigpCisgICAgeworICAgICAgICBjb25zdW1lKCJyZXN0cmljdGVk
Iik7CisgICAgICAgIGxldCByZXN1bHQ7CisgICAgICAgIGlmICh0cnlDb25zdW1lKCJuYXRpdmUi
KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlTmF0aXZlRnVuYygpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZUZ1bmNEZWYoKTsKKyAgICAgICAgcmVzdWx0Lmlz
UmVzdHJpY3RlZCA9IHRydWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIGZvciAoOzspIHsKQEAgLTczOSw4ICs3NTgsMTAgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3Jh
bSwgb3JpZ2luLCBsaW5lTnVtYgogICAgICAgICAgICAgbGV4ZXIubmV4dCgpOwogICAgICAgICBl
bHNlIGlmICh0b2tlbi50ZXh0ID09ICJ0eXBlZGVmIikKICAgICAgICAgICAgIHByb2dyYW0uYWRk
KHBhcnNlVHlwZURlZigpKTsKLSAgICAgICAgZWxzZSBpZiAodG9rZW4udGV4dCA9PSAibmF0aXZl
IikKKyAgICAgICAgZWxzZSBpZiAob3JpZ2luS2luZCA9PSAibmF0aXZlIiAmJiB0b2tlbi50ZXh0
ID09ICJuYXRpdmUiKQogICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VOYXRpdmUoKSk7Cisg
ICAgICAgIGVsc2UgaWYgKG9yaWdpbktpbmQgPT0gIm5hdGl2ZSIgJiYgdG9rZW4udGV4dCA9PSAi
cmVzdHJpY3RlZCIpCisgICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVJlc3RyaWN0ZWRGdW5j
RGVmKCkpOwogICAgICAgICBlbHNlIGlmICh0b2tlbi50ZXh0ID09ICJzdHJ1Y3QiKQogICAgICAg
ICAgICAgcHJvZ3JhbS5hZGQocGFyc2VTdHJ1Y3RUeXBlKCkpOwogICAgICAgICBlbHNlIGlmICh0
b2tlbi50ZXh0ID09ICJlbnVtIikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJlcGFyZS5qcwkocmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOCBAQAogZnVuY3Rp
b24gcHJlcGFyZShvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpCiB7CiAgICAgbGV0IHBy
b2dyYW0gPSBuZXcgUHJvZ3JhbSgpOwotICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJuYWwvc3Rk
bGliL3Byb2xvZ3VlIiwgMjgsIHN0YW5kYXJkTGlicmFyeVByb2xvZ3VlKTsKLSAgICBwYXJzZShw
cm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwotICAgIHBhcnNlKHByb2dy
YW0sICIvaW50ZXJuYWwvc3RkbGliL2VwaWxvZ3VlIiwgMjgsIHN0YW5kYXJkTGlicmFyeUVwaWxv
Z3VlKTsKKyAgICBwYXJzZShwcm9ncmFtLCAiL2ludGVybmFsL3N0ZGxpYiIsICJuYXRpdmUiLCAy
Nywgc3RhbmRhcmRMaWJyYXJ5KTsKKyAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sICJ1c2VyIiwg
bGluZU51bWJlck9mZnNldCwgdGV4dCk7CiAgICAgcmVzb2x2ZU5hbWVzKHByb2dyYW0pOwogICAg
IHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKTsKICAgICBjaGVjayhwcm9ncmFtKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW0uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkocmV2aXNpb24gMjIxODA0KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvZ3JhbS5qcwkod29ya2luZyBjb3B5
KQpAQCAtNTgsMjMgKzU4LDYgQEAgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIE5vZGUgewogICAgICAg
ICB0aGlzLl90b3BMZXZlbFN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpOwogICAgIH0KICAgICAK
LSAgICByZXNvbHZlRnVuY092ZXJsb2FkKG5hbWUsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlw
ZXMsIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICBsZXQgZnVuY3Rpb25zID0gdGhpcy5mdW5j
dGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoIWZ1bmN0aW9ucykKLSAgICAgICAgICAgIHJl
dHVybiB7ZmFpbHVyZXM6IFtdfTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXNvbHZlT3Zl
cmxvYWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcywgcmV0dXJu
VHlwZSk7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lQ29udGV4dCgpCi0gICAgewotICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IE5hbWVDb250ZXh0KCk7Ci0gICAgICAgIGZvciAobGV0IHN0YXRl
bWVudCBvZiB0aGlzLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIHJlc3VsdC5hZGQo
c3RhdGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAgdG9T
dHJpbmcoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl90b3BMZXZlbFN0YXRlbWVudHMubGVu
Z3RoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3RvY29sRGVj
bC5qcwkocmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJvdG9jb2xEZWNsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGNsYXNzIFBy
b3RvY29sRGVjbCBleHRlbmRzIFByb3RvY29sIHsKICAgICAgICAgICAgIGxldCBzaWduYXR1cmVz
ID0gdGhpcy5zaWduYXR1cmVzQnlOYW1lKG90aGVyU2lnbmF0dXJlLm5hbWUpOwogICAgICAgICAg
ICAgaWYgKCFzaWduYXR1cmVzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGxldCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgW10s
IG90aGVyU2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKTsKKyAgICAgICAgICAgIGxldCBvdmVybG9h
ZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgW10sIG90aGVyU2lnbmF0dXJlLnBh
cmFtZXRlclR5cGVzLCBvdGhlclNpZ25hdHVyZS5yZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0
aW9uKTsKICAgICAgICAgICAgIGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBsZXQgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlID0KQEAg
LTkwLDcgKzkwLDcgQEAgY2xhc3MgUHJvdG9jb2xEZWNsIGV4dGVuZHMgUHJvdG9jb2wgewogICAg
ICAgICBsZXQgc2lnbmF0dXJlcyA9IHRoaXMuc2lnbmF0dXJlczsKICAgICAgICAgZm9yIChsZXQg
c2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIHsKICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25h
dHVyZS52aXNpdChzdWJzdGl0dXRpb24pOwotICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gdGhp
cy5wcm9ncmFtLnJlc29sdmVGdW5jT3ZlcmxvYWQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZS50
eXBlUGFyYW1ldGVycywgc2lnbmF0dXJlLnBhcmFtZXRlclR5cGVzKTsKKyAgICAgICAgICAgIGxl
dCBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlLnBvc3NpYmxlT3Zlcmxv
YWRzLCBzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMsIHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcywg
c2lnbmF0dXJlLnJldHVyblR5dXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAg
IGlmICghb3ZlcmxvYWQuZnVuYykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwko
cmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlw
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQCBjbGFzcyBQdHJUeXBlIGV4dGVu
ZHMgUmVmZXJlbmNlVHlwZSB7CiAgICAgewogICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9m
IFB0clR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpcy5h
ZGRyZXNzU3BhY2UgIT0gb3RoZXIuYWRkcmVzc1NwYWNlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9CiAgICAgCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXNvbHZlT3ZlcmxvYWRJbXBsLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVPdmVybG9hZEltcGwuanMJKHJl
dmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jlc29sdmVP
dmVybG9hZEltcGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDY2ICsyNyw2OSBAQAogZnVuY3Rp
b24gcmVzb2x2ZU92ZXJsb2FkSW1wbChmdW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50
VHlwZXMsIHJldHVyblR5cGUpCiB7CiAgICAgbGV0IGZhaWx1cmVzID0gW107CisgICAgbGV0IHN1
Y2Nlc3NlcyA9IFtdOwogICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Rpb25zKSB7Ci0gICAgICAg
IGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBmdW5j
LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewotICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcg
T3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJn
dW1lbnRzIChwYXNzZWQgIiArIHR5cGVBcmd1bWVudHMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsg
ZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGggKyAiKSIpKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcmd1bWVudFR5cGVzLmxlbmd0aCAhPSBmdW5jLnBh
cmFtZXRlcnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5ldyBPdmVybG9h
ZFJlc29sdXRpb25GYWlsdXJlKGZ1bmMsICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIChwYXNz
ZWQgIiArIGFyZ3VtZW50VHlwZXMubGVuZ3RoICsgIiwgcmVxdWlyZSAiICsgZnVuYy5wYXJhbWV0
ZXJzLmxlbmd0aCArICIpIikpOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxldCBv
dmVybG9hZCA9IGluZmVyVHlwZXNGb3JDYWxsKGZ1bmMsIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50
VHlwZXMsIHJldHVyblR5cGUpOworICAgICAgICBpZiAob3ZlcmxvYWQuZmFpbHVyZSkKKyAgICAg
ICAgICAgIGZhaWx1cmVzLnB1c2gob3ZlcmxvYWQuZmFpbHVyZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHN1Y2Nlc3Nlcy5wdXNoKG92ZXJsb2FkKTsKKyAgICB9CisgICAgCisgICAgaWYg
KCFzdWNjZXNzZXMubGVuZ3RoKQorICAgICAgICByZXR1cm4ge2ZhaWx1cmVzOiBmYWlsdXJlc307
CisgICAgCisgICAgLy8gSWYgYW55IG9mIHRoZSBzaWduYXR1cmVzIGFyZSByZXN0cmljdGVkIHRo
ZW4gd2UgY29uc2lkZXIgdGhvc2UgZmlyc3QuIFRoaXMgaXMgYW4gZXNjYXBlIG1lY2hhbmlzbSBm
b3IKKyAgICAvLyBidWlsdC1pbiB0aGluZ3MuCisgICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBh
biBlcnJvciB0byBkZWNsYXJlIGEgZnVuY3Rpb24gdGhhdCBpcyBhdCBsZWFzdCBhcyBzcGVjaWZp
YyBhcyBhIHJlc3RyaWN0ZWQgZnVuY3Rpb24uCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NjU4MAorICAgIGxldCBoYXNSZXN0cmljdGVkID0gZmFsc2U7
CisgICAgZm9yIChsZXQgb3ZlcmxvYWQgb2Ygc3VjY2Vzc2VzKSB7CisgICAgICAgIGlmIChvdmVy
bG9hZC5mdW5jLmlzUmVzdHJpY3RlZCkgeworICAgICAgICAgICAgaGFzUmVzdHJpY3RlZCA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBsZXQgdW5pZmljYXRp
b25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dChmdW5jLnR5cGVQYXJhbWV0ZXJzKTsK
KyAgICB9CisgICAgCisgICAgaWYgKGhhc1Jlc3RyaWN0ZWQpCisgICAgICAgIHN1Y2Nlc3NlcyA9
IHN1Y2Nlc3Nlcy5maWx0ZXIob3ZlcmxvYWQgPT4gb3ZlcmxvYWQuZnVuYy5pc1Jlc3RyaWN0ZWQp
OworICAgIAorICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZnVuY3Rpb25zIHRoYXQg
YXJlIGF0IGxlYXN0IGFzIHNwZWNpZmljIGFzIGFsbCBvZiB0aGUgb3RoZXJzLiBUaGlzIG1lYW5z
CisgICAgLy8gdGhhdCB0aGV5IGNhbiBiZSAidHVybmVkIGFyb3VuZCIgYW5kIGFwcGxpZWQgb250
byBhbGwgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbGlzdC4KKyAgICBsZXQgcHJ1bmVk
U3VjY2Vzc2VzID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWNjZXNzZXMubGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgbGV0IG9rID0gdHJ1ZTsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgYXJndW1l
bnQgPSB0eXBlQXJndW1lbnRzW2ldOwotICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IGZ1bmMu
dHlwZVBhcmFtZXRlcnNbaV07Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50LnVuaWZ5KHVuaWZp
Y2F0aW9uQ29udGV4dCwgcGFyYW1ldGVyKSkgewotICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1
c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIlR5cGUgYXJndW1lbnQgIyIg
KyAoaSArIDEpICsgIiBmb3IgcGFyYW1ldGVyICIgKyBwYXJhbWV0ZXIubmFtZSArICIgZG9lcyBu
b3QgbWF0Y2ggKHBhc3NlZCAiICsgYXJndW1lbnQgKyAiLCByZXF1aXJlICIgKyBwYXJhbWV0ZXIg
KyAiKSIpKTsKLSAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghb2spCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0pCi0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOdWxsIGFyZ3VtZW50IHR5cGUgYXQgaSA9ICIg
KyBpKTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRUeXBlc1tpXS51bmlmeSh1bmlmaWNhdGlv
bkNvbnRleHQsIGZ1bmMucGFyYW1ldGVyc1tpXS50eXBlKSkgewotICAgICAgICAgICAgICAgIGZh
aWx1cmVzLnB1c2gobmV3IE92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUoZnVuYywgIkFyZ3VtZW50
ICMiICsgKGkgKyAxKSArICIgIiArIChmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA/ICJmb3IgcGFy
YW1ldGVyICIgKyBmdW5jLnBhcmFtZXRlcnNbaV0ubmFtZSA6ICIiKSArICIgZG9lcyBub3QgbWF0
Y2ggKHBhc3NlZCAiICsgYXJndW1lbnRUeXBlc1tpXSArICIsIHJlcXVpcmUgIiArIGZ1bmMucGFy
YW1ldGVyc1tpXS50eXBlICsgIikiKSk7Ci0gICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp
ZiAoIW9rKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZXR1cm5UeXBlKSB7
Ci0gICAgICAgICAgICBpZiAoIXJldHVyblR5cGUudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBm
dW5jLnJldHVyblR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuZXcgT3Zl
cmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiUmV0dXJuIHR5cGUgIiArIGZ1bmMucmV0dXJu
VHlwZSArICIgZG9lcyBub3QgbWF0Y2ggIiArIHJldHVyblR5cGUpKTsKKyAgICAgICAgbGV0IGFy
Z3VtZW50RnVuYyA9IHN1Y2Nlc3Nlc1tpXS5mdW5jOworICAgICAgICBmb3IgKGxldCBqID0gMDsg
aiA8IHN1Y2Nlc3Nlcy5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgaWYgKGkgPT0gaikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoIXVuaWZpY2F0aW9uQ29udGV4dC52ZXJpZnkoKSkgewotICAgICAgICAgICAgZmFpbHVy
ZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiVmlvbGF0ZXMgdHlw
ZSB2YXJpYWJsZSBjb25zdHJhaW50cyIpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGxldCBzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMgPSAhdHlwZUFyZ3VtZW50
cy5sZW5ndGg7Ci0gICAgICAgIGlmIChzaG91bGRCdWlsZFR5cGVBcmd1bWVudHMpCi0gICAgICAg
ICAgICB0eXBlQXJndW1lbnRzID0gW107Ci0gICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIg
b2YgZnVuYy50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAgbGV0IHR5cGVBcmd1bWVudCA9
IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHR5cGVQYXJhbWV0ZXIpOwotICAgICAgICAgICAgaWYg
KHR5cGVBcmd1bWVudCA9PSB0eXBlUGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICAgICAgZmFpbHVy
ZXMucHVzaChuZXcgT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZShmdW5jLCAiVHlwZSBwYXJhbWV0
ZXIgIiArIHR5cGVQYXJhbWV0ZXIgKyAiIGRpZCBub3QgZ2V0IGFzc2lnbmVkIGEgdHlwZSIpKTsK
KyAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJGdW5jID0gc3VjY2Vzc2VzW2pdLmZ1bmM7CisgICAg
ICAgICAgICBsZXQgb3ZlcmxvYWQgPSBpbmZlclR5cGVzRm9yQ2FsbCgKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJGdW5jLAorICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoID8g
YXJndW1lbnRGdW5jLnR5cGVQYXJhbWV0ZXJzIDogW10sCisgICAgICAgICAgICAgICAgYXJndW1l
bnRGdW5jLnBhcmFtZXRlclR5cGVzLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50RnVuYy5yZXR1
cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKTsKKyAgICAgICAgICAgIGlmICghb3ZlcmxvYWQu
ZnVuYykgewogICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQnVpbGRUeXBlQXJndW1l
bnRzKQotICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMucHVzaCh0eXBlQXJndW1lbnQpOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICghb2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgcmV0dXJuIHtmdW5jLCB1bmlmaWNhdGlvbkNvbnRleHQsIHR5cGVBcmd1bWVudHN9OworICAg
ICAgICBpZiAob2spCisgICAgICAgICAgICBwcnVuZWRTdWNjZXNzZXMucHVzaChzdWNjZXNzZXNb
aV0pOworICAgIH0KKyAgICAKKyAgICBpZiAocHJ1bmVkU3VjY2Vzc2VzLmxlbmd0aCA9PSAxKQor
ICAgICAgICByZXR1cm4gcHJ1bmVkU3VjY2Vzc2VzWzBdOworICAgIAorICAgIGxldCBhbWJpZ3Vp
dHlMaXN0OworICAgIGxldCBtZXNzYWdlOworICAgIGlmIChwcnVuZWRTdWNjZXNzZXMubGVuZ3Ro
ID09IDApIHsKKyAgICAgICAgYW1iaWd1aXR5TGlzdCA9IHN1Y2Nlc3NlczsKKyAgICAgICAgbWVz
c2FnZSA9ICJBbWJpZ3VvdXMgb3ZlcmxvYWQgLSBubyBmdW5jdGlvbiBjYW4gYmUgYXBwbGllZCB0
byBhbGwgb3RoZXJzIjsKKyAgICB9IGVsc2UgeworICAgICAgICBhbWJpZ3VpdHlMaXN0ID0gcHJ1
bmVkU3VjY2Vzc2VzOworICAgICAgICBtZXNzYWdlID0gIkFtYmlndW91cyBvdmVybG9hZCAtIGZ1
bmN0aW9ucyBtdXR1YWxseSBhcHBsaWNhYmxlIjsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHtm
YWlsdXJlczogZmFpbHVyZXN9OworICAgIHJldHVybiB7ZmFpbHVyZXM6IGFtYmlndWl0eUxpc3Qu
bWFwKG92ZXJsb2FkID0+IG5ldyBPdmVybG9hZFJlc29sdXRpb25GYWlsdXJlKG92ZXJsb2FkLmZ1
bmMsIG1lc3NhZ2UpKX07CiB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwkocmV2aXNpb24gMjIxODA0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgY2xhc3Mg
UmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgICAgICBub2RlLnR5cGVQYXJh
bWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKICAgICAgICAg
ICAgIG5vZGUucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlz
KSkpOwogICAgICAgICByZXN1bHQucHJvdG9jb2xEZWNsID0gbm9kZS5wcm90b2NvbERlY2w7Cisg
ICAgICAgIHJlc3VsdC5wb3NzaWJsZU92ZXJsb2FkcyA9IG5vZGUucG9zc2libGVPdmVybG9hZHM7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMjQ5LDE4ICsyNTAsMTIg
QEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgICAgICByZXN1
bHQuYXJndW1lbnRUeXBlcyA9IGFyZ3VtZW50VHlwZXMubWFwKGFyZ3VtZW50VHlwZSA9PiBhcmd1
bWVudFR5cGUudmlzaXQodGhpcykpOwogICAgICAgICByZXN1bHQuZnVuYyA9IG5vZGUuZnVuYzsK
ICAgICAgICAgcmVzdWx0Lm5hdGl2ZUZ1bmNJbnN0YW5jZSA9IG5vZGUubmF0aXZlRnVuY0luc3Rh
bmNlOworICAgICAgICByZXN1bHQucG9zc2libGVPdmVybG9hZHMgPSBub2RlLnBvc3NpYmxlT3Zl
cmxvYWRzOworICAgICAgICBpZiAobm9kZS5pc0Nhc3QpCisgICAgICAgICAgICByZXN1bHQuc2V0
Q2FzdERhdGEobm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICB2aXNpdENhc3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAg
ICAgICBsZXQgcmVzdWx0ID0gbmV3IENhc3RFeHByZXNzaW9uKAotICAgICAgICAgICAgbm9kZS5v
cmlnaW4sIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSwKLSAgICAgICAgICAgIG5vZGUudHlw
ZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSks
Ci0gICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQu
dmlzaXQodGhpcykpKTsKLSAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0Rlcml2ZWRDYWxsRGF0
YShub2RlLCByZXN1bHQpOwotICAgIH0KLSAgICAKICAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5v
ZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IENhbGxFeHByZXNzaW9uKApJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5q
cwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFy
ZExpYnJhcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCisvLyBOT1RF
OiBUaGUgbmV4dCBsaW5lIGlzIGxpbmUgMjgsIGFuZCB3ZSByZWx5IG9uIHRoaXMgaW4gUHJlcGFy
ZS5qcy4KK2NvbnN0IHN0YW5kYXJkTGlicmFyeSA9IGAKKy8vIFRoaXMgaXMgdGhlIFdTTCBzdGFu
ZGFyZCBsaWJyYXJ5LiBJbXBsZW1lbnRhdGlvbnMgb2YgYWxsIG9mIHRoZXNlIHRoaW5ncyBhcmUg
aW4KKy8vIEludHJpbnNpY3MuanMuIFRoZSBvbmx5IHRoaW5nIHRoYXQgZ2V0cyBkZWZpbmVkIGJl
Zm9yZSB3ZSBnZXQgaGVyZSBpcyB0aGUgcHJpbWl0aXZlCisvLyBwcm90b2NvbC4KKworLy8gTmVl
ZCB0byBib290c3RyYXAgdm9pZCBmaXJzdC4KK25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiB2b2lk
OworCituYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgaW50MzI7CituYXRpdmUgcHJpbWl0aXZlIHR5
cGVkZWYgdWludDMyOworbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGJvb2w7Cit0eXBlZGVmIGlu
dCA9IGludDMyOwordHlwZWRlZiB1aW50ID0gdWludDMyOworCituYXRpdmUgcHJpbWl0aXZlIHR5
cGVkZWYgZG91YmxlOworCituYXRpdmUgaW50IG9wZXJhdG9yKyhpbnQsIGludCk7CituYXRpdmUg
dWludCBvcGVyYXRvcisodWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJhdG9yLShpbnQsIGlu
dCk7CituYXRpdmUgdWludCBvcGVyYXRvci0odWludCwgdWludCk7CituYXRpdmUgaW50IG9wZXJh
dG9yKihpbnQsIGludCk7CituYXRpdmUgdWludCBvcGVyYXRvcioodWludCwgdWludCk7CituYXRp
dmUgaW50IG9wZXJhdG9yLyhpbnQsIGludCk7CituYXRpdmUgdWludCBvcGVyYXRvci8odWludCwg
dWludCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcj09KGludCwgaW50KTsKK25hdGl2ZSBib29sIG9w
ZXJhdG9yPT0odWludCwgdWludCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcj09KGJvb2wsIGJvb2wp
OworCitwcm90b2NvbCBFcXVhdGFibGUgeworICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUs
IEVxdWF0YWJsZSk7Cit9CisKK3Jlc3RyaWN0ZWQgb3BlcmF0b3I8VD4gVCgpCit7CisgICAgVCBk
ZWZhdWx0VmFsdWU7CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKworcmVzdHJpY3RlZCBv
cGVyYXRvcjxUPiBUKFQgeCkKK3sKKyAgICByZXR1cm4geDsKK30KKworb3BlcmF0b3I8VDpFcXVh
dGFibGU+IGJvb2woVCB4KQoreworICAgIHJldHVybiB4ICE9IFQoKTsKK30KKworbmF0aXZlIHRo
cmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVFtdLCB1aW50KTsKK25hdGl2ZSB0aHJlYWRn
cm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4odGhyZWFkZ3JvdXAgVFtdLCB1aW50KTsK
K25hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KGRldmljZSBUW10sIHVp
bnQpOworbmF0aXZlIGNvbnN0YW50IFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihjb25zdGFu
dCBUW10sIHVpbnQpOworYDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0
YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeUVwaWxvZ3VlLmpzCShyZXZpc2lvbiAyMjE4MDQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlFcGlsb2d1
ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8gTk9URTogVGhlIG5l
eHQgbGluZSBpcyBsaW5lIDI4LCBhbmQgd2UgcmVseSBvbiB0aGlzIGluIFByZXBhcmUuanMuCi1j
b25zdCBzdGFuZGFyZExpYnJhcnlFcGlsb2d1ZSA9IGAKLW9wZXJhdG9yIGJvb2w8PjxUOkVxdWF0
YWJsZT4oVCB4KSB7Ci0gICAgVCBkZWZhdWx0VmFsdWU7Ci0gICAgcmV0dXJuIHggIT0gZGVmYXVs
dFZhbHVlOwotfQotYDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5k
YXJkTGlicmFyeVByb2xvZ3VlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzCShyZXZpc2lvbiAyMjE4MDQpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnlQcm9sb2d1ZS5q
cwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8gTk9URTogVGhlIG5leHQg
bGluZSBpcyBsaW5lIDI4LCBhbmQgd2UgcmVseSBvbiB0aGlzIGluIFByZXBhcmUuanMuCi1jb25z
dCBzdGFuZGFyZExpYnJhcnlQcm9sb2d1ZSA9IGAKLS8vIFRoaXMgaXMgdGhlIFdTTCBzdGFuZGFy
ZCBsaWJyYXJ5LiBJbXBsZW1lbnRhdGlvbnMgb2YgYWxsIG9mIHRoZXNlIHRoaW5ncyBhcmUgaW4K
LS8vIEludHJpbnNpY3MuanMuIFRoZSBvbmx5IHRoaW5nIHRoYXQgZ2V0cyBkZWZpbmVkIGJlZm9y
ZSB3ZSBnZXQgaGVyZSBpcyB0aGUgcHJpbWl0aXZlCi0vLyBwcm90b2NvbC4KLQotLy8gTmVlZCB0
byBib290c3RyYXAgdm9pZCBmaXJzdC4KLW5hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiB2b2lkOwot
Ci1uYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgaW50MzI7Ci1uYXRpdmUgcHJpbWl0aXZlIHR5cGVk
ZWYgdWludDMyOwotbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGJvb2w7Ci10eXBlZGVmIGludCA9
IGludDMyOwotdHlwZWRlZiB1aW50ID0gdWludDMyOwotCi1uYXRpdmUgcHJpbWl0aXZlIHR5cGVk
ZWYgZG91YmxlOwotCi1uYXRpdmUgaW50IG9wZXJhdG9yKyhpbnQsIGludCk7Ci1uYXRpdmUgdWlu
dCBvcGVyYXRvcisodWludCwgdWludCk7Ci1uYXRpdmUgaW50IG9wZXJhdG9yLShpbnQsIGludCk7
Ci1uYXRpdmUgdWludCBvcGVyYXRvci0odWludCwgdWludCk7Ci1uYXRpdmUgaW50IG9wZXJhdG9y
KihpbnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvcioodWludCwgdWludCk7Ci1uYXRpdmUg
aW50IG9wZXJhdG9yLyhpbnQsIGludCk7Ci1uYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWlu
dCk7Ci1uYXRpdmUgYm9vbCBvcGVyYXRvcj09KGludCwgaW50KTsKLW5hdGl2ZSBib29sIG9wZXJh
dG9yPT0odWludCwgdWludCk7Ci1uYXRpdmUgYm9vbCBvcGVyYXRvcj09KGJvb2wsIGJvb2wpOwot
Ci1wcm90b2NvbCBFcXVhdGFibGUgewotICAgIGJvb2wgb3BlcmF0b3I9PShFcXVhdGFibGUsIEVx
dWF0YWJsZSk7Ci19Ci0KLW9wZXJhdG9yIFQ8PjxUPihUIHgpIHsKLSAgICByZXR1cm4geDsKLX0K
LQotbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVFtdLCB1aW50KTsKLW5h
dGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4odGhyZWFkZ3JvdXAg
VFtdLCB1aW50KTsKLW5hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3ImW108VDpwcmltaXRpdmU+KGRl
dmljZSBUW10sIHVpbnQpOwotbmF0aXZlIGNvbnN0YW50IFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0
aXZlPihjb25zdGFudCBUW10sIHVpbnQpOwotYDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAog
PHNjcmlwdCBzcmM9IkNhbGxBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJD
YWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9uLmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJDYXN0RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0IHNyYz0iQ2hlY2suanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrTGl0ZXJh
bFR5cGVzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVja1JlY3Vyc2lvbi5qcyI+PC9z
Y3JpcHQ+CkBAIC00Miw2ICs0MSw3IEBACiA8c2NyaXB0IHNyYz0iRnVuY1BhcmFtZXRlci5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRnVuY3Rpb25MaWtlQmxvY2suanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IklmU3RhdGVtZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJJbmZl
clR5cGVzRm9yQ2FsbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iSW5saW5lLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJJ
bnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiPjwvc2NyaXB0PgpAQCAtNzcsOCArNzcsNyBAQAogPHNj
cmlwdCBzcmM9IlJldHVybi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV0dXJuQ2hlY2tl
ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUmV0dXJuRXhjZXB0aW9uLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJTdGFuZGFyZExpYnJhcnlFcGlsb2d1ZS5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9IlN0YW5kYXJkTGlicmFyeS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0
TGF5b3V0QnVpbGRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48L3NjcmlwdD4KSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIxODA0KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBmdW5jdGlvbiBkb1ByZXAoY29kZSkKIAogZnVuY3Rpb24gZG9MZXgoY29k
ZSkKIHsKLSAgICBsZXQgbGV4ZXIgPSBuZXcgTGV4ZXIoIi9pbnRlcm5hbC90ZXN0IiwgMCwgY29k
ZSk7CisgICAgbGV0IGxleGVyID0gbmV3IExleGVyKCIvaW50ZXJuYWwvdGVzdCIsICJuYXRpdmUi
LCAwLCBjb2RlKTsKICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgZm9yICg7OykgewogICAgICAg
ICBsZXQgbmV4dCA9IGxleGVyLm5leHQoKTsKQEAgLTg1LDE3ICs4NSwxNyBAQCBmdW5jdGlvbiBj
aGVja0ludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjCiBmdW5jdGlvbiBjaGVja1VJbnQocHJvZ3Jh
bSwgcmVzdWx0LCBleHBlY3RlZCkKIHsKICAgICBpZiAoIXJlc3VsdC50eXBlLmVxdWFscyhwcm9n
cmFtLmludHJpbnNpY3MudWludDMyKSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBy
ZXN1bHQgdHlwZTsgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJXcm9uZyByZXN1bHQgdHlwZTogIiArIHJlc3VsdC50eXBlKTsKICAgICBpZiAocmVzdWx0LnZh
bHVlICE9IGV4cGVjdGVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDog
IiArIHJlc3VsdCArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7CisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0LnZhbHVlICsgIiAoZXhwZWN0
ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKIH0KIAogZnVuY3Rpb24gY2hlY2tCb29sKHByb2dyYW0s
IHJlc3VsdCwgZXhwZWN0ZWQpCiB7CiAgICAgaWYgKCFyZXN1bHQudHlwZS5lcXVhbHMocHJvZ3Jh
bS5pbnRyaW5zaWNzLmJvb2wpKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3Vs
dCB0eXBlOyByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldy
b25nIHJlc3VsdCB0eXBlOiAiICsgcmVzdWx0LnR5cGUpOwogICAgIGlmIChyZXN1bHQudmFsdWUg
IT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsg
cmVzdWx0ICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1bHQudmFsdWUgKyAiIChleHBlY3RlZCAi
ICsgZXhwZWN0ZWQgKyAiKSIpOwogfQogCiBmdW5jdGlvbiBjaGVja0xleGVyVG9rZW4ocmVzdWx0
LCBleHBlY3RlZEluZGV4LCBleHBlY3RlZEtpbmQsIGV4cGVjdGVkVGV4dCkKQEAgLTEzNjgsNiAr
MTM2OCwzOCBAQCBmdW5jdGlvbiBURVNUX3Byb3RvY29sTW9ub1BvbHlTaWdEb3VibGVQCiAgICAg
ICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CiB9CiAKK2Z1bmN0aW9uIFRFU1Rf
YW1iaWd1b3VzT3ZlcmxvYWRTaW1wbGUoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkg
PT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vPFQ+KGludCwgVCkgeyB9CisgICAgICAg
ICAgICB2b2lkIGZvbzxUPihULCBpbnQpIHsgfQorICAgICAgICAgICAgdm9pZCBiYXIoaW50IGEs
IGludCBiKSB7IGZvbyhhLCBiKTsgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5z
dGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9hbWJpZ3VvdXNPdmVybG9h
ZE92ZXJsYXBwaW5nKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChg
CisgICAgICAgICAgICB2b2lkIGZvbzxUPihpbnQsIFQpIHsgfQorICAgICAgICAgICAgdm9pZCBm
b288VD4oVCwgVCkgeyB9CisgICAgICAgICAgICB2b2lkIGJhcihpbnQgYSwgaW50IGIpIHsgZm9v
KGEsIGIpOyB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBl
RXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2FtYmlndW91c092ZXJsb2FkVGllQnJlYWsoKQor
eworICAgIGRvUHJlcChgCisgICAgICAgIHZvaWQgZm9vPFQ+KGludCwgVCkgeyB9CisgICAgICAg
IHZvaWQgZm9vPFQ+KFQsIFQpIHsgfQorICAgICAgICB2b2lkIGZvbyhpbnQsIGludCkgeyB9Cisg
ICAgICAgIHZvaWQgYmFyKGludCBhLCBpbnQgYikgeyBmb28oYSwgYik7IH0KKyAgICBgKTsKK30K
KwogbGV0IGZpbHRlciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKIGlmICh0
aGlzWyJhcmd1bWVudHMiXSkgewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxl
bmd0aDsgaSsrKSB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlUmVm
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVSZWYu
anMJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5
cGVSZWYuanMJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsOCBAQCBjbGFzcyBUeXBlUmVm
IGV4dGVuZHMgVHlwZSB7CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLm5hbWUpCisgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlLnRvU3RyaW5nKCk7CiAg
ICAgICAgIGlmICghdGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVy
biB0aGlzLm5hbWU7CiAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5cGVB
cmd1bWVudHMgKyAiPiI7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0
b3IuanMJKHJldmlzaW9uIDIyMTgwNCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Zpc2l0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTI2MywxNCArMjYzLDEwIEBAIGNsYXNzIFZp
c2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgICAgICBmb3IgKGxldCBhcmd1bWVu
dCBvZiBhY3R1YWxUeXBlQXJndW1lbnRzKQogICAgICAgICAgICAgICAgIGFyZ3VtZW50LnZpc2l0
KHRoaXMpOwogICAgICAgICB9CisgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUpCisgICAgICAg
ICAgICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7CiAgICAgfQogICAgIAotICAgIHZpc2l0
Q2FzdEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlzaXRDYWxsRXhwcmVz
c2lvbihub2RlKTsKLSAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpOwotICAgIH0K
LQogICAgIHZpc2l0TG9naWNhbE5vdChub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5vcGVyYW5k
LnZpc2l0KHRoaXMpOwo=
</data>
<flag name="review"
          id="340450"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>