<?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>161610</bug_id>
          
          <creation_ts>2016-09-05 11:41:09 -0700</creation_ts>
          <short_desc>Align element.scroll() / scrollTo() / scrollBy() with the CSSOM specification</short_desc>
          <delta_ts>2018-07-26 07:08:21 -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>DOM</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>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152774</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fred.wang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1226482</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-05 11:41:09 -0700</bug_when>
    <thetext>Support ScrollOptions etc on Element scrolling functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226532</commentid>
    <comment_count>1</comment_count>
      <attachid>287988</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-05 18:31:10 -0700</bug_when>
    <thetext>Created attachment 287988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226568</commentid>
    <comment_count>2</comment_count>
      <attachid>287988</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-05 20:49:50 -0700</bug_when>
    <thetext>Comment on attachment 287988
Patch

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

&gt; Source/WebCore/dom/Element.cpp:712
&gt; +    RenderBox* renderer = renderBox();
&gt; +    if (!renderer)
&gt; +        return;

I would slightly prefer auto* here. But the code below does not use renderer, which seems peculiar. Maybe it’s supposed to be renderer-&gt;scrollLeft() and renderer-&gt;scrollTop() below?

&gt; Source/WebCore/dom/Element.cpp:717
&gt; +    scrollTo(x, y);

I think this should just be all on one line:

    scrollTo(scrollLeft() + normalizeNonFiniteValue(x), scrollTop() + normalizeNonFiniteValue(y));

No need to keep the code that modifies x and y above on four separate lines of code above.

&gt; Source/WebCore/dom/Element.cpp:731
&gt; +    RenderBox* renderer = renderBox();

I slightly prefer auto* here.

&gt; Source/WebCore/dom/Element.cpp:750
&gt; +    ScrollToOptions options;
&gt; +    options.left = x;
&gt; +    options.top = y;
&gt; +    scrollTo(options);

I think you can instead just write:

    scrollTo({ x, y });

Although if I am write about the optional thing then it might need to be:

    scrollTo(ScrollToOptions{ x, y });

&gt; Source/WebCore/dom/Element.h:141
&gt; +        Optional&lt;double&gt; left;
&gt; +        Optional&lt;double&gt; top;

This doesn’t seem right. These aren’t optional in the IDL file.

&gt; Source/WebCore/dom/Element.h:144
&gt; +    void scrollBy(const ScrollToOptions&amp;);

This doesn’t seem right. The IDL file says the options argument is optional, so shouldn’t this be Optional&lt;ScrollToOptions&gt;? Also, with a small structure like this it’s more efficient not to use &quot;const X&amp;&quot;.

&gt; Source/WebCore/dom/Element.h:146
&gt; +    virtual void scrollTo(const ScrollToOptions&amp;);

Ditto.

&gt; Source/WebCore/dom/Element.idl:75
&gt; -    attribute long scrollLeft;
&gt; -    attribute long scrollTop;
&gt; +    attribute long scrollLeft; // FIXME: should be unrestricted double
&gt; +    attribute long scrollTop; // FIXME: should be unrestricted double

Seems relatively straightforward to fix this.

&gt; Source/WebCore/html/HTMLBodyElement.cpp:304
&gt; +        // FIXME: scrolling an independently scrollable body is broken: webkit.org/b/161612

Should be sentence style with a capitalized first word &quot;Scrolling&quot;.

&gt; Source/WebCore/html/HTMLBodyElement.cpp:305
&gt; +        DOMWindow* window = document().domWindow();

I slightly prefer auto* here.

&gt; Source/WebCore/html/HTMLBodyElement.cpp:313
&gt; +        DOMWindow::ScrollToOptions windowScrollOptions;
&gt; +        windowScrollOptions.left = options.left;
&gt; +        windowScrollOptions.top = options.top;
&gt; +        window-&gt;scrollTo(windowScrollOptions);
&gt; +        return;

First, I think we can make DOMWindow::ScrollToOptions and Element::ScrollToOptions be the same struct. Can just use &quot;using&quot; to bring it into one or both classes as a member even if it’s defined in the other class or outside any class. Then we would not need to convert the type here.

Second, if we do need to convert it I think we can write it like this:

    window-&gt;scrollTo({ options.left, options.top });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226576</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-05 21:47:09 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 287988 [details]
&gt; Patch

&gt; 
&gt; &gt; Source/WebCore/dom/Element.h:141
&gt; &gt; +        Optional&lt;double&gt; left;
&gt; &gt; +        Optional&lt;double&gt; top;
&gt; 
&gt; This doesn’t seem right. These aren’t optional in the IDL file.

I was following what Chris did in bug 157666.

&gt; &gt; Source/WebCore/dom/Element.h:144
&gt; &gt; +    void scrollBy(const ScrollToOptions&amp;);
&gt; 
&gt; This doesn’t seem right. The IDL file says the options argument is optional,
&gt; so shouldn’t this be Optional&lt;ScrollToOptions&gt;?

Was also following Chris&apos;s change.

&gt; &gt; Source/WebCore/dom/Element.idl:75
&gt; &gt; -    attribute long scrollLeft;
&gt; &gt; -    attribute long scrollTop;
&gt; &gt; +    attribute long scrollLeft; // FIXME: should be unrestricted double
&gt; &gt; +    attribute long scrollTop; // FIXME: should be unrestricted double
&gt; 
&gt; Seems relatively straightforward to fix this.

I didn&apos;t want to make a web-facing change here in the same patch.

&gt; &gt; Source/WebCore/html/HTMLBodyElement.cpp:313
&gt; &gt; +        DOMWindow::ScrollToOptions windowScrollOptions;
&gt; &gt; +        windowScrollOptions.left = options.left;
&gt; &gt; +        windowScrollOptions.top = options.top;
&gt; &gt; +        window-&gt;scrollTo(windowScrollOptions);
&gt; &gt; +        return;
&gt; 
&gt; First, I think we can make DOMWindow::ScrollToOptions and
&gt; Element::ScrollToOptions be the same struct. Can just use &quot;using&quot; to bring
&gt; it into one or both classes as a member even if it’s defined in the other
&gt; class or outside any class. Then we would not need to convert the type here.

The generated code references Element::ScrollToOptions and DOMWindow::ScrollToOptions, so I think we&apos;d have to change the generator to fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226692</commentid>
    <comment_count>4</comment_count>
      <attachid>287988</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-06 08:52:54 -0700</bug_when>
    <thetext>Comment on attachment 287988
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Element.h:141
&gt;&gt;&gt; +        Optional&lt;double&gt; top;
&gt;&gt; 
&gt;&gt; This doesn’t seem right. These aren’t optional in the IDL file.
&gt; 
&gt; I was following what Chris did in bug 157666.

They are not marked as &apos;required&apos; in the IDL so they are optional by default as per Web IDL dictionary members. Using Optional&lt;&gt; here seems OK to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226693</commentid>
    <comment_count>5</comment_count>
      <attachid>287988</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-06 08:55:36 -0700</bug_when>
    <thetext>Comment on attachment 287988
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Element.h:144
&gt;&gt;&gt; +    void scrollBy(const ScrollToOptions&amp;);
&gt;&gt; 
&gt;&gt; This doesn’t seem right. The IDL file says the options argument is optional, so shouldn’t this be Optional&lt;ScrollToOptions&gt;? Also, with a small structure like this it’s more efficient not to use &quot;const X&amp;&quot;.
&gt; 
&gt; Was also following Chris&apos;s change.

Again, this seems fine to me. If you look at the generated code, it will always call the implementation method with a Dictionary. If scrollBy() is called without parameter, the implementation will be called with scrollBy(ScrollToOptions()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226702</commentid>
    <comment_count>6</comment_count>
      <attachid>287988</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-06 09:12:01 -0700</bug_when>
    <thetext>Comment on attachment 287988
Patch

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

r=me

&gt; Source/WebCore/dom/Element.cpp:708
&gt; +    document().updateLayoutIgnorePendingStylesheets();

Calling scrollLeft() already takes care of this.

&gt; Source/WebCore/dom/Element.cpp:711
&gt; +    if (!renderer)

This does not seem very useful since scrollTo() is a no-op if there is not renderer.

&gt;&gt; Source/WebCore/dom/Element.cpp:717
&gt;&gt; +    scrollTo(x, y);
&gt; 
&gt; I think this should just be all on one line:
&gt; 
&gt;     scrollTo(scrollLeft() + normalizeNonFiniteValue(x), scrollTop() + normalizeNonFiniteValue(y));
&gt; 
&gt; No need to keep the code that modifies x and y above on four separate lines of code above.

I agree with Darin here.

&gt; Source/WebCore/dom/Element.cpp:727
&gt; +    document().updateLayoutIgnorePendingStylesheets();

Seems like we wouldn&apos;t need this call if we called Element::setScrollLeft() / setScrollTop() below instead of going straight to the renderer.

&gt; Source/WebCore/dom/Element.cpp:742
&gt; +        scrollableArea-&gt;setScrolledProgrammatically(true);

Looks like this wouldn&apos;t be needed if we called Element::setScrollLeft() / setScrollTop().

&gt;&gt; Source/WebCore/dom/Element.cpp:750
&gt;&gt; +    scrollTo(options);
&gt; 
&gt; I think you can instead just write:
&gt; 
&gt;     scrollTo({ x, y });
&gt; 
&gt; Although if I am write about the optional thing then it might need to be:
&gt; 
&gt;     scrollTo(ScrollToOptions{ x, y });

Yes, definitely.

&gt;&gt;&gt; Source/WebCore/html/HTMLBodyElement.cpp:313
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; First, I think we can make DOMWindow::ScrollToOptions and Element::ScrollToOptions be the same struct. Can just use &quot;using&quot; to bring it into one or both classes as a member even if it’s defined in the other class or outside any class. Then we would not need to convert the type here.
&gt;&gt; 
&gt;&gt; Second, if we do need to convert it I think we can write it like this:
&gt;&gt; 
&gt;&gt;     window-&gt;scrollTo({ options.left, options.top });
&gt; 
&gt; The generated code references Element::ScrollToOptions and DOMWindow::ScrollToOptions, so I think we&apos;d have to change the generator to fix this?

This is why Darin suggests using &quot;using ...&quot; statements so that Element::ScrollToOptions and DOMWindow::ScrollToOptions point to the same type. No generator change should be needed. I think we should fix this before landing if not too much work. At the very least use window-&gt;scrollTo({ options.left, options.top }); like Darin suggests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226824</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-06 14:20:45 -0700</bug_when>
    <thetext>https://trac.webkit.org/r205505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1445389</commentid>
    <comment_count>8</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-07-26 07:08:21 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/234254</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287988</attachid>
            <date>2016-09-05 18:31:10 -0700</date>
            <delta_ts>2016-09-06 09:12:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161610-20160905182849.patch</filename>
            <type>text/plain</type>
            <size>23004</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjM3MDBiZjE0OTMyMTgw
OTc5NjU0Yjk0MThmNWEzOTdhMTAyY2ZhMy4uMjdiY2Y1M2VkZWJiNGVhNDVjZDJiZmNhZjBhZDBm
MmJhZjY5N2EwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA5LTA1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFsaWduIGVsZW1l
bnQuc2Nyb2xsKCkgLyBzY3JvbGxUbygpIC8gc2Nyb2xsQnkoKSB3aXRoIHRoZSBDU1NPTSBzcGVj
aWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjE2MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnQgRWxlbWVudC5zY3JvbGwoKSwgc2Nyb2xsQnkoKSBhbmQgc2Nyb2xsVG8oKSB3
aXRoIHgseSBhbmQgU2Nyb2xsVG9PcHRpb25zCisgICAgICAgIG9uIEVsZW1lbnQsIGFjY29yZGlu
ZyB0byA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLXZpZXcvI2VsZW1lbnQtc2Nyb2xs
aW5nLW1lbWJlcnM+CisKKyAgICAgICAgV2ViS2l0J3MgYmVoYXZpb3Igb2YgdHJlYXRpbmcgc2Ny
b2xscyBvbiB0aGUgYm9keSBlbGVtZW50IGluIGJvdGggcXVpcmtzIGFuZCBzdHJpY3QgbW9kZQor
ICAgICAgICBpcyBwcmVzZXJ2ZWQuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZG9tL0VsZW1lbnQv
c2Nyb2xsaW5nLWZ1bnRpb25zLW9uLWJvZHktcXVpcmtzLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvZG9tL0VsZW1lbnQvc2Nyb2xsaW5nLWZ1bnRpb25zLW9uLWJvZHkuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9kb20vRWxlbWVudC9zY3JvbGxpbmctZnVudGlvbnMtb24tZWxlbWVudC5odG1s
CisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVOb25GaW5pdGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxUbyk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpzY3Jv
bGxUbyk6CisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuaDoKKwogMjAxNi0wOS0wNSAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgaXMgbm90IHRha2luZyBpbnRvIGFjY291bnQgZmV0Y2ggb3B0aW9ucyB0byB1c2Ug
b3Igbm90IGNhY2hlZCByZXNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBkYzVlYWMw
NDdlYTAzMzQyZTY5NzlkM2VhZjdiMTI5YzMxNzIyMzhkLi4xZWQ0MTcyNjA5NmMwNmZmZDFmMTBj
Y2ZmNzUwOWYwY2Y0N2JkY2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC02ODksNyArNjg5
LDY3IEBAIHZvaWQgRWxlbWVudDo6c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoYm9vbCBjZW50
ZXJJZk5vdFZpc2libGUpCiAgICAgZWxzZQogICAgICAgICByZW5kZXJlcigpLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgYm91bmRzLCBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduVG9FZGdlSWZOb3RWaXNpYmxlLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9F
ZGdlSWZOb3RWaXNpYmxlKTsKIH0KLSAgICAKKwordm9pZCBFbGVtZW50OjpzY3JvbGxCeShjb25z
dCBTY3JvbGxUb09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIHNjcm9sbEJ5KG9wdGlv
bnMubGVmdC52YWx1ZU9yKDApLCBvcHRpb25zLnRvcC52YWx1ZU9yKDApKTsKK30KKworc3RhdGlj
IGlubGluZSBkb3VibGUgbm9ybWFsaXplTm9uRmluaXRlVmFsdWUoZG91YmxlIGYpCit7CisgICAg
cmV0dXJuIHN0ZDo6aXNmaW5pdGUoZikgPyBmIDogMDsKK30KKwordm9pZCBFbGVtZW50OjpzY3Jv
bGxCeShkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgeCA9IG5vcm1hbGl6ZU5vbkZpbml0ZVZh
bHVlKHgpOworICAgIHkgPSBub3JtYWxpemVOb25GaW5pdGVWYWx1ZSh5KTsKKworICAgIGRvY3Vt
ZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICBSZW5k
ZXJCb3gqIHJlbmRlcmVyID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgeCArPSBzY3JvbGxMZWZ0KCk7CisgICAgeSArPSBzY3JvbGxUb3Ao
KTsKKworICAgIHNjcm9sbFRvKHgsIHkpOworfQorCit2b2lkIEVsZW1lbnQ6OnNjcm9sbFRvKGNv
bnN0IFNjcm9sbFRvT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBp
cyB0aGUgcm9vdCBlbGVtZW50IGFuZCBkb2N1bWVudCBpcyBpbiBxdWlya3MgbW9kZSwgdGVybWlu
YXRlIHRoZXNlIHN0ZXBzLgorICAgIC8vIE5vdGUgdGhhdCBXZWJLaXQgYWx3YXlzIHVzZXMgcXVp
cmtzIG1vZGUgZG9jdW1lbnQgc2Nyb2xsaW5nIGJlaGF2aW9yLiBTZWUgRG9jdW1lbnQ6OnNjcm9s
bGluZ0VsZW1lbnQoKS4KKyAgICBpZiAodGhpcyA9PSBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgLy8gSWYgdGhlIGVsZW1lbnQgZG9lcyBub3Qg
aGF2ZSBhbnkgYXNzb2NpYXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIGVsZW1lbnQgaGFzIG5vIGFz
c29jaWF0ZWQgc2Nyb2xsaW5nIGJveCwKKyAgICAvLyBvciB0aGUgZWxlbWVudCBoYXMgbm8gb3Zl
cmZsb3csIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy4KKyAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0g
cmVuZGVyQm94KCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93
Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOb3JtYWxpemUgbm9uLWZpbml0ZSB2
YWx1ZXMgZm9yIGxlZnQgYW5kIHRvcCBkaWN0aW9uYXJ5IG1lbWJlcnMgb2Ygb3B0aW9ucywgaWYg
cHJlc2VudC4KKyAgICBkb3VibGUgeCA9IG9wdGlvbnMubGVmdCA/IG5vcm1hbGl6ZU5vbkZpbml0
ZVZhbHVlKG9wdGlvbnMubGVmdC52YWx1ZSgpKSA6IGFkanVzdEZvckFic29sdXRlWm9vbShyZW5k
ZXJlci0+c2Nyb2xsTGVmdCgpLCAqcmVuZGVyZXIpOworICAgIGRvdWJsZSB5ID0gb3B0aW9ucy50
b3AgPyBub3JtYWxpemVOb25GaW5pdGVWYWx1ZShvcHRpb25zLnRvcC52YWx1ZSgpKSA6IGFkanVz
dEZvckFic29sdXRlWm9vbShyZW5kZXJlci0+c2Nyb2xsVG9wKCksICpyZW5kZXJlcik7CisKKyAg
ICByZW5kZXJlci0+c2V0U2Nyb2xsTGVmdChjbGFtcFRvSW50ZWdlcih4ICogcmVuZGVyZXItPnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFt
cFRvSW50ZWdlcih5ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKSk7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCisgICAgICAgIHNj
cm9sbGFibGVBcmVhLT5zZXRTY3JvbGxlZFByb2dyYW1tYXRpY2FsbHkodHJ1ZSk7Cit9CisKK3Zv
aWQgRWxlbWVudDo6c2Nyb2xsVG8oZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIFNjcm9sbFRv
T3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMubGVmdCA9IHg7CisgICAgb3B0aW9ucy50b3Ag
PSB5OworICAgIHNjcm9sbFRvKG9wdGlvbnMpOworfQorCiB2b2lkIEVsZW1lbnQ6OnNjcm9sbEJ5
VW5pdHMoaW50IHVuaXRzLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBk
b2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKaW5kZXggMWJlNWQyYmEwYTkxNGZiYjMxYmVkMGEwODY5NmIzMmM5MDE4ZjExNi4u
YzFmZDllNmNiM2U2OTg1NTY1YmJiNjQ3N2FjZWQzMzhkNjk5MDM5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCkBAIC0xMzYsNiArMTM2LDE2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNjcm9sbEludG9WaWV3SWZOZWVkZWQoYm9vbCBjZW50ZXJJZk5lZWRlZCA9IHRydWUpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoYm9vbCBjZW50
ZXJJZk5vdFZpc2libGUgPSB0cnVlKTsKIAorICAgIHN0cnVjdCBTY3JvbGxUb09wdGlvbnMgewor
ICAgICAgICBPcHRpb25hbDxkb3VibGU+IGxlZnQ7CisgICAgICAgIE9wdGlvbmFsPGRvdWJsZT4g
dG9wOworICAgIH07CisKKyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IFNjcm9sbFRvT3B0aW9ucyYp
OworICAgIHZvaWQgc2Nyb2xsQnkoZG91YmxlIHgsIGRvdWJsZSB5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsVG9PcHRpb25zJik7CisgICAgdm9pZCBzY3JvbGxUbyhk
b3VibGUgeCwgZG91YmxlIHkpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxCeUxp
bmVzKGludCBsaW5lcyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxCeVBhZ2VzKGlu
dCBwYWdlcyk7CiAKQEAgLTE1Nyw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgZG91YmxlIGNsaWVudFRvcCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBjbGllbnRX
aWR0aCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBjbGllbnRIZWlnaHQoKTsKKwogICAg
IHZpcnR1YWwgaW50IHNjcm9sbExlZnQoKTsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxUb3AoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRs
CmluZGV4IDg0NzBlNWRkZTdkMmUyMzI1NDExZTczYWFhN2E1MTljNDVhMTdjZTUuLjVjNDZkZmRm
YzdmMTI5OGU5YzQ0YTdkOWQyMTdjNTQ3Y2IzYjZlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwK
QEAgLTcxLDggKzcxLDggQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGNsaWVudFdp
ZHRoOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgY2xpZW50SGVpZ2h0OwogCi0gICAg
YXR0cmlidXRlIGxvbmcgc2Nyb2xsTGVmdDsKLSAgICBhdHRyaWJ1dGUgbG9uZyBzY3JvbGxUb3A7
CisgICAgYXR0cmlidXRlIGxvbmcgc2Nyb2xsTGVmdDsgLy8gRklYTUU6IHNob3VsZCBiZSB1bnJl
c3RyaWN0ZWQgZG91YmxlCisgICAgYXR0cmlidXRlIGxvbmcgc2Nyb2xsVG9wOyAvLyBGSVhNRTog
c2hvdWxkIGJlIHVucmVzdHJpY3RlZCBkb3VibGUKICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyBzY3JvbGxXaWR0aDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBzY3JvbGxIZWlnaHQ7
CiAKQEAgLTgwLDEyICs4MCwyMiBAQAogCiAgICAgdm9pZCBzY3JvbGxJbnRvVmlldyhvcHRpb25h
bCBib29sZWFuIGFsaWduV2l0aFRvcCA9IHRydWUpOwogCi0gICAgc2VxdWVuY2U8RE9NU3RyaW5n
PiBnZXRBdHRyaWJ1dGVOYW1lcygpOwotCiAgICAgdm9pZCBzY3JvbGxJbnRvVmlld0lmTmVlZGVk
KG9wdGlvbmFsIGJvb2xlYW4gY2VudGVySWZOZWVkZWQgPSB0cnVlKTsKKworICAgIFtJbXBsZW1l
bnRlZEFzPXNjcm9sbFRvXSB2b2lkIHNjcm9sbChvcHRpb25hbCBTY3JvbGxUb09wdGlvbnMgb3B0
aW9ucyk7CisgICAgW0ltcGxlbWVudGVkQXM9c2Nyb2xsVG9dIHZvaWQgc2Nyb2xsKHVucmVzdHJp
Y3RlZCBkb3VibGUgeCwgdW5yZXN0cmljdGVkIGRvdWJsZSB5KTsKKworICAgIHZvaWQgc2Nyb2xs
VG8ob3B0aW9uYWwgU2Nyb2xsVG9PcHRpb25zIG9wdGlvbnMpOworICAgIHZvaWQgc2Nyb2xsVG8o
dW5yZXN0cmljdGVkIGRvdWJsZSB4LCB1bnJlc3RyaWN0ZWQgZG91YmxlIHkpOworCisgICAgdm9p
ZCBzY3JvbGxCeShvcHRpb25hbCBTY3JvbGxUb09wdGlvbnMgb3B0aW9uKTsKKyAgICB2b2lkIHNj
cm9sbEJ5KHVucmVzdHJpY3RlZCBkb3VibGUgeCwgdW5yZXN0cmljdGVkIGRvdWJsZSB5KTsKKwog
ICAgIHZvaWQgc2Nyb2xsQnlMaW5lcyhvcHRpb25hbCBsb25nIGxpbmVzID0gMCk7CiAgICAgdm9p
ZCBzY3JvbGxCeVBhZ2VzKG9wdGlvbmFsIGxvbmcgcGFnZXMgPSAwKTsKIAorICAgIHNlcXVlbmNl
PERPTVN0cmluZz4gZ2V0QXR0cmlidXRlTmFtZXMoKTsKKwogICAgIEhUTUxDb2xsZWN0aW9uIGdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoRE9NU3RyaW5nIG5hbWUpOwogICAgIFtUcmVhdE51bGxBcz1F
bXB0eVN0cmluZywgU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlu
bmVySFRNTDsKICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmcsIFNldHRlclJhaXNlc0V4Y2Vw
dGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyBvdXRlckhUTUw7CkBAIC0xNzgsNiArMTg4LDEyIEBA
IGRpY3Rpb25hcnkgU2hhZG93Um9vdEluaXQgewogICAgIHJlcXVpcmVkIFNoYWRvd1Jvb3RNb2Rl
IG1vZGU7CiB9OwogCisvLyBGSVhNRTogU3VwcG9ydCBTY3JvbGxCZWhhdmlvci4KK2RpY3Rpb25h
cnkgU2Nyb2xsVG9PcHRpb25zIHsKKyAgICB1bnJlc3RyaWN0ZWQgZG91YmxlIGxlZnQ7CisgICAg
dW5yZXN0cmljdGVkIGRvdWJsZSB0b3A7Cit9OworCiBFbGVtZW50IGltcGxlbWVudHMgQW5pbWF0
YWJsZTsKIEVsZW1lbnQgaW1wbGVtZW50cyBDaGlsZE5vZGU7CiBFbGVtZW50IGltcGxlbWVudHMg
Tm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwCmluZGV4IDk5N2RiMTc5N2IyYjlkMGYyNTUxOWIwNTc1OTUxNGM2YTkzNWQxZjcuLmRh
ZjZmMmVjMjIwYTQ0NTZiNzNkNjAyYTlkMmM0YTRiYTY1NDljNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NJ
bWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMjk0LDYg
KzI5NSwyNiBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0U2Nyb2xsVG9wKGludCBzY3JvbGxU
b3ApCiAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTsKIH0K
IAordm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFRvT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBpZiAoaXNGaXJzdEJvZHlFbGVtZW50T2ZEb2N1bWVudCgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHRoZSBIVE1MIGJvZHkgZWxlbWVudCwgZG9jdW1l
bnQgaXMgaW4gcXVpcmtzIG1vZGUsIGFuZCB0aGUgZWxlbWVudCBpcyBub3QgcG90ZW50aWFsbHkg
c2Nyb2xsYWJsZSwKKyAgICAgICAgLy8gaW52b2tlIHNjcm9sbCgpIG9uIHdpbmRvdyB3aXRoIG9w
dGlvbnMgYXMgdGhlIG9ubHkgYXJndW1lbnQsIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuCisg
ICAgICAgIC8vIE5vdGUgdGhhdCBXZWJLaXQgYWx3YXlzIHVzZXMgcXVpcmtzIG1vZGUgZG9jdW1l
bnQgc2Nyb2xsaW5nIGJlaGF2aW9yLiBTZWUgRG9jdW1lbnQ6OnNjcm9sbGluZ0VsZW1lbnQoKS4K
KyAgICAgICAgLy8gRklYTUU6IHNjcm9sbGluZyBhbiBpbmRlcGVuZGVudGx5IHNjcm9sbGFibGUg
Ym9keSBpcyBicm9rZW46IHdlYmtpdC5vcmcvYi8xNjE2MTIKKyAgICAgICAgRE9NV2luZG93KiB3
aW5kb3cgPSBkb2N1bWVudCgpLmRvbVdpbmRvdygpOworICAgICAgICBpZiAoIXdpbmRvdykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBET01XaW5kb3c6OlNjcm9sbFRvT3B0aW9ucyB3
aW5kb3dTY3JvbGxPcHRpb25zOworICAgICAgICB3aW5kb3dTY3JvbGxPcHRpb25zLmxlZnQgPSBv
cHRpb25zLmxlZnQ7CisgICAgICAgIHdpbmRvd1Njcm9sbE9wdGlvbnMudG9wID0gb3B0aW9ucy50
b3A7CisgICAgICAgIHdpbmRvdy0+c2Nyb2xsVG8od2luZG93U2Nyb2xsT3B0aW9ucyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzY3JvbGxUbyhvcHRp
b25zKTsKK30KKwogaW50IEhUTUxCb2R5RWxlbWVudDo6c2Nyb2xsSGVpZ2h0KCkKIHsKICAgICBp
ZiAoaXNGaXJzdEJvZHlFbGVtZW50T2ZEb2N1bWVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Qm9keUVsZW1lbnQuaAppbmRleCBlN2E2ZjdjNzU0ZDAyMTYxMjViODhlMTE0MjY4ZTRlZjU5YTM5
Y2IxLi45ODIwZmYyYWE4NTYwMTNhYWMzN2IxYzIzYjU5MjA0MmY3YzgzMzUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgKQEAgLTU2LDYgKzU2LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICBpbnQgc2Nyb2xsVG9wKCkgZmluYWw7CiAgICAgdm9pZCBzZXRTY3JvbGxUb3AoaW50
KSBmaW5hbDsKKworICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsVG9PcHRpb25zJikgZmlu
YWw7CiAgICAgCiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGZpbmFsOwogICAgIGludCBzY3JvbGxX
aWR0aCgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVlOTI3N2RmY2RlOWQ1NGVmOTBmMjBmNDNjNTQ3M2M4ZmFh
MDNiM2IuLmExMjUzOTYwZTE3MmViZWNlZjdiZDJjOTNhYjhjNDk2ZDI0Njg3ZjkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxNi0wOS0wNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KKworICAgICAgICBBbGlnbiBlbGVtZW50LnNjcm9sbCgpIC8gc2Nyb2xsVG8oKSAv
IHNjcm9sbEJ5KCkgd2l0aCB0aGUgQ1NTT00gc3BlY2lmaWNhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNjEwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L3Njcm9s
bGluZy1mdW50aW9ucy1vbi1ib2R5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vRWxlbWVudC9zY3JvbGxpbmctZnVudGlvbnMtb24tYm9keS1xdWlya3MtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50aW9u
cy1vbi1ib2R5LXF1aXJrcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50
L3Njcm9sbGluZy1mdW50aW9ucy1vbi1ib2R5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL0VsZW1lbnQvc2Nyb2xsaW5nLWZ1bnRpb25zLW9uLWVsZW1lbnQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50aW9ucy1vbi1l
bGVtZW50Lmh0bWw6IEFkZGVkLgorCiAyMDE2LTA5LTA1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5v
cm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWJSVEM6IFNldmVyYWwgbWVkaWEgc3RyZWFt
IHRlc3RzIGNyYXNoaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50
L3Njcm9sbGluZy1mdW50aW9ucy1vbi1ib2R5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0VsZW1lbnQvc2Nyb2xsaW5nLWZ1bnRpb25zLW9uLWJvZHktZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA3N2ZiOWFmNDJlOGJhOTJjNWJmMjVhZGJkYmQ3Y2IwMjEwMDk0NWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50
aW9ucy1vbi1ib2R5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIxIEBACitUZXN0cyBzY3JvbGxU
by9CeSh4LHkpIGFuZCBzY3JvbGxUby9CeShzY3JvbGxPcHRpb25zKSBvbiB0aGUgYm9keS4gV2Vi
S2l0IGFsd2F5cyB1c2VzIHF1aXJrcyBtb2RlIGZvciBib2R5IHNjcm9sbGluZyBiZWhhdmlvciwg
c28gdGhpcyBzY3JvbGxzIHRoZSB3aW5kb3cuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIHNjcm9sbGVyLnNjcm9sbExlZnQgaXMgMjAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xs
VG9wIGlzIDUwMAorUEFTUyB3aW5kb3cuc2Nyb2xsWCBpcyAyMAorUEFTUyB3aW5kb3cuc2Nyb2xs
WSBpcyA1MDAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsTGVmdCBpcyA3MAorUEFTUyBzY3JvbGxlci5z
Y3JvbGxUb3AgaXMgNTYwCitQQVNTIHdpbmRvdy5zY3JvbGxYIGlzIDcwCitQQVNTIHdpbmRvdy5z
Y3JvbGxZIGlzIDU2MAorUEFTUyBzY3JvbGxlci5zY3JvbGxMZWZ0IGlzIDEwMAorUEFTUyBzY3Jv
bGxlci5zY3JvbGxUb3AgaXMgNDAwCitQQVNTIHdpbmRvdy5zY3JvbGxYIGlzIDEwMAorUEFTUyB3
aW5kb3cuc2Nyb2xsWSBpcyA0MDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50
L3Njcm9sbGluZy1mdW50aW9ucy1vbi1ib2R5LXF1aXJrcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50aW9ucy1vbi1ib2R5LXF1aXJrcy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFmZTE1MzgyZGM4NGVlNDhkMWVmNmFiNTAwYmNhYjZi
MGFjNmFiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
c2Nyb2xsaW5nLWZ1bnRpb25zLW9uLWJvZHktcXVpcmtzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDIxIEBACitUZXN0cyBzY3JvbGxUby9CeSh4LHkpIGFuZCBzY3JvbGxUby9CeShzY3JvbGxPcHRp
b25zKSBvbiB0aGUgYm9keSBpbiBxdWlya3MgbW9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsTGVmdCBpcyAyMAorUEFTUyBzY3JvbGxlci5z
Y3JvbGxUb3AgaXMgNTAwCitQQVNTIHdpbmRvdy5zY3JvbGxYIGlzIDIwCitQQVNTIHdpbmRvdy5z
Y3JvbGxZIGlzIDUwMAorUEFTUyBzY3JvbGxlci5zY3JvbGxMZWZ0IGlzIDcwCitQQVNTIHNjcm9s
bGVyLnNjcm9sbFRvcCBpcyA1NjAKK1BBU1Mgd2luZG93LnNjcm9sbFggaXMgNzAKK1BBU1Mgd2lu
ZG93LnNjcm9sbFkgaXMgNTYwCitQQVNTIHNjcm9sbGVyLnNjcm9sbExlZnQgaXMgMTAwCitQQVNT
IHNjcm9sbGVyLnNjcm9sbFRvcCBpcyA0MDAKK1BBU1Mgd2luZG93LnNjcm9sbFggaXMgMTAwCitQ
QVNTIHdpbmRvdy5zY3JvbGxZIGlzIDQwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvc2Nyb2xsaW5nLWZ1bnRpb25zLW9uLWJvZHktcXVpcmtzLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50aW9ucy1vbi1ib2R5LXF1aXJrcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlMjFhN2ZhZjVkZmJjZmY2NWNiNmE1NDFmZGQ2YWEzZWQ1OThhMTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1m
dW50aW9ucy1vbi1ib2R5LXF1aXJrcy5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzxodG1sPg0KKyAg
ICA8aGVhZD4NCisgICAgICAgIDxzdHlsZT4NCisgICAgICAgICAgICBkaXYgew0KKyAgICAgICAg
ICAgICAgICB3aWR0aDogOTk5OXB4Ow0KKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDk5OTlweDsN
CisgICAgICAgICAgICB9DQorICAgICAgICA8L3N0eWxlPg0KKyAgICAgICAgPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+DQorICAgICAgICA8
c2NyaXB0Pg0KKyAgICAgICAgICAgIHZhciBzY3JvbGxlcjsNCisgICAgICAgICAgICBmdW5jdGlv
biBydW5UZXN0KCkgew0KKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbignVGVzdHMgc2Nyb2xs
VG8vQnkoeCx5KSBhbmQgc2Nyb2xsVG8vQnkoc2Nyb2xsT3B0aW9ucykgb24gdGhlIGJvZHkgaW4g
cXVpcmtzIG1vZGUuJyk7DQorICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBzY3Jv
bGxlciA9IGRvY3VtZW50LmJvZHk7DQorICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7DQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUbygyMCwgNTAwKTsN
CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxMZWZ0IiwgIjIw
Iik7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsVG9wIiwg
IjUwMCIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoIndpbmRvdy5zY3JvbGxYIiwg
IjIwIik7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgid2luZG93LnNjcm9sbFkiLCAi
NTAwIik7DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxCeSg1MCwgNjAp
Ow0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQiLCAi
NzAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3Ai
LCAiNTYwIik7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgid2luZG93LnNjcm9sbFgi
LCAiNzAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJ3aW5kb3cuc2Nyb2xsWSIs
ICI1NjAiKTsNCisNCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHsgJ2xl
ZnQnIDogMTAwLCAndG9wJyA6IDQwMCB9KTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJl
KCJzY3JvbGxlci5zY3JvbGxMZWZ0IiwgIjEwMCIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2hv
dWxkQmUoInNjcm9sbGVyLnNjcm9sbFRvcCIsICI0MDAiKTsNCisgICAgICAgICAgICAgICAgICAg
IHNob3VsZEJlKCJ3aW5kb3cuc2Nyb2xsWCIsICIxMDAiKTsNCisgICAgICAgICAgICAgICAgICAg
IHNob3VsZEJlKCJ3aW5kb3cuc2Nyb2xsWSIsICI0MDAiKTsNCisNCisgICAgICAgICAgICAgICAg
ICAgIHNjcm9sbGVyLnNjcm9sbFRvKDAsIDApOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7DQorICAgICAgICAgICAgICAgIH0sIDApOw0KKyAgICAgICAgICAgIH0NCisg
ICAgICAgICAgICB2YXIganNUZXN0SXNBc3luYyA9IHRydWU7DQorICAgICAgICA8L3NjcmlwdD4N
CisgICAgPC9oZWFkPg0KKyAgICA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+DQorICAgICAgICA8
ZGl2Pg0KKyAgICAgICAgPC9kaXY+DQorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+DQorICAgIDwvYm9keT4NCis8L2h0bWw+
DQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY3JvbGxpbmctZnVu
dGlvbnMtb24tYm9keS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY3JvbGxp
bmctZnVudGlvbnMtb24tYm9keS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxOTFkMGUzNmNmNDVhYTJjODU1
ZTRjOThjNmRkMGE2ODAwOTdhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50aW9ucy1vbi1ib2R5Lmh0bWwKQEAgLTAsMCArMSw0
OSBAQAorPCFET0NUWVBFIGh0bWw+DQorPGh0bWw+DQorICAgIDxoZWFkPg0KKyAgICAgICAgPHN0
eWxlPg0KKyAgICAgICAgICAgIGRpdiB7DQorICAgICAgICAgICAgICAgIHdpZHRoOiA5OTk5cHg7
DQorICAgICAgICAgICAgICAgIGhlaWdodDogOTk5OXB4Ow0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgIDwvc3R5bGU+DQorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4NCisgICAgICAgIDxzY3JpcHQ+DQorICAgICAgICAgICAg
dmFyIHNjcm9sbGVyOw0KKyAgICAgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7DQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0cyBzY3JvbGxUby9CeSh4LHkpIGFuZCBzY3JvbGxU
by9CeShzY3JvbGxPcHRpb25zKSBvbiB0aGUgYm9keS4gV2ViS2l0IGFsd2F5cyB1c2VzIHF1aXJr
cyBtb2RlIGZvciBib2R5IHNjcm9sbGluZyBiZWhhdmlvciwgc28gdGhpcyBzY3JvbGxzIHRoZSB3
aW5kb3cuJyk7DQorICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBzY3JvbGxlciA9
IGRvY3VtZW50LmJvZHk7DQorICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
DQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUbygyMCwgNTAwKTsNCisgICAg
ICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxMZWZ0IiwgIjIwIik7DQor
ICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsVG9wIiwgIjUwMCIp
Ow0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoIndpbmRvdy5zY3JvbGxYIiwgIjIwIik7
DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgid2luZG93LnNjcm9sbFkiLCAiNTAwIik7
DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxCeSg1MCwgNjApOw0KKyAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQiLCAiNzAiKTsN
CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiNTYw
Iik7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgid2luZG93LnNjcm9sbFgiLCAiNzAi
KTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJ3aW5kb3cuc2Nyb2xsWSIsICI1NjAi
KTsNCisNCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHsgJ2xlZnQnIDog
MTAwLCAndG9wJyA6IDQwMCB9KTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3Jv
bGxlci5zY3JvbGxMZWZ0IiwgIjEwMCIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUo
InNjcm9sbGVyLnNjcm9sbFRvcCIsICI0MDAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZEJlKCJ3aW5kb3cuc2Nyb2xsWCIsICIxMDAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZEJlKCJ3aW5kb3cuc2Nyb2xsWSIsICI0MDAiKTsNCisNCisgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGVyLnNjcm9sbFRvKDAsIDApOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgZmluaXNoSlNU
ZXN0KCk7DQorICAgICAgICAgICAgICAgIH0sIDApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICB2YXIganNUZXN0SXNBc3luYyA9IHRydWU7DQorICAgICAgICA8L3NjcmlwdD4NCisgICAg
PC9oZWFkPg0KKyAgICA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+DQorICAgICAgICA8ZGl2Pg0K
KyAgICAgICAgPC9kaXY+DQorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+DQorICAgIDwvYm9keT4NCis8L2h0bWw+DQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY3JvbGxpbmctZnVudGlvbnMt
b24tZWxlbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Nj
cm9sbGluZy1mdW50aW9ucy1vbi1lbGVtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTg1
OTZmOGZhNWFkNDAzNzY5OTJlMzBmZTJhNzViZjVmNjk3OWJjCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY3JvbGxpbmctZnVudGlvbnMtb24tZWxlbWVu
dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0MSBAQAorVGVzdHMgc2Nyb2xsVG8vQnkoeCx5KSBh
bmQgc2Nyb2xsVG8vQnkoc2Nyb2xsT3B0aW9ucykgb24gRWxlbWVudAorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBzY3JvbGxlci5zY3JvbGxMZWZ0IGlzIDIwCitQQVNTIHNj
cm9sbGVyLnNjcm9sbFRvcCBpcyA1MDAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsTGVmdCBpcyA3MAor
UEFTUyBzY3JvbGxlci5zY3JvbGxUb3AgaXMgNTYwCitQQVNTIHNjcm9sbGVyLnNjcm9sbExlZnQg
aXMgMTAwCitQQVNTIHNjcm9sbGVyLnNjcm9sbFRvcCBpcyA0MDAKK1BBU1Mgc2Nyb2xsZXIuc2Ny
b2xsTGVmdCBpcyAxMjAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsVG9wIGlzIDQzMAorUEFTUyBzY3Jv
bGxlci5zY3JvbGxMZWZ0IGlzIDEyMAorUEFTUyBzY3JvbGxlci5zY3JvbGxUb3AgaXMgNzAwCitQ
QVNTIHNjcm9sbGVyLnNjcm9sbExlZnQgaXMgMzAwCitQQVNTIHNjcm9sbGVyLnNjcm9sbFRvcCBp
cyA3MDAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsTGVmdCBpcyA1MDAKK1BBU1Mgc2Nyb2xsZXIuc2Ny
b2xsVG9wIGlzIDcwMAorUEFTUyBzY3JvbGxlci5zY3JvbGxMZWZ0IGlzIDUwMAorUEFTUyBzY3Jv
bGxlci5zY3JvbGxUb3AgaXMgOTUwCitQQVNTIHNjcm9sbGVyLnNjcm9sbExlZnQgaXMgMjAKK1BB
U1Mgc2Nyb2xsZXIuc2Nyb2xsVG9wIGlzIDI1CitQQVNTIHNjcm9sbGVyLnNjcm9sbExlZnQgaXMg
MzAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsVG9wIGlzIDM1CitQQVNTIHNjcm9sbGVyLnNjcm9sbExl
ZnQgaXMgMAorUEFTUyBzY3JvbGxlci5zY3JvbGxUb3AgaXMgMAorUEFTUyBzY3JvbGxlci5zY3Jv
bGxMZWZ0IGlzIDEwCitQQVNTIHNjcm9sbGVyLnNjcm9sbFRvcCBpcyAxMAorUEFTUyBzY3JvbGxl
ci5zY3JvbGxMZWZ0IGlzIDAKK1BBU1Mgc2Nyb2xsZXIuc2Nyb2xsVG9wIGlzIDAKK1BBU1Mgc2Ny
b2xsZXIuc2Nyb2xsTGVmdCBpcyAwCitQQVNTIHNjcm9sbGVyLnNjcm9sbFRvcCBpcyAwCitQQVNT
IHNjcm9sbGVyLnNjcm9sbExlZnQgaXMgMAorUEFTUyBzY3JvbGxlci5zY3JvbGxUb3AgaXMgMAor
UEFTUyBzY3JvbGxlci5zY3JvbGxMZWZ0IGlzIDEwMAorUEFTUyBzY3JvbGxlci5zY3JvbGxUb3Ag
aXMgNDAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY3JvbGxpbmctZnVu
dGlvbnMtb24tZWxlbWVudC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY3Jv
bGxpbmctZnVudGlvbnMtb24tZWxlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzM2Q1MWYzMTc5NGI2
Y2E5ODdhYmM1OTdmZjc5OTY2ODYxYzliMGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L3Njcm9sbGluZy1mdW50aW9ucy1vbi1lbGVtZW50Lmh0bWwKQEAg
LTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQRSBodG1sPg0KKzxodG1sPg0KKyAgICA8aGVhZD4NCisg
ICAgICAgIDxzdHlsZT4NCisgICAgICAgICAgICAjc2Nyb2xsZXIgew0KKyAgICAgICAgICAgICAg
ICBoZWlnaHQ6IDUwMHB4Ow0KKyAgICAgICAgICAgICAgICB3aWR0aDo1MDBweDsNCisgICAgICAg
ICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIGJsYWNrOw0KKyAgICAgICAgICAgICAgICBvdmVy
ZmxvdzogYXV0bzsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgLmNvbnRlbnQgew0KKyAg
ICAgICAgICAgICAgICB3aWR0aDogOTk5OXB4Ow0KKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDk5
OTlweDsNCisgICAgICAgICAgICB9DQorICAgICAgICA8L3N0eWxlPg0KKyAgICAgICAgPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+DQorICAg
ICAgICA8c2NyaXB0Pg0KKyAgICAgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7DQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0cyBzY3JvbGxUby9CeSh4LHkpIGFuZCBzY3JvbGxU
by9CeShzY3JvbGxPcHRpb25zKSBvbiBFbGVtZW50Jyk7DQorICAgICAgICAgICAgICAgIA0KKyAg
ICAgICAgICAgICAgICB2YXIgc2Nyb2xsZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Ny
b2xsZXInKTsNCisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsNCisgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKDIwLCA1MDApOw0KKyAgICAgICAgICAg
ICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQiLCAiMjAiKTsNCisgICAgICAg
ICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiNTAwIik7DQorDQor
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxCeSg1MCwgNjApOw0KKyAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQiLCAiNzAiKTsNCisgICAg
ICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiNTYwIik7DQor
DQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyh7ICdsZWZ0JyA6IDEwMCwg
J3RvcCcgOiA0MDAgfSk7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIu
c2Nyb2xsTGVmdCIsICIxMDAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3Jv
bGxlci5zY3JvbGxUb3AiLCAiNDAwIik7DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxl
ci5zY3JvbGxCeSh7ICdsZWZ0JyA6IDIwLCAndG9wJyA6IDMwIH0pOw0KKyAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQiLCAiMTIwIik7DQorICAgICAgICAg
ICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsVG9wIiwgIjQzMCIpOw0KKw0KKyAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8oeyAndG9wJyA6IDcwMCB9KTsNCisg
ICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxMZWZ0IiwgIjEyMCIp
Ow0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbFRvcCIsICI3
MDAiKTsNCisNCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKHsgJ2xlZnQn
IDogMzAwIH0pOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9s
bExlZnQiLCAiMzAwIik7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIu
c2Nyb2xsVG9wIiwgIjcwMCIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Ny
b2xsQnkoeyAnbGVmdCcgOiAyMDAgfSk7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgi
c2Nyb2xsZXIuc2Nyb2xsTGVmdCIsICI1MDAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiNzAwIik7DQorDQorICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxlci5zY3JvbGxCeSh7ICd0b3AnIDogMjUwIH0pOw0KKyAgICAgICAgICAgICAgICAg
ICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQiLCAiNTAwIik7DQorICAgICAgICAgICAg
ICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsVG9wIiwgIjk1MCIpOw0KKw0KKyAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8oMjAuNSwgMjUuNSk7DQorICAgICAgICAg
ICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsTGVmdCIsICIyMCIpOw0KKyAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbFRvcCIsICIyNSIpOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8oMzAuOTksIDM1Ljk5KTsNCisg
ICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxMZWZ0IiwgIjMwIik7
DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsVG9wIiwgIjM1
Iik7DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyhOYU4sIE5hTik7
DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsTGVmdCIsICIw
Iik7DQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsVG9wIiwg
IjAiKTsNCisNCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKDEwLCAxMCk7
DQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxCeShJbmZpbml0eSwgSW5maW5p
dHkpOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9sbExlZnQi
LCAiMTAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxU
b3AiLCAiMTAiKTsNCisNCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvKC0x
MDAsIC0xMDApOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9s
bExlZnQiLCAiMCIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNj
cm9sbFRvcCIsICIwIik7DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS5k
aXNwbGF5ID0gJ25vbmUnOw0KKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8o
MTAwLCAxMDApOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNjcm9s
bExlZnQiLCAiMCIpOw0KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoInNjcm9sbGVyLnNj
cm9sbFRvcCIsICIwIik7DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS5k
aXNwbGF5ID0gJ2Jsb2NrJzsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3JvbGxl
ci5zY3JvbGxMZWZ0IiwgIjAiKTsNCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJzY3Jv
bGxlci5zY3JvbGxUb3AiLCAiMCIpOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpDQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldFBhZ2Va
b29tRmFjdG9yKDEuNSk7DQorDQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxU
byh7ICdsZWZ0JyA6IDEwMCwgJ3RvcCcgOiA0MDAgfSk7DQorICAgICAgICAgICAgICAgICAgICBz
aG91bGRCZSgic2Nyb2xsZXIuc2Nyb2xsTGVmdCIsICIxMDAiKTsNCisgICAgICAgICAgICAgICAg
ICAgIHNob3VsZEJlKCJzY3JvbGxlci5zY3JvbGxUb3AiLCAiNDAwIik7DQorDQorICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KKw0KKyAgICAgICAg
ICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7DQorICAgICAgICAgICAgICAgIH0sIDApOw0KKyAg
ICAgICAgICAgIH0NCisgICAgICAgICAgICB2YXIganNUZXN0SXNBc3luYyA9IHRydWU7DQorICAg
ICAgICA8L3NjcmlwdD4NCisgICAgPC9oZWFkPg0KKyAgICA8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KSI+DQorICAgICAgICA8ZGl2IGlkPSJzY3JvbGxlciI+DQorICAgICAgICAgICAgPGRpdiBjbGFz
cz0iY29udGVudCI+U2Nyb2xsaW5nIGNvbnRlbnQ8L2Rpdj4NCisgICAgICAgIDwvZGl2Pg0KKyAg
ICAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0Pg0KKyAgICA8L2JvZHk+DQorPC9odG1sPg0K
</data>
<flag name="review"
          id="311379"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="311431"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>