<?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>166883</bug_id>
          
          <creation_ts>2017-01-10 02:26:46 -0800</creation_ts>
          <short_desc>[css-grid] Make the grid sizing data persistent through layouts</short_desc>
          <delta_ts>2017-01-12 10:42:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          <blocked>165063</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Javier Fernandez">jfernandez</reporter>
          <assigned_to name="Javier Fernandez">jfernandez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1265319</commentid>
    <comment_count>0</comment_count>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-01-10 02:26:46 -0800</bug_when>
    <thetext>Until now we were clearing the grid sizing data structures after the grid&apos;s layout logic is completed. We were doing so to reduce the memory pressure, since we were not using such data after the layout. 

However, there are certain operations that may need to access such data, like baseline position of a grid container under an inline formatting context. There are other operations that can be optimized by using this data, instead of computing it again, assuming this data is still valid after the layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265331</commentid>
    <comment_count>1</comment_count>
      <attachid>298456</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-01-10 04:00:49 -0800</bug_when>
    <thetext>Created attachment 298456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265679</commentid>
    <comment_count>2</comment_count>
      <attachid>298456</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-10 21:18:29 -0800</bug_when>
    <thetext>Comment on attachment 298456
Patch

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

&gt; Source/WebCore/rendering/RenderBox.cpp:60
&gt; +#if ENABLE(CSS_GRID_LAYOUT)
&gt; +#include &quot;RenderGrid.h&quot;
&gt; +#endif

Please put conditional includes into a separate paragraph, rather than trying to sort them in with the unconditional includes. I believe the WebKit coding guidelines call for this explicitly.

&gt; Source/WebCore/rendering/RenderBox.cpp:471
&gt; +#if ENABLE(CSS_GRID_LAYOUT)

Tiny coding style thought: When there’s a long function or multiple functions surrounded by #if, or really any whole function as opposed to some code inside a function, I prefer to leave blank lines before and after the function inside the #if/#endif, otherwise the #if seems like part of the function rather than a guard for the conditional code.

&gt; Source/WebCore/rendering/RenderBox.cpp:472
&gt; +void RenderBox::updateGridPositionAfterStyleChange(const RenderStyle&amp; style,  const RenderStyle* oldStyle)

Extra space here after the comma.

&gt; Source/WebCore/rendering/RenderBox.cpp:474
&gt; +    if (!oldStyle || !parent() || !parent()-&gt;isRenderGrid())

Typically we like to write tests like this one using the is&lt;&gt; function, which can handle null checks for you too.

    if (!oldStyle || !is&lt;RenderGrid&gt;(parent()))

&gt; Source/WebCore/rendering/RenderBox.h:657
&gt; +    void updateGridPositionAfterStyleChange(const RenderStyle&amp;,  const RenderStyle* oldStyle);

Extra space here after comma.

&gt; Source/WebCore/rendering/RenderGrid.cpp:-1956
&gt; -void RenderGrid::clearGrid()

Patch removes this function, but does not remove the declaration of it from the class definition!

&gt; Source/WebCore/rendering/RenderGrid.h:34
&gt; +#include &quot;RenderObject.h&quot;

This include is not needed.

&gt; Source/WebCore/rendering/RenderGrid.h:64
&gt; +    void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) final;
&gt; +    void removeChild(RenderObject&amp;) final;

Can these be private instead of public? When we override functions we never need them to be public unless we actually want to call them on a RenderGrid pointer rather than calling them polymorphically.

Also, please use nullptr instead of 0 for the null pointer.

Also, we may not need the default argument for the beforeChild argument if this function is only called polymorphically. There is no need to repeat the default argument simply to override the function.

&gt; Source/WebCore/rendering/RenderGrid.h:68
&gt; +    bool explicitGridDidResize(const RenderStyle&amp;) const;
&gt; +    bool namedGridLinesDefinitionDidChange(const RenderStyle&amp;) const;

Please make these private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265746</commentid>
    <comment_count>3</comment_count>
      <attachid>298456</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2017-01-11 06:31:05 -0800</bug_when>
    <thetext>Comment on attachment 298456
Patch

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

The patch LGTM to me too, just a few comments inline.

Also one question, have you run the perftests? I guess this patch should show improvements there.

&gt; Source/WebCore/ChangeLog:30
&gt; +        (WebCore::RenderGrid::addChild): Make the grid data as dirty.

Did you mean &quot;Mark&quot; instead of &quot;Make&quot;?
The same happens in the next lines.

BTW do we have tests for these add/remove operations?

&gt; Source/WebCore/rendering/RenderBox.cpp:482
&gt; +    if (oldStyle-&gt;gridItemColumnStart() == style.gridItemColumnStart()
&gt; +        &amp;&amp; oldStyle-&gt;gridItemColumnEnd() == style.gridItemColumnEnd()
&gt; +        &amp;&amp; oldStyle-&gt;gridItemRowStart() == style.gridItemRowStart()
&gt; +        &amp;&amp; oldStyle-&gt;gridItemRowEnd() == style.gridItemRowEnd()
&gt; +        &amp;&amp; oldStyle-&gt;order() == style.order()
&gt; +        &amp;&amp; oldStyle-&gt;hasOutOfFlowPosition() == style.hasOutOfFlowPosition())

I see you added a test for &quot;order&quot;, but what happens with the other things.
Do we have any test checking that you can dynamically change &quot;grid-column-start&quot; and the rest?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266120</commentid>
    <comment_count>4</comment_count>
      <attachid>298456</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-01-12 04:59:01 -0800</bug_when>
    <thetext>Comment on attachment 298456
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:30
&gt;&gt; +        (WebCore::RenderGrid::addChild): Make the grid data as dirty.
&gt; 
&gt; Did you mean &quot;Mark&quot; instead of &quot;Make&quot;?
&gt; The same happens in the next lines.
&gt; 
&gt; BTW do we have tests for these add/remove operations?

I&apos;ll rephrase the ChangeLog comments.

I don&apos;t think we have tests for add/remove, so I&apos;ll add them. Thanks for pointing it out.

&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:482
&gt;&gt; +        &amp;&amp; oldStyle-&gt;hasOutOfFlowPosition() == style.hasOutOfFlowPosition())
&gt; 
&gt; I see you added a test for &quot;order&quot;, but what happens with the other things.
&gt; Do we have any test checking that you can dynamically change &quot;grid-column-start&quot; and the rest?

Yes, we do have tests to handle style changes on those properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266182</commentid>
    <comment_count>5</comment_count>
      <attachid>298693</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-01-12 10:03:53 -0800</bug_when>
    <thetext>Created attachment 298693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266201</commentid>
    <comment_count>6</comment_count>
      <attachid>298693</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-12 10:42:33 -0800</bug_when>
    <thetext>Comment on attachment 298693
Patch

Clearing flags on attachment: 298693

Committed r210669: &lt;http://trac.webkit.org/changeset/210669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266202</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-12 10:42:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298456</attachid>
            <date>2017-01-10 04:00:49 -0800</date>
            <delta_ts>2017-01-12 10:03:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166883-20170110125912.patch</filename>
            <type>text/plain</type>
            <size>22782</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDMxZWI3YTZmZGRiYzU0
OWVmMTQxNTE2YzIzYTdmNmRkYTMzZDU5Zi4uNDcyNmVmZTdiOWFhN2Y2Mjc2ZGQ4N2IxNjQ0ZmE0
YWVmYmFjY2E0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTAxLTEwICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gTWFrZSB0aGUgZ3JpZCBzaXppbmcgZGF0YSBwZXJzaXN0ZW50IHRocm91Z2ggbGF5b3V0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODgzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugd2FudCB0
byBrZWVwIHRoZSBncmlkIHNpemluZyBkYXRhIHN0cnVjdHVyZXMgdGhyb3VnaCBkaWZmZXJlbnQK
KyAgICAgICAgbGF5b3V0cy4gVGhpcyB3aWxsIGFsbG93IHRvIG9wdGltaXplIHNvbWUgb3BlcmF0
aW9ucywgcmV1c2luZworICAgICAgICB0aGVzZSBkYXRhIHdoaWxlIHN0aWxsIHZhbGlkLiBBZGRp
dGlvbmFsbHksIG9wZXJhdGlvbnMgbGlrZQorICAgICAgICBkZXRlcm1pbmluZyB0aGUgYmFzZWxp
bmUgcG9zaXRpb24gd2hlbiB0aGUgZ3JpZCBjb250YWluZXIgaXMgdW5kZXIKKyAgICAgICAgYW4g
aW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCBuZWVkIHRoZXNlIGRhdGEgb25jZSB0aGUgZ3JpZCBo
YXMKKyAgICAgICAgYmVlbiBsYWlkIG91dC4KKworICAgICAgICBUaGlzIHBhdGNoIGNvbnRyb2xz
IHRoZSBzaXppbmcgZGF0YSB2YWxpZGl0eSBhbmQgbWFrZSB0aGUgZGF0YQorICAgICAgICBzdHJ1
Y3R1cmVzIHBlcnNpc3RlbnQgYWZ0ZXIgbGF5b3V0LgorCisgICAgICAgIFRoZSB0ZXN0cyBhZGRl
ZCBhcmUgbm93IG5lZWRlZCB0byB2ZXJpZnkgd2UgcGVyZm9ybSBjb3JyZWN0bHkgdGhlCisgICAg
ICAgIGRhdGEgdmFsaWRhdGlvbiB1bmRlciBjZXJ0YWluIHN0eWxlIGNoYW5nZXMuCisKKyAgICAg
ICAgVGVzdHM6IGZhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtY29udGFpbmVyLWNoYW5nZS1leHBs
aWNpdC1ncmlkLXJlY29tcHV0ZS1jaGlsZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy1n
cmlkLWxheW91dC9ncmlkLWl0ZW0tY2hhbmdlLW9yZGVyLWF1dG8tZmxvdy5odG1sCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c3R5bGVEaWRDaGFuZ2UpOiBFdmFsdWF0ZSBpZiB0aGUgc3R5bGUgY2hhbmdlIG1hZGUgdGhl
IGdyaWQgZGF0YSBpbnZhbGlkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1cGRhdGVH
cmlkUG9zaXRpb25BZnRlclN0eWxlQ2hhbmdlKTogRXZhbHVhdGUgaWYgdGhlIHN0eWxlIGNoYW5n
ZSBtYWRlIHRoZSBncmlkIGRhdGEgaW52YWxpZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6R3JpZDo6c2V0TmVlZHNJdGVtc1BsYWNlbWVudCk6IE1hcmsgaXQg
YXMgbmVlZGluZyB0byBleGVjdXRlIHRoZSBpdGVtcyBwbGFjZW1lbnQgbG9jaWMuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjphZGRDaGlsZCk6IE1ha2UgdGhlIGdyaWQgZGF0YSBhcyBk
aXJ0eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnJlbW92ZUNoaWxkKTogTWFrZSB0
aGUgZ3JpZCBkYXRhIGFzIGRpcnR5LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6c3R5
bGVEaWRDaGFuZ2UpOiBFdmFsdWF0ZSBncmlkIGRhdGEgdmFsaWRpdHkuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHcmlkOjpleHBsaWNpdEdyaWREaWRSZXNpemUpOiBNYWtlIGRhdGEgYXMgZGly
dHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpuYW1lZEdyaWRMaW5lc0RlZmluaXRp
b25EaWRDaGFuZ2UpOiBNYWtlIGRhdGEgYXMgZGlydHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpsYXlvdXRCbG9jayk6IFJlbW92ZSB0aGUgY2xlYXIoKSBjYWxsLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6ZGlydHlHcmlkKTogQ2xlYXJpbmcgdGhlIGdyaWQgZGF0YSBh
bmQgbWFyayBpcyBhcyBuZWVkaW5nIHRvIGV4ZWN1dGUgdGhlIGl0ZW1zIHBsYWNlbWVudCBsb2dp
Yy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0
eWxlKTogQXNzZXJ0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSB0aGUgaXRlbXMgcGxhY2VtZW50
IGxvZ2ljLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGFpbnRDaGlsZHJlbik6IEFz
c2VydCB3ZSBkb24ndCBuZWVkIHRvIHBlcmZvcm0gdGhlIGl0ZW1zIHBsYWNlbWVudCBsb2dpYy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5oOgorCiAyMDE3LTAxLTA5ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBXZWJQ
cm9jZXNzIGZyb20gV2ViS2l0R3RrKyAyLjE1LjIgU0lHU0VHVnMgaW4gc3RkOjp1bmlxdWVfcHRy
PFNvdXBCdWZmZXIsIFdURjo6R1B0ckRlbGV0ZXI8U291cEJ1ZmZlcj4gPjo6Z2V0KCkgY29uc3Qg
KCkgYXQgL3Vzci9pbmNsdWRlL2MrKy82L2JpdHMvdW5pcXVlX3B0ci5oOjMwNQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBiNGE3YmEwMjM3OTcxZjE3YWEyYzA3OTVj
MzBlYzIyOTc3MDk5YTNjLi5mY2M1MGQ3NzhhNjJmMjFiZDVlOGJlOTYyNzc2OTIyNTc1MGQwNWUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNTUsNiArNTUsOSBA
QAogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKKyNpZiBF
TkFCTEUoQ1NTX0dSSURfTEFZT1VUKQorI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKKyNlbmRpZgog
I2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTQ1MCw2ICs0NTMsOSBAQCB2b2lkIFJlbmRlckJv
eDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZQogCiAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+c2hhcGVPdXRzaWRl
KCkpIHx8IHN0eWxlKCkuc2hhcGVPdXRzaWRlKCkpCiAgICAgICAgIHVwZGF0ZVNoYXBlT3V0c2lk
ZUluZm9BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCksIG9sZFN0eWxlKTsKKyNpZiBFTkFCTEUoQ1NT
X0dSSURfTEFZT1VUKQorICAgIHVwZGF0ZUdyaWRQb3NpdGlvbkFmdGVyU3R5bGVDaGFuZ2Uoc3R5
bGUoKSwgb2xkU3R5bGUpOworI2VuZGlmCiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp3aWxsQmVSZW1v
dmVkRnJvbVRyZWUoKQpAQCAtNDYyLDYgKzQ2OCwzMiBAQCB2b2lkIFJlbmRlckJveDo6d2lsbEJl
UmVtb3ZlZEZyb21UcmVlKCkKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6d2lsbEJlUmVtb3Zl
ZEZyb21UcmVlKCk7CiB9CiAgICAgCisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKK3ZvaWQg
UmVuZGVyQm94Ojp1cGRhdGVHcmlkUG9zaXRpb25BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBpZiAo
IW9sZFN0eWxlIHx8ICFwYXJlbnQoKSB8fCAhcGFyZW50KCktPmlzUmVuZGVyR3JpZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAob2xkU3R5bGUtPmdyaWRJdGVtQ29sdW1uU3RhcnQoKSA9
PSBzdHlsZS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkKKyAgICAgICAgJiYgb2xkU3R5bGUtPmdyaWRJ
dGVtQ29sdW1uRW5kKCkgPT0gc3R5bGUuZ3JpZEl0ZW1Db2x1bW5FbmQoKQorICAgICAgICAmJiBv
bGRTdHlsZS0+Z3JpZEl0ZW1Sb3dTdGFydCgpID09IHN0eWxlLmdyaWRJdGVtUm93U3RhcnQoKQor
ICAgICAgICAmJiBvbGRTdHlsZS0+Z3JpZEl0ZW1Sb3dFbmQoKSA9PSBzdHlsZS5ncmlkSXRlbVJv
d0VuZCgpCisgICAgICAgICYmIG9sZFN0eWxlLT5vcmRlcigpID09IHN0eWxlLm9yZGVyKCkKKyAg
ICAgICAgJiYgb2xkU3R5bGUtPmhhc091dE9mRmxvd1Bvc2l0aW9uKCkgPT0gc3R5bGUuaGFzT3V0
T2ZGbG93UG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUG9zaXRpb25lZCBp
dGVtcyBkb24ndCBwYXJ0aWNpcGF0ZSBvbiB0aGUgbGF5b3V0IG9mIHRoZSBncmlkLAorICAgIC8v
IHNvIHdlIGRvbid0IG5lZWQgdG8gbWFyayB0aGUgZ3JpZCBhcyBkaXJ0eSBpZiB0aGV5IGNoYW5n
ZSBwb3NpdGlvbnMuCisgICAgaWYgKG9sZFN0eWxlLT5oYXNPdXRPZkZsb3dQb3NpdGlvbigpICYm
IHN0eWxlLmhhc091dE9mRmxvd1Bvc2l0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBub3QgZGlydHkgdGhlIGdyaWQgaW4gc29tZSBjYXNl
cyAobGlrZSBtb3ZpbmcgYW4KKyAgICAvLyBleHBsaWNpdGx5IHBsYWNlZCBncmlkIGl0ZW0pLgor
ICAgIC8vIEZvciBub3csIGl0J3MgbW9yZSBzaW1wbGUgdG8ganVzdCBhbHdheXMgcmVjb21wdXRl
IHRoZSBncmlkLgorICAgIGRvd25jYXN0PFJlbmRlckdyaWQ+KCpwYXJlbnQoKSkuZGlydHlHcmlk
KCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZVNoYXBlT3V0c2lkZUluZm9B
ZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQogewogICAgIGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlT3V0c2lkZSA9IHN0
eWxlLnNoYXBlT3V0c2lkZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4
IGQwZmE3YjJhNTc2Mjc5ZGEwMTVmNjI4NTdhNGJiNGMzODdiNzgxMmQuLmQ0MTFjZDA3ZjVmMjc2
OGI4Y2Q5N2ZjNjU1OGZmYzU4YzViZGYyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgKQEAgLTY1NCw2ICs2NTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU2hhcGVP
dXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpOwogCiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyAgICB2
b2lkIHVwZGF0ZUdyaWRQb3NpdGlvbkFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUm
LCAgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICBib29sIGlzR3JpZEl0ZW0oKSBj
b25zdCB7IHJldHVybiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJHcmlkKCk7IH0KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggMzNiZmYw
ZTQxZDAwMzJhNzU1N2YwNGQ1M2Y3NWFjZDExM2ViNmVmMC4uMTNmY2E3OGVlMzg2MmY4OGNiOWVk
OTQyZjE5MjFiYmFiYjM5MjdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcApAQCAtMTUyLDIzICsxNTIsMjAgQEAgdm9pZCBSZW5kZXJHcmlkOjpHcmlkOjpzZXROZWVk
c0l0ZW1zUGxhY2VtZW50KGJvb2wgbmVlZHNJdGVtc1BsYWNlbWVudCkKIHsKICAgICBtX25lZWRz
SXRlbXNQbGFjZW1lbnQgPSBuZWVkc0l0ZW1zUGxhY2VtZW50OwogCi0gICAgaWYgKG5lZWRzSXRl
bXNQbGFjZW1lbnQpCi0gICAgICAgIGNsZWFyKCk7Ci19CisgICAgaWYgKCFuZWVkc0l0ZW1zUGxh
Y2VtZW50KSB7CisgICAgICAgIG1fZ3JpZC5zaHJpbmtUb0ZpdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi12b2lkIFJlbmRlckdyaWQ6OkdyaWQ6OmNsZWFyKCkKLXsKICAgICBtX2dyaWQu
cmVzaXplKDApOwogICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFyKCk7CiAgICAgbV9oYXNBbnlPcnRo
b2dvbmFsR3JpZEl0ZW0gPSBmYWxzZTsKICAgICBtX3NtYWxsZXN0Um93U3RhcnQgPSAwOwogICAg
IG1fc21hbGxlc3RDb2x1bW5TdGFydCA9IDA7Ci0gICAgLy8gRklYTUU6IGNsZWFyIHRoZXNlIG9u
Y2UgbV9ncmlkIHN1cnZpdmVzIGxheW91dC4gV2UgY2Fubm90IGNsZWFyIHRoZW0gbm93IGJlY2F1
c2UgdGhleSdyZQotICAgIC8vIG5lZWRlZCBhZnRlciBsYXlvdXQuCi0gICAgLy8gbV9hdXRvUmVw
ZWF0RW1wdHlDb2x1bW5zID0gbnVsbHB0cjsKLSAgICAvLyBtX2F1dG9SZXBlYXRFbXB0eVJvd3Mg
PSBudWxscHRyOwotICAgIC8vIG1fYXV0b1JlcGVhdENvbHVtbnMgPSAwOwotICAgIC8vIG1fYXV0
b1JlcGVhdFJvd3MgPSAwOworICAgIG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyA9IG51bGxwdHI7
CisgICAgbV9hdXRvUmVwZWF0RW1wdHlSb3dzID0gbnVsbHB0cjsKKyAgICBtX2F1dG9SZXBlYXRD
b2x1bW5zID0gMDsKKyAgICBtX2F1dG9SZXBlYXRSb3dzID0gMDsKIH0KIAogY2xhc3MgR3JpZFRy
YWNrIHsKQEAgLTQ5MSw2ICs0ODgsMjQgQEAgc3RhdGljIGlubGluZSBib29sIHNlbGZBbGlnbm1l
bnRDaGFuZ2VkRnJvbVN0cmV0Y2hJbkNvbHVtbkF4aXMoY29uc3QgUmVuZGVyU3R5bGUKICAgICAg
ICAgJiYgY2hpbGRTdHlsZS5yZXNvbHZlZEFsaWduU2VsZihuZXdTdHlsZSwgc2VsZkFsaWdubWVu
dE5vcm1hbEJlaGF2aW9yKS5wb3NpdGlvbigpICE9IEl0ZW1Qb3NpdGlvblN0cmV0Y2g7CiB9CiAK
K3ZvaWQgUmVuZGVyR3JpZDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQobmV3Q2hp
bGQsIGJlZm9yZUNoaWxkKTsKKworICAgIC8vIFRoZSBncmlkIG5lZWRzIHRvIGJlIHJlY29tcHV0
ZWQgYXMgaXQgbWlnaHQgY29udGFpbiBhdXRvLXBsYWNlZCBpdGVtcyB0aGF0CisgICAgLy8gd2ls
bCBjaGFuZ2UgdGhlaXIgcG9zaXRpb24uCisgICAgZGlydHlHcmlkKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyR3JpZDo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK3sKKyAgICBSZW5kZXJC
bG9jazo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworCisgICAgLy8gVGhlIGdyaWQgbmVlZHMgdG8gYmUg
cmVjb21wdXRlZCBhcyBpdCBtaWdodCBjb250YWluIGF1dG8tcGxhY2VkIGl0ZW1zIHRoYXQKKyAg
ICAvLyB3aWxsIGNoYW5nZSB0aGVpciBwb3NpdGlvbi4KKyAgICBkaXJ0eUdyaWQoKTsKK30KKwog
dm9pZCBSZW5kZXJHcmlkOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENo
YW5nZShkaWZmLCBvbGRTdHlsZSk7CkBAIC01MTIsNiArNTI3LDI2IEBAIHZvaWQgUmVuZGVyR3Jp
ZDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAoZXhw
bGljaXRHcmlkRGlkUmVzaXplKCpvbGRTdHlsZSkgfHwgbmFtZWRHcmlkTGluZXNEZWZpbml0aW9u
RGlkQ2hhbmdlKCpvbGRTdHlsZSkgfHwgb2xkU3R5bGUtPmdyaWRBdXRvRmxvdygpICE9IHN0eWxl
KCkuZ3JpZEF1dG9GbG93KCkKKyAgICAgICAgfHwgKHN0eWxlKCkuZ3JpZEF1dG9SZXBlYXRDb2x1
bW5zKCkuc2l6ZSgpIHx8IHN0eWxlKCkuZ3JpZEF1dG9SZXBlYXRSb3dzKCkuc2l6ZSgpKSkKKyAg
ICAgICAgZGlydHlHcmlkKCk7Cit9CisKK2Jvb2wgUmVuZGVyR3JpZDo6ZXhwbGljaXRHcmlkRGlk
UmVzaXplKGNvbnN0IFJlbmRlclN0eWxlJiBvbGRTdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
b2xkU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXplKCkgIT0gc3R5bGUoKS5ncmlkQ29sdW1ucygpLnNp
emUoKQorICAgICAgICB8fCBvbGRTdHlsZS5ncmlkUm93cygpLnNpemUoKSAhPSBzdHlsZSgpLmdy
aWRSb3dzKCkuc2l6ZSgpCisgICAgICAgIHx8IG9sZFN0eWxlLm5hbWVkR3JpZEFyZWFDb2x1bW5D
b3VudCgpICE9IHN0eWxlKCkubmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KCkKKyAgICAgICAgfHwg
b2xkU3R5bGUubmFtZWRHcmlkQXJlYVJvd0NvdW50KCkgIT0gc3R5bGUoKS5uYW1lZEdyaWRBcmVh
Um93Q291bnQoKQorICAgICAgICB8fCBvbGRTdHlsZS5ncmlkQXV0b1JlcGVhdENvbHVtbnMoKS5z
aXplKCkgIT0gc3R5bGUoKS5ncmlkQXV0b1JlcGVhdENvbHVtbnMoKS5zaXplKCkKKyAgICAgICAg
fHwgb2xkU3R5bGUuZ3JpZEF1dG9SZXBlYXRSb3dzKCkuc2l6ZSgpICE9IHN0eWxlKCkuZ3JpZEF1
dG9SZXBlYXRSb3dzKCkuc2l6ZSgpOworfQorCitib29sIFJlbmRlckdyaWQ6Om5hbWVkR3JpZExp
bmVzRGVmaW5pdGlvbkRpZENoYW5nZShjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5bGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG9sZFN0eWxlLm5hbWVkR3JpZFJvd0xpbmVzKCkgIT0gc3R5bGUoKS5u
YW1lZEdyaWRSb3dMaW5lcygpCisgICAgICAgIHx8IG9sZFN0eWxlLm5hbWVkR3JpZENvbHVtbkxp
bmVzKCkgIT0gc3R5bGUoKS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpOwogfQogCiBMYXlvdXRVbml0
IFJlbmRlckdyaWQ6OmNvbXB1dGVUcmFja0Jhc2VkTG9naWNhbEhlaWdodChjb25zdCBHcmlkU2l6
aW5nRGF0YSYgc2l6aW5nRGF0YSkgY29uc3QKQEAgLTY1MSw4ICs2ODYsNiBAQCB2b2lkIFJlbmRl
ckdyaWQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKIAog
ICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNEb2N1bWVu
dEVsZW1lbnRSZW5kZXJlcigpKTsKIAotICAgIGNsZWFyR3JpZCgpOwotCiAgICAgY29tcHV0ZU92
ZXJmbG93KG9sZENsaWVudEFmdGVyRWRnZSk7CiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAKQEAg
LTE5NTMsOCArMTk4NiwxMSBAQCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gUmVuZGVyR3JpZDo6
YXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHN0eWxl
KCkuaXNHcmlkQXV0b0Zsb3dEaXJlY3Rpb25Db2x1bW4oKSA/IEZvclJvd3MgOiBGb3JDb2x1bW5z
OwogfQogCi12b2lkIFJlbmRlckdyaWQ6OmNsZWFyR3JpZCgpCit2b2lkIFJlbmRlckdyaWQ6OmRp
cnR5R3JpZCgpCiB7CisgICAgaWYgKG1fZ3JpZC5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIG1fZ3JpZC5zZXROZWVkc0l0ZW1zUGxhY2VtZW50KHRydWUpOwog
fQogCkBAIC0xOTY5LDggKzIwMDUsNyBAQCBWZWN0b3I8TGF5b3V0VW5pdD4gUmVuZGVyR3JpZDo6
dHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aQogICAgIGlm
IChudW1Qb3NpdGlvbnMgPCAyKQogICAgICAgICByZXR1cm4gdHJhY2tzOwogCi0gICAgLy8gRklY
TUU6IGVuYWJsZSB0aGUgQVNTRVJUIG9uY2UgbV9ncmlkIGlzIHBlcnNpc3RlbnQuCi0gICAgLy8g
QVNTRVJUKCFtX2dyaWQubmVlZHNJdGVtc1BsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoIW1fZ3Jp
ZC5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOwogICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhY2tzID0g
bV9ncmlkLmhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pOwogICAgIExheW91dFVu
aXQgZ2FwID0gIWhhc0NvbGxhcHNlZFRyYWNrcyA/IGdyaWRHYXBGb3JEaXJlY3Rpb24oZGlyZWN0
aW9uKSA6IExheW91dFVuaXQoKTsKICAgICB0cmFja3MucmVzZXJ2ZUNhcGFjaXR5KG51bVBvc2l0
aW9ucyAtIDEpOwpAQCAtMjgwMyw4ICsyODM4LDcgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6bnVt
VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEdyaWQmIGcK
IAogdm9pZCBSZW5kZXJHcmlkOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgZm9yQ2hpbGQsIGJvb2wg
dXNlUHJpbnRSZWN0KQogewotICAgIC8vIEZJWE1FOiBlbmFibGUgdGhlIEFTU0VSVCBvbmNlIG1f
Z3JpZCBpcyBwZXJzaXN0ZW50LgotICAgIC8vIEFTU0VSVCghbV9ncmlkLm5lZWRzSXRlbXNQbGFj
ZW1lbnQoKSk7CisgICAgQVNTRVJUKCFtX2dyaWQubmVlZHNJdGVtc1BsYWNlbWVudCgpKTsKICAg
ICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX2dyaWQub3JkZXJJdGVyYXRvcigpLmZpcnN0KCk7
IGNoaWxkOyBjaGlsZCA9IG1fZ3JpZC5vcmRlckl0ZXJhdG9yKCkubmV4dCgpKQogICAgICAgICBw
YWludENoaWxkKCpjaGlsZCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCwgZm9yQ2hpbGQsIHVzZVBy
aW50UmVjdCwgUGFpbnRBc0lubGluZUJsb2NrKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyR3JpZC5oCmluZGV4IGYzOWQ1MGE5ZDY2NjJkMjAwODRmYmIxM2E1NWNhM2Q1YjYzMTFkOWMu
LjdjOWNlZDFkYWRmNDBkNTA3M2U2MzJmZGE2MjJiYjg2OTFkYTllZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyaWRQ
b3NpdGlvbnNSZXNvbHZlci5oIgogI2luY2x1ZGUgIk9yZGVySXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTU5LDEyICs2MCwxOCBAQCBwdWJsaWM6CiAKICAgICBFbGVtZW50JiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4obm9kZUZvck5vbkFub255
bW91cygpKTsgfQogCisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgZmluYWw7CisgICAgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKKwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOworICAgIGJv
b2wgZXhwbGljaXRHcmlkRGlkUmVzaXplKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAg
Ym9vbCBuYW1lZEdyaWRMaW5lc0RlZmluaXRpb25EaWRDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUm
KSBjb25zdDsKICAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIG92ZXJyaWRlOwogCiAgICAgYm9vbCBhdm9p
ZHNGbG9hdHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBjYW5E
cm9wQW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CiAKKyAgICB2b2lkIGRpcnR5R3JpZCgpOwogICAgIFZlY3RvcjxMYXlvdXRVbml0PiB0cmFja1Np
emVzRm9yQ29tcHV0ZWRTdHlsZShHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiAg
ICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBjb2x1bW5Qb3NpdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbHVtblBvc2l0aW9uczsgfQpAQCAtMjQxLDggKzI0OCw2IEBAIHByaXZhdGU6CiAg
ICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIEdyaWRJdGVyYXRvcjsKIAotICAgICAg
ICB2b2lkIGNsZWFyKCk7Ci0KICAgICAgICAgT3JkZXJJdGVyYXRvciBtX29yZGVySXRlcmF0b3I7
CiAKICAgICAgICAgaW50IG1fc21hbGxlc3RDb2x1bW5TdGFydCB7IDAgfTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlOTJi
OTlhZTQ5ZmM4ZWYzMTRmMWEzZWZjYTA2ZjA2YmQ4YWEyYjI5Li5iMjNiOTEyNTJjZDUyNjYyNmQ4
NjI1NTg2MWRmMzBiNDgyYWUzOGZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDEtMTAg
IEphdmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW2Nz
cy1ncmlkXSBNYWtlIHRoZSBncmlkIHNpemluZyBkYXRhIHBlcnNpc3RlbnQgdGhyb3VnaCBsYXlv
dXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4
ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUg
dGVzdHMgYWRkZWQgYXJlIG5vdyBuZWVkZWQgdG8gdmVyaWZ5IHdlIHBlcmZvcm0gY29ycmVjdGx5
IHRoZQorICAgICAgICBkYXRhIHZhbGlkYXRpb24gdW5kZXIgY2VydGFpbiBzdHlsZSBjaGFuZ2Vz
LgorCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdl
LWV4cGxpY2l0LWdyaWQtcmVjb21wdXRlLWNoaWxkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdlLWV4cGxpY2l0
LWdyaWQtcmVjb21wdXRlLWNoaWxkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLWdy
aWQtbGF5b3V0L2dyaWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1pdGVtLWNoYW5nZS1v
cmRlci1hdXRvLWZsb3cuaHRtbDogQWRkZWQuCisKIDIwMTctMDEtMDkgIEFsZWphbmRybyBHLiBD
YXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgW09XUl0gVW5za2lwIGZhc3QvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC10cmFjay1zdG9wLmh0bWwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtY29udGFpbmVyLWNo
YW5nZS1leHBsaWNpdC1ncmlkLXJlY29tcHV0ZS1jaGlsZC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWNvbnRhaW5lci1jaGFuZ2UtZXhwbGljaXQt
Z3JpZC1yZWNvbXB1dGUtY2hpbGQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYjkwNGViNzRm
OTNlMjk3MjdjMTNhOWYwNDEzOTIxMzY0ZjdmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWNvbnRhaW5lci1jaGFuZ2UtZXhwbGljaXQt
Z3JpZC1yZWNvbXB1dGUtY2hpbGQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorVGhpcyB0
ZXN0IGNoZWNrcyB0aGF0IGdyaWQtdGVtcGxhdGUte3Jvd3N8Y29sdW1uc30gZHluYW1pYyB1cGRh
dGVzIHJlY29tcHV0ZXMgdGhlIHBvc2l0aW9ucyBvZiBhdXRvbWF0aWNhbGx5IHBsYWNlZCBncmlk
IGl0ZW1zLgorUEFTUworUEFTUworUEFTUworUEFTUworUEFTUworUEFTUwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdlLWV4
cGxpY2l0LWdyaWQtcmVjb21wdXRlLWNoaWxkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1n
cmlkLWxheW91dC9ncmlkLWNvbnRhaW5lci1jaGFuZ2UtZXhwbGljaXQtZ3JpZC1yZWNvbXB1dGUt
Y2hpbGQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWViOGJjNzQ3MDZkNjg1MDkyMTYzMDk4MDYxZjQ5NDQ3
ZjAxZGMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlv
dXQvZ3JpZC1jb250YWluZXItY2hhbmdlLWV4cGxpY2l0LWdyaWQtcmVjb21wdXRlLWNoaWxkLmh0
bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxsaW5rIGhyZWY9
InJlc291cmNlcy9ncmlkLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKy5ncmlkIHsK
KyAgICBncmlkLWF1dG8tZmxvdzogcm93IGRlbnNlOworICAgIGdyaWQtYXV0by1yb3dzOiA1cHg7
CisgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDVweDsKK30KKyNmaXJzdEdyaWRJdGVtIHsKKyAgICBn
cmlkLXJvdzogYXV0bzsKKyAgICBncmlkLWNvbHVtbjogMTsKK30KKworI3NlY29uZEdyaWRJdGVt
IHsKKyAgICBncmlkLXJvdzogMTsKKyAgICBncmlkLWNvbHVtbjogYXV0bzsKK30KKworI3RoaXJk
R3JpZEl0ZW0geworICAgIGdyaWQtcm93OiBhdXRvOworICAgIGdyaWQtY29sdW1uOiBhdXRvOwor
fQorPC9zdHlsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0R3JpZERlZmluaXRpb25zKGdyaWRU
ZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZUFyZWFzLCBmaXJz
dEdyaWRJdGVtRGF0YSwgc2Vjb25kR3JpZEl0ZW1EYXRhLCB0aGlyZEdyaWRJdGVtRGF0YSkKK3sK
KyAgICB2YXIgZ3JpZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJn
cmlkIilbMF07CisgICAgZ3JpZEVsZW1lbnQuc3R5bGUuZ3JpZFRlbXBsYXRlUm93cyA9IGdyaWRU
ZW1wbGF0ZVJvd3M7CisgICAgZ3JpZEVsZW1lbnQuc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9
IGdyaWRUZW1wbGF0ZUNvbHVtbnM7CisgICAgZ3JpZEVsZW1lbnQuc3R5bGUuZ3JpZFRlbXBsYXRl
QXJlYXMgPSBncmlkVGVtcGxhdGVBcmVhczsKKworICAgIHZhciBmaXJzdEdyaWRJdGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpcnN0R3JpZEl0ZW0iKTsKKyAgICBmaXJzdEdyaWRJdGVt
LnNldEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC13aWR0aCIsIGZpcnN0R3JpZEl0ZW1EYXRhLndp
ZHRoKTsKKyAgICBmaXJzdEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC1oZWln
aHQiLCBmaXJzdEdyaWRJdGVtRGF0YS5oZWlnaHQpOworICAgIGZpcnN0R3JpZEl0ZW0uc2V0QXR0
cmlidXRlKCJkYXRhLW9mZnNldC14IiwgZmlyc3RHcmlkSXRlbURhdGEueCk7CisgICAgZmlyc3RH
cmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0LXkiLCBmaXJzdEdyaWRJdGVtRGF0YS55
KTsKKworICAgIHZhciBzZWNvbmRHcmlkSXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJz
ZWNvbmRHcmlkSXRlbSIpOworICAgIHNlY29uZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1l
eHBlY3RlZC13aWR0aCIsIHNlY29uZEdyaWRJdGVtRGF0YS53aWR0aCk7CisgICAgc2Vjb25kR3Jp
ZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLWV4cGVjdGVkLWhlaWdodCIsIHNlY29uZEdyaWRJdGVt
RGF0YS5oZWlnaHQpOworICAgIHNlY29uZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1vZmZz
ZXQteCIsIHNlY29uZEdyaWRJdGVtRGF0YS54KTsKKyAgICBzZWNvbmRHcmlkSXRlbS5zZXRBdHRy
aWJ1dGUoImRhdGEtb2Zmc2V0LXkiLCBzZWNvbmRHcmlkSXRlbURhdGEueSk7CisKKyAgICB2YXIg
dGhpcmRHcmlkSXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aGlyZEdyaWRJdGVtIik7
CisgICAgdGhpcmRHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtZXhwZWN0ZWQtd2lkdGgiLCB0
aGlyZEdyaWRJdGVtRGF0YS53aWR0aCk7CisgICAgdGhpcmRHcmlkSXRlbS5zZXRBdHRyaWJ1dGUo
ImRhdGEtZXhwZWN0ZWQtaGVpZ2h0IiwgdGhpcmRHcmlkSXRlbURhdGEuaGVpZ2h0KTsKKyAgICB0
aGlyZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1vZmZzZXQteCIsIHRoaXJkR3JpZEl0ZW1E
YXRhLngpOworICAgIHRoaXJkR3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLW9mZnNldC15Iiwg
dGhpcmRHcmlkSXRlbURhdGEueSk7CisKKyAgICBjaGVja0xheW91dCgiLmdyaWQiKTsKK30KKwor
ZnVuY3Rpb24gdGVzdENoYW5naW5nR3JpZERlZmluaXRpb25zKCkKK3sKKyAgICB0ZXN0R3JpZERl
ZmluaXRpb25zKCcxMHB4IDIwcHgnLCAnMTBweCcsICcnLCB7ICd3aWR0aCc6ICcxMCcsICdoZWln
aHQnOiAnMjAnLCAneCc6ICcwJywgJ3knOiAnMTAnIH0sIHsgJ3dpZHRoJzogJzEwJywgJ2hlaWdo
dCc6ICcxMCcsICd4JzogJzAnLCAneSc6ICcwJyB9LCB7ICd3aWR0aCc6ICcxMCcsICdoZWlnaHQn
OiAnNScsICd4JzogJzAnLCAneSc6ICczMCcgfSk7CisgICAgdGVzdEdyaWREZWZpbml0aW9ucygn
MTBweCcsICcxMHB4JywgJyJhIicsIHsgJ3dpZHRoJzogJzEwJywgJ2hlaWdodCc6ICc1JywgJ3gn
OiAnMCcsICd5JzogJzEwJyB9LCB7ICd3aWR0aCc6ICcxMCcsICdoZWlnaHQnOiAnMTAnLCAneCc6
ICcwJywgJ3knOiAnMCcgfSwgeyAnd2lkdGgnOiAnMTAnLCAnaGVpZ2h0JzogJzUnLCAneCc6ICcw
JywgJ3knOiAnMTUnIH0pOworICAgIHRlc3RHcmlkRGVmaW5pdGlvbnMoJzEwcHgnLCAnMTBweCcs
ICciYSAuIicsIHsgJ3dpZHRoJzogJzEwJywgJ2hlaWdodCc6ICc1JywgJ3gnOiAnMCcsICd5Jzog
JzEwJyB9LCB7ICd3aWR0aCc6ICcxMCcsICdoZWlnaHQnOiAnMTAnLCAneCc6ICcwJywgJ3knOiAn
MCcgfSwgeyAnd2lkdGgnOiAnNScsICdoZWlnaHQnOiAnMTAnLCAneCc6ICcxMCcsICd5JzogJzAn
IH0pOworICAgIHRlc3RHcmlkRGVmaW5pdGlvbnMoJzUwcHgnLCAnMzBweCA0MHB4JywgJycsIHsg
J3dpZHRoJzogJzMwJywgJ2hlaWdodCc6ICc1JywgJ3gnOiAnMCcsICd5JzogJzUwJyB9LCB7ICd3
aWR0aCc6ICczMCcsICdoZWlnaHQnOiAnNTAnLCAneCc6ICcwJywgJ3knOiAnMCcgfSwgeyAnd2lk
dGgnOiAnNDAnLCAnaGVpZ2h0JzogJzUwJywgJ3gnOiAnMzAnLCAneSc6ICcwJyB9KTsKKyAgICB0
ZXN0R3JpZERlZmluaXRpb25zKCc1MHB4JywgJzYwcHgnLCAnJywgeyAnd2lkdGgnOiAnNjAnLCAn
aGVpZ2h0JzogJzUnLCAneCc6ICcwJywgJ3knOiAnNTAnIH0sIHsgJ3dpZHRoJzogJzYwJywgJ2hl
aWdodCc6ICc1MCcsICd4JzogJzAnLCAneSc6ICcwJyB9LCB7ICd3aWR0aCc6ICc2MCcsICdoZWln
aHQnOiAnNScsICd4JzogJzAnLCAneSc6ICc1NScgfSk7CisgICAgdGVzdEdyaWREZWZpbml0aW9u
cygnNTBweCAxMDBweCAxNTBweCcsICc2MHB4JywgJycsIHsgJ3dpZHRoJzogJzYwJywgJ2hlaWdo
dCc6ICcxMDAnLCAneCc6ICcwJywgJ3knOiAnNTAnIH0sIHsgJ3dpZHRoJzogJzYwJywgJ2hlaWdo
dCc6ICc1MCcsICd4JzogJzAnLCAneSc6ICcwJyB9LCB7ICd3aWR0aCc6ICc2MCcsICdoZWlnaHQn
OiAnMTUwJywgJ3gnOiAnMCcsICd5JzogJzE1MCcgfSk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgdGVzdENoYW5naW5nR3JpZERlZmluaXRpb25zLCBmYWxzZSk7Cis8L3Nj
cmlwdD4KKzxib2R5PgorPGRpdj5UaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ3JpZC10ZW1wbGF0ZS17
cm93c3xjb2x1bW5zfSBkeW5hbWljIHVwZGF0ZXMgcmVjb21wdXRlcyB0aGUgcG9zaXRpb25zIG9m
IGF1dG9tYXRpY2FsbHkgcGxhY2VkIGdyaWQgaXRlbXMuPC9kaXY+CisKKzxkaXYgc3R5bGU9InBv
c2l0aW9uOiByZWxhdGl2ZSI+CisgICAgPGRpdiBjbGFzcz0iZ3JpZCI+CisgICAgICAgIDxkaXYg
Y2xhc3M9InNpemVkVG9HcmlkQXJlYSIgaWQ9ImZpcnN0R3JpZEl0ZW0iPjwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIGlkPSJzZWNvbmRHcmlkSXRlbSI+PC9kaXY+
CisgICAgICAgIDxkaXYgY2xhc3M9InNpemVkVG9HcmlkQXJlYSIgaWQ9InRoaXJkR3JpZEl0ZW0i
PjwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtaXRlbS1jaGFuZ2Utb3Jk
ZXItYXV0by1mbG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5
b3V0L2dyaWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZjA4OWQ2YTQ1MzUwNGQzMmVhYzBkN2ViYmEyZDY0MTI4NWQ4Yzk2Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1pdGVtLWNoYW5n
ZS1vcmRlci1hdXRvLWZsb3ctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0
IGNoZWNrcyB0aGF0IGdyaWQgaXRlbXMnICdvcmRlcicgZHluYW1pYyB1cGRhdGVzIHJlY29tcHV0
ZXMgdGhlIHBvc2l0aW9ucyBvZiBhdXRvbWF0aWNhbGx5IHBsYWNlZCBncmlkIGl0ZW1zLgorUEFT
UworUEFTUworUEFTUworUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3Jp
ZC1sYXlvdXQvZ3JpZC1pdGVtLWNoYW5nZS1vcmRlci1hdXRvLWZsb3cuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGNkNTczNjkwNzhjNjI3NGIzYjhiYTZhODdkMWQ5ZTZiNGI2MDMw
MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dy
aWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93Lmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxsaW5rIGhyZWY9InJlc291cmNlcy9ncmlkLmNzcyIgcmVs
PSJzdHlsZXNoZWV0Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvY2hlY2stbGF5b3V0
LmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKy5ncmlkIHsKKyAgICBncmlkLWF1dG8tZmxvdzogcm93
OworICAgIGdyaWQtdGVtcGxhdGUtcm93czogNTBweCAxMDBweDsKKyAgICBncmlkLXRlbXBsYXRl
LWNvbHVtbnM6IDQwcHg7Cit9CisKKyNmaXJzdEdyaWRJdGVtIHsKKyAgICBncmlkLXJvdzogYXV0
bzsKKyAgICBncmlkLWNvbHVtbjogMTsKK30KKworI3NlY29uZEdyaWRJdGVtIHsKKyAgICBncmlk
LXJvdzogMTsKKyAgICBncmlkLWNvbHVtbjogYXV0bzsKK30KKworI3RoaXJkR3JpZEl0ZW0gewor
ICAgIGdyaWQtcm93OiBhdXRvOworICAgIGdyaWQtY29sdW1uOiBhdXRvOworfQorPC9zdHlsZT4K
KzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0R3JpZEl0ZW1zT3JkZXIoZmlyc3RHcmlkSXRlbURhdGEs
IHNlY29uZEdyaWRJdGVtRGF0YSwgdGhpcmRHcmlkSXRlbURhdGEpCit7CisgICAgdmFyIGZpcnN0
R3JpZEl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlyc3RHcmlkSXRlbSIpOworICAg
IGZpcnN0R3JpZEl0ZW0uc3R5bGUub3JkZXIgPSBmaXJzdEdyaWRJdGVtRGF0YS5vcmRlcjsKKyAg
ICBmaXJzdEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC13aWR0aCIsIGZpcnN0
R3JpZEl0ZW1EYXRhLndpZHRoKTsKKyAgICBmaXJzdEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0
YS1leHBlY3RlZC1oZWlnaHQiLCBmaXJzdEdyaWRJdGVtRGF0YS5oZWlnaHQpOworICAgIGZpcnN0
R3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLW9mZnNldC14IiwgZmlyc3RHcmlkSXRlbURhdGEu
eCk7CisgICAgZmlyc3RHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0LXkiLCBmaXJz
dEdyaWRJdGVtRGF0YS55KTsKKworICAgIHZhciBzZWNvbmRHcmlkSXRlbSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJzZWNvbmRHcmlkSXRlbSIpOworICAgIHNlY29uZEdyaWRJdGVtLnN0eWxl
Lm9yZGVyID0gc2Vjb25kR3JpZEl0ZW1EYXRhLm9yZGVyOworICAgIHNlY29uZEdyaWRJdGVtLnNl
dEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC13aWR0aCIsIHNlY29uZEdyaWRJdGVtRGF0YS53aWR0
aCk7CisgICAgc2Vjb25kR3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLWV4cGVjdGVkLWhlaWdo
dCIsIHNlY29uZEdyaWRJdGVtRGF0YS5oZWlnaHQpOworICAgIHNlY29uZEdyaWRJdGVtLnNldEF0
dHJpYnV0ZSgiZGF0YS1vZmZzZXQteCIsIHNlY29uZEdyaWRJdGVtRGF0YS54KTsKKyAgICBzZWNv
bmRHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0LXkiLCBzZWNvbmRHcmlkSXRlbURh
dGEueSk7CisKKyAgICB2YXIgdGhpcmRHcmlkSXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0aGlyZEdyaWRJdGVtIik7CisgICAgdGhpcmRHcmlkSXRlbS5zdHlsZS5vcmRlciA9IHRoaXJk
R3JpZEl0ZW1EYXRhLm9yZGVyOworICAgIHRoaXJkR3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRh
LWV4cGVjdGVkLXdpZHRoIiwgdGhpcmRHcmlkSXRlbURhdGEud2lkdGgpOworICAgIHRoaXJkR3Jp
ZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLWV4cGVjdGVkLWhlaWdodCIsIHRoaXJkR3JpZEl0ZW1E
YXRhLmhlaWdodCk7CisgICAgdGhpcmRHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0
LXgiLCB0aGlyZEdyaWRJdGVtRGF0YS54KTsKKyAgICB0aGlyZEdyaWRJdGVtLnNldEF0dHJpYnV0
ZSgiZGF0YS1vZmZzZXQteSIsIHRoaXJkR3JpZEl0ZW1EYXRhLnkpOworCisgICAgY2hlY2tMYXlv
dXQoIi5ncmlkIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDaGFuZ2luZ0dyaWRJdGVtc09yZGVyKCkK
K3sKKyAgICB0ZXN0R3JpZEl0ZW1zT3JkZXIoeyAnb3JkZXInOiAnMCcsICd3aWR0aCc6ICc0MCcs
ICdoZWlnaHQnOiAnMTAwJywgJ3gnOiAnMCcsICd5JzogJzUwJyB9LCB7ICdvcmRlcic6ICcwJywg
J3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICc1MCcsICd4JzogJzAnLCAneSc6ICcwJyB9LCB7ICdv
cmRlcic6ICcwJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICcwJywgJ3gnOiAnMCcsICd5Jzog
JzE1MCcgfSk7CisgICAgdGVzdEdyaWRJdGVtc09yZGVyKHsgJ29yZGVyJzogJzAnLCAnd2lkdGgn
OiAnNDAnLCAnaGVpZ2h0JzogJzEwMCcsICd4JzogJzAnLCAneSc6ICc1MCcgfSwgeyAnb3JkZXIn
OiAnLTEnLCAnd2lkdGgnOiAnNDAnLCAnaGVpZ2h0JzogJzUwJywgJ3gnOiAnMCcsICd5JzogJzAn
IH0sIHsgJ29yZGVyJzogJzAnLCAnd2lkdGgnOiAnNDAnLCAnaGVpZ2h0JzogJzAnLCAneCc6ICcw
JywgJ3knOiAnMTUwJyB9KTsKKyAgICB0ZXN0R3JpZEl0ZW1zT3JkZXIoeyAnb3JkZXInOiAnMScs
ICd3aWR0aCc6ICc0MCcsICdoZWlnaHQnOiAnMCcsICd4JzogJzAnLCAneSc6ICcxNTAnIH0sIHsg
J29yZGVyJzogJy0xJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICc1MCcsICd4JzogJzAnLCAn
eSc6ICcwJyB9LCB7ICdvcmRlcic6ICcwJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICcxMDAn
LCAneCc6ICcwJywgJ3knOiAnNTAnIH0pOworICAgIHRlc3RHcmlkSXRlbXNPcmRlcih7ICdvcmRl
cic6ICcxJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICcxMDAnLCAneCc6ICcwJywgJ3knOiAn
NTAnIH0sIHsgJ29yZGVyJzogJy0xJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICc1MCcsICd4
JzogJzAnLCAneSc6ICcwJyB9LCB7ICdvcmRlcic6ICcxMCcsICd3aWR0aCc6ICc0MCcsICdoZWln
aHQnOiAnMCcsICd4JzogJzAnLCAneSc6ICcxNTAnIH0pOworfQorCit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHRlc3RDaGFuZ2luZ0dyaWRJdGVtc09yZGVyLCBmYWxzZSk7Cis8L3Nj
cmlwdD4KKzxib2R5PgorPGRpdj5UaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ3JpZCBpdGVtcycgJ29y
ZGVyJyBkeW5hbWljIHVwZGF0ZXMgcmVjb21wdXRlcyB0aGUgcG9zaXRpb25zIG9mIGF1dG9tYXRp
Y2FsbHkgcGxhY2VkIGdyaWQgaXRlbXMuPC9kaXY+CisKKzxkaXYgc3R5bGU9InBvc2l0aW9uOiBy
ZWxhdGl2ZSI+CisgICAgPGRpdiBjbGFzcz0iZ3JpZCI+CisgICAgICAgIDxkaXYgY2xhc3M9InNp
emVkVG9HcmlkQXJlYSIgaWQ9ImZpcnN0R3JpZEl0ZW0iPjwvZGl2PgorICAgICAgICA8ZGl2IGNs
YXNzPSJzaXplZFRvR3JpZEFyZWEiIGlkPSJzZWNvbmRHcmlkSXRlbSI+PC9kaXY+CisgICAgICAg
IDxkaXYgY2xhc3M9InNpemVkVG9HcmlkQXJlYSIgaWQ9InRoaXJkR3JpZEl0ZW0iPjwvZGl2Pgor
ICAgIDwvZGl2PgorPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298693</attachid>
            <date>2017-01-12 10:03:53 -0800</date>
            <delta_ts>2017-01-12 10:42:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166883-20170112190212.patch</filename>
            <type>text/plain</type>
            <size>27298</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDMxZWI3YTZmZGRiYzU0
OWVmMTQxNTE2YzIzYTdmNmRkYTMzZDU5Zi4uYzk0OTZiNzI3YjRmZTQzZWZiM2RmNjRlMzlkMDg0
ZGU1MmUwZjg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTAxLTEyICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gTWFrZSB0aGUgZ3JpZCBzaXppbmcgZGF0YSBwZXJzaXN0ZW50IHRocm91Z2ggbGF5b3V0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2ODgzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIE1hbnVlbCBSZWdvIENhc2Fzbm92
YXMuCisKKyAgICAgICAgV2Ugd2FudCB0byBrZWVwIHRoZSBncmlkIHNpemluZyBkYXRhIHN0cnVj
dHVyZXMgdGhyb3VnaCBkaWZmZXJlbnQKKyAgICAgICAgbGF5b3V0cy4gVGhpcyB3aWxsIGFsbG93
IHRvIG9wdGltaXplIHNvbWUgb3BlcmF0aW9ucywgcmV1c2luZworICAgICAgICB0aGVzZSBkYXRh
IHdoaWxlIHN0aWxsIHZhbGlkLiBBZGRpdGlvbmFsbHksIG9wZXJhdGlvbnMgbGlrZQorICAgICAg
ICBkZXRlcm1pbmluZyB0aGUgYmFzZWxpbmUgcG9zaXRpb24gd2hlbiB0aGUgZ3JpZCBjb250YWlu
ZXIgaXMgdW5kZXIKKyAgICAgICAgYW4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCBuZWVkIHRo
ZXNlIGRhdGEgb25jZSB0aGUgZ3JpZCBoYXMKKyAgICAgICAgYmVlbiBsYWlkIG91dC4KKworICAg
ICAgICBUaGlzIHBhdGNoIGNvbnRyb2xzIHRoZSBzaXppbmcgZGF0YSB2YWxpZGl0eSBhbmQgbWFr
ZSB0aGUgZGF0YQorICAgICAgICBzdHJ1Y3R1cmVzIHBlcnNpc3RlbnQgYWZ0ZXIgbGF5b3V0Lgor
CisgICAgICAgIFRlc3RzOiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWFkZC1pdGVtLXdpdGgt
cG9zaXRpb25lZC1pdGVtcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy1ncmlkLWxheW91
dC9ncmlkLWFkZC1wb3NpdGlvbmVkLWJsb2NrLWl0ZW0tYWZ0ZXItaW5saW5lLWl0ZW0uaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdl
LWV4cGxpY2l0LWdyaWQtcmVjb21wdXRlLWNoaWxkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
Y3NzLWdyaWQtbGF5b3V0L2dyaWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93Lmh0bWwKKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpzdHlsZURpZENoYW5nZSk6IEV2YWx1YXRlIGlmIHRoZSBzdHlsZSBjaGFuZ2UgbWFk
ZSB0aGUgZ3JpZCBkYXRhIGludmFsaWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVw
ZGF0ZUdyaWRQb3NpdGlvbkFmdGVyU3R5bGVDaGFuZ2UpOiBFdmFsdWF0ZSBpZiB0aGUgc3R5bGUg
Y2hhbmdlIG1hZGUgdGhlIGdyaWQgZGF0YSBpbnZhbGlkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpzZXROZWVkc0l0ZW1zUGxhY2VtZW50KTogVGhl
IGdyaWQgbXVzdCBleGVjdXRlIHRoZSBpdGVtcyBwbGFjZW1lbnQgbG9naWMgYmVmb3JlIGNvbnRp
bnVlIHByb2Nlc3NpbmcgdGhlIGxheW91dC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OmFkZENoaWxkKTogTWFyayB0aGUgZ3JpZCBkYXRhIGFzIGRpcnR5LgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6cmVtb3ZlQ2hpbGQpOiBNYXJrIHRoZSBncmlkIGRhdGEgYXMgZGlydHku
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpzdHlsZURpZENoYW5nZSk6IEV2YWx1YXRl
IGdyaWQgZGF0YSB2YWxpZGl0eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmV4cGxp
Y2l0R3JpZERpZFJlc2l6ZSk6IE1hcmsgdGhlIGdyaWQgZGF0YSBhcyBkaXJ0eS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckdyaWQ6Om5hbWVkR3JpZExpbmVzRGVmaW5pdGlvbkRpZENoYW5nZSk6
IE1hcmsgdGhlIGdyaWQgZGF0YSBhcyBkaXJ0eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OmxheW91dEJsb2NrKTogV2UgZG9uJ3QgbmVlZCB0byBjbGVhciB0aGUgZ3JpZCBkYXRhIGFu
eW1vcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpkaXJ0eUdyaWQpOiBDbGVhcmlu
ZyB0aGUgZ3JpZCBkYXRhIGFuZCBtYXJrIGlzIGFzIG5lZWRpbmcgdG8gZXhlY3V0ZSB0aGUgaXRl
bXMgcGxhY2VtZW50IGxvZ2ljLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6dHJhY2tT
aXplc0ZvckNvbXB1dGVkU3R5bGUpOiBBc3NlcnQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIHRo
ZSBpdGVtcyBwbGFjZW1lbnQgbG9naWMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpw
YWludENoaWxkcmVuKTogQXNzZXJ0IHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybSB0aGUgaXRlbXMg
cGxhY2VtZW50IGxvZ2ljLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjbGVhcik6IERlbGV0ZWQuCisKIDIwMTctMDEtMDkg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIFdlYlByb2Nlc3MgZnJvbSBXZWJLaXRHdGsrIDIuMTUuMiBTSUdTRUdWcyBpbiBzdGQ6OnVu
aXF1ZV9wdHI8U291cEJ1ZmZlciwgV1RGOjpHUHRyRGVsZXRlcjxTb3VwQnVmZmVyPiA+OjpnZXQo
KSBjb25zdCAoKSBhdCAvdXNyL2luY2x1ZGUvYysrLzYvYml0cy91bmlxdWVfcHRyLmg6MzA1CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGI0YTdiYTAyMzc5NzFmMTdh
YTJjMDc5NWMzMGVjMjI5NzcwOTlhM2MuLjM0MzNlYzVhODJjZmYzNDE2NWJjMTNmOTE0ZjFmMzg4
YTdiZDU5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03Myw2
ICs3MywxMCBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5o
PgogCisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyNpbmNsdWRlICJSZW5kZXJHcmlkLmgi
CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElPUykKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2Vu
ZGlmCkBAIC00NTAsNiArNDU0LDkgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIGlm
ICgob2xkU3R5bGUgJiYgb2xkU3R5bGUtPnNoYXBlT3V0c2lkZSgpKSB8fCBzdHlsZSgpLnNoYXBl
T3V0c2lkZSgpKQogICAgICAgICB1cGRhdGVTaGFwZU91dHNpZGVJbmZvQWZ0ZXJTdHlsZUNoYW5n
ZShzdHlsZSgpLCBvbGRTdHlsZSk7CisjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyAgICB1
cGRhdGVHcmlkUG9zaXRpb25BZnRlclN0eWxlQ2hhbmdlKHN0eWxlKCksIG9sZFN0eWxlKTsKKyNl
bmRpZgogfQogCiB2b2lkIFJlbmRlckJveDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKQEAgLTQ2
Miw2ICs0NjksMzQgQEAgdm9pZCBSZW5kZXJCb3g6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpCiAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpOwogfQogICAg
IAorI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisKK3ZvaWQgUmVuZGVyQm94Ojp1cGRhdGVH
cmlkUG9zaXRpb25BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIGlmICghb2xkU3R5bGUgfHwgIWlzPFJl
bmRlckdyaWQ+KHBhcmVudCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG9sZFN0eWxl
LT5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgPT0gc3R5bGUuZ3JpZEl0ZW1Db2x1bW5TdGFydCgpCisg
ICAgICAgICYmIG9sZFN0eWxlLT5ncmlkSXRlbUNvbHVtbkVuZCgpID09IHN0eWxlLmdyaWRJdGVt
Q29sdW1uRW5kKCkKKyAgICAgICAgJiYgb2xkU3R5bGUtPmdyaWRJdGVtUm93U3RhcnQoKSA9PSBz
dHlsZS5ncmlkSXRlbVJvd1N0YXJ0KCkKKyAgICAgICAgJiYgb2xkU3R5bGUtPmdyaWRJdGVtUm93
RW5kKCkgPT0gc3R5bGUuZ3JpZEl0ZW1Sb3dFbmQoKQorICAgICAgICAmJiBvbGRTdHlsZS0+b3Jk
ZXIoKSA9PSBzdHlsZS5vcmRlcigpCisgICAgICAgICYmIG9sZFN0eWxlLT5oYXNPdXRPZkZsb3dQ
b3NpdGlvbigpID09IHN0eWxlLmhhc091dE9mRmxvd1Bvc2l0aW9uKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFBvc2l0aW9uZWQgaXRlbXMgZG9uJ3QgcGFydGljaXBhdGUgb24gdGhlIGxh
eW91dCBvZiB0aGUgZ3JpZCwKKyAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlIGdy
aWQgYXMgZGlydHkgaWYgdGhleSBjaGFuZ2UgcG9zaXRpb25zLgorICAgIGlmIChvbGRTdHlsZS0+
aGFzT3V0T2ZGbG93UG9zaXRpb24oKSAmJiBzdHlsZS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gbm90IGRp
cnR5IHRoZSBncmlkIGluIHNvbWUgY2FzZXMgKGxpa2UgbW92aW5nIGFuCisgICAgLy8gZXhwbGlj
aXRseSBwbGFjZWQgZ3JpZCBpdGVtKS4KKyAgICAvLyBGb3Igbm93LCBpdCdzIG1vcmUgc2ltcGxl
IHRvIGp1c3QgYWx3YXlzIHJlY29tcHV0ZSB0aGUgZ3JpZC4KKyAgICBkb3duY2FzdDxSZW5kZXJH
cmlkPigqcGFyZW50KCkpLmRpcnR5R3JpZCgpOworfQorCisjZW5kaWYKKwogdm9pZCBSZW5kZXJC
b3g6OnVwZGF0ZVNoYXBlT3V0c2lkZUluZm9BZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIGNvbnN0IFNo
YXBlVmFsdWUqIHNoYXBlT3V0c2lkZSA9IHN0eWxlLnNoYXBlT3V0c2lkZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGQwZmE3YjJhNTc2Mjc5ZGEwMTVmNjI4NTdhNGJi
NGMzODdiNzgxMmQuLjRmNTU0OWQ4MGRmNWJiM2VkYzhjYzU1MmEwMjVkMDU1YjkzOTliZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTY1NCw2ICs2NTQsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmdGVyU3R5bGVDaGFuZ2UoY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAjaWYgRU5B
QkxFKENTU19HUklEX0xBWU9VVCkKKyAgICB2b2lkIHVwZGF0ZUdyaWRQb3NpdGlvbkFmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
OwogICAgIGJvb2wgaXNHcmlkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCgpICYmIHBhcmVu
dCgpLT5pc1JlbmRlckdyaWQoKTsgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmNwcAppbmRleCAzM2JmZjBlNDFkMDAzMmE3NTU3ZjA0ZDUzZjc1YWNkMTEzZWI2
ZWYwLi4xM2ZjYTc4ZWUzODYyZjg4Y2I5ZWQ5NDJmMTkyMWJiYWJiMzkyN2EwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC0xNTIsMjMgKzE1MiwyMCBAQCB2b2lk
IFJlbmRlckdyaWQ6OkdyaWQ6OnNldE5lZWRzSXRlbXNQbGFjZW1lbnQoYm9vbCBuZWVkc0l0ZW1z
UGxhY2VtZW50KQogewogICAgIG1fbmVlZHNJdGVtc1BsYWNlbWVudCA9IG5lZWRzSXRlbXNQbGFj
ZW1lbnQ7CiAKLSAgICBpZiAobmVlZHNJdGVtc1BsYWNlbWVudCkKLSAgICAgICAgY2xlYXIoKTsK
LX0KKyAgICBpZiAoIW5lZWRzSXRlbXNQbGFjZW1lbnQpIHsKKyAgICAgICAgbV9ncmlkLnNocmlu
a1RvRml0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6R3Jp
ZDo6Y2xlYXIoKQotewogICAgIG1fZ3JpZC5yZXNpemUoMCk7CiAgICAgbV9ncmlkSXRlbUFyZWEu
Y2xlYXIoKTsKICAgICBtX2hhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGZhbHNlOwogICAgIG1f
c21hbGxlc3RSb3dTdGFydCA9IDA7CiAgICAgbV9zbWFsbGVzdENvbHVtblN0YXJ0ID0gMDsKLSAg
ICAvLyBGSVhNRTogY2xlYXIgdGhlc2Ugb25jZSBtX2dyaWQgc3Vydml2ZXMgbGF5b3V0LiBXZSBj
YW5ub3QgY2xlYXIgdGhlbSBub3cgYmVjYXVzZSB0aGV5J3JlCi0gICAgLy8gbmVlZGVkIGFmdGVy
IGxheW91dC4KLSAgICAvLyBtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnMgPSBudWxscHRyOwotICAg
IC8vIG1fYXV0b1JlcGVhdEVtcHR5Um93cyA9IG51bGxwdHI7Ci0gICAgLy8gbV9hdXRvUmVwZWF0
Q29sdW1ucyA9IDA7Ci0gICAgLy8gbV9hdXRvUmVwZWF0Um93cyA9IDA7CisgICAgbV9hdXRvUmVw
ZWF0RW1wdHlDb2x1bW5zID0gbnVsbHB0cjsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eVJvd3MgPSBu
dWxscHRyOworICAgIG1fYXV0b1JlcGVhdENvbHVtbnMgPSAwOworICAgIG1fYXV0b1JlcGVhdFJv
d3MgPSAwOwogfQogCiBjbGFzcyBHcmlkVHJhY2sgewpAQCAtNDkxLDYgKzQ4OCwyNCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2VsZkFsaWdubWVudENoYW5nZWRGcm9tU3RyZXRjaEluQ29sdW1uQXhp
cyhjb25zdCBSZW5kZXJTdHlsZQogICAgICAgICAmJiBjaGlsZFN0eWxlLnJlc29sdmVkQWxpZ25T
ZWxmKG5ld1N0eWxlLCBzZWxmQWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IpLnBvc2l0aW9uKCkgIT0g
SXRlbVBvc2l0aW9uU3RyZXRjaDsKIH0KIAordm9pZCBSZW5kZXJHcmlkOjphZGRDaGlsZChSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIFJl
bmRlckJsb2NrOjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworCisgICAgLy8gVGhl
IGdyaWQgbmVlZHMgdG8gYmUgcmVjb21wdXRlZCBhcyBpdCBtaWdodCBjb250YWluIGF1dG8tcGxh
Y2VkIGl0ZW1zIHRoYXQKKyAgICAvLyB3aWxsIGNoYW5nZSB0aGVpciBwb3NpdGlvbi4KKyAgICBk
aXJ0eUdyaWQoKTsKK30KKwordm9pZCBSZW5kZXJHcmlkOjpyZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QmIGNoaWxkKQoreworICAgIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChjaGlsZCk7CisKKyAg
ICAvLyBUaGUgZ3JpZCBuZWVkcyB0byBiZSByZWNvbXB1dGVkIGFzIGl0IG1pZ2h0IGNvbnRhaW4g
YXV0by1wbGFjZWQgaXRlbXMgdGhhdAorICAgIC8vIHdpbGwgY2hhbmdlIHRoZWlyIHBvc2l0aW9u
LgorICAgIGRpcnR5R3JpZCgpOworfQorCiB2b2lkIFJlbmRlckdyaWQ6OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAg
ICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKQEAgLTUxMiw2
ICs1MjcsMjYgQEAgdm9pZCBSZW5kZXJHcmlkOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWwKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KKworICAgIGlmIChleHBsaWNpdEdyaWREaWRSZXNpemUoKm9sZFN0eWxlKSB8
fCBuYW1lZEdyaWRMaW5lc0RlZmluaXRpb25EaWRDaGFuZ2UoKm9sZFN0eWxlKSB8fCBvbGRTdHls
ZS0+Z3JpZEF1dG9GbG93KCkgIT0gc3R5bGUoKS5ncmlkQXV0b0Zsb3coKQorICAgICAgICB8fCAo
c3R5bGUoKS5ncmlkQXV0b1JlcGVhdENvbHVtbnMoKS5zaXplKCkgfHwgc3R5bGUoKS5ncmlkQXV0
b1JlcGVhdFJvd3MoKS5zaXplKCkpKQorICAgICAgICBkaXJ0eUdyaWQoKTsKK30KKworYm9vbCBS
ZW5kZXJHcmlkOjpleHBsaWNpdEdyaWREaWRSZXNpemUoY29uc3QgUmVuZGVyU3R5bGUmIG9sZFN0
eWxlKSBjb25zdAoreworICAgIHJldHVybiBvbGRTdHlsZS5ncmlkQ29sdW1ucygpLnNpemUoKSAh
PSBzdHlsZSgpLmdyaWRDb2x1bW5zKCkuc2l6ZSgpCisgICAgICAgIHx8IG9sZFN0eWxlLmdyaWRS
b3dzKCkuc2l6ZSgpICE9IHN0eWxlKCkuZ3JpZFJvd3MoKS5zaXplKCkKKyAgICAgICAgfHwgb2xk
U3R5bGUubmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KCkgIT0gc3R5bGUoKS5uYW1lZEdyaWRBcmVh
Q29sdW1uQ291bnQoKQorICAgICAgICB8fCBvbGRTdHlsZS5uYW1lZEdyaWRBcmVhUm93Q291bnQo
KSAhPSBzdHlsZSgpLm5hbWVkR3JpZEFyZWFSb3dDb3VudCgpCisgICAgICAgIHx8IG9sZFN0eWxl
LmdyaWRBdXRvUmVwZWF0Q29sdW1ucygpLnNpemUoKSAhPSBzdHlsZSgpLmdyaWRBdXRvUmVwZWF0
Q29sdW1ucygpLnNpemUoKQorICAgICAgICB8fCBvbGRTdHlsZS5ncmlkQXV0b1JlcGVhdFJvd3Mo
KS5zaXplKCkgIT0gc3R5bGUoKS5ncmlkQXV0b1JlcGVhdFJvd3MoKS5zaXplKCk7Cit9CisKK2Jv
b2wgUmVuZGVyR3JpZDo6bmFtZWRHcmlkTGluZXNEZWZpbml0aW9uRGlkQ2hhbmdlKGNvbnN0IFJl
bmRlclN0eWxlJiBvbGRTdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gb2xkU3R5bGUubmFtZWRH
cmlkUm93TGluZXMoKSAhPSBzdHlsZSgpLm5hbWVkR3JpZFJvd0xpbmVzKCkKKyAgICAgICAgfHwg
b2xkU3R5bGUubmFtZWRHcmlkQ29sdW1uTGluZXMoKSAhPSBzdHlsZSgpLm5hbWVkR3JpZENvbHVt
bkxpbmVzKCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29tcHV0ZVRyYWNrQmFzZWRM
b2dpY2FsSGVpZ2h0KGNvbnN0IEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhKSBjb25zdApAQCAt
NjUxLDggKzY4Niw2IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuLCBMYXlvdXRVbml0KQogCiAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVs
YXlvdXRDaGlsZHJlbiB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpOwogCi0gICAgY2xl
YXJHcmlkKCk7Ci0KICAgICBjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKICAg
ICBzdGF0ZVB1c2hlci5wb3AoKTsKIApAQCAtMTk1Myw4ICsxOTg2LDExIEBAIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBSZW5kZXJHcmlkOjphdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9u
KCkgY29uc3QKICAgICByZXR1cm4gc3R5bGUoKS5pc0dyaWRBdXRvRmxvd0RpcmVjdGlvbkNvbHVt
bigpID8gRm9yUm93cyA6IEZvckNvbHVtbnM7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6Y2xlYXJH
cmlkKCkKK3ZvaWQgUmVuZGVyR3JpZDo6ZGlydHlHcmlkKCkKIHsKKyAgICBpZiAobV9ncmlkLm5l
ZWRzSXRlbXNQbGFjZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9ncmlkLnNldE5l
ZWRzSXRlbXNQbGFjZW1lbnQodHJ1ZSk7CiB9CiAKQEAgLTE5NjksOCArMjAwNSw3IEBAIFZlY3Rv
cjxMYXlvdXRVbml0PiBSZW5kZXJHcmlkOjp0cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZShHcmlk
VHJhY2tTaXppbmdEaXJlY3RpCiAgICAgaWYgKG51bVBvc2l0aW9ucyA8IDIpCiAgICAgICAgIHJl
dHVybiB0cmFja3M7CiAKLSAgICAvLyBGSVhNRTogZW5hYmxlIHRoZSBBU1NFUlQgb25jZSBtX2dy
aWQgaXMgcGVyc2lzdGVudC4KLSAgICAvLyBBU1NFUlQoIW1fZ3JpZC5uZWVkc0l0ZW1zUGxhY2Vt
ZW50KCkpOworICAgIEFTU0VSVCghbV9ncmlkLm5lZWRzSXRlbXNQbGFjZW1lbnQoKSk7CiAgICAg
Ym9vbCBoYXNDb2xsYXBzZWRUcmFja3MgPSBtX2dyaWQuaGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tz
KGRpcmVjdGlvbik7CiAgICAgTGF5b3V0VW5pdCBnYXAgPSAhaGFzQ29sbGFwc2VkVHJhY2tzID8g
Z3JpZEdhcEZvckRpcmVjdGlvbihkaXJlY3Rpb24pIDogTGF5b3V0VW5pdCgpOwogICAgIHRyYWNr
cy5yZXNlcnZlQ2FwYWNpdHkobnVtUG9zaXRpb25zIC0gMSk7CkBAIC0yODAzLDggKzI4MzgsNyBA
QCB1bnNpZ25lZCBSZW5kZXJHcmlkOjpudW1UcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgR3JpZCYgZwogCiB2b2lkIFJlbmRlckdyaWQ6OnBhaW50Q2hpbGRy
ZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
UGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCiB7Ci0gICAgLy8gRklYTUU6
IGVuYWJsZSB0aGUgQVNTRVJUIG9uY2UgbV9ncmlkIGlzIHBlcnNpc3RlbnQuCi0gICAgLy8gQVNT
RVJUKCFtX2dyaWQubmVlZHNJdGVtc1BsYWNlbWVudCgpKTsKKyAgICBBU1NFUlQoIW1fZ3JpZC5u
ZWVkc0l0ZW1zUGxhY2VtZW50KCkpOwogICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fZ3Jp
ZC5vcmRlckl0ZXJhdG9yKCkuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9ncmlkLm9yZGVySXRl
cmF0b3IoKS5uZXh0KCkpCiAgICAgICAgIHBhaW50Q2hpbGQoKmNoaWxkLCBwYWludEluZm8sIHBh
aW50T2Zmc2V0LCBmb3JDaGlsZCwgdXNlUHJpbnRSZWN0LCBQYWludEFzSW5saW5lQmxvY2spOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKaW5kZXggZjM5ZDUwYTlkNjY2MmQy
MDA4NGZiYjEzYTU1Y2EzZDViNjMxMWQ5Yy4uNDMxM2E2ZTIyNGU1NzNjNzdjMjcyOGQ5N2NhODEy
MzBjMDVjYjFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC02NSw2
ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIGNhbkRyb3BBbm9ueW1vdXNCbG9ja0NoaWxkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZvaWQgZGlydHlHcmlkKCk7
CiAgICAgVmVjdG9yPExheW91dFVuaXQ+IHRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAKICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5p
dD4mIGNvbHVtblBvc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUG9zaXRpb25zOyB9
CkBAIC03Nyw2ICs3OCwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJHcmlkKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY0xv
Z2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhM
b2dpY2FsV2lkdGgpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKSBmaW5hbDsKKyAgICB2
b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFsOworCisgICAgYm9vbCBleHBsaWNp
dEdyaWREaWRSZXNpemUoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKKyAgICBib29sIG5hbWVk
R3JpZExpbmVzRGVmaW5pdGlvbkRpZENoYW5nZShjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0Owor
CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlSW50cmluc2ljTG9naWNhbENv
bnRlbnRIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodExlbmd0aCwgc3RkOjpvcHRpb25h
bDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVpZ2h0LCBMYXlvdXRVbml0IGJvcmRlckFu
ZFBhZGRpbmcpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgY2xhc3MgR3JpZDsKQEAgLTExNyw3ICsx
MjQsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBsYXlvdXRHcmlkSXRlbXMoR3JpZFNpemluZ0Rh
dGEmKTsKICAgICB2b2lkIHBvcHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihHcmlkU2l6
aW5nRGF0YSYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbik7Ci0gICAgdm9pZCBjbGVhckdyaWQo
KTsKIAogICAgIHN0YXRpYyBib29sIHNob3VsZFByb2Nlc3NUcmFja0ZvclRyYWNrU2l6ZUNvbXB1
dGF0aW9uUGhhc2UoVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSwgY29uc3QgR3JpZFRyYWNrU2l6
ZSYpOwogICAgIHN0YXRpYyBib29sIHRyYWNrU2hvdWxkR3Jvd0JleW9uZEdyb3d0aExpbWl0c0Zv
clRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UoVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSwgY29u
c3QgR3JpZFRyYWNrU2l6ZSYpOwpAQCAtMjQxLDggKzI0Nyw2IEBAIHByaXZhdGU6CiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIEdyaWRJdGVyYXRvcjsKIAotICAgICAgICB2b2lk
IGNsZWFyKCk7Ci0KICAgICAgICAgT3JkZXJJdGVyYXRvciBtX29yZGVySXRlcmF0b3I7CiAKICAg
ICAgICAgaW50IG1fc21hbGxlc3RDb2x1bW5TdGFydCB7IDAgfTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlOTJiOTlhZTQ5
ZmM4ZWYzMTRmMWEzZWZjYTA2ZjA2YmQ4YWEyYjI5Li4zZWE4NmUxNzBlMzFjNzEyYWZjZGIzNjkz
ZDIwYzdlNGVhYjllNzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDEtMTIgIEphdmll
ciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW2Nzcy1ncmlk
XSBNYWtlIHRoZSBncmlkIHNpemluZyBkYXRhIHBlcnNpc3RlbnQgdGhyb3VnaCBsYXlvdXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4ODMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgTWFudWVsIFJlZ28gQ2FzYXNub3Zh
cy4KKworICAgICAgICBUaGUgdGVzdHMgYWRkZWQgYXJlIG5vdyBuZWVkZWQgdG8gdmVyaWZ5IHdl
IHBlcmZvcm0gY29ycmVjdGx5IHRoZQorICAgICAgICBkYXRhIHZhbGlkYXRpb24gYWZ0ZXIgY2Vy
dGFpbiBzdHlsZSBjaGFuZ2VzLgorCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3Jp
ZC1hZGQtaXRlbS13aXRoLXBvc2l0aW9uZWQtaXRlbXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWFkZC1pdGVtLXdpdGgtcG9zaXRpb25l
ZC1pdGVtcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlk
LWFkZC1wb3NpdGlvbmVkLWJsb2NrLWl0ZW0tYWZ0ZXItaW5saW5lLWl0ZW0tZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWFkZC1wb3NpdGlv
bmVkLWJsb2NrLWl0ZW0tYWZ0ZXItaW5saW5lLWl0ZW0uaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdlLWV4cGxpY2l0LWdyaWQt
cmVjb21wdXRlLWNoaWxkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mt
Z3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdlLWV4cGxpY2l0LWdyaWQtcmVjb21wdXRl
LWNoaWxkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQt
aXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1pdGVtLWNoYW5nZS1vcmRlci1hdXRvLWZsb3cu
aHRtbDogQWRkZWQuCisKIDIwMTctMDEtMDkgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGln
YWxpYS5jb20+CiAKICAgICAgICAgW09XUl0gVW5za2lwIGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0tdmlkZW8tZWxlbWVudC10cmFjay1zdG9wLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtYWRkLWl0ZW0td2l0aC1wb3NpdGlvbmVkLWl0
ZW1zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQt
YWRkLWl0ZW0td2l0aC1wb3NpdGlvbmVkLWl0ZW1zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
NjMwNzJhMTUyNzZmYjUzODA4OGVkZDM1YjA5ZDEzNWY0YjY5ZmQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1hZGQtaXRlbS13aXRoLXBv
c2l0aW9uZWQtaXRlbXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0cyBj
aGVja3MgdGhhdCBhZGRpbmcgZ3JpZCBpdGVtcyB3aGVuIHNvbWUgb2YgdGhlbSBhcmUgcG9zaXRp
b25lZCBkb2VzIG5vdCBjcmFzaC4KKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy1ncmlkLWxheW91dC9ncmlkLWFkZC1pdGVtLXdpdGgtcG9zaXRpb25lZC1pdGVtcy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1hZGQtaXRlbS13aXRoLXBvc2l0
aW9uZWQtaXRlbXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODhhYzk0M2IzZmE1MDUyMDA4MWFlMzY2NmRj
NWYzYzM1MDQxMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3Jp
ZC1sYXlvdXQvZ3JpZC1hZGQtaXRlbS13aXRoLXBvc2l0aW9uZWQtaXRlbXMuaHRtbApAQCAtMCww
ICsxLDM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAg
I2dyaWQgeworICAgICAgICBkaXNwbGF5OiBncmlkOworICAgICAgICBncmlkLWF1dG8tZmxvdzog
c3RhY2s7CisgICAgfQorICAgIC5hYnNvbHV0ZSB7CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKKyAgICB9Cis8L3N0eWxlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwPlRoaXMgdGVzdHMgY2hlY2tzIHRo
YXQgYWRkaW5nIGdyaWQgaXRlbXMgd2hlbiBzb21lIG9mIHRoZW0gYXJlIHBvc2l0aW9uZWQgZG9l
cyBub3QgY3Jhc2guPC9wPgorICAgIDxkaXYgaWQ9ImdyaWQiPgorICAgICAgICA8ZGl2PjwvZGl2
PgorICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSI+PC9kaXY+CisgICAgPC9kaXY+CisgICAg
PHNjcmlwdD4KKyAgICAgICAgdmFyIGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3Jp
ZCIpOworICAgICAgICBncmlkLm9mZnNldFRvcDsKKyAgICAgICAgdmFyIG5ld0l0ZW0xID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQobmV3
SXRlbTEpOworICAgICAgICB2YXIgbmV3SXRlbTIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgbmV3SXRlbTIuY2xhc3NOYW1lID0gImFic29sdXRlIjsKKyAgICAgICAg
Z3JpZC5hcHBlbmRDaGlsZChuZXdJdGVtMik7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWFk
ZC1wb3NpdGlvbmVkLWJsb2NrLWl0ZW0tYWZ0ZXItaW5saW5lLWl0ZW0tZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1hZGQtcG9zaXRpb25lZC1ibG9j
ay1pdGVtLWFmdGVyLWlubGluZS1pdGVtLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTQ1Yzk4
NzMzNTkwZmE4ZDVkOGM2ZDMzNjA4ZjViYzliMWUwMGFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1hZGQtcG9zaXRpb25lZC1ibG9jay1p
dGVtLWFmdGVyLWlubGluZS1pdGVtLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKK1RoaXMg
dGVzdCBjaGVja3MgdGhhdCBhZGRpbmcgYSBwb3NpdGlvbmVkIGJsb2NrIGdyaWQgaXRlbSBhZnRl
ciBhbiBpbmxpbmUgZ3JpZCBpdGVtICh3aGljaCBpbnNlcnRzIGl0IGluc2lkZSB0aGUgZXhpc3Rp
bmcgYW5vbnltb3VzIGJsb2NrIHdyYXBwaW5nIHRoZSBpbmxpbmUgaXRlbSkgZG9lcyBub3QgY3Jh
c2ggb24gZGVidWcuCisKK3Rlc3QgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1n
cmlkLWxheW91dC9ncmlkLWFkZC1wb3NpdGlvbmVkLWJsb2NrLWl0ZW0tYWZ0ZXItaW5saW5lLWl0
ZW0uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtYWRkLXBvc2l0
aW9uZWQtYmxvY2staXRlbS1hZnRlci1pbmxpbmUtaXRlbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyZTMw
NzQ4ZjRhOGFkMDNkZTAwNjc1NzllNmU0M2Q2NTkzMWY0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWFkZC1wb3NpdGlvbmVkLWJsb2Nr
LWl0ZW0tYWZ0ZXItaW5saW5lLWl0ZW0uaHRtbApAQCAtMCwwICsxLDMyIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgI2dyaWQgeworICAgICAgICBkaXNw
bGF5OiBncmlkOworICAgICAgICBncmlkLWF1dG8tZmxvdzogc3RhY2s7CisgICAgfQorICAgIGVt
YmVkIHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIH0KKzwvc3R5bGU+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CisgICAgPHA+VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGFkZGluZyBhIHBvc2l0aW9uZWQgYmxv
Y2sgZ3JpZCBpdGVtIGFmdGVyIGFuIGlubGluZSBncmlkIGl0ZW0gKHdoaWNoIGluc2VydHMgaXQg
aW5zaWRlIHRoZQorICAgIGV4aXN0aW5nIGFub255bW91cyBibG9jayB3cmFwcGluZyB0aGUgaW5s
aW5lIGl0ZW0pIGRvZXMgbm90IGNyYXNoIG9uIGRlYnVnLjwvcD4KKyAgICA8ZGl2IGlkPSJncmlk
Ij4KKyAgICAgICAgdGVzdAorICAgIDwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciBn
cmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyaWQiKTsKKyAgICAgICAgZ3JpZC5vZmZz
ZXRUb3A7CisgICAgICAgIHZhciBlbWJlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImVtYmVk
Iik7CisgICAgICAgIGVtYmVkLnNldEF0dHJpYnV0ZSgidHlwZSIsICJpbWFnZS9wbmciKTsKKyAg
ICAgICAgZ3JpZC5hcHBlbmRDaGlsZChlbWJlZCk7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlk
LWNvbnRhaW5lci1jaGFuZ2UtZXhwbGljaXQtZ3JpZC1yZWNvbXB1dGUtY2hpbGQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hh
bmdlLWV4cGxpY2l0LWdyaWQtcmVjb21wdXRlLWNoaWxkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41MWI5MDRlYjc0ZjkzZTI5NzI3YzEzYTlmMDQxMzkyMTM2NGY3ZjcwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hh
bmdlLWV4cGxpY2l0LWdyaWQtcmVjb21wdXRlLWNoaWxkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDcgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBncmlkLXRlbXBsYXRlLXtyb3dzfGNvbHVtbnN9
IGR5bmFtaWMgdXBkYXRlcyByZWNvbXB1dGVzIHRoZSBwb3NpdGlvbnMgb2YgYXV0b21hdGljYWxs
eSBwbGFjZWQgZ3JpZCBpdGVtcy4KK1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtY29udGFp
bmVyLWNoYW5nZS1leHBsaWNpdC1ncmlkLXJlY29tcHV0ZS1jaGlsZC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250YWluZXItY2hhbmdlLWV4cGxpY2l0LWdy
aWQtcmVjb21wdXRlLWNoaWxkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTllYjhiYzc0NzA2ZDY4NTA5MjE2
MzA5ODA2MWY0OTQ0N2YwMWRjMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzLWdyaWQtbGF5b3V0L2dyaWQtY29udGFpbmVyLWNoYW5nZS1leHBsaWNpdC1ncmlkLXJlY29t
cHV0ZS1jaGlsZC5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8bGluayBocmVmPSJyZXNvdXJjZXMvZ3JpZC5jc3MiIHJlbD0ic3R5bGVzaGVldCI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2NoZWNrLWxheW91dC5qcyI+PC9zY3JpcHQ+Cis8c3R5
bGU+CisuZ3JpZCB7CisgICAgZ3JpZC1hdXRvLWZsb3c6IHJvdyBkZW5zZTsKKyAgICBncmlkLWF1
dG8tcm93czogNXB4OworICAgIGdyaWQtYXV0by1jb2x1bW5zOiA1cHg7Cit9CisjZmlyc3RHcmlk
SXRlbSB7CisgICAgZ3JpZC1yb3c6IGF1dG87CisgICAgZ3JpZC1jb2x1bW46IDE7Cit9CisKKyNz
ZWNvbmRHcmlkSXRlbSB7CisgICAgZ3JpZC1yb3c6IDE7CisgICAgZ3JpZC1jb2x1bW46IGF1dG87
Cit9CisKKyN0aGlyZEdyaWRJdGVtIHsKKyAgICBncmlkLXJvdzogYXV0bzsKKyAgICBncmlkLWNv
bHVtbjogYXV0bzsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdEdyaWREZWZp
bml0aW9ucyhncmlkVGVtcGxhdGVSb3dzLCBncmlkVGVtcGxhdGVDb2x1bW5zLCBncmlkVGVtcGxh
dGVBcmVhcywgZmlyc3RHcmlkSXRlbURhdGEsIHNlY29uZEdyaWRJdGVtRGF0YSwgdGhpcmRHcmlk
SXRlbURhdGEpCit7CisgICAgdmFyIGdyaWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgiZ3JpZCIpWzBdOworICAgIGdyaWRFbGVtZW50LnN0eWxlLmdyaWRUZW1wbGF0
ZVJvd3MgPSBncmlkVGVtcGxhdGVSb3dzOworICAgIGdyaWRFbGVtZW50LnN0eWxlLmdyaWRUZW1w
bGF0ZUNvbHVtbnMgPSBncmlkVGVtcGxhdGVDb2x1bW5zOworICAgIGdyaWRFbGVtZW50LnN0eWxl
LmdyaWRUZW1wbGF0ZUFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXM7CisKKyAgICB2YXIgZmlyc3RH
cmlkSXRlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaXJzdEdyaWRJdGVtIik7CisgICAg
Zmlyc3RHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtZXhwZWN0ZWQtd2lkdGgiLCBmaXJzdEdy
aWRJdGVtRGF0YS53aWR0aCk7CisgICAgZmlyc3RHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEt
ZXhwZWN0ZWQtaGVpZ2h0IiwgZmlyc3RHcmlkSXRlbURhdGEuaGVpZ2h0KTsKKyAgICBmaXJzdEdy
aWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1vZmZzZXQteCIsIGZpcnN0R3JpZEl0ZW1EYXRhLngp
OworICAgIGZpcnN0R3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLW9mZnNldC15IiwgZmlyc3RH
cmlkSXRlbURhdGEueSk7CisKKyAgICB2YXIgc2Vjb25kR3JpZEl0ZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgic2Vjb25kR3JpZEl0ZW0iKTsKKyAgICBzZWNvbmRHcmlkSXRlbS5zZXRBdHRy
aWJ1dGUoImRhdGEtZXhwZWN0ZWQtd2lkdGgiLCBzZWNvbmRHcmlkSXRlbURhdGEud2lkdGgpOwor
ICAgIHNlY29uZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC1oZWlnaHQiLCBz
ZWNvbmRHcmlkSXRlbURhdGEuaGVpZ2h0KTsKKyAgICBzZWNvbmRHcmlkSXRlbS5zZXRBdHRyaWJ1
dGUoImRhdGEtb2Zmc2V0LXgiLCBzZWNvbmRHcmlkSXRlbURhdGEueCk7CisgICAgc2Vjb25kR3Jp
ZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLW9mZnNldC15Iiwgc2Vjb25kR3JpZEl0ZW1EYXRhLnkp
OworCisgICAgdmFyIHRoaXJkR3JpZEl0ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhp
cmRHcmlkSXRlbSIpOworICAgIHRoaXJkR3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLWV4cGVj
dGVkLXdpZHRoIiwgdGhpcmRHcmlkSXRlbURhdGEud2lkdGgpOworICAgIHRoaXJkR3JpZEl0ZW0u
c2V0QXR0cmlidXRlKCJkYXRhLWV4cGVjdGVkLWhlaWdodCIsIHRoaXJkR3JpZEl0ZW1EYXRhLmhl
aWdodCk7CisgICAgdGhpcmRHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0LXgiLCB0
aGlyZEdyaWRJdGVtRGF0YS54KTsKKyAgICB0aGlyZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0
YS1vZmZzZXQteSIsIHRoaXJkR3JpZEl0ZW1EYXRhLnkpOworCisgICAgY2hlY2tMYXlvdXQoIi5n
cmlkIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RDaGFuZ2luZ0dyaWREZWZpbml0aW9ucygpCit7Cisg
ICAgdGVzdEdyaWREZWZpbml0aW9ucygnMTBweCAyMHB4JywgJzEwcHgnLCAnJywgeyAnd2lkdGgn
OiAnMTAnLCAnaGVpZ2h0JzogJzIwJywgJ3gnOiAnMCcsICd5JzogJzEwJyB9LCB7ICd3aWR0aCc6
ICcxMCcsICdoZWlnaHQnOiAnMTAnLCAneCc6ICcwJywgJ3knOiAnMCcgfSwgeyAnd2lkdGgnOiAn
MTAnLCAnaGVpZ2h0JzogJzUnLCAneCc6ICcwJywgJ3knOiAnMzAnIH0pOworICAgIHRlc3RHcmlk
RGVmaW5pdGlvbnMoJzEwcHgnLCAnMTBweCcsICciYSInLCB7ICd3aWR0aCc6ICcxMCcsICdoZWln
aHQnOiAnNScsICd4JzogJzAnLCAneSc6ICcxMCcgfSwgeyAnd2lkdGgnOiAnMTAnLCAnaGVpZ2h0
JzogJzEwJywgJ3gnOiAnMCcsICd5JzogJzAnIH0sIHsgJ3dpZHRoJzogJzEwJywgJ2hlaWdodCc6
ICc1JywgJ3gnOiAnMCcsICd5JzogJzE1JyB9KTsKKyAgICB0ZXN0R3JpZERlZmluaXRpb25zKCcx
MHB4JywgJzEwcHgnLCAnImEgLiInLCB7ICd3aWR0aCc6ICcxMCcsICdoZWlnaHQnOiAnNScsICd4
JzogJzAnLCAneSc6ICcxMCcgfSwgeyAnd2lkdGgnOiAnMTAnLCAnaGVpZ2h0JzogJzEwJywgJ3gn
OiAnMCcsICd5JzogJzAnIH0sIHsgJ3dpZHRoJzogJzUnLCAnaGVpZ2h0JzogJzEwJywgJ3gnOiAn
MTAnLCAneSc6ICcwJyB9KTsKKyAgICB0ZXN0R3JpZERlZmluaXRpb25zKCc1MHB4JywgJzMwcHgg
NDBweCcsICcnLCB7ICd3aWR0aCc6ICczMCcsICdoZWlnaHQnOiAnNScsICd4JzogJzAnLCAneSc6
ICc1MCcgfSwgeyAnd2lkdGgnOiAnMzAnLCAnaGVpZ2h0JzogJzUwJywgJ3gnOiAnMCcsICd5Jzog
JzAnIH0sIHsgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICc1MCcsICd4JzogJzMwJywgJ3knOiAn
MCcgfSk7CisgICAgdGVzdEdyaWREZWZpbml0aW9ucygnNTBweCcsICc2MHB4JywgJycsIHsgJ3dp
ZHRoJzogJzYwJywgJ2hlaWdodCc6ICc1JywgJ3gnOiAnMCcsICd5JzogJzUwJyB9LCB7ICd3aWR0
aCc6ICc2MCcsICdoZWlnaHQnOiAnNTAnLCAneCc6ICcwJywgJ3knOiAnMCcgfSwgeyAnd2lkdGgn
OiAnNjAnLCAnaGVpZ2h0JzogJzUnLCAneCc6ICcwJywgJ3knOiAnNTUnIH0pOworICAgIHRlc3RH
cmlkRGVmaW5pdGlvbnMoJzUwcHggMTAwcHggMTUwcHgnLCAnNjBweCcsICcnLCB7ICd3aWR0aCc6
ICc2MCcsICdoZWlnaHQnOiAnMTAwJywgJ3gnOiAnMCcsICd5JzogJzUwJyB9LCB7ICd3aWR0aCc6
ICc2MCcsICdoZWlnaHQnOiAnNTAnLCAneCc6ICcwJywgJ3knOiAnMCcgfSwgeyAnd2lkdGgnOiAn
NjAnLCAnaGVpZ2h0JzogJzE1MCcsICd4JzogJzAnLCAneSc6ICcxNTAnIH0pOworfQorCit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHRlc3RDaGFuZ2luZ0dyaWREZWZpbml0aW9ucywg
ZmFsc2UpOworPC9zY3JpcHQ+Cis8Ym9keT4KKzxkaXY+VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdy
aWQtdGVtcGxhdGUte3Jvd3N8Y29sdW1uc30gZHluYW1pYyB1cGRhdGVzIHJlY29tcHV0ZXMgdGhl
IHBvc2l0aW9ucyBvZiBhdXRvbWF0aWNhbGx5IHBsYWNlZCBncmlkIGl0ZW1zLjwvZGl2PgorCis8
ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPgorICAgIDxkaXYgY2xhc3M9ImdyaWQiPgor
ICAgICAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIGlkPSJmaXJzdEdyaWRJdGVtIj48
L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2l6ZWRUb0dyaWRBcmVhIiBpZD0ic2Vjb25kR3Jp
ZEl0ZW0iPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIGlkPSJ0
aGlyZEdyaWRJdGVtIj48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWl0
ZW0tY2hhbmdlLW9yZGVyLWF1dG8tZmxvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy1ncmlkLWxheW91dC9ncmlkLWl0ZW0tY2hhbmdlLW9yZGVyLWF1dG8tZmxvdy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGYwODlkNmE0NTM1MDRkMzJlYWMwZDdlYmJhMmQ2NDEyODVkOGM5
NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dy
aWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUg
QEAKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBncmlkIGl0ZW1zJyAnb3JkZXInIGR5bmFtaWMgdXBk
YXRlcyByZWNvbXB1dGVzIHRoZSBwb3NpdGlvbnMgb2YgYXV0b21hdGljYWxseSBwbGFjZWQgZ3Jp
ZCBpdGVtcy4KK1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtaXRlbS1jaGFuZ2Utb3JkZXItYXV0by1mbG93Lmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWl0ZW0tY2hhbmdlLW9y
ZGVyLWF1dG8tZmxvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZDU3MzY5MDc4YzYyNzRiM2I4YmE2YTg3
ZDFkOWU2YjRiNjAzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1n
cmlkLWxheW91dC9ncmlkLWl0ZW0tY2hhbmdlLW9yZGVyLWF1dG8tZmxvdy5odG1sCkBAIC0wLDAg
KzEsNzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bGluayBocmVmPSJyZXNvdXJjZXMv
Z3JpZC5jc3MiIHJlbD0ic3R5bGVzaGVldCI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+CisuZ3JpZCB7CisgICAgZ3JpZC1h
dXRvLWZsb3c6IHJvdzsKKyAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDUwcHggMTAwcHg7CisgICAg
Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0MHB4OworfQorCisjZmlyc3RHcmlkSXRlbSB7CisgICAg
Z3JpZC1yb3c6IGF1dG87CisgICAgZ3JpZC1jb2x1bW46IDE7Cit9CisKKyNzZWNvbmRHcmlkSXRl
bSB7CisgICAgZ3JpZC1yb3c6IDE7CisgICAgZ3JpZC1jb2x1bW46IGF1dG87Cit9CisKKyN0aGly
ZEdyaWRJdGVtIHsKKyAgICBncmlkLXJvdzogYXV0bzsKKyAgICBncmlkLWNvbHVtbjogYXV0bzsK
K30KKzwvc3R5bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdEdyaWRJdGVtc09yZGVyKGZpcnN0
R3JpZEl0ZW1EYXRhLCBzZWNvbmRHcmlkSXRlbURhdGEsIHRoaXJkR3JpZEl0ZW1EYXRhKQorewor
ICAgIHZhciBmaXJzdEdyaWRJdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpcnN0R3Jp
ZEl0ZW0iKTsKKyAgICBmaXJzdEdyaWRJdGVtLnN0eWxlLm9yZGVyID0gZmlyc3RHcmlkSXRlbURh
dGEub3JkZXI7CisgICAgZmlyc3RHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtZXhwZWN0ZWQt
d2lkdGgiLCBmaXJzdEdyaWRJdGVtRGF0YS53aWR0aCk7CisgICAgZmlyc3RHcmlkSXRlbS5zZXRB
dHRyaWJ1dGUoImRhdGEtZXhwZWN0ZWQtaGVpZ2h0IiwgZmlyc3RHcmlkSXRlbURhdGEuaGVpZ2h0
KTsKKyAgICBmaXJzdEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1vZmZzZXQteCIsIGZpcnN0
R3JpZEl0ZW1EYXRhLngpOworICAgIGZpcnN0R3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLW9m
ZnNldC15IiwgZmlyc3RHcmlkSXRlbURhdGEueSk7CisKKyAgICB2YXIgc2Vjb25kR3JpZEl0ZW0g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2Vjb25kR3JpZEl0ZW0iKTsKKyAgICBzZWNvbmRH
cmlkSXRlbS5zdHlsZS5vcmRlciA9IHNlY29uZEdyaWRJdGVtRGF0YS5vcmRlcjsKKyAgICBzZWNv
bmRHcmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtZXhwZWN0ZWQtd2lkdGgiLCBzZWNvbmRHcmlk
SXRlbURhdGEud2lkdGgpOworICAgIHNlY29uZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1l
eHBlY3RlZC1oZWlnaHQiLCBzZWNvbmRHcmlkSXRlbURhdGEuaGVpZ2h0KTsKKyAgICBzZWNvbmRH
cmlkSXRlbS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0LXgiLCBzZWNvbmRHcmlkSXRlbURhdGEu
eCk7CisgICAgc2Vjb25kR3JpZEl0ZW0uc2V0QXR0cmlidXRlKCJkYXRhLW9mZnNldC15Iiwgc2Vj
b25kR3JpZEl0ZW1EYXRhLnkpOworCisgICAgdmFyIHRoaXJkR3JpZEl0ZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGhpcmRHcmlkSXRlbSIpOworICAgIHRoaXJkR3JpZEl0ZW0uc3R5bGUu
b3JkZXIgPSB0aGlyZEdyaWRJdGVtRGF0YS5vcmRlcjsKKyAgICB0aGlyZEdyaWRJdGVtLnNldEF0
dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC13aWR0aCIsIHRoaXJkR3JpZEl0ZW1EYXRhLndpZHRoKTsK
KyAgICB0aGlyZEdyaWRJdGVtLnNldEF0dHJpYnV0ZSgiZGF0YS1leHBlY3RlZC1oZWlnaHQiLCB0
aGlyZEdyaWRJdGVtRGF0YS5oZWlnaHQpOworICAgIHRoaXJkR3JpZEl0ZW0uc2V0QXR0cmlidXRl
KCJkYXRhLW9mZnNldC14IiwgdGhpcmRHcmlkSXRlbURhdGEueCk7CisgICAgdGhpcmRHcmlkSXRl
bS5zZXRBdHRyaWJ1dGUoImRhdGEtb2Zmc2V0LXkiLCB0aGlyZEdyaWRJdGVtRGF0YS55KTsKKwor
ICAgIGNoZWNrTGF5b3V0KCIuZ3JpZCIpOworfQorCitmdW5jdGlvbiB0ZXN0Q2hhbmdpbmdHcmlk
SXRlbXNPcmRlcigpCit7CisgICAgdGVzdEdyaWRJdGVtc09yZGVyKHsgJ29yZGVyJzogJzAnLCAn
d2lkdGgnOiAnNDAnLCAnaGVpZ2h0JzogJzEwMCcsICd4JzogJzAnLCAneSc6ICc1MCcgfSwgeyAn
b3JkZXInOiAnMCcsICd3aWR0aCc6ICc0MCcsICdoZWlnaHQnOiAnNTAnLCAneCc6ICcwJywgJ3kn
OiAnMCcgfSwgeyAnb3JkZXInOiAnMCcsICd3aWR0aCc6ICc0MCcsICdoZWlnaHQnOiAnMCcsICd4
JzogJzAnLCAneSc6ICcxNTAnIH0pOworICAgIHRlc3RHcmlkSXRlbXNPcmRlcih7ICdvcmRlcic6
ICcwJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICcxMDAnLCAneCc6ICcwJywgJ3knOiAnNTAn
IH0sIHsgJ29yZGVyJzogJy0xJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6ICc1MCcsICd4Jzog
JzAnLCAneSc6ICcwJyB9LCB7ICdvcmRlcic6ICcwJywgJ3dpZHRoJzogJzQwJywgJ2hlaWdodCc6
ICcwJywgJ3gnOiAnMCcsICd5JzogJzE1MCcgfSk7CisgICAgdGVzdEdyaWRJdGVtc09yZGVyKHsg
J29yZGVyJzogJzEnLCAnd2lkdGgnOiAnNDAnLCAnaGVpZ2h0JzogJzAnLCAneCc6ICcwJywgJ3kn
OiAnMTUwJyB9LCB7ICdvcmRlcic6ICctMScsICd3aWR0aCc6ICc0MCcsICdoZWlnaHQnOiAnNTAn
LCAneCc6ICcwJywgJ3knOiAnMCcgfSwgeyAnb3JkZXInOiAnMCcsICd3aWR0aCc6ICc0MCcsICdo
ZWlnaHQnOiAnMTAwJywgJ3gnOiAnMCcsICd5JzogJzUwJyB9KTsKKyAgICB0ZXN0R3JpZEl0ZW1z
T3JkZXIoeyAnb3JkZXInOiAnMScsICd3aWR0aCc6ICc0MCcsICdoZWlnaHQnOiAnMTAwJywgJ3gn
OiAnMCcsICd5JzogJzUwJyB9LCB7ICdvcmRlcic6ICctMScsICd3aWR0aCc6ICc0MCcsICdoZWln
aHQnOiAnNTAnLCAneCc6ICcwJywgJ3knOiAnMCcgfSwgeyAnb3JkZXInOiAnMTAnLCAnd2lkdGgn
OiAnNDAnLCAnaGVpZ2h0JzogJzAnLCAneCc6ICcwJywgJ3knOiAnMTUwJyB9KTsKK30KKword2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCB0ZXN0Q2hhbmdpbmdHcmlkSXRlbXNPcmRlciwg
ZmFsc2UpOworPC9zY3JpcHQ+Cis8Ym9keT4KKzxkaXY+VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdy
aWQgaXRlbXMnICdvcmRlcicgZHluYW1pYyB1cGRhdGVzIHJlY29tcHV0ZXMgdGhlIHBvc2l0aW9u
cyBvZiBhdXRvbWF0aWNhbGx5IHBsYWNlZCBncmlkIGl0ZW1zLjwvZGl2PgorCis8ZGl2IHN0eWxl
PSJwb3NpdGlvbjogcmVsYXRpdmUiPgorICAgIDxkaXYgY2xhc3M9ImdyaWQiPgorICAgICAgICA8
ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIGlkPSJmaXJzdEdyaWRJdGVtIj48L2Rpdj4KKyAg
ICAgICAgPGRpdiBjbGFzcz0ic2l6ZWRUb0dyaWRBcmVhIiBpZD0ic2Vjb25kR3JpZEl0ZW0iPjwv
ZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzaXplZFRvR3JpZEFyZWEiIGlkPSJ0aGlyZEdyaWRJ
dGVtIj48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>