<?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>176975</bug_id>
          
          <creation_ts>2017-09-14 21:21:27 -0700</creation_ts>
          <short_desc>WSL should support ++, --, +=, and all of those things</short_desc>
          <delta_ts>2018-10-13 16:42:07 -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>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349169</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 21:21:27 -0700</bug_when>
    <thetext>Patch fhrtchoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349170</commentid>
    <comment_count>1</comment_count>
      <attachid>320866</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 21:23:30 -0700</bug_when>
    <thetext>Created attachment 320866
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349503</commentid>
    <comment_count>2</comment_count>
      <attachid>320866</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-15 13:28:18 -0700</bug_when>
    <thetext>Comment on attachment 320866
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:182
&gt; +        node.type = node.argument.visit(this);

Javascript is awesome. LetExpression dresses up as if it were a VariableDecl and JavaScript just makes it work.

&gt; Tools/WebGPUShadingLanguageRI/EBufferBuilder.js:59
&gt; +            node.initializer.visit(this);

lololol. Can we add a test for this?

&gt; Tools/WebGPUShadingLanguageRI/LetExpression.js:42
&gt; +        return this.name + &quot;(&quot; + this.argument + &quot;, &quot; + this.body + &quot;)&quot;;

|this| doesn&apos;t appear to have a &quot;body&quot; value. I know you set it in the parser, but it would aid readability if you put |body| and |argument| in the constructor (and passed undefined to the constructor if necessary).

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:340
&gt; +    function doIncrement(token, ptr, extraArg)

&quot;do&quot; is a little misleading. Maybe &quot;emit&quot;?

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:342
&gt; +        let args = [new DereferenceExpression(token, VariableRef.wrap(ptr))];

I don&apos;t understand why all these Dereference expressions are necessary (lines 342, 352, 362, 413). Why don&apos;t we just remove the MakePtrs on lines 359 and 410 and then the Dereferences wouldn&apos;t be necessary? Is the reason because, if we did this, it would be impossible to change the value of &quot;b&quot; in the statement &quot;++b&quot;? Because you&apos;d just be changing the LetExpression&apos;s ePtr and not the real b?

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:349
&gt; +        

Might want to check that |name| is not exactly equal to &quot;operator&quot;

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:361
&gt; +        let oldValue = new LetExpression(token);

I think I understand this. Cute.

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:407
&gt; +    function finishParsingPreIncrement(token, left, extraArg)

Shouldn&apos;t this be called &quot;right&quot;?

&gt; Tools/WebGPUShadingLanguageRI/Parse.js:421
&gt; +        let left = parsePossiblePrefix();

Shouldn&apos;t this be called &quot;right&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349507</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 13:34:41 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #2)
&gt; Comment on attachment 320866 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320866&amp;action=review
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:182
&gt; &gt; +        node.type = node.argument.visit(this);
&gt; 
&gt; Javascript is awesome. LetExpression dresses up as if it were a VariableDecl
&gt; and JavaScript just makes it work.
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/EBufferBuilder.js:59
&gt; &gt; +            node.initializer.visit(this);
&gt; 
&gt; lololol. Can we add a test for this?

I&apos;ll try!

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/LetExpression.js:42
&gt; &gt; +        return this.name + &quot;(&quot; + this.argument + &quot;, &quot; + this.body + &quot;)&quot;;
&gt; 
&gt; |this| doesn&apos;t appear to have a &quot;body&quot; value. I know you set it in the
&gt; parser, but it would aid readability if you put |body| and |argument| in the
&gt; constructor (and passed undefined to the constructor if necessary).

Fixed: I initialized them both to null in the constructor.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:340
&gt; &gt; +    function doIncrement(token, ptr, extraArg)
&gt; 
&gt; &quot;do&quot; is a little misleading. Maybe &quot;emit&quot;?

Fixed.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:342
&gt; &gt; +        let args = [new DereferenceExpression(token, VariableRef.wrap(ptr))];
&gt; 
&gt; I don&apos;t understand why all these Dereference expressions are necessary
&gt; (lines 342, 352, 362, 413). Why don&apos;t we just remove the MakePtrs on lines
&gt; 359 and 410 and then the Dereferences wouldn&apos;t be necessary? Is the reason
&gt; because, if we did this, it would be impossible to change the value of &quot;b&quot;
&gt; in the statement &quot;++b&quot;? Because you&apos;d just be changing the LetExpression&apos;s
&gt; ePtr and not the real b?

Yeah, then you wouldn&apos;t actually be changing the value of the variable.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:349
&gt; &gt; +        
&gt; 
&gt; Might want to check that |name| is not exactly equal to &quot;operator&quot;

Fixed.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:361
&gt; &gt; +        let oldValue = new LetExpression(token);
&gt; 
&gt; I think I understand this. Cute.
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:407
&gt; &gt; +    function finishParsingPreIncrement(token, left, extraArg)
&gt; 
&gt; Shouldn&apos;t this be called &quot;right&quot;?

It&apos;s left += extraArg.  So, extraArg could be called right, but left is totally left.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Parse.js:421
&gt; &gt; +        let left = parsePossiblePrefix();
&gt; 
&gt; Shouldn&apos;t this be called &quot;right&quot;?

Ditto.  Pretty sure it&apos;s right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349510</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 13:36:45 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222108/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353392</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:27:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693302&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468934</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:42:07 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/135</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320866</attachid>
            <date>2017-09-14 21:23:30 -0700</date>
            <delta_ts>2017-09-15 13:28:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23591</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjA3MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDcwIEBACisyMDE3LTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIHNob3VsZCBzdXBwb3J0ICsrLCAtLSwgKz0sIGFuZCBhbGwgb2YgdGhvc2Ug
dGhpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzY5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgYWRkcyBhbiBpbnRlcm5hbCBBU1QgY29uc3RydWN0IGNhbGxlZCBMZXRFeHBy
ZXNzaW9uLCB0aGF0IGFsbG93cyB1cyB0byBhbm9ueW1vdXNseSBjYXB0dXJlCisgICAgICAgIGEg
dmFsdWUuIFRoaXMgY2hhbmdlIHVzZXMgTGV0RXhwcmVzc2lvbiB0byBpbXBsZW1lbnQgcHJlZml4
IGFuZCBzdWZmaXggKysvLS0gYW5kIGFsbCBvZiB0aGUKKyAgICAgICAgKz0vLT0vZXRjLgorCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRUJ1ZmZlckJ1aWxkZXIuanM6CisgICAgICAgIChFQnVmZmVyQnVpbGRlci5wcm90
b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgorICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90
eXBlLnZpc2l0TGV0RXhwcmVzc2lvbik6CisgICAgICAgIChFQnVmZmVyQnVpbGRlcik6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzOgorICAgICAgICAoRXZh
bHVhdG9yLnByb3RvdHlwZS52aXNpdExldEV4cHJlc3Npb24pOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanM6IEFkZGVkLgorICAgICAgICAoTGV0RXhw
cmVzc2lvbik6CisgICAgICAgIChMZXRFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgb3JpZ2luKToK
KyAgICAgICAgKExldEV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBuYW1lKToKKyAgICAgICAgKExl
dEV4cHJlc3Npb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MZXhlci5qczoKKyAgICAgICAgKExleGVyLnByb3RvdHlwZS5uZXh0KToKKyAg
ICAgICAgKExleGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVz
b2x2ZXIuanM6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xE
ZWNsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qczoKKyAgICAg
ICAgKGlzQ2FsbEV4cHJlc3Npb24pOgorICAgICAgICAoZmluaXNoUGFyc2luZ1Bvc3RJbmNyZW1l
bnQpOgorICAgICAgICAocGFyc2VQb3NzaWJsZVN1ZmZpeCk6CisgICAgICAgIChmaW5pc2hQYXJz
aW5nUHJlSW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlUHJlSW5jcmVtZW50KToKKyAgICAgICAg
KHBhcnNlUG9zc2libGVQcmVmaXgpOgorICAgICAgICAocGFyc2VQb3NzaWJsZUFzc2lnbm1lbnQp
OgorICAgICAgICAocGFyc2VQb3N0SW5jcmVtZW50KToKKyAgICAgICAgKHBhcnNlRWZmZWN0ZnVs
RXhwcmVzc2lvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIu
anM6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRGdW5jdGlvbkxpa2VCbG9jayk6
CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRMZXRFeHByZXNzaW9uKToKKyAgICAg
ICAgKFJld3JpdGVyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFy
ZExpYnJhcnkuanM6CisgICAgICAgIChpbnQub3BlcmF0b3IpOgorICAgICAgICAodWludC5vcGVy
YXRvcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChURVNUX3By
ZWZpeFBsdXNQbHVzKToKKyAgICAgICAgKFRFU1RfcHJlZml4UGx1c1BsdXNSZXN1bHQpOgorICAg
ICAgICAoVEVTVF9wb3N0Zml4UGx1c1BsdXMpOgorICAgICAgICAoVEVTVF9wb3N0Zml4UGx1c1Bs
dXNSZXN1bHQpOgorICAgICAgICAoVEVTVF9wcmVmaXhNaW51c01pbnVzKToKKyAgICAgICAgKFRF
U1RfcHJlZml4TWludXNNaW51c1Jlc3VsdCk6CisgICAgICAgIChURVNUX3Bvc3RmaXhNaW51c01p
bnVzKToKKyAgICAgICAgKFRFU1RfcG9zdGZpeE1pbnVzTWludXNSZXN1bHQpOgorICAgICAgICAo
VEVTVF9wbHVzRXF1YWxzKToKKyAgICAgICAgKFRFU1RfcGx1c0VxdWFsc1Jlc3VsdCk6CisgICAg
ICAgIChURVNUX21pbnVzRXF1YWxzKToKKyAgICAgICAgKFRFU1RfbWludXNFcXVhbHNSZXN1bHQp
OgorICAgICAgICAoVEVTVF90aW1lc0VxdWFscyk6CisgICAgICAgIChURVNUX3RpbWVzRXF1YWxz
UmVzdWx0KToKKyAgICAgICAgKFRFU1RfZGl2aWRlRXF1YWxzKToKKyAgICAgICAgKFRFU1RfZGl2
aWRlRXF1YWxzUmVzdWx0KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgor
CiAyMDE3LTA5LTE0ICBZb3VzdWtlIEtpbW90byAgPHlvdXN1a2Uua2ltb3RvQHNvbnkuY29tPgog
CiAgICAgICAgIFtXaW5DYWlyb10gQWRkIGFuIG9wdGlvbiB0byBidWlsZCBXZWJLaXRMZWdhY3kg
YW5kIFdlYktpdApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNp
b24gMjIyMDIxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5q
cyIpOwogbG9hZCgiSW50TGl0ZXJhbC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsK
IGxvYWQoIkludHJpbnNpY3MuanMiKTsKK2xvYWQoIkxldEV4cHJlc3Npb24uanMiKTsKIGxvYWQo
IkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CiBsb2FkKCJMaXRlcmFsVHlwZUNo
ZWNrZXIuanMiKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5q
cwkocmV2aXNpb24gMjIyMDIxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hl
Y2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTc3LDggKzE3NywxOCBAQCBjbGFzcyBDaGVja2Vy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBmaWVsZC50eXBlOwogICAgIH0KICAg
ICAKKyAgICB2aXNpdExldEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUudHlw
ZSA9IG5vZGUuYXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIGlmICghbm9kZS50eXBlKQor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEaWQgbm90IGdldCB0eXBlIGZvciBub2RlOiAi
ICsgbm9kZS5hcmd1bWVudCk7CisgICAgICAgIHJldHVybiBub2RlLmJvZHkudmlzaXQodGhpcyk7
CisgICAgfQorICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKICAgICB7CisgICAgICAg
IGlmICghbm9kZS52YXJpYWJsZS50eXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJW
YXJpYWJsZSBoYXMgbm8gdHlwZTogIiArIG5vZGUudmFyaWFibGUpOwogICAgICAgICByZXR1cm4g
bm9kZS52YXJpYWJsZS50eXBlOwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIwMjEpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsMTUgQEAgY2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQogICAgIHsKICAgICAgICAgdGhp
cy5fY3JlYXRlRVB0ckZvck5vZGUobm9kZSk7CisgICAgICAgIGlmIChub2RlLmluaXRpYWxpemVy
KQorICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplci52aXNpdCh0aGlzKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jcmVh
dGVFUHRyRm9yTm9kZShub2RlKTsKKyAgICAgICAgbm9kZS5hcmd1bWVudC52aXNpdCh0aGlzKTsK
KyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMDIxKQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTcsNiArMjE3LDEyIEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgICAgICB0aHJvdyBub2RlOwogICAgIH0KICAgICAKKyAgICB2aXNpdExldEV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUuZVB0ci5jb3B5RnJvbShub2RlLmFyZ3VtZW50
LnZpc2l0KHRoaXMpLCBub2RlLnR5cGUuc2l6ZSk7CisgICAgICAgIHJldHVybiBub2RlLmJvZHku
dmlzaXQodGhpcyk7CisgICAgfQorICAgIAogICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkK
ICAgICB7CiAgICAgICAgIC8vIFdlIGV2YWx1YXRlIGlubGluZWQgQVNUcywgc28gdGhpcyBjYW4g
b25seSBiZSBhIG5hdGl2ZSBjYWxsLgpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTGV0RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MZXRFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0xldEV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVz
ZSBzdHJpY3QiOworCitsZXQgbGV0RXhwcmVzc2lvbkNvdW50ID0gMDsKKworY2xhc3MgTGV0RXhw
cmVzc2lvbiBleHRlbmRzIFZhbHVlIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4pCisgICAgewor
ICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAgICAg
IHRoaXMuaW5kZXggPSBsZXRFeHByZXNzaW9uQ291bnQrKzsKKyAgICB9CisgICAgCisgICAgZ2V0
IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBuYW1lKCkgeyByZXR1
cm4gImxldDwiICsgdGhpcy5pbmRleCArICI+IjsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAiKCIgKyB0aGlzLmFyZ3VtZW50ICsgIiwg
IiArIHRoaXMuYm9keSArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0xleGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xleGVyLmpzCShyZXZpc2lvbiAyMjIwMjEpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBA
IGNsYXNzIExleGVyIHsKICAgICAgICAgaWYgKC9eKFswLTldKlwuWzAtOV0rKXwoWzAtOV0rXC5b
MC05XSopLy50ZXN0KHJlbGV2YW50VGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0KCJk
b3VibGVMaXRlcmFsIik7CiAgICAgICAgIAotICAgICAgICBpZiAoL14tPnw+PXw8PXw9PXwhPXxc
Kz18LT18XCo9fFwvPXwlPXxePXxcfD18Jj18KFt7fSgpXFtcXT86PSsqXC8sLiUhfl4mfDw+QDst
XSkvLnRlc3QocmVsZXZhbnRUZXh0KSkKKyAgICAgICAgaWYgKC9eLT58Pj18PD18PT18IT18XCs9
fC09fFwqPXxcLz18JT18Xj18XHw9fCY9fFwrXCt8LS18KFt7fSgpXFtcXT86PSsqXC8sLiUhfl4m
fDw+QDstXSkvLnRlc3QocmVsZXZhbnRUZXh0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQo
InB1bmN0dWF0aW9uIik7CiAgICAgICAgIAogICAgICAgICBsZXQgcmVtYWluaW5nID0gcmVsZXZh
bnRUZXh0LnN1YnN0cmluZygwLCAyMCkuc3BsaXQoL1xzLylbMF07CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCShyZXZpc2lvbiAyMjIwMjEp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJKHdvcmtp
bmcgY29weSkKQEAgLTIwMiwxMiArMjAyLDE1IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRz
IFZpc2l0b3IgewogICAgIHsKICAgICAgICAgdGhpcy5fcmVzb2x2ZVR5cGVBcmd1bWVudHMobm9k
ZS50eXBlQXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIGxldCB0eXBlID0gdGhpcy5fbmFt
ZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7Ci0gICAgICAgIGlmICghdHlwZSkKLSAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNv
dWxkIG5vdCBmaW5kIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Ci0gICAgICAgIGlmICghdGhp
cy5fbmFtZUNvbnRleHQuaXNEZWZpbmVkKHR5cGUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBmb3J3YXJkIHVzZSBv
ZiB0eXBlIG5hbWVkICIgKyBub2RlLm5hbWUpOwotICAgICAgICBub2RlLnR5cGUgPSB0eXBlOwor
ICAgICAgICBsZXQgdHlwZSA9IG5vZGUudHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKSB7CisgICAg
ICAgICAgICB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7Cisg
ICAgICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAi
ICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fbmFtZUNvbnRleHQuaXNEZWZp
bmVkKHR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlwZSBuYW1lZCAiICsg
bm9kZS5uYW1lKTsKKyAgICAgICAgICAgIG5vZGUudHlwZSA9IHR5cGU7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICh0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBub2RlLnR5
cGVBcmd1bWVudHMubGVuZ3RoKQogICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIChw
YXNzZWQgIiArIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGggKyAiLCBleHBlY3RlZCAiICsgdHlw
ZS50eXBlUGFyYW1ldGVycy5sZW5ndGggKyAiKSIpOwpAQCAtMjQxLDYgKzI0NCw4IEBAIGNsYXNz
IE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIHZpc2l0VmFyaWFibGVS
ZWYobm9kZSkKICAgICB7CisgICAgICAgIGlmIChub2RlLnZhcmlhYmxlKQorICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFZhbHVl
LCBub2RlLm5hbWUpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNvdWxkIG5vdCBmaW5kIHZh
cmlhYmxlIG5hbWVkICIgKyBub2RlLm5hbWUpOwpAQCAtMjYzLDcgKzI2OCw3IEBAIGNsYXNzIE5h
bWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IGxldCB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7CiAgICAg
ICAgICAgICBpZiAoIXR5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgYW55IGZ1bmN0aW9uIG9yIHR5
cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGZpbmQgYW55IGZ1bmN0aW9u
IG9yIHR5cGUgbmFtZWQgXCIiICsgbm9kZS5uYW1lICsgIlwiIik7CiAgICAgICAgICAgICBub2Rl
LmJlY29tZUNhc3QodHlwZSk7CiAgICAgICAgICAgICBub2RlLnBvc3NpYmxlT3ZlcmxvYWRzID0g
dGhpcy5fbmFtZUNvbnRleHQuZ2V0KEZ1bmMsICJvcGVyYXRvciBjYXN0Iik7CiAgICAgICAgICAg
ICBpZiAoIW5vZGUucG9zc2libGVPdmVybG9hZHMpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNpb24gMjIyMDIxKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyOCwxNiArMzI4LDUxIEBA
IGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgcmV0dXJu
IG5ldyBDYWxsRXhwcmVzc2lvbihuYW1lLCBuYW1lLnRleHQsIHR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50TGlzdCk7CiAgICAgfQogICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVTdWZmaXgo
KQorICAgIGZ1bmN0aW9uIGlzQ2FsbEV4cHJlc3Npb24oKQogICAgIHsKLSAgICAgICAgLy8gRmly
c3QgY2hlY2sgaWYgdGhpcyBpcyBhIGNhbGwgZXhwcmVzc2lvbi4KLSAgICAgICAgbGV0IGlzQ2Fs
bEV4cHJlc3Npb24gPSBsZXhlci50ZXN0U2NvcGUoKCkgPT4geworICAgICAgICByZXR1cm4gbGV4
ZXIudGVzdFNjb3BlKCgpID0+IHsKICAgICAgICAgICAgIGNvbnN1bWVLaW5kKCJpZGVudGlmaWVy
Iik7CiAgICAgICAgICAgICBwYXJzZVR5cGVBcmd1bWVudHMoKTsKICAgICAgICAgICAgIGNvbnN1
bWUoIigiKTsKICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGRvSW5jcmVt
ZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKQorICAgIHsKKyAgICAgICAgbGV0IGFyZ3MgPSBbbmV3
IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tlbiwgVmFyaWFibGVSZWYud3JhcChwdHIpKV07Cisg
ICAgICAgIGlmIChleHRyYUFyZykKKyAgICAgICAgICAgIGFyZ3MucHVzaChleHRyYUFyZyk7Cisg
ICAgICAgIAorICAgICAgICBsZXQgbmFtZSA9ICJvcGVyYXRvciIgKyB0b2tlbi50ZXh0OworICAg
ICAgICBpZiAoLz0kLy50ZXN0KG5hbWUpKQorICAgICAgICAgICAgbmFtZSA9IFJlZ0V4cC5sZWZ0
Q29udGV4dDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBuZXcgQXNzaWdubWVudCgKKyAgICAg
ICAgICAgIHRva2VuLAorICAgICAgICAgICAgbmV3IERlcmVmZXJlbmNlRXhwcmVzc2lvbih0b2tl
biwgVmFyaWFibGVSZWYud3JhcChwdHIpKSwKKyAgICAgICAgICAgIG5ldyBDYWxsRXhwcmVzc2lv
bih0b2tlbiwgbmFtZSwgW10sIGFyZ3MpKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gZmlu
aXNoUGFyc2luZ1Bvc3RJbmNyZW1lbnQodG9rZW4sIGxlZnQpCisgICAgeworICAgICAgICBsZXQg
cHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOworICAgICAgICBwdHIuYXJndW1lbnQgPSBu
ZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOwogICAgICAgICAKLSAgICAgICAgaWYg
KGlzQ2FsbEV4cHJlc3Npb24pCisgICAgICAgIGxldCBvbGRWYWx1ZSA9IG5ldyBMZXRFeHByZXNz
aW9uKHRva2VuKTsKKyAgICAgICAgb2xkVmFsdWUuYXJndW1lbnQgPSBuZXcgRGVyZWZlcmVuY2VF
eHByZXNzaW9uKHRva2VuLCBWYXJpYWJsZVJlZi53cmFwKHB0cikpOworICAgICAgICAKKyAgICAg
ICAgcHRyLmJvZHkgPSBvbGRWYWx1ZTsKKyAgICAgICAgCisgICAgICAgIG9sZFZhbHVlLmJvZHkg
PSBuZXcgQ29tbWFFeHByZXNzaW9uKHRva2VuLCBbCisgICAgICAgICAgICBkb0luY3JlbWVudCh0
b2tlbiwgcHRyKSwKKyAgICAgICAgICAgIFZhcmlhYmxlUmVmLndyYXAob2xkVmFsdWUpCisgICAg
ICAgIF0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBw
YXJzZVBvc3NpYmxlU3VmZml4KCkKKyAgICB7CisgICAgICAgIGlmIChpc0NhbGxFeHByZXNzaW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gcGFyc2VDYWxsRXhwcmVzc2lvbigpOwogICAgICAgICAK
ICAgICAgICAgbGV0IGxlZnQgPSBwYXJzZVRlcm0oKTsKQEAgLTM0Niw3ICszODEsNyBAQCBmdW5j
dGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgICAgICBzd2l0Y2gg
KHRva2VuLnRleHQpIHsKICAgICAgICAgICAgIGNhc2UgIisrIjoKICAgICAgICAgICAgIGNhc2Ug
Ii0tIjoKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbmV3IFN1ZmZpeENhbGxBc3NpZ25tZW50KHRv
a2VuLCAib3BlcmF0b3IiICsgdG9rZW4udGV4dCwgbGVmdCk7CisgICAgICAgICAgICAgICAgbGVm
dCA9IGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRva2VuLCBsZWZ0KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIi4iOgogICAgICAgICAgICAgY2FzZSAiLT4i
OgpAQCAtMzY5LDExICs0MDQsMzEgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CiAgICAgCisgICAgZnVuY3Rpb24g
ZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCh0b2tlbiwgbGVmdCwgZXh0cmFBcmcpCisgICAgewor
ICAgICAgICBsZXQgcHRyID0gbmV3IExldEV4cHJlc3Npb24odG9rZW4pOworICAgICAgICBwdHIu
YXJndW1lbnQgPSBuZXcgTWFrZVB0ckV4cHJlc3Npb24odG9rZW4sIGxlZnQpOworICAgICAgICBw
dHIuYm9keSA9IG5ldyBDb21tYUV4cHJlc3Npb24odG9rZW4sIFsKKyAgICAgICAgICAgIGRvSW5j
cmVtZW50KHRva2VuLCBwdHIsIGV4dHJhQXJnKSwKKyAgICAgICAgICAgIG5ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24odG9rZW4sIFZhcmlhYmxlUmVmLndyYXAocHRyKSkKKyAgICAgICAgXSk7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHBhcnNlUHJlSW5j
cmVtZW50KCkKKyAgICB7CisgICAgICAgIGxldCB0b2tlbiA9IGNvbnN1bWUoIisrIiwgIi0tIik7
CisgICAgICAgIGxldCBsZWZ0ID0gcGFyc2VQb3NzaWJsZVByZWZpeCgpOworICAgICAgICByZXR1
cm4gZmluaXNoUGFyc2luZ1ByZUluY3JlbWVudCh0b2tlbiwgbGVmdCk7CisgICAgfQorICAgIAog
ICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVQcmVmaXgoKQogICAgIHsKICAgICAgICAgbGV0IHRv
a2VuOwotICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lKCIrKyIsICItLSIsICIrIiwgIi0i
LCAifiIpKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsQXNzaWdubWVudCh0b2tlbiwgIm9w
ZXJhdG9yIiArIHRva2VuLnRleHQsIHBhcnNlUG9zc2libGVQcmVmaXgoKSk7CisgICAgICAgIGlm
ICh0ZXN0KCIrKyIsICItLSIpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlUHJlSW5jcmVtZW50
KCk7CisgICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoIisiLCAiLSIsICJ+IikpCisgICAg
ICAgICAgICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uKHRva2VuLCAib3BlcmF0b3IiICsgdG9r
ZW4udGV4dCwgW10sIFtwYXJzZVBvc3NpYmxlUHJlZml4KCldKTsKICAgICAgICAgaWYgKHRva2Vu
ID0gdHJ5Q29uc3VtZSgiXiIpKQogICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXJlZmVyZW5jZUV4
cHJlc3Npb24odG9rZW4sIHBhcnNlUG9zc2libGVQcmVmaXgoKSk7CiAgICAgICAgIGlmICh0b2tl
biA9IHRyeUNvbnN1bWUoIiYiKSkKQEAgLTQ3MSw4ICs1MjYsNyBAQCBmdW5jdGlvbiBwYXJzZShw
cm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIH0KICAgICAgICAgaWYgKG9wZXJhdG9y
LnRleHQgPT0gIj0iKQogICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50KG9wZXJhdG9y
LCBsaHMsIHBhcnNlUG9zc2libGVBc3NpZ25tZW50KCkpOwotICAgICAgICBsZXQgbmFtZSA9ICJv
cGVyYXRvciIgKyBvcGVyYXRvci50ZXh0LnN1YnN0cmluZygwLCBvcGVyYXRvci50ZXh0Lmxlbmd0
aCAtIDEpOwotICAgICAgICByZXR1cm4gbmV3IENhbGxBc3NpZ25tZW50KG9wZXJhdG9yLCBuYW1l
LCBsaHMsIHBhcnNlUG9zc2libGVBc3NpZ25tZW50KCkpOworICAgICAgICByZXR1cm4gZmluaXNo
UGFyc2luZ1ByZUluY3JlbWVudChvcGVyYXRvciwgbGhzLCBwYXJzZVBvc3NpYmxlQXNzaWdubWVu
dCgpKTsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50KCkKQEAgLTQ4
MCwxMiArNTM0LDI0IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kK
ICAgICAgICAgcmV0dXJuIHBhcnNlUG9zc2libGVBc3NpZ25tZW50KCJyZXF1aXJlZCIpOwogICAg
IH0KICAgICAKKyAgICBmdW5jdGlvbiBwYXJzZVBvc3RJbmNyZW1lbnQoKQorICAgIHsKKyAgICAg
ICAgbGV0IGxlZnQgPSBwYXJzZVRlcm0oKTsKKyAgICAgICAgbGV0IHRva2VuID0gY29uc3VtZSgi
KysiLCAiLS0iKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaFBhcnNpbmdQb3N0SW5jcmVtZW50KHRv
a2VuLCBsZWZ0KTsKKyAgICB9CisgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VFZmZlY3RmdWxFeHBy
ZXNzaW9uKCkKICAgICB7Ci0gICAgICAgIGxldCBhc3NpZ25tZW50ID0gbGV4ZXIuYmFja3RyYWNr
aW5nU2NvcGUocGFyc2VBc3NpZ25tZW50KTsKLSAgICAgICAgaWYgKGFzc2lnbm1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gYXNzaWdubWVudDsKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEV4cHJl
c3Npb24oKTsKKyAgICAgICAgaWYgKGlzQ2FsbEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZUNhbGxFeHByZXNzaW9uKCk7CisgICAgICAgIGxldCBwcmVJbmNyZW1lbnQgPSBs
ZXhlci5iYWNrdHJhY2tpbmdTY29wZShwYXJzZVByZUluY3JlbWVudCk7CisgICAgICAgIGlmIChw
cmVJbmNyZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gcHJlSW5jcmVtZW50OworICAgICAgICBs
ZXQgcG9zdEluY3JlbWVudCA9IGxleGVyLmJhY2t0cmFja2luZ1Njb3BlKHBhcnNlUG9zdEluY3Jl
bWVudCk7CisgICAgICAgIGlmIChwb3N0SW5jcmVtZW50KQorICAgICAgICAgICAgcmV0dXJuIHBv
c3RJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICB9CiAg
ICAgCiAgICAgZnVuY3Rpb24gZ2VuZXJpY1BhcnNlQ29tbWFFeHByZXNzaW9uKGZpbmFsRXhwcmVz
c2lvblBhcnNlcikKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzCShyZXZpc2lvbiAyMjIwMjEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSw3IEBAIGNsYXNzIFJld3Jp
dGVyIGV4dGVuZHMgVmlzaXRvckJhc2UgewogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBGdW5j
dGlvbkxpa2VCbG9jaygKICAgICAgICAgICAgIG5vZGUub3JpZ2luLAorICAgICAgICAgICAgbm9k
ZS5yZXR1cm5UeXBlID8gbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRoaXMpIDogbnVsbCwKICAgICAg
ICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBhcmd1bWVudC52aXNpdCh0
aGlzKSksCiAgICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJh
bWV0ZXIudmlzaXQodGhpcykpLAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsK
QEAgLTMxNCw1ICszMTUsMTcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7
CiAgICAgICAgICAgICBub2RlLmluY3JlbWVudCA/IG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMp
IDogdW5kZWZpbmVkLAogICAgICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKICAgICB9
CisgICAgCisgICAgdmlzaXRMZXRFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQg
cmVzdWx0ID0gbmV3IExldEV4cHJlc3Npb24obm9kZS5vcmlnaW4pOworICAgICAgICByZXN1bHQu
aW5kZXggPSBub2RlLmluZGV4OworICAgICAgICByZXN1bHQudHlwZSA9IG5vZGUudHlwZSA/IG5v
ZGUudHlwZS52aXNpdCh0aGlzKSA6IG51bGw7CisgICAgICAgIHJlc3VsdC5hcmd1bWVudCA9IG5v
ZGUuYXJndW1lbnQudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMuX21hcE5vZGUobm9kZSwgcmVz
dWx0KTsKKyAgICAgICAgcmVzdWx0LmJvZHkgPSBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAg
ICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJy
YXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5k
YXJkTGlicmFyeS5qcwkocmV2aXNpb24gMjIyMDIxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Mywx
MCBAQCBuYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgZG91YmxlOwogCiBuYXRpdmUgaW50IG9wZXJh
dG9yKyhpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7CitpbnQg
b3BlcmF0b3IrKyhpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgMTsgfQordWludCBvcGVyYXRv
cisrKHVpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgMTsgfQoraW50IG9wZXJhdG9yLS0oaW50
IHZhbHVlKSB7IHJldHVybiB2YWx1ZSAtIDE7IH0KK3VpbnQgb3BlcmF0b3ItLSh1aW50IHZhbHVl
KSB7IHJldHVybiB2YWx1ZSAtIDE7IH0KIG5hdGl2ZSBpbnQgb3BlcmF0b3ItKGludCwgaW50KTsK
IG5hdGl2ZSB1aW50IG9wZXJhdG9yLSh1aW50LCB1aW50KTsKIG5hdGl2ZSBpbnQgb3BlcmF0b3Iq
KGludCwgaW50KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJ
KHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogPHNjcmlwdCBzcmM9IkludExp
dGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkludExpdGVyYWxUeXBlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJMZXRFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMZXhlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iTGV4ZXJUb2tlbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iTGl0ZXJhbFR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIyMDI5KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjA1OSw2ICsyMDU5LDE5
MCBAQCBmdW5jdGlvbiBURVNUX3Byb3RvY29sRXh0ZW5kc1R3bygpCiAgICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0aGluZ3kiLCBbXSwgW21ha2VJbnQocHJvZ3Jh
bSwgNjQyKV0pLCA2NDIgKyA3NDMgKyA5MSArIDM5KTsKIH0KIAorZnVuY3Rpb24gVEVTVF9wcmVm
aXhQbHVzUGx1cygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQg
Zm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICArK3g7CisgICAgICAgICAgICByZXR1
cm4geDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY0KV0pLCA2NSk7Cit9
CisKK2Z1bmN0aW9uIFRFU1RfcHJlZml4UGx1c1BsdXNSZXN1bHQoKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICsreDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY0
KV0pLCA2NSk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcG9zdGZpeFBsdXNQbHVzKCkKK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisgICAg
YCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW21ha2VJbnQocHJvZ3JhbSwgNjQpXSksIDY1KTsKK30KKworZnVuY3Rpb24gVEVTVF9wb3N0
Zml4UGx1c1BsdXNSZXN1bHQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAg
ICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHgrKzsKKyAg
ICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY0KV0pLCA2NCk7Cit9CisKK2Z1bmN0
aW9uIFRFU1RfcHJlZml4TWludXNNaW51cygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICAtLXg7Cisg
ICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0s
IDY0KV0pLCA2Myk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcHJlZml4TWludXNNaW51c1Jlc3VsdCgp
Cit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKGludCB4KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLS14OworICAgICAgICB9CisgICAgYCk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VJbnQocHJvZ3JhbSwgNjQpXSksIDYzKTsKK30KKworZnVuY3Rpb24gVEVTVF9wb3N0Zml4TWlu
dXNNaW51cygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9v
KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICB4LS07CisgICAgICAgICAgICByZXR1cm4g
eDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY0KV0pLCA2Myk7Cit9CisK
K2Z1bmN0aW9uIFRFU1RfcG9zdGZpeE1pbnVzTWludXNSZXN1bHQoKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHgtLTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY0
KV0pLCA2NCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcGx1c0VxdWFscygpCit7CisgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICB4ICs9IDQyOworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBg
KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtd
LCBbbWFrZUludChwcm9ncmFtLCAzODUpXSksIDM4NSArIDQyKTsKK30KKworZnVuY3Rpb24gVEVT
VF9wbHVzRXF1YWxzUmVzdWx0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAg
ICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB4ICs9IDQy
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMzg1KV0pLCAzODUgKyA0Mik7
Cit9CisKK2Z1bmN0aW9uIFRFU1RfbWludXNFcXVhbHMoKQoreworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAg
eCAtPSA0MjsKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICB9CisgICAgYCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJ
bnQocHJvZ3JhbSwgMzg1KV0pLCAzODUgLSA0Mik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfbWludXNF
cXVhbHNSZXN1bHQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50
IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggLT0gNDI7CisgICAg
ICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAzODUpXSksIDM4NSAtIDQyKTsKK30KKwor
ZnVuY3Rpb24gVEVTVF90aW1lc0VxdWFscygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICB4ICo9IDQy
OworICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9n
cmFtLCAzODUpXSksIDM4NSAqIDQyKTsKK30KKworZnVuY3Rpb24gVEVTVF90aW1lc0VxdWFsc1Jl
c3VsdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKGlu
dCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geCAqPSA0MjsKKyAgICAgICAgfQor
ICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW10sIFttYWtlSW50KHByb2dyYW0sIDM4NSldKSwgMzg1ICogNDIpOworfQorCitmdW5jdGlv
biBURVNUX2RpdmlkZUVxdWFscygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICB4IC89IDQyOworICAg
ICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAz
ODUpXSksICgzODUgLyA0MikgfCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF9kaXZpZGVFcXVhbHNS
ZXN1bHQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyhp
bnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggLz0gNDI7CisgICAgICAgIH0K
KyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAzODUpXSksICgzODUgLyA0MikgfCAwKTsKK30KKwog
bGV0IGZpbHRlciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKIGlmICh0aGlz
WyJhcmd1bWVudHMiXSkgewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0
aDsgaSsrKSB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJ
KHJldmlzaW9uIDIyMjAyMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0
b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw4ICsyMDYsNiBAQCBjbGFzcyBWaXNpdG9yIGV4
dGVuZHMgVmlzaXRvckJhc2UgewogICAgIAogICAgIHZpc2l0VmFyaWFibGVSZWYobm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLnZhcmlhYmxlKQotICAgICAgICAgICAgbm9kZS52YXJpYWJs
ZS52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRJZlN0YXRlbWVudChub2RlKQpA
QCAtMzA4LDExICszMDYsMTkgQEAgY2xhc3MgVmlzaXRvciBleHRlbmRzIFZpc2l0b3JCYXNlIHsK
ICAgICAKICAgICB2aXNpdEZ1bmN0aW9uTGlrZUJsb2NrKG5vZGUpCiAgICAgeworICAgICAgICBp
ZiAobm9kZS5yZXR1cm5UeXBlKQorICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBlLnZpc2l0KHRo
aXMpOwogICAgICAgICBmb3IgKGxldCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50TGlzdCkKICAg
ICAgICAgICAgIGFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCBwYXJhbWV0
ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKQogICAgICAgICAgICAgcGFyYW1ldGVyLnZpc2l0KHRoaXMp
OwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgfQorICAgIAorICAgIHZpc2l0
TGV0RXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5hcmd1bWVudC52aXNpdCh0
aGlzKTsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgIH0KIH0KIAo=
</data>
<flag name="review"
          id="340936"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>