<?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>187728</bug_id>
          
          <creation_ts>2018-07-17 09:51:59 -0700</creation_ts>
          <short_desc>Minor changes to the WHLSL interpreter to support the new compiler</short_desc>
          <delta_ts>2018-07-24 16:09:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>187735</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thomas Denney">tdenney</reporter>
          <assigned_to name="Thomas Denney">tdenney</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1442689</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-07-17 09:51:59 -0700</bug_when>
    <thetext>Minor changes to the WHLSL interpreter to support the new compiler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442698</commentid>
    <comment_count>1</comment_count>
      <attachid>345161</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-07-17 10:03:33 -0700</bug_when>
    <thetext>Created attachment 345161
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443659</commentid>
    <comment_count>2</comment_count>
      <attachid>345161</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-07-19 19:37:53 -0700</bug_when>
    <thetext>Comment on attachment 345161
Patch

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

Your SwizzleOp stuff could have been its own patch.

&gt; Tools/WebGPUShadingLanguageRI/FuncInstantiator.js:34
&gt; +    get instances() { return this._instances; }

Usually we don&apos;t make changes that are totally unused anywhere else in the patch. It&apos;s fine - just a note for the future.

&gt; Tools/WebGPUShadingLanguageRI/FunctionLikeBlock.js:32
&gt; +        this._func = func;

Is this right? I thought the function would not have its generic types be instantiated, but the FunctionLikeBlock would.

&gt; Tools/WebGPUShadingLanguageRI/Intrinsics.js:665
&gt; +                    for (let i = 0; i &lt; swizzle.outSize; i++)
&gt; +                        outputBuffer.set(i, vec.get(readIndices[swizzle.components[i]]));

Cool trick.

&gt; Tools/WebGPUShadingLanguageRI/Lexer.js:106
&gt; +                this._index += endIndex + 2;

Is there a test for this?

&gt; Tools/WebGPUShadingLanguageRI/MakeArrayRefExpression.js:34
&gt; +        if (!type) {
&gt; +            if (this.lValue.variable &amp;&amp; this.lValue.variable.type &amp;&amp; this.lValue.variable.type.isArray &amp;&amp; this.lValue.variable.type.elementType) {

You can join the if statements with &amp;&amp;.

This is very confusing because this argument is never used, so I have no idea whether or not this line is right. The ChangeLog helps, but in the future, please join all related changes in a single patch.

&gt; Tools/WebGPUShadingLanguageRI/NativeFunc.js:41
&gt; +    get implementationData() { return this._implementationData; }
&gt; +    set implementationData(newImplData) { this._implementationData = newImplData; }

Isn&apos;t there a better name for this?
Also, I would sleep better at night if the constructor set it to undefined or null or something, just so it&apos;s easier to see all the members the class contains in a single place.

&gt; Tools/WebGPUShadingLanguageRI/Rewriter.js:355
&gt; +            Node.visit(node.func, this),
&gt; +            node.argumentList.map(arg =&gt; Node.visit(arg, this))

It looks like the only difference between node.func.visit() and Node.visit(node.func) is that Node.visit() handles the case where the argument is null. When would that ever occur here? Shouldn&apos;t func always be non-null?

&gt; Tools/WebGPUShadingLanguageRI/StandardLibrary.js:409
&gt; +class SwizzleOp {

It&apos;s pretty weird for the standard library to include objects. I think you should move this out into another file (either another existing file if there is a good candidate, or a new file).

&gt; Tools/WebGPUShadingLanguageRI/StandardLibrary.js:423
&gt; +        return `native vec${this.outSize}&lt;T&gt; operator.${this.components.join(&quot;&quot;)}&lt;T&gt;(vec${this.inSize}&lt;T&gt; v)`;

Consider adding a performance test, because compiling the standard library is something we want to track.

&gt; Tools/WebGPUShadingLanguageRI/StandardLibrary.js:427
&gt; +// There are 481 swizzle operators. Let&apos;s not list them explicitly.

s/list them/compile them all/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443870</commentid>
    <comment_count>3</comment_count>
      <attachid>345161</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-07-20 12:02:20 -0700</bug_when>
    <thetext>Comment on attachment 345161
Patch

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

&gt;&gt; Tools/WebGPUShadingLanguageRI/FunctionLikeBlock.js:32
&gt;&gt; +        this._func = func;
&gt; 
&gt; Is this right? I thought the function would not have its generic types be instantiated, but the FunctionLikeBlock would.

FunctionLikeBlocks are only constructed with functions that have been instantiated.

&gt;&gt; Tools/WebGPUShadingLanguageRI/NativeFunc.js:41
&gt;&gt; +    set implementationData(newImplData) { this._implementationData = newImplData; }
&gt; 
&gt; Isn&apos;t there a better name for this?
&gt; Also, I would sleep better at night if the constructor set it to undefined or null or something, just so it&apos;s easier to see all the members the class contains in a single place.

implementationData is used in a few other places in the interpreter for this kind of thing (e.g. struct accessors) so I&apos;m aiming to be consistent with them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443877</commentid>
    <comment_count>4</comment_count>
      <attachid>345472</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-07-20 12:16:13 -0700</bug_when>
    <thetext>Created attachment 345472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444848</commentid>
    <comment_count>5</comment_count>
      <attachid>345472</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-24 14:57:23 -0700</bug_when>
    <thetext>Comment on attachment 345472
Patch

Rejecting attachment 345472 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 345472, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Tools/ChangeLog contains OOPS!.

Full output: https://webkit-queues.webkit.org/results/8642541</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444859</commentid>
    <comment_count>6</comment_count>
      <attachid>345719</attachid>
    <who name="Thomas Denney">tdenney</who>
    <bug_when>2018-07-24 15:28:32 -0700</bug_when>
    <thetext>Created attachment 345719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444868</commentid>
    <comment_count>7</comment_count>
      <attachid>345719</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-24 16:08:33 -0700</bug_when>
    <thetext>Comment on attachment 345719
Patch

Clearing flags on attachment: 345719

Committed r234175: &lt;https://trac.webkit.org/changeset/234175&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444869</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-24 16:08:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444870</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-24 16:09:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/42560713&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345161</attachid>
            <date>2018-07-17 10:03:33 -0700</date>
            <delta_ts>2018-07-20 12:16:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187728-20180717100332.patch</filename>
            <type>text/plain</type>
            <size>16213</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzMzg4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDcwIEBACisyMDE4LTA3LTE3ICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+
CisKKyAgICAgICAgTWlub3IgY2hhbmdlcyB0byB0aGUgV0hMU0wgaW50ZXJwcmV0ZXIgdG8gc3Vw
cG9ydCB0aGUgbmV3IGNvbXBpbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGJ1ZyBjb250YWlucyBzbWFsbCBjaGFuZ2VzIHRoYXQgYXJlIG1h
a2UgbWlub3IgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgYmVoYXZpb3VyIG9mIHRoZSBleGlzdGlu
ZyBpbnRlcnByZXRlciAodGhlIHRlc3RzIGFyZSB1bmFmZmVjdGVkIGFuZCBhbGwKKyAgICAgICAg
c3RpbGwgcGFzcykuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtVHlw
ZS5qczoKKyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5nZXQgaXNFbnVtKTogUHJvcGVydHkg
YWRkZWQgdG8gRW51bVR5cGUgYW5kIFR5cGUKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FdmFsdWF0b3IuanM6IENvcnJlY3QgdHlwbworICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0Z1bmMuanM6CisgICAgICAgIChGdW5jLnByb3RvdHlwZS5nZXQgaXNFbnRyeVBv
aW50KTogQWRkIGJvb2xlYW4gcHJvcGVydHkKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzOgorICAgICAgICAoRnVuY0luc3RhbnRpYXRvci5wcm90
b3R5cGUuZ2V0IGluc3RhbmNlcyk6IFB1YmxpYyBhY2Nlc3NvciBmb3IgZXhpc3RpbmcKKyAgICAg
ICAgcHJpdmF0ZSBmaWVsZAorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0
aW9uTGlrZUJsb2NrLmpzOiBSZWZhY3RvcmVkIHRoZSBjbGFzcyBzbworICAgICAgICB0aGF0IGl0
IGRpcmVjdGx5IHdyYXBzIGEgRnVuYyBpbnN0YW5jZSAodGhlcmVmb3JlIHRoZSBvbmx5IGludGVy
ZmFjZQorICAgICAgICBjaGFuZ2UgaXMgdG8gdGhlIGNvbnN0cnVjdG9yIGFuZCB0aGUgYWRkaXRp
b24gb2YgdGhlIGZ1bmMgYWNjZXNzb3IpLgorICAgICAgICBUaGlzIGNoYW5nZSBhbGxvd3MgdGhl
IGRlLWlubGluaW5nIG9mIGZ1bmN0aW9ucy4KKyAgICAgICAgKEZ1bmN0aW9uTGlrZUJsb2NrKToK
KyAgICAgICAgKEZ1bmN0aW9uTGlrZUJsb2NrLnByb3RvdHlwZS5nZXQgZnVuYyk6CisgICAgICAg
IChGdW5jdGlvbkxpa2VCbG9jay5wcm90b3R5cGUuZ2V0IHJldHVyblR5cGUpOgorICAgICAgICAo
RnVuY3Rpb25MaWtlQmxvY2sucHJvdG90eXBlLmdldCBwYXJhbWV0ZXJzKToKKyAgICAgICAgKEZ1
bmN0aW9uTGlrZUJsb2NrLnByb3RvdHlwZS5nZXQgYm9keSk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qczogVXNlIHRoZSBuZXcgRnVuY3Rpb25MaWtlQmxvY2sK
KyAgICAgICAgY29uc3RydWN0b3IKKyAgICAgICAgKElubGluZXIucHJvdG90eXBlLnZpc2l0Q2Fs
bEV4cHJlc3Npb24pOgorICAgICAgICAoSW5saW5lcik6CisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvSW50cmluc2ljcy5qczogTWlncmF0ZSB0aGUgc3dpenpsZSBvcGVyYXRvcnMK
KyAgICAgICAgdG8gbmF0aXZlIGZ1bmN0aW9ucyAod2l0aCBhZGRpdGlvbmFsIHN1cHBvcnQgaW4g
U3RhbmRhcmRMaWJyYXJ5LmpzKS4KKyAgICAgICAgVGhpcyByZWR1Y2VzIGZpcnN0LXRpbWUgY29t
cGlsZS10aW1lIGZyb20gYXJvdW5kIDRzIHRvIGFyb3VuZCAwLjFzLgorICAgICAgICAoSW50cmlu
c2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanM6IEVuc3Vy
ZSB0aGF0IHRoZSBwYXJzaW5nIG9mIG11bHRpbGluZQorICAgICAgICBjb21tZW50cyBjb21wbGV0
ZXMgY29ycmVjdGx5CisgICAgICAgIChMZXhlci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChM
ZXhlcik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhw
cmVzc2lvbi5qczogQWRkaXRpb24gb2YgdHlwZQorICAgICAgICBwcm9wZXJ0eSwgd2hpY2ggaXMg
YmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGxWYWx1ZSBhbmQgdGhlIHNlbWFudGljcyBvZgorICAg
ICAgICB0aGUgbGFuZ3VhZ2UgKHRoZSBAIG9wZXJhdG9yIHlpZWxkcyBhbiBhcnJheSByZWZlcmVu
Y2Ugd2l0aCB0aGUgdGhyZWFkCisgICAgICAgIHNjb3BlKS4KKyAgICAgICAgKE1ha2VBcnJheVJl
ZkV4cHJlc3Npb24pOgorICAgICAgICAoTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5wcm90b3R5cGUu
Z2V0IHR5cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMu
anM6IEFkZCBzZXR0ZXIvZ2V0dGVyIGZvcgorICAgICAgICBpbXBsZW1lbnRhdGlvbkRhdGEgdG8g
c3VwcG9ydCBzd2l6emxlIG9wZXJhdG9yIGNoYW5nZQorICAgICAgICAoTmF0aXZlRnVuYy5wcm90
b3R5cGUuZ2V0IGltcGxlbWVudGF0aW9uRGF0YSk6CisgICAgICAgIChOYXRpdmVGdW5jLnByb3Rv
dHlwZS5zZXQgaW1wbGVtZW50YXRpb25EYXRhKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9SZXdyaXRlci5qczogVXNlIG5ldyBGdW5jdGlvbkxpa2VCbG9jaworICAgICAgICBj
b25zdHJ1Y3RvcgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RnVuY3Rpb25MaWtl
QmxvY2spOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFy
eS5qczogSW50cm9kdWNlcyBhIG5ldyBjbGFzcyBmb3IKKyAgICAgICAgY2FycnlpbmcgbWV0YWRh
dGEgYWJvdXQgc3dpenpsZSBvcGVyYXRvcnMgc28gdGhhdCB0aGV5IGFyZSBpbXBsZW1lbnRlZAor
ICAgICAgICBhcyBuYXRpdmUgZnVuY3Rpb25zIHJhdGhlciB0aGFuIGdlbmVyYXRlZCBhdCBjb21w
aWxlIHRpbWUuCisgICAgICAgIChTd2l6emxlT3ApOgorICAgICAgICAoU3dpenpsZU9wLnByb3Rv
dHlwZS5nZXQgb3V0U2l6ZSk6CisgICAgICAgIChTd2l6emxlT3AucHJvdG90eXBlLmdldCBjb21w
b25lbnRzKToKKyAgICAgICAgKFN3aXp6bGVPcC5wcm90b3R5cGUuZ2V0IGluU2l6ZSk6CisgICAg
ICAgIChTd2l6emxlT3AucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKGdlbmVyYXRlU3dp
enpsZXMpOgorICAgICAgICAoX2dlbmVyYXRlU3dpenpsZSk6IERlbGV0ZWQuCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qczogQWRkaXRpb24gb2YgaXNFbnVtIHByb3Bl
cnR5LCBhcworICAgICAgICBhYm92ZS4KKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc0Vu
dW0pOgorCiAyMDE4LTA3LTE2ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggQVBJIFRlc3QgZmFpbHVyZXMgaW50cm9kdWNlZCBieSByMjMzODY1CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtVHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtVHlwZS5qcwkocmV2aXNpb24gMjMz
NzcyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgRW51bVR5cGUgZXh0ZW5kcyBUeXBlIHsK
ICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CiAgICAgZ2V0IG5hbWUo
KSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CiAgICAgZ2V0IGJhc2VUeXBlKCkgeyByZXR1cm4gdGhp
cy5fYmFzZVR5cGU7IH0KKyAgICBnZXQgaXNFbnVtKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAog
ICAgIGdldCBtZW1iZXJOYW1lcygpIHsgcmV0dXJuIHRoaXMuX21lbWJlcnMua2V5cygpOyB9CiAg
ICAgbWVtYmVyQnlOYW1lKG5hbWUpIHsgcmV0dXJuIHRoaXMuX21lbWJlcnMuZ2V0KG5hbWUpOyB9
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCShyZXZp
c2lvbiAyMzM3NzIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgfQogICAgIAogICAgIC8vIFlvdSBtdXN0IHNuYXBzaG90IGlmIHlv
dSB1c2UgYSB2YWx1ZSBpbiBydmFsdWUgY29udGV4dC4gRm9yIGV4YW1wbGUsIGEgY2FsbCBleHBy
ZXNzaW9uIHdpbGwKLSAgICAvLyBzbmFwc2hvdCBhbGwgb2YgaXRzIGFyZ3VtZW50cyBpbW1lZGFp
dGVseSB1cG9uIGV4ZWN1dGluZyB0aGVtLiBJbiBnZW5lcmFsLCBpdCBzaG91bGQgbm90IGJlCisg
ICAgLy8gc25hcHNob3QgYWxsIG9mIGl0cyBhcmd1bWVudHMgaW1tZWRpYXRlbHkgdXBvbiBleGVj
dXRpbmcgdGhlbS4gSW4gZ2VuZXJhbCwgaXQgc2hvdWxkIG5vdCBiZQogICAgIC8vIHBvc3NpYmxl
IGZvciBhIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBhIHZpc2l0IG1ldGhvZCBpbiBydmFsdWUgY29u
dGV4dCB0byBsaXZlIGFjcm9zcyBhbnkgZWZmZWN0cy4KICAgICBfc25hcHNob3QodHlwZSwgZHN0
UHRyLCBzcmNQdHIpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5j
LmpzCShyZXZpc2lvbiAyMzM3NzIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9G
dW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGNsYXNzIEZ1bmMgZXh0ZW5k
cyBOb2RlIHsKICAgICBnZXQgcGFyYW1ldGVyVHlwZXMoKSB7IHJldHVybiB0aGlzLnBhcmFtZXRl
cnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudHlwZSk7IH0KICAgICBnZXQgaXNDYXN0KCkg
eyByZXR1cm4gdGhpcy5faXNDYXN0OyB9CiAgICAgZ2V0IHNoYWRlclR5cGUoKSB7IHJldHVybiB0
aGlzLl9zaGFkZXJUeXBlOyB9CisgICAgZ2V0IGlzRW50cnlQb2ludCgpIHsgcmV0dXJuIHRoaXMu
c2hhZGVyVHlwZSAhPSBudWxsOyB9CiAgICAgZ2V0IHJldHVyblR5cGVGb3JPdmVybG9hZFJlc29s
dXRpb24oKSB7IHJldHVybiB0aGlzLmlzQ2FzdCA/IHRoaXMucmV0dXJuVHlwZSA6IG51bGw7IH0K
ICAgICAKICAgICBnZXQga2luZCgpIHsgcmV0dXJuIEZ1bmM7IH0KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwkocmV2aXNpb24g
MjMzNzcyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRv
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQCBjbGFzcyBGdW5jSW5zdGFudGlh
dG9yIHsKICAgICAgICAgdGhpcy5faW5zdGFuY2VzID0gbmV3IE1hcCgpOwogICAgIH0KICAgICAK
KyAgICBnZXQgaW5zdGFuY2VzKCkgeyByZXR1cm4gdGhpcy5faW5zdGFuY2VzOyB9CisgICAgCiAg
ICAgLy8gUmV0dXJucyBhIEZ1bmMgb2JqZWN0IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyBhIHBh
cnRpY3VsYXIgc3lzdGVtIG9mIHR5cGUgYXJndW1lbnRzLiBZb3UgbXVzdAogICAgIC8vIGludGFu
dGlhdGUgdGhpbmdzIHdpdGggY29uY3JldGUgdHlwZXMsIGJlY2F1c2UgdGhpcyBjb2RlIGNhc3Vh
bGx5IGFzc3VtZXMgdGhpcy4gTm90ZSB0aGF0IHRoaXMKICAgICAvLyB3aWxsIHJldHVybiBhIGRp
ZmZlcmVudCBmdW5jIGZyb20gYGZ1bmNgIG5vIG1hdHRlciB3aGF0LiBUaGlzIGVuc3VyZXMgdGhh
dCB3ZSBjYW4gdXNlIHRoZQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Y3Rpb25MaWtlQmxvY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuY3Rpb25MaWtlQmxvY2suanMJKHJldmlzaW9uIDIzMzc3MikKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwyMSArMjUsMjAgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRnVuY3Rpb25MaWtl
QmxvY2sgZXh0ZW5kcyBWYWx1ZSB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCByZXR1cm5UeXBl
LCBhcmd1bWVudExpc3QsIHBhcmFtZXRlcnMsIGJvZHkpCisgICAgY29uc3RydWN0b3Iob3JpZ2lu
LCBmdW5jLCBhcmd1bWVudExpc3QpCiAgICAgewogICAgICAgICBzdXBlcigpOwogICAgICAgICB0
aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuX3JldHVyblR5cGUgPSByZXR1cm5U
eXBlOworICAgICAgICB0aGlzLl9mdW5jID0gZnVuYzsKICAgICAgICAgdGhpcy5fYXJndW1lbnRM
aXN0ID0gYXJndW1lbnRMaXN0OwotICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVy
czsKLSAgICAgICAgdGhpcy5fYm9keSA9IGJvZHk7CiAgICAgfQogICAgIAogICAgIGdldCBvcmln
aW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KLSAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0
dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KKyAgICBnZXQgZnVuYygpIHsgcmV0dXJuIHRoaXMuX2Z1
bmM7IH0KKyAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuZnVuYy5fcmV0dXJuVHlw
ZTsgfQogICAgIGdldCBhcmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExpc3Q7
IH0KLSAgICBnZXQgcGFyYW1ldGVycygpIHsgcmV0dXJuIHRoaXMuX3BhcmFtZXRlcnM7IH0KLSAg
ICBnZXQgYm9keSgpIHsgcmV0dXJuIHRoaXMuX2JvZHk7IH0KKyAgICBnZXQgcGFyYW1ldGVycygp
IHsgcmV0dXJuIHRoaXMuZnVuYy5fcGFyYW1ldGVyczsgfQorICAgIGdldCBib2R5KCkgeyByZXR1
cm4gdGhpcy5mdW5jLl9ib2R5OyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkocmV2aXNpb24gMjMzNzcy
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkod29ya2luZyBj
b3B5KQpAQCAtNDIsOCArNDIsNyBAQCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIgewog
ICAgICAgICAgICAgaWYgKGZ1bmMuaXNOYXRpdmUpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJVbmV4cGVjdGVkIG5hdGl2ZSBmdW5jOiAiICsgZnVuYyk7CiAgICAgICAgICAgICBf
aW5saW5lRnVuY3Rpb24odGhpcy5fcHJvZ3JhbSwgZnVuYywgdGhpcy5fdmlzaXRpbmcpOwotICAg
ICAgICAgICAgbGV0IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAotICAg
ICAgICAgICAgICAgIHJlc3VsdC5vcmlnaW4sIGZ1bmMucmV0dXJuVHlwZSwgcmVzdWx0LmFyZ3Vt
ZW50TGlzdCwgZnVuYy5wYXJhbWV0ZXJzLCBmdW5jLmJvZHkpOworICAgICAgICAgICAgbGV0IHJl
c3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKHJlc3VsdC5vcmlnaW4sIGZ1bmMs
IHJlc3VsdC5hcmd1bWVudExpc3QpOwogICAgICAgICAgICAgcmVzdWx0aW5nQmxvY2sucmV0dXJu
RVB0ciA9IHJlc3VsdC5yZXN1bHRFUHRyOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0Js
b2NrOwogICAgICAgICB9KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lu
dHJpbnNpY3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
SW50cmluc2ljcy5qcwkocmV2aXNpb24gMjMzNzcyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW50cmluc2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpOwogCiAgICAg
ICAgIC8vIE5PVEU6IEludHJpbnNpYyByZXNvbHV0aW9uIGhhcHBlbnMgYmVmb3JlIHR5cGUgbmFt
ZSByZXNvbHV0aW9uLCBzbyB0aGUgc3RyaW5ncyB3ZSB1c2UgaGVyZQotICAgICAgICAvLyB0byBj
YXRjaCB0aGUgaW50cmluc2ljcyBtdXN0IGJlIGJhc2VkIG9uIHRoZSB0eXBlIG5hbWVzIHRoYXQg
U3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanMgdXNlcy4KKyAgICAgICAgLy8gdG8gY2F0Y2ggdGhl
IGludHJpbnNpY3MgbXVzdCBiZSBiYXNlZCBvbiB0aGUgdHlwZSBuYW1lcyB0aGF0IFN0YW5kYXJk
TGlicmFyeS5qcyB1c2VzLgogICAgICAgICAvLyBGb3IgZXhhbXBsZSwgaWYgYSBuYXRpdmUgZnVu
Y3Rpb24gaXMgZGVjbGFyZWQgdXNpbmcgImludCIgcmF0aGVyIHRoYW4gImludDMyIiwgdGhlbiB3
ZSBtdXN0CiAgICAgICAgIC8vIHVzZSAiaW50IiBoZXJlLCBzaW5jZSB3ZSBkb24ndCB5ZXQga25v
dyB0aGF0IHRoZXkgYXJlIHRoZSBzYW1lIHR5cGUuCiAgICAgICAgIApAQCAtNjU0LDYgKzY1NCwy
NCBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQorCisgICAgICAgIGZvciAobGV0IHN3aXp6bGUgb2YgQWxs
U3dpenpsZU9wZXJhdG9ycykgeworICAgICAgICAgICAgdGhpcy5fbWFwLnNldChzd2l6emxlLnRv
U3RyaW5nKCksIAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5p
bXBsZW1lbnRhdGlvbiA9IChbdmVjXSwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAgICBj
b25zdCBvdXRwdXRCdWZmZXIgPSBuZXcgRUJ1ZmZlcihzd2l6emxlLm91dFNpemUpOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZWFkSW5kaWNlcyA9IHsgJ3gnOiAwLCAneSc6IDEsICd6Jzog
MiwgJ3cnOiAzIH07CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3dp
enpsZS5vdXRTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIu
c2V0KGksIHZlYy5nZXQocmVhZEluZGljZXNbc3dpenpsZS5jb21wb25lbnRzW2ldXSkpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgRVB0cihvdXRwdXRCdWZmZXIsIDApOworICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IG5vbi1uYXRpdmUgZnVuYyBpbnN0YW5jZXMg
ZG9uJ3QgYWN0dWFsbHkgY2FycnkgYW4gX2ltcGxlbWVudGF0aW9uRGF0YSBwcm9wZXJ0eQorICAg
ICAgICAgICAgICAgIC8vIFRPRE86IFJlZmFjdG9yIHRoaXMgc28gaXQgaXMgYSBiaXQgbW9yZSBj
b3JyZWN0CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbkRhdGEgPSBzd2l6emxl
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYWRkKHRoaW5n
KQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMJKHJldmlzaW9uIDIz
Mzc3MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgTGV4ZXIgewogICAgICAgICAgICAgICAg
IGxldCBlbmRJbmRleCA9IHJlbGV2YW50VGV4dC5zZWFyY2goL1wqXC8vKTsKICAgICAgICAgICAg
ICAgICBpZiAoZW5kSW5kZXggPCAwKQogICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwoIlVu
dGVybWluYXRlZCBjb21tZW50Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW5kZXggKz0gZW5k
SW5kZXg7CisgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggKz0gZW5kSW5kZXggKyAyOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKC9e
XC9cLy4qLy50ZXN0KHJlbGV2YW50VGV4dCkpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkocmV2aXNp
b24gMjMzNzcyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVm
RXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDE5IEBACiAidXNlIHN0
cmljdCI7CiAKIGNsYXNzIE1ha2VBcnJheVJlZkV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9u
IHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGxWYWx1ZSkKKyAgICBjb25zdHJ1Y3Rvcihvcmln
aW4sIGxWYWx1ZSwgdHlwZSkKICAgICB7CiAgICAgICAgIHN1cGVyKG9yaWdpbik7CiAgICAgICAg
IHRoaXMuX2xWYWx1ZSA9IGxWYWx1ZTsKKyAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7CisgICAg
ICAgIGlmICghdHlwZSkgeworICAgICAgICAgICAgaWYgKHRoaXMubFZhbHVlLnZhcmlhYmxlICYm
IHRoaXMubFZhbHVlLnZhcmlhYmxlLnR5cGUgJiYgdGhpcy5sVmFsdWUudmFyaWFibGUudHlwZS5p
c0FycmF5ICYmIHRoaXMubFZhbHVlLnZhcmlhYmxlLnR5cGUuZWxlbWVudFR5cGUpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90eXBlID0gbmV3IEFycmF5UmVmVHlwZShvcmlnaW4sICJ0aHJlYWQi
LCB0aGlzLmxWYWx1ZS52YXJpYWJsZS50eXBlLmVsZW1lbnRUeXBlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBnZXQgdHlwZSgpIHsgcmV0dXJuIHRoaXMuX3R5
cGU7IH0KICAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9CiAgICAgCiAg
ICAgdG9TdHJpbmcoKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZl
RnVuYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRp
dmVGdW5jLmpzCShyZXZpc2lvbiAyMzM3NzIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9OYXRpdmVGdW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIGNsYXNz
IE5hdGl2ZUZ1bmMgZXh0ZW5kcyBGdW5jIHsKICAgICAKICAgICBnZXQgaXNOYXRpdmUoKSB7IHJl
dHVybiB0cnVlOyB9CiAKKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1cm4gdGhp
cy5faW1wbGVtZW50YXRpb25EYXRhOyB9CisgICAgc2V0IGltcGxlbWVudGF0aW9uRGF0YShuZXdJ
bXBsRGF0YSkgeyB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGEgPSBuZXdJbXBsRGF0YTsgfQorCiAg
ICAgdG9EZWNsU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAibmF0aXZlICIgKyBzdXBl
ci50b0RlY2xTdHJpbmcoKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jl
d3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jl
d3JpdGVyLmpzCShyZXZpc2lvbiAyMzM3NzIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUxLDEwICszNTEsOSBAQCBjbGFz
cyBSZXdyaXRlciB7CiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uTGlr
ZUJsb2NrKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sCi0gICAgICAgICAgICBOb2RlLnZpc2l0
KG5vZGUucmV0dXJuVHlwZSwgdGhpcyksCi0gICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5t
YXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpLAotICAgICAgICAgICAgbm9kZS5w
YXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMpKSwKLSAgICAg
ICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CisgICAgICAgICAgICBOb2RlLnZpc2l0KG5v
ZGUuZnVuYywgdGhpcyksCisgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJnID0+
IE5vZGUudmlzaXQoYXJnLCB0aGlzKSkKKyAgICAgICAgKTsKICAgICAgICAgcmVzdWx0LnJldHVy
bkVQdHIgPSBub2RlLnJldHVybkVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFy
eS5qcwkocmV2aXNpb24gMjMzNzcyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RhbmRhcmRMaWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MDYsMzUgKzQwNiw0OSBAQCBm
dW5jdGlvbiBpbnRUb1N0cmluZyh4KQogICAgIH0KIH0KIAotLy8gVGhlcmUgYXJlIDQ4MSBzd2l6
emxlIG9wZXJhdG9ycy4gTGV0J3Mgbm90IGxpc3QgdGhlbSBleHBsaWNpdGx5LgotZnVuY3Rpb24g
X2dlbmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMsIGFycmF5KQotewotICAgIGlmICgh
YXJyYXkpCi0gICAgICAgIGFycmF5ID0gW107Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCA9PSBtYXhE
ZXB0aCkgewotICAgICAgICBsZXQgcmVzdWx0ID0gYHZlYyR7YXJyYXkubGVuZ3RofTxUPiBvcGVy
YXRvci4ke2FycmF5LmpvaW4oIiIpfTxUPih2ZWMke21heEl0ZW1zfTxUPiB2KQotewotICAgIHZl
YyR7YXJyYXkubGVuZ3RofTxUPiByZXN1bHQ7Ci1gOwotICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gYCAgICByZXN1
bHQuJHtpbnRUb1N0cmluZyhpKX0gPSB2LiR7YXJyYXlbaV19OwotYDsKLSAgICAgICAgfQotICAg
ICAgICByZXN1bHQgKz0gYCAgICByZXR1cm4gcmVzdWx0OwotfQotYDsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKK2NsYXNzIFN3aXp6bGVPcCB7CisgICAgY29uc3RydWN0b3Iob3V0U2l6ZSwgY29t
cG9uZW50cywgaW5TaXplKQorICAgIHsKKyAgICAgICAgdGhpcy5fb3V0U2l6ZSA9IG91dFNpemU7
CisgICAgICAgIHRoaXMuX2NvbXBvbmVudHMgPSBjb21wb25lbnRzLnNsaWNlKCk7IC8vIFNoYWxs
b3cgY2xvbmUKKyAgICAgICAgdGhpcy5faW5TaXplID0gaW5TaXplOwogICAgIH0KLSAgICBsZXQg
cmVzdWx0ID0gIiI7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhJdGVtczsgKytpKSB7Ci0g
ICAgICAgIGFycmF5LnB1c2goaW50VG9TdHJpbmcoaSkpOwotICAgICAgICByZXN1bHQgKz0gX2dl
bmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMsIGFycmF5KTsKLSAgICAgICAgYXJyYXku
cG9wKCk7CisKKyAgICBnZXQgb3V0U2l6ZSgpIHsgcmV0dXJuIHRoaXMuX291dFNpemU7IH0KKyAg
ICBnZXQgY29tcG9uZW50cygpIHsgcmV0dXJuIHRoaXMuX2NvbXBvbmVudHM7IH0KKyAgICBnZXQg
aW5TaXplKCkgeyByZXR1cm4gdGhpcy5faW5TaXplOyB9CisKKyAgICB0b1N0cmluZygpCisgICAg
eworICAgICAgICByZXR1cm4gYG5hdGl2ZSB2ZWMke3RoaXMub3V0U2l6ZX08VD4gb3BlcmF0b3Iu
JHt0aGlzLmNvbXBvbmVudHMuam9pbigiIil9PFQ+KHZlYyR7dGhpcy5pblNpemV9PFQ+IHYpYDsK
ICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZm9yIChsZXQgbWF4RGVwdGggPSAyOyBt
YXhEZXB0aCA8PSA0OyBtYXhEZXB0aCsrKSB7Ci0gICAgZm9yIChsZXQgbWF4SXRlbXMgPSAyOyBt
YXhJdGVtcyA8PSA0OyBtYXhJdGVtcysrKQotICAgICAgICBzdGFuZGFyZExpYnJhcnkgKz0gX2dl
bmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMpOworLy8gVGhlcmUgYXJlIDQ4MSBzd2l6
emxlIG9wZXJhdG9ycy4gTGV0J3Mgbm90IGxpc3QgdGhlbSBleHBsaWNpdGx5LgorZnVuY3Rpb24g
Z2VuZXJhdGVTd2l6emxlcygpIHsKKyAgICBjb25zdCBhbGxTd2l6emxlcyA9IFtdOworICAgIGZ1
bmN0aW9uIF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1heEl0ZW1zLCBhcnJheSkgeworICAg
ICAgICBpZiAoIWFycmF5KQorICAgICAgICAgICAgYXJyYXkgPSBbXTsKKyAgICAgICAgaWYgKGFy
cmF5Lmxlbmd0aCA9PSBtYXhEZXB0aCkgeworICAgICAgICAgICAgYWxsU3dpenpsZXMucHVzaChu
ZXcgU3dpenpsZU9wKGFycmF5Lmxlbmd0aCwgYXJyYXksIG1heEl0ZW1zKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhJdGVt
czsgKytpKSB7CisgICAgICAgICAgICBhcnJheS5wdXNoKGludFRvU3RyaW5nKGkpKTsKKyAgICAg
ICAgICAgIF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1heEl0ZW1zLCBhcnJheSk7CisgICAg
ICAgICAgICBhcnJheS5wb3AoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKGxldCBt
YXhEZXB0aCA9IDI7IG1heERlcHRoIDw9IDQ7IG1heERlcHRoKyspIHsKKyAgICAgICAgZm9yIChs
ZXQgbWF4SXRlbXMgPSAyOyBtYXhJdGVtcyA8PSA0OyBtYXhJdGVtcysrKQorICAgICAgICAgICAg
X2dlbmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMpOworICAgIH0KKworICAgIHJldHVy
biBhbGxTd2l6emxlczsKIH0KKworY29uc3QgQWxsU3dpenpsZU9wZXJhdG9ycyA9IGdlbmVyYXRl
U3dpenpsZXMoKTsKKworc3RhbmRhcmRMaWJyYXJ5ICs9IEFsbFN3aXp6bGVPcGVyYXRvcnMuam9p
bigiO1xuIikgKyAiOyI7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lvbiAyMzM3NzIpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQgaXNOdW1iZXIoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIGdldCBpc0ludCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0
IGlzRmxvYXRpbmcoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc0VudW0oKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
CiAgICAgaW5oZXJpdHMocHJvdG9jb2wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345472</attachid>
            <date>2018-07-20 12:16:13 -0700</date>
            <delta_ts>2018-07-24 15:28:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187728-20180720121612.patch</filename>
            <type>text/plain</type>
            <size>21486</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzNDA1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDc4IEBACisyMDE4LTA3LTIwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+
CisgICAgICAgIE1pbm9yIGNoYW5nZXMgdG8gdGhlIFdITFNMIGludGVycHJldGVyIHRvIHN1cHBv
cnQgdGhlIG5ldyBjb21waWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBidWcgY29udGFpbnMgc21hbGwgY2hhbmdlcyB0aGF0IGFyZSBtYWtl
IG1pbm9yIGNoYW5nZXMgdG8gdGhlCisgICAgICAgIGJlaGF2aW91ciBvZiB0aGUgZXhpc3Rpbmcg
aW50ZXJwcmV0ZXIgKHRoZSB0ZXN0cyBhcmUgdW5hZmZlY3RlZCBhbmQgYWxsCisgICAgICAgIHN0
aWxsIHBhc3MpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUu
anM6CisgICAgICAgIChFbnVtVHlwZS5wcm90b3R5cGUuZ2V0IGlzRW51bSk6IFByb3BlcnR5IGFk
ZGVkIHRvIEVudW1UeXBlIGFuZCBUeXBlCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRXZhbHVhdG9yLmpzOiBDb3JyZWN0IHR5cG8KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9GdW5jLmpzOgorICAgICAgICAoRnVuYy5wcm90b3R5cGUuZ2V0IGlzRW50cnlQb2lu
dCk6IEFkZCBib29sZWFuIHByb3BlcnR5CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRnVuY0luc3RhbnRpYXRvci5qczoKKyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IucHJvdG90
eXBlLmdldCBpbnN0YW5jZXMpOiBQdWJsaWMgYWNjZXNzb3IgZm9yIGV4aXN0aW5nCisgICAgICAg
IHByaXZhdGUgZmllbGQKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jdGlv
bkxpa2VCbG9jay5qczogUmVmYWN0b3JlZCB0aGUgY2xhc3Mgc28KKyAgICAgICAgdGhhdCBpdCBk
aXJlY3RseSB3cmFwcyBhIEZ1bmMgaW5zdGFuY2UgKHRoZXJlZm9yZSB0aGUgb25seSBpbnRlcmZh
Y2UKKyAgICAgICAgY2hhbmdlIGlzIHRvIHRoZSBjb25zdHJ1Y3RvciBhbmQgdGhlIGFkZGl0aW9u
IG9mIHRoZSBmdW5jIGFjY2Vzc29yKS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSBk
ZS1pbmxpbmluZyBvZiBmdW5jdGlvbnMuCisgICAgICAgIChGdW5jdGlvbkxpa2VCbG9jayk6Cisg
ICAgICAgIChGdW5jdGlvbkxpa2VCbG9jay5wcm90b3R5cGUuZ2V0IGZ1bmMpOgorICAgICAgICAo
RnVuY3Rpb25MaWtlQmxvY2sucHJvdG90eXBlLmdldCByZXR1cm5UeXBlKToKKyAgICAgICAgKEZ1
bmN0aW9uTGlrZUJsb2NrLnByb3RvdHlwZS5nZXQgcGFyYW1ldGVycyk6CisgICAgICAgIChGdW5j
dGlvbkxpa2VCbG9jay5wcm90b3R5cGUuZ2V0IGJvZHkpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0lubGluZXIuanM6IFVzZSB0aGUgbmV3IEZ1bmN0aW9uTGlrZUJsb2NrCisg
ICAgICAgIGNvbnN0cnVjdG9yCisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdENhbGxF
eHByZXNzaW9uKToKKyAgICAgICAgKElubGluZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0ludHJpbnNpY3MuanM6IE1pZ3JhdGUgdGhlIHN3aXp6bGUgb3BlcmF0b3JzCisg
ICAgICAgIHRvIG5hdGl2ZSBmdW5jdGlvbnMgKHdpdGggYWRkaXRpb25hbCBzdXBwb3J0IGluIFN0
YW5kYXJkTGlicmFyeS5qcykuCisgICAgICAgIFRoaXMgcmVkdWNlcyBmaXJzdC10aW1lIGNvbXBp
bGUtdGltZSBmcm9tIGFyb3VuZCA0cyB0byBhcm91bmQgMC4xcy4KKyAgICAgICAgKEludHJpbnNp
Y3MpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzOiBFbnN1cmUg
dGhhdCB0aGUgcGFyc2luZyBvZiBtdWx0aWxpbmUKKyAgICAgICAgY29tbWVudHMgY29tcGxldGVz
IGNvcnJlY3RseQorICAgICAgICAoTGV4ZXIucHJvdG90eXBlLm5leHQpOgorICAgICAgICAoTGV4
ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJl
c3Npb24uanM6IEFkZGl0aW9uIG9mIHR5cGUKKyAgICAgICAgcHJvcGVydHksIHdoaWNoIGlzIGJh
c2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBsVmFsdWUgYW5kIHRoZSBzZW1hbnRpY3Mgb2YKKyAgICAg
ICAgdGhlIGxhbmd1YWdlICh0aGUgQCBvcGVyYXRvciB5aWVsZHMgYW4gYXJyYXkgcmVmZXJlbmNl
IHdpdGggdGhlIHRocmVhZAorICAgICAgICBzY29wZSkuCisgICAgICAgIChNYWtlQXJyYXlSZWZF
eHByZXNzaW9uKToKKyAgICAgICAgKE1ha2VBcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlLmdl
dCB0eXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpz
OiBBZGQgc2V0dGVyL2dldHRlciBmb3IKKyAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhIHRvIHN1
cHBvcnQgc3dpenpsZSBvcGVyYXRvciBjaGFuZ2UKKyAgICAgICAgKE5hdGl2ZUZ1bmMucHJvdG90
eXBlLmdldCBpbXBsZW1lbnRhdGlvbkRhdGEpOgorICAgICAgICAoTmF0aXZlRnVuYy5wcm90b3R5
cGUuc2V0IGltcGxlbWVudGF0aW9uRGF0YSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanM6IFVzZSBuZXcgRnVuY3Rpb25MaWtlQmxvY2sKKyAgICAgICAgY29u
c3RydWN0b3IKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEZ1bmN0aW9uTGlrZUJs
b2NrKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnku
anM6CisgICAgICAgIChfZ2VuZXJhdGVTd2l6emxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l6emxlT3AuanM6IEludHJvZHVjZXMgYSBuZXcgY2xhc3Mg
Zm9yCisgICAgICAgIGNhcnJ5aW5nIG1ldGFkYXRhIGFib3V0IHN3aXp6bGUgb3BlcmF0b3JzIHNv
IHRoYXQgdGhleSBhcmUgaW1wbGVtZW50ZWQKKyAgICAgICAgYXMgbmF0aXZlIGZ1bmN0aW9ucyBy
YXRoZXIgdGhhbiBnZW5lcmF0ZWQgYXQgY29tcGlsZSB0aW1lLgorICAgICAgICAoU3dpenpsZU9w
KToKKyAgICAgICAgKFN3aXp6bGVPcC5wcm90b3R5cGUuZ2V0IG91dFNpemUpOgorICAgICAgICAo
U3dpenpsZU9wLnByb3RvdHlwZS5nZXQgY29tcG9uZW50cyk6CisgICAgICAgIChTd2l6emxlT3Au
cHJvdG90eXBlLmdldCBpblNpemUpOgorICAgICAgICAoU3dpenpsZU9wLnByb3RvdHlwZS50b1N0
cmluZyk6CisgICAgICAgIChTd2l6emxlT3AuYWxsU3dpenpsZU9wZXJhdG9ycy4pOgorICAgICAg
ICAoU3dpenpsZU9wLmFsbFN3aXp6bGVPcGVyYXRvcnMpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qczogKyAgICAgICAgKFN3aXp6bGVPcCk6Cisg
ICAgICAgIChTd2l6emxlT3AucHJvdG90eXBlLmdldCBvdXRTaXplKToKKyAgICAgICAgKFN3aXp6
bGVPcC5wcm90b3R5cGUuZ2V0IGNvbXBvbmVudHMpOgorICAgICAgICAoU3dpenpsZU9wLnByb3Rv
dHlwZS5nZXQgaW5TaXplKToKKyAgICAgICAgKFN3aXp6bGVPcC5wcm90b3R5cGUudG9TdHJpbmcp
OgorICAgICAgICAoZ2VuZXJhdGVTd2l6emxlcyk6CisgICAgICAgIChfZ2VuZXJhdGVTd2l6emxl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzOiBB
ZGRpdGlvbiBvZiBpc0VudW0gcHJvcGVydHksIGFzCisgICAgICAgIGFib3ZlLgorICAgICAgICAo
VHlwZS5wcm90b3R5cGUuZ2V0IGlzRW51bSk6CisKIDIwMTgtMDctMjAgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBXS05hdmlnYXRpb24vV0tOYXZpZ2F0
aW9uQWN0aW9uIHJlbGF0ZWQgU1BJLgpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRW51bVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRW51bVR5cGUuanMJKHJldmlzaW9uIDIzNDA1OCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0VudW1UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIGNs
YXNzIEVudW1UeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRo
aXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQogICAg
IGdldCBiYXNlVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2Jhc2VUeXBlOyB9CisgICAgZ2V0IGlzRW51
bSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKICAgICBnZXQgbWVtYmVyTmFtZXMoKSB7IHJldHVy
biB0aGlzLl9tZW1iZXJzLmtleXMoKTsgfQogICAgIG1lbWJlckJ5TmFtZShuYW1lKSB7IHJldHVy
biB0aGlzLl9tZW1iZXJzLmdldChuYW1lKTsgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjM0MDU4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw3IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIH0KICAgICAKICAg
ICAvLyBZb3UgbXVzdCBzbmFwc2hvdCBpZiB5b3UgdXNlIGEgdmFsdWUgaW4gcnZhbHVlIGNvbnRl
eHQuIEZvciBleGFtcGxlLCBhIGNhbGwgZXhwcmVzc2lvbiB3aWxsCi0gICAgLy8gc25hcHNob3Qg
YWxsIG9mIGl0cyBhcmd1bWVudHMgaW1tZWRhaXRlbHkgdXBvbiBleGVjdXRpbmcgdGhlbS4gSW4g
Z2VuZXJhbCwgaXQgc2hvdWxkIG5vdCBiZQorICAgIC8vIHNuYXBzaG90IGFsbCBvZiBpdHMgYXJn
dW1lbnRzIGltbWVkaWF0ZWx5IHVwb24gZXhlY3V0aW5nIHRoZW0uIEluIGdlbmVyYWwsIGl0IHNo
b3VsZCBub3QgYmUKICAgICAvLyBwb3NzaWJsZSBmb3IgYSBwb2ludGVyIHJldHVybmVkIGZyb20g
YSB2aXNpdCBtZXRob2QgaW4gcnZhbHVlIGNvbnRleHQgdG8gbGl2ZSBhY3Jvc3MgYW55IGVmZmVj
dHMuCiAgICAgX3NuYXBzaG90KHR5cGUsIGRzdFB0ciwgc3JjUHRyKQogICAgIHsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkocmV2aXNpb24gMjM0MDU4KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTQs
NiArNTQsNyBAQCBjbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IHBhcmFtZXRlclR5
cGVzKCkgeyByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVy
LnR5cGUpOyB9CiAgICAgZ2V0IGlzQ2FzdCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2FzdDsgfQogICAg
IGdldCBzaGFkZXJUeXBlKCkgeyByZXR1cm4gdGhpcy5fc2hhZGVyVHlwZTsgfQorICAgIGdldCBp
c0VudHJ5UG9pbnQoKSB7IHJldHVybiB0aGlzLnNoYWRlclR5cGUgIT0gbnVsbDsgfQogICAgIGdl
dCByZXR1cm5UeXBlRm9yT3ZlcmxvYWRSZXNvbHV0aW9uKCkgeyByZXR1cm4gdGhpcy5pc0Nhc3Qg
PyB0aGlzLnJldHVyblR5cGUgOiBudWxsOyB9CiAgICAgCiAgICAgZ2V0IGtpbmQoKSB7IHJldHVy
biBGdW5jOyB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFu
dGlhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmNJbnN0YW50aWF0b3IuanMJKHJldmlzaW9uIDIzNDA1OCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDggQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgIHRoaXMuX2luc3RhbmNl
cyA9IG5ldyBNYXAoKTsKICAgICB9CiAgICAgCisgICAgZ2V0IGluc3RhbmNlcygpIHsgcmV0dXJu
IHRoaXMuX2luc3RhbmNlczsgfQorICAgIAogICAgIC8vIFJldHVybnMgYSBGdW5jIG9iamVjdCB0
aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIHN5c3RlbSBvZiB0eXBlIGFyZ3Vt
ZW50cy4gWW91IG11c3QKICAgICAvLyBpbnRhbnRpYXRlIHRoaW5ncyB3aXRoIGNvbmNyZXRlIHR5
cGVzLCBiZWNhdXNlIHRoaXMgY29kZSBjYXN1YWxseSBhc3N1bWVzIHRoaXMuIE5vdGUgdGhhdCB0
aGlzCiAgICAgLy8gd2lsbCByZXR1cm4gYSBkaWZmZXJlbnQgZnVuYyBmcm9tIGBmdW5jYCBubyBt
YXR0ZXIgd2hhdC4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgY2FuIHVzZSB0aGUKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCShy
ZXZpc2lvbiAyMzQwNTgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jdGlv
bkxpa2VCbG9jay5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsMjEgKzI1LDIwIEBACiAidXNlIHN0
cmljdCI7CiAKIGNsYXNzIEZ1bmN0aW9uTGlrZUJsb2NrIGV4dGVuZHMgVmFsdWUgewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgcmV0dXJuVHlwZSwgYXJndW1lbnRMaXN0LCBwYXJhbWV0ZXJzLCBi
b2R5KQorICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgZnVuYywgYXJndW1lbnRMaXN0KQogICAgIHsK
ICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwotICAgICAg
ICB0aGlzLl9yZXR1cm5UeXBlID0gcmV0dXJuVHlwZTsKKyAgICAgICAgdGhpcy5fZnVuYyA9IGZ1
bmM7CiAgICAgICAgIHRoaXMuX2FyZ3VtZW50TGlzdCA9IGFyZ3VtZW50TGlzdDsKLSAgICAgICAg
dGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgICAgIHRoaXMuX2JvZHkgPSBib2R5
OwogICAgIH0KICAgICAKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
Ci0gICAgZ2V0IHJldHVyblR5cGUoKSB7IHJldHVybiB0aGlzLl9yZXR1cm5UeXBlOyB9CisgICAg
Z2V0IGZ1bmMoKSB7IHJldHVybiB0aGlzLl9mdW5jOyB9CisgICAgZ2V0IHJldHVyblR5cGUoKSB7
IHJldHVybiB0aGlzLmZ1bmMuX3JldHVyblR5cGU7IH0KICAgICBnZXQgYXJndW1lbnRMaXN0KCkg
eyByZXR1cm4gdGhpcy5fYXJndW1lbnRMaXN0OyB9Ci0gICAgZ2V0IHBhcmFtZXRlcnMoKSB7IHJl
dHVybiB0aGlzLl9wYXJhbWV0ZXJzOyB9Ci0gICAgZ2V0IGJvZHkoKSB7IHJldHVybiB0aGlzLl9i
b2R5OyB9CisgICAgZ2V0IHBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlzLmZ1bmMuX3BhcmFtZXRl
cnM7IH0KKyAgICBnZXQgYm9keSgpIHsgcmV0dXJuIHRoaXMuZnVuYy5fYm9keTsgfQogICAgIAog
ICAgIHRvU3RyaW5nKCkKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0lubGluZXIuanMJKHJldmlzaW9uIDIzNDA1OCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDcgQEAgY2xhc3Mg
SW5saW5lciBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgICAgIGlmIChmdW5jLmlzTmF0aXZl
KQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBuYXRpdmUgZnVu
YzogIiArIGZ1bmMpOwogICAgICAgICAgICAgX2lubGluZUZ1bmN0aW9uKHRoaXMuX3Byb2dyYW0s
IGZ1bmMsIHRoaXMuX3Zpc2l0aW5nKTsKLSAgICAgICAgICAgIGxldCByZXN1bHRpbmdCbG9jayA9
IG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKLSAgICAgICAgICAgICAgICByZXN1bHQub3JpZ2luLCBm
dW5jLnJldHVyblR5cGUsIHJlc3VsdC5hcmd1bWVudExpc3QsIGZ1bmMucGFyYW1ldGVycywgZnVu
Yy5ib2R5KTsKKyAgICAgICAgICAgIGxldCByZXN1bHRpbmdCbG9jayA9IG5ldyBGdW5jdGlvbkxp
a2VCbG9jayhyZXN1bHQub3JpZ2luLCBmdW5jLCByZXN1bHQuYXJndW1lbnRMaXN0KTsKICAgICAg
ICAgICAgIHJlc3VsdGluZ0Jsb2NrLnJldHVybkVQdHIgPSByZXN1bHQucmVzdWx0RVB0cjsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHRpbmdCbG9jazsKICAgICAgICAgfSk7CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHJldmlzaW9uIDIzNDA1
OCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgIHRo
aXMuX21hcCA9IG5ldyBNYXAoKTsKIAogICAgICAgICAvLyBOT1RFOiBJbnRyaW5zaWMgcmVzb2x1
dGlvbiBoYXBwZW5zIGJlZm9yZSB0eXBlIG5hbWUgcmVzb2x1dGlvbiwgc28gdGhlIHN0cmluZ3Mg
d2UgdXNlIGhlcmUKLSAgICAgICAgLy8gdG8gY2F0Y2ggdGhlIGludHJpbnNpY3MgbXVzdCBiZSBi
YXNlZCBvbiB0aGUgdHlwZSBuYW1lcyB0aGF0IFN0YW5kYXJkTGlicmFyeVByb2xvZ3VlLmpzIHVz
ZXMuCisgICAgICAgIC8vIHRvIGNhdGNoIHRoZSBpbnRyaW5zaWNzIG11c3QgYmUgYmFzZWQgb24g
dGhlIHR5cGUgbmFtZXMgdGhhdCBTdGFuZGFyZExpYnJhcnkuanMgdXNlcy4KICAgICAgICAgLy8g
Rm9yIGV4YW1wbGUsIGlmIGEgbmF0aXZlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHVzaW5nICJpbnQi
IHJhdGhlciB0aGFuICJpbnQzMiIsIHRoZW4gd2UgbXVzdAogICAgICAgICAvLyB1c2UgImludCIg
aGVyZSwgc2luY2Ugd2UgZG9uJ3QgeWV0IGtub3cgdGhhdCB0aGV5IGFyZSB0aGUgc2FtZSB0eXBl
LgogICAgICAgICAKQEAgLTY1NCw2ICs2NTQsMjMgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAg
ICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKworICAg
ICAgICBmb3IgKGxldCBzd2l6emxlIG9mIFN3aXp6bGVPcC5hbGxTd2l6emxlT3BlcmF0b3JzKCkp
IHsKKyAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoc3dpenpsZS50b1N0cmluZygpLCAKKyAgICAg
ICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAo
W3ZlY10sIG5vZGUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0QnVmZmVy
ID0gbmV3IEVCdWZmZXIoc3dpenpsZS5vdXRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgcmVhZEluZGljZXMgPSB7ICd4JzogMCwgJ3knOiAxLCAneic6IDIsICd3JzogMyB9OworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN3aXp6bGUub3V0U2l6ZTsgaSsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLnNldChpLCB2ZWMuZ2V0KHJl
YWRJbmRpY2VzW3N3aXp6bGUuY29tcG9uZW50c1tpXV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVQ
dHIob3V0cHV0QnVmZmVyLCAwKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
IGZ1bmMuaW1wbGVtZW50YXRpb25EYXRhID0gc3dpenpsZTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgY29uc29sZS5sb2coc3dpenpsZS50b1N0cmluZygpKTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICBhZGQodGhpbmcpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9MZXhlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9MZXhlci5qcwkocmV2aXNpb24gMjM0MDU4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTGV4ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBjbGFzcyBM
ZXhlciB7CiAgICAgICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gcmVsZXZhbnRUZXh0LnNlYXJj
aCgvXCpcLy8pOwogICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCA8IDApCiAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZmFpbCgiVW50ZXJtaW5hdGVkIGNvbW1lbnQiKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9pbmRleCArPSBlbmRJbmRleDsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbmRl
eCArPSBlbmRJbmRleCArIDI7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoL15cL1wvLiovLnRlc3QocmVsZXZhbnRUZXh0KSkgewpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlS
ZWZFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMzQwNTgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMCArMjksMTQgQEAgY2xhc3MgTWFrZUFycmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cAog
ICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbFZhbHVlID0gbFZh
bHVlOworICAgICAgICBpZiAodGhpcy5sVmFsdWUudmFyaWFibGUgJiYgdGhpcy5sVmFsdWUudmFy
aWFibGUudHlwZSAmJiB0aGlzLmxWYWx1ZS52YXJpYWJsZS50eXBlLmlzQXJyYXkgJiYgdGhpcy5s
VmFsdWUudmFyaWFibGUudHlwZS5lbGVtZW50VHlwZSkgeworICAgICAgICAgICAgdGhpcy5fdHlw
ZSA9IG5ldyBBcnJheVJlZlR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcy5sVmFsdWUudmFyaWFi
bGUudHlwZS5lbGVtZW50VHlwZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKKyAgICBnZXQg
dHlwZSgpIHsgcmV0dXJuIHRoaXMuX3R5cGU7IH0KICAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4g
dGhpcy5fbFZhbHVlOyB9Ci0gICAgCisKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwiICsgdGhpcy5udW1FbGVtZW50cyAr
ICI+PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIpIjsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkocmV2aXNpb24gMjM0MDU4KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTMgKzMwLDE3IEBAIGNsYXNzIE5hdGl2ZUZ1bmMgZXh0ZW5kcyBGdW5jIHsKICAg
ICAgICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFy
YW1ldGVycywgaXNDYXN0LCBzaGFkZXJUeXBlKTsKICAgICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQg
PSBmYWxzZTsKICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHRo
aXMuX2ltcGxlbWVudGF0aW9uRGF0YSA9IG51bGw7CiAgICAgICAgIHRoaXMuaW5zdGFudGlhdGVJ
bXBsZW1lbnRhdGlvbiA9IChzdWJzdGl0dXRpb24pID0+IHt9OwogICAgICAgICB0aGlzLnZpc2l0
SW1wbGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gbnVs
bDsKICAgICAgICAgdGhpcy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBp
bXBsZW1lbnRhdGlvbkRhdGEgPT4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBnZXQgaXNOYXRp
dmUoKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyBy
ZXR1cm4gdGhpcy5faW1wbGVtZW50YXRpb25EYXRhOyB9CisgICAgc2V0IGltcGxlbWVudGF0aW9u
RGF0YShuZXdJbXBsRGF0YSkgeyB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGEgPSBuZXdJbXBsRGF0
YTsgfQorCiAgICAgdG9EZWNsU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAibmF0aXZl
ICIgKyBzdXBlci50b0RlY2xTdHJpbmcoKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMzQwNTgpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUxLDEwICszNTEs
OSBAQCBjbGFzcyBSZXdyaXRlciB7CiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZ1
bmN0aW9uTGlrZUJsb2NrKAogICAgICAgICAgICAgbm9kZS5vcmlnaW4sCi0gICAgICAgICAgICBO
b2RlLnZpc2l0KG5vZGUucmV0dXJuVHlwZSwgdGhpcyksCi0gICAgICAgICAgICBub2RlLmFyZ3Vt
ZW50TGlzdC5tYXAoYXJndW1lbnQgPT4gYXJndW1lbnQudmlzaXQodGhpcykpLAotICAgICAgICAg
ICAgbm9kZS5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHRoaXMp
KSwKLSAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CisgICAgICAgICAgICBub2Rl
LmZ1bmMudmlzaXQodGhpcyksCisgICAgICAgICAgICBub2RlLmFyZ3VtZW50TGlzdC5tYXAoYXJn
ID0+IGFyZy52aXNpdCh0aGlzKSkKKyAgICAgICAgKTsKICAgICAgICAgcmVzdWx0LnJldHVybkVQ
dHIgPSBub2RlLnJldHVybkVQdHI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCShyZXZpc2lvbiAyMzQw
NTgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xNyw2ICsxNyw3IEBAIHRkIHsKICAgICA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0
ZXJhbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBlLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3dpenpsZU9wLmpzIj48L3NjcmlwdD4KIAog
ICAgIDxzY3JpcHQgc3JjPSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJBbm9ueW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCShyZXZpc2lvbiAyMzQw
NTgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNiwzNSArNDA2LDYgQEAgZnVuY3Rpb24gaW50VG9TdHJpbmco
eCkKICAgICB9CiB9CiAKLS8vIFRoZXJlIGFyZSA0ODEgc3dpenpsZSBvcGVyYXRvcnMuIExldCdz
IG5vdCBsaXN0IHRoZW0gZXhwbGljaXRseS4KLWZ1bmN0aW9uIF9nZW5lcmF0ZVN3aXp6bGUobWF4
RGVwdGgsIG1heEl0ZW1zLCBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICBhcnJh
eSA9IFtdOwotICAgIGlmIChhcnJheS5sZW5ndGggPT0gbWF4RGVwdGgpIHsKLSAgICAgICAgbGV0
IHJlc3VsdCA9IGB2ZWMke2FycmF5Lmxlbmd0aH08VD4gb3BlcmF0b3IuJHthcnJheS5qb2luKCIi
KX08VD4odmVjJHttYXhJdGVtc308VD4gdikKLXsKLSAgICB2ZWMke2FycmF5Lmxlbmd0aH08VD4g
cmVzdWx0OwotYDsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgcmVzdWx0ICs9IGAgICAgcmVzdWx0LiR7aW50VG9TdHJpbmcoaSl9
ID0gdi4ke2FycmF5W2ldfTsKLWA7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ICs9IGAgICAg
cmV0dXJuIHJlc3VsdDsKLX0KLWA7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IGxldCByZXN1bHQgPSAiIjsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEl0ZW1zOyArK2kp
IHsKLSAgICAgICAgYXJyYXkucHVzaChpbnRUb1N0cmluZyhpKSk7Ci0gICAgICAgIHJlc3VsdCAr
PSBfZ2VuZXJhdGVTd2l6emxlKG1heERlcHRoLCBtYXhJdGVtcywgYXJyYXkpOwotICAgICAgICBh
cnJheS5wb3AoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZm9yIChsZXQgbWF4
RGVwdGggPSAyOyBtYXhEZXB0aCA8PSA0OyBtYXhEZXB0aCsrKSB7Ci0gICAgZm9yIChsZXQgbWF4
SXRlbXMgPSAyOyBtYXhJdGVtcyA8PSA0OyBtYXhJdGVtcysrKQotICAgICAgICBzdGFuZGFyZExp
YnJhcnkgKz0gX2dlbmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMpOwotfQorLy8gVGhl
cmUgYXJlIDQ4MSBzd2l6emxlIG9wZXJhdG9ycywgc28gd2UgY29tcGlsZSB0aGVtIGFzIG5hdGl2
ZSBmdW5jdGlvbnMKK3N0YW5kYXJkTGlicmFyeSArPSBTd2l6emxlT3AuYWxsU3dpenpsZU9wZXJh
dG9ycygpLmpvaW4oIjtcbiIpICsgIjsiOworY29uc29sZS5sb2coc3RhbmRhcmRMaWJyYXJ5KTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9Td2l6emxlT3AuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvU3dpenpsZU9wLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N3aXp6bGVPcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmlj
dCI7CisKK2NsYXNzIFN3aXp6bGVPcCB7CisgICAgY29uc3RydWN0b3Iob3V0U2l6ZSwgY29tcG9u
ZW50cywgaW5TaXplKQorICAgIHsKKyAgICAgICAgdGhpcy5fb3V0U2l6ZSA9IG91dFNpemU7Cisg
ICAgICAgIHRoaXMuX2NvbXBvbmVudHMgPSBjb21wb25lbnRzLnNsaWNlKCk7IC8vIFNoYWxsb3cg
Y2xvbmUKKyAgICAgICAgdGhpcy5faW5TaXplID0gaW5TaXplOworICAgIH0KKworICAgIGdldCBv
dXRTaXplKCkgeyByZXR1cm4gdGhpcy5fb3V0U2l6ZTsgfQorICAgIGdldCBjb21wb25lbnRzKCkg
eyByZXR1cm4gdGhpcy5fY29tcG9uZW50czsgfQorICAgIGdldCBpblNpemUoKSB7IHJldHVybiB0
aGlzLl9pblNpemU7IH0KKworICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiBg
bmF0aXZlIHZlYyR7dGhpcy5vdXRTaXplfTxUPiBvcGVyYXRvci4ke3RoaXMuY29tcG9uZW50cy5q
b2luKCIiKX08VD4odmVjJHt0aGlzLmluU2l6ZX08VD4gdilgOworICAgIH0KKworICAgIHN0YXRp
YyBhbGxTd2l6emxlT3BlcmF0b3JzKCkKKyAgICB7CisgICAgICAgIGlmICghU3dpenpsZU9wLl9h
bGxTd2l6emxlT3BlcmF0b3JzKSB7CisgICAgICAgICAgICBTd2l6emxlT3AuX2FsbFN3aXp6bGVP
cGVyYXRvcnMgPSBbXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gX2dlbmVy
YXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMsIGFycmF5KSB7CisgICAgICAgICAgICAgICAg
aWYgKCFhcnJheSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBbXTsKKyAgICAgICAgICAg
ICAgICBpZiAoYXJyYXkubGVuZ3RoID09IG1heERlcHRoKSB7CisgICAgICAgICAgICAgICAgICAg
IFN3aXp6bGVPcC5fYWxsU3dpenpsZU9wZXJhdG9ycy5wdXNoKG5ldyBTd2l6emxlT3AoYXJyYXku
bGVuZ3RoLCBhcnJheSwgbWF4SXRlbXMpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1h
eEl0ZW1zOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChpbnRUb1N0cmlu
ZyhpKSk7CisgICAgICAgICAgICAgICAgICAgIF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1h
eEl0ZW1zLCBhcnJheSk7CisgICAgICAgICAgICAgICAgICAgIGFycmF5LnBvcCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIAorICAgICAgICAgICAgZm9yIChs
ZXQgbWF4RGVwdGggPSAyOyBtYXhEZXB0aCA8PSA0OyBtYXhEZXB0aCsrKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgbWF4SXRlbXMgPSAyOyBtYXhJdGVtcyA8PSA0OyBtYXhJdGVtcysrKQor
ICAgICAgICAgICAgICAgICAgICBfZ2VuZXJhdGVTd2l6emxlKG1heERlcHRoLCBtYXhJdGVtcyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN3aXp6bGVPcC5fYWxs
U3dpenpsZU9wZXJhdG9yczsKKyAgICB9Cit9CisKKy8vIEluaXRpYWxpc2UgdGhlIHN0YXRpYyBt
ZW1iZXIgKEpTIGRvZXNuJ3QgYWxsb3cgc3RhdGljIGZpZWxkcyBkZWNsYXJlZCBpbiB0aGUgY2xh
c3MpCitTd2l6emxlT3AuX2FsbFN3aXp6bGVPcGVyYXRvcnMgPSBudWxsOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0
bWwJKHJldmlzaW9uIDIzNDA1OCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogPHNjcmlwdCBzcmM9IkNy
ZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBl
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN3aXp6bGVPcC5qcyI+PC9zY3JpcHQ+CiAKIDxzY3Jp
cHQgc3JjPSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkFub255bW91
c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5qcwkocmV2aXNpb24gMjM0MDU4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCwyMyBAQCB0ZXN0cyA9IG5l
dyBQcm94eSh7fSwgewogICAgIH0KIH0pOwogCit0ZXN0cy5jb21tZW50UGFyc2luZyA9IGZ1bmN0
aW9uKCkgeworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgLyogdGhpcyBjb21t
ZW50CisgICAgICAgIHJ1bnMgb3ZlciBtdWx0aXBsZSBsaW5lcyAqLworICAgICAgICBib29sIGZv
bygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICBgKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCB0cnVlKTsKKworICAgIGNoZWNrRmFp
bCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgLyogdGhpcyBjb21tZW50CisgICAg
ICAgIHJ1bnMgb3ZlciBtdWx0aXBsZSBsaW5lcworICAgICAgICBib29sIGZvbygpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1N5bnRh
eEVycm9yKTsKK30KKwogdGVzdHMubGl0ZXJhbEJvb2wgPSBmdW5jdGlvbigpIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28oKSB7IHJldHVybiB0cnVlOyB9Iik7CiAgICAgY2hl
Y2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgdHJ1
ZSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlzaW9uIDIz
NDA1OCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdl
dCBpc051bWJlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzSW50KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICBnZXQgaXNGbG9hdGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgZ2V0
IGlzRW51bSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAKICAgICBpbmhlcml0cyhwcm90b2NvbCkKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAkocmV2aXNpb24gMjM0MDU4KQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MTEsNiArMTEsNyBAQAogPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN3
aXp6bGVPcC5qcyI+PC9zY3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJBZGRyZXNzU3BhY2UuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345719</attachid>
            <date>2018-07-24 15:28:32 -0700</date>
            <delta_ts>2018-07-24 16:08:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187728-20180724152831.patch</filename>
            <type>text/plain</type>
            <size>22424</size>
            <attacher name="Thomas Denney">tdenney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MTczCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWI0YTg5NTRlYmQ3MTE1MDk2ZTAwMjM1MDgwM2QxZDBi
NDZlMDIzNS4uYzllYTc0ZTU2YTFjZmU1MzI4MzAzNTg0ZjU5OGIzNWVlMjQ3ZmI4NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4
IEBACisyMDE4LTA3LTIwICBUaG9tYXMgRGVubmV5ICA8dGRlbm5leUBhcHBsZS5jb20+CisgICAg
ICAgIE1pbm9yIGNoYW5nZXMgdG8gdGhlIFdITFNMIGludGVycHJldGVyIHRvIHN1cHBvcnQgdGhl
IG5ldyBjb21waWxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgQy4gTWF4ZmllbGQuCisK
KyAgICAgICAgVGhpcyBidWcgY29udGFpbnMgc21hbGwgY2hhbmdlcyB0aGF0IGFyZSBtYWtlIG1p
bm9yIGNoYW5nZXMgdG8gdGhlCisgICAgICAgIGJlaGF2aW91ciBvZiB0aGUgZXhpc3RpbmcgaW50
ZXJwcmV0ZXIgKHRoZSB0ZXN0cyBhcmUgdW5hZmZlY3RlZCBhbmQgYWxsCisgICAgICAgIHN0aWxs
IHBhc3MpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanM6
CisgICAgICAgIChFbnVtVHlwZS5wcm90b3R5cGUuZ2V0IGlzRW51bSk6IFByb3BlcnR5IGFkZGVk
IHRvIEVudW1UeXBlIGFuZCBUeXBlCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RXZhbHVhdG9yLmpzOiBDb3JyZWN0IHR5cG8KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9GdW5jLmpzOgorICAgICAgICAoRnVuYy5wcm90b3R5cGUuZ2V0IGlzRW50cnlQb2ludCk6
IEFkZCBib29sZWFuIHByb3BlcnR5CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RnVuY0luc3RhbnRpYXRvci5qczoKKyAgICAgICAgKEZ1bmNJbnN0YW50aWF0b3IucHJvdG90eXBl
LmdldCBpbnN0YW5jZXMpOiBQdWJsaWMgYWNjZXNzb3IgZm9yIGV4aXN0aW5nCisgICAgICAgIHBy
aXZhdGUgZmllbGQKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jdGlvbkxp
a2VCbG9jay5qczogUmVmYWN0b3JlZCB0aGUgY2xhc3Mgc28KKyAgICAgICAgdGhhdCBpdCBkaXJl
Y3RseSB3cmFwcyBhIEZ1bmMgaW5zdGFuY2UgKHRoZXJlZm9yZSB0aGUgb25seSBpbnRlcmZhY2UK
KyAgICAgICAgY2hhbmdlIGlzIHRvIHRoZSBjb25zdHJ1Y3RvciBhbmQgdGhlIGFkZGl0aW9uIG9m
IHRoZSBmdW5jIGFjY2Vzc29yKS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSBkZS1p
bmxpbmluZyBvZiBmdW5jdGlvbnMuCisgICAgICAgIChGdW5jdGlvbkxpa2VCbG9jayk6CisgICAg
ICAgIChGdW5jdGlvbkxpa2VCbG9jay5wcm90b3R5cGUuZ2V0IGZ1bmMpOgorICAgICAgICAoRnVu
Y3Rpb25MaWtlQmxvY2sucHJvdG90eXBlLmdldCByZXR1cm5UeXBlKToKKyAgICAgICAgKEZ1bmN0
aW9uTGlrZUJsb2NrLnByb3RvdHlwZS5nZXQgcGFyYW1ldGVycyk6CisgICAgICAgIChGdW5jdGlv
bkxpa2VCbG9jay5wcm90b3R5cGUuZ2V0IGJvZHkpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0lubGluZXIuanM6IFVzZSB0aGUgbmV3IEZ1bmN0aW9uTGlrZUJsb2NrCisgICAg
ICAgIGNvbnN0cnVjdG9yCisgICAgICAgIChJbmxpbmVyLnByb3RvdHlwZS52aXNpdENhbGxFeHBy
ZXNzaW9uKToKKyAgICAgICAgKElubGluZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0ludHJpbnNpY3MuanM6IE1pZ3JhdGUgdGhlIHN3aXp6bGUgb3BlcmF0b3JzCisgICAg
ICAgIHRvIG5hdGl2ZSBmdW5jdGlvbnMgKHdpdGggYWRkaXRpb25hbCBzdXBwb3J0IGluIFN0YW5k
YXJkTGlicmFyeS5qcykuCisgICAgICAgIFRoaXMgcmVkdWNlcyBmaXJzdC10aW1lIGNvbXBpbGUt
dGltZSBmcm9tIGFyb3VuZCA0cyB0byBhcm91bmQgMC4xcy4KKyAgICAgICAgKEludHJpbnNpY3Mp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzOiBFbnN1cmUgdGhh
dCB0aGUgcGFyc2luZyBvZiBtdWx0aWxpbmUKKyAgICAgICAgY29tbWVudHMgY29tcGxldGVzIGNv
cnJlY3RseQorICAgICAgICAoTGV4ZXIucHJvdG90eXBlLm5leHQpOgorICAgICAgICAoTGV4ZXIp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Np
b24uanM6IEFkZGl0aW9uIG9mIHR5cGUKKyAgICAgICAgcHJvcGVydHksIHdoaWNoIGlzIGJhc2Vk
IG9uIHRoZSB0eXBlIG9mIHRoZSBsVmFsdWUgYW5kIHRoZSBzZW1hbnRpY3Mgb2YKKyAgICAgICAg
dGhlIGxhbmd1YWdlICh0aGUgQCBvcGVyYXRvciB5aWVsZHMgYW4gYXJyYXkgcmVmZXJlbmNlIHdp
dGggdGhlIHRocmVhZAorICAgICAgICBzY29wZSkuCisgICAgICAgIChNYWtlQXJyYXlSZWZFeHBy
ZXNzaW9uKToKKyAgICAgICAgKE1ha2VBcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlLmdldCB0
eXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzOiBB
ZGQgc2V0dGVyL2dldHRlciBmb3IKKyAgICAgICAgaW1wbGVtZW50YXRpb25EYXRhIHRvIHN1cHBv
cnQgc3dpenpsZSBvcGVyYXRvciBjaGFuZ2UKKyAgICAgICAgKE5hdGl2ZUZ1bmMucHJvdG90eXBl
LmdldCBpbXBsZW1lbnRhdGlvbkRhdGEpOgorICAgICAgICAoTmF0aXZlRnVuYy5wcm90b3R5cGUu
c2V0IGltcGxlbWVudGF0aW9uRGF0YSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUmV3cml0ZXIuanM6IFVzZSBuZXcgRnVuY3Rpb25MaWtlQmxvY2sKKyAgICAgICAgY29uc3Ry
dWN0b3IKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEZ1bmN0aW9uTGlrZUJsb2Nr
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanM6
CisgICAgICAgIChfZ2VuZXJhdGVTd2l6emxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Td2l6emxlT3AuanM6IEludHJvZHVjZXMgYSBuZXcgY2xhc3MgZm9y
CisgICAgICAgIGNhcnJ5aW5nIG1ldGFkYXRhIGFib3V0IHN3aXp6bGUgb3BlcmF0b3JzIHNvIHRo
YXQgdGhleSBhcmUgaW1wbGVtZW50ZWQKKyAgICAgICAgYXMgbmF0aXZlIGZ1bmN0aW9ucyByYXRo
ZXIgdGhhbiBnZW5lcmF0ZWQgYXQgY29tcGlsZSB0aW1lLgorICAgICAgICAoU3dpenpsZU9wKToK
KyAgICAgICAgKFN3aXp6bGVPcC5wcm90b3R5cGUuZ2V0IG91dFNpemUpOgorICAgICAgICAoU3dp
enpsZU9wLnByb3RvdHlwZS5nZXQgY29tcG9uZW50cyk6CisgICAgICAgIChTd2l6emxlT3AucHJv
dG90eXBlLmdldCBpblNpemUpOgorICAgICAgICAoU3dpenpsZU9wLnByb3RvdHlwZS50b1N0cmlu
Zyk6CisgICAgICAgIChTd2l6emxlT3AuYWxsU3dpenpsZU9wZXJhdG9ycy4pOgorICAgICAgICAo
U3dpenpsZU9wLmFsbFN3aXp6bGVPcGVyYXRvcnMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qczogKyAgICAgICAgKFN3aXp6bGVPcCk6CisgICAg
ICAgIChTd2l6emxlT3AucHJvdG90eXBlLmdldCBvdXRTaXplKToKKyAgICAgICAgKFN3aXp6bGVP
cC5wcm90b3R5cGUuZ2V0IGNvbXBvbmVudHMpOgorICAgICAgICAoU3dpenpsZU9wLnByb3RvdHlw
ZS5nZXQgaW5TaXplKToKKyAgICAgICAgKFN3aXp6bGVPcC5wcm90b3R5cGUudG9TdHJpbmcpOgor
ICAgICAgICAoZ2VuZXJhdGVTd2l6emxlcyk6CisgICAgICAgIChfZ2VuZXJhdGVTd2l6emxlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzOiBBZGRp
dGlvbiBvZiBpc0VudW0gcHJvcGVydHksIGFzCisgICAgICAgIGFib3ZlLgorICAgICAgICAoVHlw
ZS5wcm90b3R5cGUuZ2V0IGlzRW51bSk6CisKIDIwMTgtMDctMjQgIFJ5YW4gSGFkZGFkICA8cnlh
bmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIz
NDEyMS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1UeXBl
LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanMKaW5kZXggOWQ3
YjM2OGQ0NmE2ODdjODE1N2M4ZmNhZjg2MzA3OGZlNTA5OWZkNi4uYzRhMTU1MWZiNjg0MmExODM2
ODU5YTYzYmVkNTc1MjFmNTI0ZDIyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRW51bVR5cGUuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
RW51bVR5cGUuanMKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgRW51bVR5cGUgZXh0ZW5kcyBUeXBl
IHsKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CiAgICAgZ2V0IG5h
bWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CiAgICAgZ2V0IGJhc2VUeXBlKCkgeyByZXR1cm4g
dGhpcy5fYmFzZVR5cGU7IH0KKyAgICBnZXQgaXNFbnVtKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IAogICAgIGdldCBtZW1iZXJOYW1lcygpIHsgcmV0dXJuIHRoaXMuX21lbWJlcnMua2V5cygpOyB9
CiAgICAgbWVtYmVyQnlOYW1lKG5hbWUpIHsgcmV0dXJuIHRoaXMuX21lbWJlcnMuZ2V0KG5hbWUp
OyB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMKaW5kZXggNDJk
MDE4NTBlYzRkYmIzNDQwMjFhNmM5YWVlMjYzMTBjOGZlNGU4Mi4uNThjZWQ4OWI3ZTQ3NzcwMDIz
YzdkOGUxZTgxOTI4NzUxMjYyZWIzOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRXZhbHVhdG9yLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0V2YWx1YXRvci5qcwpAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBW
aXNpdG9yIHsKICAgICB9CiAgICAgCiAgICAgLy8gWW91IG11c3Qgc25hcHNob3QgaWYgeW91IHVz
ZSBhIHZhbHVlIGluIHJ2YWx1ZSBjb250ZXh0LiBGb3IgZXhhbXBsZSwgYSBjYWxsIGV4cHJlc3Np
b24gd2lsbAotICAgIC8vIHNuYXBzaG90IGFsbCBvZiBpdHMgYXJndW1lbnRzIGltbWVkYWl0ZWx5
IHVwb24gZXhlY3V0aW5nIHRoZW0uIEluIGdlbmVyYWwsIGl0IHNob3VsZCBub3QgYmUKKyAgICAv
LyBzbmFwc2hvdCBhbGwgb2YgaXRzIGFyZ3VtZW50cyBpbW1lZGlhdGVseSB1cG9uIGV4ZWN1dGlu
ZyB0aGVtLiBJbiBnZW5lcmFsLCBpdCBzaG91bGQgbm90IGJlCiAgICAgLy8gcG9zc2libGUgZm9y
IGEgcG9pbnRlciByZXR1cm5lZCBmcm9tIGEgdmlzaXQgbWV0aG9kIGluIHJ2YWx1ZSBjb250ZXh0
IHRvIGxpdmUgYWNyb3NzIGFueSBlZmZlY3RzLgogICAgIF9zbmFwc2hvdCh0eXBlLCBkc3RQdHIs
IHNyY1B0cikKICAgICB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9GdW5jLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuYy5qcwppbmRleCA0
N2YyMzJmMzMxYWMyYWU3YTQ2YmNhNjIzOGFhMDc1NGQ3MDI3NTY3Li42ZmE3YzlkMWI2ZjRiOTU4
MzM1OTgxYzI3MjhiZTg2NWE1NmU3M2FlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9GdW5jLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1
bmMuanMKQEAgLTU0LDYgKzU0LDcgQEAgY2xhc3MgRnVuYyBleHRlbmRzIE5vZGUgewogICAgIGdl
dCBwYXJhbWV0ZXJUeXBlcygpIHsgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVy
ID0+IHBhcmFtZXRlci50eXBlKTsgfQogICAgIGdldCBpc0Nhc3QoKSB7IHJldHVybiB0aGlzLl9p
c0Nhc3Q7IH0KICAgICBnZXQgc2hhZGVyVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3NoYWRlclR5cGU7
IH0KKyAgICBnZXQgaXNFbnRyeVBvaW50KCkgeyByZXR1cm4gdGhpcy5zaGFkZXJUeXBlICE9IG51
bGw7IH0KICAgICBnZXQgcmV0dXJuVHlwZUZvck92ZXJsb2FkUmVzb2x1dGlvbigpIHsgcmV0dXJu
IHRoaXMuaXNDYXN0ID8gdGhpcy5yZXR1cm5UeXBlIDogbnVsbDsgfQogICAgIAogICAgIGdldCBr
aW5kKCkgeyByZXR1cm4gRnVuYzsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMKaW5kZXggM2JhMzRmNjJkYjQ3NTVhYzRhMjFhMzg4ZjBm
MmVkZTFmNjczNzNmZi4uODkyODYyYTZkZDg1NjVlZTM3ZTQyMDYzMWQ3YWY3MGQ1MjI3ZTU4NiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRv
ci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9y
LmpzCkBAIC0zMSw2ICszMSw4IEBAIGNsYXNzIEZ1bmNJbnN0YW50aWF0b3IgewogICAgICAgICB0
aGlzLl9pbnN0YW5jZXMgPSBuZXcgTWFwKCk7CiAgICAgfQogICAgIAorICAgIGdldCBpbnN0YW5j
ZXMoKSB7IHJldHVybiB0aGlzLl9pbnN0YW5jZXM7IH0KKyAgICAKICAgICAvLyBSZXR1cm5zIGEg
RnVuYyBvYmplY3QgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgcGFydGljdWxhciBzeXN0ZW0g
b2YgdHlwZSBhcmd1bWVudHMuIFlvdSBtdXN0CiAgICAgLy8gaW50YW50aWF0ZSB0aGluZ3Mgd2l0
aCBjb25jcmV0ZSB0eXBlcywgYmVjYXVzZSB0aGlzIGNvZGUgY2FzdWFsbHkgYXNzdW1lcyB0aGlz
LiBOb3RlIHRoYXQgdGhpcwogICAgIC8vIHdpbGwgcmV0dXJuIGEgZGlmZmVyZW50IGZ1bmMgZnJv
bSBgZnVuY2Agbm8gbWF0dGVyIHdoYXQuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNhbiB1c2UgdGhl
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jdGlvbkxpa2VC
bG9jay5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2Nr
LmpzCmluZGV4IDA0NTAwNTRkYTUyNDE1YzgxMmYxMTRiNDdiZTUyN2U2NDQ0MzcxMWIuLjQwZjk5
NWU0ZmU2NTI0OGU1NDM3YjgwMDdmZWUzN2M1MzhkMDAxMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCisrKyBiL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCkBAIC0yNSwyMSArMjUs
MjAgQEAKICJ1c2Ugc3RyaWN0IjsKIAogY2xhc3MgRnVuY3Rpb25MaWtlQmxvY2sgZXh0ZW5kcyBW
YWx1ZSB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCByZXR1cm5UeXBlLCBhcmd1bWVudExpc3Qs
IHBhcmFtZXRlcnMsIGJvZHkpCisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBmdW5jLCBhcmd1bWVu
dExpc3QpCiAgICAgewogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLl9vcmlnaW4gPSBv
cmlnaW47Ci0gICAgICAgIHRoaXMuX3JldHVyblR5cGUgPSByZXR1cm5UeXBlOworICAgICAgICB0
aGlzLl9mdW5jID0gZnVuYzsKICAgICAgICAgdGhpcy5fYXJndW1lbnRMaXN0ID0gYXJndW1lbnRM
aXN0OwotICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICAgICAgdGhp
cy5fYm9keSA9IGJvZHk7CiAgICAgfQogICAgIAogICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0
aGlzLl9vcmlnaW47IH0KLSAgICBnZXQgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVy
blR5cGU7IH0KKyAgICBnZXQgZnVuYygpIHsgcmV0dXJuIHRoaXMuX2Z1bmM7IH0KKyAgICBnZXQg
cmV0dXJuVHlwZSgpIHsgcmV0dXJuIHRoaXMuZnVuYy5fcmV0dXJuVHlwZTsgfQogICAgIGdldCBh
cmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExpc3Q7IH0KLSAgICBnZXQgcGFy
YW1ldGVycygpIHsgcmV0dXJuIHRoaXMuX3BhcmFtZXRlcnM7IH0KLSAgICBnZXQgYm9keSgpIHsg
cmV0dXJuIHRoaXMuX2JvZHk7IH0KKyAgICBnZXQgcGFyYW1ldGVycygpIHsgcmV0dXJuIHRoaXMu
ZnVuYy5fcGFyYW1ldGVyczsgfQorICAgIGdldCBib2R5KCkgeyByZXR1cm4gdGhpcy5mdW5jLl9i
b2R5OyB9CiAgICAgCiAgICAgdG9TdHJpbmcoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbmxpbmVyLmpzCmluZGV4IDgwMTJlMzIxNGMzMDcyMDIzMjk3MWIyMDE4MWVlNjA0
MGRhMDVhNjQuLjQ5MWVmM2UyMjFmYzA2MzE4ZWUwMzY3YTM4MTY5OWU1NzIzYmZlNWEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwpAQCAtNDIsOCArNDIsNyBAQCBj
bGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICAgICAgaWYgKGZ1bmMuaXNO
YXRpdmUpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG5hdGl2
ZSBmdW5jOiAiICsgZnVuYyk7CiAgICAgICAgICAgICBfaW5saW5lRnVuY3Rpb24odGhpcy5fcHJv
Z3JhbSwgZnVuYywgdGhpcy5fdmlzaXRpbmcpOwotICAgICAgICAgICAgbGV0IHJlc3VsdGluZ0Js
b2NrID0gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAotICAgICAgICAgICAgICAgIHJlc3VsdC5vcmln
aW4sIGZ1bmMucmV0dXJuVHlwZSwgcmVzdWx0LmFyZ3VtZW50TGlzdCwgZnVuYy5wYXJhbWV0ZXJz
LCBmdW5jLmJvZHkpOworICAgICAgICAgICAgbGV0IHJlc3VsdGluZ0Jsb2NrID0gbmV3IEZ1bmN0
aW9uTGlrZUJsb2NrKHJlc3VsdC5vcmlnaW4sIGZ1bmMsIHJlc3VsdC5hcmd1bWVudExpc3QpOwog
ICAgICAgICAgICAgcmVzdWx0aW5nQmxvY2sucmV0dXJuRVB0ciA9IHJlc3VsdC5yZXN1bHRFUHRy
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0Jsb2NrOwogICAgICAgICB9KTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMgYi9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCmluZGV4IDQzMDAzYWE3ZTFm
ZDljNWIxN2IwNTlkNTNjMjcyNDIwYTdlN2VkNjIuLmIxZDkzMTFlMTg0ZDgzYWY5NWZiNzE3OWRm
NjdkNzk5MGQ0OWZlNmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0ludHJpbnNpY3MuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmlu
c2ljcy5qcwpAQCAtMzAsNyArMzAsNyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgdGhp
cy5fbWFwID0gbmV3IE1hcCgpOwogCiAgICAgICAgIC8vIE5PVEU6IEludHJpbnNpYyByZXNvbHV0
aW9uIGhhcHBlbnMgYmVmb3JlIHR5cGUgbmFtZSByZXNvbHV0aW9uLCBzbyB0aGUgc3RyaW5ncyB3
ZSB1c2UgaGVyZQotICAgICAgICAvLyB0byBjYXRjaCB0aGUgaW50cmluc2ljcyBtdXN0IGJlIGJh
c2VkIG9uIHRoZSB0eXBlIG5hbWVzIHRoYXQgU3RhbmRhcmRMaWJyYXJ5UHJvbG9ndWUuanMgdXNl
cy4KKyAgICAgICAgLy8gdG8gY2F0Y2ggdGhlIGludHJpbnNpY3MgbXVzdCBiZSBiYXNlZCBvbiB0
aGUgdHlwZSBuYW1lcyB0aGF0IFN0YW5kYXJkTGlicmFyeS5qcyB1c2VzLgogICAgICAgICAvLyBG
b3IgZXhhbXBsZSwgaWYgYSBuYXRpdmUgZnVuY3Rpb24gaXMgZGVjbGFyZWQgdXNpbmcgImludCIg
cmF0aGVyIHRoYW4gImludDMyIiwgdGhlbiB3ZSBtdXN0CiAgICAgICAgIC8vIHVzZSAiaW50IiBo
ZXJlLCBzaW5jZSB3ZSBkb24ndCB5ZXQga25vdyB0aGF0IHRoZXkgYXJlIHRoZSBzYW1lIHR5cGUu
CiAgICAgICAgIApAQCAtNjU0LDYgKzY1NCwyMyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAg
ICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQorCisgICAg
ICAgIGZvciAobGV0IHN3aXp6bGUgb2YgU3dpenpsZU9wLmFsbFN3aXp6bGVPcGVyYXRvcnMoKSkg
eworICAgICAgICAgICAgdGhpcy5fbWFwLnNldChzd2l6emxlLnRvU3RyaW5nKCksIAorICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChb
dmVjXSwgbm9kZSkgPT4geworICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRCdWZmZXIg
PSBuZXcgRUJ1ZmZlcihzd2l6emxlLm91dFNpemUpOworICAgICAgICAgICAgICAgICAgICBjb25z
dCByZWFkSW5kaWNlcyA9IHsgJ3gnOiAwLCAneSc6IDEsICd6JzogMiwgJ3cnOiAzIH07CisgICAg
ICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpenpsZS5vdXRTaXplOyBpKysp
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIuc2V0KGksIHZlYy5nZXQocmVh
ZEluZGljZXNbc3dpenpsZS5jb21wb25lbnRzW2ldXSkpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRVB0
cihvdXRwdXRCdWZmZXIsIDApOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbkRhdGEgPSBzd2l6emxlOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZyhzd2l6emxlLnRvU3RyaW5nKCkpOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGFkZCh0aGluZykKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xleGVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIu
anMKaW5kZXggYmEzMDM1OWRkZWE5OWEwZjk1OTM2NTcyODljNjExOGNlMjU1MDRmNS4uYmUyMTY1
ZGI3OWU4M2VjYzI4ZjVkMzQ2YjVjNWQyMWUzMjQ0YmQwYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTGV4ZXIuanMKQEAgLTEwMyw3ICsxMDMsNyBAQCBjbGFzcyBMZXhlciB7CiAgICAg
ICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gcmVsZXZhbnRUZXh0LnNlYXJjaCgvXCpcLy8pOwog
ICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCA8IDApCiAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZmFpbCgiVW50ZXJtaW5hdGVkIGNvbW1lbnQiKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9p
bmRleCArPSBlbmRJbmRleDsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCArPSBlbmRJbmRl
eCArIDI7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoL15cL1wvLiovLnRlc3QocmVsZXZhbnRUZXh0KSkgewpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcyBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMKaW5k
ZXggYzA2MTg3NmI2NWZjN2ZmZmFlMjU5YjA2NzI0ZmNmYjc1ODZlNDM3OS4uMGNjNmY2ZWNkMjNi
ZjAzZjBhZTIyM2YxOTJiMWEwN2FkNDQzNzA5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcworKysgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCkBAIC0yOSwxMCAr
MjksMTQgQEAgY2xhc3MgTWFrZUFycmF5UmVmRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24g
ewogICAgIHsKICAgICAgICAgc3VwZXIob3JpZ2luKTsKICAgICAgICAgdGhpcy5fbFZhbHVlID0g
bFZhbHVlOworICAgICAgICBpZiAodGhpcy5sVmFsdWUudmFyaWFibGUgJiYgdGhpcy5sVmFsdWUu
dmFyaWFibGUudHlwZSAmJiB0aGlzLmxWYWx1ZS52YXJpYWJsZS50eXBlLmlzQXJyYXkgJiYgdGhp
cy5sVmFsdWUudmFyaWFibGUudHlwZS5lbGVtZW50VHlwZSkgeworICAgICAgICAgICAgdGhpcy5f
dHlwZSA9IG5ldyBBcnJheVJlZlR5cGUob3JpZ2luLCAidGhyZWFkIiwgdGhpcy5sVmFsdWUudmFy
aWFibGUudHlwZS5lbGVtZW50VHlwZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKKyAgICBn
ZXQgdHlwZSgpIHsgcmV0dXJuIHRoaXMuX3R5cGU7IH0KICAgICBnZXQgbFZhbHVlKCkgeyByZXR1
cm4gdGhpcy5fbFZhbHVlOyB9Ci0gICAgCisKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAg
ICByZXR1cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwiICsgdGhpcy5udW1FbGVtZW50
cyArICI+PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIpIjsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmMuanMgYi9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jLmpzCmluZGV4IDEzNDcwMGY5M2Y3NGZiZjU5Yzk2
M2U5ZmUxZjJlMzk1MjA3M2I3MDkuLmE1NTMzNTJkOWFlZTYwYmNhNjJhZDZlMTIzMjg4Yjg5MDUx
ODI0ODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1
bmMuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlRnVuYy5qcwpA
QCAtMzAsMTMgKzMwLDE3IEBAIGNsYXNzIE5hdGl2ZUZ1bmMgZXh0ZW5kcyBGdW5jIHsKICAgICAg
ICAgc3VwZXIob3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1l
dGVycywgaXNDYXN0LCBzaGFkZXJUeXBlKTsKICAgICAgICAgdGhpcy5pc1Jlc3RyaWN0ZWQgPSBm
YWxzZTsKICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IG51bGw7CisgICAgICAgIHRoaXMu
X2ltcGxlbWVudGF0aW9uRGF0YSA9IG51bGw7CiAgICAgICAgIHRoaXMuaW5zdGFudGlhdGVJbXBs
ZW1lbnRhdGlvbiA9IChzdWJzdGl0dXRpb24pID0+IHt9OwogICAgICAgICB0aGlzLnZpc2l0SW1w
bGVtZW50YXRpb25EYXRhID0gKGltcGxlbWVudGF0aW9uRGF0YSwgdmlzaXRvcikgPT4gbnVsbDsK
ICAgICAgICAgdGhpcy5kaWRMYXlvdXRTdHJ1Y3RzSW5JbXBsZW1lbnRhdGlvbkRhdGEgPSBpbXBs
ZW1lbnRhdGlvbkRhdGEgPT4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBnZXQgaXNOYXRpdmUo
KSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBnZXQgaW1wbGVtZW50YXRpb25EYXRhKCkgeyByZXR1
cm4gdGhpcy5faW1wbGVtZW50YXRpb25EYXRhOyB9CisgICAgc2V0IGltcGxlbWVudGF0aW9uRGF0
YShuZXdJbXBsRGF0YSkgeyB0aGlzLl9pbXBsZW1lbnRhdGlvbkRhdGEgPSBuZXdJbXBsRGF0YTsg
fQorCiAgICAgdG9EZWNsU3RyaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiAibmF0aXZlICIg
KyBzdXBlci50b0RlY2xTdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Jld3JpdGVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3
cml0ZXIuanMKaW5kZXggNjQ2ZDA2YmI3NmUzMGVhMWFhNjdkOGU0ODhkZmJlZjBlMTQxMTY5Mi4u
ZjQwZDZiODhiMjZlZWRjYmY4MjlmMWJhYmIxMGEyMDQ1YjdhOGU4MyAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKKysrIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKQEAgLTM1MSwxMCArMzUxLDkgQEAgY2xhc3Mg
UmV3cml0ZXIgewogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGdW5jdGlvbkxpa2VC
bG9jaygKICAgICAgICAgICAgIG5vZGUub3JpZ2luLAotICAgICAgICAgICAgTm9kZS52aXNpdChu
b2RlLnJldHVyblR5cGUsIHRoaXMpLAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFw
KGFyZ3VtZW50ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKLSAgICAgICAgICAgIG5vZGUucGFy
YW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlzKSksCi0gICAgICAg
ICAgICBub2RlLmJvZHkudmlzaXQodGhpcykpOworICAgICAgICAgICAgbm9kZS5mdW5jLnZpc2l0
KHRoaXMpLAorICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZyA9PiBhcmcudmlz
aXQodGhpcykpCisgICAgICAgICk7CiAgICAgICAgIHJlc3VsdC5yZXR1cm5FUHRyID0gbm9kZS5y
ZXR1cm5FUHRyOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCmluZGV4IGQxNzNmN2U3MjUxZWE5ODVhNmY5YjU2NTM0
ZmRhNDU4ZmQyMTYwZjEuLmZhMWY2YTQwYTY0YzIyOGZhYmFhNzVhMjVhNDdhNmNlYmQ4NDFhOTcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAtMTcsNiArMTcs
NyBAQCB0ZCB7CiAgICAgPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlN3aXp6bGVPcC5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQWRk
cmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFyaWFi
bGUuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU3RhbmRhcmRMaWJyYXJ5LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Rh
bmRhcmRMaWJyYXJ5LmpzCmluZGV4IDFlZGRkMWEwMzQyOTYwZDRkOTVjODIxZTQ4ZDM0ZDc3YWU5
NzE3MWMuLjVmOWNjYmZmMWUyMzE3ZTQ4YjZlYjU5ZjdhMDdiMTE5YWRiYTc2MGMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcworKysg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMKQEAgLTQw
NiwzNSArNDA2LDYgQEAgZnVuY3Rpb24gaW50VG9TdHJpbmcoeCkKICAgICB9CiB9CiAKLS8vIFRo
ZXJlIGFyZSA0ODEgc3dpenpsZSBvcGVyYXRvcnMuIExldCdzIG5vdCBsaXN0IHRoZW0gZXhwbGlj
aXRseS4KLWZ1bmN0aW9uIF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1heEl0ZW1zLCBhcnJh
eSkKLXsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICBhcnJheSA9IFtdOwotICAgIGlmIChhcnJh
eS5sZW5ndGggPT0gbWF4RGVwdGgpIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGB2ZWMke2FycmF5
Lmxlbmd0aH08VD4gb3BlcmF0b3IuJHthcnJheS5qb2luKCIiKX08VD4odmVjJHttYXhJdGVtc308
VD4gdikKLXsKLSAgICB2ZWMke2FycmF5Lmxlbmd0aH08VD4gcmVzdWx0OwotYDsKLSAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgcmVz
dWx0ICs9IGAgICAgcmVzdWx0LiR7aW50VG9TdHJpbmcoaSl9ID0gdi4ke2FycmF5W2ldfTsKLWA7
Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ICs9IGAgICAgcmV0dXJuIHJlc3VsdDsKLX0KLWA7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGxldCByZXN1bHQgPSAiIjsKLSAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEl0ZW1zOyArK2kpIHsKLSAgICAgICAgYXJyYXkucHVz
aChpbnRUb1N0cmluZyhpKSk7Ci0gICAgICAgIHJlc3VsdCArPSBfZ2VuZXJhdGVTd2l6emxlKG1h
eERlcHRoLCBtYXhJdGVtcywgYXJyYXkpOwotICAgICAgICBhcnJheS5wb3AoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZm9yIChsZXQgbWF4RGVwdGggPSAyOyBtYXhEZXB0aCA8
PSA0OyBtYXhEZXB0aCsrKSB7Ci0gICAgZm9yIChsZXQgbWF4SXRlbXMgPSAyOyBtYXhJdGVtcyA8
PSA0OyBtYXhJdGVtcysrKQotICAgICAgICBzdGFuZGFyZExpYnJhcnkgKz0gX2dlbmVyYXRlU3dp
enpsZShtYXhEZXB0aCwgbWF4SXRlbXMpOwotfQorLy8gVGhlcmUgYXJlIDQ4MSBzd2l6emxlIG9w
ZXJhdG9ycywgc28gd2UgY29tcGlsZSB0aGVtIGFzIG5hdGl2ZSBmdW5jdGlvbnMKK3N0YW5kYXJk
TGlicmFyeSArPSBTd2l6emxlT3AuYWxsU3dpenpsZU9wZXJhdG9ycygpLmpvaW4oIjtcbiIpICsg
IjsiOworY29uc29sZS5sb2coc3RhbmRhcmRMaWJyYXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l6emxl
T3AuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l6emxlT3AuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDFjNWJkMGU2YjM5MjBmNTcxZGU3YzIwOTQ4NjAzNmI5NDU0OGE3NAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXp6bGVPcC5qcwpAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisidXNlIHN0cmljdCI7CisKK2NsYXNzIFN3aXp6bGVPcCB7CisgICAgY29uc3RydWN0b3Iob3V0
U2l6ZSwgY29tcG9uZW50cywgaW5TaXplKQorICAgIHsKKyAgICAgICAgdGhpcy5fb3V0U2l6ZSA9
IG91dFNpemU7CisgICAgICAgIHRoaXMuX2NvbXBvbmVudHMgPSBjb21wb25lbnRzLnNsaWNlKCk7
IC8vIFNoYWxsb3cgY2xvbmUKKyAgICAgICAgdGhpcy5faW5TaXplID0gaW5TaXplOworICAgIH0K
KworICAgIGdldCBvdXRTaXplKCkgeyByZXR1cm4gdGhpcy5fb3V0U2l6ZTsgfQorICAgIGdldCBj
b21wb25lbnRzKCkgeyByZXR1cm4gdGhpcy5fY29tcG9uZW50czsgfQorICAgIGdldCBpblNpemUo
KSB7IHJldHVybiB0aGlzLl9pblNpemU7IH0KKworICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBgbmF0aXZlIHZlYyR7dGhpcy5vdXRTaXplfTxUPiBvcGVyYXRvci4ke3RoaXMu
Y29tcG9uZW50cy5qb2luKCIiKX08VD4odmVjJHt0aGlzLmluU2l6ZX08VD4gdilgOworICAgIH0K
KworICAgIHN0YXRpYyBhbGxTd2l6emxlT3BlcmF0b3JzKCkKKyAgICB7CisgICAgICAgIGlmICgh
U3dpenpsZU9wLl9hbGxTd2l6emxlT3BlcmF0b3JzKSB7CisgICAgICAgICAgICBTd2l6emxlT3Au
X2FsbFN3aXp6bGVPcGVyYXRvcnMgPSBbXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVu
Y3Rpb24gX2dlbmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMsIGFycmF5KSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFhcnJheSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBbXTsK
KyAgICAgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09IG1heERlcHRoKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN3aXp6bGVPcC5fYWxsU3dpenpsZU9wZXJhdG9ycy5wdXNoKG5ldyBTd2l6
emxlT3AoYXJyYXkubGVuZ3RoLCBhcnJheSwgbWF4SXRlbXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IG1heEl0ZW1zOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVz
aChpbnRUb1N0cmluZyhpKSk7CisgICAgICAgICAgICAgICAgICAgIF9nZW5lcmF0ZVN3aXp6bGUo
bWF4RGVwdGgsIG1heEl0ZW1zLCBhcnJheSk7CisgICAgICAgICAgICAgICAgICAgIGFycmF5LnBv
cCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChsZXQgbWF4RGVwdGggPSAyOyBtYXhEZXB0aCA8PSA0OyBtYXhEZXB0aCsrKSB7
CisgICAgICAgICAgICAgICAgZm9yIChsZXQgbWF4SXRlbXMgPSAyOyBtYXhJdGVtcyA8PSA0OyBt
YXhJdGVtcysrKQorICAgICAgICAgICAgICAgICAgICBfZ2VuZXJhdGVTd2l6emxlKG1heERlcHRo
LCBtYXhJdGVtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN3
aXp6bGVPcC5fYWxsU3dpenpsZU9wZXJhdG9yczsKKyAgICB9Cit9CisKKy8vIEluaXRpYWxpc2Ug
dGhlIHN0YXRpYyBtZW1iZXIgKEpTIGRvZXNuJ3QgYWxsb3cgc3RhdGljIGZpZWxkcyBkZWNsYXJl
ZCBpbiB0aGUgY2xhc3MpCitTd2l6emxlT3AuX2FsbFN3aXp6bGVPcGVyYXRvcnMgPSBudWxsOwpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuaHRtbAppbmRleCAzMjBmYmE5OWQ1NWM5NDdjZDRmZDAzODVjYWFiYjhlOWRkYWY5ZTkzLi4y
MWM3N2Y2YTAyMWY1NWQzYjQ0MWRmYmQ2NDIwMzliZjczODUwZmZhIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCkBAIC0xMSw2ICsxMSw3IEBACiA8c2NyaXB0IHNyYz0i
Q3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5
cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3dpenpsZU9wLmpzIj48L3NjcmlwdD4KIAogPHNj
cmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQW5vbnlt
b3VzVmFyaWFibGUuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
anMKaW5kZXggYWNkNjgwNGExNTRlNjg1MGFiNjc2MjFmNmY0MmY1OTNkMDcwN2FiYS4uMzYxNGVh
ZDg5NGYyZGM5ZjBmNGM3ZDc1MjM4NWQwZTA5Y2ZjNGYwMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9UZXN0LmpzCkBAIC0xOTQsNiArMTk0LDIzIEBAIHRlc3RzID0gbmV3IFByb3h5KHt9
LCB7CiAgICAgfQogfSk7CiAKK3Rlc3RzLmNvbW1lbnRQYXJzaW5nID0gZnVuY3Rpb24oKSB7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICAvKiB0aGlzIGNvbW1lbnQKKyAgICAg
ICAgcnVucyBvdmVyIG11bHRpcGxlIGxpbmVzICovCisgICAgICAgIGJvb2wgZm9vKCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIGApOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIHRydWUpOworCisgICAgY2hlY2tGYWlsKAorICAgICAg
ICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAvKiB0aGlzIGNvbW1lbnQKKyAgICAgICAgcnVucyBv
dmVyIG11bHRpcGxlIGxpbmVzCisgICAgICAgIGJvb2wgZm9vKCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXU3ludGF4RXJyb3IpOwor
fQorCiB0ZXN0cy5saXRlcmFsQm9vbCA9IGZ1bmN0aW9uKCkgewogICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKCJib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0iKTsKICAgICBjaGVja0Jvb2wocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCB0cnVlKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCmluZGV4IDA5YWJlNGRiNjZhNWIyZTEzMDRlYTVm
N2Y4MGIwYWRlZjIxZjRjZTkuLjdjMjg3OTE4OTUzYTViMWQ1ZTM1ZTg1MGUzMzBmMzg5ZGY2ZTc2
ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwpAQCAtMzQsNiArMzQsNyBA
QCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7CiAgICAgZ2V0IGlzTnVtYmVyKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0Zs
b2F0aW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBnZXQgaXNFbnVtKCkgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBnZXQgaXNQcmltaXRpdmUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAg
IGluaGVyaXRzKHByb3RvY29sKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvaW5kZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0
bWwKaW5kZXggM2E3ZTk0OGJlNjdkMGI1YzA1YmIxOWMyZWYxNDMwOWExMTk3MzhlNC4uN2E3YzRi
NDJmZjMwZTk5Mjg3ZjYxZDE4YTI1NmRjZjgyN2M0MjhkMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9pbmRleC5odG1sCkBAIC0xMSw2ICsxMSw3IEBACiA8c2NyaXB0IHNyYz0iQ3Jl
YXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5cGUu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3dpenpsZU9wLmpzIj48L3NjcmlwdD4KIAogPHNjcmlw
dCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQW5vbnltb3Vz
VmFyaWFibGUuanMiPjwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>