<?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>156273</bug_id>
          
          <creation_ts>2016-04-05 19:22:37 -0700</creation_ts>
          <short_desc>Update master benchmark with SVG test</short_desc>
          <delta_ts>2016-04-06 18:48:03 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181129</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-05 19:22:37 -0700</bug_when>
    <thetext>Replace the masks test with an SVG test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181203</commentid>
    <comment_count>1</comment_count>
      <attachid>275762</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-06 02:13:03 -0700</bug_when>
    <thetext>Created attachment 275762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181376</commentid>
    <comment_count>2</comment_count>
      <attachid>275762</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-04-06 12:58:42 -0700</bug_when>
    <thetext>Comment on attachment 275762
Patch

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

&gt; PerformanceTests/Animometer/tests/dom/resources/dom-particles.js:17
&gt; +        this.position = new Point(emitLocation.x, emitLocation.y);

I think &quot;var emitLocation&quot; is not needed.

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:7
&gt; +        this.isClipPath = Stage.randomBool();

Why do not we always clip? Why do we need to test two different things: clipping using path and drawing a path?

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:31
&gt; +        this.position = new Point(emitLocation.x, emitLocation.y);

I think &quot;var emitLocation&quot; is not needed.

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:49
&gt; +            this.gradient.remove();

I am not sure about this one. Shouldn&apos;t the parent remove the child instead? i.e. this.stage.gradientsDefs.removeChild(this.gradient);

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:50
&gt; +        var gradientId = &quot;gradient-&quot; + this.stage.gradientsCounter++;

Why do we have to have a new incremented id every time we create the gradient? Didn&apos;t we remove the old one so we can reuse the same id?

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:62
&gt; +        }, {}, this.gradient);

Is it easier/faster to create a new gradient rather than changing the existing one?  I would suggest doing the following:

In svg-particles.html:
    &lt;defs id=&quot;gradients&quot;&gt;
        &lt;linearGradient id=&quot;default-gradient&quot;&gt;
           &lt;stop offset=&quot;0%&quot;/&gt;
           &lt;stop offset=&quot;100%&quot;/&gt;
       &lt;/linearGradient&gt;
    &lt;/defs&gt;

In the 3SVGParticle constructor:
    var defaultGradient = document.querySelector(&quot;#default-gradient&quot;);
    this.gradient = defaultGradient.cloneNode(true);
    this.gradient.id = &quot;gradient-&quot; + stage.gradientsCounter++;
    stage.gradientsDefs.appendChild(this.gradient);
    this.element.setAttribute(&quot;fill&quot;, &quot;url(#&quot; + this.gradient.id + &quot;)&quot;);

And in this function:
    var transform = this.stage.element.createSVGTransform();
    transform.setRotate(Stage.randomInt(0, 359), 0, 0);
    this.gradient.gradientTransform.baseVal.initialize(transform);

    var stops = this.gradient.querySelectorAll(&quot;stop&quot;);
    stops[0].setAttribute(&quot;stop-color&quot;, &quot;hsl(&quot; + this.stage.colorOffset + &quot;, 70%, 45%)&quot;);
    stops[1].setAttribute(&quot;stop-color&quot;, &quot;hsl(&quot; + ((this.stage.colorOffset + Stage.randomInt(50,100)) % 360) + &quot;, 70%, 65%)&quot;);

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:96
&gt; +        var particleTypes = document.getElementById(&quot;shapes&quot;).childNodes;
&gt; +        this.particleTypeCount = 0;
&gt; +        for (var i = 0; i &lt; particleTypes.length; ++i) {
&gt; +            if (particleTypes[i].nodeType == Node.ELEMENT_NODE)
&gt; +                this.particleTypeCount++;
&gt; +        }

Here you are looping through all the children nodes to know the number of &lt;clipPath&gt; inside &lt;defs&gt; element. But above when you were trying to get a random one of them you used the id: var shapeId = &quot;#shape-&quot; + ... I think this is inconsistent. So I would suggest: 

    this.particleTypeCount = document.querySelectorAll(&quot;[id^=&apos;shape-&apos;]&quot;).length; 
Or
    this.particleTypeCount = document.querySelectorAll(&quot;.shape&quot;).length; // assuming you add class=&quot;shape&quot; to the &lt;clip-path&gt; elements.

&gt; PerformanceTests/Animometer/tests/master/svg-particles.html:12
&gt; +            &lt;clipPath id=&quot;shape-1&quot; clipPathUnits=&quot;objectBoundingBox&quot;&gt;

Using ID&apos;s like &quot;shape-?&quot; makes it difficult to know what shape will be displayed. Can&apos;t we use real names like &quot;spades&quot;, hearts&quot;, etc.? Alternatively, adding a comment before each shape will make things clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181403</commentid>
    <comment_count>3</comment_count>
      <attachid>275762</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-06 14:16:13 -0700</bug_when>
    <thetext>Comment on attachment 275762
Patch

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

&gt;&gt; PerformanceTests/Animometer/tests/dom/resources/dom-particles.js:17
&gt;&gt; +        this.position = new Point(emitLocation.x, emitLocation.y);
&gt; 
&gt; I think &quot;var emitLocation&quot; is not needed.

Removed.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:7
&gt;&gt; +        this.isClipPath = Stage.randomBool();
&gt; 
&gt; Why do not we always clip? Why do we need to test two different things: clipping using path and drawing a path?

The intent is to combine a couple techniques into the same test.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:31
&gt;&gt; +        this.position = new Point(emitLocation.x, emitLocation.y);
&gt; 
&gt; I think &quot;var emitLocation&quot; is not needed.

Removed.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:49
&gt;&gt; +            this.gradient.remove();
&gt; 
&gt; I am not sure about this one. Shouldn&apos;t the parent remove the child instead? i.e. this.stage.gradientsDefs.removeChild(this.gradient);

It could, but not necessary.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:50
&gt;&gt; +        var gradientId = &quot;gradient-&quot; + this.stage.gradientsCounter++;
&gt; 
&gt; Why do we have to have a new incremented id every time we create the gradient? Didn&apos;t we remove the old one so we can reuse the same id?

Other tests do not do this (look at bouncing-svn-shapes.js). I don&apos;t think it&apos;s that big of a deal.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:62
&gt;&gt; +        }, {}, this.gradient);
&gt; 
&gt; Is it easier/faster to create a new gradient rather than changing the existing one?  I would suggest doing the following:
&gt; 
&gt; In svg-particles.html:
&gt;     &lt;defs id=&quot;gradients&quot;&gt;
&gt;         &lt;linearGradient id=&quot;default-gradient&quot;&gt;
&gt;            &lt;stop offset=&quot;0%&quot;/&gt;
&gt;            &lt;stop offset=&quot;100%&quot;/&gt;
&gt;        &lt;/linearGradient&gt;
&gt;     &lt;/defs&gt;
&gt; 
&gt; In the 3SVGParticle constructor:
&gt;     var defaultGradient = document.querySelector(&quot;#default-gradient&quot;);
&gt;     this.gradient = defaultGradient.cloneNode(true);
&gt;     this.gradient.id = &quot;gradient-&quot; + stage.gradientsCounter++;
&gt;     stage.gradientsDefs.appendChild(this.gradient);
&gt;     this.element.setAttribute(&quot;fill&quot;, &quot;url(#&quot; + this.gradient.id + &quot;)&quot;);
&gt; 
&gt; And in this function:
&gt;     var transform = this.stage.element.createSVGTransform();
&gt;     transform.setRotate(Stage.randomInt(0, 359), 0, 0);
&gt;     this.gradient.gradientTransform.baseVal.initialize(transform);
&gt; 
&gt;     var stops = this.gradient.querySelectorAll(&quot;stop&quot;);
&gt;     stops[0].setAttribute(&quot;stop-color&quot;, &quot;hsl(&quot; + this.stage.colorOffset + &quot;, 70%, 45%)&quot;);
&gt;     stops[1].setAttribute(&quot;stop-color&quot;, &quot;hsl(&quot; + ((this.stage.colorOffset + Stage.randomInt(50,100)) % 360) + &quot;, 70%, 65%)&quot;);

Done.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:96
&gt;&gt; +        }
&gt; 
&gt; Here you are looping through all the children nodes to know the number of &lt;clipPath&gt; inside &lt;defs&gt; element. But above when you were trying to get a random one of them you used the id: var shapeId = &quot;#shape-&quot; + ... I think this is inconsistent. So I would suggest: 
&gt; 
&gt;     this.particleTypeCount = document.querySelectorAll(&quot;[id^=&apos;shape-&apos;]&quot;).length; 
&gt; Or
&gt;     this.particleTypeCount = document.querySelectorAll(&quot;.shape&quot;).length; // assuming you add class=&quot;shape&quot; to the &lt;clip-path&gt; elements.

Done.

&gt;&gt; PerformanceTests/Animometer/tests/master/svg-particles.html:12
&gt;&gt; +            &lt;clipPath id=&quot;shape-1&quot; clipPathUnits=&quot;objectBoundingBox&quot;&gt;
&gt; 
&gt; Using ID&apos;s like &quot;shape-?&quot; makes it difficult to know what shape will be displayed. Can&apos;t we use real names like &quot;spades&quot;, hearts&quot;, etc.? Alternatively, adding a comment before each shape will make things clearer.

I didn&apos;t think this was an important detail, but I can add it as a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181424</commentid>
    <comment_count>4</comment_count>
      <attachid>275821</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-06 15:07:01 -0700</bug_when>
    <thetext>Created attachment 275821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181427</commentid>
    <comment_count>5</comment_count>
      <attachid>275821</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-04-06 15:13:42 -0700</bug_when>
    <thetext>Comment on attachment 275821
Patch

Looks good to me. Unofficial r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181433</commentid>
    <comment_count>6</comment_count>
      <attachid>275821</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-04-06 15:26:16 -0700</bug_when>
    <thetext>Comment on attachment 275821
Patch

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

&gt; PerformanceTests/Animometer/resources/runner/tests.js:49
&gt; +            name: &quot;Suits&quot;

I don&apos;t understand this name.

&gt; PerformanceTests/Animometer/tests/dom/particles.html:11
&gt; +            -webkit-mask-image: url(../resources/star.svg);
&gt; +            mask: url(../resources/star.svg#star-mask);
&gt; +        }

Is the 2nd mask to make it work in other browsers?

I was just asking smfr if we should unprefix.

&gt; PerformanceTests/Animometer/tests/dom/resources/dom-particles.js:30
&gt; +        this.element.style.transform = &quot;translate(&quot; + this.position.x + &quot;px, &quot; + this.position.y + &quot;px)&quot; + this.rotater.rotateZ();

Does this.rotator.rotateZ() always prefix a space character?

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:48
&gt; +        } else {
&gt; +            this.transformSuffix = &quot;scale(&quot; + this.size.x + &quot;)translate(-.5px,-.5px)&quot;;
&gt; +        }

Nit: single line block.

Also, I guess we do handle the case where there is no whitespace between functions!

&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:63
&gt; +        this.element.style.transform = &quot;translate(&quot; + this.position.x + &quot;px,&quot; + this.position.y + &quot;px)&quot; + this.rotater.rotateZ() + this.transformSuffix;

And here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181516</commentid>
    <comment_count>7</comment_count>
      <attachid>275821</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-06 18:46:21 -0700</bug_when>
    <thetext>Comment on attachment 275821
Patch

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

&gt;&gt; PerformanceTests/Animometer/resources/runner/tests.js:49
&gt;&gt; +            name: &quot;Suits&quot;
&gt; 
&gt; I don&apos;t understand this name.

Particle shapes are card suits.

&gt;&gt; PerformanceTests/Animometer/tests/dom/particles.html:11
&gt;&gt; +        }
&gt; 
&gt; Is the 2nd mask to make it work in other browsers?
&gt; 
&gt; I was just asking smfr if we should unprefix.

Yes, although one references a &lt;mask&gt; in &lt;defs&gt; and the other references a &lt;path&gt; outside of &lt;defs&gt;

&gt;&gt; PerformanceTests/Animometer/tests/dom/resources/dom-particles.js:30
&gt;&gt; +        this.element.style.transform = &quot;translate(&quot; + this.position.x + &quot;px, &quot; + this.position.y + &quot;px)&quot; + this.rotater.rotateZ();
&gt; 
&gt; Does this.rotator.rotateZ() always prefix a space character?

No, but it doesn&apos;t seem to matter.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:48
&gt;&gt; +        }
&gt; 
&gt; Nit: single line block.
&gt; 
&gt; Also, I guess we do handle the case where there is no whitespace between functions!

Removed. And yes.

&gt;&gt; PerformanceTests/Animometer/tests/master/resources/svg-particles.js:63
&gt;&gt; +        this.element.style.transform = &quot;translate(&quot; + this.position.x + &quot;px,&quot; + this.position.y + &quot;px)&quot; + this.rotater.rotateZ() + this.transformSuffix;
&gt; 
&gt; And here?

Same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181519</commentid>
    <comment_count>8</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-04-06 18:48:03 -0700</bug_when>
    <thetext>Committed r199134: &lt;http://trac.webkit.org/changeset/199134&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275762</attachid>
            <date>2016-04-06 02:13:03 -0700</date>
            <delta_ts>2016-04-06 15:06:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156273-20160406021304.patch</filename>
            <type>text/plain</type>
            <size>20192</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NzI1CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci90ZXN0cy5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCmluZGV4IGMz
YmZiYzc3YjBiNWI5Y2VmYmEyNjg2OWM0ZWZlMzAwN2I0ZWYxNDkuLmUzMjMzZjU2YWMwNTZmMjgy
YTI4NjBkZDE0ZmJiMWNmZDQ5ZmY1N2IgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCkBAIC0xNzAs
NiArMTcwLDEwIEBAIFN1aXRlcy5wdXNoKG5ldyBTdWl0ZSgiSFRNTCBzdWl0ZSIsCiAgICAgICAg
ICAgICBuYW1lOiAiTGVhdmVzIDIuMCIKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAg
ICAgdXJsOiAiZG9tL3BhcnRpY2xlcy5odG1sIiwKKyAgICAgICAgICAgIG5hbWU6ICJET00gcGFy
dGljbGVzLCBTVkcgbWFza3MiCisgICAgICAgIH0sCisgICAgICAgIHsKICAgICAgICAgICAgIHVy
bDogImRvbS9jb21wb3NpdGluZy10cmFuc2Zvcm1zLmh0bWw/cGFydGljbGVXaWR0aD01MCZwYXJ0
aWNsZUhlaWdodD01MCZmaWx0ZXJzPXllcyZpbWFnZVNyYz0uLi9yZXNvdXJjZXMveWluLXlhbmcu
c3ZnIiwKICAgICAgICAgICAgIG5hbWU6ICJDb21wb3NpdGVkIFRyYW5zZm9ybXMiCiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVu
bmVyL3Rlc3RzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5u
ZXIvdGVzdHMuanMKaW5kZXggYjIzNTI0OTE4ODhiNjk5YzNhY2E5YjljMWI4MzdkNmE2ZWY5ZWNk
My4uZTYxNjIyZTgxMjVlMzU1MGVkNjNkOWNmZmI5YjYyNmZhNTgwNmNlMCAxMDA2NDQKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvdGVzdHMuanMKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvdGVzdHMuanMK
QEAgLTQ1LDggKzQ1LDggQEAgU3VpdGVzLnB1c2gobmV3IFN1aXRlKCJBbmltb21ldGVyIiwKICAg
ICAgICAgICAgIG5hbWU6ICJEZXNpZ24iCiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHVybDogIm1hc3Rlci9wYXJ0aWNsZXMuaHRtbCIsCi0gICAgICAgICAgICBuYW1lOiAiRE9N
IHBhcnRpY2xlcywgU1ZHIG1hc2tzIgorICAgICAgICAgICAgdXJsOiAibWFzdGVyL3N2Zy1wYXJ0
aWNsZXMuaHRtbCIsCisgICAgICAgICAgICBuYW1lOiAiU3VpdHMiCiAgICAgICAgIH0sCiAgICAg
XQogKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvZG9t
L3BhcnRpY2xlcy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL2RvbS9w
YXJ0aWNsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGMwOTM5OWM5NDdjYTI5Njc5ZWQwYmZmOTdkYTQ2
ZjA0MTVkYTRkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVy
L3Rlc3RzL2RvbS9wYXJ0aWNsZXMuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3Jlc291cmNlcy9zdGFn
ZS5jc3MiPgorICAgIDxzdHlsZT4KKyAgICAgICAgI3N0YWdlIGRpdiB7CisgICAgICAgICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybCgu
Li9yZXNvdXJjZXMvc3Rhci5zdmcpOworICAgICAgICAgICAgbWFzazogdXJsKC4uL3Jlc291cmNl
cy9zdGFyLnN2ZyNzdGFyLW1hc2spOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorICAgIDxkaXYgaWQ9InN0YWdlIj48L2Rpdj4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3N0cmluZ3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL21hdGguanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvbWFpbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL21hc3Rlci9yZXNv
dXJjZXMvcGFydGljbGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2RvbS1wYXJ0aWNsZXMuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL2RvbS9yZXNvdXJjZXMvZG9tLXBh
cnRpY2xlcy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9kb20vcmVzb3Vy
Y2VzL2RvbS1wYXJ0aWNsZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY1MTJiZDk2NzU3MDFmMDQ2NDUyN2Ey
OTRmMjE0NDY0MjUzYTEzMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci90ZXN0cy9kb20vcmVzb3VyY2VzL2RvbS1wYXJ0aWNsZXMuanMKQEAgLTAsMCArMSw3
NCBAQAorKGZ1bmN0aW9uKCkgeworCitET01QYXJ0aWNsZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJj
bGFzcyhQYXJ0aWNsZSwKKyAgICBmdW5jdGlvbihzdGFnZSkKKyAgICB7CisgICAgICAgIHRoaXMu
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBzdGFnZS5l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisKKyAgICAgICAgUGFydGljbGUuY2Fs
bCh0aGlzLCBzdGFnZSk7CisgICAgfSwgeworCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIFBhcnRpY2xlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOworCisgICAgICAg
IHZhciBlbWl0TG9jYXRpb24gPSBTdGFnZS5yYW5kb21FbGVtZW50SW5BcnJheSh0aGlzLnN0YWdl
LmVtaXRMb2NhdGlvbik7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBuZXcgUG9pbnQoZW1pdExv
Y2F0aW9uLngsIGVtaXRMb2NhdGlvbi55KTsKKworICAgICAgICB2YXIgYW5nbGUgPSBTdGFnZS5y
YW5kb21JbnQoMCwgdGhpcy5zdGFnZS5lbWl0U3RlcHMpIC8gdGhpcy5zdGFnZS5lbWl0U3RlcHMg
KiBNYXRoLlBJICogMiArIFN0YWdlLmRhdGVDb3VudGVyVmFsdWUoMTAwKSAqIHRoaXMuc3RhZ2Uu
ZW1pc3Npb25TcGluOworICAgICAgICB0aGlzLnZlbG9jaXR5ID0gbmV3IFBvaW50KE1hdGguc2lu
KGFuZ2xlKSwgTWF0aC5jb3MoYW5nbGUpKQorICAgICAgICAgICAgLm11bHRpcGx5KFN0YWdlLnJh
bmRvbSguNSwgMi41KSk7CisKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gdGhp
cy5zaXplLnggKyAicHgiOworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhp
cy5zaXplLnkgKyAicHgiOworICAgICAgICB0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ID0gKHRoaXMu
c3RhZ2UuY29sb3JPZmZzZXQgKyAxKSAlIDM2MDsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxl
LmJhY2tncm91bmRDb2xvciA9ICJoc2woIiArIHRoaXMuc3RhZ2UuY29sb3JPZmZzZXQgKyAiLCA3
MCUsIDQ1JSkiOworICAgIH0sCisKKyAgICBtb3ZlOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZSgiICsgdGhpcy5wb3Np
dGlvbi54ICsgInB4LCAiICsgdGhpcy5wb3NpdGlvbi55ICsgInB4KSIgKyB0aGlzLnJvdGF0ZXIu
cm90YXRlWigpOworICAgIH0KK30pOworCitET01QYXJ0aWNsZVN0YWdlID0gVXRpbGl0aWVzLmNy
ZWF0ZVN1YmNsYXNzKFBhcnRpY2xlc1N0YWdlLAorICAgIGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIFBhcnRpY2xlc1N0YWdlLmNhbGwodGhpcyk7CisgICAgfSwgeworCisgICAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24oYmVuY2htYXJrKQorICAgIHsKKyAgICAgICAgUGFydGljbGVzU3RhZ2UucHJv
dG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBiZW5jaG1hcmspOworICAgICAgICB0aGlzLmVt
aXNzaW9uU3BpbiA9IFN0YWdlLnJhbmRvbSgwLCAzKTsKKyAgICAgICAgdGhpcy5lbWl0U3RlcHMg
PSBTdGFnZS5yYW5kb21JbnQoNCwgNik7CisgICAgICAgIHRoaXMuZW1pdExvY2F0aW9uID0gWwor
ICAgICAgICAgICAgbmV3IFBvaW50KHRoaXMuc2l6ZS54ICogLjI1LCB0aGlzLnNpemUueSAqIC4z
MzMpLAorICAgICAgICAgICAgbmV3IFBvaW50KHRoaXMuc2l6ZS54ICogLjUsIHRoaXMuc2l6ZS55
ICogLjI1KSwKKyAgICAgICAgICAgIG5ldyBQb2ludCh0aGlzLnNpemUueCAqIC43NSwgdGhpcy5z
aXplLnkgKiAuMzMzKQorICAgICAgICBdOworICAgICAgICB0aGlzLmNvbG9yT2Zmc2V0ID0gU3Rh
Z2UucmFuZG9tSW50KDAsIDM1OSk7CisgICAgfSwKKworICAgIGNyZWF0ZVBhcnRpY2xlOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IERPTVBhcnRpY2xlKHRoaXMpOworICAg
IH0sCisKKyAgICB3aWxsUmVtb3ZlUGFydGljbGU6IGZ1bmN0aW9uKHBhcnRpY2xlKQorICAgIHsK
KyAgICAgICAgcGFydGljbGUuZWxlbWVudC5yZW1vdmUoKTsKKyAgICB9Cit9KTsKKworRE9NUGFy
dGljbGVCZW5jaG1hcmsgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQmVuY2htYXJrLAorICAg
IGZ1bmN0aW9uKG9wdGlvbnMpCisgICAgeworICAgICAgICBCZW5jaG1hcmsuY2FsbCh0aGlzLCBu
ZXcgRE9NUGFydGljbGVTdGFnZSgpLCBvcHRpb25zKTsKKyAgICB9CispOworCit3aW5kb3cuYmVu
Y2htYXJrQ2xhc3MgPSBET01QYXJ0aWNsZUJlbmNobWFyazsKKworfSkoKTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcGFydGljbGVzLmh0bWwg
Yi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3BhcnRpY2xlcy5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGYyODM2NGM3YmMzZmQwZjNjNWI4Nzkx
YzM2ZTYxNTlhZDRhMGIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcGFydGljbGVz
Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxo
dG1sPgotPGhlYWQ+Ci0gICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgotICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3Jlc291cmNlcy9zdGFnZS5jc3Mi
PgotICAgIDxzdHlsZT4KLSAgICAgICAgI3N0YWdlIGRpdiB7Ci0gICAgICAgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgICAgICAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybCguLi9yZXNv
dXJjZXMvc3Rhci5zdmcpOwotICAgICAgICAgICAgbWFzazogdXJsKC4uL3Jlc291cmNlcy9zdGFy
LnN2ZyNzdGFyLW1hc2spOwotICAgICAgICB9Ci0gICAgPC9zdHlsZT4KLTwvaGVhZD4KLTxib2R5
PgotICAgIDxkaXYgaWQ9InN0YWdlIj48L2Rpdj4KLSAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3N0cmluZ3MuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvZXh0ZW5zaW9ucy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9zdGF0aXN0aWNzLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL21hdGguanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
bWFpbi5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9wYXJ0aWNsZXMu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZG9tLXBhcnRpY2xlcy5q
cyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9kb20tcGFydGljbGVzLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZG9tLXBh
cnRpY2xlcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY1MTJiZDk2NzU3MDFm
MDQ2NDUyN2EyOTRmMjE0NDY0MjUzYTEzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVy
L3Jlc291cmNlcy9kb20tcGFydGljbGVzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBA
QAotKGZ1bmN0aW9uKCkgewotCi1ET01QYXJ0aWNsZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFz
cyhQYXJ0aWNsZSwKLSAgICBmdW5jdGlvbihzdGFnZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBzdGFnZS5lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7Ci0KLSAgICAgICAgUGFydGljbGUuY2FsbCh0
aGlzLCBzdGFnZSk7Ci0gICAgfSwgewotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIFBhcnRpY2xlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOwotCi0gICAgICAgIHZh
ciBlbWl0TG9jYXRpb24gPSBTdGFnZS5yYW5kb21FbGVtZW50SW5BcnJheSh0aGlzLnN0YWdlLmVt
aXRMb2NhdGlvbik7Ci0gICAgICAgIHRoaXMucG9zaXRpb24gPSBuZXcgUG9pbnQoZW1pdExvY2F0
aW9uLngsIGVtaXRMb2NhdGlvbi55KTsKLQotICAgICAgICB2YXIgYW5nbGUgPSBTdGFnZS5yYW5k
b21JbnQoMCwgdGhpcy5zdGFnZS5lbWl0U3RlcHMpIC8gdGhpcy5zdGFnZS5lbWl0U3RlcHMgKiBN
YXRoLlBJICogMiArIFN0YWdlLmRhdGVDb3VudGVyVmFsdWUoMTAwKSAqIHRoaXMuc3RhZ2UuZW1p
c3Npb25TcGluOwotICAgICAgICB0aGlzLnZlbG9jaXR5ID0gbmV3IFBvaW50KE1hdGguc2luKGFu
Z2xlKSwgTWF0aC5jb3MoYW5nbGUpKQotICAgICAgICAgICAgLm11bHRpcGx5KFN0YWdlLnJhbmRv
bSguNSwgMi41KSk7Ci0KLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy5z
aXplLnggKyAicHgiOwotICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5z
aXplLnkgKyAicHgiOwotICAgICAgICB0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ID0gKHRoaXMuc3Rh
Z2UuY29sb3JPZmZzZXQgKyAxKSAlIDM2MDsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJh
Y2tncm91bmRDb2xvciA9ICJoc2woIiArIHRoaXMuc3RhZ2UuY29sb3JPZmZzZXQgKyAiLCA3MCUs
IDQ1JSkiOwotICAgIH0sCi0KLSAgICBtb3ZlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZSgiICsgdGhpcy5wb3NpdGlv
bi54ICsgInB4LCAiICsgdGhpcy5wb3NpdGlvbi55ICsgInB4KSIgKyB0aGlzLnJvdGF0ZXIucm90
YXRlWigpOwotICAgIH0KLX0pOwotCi1ET01QYXJ0aWNsZVN0YWdlID0gVXRpbGl0aWVzLmNyZWF0
ZVN1YmNsYXNzKFBhcnRpY2xlc1N0YWdlLAotICAgIGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IFBhcnRpY2xlc1N0YWdlLmNhbGwodGhpcyk7Ci0gICAgfSwgewotCi0gICAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24oYmVuY2htYXJrKQotICAgIHsKLSAgICAgICAgUGFydGljbGVzU3RhZ2UucHJvdG90
eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBiZW5jaG1hcmspOwotICAgICAgICB0aGlzLmVtaXNz
aW9uU3BpbiA9IFN0YWdlLnJhbmRvbSgwLCAzKTsKLSAgICAgICAgdGhpcy5lbWl0U3RlcHMgPSBT
dGFnZS5yYW5kb21JbnQoNCwgNik7Ci0gICAgICAgIHRoaXMuZW1pdExvY2F0aW9uID0gWwotICAg
ICAgICAgICAgbmV3IFBvaW50KHRoaXMuc2l6ZS54ICogLjI1LCB0aGlzLnNpemUueSAqIC4zMzMp
LAotICAgICAgICAgICAgbmV3IFBvaW50KHRoaXMuc2l6ZS54ICogLjUsIHRoaXMuc2l6ZS55ICog
LjI1KSwKLSAgICAgICAgICAgIG5ldyBQb2ludCh0aGlzLnNpemUueCAqIC43NSwgdGhpcy5zaXpl
LnkgKiAuMzMzKQotICAgICAgICBdOwotICAgICAgICB0aGlzLmNvbG9yT2Zmc2V0ID0gU3RhZ2Uu
cmFuZG9tSW50KDAsIDM1OSk7Ci0gICAgfSwKLQotICAgIGNyZWF0ZVBhcnRpY2xlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IERPTVBhcnRpY2xlKHRoaXMpOwotICAgIH0s
Ci0KLSAgICB3aWxsUmVtb3ZlUGFydGljbGU6IGZ1bmN0aW9uKHBhcnRpY2xlKQotICAgIHsKLSAg
ICAgICAgcGFydGljbGUuZWxlbWVudC5yZW1vdmUoKTsKLSAgICB9Ci19KTsKLQotRE9NUGFydGlj
bGVCZW5jaG1hcmsgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQmVuY2htYXJrLAotICAgIGZ1
bmN0aW9uKG9wdGlvbnMpCi0gICAgewotICAgICAgICBCZW5jaG1hcmsuY2FsbCh0aGlzLCBuZXcg
RE9NUGFydGljbGVTdGFnZSgpLCBvcHRpb25zKTsKLSAgICB9Ci0pOwotCi13aW5kb3cuYmVuY2ht
YXJrQ2xhc3MgPSBET01QYXJ0aWNsZUJlbmNobWFyazsKLQotfSkoKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL3BhcnRpY2xl
cy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2Vz
L3BhcnRpY2xlcy5qcwppbmRleCBmNmZlYmIwMDgxOTE1NDg1Yjk5YTk5MTk2MGU2ZjU1NGZiNzU0
M2VlLi4xZGUzZTc4MjY3YzIwZTZiZTlkY2RlZjA2ZjI2NDY5MDc2MTRlYzkzIDEwMDY0NAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9wYXJ0
aWNsZXMuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9y
ZXNvdXJjZXMvcGFydGljbGVzLmpzCkBAIC0xNSw3ICsxNSw4IEBAIFBhcnRpY2xlLnByb3RvdHlw
ZSA9CiAgICAgewogICAgICAgICB2YXIgcmFuZFNpemUgPSBNYXRoLnJvdW5kKE1hdGgucG93KFBz
ZXVkby5yYW5kb20oKSwgNCkgKiB0aGlzLnNpemVSYW5nZSArIHRoaXMuc2l6ZU1pbmltdW0pOwog
ICAgICAgICB0aGlzLnNpemUgPSBuZXcgUG9pbnQocmFuZFNpemUsIHJhbmRTaXplKTsKLSAgICAg
ICAgdGhpcy5tYXhQb3NpdGlvbiA9IHRoaXMuc3RhZ2Uuc2l6ZS5zdWJ0cmFjdCh0aGlzLnNpemUp
OworICAgICAgICB0aGlzLm1pblBvc2l0aW9uID0gdGhpcy5zaXplLm11bHRpcGx5KC41KTsKKyAg
ICAgICAgdGhpcy5tYXhQb3NpdGlvbiA9IHRoaXMuc3RhZ2Uuc2l6ZS5zdWJ0cmFjdCh0aGlzLm1p
blBvc2l0aW9uKTsKICAgICB9LAogCiAgICAgYW5pbWF0ZTogZnVuY3Rpb24odGltZURlbHRhKQpA
QCAtMzAsMTEgKzMxLDExIEBAIFBhcnRpY2xlLnByb3RvdHlwZSA9CiAgICAgICAgICAgICBpZiAo
dGhpcy52ZWxvY2l0eS54ID4gMCkKICAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LnggKj0g
LTE7CiAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSB0aGlzLm1heFBvc2l0aW9uLng7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi54IDwgMCkgeworICAgICAgICB9IGVsc2Ug
aWYgKHRoaXMucG9zaXRpb24ueCA8IHRoaXMubWluUG9zaXRpb24ueCkgewogICAgICAgICAgICAg
Ly8gSWYgcGFydGljbGUgaXMgZ29pbmcgdG8gbW92ZSBvZmYgbGVmdCBzaWRlCiAgICAgICAgICAg
ICBpZiAodGhpcy52ZWxvY2l0eS54IDwgMCkKICAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5
LnggKj0gLTE7Ci0gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnggPSAwOworICAgICAgICAgICAg
dGhpcy5wb3NpdGlvbi54ID0gdGhpcy5taW5Qb3NpdGlvbi54OwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gSWYgcGFydGljbGUgaXMgZ29pbmcgdG8gbW92ZSBvZmYgYm90dG9tIHNpZGUKQEAgLTUw
LDE0ICs1MSwxNCBAQCBQYXJ0aWNsZS5wcm90b3R5cGUgPQogICAgICAgICAgICAgICAgICAgICB0
aGlzLnZlbG9jaXR5LnkgKj0gLTAuOTk5OwogICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24u
eSA9IHRoaXMubWF4UG9zaXRpb24ueTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLnBvc2l0aW9uLnkgPCAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlv
bi55IDwgdGhpcy5taW5Qb3NpdGlvbi55KSB7CiAgICAgICAgICAgICAvLyBJZiBwYXJ0aWNsZSBp
cyBnb2luZyB0byBtb3ZlIG9mZiB0b3Agc2lkZQogICAgICAgICAgICAgdmFyIG1hZ25pdHVkZSA9
IHRoaXMudmVsb2NpdHkubGVuZ3RoKCk7CiAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LnggKj0g
MS41ICsgLjAwNSAqIHRoaXMuc2l6ZS54OwogICAgICAgICAgICAgdGhpcy52ZWxvY2l0eSA9IHRo
aXMudmVsb2NpdHkubm9ybWFsaXplKCkubXVsdGlwbHkobWFnbml0dWRlKTsKICAgICAgICAgICAg
IGlmICh0aGlzLnZlbG9jaXR5LnkgPCAwKQogICAgICAgICAgICAgICAgIHRoaXMudmVsb2NpdHku
eSAqPSAtMC45OTg7Ci0gICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSAwOworICAgICAgICAg
ICAgdGhpcy5wb3NpdGlvbi55ID0gdGhpcy5taW5Qb3NpdGlvbi55OwogICAgICAgICB9CiAKICAg
ICAgICAgdGhpcy5tb3ZlKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0
ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9zdmctcGFydGljbGVzLmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvc3ZnLXBhcnRpY2xlcy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YzE3ZDlkNzU1MDU5NjBhMzU1MTgxNjYzMTY3ZjEyZGFkODk3ZWViCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9y
ZXNvdXJjZXMvc3ZnLXBhcnRpY2xlcy5qcwpAQCAtMCwwICsxLDEyNCBAQAorKGZ1bmN0aW9uKCkg
eworCitTVkdQYXJ0aWNsZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhQYXJ0aWNsZSwKKyAg
ICBmdW5jdGlvbihzdGFnZSkKKyAgICB7CisgICAgICAgIHZhciBzaGFwZUlkID0gIiNzaGFwZS0i
ICsgU3RhZ2UucmFuZG9tSW50KDEsIHN0YWdlLnBhcnRpY2xlVHlwZUNvdW50KTsKKyAgICAgICAg
dGhpcy5pc0NsaXBQYXRoID0gU3RhZ2UucmFuZG9tQm9vbCgpOworICAgICAgICBpZiAodGhpcy5p
c0NsaXBQYXRoKSB7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBVdGlsaXRpZXMuY3JlYXRl
U1ZHRWxlbWVudCgicmVjdCIsIHsKKyAgICAgICAgICAgICAgICB4OiAwLAorICAgICAgICAgICAg
ICAgIHk6IDAsCisgICAgICAgICAgICAgICAgImNsaXAtcGF0aCI6ICJ1cmwoIiArIHNoYXBlSWQg
KyAiKSIKKyAgICAgICAgICAgIH0sIHt9LCBzdGFnZS5lbGVtZW50KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHZhciBzaGFwZVBhdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNo
YXBlSWQgKyAiIHBhdGgiKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IHNoYXBlUGF0aC5j
bG9uZU5vZGUoKTsKKyAgICAgICAgICAgIHN0YWdlLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5l
bGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhcnRpY2xlLmNhbGwodGhpcywgc3RhZ2Up
OworICAgIH0sIHsKKworICAgIHNpemVNaW5pbXVtOiAzMCwKKyAgICBzaXplUmFuZ2U6IDQwLAor
CisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFBhcnRpY2xlLnByb3RvdHlw
ZS5yZXNldC5jYWxsKHRoaXMpOworCisgICAgICAgIHZhciBlbWl0TG9jYXRpb24gPSBTdGFnZS5y
YW5kb21FbGVtZW50SW5BcnJheSh0aGlzLnN0YWdlLmVtaXRMb2NhdGlvbik7CisgICAgICAgIHRo
aXMucG9zaXRpb24gPSBuZXcgUG9pbnQoZW1pdExvY2F0aW9uLngsIGVtaXRMb2NhdGlvbi55KTsK
KworICAgICAgICB2YXIgdmVsb2NpdHlNYWduaXR1ZGUgPSBTdGFnZS5yYW5kb20oLjUsIDIuNSk7
CisgICAgICAgIHZhciBhbmdsZSA9IFN0YWdlLnJhbmRvbUludCgwLCB0aGlzLnN0YWdlLmVtaXRT
dGVwcykgLyB0aGlzLnN0YWdlLmVtaXRTdGVwcyAqIE1hdGguUEkgKiAyICsgU3RhZ2UuZGF0ZUNv
dW50ZXJWYWx1ZSgxMDAwKSAqIHRoaXMuc3RhZ2UuZW1pc3Npb25TcGluICsgdmVsb2NpdHlNYWdu
aXR1ZGU7CisgICAgICAgIHRoaXMudmVsb2NpdHkgPSBuZXcgUG9pbnQoTWF0aC5zaW4oYW5nbGUp
LCBNYXRoLmNvcyhhbmdsZSkpCisgICAgICAgICAgICAubXVsdGlwbHkodmVsb2NpdHlNYWduaXR1
ZGUpOworCisgICAgICAgIGlmICh0aGlzLmlzQ2xpcFBhdGgpIHsKKyAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwgdGhpcy5zaXplLngpOworICAgICAgICAgICAg
dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgdGhpcy5zaXplLnkpOworICAgICAg
ICAgICAgdGhpcy50cmFuc2Zvcm1TdWZmaXggPSAidHJhbnNsYXRlKC0iICsgKHRoaXMuc2l6ZS54
ID4+IDEpICsgInB4LC0iICsgKHRoaXMuc2l6ZS55ID4+IDEpICsgInB4KSI7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVN1ZmZpeCA9ICJzY2FsZSgiICsgdGhp
cy5zaXplLnggKyAiKXRyYW5zbGF0ZSgtLjVweCwtLjVweCkiOworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5zdGFnZS5jb2xvck9mZnNldCA9ICh0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ICsgLjUp
ICUgMzYwOworCisgICAgICAgIGlmICh0aGlzLmdyYWRpZW50KQorICAgICAgICAgICAgdGhpcy5n
cmFkaWVudC5yZW1vdmUoKTsKKyAgICAgICAgdmFyIGdyYWRpZW50SWQgPSAiZ3JhZGllbnQtIiAr
IHRoaXMuc3RhZ2UuZ3JhZGllbnRzQ291bnRlcisrOworICAgICAgICB0aGlzLmdyYWRpZW50ID0g
VXRpbGl0aWVzLmNyZWF0ZVNWR0VsZW1lbnQoImxpbmVhckdyYWRpZW50IiwgeworICAgICAgICAg
ICAgaWQ6IGdyYWRpZW50SWQsCisgICAgICAgICAgICBncmFkaWVudFRyYW5zZm9ybTogInJvdGF0
ZSgiICsgU3RhZ2UucmFuZG9tSW50KDAsIDM1OSkgKyAiKSIKKyAgICAgICAgfSwge30sIHRoaXMu
c3RhZ2UuZ3JhZGllbnRzRGVmcyk7CisgICAgICAgIFV0aWxpdGllcy5jcmVhdGVTVkdFbGVtZW50
KCJzdG9wIiwgeworICAgICAgICAgICAgb2Zmc2V0OiAiMCUiLAorICAgICAgICAgICAgInN0b3At
Y29sb3IiOiAiaHNsKCIgKyB0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ICsgIiwgNzAlLCA0NSUpIgor
ICAgICAgICB9LCB7fSwgdGhpcy5ncmFkaWVudCk7CisgICAgICAgIFV0aWxpdGllcy5jcmVhdGVT
VkdFbGVtZW50KCJzdG9wIiwgeworICAgICAgICAgICAgb2Zmc2V0OiAiMTAwJSIsCisgICAgICAg
ICAgICAic3RvcC1jb2xvciI6ICJoc2woIiArICgodGhpcy5zdGFnZS5jb2xvck9mZnNldCArIFN0
YWdlLnJhbmRvbUludCg1MCwxMDApKSAlIDM2MCkgKyAiLCA3MCUsIDY1JSkiCisgICAgICAgIH0s
IHt9LCB0aGlzLmdyYWRpZW50KTsKKworICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRl
KCJmaWxsIiwgInVybCgjIiArIGdyYWRpZW50SWQgKyAiKSIpOworICAgIH0sCisKKyAgICBtb3Zl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3Jt
ID0gInRyYW5zbGF0ZSgiICsgdGhpcy5wb3NpdGlvbi54ICsgInB4LCIgKyB0aGlzLnBvc2l0aW9u
LnkgKyAicHgpIiArIHRoaXMucm90YXRlci5yb3RhdGVaKCkgKyB0aGlzLnRyYW5zZm9ybVN1ZmZp
eDsKKyAgICB9Cit9KTsKKworU1ZHUGFydGljbGVTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJj
bGFzcyhQYXJ0aWNsZXNTdGFnZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgICBQYXJ0
aWNsZXNTdGFnZS5jYWxsKHRoaXMpOworICAgIH0sIHsKKworICAgIGluaXRpYWxpemU6IGZ1bmN0
aW9uKGJlbmNobWFyaykKKyAgICB7CisgICAgICAgIFBhcnRpY2xlc1N0YWdlLnByb3RvdHlwZS5p
bml0aWFsaXplLmNhbGwodGhpcywgYmVuY2htYXJrKTsKKyAgICAgICAgdGhpcy5lbWlzc2lvblNw
aW4gPSBTdGFnZS5yYW5kb20oMCwgMyk7CisgICAgICAgIHRoaXMuZW1pdFN0ZXBzID0gU3RhZ2Uu
cmFuZG9tSW50KDQsIDYpOworICAgICAgICB0aGlzLmVtaXRMb2NhdGlvbiA9IFsKKyAgICAgICAg
ICAgIG5ldyBQb2ludCh0aGlzLnNpemUueCAqIC4yNSwgdGhpcy5zaXplLnkgKiAuMzMzKSwKKyAg
ICAgICAgICAgIG5ldyBQb2ludCh0aGlzLnNpemUueCAqIC41LCB0aGlzLnNpemUueSAqIC4yNSks
CisgICAgICAgICAgICBuZXcgUG9pbnQodGhpcy5zaXplLnggKiAuNzUsIHRoaXMuc2l6ZS55ICog
LjMzMykKKyAgICAgICAgXTsKKyAgICAgICAgdGhpcy5jb2xvck9mZnNldCA9IFN0YWdlLnJhbmRv
bUludCgwLCAzNTkpOworCisgICAgICAgIHZhciBwYXJ0aWNsZVR5cGVzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInNoYXBlcyIpLmNoaWxkTm9kZXM7CisgICAgICAgIHRoaXMucGFydGljbGVU
eXBlQ291bnQgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRpY2xlVHlwZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChwYXJ0aWNsZVR5cGVzW2ldLm5vZGVUeXBl
ID09IE5vZGUuRUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgICAgIHRoaXMucGFydGljbGVUeXBl
Q291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZ3JhZGllbnRzRGVmcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJncmFkaWVudHMiKTsKKyAgICAgICAgdGhpcy5ncmFkaWVudHND
b3VudGVyID0gMDsKKyAgICB9LAorCisgICAgY3JlYXRlUGFydGljbGU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgU1ZHUGFydGljbGUodGhpcyk7CisgICAgfSwKKworICAg
IHdpbGxSZW1vdmVQYXJ0aWNsZTogZnVuY3Rpb24ocGFydGljbGUpCisgICAgeworICAgICAgICBw
YXJ0aWNsZS5lbGVtZW50LnJlbW92ZSgpOworICAgICAgICBpZiAocGFydGljbGUuZ3JhZGllbnQp
CisgICAgICAgICAgICBwYXJ0aWNsZS5ncmFkaWVudC5yZW1vdmUoKTsKKyAgICB9Cit9KTsKKwor
U1ZHUGFydGljbGVCZW5jaG1hcmsgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQmVuY2htYXJr
LAorICAgIGZ1bmN0aW9uKG9wdGlvbnMpCisgICAgeworICAgICAgICBCZW5jaG1hcmsuY2FsbCh0
aGlzLCBuZXcgU1ZHUGFydGljbGVTdGFnZSgpLCBvcHRpb25zKTsKKyAgICB9CispOworCit3aW5k
b3cuYmVuY2htYXJrQ2xhc3MgPSBTVkdQYXJ0aWNsZUJlbmNobWFyazsKKworfSkoKTsKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvc3ZnLXBhcnRp
Y2xlcy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9zdmct
cGFydGljbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODY5MDZkOWNmMzI5ZWUwZDUwMzFmZjAyMTEyZDNm
YmU0MmExN2ExZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRl
ci90ZXN0cy9tYXN0ZXIvc3ZnLXBhcnRpY2xlcy5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
ICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vcmVzb3Vy
Y2VzL3N0YWdlLmNzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8c3ZnIGlkPSJzdGFnZSI+Cisg
ICAgICAgIDxkZWZzIGlkPSJncmFkaWVudHMiPgorICAgICAgICA8L2RlZnM+CisgICAgICAgIDxk
ZWZzIGlkPSJzaGFwZXMiPgorICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJzaGFwZS0xIiBjbGlw
UGF0aFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+CisgICAgICAgICAgICAgICAgPHBhdGggZD0i
TTAuNSwwLjIxNCBDMC40NjYsMC4xNjQgMC4zNjksMC4wOSAwLjI2NywwLjA5MiBDMC4xMzcsMC4w
OTMgLTAsMC4xODYgLTAsMC4zNDUgQy0wLDAuNjU5IDAuMzk1LDAuNjU1IDAuNSwwLjkzOCBDMC42
MDUsMC42NTUgMSwwLjY1OSAxLDAuMzQ1IEMxLDAuMTg2IDAuODYzLDAuMDkzIDAuNzMzLDAuMDky
IEMwLjYzMSwwLjA5IDAuNTM0LDAuMTY0IDAuNSwwLjIxNCB6Ii8+CisgICAgICAgICAgICA8L2Ns
aXBQYXRoPgorICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJzaGFwZS0yIiBjbGlwUGF0aFVuaXRz
PSJvYmplY3RCb3VuZGluZ0JveCI+CisgICAgICAgICAgICAgICAgPHBhdGggZD0iTTAuNSwwLjAx
OCBDMC42MiwwLjAxOCAwLjcxOCwwLjExNSAwLjcxOCwwLjIzNSBDMC43MTgsMC4zMSAwLjY3OSww
LjM3NyAwLjYxOCwwLjQxOCBDMC42NTcsMC4zOTMgMC43MDMsMC4zODIgMC43NDksMC4zODEgQzAu
ODY5LDAuMzgxIDAuOTY3LDAuNDY4IDAuOTY3LDAuNTg4IEMwLjk2NywwLjcwOSAwLjg2OSwwLjgw
NiAwLjc0OSwwLjgwNiBDMC42NjQsMC44MDUgMC41NzgsMC43NTYgMC41NDIsMC42NzcgQzAuNTM4
LDAuNzk5IDAuNjA1LDAuOTE4IDAuNzA4LDAuOTgyIEMwLjU5MywwLjk0MSAwLjQwNywwLjk0MSAw
LjI5MiwwLjk4MiBDMC4zOTcsMC45MTcgMC40NjEsMC43OTkgMC40NTksMC42NzYgQzAuNDIyLDAu
NzU2IDAuMzM3LDAuODA0IDAuMjUxLDAuODA2IEMwLjEzMSwwLjgwNiAwLjAzMywwLjcwOSAwLjAz
MywwLjU4OCBDMC4wMzMsMC40NjggMC4xMzEsMC4zODEgMC4yNTEsMC4zODEgQzAuMjk4LDAuMzgg
MC4zNDIsMC4zOTUgMC4zODIsMC40MTggQzAuMzE5LDAuMzc4IDAuMjg0LDAuMzA5IDAuMjgyLDAu
MjM1IEMwLjI4MiwwLjExNSAwLjM4LDAuMDE4IDAuNSwwLjAxOCB6Ii8+CisgICAgICAgICAgICA8
L2NsaXBQYXRoPgorICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJzaGFwZS0zIiBjbGlwUGF0aFVu
aXRzPSJvYmplY3RCb3VuZGluZ0JveCI+CisgICAgICAgICAgICAgICAgPHBhdGggZD0iTTAuMzAx
LDAuOTgyIEMwLjM3NCwwLjk0MSAwLjQ2OSwwLjgwNCAwLjQ2OSwwLjcyIEMwLjM3NCwwLjg1NyAw
LjAzOSwwLjgyNSAwLjA0OSwwLjU2MyBDMC4wNTksMC4yOCAwLjQwNiwwLjI2OSAwLjUsMC4wMTgg
QzAuNTk0LDAuMjY5IDAuOTQxLDAuMjggMC45NTEsMC41NjMgQzAuOTYxLDAuODI1IDAuNjI2LDAu
ODU3IDAuNTMxLDAuNzIgQzAuNTMxLDAuODA0IDAuNjI2LDAuOTQxIDAuNjk5LDAuOTgyIEMwLjU4
NCwwLjk0MSAwLjQxNiwwLjk0MSAwLjMwMSwwLjk4MiIvPgorICAgICAgICAgICAgPC9jbGlwUGF0
aD4KKyAgICAgICAgICAgIDxjbGlwUGF0aCBpZD0ic2hhcGUtNCIgY2xpcFBhdGhVbml0cz0ib2Jq
ZWN0Qm91bmRpbmdCb3giPgorICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjQ5NSwwIEMwLjQy
NCwwLjE1MyAwLjE5OSwwLjQzOSAwLjEyOCwwLjUgQzAuMTk5LDAuNTYxIDAuNDI0LDAuODQ3IDAu
NDk1LDEgQzAuNTY2LDAuODQ3IDAuNzkxLDAuNTYxIDAuODYyLDAuNSBDMC43OTEsMC40MzkgMC41
NjYsMC4xNTMgMC40OTUsMCB6Ii8+CisgICAgICAgICAgICA8L2NsaXBQYXRoPgorICAgICAgICA8
L2RlZnM+CisgICAgPC9zdmc+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9zdHJp
bmdzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2V4dGVu
c2lvbnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvc3Rh
dGlzdGljcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9tYXRo
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21haW4uanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFydGljbGVzLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3N2Zy1wYXJ0aWNsZXMuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VM
b2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwppbmRleCBkNWM3M2I1ZTM5ZjljMTE4MTc2
ZWM3ODY4NjU3NTE1OTI4NTFkMDUwLi4zYjY0MWY0NzE3OGUzNWExODM4ZjhmOWRlMmIyZWRmOGJj
MWY2N2RiIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZworKysgYi9QZXJm
b3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE2LTA0LTA2ICBKb24g
TGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgbWFzdGVyIGJlbmNobWFy
ayB3aXRoIFNWRyB0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTYyNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTd2l0Y2ggbWFza3MgdGVzdHMgZm9yIFNWRyBwYXRoIHRlc3QuCisKKyAgICAgICAg
KiBBbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvdGVzdHMuanM6IE1vdmUgbWFzayB0
ZXN0IGhlcmUuCisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVyL3Rlc3RzLmpz
OiBBZGQgU1ZHIHRlc3QgaGVyZS4KKyAgICAgICAgKiBBbmltb21ldGVyL3Rlc3RzL2RvbS9wYXJ0
aWNsZXMuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0
cy9tYXN0ZXIvcGFydGljbGVzLmh0bWwuCisgICAgICAgICogQW5pbW9tZXRlci90ZXN0cy9kb20v
cmVzb3VyY2VzL2RvbS1wYXJ0aWNsZXMuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9kb20tcGFydGljbGVzLmpzLgorCisg
ICAgICAgICogQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL3BhcnRpY2xlcy5qczog
QWRkIG1pblBvc2l0aW9uIGZvciBib3VuZHMgY2hlY2tpbmcuIFByZXZlbnRzIHBhcnRpY2xlIGZy
b20gYmVpbmcKKyAgICAgICAgcGFydGlhbGx5IG9ic2N1cmVkLgorICAgICAgICAqIEFuaW1vbWV0
ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9zdmctcGFydGljbGVzLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFBhcnRpY2xlKTogVGhlIHBhcnRpY2xlIGlzIGVpdGhlciBhIHBhdGggb2JqZWN0IG9yIGEg
cmVjdCB1c2luZyBhIHBhdGggYXMgYSBjbGlwLiBUaGUKKyAgICAgICAgc2FtZSBwYXRoIGlzIHVz
ZWQgZWl0aGVyIHdheS4gRm9yIGVhY2ggcGFydGljbGUgY3JlYXRlIGEgbGluZWFyIGdyYWRpZW50
IHdpdGggYSByYW5kb20KKyAgICAgICAgcm90YXRpb24uCisgICAgICAgIChTVkdQYXJ0aWNsZXNT
dGFnZSk6IExvb2sgaW4gI3NoYXBlcyB0byBzZWUgaG93IG1hbnkgZGlmZmVyZW50IGtpbmRzIG9m
IHBhdGhzIGFyZSBhdmFpbGFibGUuCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIHRlc3QgbW9yZSBn
ZW5lcmljIGluIGNhc2Ugb3RoZXIgc2hhcGVzIG5lZWQgdG8gYmUgdGVzdGVkLgorICAgICAgICAq
IEFuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3N2Zy1wYXJ0aWNsZXMuaHRtbDogQWRkZWQuIEhhdmUg
dHdvIGRlZnMsIG9uZSB0aGF0IGhvdXNlcyBlYWNoCisgICAgICAgIHBhcnRpY2xlJ3MgZ3JhZGll
bnQsIGFuZCBvbmUgdGhhdCBob2xkcyB0aGUgc2hhcGUgdGVtcGxhdGVzLgorCiAyMDE2LTAzLTIz
ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgZm9jdXMgYW5k
IGxlYXZlcyB0ZXN0cwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275821</attachid>
            <date>2016-04-06 15:07:01 -0700</date>
            <delta_ts>2016-04-06 15:26:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156273-20160406150702.patch</filename>
            <type>text/plain</type>
            <size>20125</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MDk2CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci90ZXN0cy5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCmluZGV4IGMz
YmZiYzc3YjBiNWI5Y2VmYmEyNjg2OWM0ZWZlMzAwN2I0ZWYxNDkuLmUzMjMzZjU2YWMwNTZmMjgy
YTI4NjBkZDE0ZmJiMWNmZDQ5ZmY1N2IgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCkBAIC0xNzAs
NiArMTcwLDEwIEBAIFN1aXRlcy5wdXNoKG5ldyBTdWl0ZSgiSFRNTCBzdWl0ZSIsCiAgICAgICAg
ICAgICBuYW1lOiAiTGVhdmVzIDIuMCIKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAg
ICAgdXJsOiAiZG9tL3BhcnRpY2xlcy5odG1sIiwKKyAgICAgICAgICAgIG5hbWU6ICJET00gcGFy
dGljbGVzLCBTVkcgbWFza3MiCisgICAgICAgIH0sCisgICAgICAgIHsKICAgICAgICAgICAgIHVy
bDogImRvbS9jb21wb3NpdGluZy10cmFuc2Zvcm1zLmh0bWw/cGFydGljbGVXaWR0aD01MCZwYXJ0
aWNsZUhlaWdodD01MCZmaWx0ZXJzPXllcyZpbWFnZVNyYz0uLi9yZXNvdXJjZXMveWluLXlhbmcu
c3ZnIiwKICAgICAgICAgICAgIG5hbWU6ICJDb21wb3NpdGVkIFRyYW5zZm9ybXMiCiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVu
bmVyL3Rlc3RzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5u
ZXIvdGVzdHMuanMKaW5kZXggYjIzNTI0OTE4ODhiNjk5YzNhY2E5YjljMWI4MzdkNmE2ZWY5ZWNk
My4uZTYxNjIyZTgxMjVlMzU1MGVkNjNkOWNmZmI5YjYyNmZhNTgwNmNlMCAxMDA2NDQKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvdGVzdHMuanMKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9ydW5uZXIvdGVzdHMuanMK
QEAgLTQ1LDggKzQ1LDggQEAgU3VpdGVzLnB1c2gobmV3IFN1aXRlKCJBbmltb21ldGVyIiwKICAg
ICAgICAgICAgIG5hbWU6ICJEZXNpZ24iCiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHVybDogIm1hc3Rlci9wYXJ0aWNsZXMuaHRtbCIsCi0gICAgICAgICAgICBuYW1lOiAiRE9N
IHBhcnRpY2xlcywgU1ZHIG1hc2tzIgorICAgICAgICAgICAgdXJsOiAibWFzdGVyL3N2Zy1wYXJ0
aWNsZXMuaHRtbCIsCisgICAgICAgICAgICBuYW1lOiAiU3VpdHMiCiAgICAgICAgIH0sCiAgICAg
XQogKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvZG9t
L3BhcnRpY2xlcy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL2RvbS9w
YXJ0aWNsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGMwOTM5OWM5NDdjYTI5Njc5ZWQwYmZmOTdkYTQ2
ZjA0MTVkYTRkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVy
L3Rlc3RzL2RvbS9wYXJ0aWNsZXMuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3Jlc291cmNlcy9zdGFn
ZS5jc3MiPgorICAgIDxzdHlsZT4KKyAgICAgICAgI3N0YWdlIGRpdiB7CisgICAgICAgICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybCgu
Li9yZXNvdXJjZXMvc3Rhci5zdmcpOworICAgICAgICAgICAgbWFzazogdXJsKC4uL3Jlc291cmNl
cy9zdGFyLnN2ZyNzdGFyLW1hc2spOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorICAgIDxkaXYgaWQ9InN0YWdlIj48L2Rpdj4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3N0cmluZ3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL21hdGguanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvbWFpbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL21hc3Rlci9yZXNv
dXJjZXMvcGFydGljbGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2RvbS1wYXJ0aWNsZXMuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL2RvbS9yZXNvdXJjZXMvZG9tLXBh
cnRpY2xlcy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9kb20vcmVzb3Vy
Y2VzL2RvbS1wYXJ0aWNsZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDcxNDQ0YjJlN2VjZTFiZGY2YTFkMGI0
NTc3NTQ2MDc4MmZlODUxNgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci90ZXN0cy9kb20vcmVzb3VyY2VzL2RvbS1wYXJ0aWNsZXMuanMKQEAgLTAsMCArMSw3
MyBAQAorKGZ1bmN0aW9uKCkgeworCitET01QYXJ0aWNsZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJj
bGFzcyhQYXJ0aWNsZSwKKyAgICBmdW5jdGlvbihzdGFnZSkKKyAgICB7CisgICAgICAgIHRoaXMu
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBzdGFnZS5l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisKKyAgICAgICAgUGFydGljbGUuY2Fs
bCh0aGlzLCBzdGFnZSk7CisgICAgfSwgeworCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIFBhcnRpY2xlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpOworCisgICAgICAg
IHRoaXMucG9zaXRpb24gPSBTdGFnZS5yYW5kb21FbGVtZW50SW5BcnJheSh0aGlzLnN0YWdlLmVt
aXRMb2NhdGlvbik7CisKKyAgICAgICAgdmFyIGFuZ2xlID0gU3RhZ2UucmFuZG9tSW50KDAsIHRo
aXMuc3RhZ2UuZW1pdFN0ZXBzKSAvIHRoaXMuc3RhZ2UuZW1pdFN0ZXBzICogTWF0aC5QSSAqIDIg
KyBTdGFnZS5kYXRlQ291bnRlclZhbHVlKDEwMCkgKiB0aGlzLnN0YWdlLmVtaXNzaW9uU3BpbjsK
KyAgICAgICAgdGhpcy52ZWxvY2l0eSA9IG5ldyBQb2ludChNYXRoLnNpbihhbmdsZSksIE1hdGgu
Y29zKGFuZ2xlKSkKKyAgICAgICAgICAgIC5tdWx0aXBseShTdGFnZS5yYW5kb20oLjUsIDIuNSkp
OworCisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuc2l6ZS54ICsgInB4
IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuc2l6ZS55ICsgInB4
IjsKKyAgICAgICAgdGhpcy5zdGFnZS5jb2xvck9mZnNldCA9ICh0aGlzLnN0YWdlLmNvbG9yT2Zm
c2V0ICsgMSkgJSAzNjA7CisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSAiaHNsKCIgKyB0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ICsgIiwgNzAlLCA0NSUpIjsKKyAg
ICB9LAorCisgICAgbW92ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5lbGVtZW50
LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGUoIiArIHRoaXMucG9zaXRpb24ueCArICJweCwg
IiArIHRoaXMucG9zaXRpb24ueSArICJweCkiICsgdGhpcy5yb3RhdGVyLnJvdGF0ZVooKTsKKyAg
ICB9Cit9KTsKKworRE9NUGFydGljbGVTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhQ
YXJ0aWNsZXNTdGFnZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgICBQYXJ0aWNsZXNT
dGFnZS5jYWxsKHRoaXMpOworICAgIH0sIHsKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGJl
bmNobWFyaykKKyAgICB7CisgICAgICAgIFBhcnRpY2xlc1N0YWdlLnByb3RvdHlwZS5pbml0aWFs
aXplLmNhbGwodGhpcywgYmVuY2htYXJrKTsKKyAgICAgICAgdGhpcy5lbWlzc2lvblNwaW4gPSBT
dGFnZS5yYW5kb20oMCwgMyk7CisgICAgICAgIHRoaXMuZW1pdFN0ZXBzID0gU3RhZ2UucmFuZG9t
SW50KDQsIDYpOworICAgICAgICB0aGlzLmVtaXRMb2NhdGlvbiA9IFsKKyAgICAgICAgICAgIG5l
dyBQb2ludCh0aGlzLnNpemUueCAqIC4yNSwgdGhpcy5zaXplLnkgKiAuMzMzKSwKKyAgICAgICAg
ICAgIG5ldyBQb2ludCh0aGlzLnNpemUueCAqIC41LCB0aGlzLnNpemUueSAqIC4yNSksCisgICAg
ICAgICAgICBuZXcgUG9pbnQodGhpcy5zaXplLnggKiAuNzUsIHRoaXMuc2l6ZS55ICogLjMzMykK
KyAgICAgICAgXTsKKyAgICAgICAgdGhpcy5jb2xvck9mZnNldCA9IFN0YWdlLnJhbmRvbUludCgw
LCAzNTkpOworICAgIH0sCisKKyAgICBjcmVhdGVQYXJ0aWNsZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBET01QYXJ0aWNsZSh0aGlzKTsKKyAgICB9LAorCisgICAgd2ls
bFJlbW92ZVBhcnRpY2xlOiBmdW5jdGlvbihwYXJ0aWNsZSkKKyAgICB7CisgICAgICAgIHBhcnRp
Y2xlLmVsZW1lbnQucmVtb3ZlKCk7CisgICAgfQorfSk7CisKK0RPTVBhcnRpY2xlQmVuY2htYXJr
ID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKEJlbmNobWFyaywKKyAgICBmdW5jdGlvbihvcHRp
b25zKQorICAgIHsKKyAgICAgICAgQmVuY2htYXJrLmNhbGwodGhpcywgbmV3IERPTVBhcnRpY2xl
U3RhZ2UoKSwgb3B0aW9ucyk7CisgICAgfQorKTsKKword2luZG93LmJlbmNobWFya0NsYXNzID0g
RE9NUGFydGljbGVCZW5jaG1hcms7CisKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3BhcnRpY2xlcy5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9wYXJ0aWNsZXMuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTRmMjgzNjRjN2JjM2ZkMGYzYzViODc5MWMzNmU2MTU5YWQ0YTBi
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3BhcnRpY2xlcy5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgot
ICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5
cGU9InRleHQvY3NzIiBocmVmPSIuLi9yZXNvdXJjZXMvc3RhZ2UuY3NzIj4KLSAgICA8c3R5bGU+
Ci0gICAgICAgICNzdGFnZSBkaXYgewotICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgICAgICAgICAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoLi4vcmVzb3VyY2VzL3N0YXIuc3Zn
KTsKLSAgICAgICAgICAgIG1hc2s6IHVybCguLi9yZXNvdXJjZXMvc3Rhci5zdmcjc3Rhci1tYXNr
KTsKLSAgICAgICAgfQotICAgIDwvc3R5bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLSAgICA8ZGl2IGlk
PSJzdGFnZSI+PC9kaXY+Ci0gICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9zdHJpbmdz
LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2V4dGVuc2lv
bnMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvc3RhdGlz
dGljcy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9tYXRoLmpz
Ij48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21haW4uanMiPjwvc2Ny
aXB0PgotICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFydGljbGVzLmpzIj48L3NjcmlwdD4K
LSAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RvbS1wYXJ0aWNsZXMuanMiPjwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVy
L3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZG9tLXBhcnRpY2xlcy5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL2RvbS1wYXJ0aWNsZXMuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NTEyYmQ5Njc1NzAxZjA0NjQ1MjdhMjk0ZjIx
NDQ2NDI1M2ExMzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvZG9t
LXBhcnRpY2xlcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLShmdW5jdGlvbigp
IHsKLQotRE9NUGFydGljbGUgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoUGFydGljbGUsCi0g
ICAgZnVuY3Rpb24oc3RhZ2UpCi0gICAgewotICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgc3RhZ2UuZWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLmVsZW1lbnQpOwotCi0gICAgICAgIFBhcnRpY2xlLmNhbGwodGhpcywgc3RhZ2UpOwot
ICAgIH0sIHsKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBQYXJ0aWNs
ZS5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKTsKLQotICAgICAgICB2YXIgZW1pdExvY2F0aW9u
ID0gU3RhZ2UucmFuZG9tRWxlbWVudEluQXJyYXkodGhpcy5zdGFnZS5lbWl0TG9jYXRpb24pOwot
ICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFBvaW50KGVtaXRMb2NhdGlvbi54LCBlbWl0TG9j
YXRpb24ueSk7Ci0KLSAgICAgICAgdmFyIGFuZ2xlID0gU3RhZ2UucmFuZG9tSW50KDAsIHRoaXMu
c3RhZ2UuZW1pdFN0ZXBzKSAvIHRoaXMuc3RhZ2UuZW1pdFN0ZXBzICogTWF0aC5QSSAqIDIgKyBT
dGFnZS5kYXRlQ291bnRlclZhbHVlKDEwMCkgKiB0aGlzLnN0YWdlLmVtaXNzaW9uU3BpbjsKLSAg
ICAgICAgdGhpcy52ZWxvY2l0eSA9IG5ldyBQb2ludChNYXRoLnNpbihhbmdsZSksIE1hdGguY29z
KGFuZ2xlKSkKLSAgICAgICAgICAgIC5tdWx0aXBseShTdGFnZS5yYW5kb20oLjUsIDIuNSkpOwot
Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuc2l6ZS54ICsgInB4IjsK
LSAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuc2l6ZS55ICsgInB4IjsK
LSAgICAgICAgdGhpcy5zdGFnZS5jb2xvck9mZnNldCA9ICh0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0
ICsgMSkgJSAzNjA7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3Ig
PSAiaHNsKCIgKyB0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ICsgIiwgNzAlLCA0NSUpIjsKLSAgICB9
LAotCi0gICAgbW92ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5lbGVtZW50LnN0
eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGUoIiArIHRoaXMucG9zaXRpb24ueCArICJweCwgIiAr
IHRoaXMucG9zaXRpb24ueSArICJweCkiICsgdGhpcy5yb3RhdGVyLnJvdGF0ZVooKTsKLSAgICB9
Ci19KTsKLQotRE9NUGFydGljbGVTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhQYXJ0
aWNsZXNTdGFnZSwKLSAgICBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBQYXJ0aWNsZXNTdGFn
ZS5jYWxsKHRoaXMpOwotICAgIH0sIHsKLQotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGJlbmNo
bWFyaykKLSAgICB7Ci0gICAgICAgIFBhcnRpY2xlc1N0YWdlLnByb3RvdHlwZS5pbml0aWFsaXpl
LmNhbGwodGhpcywgYmVuY2htYXJrKTsKLSAgICAgICAgdGhpcy5lbWlzc2lvblNwaW4gPSBTdGFn
ZS5yYW5kb20oMCwgMyk7Ci0gICAgICAgIHRoaXMuZW1pdFN0ZXBzID0gU3RhZ2UucmFuZG9tSW50
KDQsIDYpOwotICAgICAgICB0aGlzLmVtaXRMb2NhdGlvbiA9IFsKLSAgICAgICAgICAgIG5ldyBQ
b2ludCh0aGlzLnNpemUueCAqIC4yNSwgdGhpcy5zaXplLnkgKiAuMzMzKSwKLSAgICAgICAgICAg
IG5ldyBQb2ludCh0aGlzLnNpemUueCAqIC41LCB0aGlzLnNpemUueSAqIC4yNSksCi0gICAgICAg
ICAgICBuZXcgUG9pbnQodGhpcy5zaXplLnggKiAuNzUsIHRoaXMuc2l6ZS55ICogLjMzMykKLSAg
ICAgICAgXTsKLSAgICAgICAgdGhpcy5jb2xvck9mZnNldCA9IFN0YWdlLnJhbmRvbUludCgwLCAz
NTkpOwotICAgIH0sCi0KLSAgICBjcmVhdGVQYXJ0aWNsZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyBET01QYXJ0aWNsZSh0aGlzKTsKLSAgICB9LAotCi0gICAgd2lsbFJl
bW92ZVBhcnRpY2xlOiBmdW5jdGlvbihwYXJ0aWNsZSkKLSAgICB7Ci0gICAgICAgIHBhcnRpY2xl
LmVsZW1lbnQucmVtb3ZlKCk7Ci0gICAgfQotfSk7Ci0KLURPTVBhcnRpY2xlQmVuY2htYXJrID0g
VXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKEJlbmNobWFyaywKLSAgICBmdW5jdGlvbihvcHRpb25z
KQotICAgIHsKLSAgICAgICAgQmVuY2htYXJrLmNhbGwodGhpcywgbmV3IERPTVBhcnRpY2xlU3Rh
Z2UoKSwgb3B0aW9ucyk7Ci0gICAgfQotKTsKLQotd2luZG93LmJlbmNobWFya0NsYXNzID0gRE9N
UGFydGljbGVCZW5jaG1hcms7Ci0KLX0pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9wYXJ0aWNsZXMuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9wYXJ0aWNsZXMuanMK
aW5kZXggZjZmZWJiMDA4MTkxNTQ4NWI5OWE5OTE5NjBlNmY1NTRmYjc1NDNlZS4uMWRlM2U3ODI2
N2MyMGU2YmU5ZGNkZWYwNmYyNjQ2OTA3NjE0ZWM5MyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9yZXNvdXJjZXMvcGFydGljbGVzLmpzCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL3BhcnRp
Y2xlcy5qcwpAQCAtMTUsNyArMTUsOCBAQCBQYXJ0aWNsZS5wcm90b3R5cGUgPQogICAgIHsKICAg
ICAgICAgdmFyIHJhbmRTaXplID0gTWF0aC5yb3VuZChNYXRoLnBvdyhQc2V1ZG8ucmFuZG9tKCks
IDQpICogdGhpcy5zaXplUmFuZ2UgKyB0aGlzLnNpemVNaW5pbXVtKTsKICAgICAgICAgdGhpcy5z
aXplID0gbmV3IFBvaW50KHJhbmRTaXplLCByYW5kU2l6ZSk7Ci0gICAgICAgIHRoaXMubWF4UG9z
aXRpb24gPSB0aGlzLnN0YWdlLnNpemUuc3VidHJhY3QodGhpcy5zaXplKTsKKyAgICAgICAgdGhp
cy5taW5Qb3NpdGlvbiA9IHRoaXMuc2l6ZS5tdWx0aXBseSguNSk7CisgICAgICAgIHRoaXMubWF4
UG9zaXRpb24gPSB0aGlzLnN0YWdlLnNpemUuc3VidHJhY3QodGhpcy5taW5Qb3NpdGlvbik7CiAg
ICAgfSwKIAogICAgIGFuaW1hdGU6IGZ1bmN0aW9uKHRpbWVEZWx0YSkKQEAgLTMwLDExICszMSwx
MSBAQCBQYXJ0aWNsZS5wcm90b3R5cGUgPQogICAgICAgICAgICAgaWYgKHRoaXMudmVsb2NpdHku
eCA+IDApCiAgICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS54ICo9IC0xOwogICAgICAgICAg
ICAgdGhpcy5wb3NpdGlvbi54ID0gdGhpcy5tYXhQb3NpdGlvbi54OwotICAgICAgICB9IGVsc2Ug
aWYgKHRoaXMucG9zaXRpb24ueCA8IDApIHsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvc2l0
aW9uLnggPCB0aGlzLm1pblBvc2l0aW9uLngpIHsKICAgICAgICAgICAgIC8vIElmIHBhcnRpY2xl
IGlzIGdvaW5nIHRvIG1vdmUgb2ZmIGxlZnQgc2lkZQogICAgICAgICAgICAgaWYgKHRoaXMudmVs
b2NpdHkueCA8IDApCiAgICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS54ICo9IC0xOwotICAg
ICAgICAgICAgdGhpcy5wb3NpdGlvbi54ID0gMDsKKyAgICAgICAgICAgIHRoaXMucG9zaXRpb24u
eCA9IHRoaXMubWluUG9zaXRpb24ueDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHBhcnRp
Y2xlIGlzIGdvaW5nIHRvIG1vdmUgb2ZmIGJvdHRvbSBzaWRlCkBAIC01MCwxNCArNTEsMTQgQEAg
UGFydGljbGUucHJvdG90eXBlID0KICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS55
ICo9IC0wLjk5OTsKICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLnkgPSB0aGlzLm1heFBv
c2l0aW9uLnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3NpdGlv
bi55IDwgMCkgeworICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9zaXRpb24ueSA8IHRoaXMubWlu
UG9zaXRpb24ueSkgewogICAgICAgICAgICAgLy8gSWYgcGFydGljbGUgaXMgZ29pbmcgdG8gbW92
ZSBvZmYgdG9wIHNpZGUKICAgICAgICAgICAgIHZhciBtYWduaXR1ZGUgPSB0aGlzLnZlbG9jaXR5
Lmxlbmd0aCgpOwogICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS54ICo9IDEuNSArIC4wMDUgKiB0
aGlzLnNpemUueDsKICAgICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5Lm5v
cm1hbGl6ZSgpLm11bHRpcGx5KG1hZ25pdHVkZSk7CiAgICAgICAgICAgICBpZiAodGhpcy52ZWxv
Y2l0eS55IDwgMCkKICAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LnkgKj0gLTAuOTk4Owot
ICAgICAgICAgICAgdGhpcy5wb3NpdGlvbi55ID0gMDsKKyAgICAgICAgICAgIHRoaXMucG9zaXRp
b24ueSA9IHRoaXMubWluUG9zaXRpb24ueTsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMubW92
ZSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rl
ci9yZXNvdXJjZXMvc3ZnLXBhcnRpY2xlcy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRl
ci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL3N2Zy1wYXJ0aWNsZXMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkz
ZTBhZjRlOTZlZWM4ZjI4ODE4NzUxOGM0MDFkYWIxZWU0MGQ1ZAotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL3N2Zy1w
YXJ0aWNsZXMuanMKQEAgLTAsMCArMSwxMTIgQEAKKyhmdW5jdGlvbigpIHsKKworU1ZHUGFydGlj
bGUgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoUGFydGljbGUsCisgICAgZnVuY3Rpb24oc3Rh
Z2UpCisgICAgeworICAgICAgICB2YXIgc2hhcGVJZCA9ICIjc2hhcGUtIiArIFN0YWdlLnJhbmRv
bUludCgxLCBzdGFnZS5wYXJ0aWNsZVR5cGVDb3VudCk7CisgICAgICAgIHRoaXMuaXNDbGlwUGF0
aCA9IFN0YWdlLnJhbmRvbUJvb2woKTsKKyAgICAgICAgaWYgKHRoaXMuaXNDbGlwUGF0aCkgewor
ICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gVXRpbGl0aWVzLmNyZWF0ZVNWR0VsZW1lbnQoInJl
Y3QiLCB7CisgICAgICAgICAgICAgICAgeDogMCwKKyAgICAgICAgICAgICAgICB5OiAwLAorICAg
ICAgICAgICAgICAgICJjbGlwLXBhdGgiOiAidXJsKCIgKyBzaGFwZUlkICsgIikiCisgICAgICAg
ICAgICB9LCB7fSwgc3RhZ2UuZWxlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgc2hhcGVQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzaGFwZUlkICsgIiBwYXRo
Iik7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBzaGFwZVBhdGguY2xvbmVOb2RlKCk7Cisg
ICAgICAgICAgICBzdGFnZS5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisgICAg
ICAgIH0KKworICAgICAgICB0aGlzLmdyYWRpZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImRlZmF1bHQtZ3JhZGllbnQiKS5jbG9uZU5vZGUodHJ1ZSk7CisgICAgICAgIHRoaXMuZ3JhZGll
bnQuaWQgPSAiZ3JhZGllbnQtIiArIHN0YWdlLmdyYWRpZW50c0NvdW50ZXIrKzsKKyAgICAgICAg
c3RhZ2UuZ3JhZGllbnRzRGVmcy5hcHBlbmRDaGlsZCh0aGlzLmdyYWRpZW50KTsKKyAgICAgICAg
dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiZmlsbCIsICJ1cmwoIyIgKyB0aGlzLmdyYWRpZW50
LmlkICsgIikiKTsKKworICAgICAgICBQYXJ0aWNsZS5jYWxsKHRoaXMsIHN0YWdlKTsKKyAgICB9
LCB7CisKKyAgICBzaXplTWluaW11bTogMzAsCisgICAgc2l6ZVJhbmdlOiA0MCwKKworICAgIHJl
c2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBQYXJ0aWNsZS5wcm90b3R5cGUucmVzZXQu
Y2FsbCh0aGlzKTsKKworICAgICAgICB0aGlzLnBvc2l0aW9uID0gU3RhZ2UucmFuZG9tRWxlbWVu
dEluQXJyYXkodGhpcy5zdGFnZS5lbWl0TG9jYXRpb24pOworCisgICAgICAgIHZhciB2ZWxvY2l0
eU1hZ25pdHVkZSA9IFN0YWdlLnJhbmRvbSguNSwgMi41KTsKKyAgICAgICAgdmFyIGFuZ2xlID0g
U3RhZ2UucmFuZG9tSW50KDAsIHRoaXMuc3RhZ2UuZW1pdFN0ZXBzKSAvIHRoaXMuc3RhZ2UuZW1p
dFN0ZXBzICogTWF0aC5QSSAqIDIgKyBTdGFnZS5kYXRlQ291bnRlclZhbHVlKDEwMDApICogdGhp
cy5zdGFnZS5lbWlzc2lvblNwaW4gKyB2ZWxvY2l0eU1hZ25pdHVkZTsKKyAgICAgICAgdGhpcy52
ZWxvY2l0eSA9IG5ldyBQb2ludChNYXRoLnNpbihhbmdsZSksIE1hdGguY29zKGFuZ2xlKSkKKyAg
ICAgICAgICAgIC5tdWx0aXBseSh2ZWxvY2l0eU1hZ25pdHVkZSk7CisKKyAgICAgICAgaWYgKHRo
aXMuaXNDbGlwUGF0aCkgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgi
d2lkdGgiLCB0aGlzLnNpemUueCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmli
dXRlKCJoZWlnaHQiLCB0aGlzLnNpemUueSk7CisgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVN1
ZmZpeCA9ICJ0cmFuc2xhdGUoLSIgKyAodGhpcy5zaXplLnggPj4gMSkgKyAicHgsLSIgKyAodGhp
cy5zaXplLnkgPj4gMSkgKyAicHgpIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRo
aXMudHJhbnNmb3JtU3VmZml4ID0gInNjYWxlKCIgKyB0aGlzLnNpemUueCArICIpdHJhbnNsYXRl
KC0uNXB4LC0uNXB4KSI7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnN0YWdlLmNvbG9yT2Zm
c2V0ID0gKHRoaXMuc3RhZ2UuY29sb3JPZmZzZXQgKyAuNSkgJSAzNjA7CisKKyAgICAgICAgdmFy
IHRyYW5zZm9ybSA9IHRoaXMuc3RhZ2UuZWxlbWVudC5jcmVhdGVTVkdUcmFuc2Zvcm0oKTsKKyAg
ICAgICAgdHJhbnNmb3JtLnNldFJvdGF0ZShTdGFnZS5yYW5kb21JbnQoMCwgMzU5KSwgMCwgMCk7
CisgICAgICAgIHRoaXMuZ3JhZGllbnQuZ3JhZGllbnRUcmFuc2Zvcm0uYmFzZVZhbC5pbml0aWFs
aXplKHRyYW5zZm9ybSk7CisKKyAgICAgICAgdmFyIHN0b3BzID0gdGhpcy5ncmFkaWVudC5xdWVy
eVNlbGVjdG9yQWxsKCJzdG9wIik7CisgICAgICAgIHN0b3BzWzBdLnNldEF0dHJpYnV0ZSgic3Rv
cC1jb2xvciIsICJoc2woIiArIHRoaXMuc3RhZ2UuY29sb3JPZmZzZXQgKyAiLCA3MCUsIDQ1JSki
KTsKKyAgICAgICAgc3RvcHNbMV0uc2V0QXR0cmlidXRlKCJzdG9wLWNvbG9yIiwgImhzbCgiICsg
KCh0aGlzLnN0YWdlLmNvbG9yT2Zmc2V0ICsgU3RhZ2UucmFuZG9tSW50KDUwLDEwMCkpICUgMzYw
KSArICIsIDcwJSwgNjUlKSIpOworICAgIH0sCisKKyAgICBtb3ZlOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZSgiICsg
dGhpcy5wb3NpdGlvbi54ICsgInB4LCIgKyB0aGlzLnBvc2l0aW9uLnkgKyAicHgpIiArIHRoaXMu
cm90YXRlci5yb3RhdGVaKCkgKyB0aGlzLnRyYW5zZm9ybVN1ZmZpeDsKKyAgICB9Cit9KTsKKwor
U1ZHUGFydGljbGVTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhQYXJ0aWNsZXNTdGFn
ZSwKKyAgICBmdW5jdGlvbigpCisgICAgeworICAgICAgICBQYXJ0aWNsZXNTdGFnZS5jYWxsKHRo
aXMpOworICAgIH0sIHsKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGJlbmNobWFyaykKKyAg
ICB7CisgICAgICAgIFBhcnRpY2xlc1N0YWdlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhp
cywgYmVuY2htYXJrKTsKKyAgICAgICAgdGhpcy5lbWlzc2lvblNwaW4gPSBTdGFnZS5yYW5kb20o
MCwgMyk7CisgICAgICAgIHRoaXMuZW1pdFN0ZXBzID0gU3RhZ2UucmFuZG9tSW50KDQsIDYpOwor
ICAgICAgICB0aGlzLmVtaXRMb2NhdGlvbiA9IFsKKyAgICAgICAgICAgIG5ldyBQb2ludCh0aGlz
LnNpemUueCAqIC4yNSwgdGhpcy5zaXplLnkgKiAuMzMzKSwKKyAgICAgICAgICAgIG5ldyBQb2lu
dCh0aGlzLnNpemUueCAqIC41LCB0aGlzLnNpemUueSAqIC4yNSksCisgICAgICAgICAgICBuZXcg
UG9pbnQodGhpcy5zaXplLnggKiAuNzUsIHRoaXMuc2l6ZS55ICogLjMzMykKKyAgICAgICAgXTsK
KyAgICAgICAgdGhpcy5jb2xvck9mZnNldCA9IFN0YWdlLnJhbmRvbUludCgwLCAzNTkpOworCisg
ICAgICAgIHRoaXMucGFydGljbGVUeXBlQ291bnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KCIuc2hhcGUiKS5sZW5ndGg7CisgICAgICAgIHRoaXMuZ3JhZGllbnRzRGVmcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJncmFkaWVudHMiKTsKKyAgICAgICAgdGhpcy5ncmFkaWVudHNDb3Vu
dGVyID0gMDsKKyAgICB9LAorCisgICAgY3JlYXRlUGFydGljbGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgU1ZHUGFydGljbGUodGhpcyk7CisgICAgfSwKKworICAgIHdp
bGxSZW1vdmVQYXJ0aWNsZTogZnVuY3Rpb24ocGFydGljbGUpCisgICAgeworICAgICAgICBwYXJ0
aWNsZS5lbGVtZW50LnJlbW92ZSgpOworICAgICAgICBpZiAocGFydGljbGUuZ3JhZGllbnQpCisg
ICAgICAgICAgICBwYXJ0aWNsZS5ncmFkaWVudC5yZW1vdmUoKTsKKyAgICB9Cit9KTsKKworU1ZH
UGFydGljbGVCZW5jaG1hcmsgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQmVuY2htYXJrLAor
ICAgIGZ1bmN0aW9uKG9wdGlvbnMpCisgICAgeworICAgICAgICBCZW5jaG1hcmsuY2FsbCh0aGlz
LCBuZXcgU1ZHUGFydGljbGVTdGFnZSgpLCBvcHRpb25zKTsKKyAgICB9CispOworCit3aW5kb3cu
YmVuY2htYXJrQ2xhc3MgPSBTVkdQYXJ0aWNsZUJlbmNobWFyazsKKworfSkoKTsKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvc3ZnLXBhcnRpY2xl
cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL21hc3Rlci9zdmctcGFy
dGljbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZhMTkzNjlkYTlkNTBjOWE2NTQ1YjQwZmNjODVmOWE4
NGNhYzQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90
ZXN0cy9tYXN0ZXIvc3ZnLXBhcnRpY2xlcy5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vcmVzb3VyY2Vz
L3N0YWdlLmNzcyI+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8c3ZnIGlkPSJzdGFnZSI+CisgICAg
ICAgIDxkZWZzIGlkPSJncmFkaWVudHMiPgorICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlk
PSJkZWZhdWx0LWdyYWRpZW50Ij4KKyAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAlIi8+
CisgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIxMDAlIi8+CisgICAgICAgICAgICA8L2xp
bmVhckdyYWRpZW50PgorICAgICAgICA8L2RlZnM+CisgICAgICAgIDxkZWZzIGlkPSJzaGFwZXMi
PgorICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJzaGFwZS0xIiBjbGFzcz0ic2hhcGUgaGVhcnQi
IGNsaXBQYXRoVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94Ij4KKyAgICAgICAgICAgICAgICA8cGF0
aCBkPSJNMC41LDAuMjE0IEMwLjQ2NiwwLjE2NCAwLjM2OSwwLjA5IDAuMjY3LDAuMDkyIEMwLjEz
NywwLjA5MyAtMCwwLjE4NiAtMCwwLjM0NSBDLTAsMC42NTkgMC4zOTUsMC42NTUgMC41LDAuOTM4
IEMwLjYwNSwwLjY1NSAxLDAuNjU5IDEsMC4zNDUgQzEsMC4xODYgMC44NjMsMC4wOTMgMC43MzMs
MC4wOTIgQzAuNjMxLDAuMDkgMC41MzQsMC4xNjQgMC41LDAuMjE0IHoiLz4KKyAgICAgICAgICAg
IDwvY2xpcFBhdGg+CisgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9InNoYXBlLTIiIGNsYXNzPSJz
aGFwZSBjbHViIiBjbGlwUGF0aFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+CisgICAgICAgICAg
ICAgICAgPHBhdGggZD0iTTAuNSwwLjAxOCBDMC42MiwwLjAxOCAwLjcxOCwwLjExNSAwLjcxOCww
LjIzNSBDMC43MTgsMC4zMSAwLjY3OSwwLjM3NyAwLjYxOCwwLjQxOCBDMC42NTcsMC4zOTMgMC43
MDMsMC4zODIgMC43NDksMC4zODEgQzAuODY5LDAuMzgxIDAuOTY3LDAuNDY4IDAuOTY3LDAuNTg4
IEMwLjk2NywwLjcwOSAwLjg2OSwwLjgwNiAwLjc0OSwwLjgwNiBDMC42NjQsMC44MDUgMC41Nzgs
MC43NTYgMC41NDIsMC42NzcgQzAuNTM4LDAuNzk5IDAuNjA1LDAuOTE4IDAuNzA4LDAuOTgyIEMw
LjU5MywwLjk0MSAwLjQwNywwLjk0MSAwLjI5MiwwLjk4MiBDMC4zOTcsMC45MTcgMC40NjEsMC43
OTkgMC40NTksMC42NzYgQzAuNDIyLDAuNzU2IDAuMzM3LDAuODA0IDAuMjUxLDAuODA2IEMwLjEz
MSwwLjgwNiAwLjAzMywwLjcwOSAwLjAzMywwLjU4OCBDMC4wMzMsMC40NjggMC4xMzEsMC4zODEg
MC4yNTEsMC4zODEgQzAuMjk4LDAuMzggMC4zNDIsMC4zOTUgMC4zODIsMC40MTggQzAuMzE5LDAu
Mzc4IDAuMjg0LDAuMzA5IDAuMjgyLDAuMjM1IEMwLjI4MiwwLjExNSAwLjM4LDAuMDE4IDAuNSww
LjAxOCB6Ii8+CisgICAgICAgICAgICA8L2NsaXBQYXRoPgorICAgICAgICAgICAgPGNsaXBQYXRo
IGlkPSJzaGFwZS0zIiBjbGFzcz0ic2hhcGUgc3BhZGUiIGNsaXBQYXRoVW5pdHM9Im9iamVjdEJv
dW5kaW5nQm94Ij4KKyAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMC4zMDEsMC45ODIgQzAuMzc0
LDAuOTQxIDAuNDY5LDAuODA0IDAuNDY5LDAuNzIgQzAuMzc0LDAuODU3IDAuMDM5LDAuODI1IDAu
MDQ5LDAuNTYzIEMwLjA1OSwwLjI4IDAuNDA2LDAuMjY5IDAuNSwwLjAxOCBDMC41OTQsMC4yNjkg
MC45NDEsMC4yOCAwLjk1MSwwLjU2MyBDMC45NjEsMC44MjUgMC42MjYsMC44NTcgMC41MzEsMC43
MiBDMC41MzEsMC44MDQgMC42MjYsMC45NDEgMC42OTksMC45ODIgQzAuNTg0LDAuOTQxIDAuNDE2
LDAuOTQxIDAuMzAxLDAuOTgyIi8+CisgICAgICAgICAgICA8L2NsaXBQYXRoPgorICAgICAgICAg
ICAgPGNsaXBQYXRoIGlkPSJzaGFwZS00IiBjbGFzcz0ic2hhcGUgZGlhbW9uZCIgY2xpcFBhdGhV
bml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgorICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjQ5
NSwwIEMwLjQyNCwwLjE1MyAwLjE5OSwwLjQzOSAwLjEyOCwwLjUgQzAuMTk5LDAuNTYxIDAuNDI0
LDAuODQ3IDAuNDk1LDEgQzAuNTY2LDAuODQ3IDAuNzkxLDAuNTYxIDAuODYyLDAuNSBDMC43OTEs
MC40MzkgMC41NjYsMC4xNTMgMC40OTUsMCB6Ii8+CisgICAgICAgICAgICA8L2NsaXBQYXRoPgor
ICAgICAgICA8L2RlZnM+CisgICAgPC9zdmc+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9zdHJpbmdzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2V4dGVuc2lvbnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvc3RhdGlzdGljcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9tYXRoLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21h
aW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFydGljbGVzLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3N2Zy1wYXJ0aWNsZXMuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODg4MjU3Nzdm
ZWUxYTIxZTIxNjhkNzVlNzEwMjk2MGY4MDY1YmQ5Li4zMDhjODdkMDRlYjYxY2IwNzQyNmE1MDVk
NGQ0ZDRlYWJhMTYzNDM3IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE2LTA0
LTA2ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgbWFzdGVy
IGJlbmNobWFyayB3aXRoIFNWRyB0ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTYyNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTd2l0Y2ggbWFza3MgdGVzdHMgZm9yIFNWRyBwYXRoIHRlc3QuCisK
KyAgICAgICAgKiBBbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvdGVzdHMuanM6IE1v
dmUgbWFzayB0ZXN0IGhlcmUuCisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVubmVy
L3Rlc3RzLmpzOiBBZGQgU1ZHIHRlc3QgaGVyZS4KKyAgICAgICAgKiBBbmltb21ldGVyL3Rlc3Rz
L2RvbS9wYXJ0aWNsZXMuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci90ZXN0cy9tYXN0ZXIvcGFydGljbGVzLmh0bWwuCisgICAgICAgICogQW5pbW9tZXRlci90
ZXN0cy9kb20vcmVzb3VyY2VzL2RvbS1wYXJ0aWNsZXMuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3Jt
YW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9kb20tcGFydGljbGVz
LmpzLgorCisgICAgICAgICogQW5pbW9tZXRlci90ZXN0cy9tYXN0ZXIvcmVzb3VyY2VzL3BhcnRp
Y2xlcy5qczogQWRkIG1pblBvc2l0aW9uIGZvciBib3VuZHMgY2hlY2tpbmcuIFByZXZlbnRzIHBh
cnRpY2xlIGZyb20gYmVpbmcKKyAgICAgICAgcGFydGlhbGx5IG9ic2N1cmVkLgorICAgICAgICAq
IEFuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3Jlc291cmNlcy9zdmctcGFydGljbGVzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFBhcnRpY2xlKTogVGhlIHBhcnRpY2xlIGlzIGVpdGhlciBhIHBhdGggb2Jq
ZWN0IG9yIGEgcmVjdCB1c2luZyBhIHBhdGggYXMgYSBjbGlwLiBUaGUKKyAgICAgICAgc2FtZSBw
YXRoIGlzIHVzZWQgZWl0aGVyIHdheS4gRm9yIGVhY2ggcGFydGljbGUgY3JlYXRlIGEgbGluZWFy
IGdyYWRpZW50IHdpdGggYSByYW5kb20KKyAgICAgICAgcm90YXRpb24uCisgICAgICAgIChTVkdQ
YXJ0aWNsZXNTdGFnZSk6IExvb2sgaW4gI3NoYXBlcyB0byBzZWUgaG93IG1hbnkgZGlmZmVyZW50
IGtpbmRzIG9mIHBhdGhzIGFyZSBhdmFpbGFibGUuCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIHRl
c3QgbW9yZSBnZW5lcmljIGluIGNhc2Ugb3RoZXIgc2hhcGVzIG5lZWQgdG8gYmUgdGVzdGVkLgor
ICAgICAgICAqIEFuaW1vbWV0ZXIvdGVzdHMvbWFzdGVyL3N2Zy1wYXJ0aWNsZXMuaHRtbDogQWRk
ZWQuIEhhdmUgdHdvIGRlZnMsIG9uZSB0aGF0IGhvdXNlcyBlYWNoCisgICAgICAgIHBhcnRpY2xl
J3MgZ3JhZGllbnQsIGFuZCBvbmUgdGhhdCBob2xkcyB0aGUgc2hhcGUgdGVtcGxhdGVzLgorCiAy
MDE2LTAzLTI3ICBIdW5zZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KIAogICAg
ICAgICBbRUZMXSBSRUdSRVNTSU9OKHIxODg3OTMpOiBJdCBtYWRlIDIwMCBsYXlvdXQgdGVzdHMg
YW5kIEJpbmRpbmdzL2V2ZW50LXRhcmdldC13cmFwcGVyLmh0bWwgcGVyZm9ybWFuY2UgdGVzdCBm
YWlsCg==
</data>
<flag name="review"
          id="300119"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>